summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoravsm <avsm@openbsd.org>2003-05-01 18:59:35 +0000
committeravsm <avsm@openbsd.org>2003-05-01 18:59:35 +0000
commit3b4dcdabe73d1a79e376897419db497ffcf1c81d (patch)
tree775b934dcb1cc47492a6bbb3a8d48fab06b70235
parentcorrect names for architectures; (diff)
downloadwireguard-openbsd-3b4dcdabe73d1a79e376897419db497ffcf1c81d.tar.xz
wireguard-openbsd-3b4dcdabe73d1a79e376897419db497ffcf1c81d.zip
Update to lynx-2.8.4-rel1, patchset d, now with IPv6 as well
Local patches we maintain to the distribution are: - replace unbounded fscanf with fgets (avsm) - spelling fixes (deraadt) - hppa -O0 workaround (mickey) - default to ftp passive (deraadt) - work with non-exec scripts (deraadt,hin,maja) - be more careful with rlogin username (art) - default to our webpage (deraadt) - install helpfiles locally (maja) - mkdtemp temp space directory (art) - install more recent config.guess (avsm) Tested by beck,millert,grange,fries,miod and others, deraadt@ ok
-rw-r--r--gnu/usr.bin/lynx/CHANGES3431
-rw-r--r--gnu/usr.bin/lynx/INSTALLATION586
-rw-r--r--gnu/usr.bin/lynx/LYHelp.hin3
-rw-r--r--gnu/usr.bin/lynx/LYMessages_en.h120
-rw-r--r--gnu/usr.bin/lynx/MAKEFILE.W32744
-rw-r--r--gnu/usr.bin/lynx/Makefile.bsd-wrapper16
-rw-r--r--gnu/usr.bin/lynx/PROBLEMS47
-rw-r--r--gnu/usr.bin/lynx/README15
-rw-r--r--gnu/usr.bin/lynx/VMSPrint.com15
-rw-r--r--gnu/usr.bin/lynx/WWW/FreeofCharge.html26
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTAABrow.c174
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTAAProt.c123
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTAAUtil.c14
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTAccess.c251
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTAccess.h3
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTAnchor.c234
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTAnchor.h35
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTAssoc.c2
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTAtom.c6
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTBTree.c3
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTCJK.h18
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTChunk.c110
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTChunk.h15
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c125
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.h7
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTFTP.c1187
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTFTP.h4
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTFWriter.c12
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTFile.c714
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTFile.h78
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTFinger.c26
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTFormat.c365
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTFormat.h36
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTGopher.c120
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTGroup.c37
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c8
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTList.c46
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTMIME.c1861
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTMIME.h8
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLDTD.c338
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLDTD.h51
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLGen.c98
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTNews.c698
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTNews.h17
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTParse.c137
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTParse.h10
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTPlain.c145
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTRules.c348
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTRules.h29
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTStream.h11
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTString.c283
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTString.h24
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTStyle.c10
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTStyle.h1
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTTCP.c874
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTTCP.h38
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTTP.c1185
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTTelnet.c154
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTUU.c14
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTUtils.h222
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.c447
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.h21
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisProt.c4
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.c54
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h4
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTWAIS.c167
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTWSRC.c41
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HText.h4
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/HTioctl.h11
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/LYLeaks.h53
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/LYexit.h10
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/SGML.c1590
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/SGML.h41
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/UCAux.h6
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/UCDefs.h3
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/UCMap.h3
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/makefile.in114
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/www_tcp.h843
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/Implementation/www_wait.h26
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/djgpp/CommonMakefile10
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/djgpp/makefile44
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/djgpp/makefile.sla8
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/vms/descrip.mms14
-rw-r--r--gnu/usr.bin/lynx/WWW/Library/vms/libmake.com4
-rw-r--r--gnu/usr.bin/lynx/aclocal.m41669
-rw-r--r--gnu/usr.bin/lynx/build-slang.com366
-rw-r--r--gnu/usr.bin/lynx/build.com344
-rw-r--r--gnu/usr.bin/lynx/cfg_defs.sh7
-rw-r--r--gnu/usr.bin/lynx/config.guess1007
-rw-r--r--gnu/usr.bin/lynx/config.hin104
-rw-r--r--gnu/usr.bin/lynx/config.sub529
-rw-r--r--gnu/usr.bin/lynx/configure7576
-rw-r--r--gnu/usr.bin/lynx/configure.in600
-rw-r--r--gnu/usr.bin/lynx/descrip.mms132
-rw-r--r--gnu/usr.bin/lynx/docs/OS-390.announce16
-rw-r--r--gnu/usr.bin/lynx/docs/README.TRST158
-rw-r--r--gnu/usr.bin/lynx/docs/README.defines94
-rw-r--r--gnu/usr.bin/lynx/docs/README.jp133
-rw-r--r--gnu/usr.bin/lynx/docs/README.ssl47
-rw-r--r--gnu/usr.bin/lynx/docs/win-386.announce12
-rw-r--r--gnu/usr.bin/lynx/fixed512.com54
-rw-r--r--gnu/usr.bin/lynx/install.sh16
-rw-r--r--gnu/usr.bin/lynx/intl/ChangeLog64
-rw-r--r--gnu/usr.bin/lynx/intl/VERSION2
-rw-r--r--gnu/usr.bin/lynx/intl/bindtextdom.c16
-rw-r--r--gnu/usr.bin/lynx/intl/cat-compat.c6
-rw-r--r--gnu/usr.bin/lynx/intl/dcgettext.c59
-rw-r--r--gnu/usr.bin/lynx/intl/dgettext.c30
-rw-r--r--gnu/usr.bin/lynx/intl/explodename.c17
-rw-r--r--gnu/usr.bin/lynx/intl/finddomain.c43
-rw-r--r--gnu/usr.bin/lynx/intl/gettext.c6
-rw-r--r--gnu/usr.bin/lynx/intl/gettext.h4
-rw-r--r--gnu/usr.bin/lynx/intl/gettextP.h24
-rw-r--r--gnu/usr.bin/lynx/intl/hash-string.h4
-rw-r--r--gnu/usr.bin/lynx/intl/intl-compat.c4
-rw-r--r--gnu/usr.bin/lynx/intl/l10nflist.c12
-rw-r--r--gnu/usr.bin/lynx/intl/libgettext.h18
-rw-r--r--gnu/usr.bin/lynx/intl/loadinfo.h20
-rw-r--r--gnu/usr.bin/lynx/intl/loadmsgcat.c51
-rw-r--r--gnu/usr.bin/lynx/intl/localealias.c146
-rw-r--r--gnu/usr.bin/lynx/intl/makefile.in55
-rw-r--r--gnu/usr.bin/lynx/intl/po2tbl.sed_in102
-rw-r--r--gnu/usr.bin/lynx/intl/textdomain.c12
-rw-r--r--gnu/usr.bin/lynx/lynx.cfg1854
-rw-r--r--gnu/usr.bin/lynx/lynx.hlp1246
-rw-r--r--gnu/usr.bin/lynx/lynx.man246
-rw-r--r--gnu/usr.bin/lynx/lynx_help/Lynx_users_guide.html2443
-rw-r--r--gnu/usr.bin/lynx/lynx_help/about_lynx.html19
-rw-r--r--gnu/usr.bin/lynx/lynx_help/help_files.txt9
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/alt_edit_help.html35
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/bashlike_edit_help.html215
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/bookmark_help.html6
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/cookie_help.html2
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/dired_help.html60
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/edit_help.html33
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/environments.html16
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/follow_help.html22
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/gopher_types_help.html11
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/history_help.html2
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/keystroke_help.html120
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/movement_help.html8
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/option_help.html161
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/other_help.html126
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/print_help.html5
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/scrolling_help.html12
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/test_display.html2
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/visited_help.html11
-rw-r--r--gnu/usr.bin/lynx/lynx_help/keystrokes/xterm_help.html4
-rw-r--r--gnu/usr.bin/lynx/lynx_help/lynx-dev.html6
-rw-r--r--gnu/usr.bin/lynx/lynx_help/lynx_help_main.html36
-rw-r--r--gnu/usr.bin/lynx/lynx_help/lynx_url_support.html302
-rw-r--r--gnu/usr.bin/lynx/makefile.in136
-rw-r--r--gnu/usr.bin/lynx/mkdirs.sh7
-rw-r--r--gnu/usr.bin/lynx/po/POTFILES.in3
-rw-r--r--gnu/usr.bin/lynx/po/cs.po5496
-rw-r--r--gnu/usr.bin/lynx/po/da.po5522
-rw-r--r--gnu/usr.bin/lynx/po/de.po5626
-rw-r--r--gnu/usr.bin/lynx/po/fr.po10645
-rw-r--r--gnu/usr.bin/lynx/po/ja.po5531
-rw-r--r--gnu/usr.bin/lynx/po/lynx.pot3433
-rw-r--r--gnu/usr.bin/lynx/po/makefile.inn38
-rw-r--r--gnu/usr.bin/lynx/po/nl.po5544
-rw-r--r--gnu/usr.bin/lynx/po/pt_BR.po5519
-rw-r--r--gnu/usr.bin/lynx/po/readme4
-rw-r--r--gnu/usr.bin/lynx/po/ru.po5541
-rw-r--r--gnu/usr.bin/lynx/po/sl.po5304
-rw-r--r--gnu/usr.bin/lynx/po/sv.po5527
-rw-r--r--gnu/usr.bin/lynx/samples/bright-blue.lss67
-rw-r--r--gnu/usr.bin/lynx/samples/cernrules.txt468
-rw-r--r--gnu/usr.bin/lynx/samples/installdirs.html18
-rw-r--r--gnu/usr.bin/lynx/samples/jumpsUnix.html15
-rw-r--r--gnu/usr.bin/lynx/samples/lynx-keymaps34
-rw-r--r--gnu/usr.bin/lynx/samples/lynx.lss1
-rw-r--r--gnu/usr.bin/lynx/samples/mailto-form.pl280
-rw-r--r--gnu/usr.bin/lynx/samples/mild-colors.lss12
-rw-r--r--gnu/usr.bin/lynx/scripts/cfg2html.pl506
-rw-r--r--gnu/usr.bin/lynx/scripts/man2hlp.sh15
-rw-r--r--gnu/usr.bin/lynx/src/AttrList.h17
-rw-r--r--gnu/usr.bin/lynx/src/DefaultStyle.c10
-rw-r--r--gnu/usr.bin/lynx/src/GridText.c6194
-rw-r--r--gnu/usr.bin/lynx/src/GridText.h92
-rw-r--r--gnu/usr.bin/lynx/src/HTAlert.c530
-rw-r--r--gnu/usr.bin/lynx/src/HTAlert.h25
-rw-r--r--gnu/usr.bin/lynx/src/HTFWriter.c357
-rw-r--r--gnu/usr.bin/lynx/src/HTFont.h36
-rw-r--r--gnu/usr.bin/lynx/src/HTForms.h57
-rw-r--r--gnu/usr.bin/lynx/src/HTInit.c395
-rw-r--r--gnu/usr.bin/lynx/src/HTML.c2433
-rw-r--r--gnu/usr.bin/lynx/src/HTML.h23
-rw-r--r--gnu/usr.bin/lynx/src/HTNestedList.h5
-rw-r--r--gnu/usr.bin/lynx/src/LYBookmark.c544
-rw-r--r--gnu/usr.bin/lynx/src/LYBookmark.h11
-rw-r--r--gnu/usr.bin/lynx/src/LYCgi.c67
-rw-r--r--gnu/usr.bin/lynx/src/LYCharSets.c94
-rw-r--r--gnu/usr.bin/lynx/src/LYCharSets.h75
-rw-r--r--gnu/usr.bin/lynx/src/LYCharUtils.c1161
-rw-r--r--gnu/usr.bin/lynx/src/LYCharUtils.h51
-rw-r--r--gnu/usr.bin/lynx/src/LYCharVals.h28
-rw-r--r--gnu/usr.bin/lynx/src/LYClean.c32
-rw-r--r--gnu/usr.bin/lynx/src/LYCookie.c736
-rw-r--r--gnu/usr.bin/lynx/src/LYCookie.h20
-rw-r--r--gnu/usr.bin/lynx/src/LYCurses.c1316
-rw-r--r--gnu/usr.bin/lynx/src/LYCurses.h366
-rw-r--r--gnu/usr.bin/lynx/src/LYDownload.c100
-rw-r--r--gnu/usr.bin/lynx/src/LYEdit.c205
-rw-r--r--gnu/usr.bin/lynx/src/LYEdit.h4
-rw-r--r--gnu/usr.bin/lynx/src/LYEditmap.c814
-rw-r--r--gnu/usr.bin/lynx/src/LYExtern.c360
-rw-r--r--gnu/usr.bin/lynx/src/LYExtern.h7
-rw-r--r--gnu/usr.bin/lynx/src/LYForms.c1798
-rw-r--r--gnu/usr.bin/lynx/src/LYGetFile.c507
-rw-r--r--gnu/usr.bin/lynx/src/LYGetFile.h5
-rw-r--r--gnu/usr.bin/lynx/src/LYGlobalDefs.h366
-rw-r--r--gnu/usr.bin/lynx/src/LYHash.c47
-rw-r--r--gnu/usr.bin/lynx/src/LYHash.h46
-rw-r--r--gnu/usr.bin/lynx/src/LYHistory.c703
-rw-r--r--gnu/usr.bin/lynx/src/LYHistory.h15
-rw-r--r--gnu/usr.bin/lynx/src/LYJump.c40
-rw-r--r--gnu/usr.bin/lynx/src/LYJustify.h79
-rw-r--r--gnu/usr.bin/lynx/src/LYKeymap.c1254
-rw-r--r--gnu/usr.bin/lynx/src/LYKeymap.h149
-rw-r--r--gnu/usr.bin/lynx/src/LYLeaks.c381
-rw-r--r--gnu/usr.bin/lynx/src/LYList.c34
-rw-r--r--gnu/usr.bin/lynx/src/LYList.h1
-rw-r--r--gnu/usr.bin/lynx/src/LYLocal.c1275
-rw-r--r--gnu/usr.bin/lynx/src/LYLocal.h57
-rw-r--r--gnu/usr.bin/lynx/src/LYMail.c2102
-rw-r--r--gnu/usr.bin/lynx/src/LYMail.h33
-rw-r--r--gnu/usr.bin/lynx/src/LYMain.c3070
-rw-r--r--gnu/usr.bin/lynx/src/LYMainLoop.c10542
-rw-r--r--gnu/usr.bin/lynx/src/LYMainLoop.h16
-rw-r--r--gnu/usr.bin/lynx/src/LYMap.c41
-rw-r--r--gnu/usr.bin/lynx/src/LYNews.c218
-rw-r--r--gnu/usr.bin/lynx/src/LYOptions.c3406
-rw-r--r--gnu/usr.bin/lynx/src/LYOptions.h12
-rw-r--r--gnu/usr.bin/lynx/src/LYPrettySrc.c154
-rw-r--r--gnu/usr.bin/lynx/src/LYPrettySrc.h28
-rw-r--r--gnu/usr.bin/lynx/src/LYPrint.c229
-rw-r--r--gnu/usr.bin/lynx/src/LYPrint.h2
-rw-r--r--gnu/usr.bin/lynx/src/LYReadCFG.c1688
-rw-r--r--gnu/usr.bin/lynx/src/LYReadCFG.h11
-rw-r--r--gnu/usr.bin/lynx/src/LYSearch.c373
-rw-r--r--gnu/usr.bin/lynx/src/LYSearch.h2
-rw-r--r--gnu/usr.bin/lynx/src/LYShowInfo.c109
-rw-r--r--gnu/usr.bin/lynx/src/LYShowInfo.h5
-rw-r--r--gnu/usr.bin/lynx/src/LYSignal.h8
-rw-r--r--gnu/usr.bin/lynx/src/LYStrings.c4126
-rw-r--r--gnu/usr.bin/lynx/src/LYStrings.h243
-rw-r--r--gnu/usr.bin/lynx/src/LYStructs.h104
-rw-r--r--gnu/usr.bin/lynx/src/LYStyle.c519
-rw-r--r--gnu/usr.bin/lynx/src/LYStyle.h8
-rw-r--r--gnu/usr.bin/lynx/src/LYTraversal.c26
-rw-r--r--gnu/usr.bin/lynx/src/LYUpload.c48
-rw-r--r--gnu/usr.bin/lynx/src/LYUtils.c3106
-rw-r--r--gnu/usr.bin/lynx/src/LYUtils.h112
-rw-r--r--gnu/usr.bin/lynx/src/LYexit.c43
-rw-r--r--gnu/usr.bin/lynx/src/LYrcFile.c1638
-rw-r--r--gnu/usr.bin/lynx/src/LYrcFile.h14
-rw-r--r--gnu/usr.bin/lynx/src/TRSTable.c1999
-rw-r--r--gnu/usr.bin/lynx/src/TRSTable.h49
-rw-r--r--gnu/usr.bin/lynx/src/UCAuto.c439
-rw-r--r--gnu/usr.bin/lynx/src/UCAux.c103
-rw-r--r--gnu/usr.bin/lynx/src/UCdomap.c643
-rw-r--r--gnu/usr.bin/lynx/src/UCdomap.h120
-rw-r--r--gnu/usr.bin/lynx/src/Xsystem.c626
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/README.format2
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/UCkd.h3
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/build-chrtrans.com91
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/build-header.com1
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/cp1250_uni.tbl41
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/cp1252_uni.tbl28
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/cp1253_uni.tbl4
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/cp437_uni.tbl39
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/cp737_uni.tbl24
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/cp850_uni.tbl54
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/cp852_uni.tbl61
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/cp869_uni.tbl4
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/def7_uni.tbl218
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/iso01_uni.tbl26
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/iso02_uni.tbl40
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/iso05_uni.tbl41
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/iso07_uni.tbl74
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/iso09_uni.tbl32
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/jcuken_kb.h2
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/koi8r_uni.tbl33
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/mac_uni.tbl4
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/makefile.dos8
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/makefile.in15
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/makeuctb.c248
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/mnem2_suni.tbl2
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/rot13_kb.h2
-rw-r--r--gnu/usr.bin/lynx/src/chrtrans/yawerty_kb.h2
-rw-r--r--gnu/usr.bin/lynx/src/descrip.mms15
-rw-r--r--gnu/usr.bin/lynx/src/makefile.dos176
-rw-r--r--gnu/usr.bin/lynx/src/makefile.dsl157
-rw-r--r--gnu/usr.bin/lynx/src/makefile.in82
-rw-r--r--gnu/usr.bin/lynx/src/makefile.wsl128
-rw-r--r--gnu/usr.bin/lynx/src/structdump.h34
-rw-r--r--gnu/usr.bin/lynx/test/c1.html144
-rw-r--r--gnu/usr.bin/lynx/test/sgml.html1
-rw-r--r--gnu/usr.bin/lynx/test/unicode.html2
-rw-r--r--gnu/usr.bin/lynx/userdefs.h461
302 files changed, 124469 insertions, 41464 deletions
diff --git a/gnu/usr.bin/lynx/CHANGES b/gnu/usr.bin/lynx/CHANGES
index c64f985ca44..0f9dfbb45e6 100644
--- a/gnu/usr.bin/lynx/CHANGES
+++ b/gnu/usr.bin/lynx/CHANGES
@@ -1,6 +1,3425 @@
Changes since Lynx 2.8 release
===============================================================================
+extracted from 2002-09-12 (2.8.5dev.9)
+* correct inverted logic of restrictions table which made "-restrict=default"
+ provide incorrect values for several items. This was broken in 2.8.4dev.19
+ (reported by Jeff Long <long@ukans.edu> and RobertM <robm@bob.bofh.org>) -TD
+* correct check for calling endwin() to allow for curses implementations
+ without newterm (report/patch by Brett Lymn).
+* escape blanks and other non-7bit graphic characters in startfile and similar
+ addresses to guard against interpreting the address as multiple lines
+ during a GET, etc (report by Ulf Harnhammar <ulfh@Update.UU.SE>) -TD
+
+extracted from 2001-10-06 (2.8.5dev.3)
+* modify LYtouchline() to avoid using wredrawln() for ncurses, since the
+ LYwin variable may be a pad much wider than the screen, which is not handled
+ properly (report by Karl Eichwalder <keichwa@gmx.net>) -TD
+* correct beginning configure script, which was supposed to remove
+ config.cache, but did not, due to a misplaced line when it was added
+ 1998-06-04 (prompted by a report by Fr3dY <fr3dy@retemail.es> that the
+ checks for srand/rand did not work) -TD
+
+extracted from 2001-08-15 (2.8.5dev.2)
+* work around defect in move_anchors_in_region() and related logic by changing
+ default for nested-tables to FALSE when Lynx is not configured for
+ color-style. The problem is that when an anchor is shifted right by
+ nested-table logic, if it has a <BR> near the beginning of a table cell and
+ it happens to be split across a line, its size will not be adjusted properly
+ (report by Hataguchi Takeshi) -TD
+* correct logic used for trimming TEXTAREA introduced in 2.8.4pre.3, which did
+ not trim carriage-return characters if TRIM_INPUT_FIELDS was false.
+ (report by Hataguchi Takeshi <patakuti@t3.rim.or.jp>) -TD
+* correct a bug in search logic which happens with pages shorter than the
+ screen, due to improper starting-line value sent to search function. Fixed
+ by adding checks in www_search_backward() and www_search_foreward(), (report
+ by -Frederic L W Meunier) -TD
+
+extracted from 2001-07-24 (2.8.5dev.1)
+* modify GetChar() definition for PDCurses to ignore key-modifiers which are
+ passed back from getch() as if they were key codes. Those interfere with
+ shifted commands such as 'Q' -TD
+* modify parse_style() function to operate on a copy of its parameter, to avoid
+ changing it. Otherwise, when parse_style() is executed as a side effect of
+ start_curses(), its data is modified and not valid on successive calls.
+ This bug existed prior to 2.8.4dev.17 -TD
+* set return value of edit_current_file() to true if the file is edited. This
+ forces a reload for example if one edits the current html file, and is needed
+ to make PDCurses repaint the screen as well (report by vtailor@gte.net,
+ bug introduced in 2.8.4dev.21) -TD
+* add ifdef for wresize() to accommodate FreeBSD 3.x which has resizeterm() but
+ not wresize(). Also, use a 'long' rather than 'attr_t'. These changes are
+ needed to build with the 1.8.6ache patches to ncurses (report by Matt
+ <matt@greenviolet.net>) -TD
+
+2001-07-17 (2.8.4rel.1)
+* remove comment in README.ssl directing people to
+ http://www.moxienet.com/lynx/, since that page is moot with 2.8.4 (report by
+ DK)
+* add an ifdef in CF_CURSES_FUNCS configure macro to avoid confusing ncurses'
+ term.h with other versions -TD
+* update URL for zlib -Frederic L W Meunier
+
+2001-07-14 (2.8.4pre.5)
+* document CHARSETS_DIRECTORY and CHARSET_SWITCH_RULES in lynx.cfg -IZ
+* add a fallback in _Switch_Display_Charset() if no CHARSETS_DIRECTORY was
+ specified -IZ
+* ensure that config variable names in LYReadCFG.c are in alphabetic order,
+ though only the first character matters (report by IZ) -TD
+* updated notes on DOS in INSTALLATION -DK
+* modify ifdef in HTTP.c to build with configure --with-ssl --disable-news
+ (report by Frederic L W Meunier) -TD
+
+2001-07-10 (2.8.4pre.4)
+* correct red/blue color swapping for PDCurses when built on Unix, which uses
+ X11 -TD
+* correct order of checks for wrapping in www_search_forward() and
+ www_search_backward(), which would allow an infinite loop if there were no
+ anchors on the current page (report by Frederic L W Meunier) -TD
+* add a missing chunk to reverted change of SGML_character()
+ -nsh@horae.dti.ne.jp
+
+2001-07-07 (2.8.4pre.3)
+* review/add descriptions of new command-line options in lynx.man, lynx.hlp and
+ Lynx_users_guide.html -TD
+* update da.po, ja.po, ru.po, sv.po from
+ http://www.iro.umontreal.ca/contrib/po/maint/lynx/
+ (report by JS) -TD
+* add command-line option -curses-pads which can be used to disable the
+ left/right scrolling logic. This is used for testing, e.g., the repaint
+ bug reported below -TD
+* remove logic in lynx_force_repaint() which reset the window background, since
+ it does not work with the logic used to implement left/right scrolling.
+ Retested older versions of ncurses and did not find a case where this was
+ needed after all (report by IZ) -TD
+* revert dev.21 change to SGML_character() S_equals case, which has undesirable
+ side effects regarding spacing around '=' (report by nsh@horae.dti.ne.jp) -TD
+* define additional -trace-mask option, 1=SGML -TD
+* add -trim_input_fields command-line option and corresponding
+ TRIM_INPUT_FIELDS to lynx.cfg to suppress trimming of TEXT and TEXTAREA
+ fields in forms. This does not retain trailing blank lines in a TEXTAREA;
+ more work would be needed to do that (reported by VH, most browsers appear to
+ retain trailing blanks) -TD
+* modify parsing of "<script>...</script>" to allow "<!-- ... -->" comments
+ in SGML_character(). Though the HTML 4.0 spec is fairly clear, other
+ browsers (and some webpages) assume that "</" does not have to be escaped
+ when it appears in a script which is commented to avoid confusion with older
+ browsers. This change doesn't ensure that the comment is at the beginning
+ of a line, since that's awkward to do with SGML_character(), and also leaves
+ the script in a comment which works for lynx since lynx does not interpret
+ it anyway -TD
+* remove redundant enum identifiers in typedefs -TD
+* modify parse_attributes() in LYStyle.c to allow video attributes such as bold
+ and reverse to be combined with colors, used this to debug problem with
+ <script> and comment -TD
+* improve logic for nested-tables to handle cases such as www.tin.org -IZ
+ TRST ignores the horizontal alignment *inside* a multi-line cell of a table.
+ This limitation, in conjunction with the nested-tables modifications does not
+ work well when text with a horizontal alignment (e.g., <ul>) is put in a
+ table cell. This patch introduces a *limited* logic to take this info into
+ account. It should work OK as far as the last non-empty line of the cell is
+ ended by a "line-end" command, not by a </td> (this is often the case with
+ contents using horizontal formatting).
+* updated URLs for ncurses (report by DK) -TD
+* updated samples/bright-blue.lss -IZ
+* make definition of $(SHELL) in makefile.in's consistent, in terms of
+ CONFIG_SHELL, since the configure script no longer uses 'include', and
+ this creates some problem with nonstandard shells (report by IZ) -TD
+* update/extend lists in lynx_help_main.html -Frederic L W Meunier
+* add note about lynx.cfg mouse and color configuration to user's guide -PW
+* document -cmd_log and -cmd_script options in user's guide (Michael Warner).
+
+2001-06-10 (2.8.4pre.2)
+* corrected order of parameters of is_prefix() function in the
+ scan_cookie_sublist() function, broken in dev.21 changes (report by Ken Scott
+ <admin@shellworld.net>) -TD
+* add a fallback definition for SA_LEN(), to build with glibc 2.2 (report by
+ Mark Sutton <mes@lazo.ca>, patch by Arkadiusz Miskiewicz at
+ http://cvs.pld.org.pl/SOURCES/lynx-SA_LEN.patch?rev=1.1)
+* modify ifdef in HTCheckForInterrupt() to build with DJGPP -DK
+* remove include for <pdcurses.h>, use <curses.h> which is the default for
+ PDCurses - DK
+* reviewed/reverted some changes from dev.20 which changed explicit "r", "w",
+ and "a+" fopen modes to TXT_R, TXT_W and TXT_A, where they relied on the
+ default mode set via SetDefaultMode(). With DJGPP, files containing special
+ graphics such as README's might not otherwise display, for example (report by
+ DK) -TD
+
+2001-06-03 (2.8.4pre.1)
+This version has been test-built on Linux (BSD curses, ncurses,
+slang), Tru64 5.1 (cc, curses/ncurses/slang), OpenVMS, OS/2 EMX, win32
+(both Visual C++ 4.1 and 5.0 as well as Borland C++), AIX 4, HPUX 11,
+Solaris 8. Recent builds include SunOS 4.1.4 (cc and gcc,
+curses/ncurses/slang), Solaris 2.5.1 (cc and gcc,
+curses/ncurses/slang) and IRIX 6.5 (cc and gcc, curses/ncurses). Less
+recently, FreeBSD 4.1, NetBSD 1.5 and OpenBSD 2.8 (curses/ncurses).
+
+2001-06-02 (2.8.4dev.21)
+* regenerated lynx.pot and resync'd the .po files against it with msgmerge,
+ formatted to 132 columns to minimize line-breaks, for ease of comparison -TD
+* add a few more #undef's to work with glibc 2.1.3 -TD
+* include <signal.h> before <curses.h> to work around bug in glibc 2.1.3, which
+ apparently was not used to build a system before release. Note that the
+ preferred solution is to patch /usr/include/sys/ucontext.h to avoid defining
+ ERR, which is defined by all versions of curses.h (report by Karl Eichwalder
+ <ke@suse.de>) -TD
+* change lynx.cfg entry for COLOR #6 to brightred/black, which is what
+ Slackware uses, to make links more visible -TD
+* remove several chunks of dead (#if 0) or commented-out code, especially in
+ TRSTable.c, except a few used for debugging -TD
+* add checks for potential buffer overflow in increment_tagged_htline() -TD
+* consolidate scattered calls to editor with function edit_temporary_file(),
+ which fixes terminal modes when editing TEXTAREA -TD
+* modify LYisNonAlnumKeyname(), etc., using new functions LYindex2MBM() and
+ LBMBM2index() so that it should work with EBCDIC, as well as similar case of
+ translation in LYBookmarks.c which assume that there are no gaps in the
+ coding for the alphabet -TD
+* workaround in lynx_nl2crlf() for ncurses, which did not refrain from using
+ cursor-down if it was set to a newline when nonl() was specified -TD
+* replace permissions[] array in LYLocal.c because cygwin (mis)implements the
+ S_xxx values as a function -TD
+* add ENABLE_LYNXRC setting to lynx.cfg, which allows one to modify the list
+ of values which are visible on the O'ptions form which can be saved to the
+ .lynxrc file -TD
+* check the width of entries displayed by LYOptions.c non-forms
+ boolean_choice(), to pad shorter ones with spaces -TD
+* change type of LYMultiBookmarks to integer, combine with LYMBMAdvanced, to
+ use enumMultiBookmarks to set it, making its configuration more easily
+ table-driven -TD
+* make the style of menu border/bg/entry/number/active-entry and scroll
+ indicator settable -IZ
+ The names in lynx.lss are
+ menu.frame menu.bg menu.n menu.entry menu.active menu.sb
+* modify cookie path prefix-comparison to ignore a trailing slash, e.g.,
+ /group/sftvnews/ versus /group/sftvnews (workaround for LV visiting
+ http://groups.yahoo.com/group/sftvnews) -TD
+* cookie path= should be a prefix of the request-URI path, so do not truncate
+ request-URI path in LYSetCookie() [we got mistaken "invalid cookie path=..."
+ prompt in some cases previously] -LP
+* parameterized the logic around URL_edit_history to add MAIL_edit_history,
+ used to store addresses for Printing Options, mail file to user (request by
+ LV) -TD
+* check, fix minor problems with some .po files based on check_po script
+ (mentioned on mutt-dev mailing list by Bjorn Jacke <bjacke@suse.de>) -TD
+* fixes to build with U/Win -TD
+* check width in LYpaddstr(), truncate the string if needed. This fixes a
+ case where items in very wide popup menus would wrap, e.g., the EXTERN_LINK
+ menu -TD
+* add a configure checks for term.h, to work around broken package for ncurses
+ on cygwin -TD
+* combine checks for useragent into one function LYCheckUserAgent() -TD
+* add runtime toggle for EXP_NESTED_TABLES, bind this to "~" (see www.tin.org
+ for comparison) -TD
+* regenerate ja.po from lynx-2.8.3rel1.ja.po using gettext 0.10.37 and libiconv
+ 1.6.1 (updated by Masayuki Hatta <mhatta@po.airs.net>)
+* changed -DNCURSES in DOS makefile to -DPDCURSES -TD
+* changes for DOS makefiles with DJGPP -DK
+ These changes are for DOS under DJGPP with Internationalization and SSL. The
+ openssl port for DOS is dependent on WATT32, so the link order for libraries
+ has to be set appropriately. Made EXP_NESTED_TABLES the default and changed
+ the default locations for WATT-32 and PDCURSES to top-level directories. The
+ DOS port of gettext is now dependent on libiconv.a to convert character sets
+ as the .mo file is read. The format for the makefile in WWW/Library/djgpp
+ now reflects the changes previously made in the src makefile.
+* improve definition of CTRACE, making it an expression again as it was before
+ dev.20 -PG
+* move logic for cookie_domain_flag_set() out of LYReadCFG.c into LYCookie.c
+ rewriting it to make it table-driven, where it is now shared with LYrcFile.c
+ -TD
+* rewrote LYrcFile.c, making it table-driven as is LYReadCFG.c -TD
+* reviewed/corrected several pointer-mismatches in PARSE_xxx() macro usage -TD
+* corrected return-types of several functions in LYLocal.c, which were given as
+ BOOLEAN though they return a signed integer -TD
+* add DIRED support to makefile.bcb -TD
+* filter the list of mime types sent in "Accept:" header for GET, to eliminate
+ repeated or shadowed types, using new function HTFilterPresentations()
+ (addresses Debian bug report #41594) -TD
+* fix several typos in Lynx help-files -LV
+* change most configure script C-preprocessor assignments to $CFLAGS to
+ $CPPFLAGS, and modify logic of $TRY_CFLAGS to use CF_ADD_CFLAGS, which
+ does the same thing -TD
+* enable scroll indicators on the menus - shown if there is a part of menu
+ before/after the visible area -IZ
+* modify the context-sensitive mouse-menu, making it easier to to configure by
+ reorganizing the tables used to generate the popup menu -IZ
+* correct a couple of places in form_getstr() when keys were "generated"
+ instead of actions, which broke mouse-navigation in input fields -IZ
+* fix return value of Stbl_finishTABLE(), retesting curpos whose value may have
+ been altered, e.g,. in split_line(), causing a cell to overflow to the right
+ of the visible area (even if line wrap is requested) -IZ
+* change the logic of -display-charset: before it was sometimes descriptive
+ (here is the charset, behave as if it was used for display), sometimes
+ prescriptive (make the display to use charset if you can). Now it is only
+ descriptive. One is forced to use the 'O'ptions to manually load a different
+ font -IZ
+* move $(DEFS) and $(CHARSET_DEFS) into $(CPP_OPTS) in src/makefile.in -TD
+* renamed -blink_is_boldbg command-line option to -blink, corrected ifdef's -TD
+* implement -blink_is_boldbg option for OS/2 EMX and ncurses, then integrated
+ some ifdef's to merge with equivalent slang code -IZ
+* rewrote hardcoded if/then/else chains in handle_LYK_SHIFT_LEFT()
+ handle_LYK_SHIFT_RIGHT() to repeat_to_delta() function -TD
+* implement a key-accelerator for shift-left/right commands, i.e., repeating
+ the shift command increases the amount by which the screen is shifted -IZ
+* modify ifdef in handle_LYK_LINEWRAP_TOGGLE() to use popup menus for each
+ configuration rather than limit it only to mouse-supported ones such as
+ ncurses or PDCurses -TD
+* changes to left/right scrolling to limit its effect to tables (IZ):
+ + rename LYlineWrap variable (used to denote the column at which content is
+ wrapped) to LYwideLines (used to denote the opposite sense: true if
+ wrapping is disabled).
+ + add global variable LYtableCols to control the column-limit for tables.
+ The two variables LYLineWrap and LYtableCols have the same effect as did
+ altering LYlineWrap and LYcols, but are limited to table layout.
+ + modify handle_LYK_LINEWRAP_TOGGLE(), use a popup menu to set LYwideLines
+ and LYtableCols. The latter is set to a positive integer, in units of
+ 1/12 of the physical screen width.
+ + modify GridText.c, replacing LYcols with new macros DISPLAY_COLS and
+ WRAP_COLS.
+ + keep scrollbar on the right margin of the screen when the contents are
+ shifted left or right.
+* modify makefile.bcb, add (tested) commented-out lines for building with
+ color-styles -TD
+* modify makefile.msc and makefile.bcb, add (tested) commented-out lines for
+ building with winsock2 -TD
+* add a configure check for napms(), use this if available to support subsecond
+ delay times for INFOSECS, MESSAGESECS, ALERTSECS -TD
+* rewrote www_user_search() to support both forward and backward search.
+ Bound backward-search to 'N' -TD
+* split-out anchor_has_target() and link_has_target() to separate the search
+ loops from the search comparisons -TD
+* reduce some clutter with LYno_attr_strstr() and LYno_attr_mb_strstr() macros,
+ which combine the caseless/case-sensitive functions -TD
+* modify S_equals in SGML_character() to recover when no attribute value
+ is given, e.g., if "alt=" is followed by whitespace. Before, the next
+ attribute was used for the missing value -TD
+* replace call to LYRemoveBlanks() from LYLegitimizeHREF(), which had the
+ effect of removing all blanks from HREFs, with the less drastic step of
+ reducing newlines and tabs to spaces and trimming leading/trailing blanks.
+ Though they do not belong there, it is more likely that the HREF will work
+ with embedded blanks retained -TD
+* add a configure check for BSD- and SYSV-style curses touchline function,
+ needed to build with NetBSD 1.5 curses which has a partial implementation
+ of X/Open curses (report by JS) -TD
+* correct insert_blanks_in_line(), which did not copy trailing style codes
+ such as stop-underline, causing "lynx -dump -with_backspaces" to produce
+ some odd effects -TD
+* modify configure script macro CF_NCURSES_VERSION to define NCURSES, in case
+ it is used in the default screen setting, since lynx uses this definition in
+ some places rather than NCURSES_VERSION to distinguish it from other curses
+ implementations -TD
+* modify configure script macro CF_NCURSES_CPPFLAGS to check for ncurses.h
+ before curses.h, and to specifically check for <ncurses/ncurses.h>, to avoid
+ spurious matches against a /usr/include/ncurses.h, to workaround problems
+ with obsolete versions of ncurses on FreeBSD and NetBSD where the current
+ version is often available only as a "port" (reports by Jim Spath,
+ Michael Warner) -TD
+* add fallback definition for SLSMG_xxx_CHAR symbols which may be missing in
+ older versions of slang (reported by Eduardo Chappa) -TD
+* update config.guess, config.sub
+
+2001-04-01 (2.8.4dev.20)
+* rename KEYMAP 'EXTERN' to 'EXTERN_LINK', adding 'EXTERN_PAGE'. Existing
+ keymaps should work since 'EXTERN_LINK' matches first. EXTERN_PAGE runs the
+ external command on the current page. Map comma (,) to EXTERN_PAGE -TD
+* replace most calloc calls with typecalloc or typecallocn -TD
+* modify LYExtern.c to recognize if more than one EXTERN command has been
+ defined in lynx.cfg for a given name, and allow the user to select one
+ command from a popup menu -TD
+* split-out code that opens lynx.cfg and lynx.lss as LYOpenCFG() function,
+ making that check if the given pathname is absolute. If not, it attempts
+ to look in the same directory as the parent file (when processing includes),
+ or the directory of the default config file -TD
+* replace some explicit "r", "w", and "a+" fopen modes with TXT_R, TXT_W and
+ TXT_A, add/use corresponding BIN_R, BIN_W, BIN_A definitions. Correction to
+ OpenHiddenFile(), which would have appended text to a binary file -TD
+* combined lynx_html_item_type and lynx_printer_item_type structs as
+ lynx_list_item_type to simplify LYReadCFG.c and incidentally fixing a bug in
+ add_printer_to_list by merging it with add_item_to_list -TD
+* implement a simple workaround for staircased messages from running xli as an
+ external viewer, with lynx_nl2crlf() function -TD
+* add bright-blue.lss sample (from IZ) -TD
+* modify makefile.in's to use symbol _O for object suffix to allow simple
+ override for OS/2 EMX -Zomf compiler option (request by IZ) -TD
+* add HAVE_LYHELP_H definition in config.hin and use that in LYGlobalDefs.h
+ to workaround misuse of HAVE_CONFIG_H in makelynx.bat -TD
+* work-around in LYrefresh() when curses pads are used, for special case where
+ cursor is not set properly when prompting with long subject line for mailto
+ URL -TD
+* eliminate some pointer mismatch compiler warnings in LYEditInsert() for
+ EXP_KEYBOARD_LAYOUT configuration -TD
+* improve handling of tables with respect to bad HTML. Also took an
+ opportunity to macroize a couple of places which missed in
+ unobfuscation-of-faking <td></td> (this faking happens when line break
+ happens in a non-first column of a table) -IZ
+ For example:
+ <TR>
+ <TD>
+ <FORM ACTION="FrameWork.class" METHOD="post">
+ y
+ </TD>
+ <TD>
+ <DIV>
+ x
+ </DIV></FORM>
+ </TD>
+ </TR>
+ Note FORM which spans cells. -trace'ing it gives very unintuitive
+ results: it skips </TD> inside FORM, but not <TD>. Then it supplied
+ </TD> when the FORM ends.
+* repair treatment of colspans in TRST, making it work again in one of the
+ special cases it worked before. Another bug was in interaction of
+ justification and tables -IZ
+* marked more TRACEs in TRST as "BUG"s -IZ
+* TRST would sometimes produce non-intuitive results if <td> follows </tr>.
+ Add error recovery for this case -IZ
+* corrections for nested-table configuration -IZ
+ + make trailing <BR> in table cells "behave well" again (the following cell
+ would not be horizontally offset).
+ + fix highlighting of multiline links inside tables, and a "80M tracelog" bug
+ (due to a misprint update of the enclosing table was performed once-per-row
+ instead of once-per-table). Extra updates would not hurt, but led to
+ slowdowns and quadratic-size logs.
+ + fix a special case with table-in-table for partial-display
+* resizing a window on a console may lead to a switch of the character-cell
+ size. The "downloaded font" loaded during an auto-switch of display-charset
+ may be no longer valid. In this case, force a re-download of the suitable
+ font for the current charcell size -IZ
+* add reverse-video style for forwbackw.arrow to lynx.lss -TD
+* while an error in .lynx-keymaps is fatal, but a more or less equivalent error
+ in the KEYMAP section of lynx.cfg is benign. Make them both benign -IZ
+* change remaining uses of lookup_keymap(LYK_xxx) to LAC_TO_LKC0(LYK_xxx) -TD
+* modify set_clicked_link() to return lynx keycodes rather than character
+ values -IZ
+* remove line_for_char() function since it is used for HTLine.start
+ computations -TD
+* several changes to GridText.c -IZ
+ + '#' (shown at the UL corner when there is a toolbar) is shown even at the
+ beginning-of-the document.
+ + with mouse enabled, the first 6 chars in the UL corner were "always"
+ sensitive to Click-1, behaving as PREV_DOC (usually on Left). This patch
+ changes this logic (for color-style):
+ If '#' is shown there, clicking on it behaves as pressing #;
+ Clicking on the next 6 chars behaves as PREV_DOC/NEXT_DOC (3+3);
+ + if you define a style for forwbackw.arrow, then suitable arrows are shown
+ in these 3+3 positions; in fact they are shown only if it makes sense to do
+ PREV_DOC/NEXT_DOC, providing additional feedback.
+ + remove the first empty line shown on any HTML document.
+ + correct an off-by-one error in the removal-of-zero-length-markup logic.
+ Due to this bug, zero-length markup was never removed, which led to
+ accumulation of style change entries, eventually to a buffer overflow. At
+ this moment lynx color-style engine would give up, resulting in
+ incomprehensible ocean of colors on the display. To demonstrate, make a
+ select entry with more than 46 entries. [My auto-display-charset logic
+ added 2 new encodings to the table of Lynx, bringing the number to 46 on
+ the 'o'ption form. ;-]
+ + fixes a bug with incorrectly calculated width of a numeric tag [12]
+ as far as 12 is 10 or more (still fixes Debian #68542).
+ + remove unused members from HTLine struct.
+ + make variables underline_on and bold_on private.
+ + rewrote insert_blanks_in_line(), splitting out move_anchors_in_region().
+ + make split_line() easier to maintain by adding variables to represent
+ common subexpressions, e.g., s_post, s_pre.
+ + use set_style_by_embedded_chars() in split_line() to simplify/improve test
+ for whether lynx should add a bold/underline control.
+ + recode to eliminate HTLine.start
+ + recode to eliminate HTLine.chars
+ + several changes to split_line(), using pointers to HTChangeStyle structs
+ rather than array indices.
+* adjust some ifdef's to make configure --disable-trace compile -TD
+* correct allocation size in mailcap_substitute(), which did not count the
+ trailing null -TD
+* add configure --enable-vertrace option, to put __FILE__ and __LINE__ into
+ trace log -PG
+* improve description of USE_MOUSE in lynx.cfg -PW
+* fix a few warnings from antic (unreached statements due to quirks of ifdef's,
+ incorrectly-indented code) -TD
+* eliminate a few references to USE_HASH and LINKEDSTYLES in documentation -TD
+* fix a couple of compiler warnings for SCO (report by BL)
+* fix a comparison in HTChunkPutUtf8Char() to work with EBCDIC -PG
+* fix a typo in LYCharUtils.c CTRACE macro, amend tracing to avoid suppressing
+ a related user message -PG
+* change CF_TERMCAP_LIBS configure macro to warn rather than exit with an error
+ if it cannot find the libraries it is looking for. This allows one to
+ configure with the slang library on systems without a termcap library (report
+ by Atsuhito Kohda) -TD
+
+2001-02-26 (2.8.4dev.19)
+* add experimental configure option for post-dev.16 TRST changes by IZ
+ (--enable-nested-tables), ifdef'd with EXP_NESTED_TABLES -TD
+* correct a couple of places that used attrset() rather than wattrset(), which
+ caused the status line to lose color when configured for curses pads but not
+ using color-style (report by Fr3dY <fr3dy@retemail.es>) -TD
+* add a restriction for the chdir command, so it is not normally enabled in
+ anonymous mode -TD
+* reduce putenv logic for presetting $LINES and $COLUMNS to a special case
+ for MVS -PG
+* enable pasting an URL into Lynx (similar to 'g'), and improves the code to
+ copy an URL from Lynx -IZ
+* remove arbitrary restrictions on the size of text to be pasted. It also
+ makes a quadratic algorithm into a linear one. Also, it may remove many bugs
+ when the text to paste contains non-printable chars. Not tested with Unicode
+ and on Win* -IZ
+* implement an action NEXT_DOC, which undoes what PREV_DOC (usually on the
+ Left-arrow key) does -IZ
+ Possible enhancements:
+ a) make HISTORY show the position on the (no more!) "stack".
+ b) several places in the source use the value of nhist (they scan
+ history?). Make nhist_extra public, and check whether these
+ places want nhist + nhist_extra instead.
+ c) Currently LYpop() and (some) LYpush() erases "the tail" of the
+ stack. Maybe some callers would prefer a different semantic...
+* correct some logic related to EXP_READPROGRESS -IZ
+* change LYE_xxx symbols to an enum LYEditCodes -TD
+* replace some WIN_EX ifdef's by CAN_CUT_AND_PASTE. Enable cut and paste on
+ OS/2 -IZ
+ For example, in the keymap file:
+ setkey "\200\4" LAC:DO_NOTHING:PASTE # S-insert
+ setkey "^(kIC)" LAC:DO_NOTHING:PASTE # S-insert
+* enable automatic switching of display charsets -IZ
+ Currently, it is supported under OS/2 only. A couple of lines should make it
+ work in LINUX too: express the semantic of _Switch_Display_Charset() in
+ terms of the existing UCChangeTerminalCodepage.
+ For example, in lynx.cfg:
+ CHARSETS_DIRECTORY:I:/get/tfont10/dir1
+ CHARSET_SWITCH_RULES: koi8-r ISO-8859-5 windows-1251 cp866u KOI8-U :cp866, iso-8859-1 windows-1252:cp850
+ The first variable may be not needed outside of OS/2 (the directory which
+ contains glyph tables, as generated/usable with tfont). [Used for
+ full-screen sessions only.] The second variables may go at the future, when
+ Lynx knows how to auto-deduce it itself. Format of CHARSET_SWITCH_RULES
+ source1 source2 source3 : dest1, source4 source5 : dest2
+* move a call for _scrsize() from LYSystem() to size_change(), to fix problem
+ with OS/2 EMX related to screen-size changes -IZ
+* correct a bug in TRSTable.c which left a pointer into a chunk which was
+ reallocated elsewhere (report by Robert Mognet <rmgnt@surfree.com>) -TD
+* make parse_restrictions() warn about keywords it does not recognize -TD
+* rewrote restrictions_fun() in LYMain.c, making it use print_help_strings(),
+ to show the actual restriction values, and listing restrictions that are not
+ documented in the -restrictions message -TD
+* if find-leaks if enabled, free the 'line' variable in HTReadProgress() -TD
+* if find-leaks is enabled, undefine SAVE_TIME_NOT_SPACE in HTString.c to avoid
+ seeing spurious leaks in HTSprintf/HTSprintf0 -TD
+* add command-line option -trace-mask to specify optional traces. Defined
+ these: 2=color-style, 4=TRST -TD
+* improve ifdef's for --disable-trace configure option, eliminating more unused
+ code when NO_LYNX_TRACE is defined -TD
+* make ifdef's for NCURSES and resizeterm consistent -TD
+* add a call to wresize() after resizeterm() in case user resizes screen in
+ ncurses pad configuration (report by IZ) -TD
+* change entry for "bibp" restriction to "goto_bibp" for consistency with the
+ other goto_xxx restrictions, and use CAN_ANONYMOUS_GOTO_BIBP (report by
+ Robert Cameron) -TD
+* add table entries for goto_xxx restrictions, which replace assignments
+ overlooked in conversion to table in dev.18 (report by Robert Cameron) -TD
+
+2001-02-12 (2.8.4dev.18)
+* change LYLineEditors[] to unsigned char since values are out of range for
+ signed chars on Solaris -TD
+* correct a memory leak in HTStat() from mis-patch for Win32 -TD
+* modify fancy_mouse() logic for ncurses to allow the user to quit a menu by
+ clicking outside the menu -IZ
+* allow a different approach to the problem: how to enter a keyboard
+ navigation command when you are in an editing mode. A new EDIT-time action
+ is introduced: LYE_STOP. Use it like this:
+ KEYMAP:^[:INTERRUPT:STOP
+ The action behaves as if -tna is temporarily switched on: your edit is
+ committed, and you go into the non-edit mode - until you press Enter on an
+ edit field again (or switch to a different document), when this temporary
+ switch to -tna is terminated. If the "current" edit field has a different
+ style than the "active" edit field, you get an additional feedback. Anyway,
+ the status line shows a correct info about the current mode.
+ In -tna mode this behaves as the usual end-of-edit action -IZ
+* make bindings for C-w and C-x C-w do not work for form input fields -IZ
+* add etags target to top-level makefile.in -IZ
+* add some traces to make color style code easier to debug -TD
+* restore commented-out call to HText_cancelStbl() in HTML_TABLE case in
+ HTML_start_element() from IZ's changes, which is needed for nested table
+ alignment. The colors shown in deja-news are incorrect however because color
+ styles are not picking up the </tr> and </table> tags properly, and a few
+ tables are misaligned relative to dev.16, more analysis needed -TD
+* change LYHash.c to use const, eliminate redundant unsigned's and casts -TD
+* add a limit check for rand()/etc., result in LYUtils.c, which worked for
+ Linux lrand48() but was not portable (report by PG) -TD
+* add missing definitions to make srand/rand code build for non-autoconf'd
+ configurations such as win32 -TD
+* ifdef'd the mkdir() for lynx_temp_space in LYMain.c to make it apply only to
+ Unix, to avoid prototype conflict with non-POSIX compilers (report by Mike
+ Bledig <mikegb@mweb.co.zw>) -TD
+* adapt patch for FTP_PASSIVE from NetBSD CVS, to make it work with INET6 (from
+ comp.unix.bsd.netbsd.misc newsgroup posting which stated that the patch had
+ been forwarded to lynx-dev) -TD
+* remove unused code of HTParseInet() for INET6 from HTTCP.c -TD
+* updated some translations in fr.po and ru.po (report by JS) -TD
+
+2001-02-08 (2.8.4dev.17)
+* implement left/right scrolling and line-wrap toggle using '{', '}' and '|'
+ characters, respectively. This uses SVr4 curses/ncurses pads to make the
+ whole screen treated as a viewport into a very wide screen -TD
+* make do_check_goto_URL() table-driven to simplify it as well as combine the
+ related messages into GOTO_XXXX_DISALLOWED -TD
+* combine restrict_name[] and restrict_flag[] arrays to eliminate possibile
+ ifdef mismatches, as well as to simplify the treatment of "default"
+ restrictions -TD
+* eliminate redundant symbols for color-style ifdefs (USE_HASH and
+ LINKEDSTYLES), using only USE_COLOR_STYLE -TD
+* simplify parse_style() by making most of it a table -TD
+* correct logic in arg_eqs_parse() for OPTNAME_ALLOW_DASHES ifdef which made
+ incorrect match for -display if -display-charset were given (report by IZ)
+ -TD
+* revert a commented-out call to HText_cancelStbl() in HTML_TABLE case in
+ HTML_start_element() from IZ's changes, which had the effect of changing the
+ article color in deja-news for color-style configuration -TD
+* fix off-by-one error in the END key handling (an empty line was shown at the
+ end) -IZ
+* makes END key always show a full last page of the document. That is, even if
+ the last line is already shown, it is moved to become the last line of the
+ screen, so that as much as possible of the document is on the screen -IZ
+* add -display_chars cmdline option, and additionally allows autodetection of
+ the charset on the system which allow it. This provides a way to switch the
+ display charset other than via obscure manipulation with 'O'ptions. (.lynxrc
+ is not viable if you have different charsets in different windows.) -IZ
+ The logic:
+ (1) first autodetect;
+ (2) then read cfg file, and if it is not "AutoDetect ..." (as the saved
+ version says), grant the cfg file charset;
+ (3) then read the cmdline, if it is present, but not "auto", then
+ grant it, otherwise switch back to the autodetected one.
+* allow TRST code to handle table-in-table. There are now two cases only
+ (modulo bugs) when Lynx will not show a table in a table form no matter what
+ is the screen width: when TABLE is inside PRE, and when there is a TAB
+ inside a TABLE. Both look like deliberate decisions, so I did not change
+ these places in HTML.c. But one may need to reconsider this at some
+ moment... Example of usage: to process (my old copy of) DejaNews Power
+ Search form (which has TABLE-in-TABLE, and multiline cells) you need screen
+ width of 112 chars -IZ
+* enable <BR> and <P> in TRSTables. The table still needs to fit into the
+ screen width without line wrapping. A tiny bit of additional work may be
+ needed to allow tables-inside-tables too; then any table should be rendable
+ as a table after an appropriate screen resizing. This patch also should make
+ around 70% of TRSTable.c unreachable. A lot of simplification can be made,
+ and most of the current convoluted hackery may be removed. Since this
+ algorithm tries to align *all* the display lines of the table, in some rare
+ cases it may need larger screen width than the old algorithm (the old
+ algorithm ignores all but one of the display lines corresponding to the given
+ <TR></TR> - and in most cases just gives up for the whole table if a
+ multiline cell is but of the simplest form) -IZ
+* add several traces and comments to TRSTable.c -IZ
+* enable interrupting LYNX by any char bound to INTERRUPT -IZ
+* add configure check for srand()/rand() functions, or alternatives with
+ similar interfaces. These are used in the SSL and experimental temporary
+ file options -TD
+* allow binding ESC to perform some action (such as INTERRUPT:ABORT, or
+ something else). It is useful only if the curses (or similar) package remaps
+ all the reasonable escape sequences, so Lynx internal escape-sequence
+ processing is not needed -IZ
+* enable showing the region between mark and point in the edit areas in a
+ different style. The style names are edit.active.marked and
+ edit.prompt.marked -IZ
+* add visible feedback for special case of unactive current text area which may
+ exist with -tna. The corresponding style is edit.current -IZ
+* add FORW_RL and BACK_LL to edit bindings support to allow cursor forward and
+ backward respectively to move to the next/previous link if done at the end of
+ the edit-field -IZ
+* update several configure script macros to smooth over incompatibilities
+ in autoconf 2.49c (alpha). In particular, this eliminates support for
+ changequote(), and adds limited support for OS/2 -TD
+* add google to list of search engines in lynx_help_main.html -LP
+* minor formatting of help message -Michael Warner
+* modify GetStdin() function in LYMain.c to allow -stdin option to read past
+ a line consisting of "---" (reported by Michael Warner) -TD
+* ifdef'd bibp: support, added configure option --disable-bibp-urls -TD
+* add experimental support for bibp: URLs as described in
+ http://www.ietf.org/internet-drafts/draft-cameron-tatu-bibp-02.txt
+ (patch by Rob Cameron <cameron@cs.sfu.ca>).
+* change sed delimiters in makefile.in to avoid using '@', which may appear
+ in AFS pathnames (report by Martin Mokrejs <mmokrejs@natur.cuni.cz>) -TD
+* fix missing call to LYCloseTempFP() in LYPrint.c, which caused attempt to
+ mail a file from the PRINT menu to send an email with a blank body. It looks
+ like this would happen for any platform not using LYPipeToMailer() -DK
+* change pointers for RFC's from ds.internic.net to rfc-editor.org, since
+ the former appears outdated -Michael Warner
+* add undef for HAVE_DELSCREEN to config.hin, so the delscreen() ifdef from
+ dev.16 works as intended -PG
+* workaround in CF_CURSES_FUNCS for overzealous compiler that optimized away
+ the test code -TD
+* change order of checks by CF_NETLIBS and CF_SSL macros in configure script,
+ since SSL libraries depend on network libraries (reports by Martin McCormick
+ <martin@dc.cis.okstate.edu>, IZ) -TD
+
+2001-01-01 (2.8.4dev.16)
+* add ja.po message file (overlooked in dev.15, reported by Atsuhito Kohda
+ <kohda@nsx.pm.tokushima-u.ac.jp>)
+* use C preprocessor at build-time to replace CF_EBCDIC configure macro -PG
+* integrated SSL patch from http://www.moxienet.com/lynx/ as a configure
+ option, --with-ssl -TD
+* add configure check for delscreen(), which is not available in some older
+ SVr3 curses libraries -TD
+* add configure check for socks5p.h, to allow socks5 build to use function
+ prototypes -TD
+* updated config.sub, config.guess -TD
+* modify some configure macros to use CF_PATHSEP, for path-separator which is
+ usually colon on Unix, and semicolon on MSDOS, etc. -TD
+* modify several configure macros to use $CFLAGS consistently for compiler
+ options and $CPPFLAGS for C preprocessor options -TD
+
+2000-12-21 (2.8.4dev.15)
+* add .po files to main distribution, remove stubs for files that were not
+ implemented, use msgmerge to resync against the current lynx.pot
+ (prompted by discussion with Morten Bo Johansen <mojo@image.dk>) -TD
+* corrected dev.13 changes for EXP_READPROGRESS, to make the
+ non-EXP_READPROGRESS configuration build and work with .lynxrc settings -DK
+* use EXIT_SUCCESS/EXIT_FAILURE in exit() and exit_immediately() calls -TD
+* improve check for lynx_temp_space by ensuring that the directory actually
+ exists; attempt to create the directory if it does not, e.g., ~/tmp/, to
+ resolve problem introduced by Mandrake's patch -TD
+* modify SetOutputMode() to flush stdout to work around buffering problem with
+ cygwin on error exit from Lynx (reported by Brad Town <btown@ceddec.com>) -TD
+* change definitions for LYCharINTERRUPT1 and LYCharINTERRUPT2 to not use
+ FROMASCII() in the EBCDIC configuration, since those symbols are used in case
+ statements which otherwise would not compile -PG
+
+2000-11-03 (2.8.4dev.14)
+* restore initialization of LYlines, LYcols in setup() which was lost in dev.12
+ changes (reported by DK).
+* modify logic for -stdin option to redirect keyboard input to null device
+ if lynx is not connected to a terminal, e.g., running under cron -TD
+* check in DontCheck() if Lynx is reading from a command-script, to avoid
+ using those characters to interrupt the application -TD
+* add a cleanup handler for win32, since UNIX-style signal handlers do not
+ work on that platform -TD
+
+2000-10-25 (2.8.4dev.13)
+* fix missing ifdef for EXP_READPROGRESS in LYOptions.c (reported by
+ Atsuhito Kohda) -TD
+
+2000-10-25 (2.8.4dev.12)
+* add a configure check for video library on OS/2 EMX, needed to link with
+ slang. Arrow keys do not work -TD
+* use macro UCH to fix gcc's char-used-as-subscript warnings, and to replace
+ existing casts to unsigned char, making the code more readable -TD
+* merge variants of HTReadProgress() -TD
+* modify SHOW_KB_RATE in lynx.cfg to allow disabling logic that
+ shows transfer rate during download. If EXP_READPROGRESS is defined, make
+ this alterable from the command line and options menu as well (from
+ discussion by Karen Lewellen <klewellen@delphi.com>) -TD
+* add the pathname that caused a problem to the error message in
+ CF_PATH_SYNTAX, lest someone be confused when tilde is not expanded
+ (addresses a problem reported by Lawrence Kwan <lawrence@interlog.com>) -TD
+* remove redundant leading newlines in "lynx -version" output (reported by Sven
+ Guckes) -TD
+* add dependency in src/makefile.in for building chrtrans/makeuctb$x, used by
+ UCdomap.o -IZ
+* fix CF_PATH_SYNTAX square brackets for OS/2 EMX case, lost by not disabling
+ m4's quotes for that line (report by IZ) -TD
+* remove older/unused variant of code to set screen size in LYCurses.c by
+ setting environment variables -PG
+* one of the ".po" files is zipped as type binary rather than ASCII, so it does
+ not unzip on OS/390 with the "-a" option. The "-aa" works better since it
+ forces text conversion regardless of the type of the archived file -PG
+* change definitions of LYCharINTERRUPT1 and LYCharINTERRUPT2 to accommodate
+ EBCDIC -PG
+> the remainder (most of the functional changes in this patch) from IZ:
+* add "typeless" notion to color style logic:
+ a) reverts to the style "foo" (from "foo.classname") if the style
+ "foo.classname" was not configured;
+ b) For input elements of type=typename uses style
+ "input.type.typename" if this style is configured (but
+ "input.classname" is not!);
+ c) Same for typeless elements, with typename="".
+ This allows the following:
+ input.type.submit:normal:blue:black
+ # match "link":
+ input:normal:green
+ textarea:normal:white:cyan
+ # type-less input is the same as type=text (similar to textarea)
+ input.type.:normal:white:cyan
+ input.type.text:normal:white:cyan
+ If your "link" is configured as normal:green, then input elements of types
+ other than typeless, text, or submit will be shown in the same style as link.
+ The textareas and text input elements are shown in the same style (but
+ different from "link" style), and submit "buttons" are shown yet in another
+ style.
+* implement styles in "dynamic areas" of documents. Three flavors of them are
+ active text-edit fields, non-active ones, and links/radiobuttons, etc.
+ This patch is concerned with the first flavor only. Two subflavors are
+ document's text-edit areas, and Lynx's ones (such as where you input the URL
+ after `g'). Each one of them has 3 elements: scroll symbols ("arrows"),
+ after-the-end padding, and the actual input string.
+ The patch
+ a) makes styles for these 2*3 elements customizable;
+ b) uses ACS chars (if available) for the arrows (instead of `{'/`}').
+ [It would be nice to make non-active text-areas to have customizable
+ styles for padding, and have scroll arrows too...]
+ Here is my customization for testing:
+ edit.active:normal:red:cyan
+ edit.prompt:normal:green:cyan
+ edit.active.arrow:normal:yellow:cyan
+ edit.prompt.arrow:normal:yellow:gray
+ edit.active.pad:normal:gray:cyan
+ edit.prompt.pad:normal:white:black
+* modify LYSystem() to allow changing size of lynx window with OS/2 EMX
+ at runtime. Example:
+ !mode 110,30;exit
+* use new macros LYCharINTERRUPT1, LYCharINTERRUPT2 and LYCharIsINTERRUPT() to
+ make it simpler to find uses of ^C and ^G
+* modify key mappings so the keymap file overrides the terminfo/termcap
+ description rather than the reverse
+* make unrecognized keynames emit diagnostic when tracing (but ignores them the
+ same way the older code did). Trace info about each keycode received
+* provide better tracing of style choices, both when styles are assigned into
+ text-lines, and when lss directives are converted to "numeric colors"
+* add similar tracing for links and contents of user-editable stuff
+* slightly expand the cache of colors to better accomodate 16-color terminals,
+ and fixes a misprint in handling background-color == maxcolor
+* modify logic in color styles initialization using flag default_color_reset to
+ override ncurses use_default_colors() logic if the "default" color style tag
+ is found in lynx.lss
+
+2000-10-18 (2.8.4dev.11)
+* include LYLeaks.h in LYPrettySrc.c to allow leak-checking -TD
+* modify configure script macro CF_RECHECK_FUNC to ensure that we add a given
+ library only once to the resulting list. This fixes a longstanding bug which
+ caused the nsl library to be repeated on some platforms (reported by BL for
+ one of the SCO configurations, and Urs JanBen <urs@tin.org> for SINIX-L 5.41
+ (i386-sni-sysv4)) -TD
+* modify "make install-doc" rule to first remove targets. Otherwise "ln -s"
+ and "cp" fail to create the targets when installing with normal user
+ permissions (reported by LV) -TD
+* fix for handle_LYK_DWIMEDIT() to ensure it does not dereference a null
+ pointer, when trying to edit a text file with no links within it (report by
+ Harri Tuominen) -DK
+* add fallback definitions to accommodate renaming of UCX$xxx symbols to
+ TCPIP$xxx in recent versions of OpenVMS UCX (reported by Horst Drechsel
+ <ai05@sternwarte.uni-erlangen.de>) -TD
+* add TRSTable.obj to src/descrip.mms objects -TD
+* modify configure script to omit LYExtern.o and LYLocal.o if the corresponding
+ options (externs and dired) are disabled -TD
+* correct a typo that made configure script always define USE_EXTERNALS -TD
+* interpret ftp server type for VMS if a URL is given with "/~name", as a
+ Unix-style server. This works for the following, at least:
+ VMS V6.2 AlphaServer 2100 4/233 MadGoat System type.
+ (reported by Rick Dyson <dyson@iowasp.physics.uiowa.edu>) -TD
+* make configure check for getaddrinfo() less strict, needed with --enable-ipv6
+ on IPv4-only system (patch by Munechika SUMIKAWA)
+
+2000-09-21 (2.8.4dev.10)
+* modified www_tcp.h and makefile.msc to allow compile with winsock2 if
+ USE_WINSOCK2_H is defined -TD
+* fix: the recently added code to enable external programs to replace normal
+ lynx handling of individual URL types was not refreshing the screen after the
+ external program finished (EXTERNAL set TRUE:TRUE) -DK
+* fixed two URLs in lynx_help_main.html -DK
+* add symbol USE_VMS_MAILER, use to distinguish VMS mail ifdef's for test
+ compiles -TD
+* use new function LYSendMailFile() to consolidate details of non-VMS/non-piped
+ email, e.g., DOS or Win32, and eliminate some minor inconsistencies in that
+ area -TD
+* correct order of ifdef's in send_file_to_mail() which could leave unsent
+ email on some systems without popen/pclose -TD
+* add some checks in LYhandlePopupList() to prevent popup of an empty list -TD
+* change a few messages written to stderr to end lines with \r\n rather than
+ \n, since Lynx may already be in screen mode when they are written -TD
+* treat .Z, .gz and .bz2 suffixes more symmetrically using new function
+ HTCompressFileType() for parsing them -TD
+* change mime type for bzip2 files to bzip2, x-bzip2 -HN
+* move IPV6 definitions in www_tcp.h to the end, to build on FreeBSD 4.1, since
+ SIN6_LEN must not be checked before including netinet/in.h (patch by
+ Munechika SUMIKAWA @ KAME Project <sumikawa@ebina.hitachi.co.jp>)
+* make HTParseInet() private, simplify some ifdef's -TD
+* change shell expression used to process stdin for mailcap to "(command)<file"
+ form, which is a little more robust than "cat file|command" (suggested by PG)
+ -TD
+* update URLs in about_lynx.html -DK
+* remove spurious 'FREE(leaf);' from LYLocalFileToURL() introduced in dev.5 -DK
+
+2000-09-01 (2.8.4dev.9)
+* improve ifdef's for endwin/newterm logic, making a fallback for LYscreen
+ variable -PG
+* modify CF_CURSES_LIBS to check if both initscr() and tgoto() are in the
+ $LIBS list before deciding not to try to look for them -TD
+* add %s substitution to mailcap_substitute(), overlooked when implementing
+ the logic to read from stdin when %s is omitted (reported by IC) -TD
+* restore endwin/newterm code for ncurses (as PG notes it really is needed).
+
+2000-08-24 (2.8.4dev.8)
+* refine CJK-related suppress of refresh() in statusline() to do this only
+ when the status line does not contain CJK characters (Hataguchi Takeshi)
+* add po/da.po placeholder (request by JS)
+* implement %s, %t, %{charset} and %{encoding} substitutions for mailcap
+ commands in HTFWriter.c (addresses Debian #21096) -TD
+* use new function AnchorsOnThisLine() to obtain count of anchors on the
+ current line for correct computation of length required to fix Debian #68542:
+ Text entry field on http://lists.debian.org/ is hidden when "form fields are
+ numbered" (reported by H.Nanosecond) -TD
+* add OS/2 cases to config.guess, config.sub -TD
+* modify CF_FUNC_GETADDRINFO to supply missing definitions for
+ HAVE_GAI_STRERROR and HAVE_GETADDRINFO, needed to make IPV6 build (reported
+ by Wesley Morgan) -TD
+* reset recent_sizechange after reading KEY_RESIZE from ncurses to work around
+ a case with Linux libc5 which would be treated as an EOF, causing an exit -TD
+* suppress PG's endwin/newterm code for ncurses because it is not needed -TD
+* modify start_curses() function to preset environment variables $LINES and
+ $COLUMNS to make the curses library see the proper screen size. After
+ calling endwin(), delete the current SCREEN object, to force curses library
+ to discard its cached values of LINES and COLS. This requires using
+ newterm(), which may not be present in all versions of curses, so we check
+ for and ifdef accordingly. Tested on os390 and Solaris -PG
+* cleanup IPV6 ifdef's using SOCKETADDR_LEN macro -TD
+* add error checks to LYCopyFile() and other places to report problems copying
+ the downloaded file, using new functions LYCloseOutput(), LYCanWriteFile()
+ (reported by H.Nanosecond <aldomel@ix.netcom.com> as Debian bug #63391) -TD
+* correct logic used to check for "Too many tempfiles", which resulted in
+ occasional misfires -TD
+* add configure checks for touchline() and touchwin(), use this info to work
+ with Ultrix V4.5 (report by Bernhard Simon <bs@bsws.zid.tuwien.ac.at>) -TD
+* reorganized CF_SIZECHANGE macro to work with autoconf 2.49a -TD
+* cleanup definitions for wait-status macros, moving them into www_wait.h -TD
+
+2000-08-03 (2.8.4dev.7)
+* add sample mailto-form.pl script to illustrate handling mailto URLs -KW
+* modify HTTCP.c to build on AIX 4.3 using HAVE_TYPE_UNIONWAIT as in LYLocal.c
+ (Georg Drenkhahn <georg@MPA-Garching.MPG.DE>)
+* change $host_os special case for 'os390' to 'openedition' in configure.in,
+ make corresponding changes for config.guess and config.sub -PG
+* integrate KAME patch for IPV6 (Wesley Morgan <morganw@chemicals.tacorp.com>)
+* add configure script macros for checking IPV6 from tin -TD
+* small fixes for configure script macros CF_BUNDLED_INTL, CF_CURSES_LIBS,
+ CF_UPPER, CF_X_ATHENA -TD
+* fix for multibyte characters in status line (Hataguchi Takeshi
+ <patakuti@t3.rim.or.jp>)
+* align/merge logic in LYOptions.c and LYForms.c which handles navigation in a
+ popup list, for reuse in name-completion -TD
+* restore check for ^G to cancel in HTSaveToFile() lost in dev.4 changes -VH
+* remove duplicate entries in sortedList() which are used for name-completion
+ (Frederic L W Meunier) -TD
+* fix compiler warning about const in LYpaddstr() using LYwaddnstr(), and
+ fix a potential buffer overflow in the latter (report by PG) -TD
+* correct logic in LYsubwindow(), which called delwin() with a null WINDOW
+ pointer -PG, TD
+
+2000-07-17 (2.8.4dev.6)
+* move special case statement for os390 compiler before AC_PROG_CC macro in
+ configure.in and regenerate configure script (reported by PG) -TD
+* correct check for return values of check_color() in parse_color() for slang
+ configuration, which prevented use of "default" color. This applies to
+ 2.8.3rel.1 as well -TD
+* correct draw_option() functions in LYForms.c and LYStrings.c for slang
+ configuration broken in dev.5 by wrong cut/paste (report by IC) -TD
+
+2000-07-16 (2.8.4dev.5)
+* remove "*:OS/390:*:*" item from config.guess -PG
+* add os390 item to $host_os case-statement in configure.in -PG
+* move $host_os case-statement in configure.in before some configuration tests
+ such as CF_BUNDLED_INTL which might perform compile-time tests -TD
+* use LYLocalFileToURL() in handle_LYK_CHDIR() to ensure that DOSPATH is
+ handled properly, inserting a '/' (reported by DK) -TD
+* correct loop condition in HTSaveToFile(), from dev.4 changes for -cmd_script
+ option which left it ignoring 'c' for cancel -TD
+* speed up local directory access for DJGPP by setting _djstat_flags (Gisle
+ Vanem)
+* updates for makelynx.bat, and improved call on the blat mailer (note -f field
+ not needed or wanted): -Victor Schneider
+* fix Debian bug #65151: "<> in javascript causes premature </script>"
+ (reported by H Nanosecond <aldomel@ix.netcom.com>) -KW
+* replaced all occurences of 'black' with 'default' in /samples/mild-colors.lss
+ to make it more reasonable on terminals with non-black background -VH
+* modify color-style initialization to avoid passing -1's as attribute codes
+ which would happen if the lynx.lss file was not found, or if not all styles
+ were set in that file. Also if lynx.lss is not found, initialize the
+ predefined styles to match those in samples/lynx.lss -TD
+* modify handling of empty values for radio and checkbox fields to avoid
+ sending "on" as the value (reported by Janne Peltonen <jkhp@cc.hut.fi>) -KW
+* don't double backslash characters in HTQuoteParameter(), since that changes
+ the string a program invoked through system will see. Note this assumes UNIX
+ or POSIX interpretation of single-quoted strings by the shell -KW
+* implement first draft of command-completion using popup menu for selection.
+ Pressing tab twice in the prompt for command or URLs will display a sorted
+ list of the choices -TD
+* implement a simple parser for Lynx commands which are normally bound to keys
+ using KEYMAP. This is bound to ':', so you can for instance type ":quit" to
+ exit. The parser allows unique abbreviations, so ":q" is equivalent to
+ ":quit" -TD
+* consolidate/simplify logic for displaying popup menus -TD
+* rewrote tab-completion to use an HTList -TD
+* move related logic into LYSubwindow() to reduce clutter - TD
+* make $(DESTDIR) variable work for po directory -TD
+* update bundled intl directory to match gettext-0.10.35 (except for fixes to
+ build scripts) -TD
+* modify configure macro CF_CURSES_LIBS to use a different order for library
+ checks if it has found ncurses header files (i.e., they are installed as
+ /usr/include/curses.h). This is done to fix an problem where there are two
+ versions of the curses/ncurses libraries installed, and the "curses" library
+ is not ncurses (from a report by Sergei Pokrovsky <pok@nbsp.nsk.su>) -TD
+* fix for configure script from dialog: If we really do not use included intl,
+ suppress the command that would attempt to symlink the two copies of its
+ header -TD
+* updates for config.guess, config.sub from tin -TD
+
+2000-06-23 (2.8.4dev.4)
+* modify handling to EXTERNAL settings by adding a new field in lynx.cfg. When
+ TRUE, then activating (using arrow-right for example) the link with URL
+ matching the one specified by 'prefix' field will be equal to pressing '.' on
+ it -VH
+* restore commented-out "clearok(curscr, TRUE)" in display_page() in GridText.c
+ to workaround problem repainting multibyte characters (reported by Takuya
+ ASADA <asada@isoternet.org>) -KW
+* add HIDDEN_LINK_MARKER entry to lynx.cfg, allowing user to specify string to
+ mark hidden links with (thus hidden links become non-hidden, thus they won't
+ be listed as hidden in the 'l' page) - the name of the setting is
+ hidden_link_marker. If the string to mark with is empty, then old behaviour
+ is restored -VH
+* implement "change directory" command. This is tested only on linux. It's
+ bound to 'C' in both modes (before this in normal modem COMMENT command was
+ bound to 'c' and 'C' in normal mode, and CREATE was bound to 'c' and 'C' in
+ dired mode). The main purpose of this command is not to type the name of the
+ directory when 'p'rinting to files and 'd'ownloading. If this command is
+ invoked in dired mode, the listing of destination directory will be
+ automatically loaded. Dired file operations menu lists this command too as
+ the first item. To disable it, comment the line
+ #define SUPPORT_CHDIR
+ in userdefs.h -VH
+* add definitions to allow slang configuration to implement scrollbars. This
+ will not work for any termcap/terminfo-based systems, appears specific to
+ MS-DOS (patch by Gisle Vanem)
+* updates for config.guess, config.sub from tin -TD
+* fix typo in CF_CHECK_ERRNO configure macro (reported by John Coyne
+ <John.Coyne@ctbto.org>) -TD
+* add <html> and </html> around generated HTML in HTGopher.c, LYKeymap.c,
+ LYCookie.c and LYCgi.c to make them more-correct. Did not modify
+ LYBookmark.c because the logic there relies on appending to the bookmark file
+ (report by Patrick Boylan <pboylan@island.net>) -TD
+* make pretty_html() in LYKeymap.c quote ampersand and quote, simplified logic
+ as well with LYKeycodeToString() implemented for command-logging -TD
+* add command-line options -cmd_log and -cmd_script, to provide a simple
+ command logging and scripting facility -TD
+* minor correction to -stdin option, add newline at the end of each line
+ copied -TD
+
+2000-06-02 (2.8.4dev.3)
+* initial support for SOURCE_CACHE_FOR_ABORTED -VH
+* change default_keypad_mode_fun() to use config_enum() -TD
+* modify config_enum() to check if the given name in lynx.cfg is ambiguous,
+ matching more than one name -TD
+* in passive ftp mode (FTP_PASSIVE:TRUE), use the IP address from the server's
+ response for the data connection, rather than doing another lookup of the
+ hostname -KW
+* correct bug introduced in dev.2 for leading whitespace in mailcap (reported
+ by Andrey Chernov) -VH, TD
+* change server types in HTFTP.c to an enum -TD
+* handle a "215 Windows2000" response from "SYST" command (Gisle Vanem)
+* change return value of parse_arg() when processing non-option data to make
+ URL in stdin (after '-') treated in the second pass, restoring behavior lost
+ in cleanup (reported by Gisle Vanem) -TD
+* allow blank as a separator in arg_eqs_parse() in addition to ':' and '=',
+ to restore behavior lost in cleanup of argument parsing -TD
+* make -stdin option a little more flexible by ifdef'ing primarily based on
+ ttyname(), and adding fallback definitions for Win32 and VMS -TD
+* for slang configurations past 1.3.6, call SLsmg_touch_screen() in
+ start_curses to ensure that the screen is properly initialized for non-bce
+ terminals (John Davis)
+* move call on lynx_initialize_keymaps() for slang configuration into the
+ start_curses() function, avoiding premature reference to $TERM, especially
+ when Lynx is running in dump mode, e.g., via cron (report by Hamish Moffatt
+ <hamish@rising.com.au>, analysis by KW) -TD
+* correct logic for ^ and $ commands (FIRST_LINK and LAST_LINK) when the
+ current line happens to be the first or last line on the screen (reported
+ by KW) -TD
+* remove unused fragments of backspace logic from print_crawl_to_fd() -TD
+* modify print_wwwfile_to_fd() and print_crawl_to_fd() to refrain from emitting
+ an offset for empty lines -TD
+* modify print_wwwfile_to_fd() to refrain from emitting backspaces when
+ the is_reply parameter is true -TD
+* add traces for argument parsing, as well as an environment variable
+ LYNX_TRACE which has the effect of the -trace option -TD
+* add configure check for ttyname, used in ifdef's for -stdin option -TD
+
+2000-05-21 (2.8.4dev.2)
+* minor changes to HTInit.c to make it more tolerant of leading whitespace
+ in mailcap entries (reported by Sven Guckes <guckes@math.fu-berlin.de>) -TD
+* add option -stdin, which tells Lynx to read the startfile from standard
+ input -TD
+* simplify argument parsing in LYMain.c, moving the special cases into the
+ table-driven logic by adding a flag that denotes the argument parsing phase
+ that applies -TD
+* correct duplicate description of JUMPFILE in lynx.cfg -TD
+* refine cfg2html.pl changes to use command-line options to control the
+ sorting and marking features, as well as make the script work properly if
+ the markup data is not given -TD
+* moved entry for lynx.cfg setting "viewer" according to the alphabet in
+ LYReadCFG.c:Config_Table -VH
+* modify cfg2html.pl to mark unavailable options, and to provide for sorting
+ the options in body.html -VH
+* update NLS configure script macros using CF_BUNDLED_INTL from tin, etc. -TD
+* update utmp configure script macros from xterm -TD
+* fix (from tin) to autoconf macro AM_WITH_NLS to fix a case where it would
+ refuse to build with non-GNU gettext -TD
+* modified autoconf macros CF_HEADER_PATH and CF_LIBRARY_PATH, to look in more
+ places for the specified files, including $HOME -TD
+* remove intl/libintl.h since it is overwritten by a symbolic link (reported
+ by Atsuhito Kohda <kohda@pm.tokushima-u.ac.jp>) -TD
+* correct a few tests in configure script which must allow inclusion of either
+ ncurses.h or curses.h, otherwise color-style cannot be configured (reported
+ by Frederick Bruckman <fb@enteract.com>) -TD
+* move logic that makes subdirectory for more-secure temporary files into
+ LYOpenTemp() where it can perform that action on demand rather than for all
+ invocations of lynx. Further refine this logic by ensuring that the umask is
+ set to allow execution permissions on the subdirectory (fixes problems
+ reported by Michael Abraham Shulman <mas@kurukshetra.cjb.net> and KW) -TD
+
+2000-05-05 (2.8.4dev.1)
+* use built-in LYCopyFile logic for CYGWIN rather than external cp program -DK
+* minor refinement to LYValidateFilename() to avoid prepending a drive
+ letter when saving files via the PRINT command on DOS systems -DK
+* update URLs in lynx_help_main.html (Frederic L W Meunier)
+* update description in INSTALLATION dealing with passive ftp (report by
+ Frederic L W Meunier) -TD
+* correct ifdef'ing in LYtouchline() for VMS curses versus slang (report by
+ Jerome Lauret)
+* correct an overlooked change of ifdef's from
+ CONV_JISX0201KANA_TO_JISX0208KANA to CONV_JISX0201KANA_JISX0208KANA -TH
+* move include of LYClean.h in LYexit.c to ensure that cleanup_files() is
+ prototyped on VMS (report by Jerome Lauret)
+* move assignment of HadVMSInterrupt in cleanup_sig() to avoid interaction with
+ logic in HTConfirmDefault() on VMS (reported/tested by Jerome Lauret) -KW
+* minor fixes to lynx.man / lynx.hlp for descriptions of -get_data, -post_data,
+ -short_url -KW
+* avoid invalid memory access that can result from redirection messages
+ that include a fragment in the new URL -KW
+* change sed delimiter in makefile.in from '%' to '"', to work around SINIX
+ v5.43 (SYSV4) sed which becomes confused by nested '%' in expression for
+ htmlized cfg install (reported by Shishakov Vjacheslav"
+ <shishako@avn.skiftel.ru>) -TD
+
+2000-04-23 (2.8.3rel.1)
+* replace LYNX_RELEASE variable in userdefs.h by functions LYVersionIsRelease()
+ and LYVersionStatus() in LYShowInfo.c -TD
+* remove symbol LYNX_RELEASE_DATE, use same format for both development and
+ release dates -LP
+* remove po/ChangeLog (noted by LP)
+
+2000-04-22 (2.8.3pre.8)
+* update option_help.html to describe the Visited Pages settings -TD
+* correct order of body_attr[] and button_attr[] in HTMLDTD.c -TD
+* correction for IMG attributes in HTMLDTD.c -KW
+* tweak form-based options menu: General Preferencies now has User Mode,
+ Editor, Searching type and Cookies (suggested by PW). Correct misspelled
+ gettext'ed message, introduced in pre.7 -LP, DK
+* note in configure --help and INSTALLATION that color-style is implemented
+ for various curses libraries but not slang -TD
+* add a note to INSTALLATION describing how to disable the telnet application
+ when configuring Lynx -TD
+2000-04-19 (2.8.3pre.7)
+* move initialization of WATT-32 "sock_init()" code in LYMain.c so it precedes
+ Lynx's code to setup SIGINT handler, since WATT-32 installs a SIGINT handler
+ as well. This makes Lynx's handler the default again -DK
+* correct handling of CHARSET attributes on LINK and A. Basically this reverts
+ back to original 2.7.2ac logic -KW
+* enable handling of CHARSET attributes on LINK - it was disabled, probably
+ accidentally -KW
+* prevent CHARSET attributes from modifying the charset assumption for the
+ _current_ document -KW
+* correct errors in HTML.c that could result in infinite loop (iteration
+ counter was not incremented) -KW
+* revert one strcpy -> StrAllocCopy change - see added comment in LYCgi.c -KW
+* correct limit of formatted string in status_link() -KW
+* change NO_FILE_REFERER default to TRUE (i.e., do not send local file name
+ in the referer field unless explicitly specified by the user) -LP, KW
+* implement a workaround for gettext'd ADVANCED_COOKIE_CONFIRMATION to make
+ it consistent with HTConfirmDefault(), fixes Debian #62105 -TD
+* clarify/expand notes in lynx.cfg dealing with USE_MOUSE (from comments by
+ Morten Bo Johansen <mojo@image.dk>) -TD
+* noted glibc 2.1.3 bug in PROBLEMS -TD
+* reorganize forms-based options menu: options are now grouped by sections in
+ a more logical way (design by KW). (BTW, it is now more aligned with
+ htmlized-cfg cattoc.html). Help files changed accordingly. A few gettext'ed
+ messages were changed -LP
+* add ifdef's (USE_BLAT_MAILER and USE_ALT_BLAT_MAILER) and corresponding code
+ for blat vs blatj mailer (request by Victor Schneider) -TD
+* update Lynx FAQ locations -JS
+2000-04-17 (2.8.3pre.6)
+* change version number in remaining documentation to 2.8.3 -TD
+* remove redundant defines for SUPPORT_MULTIBYTE_EDIT and COLOR_TABLE from
+ DOS/Win32 makefiles -TD
+* small change to configure test for REAL_UNIX_SYSTEM to accommodate linkers
+ that allow assignment from a nonexistent extern. Also, change a few UNIX
+ symbols in LYCurses.c and LYUtils.c to REAL_UNIX_SYSTEM to build on platforms
+ that do not define this symbol -TD
+* update notes in LYMain.c and LYReadCFG.c regarding the options and config
+ variable tables, which no longer need to be sorted -TD
+* htmlized lynx.cfg: add .h2 RULESFILE, remove confusing .h1 header -LP
+* define SUPPORT_MULTIBYTE_EDIT in userdefs.h -TH
+2000-04-13 (2.8.3pre.5)
+* fix printing of Last-Modified field in downloaded/printed source -LP
+* update URL for RFC 1942 -LV, DK
+* update Subir Grewal's Lynx links URL to the newest location
+ http://www.trill-home.com/lynx.html -LV, TD
+* move assignment to donelookup in LYGetHostByName() to avoid race with
+ CreateThread() -Alexei Anatski
+* modify LYexecv() in LYLocal.c for MINGW32 -HS, Victor Schneider
+* re-correct logic for .h1 comments in cattoc.html by cfg2html.pl (reported
+ by LP) -TD
+* move call to cleanup_files() into LYexit(), to fix stray temporary directory
+ left, e.g,. when doing "lynx -version" -TD
+2000-04-11 (2.8.3pre.4)
+* add to logic of --with-charsets configure option, checking for charset names
+ that happen to be built-into UCdomap.c rather than defined via .tbl files
+ in src/charsets (reported by HN) -TD
+* correct missing extern in CF_SLANG_UNIX compile-test -TD
+2000-04-06 (2.8.3pre.3)
+* remove definitions for NCURSES and NCURSES_VERSION from top-level makefiles
+ that really use PDCurses -TD
+* add USE_MOUSE symbol: cleanup/simplify ifdef'ing of mouse code,
+ replace USE_SLANG_MOUSE / NCURSES_MOUSE_VERSION / PDCURSES_MOUSE_VERSION
+ with USE_MOUSE (and modifier when necessary) -LP
+* windows makefiles: add new symbols SOURCE_CACHE and USE_PRETTYSRC,
+ remove obsolete EXP_CHARTRANS and unused EXP_CHARTRANS_AUTOSWITCH -LP
+* fixed a bug with psrcview on lss-enabled lynx. Code such as <a blah href=.>
+ (i.e. unknown attribute and then some other attribute) was causing calls to
+ PSRCSTOP(barattr) twice (and lynx was switched to "non-preformatted" mode
+ losing all white spaces of the document after that piece of code) -VH
+* add configure option --with-screen=pdcurses, mainly for checking ifdef
+ conflicts between ncurses and pdcurses. This builds/runs with the PDCurses
+ X11 library, but is not recommended for general use -TD
+* remove test-artifact in configure check for zlib.h -TD
+* add CF_SLANG_UNIX configure macro, to allow slang configuration to build on
+ AIX, etc., (reported by Jens Schleusener <Jens.Schleusener@dlr.de>) -TD
+* update CF_CURSES_LIBS macro from CDK fixes, adds a special check for HPUX
+ 11.x -lcur_colr library -TD
+2000-04-02 (2.8.3pre.2)
+* fixed problem with charset handling for SOURCE_CACHE:MEMORY - if the charset
+ was specified by Content-Type http header it won't be lost (as it was) when
+ reparsing from source cache (applies to toggling DTD, switching to srcview,
+ and other stuff like *,' etc) -VH
+* add ifdef'd call for creat() for Borland C configuration in LYExecv(), as per
+ JS report -TD
+* remove definition of NCURSES_MOUSE_VERSION from makefile.bcb and
+ makelynx.bat, which should fix compile problem reported by JS -TD
+* move a small number of gettext definitions into LYMessages_en.h to allow
+ removing the associated files from POTFILES.in, which must not be larger
+ than 1023 for Solaris (reported by JS) -TD
+* improve ifdef's for fallback definitions of getattrs(), getbegx(), getbegy()
+ and getbkgd() in LYCurses.h since they may be functions rather than macros
+ (reported by PG on os390) -TD
+* further restrict tildeExpand() so it allows embedded "~" only if it follows
+ a slash, or is the first character -TD
+* add check for "~" as the path to be expanded in tildeExpand() (fixes problem
+ reported by Frederic L W Meunier when TEMP_SPACE was defined to "~") -TD
+2000-03-31 (2.8.3pre.1)
+* remove annoying trailing period from two statusline messages ending with host
+ name ("Looking up host.foo:81." and "Making HTTP connection to foo.bar.") -LP
+* lynx.cfg: use two lines to separate options description in this
+ configuration file (it looks more readable, for such a huge text) -LP
+* lynx.cfg: make a few corrections to reorganize .h1 sections to improve
+ htmlized cattoc.html logic. More corrections welcome -LP
+* fix some compiler warnings for DECC dealing with time_t being unsigned in
+ that environment (reported by Jerome Lauret) -TD
+* suppress Multinet prototypes in socket.h, to work around some places where
+ Multinet declares parameters a void* while DECC uses char* (patch by Jerome
+ Lauret <JLAURET@mail.chem.sunysb.edu>).
+* undo side-effect of config_enum() function in LYReadCFG.c from cleanup in
+ dev.22 which made default_user_mode and source_cache values not set properly
+ (reported by Alexei Anatski <alexei.anatski@srm.ru>) -TD
+* correct ifdef's in LYStrings.c for NCURSES_MOUSE_VERSION versus PDCURSES
+ adding new PDCURSES_MOUSE_VERSION to cover special case of DJGPP (reported by
+ LP, DK) -TD
+* add PRETTYSRC to lynx.cfg, supplementing -prettysrc commandline option -TD
+* add call to LYStoreCookies() from HTFWriter.c to save cookies when -source is
+ used (patch by KW)
+* remove const from LYGetHostByName() parameter -TD
+* modify makefile.in to ensure links within htmlized lynx.cfg are updated
+ if gzip-help is configured (reported by Ari Moisio) -TD
+* remove -DEXP_CHARTRANS from makefile.msc, makefile.bcb (reported by LP) -TD
+* trim trailing path-separator from lynx_temp_space before removing that
+ directory, on exit -TD
+* ifdef'd IsOurFile() to perform only an ownership check on single-user DOS
+ and OS/2 systems, so user can overwrite files -TD
+* simplified some initialization in LYMain.c with tildeExpand() -TD
+* change prototypes of HTSetPresentation(), HTSetSuffix5() to use double rather
+ than float, since this is the default promotion, working better with some
+ compilers -TD
+* add comments to makefile.msc to show how to build color-style version -TD
+* add fallback definition for getattrs(), move fallback definitions for
+ getbegy() and getbegx() in LYCurses.h to allow building color-style version
+ with PDCurses -TD
+* correct a call on lib$find_file() in HTVMSUtils.c which broke by not
+ supplying it with a fixed-size buffer, from dev.23 changes -TD
+* correct an out-of-range indexing error in LYstatusline_messages_on_exit(),
+ and add a check in to_stack() for a similar problem -TD
+* add definitions and description of USE_TH_JP_AUTO_DETECT,
+ CONV_JISX0201KANA_JISX0208KANA, and KANJI_CODE_OVERRIDE to userdefs.h, along
+ with a new file README.jp -TH
+2000-03-26 (2.8.3dev.23)
+* make -nounderline option apply to overloading of colors 4 & 5 with
+ underlines, in slang configuration -TD
+* on initialization, check if the LYNX_TEMP_SPACE denotes a directory which
+ we cannot easily determine if someone could alter our temp-files. If so,
+ make a subdirectory of that, with appropriate permissions -TD
+* disable setuid on initialization -TD
+* add a definition USE_MKSTEMP in userdefs.h which supersedes EXP_RAND_TEMPNAME
+ for sys-admins who believe in mkstemp() -TD
+* change logic for EXP_RAND_TEMPNAME to avoid allowing fmt_tempname() to return
+ the same name during a session. Define EXP_NAME_TEMPNAME in userdefs.h -TD
+* add Last-Modified header into the printed/downloaded source, in addition to
+ the Date header (it is there for years). (Last-Modified field will not be
+ printed if it is not present, or equal to the Date header or equal to
+ "Thu, 01 Jan 1970 00:00:01 GMT", a common mistake in scripts) -LP
+* defined DIRED_SUPPORT in makefile.msc -TD
+* several small fixes in LYLocal.c for dired support, mostly win32-specific -TD
+* modify PDCurses mouse logic to use BUTTON_PRESSED mask rather than
+ BUTTON_CLICKED, since the latter appears to not work in PDCurses 2.4 -TD
+* modify HTDirTitles() to fix a couple of cases for device-only pathnames,
+ e.g., for DOS -TD
+* modify HTDOS_name() to put a trailing '\' on the result if only a device
+ is given. Fix a memory leak in HTDOS_name() -TD
+* simplify local_dired() using new function match_op(), adding DOSPATH
+ and __EMX__ to special case of stripping a leading '/' from parameter so
+ dired mode works properly on Win32 and OS/2 EMX -TD
+* minor cleanup using new function LYformTitle() -TD
+* modify LYUCPushAssumed to push original assume_charset insted of
+ anchor_UCI->MIMEname when HTCJK is JAPANESE. If this modification isn't
+ done, Japanese strings may be mishandled when charset is not specified or
+ assumed as Japanese charset. On the other hand, if this modification IS
+ done, the specified charset is ignored when HTCJK is JAPANESE.
+ # I think it's long way to improve this completely. It rarely
+ # causes small problem in source view mode for Japanese document.
+ # I think it can be ignored -TH
+* improve handling of Japanese titles in List Page, LYNXIMGMAP Page and
+ ShowInfo Page -TH
+* remove spurious backslashes in sed script for adjusting link to htmlized
+ lynx.cfg -Michael Warner
+* add -luser32 library for cygwin configuration, needed for WIN_EX ifdefs -DK
+* correct some screen handling problems when built with SLang -DK
+* updated the INSTALLATION file to reflect building under cygwin -DK
+* define WIN_EX and _WINDOWS_NSL for cygwin configuration -DK
+* use select_s() from WATT-32 for the DJGPP port, rather than select() from
+ DJGPP (suggested by Gisle Vanem, to make it faster) -DK
+* add a configure check CF_SET_ERRNO to check if we really can set errno,
+ even if it has been #define'd -TD
+* remove a redundant call to HTQuoteParameter() from LYExtern.c, which resulted
+ in quoted-quotes (reported by Michael Warner) -TD
+* add configure check for syslog.h, in case --enable-syslog is given for a
+ machine that doesn't support it -TD
+* add ASSUMED_COLOR variable to lynx.cfg, making the use of
+ assume_default_colors() optional (addresses reports by LV, IC) -TD
+* add a configure check for the compiler option needed to find zlib.h, e.g.,
+ if it is in /usr/local/include and the compiler is not gcc -TD
+* disentangle some of the PDCurses ifdef's from ncurses, including the mouse
+ handling. The symbol PDCURSES should be used for PDCurses, not NCURSES*
+ or DOSPATH -TD
+* remove unused getline.c, getpass.c, crypt.c and crypt_util.c -TD
+* change ifdef's in LYisAbsPath() and LYisRootPath to make OS/2 EMX treated the
+ same as DOSPATH -TD
+* review use of strcat/strcpy, changing as needed to avoid buffer overflows -TD
+2000-03-12 (2.8.3dev.22)
+* modify Home_Dir() so that on DOS & Windows, if the $HOMEDRIVE variable is
+ set, it may be used to specify the drive on which $HOME is located -TD
+* add configure option --enable-htmlized-cfg to install the htmlized lynx.cfg
+ in the help directory (request by LP) -TD
+* suppress sleep's in crawl or traversal mode (request by LV) -TD
+* cleanup LYReadCFG.c, LYrcFile.c a little, using new functions putBool,
+ getBool, putEnum and getEnum -TD
+* change default mode for visited-links-page to match original behavior, add
+ visited_links to .lynxrc file (requests by KD, LP) -TD
+* update documentation to reflect move from sol.slcc.edu to lynx.isc.org -PG
+* remove obsolete files: WWW/Copyright.txt (replaced by FreeOfCharge.html) and
+ WWW/README.txt (recommended by DK) -TD
+* clean up some of the loose ends, primarily in documentation. A Russian user
+ pointed out that the DOS binary was ignoring character 0xe0. This turned out
+ to be a bug in the PDCurses code for DOS. I modified the INSTALLATION file
+ to reflect the patch to PDCurses. Also include the file for the public
+ domain release of the CERN wwwlib code (FreeOfCharge.html). Other changes
+ fix dead links, Y2K changes, and reflect newer versions of other programs -DK
+* comment-out/disable NO_ANONYMOUS_EMAIL definition in userdefs.h -DK
+* change optimization level to -O1 in makefile.dos -DK
+* use macro set_errno() to hide some of the clutter in HTTCP.c as well as make
+ it simpler to build with threaded libraries -TD
+* ifdef'd out a "QUIT" command sent to the FTP server immediately after opening
+ a data connection in HTFTPLoad(), since this makes the ftp.wku.edu server
+ close the connection prematurely -TD
+* combine redundant HTMake_VMS_name() with HTVMS_name() -TD
+* review use of "%s" in sprintf, to guard against buffer overflows, modified
+ some to use HTSprintf0 or StrAllocCopy, others to use specific lengths
+ (KW noted a related problem in HTTP.c) -TD
+2000-02-25 (2.8.3dev.21)
+* modify check for empty news-posting to warn but allow user to override if
+ it contains nonspace characters -TD
+* add FTP_PASSIVE option to lynx.cfg, allowing installer to defer decision
+ of whether lynx uses passive ftp connection (adapted from patch by
+ Bernhard Rosenkraenzer <bero@redhat.de>) -TD
+* remove duplicate definitions of HT_NON_BREAK_SPACE, HT_EN_SPACE leaving them
+ in HTFont.h -TD
+* lynx.cfg option CONNECT_TIMEOUT and commandline option "connect_timeout" were
+ added (not available for DOS port) -VH
+* don't perform submission of the content of disabled form fields -VH
+* add bindings for ^ and $ (like vi) to move the cursor to the first and last
+ link on the current line (prompted by complaint by DH that < and > used to
+ allow movement to the ends of a line) -TD
+* remove --enable-kanji option (request by TH) -TD
+* replace 3 CONV_JISX0201KANA_ISX0208KANA to CONV_JISX0201KANA_JISX0208KANA -TH
+* enable the routines to change kanji code which is used for overriding,
+ since my last change disabled this -TH
+* remove redundant/conflicting definitions of ON/OFF from HTVMS_WaisUI.h -TD
+* fixes for K&R build on SunOS -TD
+2000-02-15 (2.8.3dev.20)
+* ifdef fixes for CYGWIN, broken in dev.19 -TD
+* add make-msc.bat script, and update src/chrtrans/makefile.msc to add rules
+ for generating header files -TD
+2000-02-14 (2.8.3dev.19)
+* use HTAddParam/HTEndParam rather than HTSprintf0 for building external
+ commands, protecting against badly-formatted string with more than one %s
+ (reported by PW) -TD
+* update placeholder po/nl.po -JS
+* add configure option --enable-kanji for defining symbols related to TH's
+ patch.
+* improved handling of Japanese text (patch by Hataguchi Takeshi (TH)
+ <patakuti@t3.rim.or.jp>):
+ + if Japanese document's charset is specified explicitly by the MIME tag or
+ HTTP responses, Lynx will assume the charset as that value.
+ + change the Japanese charset detection strategy when charset is not
+ specified explicitly.
+ + wrap a long text which includes only CJK characters in source mode.
+ + avoid writing CJK characters at the 80th column.
+ + improve kanji code override routine
+ # My change seems to have broken this
+ + change the phrase "half width kana" to "JIS x0201 Kana" in comments.
+ # The latter has been used originally.
+ + enable assume_charset when display charset and assume charset
+ are Japanese. assume_charset acts like charset by META tag
+ only when charset isn't specified by META nor HTTP responses.
+ + change the behavior of the option menu.
+ For example, when display charset is Japanese (EUC-JP) and
+ CJK mode is on, changing assume_charset from iso-8859-1 to
+ shift_jis using the option menu,
+ old behavior:
+ assume_charset won't be changed.
+ CJK mode will turn off.
+ new behavior:
+ assume_charset will be changed to shift_jis
+ CJK mode won't be changed.
+ + improve handling Japanese in Visited Links Page, History Page
+ and pages with FORM.
+ New macros are:
+ USE_TH_JP_AUTO_DETECT
+ enable (2)
+ CONV_JISX0201KANA_JISX0208KANA
+ convert JIS X0201 Kana to JIS X0208 Kana,
+ i.e. convert half width kana to full width.
+ I've not tested the case not to define this well.
+ KANJI_CODE_OVERRIDE
+ enable kanji code override routine.
+ The code can be changed by ^L.
+ More precisely, this enables us to change the assumption kanji
+ code for the document. This assumption overrides the charaset
+ by META tag and HTTP responses.
+* ensure lynx_doc is writable when doing install, since it is not necessarily
+ done as root -TD
+* simplify/correct ifdef'ing in reply_by_mail() -TD
+* add ifdef CANNOT_PIPE_MAIL to simplify ifdef'ing for systems having mailers
+ that we can pipe to versus those that we cannot -TD
+* add ifdef USE_BLAT_MAILER to simplify & make consistent ifdef'ing for
+ blat mail program -TD
+* correct ifdef'ing in mailform() for Unix (report by LV, analysis by KW) -TD
+* tweak lynx.cfg for better cfg2html.pl output -LP
+* fix DOS makefiles for recent renaming USE_PSRC -> USE_PRETTYSRC.
+ Also, change optimization flag to -O1: having experience with slow
+ 386 machine I see no visible difference in speed at run time, but this
+ makes compilation much faster and takes less memory. Tweak INSTALLATION
+ file accordingly -LP
+* ifdef'd feature for generating random temporary filenames with
+ EXP_RAND_TEMPNAME -TD
+* remove duplicate S_xxx definitions from LYLocal.h, already in www_tcp.h -TD
+* add note about building with Visual C++ -TD
+* ifdef'd reference to current_codepage in LYCurses.c with PDCURSES_EXP
+ rather than PDCURSES, since this variable is not found in any release
+ version of PDCurses -TD
+* several small fixes/adjustments to reduce warnings from lint-like program
+ 'antic' -TD
+* fixes to compile on VMS with UCX -TD
+* change LYRemoveTemp() to return a value, needed for VMS -TD
+* rename intl/po2tbl.sed.in to intl/po2tbl.sed_in, to allow unzip on VMS -TD
+* correct HTSetSuffix/HTSetSuffix5 for VMS build (reported by Dan W. Olds
+ <oldsdw@wofford.edu>) -TD
+* resync autoconf macros, from tin -TD
+2000-01-06 (2.8.3dev.18)
+* correction to LYCookieSavefile so tilde expansion is done (reported by Larry
+ Virden) -BJP
+* now it's guaranteed that LY_SOFT_NEWLINE could be only 0th character in
+ line->data (it could be preceded by LY_*_START_CHAR). Bug that caused
+ empty lines to disappear when printing files was fixed -VH
+* comments are now correctly converted to display charset in prettysrc mode -VH
+* fix "Please see" array initialization in cfg2html.pl (reported by VH, LP) -TD
+* small userdefs.h typo fixed -VH
+* added lynx.cfg setting that controls justification - maximum value for
+ ratio of 'spaces to spread'/'max width of a line' when justification can
+ take place -VH
+* change "PSRC" to "PRETTYSRC" in configuration (suggested by KW) -TD
+* combine a dozen of HTMLSRC_ lynx.cfg settings into PSRCSPEC setting. Old
+ "HTMLSRC_foo:bar1:bar2" should be written as "PSRCSPEC:foo:bar1:bar2" -VH
+* use assume_default_colors() extension from upcoming ncurses 5.1 and related
+ support to provide more flexible coloring. If the user's configuration files
+ do not specify "default", the default-color support is suppressed, and the
+ displayed colors default to white/black. The original behavior matches
+ SVr4 curses, which assumes the default colors of the screen but does not
+ ensure that they match the assumption -TD
+* modify LYsetXDisplay() to permit $DISPLAY to have an empty value, and reuse
+ logic in forms-options from menu-options as validate_x_display() and
+ summarize_x_display(). The forms-options will not display a warning since it
+ exits too early, but at least one may now reset $DISPLAY to an empty string
+ (reported by KW) -TD
+* add note in INSTALLATION pointing to aclocal.m4 for details of regenerating
+ configure script -TD
+* add stub "po" gettext for Czech language, update other stubs -JS
+* undo dev.16 change to print_wwwfile_to_fd() logic for LY_SOFT_NEWLINE which
+ resulted in dropping blank lines from printed files -TD
+* make off by one correction in HTDisplayPartial line counting (as discussed
+ with LP) -KW
+* one invalid memory free (only reached in some (rare?) error case), two
+ memory leaks removed in LYLocal.c -KW
+* date calculations for file times in FTP directory listings used cached values
+ for the current day and year that never got reset. This could cause wrong
+ ordering when sorting by date, and possibly other errors, especially in
+ long-running lynx sessions. Now recalculate them for each new directory
+ request if they are needed -KW
+* be slightly more tolerant about FTP directory listing file times that appear
+ to lie in the future: allow today plus one day without assuming that it must
+ mean a year ago, to account for possible timezone differences -KW
+* add comment to reload_read_cfg() listing things that are/aren't done -LP
+* minor lynx.cfg corections for better cfg2html.pl output -LP
+* restore 'from_source_cache' PRIVATE to LYMainLoop.c, add comments -LP
+* amend dev.16 feature for generating random temporary filenames to ensure that
+ Lynx does not currently have the generated name open as a temporary file -TD
+1999-12-15 (2.8.3dev.17)
+* add a caution to jumpsUnix.html -PW
+* ifdef LYEditKeyForAction() to compile when EXP_ALT_BINDINGS is not defined
+ (reported by VH) -TD
+* add 3-valued DEFAULT_KEYPAD_MODE to lynx.cfg -TD
+* revert DEFAULT_KEYPAD_MODE to NUMBERS_AS_ARROWS (consensus) -TD
+* add COOKIE_SAVE_FILE lynx.cfg and corresponding command-line option, default
+ it to /dev/null, which is recognized on all systems -BJP
+* correct typo in declaration of LYLeakSAVsprintf() -Michael Warner
+* remove from_source_cache_p parameters in LYMainLoop.c (request by LP) -TD
+* documentation updates covering the Options Menu & other changes omitted
+ previously -PW
+* small correction in TRSTable.c: One of my previous changes for TRST broke
+ inheritance of alignment for cell contents from TR elements -KW
+* new functions for keeping track of temp files (and some other files) for user
+ interface pages: LYRegisterUIPage(), LYIsUIPage(). Most checks that look at
+ the loaded document's title have been replaced by this mechanism. This also
+ replaces various mechanism that were implemented for some specific pages -KW
+* also replaced some more checks that looked at the document's title by checks
+ of the address, for pages that are always identified by a special URL scheme
+ (LYNXCOOKIE:, LYNXKEYMAP:, LYNXMESSAGES:) -KW
+* now check directly in postoptions() whether the loaded document is one from
+ which submission of option changes can be accepted, using the new tracking
+ mechanism. Only the form-based Options Menu and Visited Links are allowed.
+ Relying on a good random generator to prevent spoofing is not necessary.
+ Kept the secure_string check, but it should be only regarded as an aid to the
+ user, it prevents changing options from an instance of the form-based Options
+ Menu that is not the most recent one (this can happen if an Options Menu page
+ is pushed on the history stack and later returned to) -KW
+* honor REUSE_TEMPFILES for some more user interface pages.
+* prevent an obscure LYNXOPTIONS://MBM_MENU crash.
+* other minor additions and corrections to checks for special pages -KW
+* changed INSTALLATION text for --enable-internal-links -KW, HN
+* changes to build dev16 with color styles on DJGPP/PDCurses 2.3
+ (you must uncomment a line in makefiles to build lynx that way) -LP
+* correct a missing check in HTML.c HTML_A case against force_empty_hrefless_a
+ (reported by KW) -VH
+* changed lines -> disp_lines, cols -> disp_cols in GridText.c -KW
+* don't reparse with SOURCE_CACHE if screen size changed only
+ vertically (disp_lines). Also don't reparse unnecessarily in
+ some cases of LYK_MINIMAL -KW
+* don't append (HEAD) to title for INFO screen if already present -KW
+* set newdoc.title to curdoc.title in LYMainLoop.c for SOURCE command.
+ Otherwise INFO could show the wrong document's title -KW
+* made global from_source_cache PRIVATE to mainloop -KW
+* reset DIRED_MENU item list when lynx.cfg is reloaded -KW
+* new lynx.cfg option AUTO_UNCACHE_DIRLISTS for Dired mode, see lynx.cfg -KW
+* prevent file descriptor and inode leak in HTFWriter.c that occurred if
+ the same resource is repeatedly downloaded (for 'd' or for passing to
+ a viewer) -KW
+* corrected logic for suppressing last HTDisplayPartial call at end of file,
+ after discussion with LP -KW
+* corrected line counting in HTDisplayPartial, taking into account offsets used
+ for the various variables being compared -KW
+* added confirmation prompt for reloading non-safe post_data documents in
+ form-based Options Menu change handling. Before this change, the prompt
+ would be issued after returning to mainloop() instead, with different
+ behavior if confirmation was denied: The document would be popped instead of
+ keeping the current instance -KW
+* function confirm_post_resub made PUBLIC and moved to HTAlert.c. New function
+ srcmode_for_next_retrieval in LYGetFile.c. Both used for the above and in
+ LYMainLoop.c -KW
+* fixed behavior for various post_data confirmation prompts in connection with
+ SOURCE_CACHE in LYMainLoop.c. Before this change, the user would be prompted
+ to confirm reloading, yet on confirmation reparsing from the source cache
+ would be attempted. So prompts were unnecessary and misleading -KW
+* try to handle some failures of errors in source cache reparsing better. Try
+ to make sure that unsafe post_data documents don't get reloaded accidentally
+ without confirmation if source cache reparsing fails. Treat partial data
+ (i.e. loading from source cache probably 'z'apped by user) as successful, as
+ HTLoadDocument does. (Various error conditions are currently only passed on
+ to the caller by HTParseFile, not by HTParseMem. I left this apparent design
+ decision unchanged.) -KW
+* source cache reparsing did not rewrite a previous cache copy when the
+ document was reloaded from the net. This means that e.g. NOCACHE or RELOAD
+ would force reloading from the network, but then on the next non-forced
+ loading of the document (e.g. by toggling to SOURCE view) the old (and
+ possibly stale) copy would again be used. Now the newer copy replaces the
+ old copy if loading is successful (and not interrupted or aborted with 'z').
+ (Note that RELOAD while in source view, at least in the normal one without
+ -preparsed or -prettysrc, does not have this effect since the document does
+ not get pushed through the cache writer at all in that case.) -KW
+* if a source cache copy for a document exists, we need a way to ensure that
+ reparsing from that copy does not try to rewrite that same copy "under our
+ feet" while still reading from it. Previously that was done by just never
+ rewriting an existing source cache. After changing that (see previous item),
+ a different approach is needed to prevent such collisions. This is now
+ solved in two ways: (a) Base a temporary new file or memory chunk for
+ writing, and only commit it to the doc's ParentAnchor object (replacing the
+ previous copy) at the end of the incoming data stream. This is done in
+ CacheThru_free(), but not in CacheThru_abort(), meaning that an interrupted
+ or otherwise aborted transmission will not replace an existing cached copy
+ with a truncated now version - as long as such interruption gets detected and
+ properly indicated, which is not the case for reading from the source cache
+ with SOURCE_CACHE:MEMORY in effect, see above. (b) Change the
+ HTParentAnchor's protocol field to indicate a non-HTTP protocol, before
+ starting to load from source cache in HTreparse_document(). Normally, as
+ long as DEBUG_SOURCE_CACHE is not defined, this prevents the cache writer
+ from (re)generating a cache copy. Mechanism (b) isn't necessary (everything
+ still works when DEBUG_SOURCE_CACHE is defined), it just avoids unnecessary
+ work -KW
+* source cache files and chunks were not always being removed when they should,
+ probably since change of 1999-06-18. A large number of cache copies could be
+ kept around unnecessarily wasting disk or memory space. Now make sure that
+ the source cache copy gets removed when a document is removed from the cache
+ of rendered docs. They would never be reused anyway. New function
+ HTAnchor_clearSourceCache. Note to other developers: HTAnchor_delete()
+ doesn't always remove the HTParentAnchor object, see its implementation -KW
+* detect errors during appending to the cache copy. Previously, memory
+ allocation errors (for SOURCE_CACHE:MEMORY) would cause program exit, and
+ file write errors (SOURCE_CACHE:FILE, e.g. if the temp disk space was full)
+ would go undetected and leave the cache file corrupt or truncated. Now allow
+ the program to continue normally, just cancel the source cache generation for
+ the current document (which may free up enough memory or disk space to remedy
+ the immediate problem). Produce an alert message. In the case of a file
+ error, produce the alert only once until a possibly re-reading of lynx.cfg,
+ since Lynx should remain otherwise functional in the face of cache file
+ writing errors -KW
+* extended HTChunk: added a variant for which memory allocation errors
+ are not fatal. Used for changes described in previous item -KW
+* don't write raw escape sequences to trace output for lynx-keymaps if
+ not using trace log file -KW
+* protect echo() in stop_curses, it could crash if stop_curses gets called
+ without preceding start_curses -KW
+* save size for regular files in anchor structure (we do the stat() anyway).
+ It shows up on INFO page as Content-Length. Also use it in partial display
+ mode to prevent the last call to HTDisplayPartial from HTFileCopy, since a
+ call to HText_pageDisplay will follow immediately. (But note that nothing
+ important depends on the correct size; should it be wrong, we lose at most
+ one partial display screen update. An equivalent suppression of the last
+ partial update for network protocols is not recommended, since (a) the size
+ is more unreliable and (b) the socket FIN may be delayed by the network.) -KW
+* split HTMIME_put_character into three functions -KW
+* made HTMIME.c handle folded header lines correctly (long-standing bug,
+ reported in February by Devid Coles) -KW
+ [ reference: http://www.flora.org/lynx-dev/html/month0299/msg00135.html ]
+* changed how HTTP redirection messages are handled. Don't read full message
+ and parse buffer for some header fields in HTLoadHTTP. Use common HTMIME.c
+ header parsing instead. Functions added/modified in HTMIME.c for storing
+ away the Location URL (if requested and found) and for stopping after the
+ headers. New private MIME types "message/x-http-redirection" and "www/debug"
+ to control this via HTStreamStack. Basic approach taken from newer W3C
+ libwww. Benefits:
+ - Removes actual bug that was reported: "Content-Location:" was falsely
+ recognized as "Location:". (long-standing bug)
+ [ reference: http://www.flora.org/lynx-dev/html/month1199/msg00370.html ]
+ - Removes potential other bugs caused by inferior header parsing in HTTP.c
+ (including Set-Cookie/Set-Cookie2).
+ - Should more header fields be needed in the future (also) for redirection
+ messages, we now get them automatically instead of having to add extra
+ code.
+ - Trace output now shows the same kind of info as for other responses.
+ In particular, Set-Cookie/Set-Cookie2 header fields will normally be
+ visible.
+ - Statusline progress messages now actually show the HTTP response line
+ as intended, and it is recorded for LYNXMESSAGES:. (Long-standing error,
+ previously what was shown could be an empty string, or arbitrary parts
+ of the response, including HTML markup from the message body.)
+ - Adding redirection support for lynxcgi would now be simpler (although
+ currently not done) -KW
+* HTErrorStream(), similar to W3C libwww, used in some cases for the above -KW
+* remove check in HTParse() dated 98/09/08 which prevented unescaping of 8-bit
+ data (reported by KW)
+* refresh screen for TRST changes in partial display mode as early as possible.
+ This fixes a problem when the table finished below the screen bottom -LP
+* remove global Newline_partial, use LYGetNewline() instead -LP
+* adapt idea by VH as a Perl script cfg-html.pl which generates HTML form of
+ the lynx.cfg documentation -TD
+1999-11-30 (2.8.3dev.16)
+* added -nozap command line option -KW
+ - In its basic form, it disables all checks for 'z' or ^G or other
+ "immediate" keys that otherwise happen while processing a request (for name
+ lookups, before or during loading of a document). Note that it also disables
+ paging through an incompletely loaded document during "partial display".
+ Normally, i.e. without this option, key input gets "swallowed" or "used up"
+ by the quasi-asynchronous checks even if they are not 'z' etc. or keys that
+ have meaning during partial display (meaningless keys just get ignored).
+ With this option, key input only gets read when lynx is ready to act on it.
+ - This can be used (a) by people who like to always have predictable
+ type-ahead (and don't care for 'z'apping and partial display scrolling), (b)
+ to achieve predictable reaction to keys if lynx is used under some scripting
+ environment that feeds it input like expect, and (c) for scripting a lynx
+ session by feeding it keyboard-like character input via input redirection
+ from a file or pipe (a simpler alternative to b, without the need for expect
+ or similar).
+ - Point (c) could be called "poor man's scripting". Note that the input has
+ to be provided in a raw form (as lynx would see it when it is actually sent
+ by keys), including raw control characters and escape sequences if necessary.
+ This patch does not change anything in the way such input is read and parsed,
+ other that what is explicitly described here. (This paragraph is only here
+ to explain the context, it does not describe new features.) P.m.s. will only
+ work as expected if lynx, on a given platform and with the display library
+ chosen, uses standard input for reading keyboard input. This is the case
+ with ncurses and possibly other curses implementations, but not with slang,
+ on Unix-like platforms, and cannot work on platforms where lynx gets keyboard
+ input in the form of platform- or implementation-specific keycodes (DOS,
+ Windows - except with cygwin?) instead of as an octet stream.
+ - The -nozap option takes an argument. The basic functionality as already
+ described gets invoked if the argument is not a specially recognized keyword
+ (it is suggested that -nozap=full or -nozap=all be used). The only
+ recognized keyword is "initially". With -nozap=initially, additional special
+ behavior is invoked the first time (and *only* the first time) when lynx
+ encounters an error or EOF when reading key input. (Currently this will not
+ get detected if slang with USE_KEYMAPS is used.) In this, case, -nozap
+ reverts to the default state ('z' will be checked for again). Under some
+ conditions are true (key input was taken from stdin, and stdin was not
+ connected to a terminal), lynx will then attempt to reopen stdin, connecting
+ it to a terminal (stdout, stderr, and the process's controlling tty are
+ tried, in that order - this is subject to change if something would be more
+ reasonable).
+ - The -nozap=initially special behavior will get triggered if input comes
+ from a file or pipe (p.m.s. above) when the provided characters are "used
+ up". Normally lynx should then just exit. The special behavior hands
+ control of the session to the interactive user instead at that point. All
+ code for -nozap is only compiled in if preprocessor symbol MISC_EXP is
+ explicitly defined.
+* ifdef'd some places for MINGW32 (diffs from Victor Schneider)
+* remove 'host' variable in LYGetHostByName() that obscured module-level
+ 'host[]' array in HTTCP.c for _WINDOWS_NSL configuration (patch by HS,
+ discussion by KW) -TD
+* the Newline variable is now PRIVATE except the mouse code in LYStrings.c -LP
+* modify HTDOS.c for Wattcp targets (Watt-32 and original wattcp). When Lynx
+ is sitting idle in getxkey() waiting for a keypress, no network functions are
+ called. Hence no sockets are processed, "ICMP Echo replies" is sent etc.
+ This patch has been tested with SLang and '-DDJGPP_KEYHANDLER' I'm not sure
+ how to hook into 'SLkp_getkey()' or keyboard polling in performed under raw
+ PDCurses (Gisle Vanem <gvanem@eunet.no>)
+* update docs for -tna instead of --sticky_inputs -KW
+* document extended KEYMAP syntax in lynx.cfg -KW
+* update Users Guide for KEYMAP changes, especially the TEXTAREA-related
+ sections -KW
+* move text on ^V a bit to better place, provide a couple links to it -KW
+* add blurb about TRST to Users Guide. Also mention external scripts for table
+ handling -KW
+* revise section in Supported URLs on internal schemes. Toned down, provide
+ rationale, give examples -KW
+* fix a few typos in README.TRST -LP
+* use 'rand()' in NewSecureValue() -TD
+* use a random number rather than a counter to name temporary files -TD
+* change LYReadCFG.c to accept any leading punctuation in lynx.cfg as a comment
+ delimiter -TD
+* eliminate some clutter with typecalloc/typecallocn macros -TD
+* eliminate some clutter with new function LYBadHTML() -TD
+* add checks for null pointers in CTRACE statements in HTML.c (based on report
+ by LV) -TD
+* change realloc calls in SAVE_TIME_NOT_SPACE ifdef in StrAllocVsprintf() to
+ HTalloc, since older machines (e.g., SunOS 4.x) do not necessarily handle a
+ null pointer parameter to realloc -TD
+* correct ordering of command-line options in LYMain.c -TD
+* updates for files in lynx_help & keystrokes -PW
+* clarify `General Configuration Instructions (all ports)' in INSTALLATION -PW
+* remove "your lynx.cfg"/"compiletime settings" from '='Info Page -LP
+* add a note to Lynx_Users_Guide.html#lynx.cfg on "g lynxcfg:" -LP,HN
+* change LYNXCOMPILEOPTS: to a link from LYNXCFG: -LP
+* slightly reorganize partial mode logic: 'display_partial' variable is now
+ initialized directly in HText_new(), no need for specialized semaphore any
+ more -LP
+* Allow KEYMAP directives in lynx.cfg of extended form
+ KEYMAP:lynxkey:lynxaction:editaction[:sel], where lynxkey and lynxaction are
+ as before, editaction is a line-editor action like FORW, BACK, ERASE etc.
+ and sel selects the line-editor style to be affected (as a number, starting
+ with 1 for the Default Binding; or 0 for all styles (the default); or a
+ negative number -n meaning "all line-editor styles except n"). See Line
+ Editor Help pages for keywords to use as editaction. This includes PASS
+ (which was already implemented), for "passing" on the key when line-editing
+ form fields so that the normal lynxaction will be invoked.
+ (KEYMAP:lynxkey:lynxaction:DIRED is also still possible for defining a Dired
+ mode binding).
+ This is based on a patch from IZ which introduced combined definitions
+ in a .lynx-keymaps file in the form:
+ setkey "\200s" LAC:LEFT_LINK/BACKW # C-left
+ setkey "\200t" LAC:RIGHT_LINK/FORWW # C-right
+ Combined definitions in .lynx-keymaps are also supported in this patch, but
+ the syntax was changed to use another ':' instead of '/' as separator. Note
+ that there is no need to support .lynx-keymaps (i.e., compile with
+ USE_KEYMAPS defined) for using the extended KEYMAP lynx.cfg directive with
+ this patch -KW
+* avoid access to uninitialized members in TRSTable.c -KW
+* limit span values accepted for TRST with TRST_MAXCOLSPAN and TRST_MAXROWSPAN,
+ which can be changed in userdefs.h. Without imposing a limit, attempts to
+ trick lynx into allocating huge blocks of memory (which might cause thrashing
+ without apparent reason) with something like ROWSPAN=10000000 are just too
+ easy -KW
+* moved definition of SAVE_TIME_NOT_SPACE to userdefs.h. You may want to
+ undefine it for a platform where running out of memory is a frequent problem
+ (DOS?), although the effect won't be very pronounced. Used in TRST code to
+ affect size of some allocations (also used as before for HTSprintf0/HTSprinf)
+ -KW
+* implement COLSPAN=0 and ROWSPAN=0 according to HTML 4.01 (not HTML 4.0). The
+ span extends until the end of the current column group and row group (i.e.
+ next THEAD/TFOOT/TBODY), respectively; or until the end of the row or table,
+ respectively, if there is no containing group (thus acting as per HTML 4.0).
+ Also cancel effect of all ROWSPANs at a THEAD/TFOOT/TBODY boundary (problem
+ with other browser described and behavior proposed by G. James Berigan in
+ <http://www.war-of-the-worlds.org/html/span-vs-group.html>) -KW
+* 'prev_target' is now PRIVATE to LYMainLoop.c [defined outside of mainloop()];
+ this undoes some dev.15 changes. -LP, KW
+* replace HText_pageDisplay() calls from partial mode (LYUtils.c and
+ HTFormat.c) with LYMainLoop_pageDisplay() function implemented in
+ LYMainLoop.c, it simply calls HText_pageDisplay() but has access to
+ LYMainLoop.c PRIVATE variables. -LP, KW
+* make ^X a prefix key in all Line Edit styles. That means ^V should never be
+ needed any more to invoke the special textarea commands (but it's still
+ supported). Updates to help files to reflect this change -KW
+* don't produce a link from the KEYMAP page to a help file. The one we used to
+ use doesn't really help -KW
+* correction in code executed after textarea external editing (that determines
+ when to prompt for re-wrapping): use start_anchor not anchor_ptr. Without
+ this correction, invalid memory access could occur. (This was probably also
+ responsible for producing the prompt when it shouldn't be produced in some
+ cases, as has been reported.) -KW
+* some tweaks of Novice mode help lines: don't show wrong key "to delete all
+ text in field" (FORM_NOVICELINE_TWO); replaced an occurrence of <delete> with
+ <backspace>. In some cases (e.g., disabled fields), prefer no info to wrong
+ info -KW
+* extended KEYMAP option: additional field can specify DIRED to request
+ mapping in the Dired mode key_override table rather than the normal keymap
+ table. Documented the DIRED field and default override mapping in lynx.cfg
+ -KW
+* corrected KEYMAP display for dired mode. It could display the normal binding
+ when that wouldn't actually be used, for example if a key is bound to
+ DO_NOTHING for DIRED. The logic deciding whether to show a separate line for
+ uppercase letters was only looking at the normal keymap -KW
+* reset the edit_mode flag (indication of Dired mode) in various places, so the
+ flag doesn't stat TRUE after a new page has been loaded. For example,
+ invoking the forms based 'O'ptions page from a Dired directory view would
+ leave the Dired key bindings enabled within the Options page -KW
+* for LYNXMESSAGES: page of recent statusline messages, removed setting of the
+ LYforce_no_cache flag in getfile(). Set the flag in LYMainLoop.c instead,
+ but only for following a link. This makes the page act more like a normal
+ no-cache document, for example returning to it via PREV_DOC does not cause an
+ automatic update. The special handling in LYMainLoop.c is necessary because
+ the link to LYNXMESSAGES: appears on the History Page, and following a link
+ from the History Page (as well as some other generated user interface pages)
+ normally implies overriding of no-cache behavior which we don't want in this
+ case -KW
+* in LYNXMESSAGES: page, number recent statusline messages in historic order,
+ starting with 1 for the oldest. This should make it more obvious that they
+ are listed latest-first. Add "(No messages yet)" text if there are no
+ messages. Removed generation of invalid <pre> -KW
+* use a temporary file instead of the normal .lynxrc file for saving and
+ restoring current settings in reload_read_cfg(). This avoids unexpected side
+ effects of lynx.cfg reloading (LYNXCFG://reload action), i.e. silent
+ modification or first-time generation of .lynxrc contents. In principle this
+ should make reloading of lynx.cfg usable for accounts that don't allow saving
+ of personal settings (i.e. option_save restriction, implied by -anonymous)
+ if other restrictions don't forbid it; but currently the option_save
+ restriction is still obeyed for saving to the temporary file (so that
+ reloading of lynx.cfg is prevented) -KW
+* tweaks for LYNXCFG: and LYNXCOMPILEOPTS: pages: honor REUSE_TEMPFILES
+ setting if pages need to be regenerated, and clean up the memory for holding
+ the file URLs in free_lynx_cfg(). Recover if the tempfile has unexpectedly
+ disappeared, by regenerating it. Also regenerate tempfile if NOCACHE key
+ ('x') is used. Added extra checks before doing automatic uncaching of
+ previous page in LYNXCFG://reload code, to test whether the previous page is
+ really a LYNXCFG: view -KW
+* corrected problems with "show color" in forms Options page. Omit "ON" choice
+ if color is not possible (but saving allowed). When option_save restriction
+ was in effect, the ON/OFF initialization was wrong (resulting in unwanted
+ toggling of color each time options were changed in an anonymous account) -KW
+* tweaks of reload_read_cfg() for retaining "show color" setting and for
+ updating display_lines (user_mode may have changed) -KW
+* change for HTParse: if there is a hostname part, recognize a '?' as ending
+ it if there are no further slash characters -KW
+* tweaks in configure.in and INSTALLATION: describe correctly what
+ --disable-dired-override does. Rename --disable-dired-archive to
+ --disable-dired-dearchive. Clarified INSTALLATION text for
+ --disable-full-paths. Changed some "define" to "prevent defining" -KW
+* don't try to put cursor in last screen position for hiding in
+ show_main_statusline if -show_cursor/SHOW_CURSOR is on. The show_cursor
+ behavior may have been turned on to avoid problems with curses libs or
+ terminal types that cannot deal with it correctly. On pages with no links,
+ for example SOURCE display, this may leave the cursor at the end of the
+ statusline message if show_cursor is on. This just restores previous
+ versions' behavior in that case. On pages with links, the movement is
+ unnecessary anyway since the cursor will move again to the current link -KW
+* removed a bug in automatic textarea growing. Textarea would grow by
+ one line unnecessarily if enter was used on the last input line on a
+ screen (if that was not actually the last line in the textarea). New
+ function HText_TAHasMoreLines() to help with this -KW
+* revision of "nonsticky" behavior / options. Got rid of "sticky" terminology.
+ Renamed the controlling option to TEXTFIELDS_NEED_ACTIVATION and command line
+ flag -tna.
+ Compiling in of this mode can be disabled, see in userdefs.h under
+ TEXTFIELDS_MAY_NEED_ACTIVATION. Two versions of "Textfields Need
+ Activation" mode are provided. The default mode (simpler yet better IMO)
+ highlights an inactive selected text input fields like a current normal
+ anchor. The alternative variant (may go away later?) behaves like VH's
+ previous implementation and gets used when compiling with
+ -DINACTIVE_INPUT_STYLE_VH.
+ Many bugs that would occur in somewhat unusual circumstances are fixed, for
+ both variants. (Action of various commands on TEXT_SUBMIT_TYPE fields,
+ interaction with mouse selection, ...) Selecting an inactive input field with
+ the mouse will activate it. Various tweaks to make sure selecting a field in
+ this way will put the editing cursor at the right position (even if the line
+ had been scrolled / might be scrolled on entering the line editor), at least
+ with NCURSES mouse support. Also, -show_cursor now in general works as
+ expected. (In the INACTIVE_INPUT_STYLE_VH variant, cursor may sometimes end
+ up on the statusline after error messages.) -KW
+* treat input lines of the same textarea more like one entity, as far as
+ "Textfields Need Activation" is concerned, as long as movement among those
+ lines is with PREV_LINK/UP_LINK/LPOS_PREV_LINK/NEXT_LINK/DOWN_LINK/
+ LPOS_NEXT_LINK or ACTIVATE keys (the last one only if TEXTAREA_AUTOGROW is
+ defined, for consistency with line-appending behavior). I.e. moving among
+ textarea lines with those keys automatically activates ('enters') the new
+ field for line editing if the previous one was activated -KW
+* modified statusline messages to be more appropriate and specific on non-
+ activated form fields. (The additional messages are not used or compiled
+ in if TEXTFIELDS_MAY_NEED_ACTIVATION isn't defined.) Avoid unnecessary
+ repainting/refreshing of the physical statusline in many cases of moving
+ among fields and links. Make sure the additional lines shown in Novice
+ mode are also appropriate -KW
+* modified line editor behavior on "disabled" form text fields: instead of
+ disabling all non-terminating edit keys, allow those that never modify the
+ field contents. The user can now scroll through a long value in a disabled
+ field with the arrow keys, rather than being stuck at the end -KW
+* the ncurses mouse popup window would overlap the statusline in Novice mode.
+ Limit the overlap to border area (so at least no significant text gets
+ corrupted) -KW
+* modified code for stickiness of the second kind (ex-STICKY_FIELDS) according
+ to preliminary proposal from Vlad. Named LEFTARROW_IN_TEXTFIELD_PROMPT.
+ Does not depend on any conditional compilation symbols, and is now unrelated
+ to the other kind of "stickiness" discussed above. See lynx.cfg. This isn't
+ optimal yet (LAKABOFTIF discussion etc..), but better than leaving it as it
+ was -KW
+* made default width of textarea fields (if no COLS attribute given) depend on
+ window or screen width, instead of using a fixed default of "60". I.e. for
+ wider windows make better use of available space, and for narrows windows
+ avoid wrapped textarea lines. Take the usual left/right margins (depending
+ on current block style) into account. But for -dump don't make fields longer
+ than 60 anyway (they will just show up as blocks of underscores anyway, not
+ showing text content) -KW
+* changes in code used to create new bookmark file after a bookmark has been
+ 'R'emoved. Change should only affect Unix. Basically, revert back to
+ behavior used before 2.8.1dev.8 for "normal" files (no symlinks or extra
+ hard links). I.e. use rename / maybe try "mv" instead of "cp", then change
+ permission bits explicitly. Using "cp" means running the risk of losing or
+ truncating the user's bookmark file if for example the disk became full
+ (although these occasions should be rare - the scratch file we are trying
+ to copy or rename was written just before without error, usually on the
+ same filesystem). Some more comments in LYBookmark.c. Note: if you like
+ your bookmark files, make backup copies of them anyway... -KW
+* changed F1 key bindings so it always invokes DWIMHELP, also in the Line
+ Editor (for all three Binding tables). This means that pressing F1 (if you
+ have it, and it is correctly mapped and recognized) while in a text form
+ field will now bring up the Line Editor Help Page for the currently selected
+ line edit style. Other keys bound to HELP by default ('?', 'h') remain
+ unchanged, they still always go to the main Help Page -KW
+* don't let DWIMHELP show Line Editor help for a text input field that is
+ disabled -KW
+* don't mangle a -cookie_file like /home/user/.lynx_cookies.~1~, only interpret
+ the '~' as reference to HOME if it's right at the beginning and followed by
+ '/' and then some more. There are probably other instances where '~' gets
+ mistreated (in addition to the intentional dropping of "user" from something
+ like "~user/" in file URLs etc.) -KW
+* changed type of EXP_KEYBOARD_LAYOUT tables to LYKbLayout_t. They hold
+ Unicode values, any similarity to LYKeymap_t is just accidental -KW
+* changed EXP_KEYBOARD_LAYOUT logic so that input characters that are
+ unrepresentable in the current display character set (unless it is UTF-8) get
+ transformed into '?' instead of some accidentally chosen 8-bit character.
+ For UTF-8, convert to UTF-8 encoding instead. Note the Line Editor isn't yet
+ UTF-8 aware; with some care it is possible to enter UTF-8 text, but the
+ display will be messed up, esp. the cursor position will be shown wrong -KW
+* some corrections for TPOS, YANK enhanced lineedit functions -KW
+* added back in a block in LYmbcsstrlen that got lost somehow -KW
+* fix an array boundary accident in GridText.c -JB
+* reiterate that LYNXCGI_LINKS is set by the configure script -PW
+* note that patches should be generated by "diff -u" -PG
+* modify HTReadProgress so that setting SHOW_KB_RATE false will let the
+ amount read be shown in bytes/sec -DK
+* modify mkdirs.sh to ignore DOS-style device -IZ
+* modify CF_PATH_SYNTAX configure macro to accept DOS-style path syntax, for
+ use in OS/2 EMX port -IZ
+* fix some memory leaks in visited-pages tree -IZ
+* correct recent change to LYEditmap.c for EBCDIC -PG
+* change 'elf32ppc' to 'elf32ppc*' in config.guess to work on MkLinux DR3
+ (reported by Christopher Conrade Zseleghovski (kkz@MIMUW.EDU.PL>)
+* add check to HTConfirmDefault() to ensure that NLS form of "yes" and "no"
+ are distinct in the first character, revert to English if not -TD
+* add configure test for wredrawln, and use CF_CURSES_FUNCS -TD
+* improve CF_TERMCAP_LIBS configure test -TD
+1999-11-17 (2.8.3dev.15)
+* add popup in options menu to control alternate organizations of the
+ visited links page -IZ
+* reformatted src/makefile.dos and src/makefile.dsl to make them simpler to
+ modify -TD
+* add -DOK_OVERRIDE to DIRED_DEFS for djgpp -LP
+* change the samples in "URL Schemes Supported in Lynx" so they would appear
+ without //user:passw@ but //user@ with the explanation of yet another
+ possibility added in words... So user will not get a wrong impression if
+ reading that document not so carefully (you know, samples are so easy
+ remembered without details), -KW, LP
+* ifdef bkgd() call in force_repaint that accommodated pre-ncurses 4.1 bugfix,
+ from early 1997. With current code, a ^L when a popup is displayed causes
+ the screen colors to be reset (reported by KW) -TD
+* undo recent no_color_video check for A_BOLD, A_UNDERLINE since this did not
+ have the intended effect (reported by KW) -TD
+* add note to lynx_url_support.html about lynxcgi -PW
+* add user search in partial mode (while loading of the document is in
+ progress). Scrolling to the string in question is not working properly yet
+ if you repeat 'n' next time. More work required -LP
+* improved makelynx.bat (<vtailor@gte.net>)
+* fixed bug that corrupted memory (resulting in crashes) in situations when
+ line ends with LY_SOFT_HYPHEN -VH
+* correct comment in userdefs.h regarding renaming of
+ LINKS_AND_FORM_FIELDS_ARE_NUMBERED to LINKS_AND_FIELDS_ARE_NUMBERED and
+ change DEFAULT_KEYPAD_MODE to LINKS_AND_FIELDS_ARE_NUMBERED -PW
+* fix bug that caused lss-enabled lynx to crash on growing textarea or
+ inserting file into it -VH
+* new lynx.cfg option REFERER_WITH_QUERY:[SEND|PARTIAL|DROP] -KW
+* don't send Referer if we have to load a document again that we got
+ from the history stack. Lynx would send the URL of the current
+ document (the one "later" in history) which could only accidentally
+ be right -KW
+* changed default for PERSISTENT_COOKIES from TRUE to FALSE, since
+ persistent cookie support is now configured in by default -KW
+* new functions (key_for_func_ext) to return a "best" key (or key pair) to
+ invoke a given lynx action, either in the Line Editor or in normal mode.
+ Currently only used for a couple of statusline messages (those that had ^V
+ hardcoded). The statusline info while in a textarea now gives the right
+ key(s) for invoking external editing, or omits the info if appropriate
+ (no key bound, or no editor defined or allowed) -KW
+* doc updates for TEXTAREA special functions -KW
+* moved #defines for TEXTAREA_EXPAND_SIZE, AUTOGROW, AUTOEXTEDIT from
+ LYMainLoop.h to userdefs.h, the latter two renamed to TEXTAREA_AUTOGROW
+ and TEXTAREA_AUTOEXTEDIT, added description -KW
+* minor tweaks: -accept_all_cookies help string, some formatting changes,
+ minor text additions and corrections -KW
+* set $(PROG_EXT) variable in makefiles for cygwin -TD
+* define __CYGWIN__ if needed, e.g., for betas that define __CYGWIN32__ -TD
+* workaround cygwin b19.1 problem generating cfg_defs.h because it did not
+ properly export $PATH -TD
+1999-11-03 (2.8.3dev.14)
+* modify no_color_video check for A_UNDERLINE so it is active for any
+ combination that uses underlining (reported by KW) -TD
+* modified HTML.c so configure --enable-internal-links builds -TD
+* improved 'lynx.patch' rule in makefile.in -PG
+* add rough version of makelynx.bat for use with Khan's MingW32 (from Victor
+ Schneider <vtailor@gte.net>)
+* update dependencies in makefile.bcb for src/TRSTable.c -HS
+* fix PDCurses ifdef's in LYCurses.c to work with WATT-32 -DK
+* correct ifdef's in LYPrint.c so that send_file_to_mail() works with DJGPP -DK
+* modify DOS makefiles for PDCURSES for watt-32 and some of the other recent
+ changes to lynx. Included some of the EXP_ defines that DOS users may want.
+ Changed the -O3 back to -O2, since -O3 has no advantage under djgpp -DK
+* remove a useless ';', use FREE() instead of free() - JB
+* correct spelling lexem/lexeme (reported by KW) -TD
+* split-out function check_history() in LYMainLoop.c -TD
+* add configure check for vasprintf -TD
+* add configure check for _GNU_SOURCE -TD
+* minor fixes for configure script macros CF_TERMCAP_LIBS, CF_DISABLE_ECHO,
+ CF_GCC_ATTRIBUTES, CF_GCC_WARNINGS -TD
+* fixed bug in psrcmode code. Now htmlsrc_tag encloses only tagname, not
+ everything in generalized brackets <,>,</,/> (reported by KW) -VH
+* fixed a bug with 'g' command (reported by KW) -VH
+* default value for 'OPT' in SGML.c made '1', removed alternatives to code
+ surrounded by #if OPT1
+* notes (VH):
+ + Seems that 'OPT' stuff doesn't contain errors. Let's enable it for several
+ releases, and then remove alternative code.
+ + Added comments about pools.
+ + Docs updated to reflect new functionality of -dont-wrap-pre
+* old psrcview bug fixed - markup was unbalanced in some situations -VH
+* content of SAMP tag made justifiable -VH
+* implemented HTStyleChange pooling - sizeof(HTStyleChange) is 4 times smaller
+ than before, and only necessary number of stylechanges is allocated now,
+ instead of some constant (1024 by default) -VH
+* functionality of dont-wrap-pre improved and extended. Now it's possible to
+ avoid wrapping the document being dumped completely (size of the non-wrapped
+ line before the patch was limited by MAX_LINE = 1024 by default). Specifying
+ -dont-wrap-pre with interactive session enables wrapped lines (in PRE) to
+ be marked as in source view - with '+' in normal view -VH
+* functionality of -force-empty-hrefless-a was cleaned up,
+ #ifndefs NO_EMPTY_HREFLESS_A and endif's were removed -VH
+* colorstyle changes are not emitted in HTML_end_element if me->skip_stack was
+ >0 on entry to this function. This caused some glitches if
+ -force-empty-hrefless-a was enabled -VH
+* LYPrettySrc.c was slightly cleaned up, added support for lynx.cfg reloading,
+ memory deallocation -VH
+* possible bug in print_wwwfile_to_fd fixed - when quoting the page, seems that
+ several '>'s could be emitted on the long line formed by concatenating lines
+ with LY_SOFT_NEWLINEs at the begining of them -VH
+* general notes -VH:
+ + users of lss-enabled lynx should consider on upgrading the lynx - at least
+ those who use lynx for viewing huge files. By default, each line on the
+ screen took 1K for colorstyles (on x86). With new approach colorstyle
+ changes take 24 bytes (on x86) per line in average document. Old lynx with
+ 900K html file loaded as startfile occupied 30M of virtual memory, lynx
+ with patch applied occupied 5 Mb on the same file. Old code is still
+ accessible by defining OLD_STYLECHANGE.
+ + I spent 4 hours debugging attempting to write/fix code that cleans up the
+ memory allocated in LYPrettySrc.c, but Lynx.leaks shows that I didn't
+ succeeded. I fear that leak detection stuff is broken - I checked/traced
+ the code very carefully several times.
+> the remainder (most) of this patch from KW:
+* for confirmation prompts (HTConfirm), also accept English letters 'Y', 'y',
+ 'N', 'n' as responses. If characters different from those are derived from
+ the first letters of the translation of "yes" and "no" in a localized lynx,
+ the latter will still be the ones that appear in the prompt text and will
+ have precedence. Message translations using multibyte character sets should
+ continue to *not* translate "yes" and "no". Added a note to that effect.
+* small update for some chartrans tables, minor comment changes.
+* for Unix, use LYSystem instead of system for invoking telnet, rlogin,
+ rtn3270 commands.
+ [ For some non-Unix systems, LYSystem messes around with the passed command
+ string in various ways, and does some other stuff for DJGPP. So no change
+ for those, since I assume it worked before. For Unix the change prevents
+ the following occurring with ncurses (at least if USE_SIGACTION is
+ defined):
+ - access some (valid) telnet://some.host URL.
+ - within telnet client, escape to command level (usually '^]')
+ - suspend (usually 'z' or ^Z)
+ - resume (fg). Lynx process gets woken up, redraws lynx screen,
+ screen & tty state get messed up. ]
+* another tweak for display refreshing when text previously displayed
+ had UTF-8 (for ncurses) - a check in display_page was missing.
+* corrected stupid problem in LYGetFileInfo - invalid memory access.
+* corrected and extended handling for textarea INSERTFILE and EDITTEXTAREA
+ (or DWIMEDIT), the previous patch wasn't quite right:
+ - now really truncate very long lines as intended for INSERTFILE, instead of
+ wrapping with loss of one character.
+ - for EDITTEXTAREA (DWIMEDIT), implement wrapping instead of truncation
+ (Rationale for the difference: user's editing work shouldn't be lost if we
+ can avoid it; it is only temporarily stored in a file which may be
+ unrecoverable, different from the typical INSERTFILE case.) If, upon
+ returning from the external editor, lines are encountered that don't fit in
+ the displayed width of the textarea fields, the user may be given the
+ option to wrap to that width. (This prompt may not be given when the first
+ such line has no suitable spaces for breaking - the file may be binary
+ garbage after all, not worth fixing up too much.) Line breaking is
+ attempted at spaces if possible (using isspace() for checking), but not if
+ the only available spaces are close to the beginning of a line. An attempt
+ is made to join the wrapped part of a line (if not too long) with the next
+ line if it is not indented, by suppressing the next line break (if not too
+ far away). Some other heuristics are used that work reasonably well for
+ normal text paragraphs.
+ If the above mechanisms fail, or the user did not confirm wrapping when
+ prompted, very long lines will still be wrapped to fit into the buffer size
+ (around 1024 chars).
+ [ The wrapping works quite nicely in "normal" cases - please try it! ]
+* mouse action in popups would lead to call of fancy_mouse() with wrong row
+ number, which could lead to messed-up display as well as invalid memory
+ access.
+* The previous changes in link redrawing made things worse instead of better
+ for UTF-8 display with ncurses (without color style). This time (using
+ wredrawln, not touchline) it should really get better...
+ [ The UTF-8 related changes would need testing with non-ncurses curses libs,
+ if anyone has one of those AND a working UTF-8 environment - late xterm
+ betas(?) from Tom's site should do. If the functions used for ncurses are
+ available in other curses libs, the code should probably look the same as
+ for ncurses. ]
+* SGML.c to compile without --enable-prettysrc (reported by HN) -KW
+* fixes an invalid memory problem from previous patch
+* adds alignment inheritance from COLGROUP / COL / THEAD / TFOOT / TBODY.
+* remove some logic from LYmbcsstrlen() that gave an incorrect count for
+ the number of cells displaying multibyte characters, resulting in too-few
+ cells being highlighted (reported by HN, HS) -KW
+* added support for ROWSPAN attribute of TD and TH to TRST. This only
+ reserves the appropriate amount of space in subsequent lines.
+ [ Pages that show off ROWSPAN nicely:
+ <http://www.iro.umontreal.ca/contrib/po/HTML/domain-hello.html>
+ and related ones for other "domain"s. (Verify that there really
+ is a ROWSPAN= in the current version.) View with a screen width
+ of 100. With 80 there is some kind of problem, compare both
+ ^V settings... ]
+* some corrections in TRST code.
+* change initialization order of key escape sequence mappings for slang, so
+ that terminfo/termcap information always overrides defaults that may
+ conflict.
+* minimal memory cleanup / leak prevention for EXP_FILE_UPLOAD error
+ cases in GridText.c.
+* in HText_SubmitForm, don't change the post_content_type of the
+ passed in newdoc structure unless that is really wanted.
+* tweaked UTF-8 prevention of display library wrapping/truncation to make
+ better use of available width for centered text, and to not apply if dumping
+ to stdout.
+* for UTF-8 output with ncurses, do a clearok in display_page also if the page
+ that was *previously* displayed had UTF-8 characters. Without this there
+ were still display glitches.
+* made previous changes to SGML.c and HTMLDTD for handling OBJECT more generic.
+* minor tweaks, cleanups, glitch removal in previous changes.
+* better tracking of HTSprintf0/HTSprintf with --enable-find-leaks
+ (-DLY_FIND_LEAKS). This can be disabled in LYLeaks.h by removing the
+ definition of LY_FIND_LEAKS_EXTENDED.
+* added variant behavior in StrAllocVsprintf to make HTSprintf0/HTSprintf use
+ less memory allocation calls and keep its temporary string buffers across
+ calls. The buffers then only grow and never get cleaned up. This is enabled
+ by defining SAVE_TIME_NOT_SPACE in HTString.c, disable the definition there
+ in case of problems.
+* added code so HTSprintf0/HTSprintf can use vasprintf() in some situations,
+ which should be more efficient. It also works with --enable-find-leaks
+ (EXTENDED or not). This only comes into play if USE_VASPRINTF is defined
+ (not defined automatically anywhere).
+ [ For me (some Debian glibc version), the prototype for this function
+ is in stdio.h but only gets included with an explicit -D_GNU_SOURCE. ]
+ [ Which of the four combinations with/without vasprintf, with/without
+ SAVE_TIME_NOT_SPACE is better (if any) remains to be tested. I have seen
+ drastic differences under leak tracking, but that's just too much
+ different from a normal situation to count for anything. ]
+* Some minor leaks fixed. (LYMainLoop.c)
+
+[ Had to make owner_address and ownerS_address file-wide PRIVATE's
+ instead of auto to unleak them. Could be taken out of more
+ argument lists now. ]
+
+* HTFile.c: correction in FormatNum (could duplicate fields for some
+ LIST_FORMAT settings), avoid some HTSprintf0 calls in FormatStr.
+* replaced calls to HTSprintf with calls to HTSprintf0 in various files.
+* added missing include of LYLeaks.h in LYPrettySrc.c. But disabled memory
+ tracking there, too many allocations show up as leaks.
+* allow digits in tagspec for -prettysrc.
+* the 'fixit' change of 1999-05-16 didn't really let LYConvertToURL() revert to
+ the right old behavior in the non-'g' use. Now return a file URL for the
+ nonexisting file in the relevant situation again, as before 1998-03-25,
+ instead of an erroneous "file://localhost" which (on Unix-like systems at
+ least) would result in access to the root directory. This change (like the
+ changes of 1999-05-16 and 1998-03-25) only matters for strings that aren't
+ already in absolute URL form, don't start with a slash (or, for DOSPATH
+ systems, other path separator) either, and don't get turned into remote URLs
+ by successful 'guessing' and DNS lookup. None of the changes affect VMS.
+* protect INSERTFILE and EDITTEXTAREA from generating memory access violations
+ if the inserted file has lines that are too long for the buffer used. An
+ alert message is issued and the long lines are truncated. Also don't exit if
+ memory allocation fails for the buffer to hold the whole file, since the only
+ reason for the failure may be that the file is too huge when otherwise lynx
+ has enough memory.
+* improved handling of some invalid constructs in SGML, especially
+ '<' followed by various characters; don't lose those characters from
+ what gets displayed for -prettysrc.
+* a pre-filled TEXTAREA text that needed charset translation could cause
+ use of an invalid pointer when building the page, resulting in garbage
+ data being displayed (or worse). The problem was in HTML.c, not related
+ to TEXTAREA editing or other related new functions.
+ [ preceding three were partially already in previous patch ]
+* recognize '<?' as introducing an SGML PI. Within most elements' content (or
+ outside of any elements) this makes no effective difference except for TRACE
+ messages and -prettysrc, the input is still junked up to the next '>' as for
+ a completely invalid tag. Within PCDATA elements the PI is now also ignored
+ instead of being treated as character data, this makes a difference for
+ example in a TEXTAREA in SortaSGML mode. (PI's aren't really expected to
+ occur in the middle of HTML, but are used at the beginning of XHTML documents
+ and other XML documents.)
+* the earlier change of TEXTAREA handling (treating as SGML_PCDATA, SortaSGML
+ only) created a problem, some lynx special characters were passed on as data
+ characters in the field contents and would mess up line editing and possibly
+ the submitted form data. Actually the problem also existed before, but only
+ for non break space, soft hyphen etc. encoded directly as character data
+ (not NCRs or entities). Resolved by telling SGML.c not to generate lynx
+ special chars for some element contents (currently only TEXTAREA), with new
+ flag Tgf_nolyspcl.
+* corrected some logic errors in LYUCFullyTranslateString. Special attribute
+ characters are now more often translated to real characters when 'Back' flag
+ is set, and should now be translated to the *right* characters for the target
+ charset. (They were sometimes converted to ISO-8859-1 values when the 'to'
+ charset was different.)
+* added a missing significant cast in UCReverseTransChar.
+* for scrollbar mouse clicking, use codes that work independent of current
+ line-editor key bindings.
+* better calculation of "subjective distance" from next anchor for mouse.
+ Change of 1999-07-30 had various problems, it wasn't quite intuitive. Use
+ scaled numbers for finer granularity. Don't make "basin of attraction" too
+ wide, or it becomes hard to find a "background" spot to click on that doesn't
+ affect a link if a page has a high density of links.
+ [ For example with a pair of fields:
+ Submit Reset
+ xxx
+ clicking in any of the positions marked 'x' on the next line would
+ select the first field, not the second. That was not an improvement. ]
+* functions LYmbcsstrlen, LYno_attr_mbcs_case_strstr, and LYno_attr_mbcs_strstr
+ in LYStrings.c where unclear about the concept of 'printable' or 'physical'
+ used for some returned values in the CJK case. Callers expected number of
+ display cells, implemented was number of 'characters' counting full-width
+ characters as 1 instead of 2. Now these functions take an additional
+ argument 'count_gcells' that tells them how to count.
+ This removes some long-standing, somewhat obscure problems with search target
+ highlighting under CJK display character sets, as well as new (and less
+ obscure) CJK problems introduces by the latest changes for highlighting.
+ Also fixed some details in the *strstr functions. The positioning of the
+ highlighting in CJK mode should now be correct and work as expected (as for
+ other display character sets) for anchors, search targets, and combinations
+ of both.
+* reorganized LYOpenTempRewrite. It should finally make sense for systems
+ without HAVE_TRUNCATE defined.
+* corrected SNACat (was unused).
+* changes for SUP and SUB: Render SUP visibly as a '^' character if it needs
+ to be separated from a preceding character in order to prevent
+ misinterpretation. The test currently used is isxdigit for the the preceding
+ character. Render <SUB> and </SUB> always as brackets '[' and ']'
+ respectively. SUB is mostly used in technical material while SUP occurs
+ frequently in pages of general nature where it is not essential, therefore
+ the different treatment.
+1999-10-21 (2.8.3dev.13)
+* revert a change from dev.4 which disabled getbkgd support in PDCurses -DK
+* modify ifdef for USE_QUOTED_PARAMETER to include __CYGWIN__, else names such
+ as "telnet.sh" are translated to "telnet" -DK
+* improve/simplify scrollbar support -IZ
+* implement LYNXMESSAGES:/ page using non-tempfile approach -LP
+* correct an assignment to last_kcode, broken by restructuring of LYMainLoop.c
+ in dev.11 -HS
+* tweak LYExecv() to exclude SH_EX conditional (dired commands didn't work
+ on non-Windows platforms when SH_EX defined) -LP
+* fix a potential out-of-range pointer in HTParse - JB
+* fix a small leak in the statusline history page - JB
+* restore DELEL lineedit key binding in the Alternate map (which apparently was
+ changed in -dev.4 to the DELNW function) to the ^K key -KED
+* LYMainLoop.c: remove a dozen of unnecessary `refresh_screen' flags from
+ LYK_HISTORY, LYK_PRINT, LYK_LIST, LYK_ADDRLIST, LYK_VLINKS where a new html
+ page is generated (any document update that may be displayed in "partial
+ display" mode need not set `refresh_screen' flag) -LP
+* correct some typos in cernrules.txt -VH
+* move declaration of LastDisplayChar to make GridText.c compile with DJGPP -LP
+> the remainder (most) of this patch from KW:
+* HTFTP.c: (already sent w/o description - this is updated to dev.10)
+ - interrupted_in_next_data_char was not being reset. That could make all
+ subsequent FTP directory listings fail (by showing an empty directory)
+ after receipt of one directory listing had been interrupted.
+ - be nice, send quit before closing at least in the normal (non-interrupted
+ and successful) case. Some servers (wu-ftpd at least) otherwise complain
+ with "You could at least say goodbye" which in turn causes unnecessary RST
+ packets. To minimize round-trip delays, the QUIT is sent before we start
+ reading the returned data (but after the initial response to our retrieval
+ command).
+ - always close data connection immediately after we are done reading from it,
+ also for directory requests. This was already the case for file requests.
+ Some servers (including recent wu-ftpd beta) wait for indication that we
+ closed before proceeding.
+ - keep better track of closed sockets. Some more trace messages.
+ Some comments corrected.
+* tabular representation for simple tables. See included file README.TRST.
+* made User-Agent warning more friendly, and more specific. Tell the user what
+ lynx expects in order to avoid the warning. On the other hand, issue an
+ equivalent warning when -useragent is used. Change documentation
+ accordingly.
+* don't send User-Agent header at all if it somehow would be blank.
+* indicate on forms 'O'ptions Screen which options are not saved to .lynxrc.
+* disable the form fields in the 'O'ptions Screen if the screen is generated
+ when FORMS_OPTIONS code is compiled in but not actually active.
+* LYPrint.c: In subject_translate8bit (see OUTGOING_MAIL_CHARSET
+ option), use higher level function to charset-translate mail Subject
+ line, rather than low-level UCTransCharStr.
+* UPPER8, UCForce8bitTOUPPER: was severely broken for UTF-8 display, making
+ WHEREIS search for strings containing non-ASCII characters impossible (and
+ probably with other bad effects). Now case mapping may still be wrong, but
+ at least identical strings compare as equal.
+* LYHistory.c: Entification for saved statusline messages happened twice by
+ mistake.
+* HTFWriter.c: Made code for automatic decompression of bzip2 files
+ conditional on BZIP2_PATH. Such files should be treated as normal binary
+ files on systems without bzip2. The configure seems to always define
+ BZIP2_PATH, but it could be undefined manually.
+* HTFWriter.c: Use LYRemoveTemp instead of remove in some cases, to avoid
+ keeping those files in the temp file list after they are long gone.
+* HTTCP.c: Check whether port numbers in URLs are really numbers.
+* HTPlain.c:
+ - deal with backspace formatting as used in formatted man pages.
+ (No highlighting, only avoid double output of characters)
+ - pass on 0xAD (soft hyphen) character in more cases.
+* HTNews.c: Prevent some ways that could trick lynx into treating a regular
+ "news:" or "nntp:" URL as something else, like snewspost. Extra check in
+ LYNews.c whether posing is allowed. Return with an error message in some
+ cases of URLs that are too long, instead of silently truncating. Make HEAD
+ work again on news articles. Some memory leaks in error path removed. A
+ message tweak.
+* HTFormat.c: HTStreamStack: avoid some unnecessary work, add a trace message
+ to show what is returned.
+* SGML.c: some cleanup of ugly ifdefs, and of unnecessary abuse of global
+ variables. (still a lot left!)
+* handle INCLUDE and CDDATA marked sections: output the contents.
+* parse various elements differently that had/have special requirements or
+ hacks. Extend meaning of Tgf_strict for literal-like content modes. Use
+ SGML_CDATA in some cases (and treat it similar to SGML_LITTERAL), use
+ SGML_PCDATA for literal-like parsing (but if modified by Tgf_strict it's
+ more like regular SGML_MIXED). A '<' that would start a tag gets displayed
+ (since not element content is allowed that's just error recovery). Comments
+ now work in TEXTAREA instead of getting displayed as text (SortaSGML mode
+ only).
+* minor tweak of sorta SGML handling for invalid end tag if start tag could be
+ validly omitted.
+* more consistent and correct recognition of element names. The characters
+ "_-.:" don't end tag names.
+* improved handling of '/' after element name in a tag: "<foo/>" is treated as
+ an empty element (as in XML). If we recognize "foo" as an empty element, do
+ nothing special; and if we recognize "foo" as a non-empty element; convert to
+ "<foo></foo>". "<foo/bar/" is treated as a shortref construct, by converting
+ to "<foo>bar</foo>" (for non-empty and recognized "foo"). This is not
+ general as it would have to be for or real SGML parser, in particular '/' is
+ only treated this way if it directly follows the element name, and it may not
+ even be quite right. It is better than the recovery lynx previously did in
+ these cases though.
+* changed handling of include buffer which is used to pass back data
+ from HTML.c to SGML.c. Passing data upstream now works without strange
+ reordering effects even when SGML_character was already parsing data from
+ a previous include buffer.
+ Character set translation would happen several times on data passed back
+ to SGML_character in the include buffer for re-parsing. This is now
+ avoided. Well at least in most cases, and for characters that *can* be
+ translated, there are likely combinations of input and output character
+ sets where the assumptions made are still wrong.
+* the start_element and end_element methods of structured stream class now
+ return a status code. Currently only used for the OBJECT stuff below.
+* mostly HTML.c, SGML.c: Changed handling of OBJECT and MAP.
+ - avoid using the include buffer mechanism as much as possible. This
+ involves introducing some new special handling in SGML.c to change parsing
+ mode for element contents, and a way for HTML_{start,end}_element to signal
+ to SGML_character what it should do. In most cases when the OBJECT element
+ content should be parsed and displayed, SGML_character now only needs one
+ pass through the data.
+ - don't lose content when several OBJECTs are nested.
+ - in HTML 4, an OBJECT with USEMAP attribute can refer to a MAP within the
+ OBJECT's content, possibly within nested inner OBJECTs. Lynx would fail to
+ find the MAP in that case, now it doesn't.
+ - in HTML 4, MAP can contain arbitrary block elements in addition to AREA.
+ Lynx now shows such block content, even if it occurs within (possibly
+ nested) OBJECTs with USEMAP whose contents we would otherwise skip.
+ Sometimes we may show too much now, by generating a LYNXIMGMAP link as well
+ as showing block content or by showing more of the OBJECT content than what
+ is within a MAP, but that is preferable to losing data.
+ - treat an A tag with COORDS attribute as equivalent to an AREA when it is
+ within MAP, for the purpose of collecting links for LYNXIMGMAP.
+ - as a fallback, internally redirect a LYNXIMGMAP request to the position of
+ the MAP element in the normally rendered text of the document containing
+ the MAP, if it is known that the MAP element exists and just doesn't
+ contain any AREA (or equivalent A-with-COORDS) links. It is assumed that
+ in such a case there is some block content within the MAP that is rendered
+ normally.
+* HTFile.c: new function LYGetFileInfo.
+* HTAnchor.c: new function HTAnchor_findSimpleAddress.
+* new function HTStartAnchor5.
+* modified the way link text is (re-)drawn by function highlight. The bulk of
+ processing now happens in new function LYMoveToLink. The data of the
+ containing line is now scanned from the beginning, using the same logic as in
+ display_line to make sure that lynx and the display library have the same
+ idea of where in the line the link starts. In UTF-8 output mode, parts of
+ the line preceding the link are also repainted if this is necessary.
+ Refreshing of the physical line is forced if necessary in UTF-8 mode. For
+ anchors split across lines, the new approach is currently only used for the
+ first line.
+ This change is not in effect for lynx with color style. In that case
+ highlighting already is sometimes done in a similar similar, but not quite
+ the same, separate function.
+* modified WHEREIS target highlighting for hypertext links. Now this is done
+ in the same pass as drawing the normal link text, in LYMoveToLink. This
+ avoids problems in UTF-8 display mode. It also avoids a lot of complicated
+ and extremely hard to understand older code in highlight(), but that code is
+ still there for use by lynx with color style and for other remaining cases
+ (non-hypertext anchors, second line highlighting).
+* modified WHEREIS target highlighting for general text. Instead of first
+ writing each line's characters in display_line, then scanning again through
+ the line's data for portions to highlight and repainting those parts after in
+ display_page, this is now done in one pass within display_line. However,
+ this isn't (yet?) done for lynx with color style which still uses the old
+ code.
+* these last three changes reduce problems that occur when using UTF-8 display
+ character set (in an appropriate terminal environment that understands it, of
+ course). Most of them don't apply with color style lynx, so it continues to
+ have more UTF-8 problems. Pages with mostly ASCII characters should be more
+ or less ok. Problems that otherwise are not visible become apparent in
+ search highlighting, and after ^Z / fg.
+* GridText.c: More changes to deal with problems caused by using UTF-8 output
+ with a display library that isn't aware of it. Break line with UTF-8 before
+ curses does it. This causes lines that are too short, effectively the
+ rightmost part of a line cannot be used if there are UTF-8 encoded
+ characters. The alternative, letting curses wrap the line when it thinks it
+ got too long, is worse, so do it in lynx code instead.
+* avoid memory overrun for very long lines in UTF-8 mode. Avoid splitting line
+ in the middle of a multibyte UTF-8 character.
+* test for SHOW_WHEREIS_TARGETS instead of 'defined(FANCY_CURSES) ||
+ defined(USE_SLANG)'.
+* initialize new textarea lines created by insert_new_textarea_anchor with
+ current display character set for value_cs. (The "cloned" value can be stale
+ in some cases if the user changed the display character set after the
+ document was last loaded - normally that should not happen). For a file
+ inserted into a textarea with INSERTFILE use new function LYGetFileInfo
+ instead to determine the file content's charset. Thus -assume_local_charset
+ and conventions based on file suffix should be honored.
+* for Unix, added more specific error message if calling external editor for
+ textarea failed, based on the status returned by system().
+* it is possible to require an additional prompt before Enter in
+ an input field causes form submission: define TEXT_SUBMIT_CONFIRM_WANTED,
+ explained in userdefs.h.
+* some small changes to prevent overstepping string boundary (HTParse.c)
+* extended SUFFIX option, added SUFFIX_ORDER option, see documentation in
+ lynx.cfg. The long list of built-in file suffix rules in HTInit.c can now be
+ disabled, either at compile time - see userdefs.h - or at run time. The
+ equivalent functionality is now available in lynx.cfg for those who want it.
+ Added comments, see HTFileInit in HTInit.c.
+* various tweaks of built-in file suffix rules.
+* allow XLOADIMAGE_COMMAND to be empty (in lynx.cfg) or NULL (in userdefs.h),
+ just don't use a default X viewer for image types in that case.
+* moved UCGetUniFromUtf8String from LYCharUtils.c to UCAux.c.
+* renamed LYUCFullyTranslateString -> LYUCTranslateHTMLString, and
+ LYUCFullyTranslateString_1 -> LYUCFullyTranslateString.
+* tweaks for special chars in (what is now) LYUCFullyTranslateString, in
+ obscure cases (input fields of type password prefilled with unusual content)
+ lynx would pass text back to the server with special characters (soft hyphen
+ or non-break space) expressed as lynx-internal code values.
+* added some replacement characters or strings to various chartrans tables.
+* experimental command line option -convert_to, only compiled in if new
+ MISC_EXP symbol is defined. This takes a string in the form of a MIME type,
+ which can also be combined with an appended ";charset=" parameter. (This
+ needs shell quoting of course). The charset value can be used to set the
+ display character set from the command line. The MIME type can be one of the
+ non-official types used internally, for some interesting effects (crashing
+ lynx not excluded). Try www/download, www/source, www/dump, or some
+ unrecognized string.
+* fixed HTMainText_Get_UCLYhndl, it was returning the wrong kind of charset
+ handle (a "UChndl", which is different from a "LYhndl" or "UCLYhndl" etc.,
+ and shouldn't be directly accessed by arbitrary bits of lynx code - it should
+ be regarded as private to the chartrans mechanism).
+* protect various printf-like calls against crashes from strings with '%':
+ LYSyslog.
+* LYDownload.c: made parsing of LYNXDOWNLOAD: URL slightly more robust.
+* disabled some broken pieces.
+1999-10-14 (2.8.3dev.12)
+* fixes for restructured LYMainLoop.c (reported by PG, LP) -TD
+* minor fix for makeutcb, to compile with K&R C -TD
+1999-10-13 (2.8.3dev.11)
+* restructured LYMainLoop.c, so the main switch statement calls functions
+ rather than doing everything inline. This greatly reduces memory required
+ to compile that module, as well as making the compile 3-4 times faster -TD
+* tweak CJK_EX code for incorrect x-transparent charset handler - it now
+ depends on --with-charsets= configure flag -LP
+* tweak comments in UCDomap.c to be consistent with KW changes as of
+ 2.8.3dev7 -LP
+* define DECL_ERRNO for Borland compiler, so errno will be declared (report
+ by JS) -TD
+* add definition for DJGPP so truncate() function is used there, needed for
+ LYOpenTempRewrite() function -LP
+* correct character set for lines added in an external editor (Marek Kubita
+ <kubitovi@mbox.lantanet.cz>, KW, KED)
+* remove a couple more duplicate includes -LP
+* remove a couple of duplicate includes (JB - John Bley <jbley@cs.cmu.edu>)
+* fix some missing ifdef's for win32 versus DOS, as well as change calls to
+ strcasecomp() to strncasecmp() -Hiroyuki
+* undo spurious change from win32 integration in dev.5 to HTSprint0() which
+ causes a memory leak (reported by John Bley, analysis KW) -TD
+* prevent embedded "%s" in generated messages from causing a core dump in
+ exit_immediately_with_error_message by using fputs rather than fprintf/printf
+ (reported by KW) -TD
+* Changes in UCAuto.c for --enable-font-switch: Support some more code pages
+ if available. Check return code from setfont invocation, and use it to
+ determine whether font and/or translation map loading was successful.
+ Warning, this is not based on any documented interface but on
+ experimentation, so may not work for long or for anyone but me; it shouldn't
+ be worse than before though. Better logic for keeping track of state, some
+ parts just didn't work right. Workaround for wrong data in some distributed
+ font files. Minor memory leak removed -KW
+* modify test/c1.html to use tabs for better formatting, added comments -KW
+* modify HTFTP.c for better conformance with RFC959. Among other things, one
+ major purpose was ending the control conversation cleanly, at least in the
+ normal case, to get rid of the "221 You could at least say goodbye.."
+ responses from wu-ftpd servers and resulting RST traffic. In response to the
+ problem with ftp.wu-ftpd.org, made one small change to when the data_soc is
+ closed. This was done early for some specially code server types, apparently
+ those that has caused the same type of problem in the past; just changed it
+ to close data_soc at that point independent of server type -KW
+* set CDPATH to . in the makefile.in's that use cd, in case user has set
+ CDPATH without . at the beginning -TD
+1999-09-29 (2.8.3dev.10)
+* change CTRACE macro to double-parenthesis form, to allow ifdef'ing most
+ trace statements -TD
+* fix the creation of a new bookmark file and takes care that older bookmarks
+ files do not fall into the same bug anymore by making sure the <ol> tag is in
+ a line by itself. This correction will only be activated when the first
+ bookmark is attempted to be erased (patch by Eduardo Chappa L)
+* change a trace/error message in HTInit.c to say "Lynx" rather than
+ "metamail", to avoid confusion -HN
+* change <tab> formatting in user's guide, etc., to <pre> sections, thereby
+ appeasing Dave Raggett's "tidy" program -TD
+1999-09-13 (2.8.3dev.9)
+* add -nobold, -noreverse, -nounderline options to disable corresponding
+ video attributes (based on a patch by John Hawkinson <jhawk@MIT.EDU>) -TD
+* add STICKEY_FIELDS to lynx.cfg, which tells lynx whether to activate the
+ previous document when an extra key-left is given -VH,TD
+* minor cleanup of run_external(), use single return, HTSprintf0 -TD
+* for WATT32 configuration, call _eth_release() and _eth_init() in HTTelnet.c
+ to make telnet work properly -DK
+* correct redefinition of u_long for WATT32 -LP
+* modify syslog change to make it more specific, based on comments by KW -TD
+* fix potential security problem with SYSLOG_REQUESTED_URLS, which would let
+ syslog() send sensitive information as broadcast to any syslog daemon that
+ care to listen.
+ E.g. URLs with embedded passwords are sent to syslog:
+ Sep 11 12:26:06 lynx[16177]: ftp://joe:password@host/~joe
+ The patch masks the password by breaking up the URL and replacing
+ the password with "******" (Gisle Vanem <giva@bryggen.bgnett.no>).
+* fix mismatch of const's from call of map_string_to_keysym() in
+ lkcstring_to_lkc() -TD
+* supply trailing slash for protocol_proxy settings (whether environment
+ variables or lynx.cfg) in HTAccess.c if the slash was omitted and if the
+ content otherwise looks normal (starts with http, no superfluous slashes) -KW
+* add links for "Free WWW E-mail services" to online help -PW
+* add links in online help to FAQ-o-matic -JS
+* more fixes to build with slang under cygwin32 - DK
+* add/use LYwaddstr(), etc to fix more const-casts (reported by PG) -TD
+* modify HTTCP.c to prevent telnet and similar applications from inadvertently
+ using hostname tokens which look like command-line options -KW
+* modify configure script's --with-charsets option so that if the option
+ --without-charsets is selected, then it will use a 'minimal' set. The
+ keyword 'minimal' is recognized as the list us-ascii,iso-8859-1,utf-8
+ (request by KW, HN) -TD
+* ifdef'd recursive calls on UCGetLYhndl_byMIME() for charsets that may be not
+ present (--with-charsets), and add getLYhndl_byCP() to cover a special case
+ of recursion which was also a preexisting hole (reported by Frederic L W
+ Meunier, analysis by KW) -TD
+* replace fr.po with a placeholder. Add placeholders for ru.po, pt_BR.po -JS
+* review/modify HTNews.c to avoid potential buffer overflows, as well as reduce
+ the number of embedded constants that make it difficult to adjust fixed
+ buffer sizes -TD
+1999-08-28 (2.8.3dev.8)
+* correct ifdef's combining HAVE_POPEN and __CYGWIN__ in LYPrint.c, which would
+ link popen() code when it was not available -TD
+* correct order of ifdef's for __CYGWIN__ in LYGlobalDefs.h, which would result
+ in a syntax error if the symbol __CYGWIN__ were undefined when __CYGWIN32__
+ was defined -TD
+* change hardcoded ifdef for <arpa/inet.h> include to autoconf'd form -TD
+* modify makeuctb to add ifdef's allowing most charsets to be suppressed at
+ compile time. Use similar ifdef's in UCdomap.h to suppress registration
+ of non-uctb charsets. Add configure option --with-charsets to specify list
+ of charsets which are not suppressed (def7_uni is always active) -TD
+* change makeuctb to generate the name of the output file, simplifying all of
+ the build scripts in chartrans -TD
+* correct a syntax error in crypt_util.c from dev.7 and an ifdef in LYCurses.c
+ that sets the codepath -SH
+* use macro TABLESIZE throughout for consistency -TD
+* revert use of TYPECAST for parameter of 'FREE()' macro, since that puts a
+ cast on the parameter as an lvalue (reported by LV) -PG
+* correct improperly-nested ifdef EXP_CHARSET_CHOICE in ifdef for USE_PSRC
+ in LYReadCFG.c -TD
+1999-08-26 (2.8.3dev.7)
+* tweak ifdef'ing of `debug_delay' (only available with SH_EX _and_ WIN_EX) -LP
+* tweak src/Xsystem.c (extern system_is_NT is now ifdef'ed with WIN_EX) so
+ exec_command() can also be used with DJGPP when compiled with _WIN_CC symbol
+ (though choice of _WIN_CC is questionable) -LP
+* simplified ifdef'ing for resolv() vs LYGetHostByName() for DJGPP -TD
+* DJGPP with WATT32 now does DNS lookup via LYGetHostByName()/gethostbyname()
+ like other lynx ports so we get reasonable error recovery when DNS lookup
+ fails. (For example, we now avoid a hang when wattcp.cfg is not configured
+ properly - a typical situation when playing with nullpkt.com). Build with
+ -DNSL_FORK (in both src and WWW makefiles) is recommended: this will prevent
+ unexpected 1 second curses delay when alerting a wrongly configured tcp. (No
+ real fork() in DJGPP, unfortunately: this function always returns -1 and set
+ 'errno' to ENOMEM, as MS-DOS does not support multiple processes. It exists
+ only to assist in porting Unix programs) -LP
+* alternative patch (replaces HN's) for UCdomap.c -KW
+* modify initialization of lynx_temp_space in case the given name has
+ embedded "~", ifdef'd for WIN_EX -SH
+* fix a problem hanging caused by allowing some unknown entities in an ALT
+ string. The "hang" problem was caused by a combination of removing too much
+ under 'case S_check_name' in 'LYUCFullyTranslateString_1', _and_ having
+ having some Latin 1 character codes that are untranslatable to the display
+ character set -KW
+* added lynx.cfg setting PSRCVIEW_NO_ANCHOR_NUMBERING that inhibits link
+ numbering when in psrc mode if set to TRUE (default is FALSE) -VH
+* fixes for justification code (anchor position recalculation) and the
+ GridText.c:*TrimHightext (it was not designed to support LY_SOFT_NEWLINES),
+ correcting rendering of links on wrapped lines in psrc mode -VH
+* fixes to www_tcp.h, LYUtils.c and UCdomap.c to build on BeOS 4.5 -TD
+* fixes for CYGWIN with Slang, mainly due to platform differences in Slang -DK
+* fixes for DJGPP, missing headers and declarations -DK
+* let CJK charsets default to 7 Bit Approximations. Needed to display entities
+ in the decimal 160-255 range. (Restore behavior before the changes made to
+ declarations of charsets on 1999-03-04) -HN
+* rename -number_links_forms to -number_fields -TD
+* add the -number_links_forms command line option (John Hawkinson
+ <jhawk@MIT.EDU>).
+* modify configure script so --enable-change-exec sets default for
+ the --enable-exec-links and --enable-exec-scripts options -TD
+* modify ifdef's for ENABLE_OPTS_CHANGE_EXEC since one or both of EXEC_LINKS
+ and EXEC_SCRIPTS must also be defined to make this effective (reported by
+ KED).
+* add explanations of the various choices for revealing/not images, to Users
+ Guide, Options Help & lynx.cfg -PW
+* fix LYgetstr() to disable saving of input text on LYE_ENTER state when the
+ input is supposed to be hidden -KW
+* add/use LYaddstr() to fix some const-casts -TD
+* move dependency of "lynx$x" from "install" to
+ "install-bin:" in top-level makefile.in -PG
+* corrected display of SGML_LITTERAL content -VH
+* now LY_SOFT_NEWLINE is used in psrc mode to denote wrapped lines (as in plain
+ source mode) -VH
+* add configure option --enable-scrollbar -TD
+* make the charset-choice code lynx.cfg-reloading-safe -VH
+* add experimental code to allow users to specify that a subset of the
+ compiled-in charset definitions are available for selection for display
+ (ifdef'd with EXP_CHARSET_CHOICE, added configure option
+ --enable-charset-choice -TD) -VH
+* add/use ANSI_PREPRO symbol to simplify ifdef's concerning preprocessor token
+ substitution/concatenation -TD
+* modify ifdef of code that shows current CJK code in the title area under
+ SH_EX as well as CJK_EX -TD
+* modify HTMLDTD.c to set canclose for <Hn> inside <PRE></PRE> -VH
+* correct ifdef'ing of set_ws_title(), which should be applied only on win32
+ (reported by Frederic L W Meunier) -LP, TD
+* reduce compiler warnings from Borland C++Builder. Most of these are casts,
+ with boolean constructs dominating -JS
+1999-08-13 (2.8.3dev.6)
+* workarounds in LYMain.c and LYMainLoop.c for excessive compiler warnings due
+ to defective design of glibc2 -TD
+* modify logic for EXP_JUSTIFY_ELTS in GridText.c to change a raw
+ LY_NONBREAK_SPACE to ' ', to work better for tables -VH
+* add/clarify user's guide for command line option syntax -DK, KW
+* add a new command line toggle for DOS to control debugging of packets under
+ WATTCP and WATT-32. Under WATT-32, once dbug_init is called, debugging
+ cannot be turned off (although output can be sent to /dev/null). This new
+ option "-wdebug" controls whether debugging is active, is off by default -DK,
+ Gisle Vanem
+* allow ':' as a separator between the option and its value -DK
+* corrected install rule using symbolic link for copyright files (reported by
+ HN, KED) -TD
+* reset "stalled for xxx" counter from IZ's ETA change in dev.5 between ftp
+ requests -VH
+* add support for scrollbars, ifdef'd with USE_SCROLLBAR. Use command-line
+ options -scrollbar and -scrollbar_arrow or corresponding lynx.cfg to enable
+ it. Requires ncurses; may be further tuned if color-style configuration
+ is used -IZ
+* LYCopyFile(): Thanks to Hiroyuki Senshu, DOS-based systems need no cp.exe
+ binary any more. The code was originally ifdef'ed with SH_EX; now defined
+ with DOSPATH so is used automatically by any dos/windows port, not used for
+ UNIXes (permissions?) -LP
+* a few includes labeled with _WIN_CC now tweaked with WIN_EX as should be -LP
+* adjustments to SH_EX, CJK_EX ifdef's in LYMainLoop.c and LYUtils.c to aid in
+ porting -LP
+* improved logic in status_link() for -short_url option (patches from
+ <nsh@itjit.ne.jp> and Eduardo Chappa L)
+* modify display_page() to not necessarily call lynx_force_repaint() to make
+ highlighting work when displaying UTF-8 -Christian Weisgerber, KW
+* add check in read_directory() if transfer was interrupted -KED
+1999-07-30 (2.8.3dev.5)
+* add/use LYHideCursor() macro to accommodate position in older curses -TD
+* add configure option --enable-cjk to compile-in CJK_EX logic -TD
+* add -short_url option and associated logic to elide middle of long urls
+ (adapted from patch by Eduardo Chappa L <chappa@math.washington.edu>) -TD
+* ifdef'd read-progress changes with EXP_READPROGRESS, add configure option
+ --enable-read-eta to turn this on -TD
+* enhanced read-progress logic (Ilya Zakharevich)
+ a) makes size/transfer rate reports use format "8.3 KB" (instead
+ of "8 KB") if numbers are below 10 KB and reports are in KB;
+ b) makes transferred/expected/transfer-rate use bytes/KB independently
+ so "236 bytes of 56 KB" is possible, as is
+ "8.3 of 56 KB, 456 bytes/sec";
+ c) adds "ETA 23 sec" info if available;
+ d) adds " (stalled for 75 sec)" info if available (updated each 5
+ sec or so);
+ e) uses gettimeofday() if present (instead of current hacks) to get more
+ frequent updates.
+* fixes for OS/2 and ncurses from Ilya Zakharevich:
+ a) Makes lynx ignore mouse events which are not clicks (filtering through
+ ncurses does not work as expected).
+ b) Makes mouse-clicks "basin of attraction" of a link wider (the area where
+ clicks make the link a current link). It was 2 units vertically and
+ horizontally, make it 2 units vertically, and 6 units horizontally. This
+ leads to "more intuitive selection".
+ c) Make processing of .lynx-keymap write messages to trace buffer;
+ d) LAC-keybindings were not working;
+ e) Allow .lss files include one another via INCLUDE:/file/name
+ g) Allow a change of default color in .lss files (not the color of attributes
+ text, but colors for a style if "default" is specified); This (together
+ with "e") allows for a simple modification of a color scheme
+ Here is an example of a .lss file with a changed default
+ foreground/background and a handful of other declarations fine-tuned for
+ this change. (It implements "Commander" style). "Overriding"
+ declarations should be put before INCLUDE:, and the "default:" declaration
+ should be the last one.
+ status:reverse:yellow:black
+ h1:bold:yellow:black
+ em.a:reverse:black:blue
+ em.b:reverse:white:black
+ font.letter:normal:default:black
+ link.blue:bold:white:brightblue
+ link.blue.prev:bold:yellow:brightblue
+ title:normal:magenta:black
+ i:bold:white
+ table:normal:white
+ blockquote:normal:white
+ li.blue:bold:blue:black
+ link.blue.next:bold:blue:black
+ normal:normal:default:default
+ INCLUDE:F:/emx.add/lib/lynx.lss
+ default:normal:brightcyan:blue
+ h) Improve algorithm for allocation of color-pairs;
+ i) Lynx was not recognizing HOME directory on EMX;
+ j) UP_LINK and DOWN_LINK now actually move along a vertical line (as far as
+ it is possible), including an arbitrary sequence of such keypresses.
+* modify LYIsPathSep() macro to include '\' for OS/2 EMX -TD
+* correct a problem with spurious cookie names when reloading lynx.cfg (Michael
+ Warner & KW)
+* add check for too-long line in HText_ExtEditForm(), splitting it if needed
+ (reported by <yury.burkatovsky@telrad.co.il>) -TD
+* move NO_GROUPS definitions from HTFile.c to HTFile.h to make them available
+ for use in LYUtils.c on DOS -LP
+* correct several minor problems with integration of HS's changes in
+ GridText.h, HTAlert.c and LYPrint.c (reported by LP) -TD
+* restore dev.3 interface to LYLowerCase and LYUpperCase and do casts
+ internally to work on unsigned chars -PG
+* corrected typos in some messages (reported by Dmitry Sivachenko
+ <demon@gpad.ac.ru>).
+* changes for win32 -SH
+ + added ifdef's using _WIN_CC (for Borland C) to some places in prettysrc
+ definitions which use the __STDC__ symbol.
+ + renamed makefile.w32 to makefile.bcb
+ + renamed src/chrtrans/makefile.w32 to src/chrtrans/makefile.bcb
+* the DOS port compiled with WATT-32 now works in a DOS window under Windows
+ 3.11 and Windows for Workgroups 3.11. It still needs its own packet driver
+ and does not use any native winsocks and has only been tested with Toni
+ Lopez's DOSPPP. This does fill a void for those running Win3.x, who
+ previously had to close Windows and go back to plain DOS before they could
+ run lynx. Updated the help files, reflecting current platform support -DK
+* corrected definitions in HTTP.c and HTDOS.h to build with old TCP library -LP
+* When keypad_mode was changed from forms options menu
+ set_numbers_as_arrows()/reset_numbers_as_arrows() was not reinitialized
+ (reported by KED) - LP
+* SOURCE_CACHE: add one more parse setting member (keypad_mode)
+ to HText structure -LP
+* SOURCE_CACHE: fix updating the document when "display charset" was changed
+ from Options Menu by user: FREE(anchor->UCStages) call from
+ HTuncache_current_document() now duplicated in HTreparse_document().
+ (problem reported by KW) - LP.
+* tweak trace message in scan_cookie_sublist(): limit trace output by trying
+ LYstrstr() as a first approximation before host_matches() -LP
+* open temp-file in LYNewsPost() in binary mode for DJGPP to avoid translation
+ of \r\n vs \n -DK
+* add note about potential conflicts with cookie files to description of
+ --disable-persistent-cookies -BJP
+* added status message to indicate state of text inputs -VH
+* added ability to make text inputs non-sticky (i.e., user will have to
+ activate them explicitly via an LYK_ACTIVATE action) - seems useful for
+ people navigating with alphanumeric keys. Default is 'sticky' - i.e., old
+ behavior. Behavior is controlled via command line option '--sticky-inputs'
+ and STICKY_INPUTS in lynx.cfg -VH
+* added conditionals to 'userdefs.h' that disable support for
+ force-empty-hrefless-a mode if lynx is configured without lss (it's not
+ useful for such setup) -VH
+* minor change to prettysrc mode, writing comments one character at a time
+ to avoid translation of \r\n to \n\n in HText_appendText() -VH
+* correct rendering of DL in EXP_JUSTIFY_ELTS, will inhibit justification of
+ DT's content -VH
+* other modifications to EXP_JUSTIFY_ELTS logic, to use information associated
+ with each element that indicates whether it can be justified -VH
+* modify HTMLDTD.c so that "center" is not treated with EXP_JUSTIFY_ELTS -VH
+* fix for core-dump in EXP_JUSTIFY_ELTS -VH
+* modify signal handling in LYSystem to workaround competing SIGTSTP handlers
+ when a subprocess is active. This adds a new function LYToggleSigDfl(),
+ using sigaction as an alternative to signal to save/restore as much of the
+ signal state as possible -KW
+* add configure option --enable-justify-elts (request by VH) -TD
+* add configure test for sigaction function and related structs -TD
+* restore hardcoded escape sequences on Unix in setup_vtXXX_keymap()
+ inadvertently dropped in dev.4, to accommodate users of slang library who
+ have their $TERM set incorrectly -TD
+* correct ifdef's for resizeterm() call to allow Lynx to build with old
+ versions of ncurses -TD
+1999-07-14 (2.8.3dev.4)
+* minor fixes to build with SunOS K&R compiler -TD
+* cleanup unbalanced curly braces from other recent experimental options -TD
+* rename internal definition for LINKS_AND_FORM_FIELDS_ARE_NUMBERED to
+ LINKS_AND_FIELDS_ARE_NUMBERED to keep it shorter than 32 characters -TD
+* change ifndef's for NO_JUSTIFY to ifdef EXP_JUSTIFY_ELTS since something in
+ VH's recent code causes core dumps, by crosslinking the state of two parts of
+ the parser -TD
+* modify slang code to recognize F1 from terminfo/termcap on Unix (John Davis)
+* changes to use the WATT-32 tcp library, making a DOS port that does http,
+ ftp, news, mailto, and telnet -DK
+ Remaining work includes:
+ * This has been tested only with slang and the djgpp_keyhandler code. There
+ will probably need to be more changes to have this work properly with
+ PDCurses.
+ * There is at least one bug. When set to use http_proxy, there seems to be a
+ long wait between socket connect and write if the proxy is accessed too
+ rapidly in succession. It seems that if it is accessed more frequently
+ than about 20 seconds, there is a timeout of up to about 85 seconds.
+ * some problems with ctrl-break handling, will report to the watt-32 list.
+* rename tcp.h to www_tcp.h -DK
+* fix typo in manpage description of -color (Christian Hudon
+ <chrish@debian.org>).
+* add $(LDFLAGS) to chrtrans/makefile.in, for NetBSD -JS
+* use symbolic link rather than hard link for installing copyright files -TD
+* now dashes and underscores can be intermixed in commandline options, and in
+ -restriction option, ifdef'd with OPTNAME_ALLOW_DASHES -VH
+* added commandline switch '-dont_wrap_pre' that will inhibit line wrapping in
+ <pre> when -dump'ing and -crawl'ing. (But maximal length of line on output
+ can't exceed MAX_LINE (1023 by default)) -VH
+* lynx.man updated to reflect new option -dont_wrap_pre and to note that gnu
+ style of options (with two dashes) is also supported -VH
+* some small developer's docs tweaks -VH
+* added text justification (controlled by commandline switch '-justify' and
+ from lynx.cfg too), ifdef'd with NO_JUSTIFY -VH
+* added support for emitting backspaces (a-la man) - commandline option is
+ '-with-backspaces', ifdef'd with NO_DUMP_WITH_BACKSPACES -VH
+* added support for forcing-empty-HREFless-As - ie A element that doesn't
+ contain HREF will be closed after it was seen (without waiting for </a>) -
+ this fixes rendering of documentation, produced by broken translators that
+ don't emit balanced 'A's (eg RedHat docs produced by 'dlh', Sybase docs) -
+ commandline option is --force-empty-hrefless-a, and force_empty_hrefless_a in
+ lynx.cfg, ifdef'd with NO_EMPTY_HREFLESS_A -VH
+* incorporate changes for win32 by Hiroyuki Senshu <senshu@shonai-cit.ac.jp>
+ (SH) from
+ ftp://crab.it.osha.sut.ac.jp/pub/Win32/develope/senshu/Lynx/
+ based on his patch against 2.8.2pre.6
+ Most changes are ifdef'd
+ #define _WIN_CC= .... for Windows C Compiler
+ #define CJK_EX .... CJK EXtension
+ #define SH_EX .... Senshu Hiroyuki EXtension
+ #define WIN_EX .... Windows EXtension
+* add missing null-pointer check in MakeNewMapValue(), for verbose-images
+ (from Debian bug report #39596) -TD
+* test/build with gettext-0.10.35 -TD
+* renamed uppercase makefiles and .bat files to lowercase, change the makefiles
+ consistently to Unix-style format -TD
+1999-06-29 (2.8.3dev.3)
+* move HTAlert call so we don't get it each time we run the options menu -TD
+* entify messages in LYshow_statusline_messages() -LP
+* add -DNO_PORT to WWW/*/djgpp makefiles -DK
+ This is to make ftp work with new version of the WATTCP library as revised by
+ Igor Poretsky for building lynx with DJGPP. The old version has been renamed
+ to "tcplibdj-old.zip". For the new package, go to:
+ "http://www.rahul.net/dkaufman/tcplibdj.zip" or
+ "ftp://ftp.rahul.net/pub/dkaufman/tcplibdj.zip"
+* new option REUSE_TEMPFILES, see comments in lynx.cfg -KW
+* use P instead of invalid TR for right-aligned "LYNXMESSAGES:" link in HISTORY
+ page -KW
+* better support for accessing FTP directory listings on Windows NT FTP
+ servers: try to switch MSDOS-like directory output off with SITE DIRSTYLE.
+ The price to pay for this is one or (probably more often) two more command/
+ response round trips -KW
+* added support for accessing FTP directory listings in "dls" style sent by
+ some OS/2 servers. Only one server was known and used for testing, so the
+ heuristics used may not be quite general enough. File date/time is not shown
+ since it doesn't seem to be part of the basic format -KW
+* in lynx.man removed bogus "ID:" for -assume_charset,
+ -assume_local_charset -KW
+* in a list, render a <DIV> that doesn't have an ALIGN="center" or
+ ALIGN="right" attribute like a <P> in that situation: break the line if
+ necessary but don't create an empty line, an keep list indentation. This
+ addresses Debian bug #21331 -KW
+* other changes for DIV: it's a block element, so make sure its contents
+ doesn't get rendered inline, even for nested DIVs that don't change text
+ alignment. Try to avoid improperly kept change of DIV styles' alignment by a
+ <P> or </P> in its content -KW
+* make "treating H# in a list as an LH" work also for SortaSGML parsing,
+ previously it only worked with TagSoup -KW
+* removed special handling for empty last field from LYstrsep(), which made it
+ act differently from (GNU) C library's strsep() -KW
+* macro DEFAULT_INVCHECK_BV for default invalid cookie checking behavior, can
+ be changed at top of LYCookie.c for those who really want that -KW
+* reorganize code for invalid cookie checking / prompting somewhat, it is
+ hopefully easier to follow now, and should result in more logical prompting
+ (or not) if a cookie is invalid for more than one reason -KW
+* change invalid cookie confirmation prompts to default to "no" answer. This
+ can prevent the impression that Lynx hangs because the prompt is not
+ completely visible. There should be a better way to ensure that all prompts
+ are recognizable as such (at least with "normal" screen widths) -KW
+* use more of the available statusline width for showing cookie name and value
+ in normal cookie prompts -KW
+* handle \" in quoted cookie values, so that the quote char doesn't end the
+ value string -KW
+* write quoted cookie values to cookie file with the quotes ('"' chars). When
+ the cookie file is read, assume that quoted strings are quoted cookie values.
+ It would be better to have a separate flag stored, but we are limited by the
+ choice of the Netscape-compatible file format. This should resolve Debian
+ bug #35523 -KW
+* handle empty value strings like any other cookie values: they can be kept in
+ the cookie jar (in memory), and can be written to and read from the cookie
+ file -KW
+* more checking whether a line read from a cookie file is complete -KW
+* write out second field in cookie file lines a TRUE or FALSE depending on
+ whether the domain can be used for suffix matching or has to match
+ completely. This seems to be how Netscape uses it. We don't actually use
+ this field when reading a file (presence of a leading dot in the domain value
+ tells us what we need to know), but this should improve behavior for people
+ sharing a cookie file between Lynx and a Netscape browser (although such
+ sharing shouldn't be recommended) -KW
+* treat case as insignificant in cookie domains more consistently -KW
+* remove remnants of FROM_FILE domain behavior, it was unused -KW
+* add some clarifications in lynx.cfg regarding cookies -KW
+* entify strings when adding them to LYNXMESSAGES: stack -KW
+* save HTAlwaysAlert messages for LYNXMESSAGES: page -KW
+* generate TRACE output for prompts that use HTConfirm() or HTConfirmDefault
+ -KW
+* make sure force_old_UCLYhndl_on_reload is initialized and reset properly -KW
+* minor tweaks (LYCharUtils.c, LYMain.c, LYPrint.c) -KW
+* flush Lynx.leaks file after writing each memory leak record but before
+ freeing the memory block, to ensure the info is on disk if something goes
+ seriously wrong (i.e., FREE causes a signal) -KW
+* more general checking in postoptions - `lynx LYNXOPTIONS:foo' now doesn't
+ crash -KW
+* revived dired "install" functionality, more or less as it was (apparently)
+ originally meant to be used, but with various checks added. Compilation is
+ now conditional on new symbol OK_INSTALL. The "install" function is the
+ closest we have to a "copy file" function, and could be used instead; the
+ actual command executed depends on macros INSTALL_PATH and possibly
+ INSTALL_ARGS, one can define INSTALL_PATH for example to "/bin/cp" before
+ compilation to effectively get something like a dired "copy" function. Note
+ the the "install" function requires a special file in the home directory,
+ which can be customized, see samples/installdirs.html -KW
+* new function HTURLPath_toFile in HTFile.c. Use it if we don't have a full
+ URL where HTnameOfFile_WWW was used previously, this avoids misparsing of
+ some unusual URL forms for files -KW
+* other changes for dired support (KW):
+ - various corrections with respect to URL-unescaping: don't escape
+ too often or too little, dired operations could fail on filenames
+ with special characters
+ - avoid some unnecessary copying and allocation for filenames
+ - avoid some more static buffers
+ - add some buffer overflow checks
+* make local directory display somewhat interruptible even without
+ partial page display -KW
+* make do_readme in HTFile.c 8-bit clean -KW
+* tweak in HTTP.c to avoid doing strlen() on received data that are to be
+ passed on raw; raw NUL bytes within the first block read could lead to data
+ loss -KW
+* change newly introduced CAN_ANONYMOUS_* at end of userdefs.h to be FALSE by
+ default, to get behavior with -anonymous that is equivalent to 2.8.2 -KW
+* handle some more common forms of mailcap $DISPLAY tests internally in
+ HTInit.c -KW
+* correct a problem which appears when the curses library causes FANCY_CURSES
+ to be defined but not COLOR_CURSES: the code can call attrset() twice for
+ the same characters, thus replacing the original attribute with the new one.
+ Fix by using attron() instead (patch by Julian Coleman
+ <J.D.Coleman@newcastle.ac.uk>)
+* modify LYonedot() so it does not change its parameter, avoiding corrupting
+ the name to be zipped (reported by DK) -TD
+* modify LYDownload.c to skip over delimiter for file://localhost to avoid
+ treating it as part of the DOS filename -DK
+* alter LYExecv() to only do an HTAlert if the return-code is zero, i.e., an
+ error was reported. This lets us reuse (and free) memory pointed to by
+ tmpbuf (reported by DK) -TD
+* remove redefinition of lstat() and change test of stat() function with DJGPP,
+ which returns nonzero rather than negative on failure -DK
+1999-06-18 (2.8.3dev.2)
+* move some of the path-manipulation from the DJGPP dired change into new
+ functions LYisAbsPath, LYisRootPath and LYLastPathSep -TD
+* integrated patch adapted by DK from Igor B Poretsky <root@goga.energo.ru> for
+ dired support with DJGPP. (Some corrections/rework by TD also - must
+ retest). Some notes from DK:
+ + since this is DJGPP based, it may be incompatible with a called program
+ that uses a WATCOM DOS extender. I think I had this problem with a
+ precompiled binary for zip. The current zip binary doesn't have this
+ problem.
+ + The key to making this work with DJGPP is the __sysflags = 0x501d in
+ LYMain.c, since this lets the system() call handle multiple commands on one
+ line and allows the cd command to work across disks.
+ + I didn't look at Igor's changes to LYMainLoop.c as regards to the HTUncache
+ calls. He said he wasn't sure about this.
+ + This was tested with Info-Zip's zip and unzip, GNU tar, gzip, comp430d,
+ PKZIP, and PKUNZIP. This was only tested when built with slang. I don't
+ see where PDCurses is likely to cause a problem, however.
+ Problems:
+ + To make this work, I made lynx_edit_mode = TRUE in LYMainLoop.c. This does
+ not seem to be the correct solution. It seems that this should be handled
+ by the code in HTAccess.c, but I don't understand how this works. If
+ lynx_edit_mode isn't true, the dired menu doesn't appear with the "f"
+ invocation of LYK_DIRED_MENU.
+ + I'll try to explain this briefly, but this bug is very reproducible. If a
+ program is invoked from the dired menu which needs to interact with the
+ user, the system sometimes freezes and has to be rebooted. For example, a
+ call to unzip a zip archive where the files already exist has zip ask if
+ the file should be overwritten. If done initially after lynx is started,
+ no keystrokes are accepted and the system always hangs. If, however, any
+ file has been moved or had its name changed via the dired menu, then the
+ above problem doesn't occur. I have tried to see what changes after the
+ name change that fixes this problem, but I am stumped. Gzip and unzip seem
+ to have this problem, but PKUNZIP doesn't.
+* correct most-recent LYNX_RELEASE_DATE (reported by KW) -TD
+* change touchline() call in LYOptions.c to touchwin() in case anyone wants to
+ compile with BSD 4.4 curses (reported by IC) -TD
+* modified ifdef for DECL_ERRNO to allow for errno to be a macro -TD
+* ifdef'd the extern declaration of h_errno in HTTCP.c in case that name is
+ also a macro, e.g., for threaded code (reported by Mike Gravitz
+ <ddavid@lamar.ColoState.EDU> on AIX 4.3.1.0) -TD
+* rename ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS to keep the names less than
+ 31 characters, and add configure option --enable-change-exec to set the
+ ENABLE_OPTS_CHANGE_EXEC ifdef -TD
+* correct syntax of popup_choices() within
+ ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS ifdef (reported by IC) -KW
+* modified some message texts, mostly for consistency -KW
+* correct display of local file times in INFO screen -KW
+* add null-pointer checks for buf2 variable in
+ exit_immediately_with_error_message(). Invalid memory access happens if
+ access to startfile fails but first_file is not true -KW
+* change all ifdef's except on for VAX Ultrix that use the presumed predefined
+ symbol 'unix' to 'UNIX', which the configure script sets. Not all Unix
+ systems define this in their compiler -TD
+ From compiler warning on NetBSD 1.4 (report by JS):
+ deprecated symbol "unix" is no longer predefined
+* add experimental file-upload, ifdef'd with EXP_FILE_UPLOAD and configured
+ with --with-file-upload (adapted from patch by RP) -TD
+* document use of '|' pipes in PRINTER commands in lynx.cfg -TD
+* add shell script man2hlp.sh, used that to generate lynx.hlp from lynx.man -TD
+* SOURCE_CACHE: source_cache_file and source_cache_chunk are now members of
+ HTParentAnchor (where they should belong, not HText nor mutable globals).
+ Add one more parse setting member (verbose_img) to HText structure -LP
+* correct spelling of ifdef for reload_read_cfg() (reported by KW) -LP
+* minor docs tweaks -LP
+* test/{sgml.html, unicode.html} files were badly broken for tagsoup mode
+ (incorrect html: extra <pre>..</pre> were added inside PRE mode in dev26) -LP
+* fix back-slashes conversion for DOSPATH systems when expanding ~ to local
+ path (mostly affects information screen) -LP
+* correct default value for --disable-persistent-cookies configure option
+ (reported by HenSiong Tan <tan@stat.psu.edu>) -TD
+* uncomment --with-libjs configure option -TD
+1999-06-11 (2.8.3dev.1)
+(This is KW's patch, with minor corrections)
+* Key handling changes:
+ - Extended lynxkeycodes: a bit flag is used to indicate that the lower bits
+ of the value already are a lynxactioncode and need not be looked up again.
+ Reduces need for back and forth forward and reverse binding lookups;
+ currently only used in some places.
+ - Extended lynxkeycodes: several (currently three) bit flags are used to
+ indicate key modifiers.
+ - Added some macros for manipulating and mapping of these codes, see
+ especially LYKeymap.h, LKC_TO_LAC() etc. Added some comments about the
+ various kinds of codes.
+ - Added several editaction codes and flags for setting key modifier on next
+ key (i.e. for declaring keys as prefix keys, for the purposes of line
+ editing); for flagging a key for different action if same key is repeated;
+ for exiting input field line editing and passing a specific lynxactioncode
+ on; and for undoing 8-bit C1 -> 7-bit replacement transformation for some
+ chars. Added code to line-editor implementation to react to these new
+ editactions. Note that the mapping of lynxkeycode to lynxactioncode
+ outside of line editing, i.e. KEYMAP in lynx.cfg etc., ignores the
+ modifiers. The main loop just drops modifier flags or ignores the modified
+ key; modifier flags cannot be used in lynx.cfg KEYMAP 'keystroke' values.
+ - An ESC not recognized as part of an escape sequence can set the appropriate
+ modifier flag in LYgetch(), except for SLANG which normally uses a
+ different LYgetch() implementation. Interpreting an ESC prefix as modifier
+ is very useful for situations where a held-down Alt key (or some other key)
+ is encoded this way: linux console, kermit with emacs key mappings,
+ possibly xterm with '*eightBitInput: false'. OTOH it doesn't work for all
+ characters or in all situations.
+ - Extended syntax recognized in .lynx-keymaps file (which is only used if
+ compiling with USE_KEYMAPS defined, which in turn depends on slang and
+ ncurses version):
+ (a) Meta-foo can be used to map an escape sequence to a key + modifier.
+ (b) LAC:foo can be used to map an escape sequence directly to a
+ lynxactioncode (actually, to an extended lynxkeycode that
+ encapsulates a lynxactioncode).
+ See examples added to samples/lynx-keymaps.
+ - Extended syntax of KEYMAP option, additional field can override line-editor
+ behavior. PASS documented in lynx.cfg.
+ - Extended syntax that can be used for specifying key in KEYMAP, some of the
+ forms allowed in .lynx-keymaps file are now additionally recognized, but
+ only if compiling with USE_KEYMAPS defined. Left undocumented in lynx.cfg
+ (maybe subject to change).
+ - New "Bash-like" Line Editor binding. Adds several new emacs-like editing
+ functions. Adds tables for keys with modifiers (actually the same table is
+ currently used for all modifiers, to save some space). Most notably, ^X is
+ a prefix key to set a modifier flag. Keys with second function when
+ pressed twice are ^E^E and ^K^K. ESC is also recognized as setting a
+ modifier flag, in case it gets through without been having been handled in
+ LYgetch(). See new file keystrokes/bashlike_edit_help.html for more info.
+ The Bash-like Line Editor Bindings are only compiled in if compiled with
+ -DEXP_ALT_BINDINGS / configured with --enable-alt-bindings (but not subject
+ to a new macro). Implementation code for the new emacs-like functions
+ additionally ifdef'd with ENHANCED_LINEEDIT.
+ - Avoid dependency on DNARROW key binding when form field line-editing is
+ ended with Enter or Return key.
+ - Take setting of real_c/old_c into consideration after return from form
+ field line-editing. Previously there were some strange effects:
+ statusline messages would sometimes not appear when they should, the KEYMAP
+ command would sometimes not work when invoked with ^Vk while in a form
+ field.
+ - Make NOCACHE ('x') work for TEXT_SUBMIT_TYPE form fields (i.e. forms with
+ a single text input field where Enter automatically submits). Of course
+ 'x' has to be typed as ^Vx while line-editing the field (or NOCACHE mapped
+ to a different key). Similarly allow DOWNLOAD, and HEAD to work for such
+ fields. Try to ensure that all permission checks that apply to other form
+ submissions are also done for TEXT_SUBMIT_TYPE fields, this wasn't the case
+ before.
+ - New key actions LPOS_PREV_LINK and LPOS_NEXT_LINK. They are like PREV_LINK
+ and NEXT_LINK, with the difference that, when moving to a form input or
+ textarea line, the last column position (relative to the field) is
+ remembered. They are not mapped by default, but mentioned in lynx.cfg.
+ - New key action DWIMHELP. It should give some context-sensitive help.
+ Currently the appropriate Line Editor Binding help page is shown if a form
+ input field is selected, otherwise it defaults to the main HELP page.
+ - New key action DWIMEDIT. Revert meaning of EDIT back to previous meaning:
+ always edit document file, not textarea content. DWIMEDIT acts like
+ EDITTEXTAREA if the current link is a form textarea or input field and
+ AUTOEXTEDIT was defined, and like EDIT otherwise. Also added slightly
+ different statusline message if form field external editing cannot be done
+ because editing is disabled: it shouldn't refer to "The 'e'dit command".
+ - Summary of reasonable ways to invoke external texarea editing (assuming
+ that it is desired to keep the action of 'e' to edit files at least outside
+ of input fields):
+ 1) KEYMAP 'e' to DWIMEDIT, invoke ^Ve. (if AUTOEXTEDIT is defined,
+ which is the case by default.)
+ 1a) KEYMAP <some other key> to DWIMEDIT, invoke ^V<some other key>.
+ 1b) KEYMAP <some other key> to EDITTEXTAREA, invoke ^V<some other key>.
+ 2) KEYMAP a key (function or control, not printable!) to EDITTEXTAREA
+ or DWIMEDIT, using PASS in the KEYMAP line.
+ 2a) Find some key whose LineEdit binding is already LYE_FORM_PASS, and
+ KEYMAP it to EDITTEXTAREA or DWIMEDIT.
+ 3) compile with EXP_ALT_BINDINGS defined (--enable-alt-bindings),
+ select Bash-like Bindings,
+ invoke ^E^E or ^X^E (or ESC ^E aka M-C-e), or
+ invoke ^Xe (or ESC e aka M-e), or
+ 3a) compile with EXP_ALT_BINDINGS defined (--enable-alt-bindings),
+ and without selecting Bash-like Bindings
+ (invoke ESC ^E aka M-C-e or ESC e aka M-e).
+ Bindings in parentheses under 3/3a may not work with slang unless a
+ tweaked .lynx-keymaps file is used.
+* Other changes related to textarea handling:
+ - More appropriate message statusline message if GROWTEXTAREA or INSERTFILE
+ cannot be done because a textarea is not selected: it shouldn't refer to
+ "external editor".
+ - Check whether an editor is defined before trying to use it for textarea
+ editing. Generate message if spawning of external textarea editor failed.
+ - Allow INSERTFILE only if file access is not restricted.
+ - Enforce dotfiles restriction and "show dot files" setting for INSERTFILE.
+* Mouse handling changes, mostly only if mouse support comes via ncurses:
+ - Re-enabled changing link by clicking in area *near* a link (but not on the
+ link text), but limit max. distance to 2 character positions.
+ - Make mouse popup menu disappear when it should, by applying the right magic
+ touchline() in popup_choice().
+ - Lots of small tweaks to remove glitches in mouse handling, among them: No
+ left scrolling of long input fields on entering with mouse. Try to ensure
+ statusline is updated after mouse menu. Make menu actions work as
+ expected. Avoid acting on mouse events, especially invoking mouse menu, in
+ wrong context (e.g. while at a prompt), at least in many places.
+ - Clicking on left or right border of mouse menu now only moves selection.
+ - At right end of top/bottom line, where single click causes HISTORY action,
+ double click now causes VLINKS action.
+ - Allow to distinguish between submitting and just positioning into a
+ TEXT_SUBMIT_TYPE input field. Single click positions, double click
+ submits, 'activate' from menu also submits.
+ - When initializing ncurses mouse, call mousemask() with only those bits set
+ that we may actually be interested in.
+* Changes relevant for handling window size changes:
+ - For ncurses, changed the way how mainloop() notifies the curses library
+ about a window size change. The approach taken previously, and still used
+ if we are not using ncurses, has more overhead, can unnecessarily switch
+ out of the alternative screen buffer (and back) under xterm, and didn't
+ really make ncurses update the WINDOW structures for the new size in time.
+ - Other tweaks for size change: make sure curdoc.link is valid after
+ refresh.
+ - Detection of size changes in more situations: tolerate EOF from GetChar in
+ the (non-SLANG) LYgetch_for() in more cases if errno is EINTR, if this
+ happens check for a size change and generate trace output. Recognize
+ KEY_RESIZE from ncurses, check for a size change and generate trace output
+ when it occurs.
+ - Added NONRESTARTING_SIGWINCH lynx.cfg option and -nonrestarting_sigwinch
+ flag. If set, lynx *may* react more immediately to window size changes
+ when running under xterm or similar. Whether this actually has an effect
+ depends on the implementation of sigaction() and on the behavior of the
+ curses (or similar) library when a read() (or other system call) is
+ interrupted by signals.
+ Depends on '#if HAVE_SIGACTION', which currently has to be defined by hand,
+ for example by 'make SITE_DEFS="-DHAVE_SIGACTION"'. The command line flag
+ is only available on systems with HAVE_SIGACTION and SIGWINCH.
+ - Tweaks so that lynx in an xterm can survive when the window size is made
+ (probably temporarily) very small, for example 1x1. Avoid display_page's
+ work if it wouldn't be displayable anyway. Make display_title handle very
+ small screen widths, at least to the degree that it doesn't crash.
+* Except for VMS or when DOSPATH is defined, set restore_sigpipe_for_children.
+ Fixes Debian bug #33853, maybe not really a bug but let's be nice.
+* Changes in HTTCP.c:
+ - Added a CTRACE_FLUSH before creation of NSL_FORK child process.
+ - Block certain signals during creation of NSL_FORK child process, if
+ sigprocmask() and friends are available. This should prevent a rare
+ problem where sometimes the child process could be killed before it has a
+ chance to modify its signal handlers, resulting in screen corruption, a
+ seemingly hanging lynx, and/or other problems. It is assumed that
+ sigprocmask() etc. are available if HAVE_SIGACTION is true. It currently
+ has to be defined by hand, for example by 'make
+ SITE_LYDEFS="-DHAVE_SIGACTION"'.
+ - Generate diagnostic messages for some failures of forked lookup. Depends
+ on HAVE_H_ERRNO. In particular, try to detect whether the child process
+ failed because of memory problems, and also fake a 'z' in that case to
+ short-circuit a URL guessing cycle.
+ - For most systems, generate more trace output for connection attempts, close
+ to the actual connect() and select() calls to prevent clobbering errno.
+ See SOCKET_DEBUG_TRACE. This should help diagnose some obscure
+ system-dependent problems that have occasionally been reported.
+* Added some missing stuff for color handling to forms Option Menu code.
+* Printing to screen sometimes didn't show anything for short texts, if screen
+ output was buffered (and ncurses makes stdout buffered). Added another
+ fflush(stdout) in send_file_to_screen().
+* Some checks for specific URLs (helpfilepath, lynxlistfile, and lynxjumpfile)
+ in LYGetFile.c were inappropriately case-insensitive for Unix. The
+ comparison is now case-sensitive except for VMS. This may need tweaking for
+ DOS and similar systems.
+* Added additional LYNoRefererForThis check in getfile(), the one in mainloop()
+ could be missed for TEXT_SUBMIT_TYPE form fields. Also moved other check for
+ whether to send Referer header earlier, and made it apply for URL types that
+ might be proxied.
+* LYAddVisitedLink tried to regard documents with the same address but a
+ different title string as different documents, but this was coded wrong.
+ Removed ineffective comparison, but keep old title string if new title string
+ is empty.
+* Correct long-standing logic error in MAIL_SYSTEM_ERROR_LOGGING handling.
+ Apparently not many people are using it...
+* Fix for traversal code to put the right address into the TRAVERSE_REJECT_FILE
+ if a request fails after popping a document from the history stack (this can
+ only occur if a previous request for the same document had succeeded). Also
+ don't try to send mail in such a case if MAIL_SYSTEM_ERROR_LOGGING is on.
+ Also prevent possible history stack underflow if this occurs on return to the
+ first document.
+* According to lynx.cfg, error logging mail may be sent to ALERTMAIL if no
+ document owner is known, but this was not implemented; now it is. ALERTMAIL
+ is used if it is defined non-empty in userdefs.h. Of course normally it
+ should be left undefined.
+* Fix for traversal code to reject form fields a bit earlier. This prevents
+ unnecessary lookups as well as adding of an empty line to the
+ TRAVERSE_REJECT_FILE for each form field encountered.
+* Format -crawl output as was documented in CRAWL.announce: with this switch,
+ link numbering is always off by default (userdefs.h and lynx.cfg defaults und
+ saved user preference are ignored) unless -number_links is given, and -crawl
+ -traversal format is now consistent with -crawl -dump with respect to link
+ numbering. As a side effect, -crawl without either -traversal or -dump now
+ also turns link numbering off unless -number_links is used (the meaning of
+ -crawl without either of these was undocumented), so it then acts effectively
+ as a (less powerful) negation of the -number_links switch.
+* For -crawl -dump, the list of links was appended twice. Fixed.
+* Check URL as well as title before deciding that a document should not be
+ pushed on the history stack because it looks like a generated special page.
+* Made "Don't waste the cache" optimization in historytarget() subject to
+ additional checks, to avoid uncaching of the wrong document in some cases.
+* LYSafeGets() would drop the last line from a file if it was not terminated.
+ Changed to return the unterminated line like fgets().
+* Clarifications on restrictions. "download" does not imply "disk_save" while
+ "print" does, this doesn't seem to make much sense but has been the behavior
+ for a long time.
+* Restrictions inside_news, outside_news now apply to reading as well as
+ posting. The documentation (except for the corresponding comments in
+ userdefs.h) said that they apply to posting, while in fact they were
+ implemented for reading only. [Does nobody read this stuff???] Also, the
+ implementation only checked the flag for news: URLs, but not for nntp:
+ URLs, which doesn't make much sense given that the latter provide an
+ alternative way for most (if not all) purposes of the first. So now these
+ restrictions apply to news:, nntp:, newspost:, and newsreply: (but not to
+ snews:, snewspost:, or snewsreply:).
+* Document -restrictions=externals.
+* Some of the restriction stuff not added to VMS lynx.hlp file, since I'm not
+ quite sure whether the corresponding features work there at all.
+* Changed restriction parsing so that "all" and "default" don't get ignored if
+ they appear as one of several items in the same list.
+* Implement listing of current restrictions to stdout with new -restrictions=?
+ option. This should appear as the last command line option, otherwise the
+ effect of options appearing later may not be shown. The '?' may require
+ quoting.
+* Made -restrictions= (without any option flags) act like -restrictions
+ (without equal sign either) as implied by documentation, i.e. list
+ recognized restriction options.
+* LYRestricted has been greatly abused. Once upon a time it was a PRIVATE flag
+ in LYMain.c (then called anon_restrictions_set), used only to get the
+ precedence of various command line options right. Recently it has been
+ misused as a check (and as the only one) whether "anonymous restrictions" are
+ in effect. This undermines various assumptions:
+ - that -anonymous is basically an aggregate set of restrictions which could
+ be specified individually with -restrictions=.
+ - that individually listed restrictions (-restrictions=...) act as expected,
+ and can be used to restrict various aspects in a useful manner.
+ - that -validate implies the strongest restrictions, except for what is
+ explicitly exempted (i.e. 'g'oto for http/https URLs).
+ Use specific restrictions instead:
+ - new "compileopts_info" for LYNXCOMPILEOPTS: - for anonymous default see
+ userdefs.h
+ - new "lynxcfg_info" for LYNXCFG: - for anonymous default see userdefs.h
+ - new "lynxcfg_xinfo" for extended LYNXCFG: - for anonymous default see
+ userdefs.h
+ - new invisible "goto_configinfo" for LYNXCOMPILEOPTS: & LYNXCFG: for
+ anonymous default, see userdefs.h
+ - additionally check existing "option_save" for LYNXCFG://reload/ -
+ always restricted by anonymous default
+ ("invisible" means that this restriction cannot be explicitly listed in a
+ -restrictions=... list, but has a value derived from userdefs.h that is used
+ with -anonymous and -restrictions=default.)
+* Forms options menu can now be used with -validate.
+* Allow following local help file links, even if "file_url" restriction is set,
+ from LYNXKEYMAP, LYNXCOOKIES. (Possibly more need to be added.)
+* Apparently realm checking (with -realm option) is bypassed for URLs from
+ (some) form submissions (it seems to be intentional, but why?). Made sure
+ this at least doesn't weaken -validate restrictions.
+* Apply -localhost check in getfile for news URLs that include a hostname,
+ i.e., that begin with with "news://".
+* Add '&' to nonalphanumeric characters forbidden by exec_ok() for lynxexec and
+ lynxprog URLs, but keep allowing it for lynxcgi. There's not much point in
+ excluding ';' and so on if '&' is acceptable!
+* Tweaked LYNXMESSAGES: handling slightly: don't bypass normal getfile
+ handling.
+* Reset LYforce_no_cache flag in mainloop() after failed access, before popping
+ the previous (or, actually, probably currently still displayed) document.
+* Tweak for 'no data' handling: it isn't always an error, but was sometimes
+ treated as such. It mostly doesn't make a difference, except for the message
+ printed when the startfile cannot be accessed and for traversal and mail
+ error logging. This needs to be revised to apply for all protocols.
+* Added new functionality for rules: Redirect, UseProxy, various others. See
+ cernrules.txt in samples directory for details.
+* Prevent crashes in HTNews.c with HEAD.
+* Allow HEAD requests for proxied URLs (checking whether any applicable proxy
+ begins with http: or lynxcgi:), as far as this can be determined based on
+ regular environment settings (i.e. unaware of proxying by rules).
+* Modified add_item_to_list() so that if the restriction flag is omitted from a
+ DOWNLOADER/UPLOADER/EXTERNAL line in lynx.cfg, it is assumed FALSE. This
+ modifies the change of 1998-10-17 to be on the safer side, it is more
+ consistent with how PRINTER lines or lines with the colon separator present
+ but the flag value absent are handled, and it only makes a difference when a
+ -restriction command line option or its equivalent is in effect anyway.
+* Deal with unusual cases where telnet and similar protocols are proxied, or
+ possibly changed to a different type of protocol by rules. Normally such
+ protocols should never be proxied, but there was no protection against it,
+ and lynx could crash. The approach now taken does not disallow it, but just
+ tries to deal with the situation in a way that avoids crashing; it is
+ conceivable that one may want to direct e.g. telnet or rlogin URLs to a HTTP
+ page that explains why theses types are not supported. A similar problem
+ that occurred when e.g. telnet was forbidden by a rule is also dealt with.
+* Protect start_curses calls in getfile against being executed if
+ dump_output_immediately is in effect. Maybe access to telnet, rlogin,
+ lynxexec URLs should be completely disabled for this case; skipping the
+ start_curses at least avoids being left with non-restored tty settings after
+ the program exits, is someone attempts to use -dump or -source with such a
+ URL (the -dump or -source flags is then effectively more or less ignored).
+* Tweaks in fix_http_urls, renamed fix_httplike_urls.
+* Moved LYStrerror from LYStrings.{h,c} to HTAlert.{h,c}, so that it can be
+ used in HT*.c files without pulling in yet more LY*.h headers.
+* Reset 'safe' flag in anchor on parsing "Safe: no" and "Safe: false" headers.
+* The top makefile.in had some 'rm -rf' for whole directories $(helpdir) and
+ $(docdir) in install targets that could potentially wipe out unrelated files;
+ added checks to make sure the directories haven't been changed to something
+ not lynx-specific (they are regarded as lynx-specific if the last component
+ is lynx_help and lynx_doc, respectively).
+* Various doc tweaks.
+* Updated README.defines. Other contributors should please add their stuff
+ there, too.
+* Additional non-option args (before the last one), i.e. URLs or filenames,
+ are made available for 'g'oto recall. If unwanted, this can be disabled by
+ changing EXTENDED_STARTFILE_RECALL in LYMain.c -KW
+* In UCChangeTerminalCodepage() used for --enable-font-switch with linux: use
+ LYOpenTemp() etc. instead of tempnam(), this avoids "Invalid pointer" with
+ LY_FIND_LEAKS and avoids leaving old temporary files hanging around in some
+ situations. Also added some error checking -KW
+
1999-06-01 (2.8.2rel.1)
-----------------------
1999-06-01 (2.8.2pre.11)
@@ -348,7 +3767,7 @@ Changes since Lynx 2.8 release
* ifdef'd print_local_dir in HTFile.c since this function does not compile on
VMS (report by Andy Harper, Tony Bolton) -TD
* fix reload_read_cfg() to avoid persistent cookies mode changing at run time;
- reload printers list, downloaders list, environments - as expected. - LP
+ reload printers list, downloaders list, environments - as expected - LP
* fixes for SOURCE_CACHE!=NONE mode, trying to accommodate HTreparse_document()
for mainloop() events:
- add/use flag "from_source_cache" for better mainloop maintenance
@@ -479,7 +3898,7 @@ Changes since Lynx 2.8 release
(ie different commandline options make source view logic different) -VH
* HTChunkPutc was inlined in SGML.c for better performance -VH
* keeping of Style_className was omitted in HTML.c to increase performance of
- lynx compiled with lss support. -VH
+ lynx compiled with lss support -VH
* performance of lynx compiled with lss support is increased ~ by 15-20% for
normal documents, and by up to 50% for documents with a lot of tags VH
* fixed bug in lynx compiled with lss support that caused it to load local CSS
@@ -643,7 +4062,7 @@ Changes since Lynx 2.8 release
(possible large) document over the net. - LP
* &mdash; (&#x2014) now display as "--" (popular requests) - LP
* &emsp; are now displayed as two &ensp; (popular requests),
- previous definition of HT_EM_SPACE now renamed to HT_EN_SPACE. - LP
+ previous definition of HT_EM_SPACE now renamed to HT_EN_SPACE - LP
* minor tweaks in postoptions(), new flag added - LP
* minor changes to make this build with SunOS K&R cc - TD
* entities.h: clean HTML4.0 entities table added, it is #ifdef'ed with
@@ -869,7 +4288,7 @@ Changes since Lynx 2.8 release
* function expand_substring used with NCURSES for user-defined mapping keysyms
to byte sequences was parsing the "^(...)" construct wrong - KW
* other small tweaks in key handling code - KW
-* changes to lynx.cfg to better reflect reality. - KW
+* changes to lynx.cfg to better reflect reality - KW
* terminology note: lynxkeycode = what's between the colons in lynx.cfg
KEYMAP:...:..., lynxactioncode = LYK_* code for what's right of the second
colon, lynxeditactioncode = what's assigned in LYEditmap.c (and which may
@@ -955,7 +4374,7 @@ Changes since Lynx 2.8 release
default), will now bring up the editor within a TEXTAREA, so there's no
need to "waste" a separate keybinding (though you can still additionally
bind the function separately, if desired).
- 2. Converts any tab chars in the edited file, to spaces in the TEXTAREA
+ 2. Converts any tab chars in the edited file, to spaces in the TEXTAREA
anchor line. The tabstop is currently #define'd to the quasi-standard
value of 8. (If anyone thinks that needs to be user configurable, feel
free to add that to the o(ptions) form/menu,
@@ -1378,7 +4797,7 @@ Changes since Lynx 2.8 release
before triggering the action, so if the action chosen from the menu would
not redraw the screen, the menu outline is left on the screen - IZ
* modify LYKeymap.c so that it can show internal keymaps above 0400 as
- hexadecimal codes even if they do not appear in the function-key table - IZ
+ hexadecimal codes even if they do not appear in the function-key table -IZ
* add HTOptParam to avoid spurious quoting of blanks in rlogin URLs by
HTAddParam - TD
* correct missing assignment in remote_session(), from dev.9 changes for
diff --git a/gnu/usr.bin/lynx/INSTALLATION b/gnu/usr.bin/lynx/INSTALLATION
index 076ae539760..b7e0babc681 100644
--- a/gnu/usr.bin/lynx/INSTALLATION
+++ b/gnu/usr.bin/lynx/INSTALLATION
@@ -25,66 +25,78 @@ First, you must configure Lynx for your system regardless of the port you use.
Follow the instructions given immediately below to configure for your system,
and then go to the respective section concerning the port you wish to compile.
-
I. General configuration instructions (all ports).
-Step 1. (define compile-time variables -- See the userdefs.h file.)
- There are a few variables that MUST be defined, or Lynx will not build.
- There are a few more that you will probably want to change. The variables
- that must be changed are marked as such in the userdefs.h file. Just edit
- this file, and the changes should be straight forward. If you compile
- using autoconfigure, you can set most defines with option switches and do
- not absolutely have to edit userdefs.h. Many of the variables are now
- configurable in the lynx.cfg file, so you may set them at run-time if you
- wish. Lynx implements Native Language Support. Read "ABOUT-NLS" if you
- want to build an international version of Lynx or tailor the statusline
- prompts, messages and warnings to the requirements of your site.
-
-Step 2. (define run-time variables -- See the lynx.cfg file for details.)
- Set up local printers, downloaders, assumed character set, key mapping,
- and colors in the lynx.cfg file. Please read "lynx.cfg" thoroughly as
- many of the features of Lynx, and how to use them, are explained. Also
- see the example mime.types, mailcap and jumps files in the samples
- subdirectory. Lynx MUST be able to find the lynx.cfg file at start-up.
- The location of the lynx.cfg file may be compiled in with the LYNX_CFG_FILE
- defined in userdefs.h (or with the configure option explained in the Unix
- section below), specified with an environment variable, LYNX_CFG, or
- specified with the "-cfg" command line option.
-
-Step 3. (You may skip this step if you are not interested in any special
- characters and any local files or WWW pages you will view all use the
- ISO-8859-1 "ISO Latin 1" Western European character set.) People who
- will be running Lynx in an environment with different and incompatible
- character sets should configure CHARACTER_SET (the Display character set)
- and ASSUME_LOCAL_CHARSET to work correctly for them before creating
- bookmark files et cetera. Read "lynx.cfg" for detailed instructions.
- Additional character sets and their properties may be defined with tables
- in the src/chrtrans directory, see the README.* files therein.
-
-Step 4. (optional -- news for UNIX and VMS)
- Set NNTPSERVER in "lynx.cfg" to your site's NNTP server, or set the
- environment variable externally. For news posting ability to be enabled
- in Lynx, the NEWS_POSTING symbol must be defined to TRUE in userdefs.h or
- lynx.cfg. Also define LYNX_SIG_FILE in userdefs.h or lynx.cfg so that it
- points to users' signature files for appending to posted messages.
-
-Step 5. (Anonymous account -- VERY IMPORTANT!!!!! -- )
- If you are building Lynx for your personal use only you may skip this
- step. If you are setting up an anonymous account with Lynx, you are
- STRONGLY advised to use the -anonymous command line option. If you do
- not use this option, users may be able to gain access to all readable
- files on your machine! ALSO NOTE that many implementations of telnetd
- allow passing of environment variables, which might be used by
- unscrupulous people to modify the environment in anonymous accounts.
- When making Web access publicly available via anonymous accounts intended
- to run Lynx captively, be sure the wrapper uses the -cfg and -homepage
- switches to specify the configuration and start files, rather than relying
- on the LYNX_CFG, LYNX_CFG_FILE, or WWW_HOME variables.
+Step 1. Compile-time Variables.
+
+ There are a few variables that MUST be defined if Lynx is to build
+ and there are others you may want to change.
+
+ Lynx MUST be able to find lynx.cfg at start-up: using configure
+ (e.g. with UNIX or Cygwin), its location is best set with --libdir ;
+ you can check in lynx_cfg.h after configure has run, if you wish.
+ otherwise, you can use LYNX_CFG_FILE in userdefs.h ,
+ environment variable LYNX_CFG or the -cfg command-line option.
+
+ If you are using configure, you need not make any changes in userdefs.h .
+ There are a few variables you can't define with configure --options
+ but can define in userdefs.h , e.g. numbering fields as well as links.
+ Many variables which can be defined with configure or userdefs.h
+ can also be defined in lynx.cfg or via the Options Menu.
+
+ Lynx implements Native Language Support. Read "ABOUT-NLS", if you want
+ to build an international version of Lynx or tailor status-line prompts,
+ messages and warnings to the requirements of your site.
+
+Step 2. Run-time Variables.
+
+ Read lynx.cfg thoroughly, as many Lynx features and how to use them
+ are explained there, in some cases ONLY there. Set up local printers,
+ downloaders, assumed character set, key mapping and colors in lynx.cfg .
+ Also see the sample mime.types, mailcap and jumps files
+ in the samples subdirectory.
+
+Step 3. Alternative Character Sets.
+
+ You may skip this, if you are not interested in special characters
+ and all local files or WWW pages you will view will use the ISO-8859-1
+ "ISO Latin 1" Western European character set.
+
+ If you will be running Lynx in an environment with different incompatible
+ character sets, configure CHARACTER_SET (the Display character set)
+ and ASSUME_LOCAL_CHARSET to work correctly before creating bookmark files
+ and other such items: read lynx.cfg for detailed instructions.
+ Additional character sets and their properties may be defined with tables
+ in the src/chrtrans directory: see the README.* files therein.
+
+Step 4. News.
+
+ Set NNTPSERVER in lynx.cfg to your site's NNTP server
+ or set the environment variable externally. For posting to be enabled,
+ NEWS_POSTING must be TRUE in userdefs.h or lynx.cfg.
+ Also define LYNX_SIG_FILE in userdefs.h or lynx.cfg ,
+ so that it points to users' signature files for appending to messages.
+Step 5. Anonymous Accounts *** VERY IMPORTANT!!!!! ***
+
+ If you are building Lynx for personal use only, you can skip this.
+
+ If you are setting up anonymous accounts to use Lynx captively,
+ i.e. making Web access publicly available to users who should not
+ be allowed any other type of access to your system,
+ you are STRONGLY advised to use the -anonymous command-line option:
+ if you do not use this option, users may be able to gain access
+ to all readable files on your machine!
+
+ Many implementations of telnetd allow passing of environment variables,
+ which might be used to modify the environment in anonymous accounts,
+ allowing mischief or damage by malicious users, so make sure the wrapper
+ uses the -cfg and -homepage switches to specify lynx.cfg and start-file,
+ rather than relying on variables LYNX_CFG, LYNX_CFG_FILE and WWW_HOME.
II. Compile instructions -- UNIX
-1a. Auto-configure. The auto-configure script uses autoconf2.12 to generate a
+1a. Auto-configure. The auto-configure script uses autoconf2.13 to generate a
Bourne shell script, configure, which creates "makefile" and "lynx_cfg.h".
If you are on a UNIX platform, the easiest way to build Lynx is to type:
@@ -111,10 +123,13 @@ II. Compile instructions -- UNIX
of config.status, config.cache and config.log, as well as the pertinent
compiler diagnostics.
+ See the note in aclocal.m4 for special instructions if you must modify the
+ configure script.
+
NOTE: Lynx is a curses-based application, so you must have a curses
library available to link to. Native curses (on the system when it was
installed) are often broken, so you may get superior performance if you
- have either "ncurses" ("ftp://ftp.clark.net/pub/dickey/ncurses") or "slang"
+ have either "ncurses" ("ftp://invisible-island.net/ncurses") or "slang"
("ftp://space.mit.edu/pub/davis/slang"). If you install these libraries
in your home directory or a non-default location, you may need to set the
CPPFLAGS (full path to include files) and LIBS (full path to library files)
@@ -128,22 +143,22 @@ II. Compile instructions -- UNIX
slang, e.g., before 0.99-38, because slang's interfaces change periodically.
Note compiler/system specific problems below. See also:
- http://www.clark.net/pub/dickey/ncurses/ncurses.faq.html
+ http://invisible-island.net/ncurses/ncurses.faq.html
1b. Platforms. Configure should work properly on any Unix-style system.
It has been tested on the following platforms.
- AIX 3.2.5 (cc w/ curses) CLIX (cc w/ curses & ncurses)
- DGUX
+ AIX 3.2.5 (cc w/ curses) BeOS 4.5 (gcc w/ ncurses)
+ CLIX (cc w/ curses & ncurses) DGUX
Digital Unix 3.2C and 4.0 (gcc & cc w/ curses, ncurses & slang)
- FreeBSD 2.1.5 (gcc 2.6.3 w/ curses & ncurses)
+ FreeBSD 2.1.5, 3.1 (gcc 2.6.3 w/ curses & ncurses)
HP-UX (K&R and ANSI cc, gcc w/ curses, ncurses & slang)
IRIX 5.2 and 6.2 (cc & gcc w/ curses, ncurses & slang)
Linux 2.0.0 (gcc 2.7.2 w/ curses, ncurses & slang)
MkLinux 2.1.5 (gcc 2.7.2.1) NetBSD
NEXTSTEP 3.3 (gcc 2.7.2.3 w/ curses)
- OS/2 EMX 0.9b (ncurses) SCO (cc w/ curses)
- Solaris 2.5 & 2.6 (cc & gcc w/ curses, ncurses & slang)
+ OS/2 EMX 0.9c (ncurses) SCO OpenServer (cc w/ curses)
+ Solaris 2.5, 2.6 & 2.7 (cc & gcc w/ curses, ncurses & slang)
SunOS 4.1 (cc w/ curses, gcc w/ ncurses & slang)
OS390 and BS2000.
@@ -151,26 +166,26 @@ II. Compile instructions -- UNIX
useful for compiling with the bundled curses. Both ncurses and slang
require a compiler that recognizes prototypes.
- NOTE: Ncurses 4.2 builds/works on OS/2; however you should get at least
- the post-4.2 patches from October 1998, since that supports mouse and
- screen sizes other than 25x80. (ftp://ftp.clark.net/pub/dickey/ncurses/)
-
1c. Options
To get a list of the configure script's options, type "./configure --help".
Below is an alphabetical listing of the Lynx-specific options. The actual
order shown by the -help option is different. See "docs/README.defines"
for information on defines for which there are no option switches.
- --disable-alt-bindings (define EXP_ALT_BINDINGS)
+ --disable-alt-bindings (prevent defining EXP_ALT_BINDINGS)
Compiles-in an alternative set of line-edit bindings, in addition
to the default bindings.
+ --disable-bibp-urls (define DISABLE_BIBP)
+ Disable (do not compile code) support for bibp: URLs.
+
--disable-config-info (define NO_CONFIG_INFO)
- Use this option to disable the browsable configuration information
- (screens that show the result of the configuration script, as well
- as a pointer to the lynx.cfg file).
+ Use this option to disable extended browsable configuration information
+ (a screen that shows the result of the configuration script, as well
+ as extended lynx.cfg viewing with a pointer to the lynx.cfg file and
+ additional functionality).
- --disable-dired (define DIRED_SUPPORT)
+ --disable-dired (prevent defining DIRED_SUPPORT)
Use this option to disable the optional directory-editor.
Lynx supports directory editing (DirEd) for local directories.
@@ -181,14 +196,15 @@ II. Compile instructions -- UNIX
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 and should not have access to equivalent capabilities,
- you must disable DirEd with this option. You can also disable some
- DirEd functions while allowing others. If you have disabled DirEd
- completely, you can ignore all the other DirEd options.
+ you probably want to disable DirEd with this option. You can also
+ disable some DirEd functions while allowing others. If you have
+ disabled DirEd completely, you can ignore all the more specific
+ DirEd options.
- All DirEd functions that were enabled on compilation can be disabled
- or modified at run time via DIRED_MENU symbols in lynx.cfg.
+ All DirEd menu functions that were enabled on compilation can be
+ disabled or modified at run time via DIRED_MENU symbols in lynx.cfg.
- --disable-dired-archive (define ARCHIVE_ONLY)
+ --disable-dired-dearchive (define ARCHIVE_ONLY)
Use this option to prevent DirEd from extracting files from an
archive file.
@@ -196,9 +212,8 @@ II. Compile instructions -- UNIX
Use this option to prevent DirEd from using gzip and gunzip.
--disable-dired-override (prevent defining OK_OVERRIDE)
- Lynx users can customize their keymaps by creating private
- versions of lynx.cfg and modifying them to override the default
- keymap. Use this option to prevent DirEd keymap overriding.
+ Normally, in DirEd directory viewing mode some key mappings are
+ overridden. Use this option to disable DirEd keymap overriding.
--disable-dired-permit (prevent defining OK_PERMIT)
Use this option to prevent DirEd from changing the permissions
@@ -234,21 +249,33 @@ II. Compile instructions -- UNIX
Do not compile-in code used to connect to "finger" URLs.
--disable-ftp (define DISABLE_FTP)
- Do not compile-in code used to connect to "ftp" URLs.
+ Do not compile-in code used to connect to FTP servers.
--disable-forms-options (define NO_OPTION_FORMS)
- Disable the forms-based options screen. (See --disable-menu-options).
- Please note that a few users with broken curses may have problems with
- popup forms fields. The default behaviour is to compile both forms and
- menu options code with FORMS_OPTIONS switch in lynx.cfg, or
- -forms_options command-line switch.
+ Disable the Form-based Options Menu (see --disable-menu-options).
+ The default is to compile key-based & form-based Options Menu code,
+ allowing users the final choice via FORMS_OPTIONS in lynx.cfg
+ or the -forms_options command-line switch.
--disable-gopher (define DISABLE_GOPHER)
Do not compile-in code used to connect to GOPHER servers.
--disable-full-paths
- Use this option to control whether full utility pathnames are used.
- By default, configure substitutes full pathnames.
+ Use this option to control whether full pathnames are compiled in for
+ various utilities invoked by lynx as external commands. By default,
+ full pathnames are compiled in for the the locations where configure
+ finds these commands at configure time. Affected commands are chmod,
+ compress, cp, gzip, install, mkdir, mv, rm, tar, touch, gunzip, unzip,
+ bzip2, uudecode, zcat, zip, telnet, tn3270, rlogin. (Not all of them
+ are used on all systems or in all configurations.)
+
+ This option makes Lynx simpler to install, but potentially less secure,
+ since the commands are then set in the user's $PATH. All of these
+ commands may also be overridden individually by setting environment
+ variables before configuring. For example, you can disable the telnet
+ command by doing this:
+
+ setenv TELNET /bin/false
--disable-included-msgs
Do not use included messages, for i18n support. If NLS support is
@@ -260,28 +287,26 @@ II. Compile instructions -- UNIX
enabled, the actual directory style is configurable from lynx.cfg).
--disable-menu-options (define NO_OPTION_MENU)
- Disable the menu-style options screen. (See --disable-forms-options).
- Please note that a few users with broken curses may have problems with
- popup forms fields. The default behaviour is to compile both styles
- options menu code with FORMS_OPTIONS switch in lynx.cfg, or
- -forms_options command-line switch.
+ Disable the Key-based Options Menu.
+ See --disable-forms-options (above) for further details.
--disable-news (define DISABLE_NEWS)
- Do not compile-in code used to connect to NEWS servers.
+ Do not compile-in code used to connect to NNTP (netnews) servers.
--disable-parent-dir-refs (define NO_PARENT_DIR_REFERENCE)
Use this option to disable "Up-to" parent-links in directory listings.
- --disable-partial (define DISP_PARTIAL)
+ --disable-partial (prevent defining DISP_PARTIAL)
Turn off code that lets Lynx display parts of a long page while loading
it.
- --disable-persistent-cookies (define EXP_PERSISTENT_COOKIES)
+ --disable-persistent-cookies (prevent defining EXP_PERSISTENT_COOKIES)
Use this option to tell configure whether to compile-in support for
- saving cookies to a file, for subsequent reuse. This creates the file
- specified by the 'COOKIE_FILE' option, or defaults to ".lynx_cookies"
- in the home directory. (Currently there is no protection against
- conflict if several lynx copies are active from the same account).
+ saving cookies to a file, for subsequent reuse. Persistent cookie
+ support will use (or create) the file specified by the 'COOKIE_FILE'
+ option, or default to ".lynx_cookies" in the home directory.
+ (Currently there is no protection against conflict if several lynx
+ sessions are active from the same account).
--disable-trace (define NO_LYNX_TRACE)
Turn off code that lets you trace internal details of Lynx's operation.
@@ -293,16 +318,33 @@ II. Compile instructions -- UNIX
Compiles-in an alternative list-page, bound to 'A' rather than 'l',
which always lists URLs rather than titles.
+ --enable-change-exec (define ENABLE_OPTS_CHANGE_EXEC)
+ Allow users to change the execution status within the options screen.
+ See EXEC_LINKS and EXEC_SCRIPTS.
+
--enable-cgi-links (define LYNXCGI_LINKS)
Allows lynx to access a cgi script directly without the need for
a http daemon.
+ --enable-charset-choice (define EXP_CHARSET_CHOICE)
+ Add logic for ASSUMED_DOC_CHARSET_CHOICE and DISPLAY_CHARSET_CHOICE in
+ lynx.cfg, allowing user to configure a subset of the compiled-in
+ charsets for normal use.
+
+ --enable-cjk (define CJK_EX)
+ Add experimental logic for supporting CJK documents. (This is not
+ necessary for CJK support and may go away in a future release.)
+
--enable-color-style (define USE_COLOR_STYLE)
Use this option to enable optional and *experimental* color style.
- (Also defines USE_HASH, LINKEDSTYLES)
+ This is implemented for curses (if it supports color), ncurses and
+ PDCurses, but not slang.
--enable-debug (The symbol DEBUG is always defined.)
- Use this option to compile-in support for debugging.
+ Use this option to compile-in support for debugging.
+ Note that this flag is ignored if the CFLAGS environment
+ variable is set, in that case "-g" (or whatever) has to
+ be included in the CFLAGS value to get debugging.
--enable-default-colors (define USE_DEFAULT_COLORS)
Enable use of default-color background (ncurses/slang). Either
@@ -324,6 +366,9 @@ II. Compile instructions -- UNIX
--enable-find-leaks (define LY_FIND_LEAKS)
Use this option to compile-in logic for testing memory leaks.
+ --enable-file-upload (define EXP_FILE_UPLOAD)
+ Compile-in support for form-based file-upload.
+
--enable-font-switch (define EXP_CHARTRANS_AUTOSWITCH)
Allow Lynx to automatically change the Linux console state (switch
fonts) according to the current Display Character Set. (Linux console
@@ -332,10 +377,27 @@ II. Compile instructions -- UNIX
--enable-gzip-help
Install the lynx help files in gzip'd format [*.gz] to save space.
- --enable-internal-links (define DONT_TRACK_INTERNAL_LINKS)
- Disabled by default, this option allows tracking of internal links,
- a feature which could, however, compromise a secure transaction by
- forcing inappropriate resubmission of form content.
+ --enable-htmlized-cfg
+ generate an HTMLized copy of lynx.cfg which will be installed with
+ the other help files.
+
+ --enable-ipv6 (define ENABLE_IPV6)
+ use experimental IPV6 (with IPV4) logic.
+
+ --enable-justify-elts (define EXP_JUSTIFY_ELTS)
+ use experimental element-justification logic.
+
+ --enable-internal-links (prevent defining DONT_TRACK_INTERNAL_LINKS)
+ With `internal links' (links within a document to a location within
+ the same document) enabled, Lynx will distinguish between, for example,
+ `<A HREF="foo#frag">' and `<A HREF="#frag">' within a document whose
+ URL is `foo'. It may handle such links differently, although practical
+ differences would appear only if the document containing them resulted
+ from a POST request or had a no-cache flag set. This feature attempts
+ to interpret URL-references as suggested by RFC 2396, and to prevent
+ mistaken resubmissions of form content with the POST method. An
+ alternate opinion asserts that the feature could actually result in
+ inappropriate resubmission of form content.
--enable-kbd-layout (define EXP_KEYBOARD_LAYOUT)
Disabled by default, this option allows you to use translation
@@ -346,17 +408,33 @@ II. Compile instructions -- UNIX
--enable-libjs (define EXP_LIBJS)
Disabled by default; used for ifdef'ing JavaScript interface.
+ Currently dummy: no JavaScript support implemented in Lynx yet.
+
+ --enable-nested-tables
+ Extends TRST to format nested tables, as well as be smarter about
+ <BR> and <P> tags in table cells.
- --enable-nls
+ --enable-nls (several definitions)
use Native Language Support (i.e., gettext).
--enable-nsl-fork (define NSL_FORK)
Disabled by default, this allows interruption of NSL requests,
so that `z' will stop the `look-up' phase of a connection.
- --enable-prettysrc (define USE_PSRC)
- Use this option to compile-in support for colorizing the source
- view of HTML pages.
+ --enable-prettysrc (define USE_PRETTYSRC)
+ Use this option to compile-in support for colorizing the source view of
+ HTML pages. If compiled-in, new source view mode is available with
+ -prettysrc command line option.
+
+ --enable-read-eta (define EXP_READPROGRESS)
+ Enhance the read-progress message to show ETA (estimated time to
+ completion), as well as the amount of time stalled without any data
+ transferred.
+
+ --enable-scrollbar (define USE_SCROLLBAR)
+ Compile-in experimental support for scrollbar on the right-margin of
+ the screen. If you configure with ncurses, this works with the mouse
+ on xterm, etc.
--enable-source-cache (define SOURCE_CACHE)
Use this option to compile-in support for caching HTML pages locally,
@@ -368,6 +446,10 @@ II. Compile instructions -- UNIX
--enable-underlines (define UNDERLINE_LINKS)
Use this option to underline links rather than using boldface.
+ --enable-vertrace (define LY_TRACELINE)
+ Turn on code that prefixes trace output lines with source filename
+ and line number.
+
--enable-warnings
Use this option to turn on GCC compiler warnings.
@@ -381,6 +463,10 @@ II. Compile instructions -- UNIX
--with-catgets
use catgets functions if available. See "--enable-nls".
+ --with-charsets=list (define ALL_CHARSETS)
+ Limit the number of charsets that are compiled-in to the specified
+ list of comma-separated MIME names.
+
--with-included-gettext
use the GNU gettext library included here (default). See
"--enable-nls".
@@ -393,7 +479,7 @@ II. Compile instructions -- UNIX
--with-screen=XXX
Use this option to select the screen type. The option value,
- XXX must be one of curses (the default), ncurses or slang.
+ XXX must be one of curses (the default), ncurses, pdcurses or slang.
Specifying a screen type causes the configure script to look in
standard locations for the associated header and library files,
unless you have preset the $CFLAGS and $LIBS variables.
@@ -401,20 +487,43 @@ II. Compile instructions -- UNIX
--with-screen=ncurses (define NCURSES)
--with-screen=slang (define USE_SLANG)
- --with-socks (define SOCKS)
+ Note that some systems may have a default curses library which
+ does not support color, while on others, ncurses is installed as
+ the curses library.
+
+ --with-socks[=XXX] (define SOCKS)
Use this option to configure with the socks library.
- --with-socks5 (define USE_SOCKS5, SOCKS)
+ The optional value XXX specifies the directory in which the library
+ can be found, and may be either the path of the "lib" directory,
+ or one level above. In either case, the corresponding header files
+ are assumed to be in the parallel "include" directory.
+
+ --with-socks5[=XXX] (define USE_SOCKS5, SOCKS)
Use this option to configure with the socks5 library.
+ The optional value XXX specifies the directory in which the library
+ can be found, and may be either the path of the "lib" directory,
+ or one level above. In either case, the corresponding header files
+ are assumed to be in the parallel "include" directory.
+
If you make a SOCKSified lynx, you may have trouble 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. 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.
+ 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. 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.
+
+ --with-ssl[=XXX] (define USE_SSL)
+ Use this option to configure with the OpenSSL library, or SSLeay.
+ See docs/README.ssl for additional information.
+
+ The optional value XXX specifies the directory in which the library
+ can be found, and may be either the path of the "lib" directory,
+ or one level above. In either case, the corresponding header files
+ are assumed to be in the parallel "include" directory.
--with-zlib (define USE_ZLIB)
Use zlib for decompression of some gzip files.
@@ -446,6 +555,13 @@ II. Compile instructions -- UNIX
the configure script) you may have to specify these via
the $LIBS variable.
+ Lynx has compiled-in the pathnames of various programs which it executes.
+ Normally the full pathnames are given, rather than the program name
+ alone. These may be preset in the environment by the capitalized version,
+ e.g., INSTALL for "install". The corresponding internal definitions
+ are suffixed "_PATH", e.g., "INSTALL_PATH".
+
+
-- 1997/7/27 - T. Dickey <dickey@clark.net>
1e. Examples
@@ -484,7 +600,7 @@ II. Compile instructions -- UNIX
process will create the libraries you will need, wais.a and client.a. Edit
the Makefile in the top level directory and add the library locations under
the DIRECT WAIS ACCESS heading. Edit the Makefile for the WWW Library in
- "WWW/Library/Implementation/CommonMakefile" to point to the include
+ "WWW/Library/Implementation/makefile" to point to the include
directory for the freewais distribution. Precompiled libraries are
available for many platforms if you don't wish to compile one yourself.
@@ -507,10 +623,9 @@ Step 1. Downloading binary files.
comments in FIXED512.COM, userdefs.h and lynx.cfg for more information.
Step 2. Passive FTP
- If your system requires the PASV FTP code instead of the standard
- PORT FTP code (e.g., to deal with a firewall) then edit "WWW/Library/
- Implementation/HTFTP.c" and comment out line 43 like so:
- /* #define LISTEN /* @@@@ Test LJM */.
+ If your system requires the PASV FTP code instead of the standard PORT FTP
+ code (e.g., to deal with a firewall) then set the FTP_PASSIVE option in
+ lynx.cfg
Step 3a.
Lynx uses the VMS port of gzip for uncompressing streams which have
@@ -585,13 +700,15 @@ Step 3b. (optional compilation method)
IV. Compile instructions -- Win32 (Windows95/98/NT)
+Borland C:
+
The original Win32 port was built with Borland C++ 4.52, but later
versions reportedly can be used. Before compiling the Lynx sources, you
need a curses library, and it is recommended that you have the zlib
library. Get pdcurses2.3 from "http://www.lightlink.com/hessling/". I
have modified it so that mouse support is no longer broken for Lynx (see
"http://www.fdisk.com/doslynx/"). You will want to get zlib from
- "http://www.cdrom.com/pub/infozip/zlib/". Compile these libraries, and
+ "http://www.gzip.org/zlib/ ". Compile these libraries, and
put them in a convenient place (pdcurses inside the Lynx directory).
Unpack the latest Lynx source distribution, and make an obj directory
@@ -599,11 +716,11 @@ IV. Compile instructions -- Win32 (Windows95/98/NT)
IDE file. A sample IDE file and helper libraries are available at
"http://www.fdisk.com/doslynx/wlynx/source/".
- First build the .h files in src\chrtrans using "MAKEW32.BAT". Double
+ First build the .h files in src\chrtrans using "makew32.bat". Double
check for new .tbl files; hand edit in any new ones, and then do "makew32".
Jump into Borland C++, load the project (IDE file) and compile Lynx.
Alternately, after compiling the chartrans tables, you can come back to
- the top directory and compile manually, i.e., do "make -f makefile.w32".
+ the top directory and compile manually, i.e., do "make -f makefile.bcb".
I also have a binary available at "http://www.fdisk.com/doslynx/". This
binary was compiled with pdcurses 2.3, hacked so win32 mouse support works,
@@ -612,108 +729,110 @@ IV. Compile instructions -- Win32 (Windows95/98/NT)
-- 1997/10/12 - W. Buttles <lynx-port@fdisk.com>
- It is possible to compile under the cygwin32 system, which will allow you
- to use the configure script described above for Unix. Type, for example,
- "./configure --with-screen=slang --with-libz" in a Dos window running the
+Cygwin:
+ It is possible to compile under the cygwin system, which will allow you to
+ use the configure script described above for Unix. Type, for example,
+ "./configure --with-screen=ncurses --with-libz" in a Dos window running the
cygwin bash$ shell. You also have the choice of using either pdcurses or
- slang. See "http://www.flora.org/lynx-dev/html/month1097/msg00559.html"
- and "http://www.flora.org/lynx-dev/html/month1097/msg00186.html", and other
- messages along those threads. You will have to make a minor alteration to
- HTTCP.c (change delay to 30 seconds) and modify HTFILE.c (concerning
- getgroups). You will need a launch program to call helper applications.
+ slang. You will need a launch program such as sh.exe to call helper
+ applications. Paths may need to be in cygwin style, rather than Windows
+ style (e.g., TMPDIR=/cygdrive/d/cygwin/tmp, rather than
+ TMPDIR=d:\cygwin\tmp).
+
+Visual C++:
+ You must have compiled zlib and PDCurses with the -MT (threaded code)
+ option. This is not the default with zlib (see Makefile.msc).
+
+ Copy into lib the following
+ zconf.h
+ zlib.h
+ zlib.lib
+
+ from the zlib build-tree, and
+ curses.h
+ pdcurses.lib
+
+ from the PDCurses build-tree.
+ Then
+ make-msc
+
+ to build lynx.
V. Compile instructions -- 386 DOS
Compiling for DOS with DJGPP is a multistep procedure. First install
- the c compiler and its libraries. If using DJGPP 2.01, update the
- distribution with the patched lib.c, to take care of bug fixes. It is
- available at: "http://www.cartsys.com/eldredge/djgpp-patches.html".
- GCC 2.7.2.1, as distributed from the usual DJGPP archives, will not
- successfully compile lynx. You need to "stubedit" your "cc1.exe" file.
- The following parameters have worked successfully: minstack=800k,
- bufsize=64k. To accomplish this, move to the djgpp\bin directory
- and type the command:
- "stubedit cc1.exe bufsize=64k minstack=800k".
- Or do it interactively with the command: "stubedit cc1.exe". (see
- "http://www.flora.org/lynx-dev/html/month0897/msg00145.html").
-
- If using DJGPP 2.02 and GCC 2.8.1, you may not need to "stubedit"
- cc1.exe if you use -O2 optimization, since cc1.exe comes with
- a 1536K stack. To compile with -O3 optimization, the stub
- needs to be edited to give a larger stack. To do this go into
- djgpp\lib\gcc-lib\djgpp\2.81 and either type the command:
+ the C compiler and its libraries (see readme.1st from DJGPP distribution).
+
+ Originally, lynx makefiles come with the initial -O2 optimization level.
+ If you experience compilation process too slow due to paging to the disk
+ (DPMI server provide virtual memory, when in lack of RAM), you may change
+ optimization to -O1 or turn the optimization off entirely.
+
+ Alternatively, to get the last bit of run-time performance you may try
+ -O2 or -O3, in this case you may need to "stubedit" your "cc1.exe" file
+ to enlarge compiler stack size. If using DJGPP 2.02 and GCC 2.8.1,
+ to compile with -O3 optimization, the stub needs to be edited to give
+ a larger stack. To do this go into djgpp\lib\gcc-lib\djgpp\2.81
+ and either type the command:
"stubedit cc1.exe bufsize=63k minstack=2M",
or edit interactively with: "stubedit cc1.exe".
+ The requirements for compiling with optimization using DJGPP 2.03
+ and GCC 2.95.2 have not yet been fully investigated. The above
+ should serve as a guide.
Unpack the source code using a DOS program like UNZIP386. If you are
using PKUNZIP to unpack the .zip archive, you must use the -d command
line switch to restore the directory structure contained in the archive,
i.e., do "pkunzip -d lynx-cur.zip". No switch is required if you use
unzip386 or unzip. If you are trying to compile the 386DOS port under a
- Win95/NT DOS shell, be sure to unpack the source with a DOS program so
+ WinNT DOS shell, be sure to unpack the source with a DOS program so
that all directories will be adjusted to the DOS 8.3 file format necessary
for compiling with DJGPP. Do NOT use Winzip, because that will create
long filenames that will not be recognized by DJGPP tools.
If you wish to compile with "USE_ZLIB" (recommended), you must have the
- zlib library. Get the source from "http://www.cdrom.com/pub/infozip/zlib/"
+ zlib library. Get the source from
+ http://www.gzip.org/zlib/
and compile it. Put libz.a in the lib subdirectory of DJGPP, and put
zlib.h and zconf.h in the include subdirectory.
- In addition to the files in the Lynx distribution, you will need a
- curses package and a TCP package. You can use PDCurses (available at
- "http://www.lightlink.com/hessling/") and the DJGPP port of WATTCP
- (available in two different versions at "ftp://neonatal.sm.med.ic.ac.uk/"
- and in "http://www.fdisk.com/doslynx/wlynx/source/djgpp.zip").
- A patched copy of the version from the neonatal site is also
- available from "http://www.rahul.net/dkaufman/tcplibdj.zip" or
- "ftp://ftp.rahul.net/pub/dkaufman/tcplibdj.zip". You can also use slang
- ("ftp://space.mit.edu/pub/davis/slang") as your curses library. You need
- to compile these before you go any further. If you wish to use PDCurses
- 2.3, you need to first apply the following patch:
-
-*** curses.h Thu Jul 9 19:38:28 1998
---- curses.h.new Sat Aug 15 11:02:08 1998
-***************
-*** 1802,1807 ****
---- 1802,1808 ----
- #define getbegx(w) (w)->_begx
- #define getbegy(w) (w)->_begy
- #define getbegyx(w,y,x) ( y = (w)->_begy, x = (w)->_begx )
-+ #define getbkgd(w) ((w)->_bkgd)
- #define getch() wgetch(stdscr)
- #define getmaxx(w) (w)->_maxx
- #define getmaxy(w) (w)->_maxy
-*** dos/pdckbd.c Sat Jul 12 17:10:12 1997
---- dos/pdckbd.c.new Thu Apr 15 20:52:16 1999
-***************
-*** 443,449 ****
- _watch_breaks();
- #else
- # ifdef GO32
-! (void*)signal(SIGINT,(setting ? SIG_DFL : SIG_IGN));
- /* __djgpp_set_ctrl_c(setting);*/
- setcbrk(setting);
- # else
---- 443,449 ----
- _watch_breaks();
- #else
- # ifdef GO32
-! /* (void*)signal(SIGINT,(setting ? SIG_DFL : SIG_IGN)); */
- /* __djgpp_set_ctrl_c(setting);*/
- setcbrk(setting);
- # else
+ In addition to the files in the Lynx distribution, you will need a curses
+ package and a TCP package. You can use PDCurses (available at
+ "http://www.lightlink.com/hessling/") and the DJGPP port of WATTCP. The
+ updated version of WATTCP is known as WATT-32, and is available at
+ "http://www.bgnett.no/~giva/". You can also use slang (available at
+ "ftp://space.mit.edu/pub/davis/slang") as your screen library. You must
+ compile these before you go any further. If you wish to use PDCurses 2.4,
+ you need to first apply the following patch:
+
+ --- dos/pdckbd.c.ori Sun Dec 26 23:15:04 1999
+ +++ dos/pdckbd.c Fri Mar 3 00:20:14 2000
+ @@ -336,7 +336,7 @@
+ || (scan == 0x4e && ascii == 0x2b) /* Plus */
+ || (scan == 0xe0 && ascii == 0x2f)) /* Slash */
+ return ((int) ((ascii & 0x0f) | 0xf0) << 8);
+ - if (ascii == 0x00 || ascii == 0xe0)
+ + if (ascii == 0x00 || (ascii == 0xe0 && scan != 0x00))
+ return ((int) (scan << 8));
+ return ((int) (ascii));
+ }
+ @@ -496,7 +496,7 @@
+ _watch_breaks();
+ #else
+ # ifdef GO32
+ - (void*)signal(SIGINT,(setting ? SIG_DFL : SIG_IGN));
+ +/* (void*)signal(SIGINT,(setting ? SIG_DFL : SIG_IGN)); */
+ /* __djgpp_set_ctrl_c(setting);*/
+ setcbrk(setting);
+ # else
If you have trouble applying the patch, try using the "patch" program,
- ("http://www.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/pat25b.zip"). The
- WATTCP TCPLIB sources must also be patched prior to compilation. See
- "http://www.flora.org/lynx-dev/html/month1197/msg00403.html".
-
+ ("ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/pat253b.zip").
To read the Unix man style documentation, use, for example, "less"
- ("http://www.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/lss332b.zip").
+ ("ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/lss358b.zip").
Compile or place your compiled PDCurses library in lynx2-*/curses, and
- compile or place your compiled WATTCP library in lynx2-*/djgpp/tcplib. If
+ compile or place your compiled WATT-32 library in lynx2-*/djgpp/watt32. If
using the SLANG library, put libslang.a in your DJGPP/lib directory and put
slang.h and slcurses.h in your DJGPP/include directory, or in the
appropriate directories specified by LIBRARY_PATH and INCLUDE_PATH in your
@@ -735,27 +854,25 @@ V. Compile instructions -- 386 DOS
incompatibilities from mixing different programs.
If you wish to compile with support for internationalization of messages,
- you first need to install the DOS port of the GNU gettext package,
- available from any DJGPP mirror site. You may wish to recompile with DJGPP
- 2.02. Then uncomment the lines for INTLFLAGS in src/makefile.dsl and in
- WWW/Library/djgpp/makefile.sla, and remove the "#" from the LIBS line in
- src/makefile.dsl. Make similar changes if using one of the other DOS
- makefiles. See the gettext documentation for information on creating and
- using message files for different languages.
+ you first need to install the DOS ports of the GNU gettext and libiconv
+ packages, available from any DJGPP mirror site. Then uncomment the lines
+ for INTLFLAGS in src/makefile.dsl and in WWW/Library/djgpp/makefile.sla,
+ and remove the "#" from the LIBS line in src/makefile.dsl. Make similar
+ changes if using one of the other DOS makefiles. See the gettext
+ documentation for information on creating and using message files for
+ different languages.
If all goes well, you will have a lynx.exe file. If you have trouble,
check to be sure djgpp.env is the way it came in the original package.
- To compile lynx with DJGPP you may need about 20Mb of free disk space
- for virtual memory.
To test Lynx_386 you must have a packet driver installed. The simplest
method is to use a null packet driver that just allows Lynx to start up,
but doesn't do anything else. One such executable driver has been posted,
uuencoded, to the lynx-dev mailing list:
- "http://www.flora.org/lynx-dev/html/month0198/msg00057.html".
+ "http://www.flora.org/lynx-dev/html/month011998/msg00057.html".
Start the dummy packet driver with "nullpkt 0x60", and take it out of
memory with "nullpkt -u". You can also use slip8250.com. See the CRYNWR
- package "http://www.simtel.net/pub/simtelnet/msdos/pktdrvr/pktd11.zip".
+ package "ftp://ftp.simtel.net/pub/simtelnet/msdos/pktdrvr/pktd11.zip".
Usage is "slip8250 0x60", but you may have to invoke it as, for example,
"slip8250 0x60 6 3 0x2F8" so that it uses COM2 and IRQ 3, in order to
avoid an IRQ conflict with a mouse or some other device. Another packet
@@ -766,8 +883,8 @@ V. Compile instructions -- 386 DOS
(Find at:
"http://mvmpc9.ciw.uni-karlsruhe.de/c:/user/toni/dosppp/dosppp06.zip",
"http://personal.redestb.es/tonilop/dosppp/dosppp06.zip", or
- "ftp://ftp.agate.net/users/01935/internet/dosppp06.zip";
- "ftp://ftp.klos.com/demo/pppshare.exe".)
+ "ftp://ftp.oldskool.org/pub/tvdog/internet/dosppp06.zip";
+ "http://www.klos.com/get.pppshare.html")
File access looks like this:
@@ -777,18 +894,21 @@ V. Compile instructions -- 386 DOS
file://localhost/c:/
file://localhost/c:/dos
file://localhost/c:/dos/command.com
-
- See "http://www.fdisk.com/doslynx/lynxport.htm" for more hints and some
- precompiled libraries. One problem you can run into is when editing
- userdefs.h and lynx.cfg, which have unix-style end of lines. You would be
- well advised to use an editor that can handle end of lines terminated with
- a single LF character. You can also unpack the source code using unzip386
- or unzip with the -a switch to convert unix LF to dos CRLF. That will make
- texts more readable under DOS. If you compile lynx regularly, you may
- automate the procedure by creating a batch file such as the following.
-
- cd djgpp\tcplib\obj
- make
+ file://localhost/dev/c/dos/command.com
+
+ See "http://www.fdisk.com/doslynx/lynxport.htm" for more hints and
+ some precompiled libraries. One problem you can encounter is editing
+ userdefs.h and lynx.cfg, which have unix-style end of lines. You would
+ be well advised to use an editor that can handle end of lines terminated
+ with a single LF character. You can also unpack the source code using
+ unzip386 or unzip with the -a or -aa switch to convert unix LF to dos CRLF.
+ That will make texts more readable under DOS. If you compile lynx
+ regularly, you may automate the procedure by creating a batch file such
+ as the following.
+
+ cd djgpp\watt32\src
+ configur djgpp
+ make -f djgpp.mak
cd ..\..\..\www\library\djgpp
make
cd ..\..\..\src\chrtrans
@@ -798,21 +918,22 @@ V. Compile instructions -- 386 DOS
strip lynx.exe
cd ..
- This batch file expects the DJGPP port of WATTCP to be installed in the
+ This batch file expects the DJGPP port of WATT-32 to be installed in the
lynx2-* directory. Place a copy of this batch file, named "djgpp.bat",
in the lynx2-* directory, move to that directory and type "djgpp". A more
complete batch file with error checking and annotation can be found at:
- "http://www.flora.org/lynx-dev/html/month1197/msg00250.html".
+ "http://www.flora.org/lynx-dev/html/month111997/msg00250.html".
-- 1997/9/29 - D. Kaufman <dkaufman@rahul.net>
-- 1997/10/3 - B. Schiavo <Wschiavo@concentric.net>
+-- Last update - 2001/07/12
VI. General installation instructions
Once you have compiled Lynx, test it out first on a local file. Be sure
Lynx can find lynx.cfg. A _sample_ test command line would be:
- `lynx -cfg=/usr/local/lib/lynx.cfg .`. Once you are satisfied that
+ 'lynx -cfg=/usr/local/lib/lynx.cfg .'. Once you are satisfied that
Lynx works, go ahead and install it. For Unix, type "make install".
For VMS, you need to have the executable in a public place, make it
@@ -859,7 +980,7 @@ VII. Setting environment variables before running Lynx (optional)
setting in config.sys. In addition, lynx looks for a "SHELL" environment
variable when shelling to DOS. If you wish to preserve the environment
space when shelling, put a line like this in your AUTOEXEC.BAT file also
- "SET SHELL=C:\COMMAND.COM /E:2048". It should match CONFIG.SYS.
+ "SET SHELL=C:\COMMAND.COM /E:4096". It should match CONFIG.SYS.
HOME Where to keep the bookmark file and personal config files.
TEMP or TMP Bookmarks are kept here with no HOME. Temp files here.
@@ -869,7 +990,6 @@ VII. Setting environment variables before running Lynx (optional)
386 version only:
WATTCP.CFG Set to the full path for the WATTCP.CFG directory
- (Depending on how you compiled libtcp.a, you may have to use WATCONF.)
Define these in your batch file for running Lynx. For example, if your
application line is "D:\win32\lynx.bat", lynx.bat for Win32 may look like:
diff --git a/gnu/usr.bin/lynx/LYHelp.hin b/gnu/usr.bin/lynx/LYHelp.hin
index fabab118302..4c583014ef1 100644
--- a/gnu/usr.bin/lynx/LYHelp.hin
+++ b/gnu/usr.bin/lynx/LYHelp.hin
@@ -3,9 +3,12 @@
#ifndef LYHELP_H
#define LYHELP_H
+#define ALT_EDIT_HELP "keystrokes/@ALT_EDIT_HELP@"
+#define BASHLIKE_EDIT_HELP "keystrokes/@BASHLIKE_EDIT_HELP@"
#define COOKIE_JAR_HELP "@LYNX_USERS_GUIDE@#Cookies"
#define CURRENT_KEYMAP_HELP "keystrokes/@KEYSTROKE_HELP@"
#define DIRED_MENU_HELP "keystrokes/@DIRED_HELP@"
+#define EDIT_HELP "keystrokes/@EDIT_HELP@"
#define DOWNLOAD_OPTIONS_HELP "@LYNX_USERS_GUIDE@#RemoteSource"
#define HISTORY_PAGE_HELP "keystrokes/@HISTORY_HELP@"
#define LIST_PAGE_HELP "keystrokes/@FOLLOW_HELP@"
diff --git a/gnu/usr.bin/lynx/LYMessages_en.h b/gnu/usr.bin/lynx/LYMessages_en.h
index b2910b247ae..2f118832e18 100644
--- a/gnu/usr.bin/lynx/LYMessages_en.h
+++ b/gnu/usr.bin/lynx/LYMessages_en.h
@@ -2,7 +2,7 @@
* Lynx - Hypertext navigation system
*
* (c) Copyright 1992, 1993, 1994 University of Kansas
- * 1995, 1996: GNU General Public License
+ * 1995-1999: GNU General Public License
*/
#ifndef LYMESSAGES_EN_H
#define LYMESSAGES_EN_H
@@ -20,12 +20,11 @@
* Links to collections of alternate definitions, developed by the Lynx
* User Community, are maintained in Lynx links:
*
- * http://www.crl.com/~subir/lynx.html
+ * http://www.trill-home.com/lynx.html
*
- * Because the gettext facility is only recently (with release 2.8.2)
- * introduced, these alternate definitions are given as variants on this
- * file. Use them as a starting point to construct a new message
- * library as needed. (see po/readme).
+ * See ABOUT-NLS and po/readme for details and location of contributed
+ * translations. When no translation is available, the English default is
+ * used.
*/
#define ALERT_FORMAT gettext("Alert!: %s")
#define WELCOME_MSG gettext("Welcome")
@@ -40,6 +39,7 @@
#define CANCELLED gettext("Cancelled!!!")
#define CANCELLING gettext("Cancelling!")
#define NO_CANCEL gettext("Excellent!!!")
+#define OPERATION_OK gettext("OK")
#define OPERATION_DONE gettext("Done!")
#define BAD_REQUEST gettext("Bad request!")
#define PREVIOUS gettext("previous")
@@ -51,16 +51,44 @@
#define MOREHELP \
gettext("-- press space for more, use arrow keys to move, '?' for help, 'q' to quit.")
#define MORE gettext("-- press space for next page --")
+#define URL_TOO_LONG gettext("URL too long")
/* Forms messages */
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+/* Inactive input fields, messages used with -tna option - kw */
+#define FORM_LINK_TEXT_MESSAGE_INA \
+ gettext("(Text entry field) Inactive. Press <return> to activate.")
+#define FORM_LINK_TEXTAREA_MESSAGE_INA \
+ gettext("(Textarea) Inactive. Press <return> to activate.")
+#define FORM_LINK_TEXTAREA_MESSAGE_INA_E \
+ gettext("(Textarea) Inactive. Press <return> to activate (%s for editor).")
+#define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA \
+ gettext("(Form field) Inactive. Use <return> to edit.")
+#define FORM_TEXT_SUBMIT_MESSAGE_INA_X \
+ gettext("(Form field) Inactive. Use <return> to edit (%s to submit with no cache).")
+#define FORM_TEXT_RESUBMIT_MESSAGE_INA \
+ gettext("(Form field) Inactive. Press <return> to edit, press <return> twice to submit.")
+#define FORM_TEXT_SUBMIT_MAILTO_MSG_INA \
+ gettext("(mailto form field) Inactive. Press <return> to change.")
+#define FORM_LINK_PASSWORD_MESSAGE_INA \
+ gettext("(Password entry field) Inactive. Press <return> to activate.")
+#endif
+#define FORM_LINK_FILE_UNM_MSG \
+ gettext("UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off.")
+#define FORM_LINK_FILE_MESSAGE \
+ gettext("(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off.")
#define FORM_LINK_TEXT_MESSAGE \
gettext("(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off.")
#define FORM_LINK_TEXTAREA_MESSAGE \
- gettext("(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (^Ve for editor).")
+ gettext("(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off.")
+#define FORM_LINK_TEXTAREA_MESSAGE_E \
+ gettext("(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor).")
#define FORM_LINK_TEXT_UNM_MSG \
gettext("UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off.")
#define FORM_LINK_TEXT_SUBMIT_MESSAGE \
- gettext("(Form field) Enter text. Use <return> to submit ('x' for no cache).")
+ gettext("(Form field) Enter text. Use <return> to submit.")
+#define FORM_LINK_TEXT_SUBMIT_MESSAGE_X \
+ gettext("(Form field) Enter text. Use <return> to submit (%s for no cache).")
#define FORM_LINK_TEXT_RESUBMIT_MESSAGE \
gettext("(Form field) Enter text. Use <return> to submit, arrows or tab to move off.")
#define FORM_LINK_TEXT_SUBMIT_UNM_MSG \
@@ -142,11 +170,17 @@
#define NOVICE_LINE_TWO_B \
gettext(" O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n")
#define NOVICE_LINE_TWO_C \
- gettext(" O)ther cmds C)omment History: <delete> Bookmarks: V)iew, A)dd, R)emove \n")
+ gettext("O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)emove \n")
#define FORM_NOVICELINE_ONE \
gettext(" Enter text into the field by typing on the keyboard ")
#define FORM_NOVICELINE_TWO \
gettext(" Ctrl-U to delete all text in field, [Backspace] to delete a character ")
+#define FORM_NOVICELINE_TWO_DELBL \
+ gettext(" Ctrl-U to delete text in field, [Backspace] to delete a character ")
+#define FORM_NOVICELINE_TWO_VAR \
+ gettext(" %s to delete all text in field, [Backspace] to delete a character ")
+#define FORM_NOVICELINE_TWO_DELBL_VAR \
+ gettext(" %s to delete text in field, [Backspace] to delete a character ")
/* mailto */
#define BAD_FORM_MAILTO gettext("Malformed mailto form submission! Cancelled!")
@@ -158,7 +192,6 @@
#define NO_ADDRESS_IN_MAILTO_URL gettext("No email address is present in mailto URL!")
#define MAILTO_URL_TEMPOPEN_FAILED \
gettext("Unable to open temporary file for mailto URL!")
-#define COMMENT_REQUEST_CANCELLED gettext("Comment request cancelled!!!")
#define INC_ORIG_MSG_PROMPT \
gettext("Do you wish to include the original message?")
#define INC_PREPARSED_MSG_PROMPT \
@@ -173,12 +206,14 @@
#define SENDING_COMMENT gettext("Sending your comment:")
/* textarea */
-#define NOT_IN_TEXTAREA gettext("Not in a TEXTAREA; cannot use external editor.")
+#define NOT_IN_TEXTAREA_NOEDIT gettext("Not in a TEXTAREA; cannot use external editor.")
+#define NOT_IN_TEXTAREA gettext("Not in a TEXTAREA; cannot use command.")
#define FILE_ACTIONS_DISALLOWED gettext("file: ACTIONs are disallowed!")
#define FILE_SERVED_LINKS_DISALLOWED \
gettext("file: URLs via served links are disallowed!")
+#define NOAUTH_TO_ACCESS_FILES gettext("Access to local files denied.")
#define FILE_BOOKMARKS_DISALLOWED gettext("file: URLs via bookmarks are disallowed!")
#define SPECIAL_VIA_EXTERNAL_DISALLOWED \
gettext("This special URL is not allowed in external documents!")
@@ -310,6 +345,7 @@
gettext("You are not on a form submission button or normal link.")
#define NEED_CHECKED_RADIO_BUTTON \
gettext("One radio button must be checked at all times!")
+#define NO_SUBMIT_BUTTON_QUERY gettext("No submit button for this form, submit single text field?")
#define PREV_DOC_QUERY gettext("Do you want to go back to the previous document?")
#define ARROWS_OR_TAB_TO_MOVE gettext("Use arrows or tab to move off of field.")
#define ENTER_TEXT_ARROWS_OR_TAB \
@@ -319,25 +355,7 @@
#define POPUP_FAILED gettext("Unable to create popup window!")
#define GOTO_DISALLOWED gettext("Goto a random URL is disallowed!")
#define GOTO_NON_HTTP_DISALLOWED gettext("Goto a non-http URL is disallowed!")
-#define GOTO_CSO_DISALLOWED gettext("You are not allowed to goto \"cso:\" URLs")
-#define GOTO_FILE_DISALLOWED gettext("You are not allowed to goto \"file:\" URLs")
-#define GOTO_FINGER_DISALLOWED gettext("You are not allowed to goto \"finger:\" URLs")
-#define GOTO_FTP_DISALLOWED gettext("You are not allowed to goto \"ftp:\" URLs")
-#define GOTO_GOPHER_DISALLOWED gettext("You are not allowed to goto \"gopher:\" URLs")
-#define GOTO_HTTP_DISALLOWED gettext("You are not allowed to goto \"http:\" URLs")
-#define GOTO_HTTPS_DISALLOWED gettext("You are not allowed to goto \"https:\" URLs")
-#define GOTO_CGI_DISALLOWED gettext("You are not allowed to goto \"lynxcgi:\" URLs")
-#define GOTO_EXEC_DISALLOWED gettext("You are not allowed to goto \"lynxexec:\" URLs")
-#define GOTO_PROG_DISALLOWED gettext("You are not allowed to goto \"lynxprog:\" URLs")
-#define GOTO_MAILTO_DISALLOWED gettext("You are not allowed to goto \"mailto:\" URLs")
-#define GOTO_NEWS_DISALLOWED gettext("You are not allowed to goto \"news:\" URLs")
-#define GOTO_NNTP_DISALLOWED gettext("You are not allowed to goto \"nntp:\" URLs")
-#define GOTO_RLOGIN_DISALLOWED gettext("You are not allowed to goto \"rlogin:\" URLs")
-#define GOTO_SNEWS_DISALLOWED gettext("You are not allowed to goto \"snews:\" URLs")
-#define GOTO_TELNET_DISALLOWED gettext("You are not allowed to goto \"telnet:\" URLs")
-#define GOTO_TN3270_DISALLOWED gettext("You are not allowed to goto \"tn3270:\" URLs")
-#define GOTO_WAIS_DISALLOWED gettext("You are not allowed to goto \"wais:\" URLs")
-#define GOTO_SPECIAL_DISALLOWED gettext("This special URL is not allowed as a goto!")
+#define GOTO_XXXX_DISALLOWED gettext("You are not allowed to goto \"%s\" URLs")
#define URL_TO_OPEN gettext("URL to open: ")
#define EDIT_CURRENT_GOTO gettext("Edit the current Goto URL: ")
#define EDIT_THE_PREV_GOTO gettext("Edit the previous Goto URL: ")
@@ -374,6 +392,7 @@
#define CONFIRM_COMMENT gettext("Do you wish to send a comment?")
#define MAIL_DISALLOWED gettext("Mail is disallowed so you cannot send a comment")
#define EDIT_DISABLED gettext("The 'e'dit command is currently disabled.")
+#define ANYEDIT_DISABLED gettext("External editing is currently disabled.")
#define NO_STATUS gettext("System error - failure to get status.")
#define NO_EDITOR gettext("No editor is defined!")
#define PRINT_DISABLED gettext("The 'p'rint command is currently disabled.")
@@ -385,23 +404,14 @@
#define TRAV_WAS_INTERRUPTED gettext("TRAVERSAL WAS INTERRUPTED")
#define FOLLOW_LINK_NUMBER gettext("Follow link (or goto link or page) number: ")
#define SELECT_OPTION_NUMBER gettext("Select option (or page) number: ")
-#define OPTION_CHOICE_NUMBER gettext("Option choice (or page) number: ")
#define OPTION_ALREADY_CURRENT gettext("Option number %d already is current.")
-#define CHOICE_ALREADY_CURRENT gettext("Choice number %d already is current.")
#define ALREADY_AT_OPTION_END \
gettext("You are already at the end of this option list.")
-#define ALREADY_AT_CHOICE_END \
- gettext("You are already at the end of this choice list.")
#define ALREADY_AT_OPTION_BEGIN \
gettext("You are already at the beginning of this option list.")
-#define ALREADY_AT_CHOICE_BEGIN \
- gettext("You are already at the beginning of this choice list.")
#define ALREADY_AT_OPTION_PAGE \
gettext("You are already at page %d of this option list.")
-#define ALREADY_AT_CHOICE_PAGE \
- gettext("You are already at page %d of this choice list.")
#define BAD_OPTION_NUM_ENTERED gettext("You have entered an invalid option number.")
-#define BAD_CHOICE_NUM_ENTERED gettext("You have entered an invalid choice number.")
#define BAD_HTML_USE_TRACE gettext("** Bad HTML!! Use -trace to diagnose. **")
#define GIVE_FILENAME gettext("Give name of file to save in")
#define CANNOT_SAVE_REMOTE gettext("Can't save data to file -- please run WWW locally")
@@ -431,9 +441,11 @@
#define CANNOT_WRITE_TO_FILE gettext("Cannot write to file.")
#define MISCONF_DOWNLOAD_COMMAND gettext("ERROR! - download command is misconfigured.")
#define CANNOT_DOWNLOAD_FILE gettext("Unable to download file.")
+#define READING_DIRECTORY gettext("Reading directory...")
#define BUILDING_DIR_LIST gettext("Building directory listing...")
#define SAVING gettext("Saving...")
#define COULD_NOT_EDIT_FILE gettext("Could not edit file '%s'.")
+#define COULD_NOT_ACCESS_DOCUMENT gettext("Unable to access document!")
#define COULD_NOT_ACCESS_FILE gettext("Could not access file.")
#define COULD_NOT_ACCESS_DIR gettext("Could not access directory.")
#define COULD_NOT_LOAD_DATA gettext("Could not load data.")
@@ -453,7 +465,7 @@
#define CLEAR_ALL_AUTH_INFO gettext("Clear all authorization info for this session?")
#define AUTH_INFO_CLEARED gettext("Authorization info cleared.")
#define AUTH_FAILED_PROMPT gettext("Authorization failed. Retry?")
-#define CGI_DISABLED gettext("cgi support has been disabled by system administrator.")
+#define CGI_DISABLED gettext("cgi support has been disabled.")
#define CGI_NOT_COMPILED \
gettext("Lynxcgi capabilities are not compiled into this version.")
#define CANNOT_CONVERT_I_TO_O gettext("Sorry, no known way of converting %s to %s.")
@@ -494,6 +506,8 @@
#endif /* VMS */
#define HAVE_NEW_MAIL_MSG gettext("*** You have new mail. ***")
#define FILE_INSERT_CANCELLED gettext("File insert cancelled!!!")
+#define MEMORY_EXHAUSTED_FILE gettext("Not enough memory for file!")
+#define FILE_CANNOT_OPEN_R gettext("Can't open file for reading.")
#define FILE_DOES_NOT_EXIST gettext("File does not exist.")
#define FILE_DOES_NOT_EXIST_RE gettext("File does not exist - reenter or cancel:")
#define FILE_NOT_READABLE gettext("File is not readable.")
@@ -537,8 +551,9 @@
#define NEED_ADVANCED_USER_MODE gettext("That key requires Advanced User mode.")
#define CONTENT_TYPE_MSG gettext("Content-type: %s")
#define COMMAND_PROMPT gettext("Command: ")
+#define COMMAND_UNKNOWN gettext("Unknown or ambiguous command")
#define VERSION_SEGMENT gettext(" Version ")
-#define FIRST_SEGMENT gettext(" first.")
+#define FIRST_SEGMENT gettext(" first")
#define GUESSING_SEGMENT gettext(", guessing...")
#define PERMISSIONS_SEGMENT gettext("Permissions for ")
#define SELECT_SEGMENT gettext("Select ")
@@ -569,8 +584,12 @@
#define COLOR_TOGGLE_DISABLED gettext("Terminal does not support color")
#define COLOR_TOGGLE_DISABLED_FOR_TERM gettext("Your '%s' terminal does not support color.")
#define DOTFILE_ACCESS_DISABLED gettext("Access to dot files is disabled!")
-#define UA_COPYRIGHT_WARNING \
- gettext("WARNING: Misrepresentation of the User-Agent may be a copyright violation!")
+#define UA_NO_LYNX_WARNING \
+ gettext("User-Agent string does not contain \"Lynx\" or \"L_y_n_x\"")
+#define UA_PLEASE_USE_LYNX \
+ gettext("Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional deception!")
+#define UA_CHANGE_DISABLED \
+ gettext("Changing of the User-Agent string is disabled!")
#define CHANGE_OF_SETTING_DISALLOWED \
gettext("You are not allowed to change this setting.")
#define SAVING_OPTIONS gettext("Saving Options...")
@@ -587,6 +606,8 @@
#define ILLEGAL_REDIRECTION_URL gettext("Illegal redirection URL received from server!")
#define SERVER_ASKED_FOR_REDIRECTION \
gettext("Server asked for %d redirection of POST content to")
+#define REDIRECTION_WITH_BAD_LOCATION "Got redirection with a bad Location header."
+#define REDIRECTION_WITH_NO_LOCATION "Got redirection with no Location header."
#define PROCEED_GET_CANCEL gettext("P)roceed, use G)ET or C)ancel ")
#define PROCEED_OR_CANCEL gettext("P)roceed, or C)ancel ")
#define ADVANCED_POST_GET_REDIRECT \
@@ -639,6 +660,7 @@
#define VISITED_LINKS_EMPTY gettext("No previously visited links available!")
#define MEMORY_EXHAUSTED_ABORT gettext("Memory exhausted! Program aborted!")
#define MEMORY_EXHAUSTED_ABORTING gettext("Memory exhausted! Aborting...")
+#define NOT_ENOUGH_MEMORY gettext("Not enough memory!")
#define DFM_NOT_AVAILABLE gettext("Directory/File Manager not available")
#define BASE_NOT_ABSOLUTE gettext("HREF in BASE tag is not an absolute URL.")
#define LOCATION_NOT_ABSOLUTE gettext("Location URL is not absolute.")
@@ -713,7 +735,7 @@
#define URL_PORT_BAD gettext("URL has a bad port field.")
#define HTML_STACK_OVERRUN gettext("Maximum nesting of HTML elements exceeded.")
#define BAD_PARTIAL_REFERENCE gettext("Bad partial reference! Stripping lead dots.")
-#define TRACELOG_OPEN_FAILED gettext("Trace Log open failed. Trace off!.")
+#define TRACELOG_OPEN_FAILED gettext("Trace Log open failed. Trace off!")
#define LYNX_TRACELOG_TITLE gettext("Lynx Trace Log")
#define NO_TRACELOG_STARTED gettext("No trace log has been started for this session.")
#define MAX_TEMPCOUNT_REACHED \
@@ -810,6 +832,7 @@
#define RUNTIME_OPT_SEGMENT gettext("for runtime options")
#define COMPILE_OPT_SEGMENT gettext("compile time options")
#define REL_VERSION gettext("latest release")
+#define PRE_VERSION gettext("pre-release version")
#define DEV_VERSION gettext("development version")
#define AUTOCONF_CONFIG_CACHE \
gettext("The following data were derived during the automatic configuration/build\n\
@@ -832,4 +855,13 @@ definitions when this copy of Lynx was built.")
#define EXTERNALS_DISABLED gettext("External support is currently disabled.")
#endif /* USE_EXTERNALS */
+/* new with 2.8.4dev.21 */
+#define CHDIR_DISABLED gettext("Changing working-directory is currently disabled.")
+#define LINEWRAP_OFF gettext("Linewrap OFF!")
+#define LINEWRAP_ON gettext("Linewrap ON!")
+#define NESTED_TABLES_OFF gettext("Parsing nested-tables toggled OFF! Reloading...")
+#define NESTED_TABLES_ON gettext("Parsing nested-tables toggled ON! Reloading...")
+#define SHIFT_VS_LINEWRAP gettext("Shifting is disabled while line-wrap is in effect")
+#define TRACE_DISABLED gettext("Trace not supported")
+
#endif /* LYMESSAGES_EN_H */
diff --git a/gnu/usr.bin/lynx/MAKEFILE.W32 b/gnu/usr.bin/lynx/MAKEFILE.W32
deleted file mode 100644
index a0960a0b62c..00000000000
--- a/gnu/usr.bin/lynx/MAKEFILE.W32
+++ /dev/null
@@ -1,744 +0,0 @@
-#
-# 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 -wdpl -wdup -Tpe -ap -c
-RLATC32_lynxdexe = -k -w32
-BLATC32_lynxdexe =
-CNIEAT_lynxdexe = -I.\;CURSES;SRC;WWW\LIBRARY\IMPLEMENTATION;D:\BC45\INCLUDE;SRC\CHRTRANS -DNO_UNISTD_H;_WINDOWS;XMOSAIC_HACK;ACCESS_AUTH;NO_UTMP;NO_CUSERID;NO_TTYTYPE;NOSIGHUP;DOSPATH;NOUSERS;NCURSES;FANCY_CURSES;COLOR_CURSES;HAVE_KEYPAD;VC="2.14FM";NCURSES_VERSION;DISP_PARTIAL;SOURCE_CACHE;USE_PSRC
-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;XMOSAIC_HACK;ACCESS_AUTH;NO_UTMP;NO_CUSERID;NO_TTYTYPE;NOSIGHUP;DOSPATH;NOUSERS;NCURSES;FANCY_CURSES;COLOR_CURSES;HAVE_KEYPAD;VC="2.14FM";NCURSES_VERSION
-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\htdos.obj\
- curses\pdcurses.lib\
- 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\lypretty.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
-
-lynx.exe : $(Dep_lynxdexe)
- $(TLINK32) @&&|
- /v $(IDE_LFLAGS32) $(LEAT_lynxdexe) $(LNIEAT_lynxdexe) +
-D:\BC45\LIB\c0x32.obj+
-OBJ\htdos.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\lypretty.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\htdos.obj : www\library\implemen\htdos.c
- $(BCC32) -P- -c @&&|
- $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htdos.c
-|
-
-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\lypretty.obj : src\lypretty.c
- $(BCC32) -P- -c @&&|
- $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lypretty.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
--wpia
--w-def
--w-nod
--w-pro
--w-rvl
--wccc
--w-aus
--w-par
--w-rch
--w-eff
--w-ill
--w-ias
--w-msg
--Ot
--d-
--K
--a-
--w-stu
--wbbf
--w-dpu
--wcln
--wsig
--wucp
--g255
--H-
--v-
--WC
--wamb
-| $@
-
-
diff --git a/gnu/usr.bin/lynx/Makefile.bsd-wrapper b/gnu/usr.bin/lynx/Makefile.bsd-wrapper
index 8e7d7a35bf6..193c2c5a7af 100644
--- a/gnu/usr.bin/lynx/Makefile.bsd-wrapper
+++ b/gnu/usr.bin/lynx/Makefile.bsd-wrapper
@@ -1,10 +1,10 @@
-# $OpenBSD: Makefile.bsd-wrapper,v 1.11 2000/07/31 20:54:57 espie Exp $
+# $OpenBSD: Makefile.bsd-wrapper,v 1.12 2003/05/01 18:59:36 avsm Exp $
MAN= lynx.1
-CLEANFILES= lynx.1
+CLEANFILES= lynx.cat1 lynx.1
DPADD= ${LIBSSL} ${LIBCRYPTO}
-LDADD= -lssl -lcrypto
-GNUCFLAGS= CC="${CC}" CFLAGS="${CFLAGS} -DUSE_SSL ${COPTS}"
+GNUCFLAGS= CC="${CC}" CFLAGS="${CFLAGS} ${COPTS}"
+CONFIGURE_ARGS= --with-ssl=/usr --enable-ipv6
HTMLDIR= /usr/share/doc/html
HELPFILES= keystrokes/alt_edit_help.html keystrokes/bookmark_help.html \
keystrokes/cookie_help.html keystrokes/dired_help.html \
@@ -15,8 +15,8 @@ HELPFILES= keystrokes/alt_edit_help.html keystrokes/bookmark_help.html \
keystrokes/other_help.html keystrokes/print_help.html \
keystrokes/scrolling_help.html keystrokes/test_display.html \
keystrokes/visited_help.html keystrokes/xterm_help.html \
- Lynx_users_guide.html about_lynx.html lynx-dev.html \
- lynx_help_main.html lynx_url_support.html
+ keystrokes/bashlike_edit_help.html Lynx_users_guide.html \
+ about_lynx.html lynx-dev.html lynx_help_main.html lynx_url_support.html
.include <bsd.own.mk>
@@ -44,13 +44,13 @@ config: .FORCE
PATH="/bin:/usr/bin:/sbin:/usr/sbin" \
${GNUCFLAGS} \
INSTALL_PROGRAM="${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP}" \
- sh ${.CURDIR}/configure --prefix=/usr --libdir=/etc
+ sh ${.CURDIR}/configure --prefix=/usr --libdir=/etc ${CONFIGURE_ARGS}
config.status:
PATH="/bin:/usr/bin:/sbin:/usr/sbin" \
${GNUCFLAGS} \
INSTALL_PROGRAM="${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP}" \
- sh ${.CURDIR}/configure --prefix=/usr --libdir=/etc ${CF}
+ sh ${.CURDIR}/configure --prefix=/usr --libdir=/etc ${CONFIGURE_ARGS} ${CF}
lynx.1: ${.CURDIR}/lynx.man
-cp -p ${.ALLSRC} ${.TARGET}
diff --git a/gnu/usr.bin/lynx/PROBLEMS b/gnu/usr.bin/lynx/PROBLEMS
index dba8f323848..8e0cf214a75 100644
--- a/gnu/usr.bin/lynx/PROBLEMS
+++ b/gnu/usr.bin/lynx/PROBLEMS
@@ -4,17 +4,23 @@ Ideally you would never have to read this, but inevitably problems
do arise. As implementation and installation problems become known
they will be outlined in this file.
+---------
+
Control-Z on Unix can cause aberrant behavior. If you encounter
problems, use -restrictions=suspend to disable it, and only '!'
for escapes to shell (on VMS control-Z is unconditional 'Q'uit,
with no attempt to suspend the Lynx process only temporarily).
Control-Z on Unix often works better with slang.
+---------
+
Screen resizing can be a bit funny. If you resize the screen,
documents that have been cached will be out of whack. Any further
documents will look fine. You can reload documents to the current
window size with CTRL-R
+---------
+
If the configure script dies when it discovers that gcc is broken,
despite the fact there is a perfectly good ANSI cc in the PATH,
try setting the CC environment variable to your working cc compiler
@@ -23,9 +29,13 @@ they will be outlined in this file.
setenv CC cc (or set CC=cc; export CC , depending on the shell)
./configure
- If you run into a problem compiling LYMainLoop.c or GridText.c, try
- omitting -O from the compiler flags; these are very big files and may not
- compile successfully if you include optimisation.
+---------
+
+ If you run into a problem compiling GridText.c, try omitting -O from the
+ compiler flags; it is a very big file and may not compile successfully
+ if you include optimization.
+
+---------
On a Sun system, the message:
"Alert!: Unable to connect to remote host"
@@ -40,6 +50,8 @@ they will be outlined in this file.
you have upgraded to the bind-8.1 or later library, you should try
changing -lresolv to -lbind.
+---------
+
On Sun systems when accessing sites that use multiple IPs for one URL,
you may experience a core dump. It's a bug in the resolver library,
which can be fixed by downloading & installing Sun's jumbo patch:
@@ -67,6 +79,8 @@ they will be outlined in this file.
for the boldStyle resource/Bold_style default, all of which begin
with "Offset_". (helpful hint from kevin@traffic.den.mmc.com)
+---------
+
Directory browsing has been implemented for VMS, but there are no
plans to port additional DIRED support, because Lynx must handle files
as streams, and this precludes "serious" Directory/File Management on
@@ -74,16 +88,22 @@ they will be outlined in this file.
available from ftp://narnia.memst.edu), or define CSWING_PATH in
userdefs.h or lynx.cfg to invoke CSwing via the DIRED_MENU command.
+---------
+
If one switches between K)eypad "Numbers act as arrows" versus "Links
are numbered" in the 'o'ptions menu when the current document is a
DIRED menu in which links have been tagged, the tagging can be trashed
(so don't switch at such times 8-).
+---------
+
When "Links are numbered" is on, if a line is split on an anchor (to
obey right margin restrictions), and there is no space in the bolded
string such that the entire "[#]string" must be moved down, the "[#]"
becomes bolded, instead on only "string".
+---------
+
The Mosaic v2.5 hostlist uses HTML similar to that of Lynx's bookmark
file, but with </UL></HTML> at the bottom, such that it is not fully
compatible with Lynx's file. If you try to use the Mosaic file as if
@@ -93,16 +113,20 @@ they will be outlined in this file.
to the Lynx file in your Mosaic file, so that you can access both files
with both clients.
+---------
+
SOCKSification and the -socks switch have not yet been integrated with
the slang library support.
+---------
+
There is an apparently broken version of select() in libcurses.a
of HP/UX 10.10. It also breaks tn3270, ncftp, emacs, and xemacs.
Using:
LIBS="-lc -lcurses -ltermcap \
^^^
(i.e, adding -lc *before* the -lcurses) in the snake3 and snake3-slang
- targets of the top level Makefile yields a useable image, but with
+ targets of the top level Makefile yields a usable image, but with
inappropriate video attributes on the Lynx displays (reverse video and
underscores on everything). Using "-lc -lHcurses" instead fixes the
^^^^^^^^^
@@ -120,6 +144,8 @@ they will be outlined in this file.
no longer available. The current patch to install if running
under HP-UX 10.20 is PHCO_11342.
+---------
+
Lynx juggles variable abilities of curses packages or emulations to
display bolding and underlining simultaneously. This may fail if
Lynx thinks that your terminal, in connection with the curses package,
@@ -127,8 +153,8 @@ they will be outlined in this file.
in fact support. Setting the right TERM environment variable, tweaking
terminfo or termcap files, or compiling with a newer version of ncurses
or slang may solve problems with missing highlighting or strange
- characters appearing on the screen. Also, for a mono terminal, make sure
- that there is no "show color (&) : ON" on the Options screen.
+ characters appearing on the screen. Also, for a mono terminal,
+ make sure "show color" is not set to ON in the Options Menu.
The Wyse 50 and older TeleVideo terminals, among others, are
"magic cookie" terminals. This means that display attributes like
@@ -150,6 +176,14 @@ they will be outlined in this file.
Alternatively, compiling Lynx with the slang library may avoid problems
with theses terminals.
+ The Sun console driver (aka wscons(7)) implements "reverse" and "bold"
+ as "reverse", causing confusion where Lynx uses the distinction between
+ the two to convey information. Lynx tries to detect this automatically,
+ but if it fails (for instance, you are running under "screen"), try
+ setting the -noreverse commandline option.
+
+---------
+
On VMS, Lynx, and other TCP-IP software, have been experiencing chronic
problems of incompatibilities between DECC and MultiNet headers whenever
new versions of either DECC or MultiNet are released. The Lynx build
@@ -183,4 +217,3 @@ they will be outlined in this file.
SOCKETSHR 0.9D sources and offers the fixes as:
http://alder.cc.kcl.ac.uk/fileserv/zip/socketshr_src_09d-2.zip
ftp://ftp2.kcl.ac.uk/zip/socketshr_src_09d-2.zip
-
diff --git a/gnu/usr.bin/lynx/README b/gnu/usr.bin/lynx/README
index ea80078fd11..98f7b34961e 100644
--- a/gnu/usr.bin/lynx/README
+++ b/gnu/usr.bin/lynx/README
@@ -1,7 +1,7 @@
Lynx README file
-Lynx Version 2.8.2 is the latest release (June 1999).
+Lynx Version 2.8.4 is the latest release (July 2001).
See the CHANGES file for a complete record of all changes and bug fixes.
New releases are announced on the lynx-dev mailing list (see below).
@@ -33,9 +33,10 @@ WHAT IS LYNX?
HOW TO GET LYNX
For the latest release of Lynx goto:
- <URL: http://www.slcc.edu/lynx/release>;
+ <URL: http://lynx.isc.org/release>;
+ <URL: ftp://lynx.isc.org/release>;
the latest development version is at:
- <URL: http://sol.slcc.edu/lynx/current>.
+ <URL: http://lynx.isc.org/current>.
The Lynx homepage is <URL: http://lynx.browser.org/>.
The on-line help page (enter `h') has links to many useful things.
@@ -49,9 +50,13 @@ LICENSE
Certain portions of the Lynx source distribution were originally
created by CERN and have been modified during the development of
- Lynx. See WWW/Copyright.txt for copyright info regarding CERN
+ Lynx. See WWW/FreeofCharge.html for copyright info regarding CERN
products used in Lynx.
+ Note that Lynx is not self-contained; typically it is built with a
+ variety of add-on libraries, including those for compression, IPv6,
+ SOCKS and SSL support.
+
YEAR 2000 COMPLIANCE
We believe Lynx works properly for the Year 2000 issues, since it does
@@ -145,7 +150,7 @@ LYNX-DEV MAILING LIST
<URL: mailto:lynx-dev@sig.net>.
PLEASE use the lynx-dev list, NOT private email to the developers,
for questions or discussion about Lynx, or contributions of patches.
- Patches should use the context diff format (diff -c), which can be
+ Patches should use the unified diff format (diff -u), which can be
generated by building the target, "make lynx.patch" after unpacking
a pristine copy of the source into a subdirectory called "orig".
diff --git a/gnu/usr.bin/lynx/VMSPrint.com b/gnu/usr.bin/lynx/VMSPrint.com
deleted file mode 100644
index d1e2c936a87..00000000000
--- a/gnu/usr.bin/lynx/VMSPrint.com
+++ /dev/null
@@ -1,15 +0,0 @@
-$!
-$! Lynx_Dir:VMSPrint.com - Alan J. Hirsh (hirsh@atuk.aspentec.com)
-$! ---------------------
-$! Lynx deletes temporary files on exit. If your printer queue
-$! is very busy such that Lynx is deleting the files before they
-$! have been queued for printing, use PRINTER commands in lynx.cfg
-$! which invoke this script.
-$!
-$! PRINTER:description for menu:@Lynx_Dir\:VMSPrint queue_name %s:FALSE:58
-$!
-$! P1 = queue_name (e.g., sys$print) P2 = temporary Lynx file (%s)
-$! --------------------------------- -----------------------------
-$ copy 'P2' 'P2'_temp_print
-$ print/queue='P1'/delete 'P2'_temp_print
-$ exit
diff --git a/gnu/usr.bin/lynx/WWW/FreeofCharge.html b/gnu/usr.bin/lynx/WWW/FreeofCharge.html
new file mode 100644
index 00000000000..67cb3f20481
--- /dev/null
+++ b/gnu/usr.bin/lynx/WWW/FreeofCharge.html
@@ -0,0 +1,26 @@
+<!-- X-URL: http://www.w3.org/History/1993/WWW/Conditions/old/FreeofCharge.html -->
+<BASE HREF="http://www.w3.org/History/1993/WWW/Conditions/old/FreeofCharge.html">
+
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+
+<HTML><HEAD><TITLE>
+CERN WWW software freely available</TITLE><NEXTID N="z9"></HEAD><BODY><H1>
+Software freely available</H1>The following CERN software is hereby put into
+the public domain.
+<UL>
+<LI>WWW basic ("line-mode") client <LI>WWW basic server <LI>WWW Library of
+common code.</UL>CERN relinquishes all intellectual property rights to this
+code, both source and binary form and permission is granted for anyone to use,
+duplicate,
+modify and redistribute it.<P>CERN provides absolutely NO WARRANTY OF ANY KIND
+with respect to this software.
+The entire risk as to the quality and performance of this software is with the
+user.
+IN NO EVENT WILL CERN BE LIABLE TO ANYONE FOR ANY DAMAGES ARISING OUT THE USE
+OF THIS SOFTWARE, INCLUDING, WITHOUT LIMITATION,
+DAMAGES RESULTING FROM LOST DATA OR LOST PROFITS, OR FOR ANY SPECIAL,
+INCIDENTAL OR CONSEQUENTIAL DAMAGES.<P>This is part of the <A
+HREF="Introduction.html" NAME="z8">
+CERN WWW</A> distribution condidtions.<P>Declaration to this effect signed by
+the CERN directors of Administration (H. Weber) and Research (W.
+Hoogland), May 1993.</BODY></HTML>
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAABrow.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAABrow.c
index 0f72cc71bed..519030faa2d 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAABrow.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAABrow.c
@@ -75,11 +75,11 @@ typedef struct {
int portnumber; /* Port number */
BOOL IsProxy; /* Is it a proxy? */
HTList * setups; /* List of protection setups */
- /* on this server; i.e., valid */
- /* authentication schemes and */
- /* templates when to use them. */
- /* This is actually a list of */
- /* HTAASetup objects. */
+ /* on this server; i.e., valid */
+ /* authentication schemes and */
+ /* templates when to use them. */
+ /* This is actually a list of */
+ /* HTAASetup objects. */
HTList * realms; /* Information about passwords */
} HTAAServer;
@@ -90,7 +90,7 @@ typedef struct {
typedef struct {
HTAAServer *server; /* Which server serves this tree */
char * template; /* Template for this tree */
- HTList * valid_schemes; /* Valid authentic.schemes */
+ HTList * valid_schemes; /* Valid authentic.schemes */
HTAssocList**scheme_specifics;/* Scheme specific params */
BOOL retry; /* Failed last time -- reprompt (or whatever)*/
} HTAASetup;
@@ -119,14 +119,14 @@ PRIVATE char *compose_auth_stringResult = NULL; /* Uuencoded presentation */
PRIVATE HTList *server_table = NULL; /* Browser's info about servers */
PRIVATE char *secret_key = NULL; /* Browser's latest secret key */
PRIVATE HTAASetup *current_setup= NULL; /* The server setup we are currently */
- /* talking to */
+ /* talking to */
PRIVATE char *current_hostname = NULL; /* The server's name and portnumber */
PRIVATE int current_portnumber = 80; /* where we are currently trying to */
- /* connect. */
-PRIVATE char *current_docname = NULL; /* The document's name we are */
- /* trying to access. */
+ /* connect. */
+PRIVATE char *current_docname = NULL; /* The document's name we are */
+ /* trying to access. */
PRIVATE char *HTAAForwardAuth = NULL; /* Authorization: line to forward */
- /* (used by gateway httpds) */
+ /* (used by gateway httpds) */
PRIVATE HTAASetup *proxy_setup = NULL; /* Same as above, but for Proxy -AJL */
PRIVATE char *proxy_hostname = NULL;
PRIVATE char *proxy_docname = NULL;
@@ -140,10 +140,10 @@ PUBLIC void HTAAForwardAuth_set ARGS2(
CONST char *, scheme_specifics)
{
int len = 20 + (scheme_name ? strlen(scheme_name) : 0)
- + (scheme_specifics ? strlen(scheme_specifics) : 0);
+ + (scheme_specifics ? strlen(scheme_specifics) : 0);
FREE(HTAAForwardAuth);
- if (!(HTAAForwardAuth = (char*)calloc(1, sizeof(char) * len)))
+ if ((HTAAForwardAuth = typecallocn(char, len)) == 0)
outofmem(__FILE__, "HTAAForwardAuth_set");
strcpy(HTAAForwardAuth, "Authorization: ");
@@ -189,7 +189,7 @@ PRIVATE HTAAServer *HTAAServer_new ARGS3(
{
HTAAServer *server;
- if (!(server = (HTAAServer *)calloc(1, sizeof(HTAAServer))))
+ if ((server = typecalloc(HTAAServer)) == 0)
outofmem(__FILE__, "HTAAServer_new");
server->hostname = NULL;
@@ -199,10 +199,10 @@ PRIVATE HTAAServer *HTAAServer_new ARGS3(
server->realms = HTList_new();
if (hostname)
- StrAllocCopy(server->hostname, hostname);
+ StrAllocCopy(server->hostname, hostname);
if (!server_table)
- server_table = HTList_new();
+ server_table = HTList_new();
HTList_addObject(server_table, (void*)server);
@@ -233,8 +233,8 @@ PRIVATE void HTAAServer_delete ARGS1(
if (killme->setups != NULL) {
n = HTList_count(killme->setups);
for (i = (n - 1); i >= 0; i--) {
- if ((setup = (HTAASetup*)HTList_objectAt(killme->setups,
- i)) != NULL) {
+ if ((setup = (HTAASetup*)HTList_objectAt(killme->setups,
+ i)) != NULL) {
HTAASetup_delete(setup);
setup = NULL;
}
@@ -310,7 +310,7 @@ PRIVATE HTAAServer *HTAAServer_lookup ARGS3(
** are trying to access.
** IsProxy should be TRUE if this is a proxy.
**
-** This function goes through the information known about
+** This function goes through the information known about
** all the setups of the server, and finds out if the given
** filename resides in one of the protected directories.
**
@@ -331,7 +331,7 @@ PRIVATE HTAASetup *HTAASetup_lookup ARGS4(
HTAASetup *setup;
if (portnumber <= 0)
- portnumber = 80;
+ portnumber = 80;
if (hostname && docname && *hostname && *docname &&
NULL != (server = HTAAServer_lookup(hostname,
@@ -340,29 +340,29 @@ PRIVATE HTAASetup *HTAASetup_lookup ARGS4(
HTList *cur = server->setups;
- CTRACE(tfp, "%s %s (%s:%d:%s)\n",
+ CTRACE((tfp, "%s %s (%s:%d:%s)\n",
"HTAASetup_lookup: resolving setup for",
(IsProxy ? "proxy" : "server"),
- hostname, portnumber, docname);
+ hostname, portnumber, docname));
while (NULL != (setup = (HTAASetup*)HTList_nextObject(cur))) {
if (HTAA_templateMatch(setup->template, docname)) {
- CTRACE(tfp, "%s `%s' %s `%s'\n",
+ CTRACE((tfp, "%s `%s' %s `%s'\n",
"HTAASetup_lookup:", docname,
- "matched template", setup->template);
+ "matched template", setup->template));
return setup;
} else {
- CTRACE(tfp, "%s `%s' %s `%s'\n",
+ CTRACE((tfp, "%s `%s' %s `%s'\n",
"HTAASetup_lookup:", docname,
- "did NOT match template", setup->template);
+ "did NOT match template", setup->template));
}
} /* while setups remain */
} /* if valid parameters and server found */
- CTRACE(tfp, "%s `%s' %s\n",
+ CTRACE((tfp, "%s `%s' %s\n",
"HTAASetup_lookup: No template matched",
- (docname ? docname : "(null)"),
- "(so probably not protected)");
+ NONNULL(docname),
+ "(so probably not protected)"));
return NULL; /* NULL in parameters, or not found */
}
@@ -395,16 +395,16 @@ PRIVATE HTAASetup *HTAASetup_new ARGS4(
HTAASetup *setup;
if (!server || !template || !*template)
- return NULL;
+ return NULL;
- if (!(setup = (HTAASetup*)calloc(1, sizeof(HTAASetup))))
+ if ((setup = typecalloc(HTAASetup)) == 0)
outofmem(__FILE__, "HTAASetup_new");
setup->retry = NO;
setup->server = server;
setup->template = NULL;
if (template)
- StrAllocCopy(setup->template, template);
+ StrAllocCopy(setup->template, template);
setup->valid_schemes = valid_schemes;
setup->scheme_specifics = scheme_specifics;
@@ -428,9 +428,10 @@ PRIVATE void HTAASetup_delete ARGS1(
if (killme) {
FREE(killme->template);
- if (killme->valid_schemes)
+ if (killme->valid_schemes) {
HTList_delete(killme->valid_schemes);
killme->valid_schemes = NULL;
+ }
for (scheme = 0; scheme < HTAA_MAX_SCHEMES; scheme++)
if (killme->scheme_specifics[scheme])
HTAssocList_delete(killme->scheme_specifics[scheme]);
@@ -473,7 +474,7 @@ PRIVATE void HTAASetup_updateSpecifics ARGS2(
/*************************** HTAARealm **********************************/
-/* PRIVATE HTAARealm_lookup()
+/* PRIVATE HTAARealm_lookup()
** LOOKUP HTAARealm STRUCTURE BY REALM NAME
** ON ENTRY:
** realm_table a list of realm objects.
@@ -524,7 +525,7 @@ PRIVATE HTAARealm *HTAARealm_new ARGS4(
realm = HTAARealm_lookup(realm_table, realmname);
if (!realm) {
- if (!(realm = (HTAARealm*)calloc(1, sizeof(HTAARealm))))
+ if ((realm = typecalloc(HTAARealm)) == 0)
outofmem(__FILE__, "HTAARealm_new");
realm->realmname = NULL;
realm->username = NULL;
@@ -534,9 +535,9 @@ PRIVATE HTAARealm *HTAARealm_new ARGS4(
HTList_addObject(realm_table, (void*)realm);
}
if (username)
- StrAllocCopy(realm->username, username);
+ StrAllocCopy(realm->username, username);
if (password)
- StrAllocCopy(realm->password, password);
+ StrAllocCopy(realm->password, password);
return realm;
}
@@ -594,16 +595,16 @@ PRIVATE char *compose_auth_string ARGS3(
realmname = HTAssocList_lookup(setup->scheme_specifics[scheme], "realm");
if (!realmname)
- return NULL;
+ return NULL;
realm = HTAARealm_lookup(setup->server->realms, realmname);
if (!(realm &&
- realm->username && *realm->username &&
+ realm->username && *realm->username &&
realm->password) || setup->retry) {
if (!realm) {
- CTRACE(tfp, "%s `%s' %s\n",
+ CTRACE((tfp, "%s `%s' %s\n",
"compose_auth_string: realm:", realmname,
- "not found -- creating");
+ "not found -- creating"));
realm = HTAARealm_new(setup->server->realms,
realmname, NULL, NULL);
}
@@ -620,7 +621,7 @@ PRIVATE char *compose_auth_string ARGS3(
if ((!IsProxy) && using_proxy && setup->template) {
proxiedHost = HTParse(setup->template, "", PARSE_HOST);
if (proxiedHost && *proxiedHost != '\0') {
- theHost = proxiedHost;
+ theHost = proxiedHost;
}
}
/*
@@ -630,10 +631,10 @@ PRIVATE char *compose_auth_string ARGS3(
*/
if (!theHost)
theHost = setup->server->hostname;
- if (setup->server->portnumber > 0 &&
- setup->server->portnumber != 80) {
- HTSprintf0(&thePort, ":%d", setup->server->portnumber);
- }
+ if (setup->server->portnumber > 0 &&
+ setup->server->portnumber != 80) {
+ HTSprintf0(&thePort, ":%d", setup->server->portnumber);
+ }
/*
* Set up the message for the username prompt,
* and then issue the prompt. The default
@@ -643,7 +644,7 @@ PRIVATE char *compose_auth_string ARGS3(
*/
len = strlen(realm->realmname) +
strlen(theHost ?
- theHost : "??") + 50;
+ theHost : "??") + 50;
HTSprintf0(&msg, gettext("Username for '%s' at %s '%s%s':"),
realm->realmname,
(IsProxy ? "proxy" : "server"),
@@ -689,18 +690,18 @@ PRIVATE char *compose_auth_string ARGS3(
FREE(secret_key);
}
- if (!(cleartext = (char*)calloc(1, sizeof(char) * len)))
+ if ((cleartext = typecallocn(char, len)) == 0)
outofmem(__FILE__, "compose_auth_string");
if (realm->username)
- strcpy(cleartext, realm->username);
+ strcpy(cleartext, realm->username);
else
- *cleartext = '\0';
+ *cleartext = '\0';
strcat(cleartext, ":");
if (realm->password)
- strcat(cleartext, realm->password);
+ strcat(cleartext, realm->password);
if (scheme == HTAA_PUBKEY) {
strcat(cleartext, ":");
@@ -711,9 +712,8 @@ PRIVATE char *compose_auth_string ARGS3(
if (secret_key)
strcat(cleartext, secret_key);
- if (!((ciphertext = (char *)calloc(1, (sizeof(char) * 2) * len)) &&
- (compose_auth_stringResult =
- (char *)calloc(1, (sizeof(char) * 3) * len))))
+ if (!((ciphertext = typecallocn(char, 2 * len)) &&
+ (compose_auth_stringResult = typecallocn(char, 3 * len))))
outofmem(__FILE__, "compose_auth_string");
#ifdef PUBKEY
HTPK_encrypt(cleartext, ciphertext, server->public_key);
@@ -725,7 +725,7 @@ PRIVATE char *compose_auth_string ARGS3(
}
else { /* scheme == HTAA_BASIC */
if (!(compose_auth_stringResult =
- (char*)calloc(1, (4 * ((len+2)/3)) + 1)))
+ typecallocn(char, (4 * ((len+2)/3)) + 1)))
outofmem(__FILE__, "compose_auth_string");
HTUU_encode((unsigned char *)cleartext, strlen(cleartext),
compose_auth_stringResult);
@@ -780,11 +780,11 @@ PRIVATE void free_HTAAGlobals NOARGS
int n, i;
if (server_table != NULL) {
- n = HTList_count(server_table);
+ n = HTList_count(server_table);
for (i = (n - 1); i >= 0; i--) {
if ((server = (HTAAServer*)HTList_objectAt(server_table,
- i)) != NULL) {
- HTAAServer_delete(server);
+ i)) != NULL) {
+ HTAAServer_delete(server);
server = NULL;
}
}
@@ -838,7 +838,7 @@ PUBLIC char *HTAA_composeAuth ARGS4(
*/
if (!free_HTAAGlobalsSet) {
#ifdef LY_FIND_LEAKS
- atexit(free_HTAAGlobals);
+ atexit(free_HTAAGlobals);
#endif
free_HTAAGlobalsSet = TRUE;
}
@@ -853,8 +853,8 @@ PUBLIC char *HTAA_composeAuth ARGS4(
** on server-side. Life is hard.)
*/
if (HTAAForwardAuth) {
- CTRACE(tfp, "HTAA_composeAuth: %s\n",
- "Forwarding received authorization");
+ CTRACE((tfp, "HTAA_composeAuth: %s\n",
+ "Forwarding received authorization"));
StrAllocCopy(HTAA_composeAuthResult, HTAAForwardAuth);
HTAAForwardAuth_reset(); /* Just a precaution */
return HTAA_composeAuthResult;
@@ -863,15 +863,15 @@ PUBLIC char *HTAA_composeAuth ARGS4(
FREE(HTAA_composeAuthResult); /* From previous call */
if (IsProxy) {
- /*
+ /*
** Proxy Authorization required. - AJL
*/
- CTRACE(tfp, "Composing Proxy Authorization for %s:%d/%s\n",
- hostname, portnumber, docname);
+ CTRACE((tfp, "Composing Proxy Authorization for %s:%d/%s\n",
+ hostname, portnumber, docname));
- if (proxy_portnumber != portnumber ||
- !proxy_hostname || !proxy_docname ||
+ if (proxy_portnumber != portnumber ||
+ !proxy_hostname || !proxy_docname ||
!hostname || !docname ||
0 != strcmp(proxy_hostname, hostname) ||
0 != strcmp(proxy_docname, docname)) {
@@ -900,7 +900,7 @@ PUBLIC char *HTAA_composeAuth ARGS4(
if (!proxy_setup)
return NULL;
- switch (scheme = HTAA_selectScheme(proxy_setup)) {
+ switch (scheme = HTAA_selectScheme(proxy_setup)) {
case HTAA_BASIC:
case HTAA_PUBKEY:
auth_string = compose_auth_string(scheme, proxy_setup, IsProxy);
@@ -934,7 +934,7 @@ PUBLIC char *HTAA_composeAuth ARGS4(
return(HTAA_composeAuthResult);
}
len = strlen(auth_string) + strlen((char *)HTAAScheme_name(scheme)) + 26;
- if (!(HTAA_composeAuthResult = (char*)calloc(1, sizeof(char) * len)))
+ if ((HTAA_composeAuthResult = typecallocn(char, len)) == 0)
outofmem(__FILE__, "HTAA_composeAuth");
strcpy(HTAA_composeAuthResult, "Proxy-Authorization: ");
@@ -942,8 +942,8 @@ PUBLIC char *HTAA_composeAuth ARGS4(
/*
** Normal WWW authorization.
*/
- CTRACE(tfp, "Composing Authorization for %s:%d/%s\n",
- hostname, portnumber, docname);
+ CTRACE((tfp, "Composing Authorization for %s:%d/%s\n",
+ hostname, portnumber, docname));
if (current_portnumber != portnumber ||
!current_hostname || !current_docname ||
@@ -1010,7 +1010,7 @@ PUBLIC char *HTAA_composeAuth ARGS4(
}
len = strlen(auth_string) + strlen((char *)HTAAScheme_name(scheme)) + 20;
- if (!(HTAA_composeAuthResult = (char*)calloc(1, sizeof(char) * len)))
+ if ((HTAA_composeAuthResult = typecallocn(char, len)) == 0)
outofmem(__FILE__, "HTAA_composeAuth");
strcpy(HTAA_composeAuthResult, "Authorization: ");
}
@@ -1068,7 +1068,7 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS4(
*/
if (!free_HTAAGlobalsSet) {
#ifdef LY_FIND_LEAKS
- atexit(free_HTAAGlobals);
+ atexit(free_HTAAGlobals);
#endif
free_HTAAGlobalsSet = TRUE;
}
@@ -1076,11 +1076,11 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS4(
/*
** Read server reply header lines
*/
- CTRACE(tfp, "Server reply header lines:\n");
+ CTRACE((tfp, "Server reply header lines:\n"));
HTAA_setupReader(start_of_headers, length, soc);
while (NULL != (line = HTAA_getUnfoldedLine()) && *line != '\0') {
- CTRACE(tfp, "%s\n", line);
+ CTRACE((tfp, "%s\n", line));
if (strchr(line, ':')) { /* Valid header line */
@@ -1091,9 +1091,9 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS4(
if ((IsProxy &&
0==strcasecomp(fieldname, "Proxy-Authenticate:")) ||
- (!IsProxy &&
+ (!IsProxy &&
0==strcasecomp(fieldname, "WWW-Authenticate:"))) {
- if (!(arg1 && *arg1 && args && *args)) {
+ if (!(arg1 && *arg1 && args && *args)) {
HTSprintf0(&temp, gettext("Invalid header '%s%s%s%s%s'"), line,
((arg1 && *arg1) ? " " : ""),
((arg1 && *arg1) ? arg1 : ""),
@@ -1106,8 +1106,8 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS4(
HTList_addObject(valid_schemes, (void*)scheme);
if (!scheme_specifics) {
int i;
- scheme_specifics = (HTAssocList**)
- calloc(1, HTAA_MAX_SCHEMES * sizeof(HTAssocList*));
+ scheme_specifics =
+ typecallocn(HTAssocList *, HTAA_MAX_SCHEMES);
if (!scheme_specifics)
outofmem(__FILE__, "HTAA_shouldRetryWithAuth");
for (i=0; i < HTAA_MAX_SCHEMES; i++)
@@ -1116,23 +1116,23 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS4(
scheme_specifics[scheme] = HTAA_parseArgList(args);
num_schemes++;
} else {
- CTRACE(tfp, "Unknown scheme `%s' %s\n",
- (arg1 ? arg1 : "(null)"),
+ CTRACE((tfp, "Unknown scheme `%s' %s\n",
+ NONNULL(arg1),
(IsProxy ?
"in Proxy-Authenticate: field" :
- "in WWW-Authenticate: field"));
+ "in WWW-Authenticate: field")));
}
}
else if (!IsProxy &&
0==strcasecomp(fieldname, "WWW-Protection-Template:")) {
- CTRACE(tfp, "Protection template set to `%s'\n", arg1);
+ CTRACE((tfp, "Protection template set to `%s'\n", arg1));
StrAllocCopy(template, arg1);
}
} /* if a valid header line */
else {
- CTRACE(tfp, "Invalid header line `%s' ignored\n", line);
+ CTRACE((tfp, "Invalid header line `%s' ignored\n", line));
} /* else invalid header line */
FREE(line);
@@ -1151,7 +1151,7 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS4(
proxy_setup = NULL;
return NO;
}
- /*
+ /*
** Doing it for proxy. -AJL
*/
if (proxy_setup && proxy_setup->server) {
@@ -1169,7 +1169,7 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS4(
proxy_setup = NULL;
return NO;
} else {
- /*
+ /*
** Re-ask username+password (if misspelled).
*/
proxy_setup->retry = YES;
@@ -1235,7 +1235,7 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS4(
return YES;
}
} else {
- /*
+ /*
** current_setup == NULL, i.e., we have a
** first connection to a protected server or
** the server serves a wider set of documents
@@ -1257,7 +1257,7 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS4(
scheme_specifics);
FREE(template);
- HTAlert(gettext("Access without authorization denied -- retrying"));
+ HTAlert(gettext("Access without authorization denied -- retrying"));
return YES;
}
/* Never reached */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAAProt.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAAProt.c
index cddfa1c48d6..6821068f383 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAAProt.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAAProt.c
@@ -30,6 +30,7 @@
#include <HTLex.h> /* Lexical analysor */
#include <HTAAProt.h> /* Implemented here */
+#include <LYUtils.h>
#include <LYLeaks.h>
#define NOBODY 65534 /* -2 in 16-bit environment */
@@ -46,11 +47,11 @@ typedef struct {
PRIVATE HTList * prot_cache = NULL; /* Protection setup cache. */
PRIVATE HTAAProt *default_prot = NULL; /* Default protection. */
PRIVATE HTAAProt *current_prot = NULL; /* Current protection mode */
- /* which is set up by callbacks */
- /* from the rule system when */
- /* a "protect" rule is matched. */
-
+ /* which is set up by callbacks */
+ /* from the rule system when */
+ /* a "protect" rule is matched. */
+#ifndef NOUSERS
/* PRIVATE isNumber()
** DOES A CHARACTER STRING REPRESENT A NUMBER
*/
@@ -70,6 +71,7 @@ PRIVATE BOOL isNumber ARGS1(CONST char *, s)
}
return YES;
}
+#endif /* !NOUSERS */
#if defined (NOUSERS)
@@ -85,7 +87,7 @@ PRIVATE BOOL isNumber ARGS1(CONST char *, s)
PUBLIC char * HTAA_getUidName NOARGS
{
if (current_prot && current_prot->uid_name
- && (0 != strcmp(current_prot->uid_name,"nobody")) )
+ && (0 != strcmp(current_prot->uid_name,"nobody")) )
return(current_prot->uid_name);
else
return("");
@@ -256,8 +258,8 @@ PRIVATE void HTAA_parseProtFile ARGS2(HTAAProt *, prot,
if (LEX_FIELD_SEP != (lex_item = lex(fp)))
unlex(lex_item); /* If someone wants to use colon */
- /* after field name it's ok, but */
- /* not required. Here we read it.*/
+ /* after field name it's ok, but */
+ /* not required. Here we read it.*/
if (0==strncasecomp(fieldname, "Auth", 4)) {
lex_item = lex(fp);
@@ -267,15 +269,15 @@ PRIVATE void HTAA_parseProtFile ARGS2(HTAAProt *, prot,
if (!prot->valid_schemes)
prot->valid_schemes = HTList_new();
HTList_addObject(prot->valid_schemes,(void*)scheme);
- CTRACE(tfp, "%s %s `%s'\n",
- "HTAA_parseProtFile: valid",
- "authentication scheme:",
- HTAAScheme_name(scheme));
+ CTRACE((tfp, "%s %s `%s'\n",
+ "HTAA_parseProtFile: valid",
+ "authentication scheme:",
+ HTAAScheme_name(scheme)));
} else {
- CTRACE(tfp, "%s %s `%s'\n",
+ CTRACE((tfp, "%s %s `%s'\n",
"HTAA_parseProtFile: unknown",
"authentication scheme:",
- HTlex_buffer);
+ HTlex_buffer));
}
if (LEX_ITEM_SEP != (lex_item = lex(fp)))
@@ -310,19 +312,19 @@ PRIVATE void HTAA_parseProtFile ARGS2(HTAAProt *, prot,
prot->values = HTAssocList_new();
HTAssocList_add(prot->values, fieldname, HTlex_buffer);
lex_item = lex(fp); /* Read record separator */
- CTRACE(tfp, "%s `%s' bound to value `%s'\n",
+ CTRACE((tfp, "%s `%s' bound to value `%s'\n",
"HTAA_parseProtFile: Name",
- fieldname, HTlex_buffer);
+ fieldname, HTlex_buffer));
}
} /* else name-value pair */
} /* if valid field */
if (lex_item != LEX_EOF && lex_item != LEX_REC_SEP) {
- CTRACE(tfp, "%s %s %d (that line ignored)\n",
+ CTRACE((tfp, "%s %s %d (that line ignored)\n",
"HTAA_parseProtFile: Syntax error",
"in protection setup file at line",
- HTlex_line);
+ HTlex_line));
do {
lex_item = lex(fp);
} while (lex_item != LEX_EOF && lex_item != LEX_REC_SEP);
@@ -377,13 +379,13 @@ PRIVATE HTAAProt *HTAAProt_new ARGS3(CONST char *, cur_docname,
}
if (cache_item) {
prot = cache_item->prot;
- CTRACE(tfp, "%s `%s' already in cache\n",
- "HTAAProt_new: Protection file", prot_filename);
+ CTRACE((tfp, "%s `%s' already in cache\n",
+ "HTAAProt_new: Protection file", prot_filename));
} else {
- CTRACE(tfp, "HTAAProt_new: Loading protection file `%s'\n",
- prot_filename);
+ CTRACE((tfp, "HTAAProt_new: Loading protection file `%s'\n",
+ prot_filename));
- if (!(prot = (HTAAProt*)calloc(1, sizeof(HTAAProt))))
+ if ((prot = typecalloc(HTAAProt)) == 0)
outofmem(__FILE__, "HTAAProt_new");
prot->template = NULL;
@@ -394,20 +396,19 @@ PRIVATE HTAAProt *HTAAProt_new ARGS3(CONST char *, cur_docname,
prot->mask_group= NULL; /* Masking disabled by defaults */
prot->values = HTAssocList_new();
- if (prot_filename && NULL != (fp = fopen(prot_filename, "r"))) {
+ if (prot_filename && NULL != (fp = fopen(prot_filename, TXT_R))) {
HTAA_parseProtFile(prot, fp);
fclose(fp);
- if (!(cache_item =
- (HTAAProtCache*)calloc(1, sizeof(HTAAProtCache))))
+ if ((cache_item = typecalloc(HTAAProtCache)) == 0)
outofmem(__FILE__, "HTAAProt_new");
cache_item->prot = prot;
cache_item->prot_filename = NULL;
StrAllocCopy(cache_item->prot_filename, prot_filename);
HTList_addObject(prot_cache, (void*)cache_item);
} else {
- CTRACE(tfp, "HTAAProt_new: %s `%s'\n",
+ CTRACE((tfp, "HTAAProt_new: %s `%s'\n",
"Unable to open protection setup file",
- (prot_filename ? prot_filename : "(null)"));
+ NONNULL(prot_filename)));
}
}
@@ -447,9 +448,9 @@ PUBLIC void HTAA_setDefaultProtection ARGS3(CONST char *, cur_docname,
if (prot_filename) {
default_prot = HTAAProt_new(cur_docname, prot_filename, ids);
} else {
- CTRACE(tfp, "%s %s\n",
+ CTRACE((tfp, "%s %s\n",
"HTAA_setDefaultProtection: ERROR: Protection file",
- "not specified (obligatory for DefProt rule)!!\n");
+ "not specified (obligatory for DefProt rule)!!\n"));
}
}
@@ -485,15 +486,15 @@ PUBLIC void HTAA_setCurrentProtection ARGS3(CONST char *, cur_docname,
if (default_prot) {
current_prot = default_prot;
HTAA_setIds(current_prot, ids);
- CTRACE(tfp, "%s %s %s\n",
- "HTAA_setCurrentProtection: Protection file",
- "not specified for Protect rule",
- "-- using default protection");
+ CTRACE((tfp, "%s %s %s\n",
+ "HTAA_setCurrentProtection: Protection file",
+ "not specified for Protect rule",
+ "-- using default protection"));
} else {
- CTRACE(tfp, "%s %s %s\n",
- "HTAA_setCurrentProtection: ERROR: Protection",
- "file not specified for Protect rule, and",
- "default protection is not set!!");
+ CTRACE((tfp, "%s %s %s\n",
+ "HTAA_setCurrentProtection: ERROR: Protection",
+ "file not specified for Protect rule, and",
+ "default protection is not set!!"));
}
}
}
@@ -570,17 +571,20 @@ PUBLIC void HTAA_clearProtections NOARGS
}
typedef struct {
- char *name;
+ char *name;
int user;
- } USER_DATA;
+ } USER_DATA;
+#ifndef NOUSERS
PRIVATE HTList *known_grp = NULL;
PRIVATE HTList *known_pwd = NULL;
PRIVATE BOOL uidgid_cache_inited = NO;
+#endif
#ifdef LY_FIND_LEAKS
PRIVATE void clear_uidgid_cache NOARGS
{
+#ifndef NOUSERS
USER_DATA *data;
if (known_grp) {
while ((data = HTList_removeLastObject(known_grp)) != NULL) {
@@ -596,12 +600,14 @@ PRIVATE void clear_uidgid_cache NOARGS
}
FREE(known_pwd);
}
+#endif
}
#endif /* LY_FIND_LEAKS */
+#ifndef NOUSERS
PRIVATE void save_gid_info ARGS2(char *, name, int, user)
{
- USER_DATA *data = (USER_DATA *)calloc(1, sizeof(USER_DATA));
+ USER_DATA *data = typecalloc(USER_DATA);
if (!data)
return;
if (!known_grp) {
@@ -617,10 +623,12 @@ PRIVATE void save_gid_info ARGS2(char *, name, int, user)
data->user = user;
HTList_addObject (known_grp, data);
}
+#endif /* NOUSERS */
+#ifndef NOUSERS
PRIVATE void save_uid_info ARGS2(char *, name, int, user)
{
- USER_DATA *data = (USER_DATA *)calloc(1, sizeof(USER_DATA));
+ USER_DATA *data = typecalloc(USER_DATA);
if (!data)
return;
if (!known_pwd) {
@@ -636,9 +644,10 @@ PRIVATE void save_uid_info ARGS2(char *, name, int, user)
data->user = user;
HTList_addObject (known_pwd, data);
}
+#endif /* !NOUSERS */
-/* PUBLIC HTAA_UidToName
-** GET THE USER NAME
+/* PUBLIC HTAA_UidToName
+** GET THE USER NAME
** ON ENTRY:
** The user-id
**
@@ -659,10 +668,10 @@ PUBLIC char * HTAA_UidToName ARGS1(int, uid)
if ((pw = getpwuid(uid)) != 0
&& pw->pw_name != 0) {
- CTRACE(tfp, "%s(%d) returned (%s:%d:...)\n",
+ CTRACE((tfp, "%s(%d) returned (%s:%d:...)\n",
"HTAA_UidToName: getpwuid",
uid,
- pw->pw_name, (int) pw->pw_uid);
+ pw->pw_name, (int) pw->pw_uid));
save_uid_info(pw->pw_name, (int) pw->pw_uid);
return pw->pw_name;
}
@@ -670,8 +679,8 @@ PUBLIC char * HTAA_UidToName ARGS1(int, uid)
return "";
}
-/* PUBLIC HTAA_NameToUid
-** GET THE USER ID
+/* PUBLIC HTAA_NameToUid
+** GET THE USER ID
** ON ENTRY:
** The user-name
**
@@ -691,10 +700,10 @@ PUBLIC int HTAA_NameToUid ARGS1(char *, name)
}
if ((pw = getpwnam(name)) != 0) {
- CTRACE(tfp, "%s(%s) returned (%s:%d:...)\n",
+ CTRACE((tfp, "%s(%s) returned (%s:%d:...)\n",
"HTAA_NameToUid: getpwnam",
name,
- pw->pw_name, (int) pw->pw_uid);
+ pw->pw_name, (int) pw->pw_uid));
save_uid_info(pw->pw_name, (int) pw->pw_uid);
return (int) pw->pw_uid;
}
@@ -702,8 +711,8 @@ PUBLIC int HTAA_NameToUid ARGS1(char *, name)
return NONESUCH;
}
-/* PUBLIC HTAA_GidToName
-** GET THE GROUP NAME
+/* PUBLIC HTAA_GidToName
+** GET THE GROUP NAME
** ON ENTRY:
** The group-id
**
@@ -724,10 +733,10 @@ PUBLIC char * HTAA_GidToName ARGS1(int, gid)
if ((gr = getgrgid(gid)) != 0
&& gr->gr_name != 0) {
- CTRACE(tfp, "%s(%d) returned (%s:%d:...)\n",
+ CTRACE((tfp, "%s(%d) returned (%s:%d:...)\n",
"HTAA_GidToName: getgrgid",
gid,
- gr->gr_name, (int) gr->gr_gid);
+ gr->gr_name, (int) gr->gr_gid));
save_gid_info(gr->gr_name, (int) gr->gr_gid);
return gr->gr_name;
}
@@ -735,8 +744,8 @@ PUBLIC char * HTAA_GidToName ARGS1(int, gid)
return "";
}
-/* PUBLIC HTAA_NameToGid
-** GET THE GROUP ID
+/* PUBLIC HTAA_NameToGid
+** GET THE GROUP ID
** ON ENTRY:
** The group-name
**
@@ -756,10 +765,10 @@ PUBLIC int HTAA_NameToGid ARGS1(char *, name)
}
if ((gr = getgrnam(name)) != 0) {
- CTRACE(tfp, "%s(%s) returned (%s:%d:...)\n",
+ CTRACE((tfp, "%s(%s) returned (%s:%d:...)\n",
"HTAA_NameToGid: getgrnam",
name,
- gr->gr_name, (int) gr->gr_gid);
+ gr->gr_name, (int) gr->gr_gid));
save_gid_info(gr->gr_name, (int) gr->gr_gid);
return (int) gr->gr_gid;
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAAUtil.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAAUtil.c
index 20463162247..25d24aa67b0 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAAUtil.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAAUtil.c
@@ -48,11 +48,9 @@
#include <HTAAUtil.h> /* Implemented here */
#include <HTAssoc.h> /* Assoc list */
#include <HTTCP.h>
+#include <HTTP.h>
#ifdef USE_SSL
-#define free_func free__func
-#include <openssl/ssl.h>
-#undef free_func
PRIVATE SSL * Handle = NULL; /* The SSL Handle */
#endif /* USE_SSL */
@@ -197,7 +195,7 @@ PUBLIC BOOL HTAAMethod_inList ARGS2(HTAAMethod, method,
char *item;
while (NULL != (item = (char*)HTList_nextObject(cur))) {
- CTRACE(tfp, " %s", item);
+ CTRACE((tfp, " %s", item));
if (method == HTAAMethod_enum(item))
return YES;
}
@@ -346,8 +344,8 @@ PUBLIC char *HTAA_makeProtectionTemplate ARGS1(CONST char *, docname)
else
StrAllocCopy(template, "*");
- CTRACE(tfp, "make_template: made template `%s' for file `%s'\n",
- template, docname);
+ CTRACE((tfp, "make_template: made template `%s' for file `%s'\n",
+ template, docname));
return template;
}
@@ -550,9 +548,9 @@ PUBLIC char *HTAA_getUnfoldedLine NOARGS
BOOL peek_for_folding = NO;
if (in_soc < 0) {
- CTRACE(tfp, "%s %s\n",
+ CTRACE((tfp, "%s %s\n",
"HTAA_getUnfoldedLine: buffer not initialized",
- "with function HTAA_setupReader()");
+ "with function HTAA_setupReader()"));
return NULL;
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAccess.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAccess.c
index d0a25dbcc06..61097ce34ab 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAccess.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAccess.c
@@ -64,14 +64,13 @@
#include <LYUtils.h>
#include <LYLeaks.h>
-extern HTCJKlang HTCJK;
-
/*
** These flags may be set to modify the operation of this module
*/
PUBLIC char * HTClientHost = NULL; /* Name of remote login host if any */
PUBLIC FILE * HTlogfile = NULL; /* File to which to output one-liners */
PUBLIC BOOL HTSecure = NO; /* Disable access for telnet users? */
+PUBLIC BOOL HTPermitRedir = NO; /* Always allow redirection in getfile()? */
PUBLIC BOOL using_proxy = NO; /* are we using a proxy gateway? */
@@ -268,15 +267,16 @@ PUBLIC BOOL override_proxy ARGS1(
}
Host = (((at = strchr(host, '@')) != NULL) ? (at+1) : host);
- if ((acc_method = HTParse(addr, "", PARSE_ACCESS))) {
- if (!strcmp("file", acc_method) &&
- (!strcmp(Host, "localhost") ||
#ifdef VMS
- !strcasecomp(Host, HTHostName())
+#define CompareHostname(a,b) strcasecomp(a, b)
#else
- !strcmp(Host, HTHostName())
+#define CompareHostname(a,b) strcmp(a, b)
#endif /* VMS */
- )) {
+
+ if ((acc_method = HTParse(addr, "", PARSE_ACCESS))) {
+ if (!strcmp("file", acc_method) &&
+ (!strcmp(Host, "localhost") ||
+ !CompareHostname(Host, HTHostName()))) {
FREE(host);
FREE(acc_method);
return YES;
@@ -315,6 +315,9 @@ PUBLIC BOOL override_proxy ARGS1(
#ifndef DISABLE_FINGER
else if (!strcmp(acc_method, "finger")) port = 79;
#endif
+ else if (!strcmp(acc_method, "telnet")) port = 23;
+ else if (!strcmp(acc_method, "tn3270")) port = 23;
+ else if (!strcmp(acc_method, "rlogin")) port = 513;
FREE(acc_method);
}
}
@@ -351,6 +354,15 @@ PUBLIC BOOL override_proxy ARGS1(
FREE(host);
return YES;
}
+#ifdef CJK_EX /* ASATAKU PROXY HACK */
+ if ((!templ_port || templ_port == port) &&
+ (t_len > 0 && t_len <= h_len &&
+ isdigit(UCH(*no_proxy)) && !strncmp(host, no_proxy, t_len))) {
+ FREE(host);
+ return YES;
+ }
+#endif /* ASATAKU PROXY HACK */
+
if (*end)
no_proxy = (end + 1);
else
@@ -379,23 +391,40 @@ PRIVATE int get_physical ARGS2(
char * acc_method = NULL; /* Name of access method */
char * physical = NULL;
char * Server_addr = NULL;
+ BOOL override_flag = NO;
+
+ /*
+ ** Make sure the using_proxy variable is FALSE.
+ */
+ using_proxy = NO;
#ifndef NO_RULES
physical = HTTranslate(addr);
if (!physical) {
+ if (redirecting_url) {
+ return HT_REDIRECTING;
+ }
return HT_FORBIDDEN;
}
if (anchor->isISMAPScript == TRUE) {
StrAllocCat(physical, "?0,0");
- CTRACE(tfp, "HTAccess: Appending '?0,0' coordinate pair.\n");
+ CTRACE((tfp, "HTAccess: Appending '?0,0' coordinate pair.\n"));
+ }
+ if (!strncmp(physical, "Proxied=", 8)) {
+ HTAnchor_setPhysical(anchor, physical + 8);
+ using_proxy = YES;
+ } else if (!strncmp(physical, "NoProxy=", 8)) {
+ HTAnchor_setPhysical(anchor, physical + 8);
+ override_flag = YES;
+ } else {
+ HTAnchor_setPhysical(anchor, physical);
}
- HTAnchor_setPhysical(anchor, physical);
FREE(physical); /* free our copy */
#else
if (anchor->isISMAPScript == TRUE) {
StrAllocCopy(physical, addr);
StrAllocCat(physical, "?0,0");
- CTRACE(tfp, "HTAccess: Appending '?0,0' coordinate pair.\n");
+ CTRACE((tfp, "HTAccess: Appending '?0,0' coordinate pair.\n"));
HTAnchor_setPhysical(anchor, physical);
FREE(physical); /* free our copy */
} else {
@@ -410,65 +439,63 @@ PRIVATE int get_physical ARGS2(
** Check whether gateway access has been set up for this.
**
** This function can be replaced by the rule system above.
+ **
+ ** If the rule system has already determined that we should
+ ** use a proxy, or that we shouldn't, ignore proxy-related
+ ** settings, don't use no_proxy either.
*/
#define USE_GATEWAYS
#ifdef USE_GATEWAYS
- /*
- ** Make sure the using_proxy variable is FALSE.
- */
- using_proxy = NO;
- if (!strcasecomp(acc_method, "news")) {
- /*
- ** News is different, so we need to check the name of the server,
- ** as well as the default port for selective exclusions.
- */
- char *host = NULL;
- if ((host = HTParse(addr, "", PARSE_HOST))) {
- if (strchr(host, ':') == NULL) {
+ if (!override_flag && !using_proxy) { /* else ignore no_proxy env var */
+ if (!strcasecomp(acc_method, "news")) {
+ /*
+ ** News is different, so we need to check the name of the server,
+ ** as well as the default port for selective exclusions.
+ */
+ char *host = NULL;
+ if ((host = HTParse(addr, "", PARSE_HOST))) {
+ if (strchr(host, ':') == NULL) {
+ StrAllocCopy(Server_addr, "news://");
+ StrAllocCat(Server_addr, host);
+ StrAllocCat(Server_addr, ":119/");
+ }
+ FREE(host);
+ } else if (getenv("NNTPSERVER") != NULL) {
StrAllocCopy(Server_addr, "news://");
- StrAllocCat(Server_addr, host);
+ StrAllocCat(Server_addr, (char *)getenv("NNTPSERVER"));
StrAllocCat(Server_addr, ":119/");
}
- FREE(host);
- } else if (getenv("NNTPSERVER") != NULL) {
- StrAllocCopy(Server_addr, "news://");
- StrAllocCat(Server_addr, (char *)getenv("NNTPSERVER"));
- StrAllocCat(Server_addr, ":119/");
- }
- } else if (!strcasecomp(acc_method, "wais")) {
- /*
+ } else if (!strcasecomp(acc_method, "wais")) {
+ /*
** Wais also needs checking of the default port
** for selective exclusions.
*/
- char *host = NULL;
- if ((host = HTParse(addr, "", PARSE_HOST))) {
- if (!(strchr(host, ':'))) {
- StrAllocCopy(Server_addr, "wais://");
- StrAllocCat(Server_addr, host);
- StrAllocCat(Server_addr, ":210/");
+ char *host = NULL;
+ if ((host = HTParse(addr, "", PARSE_HOST))) {
+ if (!(strchr(host, ':'))) {
+ StrAllocCopy(Server_addr, "wais://");
+ StrAllocCat(Server_addr, host);
+ StrAllocCat(Server_addr, ":210/");
+ }
+ FREE(host);
}
- FREE(host);
- }
- else
+ else
+ StrAllocCopy(Server_addr, addr);
+ } else {
StrAllocCopy(Server_addr, addr);
- } else {
- StrAllocCopy(Server_addr, addr);
+ }
+ override_flag = override_proxy(Server_addr);
}
- if (!override_proxy(Server_addr)) {
- char * gateway_parameter, *gateway, *proxy;
+ if (!override_flag && !using_proxy) {
+ char * gateway_parameter = NULL, *gateway, *proxy;
/*
** Search for gateways.
*/
- gateway_parameter = (char *)calloc(1, (strlen(acc_method) + 20));
- if (gateway_parameter == NULL)
- outofmem(__FILE__, "HTLoad");
- strcpy(gateway_parameter, "WWW_");
- strcat(gateway_parameter, acc_method);
- strcat(gateway_parameter, "_GATEWAY");
- gateway = (char *)getenv(gateway_parameter); /* coerce for decstation */
+ HTSprintf0(&gateway_parameter, "WWW_%s_GATEWAY", acc_method);
+ gateway = getenv(gateway_parameter); /* coerce for decstation */
/*
** Search for proxy servers.
@@ -477,17 +504,16 @@ PRIVATE int get_physical ARGS2(
/*
** If we got to here, a file URL is for ftp on a remote host. - FM
*/
- strcpy(gateway_parameter, "ftp");
+ strcpy(gateway_parameter, "ftp_proxy");
else
- strcpy(gateway_parameter, acc_method);
- strcat(gateway_parameter, "_proxy");
- proxy = (char *)getenv(gateway_parameter);
+ sprintf(gateway_parameter, "%s_proxy", acc_method);
+ proxy = getenv(gateway_parameter);
FREE(gateway_parameter);
if (gateway)
- CTRACE(tfp, "Gateway found: %s\n", gateway);
+ CTRACE((tfp, "Gateway found: %s\n", gateway));
if (proxy)
- CTRACE(tfp, "proxy server found: %s\n", proxy);
+ CTRACE((tfp, "proxy server found: %s\n", proxy));
/*
** Proxy servers have precedence over gateway servers.
@@ -495,6 +521,14 @@ PRIVATE int get_physical ARGS2(
if (proxy) {
char * gatewayed = NULL;
StrAllocCopy(gatewayed,proxy);
+ if (!strncmp(gatewayed, "http", 4)) {
+ char *cp = strrchr(gatewayed, '/');
+ /* Append a slash to the proxy specification if it doesn't
+ * end in one but otherwise looks normal (starts with "http",
+ * has no '/' other than ones before the hostname). - kw */
+ if (cp && (cp - gatewayed) <= 7)
+ LYAddHtmlSep(&gatewayed);
+ }
/*
** Ensure that the proxy server uses ftp for file URLs. - FM
*/
@@ -578,13 +612,16 @@ PUBLIC void LYUCPushAssumed ARGS1(
if (anchor_UCI && anchor_UCI->MIMEname) {
pushed_assume_MIMEname = UCAssume_MIMEcharset;
UCAssume_MIMEcharset = NULL;
+ if (HTCJK == JAPANESE)
+ StrAllocCopy(UCAssume_MIMEcharset, pushed_assume_MIMEname);
+ else
StrAllocCopy(UCAssume_MIMEcharset, anchor_UCI->MIMEname);
pushed_assume_LYhndl = anchor_LYhndl;
/* some diagnostics */
if (UCLYhndl_for_unspec != anchor_LYhndl)
- CTRACE(tfp, "LYUCPushAssumed: UCLYhndl_for_unspec changed %d -> %d\n",
+ CTRACE((tfp, "LYUCPushAssumed: UCLYhndl_for_unspec changed %d -> %d\n",
UCLYhndl_for_unspec,
- anchor_LYhndl);
+ anchor_LYhndl));
UCLYhndl_for_unspec = anchor_LYhndl;
return;
}
@@ -603,9 +640,9 @@ PUBLIC int LYUCPopAssumed NOARGS
if (pushed_assume_LYhndl >= 0) {
/* some diagnostics */
if (UCLYhndl_for_unspec != pushed_assume_LYhndl)
- CTRACE(tfp, "LYUCPopAssumed: UCLYhndl_for_unspec changed %d -> %d\n",
+ CTRACE((tfp, "LYUCPopAssumed: UCLYhndl_for_unspec changed %d -> %d\n",
UCLYhndl_for_unspec,
- pushed_assume_LYhndl);
+ pushed_assume_LYhndl));
UCLYhndl_for_unspec = pushed_assume_LYhndl;
pushed_assume_LYhndl = -1;
FREE(UCAssume_MIMEcharset);
@@ -641,11 +678,17 @@ PRIVATE int HTLoad ARGS4(
HTProtocol *p;
int status = get_physical(addr, anchor);
if (status == HT_FORBIDDEN) {
+ /* prevent crash if telnet or similar was forbidden by rule. - kw */
+ LYFixCursesOn("show alert:");
return HTLoadError(sink, 500, gettext("Access forbidden by rule"));
+ } else if (status == HT_REDIRECTING) {
+ return status; /* fake redirection by rule, to redirecting_url */
}
if (status < 0)
return status; /* Can't resolve or forbidden */
+ /* prevent crash if telnet or similar mapped or proxied by rule. - kw */
+ LYFixCursesOnForAccess(addr, HTAnchor_physical(anchor));
p = (HTProtocol *)HTAnchor_protocol(anchor);
anchor->underway = TRUE; /* Hack to deal with caching */
status= (*(p->load))(HTAnchor_physical(anchor),
@@ -668,6 +711,8 @@ PUBLIC HTStream *HTSaveStream ARGS1(
return (*p->saveStream)(anchor);
}
+PUBLIC int redirection_attempts = 0; /* counter in HTLoadDocument */
+
/* Load a document - with logging etc HTLoadDocument()
** ----------------------------------
**
@@ -697,9 +742,8 @@ PRIVATE BOOL HTLoadDocument ARGS4(
CONST char * address_to_load = full_address;
char *cp;
BOOL ForcingNoCache = LYforce_no_cache;
- static int redirection_attempts = 0;
- CTRACE (tfp, "HTAccess: loading document %s\n", address_to_load);
+ CTRACE((tfp, "HTAccess: loading document %s\n", address_to_load));
/*
** Free use_this_url_instead and reset permanent_redirection
@@ -755,9 +799,9 @@ PRIVATE BOOL HTLoadDocument ARGS4(
!strncmp(cp, "Location=", 9)) {
DocAddress NewDoc;
- CTRACE (tfp, "HTAccess: '%s' is a redirection URL.\n",
- anchor->address);
- CTRACE (tfp, "HTAccess: Redirecting to '%s'\n", cp+9);
+ CTRACE((tfp, "HTAccess: '%s' is a redirection URL.\n",
+ anchor->address));
+ CTRACE((tfp, "HTAccess: Redirecting to '%s'\n", cp+9));
/*
** Don't exceed the redirection_attempts limit. - FM
@@ -779,7 +823,7 @@ PRIVATE BOOL HTLoadDocument ARGS4(
NewDoc.bookmark = anchor->bookmark;
NewDoc.isHEAD = anchor->isHEAD;
NewDoc.safe = anchor->safe;
- anchor = (HTParentAnchor *)HTAnchor_findAddress(&NewDoc);
+ anchor = HTAnchor_parent(HTAnchor_findAddress(&NewDoc));
}
}
/*
@@ -855,7 +899,7 @@ PRIVATE BOOL HTLoadDocument ARGS4(
strncmp(full_address, "LYNXIMGMAP:", 11)))
#endif /* TRACK_INTERNAL_LINKS */
{
- CTRACE(tfp, "HTAccess: Document already in memory.\n");
+ CTRACE((tfp, "HTAccess: Document already in memory.\n"));
HText_select(text);
#ifdef DIRED_SUPPORT
@@ -866,7 +910,7 @@ PRIVATE BOOL HTLoadDocument ARGS4(
return YES;
} else {
ForcingNoCache = YES;
- CTRACE(tfp, "HTAccess: Auto-reloading document.\n");
+ CTRACE((tfp, "HTAccess: Auto-reloading document.\n"));
}
}
@@ -881,7 +925,7 @@ PRIVATE BOOL HTLoadDocument ARGS4(
FREE(anchor->title);
}
status = HTLoad(address_to_load, anchor, format_out, sink);
- CTRACE(tfp, "HTAccess: status=%d\n", status);
+ CTRACE((tfp, "HTAccess: status=%d\n", status));
/*
** Log the access if necessary.
@@ -895,11 +939,11 @@ PRIVATE BOOL HTLoadDocument ARGS4(
status < 0 ? "FAIL" : "GET",
full_address);
fflush(HTlogfile); /* Actually update it on disk */
- CTRACE(tfp, "Log: %24.24s %s %s %s\n",
+ CTRACE((tfp, "Log: %24.24s %s %s %s\n",
ctime(&theTime),
HTClientHost ? HTClientHost : "local",
status < 0 ? "FAIL" : "GET",
- full_address);
+ full_address));
}
/*
@@ -923,11 +967,18 @@ PRIVATE BOOL HTLoadDocument ARGS4(
** So, instead, we'll go all the way back to the top of getfile
** in LYGetFile.c when the status is HT_REDIRECTING. This may
** seem bizarre, but it works like a charm! - FM
+ **
+ ** Actually, the location header for redirections is now again
+ ** picked up in HTMIME.c. But that's an internal matter between
+ ** HTTP.c and HTMIME.c, is still under control of HTLoadHTTP for
+ ** http URLs, is done in a way that doesn't load the redirection
+ ** response's body (except when wanted as an error fallback), and
+ ** thus need not concern us here. - kw 1999-12-02
*/
- CTRACE(tfp, "HTAccess: '%s' is a redirection URL.\n",
- address_to_load);
- CTRACE(tfp, "HTAccess: Redirecting to '%s'\n",
- redirecting_url);
+ CTRACE((tfp, "HTAccess: '%s' is a redirection URL.\n",
+ address_to_load));
+ CTRACE((tfp, "HTAccess: Redirecting to '%s'\n",
+ redirecting_url));
/*
** Prevent circular references.
*/
@@ -967,32 +1018,32 @@ PRIVATE BOOL HTLoadDocument ARGS4(
permanent_redirection = FALSE;
if (status == HT_LOADED) {
- CTRACE(tfp, "HTAccess: `%s' has been accessed.\n",
- full_address);
+ CTRACE((tfp, "HTAccess: `%s' has been accessed.\n",
+ full_address));
return YES;
}
if (status == HT_PARTIAL_CONTENT) {
HTAlert(gettext("Loading incomplete."));
- CTRACE(tfp, "HTAccess: `%s' has been accessed, partial content.\n",
- full_address);
+ CTRACE((tfp, "HTAccess: `%s' has been accessed, partial content.\n",
+ full_address));
return YES;
}
if (status == HT_NO_DATA) {
- CTRACE(tfp, "HTAccess: `%s' has been accessed, No data left.\n",
- full_address);
+ CTRACE((tfp, "HTAccess: `%s' has been accessed, No data left.\n",
+ full_address));
return NO;
}
if (status == HT_NOT_LOADED) {
- CTRACE(tfp, "HTAccess: `%s' has been accessed, No data loaded.\n",
- full_address);
+ CTRACE((tfp, "HTAccess: `%s' has been accessed, No data loaded.\n",
+ full_address));
return NO;
}
if (status == HT_INTERRUPTED) {
- CTRACE(tfp, "HTAccess: `%s' has been accessed, transfer interrupted.\n",
- full_address);
+ CTRACE((tfp, "HTAccess: `%s' has been accessed, transfer interrupted.\n",
+ full_address));
return NO;
}
@@ -1004,9 +1055,9 @@ PRIVATE BOOL HTLoadDocument ARGS4(
fprintf(stderr,
gettext("**** HTAccess: socket or file number returned by obsolete load routine!\n"));
fprintf(stderr,
- gettext("**** HTAccess: Internal software error. Please mail lynx_dev@sig.net!\n"));
+ gettext("**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"));
fprintf(stderr, gettext("**** HTAccess: Status returned was: %d\n"),status);
- exit(-1);
+ exit(EXIT_FAILURE);
}
/* Failure in accessing a document */
@@ -1018,7 +1069,7 @@ PRIVATE BOOL HTLoadDocument ARGS4(
_HTProgress(cp);
FREE(cp);
- CTRACE(tfp, "HTAccess: Can't access `%s'\n", full_address);
+ CTRACE((tfp, "HTAccess: Can't access `%s'\n", full_address));
HTLoadError(sink, 500, gettext("Unable to access document."));
return NO;
} /* HTLoadDocument */
@@ -1193,7 +1244,7 @@ PUBLIC BOOL HTSearch ARGS2(
CONST char * p, *s, *e; /* Pointers into keywords */
char * address = NULL;
BOOL result;
- char * escaped = (char *)calloc(1, ((strlen(keywords)*3) + 1));
+ char * escaped = typecallocn(char, (strlen(keywords)*3) + 1);
static CONST BOOL isAcceptable[96] =
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
@@ -1217,12 +1268,12 @@ PUBLIC BOOL HTSearch ARGS2(
for (e = s + strlen(s); e > s && WHITE(*(e-1)); e--) /* Scan */
; /* Skip trailers */
for (q = escaped, p = s; p < e; p++) { /* Scan stripped field */
- unsigned char c = (unsigned char)TOASCII(*p);
+ unsigned char c = UCH(TOASCII(*p));
if (WHITE(*p)) {
*q++ = '+';
} else if (HTCJK != NOCJK) {
*q++ = *p;
- } else if (c>=32 && c<=(unsigned char)127 && isAcceptable[c-32]) {
+ } else if (c>=32 && c<=UCH(127) && isAcceptable[c-32]) {
*q++ = *p; /* 930706 TBL for MVS bug */
} else {
*q++ = '%';
@@ -1312,7 +1363,7 @@ PUBLIC HTParentAnchor * HTHomeAnchor NOARGS
FILE * fp = fopen(REMOTE_POINTER, "r");
char * status;
if (fp) {
- my_home_document = (char*)calloc(1, MAX_FILE_NAME);
+ my_home_document = typecallocn(char, MAX_FILE_NAME);
if (my_home_document == NULL)
outofmem(__FILE__, "HTHomeAnchor");
status = fgets(my_home_document, MAX_FILE_NAME, fp);
@@ -1325,7 +1376,7 @@ PUBLIC HTParentAnchor * HTHomeAnchor NOARGS
StrAllocCopy(my_home_document, REMOTE_ADDRESS);
}
-#ifdef unix
+#ifdef UNIX
if (my_home_document == NULL) {
FILE * fp = NULL;
CONST char * home = (CONST char*)getenv("HOME");
@@ -1341,20 +1392,20 @@ PUBLIC HTParentAnchor * HTHomeAnchor NOARGS
if (fp) {
fclose(fp);
} else {
- CTRACE(tfp, "HTBrowse: No local home document ~/%s or %s\n",
- PERSONAL_DEFAULT, LOCAL_DEFAULT_FILE);
+ CTRACE((tfp, "HTBrowse: No local home document ~/%s or %s\n",
+ PERSONAL_DEFAULT, LOCAL_DEFAULT_FILE));
FREE(my_home_document);
}
}
-#endif /* unix */
+#endif /* UNIX */
ref = HTParse((my_home_document ?
my_home_document : (HTClientHost ?
REMOTE_ADDRESS : LAST_RESORT)),
"file:",
PARSE_ACCESS|PARSE_HOST|PARSE_PATH|PARSE_PUNCTUATION);
if (my_home_document) {
- CTRACE(tfp, "HTAccess: Using custom home page %s i.e., address %s\n",
- my_home_document, ref);
+ CTRACE((tfp, "HTAccess: Using custom home page %s i.e., address %s\n",
+ my_home_document, ref));
FREE(my_home_document);
}
anchor = (HTParentAnchor*)HTAnchor_findAddress(ref);
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAccess.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAccess.h
index 2cfd49d518d..0c763051716 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAccess.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAccess.h
@@ -13,6 +13,8 @@
extern char * use_this_url_instead;
+extern int redirection_attempts;
+
/* Definition uses:
*/
#include <HTAnchor.h>
@@ -76,6 +78,7 @@ extern int HTDiag; /* Flag: load source as plain text */
extern char * HTClientHost; /* Name or number of telnetting host */
extern FILE * HTlogfile; /* File to output one-liners to */
extern BOOL HTSecure; /* Disable security holes? */
+extern BOOL HTPermitRedir; /* Special flag for getfile() */
extern HTStream* HTOutputStream; /* For non-interactive, set this */
extern HTFormat HTOutputFormat; /* To convert on load, set this */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAnchor.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAnchor.c
index 22af2bfb379..d336cb7b796 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAnchor.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAnchor.c
@@ -21,6 +21,7 @@
#include <UCAux.h>
#include <UCMap.h>
+#include <LYUtils.h>
#include <LYCharSets.h>
#include <LYLeaks.h>
@@ -66,18 +67,22 @@ PRIVATE HTList **adult_table = 0; /* Point to table of lists of all parents */
*/
PRIVATE HTParentAnchor * HTParentAnchor_new NOARGS
{
- HTParentAnchor *newAnchor =
- (HTParentAnchor *)calloc(1, sizeof(HTParentAnchor)); /* zero-filled */
+ HTParentAnchor *newAnchor = typecalloc(HTParentAnchor);
if (newAnchor == NULL)
outofmem(__FILE__, "HTParentAnchor_new");
newAnchor->parent = newAnchor;
- newAnchor->bookmark = NULL; /* Bookmark filename. - FM */
+ newAnchor->bookmark = NULL; /* Bookmark filename. - FM */
newAnchor->isISMAPScript = FALSE; /* Lynx appends ?0,0 if TRUE. - FM */
newAnchor->isHEAD = FALSE; /* HEAD request if TRUE. - FM */
newAnchor->safe = FALSE; /* Safe. - FM */
+#ifdef SOURCE_CACHE
+ newAnchor->source_cache_file = NULL;
+ newAnchor->source_cache_chunk = NULL;
+#endif
newAnchor->FileCache = NULL; /* Path to a disk-cached copy. - FM */
- newAnchor->SugFname = NULL; /* Suggested filename. - FM */
- newAnchor->RevTitle = NULL; /* TITLE for a LINK with REV. - FM */
+ newAnchor->SugFname = NULL; /* Suggested filename. - FM */
+ newAnchor->RevTitle = NULL; /* TITLE for a LINK with REV. - FM */
+ newAnchor->citehost = NULL; /* LINK REL=citehost - RDC */
newAnchor->cache_control = NULL; /* Cache-Control. - FM */
newAnchor->no_cache = FALSE; /* no-cache? - FM */
newAnchor->content_type = NULL; /* Content-Type. - FM */
@@ -98,7 +103,12 @@ PRIVATE HTParentAnchor * HTParentAnchor_new NOARGS
PRIVATE HTChildAnchor * HTChildAnchor_new NOARGS
{
- return (HTChildAnchor *)calloc(1, sizeof(HTChildAnchor)); /* zero-filled */
+ HTChildAnchor *p;
+
+ p = typecalloc(HTChildAnchor);
+ if (p == NULL)
+ outofmem(__FILE__, "HTChildAnchor_new");
+ return p;
}
@@ -124,7 +134,7 @@ PRIVATE BOOL HTEquivalent ARGS2(
}
return( TOUPPER(*s) == TOUPPER(*t));
} else {
- return(s == t); /* Two NULLs are equivalent, aren't they ? */
+ return(s == t); /* Two NULLs are equivalent, aren't they ? */
}
}
@@ -144,14 +154,20 @@ PRIVATE BOOL HTIdentical ARGS2(
CONST char *, t)
{
if (s && t) { /* Make sure they point to something */
+#ifdef SH_EX /* 1998/04/28 (Tue) 22:02:58 */
+ if (*s == 'P' || *t == 'P') {
+ if (strcmp(s + 1, "Name") == 0 || strcmp(t + 1, "Name") == 0)
+ return NO;
+ }
+#endif
for (; *s && *t; s++, t++) {
if (*s != *t) {
return(NO);
}
}
- return(*s == *t);
+ return (BOOL) (*s == *t);
} else {
- return(s == t); /* Two NULLs are identical, aren't they ? */
+ return (BOOL) (s == t); /* Two NULLs are identical, aren't they ? */
}
}
#endif /* CASE_INSENSITIVE_ANCHORS */
@@ -171,7 +187,7 @@ PUBLIC HTChildAnchor * HTAnchor_findChild ARGS2(
HTList *kids;
if (!parent) {
- CTRACE(tfp, "HTAnchor_findChild called with NULL parent.\n");
+ CTRACE((tfp, "HTAnchor_findChild called with NULL parent.\n"));
return(NULL);
}
if ((kids = parent->children) != 0) {
@@ -186,8 +202,8 @@ PUBLIC HTChildAnchor * HTAnchor_findChild ARGS2(
if (HTIdentical(child->tag, tag)) /* Case sensitive - FM */
#endif /* CASE_INSENSITIVE_ANCHORS */
{
- CTRACE(tfp, "Child anchor %p of parent %p with name `%s' already exists.\n",
- (void *)child, (void *)parent, tag);
+ CTRACE((tfp, "Child anchor %p of parent %p with name `%s' already exists.\n",
+ (void *)child, (void *)parent, tag));
return(child);
}
}
@@ -197,12 +213,10 @@ PUBLIC HTChildAnchor * HTAnchor_findChild ARGS2(
}
child = HTChildAnchor_new();
- if (child == NULL)
- outofmem(__FILE__, "HTChildAnchor_new");
- CTRACE(tfp, "new Anchor %p named `%s' is child of %p\n",
+ CTRACE((tfp, "HTAnchor: New Anchor %p named `%s' is child of %p\n",
(void *)child,
tag ? tag : (CONST char *)"",
- (void *)parent); /* int for apollo */
+ (void *)parent)); /* int for apollo */
HTList_addObject (parent->children, child);
child->parent = parent;
StrAllocCopy(child->tag, tag);
@@ -225,7 +239,7 @@ PUBLIC HTChildAnchor * HTAnchor_findChildAndLink ARGS4(
{
HTChildAnchor * child = HTAnchor_findChild(parent, tag);
- CTRACE(tfp,"Entered HTAnchor_findChildAndLink\n");
+ CTRACE((tfp,"Entered HTAnchor_findChildAndLink\n"));
if (href && *href) {
char *relative_to = HTAnchor_address((HTAnchor *)parent);
@@ -259,15 +273,15 @@ PUBLIC HTChildAnchor * HTAnchor_findChildAndLink ARGS4(
testdest1 = child->mainLink.dest;
if (testdest1) {
nlinks = 1 + HTList_count(child->links);
- CTRACE(tfp,
+ CTRACE((tfp,
"*** Duplicate ChildAnchor %p named `%s' with %d links",
- child, tag, nlinks);
+ child, tag, nlinks));
if (dest == testdest1 && ltype == child->mainLink.type) {
- CTRACE(tfp,", same dest %p and type, keeping it\n",
- testdest1);
+ CTRACE((tfp,", same dest %p and type, keeping it\n",
+ testdest1));
} else {
- CTRACE(tfp,", different dest %p, creating unnamed child\n",
- testdest1);
+ CTRACE((tfp,", different dest %p, creating unnamed child\n",
+ testdest1));
child = HTAnchor_findChild(parent, 0);
}
}
@@ -304,11 +318,11 @@ PRIVATE void free_adult_table NOARGS
adult_table[i_counter] = HTAp_freeme->next;
if (HTAp_freeme->object) {
parent = (HTParentAnchor *)HTAp_freeme->object;
- CTRACE(tfp, "delete anchor:%d/%d,%d,%d %s\n",
+ CTRACE((tfp, "delete anchor:%d/%d,%d,%d %s\n",
i_counter, HTList_count(HTAp_freeme) + 1,
(parent->physical ? 1 : 0),
(int)parent->underway,
- (parent->address ? parent->address : "(no address)"));
+ (parent->address ? parent->address : "(no address)")));
parent->underway = FALSE;
HTAnchor_delete(parent);
}
@@ -333,7 +347,7 @@ PUBLIC HTAnchor * HTAnchor_findAddress ARGS1(
/* Anchor tag specified ? */
char *tag = HTParse(newdoc->address, "", PARSE_ANCHOR);
- CTRACE(tfp,"Entered HTAnchor_findAddress\n");
+ CTRACE((tfp,"Entered HTAnchor_findAddress\n"));
/*
** If the address represents a sub-anchor, we recursively load its
@@ -374,7 +388,7 @@ PUBLIC HTAnchor * HTAnchor_findAddress ARGS1(
*/
hash = HASH_FUNCTION(newdoc->address);
if (!adult_table) {
- adult_table = (HTList **)calloc(HASH_SIZE, sizeof(HTList *));
+ adult_table = typecallocn(HTList *, HASH_SIZE);
if (!adult_table)
outofmem(__FILE__, "HTAnchor_findAddress");
#ifdef LY_FIND_LEAKS
@@ -401,8 +415,8 @@ PUBLIC HTAnchor * HTAnchor_findAddress ARGS1(
foundAnchor->isHEAD == newdoc->isHEAD)
#endif /* CASE_INSENSITIVE_ANCHORS */
{
- CTRACE(tfp, "Anchor %p with address `%s' already exists.\n",
- (void *)foundAnchor, newdoc->address);
+ CTRACE((tfp, "Anchor %p with address `%s' already exists.\n",
+ (void *)foundAnchor, newdoc->address));
return (HTAnchor *)foundAnchor;
}
}
@@ -411,8 +425,8 @@ PUBLIC HTAnchor * HTAnchor_findAddress ARGS1(
** Node not found: create new anchor.
*/
foundAnchor = HTParentAnchor_new();
- CTRACE(tfp, "New anchor %p has hash %d and address `%s'\n",
- (void *)foundAnchor, hash, newdoc->address);
+ CTRACE((tfp, "New anchor %p has hash %d and address `%s'\n",
+ (void *)foundAnchor, hash, newdoc->address));
StrAllocCopy(foundAnchor->address, newdoc->address);
if (newdoc->post_data)
StrAllocCopy(foundAnchor->post_data, newdoc->post_data);
@@ -427,7 +441,25 @@ PUBLIC HTAnchor * HTAnchor_findAddress ARGS1(
return (HTAnchor *)foundAnchor;
}
}
-
+/* Create new or find old named anchor - simple form
+** -------------------------------------------------
+**
+** Like the previous one, but simpler to use for simple cases.
+** No post data etc. can be supplied. - kw
+*/
+PUBLIC HTAnchor * HTAnchor_findSimpleAddress ARGS1(
+ CONST char *, url)
+{
+ DocAddress urldoc;
+
+ urldoc.address = (char *)url; /* ignore warning, it IS treated like const - kw */
+ urldoc.post_data = NULL;
+ urldoc.post_content_type = NULL;
+ urldoc.bookmark = NULL;
+ urldoc.isHEAD = FALSE;
+ urldoc.safe = FALSE;
+ return HTAnchor_findAddress(&urldoc);
+}
/* Delete an anchor and possibly related things (auto garbage collection)
** --------------------------------------------
@@ -566,6 +598,28 @@ PRIVATE void deleteLinks ARGS1(
}
}
+#ifdef SOURCE_CACHE
+PUBLIC void HTAnchor_clearSourceCache ARGS1(
+ HTParentAnchor *, me)
+{
+ /*
+ * Clean up the source cache, if any.
+ */
+ if (me->source_cache_file) {
+ CTRACE((tfp, "SourceCache: Removing file %s\n",
+ me->source_cache_file));
+ LYRemoveTemp(me->source_cache_file);
+ FREE(me->source_cache_file);
+ }
+ if (me->source_cache_chunk) {
+ CTRACE((tfp, "SourceCache: Removing memory chunk %p\n",
+ (void *)me->source_cache_chunk));
+ HTChunkFree(me->source_cache_chunk);
+ me->source_cache_chunk = NULL;
+ }
+}
+#endif /* SOURCE_CACHE */
+
PUBLIC BOOL HTAnchor_delete ARGS1(
HTParentAnchor *, me)
{
@@ -689,6 +743,10 @@ PUBLIC BOOL HTAnchor_delete ARGS1(
FREE(me->bookmark);
FREE(me->owner);
FREE(me->RevTitle);
+ FREE(me->citehost);
+#ifdef SOURCE_CACHE
+ HTAnchor_clearSourceCache(me);
+#endif
if (me->FileCache) {
FILE *fd;
if ((fd = fopen(me->FileCache, "r")) != NULL) {
@@ -713,7 +771,7 @@ PUBLIC BOOL HTAnchor_delete ARGS1(
FREE(me->last_modified);
FREE(me->ETag);
FREE(me->server);
-#ifdef USE_HASH
+#ifdef USE_COLOR_STYLE
FREE(me->style);
#endif
@@ -721,7 +779,7 @@ PUBLIC BOOL HTAnchor_delete ARGS1(
* Remove ourselves from the hash table's list.
*/
if (adult_table) {
- unsigned short int usi_hash = HASH_FUNCTION(me->address);
+ unsigned short usi_hash = (unsigned short) HASH_FUNCTION(me->address);
if (adult_table[usi_hash]) {
HTList_removeObject(adult_table[usi_hash], (void *)me);
@@ -803,13 +861,8 @@ PUBLIC char * HTAnchor_address ARGS1(
!((HTChildAnchor *)me)->tag) { /* it's an adult or no tag */
StrAllocCopy(addr, me->parent->address);
} else { /* it's a named child */
- addr = malloc(2 +
- strlen(me->parent->address) +
- strlen(((HTChildAnchor *)me)->tag));
- if (addr == NULL)
- outofmem(__FILE__, "HTAnchor_address");
- sprintf(addr, "%s#%s",
- me->parent->address, ((HTChildAnchor *)me)->tag);
+ HTSprintf0(&addr, "%s#%s",
+ me->parent->address, ((HTChildAnchor *)me)->tag);
}
}
return(addr);
@@ -831,7 +884,7 @@ PUBLIC HTFormat HTAnchor_format ARGS1(
PUBLIC void HTAnchor_setIndex ARGS2(
HTParentAnchor *, me,
- char *, address)
+ char *, address)
{
if (me) {
me->isIndex = YES;
@@ -841,7 +894,7 @@ PUBLIC void HTAnchor_setIndex ARGS2(
PUBLIC void HTAnchor_setPrompt ARGS2(
HTParentAnchor *, me,
- char *, prompt)
+ char *, prompt)
{
if (me) {
StrAllocCopy(me->isIndexPrompt, prompt);
@@ -866,10 +919,10 @@ PUBLIC BOOL HTAnchor_isISMAPScript ARGS1(
PUBLIC BOOL HTAnchor_hasChildren ARGS1(
HTParentAnchor *, me)
{
- return( me ? ! HTList_isEmpty(me->children) : NO);
+ return (BOOL) ( me ? ! HTList_isEmpty(me->children) : NO);
}
-#if defined(USE_HASH)
+#if defined(USE_COLOR_STYLE)
/* Style handling.
*/
PUBLIC CONST char * HTAnchor_style ARGS1(
@@ -907,18 +960,18 @@ PUBLIC void HTAnchor_setTitle ARGS2(
if (title) {
StrAllocCopy(me->title, title);
for (i = 0; me->title[i]; i++) {
- if ((unsigned char)me->title[i] == 1 ||
- (unsigned char)me->title[i] == 2) {
+ if (UCH(me->title[i]) == 1 ||
+ UCH(me->title[i]) == 2) {
me->title[i] = ' ';
}
}
} else {
- CTRACE(tfp,"HTAnchor_setTitle: New title is NULL! ");
+ CTRACE((tfp,"HTAnchor_setTitle: New title is NULL! "));
if (me->title) {
- CTRACE(tfp,"Old title was \"%s\".\n", me->title);
+ CTRACE((tfp,"Old title was \"%s\".\n", me->title));
FREE(me->title);
} else {
- CTRACE(tfp,"Old title was NULL.\n");
+ CTRACE((tfp,"Old title was NULL.\n"));
}
}
}
@@ -933,8 +986,8 @@ PUBLIC void HTAnchor_appendTitle ARGS2(
if (me) {
StrAllocCat(me->title, title);
for (i = 0; me->title[i]; i++) {
- if ((unsigned char)me->title[i] == 1 ||
- (unsigned char)me->title[i] == 2) {
+ if (UCH(me->title[i]) == 1 ||
+ UCH(me->title[i]) == 2) {
me->title[i] = ' ';
}
}
@@ -991,14 +1044,33 @@ PUBLIC void HTAnchor_setRevTitle ARGS2(
if (me) {
StrAllocCopy(me->RevTitle, title);
for (i = 0; me->RevTitle[i]; i++) {
- if ((unsigned char)me->RevTitle[i] == 1 ||
- (unsigned char)me->RevTitle[i] == 2) {
+ if (UCH(me->RevTitle[i]) == 1 ||
+ UCH(me->RevTitle[i]) == 2) {
me->RevTitle[i] = ' ';
}
}
}
}
+#ifndef DISABLE_BIBP
+/* Citehost for bibp links from LINKs with REL="citehost". - RDC
+*/
+PUBLIC CONST char * HTAnchor_citehost ARGS1(
+ HTParentAnchor *, me)
+{
+ return( me ? me->citehost : NULL);
+}
+
+PUBLIC void HTAnchor_setCitehost ARGS2(
+ HTParentAnchor *, me,
+ CONST char *, citehost)
+{
+ if (me) {
+ StrAllocCopy(me->citehost, citehost);
+ }
+}
+#endif /* !DISABLE_BIBP */
+
/* Suggested filename handling. - FM
** (will be loaded if we had a Content-Disposition
** header or META element with filename=name.suffix)
@@ -1056,7 +1128,7 @@ PUBLIC CONST char * HTAnchor_server ARGS1(
PUBLIC BOOL HTAnchor_safe ARGS1(
HTParentAnchor *, me)
{
- return( me ? me->safe : FALSE);
+ return (BOOL) ( me ? me->safe : FALSE);
}
/* Content-Base header handling. - FM
@@ -1123,12 +1195,12 @@ PUBLIC BOOL HTAnchor_link ARGS3(
{
if (!(source && destination))
return(NO); /* Can't link to/from non-existing anchor */
- CTRACE(tfp, "Linking anchor %p to anchor %p\n", source, destination);
+ CTRACE((tfp, "Linking anchor %p to anchor %p\n", source, destination));
if (!source->mainLink.dest) {
source->mainLink.dest = destination;
source->mainLink.type = type;
} else {
- HTLink * newLink = (HTLink *)calloc (1, sizeof (HTLink));
+ HTLink * newLink = typecalloc(HTLink);
if (newLink == NULL)
outofmem(__FILE__, "HTAnchor_link");
newLink->dest = destination;
@@ -1183,7 +1255,7 @@ PUBLIC BOOL HTAnchor_makeMainLink ARGS2(
return(NO); /* link not found or NULL anchor */
} else {
/* First push current main link onto top of links list */
- HTLink *newLink = (HTLink *)calloc (1, sizeof (HTLink));
+ HTLink *newLink = typecalloc(HTLink);
if (newLink == NULL)
outofmem(__FILE__, "HTAnchor_makeMainLink");
memcpy((void *)newLink,
@@ -1238,7 +1310,7 @@ PUBLIC char * HTAnchor_physical ARGS1(
PUBLIC void HTAnchor_setPhysical ARGS2(
HTParentAnchor *, me,
- char *, physical)
+ char *, physical)
{
if (me) {
StrAllocCopy(me->physical, physical);
@@ -1276,8 +1348,7 @@ PUBLIC LYUCcharset * HTAnchor_getUCInfoStage ARGS2(
if (me && !me->UCStages) {
int i;
int chndl = UCLYhndl_for_unspec; /* always >= 0 */
- UCAnchorInfo * stages = (UCAnchorInfo*)calloc(1,
- sizeof(UCAnchorInfo));
+ UCAnchorInfo * stages = typecalloc(UCAnchorInfo);
if (stages == NULL)
outofmem(__FILE__, "HTAnchor_getUCInfoStage");
for (i = 0; i < UCT_STAGEMAX; i++) {
@@ -1325,6 +1396,20 @@ PUBLIC int HTAnchor_getUCLYhndl ARGS2(
return( -1);
}
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+PRIVATE void setup_switch_display_charset ARGS2(HTParentAnchor *, me, int, h)
+{
+ if (!Switch_Display_Charset(h,SWITCH_DISPLAY_CHARSET_MAYBE))
+ return;
+ HTAnchor_setUCInfoStage(me, current_char_set,
+ UCT_STAGE_HTEXT, UCT_SETBY_MIME); /* highest priorty! */
+ HTAnchor_setUCInfoStage(me, current_char_set,
+ UCT_STAGE_STRUCTURED, UCT_SETBY_MIME); /* highest priorty! */
+ CTRACE((tfp, "changing UCInfoStage: HTEXT/STRUCTURED stages charset='%s'.\n",
+ LYCharSet_UC[current_char_set].MIMEname));
+}
+#endif
+
PUBLIC LYUCcharset * HTAnchor_setUCInfoStage ARGS4(
HTParentAnchor *, me,
int, LYhndl,
@@ -1340,10 +1425,18 @@ PUBLIC LYUCcharset * HTAnchor_setUCInfoStage ARGS4(
* Can we override?
*/
if (set_by >= me->UCStages->s[which_stage].lock) {
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+ int ohandle = me->UCStages->s[which_stage].LYhndl;
+#endif
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));
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+ /* Allow a switch to a more suitable display charset */
+ if ( LYhndl != ohandle && which_stage == UCT_STAGE_PARSER )
+ setup_switch_display_charset(me, LYhndl);
+#endif
}
else {
p->UChndl = -1;
@@ -1360,10 +1453,18 @@ PUBLIC LYUCcharset * HTAnchor_resetUCInfoStage ARGS4(
int, which_stage,
int, set_by)
{
+ int ohandle;
+
if (!me || !me->UCStages)
return(NULL);
me->UCStages->s[which_stage].lock = set_by;
+ ohandle = me->UCStages->s[which_stage].LYhndl;
me->UCStages->s[which_stage].LYhndl = LYhndl;
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+ /* Allow a switch to a more suitable display charset */
+ if (LYhndl >= 0 && LYhndl != ohandle && which_stage == UCT_STAGE_PARSER)
+ setup_switch_display_charset(me, LYhndl);
+#endif
return( &me->UCStages->s[which_stage].C);
}
@@ -1390,9 +1491,20 @@ PUBLIC LYUCcharset * HTAnchor_copyUCInfoStage ARGS4(
if (set_by == UCT_SETBY_NONE)
set_by = UCT_SETBY_DEFAULT;
if (set_by >= me->UCStages->s[to_stage].lock) {
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+ int ohandle = me->UCStages->s[to_stage].LYhndl;
+#endif
me->UCStages->s[to_stage].lock = set_by;
me->UCStages->s[to_stage].LYhndl =
me->UCStages->s[from_stage].LYhndl;
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+ /* Allow a switch to a more suitable display charset */
+ if ( me->UCStages->s[to_stage].LYhndl >= 0
+ && me->UCStages->s[to_stage].LYhndl != ohandle
+ && to_stage == UCT_STAGE_PARSER )
+ setup_switch_display_charset(me,
+ me->UCStages->s[to_stage].LYhndl);
+#endif
if (p_to != p_from)
memcpy(p_to, p_from, sizeof(LYUCcharset));
return(p_to);
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAnchor.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAnchor.h
index cb47e52e32e..89a7f88ff5e 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAnchor.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAnchor.h
@@ -15,6 +15,7 @@
/* Version 1 of 24-Oct-1991 (JFG), written in C, browser-independent */
#include <HTList.h>
+#include <HTChunk.h>
#include <HTAtom.h>
#include <UCDefs.h>
@@ -66,7 +67,8 @@ struct _HTParentAnchor {
char * title; /* Title of document */
char * owner; /* Owner of document */
char * RevTitle; /* TITLE in REV="made" or REV="owner" LINK */
-#ifdef USE_HASH
+ char * citehost; /* Citehost from REL="citehost" LINK */
+#ifdef USE_COLOR_STYLE
char * style;
#endif
@@ -77,7 +79,11 @@ struct _HTParentAnchor {
BOOL isISMAPScript; /* Script for clickable image map */
BOOL isHEAD; /* Document is headers from a HEAD request */
BOOL safe; /* Safe */
- char * FileCache; /* Path to a disk-cached copy */
+#ifdef SOURCE_CACHE
+ char * source_cache_file;
+ HTChunk * source_cache_chunk;
+#endif
+ char * FileCache; /* Path to a disk-cached copy (see src/HTFWriter.c) */
char * SugFname; /* Suggested filename */
char * cache_control; /* Cache-Control */
BOOL no_cache; /* Cache-Control, Pragma or META "no-cache"? */
@@ -163,6 +169,15 @@ extern HTChildAnchor * HTAnchor_findChildAndLink PARAMS((
extern HTAnchor * HTAnchor_findAddress PARAMS((
CONST DocAddress * address));
+/* Create new or find old named anchor - simple form
+** -------------------------------------------------
+**
+** Like the previous one, but simpler to use for simple cases.
+** No post data etc. can be supplied. - kw
+*/
+extern HTAnchor * HTAnchor_findSimpleAddress PARAMS((
+ CONST char * url));
+
/* Delete an anchor and possibly related things (auto garbage collection)
** --------------------------------------------
**
@@ -175,6 +190,11 @@ extern HTAnchor * HTAnchor_findAddress PARAMS((
extern BOOL HTAnchor_delete PARAMS((
HTParentAnchor * me));
+#ifdef SOURCE_CACHE
+extern void HTAnchor_clearSourceCache PARAMS((
+ HTParentAnchor * me));
+#endif
+
/* Move an anchor to the head of the list of its siblings
** ------------------------------------------------------
**
@@ -227,7 +247,7 @@ extern BOOL HTAnchor_isISMAPScript PARAMS((
extern BOOL HTAnchor_hasChildren PARAMS((
HTParentAnchor * me));
-#if defined(USE_HASH)
+#if defined(USE_COLOR_STYLE)
extern CONST char * HTAnchor_style PARAMS((
HTParentAnchor * me));
@@ -276,6 +296,15 @@ extern void HTAnchor_setRevTitle PARAMS((
HTParentAnchor * me,
CONST char * title));
+/* Citehost for bibp links from LINKs with REL="citehost". - RDC
+*/
+extern CONST char * HTAnchor_citehost PARAMS((
+ HTParentAnchor * me));
+
+extern void HTAnchor_setCitehost PARAMS((
+ HTParentAnchor * me,
+ CONST char * citehost));
+
/* Suggested filename handling. - FM
** (will be loaded if we had a Content-Disposition
** header or META element with filename=name.suffix)
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAssoc.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAssoc.c
index 05b631cd7d9..8e16e76125f 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAssoc.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAssoc.c
@@ -62,7 +62,7 @@ PUBLIC void HTAssocList_add ARGS3(HTAssocList *, alist,
StrAllocCopy(assoc->value, value);
HTList_addObject(alist, (void*)assoc);
} else {
- CTRACE(tfp, "HTAssoc_add: ERROR: assoc list NULL!!\n");
+ CTRACE((tfp, "HTAssoc_add: ERROR: assoc list NULL!!\n"));
}
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAtom.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAtom.c
index 44ac6c7a2b0..cb5fc7c4471 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAtom.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTAtom.c
@@ -36,7 +36,7 @@ PRIVATE void free_atoms NOPARAMS;
/*
* Alternate hashing function.
*/
-#define HASH_FUNCTION(cp_hash) ((strlen(cp_hash) * (unsigned char)*cp_hash) % HASH_SIZE)
+#define HASH_FUNCTION(cp_hash) ((strlen(cp_hash) * UCH(*cp_hash)) % HASH_SIZE)
PUBLIC HTAtom * HTAtom_for ARGS1(CONST char *, string)
{
@@ -67,7 +67,7 @@ PUBLIC HTAtom * HTAtom_for ARGS1(CONST char *, string)
*/
for (a = hash_table[hash]; a; a = a->next) {
if (0 == strcasecomp(a->name, string)) {
- /* CTRACE(tfp, "HTAtom: Old atom %p for `%s'\n", a, string); */
+ /* CTRACE((tfp, "HTAtom: Old atom %p for `%s'\n", a, string)); */
return a; /* Found: return it */
}
}
@@ -84,7 +84,7 @@ PUBLIC HTAtom * HTAtom_for ARGS1(CONST char *, string)
a->next = hash_table[hash]; /* Put onto the head of list */
hash_table[hash] = a;
#ifdef NOT_DEFINED
- CTRACE(tfp, "HTAtom: New atom %p for `%s'\n", a, string);
+ CTRACE((tfp, "HTAtom: New atom %p for `%s'\n", a, string));
#endif /* NOT_DEFINED */
return a;
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTBTree.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTBTree.c
index c545eb0e70f..db3b50db510 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTBTree.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTBTree.c
@@ -9,9 +9,6 @@
#include <HTUtils.h>
#include <HTBTree.h>
-#ifndef __STRICT_BSD__
-#include <stdlib.h>
-#endif
#define MAXIMUM(a,b) ((a)>(b)?(a):(b))
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTCJK.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTCJK.h
index 8765461d4d9..f234adfe085 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTCJK.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTCJK.h
@@ -37,19 +37,25 @@
#define IS_SJIS_HI1(hi) ((0x81<=hi)&&(hi<=0x9F)) /* 1st lev. */
#define IS_SJIS_HI2(hi) ((0xE0<=hi)&&(hi<=0xEF)) /* 2nd lev. */
#define IS_SJIS(hi,lo,in_sjis) (!IS_SJIS_LO(lo)?0:IS_SJIS_HI1(hi)?(in_sjis=1):in_sjis&&IS_SJIS_HI2(hi))
+#define IS_SJIS_2BYTE(hi,lo) (IS_SJIS_LO(lo)&&(IS_SJIS_HI1(hi)||IS_SJIS_HI2(hi)))
+#define IS_SJIS_X0201KANA(lo) ((0xA1<=lo)&&(lo<=0xDF))
-#define IS_EUC_LOS(lo) ((0x21<=lo)&&(lo<=0x7E)) /* standard */
#define IS_EUC_LOX(lo) ((0xA1<=lo)&&(lo<=0xFE)) /* extended */
#define IS_EUC_HI(hi) ((0xA1<=hi)&&(hi<=0xFE))
-#define IS_EUC(hi,lo) IS_EUC_HI(hi) && (IS_EUC_LOS(lo) || IS_EUC_LOX(lo))
+#define IS_EUC_X0201KANA(hi,lo) ((hi==0x8E)&&(0xA1<=lo)&&(lo<=0xDF))
+#define IS_EUC(hi,lo) ((IS_EUC_HI(hi) && IS_EUC_LOX(lo))||IS_EUC_X0201KANA(hi,lo))
+
+#define IS_JAPANESE_2BYTE(hi,lo) (IS_SJIS_2BYTE(hi,lo) || IS_EUC(hi,lo))
#define IS_BIG5_LOS(lo) ((0x40<=lo)&&(lo<=0x7E)) /* standard */
#define IS_BIG5_LOX(lo) ((0xA1<=lo)&&(lo<=0xFE)) /* extended */
#define IS_BIG5_HI(hi) ((0xA1<=hi)&&(hi<=0xFE))
-#define IS_BIG5(hi,lo) IS_BIG5_HI(hi) && (IS_BIG5_LOS(lo) || IS_BIG5_LOX(lo))
+#define IS_BIG5(hi,lo) (IS_BIG5_HI(hi) && (IS_BIG5_LOS(lo) || IS_BIG5_LOX(lo)))
+
+typedef enum {NOKANJI, EUC, SJIS, JIS} HTkcode;
+typedef enum {NOCJK, JAPANESE, CHINESE, KOREAN, TAIPEI} HTCJKlang;
-typedef enum _HTkcode {NOKANJI, EUC, SJIS, JIS} HTkcode;
-typedef enum _HTCJKlang {NOCJK, JAPANESE, CHINESE, KOREAN, TAIPEI} HTCJKlang;
+extern HTCJKlang HTCJK;
/*
** Function prototypes.
@@ -111,4 +117,6 @@ extern void TO_JIS PARAMS((
CONST unsigned char * any,
unsigned char * jis));
+extern char *str_kcode PARAMS((HTkcode code));
+
#endif /* HTCJK_H */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTChunk.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTChunk.c
index 0149dfffd69..05a5da61999 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTChunk.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTChunk.c
@@ -8,19 +8,42 @@
#include <LYLeaks.h>
+/*
+** Initialize a chunk with a certain allocation unit
+*/
+PUBLIC void HTChunkInit ARGS2 (HTChunk *,ch, int,grow)
+{
+ ch->data = 0;
+ ch->growby = grow;
+ ch->size = 0;
+ ch->allocated = 0;
+}
+
/* Create a chunk with a certain allocation unit
** --------------
*/
PUBLIC HTChunk * HTChunkCreate ARGS1 (int,grow)
{
- HTChunk * ch = (HTChunk *) calloc(1, sizeof(HTChunk));
+ HTChunk * ch = typecalloc(HTChunk);
if (ch == NULL)
- outofmem(__FILE__, "creation of chunk");
+ outofmem(__FILE__, "creation of chunk");
- ch->data = 0;
- ch->growby = grow;
- ch->size = 0;
- ch->allocated = 0;
+ HTChunkInit (ch, grow);
+ return ch;
+}
+
+PUBLIC HTChunk * HTChunkCreateMayFail ARGS2 (int,grow, int,failok)
+{
+ HTChunk * ch = typecalloc(HTChunk);
+ if (ch == NULL) {
+ if (!failok) {
+ outofmem(__FILE__, "creation of chunk");
+ } else {
+ return ch;
+ }
+ }
+ HTChunkInit (ch, grow);
+ ch->failok = failok;
return ch;
}
@@ -29,19 +52,20 @@ PUBLIC HTChunk * HTChunkCreate ARGS1 (int,grow)
*/
PUBLIC HTChunk * HTChunkCreate2 ARGS2 (int,grow, size_t, needed)
{
- HTChunk * ch = (HTChunk *) calloc(1, sizeof(HTChunk));
+ HTChunk * ch = typecalloc(HTChunk);
if (ch == NULL)
- outofmem(__FILE__, "HTChunkCreate2");
+ outofmem(__FILE__, "HTChunkCreate2");
- ch->growby = grow;
+ HTChunkInit (ch, grow);
if (needed > 0) {
ch->allocated = needed-1 - ((needed-1) % ch->growby)
+ ch->growby; /* Round up */
- ch->data = (char *)calloc(1, ch->allocated);
+ CTRACE((tfp, "HTChunkCreate2: requested %d, allocate %d\n",
+ needed, ch->allocated));
+ ch->data = typecallocn(char, ch->allocated);
if (!ch->data)
outofmem(__FILE__, "HTChunkCreate2 data");
}
- ch->size = 0;
return ch;
}
@@ -75,11 +99,18 @@ PUBLIC void HTChunkFree ARGS1 (HTChunk *,ch)
PUBLIC void HTChunkPutc ARGS2 (HTChunk *,ch, char,c)
{
if (ch->size >= ch->allocated) {
+ char *data;
ch->allocated = ch->allocated + ch->growby;
- ch->data = ch->data ? (char *)realloc(ch->data, ch->allocated)
- : (char *)calloc(1, ch->allocated);
- if (!ch->data)
- outofmem(__FILE__, "HTChunkPutc");
+ data = ch->data ? (char *)realloc(ch->data, ch->allocated)
+ : typecallocn(char, ch->allocated);
+ if (data) {
+ ch->data = data;
+ } else if (ch->failok) {
+ HTChunkClear(ch); /* allocation failed, clear all data - kw */
+ return; /* caller should check ch->allocated - kw */
+ } else {
+ outofmem(__FILE__, "HTChunkPutc");
+ }
}
ch->data[ch->size++] = c;
}
@@ -92,11 +123,11 @@ PUBLIC void HTChunkEnsure ARGS2 (HTChunk *,ch, int,needed)
{
if (needed <= ch->allocated) return;
ch->allocated = needed-1 - ((needed-1) % ch->growby)
- + ch->growby; /* Round up */
+ + ch->growby; /* Round up */
ch->data = ch->data ? (char *)realloc(ch->data, ch->allocated)
- : (char *)calloc(1, ch->allocated);
+ : typecallocn(char, ch->allocated);
if (ch->data == NULL)
- outofmem(__FILE__, "HTChunkEnsure");
+ outofmem(__FILE__, "HTChunkEnsure");
}
PUBLIC void HTChunkPutb ARGS3 (HTChunk *,ch, CONST char *,b, int,l)
@@ -104,12 +135,19 @@ PUBLIC void HTChunkPutb ARGS3 (HTChunk *,ch, CONST char *,b, int,l)
int needed = ch->size + l;
if (l <= 0) return;
if (needed > ch->allocated) {
+ char *data;
ch->allocated = needed-1 - ((needed-1) % ch->growby)
+ ch->growby; /* Round up */
- ch->data = ch->data ? (char *)realloc(ch->data, ch->allocated)
- : (char *)calloc(1, ch->allocated);
- if (ch->data == NULL)
+ data = ch->data ? (char *)realloc(ch->data, ch->allocated)
+ : typecallocn(char, ch->allocated);
+ if (data) {
+ ch->data = data;
+ } else if (ch->failok) {
+ HTChunkClear(ch); /* allocation failed, clear all data - kw */
+ return; /* caller should check ch->allocated - kw */
+ } else {
outofmem(__FILE__, "HTChunkPutb");
+ }
}
memcpy(ch->data + ch->size, b, l);
ch->size += l;
@@ -124,7 +162,7 @@ PUBLIC void HTChunkPutUtf8Char ARGS2(
{
int utflen;
- if (code < 128)
+ if (TOASCII(code) < 128)
utflen = 1;
else if (code < 0x800L) {
utflen = 2;
@@ -140,12 +178,19 @@ PUBLIC void HTChunkPutUtf8Char ARGS2(
utflen = 0;
if (ch->size + utflen > ch->allocated) {
+ char *data;
int growby = (ch->growby >= utflen) ? ch->growby : utflen;
ch->allocated = ch->allocated + growby;
- ch->data = ch->data ? (char *)realloc(ch->data, ch->allocated)
- : (char *)calloc(1, ch->allocated);
- if (!ch->data)
- outofmem(__FILE__, "HTChunkPutUtf8Char");
+ data = ch->data ? (char *)realloc(ch->data, ch->allocated)
+ : typecallocn(char, ch->allocated);
+ if (data) {
+ ch->data = data;
+ } else if (ch->failok) {
+ HTChunkClear(ch); /* allocation failed, clear all data - kw */
+ return; /* caller should check ch->allocated - kw */
+ } else {
+ outofmem(__FILE__, "HTChunkPutUtf8Char");
+ }
}
switch (utflen) {
@@ -168,18 +213,24 @@ PUBLIC void HTChunkPutUtf8Char ARGS2(
break;
case 6:
PUTC(0xfc | (code>>30));
+ break;
}
switch (utflen) {
case 6:
PUTC2(code>>24);
+ /* FALLTHRU */
case 5:
PUTC2(code>>18);
+ /* FALLTHRU */
case 4:
PUTC2(code>>12);
+ /* FALLTHRU */
case 3:
PUTC2(code>>6);
+ /* FALLTHRU */
case 2:
PUTC2(code);
+ break;
}
}
@@ -198,6 +249,9 @@ PUBLIC void HTChunkTerminate ARGS1 (HTChunk *,ch)
PUBLIC void HTChunkPuts ARGS2 (HTChunk *,ch, CONST char *,s)
{
CONST char * p;
- for (p=s; *p; p++)
- HTChunkPutc(ch, *p);
+ for (p=s; *p; p++) {
+ HTChunkPutc(ch, *p);
+ if (ch->allocated == 0)
+ return; /* must have been allocation failure - kw */
+ }
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTChunk.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTChunk.h
index e6cf19c8578..a243b2b4edc 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTChunk.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTChunk.h
@@ -21,10 +21,16 @@ typedef struct {
int growby; /* Allocation unit in bytes */
int allocated; /* Current size of *data */
char * data; /* Pointer to malloced area or 0 */
+ int failok; /* allowed to fail without exiting program? */
} HTChunk;
/*
+ * Initialize a chunk's allocation data and allocation-increment.
+ */
+extern void HTChunkInit PARAMS((HTChunk * ch, int grow));
+
+/*
*
* Create new chunk
*
@@ -43,6 +49,15 @@ typedef struct {
extern HTChunk * HTChunkCreate PARAMS((int growby));
/*
+ * Create a chunk for which an allocation error is not a fatal application
+ * error if failok != 0, but merely resets the chunk. When using a chunk
+ * created this way, the caller should always check whether the contents
+ * are ok each time after data have been appended.
+ * The create call may also fail and will reurn NULL in that case. - kw
+ */
+extern HTChunk * HTChunkCreateMayFail PARAMS((int growby, int failok));
+
+/*
* Like HTChunkCreate but with initial allocation - kw
*
*/
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c
index 8b8231f0f65..5313f1e5630 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c
@@ -5,11 +5,15 @@
#include <HTUtils.h>
#include <HTDOS.h>
+#ifdef WIN_EX
+#include <LYGlobalDefs.h>
+#endif
+
/*
* Make a copy of the source argument in the result, allowing some extra
* space so we can append directly onto the result without reallocating.
*/
-PRIVATE char * copy_plus ARGS2(char **, result, char *, source)
+PRIVATE char * copy_plus ARGS2(char **, result, CONST char *, source)
{
int length = strlen(source);
HTSprintf0(result, "%-*s", length+10, source);
@@ -26,16 +30,44 @@ PRIVATE char * copy_plus ARGS2(char **, result, char *, source)
** returns WWW file specification
**
*/
-char * HTDOS_wwwName ARGS1(char *, dosname)
+char * HTDOS_wwwName ARGS1(CONST char *, dosname)
{
- static char *wwwname;
+ static char *wwwname = NULL;
char *cp_url = copy_plus(&wwwname, dosname);
+ int wwwname_len;
+
+#ifdef SH_EX
+ char ch;
+ while ((ch = *dosname) != '\0') {
+ switch (ch) {
+ case '\\':
+ /* convert dos backslash to unix-style */
+ *cp_url++ = '/';
+ break;
+ case ' ':
+ *cp_url++ = '%';
+ *cp_url++ = '2';
+ *cp_url++ = '0';
+ break;
+ default:
+ *cp_url++ = ch;
+ break;
+ }
+ dosname++;
+ }
+ *cp_url = '\0';
+#else
for ( ; *cp_url != '\0' ; cp_url++)
if(*cp_url == '\\')
*cp_url = '/'; /* convert dos backslash to unix-style */
+#endif
+
+ wwwname_len = strlen(wwwname);
+ if (wwwname_len > 1)
+ cp_url--; /* point last char */
- if(strlen(wwwname) > 3 && *cp_url == '/')
+ if (wwwname_len > 3 && *cp_url == '/')
*cp_url = '\0';
#ifdef NOTUSED
@@ -59,26 +91,91 @@ char * HTDOS_wwwName ARGS1(char *, dosname)
*/
char * HTDOS_name ARGS1(char *, wwwname)
{
- static char *cp_url;
- char *result;
+#ifdef _WINDOWS /* 1998/04/02 (Thu) 08:47:20 */
+ extern char windows_drive[];
+ char temp_buff[LY_MAXPATH];
+#endif
+ static char *result = NULL;
int joe;
- copy_plus(&cp_url, wwwname);
+ copy_plus(&result, wwwname);
- for (joe = 0; cp_url[joe] != '\0'; joe++) {
- if (cp_url[joe] == '/') {
- cp_url[joe] = '\\'; /* convert slashes to dos-style */
+ for (joe = 0; result[joe] != '\0'; joe++) {
+ if (result[joe] == '/') {
+ result[joe] = '\\'; /* convert slashes to dos-style */
}
}
/* pesky leading slash, rudiment from file://localhost/ */
/* the rest of path may be with or without drive letter */
- if((cp_url[1] == '\\') || (cp_url[0] != '\\')) {
- result = cp_url;
+ if((result[1] != '\\') && (result[0] == '\\')) {
+ for (joe = 0; (result[joe] = result[joe+1]) != 0; joe++)
+ ;
+ }
+
+#ifdef _WINDOWS /* 1998/04/02 (Thu) 08:59:48 */
+ if (strchr(result, '\\') != NULL
+ && strchr(result, ':') == NULL) {
+ sprintf(temp_buff, "%.3s\\%.*s", windows_drive,
+ (int)(sizeof(temp_buff) - 5), result);
+ StrAllocCopy(result, temp_buff);
} else {
- result = cp_url+1;
+ char *p = strchr(result, ':');
+ if (p && (strcmp(p, ":\\") == 0)) {
+ p[2] = '.';
+ p[3] = '\0';
+ }
}
+#endif
+ /*
+ * If we have only a device, add a trailing slash. Otherwise it just
+ * refers to the current directory on the given device.
+ */
+ if (strchr(result, '\\') == 0
+ && result[1] == ':')
+ StrAllocCat(result, "\\");
- CTRACE(tfp, "HTDOS_name changed `%s' to `%s'\n", wwwname, result);
+ CTRACE((tfp, "HTDOS_name changed `%s' to `%s'\n", wwwname, result));
return (result);
}
+
+#if defined(DJGPP) && defined(DJGPP_KEYHANDLER)
+/* PUBLIC getxkey()
+** Replaces libc's getxkey() with polling of tcp/ip
+** library (WatTcp or Watt-32). This is required to
+** be able to finish off dead sockets, answer pings etc.
+**
+** ON EXIT:
+** returns extended keypress.
+*/
+
+/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
+#include <pc.h>
+#include <dpmi.h>
+#include <libc/farptrgs.h>
+#include <go32.h>
+
+int getxkey (void)
+{
+ __dpmi_regs r;
+
+ /* poll tcp/ip lib and yield to DPMI-host while nothing in
+ * keyboard buffer (head = tail) (simpler than kbhit).
+ */
+ while (_farpeekw(_dos_ds, 0x41a) == _farpeekw(_dos_ds, 0x41c))
+ {
+ tcp_tick (NULL);
+ __dpmi_yield();
+ }
+
+ r.h.ah = 0x10;
+ __dpmi_int(0x16, &r);
+
+ if (r.h.al == 0x00)
+ return 0x0100 | r.h.ah;
+ if (r.h.al == 0xe0)
+ return 0x0200 | r.h.ah;
+ return r.h.al;
+}
+#endif /* DJGPP && DJGPP_KEYHANDLER */
+
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.h
index 37a613868e4..319a63588c7 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.h
@@ -16,7 +16,7 @@
** returns WWW file specification
**
*/
-char * HTDOS_wwwName PARAMS((char * dosname));
+char * HTDOS_wwwName PARAMS((CONST char * dosname));
/* PUBLIC HTDOS_name()
@@ -31,5 +31,10 @@ char * HTDOS_wwwName PARAMS((char * dosname));
*/
char * HTDOS_name PARAMS((char * wwwname));
+#ifdef WIN_EX
+char * HTDOS_short_name (char * fn);
+#else
+#define HTDOS_short_name(fn) fn
+#endif
#endif /* HTDOS_H */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFTP.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFTP.c
index 87729de3d7c..8cd3099cbff 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFTP.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFTP.c
@@ -57,7 +57,7 @@ BUGS: @@@ Limit connection cache size!
** same time.
*/
-#ifdef DJGPP
+#if defined(DJGPP) && !defined(WATT32)
#define u_long unsigned long
#endif
@@ -66,9 +66,8 @@ BUGS: @@@ Limit connection cache size!
#include <HTAlert.h>
#include <HTFTP.h> /* Implemented here */
-
-/* this define should be in HTFont.h :( */
-#define HT_NON_BREAK_SPACE ((char)1) /* For now */
+#include <HTTCP.h>
+#include <HTFont.h>
#define REPEAT_PORT /* Give the port number for each file */
#define REPEAT_LISTEN /* Close each listen socket and open a new one */
@@ -80,12 +79,8 @@ BUGS: @@@ Limit connection cache size!
#define LAST_TCP_PORT 5999
#define LINE_LENGTH 256
-#define COMMAND_LENGTH 256
-
-#define INFINITY 512
#include <HTParse.h>
-#include <HTTCP.h>
#include <HTAnchor.h>
#include <HTFile.h> /* For HTFileFormat() */
#include <HTBTree.h>
@@ -106,10 +101,6 @@ typedef struct _connection {
BOOL binary; /* Binary mode? */
} connection;
-#ifndef NIL
-#define NIL 0
-#endif /* !NIL */
-
/* Hypertext object building machinery
*/
#include <HTML.h>
@@ -150,36 +141,40 @@ PRIVATE int data_soc = -1; /* Socket for data transfer =invalid */
PRIVATE char *user_entered_password = NULL;
PRIVATE char *last_username_and_host = NULL;
-#define GENERIC_SERVER 0
-#define MACHTEN_SERVER 1
-#define UNIX_SERVER 2
-#define VMS_SERVER 3
-#define CMS_SERVER 4
-#define DCTS_SERVER 5
-#define TCPC_SERVER 6
-#define PETER_LEWIS_SERVER 7
-#define NCSA_SERVER 8
-#define WINDOWS_NT_SERVER 9
-#define MS_WINDOWS_SERVER 10
-#define MSDOS_SERVER 11
-#define APPLESHARE_SERVER 12
-#define NETPRESENZ_SERVER 13
-
-PRIVATE int server_type = GENERIC_SERVER; /* the type of ftp host */
+typedef enum {
+ GENERIC_SERVER
+ , MACHTEN_SERVER
+ , UNIX_SERVER
+ , VMS_SERVER
+ , CMS_SERVER
+ , DCTS_SERVER
+ , TCPC_SERVER
+ , PETER_LEWIS_SERVER
+ , NCSA_SERVER
+ , WINDOWS_NT_SERVER
+ , WINDOWS_2K_SERVER
+ , MS_WINDOWS_SERVER
+ , MSDOS_SERVER
+ , APPLESHARE_SERVER
+ , NETPRESENZ_SERVER
+ , DLS_SERVER
+} eServerType;
+
+PRIVATE eServerType server_type = GENERIC_SERVER; /* the type of ftp host */
PRIVATE int unsure_type = FALSE; /* sure about the type? */
PRIVATE BOOLEAN use_list = FALSE; /* use the LIST command? */
PRIVATE int interrupted_in_next_data_char = FALSE;
#ifdef POLL_PORTS
-PRIVATE unsigned short port_number = FIRST_TCP_PORT;
+PRIVATE PortNumber port_number = FIRST_TCP_PORT;
#endif /* POLL_PORTS */
PRIVATE int master_socket = -1; /* Listening socket = invalid */
PRIVATE char port_command[255]; /* Command for setting the port */
PRIVATE fd_set open_sockets; /* Mask of active channels */
PRIVATE int num_sockets; /* Number of sockets to scan */
-PRIVATE unsigned short passive_port; /* Port server specified for data */
+PRIVATE PortNumber passive_port; /* Port server specified for data */
#define NEXT_CHAR HTGetCharacter() /* Use function in HTFormat.c */
@@ -209,7 +204,7 @@ PRIVATE void free_FTPGlobals NOARGS
}
#endif /* LY_FIND_LEAKS */
-/* PUBLIC HTMake_VMS_name()
+/* PUBLIC HTVMS_name()
** CONVERTS WWW name into a VMS name
** ON ENTRY:
** nn Node Name (optional)
@@ -220,7 +215,7 @@ PRIVATE void free_FTPGlobals NOARGS
**
** Bug: Returns pointer to static -- non-reentrant
*/
-PUBLIC char * HTMake_VMS_name ARGS2(
+PUBLIC char * HTVMS_name ARGS2(
CONST char *, nn,
CONST char *, fn)
{
@@ -232,7 +227,7 @@ PUBLIC char * HTMake_VMS_name ARGS2(
** The node is assumed to be local if the hostname WITHOUT DOMAIN
** matches the local one. @@@
*/
- static char vmsname[INFINITY]; /* returned */
+ static char *vmsname;
char * filename = (char*)malloc(strlen(fn)+1);
char * nodename = (char*)malloc(strlen(nn)+2+1); /* Copies to hack */
char *second; /* 2nd slash */
@@ -265,16 +260,16 @@ PUBLIC char * HTMake_VMS_name ARGS2(
last = strrchr(filename, '/'); /* last slash */
if (!second) { /* Only one slash */
- sprintf(vmsname, "%s%s", nodename, filename + 1);
+ HTSprintf0(&vmsname, "%s%s", nodename, filename + 1);
} else if (second == last) { /* Exactly two slashes */
*second = '\0'; /* Split filename from disk */
- sprintf(vmsname, "%s%s:%s", nodename, filename+1, second+1);
+ HTSprintf0(&vmsname, "%s%s:%s", nodename, filename+1, second+1);
*second = '/'; /* restore */
} else { /* More than two slashes */
char * p;
*second = '\0'; /* Split disk from directories */
*last = '\0'; /* Split dir from filename */
- sprintf(vmsname, "%s%s:[%s]%s",
+ HTSprintf0(&vmsname, "%s%s:[%s]%s",
nodename, filename+1, second+1, last+1);
*second = *last = '/'; /* restore filename */
for (p = strchr(vmsname, '['); *p!=']'; p++)
@@ -307,7 +302,7 @@ PRIVATE int next_data_char NOARGS
return FROMASCII(c);
}
#else
- return (unsigned char)(*data_read_pointer++);
+ return UCH(*data_read_pointer++);
#endif /* NOT_ASCII */
}
@@ -319,12 +314,15 @@ PRIVATE int close_connection ARGS1(
connection *, con)
{
connection * scan;
- int status = NETCLOSE(con->socket);
- if (TRACE) {
- CTRACE(tfp, "HTFTP: Closing control socket %d\n", con->socket);
+ int status;
+ CTRACE((tfp, "HTFTP: Closing control socket %d\n", con->socket));
+ status = NETCLOSE(con->socket);
+ if (TRACE && status != 0) {
#ifdef UNIX
- if (status != 0)
- perror("HTFTP:close_connection");
+ CTRACE((tfp, "HTFTP:close_connection: %s", LYStrerror(errno)));
+#else
+ if (con->socket != INVSOC)
+ HTInetStatus("HTFTP:close_connection");
#endif
}
con->socket = -1;
@@ -358,7 +356,7 @@ PRIVATE void help_message_cache_add ARGS1(
else
StrAllocCopy(help_message_buffer, string);
- CTRACE(tfp,"Adding message to help cache: %s\n",string);
+ CTRACE((tfp,"Adding message to help cache: %s\n",string));
}
PRIVATE char *help_message_cache_non_empty NOARGS
@@ -370,41 +368,35 @@ PRIVATE char *help_message_cache_contents NOARGS
return(help_message_buffer);
}
-/* Execute Command and get Response
-** --------------------------------
-**
-** See the state machine illustrated in RFC959, p57. This implements
-** one command/reply sequence. It also interprets lines which are to
-** be continued, which are marked with a "-" immediately after the
-** status code.
+/* Send One Command
+** ----------------
**
-** Continuation then goes on until a line with a matching reply code
-** an a space after it.
+** This function checks whether we have a control connection, and sends
+** one command if given.
**
** On entry,
-** con points to the connection which is established.
-** cmd points to a command, or is NIL to just get the response.
+** control points to the connection which is established.
+** cmd points to a command, or is zero to just get the response.
**
-** The command is terminated with the CRLF pair.
+** The command should already be terminated with the CRLF pair.
**
** On exit,
-** returns: The first digit of the reply type,
-** or negative for communication failure.
+** returns: 1 for success,
+** or negative for communication failure (in which case
+** the control connection will be closed).
*/
-PRIVATE int response ARGS1(
+PRIVATE int write_cmd ARGS1(
char *, cmd)
{
- int result; /* Three-digit decimal code */
- int continuation_response = -1;
int status;
if (!control) {
- CTRACE(tfp, "HTFTP: No control connection set up!!\n");
+ CTRACE((tfp, "HTFTP: No control connection set up!!\n"));
return -99;
}
if (cmd) {
- CTRACE(tfp, " Tx: %s", cmd);
+ CTRACE((tfp, " Tx: %s", cmd));
#ifdef NOT_ASCII
{
char * p;
@@ -415,31 +407,64 @@ PRIVATE int response ARGS1(
#endif /* NOT_ASCII */
status = NETWRITE(control->socket, cmd, (int)strlen(cmd));
if (status < 0) {
- CTRACE(tfp, "HTFTP: Error %d sending command: closing socket %d\n",
- status, control->socket);
+ CTRACE((tfp, "HTFTP: Error %d sending command: closing socket %d\n",
+ status, control->socket));
close_connection(control);
return status;
}
}
+ return 1;
+}
+
+/* Execute Command and get Response
+** --------------------------------
+**
+** See the state machine illustrated in RFC959, p57. This implements
+** one command/reply sequence. It also interprets lines which are to
+** be continued, which are marked with a "-" immediately after the
+** status code.
+**
+** Continuation then goes on until a line with a matching reply code
+** an a space after it.
+**
+** On entry,
+** control points to the connection which is established.
+** cmd points to a command, or is zero to just get the response.
+**
+** The command must already be terminated with the CRLF pair.
+**
+** On exit,
+** returns: The first digit of the reply type,
+** or negative for communication failure.
+*/
+PRIVATE int response ARGS1(
+ char *, cmd)
+{
+ int result; /* Three-digit decimal code */
+ int continuation_response = -1;
+ int status;
+
+ if ((status = write_cmd(cmd)) < 0)
+ return status;
do {
char *p = response_text;
for (;;) {
int ich = NEXT_CHAR;
- if (((*p++ = ich) == LF)
+ if (((*p++ = (char) ich) == LF)
|| (p == &response_text[LINE_LENGTH])) {
char continuation;
if (interrupted_in_htgetcharacter) {
- CTRACE (tfp, "HTFTP: Interrupted in HTGetCharacter, apparently.\n");
+ CTRACE((tfp, "HTFTP: Interrupted in HTGetCharacter, apparently.\n"));
NETCLOSE (control->socket);
control->socket = -1;
return HT_INTERRUPTED;
}
*p = '\0'; /* Terminate the string */
- CTRACE(tfp, " Rx: %s", response_text);
+ CTRACE((tfp, " Rx: %s", response_text));
/* Check for login or help messages */
if (!strncmp(response_text,"230-",4) ||
@@ -460,15 +485,15 @@ PRIVATE int response ARGS1(
} /* if end of line */
if (interrupted_in_htgetcharacter) {
- CTRACE (tfp, "HTFTP: Interrupted in HTGetCharacter, apparently.\n");
+ CTRACE((tfp, "HTFTP: Interrupted in HTGetCharacter, apparently.\n"));
NETCLOSE (control->socket);
control->socket = -1;
return HT_INTERRUPTED;
}
if (ich == EOF) {
- CTRACE(tfp, "Error on rx: closing socket %d\n",
- control->socket);
+ CTRACE((tfp, "Error on rx: closing socket %d\n",
+ control->socket));
strcpy(response_text, "000 *** TCP read error on response\n");
close_connection(control);
return -1; /* End of file on response */
@@ -478,8 +503,8 @@ PRIVATE int response ARGS1(
} while (continuation_response != -1);
if (result == 421) {
- CTRACE(tfp, "HTFTP: They close so we close socket %d\n",
- control->socket);
+ CTRACE((tfp, "HTFTP: They close so we close socket %d\n",
+ control->socket));
close_connection(control);
return -1;
}
@@ -521,7 +546,7 @@ PRIVATE int send_cmd_2 ARGS2(char *, verb, char *, param)
* Some servers need an additional letter after the MACB command.
*/
PRIVATE int set_mac_binary ARGS1(
- int, ServerType)
+ eServerType, ServerType)
{
/* try to set mac binary mode */
if (ServerType == APPLESHARE_SERVER ||
@@ -540,7 +565,7 @@ PRIVATE int set_mac_binary ARGS1(
*/
PRIVATE void get_ftp_pwd ARGS2(
- int *, ServerType,
+ eServerType *, ServerType,
BOOLEAN *, UseList)
{
@@ -556,30 +581,30 @@ PRIVATE void get_ftp_pwd ARGS2(
if (*ServerType == TCPC_SERVER) {
*ServerType = ((response_text[5] == '/') ?
NCSA_SERVER : TCPC_SERVER);
- CTRACE(tfp, "HTFTP: Treating as %s server.\n",
+ CTRACE((tfp, "HTFTP: Treating as %s server.\n",
((*ServerType == NCSA_SERVER) ?
- "NCSA" : "TCPC"));
+ "NCSA" : "TCPC")));
} else if (response_text[5] == '/') {
/* path names beginning with / imply Unix,
* right?
*/
if (set_mac_binary(*ServerType)) {
*ServerType = NCSA_SERVER;
- CTRACE(tfp, "HTFTP: Treating as NCSA server.\n");
+ CTRACE((tfp, "HTFTP: Treating as NCSA server.\n"));
} else {
*ServerType = UNIX_SERVER;
*UseList = TRUE;
- CTRACE(tfp, "HTFTP: Treating as Unix server.\n");
+ CTRACE((tfp, "HTFTP: Treating as Unix server.\n"));
}
return;
} else if (response_text[strlen(response_text)-1] == ']') {
/* path names ending with ] imply VMS, right? */
*ServerType = VMS_SERVER;
*UseList = TRUE;
- CTRACE(tfp, "HTFTP: Treating as VMS server.\n");
+ CTRACE((tfp, "HTFTP: Treating as VMS server.\n"));
} else {
*ServerType = GENERIC_SERVER;
- CTRACE(tfp, "HTFTP: Treating as Generic server.\n");
+ CTRACE((tfp, "HTFTP: Treating as Generic server.\n"));
}
if ((*ServerType == NCSA_SERVER) ||
@@ -590,6 +615,45 @@ PRIVATE void get_ftp_pwd ARGS2(
}
}
+/* This function turns MSDOS-like directory output off for
+ * Windows NT servers.
+ */
+
+PRIVATE void set_unix_dirstyle ARGS2(
+ eServerType *, ServerType,
+ BOOLEAN *, UseList)
+{
+
+ char *cp;
+ /* This is a toggle. It seems we have to toggle in order to see
+ * the current state (after toggling), so we may end up toggling
+ * twice. - kw
+ */
+ int status = response("SITE DIRSTYLE\r\n");
+ if (status != 2) {
+ *ServerType = GENERIC_SERVER;
+ CTRACE((tfp, "HTFTP: DIRSTYLE failed, treating as Generic server.\n"));
+ return;
+ } else {
+ *UseList = TRUE;
+ /* Expecting one of:
+ * 200 MSDOS-like directory output is off
+ * 200 MSDOS-like directory output is on
+ * The following code doesn't look for the full exact string -
+ * who knows how the wording may change in some future version.
+ * If the first response isn't recognized, we toggle again
+ * anyway, under the assumption that it's more likely that
+ * the MSDOS setting was "off" originally. - kw
+ */
+ cp = strstr(response_text+4, "MSDOS");
+ if (cp && strstr(cp, " off")) {
+ return; /* already off now. */
+ } else {
+ response("SITE DIRSTYLE\r\n");
+ }
+ }
+}
+
/* Get a valid connection to the host
** ----------------------------------
**
@@ -640,7 +704,7 @@ PRIVATE int get_connection ARGS2(
/*
** Allocate and init control struct.
*/
- con = (connection *)calloc(1, sizeof(connection));
+ con = typecalloc(connection);
if (con == NULL)
outofmem(__FILE__, "get_connection");
}
@@ -651,6 +715,7 @@ PRIVATE int get_connection ARGS2(
/* Get node name:
*/
+ CTRACE((tfp, "get_connection(%s)\n", arg));
{
char *p1 = HTParse(arg, "", PARSE_HOST);
char *p2 = strrchr(p1, '@'); /* user? */
@@ -707,10 +772,10 @@ PRIVATE int get_connection ARGS2(
if (status < 0) {
if (status == HT_INTERRUPTED) {
- CTRACE (tfp, "HTFTP: Interrupted on connect\n");
+ CTRACE((tfp, "HTFTP: Interrupted on connect\n"));
} else {
- CTRACE(tfp, "HTFTP: Unable to connect to remote host for `%s'.\n",
- arg);
+ CTRACE((tfp, "HTFTP: Unable to connect to remote host for `%s'.\n",
+ arg));
}
if (status == HT_INTERRUPTED) {
_HTProgress (CONNECTION_INTERRUPTED);
@@ -730,8 +795,8 @@ PRIVATE int get_connection ARGS2(
return status; /* Bad return */
}
- CTRACE(tfp, "FTP connected, socket %d control %ld\n",
- con->socket, (long)con);
+ CTRACE((tfp, "FTP connected, socket %d control %ld\n",
+ con->socket, (long)con));
control = con; /* Current control connection */
/* Initialise buffering for control connection */
@@ -744,7 +809,7 @@ PRIVATE int get_connection ARGS2(
status = response((char *)0); /* Get greeting */
if (status == HT_INTERRUPTED) {
- CTRACE (tfp, "HTFTP: Interrupted at beginning of login.\n");
+ CTRACE((tfp, "HTFTP: Interrupted at beginning of login.\n"));
_HTProgress (CONNECTION_INTERRUPTED);
NETCLOSE(control->socket);
control->socket = -1;
@@ -773,7 +838,7 @@ PRIVATE int get_connection ARGS2(
: "anonymous");
if (status == HT_INTERRUPTED) {
- CTRACE (tfp, "HTFTP: Interrupted while sending username.\n");
+ CTRACE((tfp, "HTFTP: Interrupted while sending username.\n"));
_HTProgress (CONNECTION_INTERRUPTED);
NETCLOSE(control->socket);
control->socket = -1;
@@ -830,8 +895,7 @@ PRIVATE int get_connection ARGS2(
status = response(command);
FREE(command);
if (status == HT_INTERRUPTED) {
- CTRACE (tfp,
- "HTFTP: Interrupted while sending password.\n");
+ CTRACE((tfp, "HTFTP: Interrupted while sending password.\n"));
_HTProgress (CONNECTION_INTERRUPTED);
NETCLOSE(control->socket);
control->socket = -1;
@@ -843,7 +907,7 @@ PRIVATE int get_connection ARGS2(
if (status == 3) {
status = send_cmd_1("ACCT noaccount");
if (status == HT_INTERRUPTED) {
- CTRACE (tfp, "HTFTP: Interrupted while sending password.\n");
+ CTRACE((tfp, "HTFTP: Interrupted while sending password.\n"));
_HTProgress (CONNECTION_INTERRUPTED);
NETCLOSE(control->socket);
control->socket = -1;
@@ -852,11 +916,11 @@ PRIVATE int get_connection ARGS2(
}
if (status != 2) {
- CTRACE(tfp, "HTFTP: Login fail: %s", response_text);
+ CTRACE((tfp, "HTFTP: Login fail: %s", response_text));
/* if (control->socket > 0) close_connection(control->socket); */
return -1; /* Bad return */
}
- CTRACE(tfp, "HTFTP: Logged in.\n");
+ CTRACE((tfp, "HTFTP: Logged in.\n"));
/** Check for host type **/
if (server_type != NETPRESENZ_SERVER)
@@ -868,71 +932,85 @@ PRIVATE int get_connection ARGS2(
"UNIX Type: L8 MAC-OS MachTen", 28) == 0) {
server_type = MACHTEN_SERVER;
use_list = TRUE;
- CTRACE(tfp, "HTFTP: Treating as MachTen server.\n");
+ CTRACE((tfp, "HTFTP: Treating as MachTen server.\n"));
} else if (strstr(response_text+4, "UNIX") != NULL ||
strstr(response_text+4, "Unix") != NULL) {
server_type = UNIX_SERVER;
+ unsure_type = FALSE; /* to the best of out knowledge... */
use_list = TRUE;
- CTRACE(tfp, "HTFTP: Treating as Unix server.\n");
+ CTRACE((tfp, "HTFTP: Treating as Unix server.\n"));
} else if (strstr(response_text+4, "MSDOS") != NULL) {
server_type = MSDOS_SERVER;
use_list = TRUE;
- CTRACE(tfp, "HTFTP: Treating as MSDOS (Unix emulation) server.\n");
+ CTRACE((tfp, "HTFTP: Treating as MSDOS (Unix emulation) server.\n"));
} else if (strncmp(response_text+4, "VMS", 3) == 0) {
- server_type = VMS_SERVER;
+ char *tilde = strstr(arg, "/~");
use_list = TRUE;
- CTRACE(tfp, "HTFTP: Treating as VMS server.\n");
+ if (tilde != 0
+ && tilde[2] != 0
+ && strstr(response_text+4, "MadGoat") != 0) {
+ server_type = UNIX_SERVER;
+ CTRACE((tfp, "HTFTP: Treating VMS as UNIX server.\n"));
+ } else {
+ server_type = VMS_SERVER;
+ CTRACE((tfp, "HTFTP: Treating as VMS server.\n"));
+ }
} else if ((strncmp(response_text+4, "VM/CMS", 6) == 0) ||
(strncmp(response_text+4, "VM ", 3) == 0)) {
server_type = CMS_SERVER;
use_list = TRUE;
- CTRACE(tfp, "HTFTP: Treating as CMS server.\n");
+ CTRACE((tfp, "HTFTP: Treating as CMS server.\n"));
} else if (strncmp(response_text+4, "DCTS", 4) == 0) {
server_type = DCTS_SERVER;
- CTRACE(tfp, "HTFTP: Treating as DCTS server.\n");
+ CTRACE((tfp, "HTFTP: Treating as DCTS server.\n"));
} else if (strstr(response_text+4, "MAC-OS TCP/Connect II") != NULL) {
server_type = TCPC_SERVER;
- CTRACE(tfp, "HTFTP: Looks like a TCPC server.\n");
+ CTRACE((tfp, "HTFTP: Looks like a TCPC server.\n"));
get_ftp_pwd(&server_type, &use_list);
unsure_type = TRUE;
} else if (server_type == NETPRESENZ_SERVER) { /* already set above */
use_list = TRUE;
set_mac_binary(server_type);
- CTRACE(tfp, "HTFTP: Treating as NetPresenz (MACOS) server.\n");
+ CTRACE((tfp, "HTFTP: Treating as NetPresenz (MACOS) server.\n"));
} else if (strncmp(response_text+4, "MACOS Peter's Server", 20) == 0) {
server_type = PETER_LEWIS_SERVER;
use_list = TRUE;
set_mac_binary(server_type);
- CTRACE(tfp, "HTFTP: Treating as Peter Lewis (MACOS) server.\n");
+ CTRACE((tfp, "HTFTP: Treating as Peter Lewis (MACOS) server.\n"));
} else if (strncmp(response_text+4, "Windows_NT", 10) == 0) {
server_type = WINDOWS_NT_SERVER;
- use_list = TRUE;
- CTRACE(tfp, "HTFTP: Treating as Window_NT server.\n");
+ CTRACE((tfp, "HTFTP: Treating as Window_NT server.\n"));
+ set_unix_dirstyle(&server_type, &use_list);
+
+ } else if (strncmp(response_text+4, "Windows2000", 11) == 0) {
+ server_type = WINDOWS_2K_SERVER;
+ CTRACE((tfp, "HTFTP: Treating as Window_2K server.\n"));
+ set_unix_dirstyle(&server_type, &use_list);
} else if (strncmp(response_text+4, "MS Windows", 10) == 0) {
server_type = MS_WINDOWS_SERVER;
use_list = TRUE;
- CTRACE(tfp, "HTFTP: Treating as MS Windows server.\n");
+ CTRACE((tfp, "HTFTP: Treating as MS Windows server.\n"));
} else if (strncmp(response_text+4,
"MACOS AppleShare IP FTP Server", 30) == 0) {
server_type = APPLESHARE_SERVER;
use_list = TRUE;
set_mac_binary(server_type);
- CTRACE(tfp, "HTFTP: Treating as AppleShare server.\n");
+ CTRACE((tfp, "HTFTP: Treating as AppleShare server.\n"));
} else {
server_type = GENERIC_SERVER;
- CTRACE(tfp, "HTFTP: Ugh! A Generic server.\n");
+ CTRACE((tfp, "HTFTP: Ugh! A Generic server.\n"));
get_ftp_pwd(&server_type, &use_list);
unsure_type = TRUE;
}
@@ -951,7 +1029,7 @@ PRIVATE int get_connection ARGS2(
close_connection(control->socket);
return -status; /* Bad return */
}
- CTRACE(tfp, "HTFTP: Port defined.\n");
+ CTRACE((tfp, "HTFTP: Port defined.\n"));
}
#endif /* NOTREPEAT_PORT */
return con->socket; /* Good return */
@@ -970,7 +1048,7 @@ PRIVATE int close_master_socket NOARGS
if (master_socket != -1)
FD_CLR(master_socket, &open_sockets);
status = NETCLOSE(master_socket);
- CTRACE(tfp, "HTFTP: Closed master socket %d\n", master_socket);
+ CTRACE((tfp, "HTFTP: Closed master socket %d\n", master_socket));
master_socket = -1;
if (status < 0)
return HTInetStatus(gettext("close master socket"));
@@ -995,8 +1073,15 @@ PRIVATE int close_master_socket NOARGS
*/
PRIVATE int get_listen_socket NOARGS
{
+#ifdef INET6
+ struct sockaddr_storage soc_address; /* Binary network address */
+ struct sockaddr_in* soc_in = (struct sockaddr_in *)&soc_address;
+ int af;
+ int slen;
+#else
struct sockaddr_in soc_address; /* Binary network address */
struct sockaddr_in* soc_in = &soc_address;
+#endif /* INET6 */
int new_socket; /* Will be master_socket */
@@ -1008,22 +1093,56 @@ PRIVATE int get_listen_socket NOARGS
return master_socket; /* Done already */
#endif /* !REPEAT_LISTEN */
+#ifdef INET6
+ /* query address family of control connection */
+ slen = sizeof(soc_address);
+ if (getsockname(control->socket, (struct sockaddr *)&soc_address,
+ &slen) < 0) {
+ return HTInetStatus("getsockname failed");
+ }
+ af = ((struct sockaddr *)&soc_address)->sa_family;
+ memset(&soc_address, 0, sizeof(soc_address));
+#endif /* INET6 */
+
/* Create internet socket
*/
+#ifdef INET6
+ new_socket = socket(af, SOCK_STREAM, IPPROTO_TCP);
+#else
new_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+#endif /* INET6 */
if (new_socket < 0)
return HTInetStatus(gettext("socket for master socket"));
- CTRACE(tfp, "HTFTP: Opened master socket number %d\n", new_socket);
+ CTRACE((tfp, "HTFTP: Opened master socket number %d\n", new_socket));
/* Search for a free port.
*/
+#ifdef INET6
+ memset(&soc_address, 0, sizeof(soc_address));
+ ((struct sockaddr *)&soc_address)->sa_family = af;
+ switch (af) {
+ case AF_INET:
+#ifdef SIN6_LEN
+ ((struct sockaddr *)&soc_address)->sa_len = sizeof(struct sockaddr_in);
+#endif /* SIN6_LEN */
+ break;
+ case AF_INET6:
+#ifdef SIN6_LEN
+ ((struct sockaddr *)&soc_address)->sa_len = sizeof(struct sockaddr_in6);
+#endif /* SIN6_LEN */
+ break;
+ default:
+ HTInetStatus("AF");
+ }
+#else
soc_in->sin_family = AF_INET; /* Family = internet, host order */
soc_in->sin_addr.s_addr = INADDR_ANY; /* Any peer address */
+#endif /* INET6 */
#ifdef POLL_PORTS
{
- unsigned short old_port_number = port_number;
+ PortNumber old_port_number = port_number;
for (port_number = (old_port_number+1); ; port_number++) {
int status;
if (port_number > LAST_TCP_PORT)
@@ -1031,27 +1150,33 @@ PRIVATE int get_listen_socket NOARGS
if (port_number == old_port_number) {
return HTInetStatus("bind");
}
+#ifdef INET6
+ soc_in->sin_port = htons(port_number);
+#else
soc_address.sin_port = htons(port_number);
+#endif /* INET6 */
#ifdef SOCKS
if (socks_flag)
if ((status=Rbind(new_socket,
(struct sockaddr*)&soc_address,
/* Cast to generic sockaddr */
- sizeof(soc_address)
+ SOCKADDR_LEN(soc_address)
#ifndef SHORTENED_RBIND
,socks_bind_remoteAddr
#endif /* !SHORTENED_RBIND */
- )) == 0)
+ )) == 0) {
break;
- else
+ } else
#endif /* SOCKS */
if ((status=bind(new_socket,
(struct sockaddr*)&soc_address,
/* Cast to generic sockaddr */
- sizeof(soc_address))) == 0)
+ SOCKADDR_LEN(soc_address)
+ )) == 0) {
break;
- CTRACE(tfp, "TCP bind attempt to port %d yields %d, errno=%d\n",
- port_number, status, SOCKET_ERRNO);
+ }
+ CTRACE((tfp, "TCP bind attempt to port %d yields %d, errno=%d\n",
+ port_number, status, SOCKET_ERRNO));
} /* for */
}
#else
@@ -1069,10 +1194,17 @@ PRIVATE int get_listen_socket NOARGS
(struct sockaddr *)&soc_address,
(void *)&address_length);
if (status<0) return HTInetStatus("getsockname");
- CTRACE(tfp, "HTFTP: This host is %s\n",
- HTInetString(soc_in));
+#ifdef INET6
+ CTRACE((tfp, "HTFTP: This host is %s\n",
+ HTInetString((SockA *)soc_in)));
+
+ soc_in->sin_port = 0; /* Unspecified: please allocate */
+#else
+ CTRACE((tfp, "HTFTP: This host is %s\n",
+ HTInetString(soc_in)));
soc_address.sin_port = 0; /* Unspecified: please allocate */
+#endif /* INET6 */
#ifdef SOCKS
if (socks_flag)
status=Rbind(new_socket,
@@ -1080,7 +1212,11 @@ PRIVATE int get_listen_socket NOARGS
/* Cast to generic sockaddr */
sizeof(soc_address)
#ifndef SHORTENED_RBIND
+#ifdef INET6
+ socks_bind_remoteAddr
+#else
,socks_bind_remoteAddr
+#endif /* INET6 */
#endif /* !SHORTENED_RBIND */
);
else
@@ -1088,7 +1224,8 @@ PRIVATE int get_listen_socket NOARGS
status=bind(new_socket,
(struct sockaddr*)&soc_address,
/* Cast to generic sockaddr */
- sizeof(soc_address));
+ SOCKADDR_LEN(soc_address)
+ );
if (status<0) return HTInetStatus("bind");
address_length = sizeof(soc_address);
@@ -1106,21 +1243,31 @@ PRIVATE int get_listen_socket NOARGS
}
#endif /* POLL_PORTS */
- CTRACE(tfp, "HTFTP: bound to port %d on %s\n",
+#ifdef INET6
+ CTRACE((tfp, "HTFTP: bound to port %d on %s\n",
+ (int)ntohs(soc_in->sin_port),
+ HTInetString((SockA *)soc_in)));
+#else
+ CTRACE((tfp, "HTFTP: bound to port %d on %s\n",
(int)ntohs(soc_in->sin_port),
- HTInetString(soc_in));
+ HTInetString(soc_in)));
+#endif /* INET6 */
#ifdef REPEAT_LISTEN
if (master_socket >= 0)
(void) close_master_socket();
-#endif /* REPEAD_LISTEN */
+#endif /* REPEAT_LISTEN */
master_socket = new_socket;
/* Now we must find out who we are to tell the other guy
*/
(void)HTHostName(); /* Make address valid - doesn't work*/
- sprintf(port_command, "PORT %d,%d,%d,%d,%d,%d%c%c",
+#ifdef INET6
+ switch (((struct sockaddr *)&soc_address)->sa_family) {
+ case AF_INET:
+#endif /* INET6 */
+ sprintf(port_command, "PORT %d,%d,%d,%d,%d,%d%c%c",
(int)*((unsigned char *)(&soc_in->sin_addr)+0),
(int)*((unsigned char *)(&soc_in->sin_addr)+1),
(int)*((unsigned char *)(&soc_in->sin_addr)+2),
@@ -1129,23 +1276,43 @@ PRIVATE int get_listen_socket NOARGS
(int)*((unsigned char *)(&soc_in->sin_port)+1),
CR, LF);
-
-/* Inform TCP that we will accept connections
-*/
- {
- int status;
+#ifdef INET6
+ break;
+
+ case AF_INET6:
+ {
+ char hostbuf[MAXHOSTNAMELEN];
+ char portbuf[MAXHOSTNAMELEN];
+ getnameinfo((struct sockaddr *)&soc_address,
+ SOCKADDR_LEN(soc_address),
+ hostbuf, sizeof(hostbuf), portbuf, sizeof(portbuf),
+ NI_NUMERICHOST | NI_NUMERICSERV);
+ sprintf(port_command, "EPRT |%d|%s|%s|%c%c", 2, hostbuf, portbuf,
+ CR, LF);
+ break;
+ }
+ default:
+ sprintf(port_command, "JUNK%c%c", CR, LF);
+ break;
+ }
+#endif /* INET6 */
+
+ /* Inform TCP that we will accept connections
+ */
+ {
+ int status;
#ifdef SOCKS
- if (socks_flag)
- status = Rlisten(master_socket, 1);
- else
+ if (socks_flag)
+ status = Rlisten(master_socket, 1);
+ else
#endif /* SOCKS */
- status = listen(master_socket, 1);
- if (status < 0) {
- master_socket = -1;
- return HTInetStatus("listen");
+ status = listen(master_socket, 1);
+ if (status < 0) {
+ master_socket = -1;
+ return HTInetStatus("listen");
+ }
}
- }
- CTRACE(tfp, "TCP: Master socket(), bind() and listen() all OK\n");
+ CTRACE((tfp, "TCP: Master socket(), bind() and listen() all OK\n"));
FD_SET(master_socket, &open_sockets);
if ((master_socket+1) > num_sockets)
num_sockets = master_socket+1;
@@ -1181,7 +1348,6 @@ PRIVATE void set_years_and_date NOARGS
day[0] = '0';
}
strncpy(month, (char *)ctime(&NowTime)+4, 3);
- strncpy(month, (char *)ctime(&NowTime)+4, 3);
month[3] = '\0';
for (i = 0; i < 12; i++) {
if (!strcasecomp(month, months[i])) {
@@ -1189,8 +1355,7 @@ PRIVATE void set_years_and_date NOARGS
}
}
i++;
- sprintf(month, "%s%d", (i < 10 ? "0" : ""), i);
- sprintf(date, "9999%.2s%.2s", month, day);
+ sprintf(date, "9999%02d%.2s", i, day);
TheDate = atoi(date);
strcpy(ThisYear, (char *)ctime(&NowTime)+20);
ThisYear[4] = '\0';
@@ -1229,7 +1394,7 @@ PRIVATE BOOLEAN is_ls_date ARGS1(
char *, s)
{
/* must start with three alpha characters */
- if (!isalpha(*s++) || !isalpha(*s++) || !isalpha(*s++))
+ if (!isalpha(UCH(*s++)) || !isalpha(UCH(*s++)) || !isalpha(UCH(*s++)))
return FALSE;
/* space or HT_NON_BREAK_SPACE */
@@ -1240,14 +1405,14 @@ PRIVATE BOOLEAN is_ls_date ARGS1(
s++;
/* space or digit */
- if (!(*s == ' ' || isdigit(*s))) {
+ if (!(*s == ' ' || isdigit(UCH(*s)))) {
s++;
return FALSE;
}
s++;
/* digit */
- if (!isdigit(*s++))
+ if (!isdigit(UCH(*s++)))
return FALSE;
/* space */
@@ -1255,29 +1420,29 @@ PRIVATE BOOLEAN is_ls_date ARGS1(
return FALSE;
/* space or digit */
- if (!(*s == ' ' || isdigit(*s))) {
+ if (!(*s == ' ' || isdigit(UCH(*s)))) {
s++;
return FALSE;
}
s++;
/* digit */
- if (!isdigit(*s++))
+ if (!isdigit(UCH(*s++)))
return FALSE;
/* colon or digit */
- if (!(*s == ':' || isdigit(*s))) {
+ if (!(*s == ':' || isdigit(UCH(*s)))) {
s++;
return FALSE;
}
s++;
/* digit */
- if (!isdigit(*s++))
+ if (!isdigit(UCH(*s++)))
return FALSE;
/* space or digit */
- if (!(*s == ' ' || isdigit(*s))) {
+ if (!(*s == ' ' || isdigit(UCH(*s)))) {
s++;
return FALSE;
}
@@ -1336,6 +1501,7 @@ PRIVATE void parse_eplf_line ARGS2(
break;
case '/':
StrAllocCopy(info->type, ENTRY_IS_DIRECTORY);
+ /* FALLTHRU */
default:
while (*cp) {
if (*cp++ == ',')
@@ -1354,12 +1520,12 @@ PRIVATE void parse_ls_line ARGS2(
char *, line,
EntryInfo *, entry_info)
{
- short i, j;
+ int i, j;
int base=1;
int size_num=0;
for (i = strlen(line) - 1;
- (i > 13) && (!isspace(line[i]) || !is_ls_date(&line[i-12])); i--)
+ (i > 13) && (!isspace(UCH(line[i])) || !is_ls_date(&line[i-12])); i--)
; /* null body */
line[i] = '\0';
if (i > 13) {
@@ -1375,7 +1541,7 @@ PRIVATE void parse_ls_line ARGS2(
}
}
j = i - 14;
- while (isdigit(line[j])) {
+ while (isdigit(UCH(line[j]))) {
size_num += (line[j] - '0') * base;
base *= 10;
j--;
@@ -1385,6 +1551,111 @@ PRIVATE void parse_ls_line ARGS2(
} /* parse_ls_line() */
/*
+ * parse_dls_line() --
+ * Extract the name and size info and whether it refers to a
+ * directory from a LIST line in "dls" format.
+ */
+PRIVATE void parse_dls_line ARGS3(
+ char *, line,
+ EntryInfo *, entry_info,
+ char **, pspilledname)
+{
+ short j;
+ int base=1;
+ int size_num=0;
+ int len;
+ char *cps = NULL;
+
+ /* README 763 Information about this server\0
+ bin/ - \0
+ etc/ = \0
+ ls-lR 0 \0
+ ls-lR.Z 3 \0
+ pub/ = Public area\0
+ usr/ - \0
+ morgan 14 -> ../real/morgan\0
+ TIMIT.mostlikely.Z\0
+ 79215 \0
+ */
+
+ len = strlen(line);
+ if (len == 0) {
+ FREE(*pspilledname);
+ entry_info->display = FALSE;
+ return;
+ }
+ cps = LYSkipNonBlanks(line);
+ if (*cps == '\0') { /* only a filename, save it and return. */
+ StrAllocCopy(*pspilledname, line);
+ entry_info->display = FALSE;
+ return;
+ }
+ if (len < 24 || line[23] != ' ' ||
+ (isspace(UCH(line[0])) && !*pspilledname)) {
+ /* this isn't the expected "dls" format! */
+ if (!isspace(UCH(line[0])))
+ *cps = '\0';
+ if (*pspilledname && !*line) {
+ entry_info->filename = *pspilledname;
+ *pspilledname = NULL;
+ if (entry_info->filename[strlen(entry_info->filename)-1] == '/')
+ StrAllocCopy(entry_info->type, ENTRY_IS_DIRECTORY);
+ else
+ StrAllocCopy(entry_info->type, "");
+ } else {
+ StrAllocCopy(entry_info->filename, line);
+ if (cps && cps != line && *(cps-1) == '/')
+ StrAllocCopy(entry_info->type, ENTRY_IS_DIRECTORY);
+ else
+ StrAllocCopy(entry_info->type, "");
+ FREE(*pspilledname);
+ }
+ return;
+ }
+
+ j = 22;
+ if (line[j] == '=' || line[j] == '-') {
+ StrAllocCopy(entry_info->type, ENTRY_IS_DIRECTORY);
+ } else {
+ while (isdigit(UCH(line[j]))) {
+ size_num += (line[j] - '0') * base;
+ base *= 10;
+ j--;
+ }
+ }
+ entry_info->size = size_num;
+
+ cps = LYSkipBlanks(&line[23]);
+ if (!strncmp(cps, "-> ", 3) && cps[3] != '\0' && cps[3] != ' ') {
+ StrAllocCopy(entry_info->type, gettext("Symbolic Link"));
+ entry_info->size = 0; /* don't display size */
+ }
+
+ if (j > 0)
+ line[j] = '\0';
+
+ LYTrimTrailing(line);
+
+ len = strlen(line);
+ if (len == 0 && *pspilledname && **pspilledname) {
+ line = *pspilledname;
+ len = strlen(*pspilledname);
+ }
+ if (len > 0 && line[len-1] == '/') {
+ /*
+ ** It's a dir, remove / and mark it as such.
+ */
+ if (len > 1)
+ line[len-1] = '\0';
+ if (!entry_info->type)
+ StrAllocCopy(entry_info->type, ENTRY_IS_DIRECTORY);
+ }
+
+ StrAllocCopy(entry_info->filename, line);
+ FREE(*pspilledname);
+} /* parse_dls_line() */
+
+/*
* parse_vms_dir_entry()
* Format the name, date, and size from a VMS LIST line
* into the EntryInfo structure - FM
@@ -1457,34 +1728,26 @@ PRIVATE void parse_vms_dir_entry ARGS2(
/** Track down the date. **/
if ((cpd=strchr(cp, '-')) != NULL &&
- strlen(cpd) > 9 && isdigit(*(cpd-1)) &&
- isalpha(*(cpd+1)) && *(cpd+4) == '-') {
+ strlen(cpd) > 9 && isdigit(UCH(*(cpd-1))) &&
+ isalpha(UCH(*(cpd+1))) && *(cpd+4) == '-') {
/** Month **/
- *(cpd+4) = '\0';
- *(cpd+2) = TOLOWER(*(cpd+2));
- *(cpd+3) = TOLOWER(*(cpd+3));
- sprintf(date, "%s ", cpd+1);
- *(cpd+4) = '-';
+ *(cpd+2) = (char) TOLOWER(*(cpd+2));
+ *(cpd+3) = (char) TOLOWER(*(cpd+3));
+ sprintf(date, "%.3s ", cpd+1);
/** Day **/
- *cpd = '\0';
- if (isdigit(*(cpd-2)))
- sprintf(date+4, "%s ", cpd-2);
+ if (isdigit(UCH(*(cpd-2))))
+ sprintf(date+4, "%.2s ", cpd-2);
else
- sprintf(date+4, "%c%s ", HT_NON_BREAK_SPACE, cpd-1);
- *cpd = '-';
+ sprintf(date+4, "%c%.1s ", HT_NON_BREAK_SPACE, cpd-1);
/** Time or Year **/
if (!strncmp(ThisYear, cpd+5, 4) &&
strlen(cpd) > 15 && *(cpd+12) == ':') {
- *(cpd+15) = '\0';
- sprintf(date+7, "%s", cpd+10);
- *(cpd+15) = ' ';
+ sprintf(date+7, "%.5s", cpd+10);
} else {
- *(cpd+9) = '\0';
- sprintf(date+7, " %s", cpd+5);
- *(cpd+9) = ' ';
+ sprintf(date+7, " %.4s", cpd+5);
}
StrAllocCopy(entry_info->date, date);
@@ -1494,13 +1757,13 @@ PRIVATE void parse_vms_dir_entry ARGS2(
if ((cpd=strchr(cp, '/')) != NULL) {
/* Appears be in used/allocated format */
cps = cpd;
- while (isdigit(*(cps-1)))
+ while (isdigit(UCH(*(cps-1))))
cps--;
if (cps < cpd)
*cpd = '\0';
entry_info->size = atoi(cps);
cps = cpd+1;
- while (isdigit(*cps))
+ while (isdigit(UCH(*cps)))
cps++;
*cps = '\0';
ialloc = atoi(cpd+1);
@@ -1513,7 +1776,7 @@ PRIVATE void parse_vms_dir_entry ARGS2(
/* Now let's hunt for a lone, size number */
while ((cps=strtok(NULL, sp)) != NULL) {
cpd = cps;
- while (isdigit(*cpd))
+ while (isdigit(UCH(*cpd)))
cpd++;
if (*cpd == '\0') {
/* Assume it's blocks */
@@ -1524,10 +1787,10 @@ PRIVATE void parse_vms_dir_entry ARGS2(
}
/** Wrap it up **/
- CTRACE(tfp, "HTFTP: VMS filename: %s date: %s size: %d\n",
+ CTRACE((tfp, "HTFTP: VMS filename: %s date: %s size: %d\n",
entry_info->filename,
entry_info->date ? entry_info->date : "",
- entry_info->size);
+ entry_info->size));
return;
} /* parse_vms_dir_entry() */
@@ -1562,7 +1825,7 @@ PRIVATE void parse_ms_windows_dir_entry ARGS2(
cps = LYSkipBlanks(cps);
cpd = LYSkipNonBlanks(cps);
*cpd++ = '\0';
- if (isdigit(*cps)) {
+ if (isdigit(UCH(*cps))) {
entry_info->size = atoi(cps);
} else {
StrAllocCopy(entry_info->type, ENTRY_IS_DIRECTORY);
@@ -1585,10 +1848,10 @@ PRIVATE void parse_ms_windows_dir_entry ARGS2(
*(cpd+17) = '\0'; /* Time */
if (strcmp(ThisYear, cpd+7))
/* Not this year, so show the year */
- sprintf(date, "%s %s", cpd, (cpd+7));
+ sprintf(date, "%.6s %.4s", cpd, (cpd+7));
else
/* Is this year, so show the time */
- sprintf(date, "%s %s", cpd, (cpd+12));
+ sprintf(date, "%.6s %.5s", cpd, (cpd+12));
StrAllocCopy(entry_info->date, date);
if (entry_info->date[4] == ' '|| entry_info->date[4] == '0') {
entry_info->date[4] = HT_NON_BREAK_SPACE;
@@ -1597,10 +1860,10 @@ PRIVATE void parse_ms_windows_dir_entry ARGS2(
}
/** Wrap it up **/
- CTRACE(tfp, "HTFTP: MS Windows filename: %s date: %s size: %d\n",
+ CTRACE((tfp, "HTFTP: MS Windows filename: %s date: %s size: %d\n",
entry_info->filename,
entry_info->date ? entry_info->date : "",
- entry_info->size);
+ entry_info->size));
return;
} /* parse_ms_windows_dir_entry */
@@ -1666,16 +1929,16 @@ PRIVATE void parse_windows_nt_dir_entry ARGS2(
*(cp+2) = '\0'; /* Month */
i = atoi(cp) - 1;
*(cp+5) = '\0'; /* Day */
- sprintf(date, "%s %s", months[i], (cp+3));
+ sprintf(date, "%.3s %.2s", months[i], (cp+3));
if (date[4] == '0')
date[4] = ' ';
cp += 6; /* Year */
if (strcmp((ThisYear+2), cp)) {
/* Not this year, so show the year */
if (atoi(cp) < 70) {
- sprintf(&date[6], " 20%s", cp);
+ sprintf(&date[6], " 20%.2s", cp);
} else {
- sprintf(&date[6], " 19%s", cp);
+ sprintf(&date[6], " 19%.2s", cp);
}
} else {
/* Is this year, so show the time */
@@ -1683,9 +1946,7 @@ PRIVATE void parse_windows_nt_dir_entry ARGS2(
i = atoi(cpd);
if (*(cpd+5) == 'P' || *(cpd+5) == 'p')
i += 12;
- *(cpd+5) = '\0';
- sprintf(&date[6], " %s%d:%s",
- (i < 10 ? "0" : ""), i, (cpd+3));
+ sprintf(&date[6], " %02d:%.2s", i, (cpd+3));
}
StrAllocCopy(entry_info->date, date);
if (entry_info->date[4] == ' '|| entry_info->date[4] == '0') {
@@ -1708,10 +1969,10 @@ PRIVATE void parse_windows_nt_dir_entry ARGS2(
}
/** Wrap it up **/
- CTRACE(tfp, "HTFTP: Windows NT filename: %s date: %s size: %d\n",
+ CTRACE((tfp, "HTFTP: Windows NT filename: %s date: %s size: %d\n",
entry_info->filename,
entry_info->date ? entry_info->date : "",
- entry_info->size);
+ entry_info->size));
return;
} /* parse_windows_nt_dir_entry */
#endif /* NOTDEFINED */
@@ -1782,7 +2043,7 @@ PRIVATE void parse_cms_dir_entry ARGS2(
cp = LYSkipBlanks(cp);
cps = LYSkipNonBlanks(cp);
*cps++ = '\0';
- if (isdigit(*cp)) {
+ if (isdigit(UCH(*cp))) {
RecordLength = atoi(cp);
}
}
@@ -1793,7 +2054,7 @@ PRIVATE void parse_cms_dir_entry ARGS2(
cp = LYSkipBlanks(cp);
cps = LYSkipNonBlanks(cp);
*cps++ = '\0';
- if (isdigit(*cp)) {
+ if (isdigit(UCH(*cp))) {
Records = atoi(cp);
}
if (Records > 0 && RecordLength > 0) {
@@ -1812,7 +2073,7 @@ PRIVATE void parse_cms_dir_entry ARGS2(
if (((cps < end) &&
(cps = strchr(cpd, ':')) != NULL) &&
(cps < (end - 3) &&
- isdigit(*(cps+1)) && isdigit(*(cps+2)) && *(cps+3) == ':')) {
+ isdigit(UCH(*(cps+1))) && isdigit(UCH(*(cps+2))) && *(cps+3) == ':')) {
cps += 3;
*cps = '\0';
if ((cps - cpd) >= 14) {
@@ -1824,23 +2085,22 @@ PRIVATE void parse_cms_dir_entry ARGS2(
if (*cpd == ' ')
*cpd = '0';
i = atoi(cpd) - 1;
- sprintf(date, "%s %s", months[i], (cpd+3));
+ sprintf(date, "%.3s %.2s", months[i], (cpd+3));
if (date[4] == '0')
date[4] = ' ';
cpd += 6; /* Year */
if (strcmp((ThisYear+2), cpd)) {
/* Not this year, so show the year. */
if (atoi(cpd) < 70) {
- sprintf(&date[6], " 20%s", cpd);
+ sprintf(&date[6], " 20%.2s", cpd);
} else {
- sprintf(&date[6], " 19%s", cpd);
+ sprintf(&date[6], " 19%.2s", cpd);
}
} else {
/* Is this year, so show the time. */
*(cps+2) = '\0'; /* Hour */
i = atoi(cps);
- sprintf(&date[6], " %s%d:%s",
- (i < 10 ? "0" : ""), i, (cps+3));
+ sprintf(&date[6], " %02d:%.2s", i, (cps+3));
}
StrAllocCopy(entry_info->date, date);
if (entry_info->date[4] == ' '|| entry_info->date[4] == '0') {
@@ -1850,10 +2110,10 @@ PRIVATE void parse_cms_dir_entry ARGS2(
}
/** Wrap it up. **/
- CTRACE(tfp, "HTFTP: VM/CMS filename: %s date: %s size: %d\n",
+ CTRACE((tfp, "HTFTP: VM/CMS filename: %s date: %s size: %d\n",
entry_info->filename,
entry_info->date ? entry_info->date : "",
- entry_info->size);
+ entry_info->size));
return;
} /* parse_cms_dir_entry */
@@ -1865,9 +2125,10 @@ PRIVATE void parse_cms_dir_entry ARGS2(
* If first is true, this is the first name in a directory.
*/
-PRIVATE EntryInfo * parse_dir_entry ARGS2(
+PRIVATE EntryInfo * parse_dir_entry ARGS3(
char *, entry,
- BOOLEAN *, first)
+ BOOLEAN *, first,
+ char **, pspilledname)
{
EntryInfo *entry_info;
int i;
@@ -1885,11 +2146,57 @@ PRIVATE EntryInfo * parse_dir_entry ARGS2(
entry_info->display = TRUE;
switch (server_type) {
+ case DLS_SERVER:
+
+ /*
+ ** Interpret and edit LIST output from a Unix server
+ ** in "dls" format.
+ ** This one must have claimed to be Unix in order to
+ ** get here; if the first line looks fishy, we revert
+ ** to Unix and hope that fits better (this recovery is
+ ** untested). - kw
+ */
+
+ if (*first) {
+ len = strlen(entry);
+ if (!len || entry[0] == ' ' ||
+ (len >= 24 && entry[23] != ' ') ||
+ (len < 24 && strchr(entry, ' '))) {
+ server_type = UNIX_SERVER;
+ CTRACE((tfp,
+ "HTFTP: Falling back to treating as Unix server.\n"));
+ } else {
+ *first = FALSE;
+ }
+ }
+
+ if (server_type == DLS_SERVER) {
+ /* if still unchanged... */
+ parse_dls_line(entry, entry_info, pspilledname);
+
+ if (!entry_info->filename || *entry_info->filename == '\0') {
+ entry_info->display = FALSE;
+ return(entry_info);
+ }
+ if (!strcmp(entry_info->filename,"..") ||
+ !strcmp(entry_info->filename,"."))
+ entry_info->display = FALSE;
+ if (entry_info->type && *entry_info->type == '\0') {
+ FREE(entry_info->type);
+ return(entry_info);
+ }
+ /*
+ ** Goto the bottom and get real type.
+ */
+ break;
+ } /* fall through if server_type changed for *first == TRUE ! */
+
case UNIX_SERVER:
case PETER_LEWIS_SERVER:
case MACHTEN_SERVER:
case MSDOS_SERVER:
case WINDOWS_NT_SERVER:
+ case WINDOWS_2K_SERVER:
case APPLESHARE_SERVER:
case NETPRESENZ_SERVER:
/*
@@ -1948,7 +2255,7 @@ PRIVATE EntryInfo * parse_dir_entry ARGS2(
** Strip off " -> pathname".
*/
for (i = len - 1; (i > 3) &&
- (!isspace(entry[i]) ||
+ (!isspace(UCH(entry[i])) ||
(entry[i-1] != '>') ||
(entry[i-2] != '-') ||
(entry[i-3] != ' ')); i--)
@@ -2203,29 +2510,33 @@ PRIVATE int compare_EntryInfo_structs ARGS2(
}
}
i++;
- sprintf(month, "%s%d", (i < 10 ? "0" : ""), i);
+ sprintf(month, "%02d", i);
strcat(date1, month);
strncat(date1, &entry1->date[4], 2);
date1[8] = '\0';
if (date1[6] == ' ' || date1[6] == HT_NON_BREAK_SPACE) {
date1[6] = '0';
}
- if (date1[0] == '9' && atoi(date1) > TheDate) {
+ /* If no year given, assume last year if it would otherwise
+ * be in the future by more than one day. The one day
+ * tolerance is to account for a possible timezone
+ * difference. - kw */
+ if (date1[0] == '9' && atoi(date1) > TheDate + 1) {
for (i = 0; i < 4; i++) {
date1[i] = LastYear[i];
}
}
strcat(date1, time1);
- if (entry2->date[9] == ':') {
- strcpy(date2, "9999");
- strcpy(time2, &entry2->date[7]);
- if (time2[0] == ' ') {
- time2[0] = '0';
- }
- } else {
- strcpy(date2, &entry2->date[8]);
- strcpy(time2, "00:00");
+ if (entry2->date[9] == ':') {
+ strcpy(date2, "9999");
+ strcpy(time2, &entry2->date[7]);
+ if (time2[0] == ' ') {
+ time2[0] = '0';
}
+ } else {
+ strcpy(date2, &entry2->date[8]);
+ strcpy(time2, "00:00");
+ }
strncpy(month, entry2->date, 3);
month[3] = '\0';
for (i = 0; i < 12; i++) {
@@ -2234,14 +2545,18 @@ PRIVATE int compare_EntryInfo_structs ARGS2(
}
}
i++;
- sprintf(month, "%s%d", (i < 10 ? "0" : ""), i);
+ sprintf(month, "%02d", i);
strcat(date2, month);
strncat(date2, &entry2->date[4], 2);
date2[8] = '\0';
if (date2[6] == ' ' || date2[6] == HT_NON_BREAK_SPACE) {
date2[6] = '0';
}
- if (date2[0] == '9' && atoi(date2) > TheDate) {
+ /* If no year given, assume last year if it would otherwise
+ * be in the future by more than one day. The one day
+ * tolerance is to account for a possible timezone
+ * difference. - kw */
+ if (date2[0] == '9' && atoi(date2) > TheDate + 1) {
for (i = 0; i < 4; i++) {
date2[i] = LastYear[i];
}
@@ -2297,6 +2612,13 @@ PRIVATE int read_directory ARGS4(
_HTProgress (gettext("Receiving FTP directory."));
/*
+ * Force the current Date and Year (TheDate, ThisYear, and LastYear)
+ * to be recalculated for each directory request. Otherwise we have
+ * a problem with long-running sessions assuming the wrong date for
+ * today. - kw
+ */
+ HaveYears = FALSE;
+ /*
** Check whether we always want the home
** directory treated as Welcome. - FM
*/
@@ -2346,33 +2668,43 @@ PRIVATE int read_directory ARGS4(
int BytesReceived = 0;
int BytesReported = 0;
char NumBytes[64];
+ char *spilledname = NULL;
PUTC('\n'); /* prettier LJM */
for (ic = 0; ic != EOF;) { /* For each entry in the directory */
HTChunkClear(chunk);
if (HTCheckForInterrupt()) {
+ CTRACE((tfp,
+ "read_directory: interrupted after %d bytes\n",
+ BytesReceived));
WasInterrupted = TRUE;
if (BytesReceived) {
goto unload_btree; /* unload btree */
} else {
ABORT_TARGET;
HTBTreeAndObject_free(bt);
+ FREE(spilledname);
return HT_INTERRUPTED;
}
}
/* read directory entry
*/
+ interrupted_in_next_data_char = FALSE;
for (;;) { /* Read in one line as filename */
ic = NEXT_DATA_CHAR;
AgainForMultiNet:
if (interrupted_in_next_data_char) {
+ CTRACE((tfp,
+ "read_directory: interrupted_in_next_data_char after %d bytes\n",
+ BytesReceived));
WasInterrupted = TRUE;
if (BytesReceived) {
goto unload_btree; /* unload btree */
} else {
ABORT_TARGET;
HTBTreeAndObject_free(bt);
+ FREE(spilledname);
return HT_INTERRUPTED;
}
} else if ((char)ic == CR || (char)ic == LF) { /* Terminator? */
@@ -2417,7 +2749,14 @@ AgainForMultiNet:
BytesReceived += chunk->size;
if (BytesReceived > BytesReported + 1024) {
+#ifdef _WINDOWS
+ extern int ws_read_per_sec;
+
+ sprintf(NumBytes,gettext("Transferred %d bytes (%5d)"),
+ BytesReceived, ws_read_per_sec);
+#else
sprintf(NumBytes, TRANSFERRED_X_BYTES, BytesReceived);
+#endif
HTProgress(NumBytes);
BytesReported = BytesReceived;
}
@@ -2425,13 +2764,14 @@ AgainForMultiNet:
if (ic == EOF && chunk->size == 1)
/* 1 means empty: includes terminating 0 */
break;
- CTRACE(tfp, "HTFTP: Line in %s is %s\n",
- lastpath, chunk->data);
+ CTRACE((tfp, "HTFTP: Line in %s is %s\n",
+ lastpath, chunk->data));
- entry_info = parse_dir_entry(chunk->data, &first);
+ entry_info = parse_dir_entry(chunk->data, &first, &spilledname);
if (entry_info->display) {
- CTRACE(tfp, "Adding file to BTree: %s\n",
- entry_info->filename);
+ FREE(spilledname);
+ CTRACE((tfp, "Adding file to BTree: %s\n",
+ entry_info->filename));
HTBTree_add(bt, (EntryInfo *)entry_info);
} else {
free_entryinfo_struct_contents(entry_info);
@@ -2443,6 +2783,7 @@ AgainForMultiNet:
unload_btree:
HTChunkFree(chunk);
+ FREE(spilledname);
/* print out the handy help message if it exits :) */
if (help_message_cache_non_empty()) {
@@ -2466,6 +2807,14 @@ unload_btree:
/* Run through tree printing out in order
*/
{
+#ifdef SH_EX /* 1997/10/18 (Sat) 14:14:28 */
+ char *p, name_buff[256];
+ int name_len, dot_len;
+
+#define FNAME_WIDTH 30
+#define FILE_GAP 2
+
+#endif
HTBTElement * ele;
int i;
for (ele = HTBTree_next(bt, NULL);
@@ -2481,7 +2830,7 @@ unload_btree:
}
if (entry_info->type) {
- for (i = 0; entry_info->type[i] != '\0' && i < 15; i++)
+ for (i = 0; entry_info->type[i] != '\0' && i < 16; i++)
PUTC(entry_info->type[i]);
for (; i < 17; i++)
PUTC(' ');
@@ -2489,16 +2838,44 @@ unload_btree:
/* start the anchor */
HTDirEntry(target, lastpath, entry_info->filename);
+#ifdef SH_EX /* 1997/10/18 (Sat) 16:00 */
+ name_len = strlen(entry_info->filename);
+
+ sprintf(name_buff, "%-30s", entry_info->filename);
+
+ if (name_len < FNAME_WIDTH) {
+ dot_len = FNAME_WIDTH - FILE_GAP - name_len;
+ if (dot_len > 0) {
+ p = name_buff + name_len + 1;
+ while (dot_len--)
+ *p++ = '.';
+ }
+ } else {
+ name_buff[FNAME_WIDTH] = '\0';
+ }
+
+ PUTS(name_buff);
+#else
PUTS(entry_info->filename);
+#endif
END(HTML_A);
if (entry_info->size) {
+#ifdef SH_EX /* 1998/02/02 (Mon) 16:34:52 */
+ if (entry_info->size < 1024)
+ sprintf(string_buffer, "%6d bytes",
+ entry_info->size);
+ else
+ sprintf(string_buffer, "%6d Kb",
+ entry_info->size/1024);
+#else
if (entry_info->size < 1024)
sprintf(string_buffer, " %d bytes",
entry_info->size);
else
sprintf(string_buffer, " %dKb",
entry_info->size/1024);
+#endif
PUTS(string_buffer);
}
@@ -2514,27 +2891,25 @@ unload_btree:
FREE(lastpath);
- if (server_type == APPLESHARE_SERVER ||
- server_type == NETPRESENZ_SERVER) {
+ if (WasInterrupted || data_soc != -1) { /* should always be true */
/*
* Without closing the data socket first,
- * the response(NIL) below hangs. - KW
+ * the response(0) later may hang.
+ * Some servers expect the client to fin/ack the close
+ * of the data connection before proceeding with the
+ * conversation on the control connection. - kw
*/
- NETCLOSE(data_soc);
+ CTRACE((tfp, "HTFTP: Closing data socket %d\n", data_soc));
+ status = NETCLOSE(data_soc);
+ if (status == -1)
+ HTInetStatus("close"); /* Comment only */
+ data_soc = -1;
}
if (WasInterrupted || HTCheckForInterrupt()) {
- if (server_type != CMS_SERVER)
- response(NIL);
_HTProgress(TRANSFER_INTERRUPTED);
- return HT_LOADED;
}
- if (server_type != CMS_SERVER)
- response(NIL);
return HT_LOADED;
-#ifdef NOTDEFINED
- return response(NIL) == 2 ? HT_LOADED : -1;
-#endif /* NOTDEFINED */
}
/* Retrieve File from Server
@@ -2554,39 +2929,47 @@ PUBLIC int HTFTPLoad ARGS4(
{
BOOL isDirectory = NO;
HTAtom * encoding = NULL;
- int status;
+ int status, final_status;
int retry; /* How many times tried? */
+ int outstanding = 1; /* outstanding control connection responses
+ that we are willing to wait for, if we
+ get to the point of reading data - kw */
HTFormat format;
-
/* set use_list to NOT since we don't know what kind of server
* this is yet. And set the type to GENERIC
*/
use_list = FALSE;
server_type = GENERIC_SERVER;
+ HTReadProgress(0,0);
for (retry = 0; retry < 2; retry++) { /* For timed out/broken connections */
status = get_connection(name, anchor);
if (status < 0)
return status;
- if (!ftp_local_passive) {
+ if (!ftp_passive) {
status = get_listen_socket();
if (status < 0) {
NETCLOSE (control->socket);
control->socket = -1;
+#ifdef INET6
+ if (master_socket >= 0)
+ (void)close_master_socket ();
+#else
close_master_socket ();
+#endif /* INET6 */
/* HT_INTERRUPTED would fall through, if we could interrupt
somehow in the middle of it, which we currently can't. */
return status;
}
#ifdef REPEAT_PORT
- /* Inform the server of the port number we will listen on
+ /* Inform the server of the port number we will listen on
*/
status = response(port_command);
if (status == HT_INTERRUPTED) {
- CTRACE (tfp, "HTFTP: Interrupted in response (port_command)\n");
+ CTRACE((tfp, "HTFTP: Interrupted in response (port_command)\n"));
_HTProgress (CONNECTION_INTERRUPTED);
NETCLOSE (control->socket);
control->socket = -1;
@@ -2598,15 +2981,77 @@ PUBLIC int HTFTPLoad ARGS4(
continue; /* try again - net error*/
return -status; /* bad reply */
}
- CTRACE(tfp, "HTFTP: Port defined.\n");
+ CTRACE((tfp, "HTFTP: Port defined.\n"));
#endif /* REPEAT_PORT */
} else { /* Tell the server to be passive */
- char command[LINE_LENGTH+1];
+ char *command = NULL;
char *p;
- int reply, h0, h1, h2, h3, p0, p1; /* Parts of reply */
+ int h0, h1, h2, h3, p0, p1; /* Parts of reply */
+#ifdef INET6
+ char dst[LINE_LENGTH+1];
+#endif
data_soc = status;
+#ifdef INET6
+ status = send_cmd_1(p = "EPSV");
+ if (status < 0) /* retry or Bad return */
+ continue;
+ else if (status != 2) {
+ status = send_cmd_1(p = "PASV");
+ if (status < 0) /* retry or Bad return */
+ continue;
+ else if (status != 2) {
+ return -status; /* bad reply */
+ }
+ }
+
+ if (strcmp(p, "PASV") == 0) {
+ for (p = response_text; *p && *p != ','; p++)
+ ; /* null body */
+
+ while (--p > response_text && '0' <= *p && *p <= '9')
+ ; /* null body */
+ status = sscanf(p+1, "%d,%d,%d,%d,%d,%d",
+ &h0, &h1, &h2, &h3, &p0, &p1);
+ if (status < 4) {
+ fprintf(tfp, "HTFTP: PASV reply has no inet address!\n");
+ return -99;
+ }
+ passive_port = (p0<<8) + p1;
+ snprintf(dst, sizeof(dst), "%d.%d.%d.%d", h0, h1, h2, h3);
+ } else if (strcmp(p, "EPSV") == 0) {
+ unsigned char c0, c1, c2, c3;
+ struct sockaddr_storage ss;
+ int sslen;
+
+ /*
+ * EPSV bla (|||port|)
+ */
+ for (p = response_text; *p && !isspace(*p); p++)
+ ; /* null body */
+ for (/*nothing*/; *p && *p && *p != '('; p++) /*)*/
+ ; /* null body */
+ status = sscanf(p, "(%c%c%c%d%c)", &c0, &c1, &c2, &p0, &c3);
+ if (status != 5) {
+ fprintf(tfp, "HTFTP: EPSV reply has invalid format!\n");
+ return -99;
+ }
+ passive_port = p0;
+
+ sslen = sizeof(ss);
+ if (getpeername(control->socket, (struct sockaddr *)&ss,
+ &sslen) < 0) {
+ fprintf(tfp, "HTFTP: getpeername(control) failed\n");
+ return -99;
+ }
+ if (getnameinfo((struct sockaddr *)&ss, sslen, dst,
+ sizeof(dst), NULL, 0, NI_NUMERICHOST)) {
+ fprintf(tfp, "HTFTP: getnameinfo failed\n");
+ return -99;
+ }
+ }
+#else
status = send_cmd_1("PASV");
if (status != 2) {
if (status < 0)
@@ -2619,22 +3064,27 @@ PUBLIC int HTFTPLoad ARGS4(
while (--p > response_text && '0' <= *p && *p <= '9')
; /* null body */
- status = sscanf(p+1, "%d,%d,%d,%d,%d,%d",
- &h0, &h1, &h2, &h3, &p0, &p1);
- if (status < 4) {
- fprintf(tfp, "HTFTP: PASV reply has no inet address!\n");
- return -99;
- }
- passive_port = (p0<<8) + p1;
- CTRACE(tfp, "HTFTP: Server is listening on port %d\n",
- passive_port);
+ status = sscanf(p+1, "%d,%d,%d,%d,%d,%d",
+ &h0, &h1, &h2, &h3, &p0, &p1);
+ if (status < 4) {
+ fprintf(tfp, "HTFTP: PASV reply has no inet address!\n");
+ return -99;
+ }
+ passive_port = (PortNumber)((p0<<8) + p1);
+#endif /* INET6 */
+ CTRACE((tfp, "HTFTP: Server is listening on port %d\n",
+ passive_port));
+ /* Open connection for data: */
-/* Open connection for data:
-*/
- sprintf(command,
- "ftp://%d.%d.%d.%d:%d/",h0,h1,h2,h3,passive_port);
- status = HTDoConnect(name, "FTP", passive_port, &data_soc);
+#ifdef INET6
+ HTSprintf0(&command, "ftp://%s:%d/", dst, passive_port);
+#else
+ HTSprintf0(&command, "ftp://%d.%d.%d.%d:%d/",
+ h0, h1, h2, h3, passive_port);
+#endif
+ status = HTDoConnect(command, "FTP data", passive_port, &data_soc);
+ FREE(command);
if (status < 0) {
(void) HTInetStatus(gettext("connect for data"));
@@ -2642,7 +3092,7 @@ PUBLIC int HTFTPLoad ARGS4(
return status; /* Bad return */
}
- CTRACE(tfp, "FTP data connected, socket %d\n", data_soc);
+ CTRACE((tfp, "FTP data connected, socket %d\n", data_soc));
}
status = 0;
break; /* No more retries */
@@ -2656,6 +3106,7 @@ PUBLIC int HTFTPLoad ARGS4(
{
char *filename = HTParse(name, "", PARSE_PATH + PARSE_PUNCTUATION);
char *fname = filename; /** Save for subsequent free() **/
+ char *vmsname = NULL;
BOOL binary;
char *type = NULL;
char *cp;
@@ -2668,7 +3119,7 @@ PUBLIC int HTFTPLoad ARGS4(
init_help_message_cache(); /* to free memory */
NETCLOSE(control->socket);
control->socket = -1;
- CTRACE(tfp, "HTFTP: Rejecting path due to illegal escaped slash.\n");
+ CTRACE((tfp, "HTFTP: Rejecting path due to illegal escaped slash.\n"));
return -1;
}
}
@@ -2704,11 +3155,11 @@ PUBLIC int HTFTPLoad ARGS4(
}
}
if (*type != '\0') {
- CTRACE(tfp, "HTFTP: type=%s\n", type);
+ CTRACE((tfp, "HTFTP: type=%s\n", type));
}
}
HTUnEscape(filename);
- CTRACE(tfp, "HTFTP: UnEscaped %s\n", filename);
+ CTRACE((tfp, "HTFTP: UnEscaped %s\n", filename));
if (filename[1] == '~') {
/*
** Check if translation of HOME as tilde is supported,
@@ -2768,7 +3219,7 @@ PUBLIC int HTFTPLoad ARGS4(
format = HTFileFormat(filename, &encoding, NULL);
}
format = HTCharsetFormat(format, anchor, -1);
- binary = (encoding != HTAtom_for("8bit") &&
+ binary = (BOOL) (encoding != HTAtom_for("8bit") &&
encoding != HTAtom_for("7bit"));
if (!binary &&
/*
@@ -2816,6 +3267,7 @@ PUBLIC int HTFTPLoad ARGS4(
{
char *cp1, *cp2;
BOOL included_device = FALSE;
+ BOOL found_tilde = FALSE;
/** Accept only Unix-style filename **/
if (strchr(filename, ':') != NULL ||
strchr(filename, '[') != NULL) {
@@ -2823,7 +3275,7 @@ PUBLIC int HTFTPLoad ARGS4(
init_help_message_cache(); /* to free memory */
NETCLOSE(control->socket);
control->socket = -1;
- CTRACE(tfp, "HTFTP: Rejecting path due to non-Unix-style syntax.\n");
+ CTRACE((tfp, "HTFTP: Rejecting path due to non-Unix-style syntax.\n"));
return -1;
}
/** Handle any unescaped "/%2F" path **/
@@ -2833,15 +3285,12 @@ PUBLIC int HTFTPLoad ARGS4(
for (i = 0; filename[(i+1)]; i++)
filename[i] = filename[(i+1)];
filename[i] = '\0';
- CTRACE(tfp, "HTFTP: Trimmed '%s'\n", filename);
- cp = HTMake_VMS_name("", filename);
- CTRACE(tfp, "HTFTP: VMSized '%s'\n", cp);
+ CTRACE((tfp, "HTFTP: Trimmed '%s'\n", filename));
+ cp = HTVMS_name("", filename);
+ CTRACE((tfp, "HTFTP: VMSized '%s'\n", cp));
if ((cp1=strrchr(cp, ']')) != NULL) {
- cp1++;
- for (i = 0; cp1[i]; i++)
- filename[i] = cp1[i];
- filename[i] = '\0';
- CTRACE(tfp, "HTFTP: Filename '%s'\n", filename);
+ strcpy(filename, ++cp1);
+ CTRACE((tfp, "HTFTP: Filename '%s'\n", filename));
*cp1 = '\0';
status = send_cwd(cp);
if (status != 2) {
@@ -2879,22 +3328,16 @@ PUBLIC int HTFTPLoad ARGS4(
strchr(cp, ']') == NULL) {
cp1++;
if (*cp1 != '\0') {
- for (i = 0; cp1[i]; i++)
- filename[i] = cp1[i];
- filename[i] = '\0';
- CTRACE(tfp, "HTFTP: Filename '%s'\n", filename);
- *cp1 = '\0';
- strcat(cp, "[");
- strcat(cp, filename);
- strcat(cp, "]");
- status = send_cwd(cp);
+ strcpy(filename, cp1);
+ CTRACE((tfp, "HTFTP: Filename '%s'\n", filename));
+ HTSprintf0(&vmsname, "%.*s[%s]", cp1-cp, cp, filename);
+ status = send_cwd(vmsname);
if (status != 2) {
- *cp1 = '\0';
- strcat(cp, "[000000]");
- status = send_cwd(cp);
+ HTSprintf(&vmsname, "%.*s[000000]", cp1-cp, cp);
+ status = send_cwd(vmsname);
if (status != 2) {
- *cp1 = '\0';
- status = send_cwd(cp);
+ HTSprintf(&vmsname, "%.*s", cp1-cp, cp);
+ status = send_cwd(vmsname);
if (status != 2) {
FREE(fname);
init_help_message_cache();
@@ -2904,15 +3347,15 @@ PUBLIC int HTFTPLoad ARGS4(
}
}
} else {
- strcpy(cp, "000000");
- filename = cp;
+ HTSprintf0(&vmsname, "000000");
+ filename = vmsname;
}
}
} else if (0==strcmp(cp, (filename+1))) {
status = send_cwd(cp);
if (status != 2) {
- strcat(cp, ":");
- status = send_cwd(cp);
+ HTSprintf0(&vmsname, "%s:", cp);
+ status = send_cwd(vmsname);
if (status != 2) {
FREE(fname);
init_help_message_cache(); /* to free memory */
@@ -2921,8 +3364,8 @@ PUBLIC int HTFTPLoad ARGS4(
return ((status < 0) ? status : -status);
}
}
- strcpy(cp, "000000");
- filename = cp;
+ HTSprintf0(&vmsname, "000000");
+ filename = vmsname;
}
}
/** Trim trailing slash if filename is not the top directory **/
@@ -2987,9 +3430,11 @@ PUBLIC int HTFTPLoad ARGS4(
goto listen;
}
/** Otherwise, go to appropriate directory and doctor filename **/
- if (!strncmp(filename, "/~", 2))
+ if (!strncmp(filename, "/~", 2)) {
filename += 2;
- CTRACE(tfp, "check '%s' to translate x/y/ to [.x.y]\n", filename);
+ found_tilde = TRUE;
+ }
+ CTRACE((tfp, "check '%s' to translate x/y/ to [.x.y]\n", filename));
if (!included_device &&
(cp = strchr(filename, '/')) != NULL &&
(cp1 = strrchr(cp, '/')) != NULL &&
@@ -2998,10 +3443,10 @@ PUBLIC int HTFTPLoad ARGS4(
HTSprintf0(&tmp, "[.%.*s]", cp1-cp-1, cp+1);
- CTRACE(tfp, "change path '%s'\n", tmp);
+ CTRACE((tfp, "change path '%s'\n", tmp));
while ((cp2 = strrchr(tmp, '/')) != NULL)
*cp2 = '.';
- CTRACE(tfp, "...to path '%s'\n", tmp);
+ CTRACE((tfp, "...to path '%s'\n", tmp));
status = send_cwd(tmp);
FREE(tmp);
@@ -3015,7 +3460,7 @@ PUBLIC int HTFTPLoad ARGS4(
}
filename = cp1+1;
} else {
- if (!included_device) {
+ if (!included_device && !found_tilde) {
filename += 1;
}
}
@@ -3121,6 +3566,7 @@ PUBLIC int HTFTPLoad ARGS4(
}
}
FREE(fname);
+ FREE(vmsname);
if (status != 1) {
init_help_message_cache(); /* to free memory */
NETCLOSE(control->socket);
@@ -3133,9 +3579,13 @@ PUBLIC int HTFTPLoad ARGS4(
}
listen:
- if (!ftp_local_passive) {
+ if(!ftp_passive) {
/* Wait for the connection */
+#ifdef INET6
+ struct sockaddr_storage soc_address;
+#else
struct sockaddr_in soc_address;
+#endif /* INET6 */
int soc_addrlen=sizeof(soc_address);
#ifdef SOCKS
if (socks_flag)
@@ -3151,21 +3601,47 @@ listen:
init_help_message_cache(); /* to free memory */
return HTInetStatus("accept");
}
- CTRACE(tfp, "TCP: Accepted new socket %d\n", status);
+ CTRACE((tfp, "TCP: Accepted new socket %d\n", status));
data_soc = status;
- } /* !ftp_local_passive */
+ } /* !ftp_passive */
+
+#if 0 /* no - this makes the data connection go away too soon (2.8.3dev.22) */
+ if ((status = send_cmd_nowait("QUIT")) == 1)
+ outstanding++;
+#endif
if (isDirectory) {
- status = read_directory (anchor, name, format_out, sink);
- NETCLOSE(data_soc);
- NETCLOSE(control->socket);
- control->socket = -1;
- init_help_message_cache(); /* to free memory */
- return status;
- /* returns HT_LOADED or error */
+ if (server_type == UNIX_SERVER && !unsure_type &&
+ !strcmp(response_text,
+ "150 Opening ASCII mode data connection for /bin/dl.\n")) {
+ CTRACE((tfp, "HTFTP: Treating as \"dls\" server.\n"));
+ server_type = DLS_SERVER;
+ }
+ final_status = read_directory (anchor, name, format_out, sink);
+ if (final_status > 0) {
+ if (server_type != CMS_SERVER)
+ if (outstanding-- > 0) {
+ status = response(0);
+ if (status < 0 ||
+ (status == 2 && !strncmp(response_text, "221", 3)))
+ outstanding = 0;
+ }
+ } else { /* HT_INTERRUPTED */
+ /* User may have pressed 'z' to give up because no
+ packets got through, so let's not make them wait
+ any longer - kw */
+ outstanding = 0;
+ }
+
+ if (data_soc != -1) { /* normally done in read_directory */
+ CTRACE((tfp, "HTFTP: Closing data socket %d\n", data_soc));
+ status = NETCLOSE(data_soc);
+ if (status == -1)
+ HTInetStatus("close"); /* Comment only */
+ }
+ status = final_status;
} else {
int rv;
- int len;
char *FileName = HTParse(name, "", PARSE_PATH + PARSE_PUNCTUATION);
/** Clear any login messages **/
@@ -3183,29 +3659,29 @@ listen:
StrAllocCopy(anchor->content_encoding, HTAtom_name(encoding));
format = HTAtom_for("www/compressed");
- } else if ((len = strlen(FileName)) > 2) {
- if ((FileName[len - 1] == 'Z') &&
- (FileName[len - 2] == '.' ||
- FileName[len - 2] == '-' ||
- FileName[len - 2] == '_')) {
+ } else {
+ char *dot;
+ CompressFileType cft = HTCompressFileType(FileName, "._-", &dot);
- FileName[len - 2] = '\0';
+ if (cft != cftNone) {
+ *dot = '\0';
format = HTFileFormat(FileName, &encoding, NULL);
format = HTCharsetFormat(format, anchor, -1);
StrAllocCopy(anchor->content_type, format->name);
- StrAllocCopy(anchor->content_encoding, "x-compress");
format = HTAtom_for("www/compressed");
- } else if ((len > 3) &&
- !strcasecomp((char *)&FileName[len - 2], "gz")) {
- if (FileName[len - 3] == '.' ||
- FileName[len - 3] == '-' ||
- FileName[len - 3] == '_') {
- FileName[len - 3] = '\0';
- format = HTFileFormat(FileName, &encoding, NULL);
- format = HTCharsetFormat(format, anchor, -1);
- StrAllocCopy(anchor->content_type, format->name);
+
+ switch (cft) {
+ case cftCompress:
+ StrAllocCopy(anchor->content_encoding, "x-compress");
+ break;
+ case cftGzip:
StrAllocCopy(anchor->content_encoding, "x-gzip");
- format = HTAtom_for("www/compressed");
+ break;
+ case cftBzip2:
+ StrAllocCopy(anchor->content_encoding, "x-bzip2");
+ break;
+ default:
+ break;
}
}
}
@@ -3214,31 +3690,66 @@ listen:
_HTProgress (gettext("Receiving FTP file."));
rv = HTParseSocket(format, format_out, anchor, data_soc, sink);
- if (rv == HT_INTERRUPTED)
- _HTProgress(TRANSFER_INTERRUPTED);
-
HTInitInput(control->socket);
/* Reset buffering to control connection DD 921208 */
- status = NETCLOSE(data_soc);
- CTRACE(tfp, "HTFTP: Closing data socket %d\n", data_soc);
+ if (rv < 0) {
+#if 0 /* any known servers where ABOR would work this way? */
+ if (rv == HT_INTERRUPTED || rv == -501)
+ if (send_cmd_nowait("ABOR") == 1) {
+ outstanding++;
+ CTRACE((tfp, "HTFTP: outstanding responses: %d\n", outstanding));
+ }
+#endif
+ if (rv == -2) /* weird error, don't expect much response */
+ outstanding--;
+ else if (rv == HT_INTERRUPTED || rv == -1)
+ /* User may have pressed 'z' to give up because no
+ packets got through, so let's not make them wait
+ longer - kw */
+ outstanding = 0;
+ CTRACE((tfp, "HTFTP: Closing data socket %d\n", data_soc));
+ status = NETCLOSE(data_soc);
+ } else
+ status = 2; /* data_soc already closed in HTCopy - kw */
+
if (status < 0 && rv != HT_INTERRUPTED && rv != -1) {
(void) HTInetStatus("close"); /* Comment only */
- data_soc = -1; /* invalidate it */
} else {
- data_soc = -1; /* invalidate it */
- status = response(NIL); /* Pick up final reply */
- if (status != 2 && rv != HT_INTERRUPTED && rv != -1) {
- init_help_message_cache(); /* to free memory */
- return HTLoadError(sink, 500, response_text);
+ if (rv != HT_LOADED && outstanding--) {
+ status = response(0); /* Pick up final reply */
+ if (status != 2 && rv != HT_INTERRUPTED && rv != -1) {
+ data_soc = -1; /* invalidate it */
+ init_help_message_cache(); /* to free memory */
+ return HTLoadError(sink, 500, response_text);
+ } else if (status <= 0) {
+ outstanding = 0;
+ } else if (status == 2 && !strncmp(response_text, "221", 3))
+ outstanding = 0;
}
}
-
- NETCLOSE(control->socket);
- control->socket = -1;
- init_help_message_cache(); /* to free memory */
- return HT_LOADED;
+ final_status = HT_LOADED;
}
+ while (outstanding-- > 0 &&
+ (status > 0)) {
+ status = response(0);
+ if (status == 2 && !strncmp(response_text, "221", 3))
+ break;
+ }
+ data_soc = -1; /* invalidate it */
+ CTRACE((tfp, "HTFTPLoad: normal end; "));
+ if (control->socket < 0) {
+ CTRACE((tfp, "control socket is %d\n", control->socket));
+ } else {
+ CTRACE((tfp, "closing control socket %d\n", control->socket));
+ status = NETCLOSE(control->socket);
+ if (status == -1)
+ HTInetStatus("control connection close"); /* Comment only */
+ }
+ control->socket = -1;
+ init_help_message_cache(); /* to free memory */
+ /* returns HT_LOADED (always for file if we get here) or error */
+ return final_status;
} /* open_file_read */
/*
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFTP.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFTP.h
index 4ef22f2dc33..60168b610db 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFTP.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFTP.h
@@ -21,7 +21,7 @@
extern int HTfileSortMethod; /* specifies the method of sorting */
-/* PUBLIC HTMake_VMS_name()
+/* PUBLIC HTVMS_name()
** CONVERTS WWW name into a VMS name
** ON ENTRY:
** nn Node Name (optional)
@@ -32,7 +32,7 @@ extern int HTfileSortMethod; /* specifies the method of sorting */
**
** Bug: Returns pointer to static -- non-reentrant
*/
-PUBLIC char * HTMake_VMS_name PARAMS((
+PUBLIC char * HTVMS_name PARAMS((
CONST char * nn,
CONST char * fn));
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFWriter.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFWriter.c
index 943e1a22b3e..b8b0c5d9bc8 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFWriter.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFWriter.c
@@ -152,7 +152,7 @@ PRIVATE void HTFWriter_abort ARGS2(HTStream *, me, HTError, e)
{
fclose(me->fp);
if (me->end_command) { /* Temp file */
- CTRACE(tfp, "HTFWriter: Aborting: file not executed.\n");
+ CTRACE((tfp, "HTFWriter: Aborting: file not executed.\n"));
FREE(me->end_command);
if (me->remove_command) {
system(me->remove_command);
@@ -223,7 +223,7 @@ PUBLIC HTStream* HTSaveAndExecute ARGS3(
HTParentAnchor *, anchor, /* Not used */
HTStream *, sink) /* Not used */
-#ifdef unix
+#ifdef UNIX
#define REMOVE_COMMAND "/bin/rm -f %s\n"
#endif
#ifdef VMS
@@ -254,9 +254,9 @@ PUBLIC HTStream* HTSaveAndExecute ARGS3(
if (fnam == NULL)
outofmem(__FILE__, "HTSaveAndExecute");
tmpnam (fnam);
- if (suffix) strcat(fnam, suffix);
+ strcat(fnam, suffix);
- me->fp = fopen (fnam, "w");
+ me->fp = fopen (fnam, BIN_W);
if (!me->fp) {
HTAlert(CANNOT_OPEN_TEMP);
FREE(fnam);
@@ -326,14 +326,14 @@ PUBLIC HTStream* HTSaveLocally ARGS3(
if (fnam == NULL)
outofmem(__FILE__, "HTSaveLocally");
tmpnam (fnam);
- if (suffix) strcat(fnam, suffix);
+ strcat(fnam, suffix);
/* Save Panel */
answer = HTPrompt(GIVE_FILENAME, fnam);
FREE(fnam);
- me->fp = fopen (answer, "w");
+ me->fp = fopen (answer, BIN_W);
if (!me->fp) {
HTAlert(CANNOT_OPEN_OUTPUT);
FREE(answer);
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFile.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFile.c
index 35d77ea679a..829214e8f75 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFile.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFile.c
@@ -24,9 +24,9 @@
#ifndef VMS
#ifdef DOSPATH
+#undef LONG_LIST
#define LONG_LIST /* Define this for long style unix listings (ls -l),
the actual style is configurable from lynx.cfg */
-#define lstat stat
#endif
/* #define NO_PARENT_DIR_REFERENCE */ /* Define this for no parent links */
#endif /* !VMS */
@@ -46,7 +46,6 @@
#include <GridText.h>
#endif
-#define INFINITY 512 /* file name length @@ FIXME */
#define MULTI_SUFFIX ".multi" /* Extension for scanning formats */
#include <HTParse.h>
@@ -121,7 +120,6 @@ PUBLIC int HTDirReadme = HT_DIR_README_TOP;
#endif /* DIRED_SUPPORT */
extern BOOL HTPassEightBitRaw;
-extern HTCJKlang HTCJK;
PRIVATE char *HTMountRoot = "/Net/"; /* Where to find mounts */
#ifdef VMS
@@ -140,14 +138,6 @@ PRIVATE HTSuffix no_suffix = { "*", NULL, NULL, NULL, 1.0 };
PRIVATE HTSuffix unknown_suffix = { "*.*", NULL, NULL, NULL, 1.0};
-#ifdef _WINDOWS
-int exists(char *filename)
-{
- return (access(filename,0)==0);
-}
-#endif
-
-
/* To free up the suffixes at program exit.
** ----------------------------------------
*/
@@ -165,8 +155,10 @@ PRIVATE char *FormatStr ARGS3(
if (*start) {
sprintf(fmt, "%%%.*ss", (int) sizeof(fmt) - 3, start);
HTSprintf0(bufp, fmt, entry);
- } else {
- HTSprintf0(bufp, "%s", entry);
+ } else if (*bufp && !(entry && *entry)) {
+ **bufp = '\0';
+ } else if (entry) {
+ StrAllocCopy(*bufp, entry);
}
return *bufp;
}
@@ -182,7 +174,7 @@ PRIVATE char *FormatNum ARGS3(
HTSprintf0(bufp, fmt, entry);
} else {
sprintf(fmt, "%d", entry);
- StrAllocCat(*bufp, fmt);
+ StrAllocCopy(*bufp, fmt);
}
return *bufp;
}
@@ -203,17 +195,31 @@ PRIVATE void LYListFmtParse ARGS5(
char *buf = NULL;
char tmp[LY_MAXPATH];
char type;
+#ifndef _WINDOWS
char *name;
+#endif
time_t now;
char *datestr;
+#ifdef S_IFLNK
int len;
+#endif
#define SEC_PER_YEAR (60 * 60 * 24 * 365)
+
+#ifdef _WINDOWS /* 1998/01/06 (Tue) 21:20:53 */
+ static char *pbits[] = {
+ "---", "--x", "-w-", "-wx",
+ "r--", "r-x", "rw-", "rwx",
+ 0 };
+#define PBIT(a, n, s) pbits[((a) >> (n)) & 0x7]
+
+#else
static char *pbits[] = { "---", "--x", "-w-", "-wx",
"r--", "r-x", "rw-", "rwx", 0 };
static char *psbits[] = { "--S", "--s", "-wS", "-ws",
"r-S", "r-s", "rwS", "rws", 0 };
#define PBIT(a, n, s) (s) ? psbits[((a) >> (n)) & 0x7] : \
pbits[((a) >> (n)) & 0x7]
+#endif
#ifdef S_ISVTX
static char *ptbits[] = { "--T", "--t", "-wT", "-wt",
"r-T", "r-t", "rwT", "rwt", 0 };
@@ -248,7 +254,7 @@ PRIVATE void LYListFmtParse ARGS5(
if (s == end)
break;
start = ++s;
- while (isdigit(*s) || *s == '.' || *s == '-' || *s == ' ' ||
+ while (isdigit(UCH(*s)) || *s == '.' || *s == '-' || *s == ' ' ||
*s == '#' || *s == '+' || *s == '\'')
s++;
c = *s; /* the format char. or \0 */
@@ -341,7 +347,11 @@ PRIVATE void LYListFmtParse ARGS5(
case 'p': /* unix-style permission bits */
switch(st.st_mode & S_IFMT) {
+#if defined(_MSC_VER) && defined(_S_IFIFO)
+ case _S_IFIFO: type = 'p'; break;
+#else
case S_IFIFO: type = 'p'; break;
+#endif
case S_IFCHR: type = 'c'; break;
case S_IFDIR: type = 'd'; break;
case S_IFREG: type = '-'; break;
@@ -362,13 +372,23 @@ PRIVATE void LYListFmtParse ARGS5(
#endif /* S_IFSOCK */
default: type = '?'; break;
}
+#ifdef _WINDOWS
+ sprintf(tmp, "%c%s", type,
+ PBIT(st.st_mode, 6, st.st_mode & S_IRWXU));
+#else
sprintf(tmp, "%c%s%s%s", type,
PBIT(st.st_mode, 6, st.st_mode & S_ISUID),
PBIT(st.st_mode, 3, st.st_mode & S_ISGID),
PTBIT(st.st_mode, st.st_mode & S_ISVTX));
+#endif
FormatStr(&buf, start, tmp);
break;
+#ifdef _WINDOWS
+ case 'o': /* owner */
+ case 'g': /* group */
+ break;
+#else
case 'o': /* owner */
name = HTAA_UidToName (st.st_uid);
if (*name) {
@@ -386,6 +406,7 @@ PRIVATE void LYListFmtParse ARGS5(
FormatNum(&buf, start, (int) st.st_gid);
}
break;
+#endif
case 'l': /* link count */
FormatNum(&buf, start, (int) st.st_nlink);
@@ -431,10 +452,10 @@ PUBLIC void HTSetSuffix5 ARGS5(
CONST char *, representation,
CONST char *, encoding,
CONST char *, desc,
- float, value)
+ double, value)
{
HTSuffix * suff;
- BOOL trivial_enc = IsUnityEncStr(encoding);
+ BOOL trivial_enc = (BOOL) IsUnityEncStr(encoding);
if (strcmp(suffix, "*") == 0)
suff = &no_suffix;
@@ -451,7 +472,7 @@ PUBLIC void HTSetSuffix5 ARGS5(
break;
}
if (!suff) { /* Not found -- create a new node */
- suff = (HTSuffix *) calloc(1, sizeof(HTSuffix));
+ suff = typecalloc(HTSuffix);
if (suff == NULL)
outofmem(__FILE__, "HTSetSuffix");
@@ -484,7 +505,7 @@ PUBLIC void HTSetSuffix5 ARGS5(
StrAllocCopy(suff->desc, desc);
- suff->quality = value;
+ suff->quality = (float) value;
}
#ifdef LY_FIND_LEAKS
@@ -558,6 +579,50 @@ PRIVATE int HTCreatePath ARGS1(CONST char *,path)
}
#endif /* NOT_IMPLEMENTED */
+/* Convert filename from URL-path syntax to local path format
+** ----------------------------------------------------------
+** Input name is assumed to be the URL-path of a local file
+** URL, i.e. what comes after the "file://localhost".
+** '#'-fragments to be treated as such must already be stripped.
+** If expand_all is FALSE, unescape only escaped '/'. - kw
+**
+** On exit:
+** Returns a malloc'ed string which must be freed by the caller.
+*/
+PUBLIC char * HTURLPath_toFile ARGS2(
+ CONST char *, name,
+ BOOL, expand_all)
+{
+ char * path = NULL;
+ char * result = NULL;
+
+ StrAllocCopy(path, name);
+ if (expand_all)
+ HTUnEscape(path); /* Interpret all % signs */
+ else
+ HTUnEscapeSome(path, "/"); /* Interpret % signs for path delims */
+
+ CTRACE((tfp, "URLPath `%s' means path `%s'\n", name, path));
+#ifdef DOSPATH
+ StrAllocCopy(result, HTDOS_name(path));
+#else
+#ifdef __EMX__
+ if (path[0] == '/'
+ && isalpha(path[1])
+ && path[2] == ':') /* pesky leading slash */
+ StrAllocCopy(result, path+1);
+ else
+ StrAllocCopy(result, path);
+ CTRACE((tfp, "EMX hack changed `%s' to `%s'\n", path, result));
+#else
+ StrAllocCopy(result, path);
+#endif /* __EMX__ */
+#endif /* DOSPATH */
+
+ FREE(path);
+
+ return result;
+}
/* Convert filenames between local and WWW formats.
** ------------------------------------------------
** Make up a suitable name for saving the node in
@@ -568,6 +633,11 @@ PRIVATE int HTCreatePath ARGS1(CONST char *,path)
** On exit:
** Returns a malloc'ed string which must be freed by the caller.
*/
+/* NOTE: Don't use this function if you know that the input is a URL path
+ rather than a full URL, use HTURLPath_toFile instead. Otherwise
+ this function will return the wrong thing for some unusual
+ paths (like ones containing "//", possibly escaped). - kw
+*/
PUBLIC char * HTnameOfFile_WWW ARGS3(
CONST char *, name,
BOOL, WWW_prefix,
@@ -579,16 +649,16 @@ PUBLIC char * HTnameOfFile_WWW ARGS3(
char * home;
char * result = NULL;
- if (expand_all)
+ if (expand_all) {
HTUnEscape(path); /* Interpret all % signs */
- else
+ } else
HTUnEscapeSome(path, "/"); /* Interpret % signs for path delims */
if (0 == strcmp(acc_method, "file") /* local file */
|| !*acc_method) { /* implicitly local? */
if ((0 == strcasecomp(host, HTHostName())) ||
(0 == strcasecomp(host, "localhost")) || !*host) {
- CTRACE(tfp, "Node `%s' means path `%s'\n", name, path);
+ CTRACE((tfp, "Node `%s' means path `%s'\n", name, path));
#ifdef DOSPATH
StrAllocCopy(result, HTDOS_name(path));
#else
@@ -599,14 +669,14 @@ PUBLIC char * HTnameOfFile_WWW ARGS3(
StrAllocCopy(result, path+1);
else
StrAllocCopy(result, path);
- CTRACE(tfp, "EMX hack changed `%s' to `%s'\n", path, result);
+ CTRACE((tfp, "EMX hack changed `%s' to `%s'\n", path, result));
#else
StrAllocCopy(result, path);
#endif /* __EMX__ */
#endif /* DOSPATH */
} else if (WWW_prefix) {
HTSprintf0(&result, "%s%s%s", "/Net/", host, path);
- CTRACE(tfp, "Node `%s' means file `%s'\n", name, result);
+ CTRACE((tfp, "Node `%s' means file `%s'\n", name, result));
} else {
StrAllocCopy(result, path);
}
@@ -617,7 +687,12 @@ PUBLIC char * HTnameOfFile_WWW ARGS3(
else
home = HTVMS_wwwName(home);
#else
- if ((home = getenv("HOME")) == 0)
+#if defined(_WINDOWS) /* 1997/10/16 (Thu) 20:42:51 */
+ home = (char *)Home_Dir();
+#else
+ home = getenv("HOME");
+#endif
+ if (home == 0)
home = "/tmp";
#endif /* VMS */
HTSprintf0(&result, "%s/WWW/%s/%s%s", home, acc_method, host, path);
@@ -629,6 +704,9 @@ PUBLIC char * HTnameOfFile_WWW ARGS3(
FREE(path);
FREE(acc_method);
+ CTRACE((tfp, "HTnameOfFile_WWW(%s,%d,%d) = %s\n",
+ name, WWW_prefix, expand_all, result));
+
return result;
}
@@ -654,7 +732,7 @@ PUBLIC char * WWW_nameOfFile ARGS1(
} else {
HTSprintf0(&result, "file://%s%s", HTHostName(), name);
}
- CTRACE(tfp, "File `%s'\n\tmeans node `%s'\n", name, result);
+ CTRACE((tfp, "File `%s'\n\tmeans node `%s'\n", name, result));
return result;
}
@@ -687,7 +765,7 @@ PUBLIC CONST char * HTFileSuffix ARGS2(
HTFileInit();
#endif /* !NO_INIT */
- trivial_enc = IsUnityEncStr(enc);
+ trivial_enc = (BOOL) IsUnityEncStr(enc);
n = HTList_count(HTSuffixes);
for (i = 0; i < n; i++) {
suff = (HTSuffix *)HTList_objectAt(HTSuffixes, i);
@@ -802,6 +880,10 @@ PUBLIC HTFormat HTFileFormat ARGS3(
if (suff->rep) {
if (pdesc && !(*pdesc))
*pdesc = suff->desc;
+ if (pencoding && IsUnityEnc(*pencoding) &&
+ *pencoding != WWW_ENC_7BIT &&
+ !IsUnityEnc(suff->encoding))
+ *pencoding = suff->encoding;
#ifdef VMS
if (semicolon != NULL)
*semicolon = ';';
@@ -855,8 +937,8 @@ PUBLIC HTFormat HTCharsetFormat ARGS3(
LYLowerCase(cp);
if (((cp1 = strchr(cp, ';')) != NULL) &&
(cp2 = strstr(cp1, "charset")) != NULL) {
- CTRACE(tfp, "HTCharsetFormat: Extended MIME Content-Type is %s\n",
- format->name);
+ CTRACE((tfp, "HTCharsetFormat: Extended MIME Content-Type is %s\n",
+ format->name));
cp2 += 7;
while (*cp2 == ' ' || *cp2 == '=')
cp2++;
@@ -944,15 +1026,15 @@ PUBLIC HTFormat HTCharsetFormat ARGS3(
** of match.
*/
BOOL given_is_8859
- = (!strncmp(cp4, "iso-8859-", 9) &&
- isdigit((unsigned char)cp4[9]));
+ = (BOOL) (!strncmp(cp4, "iso-8859-", 9) &&
+ isdigit(UCH(cp4[9])));
BOOL given_is_8859like
- = (given_is_8859 ||
+ = (BOOL) (given_is_8859 ||
!strncmp(cp4, "windows-", 8) ||
!strncmp(cp4, "cp12", 4) ||
!strncmp(cp4, "cp-12", 5));
BOOL given_and_display_8859like
- = (given_is_8859like &&
+ = (BOOL) (given_is_8859like &&
(strstr(LYchar_set_names[current_char_set],
"ISO-8859") ||
strstr(LYchar_set_names[current_char_set],
@@ -965,7 +1047,7 @@ PUBLIC HTFormat HTCharsetFormat ARGS3(
if (given_is_8859) {
cp1 = &cp4[10];
while (*cp1 &&
- isdigit((unsigned char)(*cp1)))
+ isdigit(UCH(*cp1)))
cp1++;
*cp1 = '\0';
}
@@ -1003,6 +1085,85 @@ PUBLIC HTFormat HTCharsetFormat ARGS3(
return format;
}
+
+
+/* Get various pieces of meta info from file name.
+** -----------------------------------------------
+**
+** LYGetFileInfo fills in information that can be determined without
+** an actual (new) access to the filesystem, based on current suffix
+** and character set configuration. If the file has been loaded and
+** parsed before (with the same URL generated here!) and the anchor
+** is still around, some results may be influenced by that (in
+** particular, charset info from a META tag - this is not actually
+** tested!).
+** The caller should not keep pointers to the returned objects around
+** for too long, the valid lifetimes vary. In particular, the returned
+** charset string should be copied if necessary. If return of the
+** file_anchor is requested, that one can be used to retrieve
+** additional bits of info that are stored in the anchor object and
+** are not covered here; as usual, don't keep pointers to the
+** file_anchor longer than necessary since the object may disappear
+** through HTuncache_current_document or at the next document load.
+** - kw
+*/
+PUBLIC void LYGetFileInfo ARGS7(
+ CONST char *, filename,
+ HTParentAnchor **, pfile_anchor,
+ HTFormat *, pformat,
+ HTAtom **, pencoding,
+ CONST char**, pdesc,
+ CONST char**, pcharset,
+ int *, pfile_cs)
+{
+ char *Afn;
+ char *Aname = NULL;
+ HTFormat format;
+ HTAtom * myEnc = NULL;
+ HTParentAnchor *file_anchor;
+ CONST char *file_csname;
+ int file_cs;
+
+ /*
+ * Convert filename to URL. Note that it is always supposed to
+ * be a filename, not maybe-filename-maybe-URL, so we don't
+ * use LYFillLocalFileURL and LYEnsureAbsoluteURL. - kw
+ */
+ Afn = HTEscape(filename, URL_PATH);
+ LYLocalFileToURL(&Aname, Afn);
+ file_anchor = HTAnchor_parent(HTAnchor_findSimpleAddress(Aname));
+
+ file_csname = file_anchor->charset;
+ format = HTFileFormat(filename, &myEnc, pdesc);
+ format = HTCharsetFormat(format, file_anchor, UCLYhndl_HTFile_for_unspec);
+ file_cs = HTAnchor_getUCLYhndl(file_anchor, UCT_STAGE_MIME);
+ if (!file_csname) {
+ if (file_cs >= 0)
+ file_csname = LYCharSet_UC[file_cs].MIMEname;
+ else file_csname = "display character set";
+ }
+ CTRACE((tfp, "GetFileInfo: '%s' is a%s %s %s file, charset=%s (%d).\n",
+ filename,
+ ((myEnc && *HTAtom_name(myEnc) == '8') ? "n" : myEnc ? "" :
+ *HTAtom_name(format) == 'a' ? "n" : ""),
+ myEnc ? HTAtom_name(myEnc) : "",
+ HTAtom_name(format),
+ file_csname,
+ file_cs));
+ FREE(Afn);
+ FREE(Aname);
+ if (pfile_anchor)
+ *pfile_anchor = file_anchor;
+ if (pformat)
+ *pformat = format;
+ if (pencoding)
+ *pencoding = myEnc;
+ if (pcharset)
+ *pcharset = file_csname;
+ if (pfile_cs)
+ *pfile_cs = file_cs;
+ }
+
/* Determine value from file name.
** -------------------------------
**
@@ -1025,12 +1186,48 @@ PUBLIC float HTFileValue ARGS1(
suff = (HTSuffix *)HTList_objectAt(HTSuffixes, i);
ls = strlen(suff->suffix);
if ((ls <= lf) && 0==strcmp(suff->suffix, filename + lf - ls)) {
- CTRACE(tfp, "File: Value of %s is %.3f\n",
- filename, suff->quality);
+ CTRACE((tfp, "File: Value of %s is %.3f\n",
+ filename, suff->quality));
return suff->quality; /* OK -- found */
}
}
- return 0.3; /* Dunno! */
+ return (float)0.3; /* Dunno! */
+}
+
+/*
+** Determine compression type from file name, by looking at its suffix.
+** Sets as side-effect a pointer to the "dot" that begins the suffix.
+*/
+PUBLIC CompressFileType HTCompressFileType ARGS3(
+ char *, filename,
+ char *, dots,
+ char **, suffix)
+{
+ CompressFileType result = cftNone;
+ size_t len = strlen(filename);
+ char *ftype = filename + len;
+
+ if ((len > 4)
+ && !strcasecomp((ftype - 3), "bz2")
+ && strchr(dots, ftype[-4]) != 0) {
+ result = cftBzip2;
+ ftype -= 4;
+ } else if ((len > 3)
+ && !strcasecomp((ftype - 2), "gz")
+ && strchr(dots, ftype[-3]) != 0) {
+ result = cftGzip;
+ ftype -= 3;
+ } else if ((len > 2)
+ && !strcmp((ftype - 1), "Z")
+ && strchr(dots, ftype[-2]) != 0) {
+ result = cftCompress;
+ ftype -= 2;
+ }
+
+ *suffix = ftype;
+ CTRACE((tfp, "HTCompressFileType(%s) returns %d:%s\n",
+ filename, result, *suffix));
+ return result;
}
/* Determine write access to a file.
@@ -1043,36 +1240,10 @@ PUBLIC float HTFileValue ARGS1(
** 1. No code for non-unix systems.
** 2. Isn't there a quicker way?
*/
-
-#if defined(HAVE_CONFIG_H)
-
-#ifndef HAVE_GETGROUPS
-#define NO_GROUPS
-#endif
-
-#else
-
-#ifdef VMS
-#define NO_GROUPS
-#endif /* VMS */
-#ifdef NO_UNIX_IO
-#define NO_GROUPS
-#endif /* NO_UNIX_IO */
-#ifdef PCNFS
-#define NO_GROUPS
-#endif /* PCNFS */
-#ifdef NOUSERS
-#define NO_GROUPS
-#endif /* PCNFS */
-
-#endif /* HAVE_CONFIG_H */
-
PUBLIC BOOL HTEditable ARGS1(
CONST char *, filename)
{
-#ifdef NO_GROUPS
- return NO; /* Safe answer till we find the correct algorithm */
-#else
+#ifndef NO_GROUPS
GETGROUPS_T groups[NGROUPS];
uid_t myUid;
int ngroups; /* The number of groups */
@@ -1113,9 +1284,9 @@ PUBLIC BOOL HTEditable ARGS1(
return YES;
}
}
- CTRACE(tfp, "\tFile is not editable.\n");
- return NO; /* If no excuse, can't do */
+ CTRACE((tfp, "\tFile is not editable.\n"));
#endif /* NO_GROUPS */
+ return NO; /* If no excuse, can't do */
}
/* Make a save stream.
@@ -1130,7 +1301,7 @@ PUBLIC HTStream * HTFileSaveStream ARGS1(
CONST char * addr = HTAnchor_address((HTAnchor*)anchor);
char * localname = HTLocalName(addr);
- FILE* fp = fopen(localname, "w");
+ FILE* fp = fopen(localname, BIN_W);
if (!fp)
return NULL;
@@ -1193,9 +1364,9 @@ PUBLIC void HTDirEntry ARGS3(
** On exit:
** Returns TRUE if an "Up to <parent>" link was not created
** for a readable local directory because LONG_LIST is defined
-** and NO_PARENT_DIR_REFERENCE is not defined, such that the
-** calling function use LYListFmtParse() to create a link to
-** the parent directory. Otherwise, it returns FALSE. - FM
+** and NO_PARENT_DIR_REFERENCE is not defined, so that the
+** calling function should use LYListFmtParse() to create a link
+** to the parent directory. Otherwise, it returns FALSE. - FM
*/
PUBLIC BOOL HTDirTitles ARGS3(
HTStructured *, target,
@@ -1211,7 +1382,7 @@ PUBLIC BOOL HTDirTitles ARGS3(
#ifdef DOSPATH
BOOL local_link = FALSE;
- if (logical[18] == ':') local_link = TRUE;
+ if (strlen(logical) > 18 && logical[18] == ':') local_link = TRUE;
#endif
/*
** Check tildeIsTop for treating home directory as Welcome
@@ -1246,10 +1417,11 @@ PUBLIC BOOL HTDirTitles ARGS3(
char * printable = NULL;
#ifdef DIRED_SUPPORT
- printable = HTfullURL_toFile(
+ printable = HTURLPath_toFile(
(0 == strncasecomp(path, "/%2F", 4)) /* "//" ? */
? (path+1)
- : path);
+ : path,
+ TRUE);
if (0 == strncasecomp(printable, "/vmsysu:", 8) ||
0 == strncasecomp(printable, "/anonymou.", 10)) {
StrAllocCopy(cp, (printable+1));
@@ -1300,6 +1472,9 @@ PUBLIC BOOL HTDirTitles ARGS3(
/*
** Make link back to parent directory.
*/
+#ifdef DOSPATH
+ if (current != path) /* leave "/c:" alone */
+#endif
if (current && current[1]) { /* was a slash AND something else too */
char * parent = NULL;
char * relative = NULL;
@@ -1320,15 +1495,15 @@ PUBLIC BOOL HTDirTitles ARGS3(
HTSprintf0(&relative, "%s/..", current);
#ifdef DOSPATH
- if (local_link)
- if (strlen(parent) == 3 )
+ if (local_link) {
+ if (parent != 0 && strlen(parent) == 3 ) {
StrAllocCat(relative, "/.");
+ }
+ }
+ else
#endif
#if !defined (VMS)
-#ifdef DOSPATH
- if(!local_link)
-#endif
{
/*
** On Unix, if it's not ftp and the directory cannot
@@ -1425,15 +1600,11 @@ PUBLIC BOOL HTDirTitles ARGS3(
PRIVATE void do_readme ARGS2(HTStructured *, target, CONST char *, localname)
{
FILE * fp;
- char * readme_file_name =
- malloc(strlen(localname)+ 1 + strlen(HT_DIR_README_FILE) + 1);
- if (readme_file_name == NULL)
- outofmem(__FILE__, "do_readme");
- strcpy(readme_file_name, localname);
- strcat(readme_file_name, "/");
- strcat(readme_file_name, HT_DIR_README_FILE);
+ char * readme_file_name = NULL;
- fp = fopen(readme_file_name, "r");
+ HTSprintf0(&readme_file_name, "%s/%s", localname, HT_DIR_README_FILE);
+
+ fp = fopen(readme_file_name, "r");
if (fp) {
HTStructuredClass targetClass;
@@ -1441,8 +1612,8 @@ PRIVATE void do_readme ARGS2(HTStructured *, target, CONST char *, localname)
targetClass = *target->isa; /* (Can't init agregate in K&R) */
START(HTML_PRE);
for (;;){
- char c = fgetc(fp);
- if (c == (char)EOF) break;
+ int c = fgetc(fp);
+ if (c == EOF) break;
#ifdef NOTDEFINED
switch (c) {
case '&':
@@ -1458,10 +1629,10 @@ PRIVATE void do_readme ARGS2(HTStructured *, target, CONST char *, localname)
PUTC('\r');
Bug removed thanks to joe@athena.mit.edu */
default:
- PUTC(c);
+ PUTC((char)c);
}
#else
- PUTC(c);
+ PUTC((char)c);
#endif /* NOTDEFINED */
}
END(HTML_PRE);
@@ -1489,8 +1660,9 @@ PRIVATE int print_local_dir ARGS5(
BOOL need_parent_link = FALSE;
struct stat file_info;
int status;
+ int i;
- CTRACE(tfp, "print_local_dir() started\n");
+ CTRACE((tfp, "print_local_dir() started\n"));
logical = HTAnchor_address((HTAnchor*)anchor);
pathname = HTParse(logical, "",
@@ -1529,10 +1701,8 @@ PRIVATE int print_local_dir ARGS5(
target = HTML_new(anchor, format_out, sink);
targetClass = *target->isa; /* Copy routine entry points */
- { int i;
- for (i = 0; i < HTML_A_ATTRIBUTES; i++)
- present[i] = (i == HTML_A_HREF);
- }
+ for (i = 0; i < HTML_A_ATTRIBUTES; i++)
+ present[i] = (BOOL) (i == HTML_A_HREF);
/*
** The need_parent_link flag will be set if an
@@ -1559,7 +1729,7 @@ PRIVATE int print_local_dir ARGS5(
HTBTree * bt = HTBTree_new((HTComparer)AS_cmp);
int num_of_entries = 0; /* lines counter */
- _HTProgress (gettext("Reading directory..."));
+ _HTProgress (READING_DIRECTORY);
status = HT_LOADED; /* assume we don't get interrupted */
while ((dirbuf = readdir(dp)) != NULL) {
/*
@@ -1597,13 +1767,14 @@ PRIVATE int print_local_dir ARGS5(
StrAllocCat(tmpfilename, dirbuf->d_name);
stat(tmpfilename, &file_info);
- if (S_ISDIR(file_info.st_mode))
#ifndef DIRED_SUPPORT
+ if (S_ISDIR(file_info.st_mode))
HTSprintf0(&dirname, "D%s",dirbuf->d_name);
else
HTSprintf0(&dirname, "F%s",dirbuf->d_name);
/* D & F to have first directories, then files */
#else
+ if (S_ISDIR(file_info.st_mode))
{
if (dir_list_style == MIXED_STYLE)
HTSprintf0(&dirname, " %s/", dirbuf->d_name);
@@ -1641,9 +1812,9 @@ PRIVATE int print_local_dir ARGS5(
} /* end while directory entries left to read */
if (status != HT_PARTIAL_CONTENT)
- _HTProgress (gettext("OK"));
+ _HTProgress (OPERATION_OK);
else
- CTRACE(tfp, "Reading the directory interrupred by user\n");
+ CTRACE((tfp, "Reading the directory interrupted by user\n"));
/*
@@ -1652,7 +1823,7 @@ PRIVATE int print_local_dir ARGS5(
{
HTBTElement * next_element = HTBTree_next(bt,NULL);
/* pick up the first element of the list */
- int num_of_entries_partial = 0; /* lines counter */
+ int num_of_entries_output = 0; /* lines counter */
char state;
/* I for initial (.. file),
@@ -1667,19 +1838,28 @@ PRIVATE int print_local_dir ARGS5(
while (next_element != NULL) {
char *entry, *file_extra;
+#ifndef DISP_PARTIAL
+ if (num_of_entries_output % HTMAX(display_lines,10) == 0) {
+ if (HTCheckForInterrupt()) {
+ _HTProgress (TRANSFER_INTERRUPTED);
+ status = HT_PARTIAL_CONTENT;
+ break;
+ }
+ }
+#endif
StrAllocCopy(tmpfilename,localname);
if (strcmp(localname, "/"))
/*
** If filename is not root directory.
*/
- StrAllocCat(tmpfilename, "/");
+ LYAddHtmlSep(&tmpfilename);
- StrAllocCat(tmpfilename,
- (char *)HTBTree_object(next_element)+1);
+ entry = (char*)HTBTree_object(next_element)+1;
/*
** Append the current entry's filename
** to the path.
*/
+ StrAllocCat(tmpfilename, entry);
HTSimplify(tmpfilename);
/*
** Output the directory entry.
@@ -1706,7 +1886,7 @@ PRIVATE int print_local_dir ARGS5(
}
#endif /* !LONG_LIST */
state =
- (*(char *)(HTBTree_object(next_element))
+ (char) (*(char *)(HTBTree_object(next_element))
== 'D' ? 'D' : 'F');
START(HTML_H2);
if (dir_list_style != MIXED_STYLE) {
@@ -1733,7 +1913,7 @@ PRIVATE int print_local_dir ARGS5(
}
#endif /* !LONG_LIST */
state =
- (*(char *)(HTBTree_object(next_element))
+ (char) (*(char *)(HTBTree_object(next_element))
== 'D' ? 'D' : 'F');
START(HTML_H2);
START(HTML_EM);
@@ -1753,7 +1933,6 @@ PRIVATE int print_local_dir ARGS5(
START(HTML_LI);
#endif /* !LONG_LIST */
}
- entry = (char*)HTBTree_object(next_element)+1;
file_extra = NULL;
#ifdef LONG_LIST
@@ -1777,10 +1956,10 @@ PRIVATE int print_local_dir ARGS5(
/* optimize for expensive operation: */
#ifdef DISP_PARTIAL
- if (num_of_entries_partial %
+ if (num_of_entries_output %
(partial_threshold > 0 ? partial_threshold : display_lines)
== 0) {
- /* num_of_entries, num_of_entries_partial... */
+ /* num_of_entries, num_of_entries_output... */
/* HTReadProgress...(bytes, 0); */
HTDisplayPartial();
@@ -1790,7 +1969,7 @@ PRIVATE int print_local_dir ARGS5(
break;
}
}
- num_of_entries_partial++;
+ num_of_entries_output++;
#endif /* DISP_PARTIAL */
} /* end while next_element */
@@ -1807,7 +1986,6 @@ PRIVATE int print_local_dir ARGS5(
}
} /* end printing out the tree in order */
- closedir(dp);
FREE(logical);
FREE(tmpfilename);
FREE(tail);
@@ -1827,6 +2005,40 @@ PRIVATE int print_local_dir ARGS5(
#endif /* HAVE_READDIR */
+#ifndef VMS
+PUBLIC int HTStat ARGS2(
+ CONST char *, filename,
+ struct stat *, data)
+{
+ int result = -1;
+ char *temp_name = NULL;
+ size_t len = strlen(filename);
+
+ if (len != 0 && LYIsPathSep(filename[len-1])) {
+ HTSprintf0(&temp_name, "%s.", filename);
+ } else {
+ temp_name = (char *)filename;
+ }
+#ifdef _WINDOWS
+ /*
+ * Someone claims that stat() doesn't give the proper result for a
+ * directory on Windows.
+ */
+ if (access(temp_name, 0) == 0) {
+ if (stat(temp_name, data) == -1)
+ data->st_mode = S_IFDIR;
+ result = 0;
+ }
+#else
+ result = stat(temp_name, data);
+#endif
+
+ if (temp_name != filename) {
+ FREE(temp_name);
+ }
+ return result;
+}
+#endif
/* Load a document.
** ----------------
@@ -1848,13 +2060,13 @@ PUBLIC int HTLoadFile ARGS4(
{
char * filename = NULL;
char * acc_method = NULL;
- char * ftp_newhost;
HTFormat format;
char * nodename = NULL;
char * newname = NULL; /* Simplified name of file */
HTAtom * encoding; /* @@ not used yet */
HTAtom * myEncoding = NULL; /* enc of this file, may be gzip etc. */
int status;
+ char *dot;
#ifdef VMS
struct stat stat_info;
#endif /* VMS */
@@ -1882,34 +2094,20 @@ PUBLIC int HTLoadFile ARGS4(
strcmp(nodename, HTHostName()) != 0
#endif /* VMS */
)) {
+ status = -1;
FREE(newname);
FREE(filename);
FREE(nodename);
FREE(acc_method);
#ifndef DISABLE_FTP
- ftp_newhost = HTParse(addr, "", PARSE_HOST); /* HTParse mallocs */
- if (strcmp(ftp_lasthost, ftp_newhost))
- ftp_local_passive = ftp_passive; /* set to default */
-
status = HTFTPLoad(addr, anchor, format_out, sink);
-
- if ( ftp_passive == ftp_local_passive ) {
- if (( status <= -4 ) || ( status == -1 )) {
- ftp_local_passive = !ftp_passive;
- status = HTFTPLoad(addr, anchor, format_out, sink);
- }
- }
- free(ftp_lasthost);
- ftp_lasthost = ftp_newhost;
- return status;
-#else
- return -1;
#endif /* DISABLE_FTP */
+ return status;
} else {
FREE(newname);
FREE(acc_method);
}
-#ifdef VMS
+#if defined(VMS) || defined(DOSPATH)
HTUnEscape(filename);
#endif /* VMS */
@@ -1951,7 +2149,7 @@ PUBLIC int HTLoadFile ARGS4(
** to the directories or files listed.
*/
if (HTStat(filename, &stat_info) == -1) {
- CTRACE(tfp, "HTLoadFile: Can't stat %s\n", filename);
+ CTRACE((tfp, "HTLoadFile: Can't stat %s\n", filename));
} else {
if (S_ISDIR(stat_info.st_mode)) {
if (HTDirAccess == HT_DIR_FORBID) {
@@ -1961,14 +2159,9 @@ PUBLIC int HTLoadFile ARGS4(
}
if (HTDirAccess == HT_DIR_SELECTIVE) {
- char * enable_file_name =
- malloc(strlen(filename)+ 1 +
- strlen(HT_DIR_ENABLE_FILE) + 1);
- if (enable_file_name == NULL)
- outofmem(__FILE__, "HTLoadFile");
- strcpy(enable_file_name, filename);
- strcat(enable_file_name, "/");
- strcat(enable_file_name, HT_DIR_ENABLE_FILE);
+ char * enable_file_name = NULL;
+
+ HTSprintf0(&enable_file_name, "%s/%s", filename, HT_DIR_ENABLE_FILE);
if (HTStat(enable_file_name, &stat_info) == -1) {
FREE(filename);
FREE(nodename);
@@ -1998,18 +2191,16 @@ PUBLIC int HTLoadFile ARGS4(
*/
if (!fp) {
char * ultrixname = 0;
- CTRACE(tfp, "HTLoadFile: Can't open as %s\n", vmsname);
+ CTRACE((tfp, "HTLoadFile: Can't open as %s\n", vmsname));
HTSprintf0(&ultrixname, "%s::\"%s\"", nodename, filename);
fp = fopen(ultrixname, "r", "shr=put", "shr=upd");
if (!fp) {
- CTRACE(tfp, "HTLoadFile: Can't open as %s\n",
- ultrixname);
+ CTRACE((tfp, "HTLoadFile: Can't open as %s\n",
+ ultrixname));
}
FREE(ultrixname);
}
if (fp) {
- int len;
- char *cp = NULL;
char *semicolon = NULL;
if (HTEditable(vmsname)) {
@@ -2042,10 +2233,10 @@ PUBLIC int HTLoadFile ARGS4(
fclose(fp);
if (semicolon != NULL)
*semicolon = ';';
- gzfp = gzopen(vmsname, "rb");
+ gzfp = gzopen(vmsname, BIN_R);
- CTRACE(tfp, "HTLoadFile: gzopen of `%s' gives %p\n",
- vmsname, (void*)gzfp);
+ CTRACE((tfp, "HTLoadFile: gzopen of `%s' gives %p\n",
+ vmsname, (void*)gzfp));
use_gzread = YES;
} else
#endif /* USE_ZLIB */
@@ -2054,50 +2245,50 @@ PUBLIC int HTLoadFile ARGS4(
StrAllocCopy(anchor->content_encoding, HTAtom_name(myEncoding));
format = HTAtom_for("www/compressed");
}
- } else if ((len = strlen(vmsname)) > 2) {
- if ((vmsname[len - 1] == 'Z') &&
- (vmsname[len - 2] == '.' ||
- vmsname[len - 2] == '-' ||
- vmsname[len - 2] == '_') &&
- vmsname[len - 3] != ']' &&
- vmsname[len - 3] != ':') {
+ } else {
+ /* FIXME: should we check if suffix is after ']' or ':' ? */
+ CompressFileType cft = HTCompressFileType(vmsname, "._-", &dot);
+
+ if (cft != cftNone) {
+ char *cp = NULL;
+
StrAllocCopy(cp, vmsname);
- cp[len - 2] = '\0';
+ cp[dot - vmsname] = '\0';
format = HTFileFormat(cp, &encoding, NULL);
FREE(cp);
format = HTCharsetFormat(format, anchor,
UCLYhndl_HTFile_for_unspec);
StrAllocCopy(anchor->content_type, format->name);
+ }
+
+ switch (cft) {
+ case cftCompress:
StrAllocCopy(anchor->content_encoding, "x-compress");
format = HTAtom_for("www/compressed");
- } else if ((len > 3) &&
- !strcasecomp((char *)&vmsname[len - 2], "gz")) {
- if (vmsname[len - 3] == '.' ||
- vmsname[len - 3] == '-' ||
- vmsname[len - 3] == '_') {
- StrAllocCopy(cp, vmsname);
- cp[len - 3] = '\0';
- format = HTFileFormat(cp, &encoding, NULL);
- FREE(cp);
- format = HTCharsetFormat(format, anchor,
- UCLYhndl_HTFile_for_unspec);
- StrAllocCopy(anchor->content_type, format->name);
- StrAllocCopy(anchor->content_encoding, "x-gzip");
+ break;
+ case cftGzip:
+ StrAllocCopy(anchor->content_encoding, "x-gzip");
#ifdef USE_ZLIB
- if (strcmp(format_out->name, "www/download") != 0) {
- fclose(fp);
- if (semicolon != NULL)
- *semicolon = ';';
- gzfp = gzopen(vmsname, "rb");
+ if (strcmp(format_out->name, "www/download") != 0) {
+ fclose(fp);
+ if (semicolon != NULL)
+ *semicolon = ';';
+ gzfp = gzopen(vmsname, BIN_R);
- CTRACE(tfp, "HTLoadFile: gzopen of `%s' gives %p\n",
- vmsname, (void*)gzfp);
- use_gzread = YES;
- }
+ CTRACE((tfp, "HTLoadFile: gzopen of `%s' gives %p\n",
+ vmsname, (void*)gzfp));
+ use_gzread = YES;
+ }
#else /* USE_ZLIB */
- format = HTAtom_for("www/compressed");
+ format = HTAtom_for("www/compressed");
#endif /* USE_ZLIB */
- }
+ break;
+ case cftBzip2:
+ StrAllocCopy(anchor->content_encoding, "x-bzip2");
+ format = HTAtom_for("www/compressed");
+ break;
+ case cftNone:
+ break;
}
}
if (semicolon != NULL)
@@ -2146,7 +2337,7 @@ PUBLIC int HTLoadFile ARGS4(
FREE(filename);
}
-#else /* Unix: */
+#else /* not VMS: */
FREE(filename);
@@ -2177,7 +2368,7 @@ PUBLIC int HTLoadFile ARGS4(
BOOL forget_multi = NO;
STRUCT_DIRENT * dirbuf;
- float best = NO_VALUE_FOUND; /* So far best is bad */
+ float best = (float) NO_VALUE_FOUND; /* So far best is bad */
HTFormat best_rep = NULL; /* Set when rep found */
HTAtom * best_enc = NULL;
char * best_name = NULL; /* Best dir entry so far */
@@ -2217,40 +2408,38 @@ PUBLIC int HTLoadFile ARGS4(
filevalue,
0L /* @@@@@@ */);
if (value <= 0.0) {
+ char *atomname = NULL;
+ CompressFileType cft = HTCompressFileType(dirbuf->d_name, ".", &dot);
char * cp = NULL;
- int len = strlen(dirbuf->d_name);
+
enc = NULL;
- if (len > 2 &&
- dirbuf->d_name[len - 1] == 'Z' &&
- dirbuf->d_name[len - 2] == '.') {
+ if (cft != cftNone) {
StrAllocCopy(cp, dirbuf->d_name);
- cp[len - 2] = '\0';
+ cp[dot - dirbuf->d_name] = '\0';
format = HTFileFormat(cp, NULL, NULL);
FREE(cp);
value = HTStackValue(format, format_out,
filevalue, 0);
- if (value <= 0.0) {
- format = HTAtom_for("application/x-compressed");
- value = HTStackValue(format, format_out,
- filevalue, 0);
- }
- if (value <= 0.0) {
- format = HTAtom_for("www/compressed");
- value = HTStackValue(format, format_out,
- filevalue, 0);
+ switch (cft) {
+ case cftCompress:
+ atomname = "application/x-compressed";
+ break;
+ case cftGzip:
+ atomname = "application/x-gzip";
+ break;
+ case cftBzip2:
+ atomname = "application/x-bzip2";
+ break;
+ case cftNone:
+ break;
}
- } else if ((len > 3) &&
- !strcasecomp((char *)&dirbuf->d_name[len - 2],
- "gz") &&
- dirbuf->d_name[len - 3] == '.') {
- StrAllocCopy(cp, dirbuf->d_name);
- cp[len - 3] = '\0';
- format = HTFileFormat(cp, NULL, NULL);
- FREE(cp);
+ }
+
+ if (atomname != NULL) {
value = HTStackValue(format, format_out,
filevalue, 0);
if (value <= 0.0) {
- format = HTAtom_for("application/x-gzip");
+ format = HTAtom_for(atomname);
value = HTStackValue(format, format_out,
filevalue, 0);
}
@@ -2262,8 +2451,8 @@ PUBLIC int HTLoadFile ARGS4(
}
}
if (value != NO_VALUE_FOUND) {
- CTRACE(tfp, "HTLoadFile: value of presenting %s is %f\n",
- HTAtom_name(rep), value);
+ CTRACE((tfp, "HTLoadFile: value of presenting %s is %f\n",
+ HTAtom_name(rep), value));
if (value > best) {
best_rep = rep;
best_enc = enc;
@@ -2300,21 +2489,13 @@ PUBLIC int HTLoadFile ARGS4(
** 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 (HTStat(localname,&dir_info) == -1) /* get file information */
{
/* if can't read file information */
- CTRACE(tfp, "HTLoadFile: can't stat %s\n", localname);
+ CTRACE((tfp, "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 (S_ISDIR(dir_info.st_mode)) {
/*
** If localname is a directory.
@@ -2322,7 +2503,7 @@ PUBLIC int HTLoadFile ARGS4(
DIR *dp;
struct stat file_info;
- CTRACE(tfp, "%s is a directory\n", localname);
+ CTRACE((tfp, "%s is a directory\n", localname));
/*
** Check directory access.
@@ -2335,16 +2516,10 @@ PUBLIC int HTLoadFile ARGS4(
return HTLoadError(sink, 403, DISALLOWED_DIR_SCAN);
}
-
if (HTDirAccess == HT_DIR_SELECTIVE) {
- char * enable_file_name =
- malloc(strlen(localname)+ 1 +
- strlen(HT_DIR_ENABLE_FILE) + 1);
- if (enable_file_name == NULL)
- outofmem(__FILE__, "HTLoadFile");
- strcpy(enable_file_name, localname);
- strcat(enable_file_name, "/");
- strcat(enable_file_name, HT_DIR_ENABLE_FILE);
+ char * enable_file_name = NULL;
+
+ HTSprintf0(&enable_file_name, "%s/%s", localname, HT_DIR_ENABLE_FILE);
if (stat(enable_file_name, &file_info) != 0) {
FREE(localname);
FREE(nodename);
@@ -2353,6 +2528,7 @@ PUBLIC int HTLoadFile ARGS4(
}
}
+ CTRACE((tfp, "Opening directory %s\n", localname));
dp = opendir(localname);
if (!dp) {
FREE(localname);
@@ -2366,11 +2542,19 @@ PUBLIC int HTLoadFile ARGS4(
status = print_local_dir(dp, localname,
anchor, format_out, sink);
+ closedir(dp);
FREE(localname);
FREE(nodename);
return status; /* document loaded, maybe partial */
- } /* end if localname is a directory */
+ } /* end if localname is a directory */
+
+ if (S_ISREG(dir_info.st_mode)) {
+#ifdef INT_MAX
+ if (dir_info.st_size <= INT_MAX)
+#endif
+ anchor->content_length = dir_info.st_size;
+ }
} /* end if file stat worked */
@@ -2378,20 +2562,12 @@ PUBLIC int HTLoadFile ARGS4(
*/
#endif /* HAVE_READDIR */
{
-# ifdef __EMX__
- int len = strlen(localname);
- int bin = ((len > 3) && !strcasecomp(localname + len - 3, ".gz"));
- FILE * fp = fopen(localname, (bin ? "rb" : "r"));
-# else /* !( defined __EMX__ ) */
- FILE * fp = fopen(localname, "r");
-# endif
+ int bin = HTCompressFileType(localname, ".", &dot) != cftNone;
+ FILE * fp = fopen(localname, (bin ? BIN_R : "r"));
- CTRACE (tfp, "HTLoadFile: Opening `%s' gives %p\n",
- localname, (void*)fp);
+ CTRACE((tfp, "HTLoadFile: Opening `%s' gives %p\n",
+ localname, (void*)fp));
if (fp) { /* Good! */
- int len;
- char *cp = NULL;
-
if (HTEditable(localname)) {
HTAtom * put = HTAtom_for("PUT");
HTList * methods = HTAnchor_methods(anchor);
@@ -2413,10 +2589,10 @@ PUBLIC int HTLoadFile ARGS4(
(!strcmp(HTAtom_name(myEncoding), "gzip") ||
!strcmp(HTAtom_name(myEncoding), "x-gzip"))) {
fclose(fp);
- gzfp = gzopen(localname, "rb");
+ gzfp = gzopen(localname, BIN_R);
- CTRACE(tfp, "HTLoadFile: gzopen of `%s' gives %p\n",
- localname, (void*)gzfp);
+ CTRACE((tfp, "HTLoadFile: gzopen of `%s' gives %p\n",
+ localname, (void*)gzfp));
use_gzread = YES;
} else
#endif /* USE_ZLIB */
@@ -2425,42 +2601,47 @@ PUBLIC int HTLoadFile ARGS4(
StrAllocCopy(anchor->content_encoding, HTAtom_name(myEncoding));
format = HTAtom_for("www/compressed");
}
- } else if ((len = strlen(localname)) > 2) {
- if (localname[len - 1] == 'Z' &&
- localname[len - 2] == '.') {
+ } else {
+ CompressFileType cft = HTCompressFileType(localname, ".", &dot);
+
+ if (cft != cftNone) {
+ char *cp = NULL;
+
StrAllocCopy(cp, localname);
- cp[len - 2] = '\0';
+ cp[dot - localname] = '\0';
format = HTFileFormat(cp, &encoding, NULL);
FREE(cp);
format = HTCharsetFormat(format, anchor,
UCLYhndl_HTFile_for_unspec);
StrAllocCopy(anchor->content_type, format->name);
+ }
+
+ switch (cft) {
+ case cftCompress:
StrAllocCopy(anchor->content_encoding, "x-compress");
format = HTAtom_for("www/compressed");
- } else if ((len > 3) &&
- !strcasecomp((char *)&localname[len - 2],
- "gz") &&
- localname[len - 3] == '.') {
- StrAllocCopy(cp, localname);
- cp[len - 3] = '\0';
- format = HTFileFormat(cp, &encoding, NULL);
- FREE(cp);
- format = HTCharsetFormat(format, anchor,
- UCLYhndl_HTFile_for_unspec);
- StrAllocCopy(anchor->content_type, format->name);
+ break;
+ case cftGzip:
StrAllocCopy(anchor->content_encoding, "x-gzip");
#ifdef USE_ZLIB
if (strcmp(format_out->name, "www/download") != 0) {
fclose(fp);
- gzfp = gzopen(localname, "rb");
+ gzfp = gzopen(localname, BIN_R);
- CTRACE(tfp, "HTLoadFile: gzopen of `%s' gives %p\n",
- localname, (void*)gzfp);
+ CTRACE((tfp, "HTLoadFile: gzopen of `%s' gives %p\n",
+ localname, (void*)gzfp));
use_gzread = YES;
}
#else /* USE_ZLIB */
format = HTAtom_for("www/compressed");
#endif /* USE_ZLIB */
+ break;
+ case cftBzip2:
+ StrAllocCopy(anchor->content_encoding, "x-bzip2");
+ format = HTAtom_for("www/compressed");
+ break;
+ case cftNone:
+ break;
}
}
FREE(localname);
@@ -2524,18 +2705,17 @@ PUBLIC int HTLoadFile ARGS4(
if (strcmp(nodename, HTHostName()) != 0)
#endif /* VMS */
{
+ status = -1;
FREE(nodename);
- if (!strncmp(addr, "file://localhost", 16)) {
- return -1; /* never go to ftp site when URL
- * is file://localhost
- */
- } else {
+ if (strncmp(addr, "file://localhost", 16)) {
+ /* never go to ftp site when URL
+ * is file://localhost
+ */
#ifndef DISABLE_FTP
- return HTFTPLoad(addr, anchor, format_out, sink);
-#else
- return -1;
+ status = HTFTPLoad(addr, anchor, format_out, sink);
#endif /* DISABLE_FTP */
}
+ return status;
}
FREE(nodename);
}
@@ -2545,7 +2725,7 @@ PUBLIC int HTLoadFile ARGS4(
** All attempts have failed.
*/
{
- CTRACE(tfp, "Can't open `%s', errno=%d\n", addr, SOCKET_ERRNO);
+ CTRACE((tfp, "Can't open `%s', errno=%d\n", addr, SOCKET_ERRNO));
return HTLoadError(sink, 403, FAILED_FILE_UNREADABLE);
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFile.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFile.h
index a88b12854a5..edee6ded9de 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFile.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFile.h
@@ -42,6 +42,7 @@ extern int HTDirReadme; /* Include readme files in listing? */
/*
** Convert filenames between local and WWW formats
*/
+extern char * HTURLPath_toFile PARAMS((CONST char * name, BOOL expand_all));
extern char * HTnameOfFile_WWW PARAMS((CONST char * name, BOOL WWW_prefix, BOOL expand_all));
#define HTLocalName(name) HTnameOfFile_WWW(name,TRUE,TRUE)
#define HTfullURL_toFile(name) HTnameOfFile_WWW(name,FALSE,TRUE)
@@ -71,6 +72,13 @@ extern BOOL HTDirTitles PARAMS((
HTAnchor * anchor,
BOOL tildeIsTop));
+/*
+** Check existence.
+*/
+extern int HTStat PARAMS((
+ CONST char * filename,
+ struct stat * data));
+
/* Load a document.
** ----------------
*/
@@ -126,7 +134,7 @@ extern void HTSetSuffix5 PARAMS((
CONST char * representation,
CONST char * encoding,
CONST char * desc,
- float quality));
+ double quality));
#define HTSetSuffix(suff,rep,enc,q) HTSetSuffix5(suff, rep, enc, NULL, q)
@@ -157,6 +165,35 @@ extern HTFormat HTCharsetFormat PARAMS((
HTParentAnchor * anchor,
int default_LYhndl));
+/* Get various pieces of meta info from file name.
+** -----------------------------------------------
+**
+** LYGetFileInfo fills in information that can be determined without
+** an actual (new) access to the filesystem, based on current suffix
+** and character set configuration. If the file has been loaded and
+** parsed before (with the same URL generated here!) and the anchor
+** is still around, some results may be influenced by that (in
+** particular, charset info from a META tag - this is not actually
+** tested!).
+** The caller should not keep pointers to the returned objects around
+** for too long, the valid lifetimes vary. In particular, the returned
+** charset string should be copied if necessary. If return of the
+** file_anchor is requested, that one can be used to retrieve
+** additional bits of info that are stored in the anchor object and
+** are not covered here; as usual, don't keep pointers to the
+** file_anchor longer than necessary since the object may disappear
+** through HTuncache_current_document or at the next document load.
+** - kw
+*/
+extern void LYGetFileInfo PARAMS((
+ CONST char * filename,
+ HTParentAnchor ** pfile_anchor,
+ HTFormat * pformat,
+ HTAtom ** pencoding,
+ CONST char** pdesc,
+ CONST char** pcharset,
+ int * pfile_cs));
+
/*
** Determine file value from file name.
*/
@@ -164,6 +201,21 @@ extern float HTFileValue PARAMS((
CONST char * filename));
/*
+** Determine compression type from file name, by looking at its suffix.
+*/
+typedef enum {
+ cftNone
+ , cftCompress
+ , cftGzip
+ , cftBzip2
+} CompressFileType;
+
+extern CompressFileType HTCompressFileType PARAMS((
+ char * filename,
+ char * dots,
+ char ** suffix));
+
+/*
** Determine write access to a file.
**
** ON EXIT,
@@ -174,6 +226,30 @@ extern float HTFileValue PARAMS((
**
** Isn't there a quicker way?
*/
+
+#if defined(HAVE_CONFIG_H)
+
+#ifndef HAVE_GETGROUPS
+#define NO_GROUPS
+#endif
+
+#else
+
+#ifdef VMS
+#define NO_GROUPS
+#endif /* VMS */
+#ifdef NO_UNIX_IO
+#define NO_GROUPS
+#endif /* NO_UNIX_IO */
+#ifdef PCNFS
+#define NO_GROUPS
+#endif /* PCNFS */
+#ifdef NOUSERS
+#define NO_GROUPS
+#endif /* PCNFS */
+
+#endif /* HAVE_CONFIG_H */
+
extern BOOL HTEditable PARAMS((CONST char * filename));
/* Make a save stream.
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFinger.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFinger.c
index 08f9763e506..9f205e0c0d7 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFinger.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFinger.c
@@ -86,7 +86,7 @@ PRIVATE void start_anchor ARGS1(CONST char *, href)
{
int i;
for(i=0; i<HTML_A_ATTRIBUTES; i++)
- present[i] = (i==HTML_A_HREF);
+ present[i] = (BOOL) (i==HTML_A_HREF);
}
((CONST char **)value)[HTML_A_HREF] = href;
(*targetClass.start_element)(target, HTML_A, present,
@@ -107,7 +107,7 @@ PRIVATE void start_anchor ARGS1(CONST char *, href)
PRIVATE int response ARGS5(
- CONST char *, command,
+ char *, command,
char *, sitename,
HTParentAnchor *, anAnchor,
HTFormat, format_out,
@@ -128,10 +128,10 @@ PRIVATE int response ARGS5(
/* Send the command.
*/
- CTRACE(tfp, "HTFinger command to be sent: %s", command);
+ CTRACE((tfp, "HTFinger command to be sent: %s", command));
status = NETWRITE(s, (char *)command, length);
if (status < 0) {
- CTRACE(tfp, "HTFinger: Unable to send command. Disconnecting.\n");
+ CTRACE((tfp, "HTFinger: Unable to send command. Disconnecting.\n"));
NETCLOSE(s);
s = -1;
return status;
@@ -144,7 +144,7 @@ PRIVATE int response ARGS5(
/* Create the results report.
*/
- CTRACE(tfp,"HTFinger: Reading finger information\n");
+ CTRACE((tfp,"HTFinger: Reading finger information\n"));
START(HTML_HTML);
PUTC('\n');
START(HTML_HEAD);
@@ -185,13 +185,13 @@ PRIVATE int response ARGS5(
while ((ch=NEXT_CHAR) != EOF) {
if (interrupted_in_htgetcharacter) {
- CTRACE(tfp, "HTFinger: Interrupted in HTGetCharacter, apparently.\n");
+ CTRACE((tfp, "HTFinger: Interrupted in HTGetCharacter, apparently.\n"));
_HTProgress (CONNECTION_INTERRUPTED);
goto end_html;
}
if (ch != LF) {
- *p = ch; /* Put character in line */
+ *p = (char) ch; /* Put character in line */
if (p < &line[BIG-1]) {
p++;
}
@@ -262,7 +262,7 @@ PUBLIC int HTLoadFinger ARGS4(
int port; /* Port number from URL */
int status; /* tcp return */
- CTRACE(tfp, "HTFinger: Looking for %s\n", (arg ? arg : "NULL"));
+ CTRACE((tfp, "HTFinger: Looking for %s\n", (arg ? arg : "NULL")));
if (!(arg && *arg)) {
HTAlert(COULD_NOT_LOAD_DATA);
@@ -377,13 +377,13 @@ PUBLIC int HTLoadFinger ARGS4(
/* Now, let's get a stream setup up from the FingerHost:
** CONNECTING to finger host
*/
- CTRACE(tfp, "HTFinger: doing HTDoConnect on '%s'\n", str);
+ CTRACE((tfp, "HTFinger: doing HTDoConnect on '%s'\n", str));
status = HTDoConnect(str, "finger", FINGER_PORT, &s);
- CTRACE(tfp, "HTFinger: Done DoConnect; status %d\n", status);
+ CTRACE((tfp, "HTFinger: Done DoConnect; status %d\n", status));
if (status == HT_INTERRUPTED) {
/* Interrupt cleanly */
- CTRACE(tfp, "HTFinger: Interrupted on connect; recovering cleanly.\n");
+ CTRACE((tfp, "HTFinger: Interrupted on connect; recovering cleanly.\n"));
HTProgress (CONNECTION_INTERRUPTED);
FREE(str);
FREE(command);
@@ -392,13 +392,13 @@ PUBLIC int HTLoadFinger ARGS4(
if (status < 0) {
NETCLOSE(s);
s = -1;
- CTRACE(tfp, "HTFinger: Unable to connect to finger host.\n");
+ CTRACE((tfp, "HTFinger: Unable to connect to finger host.\n"));
HTAlert(gettext("Could not access finger host."));
FREE(str);
FREE(command);
return HT_NOT_LOADED; /* FAIL */
}
- CTRACE(tfp, "HTFinger: Connected to finger host '%s'.\n", str);
+ CTRACE((tfp, "HTFinger: Connected to finger host '%s'.\n", str));
FREE(str);
/* Send the command, and process response if successful.
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFormat.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFormat.c
index ed309bf3796..70184064e67 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFormat.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFormat.c
@@ -16,24 +16,18 @@
*/
#include <HTFormat.h>
-#ifdef USE_SSL
-#define free_func free__func
-#include <openssl/ssl.h>
-#undef free_func
-#endif /* USE_SSL */
-
PUBLIC float HTMaxSecs = 1e10; /* No effective limit */
PUBLIC float HTMaxLength = 1e10; /* No effective limit */
PUBLIC long int HTMaxBytes = 0; /* No effective limit */
-#ifdef unix
+#ifdef UNIX
#ifdef NeXT
#define PRESENT_POSTSCRIPT "open %s; /bin/rm -f %s\n"
#else
#define PRESENT_POSTSCRIPT "(ghostview %s ; /bin/rm -f %s)&\n"
/* Full pathname would be better! */
#endif /* NeXT */
-#endif /* unix */
+#endif /* UNIX */
#include <HTML.h>
#include <HTMLDTD.h>
@@ -42,6 +36,7 @@ PUBLIC long int HTMaxBytes = 0; /* No effective limit */
#include <HTList.h>
#include <HTInit.h>
#include <HTTCP.h>
+#include <HTTP.h>
/* Streams and structured streams which we use:
*/
#include <HTFWriter.h>
@@ -55,6 +50,10 @@ PUBLIC long int HTMaxBytes = 0; /* No effective limit */
#include <LYGlobalDefs.h>
#include <LYLeaks.h>
+#ifdef DISP_PARTIAL
+#include <LYMainLoop.h>
+#endif
+
PUBLIC BOOL HTOutputSource = NO; /* Flag: shortcut parser to stdout */
/* extern BOOL interactive; LJM */
@@ -91,21 +90,21 @@ PRIVATE void HTFreePresentations NOPARAMS;
PUBLIC void HTSetPresentation ARGS6(
CONST char *, representation,
CONST char *, command,
- float, quality,
- float, secs,
- float, secs_per_byte,
+ double, quality,
+ double, secs,
+ double, secs_per_byte,
long int, maxbytes)
{
- HTPresentation * pres = (HTPresentation *)malloc(sizeof(HTPresentation));
+ HTPresentation * pres = typecalloc(HTPresentation);
if (pres == NULL)
outofmem(__FILE__, "HTSetPresentation");
pres->rep = HTAtom_for(representation);
pres->rep_out = WWW_PRESENT; /* Fixed for now ... :-) */
pres->converter = HTSaveAndExecute; /* Fixed for now ... */
- pres->quality = quality;
- pres->secs = secs;
- pres->secs_per_byte = secs_per_byte;
+ pres->quality = (float) quality;
+ pres->secs = (float) secs;
+ pres->secs_per_byte = (float) secs_per_byte;
pres->maxbytes = maxbytes;
pres->command = NULL;
StrAllocCopy(pres->command, command);
@@ -141,7 +140,7 @@ PUBLIC void HTSetConversion ARGS7(
float, secs_per_byte,
long int, maxbytes)
{
- HTPresentation * pres = (HTPresentation *)malloc(sizeof(HTPresentation));
+ HTPresentation * pres = typecalloc(HTPresentation);
if (pres == NULL)
outofmem(__FILE__, "HTSetConversion");
@@ -243,11 +242,11 @@ PUBLIC int HTGetCharacter NOARGS
if (status == 0)
return EOF;
if (status == HT_INTERRUPTED) {
- CTRACE(tfp, "HTFormat: Interrupted in HTGetCharacter\n");
+ CTRACE((tfp, "HTFormat: Interrupted in HTGetCharacter\n"));
interrupted_in_htgetcharacter = 1;
return EOF;
}
- CTRACE(tfp, "HTFormat: File read error %d\n", status);
+ CTRACE((tfp, "HTFormat: File read error %d\n", status));
return EOF; /* -1 is returned by UCX
at end of HTTP link */
}
@@ -257,7 +256,7 @@ PUBLIC int HTGetCharacter NOARGS
ch = *input_pointer++;
} while (ch == (char) 13); /* Ignore ASCII carriage return */
- return FROMASCII((unsigned char)ch);
+ return FROMASCII(UCH(ch));
}
#ifdef USE_SSL
@@ -275,11 +274,11 @@ PUBLIC char HTGetSSLCharacter ARGS1(void *, handle)
if (status == 0)
return (char)EOF;
if (status == HT_INTERRUPTED) {
- CTRACE(tfp, "HTFormat: Interrupted in HTGetSSLCharacter\n");
+ CTRACE((tfp, "HTFormat: Interrupted in HTGetSSLCharacter\n"));
interrupted_in_htgetcharacter = 1;
return (char)EOF;
}
- CTRACE(tfp, "HTFormat: SSL_read error %d\n", status);
+ CTRACE((tfp, "HTFormat: SSL_read error %d\n", status));
return (char)EOF; /* -1 is returned by UCX
at end of HTTP link */
}
@@ -298,14 +297,14 @@ PUBLIC char HTGetSSLCharacter ARGS1(void *, handle)
*/
PRIVATE int half_match ARGS2(char *,trial_type, char *,target)
{
- char *cp=strchr(trial_type,'/');
+ char *cp = strchr(trial_type, '/');
/* if no '/' or no '*' */
if (!cp || *(cp+1) != '*')
return 0;
- CTRACE(tfp, "HTFormat: comparing %s and %s for half match\n",
- trial_type, target);
+ CTRACE((tfp, "HTFormat: comparing %s and %s for half match\n",
+ trial_type, target));
/* main type matches */
if (!strncmp(trial_type, target, (cp-trial_type)-1))
@@ -314,6 +313,8 @@ PRIVATE int half_match ARGS2(char *,trial_type, char *,target)
return 0;
}
+#define WWW_WILDCARD_REP_OUT HTAtom_for("*")
+
/* Look up a presentation
** ----------------------
**
@@ -330,10 +331,10 @@ PRIVATE HTPresentation * HTFindPresentation ARGS3(
HTFormat, rep_out,
HTPresentation*, fill_in)
{
- HTAtom * wildcard = HTAtom_for("*");
+ HTAtom * wildcard = NULL; /* = HTAtom_for("*"); lookup when needed - kw */
- CTRACE(tfp, "HTFormat: Looking up presentation for %s to %s\n",
- HTAtom_name(rep_in), HTAtom_name(rep_out));
+ CTRACE((tfp, "HTFormat: Looking up presentation for %s to %s\n",
+ HTAtom_name(rep_in), HTAtom_name(rep_out)));
/* don't do anymore do it in the Lynx code at startup LJM */
/* if (!HTPresentations) HTFormatInit(); */ /* set up the list */
@@ -351,18 +352,21 @@ PRIVATE HTPresentation * HTFindPresentation ARGS3(
pres = (HTPresentation *)HTList_objectAt(HTPresentations, i);
if (pres->rep == rep_in) {
if (pres->rep_out == rep_out) {
- CTRACE(tfp, "FindPresentation: found exact match: %s\n",
- HTAtom_name(pres->rep));
+ CTRACE((tfp, "FindPresentation: found exact match: %s\n",
+ HTAtom_name(pres->rep)));
return pres;
} else if (!fill_in) {
continue;
- } else if (pres->rep_out == wildcard) {
- if (!strong_wildcard_match)
- strong_wildcard_match = pres;
- /* otherwise use the first one */
- CTRACE(tfp, "StreamStack: found strong wildcard match: %s\n",
- HTAtom_name(pres->rep));
+ } else {
+ if (!wildcard) wildcard = WWW_WILDCARD_REP_OUT;
+ if (pres->rep_out == wildcard) {
+ if (!strong_wildcard_match)
+ strong_wildcard_match = pres;
+ /* otherwise use the first one */
+ CTRACE((tfp, "StreamStack: found strong wildcard match: %s\n",
+ HTAtom_name(pres->rep)));
+ }
}
} else if (!fill_in) {
@@ -374,8 +378,8 @@ PRIVATE HTPresentation * HTFindPresentation ARGS3(
if (!strong_subtype_wildcard_match)
strong_subtype_wildcard_match = pres;
/* otherwise use the first one */
- CTRACE(tfp, "StreamStack: found strong subtype wildcard match: %s\n",
- HTAtom_name(pres->rep));
+ CTRACE((tfp, "StreamStack: found strong subtype wildcard match: %s\n",
+ HTAtom_name(pres->rep)));
}
}
@@ -384,11 +388,12 @@ PRIVATE HTPresentation * HTFindPresentation ARGS3(
if (!weak_wildcard_match)
weak_wildcard_match = pres;
/* otherwise use the first one */
- CTRACE(tfp, "StreamStack: found weak wildcard match: %s\n",
- HTAtom_name(pres->rep_out));
- }
- if (pres->rep_out == wildcard) {
- if (!last_default_match)
+ CTRACE((tfp, "StreamStack: found weak wildcard match: %s\n",
+ HTAtom_name(pres->rep_out)));
+
+ } else if (!last_default_match) {
+ if (!wildcard) wildcard = WWW_WILDCARD_REP_OUT;
+ if (pres->rep_out == wildcard)
last_default_match = pres;
/* otherwise use the first one */
}
@@ -429,30 +434,44 @@ PUBLIC HTStream * HTStreamStack ARGS4(
{
HTPresentation temp;
HTPresentation *match;
+ HTStream *result;
- CTRACE(tfp, "HTFormat: Constructing stream stack for %s to %s\n",
- HTAtom_name(rep_in), HTAtom_name(rep_out));
+ CTRACE((tfp, "HTFormat: Constructing stream stack for %s to %s\n",
+ HTAtom_name(rep_in), HTAtom_name(rep_out)));
/* don't return on WWW_SOURCE some people might like
* to make use of the source!!!! LJM
- *//*
+ */
+#if 0
if (rep_out == WWW_SOURCE || rep_out == rep_in)
- return sink; LJM */
+ return sink; /* LJM */
+#endif
- if (rep_out == rep_in)
- return sink;
+ if (rep_out == rep_in) {
+ result = sink;
- if ((match = HTFindPresentation(rep_in, rep_out, &temp))) {
+ } else if ((match = HTFindPresentation(rep_in, rep_out, &temp))) {
if (match == &temp) {
- CTRACE(tfp, "StreamStack: Using %s\n", HTAtom_name(temp.rep_out));
+ CTRACE((tfp, "StreamStack: Using %s\n", HTAtom_name(temp.rep_out)));
} else {
- CTRACE(tfp, "StreamStack: found exact match: %s\n",
- HTAtom_name(match->rep));
+ CTRACE((tfp, "StreamStack: found exact match: %s\n",
+ HTAtom_name(match->rep)));
}
- return (*match->converter)(match, anchor, sink);
+ result = (*match->converter)(match, anchor, sink);
} else {
- return NULL;
+ result = NULL;
+ }
+ if (TRACE) {
+ if (result && result->isa && result->isa->name) {
+ CTRACE((tfp, "StreamStack: Returning \"%s\"\n", result->isa->name));
+ } else if (result) {
+ CTRACE((tfp, "StreamStack: Returning *unknown* stream!\n"));
+ } else {
+ CTRACE((tfp, "StreamStack: Returning NULL!\n"));
+ CTRACE_FLUSH(tfp); /* a crash may be imminent... - kw */
+ }
}
+ return result;
}
/* Put a presentation near start of list
@@ -471,6 +490,56 @@ PUBLIC void HTReorderPresentation ARGS2(
HTList_addObject(HTPresentations, match);
}
}
+
+/*
+ * Setup 'get_accept' flag to denote presentations that are not redundant,
+ * and will be listed in "Accept:" header.
+ */
+PUBLIC void HTFilterPresentations NOARGS
+{
+ int i, j;
+ int n = HTList_count(HTPresentations);
+ HTPresentation *p, *q;
+ BOOL matched;
+ char *s, *t, *x, *y;
+
+ for (i = 0; i < n; i++) {
+ p = (HTPresentation *)HTList_objectAt(HTPresentations, i);
+ s = HTAtom_name(p->rep);
+
+ if (p->rep_out == WWW_PRESENT) {
+ if (p->rep != WWW_SOURCE
+ && strcasecomp(s, "www/mime")
+ && strcasecomp(s, "www/compressed")
+ && p->quality <= 1.0 && p->quality >= 0.0) {
+ for (j = 0, matched = FALSE; j < i; j++) {
+ q = (HTPresentation *)HTList_objectAt(HTPresentations, j);
+ t = HTAtom_name(q->rep);
+
+ if (!strcasecomp(s, t)) {
+ matched = TRUE;
+ break;
+ }
+ if ((x = strchr(s, '/')) != 0
+ && (y = strchr(t, '/')) != 0) {
+ int len1 = x++ - s;
+ int len2 = y++ - t;
+ int lens = (len1 > len2) ? len1 : len2;
+
+ if ((*t == '*' || !strncasecomp(s, t, lens))
+ && (*y == '*' || !strcasecomp(x, y))) {
+ matched = TRUE;
+ break;
+ }
+ }
+ }
+ if (!matched)
+ p->get_accept = TRUE;
+ }
+ }
+ }
+}
+
/* Find the cost of a filter stack
** -------------------------------
**
@@ -485,10 +554,10 @@ PUBLIC float HTStackValue ARGS4(
float, initial_value,
long int, length)
{
- HTAtom * wildcard = HTAtom_for("*");
+ HTAtom * wildcard = WWW_WILDCARD_REP_OUT;
- CTRACE(tfp, "HTFormat: Evaluating stream stack for %s worth %.3f to %s\n",
- HTAtom_name(rep_in), initial_value, HTAtom_name(rep_out));
+ CTRACE((tfp, "HTFormat: Evaluating stream stack for %s worth %.3f to %s\n",
+ HTAtom_name(rep_in), initial_value, HTAtom_name(rep_out)));
if (rep_out == WWW_SOURCE || rep_out == rep_in)
return 0.0;
@@ -513,7 +582,7 @@ PUBLIC float HTStackValue ARGS4(
}
}
- return -1e30; /* Really bad */
+ return (float) -1e30; /* Really bad */
}
@@ -529,14 +598,13 @@ PUBLIC void HTDisplayPartial NOARGS
#ifdef DISP_PARTIAL
if (display_partial) {
/*
- ** HText_getNumOfLines() = "current" number of lines received
+ ** HText_getNumOfLines() = "current" number of complete lines received
** NumOfLines_partial = number of lines at the moment of last repaint.
+ ** (we update NumOfLines_partial only when we repaint the display.)
**
- ** We update NumOfLines_partial only when we repaint the display.
- ** -1 is the special value:
- ** This is a synchronization flag switched to 0 when HText_new()
- ** starts a new HTMainText object - all HText_ functions use it,
- ** lines counter in particular [we call it from HText_getNumOfLines()].
+ ** display_partial could only be enabled in HText_new()
+ ** so a new HTMainText object available - all HText_ functions use it,
+ ** lines counter HText_getNumOfLines() in particular.
**
** Otherwise HTMainText holds info from the previous document
** and we may repaint it instead of the new one:
@@ -545,13 +613,13 @@ PUBLIC void HTDisplayPartial NOARGS
**
** So repaint the page only when necessary:
*/
- if ((NumOfLines_partial != -1)
- /* new HText object available */
- && ((Newline_partial + display_lines) > NumOfLines_partial)
+ int Newline_partial = LYGetNewline();
+
+ if (((Newline_partial + display_lines) - 1 > NumOfLines_partial)
/* current page not complete... */
&& (partial_threshold > 0 ?
- ((Newline_partial + partial_threshold) < HText_getNumOfLines()) :
- ((Newline_partial + display_lines) < HText_getNumOfLines()))
+ ((Newline_partial + partial_threshold) -1 <= HText_getNumOfLines()) :
+ ((Newline_partial + display_lines) - 1 <= HText_getNumOfLines()))
/*
* Originally we rendered by increments of 2 lines,
* but that got annoying on slow network connections.
@@ -560,7 +628,7 @@ PUBLIC void HTDisplayPartial NOARGS
*/
) {
NumOfLines_partial = HText_getNumOfLines();
- HText_pageDisplay(Newline_partial, "");
+ LYMainLoop_pageDisplay(Newline_partial);
}
}
#else /* nothing */
@@ -571,24 +639,10 @@ PUBLIC void HTDisplayPartial NOARGS
PUBLIC void HTFinishDisplayPartial NOARGS
{
#ifdef DISP_PARTIAL
- if (display_partial) {
- /*
- * Override Newline with a new value if user
- * scrolled the document while downloading.
- */
- if (Newline_partial != Newline
- && NumOfLines_partial > 0)
- Newline = Newline_partial;
- }
-
/*
* End of incremental rendering stage here.
*/
display_partial = FALSE;
- NumOfLines_partial = -1; /* initialize to -1 */
- /* -1 restrict HTDisplayPartial() */
- /* until HText_new() start next HTMainText */
- /* and set the flag to 0 */
#endif /* DISP_PARTIAL */
}
@@ -631,8 +685,15 @@ PUBLIC int HTCopy ARGS4(
HTStream*, sink)
{
HTStreamClass targetClass;
+ BOOL suppress_readprogress = NO;
int bytes;
int rv = 0;
+#ifdef _WINDOWS /* 1997/11/11 (Tue) 15:18:16 */
+ long file_length;
+ extern int bytes_already_read;
+
+ file_length = anchor->content_length;
+#endif
/* Push the data down the stream
*/
@@ -684,6 +745,9 @@ PUBLIC int HTCopy ARGS4(
rv = -1;
goto finished;
} else if (SOCKET_ERRNO == ENOTCONN ||
+#ifdef _WINDOWS /* 1997/11/10 (Mon) 16:57:18 */
+ SOCKET_ERRNO == ETIMEDOUT ||
+#endif
SOCKET_ERRNO == ECONNRESET ||
SOCKET_ERRNO == EPIPE) {
/*
@@ -705,10 +769,10 @@ PUBLIC int HTCopy ARGS4(
* TCP stacks for VMS etc., so this is currently
* only for UNIX. - kw
*/
- HTInetStatus("NETREAD");
- HTAlert("Unexpected server disconnect.");
- CTRACE(tfp,
- "HTCopy: Unexpected server disconnect. Treating as completed.\n");
+ HTInetStatus("NETREAD");
+ HTAlert("Unexpected server disconnect.");
+ CTRACE((tfp,
+ "HTCopy: Unexpected server disconnect. Treating as completed.\n"));
status = 0;
break;
#else /* !UNIX */
@@ -716,8 +780,8 @@ PUBLIC int HTCopy ARGS4(
* Treat what we've gotten already
* as the complete transmission. - FM
*/
- CTRACE(tfp,
- "HTCopy: Unexpected server disconnect. Treating as completed.\n");
+ CTRACE((tfp,
+ "HTCopy: Unexpected server disconnect. Treating as completed.\n"));
status = 0;
break;
#endif /* UNIX */
@@ -746,6 +810,16 @@ PUBLIC int HTCopy ARGS4(
break;
}
+ /*
+ * Suppress ReadProgress messages when collecting a redirection
+ * message, at least initially (unless/until anchor->content_type
+ * gets changed, probably by the MIME message parser). That way
+ * messages put up by the HTTP module or elsewhere can linger in
+ * the statusline for a while. - kw
+ */
+ suppress_readprogress = (anchor && anchor->content_type &&
+ !strcmp(anchor->content_type,
+ "message/x-http-redirection"));
#ifdef NOT_ASCII
{
char * p;
@@ -757,7 +831,8 @@ PUBLIC int HTCopy ARGS4(
(*targetClass.put_block)(sink, input_buffer, status);
bytes += status;
- HTReadProgress(bytes, anchor ? anchor->content_length : 0);
+ if (!suppress_readprogress)
+ HTReadProgress(bytes, anchor ? anchor->content_length : 0);
HTDisplayPartial();
} /* next bufferload */
@@ -813,8 +888,8 @@ PUBLIC int HTFileCopy ARGS2(
rv = HT_LOADED;
break;
}
- CTRACE(tfp, "HTFormat: Read error, read returns %d\n",
- ferror(fp));
+ CTRACE((tfp, "HTFormat: Read error, read returns %d\n",
+ ferror(fp)));
if (bytes) {
rv = HT_PARTIAL_CONTENT;
} else {
@@ -826,7 +901,13 @@ PUBLIC int HTFileCopy ARGS2(
(*targetClass.put_block)(sink, input_buffer, status);
bytes += status;
HTReadProgress(bytes, 0);
- HTDisplayPartial();
+ /* Suppress last screen update in partial mode - a regular update
+ * under control of mainloop() should follow anyway. - kw
+ */
+#ifdef DISP_PARTIAL
+ if (display_partial && bytes != HTMainAnchor->content_length)
+ HTDisplayPartial();
+#endif
if (HTCheckForInterrupt()) {
_HTProgress (TRANSFER_INTERRUPTED);
@@ -864,11 +945,12 @@ PUBLIC int HTMemCopy ARGS2(
HTChunk *, chunk,
HTStream *, sink)
{
- HTStreamClass targetClass = *(sink->isa);
+ HTStreamClass targetClass;
int bytes = 0;
CONST char *data = chunk->data;
int rv = HT_OK;
+ targetClass = *(sink->isa);
HTReadProgress(0, 0);
for (;;) {
/* Push the data down the stream a piece at a time, in case we're
@@ -945,10 +1027,10 @@ PRIVATE int HTGzFileCopy ARGS2(
rv = HT_LOADED;
break;
}
- CTRACE(tfp, "HTGzFileCopy: Read error, gzread returns %d\n",
- status);
- CTRACE(tfp, "gzerror : %s\n",
- gzerror(gzfp, &gzerrnum));
+ CTRACE((tfp, "HTGzFileCopy: Read error, gzread returns %d\n",
+ status));
+ CTRACE((tfp, "gzerror : %s\n",
+ gzerror(gzfp, &gzerrnum)));
if (TRACE) {
if (gzerrnum == Z_ERRNO)
perror("gzerror ");
@@ -999,7 +1081,7 @@ PUBLIC void HTCopyNoCR ARGS3(
HTStream*, sink)
{
HTStreamClass targetClass;
- char character;
+ int character;
/* Push the data, ignoring CRLF, down the stream
*/
@@ -1013,9 +1095,9 @@ PUBLIC void HTCopyNoCR ARGS3(
HTInitInput(file_number);
for (;;) {
character = HTGetCharacter();
- if (character == (char)EOF)
+ if (character == EOF)
break;
- (*targetClass.put_character)(sink, character);
+ (*targetClass.put_character)(sink, UCH(character));
}
}
@@ -1074,7 +1156,7 @@ PUBLIC int HTParseSocket ARGS5(
}
HTSprintf0(&buffer, CANNOT_CONVERT_I_TO_O,
HTAtom_name(rep_in), HTAtom_name(format_out));
- CTRACE(tfp, "HTFormat: %s\n", buffer);
+ CTRACE((tfp, "HTFormat: %s\n", buffer));
rv = HTLoadError(sink, 501, buffer); /* returns -501 */
FREE(buffer);
} else {
@@ -1124,9 +1206,12 @@ PUBLIC int HTParseFile ARGS5(
HTStreamClass targetClass;
int rv;
- stream = HTStreamStack(rep_in,
- format_out,
- sink , anchor);
+#ifdef SH_EX /* 1998/01/04 (Sun) 16:04:09 */
+ if (fp == NULL)
+ return HT_LOADED;
+#endif
+
+ stream = HTStreamStack(rep_in, format_out, sink, anchor);
if (!stream) {
char *buffer = 0;
@@ -1136,7 +1221,7 @@ PUBLIC int HTParseFile ARGS5(
}
HTSprintf0(&buffer, CANNOT_CONVERT_I_TO_O,
HTAtom_name(rep_in), HTAtom_name(format_out));
- CTRACE(tfp, "HTFormat(in HTParseFile): %s\n", buffer);
+ CTRACE((tfp, "HTFormat(in HTParseFile): %s\n", buffer));
rv = HTLoadError(sink, 501, buffer);
FREE(buffer);
return rv;
@@ -1178,7 +1263,7 @@ PUBLIC int HTParseFile ARGS5(
** -501 Stream stack failed (cannot present or convert).
** HT_LOADED All data sent.
**
-** Stat of memory and target stream on return:
+** State of memory and target stream on return:
** always chunk unchanged; target freed, aborted, or NULL.
*/
PUBLIC int HTParseMem ARGS5(
@@ -1197,7 +1282,7 @@ PUBLIC int HTParseMem ARGS5(
char *buffer = 0;
HTSprintf0(&buffer, CANNOT_CONVERT_I_TO_O,
HTAtom_name(rep_in), HTAtom_name(format_out));
- CTRACE(tfp, "HTFormat(in HTParseMem): %s\n", buffer);
+ CTRACE((tfp, "HTFormat(in HTParseMem): %s\n", buffer));
rv = HTLoadError(sink, 501, buffer);
FREE(buffer);
return rv;
@@ -1224,7 +1309,7 @@ PRIVATE int HTCloseGzFile ARGS1(
if (gzres == Z_ERRNO) {
perror("gzclose ");
} else if (gzres != Z_OK) {
- CTRACE(tfp, "gzclose : error number %d\n", gzres);
+ CTRACE((tfp, "gzclose : error number %d\n", gzres));
}
}
return(gzres);
@@ -1257,9 +1342,7 @@ PUBLIC int HTParseGzFile ARGS5(
HTStreamClass targetClass;
int rv;
- stream = HTStreamStack(rep_in,
- format_out,
- sink , anchor);
+ stream = HTStreamStack(rep_in, format_out, sink, anchor);
if (!stream) {
char *buffer = 0;
@@ -1270,7 +1353,7 @@ PUBLIC int HTParseGzFile ARGS5(
}
HTSprintf0(&buffer, CANNOT_CONVERT_I_TO_O,
HTAtom_name(rep_in), HTAtom_name(format_out));
- CTRACE(tfp, "HTFormat(in HTParseGzFile): %s\n", buffer);
+ CTRACE((tfp, "HTFormat(in HTParseGzFile): %s\n", buffer));
rv = HTLoadError(sink, 501, buffer);
FREE(buffer);
return rv;
@@ -1322,7 +1405,7 @@ PRIVATE void NetToText_put_character ARGS2(HTStream *, me, char, net_char)
me->sink->isa->put_character(me->sink, CR); /* leftover */
}
}
- me->had_cr = (c == CR);
+ me->had_cr = (BOOL) (c == CR);
if (!me->had_cr)
me->sink->isa->put_character(me->sink, c); /* normal */
}
@@ -1370,7 +1453,7 @@ PRIVATE HTStreamClass NetToTextClass = {
*/
PUBLIC HTStream * HTNetToText ARGS1(HTStream *, sink)
{
- HTStream* me = (HTStream*)malloc(sizeof(*me));
+ HTStream* me = typecalloc(HTStream);
if (me == NULL)
outofmem(__FILE__, "NetToText");
@@ -1381,3 +1464,53 @@ PUBLIC HTStream * HTNetToText ARGS1(HTStream *, sink)
return me;
}
+PRIVATE HTStream HTBaseStreamInstance; /* Made static */
+/*
+** ERROR STREAM
+** ------------
+** There is only one error stream shared by anyone who wants a
+** generic error returned from all stream methods.
+*/
+PRIVATE void HTErrorStream_put_character ARGS2(HTStream *, me GCC_UNUSED, char, c GCC_UNUSED)
+{
+ LYCancelDownload = TRUE;
+}
+
+PRIVATE void HTErrorStream_put_string ARGS2(HTStream *, me GCC_UNUSED, CONST char *, s)
+{
+ if (s && *s)
+ LYCancelDownload = TRUE;
+}
+
+PRIVATE void HTErrorStream_write ARGS3(HTStream *, me GCC_UNUSED, CONST char *, s, int, l)
+{
+ if (l && s)
+ LYCancelDownload = TRUE;
+}
+
+PRIVATE void HTErrorStream_free ARGS1(HTStream *, me GCC_UNUSED)
+{
+ return;
+}
+
+PRIVATE void HTErrorStream_abort ARGS2(HTStream *, me GCC_UNUSED, HTError, e GCC_UNUSED)
+{
+ return;
+}
+
+PRIVATE CONST HTStreamClass HTErrorStreamClass =
+{
+ "ErrorStream",
+ HTErrorStream_free,
+ HTErrorStream_abort,
+ HTErrorStream_put_character,
+ HTErrorStream_put_string,
+ HTErrorStream_write
+};
+
+PUBLIC HTStream * HTErrorStream NOARGS
+{
+ CTRACE((tfp, "ErrorStream. Created\n"));
+ HTBaseStreamInstance.isa = &HTErrorStreamClass; /* The rest is random */
+ return &HTBaseStreamInstance;
+}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFormat.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFormat.h
index 42aeea5021f..63c96f5b70f 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFormat.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTFormat.h
@@ -48,6 +48,14 @@ typedef HTAtom * HTFormat;
*/
#define WWW_PRESENT HTAtom_for("www/present") /* The user's perception */
+#define WWW_DEBUG HTAtom_for("www/debug")
+/*
+
+ WWW_DEBUG represents the user's perception of debug information, for example sent as a
+ HTML document in a HTTP redirection message.
+
+ */
+
/*
The message/rfc822 format means a MIME message or a plain text message with no MIME
@@ -57,6 +65,11 @@ typedef HTAtom * HTFormat;
#define WWW_MIME HTAtom_for("www/mime") /* A MIME message */
/*
+ For parsing only the header. - kw
+ */
+#define WWW_MIME_HEAD HTAtom_for("message/x-rfc822-head")
+
+/*
www/print is like www/present except it represents a printed copy.
@@ -137,7 +150,7 @@ typedef HTAtom* HTEncoding;
The HTPresentation and HTConverter types
This HTPresentation structure represents a possible conversion algorithm from one
- format to annother. It includes a pointer to a conversion routine. The conversion
+ format to another. It includes a pointer to a conversion routine. The conversion
routine returns a stream to which data should be fed. See also HTStreamStack which
scans the list of registered converters and calls one. See the initialisation module
for a list of conversion routines.
@@ -151,14 +164,15 @@ typedef HTStream * HTConverter PARAMS((
HTStream * sink));
struct _HTPresentation {
- HTAtom * rep; /* representation name atmoized */
+ HTAtom * rep; /* representation name atomized */
HTAtom * rep_out; /* resulting representation */
- HTConverter * converter; /* The routine to gen the stream stack */
+ HTConverter * converter; /* routine to gen the stream stack */
char * command; /* MIME-format string */
float quality; /* Between 0 (bad) and 1 (good) */
float secs;
float secs_per_byte;
long int maxbytes;
+ BOOL get_accept; /* list in "Accept:" for GET */
};
/*
@@ -171,7 +185,7 @@ extern HTList * HTPresentations;
/*
- The default presentation is used when no other is appriporate
+ The default presentation is used when no other is appropriate
*/
extern HTPresentation* default_presentation;
@@ -197,9 +211,9 @@ HTSetPresentation: Register a system command to present a format
extern void HTSetPresentation PARAMS((
CONST char * representation,
CONST char * command,
- float quality,
- float secs,
- float secs_per_byte,
+ double quality,
+ double secs,
+ double secs_per_byte,
long int maxbytes
));
@@ -259,6 +273,12 @@ extern void HTReorderPresentation PARAMS((
HTFormat format_out));
/*
+ * Setup 'get_accept' flag to denote presentations that are not redundant,
+ * and will be listed in "Accept:" header.
+ */
+extern void HTFilterPresentations NOPARAMS;
+
+/*
HTStackValue: Find the cost of a filter stack
@@ -282,7 +302,7 @@ extern float HTStackValue PARAMS((
float initial_value,
long int length));
-#define NO_VALUE_FOUND -1e20 /* returned if none found */
+#define NO_VALUE_FOUND -1e20 /* returned if none found */
/* Display the page while transfer in progress
** -------------------------------------------
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTGopher.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTGopher.c
index 02a830577c8..96681e6649d 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTGopher.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTGopher.c
@@ -158,10 +158,10 @@ PRIVATE CONST char hex[17] = "0123456789abcdef";
PRIVATE char from_hex ARGS1(char, c)
{
- return (c>='0')&&(c<='9') ? c-'0'
+ return (char) ( (c>='0')&&(c<='9') ? c-'0'
: (c>='A')&&(c<='F') ? c-'A'+10
: (c>='a')&&(c<='f') ? c-'a'+10
- : 0;
+ : 0);
}
/* Paste in an Anchor
@@ -191,7 +191,7 @@ PRIVATE void write_anchor ARGS2(CONST char *,text, CONST char *,addr)
present[HTML_A_TITLE] = YES;
((CONST char **)value)[HTML_A_TITLE] = text;
- CTRACE(tfp,"HTGopher: adding URL: %s\n",addr);
+ CTRACE((tfp,"HTGopher: adding URL: %s\n",addr));
HT_Is_Gopher_URL = TRUE; /* tell HTML.c that this is a Gopher URL */
(*targetClass.start_element)(target, HTML_A, present,
@@ -251,12 +251,12 @@ PRIVATE void parse_menu ARGS2(
while ((ich=NEXT_CHAR) != EOF) {
if (interrupted_in_htgetcharacter) {
- CTRACE(tfp, "HTGopher: Interrupted in HTGetCharacter, apparently.\n");
+ CTRACE((tfp, "HTGopher: Interrupted in HTGetCharacter, apparently.\n"));
goto end_html;
}
if ((char)ich != LF) {
- *p = ich; /* Put character in line */
+ *p = (char) ich; /* Put character in line */
if (p< &line[BIG-1]) p++;
} else {
@@ -264,7 +264,7 @@ PRIVATE void parse_menu ARGS2(
bytes += p-line; /* add size */
p = line; /* Scan it to parse it */
port = 0; /* Flag "not parsed" */
- CTRACE(tfp, "HTGopher: Menu item: %s\n", line);
+ CTRACE((tfp, "HTGopher: Menu item: %s\n", line));
gtype = *p++;
if (bytes > BytesReported + 1024) {
@@ -403,7 +403,7 @@ PRIVATE void parse_menu ARGS2(
HTSprintf0(&address, "//%s/%c", host, gtype);
for(r = selector; *r; r++) { /* Encode selector string */
- if (acceptable[(unsigned char)*r]) {
+ if (acceptable[UCH(*r)]) {
HTSprintf(&address, "%c", *r);
} else {
HTSprintf(&address, "%c%c%c",
@@ -421,7 +421,7 @@ PRIVATE void parse_menu ARGS2(
PUTS(name);
FREE(address);
} else { /* parse error */
- CTRACE(tfp, "HTGopher: Bad menu item.\n");
+ CTRACE((tfp, "HTGopher: Bad menu item.\n"));
PUTS(line);
} /* parse error */
@@ -497,7 +497,7 @@ PRIVATE void parse_cso ARGS2(
{
if ((char)ich != LF)
{
- *p = ich; /* Put character in line */
+ *p = (char) ich; /* Put character in line */
if (p< &line[BIG-1]) p++;
}
else
@@ -708,7 +708,7 @@ PRIVATE void de_escape ARGS2(char *, command, CONST char *, selector)
b = from_hex(c);
c = *p++;
if (!c) break; /* Odd number of chars! */
- *q++ = FROMASCII((b<<4) + from_hex(c));
+ *q++ = (char) FROMASCII((b<<4) + from_hex(c));
} else {
*q++ = *p++; /* Record */
}
@@ -760,9 +760,7 @@ PRIVATE void interpret_cso_key ARGS5(
if (0 == strncmp(key, "$(FID)", 6)) {
sprintf(buf, "%d", fld->id);
} else if (0 == strncmp(key, "$(FDESC)", 8)) {
- sprintf(buf, "%s%s%s", fld->description,
- ctx->public_override ? /***" "***/"" : "",
- ctx->public_override ? /***fld->attributes***/"" : "");
+ sprintf(buf, "%.2046s", fld->description);
} else if (0 == strncmp(key, "$(FDEF)", 7)) {
strcpy(buf, fld->defreturn ? " checked" : "");
} else if (0 == strncmp(key, "$(FNDX)", 7)) {
@@ -940,14 +938,14 @@ PRIVATE int parse_cso_fields ARGS2(
*/
while ((ich = NEXT_CHAR) != EOF) {
if (interrupted_in_htgetcharacter) {
- CTRACE(tfp, "HTLoadCSO: Interrupted in HTGetCharacter, apparently.\n");
+ CTRACE((tfp, "HTLoadCSO: Interrupted in HTGetCharacter, apparently.\n"));
free_CSOfields();
buf[0] = '\0';
return HT_INTERRUPTED;
}
if ((char)ich != LF) {
- *p = ich; /* Put character in buffer */
+ *p = (char) ich; /* Put character in buffer */
if (p < &buf[size-1]) {
p++;
}
@@ -981,28 +979,30 @@ PRIVATE int parse_cso_fields ARGS2(
** multiple digits (infinite?).
*/
- /*
- ** Check status, ignore any non-success.
- */
- if (p[1] != '2' )
- continue;
+ /*
+ ** Check status, ignore any non-success.
+ */
+ if (p[1] != '2' )
+ continue;
- /*
- ** Parse fields within returned line into status, ndx, name, data.
- */
- indx = NULL;
- name = NULL;
- for (i = 0; p[i]; i++)
- if (p[i] == ':' ) {
- p[i] = '\0';
- if (!indx) {
- indx = (char *)&p[i+1];
- code = atoi (indx);
- } else if (!name) {
- name = (char *)&p[i+1];
- } else {
- i++;
- break;
+ /*
+ ** Parse fields within returned line into status, ndx, name,
+ ** data.
+ */
+ indx = NULL;
+ name = NULL;
+ for (i = 0; p[i]; i++) {
+ if (p[i] == ':' ) {
+ p[i] = '\0';
+ if (!indx) {
+ indx = (char *)&p[i+1];
+ code = atoi (indx);
+ } else if (!name) {
+ name = (char *)&p[i+1];
+ } else {
+ i++;
+ break;
+ }
}
}
/*
@@ -1028,7 +1028,7 @@ PRIVATE int parse_cso_fields ARGS2(
** Initialize new block, append to end of list
** to preserve order.
*/
- new = (CSOfield_info *)calloc(1, sizeof(CSOfield_info));
+ new = typecalloc(CSOfield_info);
if (!new) {
outofmem(__FILE__, "HTLoadCSO");
}
@@ -1097,7 +1097,7 @@ PRIVATE int generate_cso_form ARGS4(
char *key, *line;
CSOformgen_context ctx;
static char *template[] = {
- "<HEAD>\n<TITLE>CSO/PH Query Form for $(HOST)</TITLE>\n</HEAD>\n<BODY>",
+ "<HTML>\n<HEAD>\n<TITLE>CSO/PH Query Form for $(HOST)</TITLE>\n</HEAD>\n<BODY>",
"<H2><I>CSO/PH Query Form</I> for <EM>$(HOST)</EM></H2>",
"To search the database for a name, fill in one or more of the fields",
"in the form below and activate the 'Submit query' button. At least",
@@ -1237,13 +1237,13 @@ PRIVATE int generate_cso_report ARGS1(
*/
while (!stop && (ich = NEXT_CHAR) != EOF) {
if (interrupted_in_htgetcharacter) {
- CTRACE(tfp, "HTLoadCSO: Interrupted in HTGetCharacter, apparently.\n");
+ CTRACE((tfp, "HTLoadCSO: Interrupted in HTGetCharacter, apparently.\n"));
_HTProgress (CONNECTION_INTERRUPTED);
goto end_CSOreport;
}
if ((char)ich != LF) {
- *p = ich; /* Put character in line */
+ *p = (char) ich; /* Put character in line */
if (p < &line[BIG-1]) {
p++;
}
@@ -1459,7 +1459,7 @@ PRIVATE int HTLoadCSO ARGS4(
return -3; /* Bad if no name sepcified */
if (!*arg)
return -2; /* Bad if name had zero length */
- CTRACE(tfp, "HTLoadCSO: Looking for %s\n", arg);
+ CTRACE((tfp, "HTLoadCSO: Looking for %s\n", arg));
/*
** Set up a socket to the server for the data.
@@ -1469,26 +1469,26 @@ PRIVATE int HTLoadCSO ARGS4(
/*
** Interrupt cleanly.
*/
- CTRACE(tfp, "HTLoadCSO: Interrupted on connect; recovering cleanly.\n");
+ CTRACE((tfp, "HTLoadCSO: Interrupted on connect; recovering cleanly.\n"));
_HTProgress (CONNECTION_INTERRUPTED);
return HT_NOT_LOADED;
}
if (status < 0) {
- CTRACE(tfp, "HTLoadCSO: Unable to connect to remote host for `%s'.\n",
- arg);
+ CTRACE((tfp, "HTLoadCSO: Unable to connect to remote host for `%s'.\n",
+ arg));
return HTInetStatus("connect");
}
HTInitInput(s); /* Set up input buffering */
HTSprintf0(&command, "fields%c%c", CR, LF);
- CTRACE(tfp, "HTLoadCSO: Connected, writing command `%s' to socket %d\n",
- command, s);
+ CTRACE((tfp, "HTLoadCSO: Connected, writing command `%s' to socket %d\n",
+ command, s));
_HTProgress (GOPHER_SENDING_CSO_REQUEST);
status = NETWRITE(s, command, (int)strlen(command));
FREE(command);
if (status < 0) {
- CTRACE(tfp, "HTLoadCSO: Unable to send command.\n");
+ CTRACE((tfp, "HTLoadCSO: Unable to send command.\n"));
return HTInetStatus("send");
}
_HTProgress (GOPHER_SENT_CSO_REQUEST);
@@ -1655,12 +1655,12 @@ PRIVATE int HTLoadCSO ARGS4(
(*Target->isa->put_block)(Target, command, strlen(command));
strcpy(buf, "</H2>\n");
(*Target->isa->put_block)(Target, buf, strlen(buf));
- CTRACE(tfp, "HTLoadCSO: Writing command `%s' to socket %d\n",
- command, s);
+ CTRACE((tfp, "HTLoadCSO: Writing command `%s' to socket %d\n",
+ command, s));
status = NETWRITE(s, command, strlen(command));
FREE(command);
if (status < 0) {
- CTRACE(tfp, "HTLoadCSO: Unable to send command.\n");
+ CTRACE((tfp, "HTLoadCSO: Unable to send command.\n"));
free_CSOfields();
return HTInetStatus("send");
}
@@ -1697,7 +1697,7 @@ PRIVATE int HTLoadGopher ARGS4(
return -3; /* Bad if no name sepcified */
if (!*arg)
return -2; /* Bad if name had zero length */
- CTRACE(tfp, "HTGopher: Looking for %s\n", arg);
+ CTRACE((tfp, "HTGopher: Looking for %s\n", arg));
/*
** If it's a port 105 GOPHER_CSO gtype with no ISINDEX token ('?'),
@@ -1710,7 +1710,7 @@ PRIVATE int HTLoadGopher ARGS4(
if ((len = strlen(arg)) > 5) {
if (0 == strcmp((CONST char *)&arg[len-6], ":105/2")) {
/* Use CSO gateway. */
- CTRACE(tfp, "HTGopher: Passing to CSO/PH gateway.\n");
+ CTRACE((tfp, "HTGopher: Passing to CSO/PH gateway.\n"));
return HTLoadCSO(arg, anAnchor, format_out, sink);
}
}
@@ -1721,10 +1721,10 @@ PRIVATE int HTLoadGopher ARGS4(
*/
if (strstr(arg, ":79/0") != NULL) {
#ifndef DISABLE_FINGER
- CTRACE(tfp, "HTGopher: Passing to finger gateway.\n");
+ CTRACE((tfp, "HTGopher: Passing to finger gateway.\n"));
return HTLoadFinger(arg, anAnchor, format_out, sink);
#else /* finger is disabled */
- HTAlert(gettext("Unable to access document!"));
+ HTAlert(COULD_NOT_ACCESS_DOCUMENT);
return HT_NOT_LOADED;
#endif /* DISABLE_FINGER */
}
@@ -1824,22 +1824,22 @@ PRIVATE int HTLoadGopher ARGS4(
/*
** Interrupt cleanly.
*/
- CTRACE(tfp, "HTGopher: Interrupted on connect; recovering cleanly.\n");
+ CTRACE((tfp, "HTGopher: Interrupted on connect; recovering cleanly.\n"));
_HTProgress (CONNECTION_INTERRUPTED);
FREE(command);
return HT_NOT_LOADED;
}
if (status < 0) {
- CTRACE(tfp, "HTGopher: Unable to connect to remote host for `%s'.\n",
- arg);
+ CTRACE((tfp, "HTGopher: Unable to connect to remote host for `%s'.\n",
+ arg));
FREE(command);
return HTInetStatus("connect");
}
HTInitInput(s); /* Set up input buffering */
- CTRACE(tfp, "HTGopher: Connected, writing command `%s' to socket %d\n",
- command, s);
+ CTRACE((tfp, "HTGopher: Connected, writing command `%s' to socket %d\n",
+ command, s));
#ifdef NOT_ASCII
{
@@ -1855,7 +1855,7 @@ PRIVATE int HTLoadGopher ARGS4(
status = NETWRITE(s, command, (int)strlen(command));
FREE(command);
if (status < 0) {
- CTRACE(tfp, "HTGopher: Unable to send command.\n");
+ CTRACE((tfp, "HTGopher: Unable to send command.\n"));
return HTInetStatus("send");
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTGroup.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTGroup.c
index 490699d3429..2b16599fb6a 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTGroup.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTGroup.c
@@ -48,6 +48,7 @@
#include <HTLex.h> /* Lexical analysor */
#include <HTGroup.h> /* Implemented here */
+#include <LYUtils.h>
#include <LYLeaks.h>
/*
@@ -78,12 +79,12 @@ PRIVATE void syntax_error ARGS3(FILE *, fp,
int ch;
while ((ch = getc(fp)) != EOF && ch != '\n')
- if (cnt < 40) buffer[cnt++] = ch;
+ if (cnt < 40) buffer[cnt++] = (char) ch;
buffer[cnt] = (char)0;
- CTRACE(tfp, "%s %d before: '%s'\nHTGroup.c: %s (got %s)\n",
+ CTRACE((tfp, "%s %d before: '%s'\nHTGroup.c: %s (got %s)\n",
"HTGroup.c: Syntax error in rule file at line",
- HTlex_line, buffer, msg, lex_verbose(lex_item));
+ HTlex_line, buffer, msg, lex_verbose(lex_item)));
HTlex_line++;
}
@@ -107,7 +108,7 @@ PRIVATE AddressDefList *parse_address_part ARGS1(FILE *, fp)
address_def_list = HTList_new();
for(;;) {
- Ref *ref = (Ref*)calloc(1, sizeof(Ref));
+ Ref *ref = typecalloc(Ref);
if (ref == NULL)
outofmem(__FILE__, "parse_address_part");
ref->name = NULL;
@@ -163,7 +164,7 @@ PRIVATE UserDefList *parse_user_part ARGS1(FILE *, fp)
user_def_list = HTList_new();
for (;;) {
- Ref *ref = (Ref*)calloc(1, sizeof(Ref));
+ Ref *ref = typecalloc(Ref);
if (ref == NULL)
outofmem(__FILE__, "parse_user_part");
ref->name = NULL;
@@ -238,7 +239,7 @@ PRIVATE Item *parse_item ARGS1(FILE *, fp)
syntax_error(fp, "Empty item not allowed", lex_item);
return NULL;
}
- item = (Item*)calloc(1, sizeof(Item));
+ item = typecalloc(Item);
if (item == NULL)
outofmem(__FILE__, "parse_item");
item->user_def_list = user_def_list;
@@ -287,7 +288,7 @@ PUBLIC GroupDef *HTAA_parseGroupDef ARGS1(FILE *, fp)
if (!(item_list = parse_item_list(fp))) {
return NULL;
}
- group_def = (GroupDef*)calloc(1, sizeof(GroupDef));
+ group_def = typecalloc(GroupDef);
if (group_def == NULL)
outofmem(__FILE__, "HTAA_parseGroupDef");
group_def->group_name = NULL;
@@ -506,8 +507,8 @@ PRIVATE BOOL part_match ARGS2(CONST char *, tcur,
actual[cnt] = (char)0;
status = HTAA_templateMatch(required, actual);
- CTRACE(tfp, "part_match: req: '%s' act: '%s' match: %s\n",
- required, actual, (status ? "yes" : "no"));
+ CTRACE((tfp, "part_match: req: '%s' act: '%s' match: %s\n",
+ required, actual, (status ? "yes" : "no")));
return status;
}
@@ -660,25 +661,25 @@ PUBLIC GroupDefList *HTAA_readGroupFile ARGS1(CONST char *, filename)
while (NULL != (group_cache = (GroupCache*)HTList_nextObject(cur))) {
if (!strcmp(filename, group_cache->group_filename)) {
- CTRACE(tfp, "%s '%s' %s\n",
+ CTRACE((tfp, "%s '%s' %s\n",
"HTAA_readGroupFile: group file",
- filename, "already found in cache");
+ filename, "already found in cache"));
return group_cache->group_list;
} /* if cache match */
} /* while cached files remain */
} /* cache exists */
- CTRACE(tfp, "HTAA_readGroupFile: reading group file `%s'\n",
- filename);
+ CTRACE((tfp, "HTAA_readGroupFile: reading group file `%s'\n",
+ filename));
- if (!(fp = fopen(filename, "r"))) {
- CTRACE(tfp, "%s '%s'\n",
+ if (!(fp = fopen(filename, TXT_R))) {
+ CTRACE((tfp, "%s '%s'\n",
"HTAA_readGroupFile: unable to open group file",
- filename);
+ filename));
return NULL;
}
- if (!(group_cache = (GroupCache*)calloc(1, sizeof(GroupCache))))
+ if ((group_cache = typecalloc(GroupCache)) == 0)
outofmem(__FILE__, "HTAA_readGroupFile");
group_cache->group_filename = NULL;
@@ -687,7 +688,7 @@ PUBLIC GroupDefList *HTAA_readGroupFile ARGS1(CONST char *, filename)
HTList_addObject(group_cache_list, (void*)group_cache);
fclose(fp);
- CTRACE(tfp, "Read group file '%s', results follow:\n", filename);
+ CTRACE((tfp, "Read group file '%s', results follow:\n", filename));
if (TRACE)
print_group_def_list(group_cache->group_list);
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c
index 59901fb3ba6..9d9412af21b 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c
@@ -43,7 +43,7 @@ PUBLIC void unlex ARGS1(LexItem, lex_item)
PUBLIC LexItem lex ARGS1(FILE *, fp)
{
- int ch;
+ int ch = 0;
if (fp != cache) { /* This cache doesn't work ok because the system */
cache = fp; /* often assign same FILE structure the next open */
@@ -89,7 +89,7 @@ PUBLIC LexItem lex ARGS1(FILE *, fp)
}
break;
default:
- HTlex_buffer[lex_cnt++] = ch;
+ HTlex_buffer[lex_cnt++] = (char) ch;
HTlex_buffer[lex_cnt] = '\0';
if ('*' == ch) lex_template = YES;
} /* switch ch */
@@ -119,10 +119,10 @@ PUBLIC char *lex_verbose ARGS1(LexItem, lex_item)
case LEX_AT_SIGN: /* Address qualifier */
return "address qualifier '@'";
case LEX_ALPH_STR: /* Alphanumeric string */
- sprintf(msg, "alphanumeric string '%s'", HTlex_buffer);
+ sprintf(msg, "alphanumeric string '%.70s'", HTlex_buffer);
return msg;
case LEX_TMPL_STR: /* Template string */
- sprintf(msg, "template string '%s'", HTlex_buffer);
+ sprintf(msg, "template string '%.70s'", HTlex_buffer);
return msg;
default:
return "UNKNOWN-LEX-ITEM";
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTList.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTList.c
index 3ea533697b9..90871f901ad 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTList.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTList.c
@@ -17,8 +17,8 @@ PUBLIC HTList * HTList_new NOARGS
{
HTList *newList;
- if ((newList = (HTList *)calloc(1, sizeof(HTList))) == NULL)
- outofmem(__FILE__, "HTList_new");
+ if ((newList = typecalloc(HTList)) == NULL)
+ outofmem(__FILE__, "HTList_new");
newList->object = NULL;
newList->next = NULL;
@@ -71,9 +71,9 @@ PUBLIC HTList * HTList_appendList ARGS2(
HTList * temp = start;
if (!start) {
- CTRACE(tfp, "HTList: Trying to append list %p to a nonexisting list\n",
- tail);
- return NULL;
+ CTRACE((tfp, "HTList: Trying to append list %p to a nonexisting list\n",
+ tail));
+ return NULL;
}
if (!(tail && tail->next))
return start;
@@ -96,15 +96,15 @@ PUBLIC void HTList_addObject ARGS2(
HTList *newNode;
if (me) {
- if ((newNode = (HTList *)calloc(1, sizeof(HTList))) == NULL)
+ if ((newNode = typecalloc(HTList)) == NULL)
outofmem(__FILE__, "HTList_addObject");
newNode->object = newObject;
newNode->next = me->next;
me->next = newNode;
} else {
- CTRACE(tfp, "HTList: Trying to add object %p to a nonexisting list\n",
- newObject);
+ CTRACE((tfp, "HTList: Trying to add object %p to a nonexisting list\n",
+ newObject));
}
return;
@@ -144,32 +144,32 @@ PUBLIC void HTList_insertObjectAt ARGS3(
int Pos = pos;
if (!temp) {
- CTRACE(tfp, "HTList: Trying to add object %p to a nonexisting list\n",
- newObject);
+ CTRACE((tfp, "HTList: Trying to add object %p to a nonexisting list\n",
+ newObject));
return;
}
if (Pos < 0) {
Pos = 0;
- CTRACE(tfp, "HTList: Treating negative object position %d as %d.\n",
- pos, Pos);
+ CTRACE((tfp, "HTList: Treating negative object position %d as %d.\n",
+ pos, Pos));
}
prevNode = temp;
while ((temp = temp->next)) {
if (Pos == 0) {
- if ((newNode = (HTList *)calloc(1, sizeof(HTList))) == NULL)
- outofmem(__FILE__, "HTList_addObjectAt");
+ if ((newNode = typecalloc(HTList)) == NULL)
+ outofmem(__FILE__, "HTList_addObjectAt");
newNode->object = newObject;
newNode->next = temp;
if (prevNode)
- prevNode->next = newNode;
+ prevNode->next = newNode;
return;
}
prevNode = temp;
Pos--;
}
if (Pos >= 0)
- HTList_addObject(prevNode, newObject);
+ HTList_addObject(prevNode, newObject);
return;
}
@@ -189,7 +189,7 @@ PUBLIC BOOL HTList_removeObject ARGS2(
prevNode = temp;
temp = temp->next;
if (temp->object == oldObject) {
- prevNode->next = temp->next;
+ prevNode->next = temp->next;
FREE (temp);
return YES; /* Success */
}
@@ -241,14 +241,14 @@ PUBLIC void * HTList_removeLastObject ARGS1(
void * lastObject;
if (me && me->next) {
- lastNode = me->next;
+ lastNode = me->next;
lastObject = lastNode->object;
me->next = lastNode->next;
FREE (lastNode);
return lastObject;
} else { /* Empty list */
- return NULL;
+ return NULL;
}
}
@@ -264,7 +264,7 @@ PUBLIC void * HTList_removeFirstObject ARGS1(
void *firstObject;
if (!temp)
- return NULL;
+ return NULL;
prevNode = temp;
if (temp->next) {
@@ -278,7 +278,7 @@ PUBLIC void * HTList_removeFirstObject ARGS1(
return firstObject;
} else { /* Empty list */
- return NULL;
+ return NULL;
}
}
@@ -293,7 +293,7 @@ PUBLIC int HTList_count ARGS1(
int count = 0;
if (temp)
- while ((temp = temp->next))
+ while ((temp = temp->next))
count++;
return count;
@@ -313,7 +313,7 @@ PUBLIC int HTList_indexOf ARGS2(
if (temp) {
while ((temp = temp->next)) {
if (temp->object == object)
- return position;
+ return position;
position++;
}
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMIME.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMIME.c
index 7426f2d8b14..2672b4060e4 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMIME.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMIME.c
@@ -13,6 +13,7 @@
*/
#include <HTUtils.h>
#include <HTMIME.h> /* Implemented here */
+#include <HTTP.h> /* for redirecting_url */
#include <HTAlert.h>
#include <HTCJK.h>
#include <UCMap.h>
@@ -26,13 +27,12 @@
#include <LYLeaks.h>
extern BOOL HTPassEightBitRaw;
-extern HTCJKlang HTCJK;
/* MIME Object
** -----------
*/
-typedef enum _MIME_state {
+typedef enum {
MIME_TRANSPARENT, /* put straight through to target ASAP! */
miBEGINNING_OF_LINE, /* first character and not a continuation */
miA,
@@ -100,12 +100,12 @@ typedef enum _MIME_state {
miJUNK_LINE, /* Ignore the rest of this folded line */
miNEWLINE, /* Just found a LF .. maybe continuation */
miCHECK, /* check against check_pointer */
- MIME_NET_ASCII, /* Translate from net ascii */
+ MIME_NET_ASCII, /* Translate from net ascii */
MIME_IGNORE /* Ignore entire file */
/* TRANSPARENT and IGNORE are defined as stg else in _WINDOWS */
} MIME_state;
-#define VALUE_SIZE 5120 /* @@@@@@@ Arbitrary? */
+#define VALUE_SIZE 5120 /* @@@@@@@ Arbitrary? */
struct _HTStream {
CONST HTStreamClass * isa;
@@ -114,22 +114,26 @@ struct _HTStream {
MIME_state if_ok; /* got this state if match */
MIME_state field; /* remember which field */
MIME_state fold_state; /* state on a fold */
+ BOOL head_only; /* only parsing header */
+ BOOL pickup_redirection; /* parsing for location */
+ BOOL no_streamstack; /* use sink directly */
CONST char * check_pointer; /* checking input */
char * value_pointer; /* storing values */
char value[VALUE_SIZE];
- HTParentAnchor * anchor; /* Given on creation */
+ HTParentAnchor * anchor; /* Given on creation */
HTStream * sink; /* Given on creation */
char * boundary; /* For multipart */
char * set_cookie; /* Set-Cookie */
char * set_cookie2; /* Set-Cookie2 */
+ char * location; /* Location */
HTFormat encoding; /* Content-Transfer-Encoding */
char * compression_encoding;
- HTFormat format; /* Content-Type */
- HTStream * target; /* While writing out */
+ HTFormat format; /* Content-Type */
+ HTStream * target; /* While writing out */
HTStreamClass targetClass;
HTAtom * targetRep; /* Converting into? */
@@ -143,7 +147,7 @@ struct _HTStream {
** first and last characters are double-quotes. - FM
*/
PUBLIC void HTMIME_TrimDoubleQuotes ARGS1(
- char *, value)
+ char *, value)
{
int i;
char *cp = value;
@@ -161,6 +165,747 @@ PUBLIC void HTMIME_TrimDoubleQuotes ARGS1(
value[i] = cp[(i +1)];
}
+PRIVATE int pumpData ARGS1(HTStream *, me)
+{
+ if (strchr(HTAtom_name(me->format), ';') != NULL) {
+ char *cp = NULL, *cp1, *cp2, *cp3 = NULL, *cp4;
+
+ CTRACE((tfp, "HTMIME: Extended MIME Content-Type is %s\n",
+ HTAtom_name(me->format)));
+ StrAllocCopy(cp, HTAtom_name(me->format));
+ /*
+ ** Note that the Content-Type value was converted
+ ** to lower case when we loaded into me->format,
+ ** but there may have been a mixed or upper-case
+ ** atom, so we'll force lower-casing again. We
+ ** also stripped spaces and double-quotes, but
+ ** we'll make sure they're still gone from any
+ ** charset parameter we check. - FM
+ */
+ LYLowerCase(cp);
+ if ((cp1 = strchr(cp, ';')) != NULL) {
+ BOOL chartrans_ok = NO;
+ if ((cp2 = strstr(cp1, "charset")) != NULL) {
+ int chndl;
+
+ cp2 += 7;
+ while (*cp2 == ' ' || *cp2 == '=' || *cp2 == '\"')
+ cp2++;
+ StrAllocCopy(cp3, cp2); /* copy to mutilate more */
+ for (cp4 = cp3; (*cp4 != '\0' && *cp4 != '\"' &&
+ *cp4 != ';' && *cp4 != ':' &&
+ !WHITE(*cp4)); cp4++)
+ ; /* do nothing */
+ *cp4 = '\0';
+ cp4 = cp3;
+ chndl = UCGetLYhndl_byMIME(cp3);
+ 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 (chndl < 0)
+ /*
+ ** UCLYhndl_for_unrec not defined :-(
+ ** fallback to UCLYhndl_for_unspec
+ ** which always valid.
+ */
+ chndl = UCLYhndl_for_unspec; /* always >= 0 */
+ 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);
+ }
+ }
+ 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 (!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 (!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) {
+ HTCJK = NOCJK;
+ if (!(p_in->codepoints &
+ UCT_CP_SUBSETOF_LAT1) &&
+ chndl == current_char_set) {
+ HTPassEightBitRaw = TRUE;
+ }
+ } else if (p_out->enc == UCT_ENC_CJK) {
+ Set_HTCJK(p_in->MIMEname, p_out->MIMEname);
+ }
+ } else {
+ /*
+ ** Cannot translate.
+ ** If according to some heuristic the given
+ ** charset and the current display character
+ ** both are likely to be like ISO-8859 in
+ ** structure, pretend we have some kind
+ ** of match.
+ */
+ BOOL given_is_8859
+ = (BOOL) (!strncmp(cp4, "iso-8859-", 9) &&
+ isdigit(UCH(cp4[9])));
+ BOOL given_is_8859like
+ = (BOOL) (given_is_8859 ||
+ !strncmp(cp4, "windows-", 8) ||
+ !strncmp(cp4, "cp12", 4) ||
+ !strncmp(cp4, "cp-12", 5));
+ BOOL given_and_display_8859like
+ = (BOOL) (given_is_8859like &&
+ (strstr(LYchar_set_names[current_char_set],
+ "ISO-8859") ||
+ strstr(LYchar_set_names[current_char_set],
+ "windows-")));
+
+ if (given_and_display_8859like) {
+ *cp1 = '\0';
+ me->format = HTAtom_for(cp);
+ }
+ if (given_is_8859) {
+ cp1 = &cp4[10];
+ while (*cp1 &&
+ isdigit(UCH(*cp1)))
+ cp1++;
+ *cp1 = '\0';
+ }
+ if (given_and_display_8859like) {
+ StrAllocCopy(me->anchor->charset, cp4);
+ HTPassEightBitRaw = TRUE;
+ }
+ HTAlert(*cp4 ? cp4 : me->anchor->charset);
+ }
+ FREE(cp3);
+ } else {
+ /*
+ ** No charset parameter is present.
+ ** Ignore all other parameters, as
+ ** we do when charset is present. - FM
+ */
+ *cp1 = '\0';
+ me->format = HTAtom_for(cp);
+ }
+ }
+ FREE(cp);
+ }
+ /*
+ ** If we have an Expires header and haven't
+ ** already set the no_cache element for the
+ ** anchor, check if we should set it based
+ ** on that header. - FM
+ */
+ if (me->anchor->no_cache == FALSE &&
+ me->anchor->expires != NULL) {
+ if (!strcmp(me->anchor->expires, "0")) {
+ /*
+ * The value is zero, which we treat as
+ * an absolute no-cache directive. - FM
+ */
+ me->anchor->no_cache = TRUE;
+ } else if (me->anchor->date != NULL) {
+ /*
+ ** We have a Date header, so check if
+ ** the value is less than or equal to
+ ** that. - FM
+ */
+ if (LYmktime(me->anchor->expires, TRUE) <=
+ LYmktime(me->anchor->date, TRUE)) {
+ me->anchor->no_cache = TRUE;
+ }
+ } else if (LYmktime(me->anchor->expires, FALSE) <= 0) {
+ /*
+ ** We don't have a Date header, and
+ ** the value is in past for us. - FM
+ */
+ me->anchor->no_cache = TRUE;
+ }
+ }
+ StrAllocCopy(me->anchor->content_type,
+ HTAtom_name(me->format));
+
+ if (me->set_cookie != NULL || me->set_cookie2 != NULL) {
+ LYSetCookie(me->set_cookie,
+ me->set_cookie2,
+ me->anchor->address);
+ FREE(me->set_cookie);
+ FREE(me->set_cookie2);
+ }
+ if (me->pickup_redirection) {
+ if (me->location && *me->location) {
+ redirecting_url = me->location;
+ me->location = NULL;
+ if (me->targetRep != WWW_DEBUG || me->sink)
+ me->head_only = YES;
+
+ } else {
+ permanent_redirection = FALSE;
+ if (me->location) {
+ CTRACE((tfp, "HTTP: 'Location:' is zero-length!\n"));
+ HTAlert(REDIRECTION_WITH_BAD_LOCATION);
+ }
+ CTRACE((tfp, "HTTP: Failed to pick up location.\n"));
+ if (me->location) {
+ FREE(me->location);
+ } else {
+ HTAlert(REDIRECTION_WITH_NO_LOCATION);
+ }
+ }
+ }
+ if (me->head_only) {
+ /* We are done! - kw */
+ me->state = MIME_IGNORE;
+ return HT_OK;
+ }
+
+ if (me->no_streamstack) {
+ me->target = me->sink;
+ } else {
+ if (!me->compression_encoding) {
+ CTRACE((tfp, "HTMIME: MIME Content-Type is '%s', converting to '%s'\n",
+ HTAtom_name(me->format), HTAtom_name(me->targetRep)));
+ } else {
+ /*
+ ** Change the format to that for "www/compressed"
+ ** and set up a stream to deal with it. - FM
+ */
+ CTRACE((tfp, "HTMIME: MIME Content-Type is '%s',\n", HTAtom_name(me->format)));
+ me->format = HTAtom_for("www/compressed");
+ CTRACE((tfp, " Treating as '%s'. Converting to '%s'\n",
+ HTAtom_name(me->format), HTAtom_name(me->targetRep)));
+ FREE(me->compression_encoding);
+ }
+ me->target = HTStreamStack(me->format, me->targetRep,
+ me->sink , me->anchor);
+ if (!me->target) {
+ CTRACE((tfp, "HTMIME: Can't translate! ** \n"));
+ me->target = me->sink; /* Cheat */
+ }
+ }
+ if (me->target) {
+ me->targetClass = *me->target->isa;
+ /*
+ ** Check for encoding and select state from there,
+ ** someday, but until we have the relevant code,
+ ** from now push straight through. - FM
+ */
+ me->state = MIME_TRANSPARENT; /* Pump rest of data right through */
+ } else {
+ me->state = MIME_IGNORE; /* What else to do? */
+ }
+ return HT_OK;
+}
+
+PRIVATE int dispatchField ARGS1(HTStream *, me)
+{
+ int i, j;
+ char *cp;
+
+ *me->value_pointer = '\0';
+ cp = me->value_pointer;
+ while ((cp > me->value) && *(--cp) == ' ') /* S/390 -- gil -- 0146 */
+ /*
+ ** Trim trailing spaces.
+ */
+ *cp = '\0';
+
+ switch (me->field) {
+ case miACCEPT_RANGES:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Accept-Ranges: '%s'\n",
+ me->value));
+ break;
+ case miAGE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Age: '%s'\n",
+ me->value));
+ break;
+ case miALLOW:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Allow: '%s'\n",
+ me->value));
+ break;
+ case miALTERNATES:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Alternates: '%s'\n",
+ me->value));
+ break;
+ case miCACHE_CONTROL:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Cache-Control: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Convert to lowercase and indicate in anchor. - FM
+ */
+ LYLowerCase(me->value);
+ StrAllocCopy(me->anchor->cache_control, me->value);
+ /*
+ ** Check whether to set no_cache for the anchor. - FM
+ */
+ {
+ char *cp1, *cp0 = me->value;
+
+ while ((cp1 = strstr(cp0, "no-cache")) != NULL) {
+ cp1 += 8;
+ while (*cp1 != '\0' && WHITE(*cp1))
+ cp1++;
+ if (*cp1 == '\0' || *cp1 == ';') {
+ me->anchor->no_cache = TRUE;
+ break;
+ }
+ cp0 = cp1;
+ }
+ if (me->anchor->no_cache == TRUE)
+ break;
+ cp0 = me->value;
+ while ((cp1 = strstr(cp0, "max-age")) != NULL) {
+ cp1 += 7;
+ while (*cp1 != '\0' && WHITE(*cp1))
+ cp1++;
+ if (*cp1 == '=') {
+ cp1++;
+ while (*cp1 != '\0' && WHITE(*cp1))
+ cp1++;
+ if (isdigit(UCH(*cp1))) {
+ cp0 = cp1;
+ while (isdigit(UCH(*cp1)))
+ cp1++;
+ if (*cp0 == '0' && cp1 == (cp0 + 1)) {
+ me->anchor->no_cache = TRUE;
+ break;
+ }
+ }
+ }
+ cp0 = cp1;
+ }
+ }
+ break;
+ case miCOOKIE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Cookie: '%s'\n",
+ me->value));
+ break;
+ case miCONNECTION:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Connection: '%s'\n",
+ me->value));
+ break;
+ case miCONTENT_BASE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Content-Base: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Indicate in anchor. - FM
+ */
+ StrAllocCopy(me->anchor->content_base, me->value);
+ break;
+ case miCONTENT_DISPOSITION:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Content-Disposition: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Indicate in anchor. - FM
+ */
+ StrAllocCopy(me->anchor->content_disposition, me->value);
+ /*
+ ** It's not clear yet from existing RFCs and IDs
+ ** whether we should be looking for file;, attachment;,
+ ** and/or inline; before the filename=value, so we'll
+ ** just search for "filename" followed by '=' and just
+ ** hope we get the intended value. It is purely a
+ ** suggested name, anyway. - FM
+ */
+ cp = me->anchor->content_disposition;
+ while (*cp != '\0' && strncasecomp(cp, "filename", 8))
+ cp++;
+ if (*cp == '\0')
+ break;
+ cp += 8;
+ while ((*cp != '\0') && (WHITE(*cp) || *cp == '='))
+ cp++;
+ if (*cp == '\0')
+ break;
+ while (*cp != '\0' && WHITE(*cp))
+ cp++;
+ if (*cp == '\0')
+ break;
+ StrAllocCopy(me->anchor->SugFname, cp);
+ if (*me->anchor->SugFname == '\"') {
+ if ((cp = strchr((me->anchor->SugFname + 1),
+ '\"')) != NULL) {
+ *(cp + 1) = '\0';
+ HTMIME_TrimDoubleQuotes(me->anchor->SugFname);
+ } else {
+ FREE(me->anchor->SugFname);
+ break;
+ }
+ }
+ cp = me->anchor->SugFname;
+ while (*cp != '\0' && !WHITE(*cp))
+ cp++;
+ *cp = '\0';
+ if (*me->anchor->SugFname == '\0')
+ FREE(me->anchor->SugFname);
+ break;
+ case miCONTENT_ENCODING:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Content-Encoding: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value) ||
+ !strcasecomp(me->value, "identity"))
+ break;
+ /*
+ ** Convert to lowercase and indicate in anchor. - FM
+ */
+ LYLowerCase(me->value);
+ StrAllocCopy(me->anchor->content_encoding, me->value);
+ FREE(me->compression_encoding);
+ if (!strcmp(me->value, "8bit") ||
+ !strcmp(me->value, "7bit") ||
+ !strcmp(me->value, "binary")) {
+ /*
+ ** Some server indicated "8bit", "7bit" or "binary"
+ ** inappropriately. We'll ignore it. - FM
+ */
+ CTRACE((tfp, " Ignoring it!\n"));
+ } else {
+ /*
+ ** Save it to use as a flag for setting
+ ** up a "www/compressed" target. - FM
+ */
+ StrAllocCopy(me->compression_encoding, me->value);
+ }
+ break;
+ case miCONTENT_FEATURES:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Content-Features: '%s'\n",
+ me->value));
+ break;
+ case miCONTENT_LANGUAGE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Content-Language: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Convert to lowercase and indicate in anchor. - FM
+ */
+ LYLowerCase(me->value);
+ StrAllocCopy(me->anchor->content_language, me->value);
+ break;
+ case miCONTENT_LENGTH:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Content-Length: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Convert to integer and indicate in anchor. - FM
+ */
+ me->anchor->content_length = atoi(me->value);
+ if (me->anchor->content_length < 0)
+ me->anchor->content_length = 0;
+ CTRACE((tfp, " Converted to integer: '%d'\n",
+ me->anchor->content_length));
+ break;
+ case miCONTENT_LOCATION:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Content-Location: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Indicate in anchor. - FM
+ */
+ StrAllocCopy(me->anchor->content_location, me->value);
+ break;
+ case miCONTENT_MD5:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Content-MD5: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Indicate in anchor. - FM
+ */
+ StrAllocCopy(me->anchor->content_md5, me->value);
+ break;
+ case miCONTENT_RANGE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Content-Range: '%s'\n",
+ me->value));
+ break;
+ case miCONTENT_TRANSFER_ENCODING:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Content-Transfer-Encoding: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Force the Content-Transfer-Encoding value
+ ** to all lower case. - FM
+ */
+ LYLowerCase(me->value);
+ me->encoding = HTAtom_for(me->value);
+ break;
+ case miCONTENT_TYPE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Content-Type: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Force the Content-Type value to all lower case
+ ** and strip spaces and double-quotes. - FM
+ */
+ for (i = 0, j = 0; me->value[i]; i++) {
+ if (me->value[i] != ' ' && me->value[i] != '\"') {
+ me->value[j++] = (char) TOLOWER(me->value[i]);
+ }
+ }
+ me->value[j] = '\0';
+ me->format = HTAtom_for(me->value);
+ break;
+ case miDATE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Date: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Indicate in anchor. - FM
+ */
+ StrAllocCopy(me->anchor->date, me->value);
+ break;
+ case miETAG:
+ /* Do not trim double quotes:
+ * an entity tag consists of an opaque quoted string,
+ * possibly prefixed by a weakness indicator.
+ */
+ CTRACE((tfp, "HTMIME: PICKED UP ETag: %s\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Indicate in anchor. - FM
+ */
+ StrAllocCopy(me->anchor->ETag, me->value);
+ break;
+ case miEXPIRES:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Expires: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Indicate in anchor. - FM
+ */
+ StrAllocCopy(me->anchor->expires, me->value);
+ break;
+ case miKEEP_ALIVE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Keep-Alive: '%s'\n",
+ me->value));
+ break;
+ case miLAST_MODIFIED:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Last-Modified: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Indicate in anchor. - FM
+ */
+ StrAllocCopy(me->anchor->last_modified, me->value);
+ break;
+ case miLINK:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Link: '%s'\n",
+ me->value));
+ break;
+ case miLOCATION:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Location: '%s'\n",
+ me->value));
+ if (me->pickup_redirection && !me->location) {
+ StrAllocCopy(me->location, me->value);
+ } else {
+ CTRACE((tfp, "HTMIME: *** Ignoring Location!\n"));
+ }
+ break;
+ case miPRAGMA:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Pragma: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Check whether to set no_cache for the anchor. - FM
+ */
+ if (!strcmp(me->value, "no-cache"))
+ me->anchor->no_cache = TRUE;
+ break;
+ case miPROXY_AUTHENTICATE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Proxy-Authenticate: '%s'\n",
+ me->value));
+ break;
+ case miPUBLIC:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Public: '%s'\n",
+ me->value));
+ break;
+ case miRETRY_AFTER:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Retry-After: '%s'\n",
+ me->value));
+ break;
+ case miSAFE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Safe: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Indicate in anchor if "YES" or "TRUE". - FM
+ */
+ if (!strcasecomp(me->value, "YES") ||
+ !strcasecomp(me->value, "TRUE")) {
+ me->anchor->safe = TRUE;
+ } else if (!strcasecomp(me->value, "NO") ||
+ !strcasecomp(me->value, "FALSE")) {
+ /*
+ ** If server explicitly tells us that it has changed
+ ** its mind, reset flag in anchor. - kw
+ */
+ me->anchor->safe = FALSE;
+ }
+ break;
+ case miSERVER:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Server: '%s'\n",
+ me->value));
+ if (!(me->value && *me->value))
+ break;
+ /*
+ ** Indicate in anchor. - FM
+ */
+ StrAllocCopy(me->anchor->server, me->value);
+ break;
+ case miSET_COOKIE1:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Set-Cookie: '%s'\n",
+ me->value));
+ if (me->set_cookie == NULL) {
+ StrAllocCopy(me->set_cookie, me->value);
+ } else {
+ StrAllocCat(me->set_cookie, ", ");
+ StrAllocCat(me->set_cookie, me->value);
+ }
+ break;
+ case miSET_COOKIE2:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Set-Cookie2: '%s'\n",
+ me->value));
+ if (me->set_cookie2 == NULL) {
+ StrAllocCopy(me->set_cookie2, me->value);
+ } else {
+ StrAllocCat(me->set_cookie2, ", ");
+ StrAllocCat(me->set_cookie2, me->value);
+ }
+ break;
+ case miTITLE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Title: '%s'\n",
+ me->value));
+ break;
+ case miTRANSFER_ENCODING:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Transfer-Encoding: '%s'\n",
+ me->value));
+ break;
+ case miUPGRADE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Upgrade: '%s'\n",
+ me->value));
+ break;
+ case miURI:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP URI: '%s'\n",
+ me->value));
+ break;
+ case miVARY:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Vary: '%s'\n",
+ me->value));
+ break;
+ case miVIA:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Via: '%s'\n",
+ me->value));
+ break;
+ case miWARNING:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP Warning: '%s'\n",
+ me->value));
+ break;
+ case miWWW_AUTHENTICATE:
+ HTMIME_TrimDoubleQuotes(me->value);
+ CTRACE((tfp, "HTMIME: PICKED UP WWW-Authenticate: '%s'\n",
+ me->value));
+ break;
+ default: /* Should never get here */
+ return HT_ERROR;
+ }
+ return HT_OK;
+}
+
+
/*_________________________________________________________________________
**
** A C T I O N R O U T I N E S
@@ -169,16 +914,15 @@ PUBLIC void HTMIME_TrimDoubleQuotes ARGS1(
/* Character handling
** ------------------
**
-** This is a FSM parser which is tolerant as it can be of all
-** syntax errors. It ignores field names it does not understand,
-** and resynchronises on line beginnings.
+** This is a FSM parser. It ignores field names it does not understand.
+** Folded header fields are recognized. Lines without a fieldname at
+** the beginning (that are not folded continuation lines) are ignored
+** as unknown field names. Fields with empty values are not picked up.
*/
PRIVATE void HTMIME_put_character ARGS2(
HTStream *, me,
char, c)
{
- int i, j;
-
if (me->state == MIME_TRANSPARENT) {
(*me->targetClass.put_character)(me->target, c);/* MUST BE FAST */
return;
@@ -223,10 +967,19 @@ PRIVATE void HTMIME_put_character ARGS2(
case miNEWLINE:
if (c != '\n' && WHITE(c)) { /* Folded line */
me->state = me->fold_state; /* pop state before newline */
+ if (me->state == miGET_VALUE &&
+ me->value_pointer && me->value_pointer != me->value &&
+ !WHITE(*(me->value_pointer-1))) {
+ c = ' ';
+ goto GET_VALUE; /* will add space to value if it fits - kw */
+ }
break;
+ } else if (me->fold_state == miGET_VALUE) {
+ /* Got a field, and now we know it's complete - so
+ * act on it. - kw */
+ dispatchField(me);
}
-
- /* else Falls through */
+ /* FALLTHRU */
case miBEGINNING_OF_LINE:
me->net_ascii = YES;
@@ -234,13 +987,13 @@ PRIVATE void HTMIME_put_character ARGS2(
case 'a':
case 'A':
me->state = miA;
- CTRACE(tfp, "HTMIME: Got 'A' at beginning of line, state now A\n");
+ CTRACE((tfp, "HTMIME: Got 'A' at beginning of line, state now A\n"));
break;
case 'c':
case 'C':
me->state = miC;
- CTRACE (tfp, "HTMIME: Got 'C' at beginning of line, state now C\n");
+ CTRACE((tfp, "HTMIME: Got 'C' at beginning of line, state now C\n"));
break;
case 'd':
@@ -248,13 +1001,13 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ate:";
me->if_ok = miDATE;
me->state = miCHECK;
- CTRACE (tfp, "HTMIME: Got 'D' at beginning of line, checking for 'ate:'\n");
+ CTRACE((tfp, "HTMIME: Got 'D' at beginning of line, checking for 'ate:'\n"));
break;
case 'e':
case 'E':
me->state = miE;
- CTRACE (tfp, "HTMIME: Got 'E' at beginning of line, state now E\n");
+ CTRACE((tfp, "HTMIME: Got 'E' at beginning of line, state now E\n"));
break;
case 'k':
@@ -262,19 +1015,19 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "eep-alive:";
me->if_ok = miKEEP_ALIVE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Got 'K' at beginning of line, checking for 'eep-alive:'\n");
+ CTRACE((tfp, "HTMIME: Got 'K' at beginning of line, checking for 'eep-alive:'\n"));
break;
case 'l':
case 'L':
me->state = miL;
- CTRACE (tfp, "HTMIME: Got 'L' at beginning of line, state now L\n");
+ CTRACE((tfp, "HTMIME: Got 'L' at beginning of line, state now L\n"));
break;
case 'p':
case 'P':
me->state = miP;
- CTRACE (tfp, "HTMIME: Got 'P' at beginning of line, state now P\n");
+ CTRACE((tfp, "HTMIME: Got 'P' at beginning of line, state now P\n"));
break;
case 'r':
@@ -282,275 +1035,43 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "etry-after:";
me->if_ok = miRETRY_AFTER;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Got 'R' at beginning of line, checking for 'etry-after'\n");
+ CTRACE((tfp, "HTMIME: Got 'R' at beginning of line, checking for 'etry-after'\n"));
break;
case 's':
case 'S':
me->state = miS;
- CTRACE (tfp, "HTMIME: Got 'S' at beginning of line, state now S\n");
+ CTRACE((tfp, "HTMIME: Got 'S' at beginning of line, state now S\n"));
break;
case 't':
case 'T':
me->state = miT;
- CTRACE (tfp, "HTMIME: Got 'T' at beginning of line, state now T\n");
+ CTRACE((tfp, "HTMIME: Got 'T' at beginning of line, state now T\n"));
break;
case 'u':
case 'U':
me->state = miU;
- CTRACE (tfp, "HTMIME: Got 'U' at beginning of line, state now U\n");
+ CTRACE((tfp, "HTMIME: Got 'U' at beginning of line, state now U\n"));
break;
case 'v':
case 'V':
me->state = miV;
- CTRACE (tfp, "HTMIME: Got 'V' at beginning of line, state now V\n");
+ CTRACE((tfp, "HTMIME: Got 'V' at beginning of line, state now V\n"));
break;
case 'w':
case 'W':
me->state = miW;
- CTRACE (tfp, "HTMIME: Got 'W' at beginning of line, state now W\n");
+ CTRACE((tfp, "HTMIME: Got 'W' at beginning of line, state now W\n"));
break;
case '\n': /* Blank line: End of Header! */
{
me->net_ascii = NO;
- if (strchr(HTAtom_name(me->format), ';') != NULL) {
- char *cp = NULL, *cp1, *cp2, *cp3 = NULL, *cp4;
-
- CTRACE(tfp, "HTMIME: Extended MIME Content-Type is %s\n",
- HTAtom_name(me->format));
- StrAllocCopy(cp, HTAtom_name(me->format));
- /*
- ** Note that the Content-Type value was converted
- ** to lower case when we loaded into me->format,
- ** but there may have been a mixed or upper-case
- ** atom, so we'll force lower-casing again. We
- ** also stripped spaces and double-quotes, but
- ** we'll make sure they're still gone from any
- ** charset parameter we check. - FM
- */
- LYLowerCase(cp);
- if ((cp1 = strchr(cp, ';')) != NULL) {
- BOOL chartrans_ok = NO;
- if ((cp2 = strstr(cp1, "charset")) != NULL) {
- int chndl;
-
- cp2 += 7;
- while (*cp2 == ' ' || *cp2 == '=' || *cp2 == '\"')
- cp2++;
- StrAllocCopy(cp3, cp2); /* copy to mutilate more */
- for (cp4 = cp3; (*cp4 != '\0' && *cp4 != '\"' &&
- *cp4 != ';' && *cp4 != ':' &&
- !WHITE(*cp4)); cp4++)
- ; /* do nothing */
- *cp4 = '\0';
- cp4 = cp3;
- chndl = UCGetLYhndl_byMIME(cp3);
- 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 (chndl < 0)
- /*
- ** UCLYhndl_for_unrec not defined :-(
- ** fallback to UCLYhndl_for_unspec
- ** which always valid.
- */
- chndl = UCLYhndl_for_unspec; /* always >= 0 */
- 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);
- }
- }
- 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 (!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 (!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) {
- HTCJK = NOCJK;
- if (!(p_in->codepoints &
- UCT_CP_SUBSETOF_LAT1) &&
- chndl == current_char_set) {
- HTPassEightBitRaw = TRUE;
- }
- } else if (p_out->enc == UCT_ENC_CJK) {
- Set_HTCJK(p_in->MIMEname, p_out->MIMEname);
- }
- } else {
- /*
- ** Cannot translate.
- ** If according to some heuristic the given
- ** charset and the current display character
- ** both are likely to be like ISO-8859 in
- ** structure, pretend we have some kind
- ** of match.
- */
- BOOL given_is_8859
- = (!strncmp(cp4, "iso-8859-", 9) &&
- isdigit((unsigned char)cp4[9]));
- BOOL given_is_8859like
- = (given_is_8859 ||
- !strncmp(cp4, "windows-", 8) ||
- !strncmp(cp4, "cp12", 4) ||
- !strncmp(cp4, "cp-12", 5));
- BOOL given_and_display_8859like
- = (given_is_8859like &&
- (strstr(LYchar_set_names[current_char_set],
- "ISO-8859") ||
- strstr(LYchar_set_names[current_char_set],
- "windows-")));
-
- if (given_and_display_8859like) {
- *cp1 = '\0';
- me->format = HTAtom_for(cp);
- }
- if (given_is_8859) {
- cp1 = &cp4[10];
- while (*cp1 &&
- isdigit((unsigned char)(*cp1)))
- cp1++;
- *cp1 = '\0';
- }
- if (given_and_display_8859like) {
- StrAllocCopy(me->anchor->charset, cp4);
- HTPassEightBitRaw = TRUE;
- }
- HTAlert(*cp4 ? cp4 : me->anchor->charset);
- }
- FREE(cp3);
- } else {
- /*
- ** No charset parameter is present.
- ** Ignore all other parameters, as
- ** we do when charset is present. - FM
- */
- *cp1 = '\0';
- me->format = HTAtom_for(cp);
- }
- }
- FREE(cp);
- }
- /*
- ** If we have an Expires header and haven't
- ** already set the no_cache element for the
- ** anchor, check if we should set it based
- ** on that header. - FM
- */
- if (me->anchor->no_cache == FALSE &&
- me->anchor->expires != NULL) {
- if (!strcmp(me->anchor->expires, "0")) {
- /*
- * The value is zero, which we treat as
- * an absolute no-cache directive. - FM
- */
- me->anchor->no_cache = TRUE;
- } else if (me->anchor->date != NULL) {
- /*
- ** We have a Date header, so check if
- ** the value is less than or equal to
- ** that. - FM
- */
- if (LYmktime(me->anchor->expires, TRUE) <=
- LYmktime(me->anchor->date, TRUE)) {
- me->anchor->no_cache = TRUE;
- }
- } else if (LYmktime(me->anchor->expires, FALSE) <= 0) {
- /*
- ** We don't have a Date header, and
- ** the value is in past for us. - FM
- */
- me->anchor->no_cache = TRUE;
- }
- }
- StrAllocCopy(me->anchor->content_type,
- HTAtom_name(me->format));
- if (!me->compression_encoding) {
- CTRACE(tfp, "HTMIME: MIME Content-Type is '%s', converting to '%s'\n",
- HTAtom_name(me->format), HTAtom_name(me->targetRep));
- } else {
- /*
- ** Change the format to that for "www/compressed"
- ** and set up a stream to deal with it. - FM
- */
- CTRACE(tfp, "HTMIME: MIME Content-Type is '%s',\n", HTAtom_name(me->format));
- me->format = HTAtom_for("www/compressed");
- CTRACE(tfp, " Treating as '%s'. Converting to '%s'\n",
- HTAtom_name(me->format), HTAtom_name(me->targetRep));
- }
- if (me->set_cookie != NULL || me->set_cookie2 != NULL) {
- LYSetCookie(me->set_cookie,
- me->set_cookie2,
- me->anchor->address);
- FREE(me->set_cookie);
- FREE(me->set_cookie2);
- }
- me->target = HTStreamStack(me->format, me->targetRep,
- me->sink , me->anchor);
- if (!me->target) {
- CTRACE(tfp, "HTMIME: Can't translate! ** \n");
- me->target = me->sink; /* Cheat */
- }
- if (me->target) {
- me->targetClass = *me->target->isa;
- /*
- ** Check for encoding and select state from there,
- ** someday, but until we have the relevant code,
- ** from now push straight through. - FM
- */
- me->state = MIME_TRANSPARENT;
- } else {
- me->state = MIME_IGNORE; /* What else to do? */
- }
- FREE(me->compression_encoding);
+ pumpData(me);
}
break;
@@ -567,7 +1088,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "cept-ranges:";
me->if_ok = miACCEPT_RANGES;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was A, found C, checking for 'cept-ranges:'\n");
+ CTRACE((tfp, "HTMIME: Was A, found C, checking for 'cept-ranges:'\n"));
break;
case 'g':
@@ -575,18 +1096,18 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "e:";
me->if_ok = miAGE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was A, found G, checking for 'e:'\n");
+ CTRACE((tfp, "HTMIME: Was A, found G, checking for 'e:'\n"));
break;
case 'l':
case 'L':
me->state = miAL;
- CTRACE(tfp, "HTMIME: Was A, found L, state now AL'\n");
+ CTRACE((tfp, "HTMIME: Was A, found L, state now AL'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'g' or 'l'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'g' or 'l'"));
goto bad_field_name;
} /* switch on character */
@@ -599,7 +1120,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ow:";
me->if_ok = miALLOW;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was AL, found L, checking for 'ow:'\n");
+ CTRACE((tfp, "HTMIME: Was AL, found L, checking for 'ow:'\n"));
break;
case 't':
@@ -607,12 +1128,12 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ernates:";
me->if_ok = miALTERNATES;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was AL, found T, checking for 'ernates:'\n");
+ CTRACE((tfp, "HTMIME: Was AL, found T, checking for 'ernates:'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'l' or 't'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'l' or 't'"));
goto bad_field_name;
} /* switch on character */
@@ -625,18 +1146,18 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "che-control:";
me->if_ok = miCACHE_CONTROL;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was C, found A, checking for 'che-control:'\n");
+ CTRACE((tfp, "HTMIME: Was C, found A, checking for 'che-control:'\n"));
break;
case 'o':
case 'O':
me->state = miCO;
- CTRACE(tfp, "HTMIME: Was C, found O, state now CO'\n");
+ CTRACE((tfp, "HTMIME: Was C, found O, state now CO'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'a' or 'o'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'a' or 'o'"));
goto bad_field_name;
} /* switch on character */
@@ -647,7 +1168,7 @@ PRIVATE void HTMIME_put_character ARGS2(
case 'n':
case 'N':
me->state = miCON;
- CTRACE(tfp, "HTMIME: Was CO, found N, state now CON\n");
+ CTRACE((tfp, "HTMIME: Was CO, found N, state now CON\n"));
break;
case 'o':
@@ -655,25 +1176,25 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "kie:";
me->if_ok = miCOOKIE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CO, found O, checking for 'kie:'\n");
+ CTRACE((tfp, "HTMIME: Was CO, found O, checking for 'kie:'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'n' or 'o'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'n' or 'o'"));
goto bad_field_name;
} /* switch on character */
break;
- case miCON: /* Check for 'n' or 't' */
+ case miCON: /* Check for 'n' or 't' */
switch (c) {
case 'n':
case 'N':
me->check_pointer = "ection:";
me->if_ok = miCONNECTION;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CON, found N, checking for 'ection:'\n");
+ CTRACE((tfp, "HTMIME: Was CON, found N, checking for 'ection:'\n"));
break;
case 't':
@@ -681,12 +1202,12 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ent-";
me->if_ok = miCONTENT_;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CON, found T, checking for 'ent-'\n");
+ CTRACE((tfp, "HTMIME: Was CON, found T, checking for 'ent-'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'n' or 't'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'n' or 't'"));
goto bad_field_name;
} /* switch on character */
@@ -699,7 +1220,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ag:";
me->if_ok = miETAG;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was E, found T, checking for 'ag:'\n");
+ CTRACE((tfp, "HTMIME: Was E, found T, checking for 'ag:'\n"));
break;
case 'x':
@@ -707,12 +1228,12 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "pires:";
me->if_ok = miEXPIRES;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was E, found X, checking for 'pires:'\n");
+ CTRACE((tfp, "HTMIME: Was E, found X, checking for 'pires:'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'t' or 'x'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'t' or 'x'"));
goto bad_field_name;
} /* switch on character */
@@ -725,7 +1246,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "st-modified:";
me->if_ok = miLAST_MODIFIED;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was L, found A, checking for 'st-modified:'\n");
+ CTRACE((tfp, "HTMIME: Was L, found A, checking for 'st-modified:'\n"));
break;
case 'i':
@@ -733,7 +1254,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "nk:";
me->if_ok = miLINK;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was L, found I, checking for 'nk:'\n");
+ CTRACE((tfp, "HTMIME: Was L, found I, checking for 'nk:'\n"));
break;
case 'o':
@@ -741,12 +1262,12 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "cation:";
me->if_ok = miLOCATION;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was L, found O, checking for 'cation:'\n");
+ CTRACE((tfp, "HTMIME: Was L, found O, checking for 'cation:'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'a', 'i' or 'o'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'a', 'i' or 'o'"));
goto bad_field_name;
} /* switch on character */
@@ -757,7 +1278,7 @@ PRIVATE void HTMIME_put_character ARGS2(
case 'r':
case 'R':
me->state = miPR;
- CTRACE(tfp, "HTMIME: Was P, found R, state now PR'\n");
+ CTRACE((tfp, "HTMIME: Was P, found R, state now PR'\n"));
break;
case 'u':
@@ -765,12 +1286,12 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "blic:";
me->if_ok = miPUBLIC;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was P, found U, checking for 'blic:'\n");
+ CTRACE((tfp, "HTMIME: Was P, found U, checking for 'blic:'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'r' or 'u'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'r' or 'u'"));
goto bad_field_name;
} /* switch on character */
@@ -783,7 +1304,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "gma:";
me->if_ok = miPRAGMA;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was PR, found A, checking for 'gma'\n");
+ CTRACE((tfp, "HTMIME: Was PR, found A, checking for 'gma'\n"));
break;
case 'o':
@@ -791,12 +1312,12 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "xy-authenticate:";
me->if_ok = miPROXY_AUTHENTICATE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was PR, found O, checking for 'xy-authenticate'\n");
+ CTRACE((tfp, "HTMIME: Was PR, found O, checking for 'xy-authenticate'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'a' or 'o'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'a' or 'o'"));
goto bad_field_name;
} /* switch on character */
@@ -809,18 +1330,18 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "fe:";
me->if_ok = miSAFE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was S, found A, checking for 'fe:'\n");
+ CTRACE((tfp, "HTMIME: Was S, found A, checking for 'fe:'\n"));
break;
case 'e':
case 'E':
me->state = miSE;
- CTRACE(tfp, "HTMIME: Was S, found E, state now SE'\n");
+ CTRACE((tfp, "HTMIME: Was S, found E, state now SE'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'a' or 'e'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'a' or 'e'"));
goto bad_field_name;
} /* switch on character */
@@ -833,7 +1354,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ver:";
me->if_ok = miSERVER;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was SE, found R, checking for 'ver'\n");
+ CTRACE((tfp, "HTMIME: Was SE, found R, checking for 'ver'\n"));
break;
case 't':
@@ -841,12 +1362,12 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "-cookie";
me->if_ok = miSET_COOKIE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was SE, found T, checking for '-cookie'\n");
+ CTRACE((tfp, "HTMIME: Was SE, found T, checking for '-cookie'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'r' or 't'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'r' or 't'"));
goto bad_field_name;
} /* switch on character */
@@ -857,19 +1378,19 @@ PRIVATE void HTMIME_put_character ARGS2(
case ':':
me->field = miSET_COOKIE1; /* remember it */
me->state = miSKIP_GET_VALUE;
- CTRACE(tfp, "HTMIME: Was SET_COOKIE, found :, processing\n");
+ CTRACE((tfp, "HTMIME: Was SET_COOKIE, found :, processing\n"));
break;
case '2':
me->check_pointer = ":";
me->if_ok = miSET_COOKIE2;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was SET_COOKIE, found 2, checking for ':'\n");
+ CTRACE((tfp, "HTMIME: Was SET_COOKIE, found 2, checking for ':'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "':' or '2'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "':' or '2'"));
goto bad_field_name;
} /* switch on character */
@@ -882,7 +1403,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "tle:";
me->if_ok = miTITLE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was T, found I, checking for 'tle:'\n");
+ CTRACE((tfp, "HTMIME: Was T, found I, checking for 'tle:'\n"));
break;
case 'r':
@@ -890,12 +1411,12 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ansfer-encoding:";
me->if_ok = miTRANSFER_ENCODING;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was T, found R, checking for 'ansfer-encoding'\n");
+ CTRACE((tfp, "HTMIME: Was T, found R, checking for 'ansfer-encoding'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'i' or 'r'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'i' or 'r'"));
goto bad_field_name;
} /* switch on character */
@@ -908,7 +1429,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "grade:";
me->if_ok = miUPGRADE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was U, found P, checking for 'grade:'\n");
+ CTRACE((tfp, "HTMIME: Was U, found P, checking for 'grade:'\n"));
break;
case 'r':
@@ -916,12 +1437,12 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "i:";
me->if_ok = miURI;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was U, found R, checking for 'i:'\n");
+ CTRACE((tfp, "HTMIME: Was U, found R, checking for 'i:'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'p' or 'r'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'p' or 'r'"));
goto bad_field_name;
} /* switch on character */
@@ -934,7 +1455,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ry:";
me->if_ok = miVARY;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was V, found A, checking for 'ry:'\n");
+ CTRACE((tfp, "HTMIME: Was V, found A, checking for 'ry:'\n"));
break;
case 'i':
@@ -942,12 +1463,12 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "a:";
me->if_ok = miVIA;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was V, found I, checking for 'a:'\n");
+ CTRACE((tfp, "HTMIME: Was V, found I, checking for 'a:'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'a' or 'i'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'a' or 'i'"));
goto bad_field_name;
} /* switch on character */
@@ -960,7 +1481,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "rning:";
me->if_ok = miWARNING;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was W, found A, checking for 'rning:'\n");
+ CTRACE((tfp, "HTMIME: Was W, found A, checking for 'rning:'\n"));
break;
case 'w':
@@ -968,12 +1489,12 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "w-authenticate:";
me->if_ok = miWWW_AUTHENTICATE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was W, found W, checking for 'w-authenticate:'\n");
+ CTRACE((tfp, "HTMIME: Was W, found W, checking for 'w-authenticate:'\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, "'a' or 'w'");
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, "'a' or 'w'"));
goto bad_field_name;
} /* switch on character */
@@ -984,14 +1505,14 @@ PRIVATE void HTMIME_put_character ARGS2(
if (!*me->check_pointer)
me->state = me->if_ok;
} else { /* Error */
- CTRACE(tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
- c, me->check_pointer - 1);
+ CTRACE((tfp, "HTMIME: Bad character `%c' found where `%s' expected\n",
+ c, me->check_pointer - 1));
goto bad_field_name;
}
break;
case miCONTENT_:
- CTRACE (tfp, "HTMIME: in case CONTENT_\n");
+ CTRACE((tfp, "HTMIME: in case CONTENT_\n"));
switch(c) {
case 'b':
@@ -999,7 +1520,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ase:";
me->if_ok = miCONTENT_BASE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CONTENT_, found B, checking for 'ase:'\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_, found B, checking for 'ase:'\n"));
break;
case 'd':
@@ -1007,7 +1528,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "isposition:";
me->if_ok = miCONTENT_DISPOSITION;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CONTENT_, found D, checking for 'isposition:'\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_, found D, checking for 'isposition:'\n"));
break;
case 'e':
@@ -1015,7 +1536,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ncoding:";
me->if_ok = miCONTENT_ENCODING;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CONTENT_, found E, checking for 'ncoding:'\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_, found E, checking for 'ncoding:'\n"));
break;
case 'f':
@@ -1023,13 +1544,13 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "eatures:";
me->if_ok = miCONTENT_FEATURES;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CONTENT_, found F, checking for 'eatures:'\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_, found F, checking for 'eatures:'\n"));
break;
case 'l':
case 'L':
me->state = miCONTENT_L;
- CTRACE (tfp, "HTMIME: Was CONTENT_, found L, state now CONTENT_L\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_, found L, state now CONTENT_L\n"));
break;
case 'm':
@@ -1037,7 +1558,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "d5:";
me->if_ok = miCONTENT_MD5;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CONTENT_, found M, checking for 'd5:'\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_, found M, checking for 'd5:'\n"));
break;
case 'r':
@@ -1045,24 +1566,24 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ange:";
me->if_ok = miCONTENT_RANGE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CONTENT_, found R, checking for 'ange:'\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_, found R, checking for 'ange:'\n"));
break;
case 't':
case 'T':
me->state = miCONTENT_T;
- CTRACE(tfp, "HTMIME: Was CONTENT_, found T, state now CONTENT_T\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_, found T, state now CONTENT_T\n"));
break;
default:
- CTRACE(tfp, "HTMIME: Was CONTENT_, found nothing; bleah\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_, found nothing; bleah\n"));
goto bad_field_name;
} /* switch on character */
break;
case miCONTENT_L:
- CTRACE (tfp, "HTMIME: in case CONTENT_L\n");
+ CTRACE((tfp, "HTMIME: in case CONTENT_L\n"));
switch(c) {
case 'a':
@@ -1070,7 +1591,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "nguage:";
me->if_ok = miCONTENT_LANGUAGE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CONTENT_L, found A, checking for 'nguage:'\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_L, found A, checking for 'nguage:'\n"));
break;
case 'e':
@@ -1078,7 +1599,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ngth:";
me->if_ok = miCONTENT_LENGTH;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CONTENT_L, found E, checking for 'ngth:'\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_L, found E, checking for 'ngth:'\n"));
break;
case 'o':
@@ -1086,18 +1607,18 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "cation:";
me->if_ok = miCONTENT_LOCATION;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CONTENT_L, found O, checking for 'cation:'\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_L, found O, checking for 'cation:'\n"));
break;
default:
- CTRACE (tfp, "HTMIME: Was CONTENT_L, found nothing; bleah\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_L, found nothing; bleah\n"));
goto bad_field_name;
} /* switch on character */
break;
case miCONTENT_T:
- CTRACE (tfp, "HTMIME: in case CONTENT_T\n");
+ CTRACE((tfp, "HTMIME: in case CONTENT_T\n"));
switch(c) {
case 'r':
@@ -1105,7 +1626,7 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "ansfer-encoding:";
me->if_ok = miCONTENT_TRANSFER_ENCODING;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CONTENT_T, found R, checking for 'ansfer-encoding:'\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_T, found R, checking for 'ansfer-encoding:'\n"));
break;
case 'y':
@@ -1113,11 +1634,11 @@ PRIVATE void HTMIME_put_character ARGS2(
me->check_pointer = "pe:";
me->if_ok = miCONTENT_TYPE;
me->state = miCHECK;
- CTRACE(tfp, "HTMIME: Was CONTENT_T, found Y, checking for 'pe:'\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_T, found Y, checking for 'pe:'\n"));
break;
default:
- CTRACE (tfp, "HTMIME: Was CONTENT_T, found nothing; bleah\n");
+ CTRACE((tfp, "HTMIME: Was CONTENT_T, found nothing; bleah\n"));
goto bad_field_name;
} /* switch on character */
@@ -1170,9 +1691,9 @@ PRIVATE void HTMIME_put_character ARGS2(
case miSKIP_GET_VALUE:
if (c == '\n') {
- me->fold_state = me->state;
- me->state = miNEWLINE;
- break;
+ me->fold_state = me->state;
+ me->state = miNEWLINE;
+ break;
}
if (WHITE(c))
/*
@@ -1185,458 +1706,8 @@ PRIVATE void HTMIME_put_character ARGS2(
/* Fall through to store first character */
case miGET_VALUE:
- if (WHITE(c) && c != ' ') { /* End of field */
- char *cp;
- *me->value_pointer = '\0';
- cp = (me->value_pointer - 1);
- while ((cp >= me->value) && *cp == ' ') /* S/390 -- gil -- 0146 */
- /*
- ** Trim trailing spaces.
- */
- *cp = '\0';
- switch (me->field) {
- case miACCEPT_RANGES:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Accept-Ranges: '%s'\n",
- me->value);
- break;
- case miAGE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Age: '%s'\n",
- me->value);
- break;
- case miALLOW:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Allow: '%s'\n",
- me->value);
- break;
- case miALTERNATES:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Alternates: '%s'\n",
- me->value);
- break;
- case miCACHE_CONTROL:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Cache-Control: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Convert to lowercase and indicate in anchor. - FM
- */
- LYLowerCase(me->value);
- StrAllocCopy(me->anchor->cache_control, me->value);
- /*
- ** Check whether to set no_cache for the anchor. - FM
- */
- {
- char *cp1, *cp0 = me->value;
-
- while ((cp1 = strstr(cp0, "no-cache")) != NULL) {
- cp1 += 8;
- while (*cp1 != '\0' && WHITE(*cp1))
- cp1++;
- if (*cp1 == '\0' || *cp1 == ';') {
- me->anchor->no_cache = TRUE;
- break;
- }
- cp0 = cp1;
- }
- if (me->anchor->no_cache == TRUE)
- break;
- cp0 = me->value;
- while ((cp1 = strstr(cp0, "max-age")) != NULL) {
- cp1 += 7;
- while (*cp1 != '\0' && WHITE(*cp1))
- cp1++;
- if (*cp1 == '=') {
- cp1++;
- while (*cp1 != '\0' && WHITE(*cp1))
- cp1++;
- if (isdigit((unsigned char)*cp1)) {
- cp0 = cp1;
- while (isdigit((unsigned char)*cp1))
- cp1++;
- if (*cp0 == '0' && cp1 == (cp0 + 1)) {
- me->anchor->no_cache = TRUE;
- break;
- }
- }
- }
- cp0 = cp1;
- }
- }
- break;
- case miCOOKIE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Cookie: '%s'\n",
- me->value);
- break;
- case miCONNECTION:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Connection: '%s'\n",
- me->value);
- break;
- case miCONTENT_BASE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Content-Base: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Indicate in anchor. - FM
- */
- StrAllocCopy(me->anchor->content_base, me->value);
- break;
- case miCONTENT_DISPOSITION:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Content-Disposition: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Indicate in anchor. - FM
- */
- StrAllocCopy(me->anchor->content_disposition, me->value);
- /*
- ** It's not clear yet from existing RFCs and IDs
- ** whether we should be looking for file;, attachment;,
- ** and/or inline; before the filename=value, so we'll
- ** just search for "filename" followed by '=' and just
- ** hope we get the intended value. It is purely a
- ** suggested name, anyway. - FM
- */
- cp = me->anchor->content_disposition;
- while (*cp != '\0' && strncasecomp(cp, "filename", 8))
- cp++;
- if (*cp == '\0')
- break;
- cp += 8;
- while ((*cp != '\0') && (WHITE(*cp) || *cp == '='))
- cp++;
- if (*cp == '\0')
- break;
- while (*cp != '\0' && WHITE(*cp))
- cp++;
- if (*cp == '\0')
- break;
- StrAllocCopy(me->anchor->SugFname, cp);
- if (*me->anchor->SugFname == '\"') {
- if ((cp = strchr((me->anchor->SugFname + 1),
- '\"')) != NULL) {
- *(cp + 1) = '\0';
- HTMIME_TrimDoubleQuotes(me->anchor->SugFname);
- } else {
- FREE(me->anchor->SugFname);
- break;
- }
- }
- cp = me->anchor->SugFname;
- while (*cp != '\0' && !WHITE(*cp))
- cp++;
- *cp = '\0';
- if (*me->anchor->SugFname == '\0')
- FREE(me->anchor->SugFname);
- break;
- case miCONTENT_ENCODING:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Content-Encoding: '%s'\n",
- me->value);
- if (!(me->value && *me->value) ||
- !strcasecomp(me->value, "identity"))
- break;
- /*
- ** Convert to lowercase and indicate in anchor. - FM
- */
- LYLowerCase(me->value);
- StrAllocCopy(me->anchor->content_encoding, me->value);
- FREE(me->compression_encoding);
- if (!strcmp(me->value, "8bit") ||
- !strcmp(me->value, "7bit") ||
- !strcmp(me->value, "binary")) {
- /*
- ** Some server indicated "8bit", "7bit" or "binary"
- ** inappropriately. We'll ignore it. - FM
- */
- CTRACE(tfp, " Ignoring it!\n");
- } else {
- /*
- ** Save it to use as a flag for setting
- ** up a "www/compressed" target. - FM
- */
- StrAllocCopy(me->compression_encoding, me->value);
- }
- break;
- case miCONTENT_FEATURES:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Content-Features: '%s'\n",
- me->value);
- break;
- case miCONTENT_LANGUAGE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Content-Language: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Convert to lowercase and indicate in anchor. - FM
- */
- LYLowerCase(me->value);
- StrAllocCopy(me->anchor->content_language, me->value);
- break;
- case miCONTENT_LENGTH:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Content-Length: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Convert to integer and indicate in anchor. - FM
- */
- me->anchor->content_length = atoi(me->value);
- if (me->anchor->content_length < 0)
- me->anchor->content_length = 0;
- CTRACE(tfp, " Converted to integer: '%d'\n",
- me->anchor->content_length);
- break;
- case miCONTENT_LOCATION:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Content-Location: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Indicate in anchor. - FM
- */
- StrAllocCopy(me->anchor->content_location, me->value);
- break;
- case miCONTENT_MD5:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Content-MD5: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Indicate in anchor. - FM
- */
- StrAllocCopy(me->anchor->content_md5, me->value);
- break;
- case miCONTENT_RANGE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Content-Range: '%s'\n",
- me->value);
- break;
- case miCONTENT_TRANSFER_ENCODING:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Content-Transfer-Encoding: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Force the Content-Transfer-Encoding value
- ** to all lower case. - FM
- */
- LYLowerCase(me->value);
- me->encoding = HTAtom_for(me->value);
- break;
- case miCONTENT_TYPE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Content-Type: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Force the Content-Type value to all lower case
- ** and strip spaces and double-quotes. - FM
- */
- for (i = 0, j = 0; me->value[i]; i++) {
- if (me->value[i] != ' ' && me->value[i] != '\"') {
- me->value[j++] = TOLOWER(me->value[i]);
- }
- }
- me->value[j] = '\0';
- me->format = HTAtom_for(me->value);
- break;
- case miDATE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Date: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Indicate in anchor. - FM
- */
- StrAllocCopy(me->anchor->date, me->value);
- break;
- case miETAG:
- /* Do not trim double quotes:
- * an entity tag consists of an opaque quoted string,
- * possibly prefixed by a weakness indicator.
- */
- CTRACE(tfp, "HTMIME: PICKED UP ETag: %s\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Indicate in anchor. - FM
- */
- StrAllocCopy(me->anchor->ETag, me->value);
- break;
- case miEXPIRES:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Expires: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Indicate in anchor. - FM
- */
- StrAllocCopy(me->anchor->expires, me->value);
- break;
- case miKEEP_ALIVE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Keep-Alive: '%s'\n",
- me->value);
- break;
- case miLAST_MODIFIED:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Last-Modified: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Indicate in anchor. - FM
- */
- StrAllocCopy(me->anchor->last_modified, me->value);
- break;
- case miLINK:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Link: '%s'\n",
- me->value);
- break;
- case miLOCATION:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Location: '%s'\n",
- me->value);
- break;
- case miPRAGMA:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Pragma: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Check whether to set no_cache for the anchor. - FM
- */
- if (!strcmp(me->value, "no-cache"))
- me->anchor->no_cache = TRUE;
- break;
- case miPROXY_AUTHENTICATE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Proxy-Authenticate: '%s'\n",
- me->value);
- break;
- case miPUBLIC:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Public: '%s'\n",
- me->value);
- break;
- case miRETRY_AFTER:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Retry-After: '%s'\n",
- me->value);
- break;
- case miSAFE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Safe: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Indicate in anchor if "YES" or "TRUE". - FM
- */
- if (!strcasecomp(me->value, "YES") ||
- !strcasecomp(me->value, "TRUE")) {
- me->anchor->safe = TRUE;
- }
- break;
- case miSERVER:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Server: '%s'\n",
- me->value);
- if (!(me->value && *me->value))
- break;
- /*
- ** Indicate in anchor. - FM
- */
- StrAllocCopy(me->anchor->server, me->value);
- break;
- case miSET_COOKIE1:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Set-Cookie: '%s'\n",
- me->value);
- if (me->set_cookie == NULL) {
- StrAllocCopy(me->set_cookie, me->value);
- } else {
- StrAllocCat(me->set_cookie, ", ");
- StrAllocCat(me->set_cookie, me->value);
- }
- break;
- case miSET_COOKIE2:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Set-Cookie2: '%s'\n",
- me->value);
- if (me->set_cookie2 == NULL) {
- StrAllocCopy(me->set_cookie2, me->value);
- } else {
- StrAllocCat(me->set_cookie2, ", ");
- StrAllocCat(me->set_cookie2, me->value);
- }
- break;
- case miTITLE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Title: '%s'\n",
- me->value);
- break;
- case miTRANSFER_ENCODING:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Transfer-Encoding: '%s'\n",
- me->value);
- break;
- case miUPGRADE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Upgrade: '%s'\n",
- me->value);
- break;
- case miURI:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP URI: '%s'\n",
- me->value);
- break;
- case miVARY:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Vary: '%s'\n",
- me->value);
- break;
- case miVIA:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Via: '%s'\n",
- me->value);
- break;
- case miWARNING:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP Warning: '%s'\n",
- me->value);
- break;
- case miWWW_AUTHENTICATE:
- HTMIME_TrimDoubleQuotes(me->value);
- CTRACE(tfp, "HTMIME: PICKED UP WWW-Authenticate: '%s'\n",
- me->value);
- break;
- default: /* Should never get here */
- break;
- }
- } else {
+ GET_VALUE:
+ if (c != '\n') { /* Not end of line */
if (me->value_pointer < me->value + VALUE_SIZE - 1) {
*me->value_pointer++ = c;
break;
@@ -1644,12 +1715,12 @@ PRIVATE void HTMIME_put_character ARGS2(
goto value_too_long;
}
}
- /* Fall through */
+ /* Fall through (if end of line) */
case miJUNK_LINE:
if (c == '\n') {
- me->state = miNEWLINE;
me->fold_state = me->state;
+ me->state = miNEWLINE;
}
break;
@@ -1659,9 +1730,9 @@ PRIVATE void HTMIME_put_character ARGS2(
return;
value_too_long:
- CTRACE(tfp, "HTMIME: *** Syntax error. (string too long)\n");
+ CTRACE((tfp, "HTMIME: *** Syntax error. (string too long)\n"));
-bad_field_name: /* Ignore it */
+bad_field_name: /* Ignore it */
me->state = miJUNK_LINE;
return;
@@ -1684,7 +1755,7 @@ PRIVATE void HTMIME_put_string ARGS2(
(*me->targetClass.put_string)(me->target,s);
} else if (me->state != MIME_IGNORE) {
- CTRACE(tfp, "HTMIME: %s\n", s);
+ CTRACE((tfp, "HTMIME: %s\n", s));
for (p=s; *p; p++)
HTMIME_put_character(me, *p);
@@ -1706,7 +1777,7 @@ PRIVATE void HTMIME_write ARGS3(
(*me->targetClass.put_block)(me->target, s, l);
} else {
- CTRACE(tfp, "HTMIME: %.*s\n", l, s);
+ CTRACE((tfp, "HTMIME: %.*s\n", l, s));
for (p = s; p < s+l; p++)
HTMIME_put_character(me, *p);
@@ -1721,9 +1792,13 @@ PRIVATE void HTMIME_write ARGS3(
PRIVATE void HTMIME_free ARGS1(
HTStream *, me)
{
- if (me->target)
- (*me->targetClass._free)(me->target);
- FREE(me);
+ if (me) {
+ FREE(me->location);
+ FREE(me->compression_encoding);
+ if (me->target)
+ (*me->targetClass._free)(me->target);
+ FREE(me);
+ }
}
/* End writing
@@ -1732,9 +1807,13 @@ PRIVATE void HTMIME_abort ARGS2(
HTStream *, me,
HTError, e)
{
- if (me->target)
- (*me->targetClass._abort)(me->target, e);
- FREE(me);
+ if (me) {
+ FREE(me->location);
+ FREE(me->compression_encoding);
+ if (me->target)
+ (*me->targetClass._abort)(me->target, e);
+ FREE(me);
+ }
}
@@ -1762,7 +1841,7 @@ PUBLIC HTStream* HTMIMEConvert ARGS3(
{
HTStream* me;
- me = (HTStream *)calloc(1, sizeof(*me));
+ me = typecalloc(HTStream);
if (me == NULL)
outofmem(__FILE__, "HTMIMEConvert");
me->isa = &HTMIME;
@@ -1837,6 +1916,21 @@ PUBLIC HTStream* HTNetMIME ARGS3(
return me;
}
+PUBLIC HTStream* HTMIMERedirect ARGS3(
+ HTPresentation *, pres,
+ HTParentAnchor *, anchor,
+ HTStream *, sink)
+{
+ HTStream* me = HTMIMEConvert(pres,anchor, sink);
+ if (!me)
+ return NULL;
+
+ me->pickup_redirection = YES;
+ if (me->targetRep == WWW_DEBUG && sink)
+ me->no_streamstack = YES;
+ return me;
+}
+
/* Japanese header handling functions
** ==================================
**
@@ -1873,8 +1967,10 @@ PUBLIC HTStream* HTNetMIME ARGS3(
**
** Written by S. Ichikawa,
** partially inspired by encdec.c of <jh@efd.lth.se>.
+** Assume caller's buffer is LINE_LENGTH bytes, these decode to
+** no longer than the input strings.
*/
-#define BUFLEN 1024
+#define LINE_LENGTH 512 /* Maximum length of line of ARTICLE etc */
#ifdef ESC
#undef ESC
#endif /* ESC */
@@ -1887,11 +1983,11 @@ PRIVATE char HTmmquote[] = "0123456789ABCDEF";
PRIVATE int HTmmcont = 0;
PUBLIC void HTmmdec_base64 ARGS2(
- char *, t,
- char *, s)
+ char *, t,
+ char *, s)
{
int d, count, j, val;
- char buf[BUFLEN], *bp, nw[4], *p;
+ char buf[LINE_LENGTH], *bp, nw[4], *p;
for (bp = buf; *s; s += 4) {
val = 0;
@@ -1911,7 +2007,7 @@ PUBLIC void HTmmdec_base64 ARGS2(
val += d;
}
for (j = 2; j >= 0; j--) {
- nw[j] = val & 255;
+ nw[j] = (char) (val & 255);
val >>= 8;
}
if (count--)
@@ -1926,23 +2022,23 @@ PUBLIC void HTmmdec_base64 ARGS2(
}
PUBLIC void HTmmdec_quote ARGS2(
- char *, t,
- char *, s)
+ char *, t,
+ char *, s)
{
- char buf[BUFLEN], cval, *bp, *p;
+ char buf[LINE_LENGTH], cval, *bp, *p;
for (bp = buf; *s; ) {
if (*s == '=') {
cval = 0;
if (s[1] && (p = strchr(HTmmquote, s[1]))) {
- cval += (p - HTmmquote);
+ cval += (char) (p - HTmmquote);
} else {
*bp++ = *s++;
continue;
}
if (s[2] && (p = strchr(HTmmquote, s[2]))) {
cval <<= 4;
- cval += (p - HTmmquote);
+ cval += (char) (p - HTmmquote);
*bp++ = cval;
s += 3;
} else {
@@ -1959,110 +2055,14 @@ PUBLIC void HTmmdec_quote ARGS2(
strcpy(t, buf);
}
-#ifdef NOTDEFINED
-/*
-** Generalized HTmmdecode for chartrans - K. Weide 1997-03-06
-*/
-PUBLIC void HTmmdecode ARGS2(
- char *, trg,
- char *, str)
-{
- char buf[BUFLEN], mmbuf[BUFLEN];
- char *s, *t, *u, *qm2;
- int base64, quote;
-
- buf[0] = '\0';
-
- /*
- ** Encoded-words look like
- ** =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
- */
- for (s = str, u = buf; *s; ) {
- base64 = quote = 0;
- if (*s == '=' && s[1] == '?' &&
- (s == str || *(s-1) == '(' || WHITE(*(s-1))))
- { /* must be beginning of word */
- qm2 = strchr(s+2, '?'); /* 2nd question mark */
- if (qm2 &&
- (qm2[1] == 'B' || qm2[1] == 'b' || qm2[1] == 'Q' ||
- qm2[1] == 'q') &&
- qm2[2] == '?') { /* 3rd question mark */
- char * qm4 = strchr(qm2 + 3, '?'); /* 4th question mark */
- if (qm4 && qm4 - s < 74 && /* RFC 2047 length restriction */
- qm4[1] == '=') {
- char *p;
- BOOL invalid = NO;
- for (p = s+2; p < qm4; p++)
- if (WHITE(*p)) {
- invalid = YES;
- break;
- }
- if (!invalid) {
- int LYhndl;
-
- *qm2 = '\0';
- invalid = ((LYhndl = UCGetLYhndl_byMIME(s+2)) < 0 ||
- UCCanTranslateFromTo(LYhndl,
- current_char_set));
- *qm2 = '?';
- }
- if (!invalid) {
- if (qm2[1] == 'B' || qm2[1] == 'b')
- base64 = 1;
- else if (qm2[1] == 'Q' || qm2[1] == 'q')
- quote = 1;
- }
- }
- }
- }
- if (base64 || quote) {
- if (HTmmcont) {
- for (t = s - 1;
- t >= str && (*t == ' ' || *t == '\t'); t--) {
- u--;
- }
- }
- for (s = qm2 + 3, t = mmbuf; *s; ) {
- if (s[0] == '?' && s[1] == '=') {
- break;
- } else {
- *t++ = *s++;
- }
- }
- if (s[0] != '?' || s[1] != '=') {
- goto end;
- } else {
- s += 2;
- *t = '\0';
- }
- if (base64)
- HTmmdec_base64(mmbuf, mmbuf);
- if (quote)
- HTmmdec_quote(mmbuf, mmbuf);
- for (t = mmbuf; *t; )
- *u++ = *t++;
- HTmmcont = 1;
- /* if (*s == ' ' || *s == '\t') *u++ = *s; */
- /* for ( ; *s == ' ' || *s == '\t'; s++) ; */
- } else {
- if (*s != ' ' && *s != '\t')
- HTmmcont = 0;
- *u++ = *s++;
- }
- }
- *u = '\0';
-end:
- strcpy(trg, buf);
-}
-#else
/*
** HTmmdecode for ISO-2022-JP - FM
*/
PUBLIC void HTmmdecode ARGS2(
- char *, trg,
- char *, str)
+ char *, trg,
+ char *, str)
{
- char buf[BUFLEN], mmbuf[BUFLEN];
+ char buf[LINE_LENGTH], mmbuf[LINE_LENGTH];
char *s, *t, *u;
int base64, quote;
@@ -2118,17 +2118,16 @@ PUBLIC void HTmmdecode ARGS2(
end:
strcpy(trg, buf);
}
-#endif /* NOTDEFINED */
/*
** Insert ESC where it seems lost.
** (The author of this function "rjis" is S. Ichikawa.)
*/
PUBLIC int HTrjis ARGS2(
- char *, t,
- char *, s)
+ char *, t,
+ char *, s)
{
- char *p, buf[BUFLEN];
+ char *p, buf[LINE_LENGTH];
int kanji = 0;
if (strchr(s, ESC) || !strchr(s, '$')) {
@@ -2173,7 +2172,7 @@ PUBLIC int HTrjis ARGS2(
*/
/*
* RJIS ( Recover JIS code from broken file )
- * $Header: /home/cvs/src/gnu/usr.bin/lynx/WWW/Library/Implementation/Attic/HTMIME.c,v 1.2 2000/03/25 18:16:47 maja Exp $
+ * $Header: /home/cvs/src/gnu/usr.bin/lynx/WWW/Library/Implementation/Attic/HTMIME.c,v 1.3 2003/05/01 18:59:36 avsm Exp $
* Copyright (C) 1992 1994
* Hironobu Takahashi (takahasi@tiny.or.jp)
*
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMIME.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMIME.h
index 25c28660ec6..818f38f2d29 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMIME.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMIME.h
@@ -52,6 +52,14 @@ extern HTStream * HTMIMEConvert PARAMS((HTPresentation * pres,
extern HTStream * HTNetMIME PARAMS((HTPresentation * pres,
HTParentAnchor * anchor,
HTStream * sink));
+/*
+
+ INPUT: Redirection message, parse headers only for Location if present
+
+ */
+extern HTStream * HTMIMERedirect PARAMS((HTPresentation * pres,
+ HTParentAnchor * anchor,
+ HTStream * sink));
/*
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLDTD.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLDTD.c
index b5b6706e99a..09d3902333d 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLDTD.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLDTD.c
@@ -8,6 +8,7 @@
#include <HTUtils.h>
#include <HTMLDTD.h>
#include <LYLeaks.h>
+#include <LYJustify.h>
/*
* Character entities like &nbsp now excluded from our DTD tables,
@@ -86,7 +87,7 @@ static CONST char* entities[] = {
"frac12", /* fraction 1/2 */
"frac14", /* fraction 1/4 */
"frac34", /* fraction 3/4 */
- "gt", /* greater than */
+ "gt", /* greater than */
"hibar", /* spacing macron */
"iacute", /* small i, acute accent */
"icirc", /* small i, circumflex accent */
@@ -95,7 +96,7 @@ static CONST char* entities[] = {
"iquest", /* inverted question mark */
"iuml", /* small i, dieresis or umlaut mark */
"laquo", /* angle quotation mark, left */
- "lt", /* less than */
+ "lt", /* less than */
"macr", /* spacing macron */
"mdash", /* dash the width of emsp */
"micro", /* micro sign */
@@ -145,7 +146,7 @@ static CONST char* entities[] = {
** Lists must be in alphabetical order by attribute name
** The tag elements contain the number of attributes
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
# define N HTMLA_NORMAL
# define i HTMLA_ANAME
# define h HTMLA_HREF
@@ -156,7 +157,7 @@ static CONST char* entities[] = {
# define T(t) /*nothing*/
#endif
-static attr a_attr[] = { /* Anchor attributes */
+static attr a_attr[] = { /* Anchor attributes */
{ "ACCESSKEY" T(N) },
{ "CHARSET" T(N) },
{ "CLASS" T(c) },
@@ -185,7 +186,7 @@ static attr a_attr[] = { /* Anchor attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr address_attr[] = { /* ADDRESS attributes */
+static attr address_attr[] = { /* ADDRESS attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
@@ -197,7 +198,7 @@ static attr address_attr[] = { /* ADDRESS attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr applet_attr[] = { /* APPLET attributes */
+static attr applet_attr[] = { /* APPLET attributes */
{ "ALIGN" T(N) },
{ "ALT" T(N) },
{ "CLASS" T(c) },
@@ -218,7 +219,7 @@ static attr applet_attr[] = { /* APPLET attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr area_attr[] = { /* AREA attributes */
+static attr area_attr[] = { /* AREA attributes */
{ "ALT" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
@@ -240,14 +241,14 @@ static attr area_attr[] = { /* AREA attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr base_attr[] = { /* BASE attributes */
+static attr base_attr[] = { /* BASE attributes */
{ "HREF" T(h) },
{ "TARGET" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
-static attr bgsound_attr[] = { /* BGSOUND attributes */
+static attr bgsound_attr[] = { /* BGSOUND attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
@@ -260,7 +261,7 @@ static attr bgsound_attr[] = { /* BGSOUND attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr body_attr[] = { /* BODY attributes */
+static attr body_attr[] = { /* BODY attributes */
{ "ALINK" T(N) },
{ "BACKGROUND" T(h) },
{ "BGCOLOR" T(N) },
@@ -273,13 +274,13 @@ static attr body_attr[] = { /* BODY attributes */
{ "ONLOAD" T(N) },
{ "ONUNLOAD" T(N) },
{ "STYLE" T(N) },
- { "TITLE" T(N) },
{ "TEXT" T(N) },
+ { "TITLE" T(N) },
{ "VLINK" T(N) },
{ 0 T(N) } /* Terminate list */
};
-static attr bodytext_attr[] = { /* BODYTEXT attributes */
+static attr bodytext_attr[] = { /* BODYTEXT attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DATA" T(N) },
@@ -297,7 +298,7 @@ static attr bodytext_attr[] = { /* BODYTEXT attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr bq_attr[] = { /* BQ (BLOCKQUOTE) attributes */
+static attr bq_attr[] = { /* BQ (BLOCKQUOTE) attributes */
{ "CITE" T(h) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
@@ -310,7 +311,7 @@ static attr bq_attr[] = { /* BQ (BLOCKQUOTE) attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr button_attr[] = { /* BUTTON attributes */
+static attr button_attr[] = { /* BUTTON attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
@@ -318,8 +319,8 @@ static attr button_attr[] = { /* BUTTON attributes */
{ "ID" T(i) },
{ "LANG" T(N) },
{ "NAME" T(N) },
- { "ONFOCUS" T(N) },
{ "ONBLUR" T(N) },
+ { "ONFOCUS" T(N) },
{ "STYLE" T(N) },
{ "TABINDEX" T(N) },
{ "TITLE" T(N) },
@@ -328,7 +329,7 @@ static attr button_attr[] = { /* BUTTON attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr caption_attr[] = { /* CAPTION attributes */
+static attr caption_attr[] = { /* CAPTION attributes */
{ "ACCESSKEY" T(N) },
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
@@ -358,7 +359,7 @@ static attr col_attr[] = { /* COL and COLGROUP attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr credit_attr[] = { /* CREDIT attributes */
+static attr credit_attr[] = { /* CREDIT attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
@@ -369,7 +370,7 @@ static attr credit_attr[] = { /* CREDIT attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr div_attr[] = { /* DIV attributes */
+static attr div_attr[] = { /* DIV attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
@@ -381,7 +382,7 @@ static attr div_attr[] = { /* DIV attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr embed_attr[] = { /* EMBED attributes */
+static attr embed_attr[] = { /* EMBED attributes */
{ "ALIGN" T(N) }, /* (including, for now, those from FIG and IMG) */
{ "ALT" T(N) },
{ "BORDER" T(N) },
@@ -406,7 +407,7 @@ static attr embed_attr[] = { /* EMBED attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr fig_attr[] = { /* FIG attributes */
+static attr fig_attr[] = { /* FIG attributes */
{ "ALIGN" T(N) },
{ "BORDER" T(N) },
{ "CLASS" T(c) },
@@ -427,7 +428,7 @@ static attr fig_attr[] = { /* FIG attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr fieldset_attr[] = { /* FIELDSET attributes */
+static attr fieldset_attr[] = { /* FIELDSET attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
@@ -438,7 +439,7 @@ static attr fieldset_attr[] = { /* FIELDSET attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr fn_attr[] = { /* FN attributes */
+static attr fn_attr[] = { /* FN attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
@@ -449,7 +450,7 @@ static attr fn_attr[] = { /* FN attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr font_attr[] = { /* FONT attributes */
+static attr font_attr[] = { /* FONT attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COLOR" T(N) },
@@ -463,7 +464,7 @@ static attr font_attr[] = { /* FONT attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr form_attr[] = { /* FORM attributes */
+static attr form_attr[] = { /* FORM attributes */
{ "ACCEPT-CHARSET" T(N) }, /* HTML 4.0 draft - kw */
{ "ACTION" T(h) },
{ "CLASS" T(c) },
@@ -482,7 +483,7 @@ static attr form_attr[] = { /* FORM attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr frame_attr[] = { /* FRAME attributes */
+static attr frame_attr[] = { /* FRAME attributes */
{ "ID" T(i) },
{ "LONGDESC" T(h) },
{ "MARGINHEIGHT" T(N) },
@@ -494,13 +495,13 @@ static attr frame_attr[] = { /* FRAME attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr frameset_attr[] = { /* FRAMESET attributes */
+static attr frameset_attr[] = { /* FRAMESET attributes */
{ "COLS" T(N) },
{ "ROWS" T(N) },
{ 0 T(N) } /* Terminate list */
};
-static attr gen_attr[] = { /* Minimum HTML 3.0 */
+static attr gen_attr[] = { /* Minimum HTML 3.0 */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
@@ -511,7 +512,7 @@ static attr gen_attr[] = { /* Minimum HTML 3.0 */
{ 0 T(N) } /* Terminate list */
};
-static attr glossary_attr[] = { /* DL (and DLC) attributes */
+static attr glossary_attr[] = { /* DL (and DLC) attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COMPACT" T(N) },
@@ -523,7 +524,7 @@ static attr glossary_attr[] = { /* DL (and DLC) attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr h_attr[] = { /* H1 - H6 attributes */
+static attr h_attr[] = { /* H1 - H6 attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
@@ -541,7 +542,7 @@ static attr h_attr[] = { /* H1 - H6 attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr hr_attr[] = { /* HR attributes */
+static attr hr_attr[] = { /* HR attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
@@ -557,7 +558,7 @@ static attr hr_attr[] = { /* HR attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr iframe_attr[] = { /* IFRAME attributes */
+static attr iframe_attr[] = { /* IFRAME attributes */
{ "ALIGN" T(N) },
{ "FRAMEBORDER" T(N) },
{ "HEIGHT" T(N) },
@@ -573,7 +574,7 @@ static attr iframe_attr[] = { /* IFRAME attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr img_attr[] = { /* IMG attributes */
+static attr img_attr[] = { /* IMG attributes */
{ "ALIGN" T(N) },
{ "ALT" T(N) },
{ "BORDER" T(N) },
@@ -581,11 +582,11 @@ static attr img_attr[] = { /* IMG attributes */
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "HEIGHT" T(N) },
- { "LONGDESC" T(h) },
{ "ID" T(i) },
{ "ISMAP" T(N) },
{ "ISOBJECT" T(N) },
{ "LANG" T(N) },
+ { "LONGDESC" T(h) },
{ "MD" T(N) },
{ "SRC" T(h) },
{ "STYLE" T(N) },
@@ -596,7 +597,7 @@ static attr img_attr[] = { /* IMG attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr input_attr[] = { /* INPUT attributes */
+static attr input_attr[] = { /* INPUT attributes */
{ "ACCEPT" T(N) },
{ "ACCEPT-CHARSET" T(N) }, /* RFC 2070 HTML i18n - kw */
{ "ALIGN" T(N) },
@@ -629,10 +630,10 @@ static attr input_attr[] = { /* INPUT attributes */
{ "TYPE" T(N) },
{ "VALUE" T(N) },
{ "WIDTH" T(N) },
- { 0 T(N) } /* Terminate list */
+ { 0 T(N) } /* Terminate list */
};
-static attr isindex_attr[] = { /* ISINDEX attributes */
+static attr isindex_attr[] = { /* ISINDEX attributes */
{ "ACTION" T(h) }, /* Not in spec. Lynx treats it as HREF. - FM */
{ "DIR" T(N) },
{ "HREF" T(h) }, /* HTML 3.0 attribute for search action. - FM */
@@ -643,7 +644,7 @@ static attr isindex_attr[] = { /* ISINDEX attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr keygen_attr[] = { /* KEYGEN attributes */
+static attr keygen_attr[] = { /* KEYGEN attributes */
{ "CHALLENGE" T(N) },
{ "CLASS" T(c) },
{ "DIR" T(N) },
@@ -655,7 +656,7 @@ static attr keygen_attr[] = { /* KEYGEN attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr label_attr[] = { /* LABEL attributes */
+static attr label_attr[] = { /* LABEL attributes */
{ "ACCESSKEY" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
@@ -669,7 +670,7 @@ static attr label_attr[] = { /* LABEL attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr legend_attr[] = { /* LEGEND attributes */
+static attr legend_attr[] = { /* LEGEND attributes */
{ "ACCESSKEY" T(N) },
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
@@ -682,8 +683,8 @@ static attr legend_attr[] = { /* LEGEND attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr link_attr[] = { /* LINK attributes */
- { "CHARSET" T(N) }, /* RFC 2070 HTML i18n -- hint for UA -- - kw */
+static attr link_attr[] = { /* LINK attributes */
+ { "CHARSET" T(N) }, /* RFC 2070 HTML i18n -- hint for UA -- - kw */
{ "CLASS" T(c) },
{ "HREF" T(h) },
{ "ID" T(i) },
@@ -697,7 +698,7 @@ static attr link_attr[] = { /* LINK attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr list_attr[] = { /* LI attributes */
+static attr list_attr[] = { /* LI attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DINGBAT" T(N) },
@@ -714,19 +715,19 @@ static attr list_attr[] = { /* LI attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr map_attr[] = { /* MAP attributes */
+static attr map_attr[] = { /* MAP attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
{ "ID" T(i) },
{ "LANG" T(N) },
- { "NAME" T(N) },
+ { "NAME" T(i) },
{ "STYLE" T(N) },
{ "TITLE" T(N) },
{ 0 T(N) } /* Terminate list */
};
-static attr math_attr[] = { /* MATH attributes */
+static attr math_attr[] = { /* MATH attributes */
{ "BOX" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
@@ -738,19 +739,19 @@ static attr math_attr[] = { /* MATH attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr meta_attr[] = { /* META attributes */
+static attr meta_attr[] = { /* META attributes */
{ "CONTENT" T(N) },
{ "HTTP-EQUIV" T(N) },
{ "NAME" T(N) },
{ 0 T(N) } /* Terminate list */
};
-static attr nextid_attr[] = { /* NEXTID attributes */
+static attr nextid_attr[] = { /* NEXTID attributes */
{ "N" T(N) },
{ 0 T(N) } /* Terminate list */
};
-static attr note_attr[] = { /* NOTE attributes */
+static attr note_attr[] = { /* NOTE attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
@@ -764,7 +765,7 @@ static attr note_attr[] = { /* NOTE attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr object_attr[] = { /* OBJECT attributes */
+static attr object_attr[] = { /* OBJECT attributes */
{ "ALIGN" T(N) },
{ "BORDER" T(N) },
{ "CLASS" T(c) },
@@ -790,10 +791,10 @@ static attr object_attr[] = { /* OBJECT attributes */
{ "USEMAP" T(h) },
{ "VSPACE" T(N) },
{ "WIDTH" T(N) },
- { 0 T(N) } /* Terminate list */
+ { 0 T(N) } /* Terminate list */
};
-static attr olist_attr[] = { /* OL attributes */
+static attr olist_attr[] = { /* OL attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COMPACT" T(N) },
@@ -809,7 +810,7 @@ static attr olist_attr[] = { /* OL attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr option_attr[] = { /* OPTION attributes */
+static attr option_attr[] = { /* OPTION attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
@@ -825,7 +826,7 @@ static attr option_attr[] = { /* OPTION attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr overlay_attr[] = { /* OVERLAY attributes */
+static attr overlay_attr[] = { /* OVERLAY attributes */
{ "CLASS" T(c) },
{ "HEIGHT" T(N) },
{ "ID" T(i) },
@@ -841,7 +842,7 @@ static attr overlay_attr[] = { /* OVERLAY attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr p_attr[] = { /* P attributes */
+static attr p_attr[] = { /* P attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
@@ -854,7 +855,7 @@ static attr p_attr[] = { /* P attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr param_attr[] = { /* PARAM attributes */
+static attr param_attr[] = { /* PARAM attributes */
{ "ACCEPT" T(N) },
{ "ACCEPT-CHARSET" T(N) },
{ "ACCEPT-ENCODING" T(N) },
@@ -876,7 +877,7 @@ static attr param_attr[] = { /* PARAM attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr script_attr[] = { /* SCRIPT attributes */
+static attr script_attr[] = { /* SCRIPT attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "DIR" T(N) },
@@ -894,7 +895,7 @@ static attr script_attr[] = { /* SCRIPT attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr select_attr[] = { /* SELECT attributes */
+static attr select_attr[] = { /* SELECT attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
@@ -920,7 +921,7 @@ static attr select_attr[] = { /* SELECT attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr style_attr[] = { /* STYLE attributes */
+static attr style_attr[] = { /* STYLE attributes */
{ "DIR" T(N) },
{ "LANG" T(N) },
{ "NOTATION" T(N) },
@@ -928,7 +929,7 @@ static attr style_attr[] = { /* STYLE attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr tab_attr[] = { /* TAB attributes */
+static attr tab_attr[] = { /* TAB attributes */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
@@ -943,7 +944,7 @@ static attr tab_attr[] = { /* TAB attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr table_attr[] = { /* TABLE attributes */
+static attr table_attr[] = { /* TABLE attributes */
{ "ALIGN" T(N) },
{ "BACKGROUND" T(h) },
{ "BORDER" T(N) },
@@ -969,7 +970,7 @@ static attr table_attr[] = { /* TABLE attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr td_attr[] = { /* TD and TH attributes */
+static attr td_attr[] = { /* TD and TH attributes */
{ "ALIGN" T(N) },
{ "AXES" T(N) },
{ "AXIS" T(N) },
@@ -993,7 +994,7 @@ static attr td_attr[] = { /* TD and TH attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr textarea_attr[] = { /* TEXTAREA attributes */
+static attr textarea_attr[] = { /* TEXTAREA attributes */
{ "ACCEPT-CHARSET" T(N) }, /* RFC 2070 HTML i18n - kw */
{ "ALIGN" T(N) },
{ "CLASS" T(c) },
@@ -1034,7 +1035,7 @@ static attr tr_attr[] = { /* TR, THEAD, TFOOT, and TBODY attributes */
{ 0 T(N) } /* Terminate list */
};
-static attr ulist_attr[] = { /* UL attributes */
+static attr ulist_attr[] = { /* UL attributes */
{ "CLASS" T(c) },
{ "CLEAR" T(N) },
{ "COMPACT" T(N) },
@@ -1076,7 +1077,7 @@ static attr ulist_attr[] = { /* UL attributes */
BASEFONT, APPLET, OBJECT, EMBED, SCRIPT, MAP, MARQUEE, HR, ISINDEX, BGSOUND, TAB,?IMG,
1 e? 2 2 l 1 e 2 l 8 4 4 E 1? E 1 E ! E ?1 E
IMAGE, BR, plus NOEMBED, SERVER, SPACER, AUDIOSCOPE, and SIDEBAR; ?area
- 1 n 1 E n n n n n 8 E
+ 1 n 1 E n n n n n 8 E
%text;
@@ -1116,7 +1117,7 @@ static attr ulist_attr[] = { /* UL attributes */
/* 1 2 3 4 5 6 7 8 */
/*345678901234567890123456789012345678901234567890123456789012345678901234567890 */
-/* self contain icont'n contn'd icont'd canclos omit */
+/* self contain icont'n contn'd icont'd canclos flags*/
/* { "A" , a_attr, HTML_A_ATTRIBUTES, SGML_MIXED }, */
#define T_A 0x0008, 0x0B007,0x0FF17,0x37787,0x77BA7,0x8604F,0x00014
/* { "ABBREV" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
@@ -1148,7 +1149,7 @@ static attr ulist_attr[] = { /* UL attributes */
/* { "BIG" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_BIG 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00014
/* { "BLINK" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
-#define T_BLINK 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00001,0x00014
+#define T_BLINK 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00001,0x00014
/* { "BLOCKQUOTE", bq_attr, HTML_BQ_ATTRIBUTES, SGML_MIXED }, */
#define T_BLOCKQUOTE 0x0200, 0xAFBCF,0xAFFFF,0xB6680,0xB6FAF,0x8031F,0x00000
/* { "BODY" , body_attr, HTML_BODY_ATTRIBUTES, SGML_MIXED }, */
@@ -1159,7 +1160,7 @@ static attr ulist_attr[] = { /* UL attributes */
#define T_BQ 0x0200, 0xAFBCF,0xAFFFF,0xB6680,0xB6FAF,0x8031F,0x00000
/* { "BR" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY }, */
#define T_BR 0x1000, 0x00000,0x00000,0x377BF,0x77FBF,0x8101F,0x00001
-#define T_BUTTON 0x0200, 0x0BB0B,0x0FF3B,0x0378F,0x37FAF,0x8035F,0x00000
+#define T_BUTTON 0x2000, 0x0BB07,0x0FF37,0x0378F,0x37FBF,0x8135F,0x00000
/* { "CAPTION" , caption_attr, HTML_CAPTION_ATTRIBUTES, SGML_MIXED }, */
#define T_CAPTION 0x0100, 0x0B04F,0x8FFFF,0x06A00,0xB6FA7,0x8035F,0x00000
/* { "CENTER" , div_attr, HTML_DIV_ATTRIBUTES, SGML_MIXED }, */
@@ -1179,7 +1180,7 @@ static attr ulist_attr[] = { /* UL attributes */
/* { "DD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY }, */
#define T_DD 0x0400, 0x0FBCF,0x8FFFF,0x00800,0xB6FFF,0x8071F,0x00001
/* { "DEL" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
-#define T_DEL 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00003,0x00000
+#define T_DEL 0x0002, 0x8BBCF,0x8FFFF,0xA7F8F,0xF7FBF,0x00003,0x00000
/* { "DFN" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_DFN 0x0002, 0x8B0CF,0x8FFFF,0x8778F,0xF7FBF,0x00003,0x00000
/* { "DIR" , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED }, */
@@ -1195,9 +1196,9 @@ static attr ulist_attr[] = { /* UL attributes */
/* { "EM" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_EM 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00003,0x00010
/* { "EMBED" , embed_attr, HTML_EMBED_ATTRIBUTES, SGML_EMPTY }, */
-#define T_EMBED 0x2000, 0x8F107,0x8FFF7,0xB6FBF,0xB7FBF,0x1FF7F,0x00001
+#define T_EMBED 0x2000, 0x8F107,0x8FFF7,0xB6FBF,0xB7FBF,0x1FF7F,0x00001
/* { "FIELDSET", fieldset_attr,HTML_FIELDSET_ATTRIBUTES, SGML_MIXED }, */
-#define T_FIELDSET 0x0200, 0x0FB42,0x0FF5F,0x07787,0x37FF7,0x8805F,0x00000
+#define T_FIELDSET 0x0200, 0x8FB4F,0x8FF7F,0x86787,0xB7FF7,0x8805F,0x00000
/* { "FIG" , fig_attr, HTML_FIG_ATTRIBUTES, SGML_MIXED }, */
#define T_FIG 0x0200, 0x0FB00,0x8FFFF,0x36680,0xB6FBF,0x8834F,0x00000
/* { "FN" , fn_attr, HTML_FN_ATTRIBUTES, SGML_MIXED }, */
@@ -1205,25 +1206,25 @@ static attr ulist_attr[] = { /* UL attributes */
/* { "FONT" , font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY }, */
#define T_FONT 0x0001, 0x8B04F,0x8FFFF,0xB778F,0xF7FBF,0x00001,0x00014
/* { "FORM" , form_attr, HTML_FORM_ATTRIBUTES, SGML_EMPTY }, */
-#define T_FORM 0x0080, 0x0FF6F,0x0FF7F,0x36E07,0x33F07,0x88DFF,0x00000
+#define T_FORM 0x0080, 0x0FF6F,0x0FF7F,0x36E07,0x32F07,0x88DFF,0x00000
/* { "FRAME" , frame_attr, HTML_FRAME_ATTRIBUTES, SGML_EMPTY }, */
-#define T_FRAME 0x10000,0x00000,0x00000,0x10000,0x10000,0x9FFFF,0x00001
+#define T_FRAME 0x10000,0x00000,0x00000,0x10000,0x10000,0x9FFFF,0x00001
/* { "FRAMESET", frameset_attr,HTML_FRAMESET_ATTRIBUTES, SGML_MIXED }, */
#define T_FRAMESET 0x10000,0x90000,0x90000,0x90000,0x93000,0x9FFFF,0x00000
/* { "H1" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
-#define T_H1 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80317,0x00000
+#define T_H1 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "H2" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
-#define T_H2 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80317,0x00000
+#define T_H2 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "H3" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
-#define T_H3 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80317,0x00000
+#define T_H3 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "H4" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
-#define T_H4 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80317,0x00000
+#define T_H4 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "H5" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
-#define T_H5 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80317,0x00000
+#define T_H5 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "H6" , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED }, */
-#define T_H6 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80317,0x00000
+#define T_H6 0x0100, 0x0B04F,0x0B05F,0x36680,0x37FAF,0x80117,0x00000
/* { "HEAD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
-#define T_HEAD 0x40000,0x4F000,0x47000,0x10000,0x10000,0x9FF7F,0x00006
+#define T_HEAD 0x40000,0x4F000,0x47000,0x10000,0x10000,0x9FF7F,0x00007
/* { "HR" , hr_attr, HTML_HR_ATTRIBUTES, SGML_EMPTY }, */
#define T_HR 0x4000, 0x00000,0x00000,0x3FE80,0x3FFBF,0x87F37,0x00001
/* { "HTML" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
@@ -1235,9 +1236,9 @@ static attr ulist_attr[] = { /* UL attributes */
/* { "IMG" , img_attr, HTML_IMG_ATTRIBUTES, SGML_EMPTY }, */
#define T_IMG 0x1000, 0x00000,0x00000,0x3779F,0x37FBF,0x80000,0x00001
/* { "INPUT" , input_attr, HTML_INPUT_ATTRIBUTES, SGML_EMPTY }, */
-#define T_INPUT 0x0040, 0x00000,0x00000,0x03F87,0x37F87,0x8904F,0x00001
+#define T_INPUT 0x0040, 0x00000,0x00000,0x03F87,0x37F87,0x8904F,0x00001
/* { "INS" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
-#define T_INS 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00003,0x00000
+#define T_INS 0x0002, 0x8BBCF,0x8FFFF,0xA7F8F,0xF7FBF,0x00003,0x00000
/* { "ISINDEX" , isindex_attr, HTML_ISINDEX_ATTRIBUTES,SGML_EMPTY }, */
#define T_ISINDEX 0x8000, 0x00000,0x00000,0x7778F,0x7FFAF,0x80007,0x00001
/* { "KBD" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
@@ -1245,8 +1246,8 @@ static attr ulist_attr[] = { /* UL attributes */
/* { "KEYGEN" , keygen_attr, HTML_KEYGEN_ATTRIBUTES, SGML_EMPTY }, */
#define T_KEYGEN 0x0040, 0x00000,0x00000,0x07FB7,0x37FB7,0x80070,0x00001
/* { "LABEL" , label_attr, HTML_LABEL_ATTRIBUTES, SGML_MIXED }, */
-#define T_LABEL 0x0020, 0x9FFFF,0x9FFFF,0x9FFFF,0x9FFFF,0x00007,0x00000
-#define T_LEGEND 0x0002, 0x0B04F,0x0FF7F,0x00200,0x37FA7,0x00003,0x00000
+#define T_LABEL 0x0002, 0x0304F,0x0FFFF,0x0679F,0x36FBF,0x00007,0x00000
+#define T_LEGEND 0x0002, 0x0B04F,0x8FF7F,0x00200,0xB7FA7,0x00003,0x00000
/* { "LH" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY }, */
#define T_LH 0x0400, 0x0BB7F,0x8FFFF,0x00800,0x97FFF,0x8071F,0x00001
/* { "LI" , list_attr, HTML_LI_ATTRIBUTES, SGML_EMPTY }, */
@@ -1272,7 +1273,8 @@ static attr ulist_attr[] = { /* UL attributes */
/* { "NOTE" , note_attr, HTML_NOTE_ATTRIBUTES, SGML_MIXED }, */
#define T_NOTE 0x0200, 0x0BBAF,0x8FFFF,0x376B0,0xB7FFF,0x8031F,0x00000
/* { "OBJECT" , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_LITTERAL }, */
-#define T_OBJECT 0x2000, 0x8FBCF,0x8FFFF,0xB679F,0xB6FBF,0x83F5F,0x00000
+#define T_OBJECT 0x2000, 0x8FBCF,0x8FFFF,0xB679F,0xB6FBF,0x83F5F,0x00020
+#define T_OBJECT_PCDATA 0x2000, 0x8FBCF,0x8FFFF,0xB679F,0xB6FBF,0x83F5F,0x00008
/* { "OL" , olist_attr, HTML_OL_ATTRIBUTES, SGML_MIXED }, */
#define T_OL 0x0800, 0x0C400,0x8FFFF,0x37680,0xB7FB7,0x88F7F,0x00000
/* { "OPTION" , option_attr, HTML_OPTION_ATTRIBUTES, SGML_EMPTY }, */
@@ -1282,7 +1284,7 @@ static attr ulist_attr[] = { /* UL attributes */
/* { "P" , p_attr, HTML_P_ATTRIBUTES, SGML_EMPTY }, */
#define T_P 0x0100, 0x0B04F,0x8FFFF,0x36680,0xB6FA7,0x80117,0x00001
/* { "PARAM" , param_attr, HTML_PARAM_ATTRIBUTES, SGML_EMPTY }, */
-#define T_PARAM 0x1000, 0x00000,0x00000,0x33500,0x37FFF,0x81560,0x00001
+#define T_PARAM 0x1000, 0x00000,0x00000,0x33500,0x37FFF,0x81560,0x00001
/* { "PLAINTEXT", gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL }, */
#define T_PLAINTEXT 0x10000,0xFFFFF,0xFFFFF,0x90000,0x90000,0x3FFFF,0x00001
/* { "PRE" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
@@ -1296,10 +1298,10 @@ static attr ulist_attr[] = { /* UL attributes */
/* { "SCRIPT" , script_attr, HTML_SCRIPT_ATTRIBUTES, SGML_LITTERAL }, */
#define T_SCRIPT 0x2000, 0x00000,0x00000,0x77F9F,0x77FFF,0x87F5F,0x00000
/* { "SELECT" , select_attr, HTML_SELECT_ATTRIBUTES, SGML_MIXED }, */
-#define T_SELECT 0x0040, 0x08000,0x08000,0x03FAF,0x13FBF,0x80F5F,0x00008
+#define T_SELECT 0x0040, 0x08000,0x08000,0x03FAF,0x33FBF,0x80F5F,0x00008
#define T_SHY 0x1000, 0x00000,0x00000,0x3779F,0x77FBF,0x8101F,0x00001
/* { "SMALL" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
-#define T_SMALL 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00014
+#define T_SMALL 0x0001, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x00001,0x00014
/* { "SPAN" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_SPAN 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FBF,0x80003,0x00000
/* { "SPOT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY }, */
@@ -1309,7 +1311,7 @@ static attr ulist_attr[] = { /* UL attributes */
/* { "STRONG" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_STRONG 0x0002, 0x8B04F,0x8FFFF,0xA778F,0xF7FAF,0x00003,0x00010
/* { "STYLE" , style_attr, HTML_STYLE_ATTRIBUTES, SGML_LITTERAL }, */
-#define T_STYLE 0x40000,0x00000,0x00000,0x7638F,0x76FAF,0x8001F,0x00000
+#define T_STYLE 0x40000,0x00000,0x00000,0x7638F,0x76FAF,0x8001F,0x00000
/* { "SUB" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
#define T_SUB 0x0004, 0x8B05F,0x8FFFF,0x8779F,0xF7FBF,0x00007,0x00000
/* { "SUP" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
@@ -1317,23 +1319,23 @@ static attr ulist_attr[] = { /* UL attributes */
/* { "TAB" , tab_attr, HTML_TAB_ATTRIBUTES, SGML_EMPTY }, */
#define T_TAB 0x1000, 0x00000,0x00000,0x3778F,0x57FAF,0x00001,0x00001
/* { "TABLE" , table_attr, HTML_TABLE_ATTRIBUTES, SGML_MIXED }, */
-#define T_TABLE 0x0800, 0x0F1E0,0x8FFFF,0x36680,0xB6FA7,0x8C57F,0x00000
+#define T_TABLE 0x0800, 0x0F1E0,0x8FFFF,0x36680,0xB6FA7,0x8C57F,0x00000
/* { "TBODY" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY }, */
-#define T_TBODY 0x0020, 0x00020,0x8FFFF,0x00880,0xB7FB7,0x8C75F,0x00003
+#define T_TBODY 0x0020, 0x00020,0x8FFFF,0x00880,0xB7FB7,0x8C75F,0x00003
/* { "TD" , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY }, */
#define T_TD 0x0400, 0x0FBCF,0x8FFFF,0x00020,0xB7FB7,0x8C75F,0x00001
/* { "TEXTAREA", textarea_attr,HTML_TEXTAREA_ATTRIBUTES, SGML_LITTERAL }, */
-#define T_TEXTAREA 0x0040, 0x00000,0x00000,0x07F8F,0x33FBF,0x80F5F,0x00000
+#define T_TEXTAREA 0x0040, 0x00000,0x00000,0x07F8F,0x33FBF,0x80F5F,0x00040
/* { "TEXTFLOW", bodytext_attr,HTML_BODYTEXT_ATTRIBUTES, SGML_MIXED }, */
#define T_TEXTFLOW 0x20000,0x8FBFF,0x9FFFF,0x977B0,0xB7FB7,0x9B00F,0x00003
/* { "TFOOT" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY }, */
-#define T_TFOOT 0x0020, 0x00020,0x8FFFF,0x00800,0xB7FB7,0x8CF5F,0x00001
+#define T_TFOOT 0x0020, 0x00020,0x8FFFF,0x00800,0xB7FB7,0x8CF5F,0x00001
/* { "TH" , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY }, */
#define T_TH 0x0400, 0x0FBCF,0x0FFFF,0x00020,0xB7FB7,0x8CF5F,0x00001
/* { "THEAD" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY }, */
-#define T_THEAD 0x0020, 0x00020,0x8FFFF,0x00800,0xB7FB7,0x8CF5F,0x00001
+#define T_THEAD 0x0020, 0x00020,0x8FFFF,0x00800,0xB7FB7,0x8CF5F,0x00001
/* { "TITLE", gen_attr, HTML_GEN_ATTRIBUTES, SGML_RCDATA }, */
-#define T_TITLE 0x40000,0x00000,0x00000,0x50000,0x50000,0x0031F,0x00004
+#define T_TITLE 0x40000,0x00000,0x00000,0x50000,0x50000,0x0031F,0x0000C
/* { "TR" , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY }, */
#define T_TR 0x0020, 0x00400,0x8FFFF,0x00820,0xB7FB7,0x8C75F,0x00001
/* { "TT" , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED }, */
@@ -1356,22 +1358,35 @@ static attr ulist_attr[] = { /* UL attributes */
** Must match definitions in HTMLDTD.html!
** Must be in alphabetical order.
**
-** The T_* extra info is listed here, but it won't matter (is not used
-** in SGML.c if Old_DTD is not set). This mainly simplifies comparison
-** of the tags_old[] table (otherwise unchanged from original Lynx treatment)
-** with the tags_new[] table below. - kw
+** The T_* extra info is listed here, even though most fields are not used
+** in SGML.c if Old_DTD is set (with the exception of some Tgf_* flags).
+** This simplifies comparison of the tags_old[] table (otherwise unchanged
+** from original Lynx treatment) with the tags_new[] table below. - kw
**
-** Name, Attributes, No. of attributes, content, extra info...
+** Name*, Attributes, No. of attributes, content, extra info...
*/
+#undef P
+#undef P
+#undef P_
#ifdef USE_COLOR_STYLE
-#define P(x) x , (sizeof x) -1
-#define NULL_HTTag NULL, 0
+#define P_(x) x , (sizeof x) -1
+#define NULL_HTTag_ NULL, 0
+#else
+#define P_(x) x
+#define NULL_HTTag_ NULL
+#endif
+
+#ifdef EXP_JUSTIFY_ELTS
+#define P(x) P_(x), 1
+#define P0(x) P_(x), 0
+#define NULL_HTTag NULL_HTTag_,0
#else
-#define P(x) x
-#define NULL_HTTag NULL
+#define P(x) P_(x)
+#define P0(x) P_(x)
+#define NULL_HTTag NULL_HTTag_
#endif
-static CONST HTTag tags_old[HTML_ELEMENTS] = {
+static CONST HTTag tags_old[HTML_ALL_ELEMENTS] = {
{ P("A") , a_attr, HTML_A_ATTRIBUTES, SGML_EMPTY,T_A},
{ P("ABBREV") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_ABBREV},
{ P("ACRONYM") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_ACRONYM},
@@ -1381,7 +1396,7 @@ static CONST HTTag tags_old[HTML_ELEMENTS] = {
{ P("AU") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_AU},
{ P("AUTHOR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_AUTHOR},
{ P("B") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_B},
- { P("BANNER") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BANNER},
+ { P0("BANNER") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BANNER},
{ P("BASE") , base_attr, HTML_BASE_ATTRIBUTES, SGML_EMPTY,T_BASE},
{ P("BASEFONT"), font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY,T_BASEFONT},
{ P("BDO") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BDO},
@@ -1419,12 +1434,12 @@ static CONST HTTag tags_old[HTML_ELEMENTS] = {
{ P("FORM") , form_attr, HTML_FORM_ATTRIBUTES, SGML_EMPTY,T_FORM},
{ P("FRAME") , frame_attr, HTML_FRAME_ATTRIBUTES, SGML_EMPTY,T_FRAME},
{ P("FRAMESET"), frameset_attr,HTML_FRAMESET_ATTRIBUTES, SGML_MIXED,T_FRAMESET},
- { P("H1") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H1},
- { P("H2") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H2},
- { P("H3") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H3},
- { P("H4") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H4},
- { P("H5") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H5},
- { P("H6") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H6},
+ { P0("H1") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H1},
+ { P0("H2") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H2},
+ { P0("H3") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H3},
+ { P0("H4") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H4},
+ { P0("H5") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H5},
+ { P0("H6") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H6},
{ P("HEAD") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_HEAD},
{ P("HR") , hr_attr, HTML_HR_ATTRIBUTES, SGML_EMPTY,T_HR},
{ P("HTML") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_HTML},
@@ -1458,7 +1473,7 @@ static CONST HTTag tags_old[HTML_ELEMENTS] = {
{ P("P") , p_attr, HTML_P_ATTRIBUTES, SGML_EMPTY,T_P},
{ P("PARAM") , param_attr, HTML_PARAM_ATTRIBUTES, SGML_EMPTY,T_PARAM},
{ P("PLAINTEXT"), gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_PLAINTEXT},
- { P("PRE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_PRE},
+ { P0("PRE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_PRE},
{ P("Q") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_Q},
{ P("S") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_S},
{ P("SAMP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SAMP},
@@ -1482,17 +1497,21 @@ static CONST HTTag tags_old[HTML_ELEMENTS] = {
{ P("TFOOT") , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY,T_TFOOT},
{ P("TH") , td_attr, HTML_TD_ATTRIBUTES, SGML_EMPTY,T_TH},
{ P("THEAD") , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY,T_THEAD},
- { P("TITLE"), gen_attr, HTML_GEN_ATTRIBUTES, SGML_RCDATA,T_TITLE},
+ { P("TITLE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_RCDATA,T_TITLE},
{ P("TR") , tr_attr, HTML_TR_ATTRIBUTES, SGML_EMPTY,T_TR},
{ P("TT") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_TT},
{ P("U") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_U},
{ P("UL") , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED,T_UL},
{ P("VAR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_VAR},
{ P("WBR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_WBR},
- { P("XMP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_XMP},
+ { P0("XMP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_XMP},
+ /* additional (alternative variants), not counted in HTML_ELEMENTS: */
+/* This one will be used as a temporary substitute within the parser when
+ it has been signalled to parse OBJECT content as MIXED. - kw */
+ { P("OBJECT") , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_MIXED,T_OBJECT_PCDATA},
};
-static CONST HTTag tags_new[HTML_ELEMENTS] = {
+static CONST HTTag tags_new[HTML_ALL_ELEMENTS] = {
{ P("A") , a_attr, HTML_A_ATTRIBUTES, SGML_MIXED,T_A},
{ P("ABBREV") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_ABBREV},
{ P("ACRONYM") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_ACRONYM},
@@ -1502,7 +1521,7 @@ static CONST HTTag tags_new[HTML_ELEMENTS] = {
{ P("AU") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_AU},
{ P("AUTHOR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_AUTHOR},
{ P("B") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_B},
- { P("BANNER") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BANNER},
+ { P0("BANNER") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BANNER},
{ P("BASE") , base_attr, HTML_BASE_ATTRIBUTES, SGML_EMPTY,T_BASE},
{ P("BASEFONT"), font_attr, HTML_FONT_ATTRIBUTES, SGML_EMPTY,T_BASEFONT},
{ P("BDO") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_BDO},
@@ -1540,12 +1559,12 @@ static CONST HTTag tags_new[HTML_ELEMENTS] = {
{ P("FORM") , form_attr, HTML_FORM_ATTRIBUTES, SGML_MIXED,T_FORM},
{ P("FRAME") , frame_attr, HTML_FRAME_ATTRIBUTES, SGML_EMPTY,T_FRAME},
{ P("FRAMESET"), frameset_attr,HTML_FRAMESET_ATTRIBUTES, SGML_ELEMENT,T_FRAMESET},
- { P("H1") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H1},
- { P("H2") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H2},
- { P("H3") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H3},
- { P("H4") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H4},
- { P("H5") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H5},
- { P("H6") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H6},
+ { P0("H1") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H1},
+ { P0("H2") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H2},
+ { P0("H3") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H3},
+ { P0("H4") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H4},
+ { P0("H5") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H5},
+ { P0("H6") , h_attr, HTML_H_ATTRIBUTES, SGML_MIXED,T_H6},
{ P("HEAD") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_ELEMENT,T_HEAD},
{ P("HR") , hr_attr, HTML_HR_ATTRIBUTES, SGML_EMPTY,T_HR},
{ P("HTML") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_HTML},
@@ -1566,7 +1585,7 @@ static CONST HTTag tags_new[HTML_ELEMENTS] = {
{ P("LISTING") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_LISTING},
{ P("MAP") , map_attr, HTML_MAP_ATTRIBUTES, SGML_ELEMENT,T_MAP},
{ P("MARQUEE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_MARQUEE},
- { P("MATH") , math_attr, HTML_MATH_ATTRIBUTES, SGML_LITTERAL,T_MATH},
+ { P("MATH") , math_attr, HTML_MATH_ATTRIBUTES, SGML_PCDATA,T_MATH},
{ P("MENU") , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED,T_MENU},
{ P("META") , meta_attr, HTML_META_ATTRIBUTES, SGML_EMPTY,T_META},
{ P("NEXTID") , nextid_attr, 1, SGML_EMPTY,T_NEXTID},
@@ -1579,11 +1598,11 @@ static CONST HTTag tags_new[HTML_ELEMENTS] = {
{ P("P") , p_attr, HTML_P_ATTRIBUTES, SGML_MIXED,T_P},
{ P("PARAM") , param_attr, HTML_PARAM_ATTRIBUTES, SGML_EMPTY,T_PARAM},
{ P("PLAINTEXT"), gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_PLAINTEXT},
- { P("PRE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_PRE},
+ { P0("PRE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_PRE},
{ P("Q") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_Q},
{ P("S") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_S},
{ P("SAMP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SAMP},
- { P("SCRIPT") , script_attr, HTML_SCRIPT_ATTRIBUTES, SGML_LITTERAL,T_SCRIPT},
+ { P("SCRIPT") , script_attr, HTML_SCRIPT_ATTRIBUTES, SGML_SCRIPT,T_SCRIPT},
{ P("SELECT") , select_attr, HTML_SELECT_ATTRIBUTES, SGML_ELEMENT,T_SELECT},
{ P("SHY") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_SHY},
{ P("SMALL") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SMALL},
@@ -1591,14 +1610,14 @@ static CONST HTTag tags_new[HTML_ELEMENTS] = {
{ P("SPOT") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_SPOT},
{ P("STRIKE") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_STRIKE},
{ P("STRONG") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_STRONG},
- { P("STYLE") , style_attr, HTML_STYLE_ATTRIBUTES, SGML_LITTERAL,T_STYLE},
+ { P("STYLE") , style_attr, HTML_STYLE_ATTRIBUTES, SGML_CDATA,T_STYLE},
{ P("SUB") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SUB},
{ P("SUP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_SUP},
{ P("TAB") , tab_attr, HTML_TAB_ATTRIBUTES, SGML_EMPTY,T_TAB},
{ P("TABLE") , table_attr, HTML_TABLE_ATTRIBUTES, SGML_ELEMENT,T_TABLE},
{ P("TBODY") , tr_attr, HTML_TR_ATTRIBUTES, SGML_ELEMENT,T_TBODY},
{ P("TD") , td_attr, HTML_TD_ATTRIBUTES, SGML_MIXED,T_TD},
- { P("TEXTAREA"), textarea_attr,HTML_TEXTAREA_ATTRIBUTES, SGML_LITTERAL,T_TEXTAREA},
+ { P("TEXTAREA"), textarea_attr,HTML_TEXTAREA_ATTRIBUTES, SGML_PCDATA,T_TEXTAREA},
{ P("TEXTFLOW"), bodytext_attr,HTML_BODYTEXT_ATTRIBUTES, SGML_MIXED,T_TEXTFLOW},
{ P("TFOOT") , tr_attr, HTML_TR_ATTRIBUTES, SGML_ELEMENT,T_TFOOT},
{ P("TH") , td_attr, HTML_TD_ATTRIBUTES, SGML_MIXED,T_TH},
@@ -1610,20 +1629,27 @@ static CONST HTTag tags_new[HTML_ELEMENTS] = {
{ P("UL") , ulist_attr, HTML_UL_ATTRIBUTES, SGML_MIXED,T_UL},
{ P("VAR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_MIXED,T_VAR},
{ P("WBR") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_EMPTY,T_WBR},
- { P("XMP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_XMP},
+ { P0("XMP") , gen_attr, HTML_GEN_ATTRIBUTES, SGML_LITTERAL,T_XMP},
+ /* additional (alternative variants), not counted in HTML_ELEMENTS: */
+/* This one will be used as a temporary substitute within the parser when
+ it has been signalled to parse OBJECT content as MIXED. - kw */
+ { P("OBJECT") , object_attr, HTML_OBJECT_ATTRIBUTES, SGML_MIXED,T_OBJECT_PCDATA},
};
+
#undef P
+#undef P0
+#undef P_
/* Dummy space, will be filled with the contents of either tags_new
or tags_old on calling HTSwitchDTD - kw */
-static HTTag tags[HTML_ELEMENTS];
+static HTTag tags[HTML_ALL_ELEMENTS];
PUBLIC CONST SGML_dtd HTML_dtd = {
tags,
HTML_ELEMENTS,
entities, /* probably unused */
- sizeof(entities)/sizeof(entities[0]),
+ TABLESIZE(entities),
};
/* This function fills the "tags" part of the HTML_dtd structure with
@@ -1634,23 +1660,24 @@ PUBLIC CONST SGML_dtd HTML_dtd = {
is limited and I didn't want to list the whole tags_new table
twice... - kw */
PUBLIC void HTSwitchDTD ARGS1(
- BOOL, new)
+ int, new_flag)
{
if (TRACE)
- CTRACE(tfp,"HTMLDTD: Copying DTD element info of size %d, %d * %d\n",
- (int) (new ? sizeof(tags_new) : sizeof(tags_old)),
- HTML_ELEMENTS,
- (int) sizeof(HTTag));
- if (new)
- memcpy(tags, tags_new, HTML_ELEMENTS * sizeof(HTTag));
+ CTRACE((tfp,"HTMLDTD: Copying DTD element info of size %d, %d * %d\n",
+ (int) (new_flag ? sizeof(tags_new) : sizeof(tags_old)),
+ HTML_ALL_ELEMENTS,
+ (int) sizeof(HTTag)));
+ if (new_flag)
+ memcpy(tags, tags_new, HTML_ALL_ELEMENTS * sizeof(HTTag));
else
- memcpy(tags, tags_old, HTML_ELEMENTS * sizeof(HTTag));
+ memcpy(tags, tags_old, HTML_ALL_ELEMENTS * sizeof(HTTag));
}
PUBLIC HTTag HTTag_unrecognized =
{ NULL_HTTag, NULL, 0, SGML_EMPTY,T__UNREC_};
+
/*
** Utility Routine: Useful for people building HTML objects.
*/
@@ -1668,7 +1695,7 @@ struct _HTStructured {
};
PUBLIC void HTStartAnchor ARGS3(
- HTStructured *, obj,
+ HTStructured *, obj,
CONST char *, name,
CONST char *, href)
{
@@ -1691,8 +1718,39 @@ PUBLIC void HTStartAnchor ARGS3(
(*obj->isa->start_element)(obj, HTML_A, present, value, -1, 0);
}
+
+PUBLIC void HTStartAnchor5 ARGS5(
+ HTStructured *, obj,
+ CONST char *, name,
+ CONST char *, href,
+ CONST char *, linktype,
+ int, tag_charset)
+{
+ BOOL present[HTML_A_ATTRIBUTES];
+ CONST char * value[HTML_A_ATTRIBUTES];
+ int i;
+
+ for (i = 0; i < HTML_A_ATTRIBUTES; i++)
+ present[i] = NO;
+
+ if (name && *name) {
+ present[HTML_A_NAME] = YES;
+ value[HTML_A_NAME] = name;
+ }
+ if (href) {
+ present[HTML_A_HREF] = YES;
+ value[HTML_A_HREF] = href;
+ }
+ if (linktype) {
+ present[HTML_A_TYPE] = YES;
+ value[HTML_A_TYPE] = linktype;
+ }
+
+ (*obj->isa->start_element)(obj, HTML_A, present, value, tag_charset, 0);
+}
+
PUBLIC void HTStartIsIndex ARGS3(
- HTStructured *, obj,
+ HTStructured *, obj,
CONST char *, prompt,
CONST char *, href)
{
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLDTD.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLDTD.h
index 8b1cd4fb05d..79d1111fc2d 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLDTD.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLDTD.h
@@ -13,19 +13,20 @@
#define HTMLDTD_H
#include <SGML.h>
+#include <HTFont.h>
/*
-** Lynx internal character representations.
+** Valid name chars for tag parsing.
*/
-#ifndef HT_NON_BREAK_SPACE
-#define HT_NON_BREAK_SPACE ((char)1) /* For now */
-#endif /* !HT_NON_BREAK_SPACE */
-#ifndef HT_EN_SPACE
-#define HT_EN_SPACE ((char)2) /* For now */
-#endif /* !HT_EN_SPACE */
-#ifndef LY_SOFT_HYPHEN
-#define LY_SOFT_HYPHEN ((char)7)
-#endif /* !LY_SOFT_HYPHEN */
+#define IsNmStart(c) (isalpha(UCH(c)))
+#define IsNmChar(c) (isalnum(UCH(c)) || \
+ c == '_' || c=='-' || c == '.' || c==':')
+
+
+#define ReallyEmptyTagNum(e) ((HTML_dtd.tags[e].contents == SGML_EMPTY) && \
+ !(HTML_dtd.tags[e].flags & Tgf_nreie))
+#define ReallyEmptyTag(t) ((t->contents == SGML_EMPTY) && \
+ !(t->flags & Tgf_nreie))
/*
@@ -39,7 +40,7 @@ Element Numbers
These include tables in HTMLDTD.c and code in HTML.c.
*/
-typedef enum _HTMLElement {
+typedef enum {
HTML_A,
HTML_ABBREV,
HTML_ACRONYM,
@@ -157,10 +158,23 @@ typedef enum _HTMLElement {
HTML_UL,
HTML_VAR,
HTML_WBR,
- HTML_XMP } HTMLElement;
+ HTML_XMP,
+ HTML_ALT_OBJECT } HTMLElement;
+/* Notes: HTML.c uses a different extension of the HTML_ELEMENTS space
+ privately, see HTNestedList.h. */
+/* Don't replace HTML_ELEMENTS with TABLESIZE(mumble_dtd.tags). */
+/* Keep the following defines in synch with the above enum! */
+
+/* HTML_ELEMENTS: number of elements visible to Lynx code in general,
+ alphabetic (ASCII) order. */
#define HTML_ELEMENTS 118
+/* HTML_ALL_ELEMENTS: number of elements visible to SGML parser,
+ additional variant(s) at end. */
+#define HTML_ALL_ELEMENTS 119
+
+
/*
Attribute numbers
@@ -957,7 +971,7 @@ Attribute numbers
#define HTML_UL_WRAP 13
#define HTML_UL_ATTRIBUTES 14
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
/* values of HTML attributes' types */
#define HTMLA_NORMAL 0 /* nothing specific */
#define HTMLA_ANAME 1 /* anchor name - 'id' or a's 'name' */
@@ -968,10 +982,10 @@ Attribute numbers
#endif
extern CONST SGML_dtd HTML_dtd;
-extern void HTSwitchDTD PARAMS((
- BOOL new));
+extern void HTSwitchDTD PARAMS((int new_flag));
extern HTTag HTTag_unrecognized;
+extern HTTag HTTag_mixedObject;
/*
@@ -993,6 +1007,13 @@ extern void HTStartAnchor PARAMS((
CONST char * name,
CONST char * href));
+extern void HTStartAnchor5 PARAMS((
+ HTStructured * targetstream,
+ CONST char * name,
+ CONST char * href,
+ CONST char * linktype,
+ int tag_charset));
+
/*
Start IsIndex element - FM
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLGen.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLGen.c
index a5269eba7be..6047d074fa0 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLGen.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTMLGen.c
@@ -33,10 +33,9 @@
#include <LYStyle.h>
#endif
+#include <LYGlobalDefs.h>
#include <LYLeaks.h>
-extern BOOLEAN LYPreparsedSource; /* Show source as preparsed? */
-
#define PUTC(c) (*me->targetClass.put_character)(me->target, c)
/* #define PUTS(s) (*me->targetClass.put_string)(me->target, s) */
#define PUTB(s,l) (*me->targetClass.put_block)(me->target, s, l)
@@ -83,7 +82,7 @@ struct _HTStructured {
*/
PRIVATE void flush_breaks ARGS1(
- HTStructured *, me)
+ HTStructured *, me)
{
int i;
for (i=0; i<= MAX_CLEANNESS; i++) {
@@ -92,7 +91,7 @@ PRIVATE void flush_breaks ARGS1(
}
PRIVATE void HTMLGen_flush ARGS1(
- HTStructured *, me)
+ HTStructured *, me)
{
(*me->targetClass.put_block)(me->target,
me->buffer,
@@ -132,7 +131,7 @@ PRIVATE void HTMLGen_flush ARGS1(
* -preparsed flag. - kw
*/
PRIVATE void do_cstyle_flush ARGS1(
- HTStructured *, me)
+ HTStructured *, me)
{
if (!me->text && LYPreparsedSource) {
me->text = HTMainText;
@@ -177,10 +176,10 @@ PRIVATE void allow_break ARGS3(
** by hand, too, though this is not a primary design consideration. TBL
*/
PRIVATE void HTMLGen_put_character ARGS2(
- HTStructured *, me,
+ HTStructured *, me,
char, c)
{
- if (me->escape_specials && (unsigned char)c < 32) {
+ if (me->escape_specials && UCH(c) < 32) {
if (c == HT_NON_BREAK_SPACE || c == HT_EN_SPACE ||
c == LY_SOFT_HYPHEN) { /* recursion... */
HTMLGen_put_character(me, '&');
@@ -288,7 +287,7 @@ PRIVATE void HTMLGen_put_character ARGS2(
** ---------------
*/
PRIVATE void HTMLGen_put_string ARGS2(
- HTStructured *, me,
+ HTStructured *, me,
CONST char *, s)
{
CONST char * p;
@@ -298,7 +297,7 @@ PRIVATE void HTMLGen_put_string ARGS2(
}
PRIVATE void HTMLGen_write ARGS3(
- HTStructured *, me,
+ HTStructured *, me,
CONST char *, s,
int, l)
{
@@ -314,8 +313,8 @@ PRIVATE void HTMLGen_write ARGS3(
** Within the opening tag, there may be spaces
** and the line may be broken at these spaces.
*/
-PRIVATE void HTMLGen_start_element ARGS6(
- HTStructured *, me,
+PRIVATE int HTMLGen_start_element ARGS6(
+ HTStructured *, me,
int, element_number,
CONST BOOL*, present,
CONST char **, value,
@@ -338,26 +337,26 @@ PRIVATE void HTMLGen_start_element ARGS6(
strcpy (myHash, HTML_dtd.tags[element_number].name);
if (class_string[0])
{
+ int len = strlen(myHash);
+ sprintf (myHash + len, ".%.*s", (int) sizeof(myHash) - len - 2, class_string);
HTSprintf (&Style_className, ".%s", class_string);
- strcat (myHash, ".");
- strcat (myHash, class_string);
}
class_string[0] = '\0';
strtolower(myHash);
hcode = hash_code(myHash);
strtolower(Style_className);
- if (TRACE)
+ if (TRACE_STYLE)
{
fprintf(tfp, "CSSTRIM:%s -> %d", myHash, hcode);
if (hashStyles[hcode].code!=hcode)
{
- char *rp=strrchr(myHash, '.');
+ char *rp = strrchr(myHash, '.');
fprintf(tfp, " (undefined) %s\n", myHash);
if (rp)
{
int hcd;
- *rp='\0'; /* trim the class */
+ *rp = '\0'; /* trim the class */
hcd = hash_code(myHash);
fprintf(tfp, "CSS:%s -> %d", myHash, hcd);
if (hashStyles[hcd].code!=hcd)
@@ -372,8 +371,9 @@ PRIVATE void HTMLGen_start_element ARGS6(
if (displayStyles[element_number + STARTAT].color > -2) /* actually set */
{
- CTRACE(tfp, "CSSTRIM: start_element: top <%s>\n",
- HTML_dtd.tags[element_number].name);
+ CTRACE2(TRACE_STYLE,
+ (tfp, "CSSTRIM: start_element: top <%s>\n",
+ HTML_dtd.tags[element_number].name));
do_cstyle_flush(me);
HText_characterStyle(me->text, hcode, 1);
}
@@ -412,7 +412,8 @@ PRIVATE void HTMLGen_start_element ARGS6(
if (title && *title) {
HTSprintf0(&title_tmp, "link.%s.%s",
value[HTML_LINK_CLASS], title);
- CTRACE(tfp, "CSSTRIM:link=%s\n", title_tmp);
+ CTRACE2(TRACE_STYLE,
+ (tfp, "CSSTRIM:link=%s\n", title_tmp));
do_cstyle_flush(me);
HText_characterStyle(me->text, hash_code(title_tmp), 1);
@@ -486,23 +487,35 @@ PRIVATE void HTMLGen_start_element ARGS6(
* Same logic as in HTML_start_element, copied from there. - kw
*/
-/* end really empty tags straight away */
-#define REALLY_EMPTY(e) ((HTML_dtd.tags[e].contents == SGML_EMPTY) && \
- !(HTML_dtd.tags[e].flags & Tgf_nreie))
-
- if (LYPreparsedSource && REALLY_EMPTY(element_number))
+ /* end really empty tags straight away */
+ if (LYPreparsedSource && ReallyEmptyTagNum(element_number))
{
- CTRACE(tfp, "STYLE:begin_element:ending EMPTY element style\n");
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE:begin_element:ending EMPTY element style\n"));
do_cstyle_flush(me);
-#if !defined(USE_HASH)
- HText_characterStyle(me->text, element_number+STARTAT, STACK_OFF);
-#else
HText_characterStyle(me->text, hcode, STACK_OFF);
-#endif /* USE_HASH */
TrimColorClass(HTML_dtd.tags[element_number].name,
Style_className, &hcode);
}
#endif /* USE_COLOR_STYLE */
+ if (element_number == HTML_OBJECT && tag->contents == SGML_LITTERAL) {
+ /*
+ * These conditions only approximate the ones used in HTML.c.
+ * Let our SGML parser know that further content is to be parsed
+ * normally not literally. - kw
+ */
+ if (!present) {
+ return HT_PARSER_OTHER_CONTENT;
+ } else if (!present[HTML_OBJECT_DECLARE] &&
+ !(present[HTML_OBJECT_NAME] &&
+ value[HTML_OBJECT_NAME] && *value[HTML_OBJECT_NAME])) {
+ if (present[HTML_OBJECT_SHAPES] ||
+ !(present[HTML_OBJECT_USEMAP] &&
+ value[HTML_OBJECT_USEMAP] && *value[HTML_OBJECT_USEMAP]))
+ return HT_PARSER_OTHER_CONTENT;
+ }
+ }
+ return HT_OK;
}
/* End Element
@@ -516,8 +529,8 @@ PRIVATE void HTMLGen_start_element ARGS6(
** should be linked to the whole stack not just the top one.)
** TBL 921119
*/
-PRIVATE void HTMLGen_end_element ARGS3(
- HTStructured *, me,
+PRIVATE int HTMLGen_end_element ARGS3(
+ HTStructured *, me,
int, element_number,
char **, insert GCC_UNUSED)
{
@@ -544,17 +557,14 @@ PRIVATE void HTMLGen_end_element ARGS3(
TrimColorClass(HTML_dtd.tags[element_number].name,
Style_className, &hcode);
- if (LYPreparsedSource && !REALLY_EMPTY(element_number))
- {
- CTRACE(tfp, "STYLE:end_element: ending non-EMPTY style\n");
+ if (LYPreparsedSource && !ReallyEmptyTagNum(element_number)) {
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE:end_element: ending non-EMPTY style\n"));
do_cstyle_flush(me);
-#if !defined(USE_HASH)
- HText_characterStyle(me->text, element_number+STARTAT, STACK_OFF);
-#else
HText_characterStyle(me->text, hcode, STACK_OFF);
-#endif /* USE_HASH */
}
#endif /* USE_COLOR_STYLE */
+ return HT_OK;
}
/* Expanding entities
@@ -562,7 +572,7 @@ PRIVATE void HTMLGen_end_element ARGS3(
**
*/
PRIVATE int HTMLGen_put_entity ARGS2(
- HTStructured *, me,
+ HTStructured *, me,
int, entity_number)
{
int nent = HTML_dtd.number_of_entities;
@@ -580,7 +590,7 @@ PRIVATE int HTMLGen_put_entity ARGS2(
**
*/
PRIVATE void HTMLGen_free ARGS1(
- HTStructured *, me)
+ HTStructured *, me)
{
(*me->targetClass.put_character)(me->target, '\n');
HTMLGen_flush(me);
@@ -592,14 +602,14 @@ PRIVATE void HTMLGen_free ARGS1(
}
PRIVATE void PlainToHTML_free ARGS1(
- HTStructured *, me)
+ HTStructured *, me)
{
HTMLGen_end_element(me, HTML_PRE, 0);
HTMLGen_free(me);
}
PRIVATE void HTMLGen_abort ARGS2(
- HTStructured *, me,
+ HTStructured *, me,
HTError, e GCC_UNUSED)
{
HTMLGen_free(me);
@@ -609,7 +619,7 @@ PRIVATE void HTMLGen_abort ARGS2(
}
PRIVATE void PlainToHTML_abort ARGS2(
- HTStructured *, me,
+ HTStructured *, me,
HTError, e GCC_UNUSED)
{
PlainToHTML_free(me);
@@ -632,8 +642,6 @@ PRIVATE CONST HTStructuredClass HTMLGeneration = /* As opposed to print etc */
** -------------------------
*/
extern int LYcols; /* LYCurses.h, set in LYMain.c */
-extern BOOL dump_output_immediately; /* TRUE if no interactive user */
-extern int dump_output_width; /* -width instead of 80 */
PUBLIC HTStructured * HTMLGenerator ARGS1(
HTStream *, output)
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTNews.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTNews.c
index 99433f0740b..30068713170 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTNews.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTNews.c
@@ -16,11 +16,10 @@
#include <HTCJK.h>
#include <HTMIME.h>
+#include <HTFont.h>
#include <HTTCP.h>
#include <LYUtils.h>
-
-/* this define should be in HTFont.h :( */
-#define HT_NON_BREAK_SPACE ((char)1) /* For now */
+#include <LYStrings.h>
#define NEWS_PORT 119 /* See rfc977 */
#define SNEWS_PORT 563 /* See Lou Montulli */
@@ -36,18 +35,13 @@ PUBLIC int HTNewsMaxChunk = 40; /* Largest number of articles in one window */
#endif /* SERVER_FILE */
#ifdef USE_SSL
-#define free_func free__func
-#include <openssl/ssl.h>
-#undef free_func
extern SSL_CTX * ssl_ctx;
-extern SSL * HTGetSSLHandle NOPARAMS;
PRIVATE SSL * Handle = NULL;
PRIVATE int channel_s = 1;
#define NEWS_NETWRITE(sock, buff, size) \
(Handle ? SSL_write(Handle, buff, size) : NETWRITE(sock, buff, size))
#define NEWS_NETCLOSE(sock) \
{ (void)NETCLOSE(sock); if (Handle) SSL_free(Handle); Handle = NULL; }
-extern char HTGetSSLCharacter PARAMS((void *handle));
PRIVATE char HTNewsGetCharacter NOPARAMS;
#define NEXT_CHAR HTNewsGetCharacter()
#else
@@ -65,6 +59,7 @@ PRIVATE char HTNewsGetCharacter NOPARAMS;
#include <LYGlobalDefs.h>
#include <LYLeaks.h>
+#define SnipIn(d,fmt,len,s) sprintf(d, fmt, (int)sizeof(d)-len, s)
struct _HTStructured {
CONST HTStructuredClass * isa;
@@ -75,12 +70,11 @@ struct _HTStream
HTStreamClass * isa;
};
-#define LINE_LENGTH 512 /* Maximum length of line of ARTICLE etc */
+#define LINE_LENGTH 512 /* Maximum length of line of ARTICLE etc */
#define GROUP_NAME_LENGTH 256 /* Maximum length of group name */
extern BOOLEAN scan_for_buried_news_references;
extern BOOLEAN LYListNewsNumbers;
extern BOOLEAN LYListNewsDates;
-extern HTCJKlang HTCJK;
extern int interrupted_in_htgetcharacter;
extern BOOL keep_mime_headers; /* Include mime headers and force raw text */
extern BOOL using_proxy; /* Are we using an NNTP proxy? */
@@ -89,8 +83,8 @@ extern BOOL using_proxy; /* Are we using an NNTP proxy? */
** Module-wide variables.
*/
PUBLIC char * HTNewsHost = NULL; /* Default host */
-PRIVATE char * NewsHost = NULL; /* Current host */
-PRIVATE char * NewsHREF = NULL; /* Current HREF prefix */
+PRIVATE char * NewsHost = NULL; /* Current host */
+PRIVATE char * NewsHREF = NULL; /* Current HREF prefix */
PRIVATE int s; /* Socket for NewsHost */
PRIVATE int HTCanPost = FALSE; /* Current POST permission */
PRIVATE char response_text[LINE_LENGTH+1]; /* Last response */
@@ -211,10 +205,10 @@ PRIVATE BOOL initialize NOARGS
#else
if (getenv("NNTPSERVER")) {
StrAllocCopy(HTNewsHost, (char *)getenv("NNTPSERVER"));
- CTRACE(tfp, "HTNews: NNTPSERVER defined as `%s'\n",
- HTNewsHost);
+ CTRACE((tfp, "HTNews: NNTPSERVER defined as `%s'\n",
+ HTNewsHost));
} else {
- FILE* fp = fopen(SERVER_FILE, "r");
+ FILE* fp = fopen(SERVER_FILE, TXT_R);
if (fp) {
char server_name[MAXHOSTNAMELEN+1];
if (fgets(server_name, sizeof server_name, fp) != NULL) {
@@ -222,8 +216,8 @@ PRIVATE BOOL initialize NOARGS
if (p != NULL)
*p = '\0';
StrAllocCopy(HTNewsHost, server_name);
- CTRACE(tfp, "HTNews: File %s defines news host as `%s'\n",
- SERVER_FILE, HTNewsHost);
+ CTRACE((tfp, "HTNews: File %s defines news host as `%s'\n",
+ SERVER_FILE, HTNewsHost));
}
fclose(fp);
}
@@ -249,7 +243,7 @@ PRIVATE BOOL initialize NOARGS
** Negative status indicates transmission error, socket closed.
** Positive status is an NNTP status.
*/
-PRIVATE int response ARGS1(CONST char *,command)
+PRIVATE int response ARGS1(char *,command)
{
int result;
char * p = response_text;
@@ -258,7 +252,7 @@ PRIVATE int response ARGS1(CONST char *,command)
if (command) {
int status;
int length = strlen(command);
- CTRACE(tfp, "NNTP command to be sent: %s", command);
+ CTRACE((tfp, "NNTP command to be sent: %s", command));
#ifdef NOT_ASCII
{
CONST char * p;
@@ -273,7 +267,7 @@ PRIVATE int response ARGS1(CONST char *,command)
status = NEWS_NETWRITE(s, (char *)command, length);
#endif /* NOT_ASCII */
if (status < 0){
- CTRACE(tfp, "HTNews: Unable to send command. Disconnecting.\n");
+ CTRACE((tfp, "HTNews: Unable to send command. Disconnecting.\n"));
NEWS_NETCLOSE(s);
s = -1;
return status;
@@ -282,10 +276,10 @@ PRIVATE int response ARGS1(CONST char *,command)
for (;;) {
ich = NEXT_CHAR;
- if (((*p++ = ich) == LF) ||
+ if (((*p++ = (char) ich) == LF) ||
(p == &response_text[LINE_LENGTH])) {
*--p = '\0'; /* Terminate the string */
- CTRACE(tfp, "NNTP Response: %s\n", response_text);
+ CTRACE((tfp, "NNTP Response: %s\n", response_text));
sscanf(response_text, "%d", &result);
return result;
} /* if end of line */
@@ -293,11 +287,11 @@ PRIVATE int response ARGS1(CONST char *,command)
if (ich == EOF) {
*(p-1) = '\0';
if (interrupted_in_htgetcharacter) {
- CTRACE(tfp, "HTNews: Interrupted on read, closing socket %d\n",
- s);
+ CTRACE((tfp, "HTNews: Interrupted on read, closing socket %d\n",
+ s));
} else {
- CTRACE(tfp, "HTNews: EOF on read, closing socket %d\n",
- s);
+ CTRACE((tfp, "HTNews: EOF on read, closing socket %d\n",
+ s));
}
NEWS_NETCLOSE(s); /* End of file, close socket */
s = -1;
@@ -335,7 +329,7 @@ typedef enum {
** This function handles nntp authentication. - FM
*/
PRIVATE NNTPAuthResult HTHandleAuthInfo ARGS1(
- char *, host)
+ char *, host)
{
HTList *cur = NULL;
NNTPAuth *auth = NULL;
@@ -373,15 +367,12 @@ PRIVATE NNTPAuthResult HTHandleAuthInfo ARGS1(
/*
** Handle the username. - FM
*/
- buffer[511] = '\0';
+ buffer[sizeof(buffer)-1] = '\0';
tries = 3;
while (tries) {
if (UserName == NULL) {
- if ((msg = (char *)calloc(1, (strlen(host) + 30))) == NULL) {
- outofmem(__FILE__, "HTHandleAuthInfo");
- }
- sprintf(msg, gettext("Username for news host '%s':"), host);
+ HTSprintf0(&msg, gettext("Username for news host '%s':"), host);
UserName = HTPrompt(msg, NULL);
FREE(msg);
if (!(UserName && *UserName)) {
@@ -389,7 +380,8 @@ PRIVATE NNTPAuthResult HTHandleAuthInfo ARGS1(
return NNTPAUTH_ERROR;
}
}
- sprintf(buffer, "AUTHINFO USER %.*s%c%c", 495, UserName, CR, LF);
+ sprintf(buffer, "AUTHINFO USER %.*s%c%c",
+ (int) sizeof(buffer)-17, UserName, CR, LF);
if ((status = response(buffer)) < 0) {
if (status == HT_INTERRUPTED)
_HTProgress(CONNECTION_INTERRUPTED);
@@ -418,8 +410,7 @@ PRIVATE NNTPAuthResult HTHandleAuthInfo ARGS1(
/*
** Store the accepted username and no password. - FM
*/
- if ((auth =
- (NNTPAuth *)calloc(1, sizeof(NNTPAuth))) != NULL) {
+ if ((auth = typecalloc(NNTPAuth)) != NULL) {
StrAllocCopy(auth->host, host);
auth->user = UserName;
HTList_appendObject(NNTP_AuthInfo, auth);
@@ -462,10 +453,7 @@ PRIVATE NNTPAuthResult HTHandleAuthInfo ARGS1(
tries = 3;
while (tries) {
if (PassWord == NULL) {
- if ((msg = (char *)calloc(1, (strlen(host) + 30))) == NULL) {
- outofmem(__FILE__, "HTHandleAuthInfo");
- }
- sprintf(msg, gettext("Password for news host '%s':"), host);
+ HTSprintf0(&msg, gettext("Password for news host '%s':"), host);
PassWord = HTPromptPassword(msg);
FREE(msg);
if (!(PassWord && *PassWord)) {
@@ -473,7 +461,8 @@ PRIVATE NNTPAuthResult HTHandleAuthInfo ARGS1(
return NNTPAUTH_ERROR;
}
}
- sprintf(buffer, "AUTHINFO PASS %.*s%c%c", 495, PassWord, CR, LF);
+ sprintf(buffer, "AUTHINFO PASS %.*s%c%c",
+ (int) sizeof(buffer)-17, PassWord, CR, LF);
if ((status = response(buffer)) < 0) {
if (status == HT_INTERRUPTED) {
_HTProgress(CONNECTION_INTERRUPTED);
@@ -528,8 +517,7 @@ PRIVATE NNTPAuthResult HTHandleAuthInfo ARGS1(
auth->pass = PassWord;
}
} else {
- if ((auth =
- (NNTPAuth *)calloc(1, sizeof(NNTPAuth))) != NULL) {
+ if ((auth = typecalloc(NNTPAuth)) != NULL) {
StrAllocCopy(auth->host, host);
auth->user = UserName;
auth->pass = PassWord;
@@ -582,18 +570,19 @@ PRIVATE char * author_name ARGS1 (char *,email)
char *p, *e;
StrAllocCopy(name, email);
- CTRACE(tfp,"Trying to find name in: %s\n",name);
+ CTRACE((tfp,"Trying to find name in: %s\n",name));
- if ((p = strchr(name, '(')) && (e = strchr(name, ')'))) {
+ if ((p = strrchr(name, '(')) && (e = strrchr(name, ')'))) {
if (e > p) {
*e = '\0'; /* Chop off everything after the ')' */
return HTStrip(p+1); /* Remove leading and trailing spaces */
}
}
- if ((p = strchr(name, '<')) && (e = strchr(name, '>'))) {
- if (e > p) {
- strcpy(p, e+1); /* Remove <...> */
+ if ((p = strrchr(name, '<')) && (e = strrchr(name, '>'))) {
+ if (e++ > p) {
+ while ((*p++ = *e++) != 0) /* Remove <...> */
+ ;
return HTStrip(name); /* Remove leading and trailing spaces */
}
}
@@ -618,10 +607,10 @@ PRIVATE char * author_address ARGS1(char *,email)
char *p, *at, *e;
StrAllocCopy(address, email);
- CTRACE(tfp,"Trying to find address in: %s\n",address);
+ CTRACE((tfp,"Trying to find address in: %s\n",address));
- if ((p = strchr(address, '<'))) {
- if ((e = strchr(p, '>')) && (at = strchr(p, '@'))) {
+ if ((p = strrchr(address, '<'))) {
+ if ((e = strrchr(p, '>')) && (at = strrchr(p, '@'))) {
if (at < e) {
*e = '\0'; /* Remove > */
return HTStrip(p+1); /* Remove leading and trailing spaces */
@@ -629,20 +618,20 @@ PRIVATE char * author_address ARGS1(char *,email)
}
}
- if ((p = strchr(address, '(')) &&
- (e = strchr(address, ')')) && (at = strchr(address, '@'))) {
+ if ((p = strrchr(address, '(')) &&
+ (e = strrchr(address, ')')) && (at = strchr(address, '@'))) {
if (e > p && at < e) {
*p = '\0'; /* Chop off everything after the ')' */
return HTStrip(address); /* Remove leading and trailing spaces */
}
}
- if ((at = strchr(address, '@')) && at > address) {
+ if ((at = strrchr(address, '@')) && at > address) {
p = (at - 1);
e = (at + 1);
- while (p > address && !isspace((unsigned char)*p))
+ while (p > address && !isspace(UCH(*p)))
p--;
- while (*e && !isspace((unsigned char)*e))
+ while (*e && !isspace(UCH(*e)))
e++;
*e = 0;
return HTStrip(p);
@@ -652,10 +641,10 @@ PRIVATE char * author_address ARGS1(char *,email)
** Default to the first word.
*/
p = address;
- while (isspace((unsigned char)*p))
+ while (isspace(UCH(*p)))
p++; /* find first non-space */
e = p;
- while (!isspace((unsigned char)*e) && *e != '\0')
+ while (!isspace(UCH(*e)) && *e != '\0')
e++; /* find next space or end */
*e = '\0'; /* terminate space */
@@ -668,16 +657,13 @@ PRIVATE char * author_address ARGS1(char *,email)
PRIVATE void start_anchor ARGS1(CONST char *, href)
{
BOOL present[HTML_A_ATTRIBUTES];
- CONST char* value[HTML_A_ATTRIBUTES];
+ CONST char* value[HTML_A_ATTRIBUTES];
+ int i;
- {
- int i;
- for(i=0; i < HTML_A_ATTRIBUTES; i++)
- present[i] = (i == HTML_A_HREF);
- }
- ((CONST char **)value)[HTML_A_HREF] = href;
- (*targetClass.start_element)(target, HTML_A , present,
- (CONST char **)value, -1, 0);
+ for(i=0; i < HTML_A_ATTRIBUTES; i++)
+ present[i] = (BOOL) (i == HTML_A_HREF);
+ value[HTML_A_HREF] = href;
+ (*targetClass.start_element)(target, HTML_A, present, value, -1, 0);
}
/* Start link element
@@ -686,17 +672,14 @@ PRIVATE void start_anchor ARGS1(CONST char *, href)
PRIVATE void start_link ARGS2(CONST char *, href, CONST char *, rev)
{
BOOL present[HTML_LINK_ATTRIBUTES];
- CONST char* value[HTML_LINK_ATTRIBUTES];
+ CONST char* value[HTML_LINK_ATTRIBUTES];
+ int i;
- {
- int i;
- for(i=0; i < HTML_LINK_ATTRIBUTES; i++)
- present[i] = (i == HTML_LINK_HREF || i == HTML_LINK_REV);
- }
- ((CONST char **)value)[HTML_LINK_HREF] = href;
- ((CONST char **)value)[HTML_LINK_REV] = rev;
- (*targetClass.start_element)(target, HTML_LINK, present,
- (CONST char **)value, -1, 0);
+ for(i=0; i < HTML_LINK_ATTRIBUTES; i++)
+ present[i] = (BOOL) (i == HTML_LINK_HREF || i == HTML_LINK_REV);
+ value[HTML_LINK_HREF] = href;
+ value[HTML_LINK_REV] = rev;
+ (*targetClass.start_element)(target, HTML_LINK, present, value, -1, 0);
}
/* Start list element
@@ -705,17 +688,16 @@ PRIVATE void start_link ARGS2(CONST char *, href, CONST char *, rev)
PRIVATE void start_list ARGS1(int, seqnum)
{
BOOL present[HTML_OL_ATTRIBUTES];
- CONST char* value[HTML_OL_ATTRIBUTES];
+ CONST char* value[HTML_OL_ATTRIBUTES];
char SeqNum[20];
int i;
for (i = 0; i < HTML_OL_ATTRIBUTES; i++)
- present[i] = (i == HTML_OL_SEQNUM || i == HTML_OL_START);
+ present[i] = (BOOL) (i == HTML_OL_SEQNUM || i == HTML_OL_START);
sprintf(SeqNum, "%d", seqnum);
- ((CONST char **)value)[HTML_OL_SEQNUM] = SeqNum;
- ((CONST char **)value)[HTML_OL_START] = SeqNum;
- (*targetClass.start_element)(target, HTML_OL , present,
- (CONST char **)value, -1, 0);
+ value[HTML_OL_SEQNUM] = SeqNum;
+ value[HTML_OL_START] = SeqNum;
+ (*targetClass.start_element)(target, HTML_OL, present, value, -1, 0);
}
/* Paste in an Anchor
@@ -731,18 +713,26 @@ PRIVATE void start_list ARGS1(int, seqnum)
PRIVATE void write_anchor ARGS2(CONST char *,text, CONST char *,addr)
{
char href[LINE_LENGTH+1];
+ CONST char * p;
+ char *q;
- {
- CONST char * p;
- strcpy(href, NewsHREF);
- for (p = addr; *p && (*p != '>') && !WHITE(*p) && (*p!=','); p++)
- ;
- strncat(href, addr, p-addr); /* Make complete hypertext reference */
+ for (p = addr; *p && (*p != '>') && !WHITE(*p) && (*p!=','); p++)
+ ;
+ if (strlen(NewsHREF) + (p - addr) + 1 < sizeof(href)) {
+ q = href;
+ strcpy(q, NewsHREF);
+ strncat(q, addr, p-addr); /* Make complete hypertext reference */
+ } else {
+ q = NULL;
+ HTSprintf0(&q, "%s%.*s", NewsHREF, p-addr, addr);
}
- start_anchor(href);
+ start_anchor(q);
PUTS(text);
END(HTML_A);
+
+ if (q != href)
+ FREE(q);
}
/* Write list of anchors
@@ -789,19 +779,23 @@ PRIVATE void write_anchors ARGS1 (char *,text)
*/
PRIVATE void abort_socket NOARGS
{
- CTRACE(tfp, "HTNews: EOF on read, closing socket %d\n", s);
+ CTRACE((tfp, "HTNews: EOF on read, closing socket %d\n", s));
NEWS_NETCLOSE(s); /* End of file, close socket */
- PUTS("Network Error: connection lost");
- PUTC('\n');
+ if (rawtext) {
+ RAW_PUTS("Network Error: connection lost\n");
+ } else {
+ PUTS("Network Error: connection lost");
+ PUTC('\n');
+ }
s = -1; /* End of file on response */
}
/*
-** Determine if a line is a valid header line. valid_header
+** Determine if a line is a valid header line. valid_header
** -------------------------------------------
*/
PRIVATE BOOLEAN valid_header ARGS1(
- char *, line)
+ char *, line)
{
char *colon, *space;
@@ -818,7 +812,7 @@ PRIVATE BOOLEAN valid_header ARGS1(
*/
colon = strchr(line, ':');
space = strchr(line, ' ');
- if (isalpha(line[0]) && colon && space == colon + 1)
+ if (isalpha(UCH(line[0])) && colon && space == colon + 1)
return(TRUE);
/*
@@ -838,7 +832,7 @@ PRIVATE BOOLEAN valid_header ARGS1(
** postfile file with header and article to post.
*/
PRIVATE void post_article ARGS1(
- char *, postfile)
+ char *, postfile)
{
char line[512];
char buf[512];
@@ -854,7 +848,7 @@ PRIVATE void post_article ARGS1(
** Open the temporary file with the
** nntp headers and message body. - FM
*/
- if ((fd = fopen((postfile ? postfile : ""), "r")) == NULL) {
+ if ((fd = fopen((postfile ? postfile : ""), TXT_R)) == NULL) {
HTAlert(FAILED_CANNOT_OPEN_POST);
return;
}
@@ -865,7 +859,7 @@ PRIVATE void post_article ARGS1(
*/
buf[0] = '\0';
sprintf(crlf, "%c%c", CR, LF);
- while (fgets(line, sizeof(line), fd) != NULL) {
+ while (fgets(line, sizeof(line)-2, fd) != NULL) {
if ((cp = strchr(line, '\n')) != NULL)
*cp = '\0';
if (line[0] == '.') {
@@ -893,16 +887,13 @@ PRIVATE void post_article ARGS1(
if (seen_header) {
in_header = 0;
if (!seen_fromline) {
- if (blen < 475) {
- strcat(buf, "From: anonymous@nowhere.you.know");
- strcat(buf, crlf);
- blen += 34;
- } else {
+ if (blen >= (int) sizeof(buf) - 35) {
NEWS_NETWRITE(s, buf, blen);
- sprintf(buf,
- "From: anonymous@nowhere.you.know%s", crlf);
- blen = 34;
+ buf[blen = 0] = 0;
}
+ strcat(buf, "From: anonymous@nowhere.you.know");
+ strcat(buf, crlf);
+ blen += 34;
}
} else {
continue;
@@ -916,14 +907,12 @@ PRIVATE void post_article ARGS1(
}
strcat(line, crlf);
llen += 2;
- if ((blen + llen) < 511) {
- strcat(buf, line);
- blen += llen;
- } else {
+ if ((blen + llen) >= (int) sizeof(buf)-1) {
NEWS_NETWRITE(s, buf, blen);
- strcpy(buf, line);
- blen = llen;
+ buf[blen = 0] = 0;
}
+ strcat(buf, line);
+ blen += llen;
}
fclose(fd);
HTSYS_remove(postfile);
@@ -931,17 +920,15 @@ PRIVATE void post_article ARGS1(
/*
** Send the nntp EOF and get the server's response. - FM
*/
- if (blen < 508) {
- strcat(buf, ".");
- strcat(buf, crlf);
- blen += 3;
- NEWS_NETWRITE(s, buf, blen);
- } else {
- NEWS_NETWRITE(s, buf, blen);
- sprintf(buf, ".%s", crlf);
- blen = 3;
+ if (blen >= (int) sizeof(buf)-4) {
NEWS_NETWRITE(s, buf, blen);
+ buf[blen = 0] = 0;
}
+ strcat(buf, ".");
+ strcat(buf, crlf);
+ blen += 3;
+ NEWS_NETWRITE(s, buf, blen);
+
status = response(NULL);
if (status == 240) {
/*
@@ -956,6 +943,69 @@ PRIVATE void post_article ARGS1(
}
}
+#ifdef SH_EX /* for MIME */
+#define NEWS_DEBUG 0
+#if NEWS_DEBUG
+/* for DEBUG 1997/11/07 (Fri) 17:20:16 */
+void debug_print(unsigned char *p)
+{
+ while (*p) {
+ if (*p == '\0')
+ break;
+ if (*p == 0x1b)
+ printf("[ESC]");
+ else if (*p == '\n')
+ printf("[NL]");
+ else if (*p < ' ' || *p >= 0x80)
+ printf("(%02x)", *p);
+ else
+ putchar(*p);
+ p++;
+ }
+ printf("]\n");
+}
+#endif
+
+static char *decode_mime(char *str)
+{
+ char temp[LINE_LENGTH]; /* FIXME: what determines the actual size? */
+ char *p, *q;
+
+ if (str == NULL)
+ return "";
+
+ if (HTCJK != JAPANESE)
+ return str;
+
+ LYstrncpy(temp, str, sizeof(temp) - 1);
+ q = temp;
+ while ((p = strchr(q, '=')) != 0) {
+ if (p[1] == '?') {
+ HTmmdecode(p, p);
+ q = p + 2;
+ } else {
+ q = p + 1;
+ }
+ }
+#if NEWS_DEBUG
+ printf("new=[");
+ debug_print(temp);
+#endif
+ HTrjis(temp, temp);
+ strcpy(str, temp);
+
+ return str;
+}
+#else /* !SH_EX */
+static char *decode_mime ARGS1(char *, str)
+{
+ HTmmdecode(str, str);
+ HTrjis(str, str);
+ return str;
+}
+#endif
+
+
/* Read in an Article read_article
** ------------------
**
@@ -995,22 +1045,22 @@ PRIVATE int read_article ARGS1(
if (!diagnostic && !rawtext) {
while (!done) {
int ich = NEXT_CHAR;
- *p++ = ich;
+ *p++ = (char) ich;
if (ich == EOF) {
if (interrupted_in_htgetcharacter) {
interrupted_in_htgetcharacter = 0;
- CTRACE(tfp, "HTNews: Interrupted on read, closing socket %d\n",
- s);
+ CTRACE((tfp, "HTNews: Interrupted on read, closing socket %d\n",
+ s));
NEWS_NETCLOSE(s);
s = -1;
return(HT_INTERRUPTED);
}
- abort_socket(); /* End of file, close socket */
+ abort_socket(); /* End of file, close socket */
return(HT_LOADED); /* End of file on response */
}
if (((char)ich == LF) || (p == &line[LINE_LENGTH])) {
*--p = '\0'; /* Terminate the string */
- CTRACE(tfp, "H %s\n", line);
+ CTRACE((tfp, "H %s\n", line));
if (line[0] == '\t' || line[0] == ' ') {
int i = 0;
@@ -1032,47 +1082,31 @@ PRIVATE int read_article ARGS1(
/*
** End of article?
*/
- if ((unsigned char)full_line[1] < ' ') {
+ if (UCH(full_line[1]) < ' ') {
done = YES;
break;
}
- } else if ((unsigned char)full_line[0] < ' ') {
+ } else if (UCH(full_line[0]) < ' ') {
break; /* End of Header? */
} else if (match(full_line, "SUBJECT:")) {
StrAllocCopy(subject, HTStrip(strchr(full_line,':')+1));
- if (HTCJK == JAPANESE) {
- HTmmdecode(subject, subject);
- HTrjis(subject, subject);
- }
- if (*subject) {
- HTAnchor_setSubject(thisanchor, subject);
- }
-
+ decode_mime(subject);
} else if (match(full_line, "DATE:")) {
StrAllocCopy(date, HTStrip(strchr(full_line,':')+1));
} else if (match(full_line, "ORGANIZATION:")) {
StrAllocCopy(organization,
HTStrip(strchr(full_line,':')+1));
- if (HTCJK == JAPANESE) {
- HTmmdecode(organization, organization);
- HTrjis(organization, organization);
- }
+ decode_mime(organization);
} else if (match(full_line, "FROM:")) {
StrAllocCopy(from, HTStrip(strchr(full_line,':')+1));
- if (HTCJK == JAPANESE) {
- HTmmdecode(from, from);
- HTrjis(from, from);
- }
+ decode_mime(from);
} else if (match(full_line, "REPLY-TO:")) {
StrAllocCopy(replyto, HTStrip(strchr(full_line,':')+1));
- if (HTCJK == JAPANESE) {
- HTmmdecode(replyto, replyto);
- HTrjis(replyto, replyto);
- }
+ decode_mime(replyto);
} else if (match(full_line, "NEWSGROUPS:")) {
StrAllocCopy(newsgroups, HTStrip(strchr(full_line,':')+1));
@@ -1087,7 +1121,7 @@ PRIVATE int read_article ARGS1(
char * msgid = HTStrip(full_line+11);
if (msgid[0] == '<' && msgid[strlen(msgid)-1] == '>') {
msgid[strlen(msgid)-1] = '\0'; /* Chop > */
- msgid++; /* Chop < */
+ msgid++; /* Chop < */
HTAnchor_setMessageID(thisanchor, msgid);
}
@@ -1110,7 +1144,7 @@ PRIVATE int read_article ARGS1(
** Put in the owner as a link rel.
*/
if (from || replyto) {
- char *temp=NULL;
+ char *temp = NULL;
StrAllocCopy(temp, author_address(replyto ? replyto : from));
StrAllocCopy(href,"mailto:");
if (strchr(temp, '%') || strchr(temp, '?')) {
@@ -1319,7 +1353,7 @@ PRIVATE int read_article ARGS1(
if (rawtext) {
/*
- * No tags - kw
+ * No tags, and never do a PUTC. - kw
*/
;
} else if (diagnostic) {
@@ -1328,24 +1362,25 @@ PRIVATE int read_article ARGS1(
** as XMP formatted text. - FM
*/
START(HTML_XMP);
+ PUTC('\n');
} else {
/*
** Read in the BODY of the Article
** as PRE formatted text. - FM
*/
START(HTML_PRE);
+ PUTC('\n');
}
- PUTC('\n');
p = line;
while (!done) {
int ich = NEXT_CHAR;
- *p++ = ich;
+ *p++ = (char) ich;
if (ich == EOF) {
if (interrupted_in_htgetcharacter) {
interrupted_in_htgetcharacter = 0;
- CTRACE(tfp, "HTNews: Interrupted on read, closing socket %d\n",
- s);
+ CTRACE((tfp, "HTNews: Interrupted on read, closing socket %d\n",
+ s));
NEWS_NETCLOSE(s);
s = -1;
return(HT_INTERRUPTED);
@@ -1355,19 +1390,23 @@ PRIVATE int read_article ARGS1(
}
if (((char)ich == LF) || (p == &line[LINE_LENGTH])) {
*p++ = '\0'; /* Terminate the string */
- CTRACE(tfp, "B %s", line);
+ CTRACE((tfp, "B %s", line));
+#if NEWS_DEBUG /* 1997/11/09 (Sun) 15:56:11 */
+ debug_print(line); /* @@@ */
+#endif
if (line[0] == '.') {
/*
** End of article?
*/
- if ((unsigned char)line[1] < ' ') {
+ if (UCH(line[1]) < ' ') {
done = YES;
break;
} else { /* Line starts with dot */
- if (rawtext)
+ if (rawtext) {
RAW_PUTS(&line[1]);
- else
+ } else {
PUTS(&line[1]); /* Ignore first dot */
+ }
}
} else {
if (rawtext) {
@@ -1394,8 +1433,8 @@ PRIVATE int read_article ARGS1(
char *p2;
while ((p2 = strstr(l, "rticle <")) != NULL) {
- char *q = strchr(p2,'>');
- char *at = strchr(p2, '@');
+ char *q = strrchr(p2,'>');
+ char *at = strrchr(p2, '@');
if (q && at && at<q) {
char c = q[1];
q[1] = 0; /* chop up */
@@ -1417,9 +1456,9 @@ PRIVATE int read_article ARGS1(
strncmp(l, "wais://", 7) &&
strncmp(l, "mailto:", 7) &&
strncmp(l, "cso://", 6) &&
- strncmp(l, "gopher://", 9))
+ strncmp(l, "gopher://", 9)) {
PUTC (*l++);
- else {
+ } else {
StrAllocCopy(href, l);
start_anchor(strtok(href, " \r\n\t,>)\""));
while (*l && !strchr(" \r\n\t,>)\"", *l))
@@ -1435,7 +1474,7 @@ PRIVATE int read_article ARGS1(
PUTS(p2);
END(HTML_A);
q[1] = c; /* again */
- l=q+1;
+ l = q + 1;
} else {
break; /* line has unmatched <> */
}
@@ -1545,12 +1584,12 @@ PRIVATE int read_list ARGS1(char *, arg)
PUTC('\n');
while (!done) {
int ich = NEXT_CHAR;
- char ch = ich;
+ char ch = (char) ich;
if (ich == EOF) {
if (interrupted_in_htgetcharacter) {
interrupted_in_htgetcharacter = 0;
- CTRACE(tfp, "HTNews: Interrupted on read, closing socket %d\n",
- s);
+ CTRACE((tfp, "HTNews: Interrupted on read, closing socket %d\n",
+ s));
NEWS_NETCLOSE(s);
s = -1;
return(HT_INTERRUPTED);
@@ -1569,7 +1608,7 @@ PRIVATE int read_list ARGS1(char *, arg)
continue;
}
} else if (p == &line[LINE_LENGTH]) {
- CTRACE(tfp, "b %.*s%c[...]\n", (LINE_LENGTH), line, ch);
+ CTRACE((tfp, "b %.*s%c[...]\n", (LINE_LENGTH), line, ch));
*p = '\0';
if (ch == LF) {
; /* Will be dealt with below */
@@ -1579,7 +1618,7 @@ PRIVATE int read_list ARGS1(char *, arg)
} else if (strchr(line, ' ') == NULL &&
strchr(line, '\t') == NULL) {
/* No separator found */
- CTRACE(tfp, "HTNews..... group name too long, discarding.\n");
+ CTRACE((tfp, "HTNews..... group name too long, discarding.\n"));
skip_this_line = YES; /* ignore whole line */
continue;
} else {
@@ -1591,12 +1630,12 @@ PRIVATE int read_list ARGS1(char *, arg)
if (ch == LF) {
skip_rest_of_line = NO; /* done, reset flag */
*p = '\0'; /* Terminate the string */
- CTRACE(tfp, "B %s", line);
+ CTRACE((tfp, "B %s", line));
if (line[0] == '.') {
/*
** End of article?
*/
- if ((unsigned char)line[1] < ' ') {
+ if (UCH(line[1]) < ' ') {
done = YES;
break;
} else { /* Line starts with dot */
@@ -1650,10 +1689,12 @@ PRIVATE int read_list ARGS1(char *, arg)
} /* if end of line */
} /* Loop over characters */
if (!listing) {
+ char *msg = NULL;
START(HTML_DT);
- sprintf(line, gettext("No matches for: %s"), arg);
- PUTS(line);
+ HTSprintf0(&msg, gettext("No matches for: %s"), arg);
+ PUTS(msg);
MAYBE_END(HTML_DT);
+ FREE(msg);
}
END(HTML_DLC);
PUTC('\n');
@@ -1669,9 +1710,9 @@ PRIVATE int read_list ARGS1(char *, arg)
**
*/
PRIVATE int read_group ARGS3(
- CONST char *,groupName,
- int,first_required,
- int,last_required)
+ CONST char *, groupName,
+ int, first_required,
+ int, last_required)
{
char line[LINE_LENGTH+1];
char author[LINE_LENGTH+1];
@@ -1681,7 +1722,8 @@ PRIVATE int read_group ARGS3(
char *p;
BOOL done;
- char buffer[LINE_LENGTH];
+ char buffer[LINE_LENGTH+1];
+ char *temp = NULL;
char *reference = NULL; /* Href for article */
int art; /* Article number WITHIN GROUP */
int status, count, first, last; /* Response fields */
@@ -1699,8 +1741,8 @@ PRIVATE int read_group ARGS3(
PUTC('\n');
sscanf(response_text, " %d %d %d %d", &status, &count, &first, &last);
- CTRACE(tfp, "Newsgroup status=%d, count=%d, (%d-%d) required:(%d-%d)\n",
- status, count, first, last, first_required, last_required);
+ CTRACE((tfp, "Newsgroup status=%d, count=%d, (%d-%d) required:(%d-%d)\n",
+ status, count, first, last, first_required, last_required));
if (last == 0) {
PUTS(gettext("\nNo articles in this group.\n"));
goto add_post;
@@ -1710,7 +1752,7 @@ PRIVATE int read_group ARGS3(
#define CHOP_THRESHOLD 50 /* Above this, chop off the rest */
if (first_required < first)
- first_required = first; /* clip */
+ first_required = first; /* clip */
if ((last_required == 0) || (last_required > last))
last_required = last;
@@ -1722,16 +1764,17 @@ PRIVATE int read_group ARGS3(
if (last_required-first_required+1 > HTNewsMaxChunk) { /* Trim this block */
first_required = last_required-HTNewsChunkSize+1;
}
- CTRACE(tfp, " Chunk will be (%d-%d)\n",
- first_required, last_required);
+ CTRACE((tfp, " Chunk will be (%d-%d)\n",
+ first_required, last_required));
/*
** Set window title.
*/
- sprintf(buffer, gettext("%s, Articles %d-%d"),
+ HTSprintf0(&temp, gettext("%s, Articles %d-%d"),
groupName, first_required, last_required);
START(HTML_H1);
- PUTS(buffer);
+ PUTS(temp);
+ FREE(temp);
END(HTML_H1);
PUTC('\n');
@@ -1746,7 +1789,7 @@ PRIVATE int read_group ARGS3(
before = first_required-HTNewsChunkSize;
HTSprintf0(&dbuf, "%s%s/%d-%d", NewsHREF, groupName,
before, first_required-1);
- CTRACE(tfp, " Block before is %s\n", dbuf);
+ CTRACE((tfp, " Block before is %s\n", dbuf));
PUTC('(');
start_anchor(dbuf);
PUTS(gettext("Earlier articles"));
@@ -1761,10 +1804,11 @@ PRIVATE int read_group ARGS3(
/*#define USE_XHDR*/
#ifdef USE_XHDR
if (count > FAST_THRESHOLD) {
- sprintf(buffer,
+ HTSprintf0(&temp,
gettext("\nThere are about %d articles currently available in %s, IDs as follows:\n\n"),
count, groupName);
- PUTS(buffer);
+ PUTS(temp);
+ FREE(temp);
sprintf(buffer, "XHDR Message-ID %d-%d%c%c", first, last, CR, LF);
status = response(buffer);
if (status == 221) {
@@ -1775,8 +1819,8 @@ PRIVATE int read_group ARGS3(
if (ich == EOF) {
if (interrupted_in_htgetcharacter) {
interrupted_in_htgetcharacter = 0;
- CTRACE(tfp, "HTNews: Interrupted on read, closing socket %d\n",
- s);
+ CTRACE((tfp, "HTNews: Interrupted on read, closing socket %d\n",
+ s));
NEWS_NETCLOSE(s);
s = -1;
return(HT_INTERRUPTED);
@@ -1786,12 +1830,12 @@ PRIVATE int read_group ARGS3(
}
if (((char)ich == '\n') || (p == &line[LINE_LENGTH])) {
*p = '\0'; /* Terminate the string */
- CTRACE(tfp, "X %s", line);
+ CTRACE((tfp, "X %s", line));
if (line[0] == '.') {
/*
** End of article?
*/
- if ((unsigned char)line[1] < ' ') {
+ if (UCH(line[1]) < ' ') {
done = YES;
break;
} else { /* Line starts with dot */
@@ -1875,17 +1919,17 @@ PRIVATE int read_group ARGS3(
done = NO;
while( !done ) {
int ich = NEXT_CHAR;
- *p++ = ich;
+ *p++ = (char) ich;
if (ich == EOF) {
if (interrupted_in_htgetcharacter) {
interrupted_in_htgetcharacter = 0;
- CTRACE(tfp, "HTNews: Interrupted on read, closing socket %d\n",
- s);
+ CTRACE((tfp, "HTNews: Interrupted on read, closing socket %d\n",
+ s));
NEWS_NETCLOSE(s);
s = -1;
return(HT_INTERRUPTED);
}
- abort_socket(); /* End of file, close socket */
+ abort_socket(); /* End of file, close socket */
return(HT_LOADED); /* End of file on response */
}
if (((char)ich == LF) ||
@@ -1893,24 +1937,21 @@ PRIVATE int read_group ARGS3(
*--p = '\0'; /* Terminate & chop LF*/
p = line; /* Restart at beginning */
- CTRACE(tfp, "G %s\n", line);
+ CTRACE((tfp, "G %s\n", line));
switch(line[0]) {
case '.':
/*
** End of article?
*/
- done = ((unsigned char)line[1] < ' ');
+ done = (BOOL) (UCH(line[1]) < ' ');
break;
case 'S':
case 's':
if (match(line, "SUBJECT:")) {
- strcpy(subject, line+9);/* Save subject */
- if (HTCJK == JAPANESE) {
- HTmmdecode(subject, subject);
- HTrjis(subject, subject);
- }
+ LYstrncpy(subject, line+9, sizeof(subject)-1);/* Save subject */
+ decode_mime(subject);
}
break;
@@ -1927,12 +1968,10 @@ PRIVATE int read_group ARGS3(
case 'F':
if (match(line, "FROM:")) {
char * p2;
- strcpy(author,
- author_name(strchr(line,':')+1));
- if (HTCJK == JAPANESE) {
- HTmmdecode(author, author);
- HTrjis(author, author);
- }
+ LYstrncpy(author,
+ author_name(strchr(line,':')+1),
+ sizeof(author)-1);
+ decode_mime(author);
p2 = author + strlen(author) - 1;
if (*p2==LF)
*p2 = '\0'; /* Chop off newline */
@@ -1953,18 +1992,28 @@ PRIVATE int read_group ARGS3(
PUTC('\n');
START(HTML_LI);
- sprintf(buffer, "\"%s\"", subject);
+#ifdef SH_EX /* for MIME */
+ HTSprintf0(&temp, "\"%s\"", decode_mime(subject));
+#else
+ HTSprintf0(&temp, "\"%s\"", subject);
+#endif
if (reference) {
- write_anchor(buffer, reference);
+ write_anchor(temp, reference);
FREE(reference);
} else {
- PUTS(buffer);
+ PUTS(temp);
}
+ FREE(temp);
+
if (author[0] != '\0') {
PUTS(" - ");
if (LYListNewsDates)
START(HTML_I);
+#ifdef SH_EX /* for MIME */
+ PUTS(decode_mime(author));
+#else
PUTS(author);
+#endif
if (LYListNewsDates)
END(HTML_I);
author[0] = '\0';
@@ -1977,7 +2026,7 @@ PRIVATE int read_group ARGS3(
}
}
}
- sprintf(buffer, " [%s]", date);
+ sprintf(buffer, " [%.*s]", (int)(sizeof(buffer) - 4), date);
PUTS(buffer);
FREE(date);
}
@@ -1987,8 +2036,8 @@ PRIVATE int read_group ARGS3(
*/
} else if (status == HT_INTERRUPTED) {
interrupted_in_htgetcharacter = 0;
- CTRACE(tfp, "HTNews: Interrupted on read, closing socket %d\n",
- s);
+ CTRACE((tfp, "HTNews: Interrupted on read, closing socket %d\n",
+ s));
NEWS_NETCLOSE(s);
s = -1;
return(HT_INTERRUPTED);
@@ -2000,7 +2049,7 @@ PRIVATE int read_group ARGS3(
START(HTML_LI);
START(HTML_I);
if (LYListNewsNumbers)
- strcpy(buffer, "Status:");
+ LYstrncpy(buffer, "Status:", sizeof(buffer) - 1);
else
sprintf(buffer, "Status (ARTICLE %d):", art);
PUTS(buffer);
@@ -2029,7 +2078,7 @@ PRIVATE int read_group ARGS3(
else
HTSprintf0(&dbuf, "%s%s/%d-%d", NewsHREF, groupName,
last_required+1, after);
- CTRACE(tfp, " Block after is %s\n", dbuf);
+ CTRACE((tfp, " Block after is %s\n", dbuf));
PUTC('(');
start_anchor(dbuf);
PUTS(gettext("Later articles"));
@@ -2076,17 +2125,18 @@ PRIVATE int HTLoadNews ARGS4(
HTFormat, format_out,
HTStream*, stream)
{
- char command[260]; /* The whole command */
- char proxycmd[260]; /* The proxy command */
+ char command[262]; /* The whole command */
+ char proxycmd[260]; /* The proxy command */
char groupName[GROUP_NAME_LENGTH]; /* Just the group name */
- int status; /* tcp return */
+ int status; /* tcp return */
int retries; /* A count of how hard we have tried */
+ BOOL normal_url; /* Flag: "news:" or "nntp:" (physical) URL */
BOOL group_wanted; /* Flag: group was asked for, not article */
BOOL list_wanted; /* Flag: list was asked for, not article */
BOOL post_wanted; /* Flag: new post to group was asked for */
BOOL reply_wanted; /* Flag: followup post was asked for */
BOOL spost_wanted; /* Flag: new SSL post to group was asked for */
- BOOL sreply_wanted; /* Flag: followup SSL post was asked for */
+ BOOL sreply_wanted; /* Flag: followup SSL post was asked for */
BOOL head_wanted = NO; /* Flag: want HEAD of single article */
int first, last; /* First and last articles asked for */
char *cp = 0;
@@ -2094,13 +2144,16 @@ PRIVATE int HTLoadNews ARGS4(
char *ProxyHost = NULL;
char *ProxyHREF = NULL;
char *postfile = NULL;
+#ifdef USE_SSL
+ char SSLprogress[256];
+#endif /* USE_SSL */
diagnostic = (format_out == WWW_SOURCE || /* set global flag */
format_out == HTAtom_for("www/download") ||
format_out == HTAtom_for("www/dump"));
rawtext = NO;
- CTRACE(tfp, "HTNews: Looking for %s\n", arg);
+ CTRACE((tfp, "HTNews: Looking for %s\n", arg));
if (!initialized)
initialized = initialize();
@@ -2109,9 +2162,9 @@ PRIVATE int HTLoadNews ARGS4(
FREE(NewsHREF);
command[0] = '\0';
- command[259] = '\0';
+ command[sizeof(command)-1] = '\0';
proxycmd[0] = '\0';
- proxycmd[259] = '\0';
+ proxycmd[sizeof(proxycmd)-1] = '\0';
{
CONST char * p1 = arg;
@@ -2120,26 +2173,27 @@ PRIVATE int HTLoadNews ARGS4(
** We will ask for the document, omitting the host name & anchor.
**
** Syntax of address is
- ** xxx@yyy Article
+ ** xxx@yyy Article
** <xxx@yyy> Same article
** xxxxx News group (no "@")
** group/n1-n2 Articles n1 to n2 in group
*/
- spost_wanted = (strstr(arg, "snewspost:") != NULL);
- sreply_wanted = (!(spost_wanted) &&
+ normal_url = (BOOL) (!strncmp(arg, "news:", 5) || !strncmp(arg, "nntp:", 5));
+ spost_wanted = (BOOL) (!normal_url && strstr(arg, "snewspost:") != NULL);
+ sreply_wanted = (BOOL) (!(normal_url || spost_wanted) &&
strstr(arg, "snewsreply:") != NULL);
- post_wanted = (!(spost_wanted || sreply_wanted) &&
+ post_wanted = (BOOL) (!(normal_url || spost_wanted || sreply_wanted) &&
strstr(arg, "newspost:") != NULL);
- reply_wanted = (!(spost_wanted || sreply_wanted ||
+ reply_wanted = (BOOL) (!(normal_url || spost_wanted || sreply_wanted ||
post_wanted) &&
strstr(arg, "newsreply:") != NULL);
- group_wanted = (!(spost_wanted || sreply_wanted ||
+ group_wanted = (BOOL) ((!(spost_wanted || sreply_wanted ||
post_wanted || reply_wanted) &&
- strchr(arg, '@') == NULL) && (strchr(arg, '*') == NULL);
- list_wanted = (!(spost_wanted || sreply_wanted ||
+ strchr(arg, '@') == NULL) && (strchr(arg, '*') == NULL));
+ list_wanted = (BOOL) ((!(spost_wanted || sreply_wanted ||
post_wanted || reply_wanted ||
group_wanted) &&
- strchr(arg, '@') == NULL) && (strchr(arg, '*') != NULL);
+ strchr(arg, '@') == NULL) && (strchr(arg, '*') != NULL));
#ifndef USE_SSL
if (!strncasecomp(arg, "snewspost:", 10) ||
@@ -2175,14 +2229,14 @@ PRIVATE int HTLoadNews ARGS4(
StrAllocCopy(NewsHost, cp);
}
FREE(cp);
- sprintf(command, "%s://%.245s/",
+ HTSprintf0(&NewsHREF, "%s://%.*s/",
(post_wanted ?
"newspost" :
(reply_wanted ?
"newreply" :
(spost_wanted ?
- "snewspost" : "snewsreply"))), NewsHost);
- StrAllocCopy(NewsHREF, command);
+ "snewspost" : "snewsreply"))),
+ (int) sizeof(command) - 15, NewsHost);
/*
** If the SSL daemon is being used as a proxy,
@@ -2231,7 +2285,7 @@ PRIVATE int HTLoadNews ARGS4(
StrAllocCopy(NewsHost, cp);
}
FREE(cp);
- sprintf(command, "nntp://%.251s/", NewsHost);
+ SnipIn(command, "nntp://%.*s/", 9, NewsHost);
StrAllocCopy(NewsHREF, command);
}
else if (!strncasecomp(arg, "snews:", 6)) {
@@ -2301,7 +2355,7 @@ PRIVATE int HTLoadNews ARGS4(
StrAllocCopy(NewsHost, cp);
}
FREE(cp);
- sprintf(command, "news://%.251s/", NewsHost);
+ SnipIn(command, "news://%.*s/", 9, NewsHost);
StrAllocCopy(NewsHREF, command);
} else {
p1 = (arg + 5); /* Skip "news:" prefix */
@@ -2329,16 +2383,18 @@ PRIVATE int HTLoadNews ARGS4(
!strncasecomp(p1, "snewsreply:", 11)) {
StrAllocCopy(ProxyHost, NewsHost);
if ((cp = HTParse(p1, "", PARSE_HOST)) != NULL && *cp != '\0') {
- sprintf(command, "snews://%.250s", cp);
+ SnipIn(command, "snews://%.*s", 10, cp);
StrAllocCopy(NewsHost, cp);
} else {
- sprintf(command, "snews://%.250s", NewsHost);
+ SnipIn(command, "snews://%.*s", 10, NewsHost);
}
- command[258] = '\0';
+ command[sizeof(command)-2] = '\0';
FREE(cp);
- sprintf(proxycmd, "GET %.251s%c%c%c%c", command, CR, LF, CR, LF);
- CTRACE(tfp, "HTNews: Proxy command is '%.*s'\n",
- (int)(strlen(proxycmd) - 4), proxycmd);
+ sprintf(proxycmd, "GET %.*s%c%c%c%c",
+ (int) sizeof(proxycmd)-9, command,
+ CR, LF, CR, LF);
+ CTRACE((tfp, "HTNews: Proxy command is '%.*s'\n",
+ (int)(strlen(proxycmd) - 4), proxycmd));
strcat(command, "/");
StrAllocCopy(ProxyHREF, NewsHREF);
StrAllocCopy(NewsHREF, command);
@@ -2353,7 +2409,7 @@ PRIVATE int HTLoadNews ARGS4(
}
} else {
/*
- ** Reset p1 so that it points to the newgroup
+ ** Reset p1 so that it points to the newsgroup
** (or a wildcard), or the article.
*/
if (!(cp = strrchr((p1 + 6), '/')) || *(cp + 1) == '\0') {
@@ -2372,18 +2428,29 @@ PRIVATE int HTLoadNews ARGS4(
if (post_wanted || reply_wanted || spost_wanted || sreply_wanted) {
strcpy(command, "POST");
} else if (list_wanted) {
- sprintf(command, "XGTITLE %.*s", 249, p1);
+ if (strlen(p1) > 249) {
+ FREE(ProxyHost);
+ FREE(ProxyHREF);
+ HTAlert(URL_TOO_LONG);
+ return -400;
+ }
+ SnipIn(command, "XGTITLE %.*s", 11, p1);
} else if (group_wanted) {
char * slash = strchr(p1, '/');
- strcpy(command, "GROUP ");
first = 0;
last = 0;
if (slash) {
*slash = '\0';
- strcpy(groupName, p1);
+ if (strlen(p1) >= sizeof(groupName)) {
+ FREE(ProxyHost);
+ FREE(ProxyHREF);
+ HTAlert(URL_TOO_LONG);
+ return -400;
+ }
+ LYstrncpy(groupName, p1, sizeof(groupName) - 1);
*slash = '/';
(void)sscanf(slash+1, "%d-%d", &first, &last);
- if ((first > 0) && (isdigit(*(slash+1))) &&
+ if ((first > 0) && (isdigit(UCH(*(slash+1)))) &&
(strchr(slash+1, '-') == NULL || first == last)) {
/*
** We got a number greater than 0, which will be
@@ -2396,16 +2463,29 @@ PRIVATE int HTLoadNews ARGS4(
last = -1;
}
} else {
- strcpy(groupName, p1);
+ if (strlen(p1) >= sizeof(groupName)) {
+ FREE(ProxyHost);
+ FREE(ProxyHREF);
+ HTAlert(URL_TOO_LONG);
+ return -400;
+ }
+ LYstrncpy(groupName, p1, sizeof(groupName) - 1);
}
- strcat(command, groupName);
+ SnipIn(command, "GROUP %.*s", 9, groupName);
} else {
- strcpy(command, "ARTICLE ");
- if (strchr(p1, '<') == 0)
- strcat(command,"<");
- strcat(command, p1);
- if (strchr(p1, '>') == 0)
- strcat(command,">");
+ int add_open=(strchr(p1, '<') == 0);
+ int add_close=(strchr(p1, '>') == 0);
+ if (strlen(p1) + add_open + add_close >= 252) {
+ FREE(ProxyHost);
+ FREE(ProxyHREF);
+ HTAlert(URL_TOO_LONG);
+ return -400;
+ }
+ sprintf(command, "ARTICLE %s%.*s%s",
+ add_open ? "<" : "",
+ (int) (sizeof(command) - (11 + add_open + add_close)),
+ p1,
+ add_close ? ">" : "");
}
{
@@ -2431,14 +2511,14 @@ PRIVATE int HTLoadNews ARGS4(
if (!(post_wanted || reply_wanted || spost_wanted || sreply_wanted ||
(group_wanted && last != -1) || list_wanted)) {
head_wanted = anAnchor->isHEAD;
- if (head_wanted && !strncmp(command, "ARTICLE_", 8)) {
+ if (head_wanted && !strncmp(command, "ARTICLE ", 8)) {
/* overwrite "ARTICLE" - hack... */
strcpy(command, "HEAD ");
for (cp = command + 5; ; cp++)
if ((*cp = *(cp + 3)) == '\0')
break;
}
- rawtext = (head_wanted || keep_mime_headers);
+ rawtext = (BOOL) (head_wanted || keep_mime_headers);
}
if (rawtext) {
node_anchor = anAnchor;
@@ -2473,13 +2553,13 @@ PRIVATE int HTLoadNews ARGS4(
/* CONNECTING to news host */
char url[260];
if (!strcmp(NewsHREF, "news:")) {
- sprintf (url, "lose://%.251s/", NewsHost);
+ SnipIn (url, "lose://%.*s/", 9, NewsHost);
} else if (ProxyHREF) {
- sprintf (url, "%.259s", ProxyHREF);
+ SnipIn (url, "%.*s", 1, ProxyHREF);
} else {
- sprintf (url, "%.259s", NewsHREF);
+ SnipIn (url, "%.*s", 1, NewsHREF);
}
- CTRACE (tfp, "News: doing HTDoConnect on '%s'\n", url);
+ CTRACE((tfp, "News: doing HTDoConnect on '%s'\n", url));
_HTProgress(gettext("Connecting to NewsHost ..."));
@@ -2499,7 +2579,7 @@ PRIVATE int HTLoadNews ARGS4(
/*
** Interrupt cleanly.
*/
- CTRACE(tfp, "HTNews: Interrupted on connect; recovering cleanly.\n");
+ CTRACE((tfp, "HTNews: Interrupted on connect; recovering cleanly.\n"));
_HTProgress(CONNECTION_INTERRUPTED);
if (!(post_wanted || reply_wanted ||
spost_wanted || sreply_wanted)) {
@@ -2525,7 +2605,7 @@ PRIVATE int HTLoadNews ARGS4(
if (status < 0) {
NEWS_NETCLOSE(s);
s = -1;
- CTRACE(tfp, "HTNews: Unable to connect to news host.\n");
+ CTRACE((tfp, "HTNews: Unable to connect to news host.\n"));
if (retries < 1)
continue;
if (!(post_wanted || reply_wanted ||
@@ -2544,8 +2624,8 @@ PRIVATE int HTLoadNews ARGS4(
}
return HTLoadError(stream, 500, dbuf);
} else {
- CTRACE(tfp, "HTNews: Connected to news host %s.\n",
- NewsHost);
+ CTRACE((tfp, "HTNews: Connected to news host %s.\n",
+ NewsHost));
#ifdef USE_SSL
/*
** If this is an snews url,
@@ -2557,12 +2637,16 @@ PRIVATE int HTLoadNews ARGS4(
!strncmp(url, "snewsreply:", 11))) {
Handle = HTGetSSLHandle();
SSL_set_fd(Handle, s);
+ HTSSLInitPRNG();
status = SSL_connect(Handle);
if (status <= 0) {
- CTRACE(tfp,
-"HTNews: Unable to complete SSL handshake for remote host '%s' (SSLerror = %d)\n",
- url, status);
+ unsigned long SSLerror;
+ CTRACE((tfp,"HTNews: Unable to complete SSL handshake for '%s', SSL_connect=%d, SSL error stack dump follows\n",url, status));
+ SSL_load_error_strings();
+ while((SSLerror = ERR_get_error()) != 0) {
+ CTRACE((tfp,"HTNews: SSL: %s\n",ERR_error_string(SSLerror,NULL)));
+ }
HTAlert(
"Unable to make secure connection to remote host.");
NEWS_NETCLOSE(s);
@@ -2586,14 +2670,15 @@ PRIVATE int HTLoadNews ARGS4(
}
return HT_NOT_LOADED;
}
- _HTProgress(SSL_get_cipher(Handle));
+ sprintf(SSLprogress,"Secure %d-bit %s (%s) NNTP connection",SSL_get_cipher_bits(Handle,NULL),SSL_get_cipher_version(Handle),SSL_get_cipher(Handle));
+ _HTProgress(SSLprogress);
}
#endif /* USE_SSL */
- HTInitInput(s); /* set up buffering */
+ HTInitInput(s); /* set up buffering */
if (proxycmd[0]) {
status = NEWS_NETWRITE(s, proxycmd, strlen(proxycmd));
- CTRACE(tfp, "HTNews: Proxy command returned status '%d'.\n",
- status);
+ CTRACE((tfp, "HTNews: Proxy command returned status '%d'.\n",
+ status));
}
if (((status = response(NULL)) / 100) != 2) {
NEWS_NETCLOSE(s);
@@ -2617,13 +2702,23 @@ PRIVATE int HTLoadNews ARGS4(
}
if (retries < 1)
continue;
+ FREE(ProxyHost);
+ FREE(ProxyHREF);
+ FREE(ListArg);
+ FREE(postfile);
if (!(post_wanted || reply_wanted ||
spost_wanted || sreply_wanted)) {
ABORT_TARGET;
}
- HTSprintf0(&dbuf,
+ if (response_text[0]) {
+ HTSprintf0(&dbuf,
gettext("Can't read news info. News host %.20s responded: %.200s"),
NewsHost, response_text);
+ } else {
+ HTSprintf0(&dbuf,
+ gettext("Can't read news info, empty response from host %s"),
+ NewsHost);
+ }
return HTLoadError(stream, 500, dbuf);
}
if (status == 200) {
@@ -2668,7 +2763,8 @@ PRIVATE int HTLoadNews ARGS4(
return(HT_NOT_LOADED);
}
if (postfile == NULL) {
- postfile = LYNewsPost(ListArg, (reply_wanted || sreply_wanted));
+ postfile = LYNewsPost(ListArg,
+ (BOOLEAN)(reply_wanted || sreply_wanted));
}
if (postfile == NULL) {
HTProgress(CANCELLED);
@@ -2715,6 +2811,12 @@ PRIVATE int HTLoadNews ARGS4(
}
Send_NNTP_command:
+#ifdef NEWS_DEB
+ if (postfile)
+ printf("postfile = %s, command = %s", postfile, command);
+ else
+ printf("command = %s", command);
+#endif
if ((status = response(command)) == HT_INTERRUPTED) {
_HTProgress(CONNECTION_INTERRUPTED);
break;
@@ -2731,7 +2833,7 @@ Send_NNTP_command:
* to occur in normal use, break from the loop without retrying
* and without closing the connection. It is unlikely that
* these are leftovers from a timed-out connection (but we do
- * some checks to see whether the response rorresponds to the
+ * some checks to see whether the response corresponds to the
* last command), or that they will give anything else when
* automatically retried. - kw
*/
@@ -2875,10 +2977,11 @@ Send_NNTP_command:
return status;
} /* Retry loop */
- /* HTAlert(gettext("Sorry, could not load requested news.")); */
-
-/* NXRunAlertPanel(NULL, "Sorry, could not load `%s'.",
- NULL,NULL,NULL, arg);No -- message earlier wil have covered it */
+#if 0
+ HTAlert(gettext("Sorry, could not load requested news."));
+ NXRunAlertPanel(NULL, "Sorry, could not load `%s'.", NULL,NULL,NULL, arg);
+ /* No -- message earlier wil have covered it */
+#endif
if (!(post_wanted || reply_wanted ||
spost_wanted || sreply_wanted)) {
@@ -2900,7 +3003,7 @@ Send_NNTP_command:
/*
** This function clears all authorization information by
-** invoking the free_HTAAGlobals() function, which normally
+** invoking the free_NNTP_AuthInfo() function, which normally
** is invoked at exit. It allows a browser command to do
** this at any time, for example, if the user is leaving
** the terminal for a period of time, but does not want
@@ -2925,35 +3028,46 @@ PUBLIC void HTClearNNTPAuthInfo NOARGS
PRIVATE char HTNewsGetCharacter NOARGS
{
if (!Handle)
- return HTGetCharacter();
+ return HTGetCharacter();
else
- return HTGetSSLCharacter((void *)Handle);
+ return HTGetSSLCharacter((void *)Handle);
}
-PUBLIC int HTNewsProxyConnect ARGS5 (int, sock, CONST char *, url,
- HTParentAnchor *, anAnchor,
- HTFormat, format_out,
- HTStream *, sink)
+PUBLIC int HTNewsProxyConnect ARGS5 (
+ int, sock,
+ CONST char *, url,
+ HTParentAnchor *, anAnchor,
+ HTFormat, format_out,
+ HTStream *, sink)
{
int status;
CONST char * arg = url;
+ char SSLprogress[256];
s = channel_s = sock;
Handle = HTGetSSLHandle();
SSL_set_fd(Handle, s);
+ HTSSLInitPRNG();
status = SSL_connect(Handle);
if (status <= 0) {
- channel_s = -1;
- CTRACE(tfp,
-"HTTP: Unable to complete SSL handshake for remote host '%s' (SSLerror = %d)\n",
- url, status);
+ unsigned long SSLerror;
+ channel_s = -1;
+ CTRACE((tfp,"HTNews: Unable to complete SSL handshake for '%s', SSL_connect=%d, SSL error stack dump follows\n",url, status));
+ SSL_load_error_strings();
+ while((SSLerror = ERR_get_error()) != 0) {
+ CTRACE((tfp,"HTNews: SSL: %s\n",ERR_error_string(SSLerror,NULL)));
+ }
HTAlert("Unable to make secure connection to remote host.");
NEWS_NETCLOSE(s);
s = -1;
return HT_NOT_LOADED;
}
- _HTProgress(SSL_get_cipher(Handle));
+ sprintf(SSLprogress,"Secure %d-bit %s (%s) NNTP connection",
+ SSL_get_cipher_bits(Handle,NULL),
+ SSL_get_cipher_version(Handle),
+ SSL_get_cipher(Handle));
+ _HTProgress(SSLprogress);
status = HTLoadNews(arg, anAnchor, format_out, sink);
channel_s = -1;
return status;
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTNews.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTNews.h
index 2e017fce7af..92bf7f33b7b 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTNews.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTNews.h
@@ -13,6 +13,9 @@
#include <HTAccess.h>
#include <HTAnchor.h>
+extern int HTNewsChunkSize;
+extern int HTNewsMaxChunk;
+
#ifdef GLOBALREF_IS_MACRO
extern GLOBALREF(HTProtocol, HTNews);
extern GLOBALREF(HTProtocol, HTNNTP);
@@ -38,9 +41,13 @@ extern char * HTNewsHost;
extern void HTClearNNTPAuthInfo NOPARAMS;
-#endif /* HTNEWS_H */
-
+#ifdef USE_SSL
+extern int HTNewsProxyConnect PARAMS ((
+ int sock,
+ CONST char * url,
+ HTParentAnchor *anAnchor,
+ HTFormat format_out,
+ HTStream * sink));
+#endif
-/*
-
- tbl */
+#endif /* HTNEWS_H */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTParse.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTParse.c
index 097f091d40b..8f58089267d 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTParse.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTParse.c
@@ -14,12 +14,12 @@ struct struct_parts {
char * host;
char * absolute;
char * relative;
-/* char * search; no - treated as part of path */
+ char * search; /* treated normally as part of path */
char * anchor;
};
-/* Strip white space off a string. HTStrip()
+/* Strip white space off a string. HTStrip()
** -------------------------------
**
** On exit,
@@ -27,7 +27,7 @@ struct struct_parts {
** All trailing white space is OVERWRITTEN with zero.
*/
PUBLIC char * HTStrip ARGS1(
- char *, s)
+ char *, s)
{
#define SPACE(c) ((c == ' ') || (c == '\t') || (c == '\n'))
char * p = s;
@@ -55,7 +55,7 @@ PUBLIC char * HTStrip ARGS1(
** Any which are nonzero point to zero terminated strings.
*/
PRIVATE void scan ARGS2(
- char *, name,
+ char *, name,
struct struct_parts *, parts)
{
char * after_access;
@@ -68,6 +68,7 @@ PRIVATE void scan ARGS2(
parts->host = NULL;
parts->absolute = NULL;
parts->relative = NULL;
+ parts->search = NULL; /* normally not used - kw */
parts->anchor = NULL;
/*
@@ -111,6 +112,12 @@ PRIVATE void scan ARGS2(
if (p != NULL) {
*p = '\0'; /* Terminate host */
parts->absolute = (p + 1); /* Root has been found */
+ } else {
+ p = strchr(parts->host, '?');
+ if (p != NULL) {
+ *p = '\0'; /* Terminate host */
+ parts->search = (p + 1);
+ }
}
} else {
parts->absolute = (p + 1); /* Root found but no host */
@@ -171,7 +178,7 @@ PRIVATE void scan ARGS2(
** wanted A mask for the bits which are wanted.
**
** On exit,
-** returns A pointer to a calloc'd string which MUST BE FREED
+** returns A pointer to a calloc'd string which MUST BE FREED
*/
PUBLIC char * HTParse ARGS3(
CONST char *, aName,
@@ -187,7 +194,8 @@ PUBLIC char * HTParse ARGS3(
char * acc_method;
struct struct_parts given, related;
- CTRACE(tfp, "HTParse: aName:%s relatedName:%s\n", aName, relatedName);
+ CTRACE((tfp, "HTParse: aName:`%s'\n", aName));
+ CTRACE((tfp, " relatedName:`%s'\n", relatedName));
if (wanted & (PARSE_STRICTPATH | PARSE_QUERY)) { /* if detail wanted... */
if ((wanted & (PARSE_STRICTPATH | PARSE_QUERY))
@@ -200,7 +208,7 @@ PUBLIC char * HTParse ARGS3(
** Allocate the output string.
*/
len = strlen(aName) + strlen(relatedName) + 10;
- result = (char *)calloc(1, len); /* Lots of space: more than enough */
+ result = typecallocn(char, len); /* Lots of space: more than enough */
if (result == NULL) {
outofmem(__FILE__, "HTParse");
}
@@ -260,6 +268,7 @@ PUBLIC char * HTParse ARGS3(
related.host = NULL;
related.absolute = NULL;
related.relative = NULL;
+ related.search = NULL;
related.anchor = NULL;
}
@@ -283,7 +292,7 @@ PUBLIC char * HTParse ARGS3(
if ((p2 = strchr(result, '@')) != NULL)
tail = (p2 + 1);
p2 = strchr(tail, ':');
- if (p2 != NULL && !isdigit((unsigned char)p2[1]))
+ if (p2 != NULL && !isdigit(UCH(p2[1])))
/*
** Colon not followed by a port number.
*/
@@ -319,7 +328,7 @@ PUBLIC char * HTParse ARGS3(
if (*h == '.')
*h = '\0'; /* chop final . */
}
- } else {
+ } else if (p2 != result) {
h = p2;
h--; /* End of hostname */
if (*h == '.') {
@@ -336,6 +345,23 @@ PUBLIC char * HTParse ARGS3(
}
/*
+ ** If host in given or related was ended directly with a '?' (no
+ ** slash), fake the search part into absolute. This is the only
+ ** case search is returned from scan. A host must have been present.
+ ** this restores the '?' at which the host part had been truncated in
+ ** scan, we have to do this after host part handling is done. - kw
+ **
+ */
+ if (given.search && *(given.search - 1) == '\0') {
+ given.absolute = given.search - 1;
+ given.absolute[0] = '?';
+ } else if (related.search && !related.absolute &&
+ *(related.search - 1) == '\0') {
+ related.absolute = related.search - 1;
+ related.absolute[0] = '?';
+ }
+
+ /*
** If different hosts, inherit no path.
*/
if (given.host && related.host)
@@ -371,7 +397,7 @@ PUBLIC char * HTParse ARGS3(
if (wanted & PARSE_PUNCTUATION)
strcat(result, "/");
strcat(result, given.absolute);
- CTRACE(tfp, "1\n");
+ CTRACE((tfp, "HTParse: (ABS)\n"));
} else if (related.absolute) { /* Adopt path not name */
strcat(result, "/");
strcat(result, related.absolute);
@@ -385,13 +411,13 @@ PUBLIC char * HTParse ARGS3(
strcat(result, given.relative); /* Add given one */
HTSimplify (result);
}
- CTRACE(tfp, "2\n");
+ CTRACE((tfp, "HTParse: (Related-ABS)\n"));
} else if (given.relative) {
strcat(result, given.relative); /* what we've got */
- CTRACE(tfp, "3\n");
+ CTRACE((tfp, "HTParse: (REL)\n"));
} else if (related.relative) {
strcat(result, related.relative);
- CTRACE(tfp, "4\n");
+ CTRACE((tfp, "HTParse: (Related-REL)\n"));
} else { /* No inheritance */
if (strncasecomp(aName, "lynxcgi:", 8) &&
strncasecomp(aName, "lynxexec:", 9) &&
@@ -400,7 +426,7 @@ PUBLIC char * HTParse ARGS3(
}
if (!strcmp(result, "news:/"))
result[5] = '*';
- CTRACE(tfp, "5\n");
+ CTRACE((tfp, "HTParse: (No inheritance)\n"));
}
if (want_detail) {
p = strchr(tail, '?'); /* Search part? */
@@ -432,7 +458,7 @@ PUBLIC char * HTParse ARGS3(
strcat(result, (given.anchor) ?
given.anchor : related.anchor);
}
- CTRACE(tfp, "HTParse: result:%s\n", result);
+ CTRACE((tfp, "HTParse: result:%s\n", result));
FREE(rel);
FREE(name);
@@ -458,7 +484,7 @@ PUBLIC char * HTParse ARGS3(
** or ../../albert.html
*/
PUBLIC void HTSimplify ARGS1(
- char *, filename)
+ char *, filename)
{
char *p;
char *q, *q1;
@@ -656,7 +682,7 @@ PUBLIC char * HTRelative ARGS2(
for (; *q && (*q != '#'); q++)
if (*q == '/')
levels++;
- result = (char *)calloc(1, (3*levels + strlen(last_slash) + 1));
+ result = typecallocn(char, 3*levels + strlen(last_slash) + 1);
if (result == NULL)
outofmem(__FILE__, "HTRelative");
result[0] = '\0';
@@ -664,12 +690,13 @@ PUBLIC char * HTRelative ARGS2(
strcat(result, "../");
strcat(result, last_slash+1);
}
- CTRACE(tfp, "HT: `%s' expressed relative to\n `%s' is\n `%s'.",
- aName, relatedName, result);
+ CTRACE((tfp,
+ "HTparse: `%s' expressed relative to\n `%s' is\n `%s'.\n",
+ aName, relatedName, result));
return result;
}
-/* Escape undesirable characters using % HTEscape()
+/* Escape undesirable characters using % HTEscape()
** -------------------------------------
**
** This function takes a pointer to a string in which
@@ -682,7 +709,7 @@ PUBLIC char * HTRelative ARGS2(
PRIVATE CONST unsigned char isAcceptable[96] =
/* Bit 0 xalpha -- see HTFile.h
-** Bit 1 xpalpha -- as xalpha but with plus.
+** Bit 1 xpalpha -- as xalpha but with plus.
** Bit 2 ... path -- as xpalphas but with /
*/
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
@@ -705,9 +732,9 @@ PUBLIC char * HTEscape ARGS2(
char * result;
int unacceptable = 0;
for (p = str; *p; p++)
- if (!ACCEPTABLE((unsigned char)TOASCII(*p)))
+ if (!ACCEPTABLE(UCH(TOASCII(*p))))
unacceptable++;
- result = (char *)calloc(1, (p-str + unacceptable + unacceptable + 1));
+ result = typecallocn(char, p-str + unacceptable + unacceptable + 1);
if (result == NULL)
outofmem(__FILE__, "HTEscape");
for (q = result, p = str; *p; p++) {
@@ -727,13 +754,13 @@ PUBLIC char * HTEscape ARGS2(
** --------------------------------
**
** This function takes a pointer to a string in which
-** some characters that may be unsafe are unescaped.
+** some characters may be that may be unsafe are unescaped.
** It returns a string which has these characters
-** represented by a '%' character followed by two new hex digits.
+** represented by a '%' character followed by two hex digits.
**
** Unlike HTUnEscape(), this routine returns a malloc'd string.
*/
-#define UNSAFE(ch) (((ch) <= 32 ) || ((ch) >= 127))
+#define UNSAFE(ch) (((ch) <= 32) || ((ch) >= 127))
PUBLIC char *HTEscapeUnsafe ARGS1(
CONST char *, str)
@@ -743,19 +770,19 @@ PUBLIC char *HTEscapeUnsafe ARGS1(
char * result;
int unacceptable = 0;
for (p = str; *p; p++)
- if (UNSAFE((unsigned char)TOASCII(*p)))
+ if (UNSAFE(UCH(TOASCII(*p))))
unacceptable++;
- result = (char *)calloc(1, (p-str + unacceptable + unacceptable + 1));
+ result = typecallocn(char, p-str + unacceptable + unacceptable + 1);
if (result == NULL)
- outofmem(__FILE__, "HTEscapeUnsafe");
+ outofmem(__FILE__, "HTEscapeUnsafe");
for (q = result, p = str; *p; p++) {
- unsigned char a = TOASCII(*p);
+ unsigned char a = TOASCII(*p);
if (UNSAFE(a)) {
- *q++ = HEX_ESCAPE; /* Means hex coming */
- *q++ = hex[a >> 4];
- *q++ = hex[a & 15];
- }
- else *q++ = *p;
+ *q++ = HEX_ESCAPE; /* Means hex coming */
+ *q++ = hex[a >> 4];
+ *q++ = hex[a & 15];
+ }
+ else *q++ = *p;
}
*q++ = '\0'; /* Terminate */
return result;
@@ -781,9 +808,9 @@ PUBLIC char * HTEscapeSP ARGS2(
char * result;
int unacceptable = 0;
for (p = str; *p; p++)
- if (!(*p == ' ' || ACCEPTABLE((unsigned char)TOASCII(*p))))
+ if (!(*p == ' ' || ACCEPTABLE(UCH(TOASCII(*p)))))
unacceptable++;
- result = (char *)calloc(1, (p-str + unacceptable + unacceptable + 1));
+ result = typecallocn(char, p-str + unacceptable + unacceptable + 1);
if (result == NULL)
outofmem(__FILE__, "HTEscape");
for (q = result, p = str; *p; p++) {
@@ -798,7 +825,7 @@ PUBLIC char * HTEscapeSP ARGS2(
*q++ = *p;
}
}
- *q++ = '\0'; /* Terminate */
+ *q++ = '\0'; /* Terminate */
return result;
}
@@ -813,13 +840,13 @@ PUBLIC char * HTEscapeSP ARGS2(
PRIVATE char from_hex ARGS1(
char, c)
{
- return c >= '0' && c <= '9' ? c - '0'
+ return (char) ( c >= '0' && c <= '9' ? c - '0'
: c >= 'A' && c <= 'F'? c - 'A' + 10
- : c - 'a' + 10; /* accept small letters just in case */
+ : c - 'a' + 10); /* accept small letters just in case */
}
PUBLIC char * HTUnEscape ARGS1(
- char *, str)
+ char *, str)
{
char * p = str;
char * q = str;
@@ -833,17 +860,18 @@ PUBLIC char * HTUnEscape ARGS1(
* Tests shouldn't be needed, but better safe than sorry.
*/
p[1] && p[2] &&
- isxdigit((unsigned char)p[1]) &&
- isxdigit((unsigned char)p[2])) {
+ isxdigit(UCH(p[1])) &&
+ isxdigit(UCH(p[2]))) {
p++;
if (*p)
- *q = from_hex(*p++) * 16;
- if (*p)
+ *q = (char) (from_hex(*p++) * 16);
+ if (*p) {
/*
- ** Careful! FROMASCII() may evaluate its arg more than once!
+ ** Careful! FROMASCII() may evaluate its arg more than once!
*/ /* S/390 -- gil -- 0221 */
- *q = *q + from_hex(*p++) ;
- *q = FROMASCII(*q );
+ *q = (char) (*q + from_hex(*p++));
+ }
+ *q = FROMASCII(*q);
q++;
} else {
*q++ = *p++;
@@ -866,7 +894,7 @@ PUBLIC char * HTUnEscape ARGS1(
** The first string is converted in place, as it will never grow.
*/
PUBLIC char * HTUnEscapeSome ARGS2(
- char *, str,
+ char *, str,
CONST char *, do_trans)
{
char * p = str;
@@ -879,9 +907,10 @@ PUBLIC char * HTUnEscapeSome ARGS2(
while (*p != '\0') {
if (*p == HEX_ESCAPE &&
p[1] && p[2] && /* tests shouldn't be needed, but.. */
- isxdigit((unsigned char)p[1]) &&
- isxdigit((unsigned char)p[2]) &&
- (testcode = FROMASCII(from_hex(p[1])*16 + from_hex(p[2]))) && /* %00 no good*/
+ isxdigit(UCH(p[1])) &&
+ isxdigit(UCH(p[2])) &&
+ (testcode = (char) FROMASCII(from_hex(p[1])*16 +
+ from_hex(p[2]))) && /* %00 no good*/
strchr(do_trans, testcode)) { /* it's one of the ones we want */
*q++ = testcode;
p += 3;
@@ -898,7 +927,7 @@ PUBLIC char * HTUnEscapeSome ARGS2(
PRIVATE CONST unsigned char crfc[96] =
/* Bit 0 xalpha -- need "quoting"
-** Bit 1 xpalpha -- need \escape if quoted
+** Bit 1 xpalpha -- need \escape if quoted
*/
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
{ 1,0,3,0,0,0,0,0,1,1,0,0,1,0,1,0, /* 2x !"#$%&'()*+,-./ */
@@ -939,7 +968,7 @@ PUBLIC void HTMake822Word ARGS1(
}
if (!added)
return;
- result = (char *)calloc(1, (p-(*str) + added + 1));
+ result = typecallocn(char, p-(*str) + added + 1);
if (result == NULL)
outofmem(__FILE__, "HTMake822Word");
result[0] = '"';
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTParse.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTParse.h
index 46525bb8d9c..39f276a4704 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTParse.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTParse.h
@@ -36,9 +36,9 @@
** The following are valid mask values. The terms are the BNF names
** in the URL document.
*/
-#define URL_XALPHAS (unsigned char) 1
-#define URL_XPALPHAS (unsigned char) 2
-#define URL_PATH (unsigned char) 4
+#define URL_XALPHAS UCH(1)
+#define URL_XPALPHAS UCH(2)
+#define URL_PATH UCH(4)
/* Strip white space off a string. HTStrip()
@@ -123,7 +123,7 @@ extern char * HTEscape PARAMS((
CONST char * str,
unsigned char mask));
-/* Escape unsafe characters using % HTEscapeUnsafe()
+/* Escape unsafe characters using % HTEscapeUnsafe()
** --------------------------------
**
** This function takes a pointer to a string in which
@@ -134,7 +134,7 @@ extern char * HTEscape PARAMS((
** Unlike HTUnEscape(), this routine returns a malloc'd string.
*/
extern char * HTEscapeUnsafe PARAMS((
- CONST char * str));
+ CONST char * str));
/* Escape undesirable characters using % but space to +. HTEscapeSP()
** -----------------------------------------------------
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTPlain.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTPlain.c
index a1a8a13647a..1ef4ca57fbf 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTPlain.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTPlain.c
@@ -32,9 +32,9 @@
extern BOOL HTPassEightBitRaw;
extern BOOL HTPassHighCtrlRaw;
-extern HTCJKlang HTCJK;
PUBLIC int HTPlain_lastraw = -1;
+PRIVATE int HTPlain_bs_pending = 0; /* 1:bs 2:underline 3:underline+bs - kw */
/* HTML Object
** -----------
@@ -45,8 +45,8 @@ struct _HTStream {
/*
** The node_anchor UCInfo and handle for the input (PARSER) stage. - FM
*/
- LYUCcharset * inUCI;
- int inUCLYhndl;
+ LYUCcharset * inUCI;
+ int inUCLYhndl;
/*
** The node_anchor UCInfo and handle for the output (HTEXT) stage. - FM
*/
@@ -131,10 +131,14 @@ PRIVATE void HTPlain_put_character ARGS2(
HTPlain_lastraw = -1;
return;
}
- HTPlain_lastraw = c;
+ if (c == '\b' || c == '_' || HTPlain_bs_pending) {
+ HTPlain_write(me, &c, 1);
+ return;
+ }
+ HTPlain_lastraw = UCH(c);
if (c == '\r') {
HText_appendCharacter(me->text, '\n');
- } else if (TOASCII((unsigned char)c) >= 127) { /* S/390 -- gil -- 0305 */
+ } else if (TOASCII(UCH(c)) >= 127) { /* S/390 -- gil -- 0305 */
/*
** For now, don't repeat everything here
** that has been done below - KW
@@ -142,23 +146,23 @@ PRIVATE void HTPlain_put_character ARGS2(
HTPlain_write(me, &c, 1);
} else if (HTCJK != NOCJK) {
HText_appendCharacter(me->text, c);
- } else if (TOASCII((unsigned char)c) >= 127 && TOASCII((unsigned char)c) < 161 &&
+ } else if (TOASCII(UCH(c)) >= 127 && TOASCII(UCH(c)) < 161 &&
HTPassHighCtrlRaw) {
HText_appendCharacter(me->text, c);
- } else if ((unsigned char)c == CH_NBSP) { /* S/390 -- gil -- 0341 */
+ } else if (UCH(c) == CH_NBSP) { /* S/390 -- gil -- 0341 */
HText_appendCharacter(me->text, ' ');
- } else if ((unsigned char)c == CH_SHY) {
+ } else if (UCH(c) == CH_SHY) {
return;
- } else if (((unsigned char)c >= ' ' && TOASCII((unsigned char)c) < 127) ||
+ } else if ((UCH(c) >= ' ' && TOASCII(UCH(c)) < 127) ||
c == '\n' || c == '\t') {
HText_appendCharacter(me->text, c);
- } else if (TOASCII((unsigned char)c) > 160) {
+ } else if (TOASCII(UCH(c)) > 160) {
if (!HTPassEightBitRaw &&
!((me->outUCLYhndl == LATIN1) ||
(me->outUCI->enc & (UCT_CP_SUPERSETOF_LAT1)))) {
int len, high, low, i, diff = 1;
CONST char * name;
- UCode_t value = (UCode_t)FROMASCII((TOASCII((unsigned char)c) - 160));
+ UCode_t value = (UCode_t)FROMASCII((TOASCII(UCH(c)) - 160));
name = HTMLGetEntityName(value);
len = strlen(name);
@@ -228,6 +232,34 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
HText_appendCharacter(me->text, *p);
}
#else
+ if (*p == '\b') {
+ if (HTPlain_lastraw >= UCH(' ') &&
+ HTPlain_lastraw != '\r' && HTPlain_lastraw != '\n') {
+ if (!HTPlain_bs_pending) {
+ HTPlain_bs_pending = 1;
+ continue;
+ } else if (HTPlain_bs_pending == 2) {
+ HTPlain_bs_pending = 3;
+ continue;
+ }
+ }
+ if (HTPlain_bs_pending >= 2)
+ HText_appendCharacter(me->text, '_');
+ HTPlain_bs_pending = 0;
+ } else if (*p == '_') {
+ if (!HTPlain_bs_pending) {
+ HTPlain_bs_pending = 2;
+ HTPlain_lastraw = UCH(*p);
+ continue;
+#if 0
+ } else if (HTPlain_bs_pending != 2) {
+ HTPlain_bs_pending--; /* 1 -> 0, 3 -> 2 */
+ HTPlain_lastraw = UCH(*p);
+ continue;
+#endif
+ }
+ }
+
/*
** Try to handle lone LFs, CRLFs and lone CRs
** as newline, and to deal with control, ASCII,
@@ -238,7 +270,35 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
HTPlain_lastraw = -1;
continue;
}
- HTPlain_lastraw = *p;
+
+ if (HTPlain_bs_pending &&
+ !(UCH(*p) >= ' ' && *p != '\r' && *p != '\n' &&
+ (HTPlain_lastraw == UCH(*p) ||
+ HTPlain_lastraw == UCH('_') ||
+ *p == '_'))) {
+ if (HTPlain_bs_pending >= 2)
+ HText_appendCharacter(me->text, '_');
+ HTPlain_bs_pending = 0;
+ } else if (HTPlain_bs_pending == 1) {
+ HTPlain_bs_pending = 0;
+ continue; /* ignore last two of "X\bX" or "X\b_" - kw */
+ } else if (HTPlain_bs_pending == 3) {
+ if (*p == '_') {
+ HTPlain_bs_pending = 2;
+ continue; /* ignore last two of "_\b_" - kw */
+ } else {
+ HTPlain_bs_pending = 0;
+ /* ignore first two of "_\bX" - kw */
+ }
+ } else if (HTPlain_bs_pending == 2) {
+ HText_appendCharacter(me->text, '_');
+ if (*p == '_')
+ continue; /* keep second of "__" pending - kw */
+ HTPlain_bs_pending = 0;
+ } else {
+ HTPlain_bs_pending = 0;
+ }
+ HTPlain_lastraw = UCH(*p);
if (*p == '\r') {
HText_appendCharacter(me->text, '\n');
continue;
@@ -248,7 +308,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
** whenever that's appropriate. - FM
*/
c = *p;
- c_unsign = (unsigned char)c;
+ c_unsign = UCH(c);
code = (UCode_t)c_unsign;
saved_char_in = '\0';
/*
@@ -283,7 +343,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
code = me->utf_char;
if (code > 0 && code < 256) {
c = FROMASCII((char)code);
- c_unsign = (unsigned char)c;
+ c_unsign = UCH(c);
}
} else {
/*
@@ -349,7 +409,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
** to Unicode (if appropriate). - FM
*/
if (!(me->T.decode_utf8 &&
- (unsigned char)(*p) > 127)) {
+ UCH(*p) > 127)) {
#ifdef NOTDEFINED
if (me->T.strip_raw_char_in)
saved_char_in = c;
@@ -366,7 +426,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
saved_char_in = c;
if (code < 256) {
c = FROMASCII((char)code);
- c_unsign = (unsigned char)c;
+ c_unsign = UCH(c);
}
}
} else if (code < 32 && code != 0 &&
@@ -382,7 +442,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
saved_char_in = c;
if (code < 256) {
c = FROMASCII((char)code);
- c_unsign = (unsigned char)c;
+ c_unsign = UCH(c);
}
} else {
uck = -1;
@@ -400,7 +460,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
continue;
} else if (uck < 0) {
me->utf_buf[0] = '\0';
- code = (unsigned char)c;
+ code = UCH(c);
} else {
c = replace_buf[0];
if (c && replace_buf[1]) {
@@ -409,11 +469,11 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
}
}
me->utf_buf[0] = '\0';
- code = (unsigned char)c;
+ code = UCH(c);
} /* Next line end of ugly stuff for C0. - KW */
} else {
me->utf_buf[0] = '\0';
- code = (unsigned char)c;
+ code = UCH(c);
}
}
/*
@@ -454,8 +514,15 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
/*
** If neither HTPassHighCtrlRaw nor CJK is set, play it safe
** and ignore 173 (shy). - FM
+ ** Now only ignore it for color style, which doesn't handle it anyway.
+ ** Otherwise pass it on as LY_SOFT_HYPHEN and let HText deal with it.
+ ** It should be either ignored, or displayed as a hyphen if it was
+ ** indeed at the end of a line. Well it should. - kw
*/
} else if (code == CH_SHY) {
+#ifndef USE_COLOR_STYLE
+ HText_appendCharacter(me->text, LY_SOFT_HYPHEN);
+#endif
continue;
/*
** If we get to here, pass the displayable ASCII characters. - FM
@@ -478,12 +545,12 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
/******************************************************************
* I. LATIN-1 OR UCS2 TO DISPLAY CHARSET
******************************************************************/
- } else if ((chk = (me->T.trans_from_uni && code >= 160)) &&
+ } else if ((chk = (BOOL) (me->T.trans_from_uni && code >= 160)) &&
(uck = UCTransUniChar(code,
me->outUCLYhndl)) >= ' ' && /* S/390 -- gil -- 0464 */
uck < 256) {
- CTRACE(tfp, "UCTransUniChar returned 0x%.2lX:'%c'.\n",
- uck, FROMASCII((char)uck));
+ CTRACE((tfp, "UCTransUniChar returned 0x%.2lX:'%c'.\n",
+ uck, FROMASCII((char)uck)));
HText_appendCharacter(me->text, ((char)(uck & 0xff)));
} else if (chk &&
(uck == -4 ||
@@ -521,19 +588,19 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
}
#ifdef NOTDEFINED
} else if (me->T.strip_raw_char_in &&
- (unsigned char)*p >= 192 &&
- (unsigned char)*p < 255) {
+ UCH(*p) >= 192 &&
+ UCH(*p) < 255) {
/*
** KOI special: strip high bit, gives
** (somewhat) readable ASCII.
*/
HText_appendCharacter(me->text, (char)(*p & 0x7f));
#endif /* NOTDEFINED */
- /*
- ** If we don't actually want the character,
- ** make it safe and output that now. - FM
- */
- } else if ((c_unsign > 0 &&
+ /*
+ ** If we don't actually want the character,
+ ** make it safe and output that now. - FM
+ */
+ } else if ((c_unsign > 0 &&
(int) c_unsign < LYlowest_eightbit[me->outUCLYhndl]) ||
(me->T.trans_from_uni && !HTPassEightBitRaw)) {
/*
@@ -542,7 +609,7 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
** seek a translation for that. Otherwise, or if the
** translation fails, use UHHH notation. - FM
*/
- if ((chk = (me->outUCLYhndl !=
+ if ((chk = (BOOL) (me->outUCLYhndl !=
UCGetLYhndl_byMIME("us-ascii"))) &&
(uck = UCTransUniChar(code,
UCGetLYhndl_byMIME("us-ascii")))
@@ -550,9 +617,9 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
/*
** Got an ASCII character (yippey). - FM
*/
- c = FROMASCII((char)uck);
- HText_appendCharacter(me->text, c);
- } else if ((chk && uck == -4) &&
+ c = FROMASCII((char)uck);
+ HText_appendCharacter(me->text, c);
+ } else if ((chk && uck == -4) &&
(uck = UCTransUniCharStr(replace_buf,
60, code,
UCGetLYhndl_byMIME("us-ascii"),
@@ -565,12 +632,12 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
/*
** Ignore 8204 (zwnj) or 8205 (zwj), if we get to here. - FM
*/
- CTRACE(tfp, "HTPlain_write: Ignoring '%ld'.\n", code);
+ CTRACE((tfp, "HTPlain_write: Ignoring '%ld'.\n", code));
} else if (code == 8206 || code == 8207) {
/*
** Ignore 8206 (lrm) or 8207 (rlm), if we get to here. - FM
*/
- CTRACE(tfp, "HTPlain_write: Ignoring '%ld'.\n", code);
+ CTRACE((tfp, "HTPlain_write: Ignoring '%ld'.\n", code));
} else {
/*
** Out of luck, so use the UHHH notation (ugh). - FM
@@ -585,8 +652,8 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
** pass it. - FM
*/
} else if (c_unsign != 0 && c_unsign < 256) {
- HText_appendCharacter(me->text, c);
- }
+ HText_appendCharacter(me->text, c);
+ }
#endif /* REMOVE_CR_ONLY */
}
}
@@ -600,6 +667,8 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
PRIVATE void HTPlain_free ARGS1(
HTStream *, me)
{
+ if (HTPlain_bs_pending >= 2)
+ HText_appendCharacter(me->text, '_');
FREE(me);
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTRules.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTRules.c
index 97df34e6d33..f2b3432ee2f 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTRules.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTRules.c
@@ -15,6 +15,7 @@
** Bug Fix: in case of PASS, only one parameter to printf.
** 19 Sep 93 AL Added Access Authorization stuff.
** 1 Nov 93 AL Added htbin.
+** 25 May 99 KW Added redirect for lynx.
**
*/
@@ -35,10 +36,17 @@ typedef struct _rule {
HTRuleOp op;
char * pattern;
char * equiv;
+ char * condition_op; /* as strings - may be inefficient, */
+ char * condition; /* but this is not for a server - kw */
} rule;
#ifndef NO_RULES
+#include <HTTP.h> /* for redirecting_url, indirectly HTPermitRedir - kw */
+#include <LYGlobalDefs.h> /* for LYUserSpecifiedURL - kw */
+#include <LYUtils.h> /* for LYFixCursesOn - kw */
+#include <HTAlert.h>
+
/* Global variables
** ----------------
*/
@@ -61,44 +69,50 @@ PRIVATE rule * rule_tail = 0; /* Pointer to last on list */
** --------------------
**
** On entry,
-** pattern points to 0-terminated string containing a single "*"
+** pattern points to 0-terminated string containing a single "*"
** equiv points to the equivalent string with * for the
** place where the text matched by * goes.
** On exit,
-** returns 0 if success, -1 if error.
+** returns 0 if success, -1 if error.
*/
-PUBLIC int HTAddRule ARGS3(
+PUBLIC int HTAddRule ARGS5(
HTRuleOp, op,
CONST char *, pattern,
- CONST char *, equiv)
+ CONST char *, equiv,
+ CONST char *, cond_op,
+ CONST char *, cond)
{ /* BYTE_ADDRESSING removed and memory check - AS - 1 Sep 93 */
rule * temp;
- char * pPattern;
+ char * pPattern = NULL;
- temp = (rule *)malloc(sizeof(*temp));
+ temp = typecalloc(rule);
if (temp==NULL)
outofmem(__FILE__, "HTAddRule");
- pPattern = (char *)malloc(strlen(pattern)+1);
- if (pPattern==NULL)
- outofmem(__FILE__, "HTAddRule");
if (equiv) { /* Two operands */
- char * pEquiv = (char *)malloc(strlen(equiv)+1);
- if (pEquiv==NULL)
- outofmem(__FILE__, "HTAddRule");
+ char * pEquiv = NULL;
+ StrAllocCopy(pEquiv, equiv);
temp->equiv = pEquiv;
- strcpy(pEquiv, equiv);
} else {
temp->equiv = 0;
}
+ if (cond_op) {
+ StrAllocCopy(temp->condition_op, cond_op);
+ StrAllocCopy(temp->condition, cond);
+ }
+ StrAllocCopy(pPattern, pattern);
temp->pattern = pPattern;
temp->op = op;
- strcpy(pPattern, pattern);
if (equiv) {
- CTRACE(tfp, "Rule: For `%s' op %d `%s'\n", pattern, op, equiv);
+ CTRACE((tfp, "Rule: For `%s' op %d `%s'", pattern, op, equiv));
+ } else {
+ CTRACE((tfp, "Rule: For `%s' op %d", pattern, op));
+ }
+ if (cond_op) {
+ CTRACE((tfp, "\t%s %s\n", cond_op, NONNULL(cond)));
} else {
- CTRACE(tfp, "Rule: For `%s' op %d\n", pattern, op);
+ CTRACE((tfp, "\n"));
}
if (!rules) {
@@ -121,7 +135,7 @@ PUBLIC int HTAddRule ARGS3(
}
-/* Clear all rules HTClearRules()
+/* Clear all rules HTClearRules()
** ---------------
**
** On exit,
@@ -137,6 +151,8 @@ void HTClearRules NOARGS
rules = temp->next;
FREE(temp->pattern);
FREE(temp->equiv);
+ FREE(temp->condition_op);
+ FREE(temp->condition);
FREE(temp);
}
#ifndef PUT_ON_HEAD
@@ -144,7 +160,32 @@ void HTClearRules NOARGS
#endif
}
+PRIVATE BOOL rule_cond_ok ARGS1(
+ rule *, r)
+{
+ BOOL result;
+ if (!r->condition_op)
+ return YES;
+ if (strcmp(r->condition_op, "if") && strcmp(r->condition_op, "unless")) {
+ CTRACE((tfp, "....... rule ignored, unrecognized `%s'!\n",
+ r->condition_op));
+ return NO;
+ }
+ if (!strcmp(r->condition, "redirected"))
+ result = (BOOL) (redirection_attempts > 0);
+ else if (!strcmp(r->condition, "userspec"))
+ result = LYUserSpecifiedURL;
+ else {
+ CTRACE((tfp, "....... rule ignored, unrecognized `%s %s'!\n",
+ r->condition_op, NONNULL(r->condition)));
+ return NO;
+ }
+ if (!strcmp(r->condition_op, "if"))
+ return result;
+ else
+ return (BOOL) (!result);
+}
/* Translate by rules HTTranslate()
** ------------------
**
@@ -153,7 +194,7 @@ void HTClearRules NOARGS
** On entry,
** required points to a string whose equivalent value is neeed
** On exit,
-** returns the address of the equivalent string allocated from
+** returns the address of the equivalent string allocated from
** the heap which the CALLER MUST FREE. If no translation
** occured, then it is a copy of te original.
** NEW FEATURES:
@@ -169,6 +210,9 @@ char * HTTranslate ARGS1(
{
rule * r;
char *current = NULL;
+ char *msgtmp = NULL, *pMsg;
+ int proxy_none_flag = 0;
+ int permitredir_flag = 0;
StrAllocCopy(current, required);
HTAA_clearProtections(); /* Reset from previous call -- AL */
@@ -188,6 +232,9 @@ char * HTTranslate ARGS1(
} else /* Not wildcard */
if (*p != *q) continue; /* plain mismatch: go to next rule */
+ if (!rule_cond_ok(r)) /* check condition, next rule if false - kw */
+ continue;
+
switch (r->op) { /* Perform operation */
#ifdef ACCESS_AUTH
@@ -199,12 +246,12 @@ char * HTTranslate ARGS1(
char *eff_ids = NULL;
char *prot_file = NULL;
- CTRACE(tfp, "HTRule: `%s' matched %s %s: `%s'\n",
+ CTRACE((tfp, "HTRule: `%s' matched %s %s: `%s'\n",
current,
(r->op==HT_Protect ? "Protect" : "DefProt"),
"rule, setup",
(r->equiv ? r->equiv :
- (r->op==HT_Protect ?"DEFAULT" :"NULL!!")));
+ (r->op==HT_Protect ?"DEFAULT" :"NULL!!"))));
if (r->equiv) {
StrAllocCopy(local_copy, r->equiv);
@@ -225,61 +272,145 @@ char * HTTranslate ARGS1(
break;
#endif /* ACCESS_AUTH */
+ case HT_UserMsg: /* Produce message immediately */
+ LYFixCursesOn("show rule message:");
+ HTUserMsg2((r->equiv ? r->equiv : "Rule: %s"), current);
+ break;
+ case HT_InfoMsg: /* Produce messages immediately */
+ case HT_Progress:
+ case HT_Alert:
+ LYFixCursesOn("show rule message:"); /* and fall through */
+ case HT_AlwaysAlert:
+ pMsg = r->equiv ? r->equiv :
+ (r->op==HT_AlwaysAlert) ? "%s" : "Rule: %s";
+ if (strchr(pMsg, '%')) {
+ HTSprintf0(&msgtmp, pMsg, current);
+ pMsg = msgtmp;
+ }
+ switch (r->op) { /* Actually produce message */
+ case HT_InfoMsg: HTInfoMsg(pMsg); break;
+ case HT_Progress: HTProgress(pMsg); break;
+ case HT_Alert: HTAlert(pMsg); break;
+ case HT_AlwaysAlert: HTAlwaysAlert("Rule alert:", pMsg); break;
+ default: break;
+ }
+ FREE(msgtmp);
+ break;
+
+ case HT_PermitRedir: /* Set special flag */
+ permitredir_flag = 1;
+ CTRACE((tfp, "HTRule: Mark for redirection permitted\n"));
+ break;
+
case HT_Pass: /* Authorised */
- if (!r->equiv) {
- CTRACE(tfp, "HTRule: Pass `%s'\n", current);
- return current;
+ if (!r->equiv) {
+ if (proxy_none_flag) {
+ char * temp = NULL;
+ StrAllocCopy(temp, "NoProxy=");
+ StrAllocCat(temp, current);
+ FREE(current);
+ current = temp;
}
- /* Else fall through ...to map and pass */
+ CTRACE((tfp, "HTRule: Pass `%s'\n", current));
+ return current;
+ }
+ /* Else fall through ...to map and pass */
case HT_Map:
+ case HT_Redirect:
+ case HT_RedirectPerm:
if (*p == *q) { /* End of both strings, no wildcard */
- CTRACE(tfp, "For `%s' using `%s'\n", current, r->equiv);
+ CTRACE((tfp, "For `%s' using `%s'\n", current, r->equiv));
StrAllocCopy(current, r->equiv); /* use entire translation */
} else {
char * ins = strchr(r->equiv, '*'); /* Insertion point */
if (ins) { /* Consistent rule!!! */
- char * temp = (char *)malloc(
- strlen(r->equiv)-1 + m + 1);
- if (temp==NULL)
- outofmem(__FILE__, "HTTranslate"); /* NT & AS */
- strncpy(temp, r->equiv, ins-r->equiv);
- /* Note: temp may be unterminated now! */
- strncpy(temp+(ins-r->equiv), q, m); /* Matched bit */
- strcpy (temp+(ins-r->equiv)+m, ins+1); /* Last bit */
- CTRACE(tfp, "For `%s' using `%s'\n",
- current, temp);
+ char * temp = NULL;
+
+ HTSprintf0(&temp, "%.*s%.*s%s",
+ ins - r->equiv,
+ r->equiv,
+ m,
+ q,
+ ins + 1);
+ CTRACE((tfp, "For `%s' using `%s'\n",
+ current, temp));
FREE(current);
- current = temp; /* Use this */
+ current = temp; /* Use this */
} else { /* No insertion point */
- char * temp = (char *)malloc(strlen(r->equiv)+1);
- if (temp==NULL)
- outofmem(__FILE__, "HTTranslate"); /* NT & AS */
- strcpy(temp, r->equiv);
- CTRACE(tfp, "For `%s' using `%s'\n",
- current, temp);
+ char * temp = NULL;
+
+ StrAllocCopy(temp, r->equiv);
+ CTRACE((tfp, "For `%s' using `%s'\n",
+ current, temp));
FREE(current);
- current = temp; /* Use this */
+ current = temp; /* Use this */
} /* If no insertion point exists */
}
if (r->op == HT_Pass) {
- CTRACE(tfp, "HTRule: ...and pass `%s'\n",
- current);
+ if (proxy_none_flag) {
+ char * temp = NULL;
+ StrAllocCopy(temp, "NoProxy=");
+ StrAllocCat(temp, current);
+ FREE(current);
+ current = temp;
+ }
+ CTRACE((tfp, "HTRule: ...and pass `%s'\n",
+ current));
return current;
+ } else if (r->op == HT_Redirect) {
+ CTRACE((tfp, "HTRule: ...and redirect to `%s'\n",
+ current));
+ redirecting_url = current;
+ HTPermitRedir = (BOOL) (permitredir_flag == 1);
+ return (char *)0;
+ } else if (r->op == HT_RedirectPerm) {
+ CTRACE((tfp, "HTRule: ...and redirect like 301 to `%s'\n",
+ current));
+ redirecting_url = current;
+ permanent_redirection = TRUE;
+ HTPermitRedir = (BOOL) (permitredir_flag == 1);
+ return (char *)0;
+ }
+ break;
+
+ case HT_UseProxy:
+ if (r->equiv && 0==strcasecomp(r->equiv, "none")) {
+ CTRACE((tfp, "For `%s' will not use proxy\n", current));
+ proxy_none_flag = 1;
+ } else if (proxy_none_flag) {
+ CTRACE((tfp, "For `%s' proxy server ignored: %s\n",
+ current,
+ NONNULL(r->equiv)));
+ } else {
+ char * temp = NULL;
+ StrAllocCopy(temp, "Proxied=");
+ StrAllocCat(temp, r->equiv);
+ StrAllocCat(temp, current);
+ CTRACE((tfp, "HTRule: proxy server found: %s\n",
+ NONNULL(r->equiv)));
+ FREE(current);
+ return temp;
}
break;
case HT_Invalid:
case HT_Fail: /* Unauthorised */
- CTRACE(tfp, "HTRule: *** FAIL `%s'\n",
- current);
+ CTRACE((tfp, "HTRule: *** FAIL `%s'\n",
+ current));
FREE(current);
return (char *)0;
} /* if tail matches ... switch operation */
} /* loop over rules */
+ if (proxy_none_flag) {
+ char * temp = NULL;
+ StrAllocCopy(temp, "NoProxy=");
+ StrAllocCat(temp, current);
+ return temp;
+ }
return current;
}
@@ -298,6 +429,7 @@ PUBLIC int HTSetConfiguration ARGS1(
char * line = NULL;
char * pointer = line;
char *word1, *word2, *word3;
+ char *cond_op=NULL, *cond=NULL;
float quality, secs, secs_per_byte;
int maxbytes;
int status;
@@ -334,16 +466,16 @@ PUBLIC int HTSetConfiguration ARGS1(
else status = 0;
HTSetSuffix(word2, word3,
encoding ? encoding : "binary",
- status >= 1? quality : 1.0);
+ status >= 1? quality : (float) 1.0);
} else if (0==strcasecomp(word1, "presentation")) {
if (pointer) status = sscanf(pointer, "%f%f%f%d",
&quality, &secs, &secs_per_byte, &maxbytes);
else status = 0;
HTSetPresentation(word2, word3,
- status >= 1? quality : 1.0,
+ status >= 1 ? quality : 1.0,
status >= 2 ? secs : 0.0,
- status >= 3 ? secs_per_byte : 0.0,
+ status >= 3 ? secs_per_byte : 0.0,
status >= 4 ? maxbytes : 0 );
} else if (0==strncasecomp(word1, "htbin", 5) ||
@@ -357,13 +489,121 @@ PUBLIC int HTSetConfiguration ARGS1(
op = 0==strcasecomp(word1, "map") ? HT_Map
: 0==strcasecomp(word1, "pass") ? HT_Pass
: 0==strcasecomp(word1, "fail") ? HT_Fail
+ : 0==strcasecomp(word1, "redirect") ? HT_Redirect
+ : 0==strncasecomp(word1, "redirectperm", 12) ? HT_RedirectPerm
+ : 0==strcasecomp(word1, "redirecttemp") ? HT_Redirect
+ : 0==strcasecomp(word1, "permitredirection") ? HT_PermitRedir
+ : 0==strcasecomp(word1, "useproxy") ? HT_UseProxy
+ : 0==strcasecomp(word1, "alert") ? HT_Alert
+ : 0==strcasecomp(word1, "alwaysalert") ? HT_AlwaysAlert
+ : 0==strcasecomp(word1, "progress") ? HT_Progress
+ : 0==strcasecomp(word1, "usermsg") ? HT_UserMsg
+ : 0==strcasecomp(word1, "infomsg") ? HT_InfoMsg
: 0==strcasecomp(word1, "defprot") ? HT_DefProt
: 0==strcasecomp(word1, "protect") ? HT_Protect
: HT_Invalid;
if (op==HT_Invalid) {
fprintf(stderr, "HTRule: %s '%s'\n", RULE_INCORRECT, config);
} else {
- HTAddRule(op, word2, word3);
+ switch (op) {
+ case HT_Fail: /* never a or other 2nd parameter */
+ case HT_PermitRedir:
+ cond_op = word3;
+ if (cond_op && *cond_op) {
+ word3 = NULL;
+ cond = HTNextField(&pointer);
+ }
+ break;
+
+ case HT_Pass: /* possibly a URL2 */
+ if (word3 && (!strcasecomp(word3, "if") ||
+ !strcasecomp(word3, "unless"))) {
+ cond_op = word3;
+ word3 = NULL;
+ cond = HTNextField(&pointer);
+ break;
+ } /* else fall through */
+
+ case HT_Map: /* always a URL2 (or other 2nd parameter) */
+ case HT_Redirect:
+ case HT_RedirectPerm:
+ case HT_UseProxy:
+ cond_op = HTNextField(&pointer);
+ /* check for extra status word in "Redirect" */
+ if (op==HT_Redirect && 0==strcasecomp(word1, "redirect") &&
+ cond_op &&
+ strcasecomp(cond_op, "if") &&
+ strcasecomp(cond_op, "unless")) {
+ if (0==strcmp(word2, "301") ||
+ 0==strcasecomp(word2, "permanent")) {
+ op = HT_RedirectPerm;
+ } else if (!(0==strcmp(word2, "302") ||
+ 0==strcmp(word2, "303") ||
+ 0==strcasecomp(word2, "temp") ||
+ 0==strcasecomp(word2, "seeother"))) {
+ CTRACE((tfp, "Rule: Ignoring `%s' in Redirect\n", word2));
+ }
+ word2 = word3;
+ word3 = cond_op; /* cond_op isn't condition op after all */
+ cond_op = HTNextField(&pointer);
+ }
+ if (cond_op && *cond_op)
+ cond = HTNextField(&pointer);
+ break;
+
+ case HT_Progress:
+ case HT_InfoMsg:
+ case HT_UserMsg:
+ case HT_Alert:
+ case HT_AlwaysAlert:
+ cond_op = HTNextField(&pointer);
+ if (cond_op && *cond_op)
+ cond = HTNextField(&pointer);
+ if (word3) { /* Fix string with too may %s - kw */
+ char *cp = word3, *cp1, *cp2;
+ while ((cp1=strchr(cp, '%'))) {
+ if (cp1[1] == '\0') {
+ *cp1 = '\0';
+ break;
+ } else if (cp1[1] == '%') {
+ cp = cp1 + 2;
+ continue;
+ } else while ((cp2=strchr(cp1+2, '%'))) {
+ if (cp2[1] == '\0') {
+ *cp2 = '\0';
+ break;
+ } else if (cp2[1] == '%') {
+ cp1 = cp2;
+ } else {
+ *cp2 = '?'; /* replace bad % */
+ cp1 = cp2;
+ }
+ }
+ break;
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ if (cond_op && cond && *cond && !strcasecomp(cond_op, "unless")) {
+ cond_op = "unless";
+ } else if (cond_op && cond && *cond &&
+ !strcasecomp(cond_op, "if")) {
+ cond_op = "if";
+ } else if (cond_op || cond) {
+ fprintf(stderr, "HTRule: %s '%s'\n", RULE_INCORRECT, config);
+ FREE(line); /* syntax error, condition is a mess - kw */
+ return -2; /* NB unrecognized cond passes here - kw */
+ }
+ if (cond && !strncasecomp(cond, "redirected", strlen(cond))) {
+ cond = "redirected"; /* recognized, canonical case - kw */
+ } else if (cond && strlen(cond) >= 8 &&
+ !strncasecomp(cond, "userspecified", strlen(cond))) {
+ cond = "userspec"; /* also allow abbreviation - kw */
+ }
+ HTAddRule(op, word2, word3, cond_op, cond);
}
}
FREE(line);
@@ -379,7 +619,7 @@ PUBLIC int HTSetConfiguration ARGS1(
** On exit,
** Any existing rules will have been kept.
** Any new rules will have been loaded.
-** Returns 0 if no error, 0 if error!
+** Returns 0 if no error, 0 if error!
**
** Bugs:
** The strings may not contain spaces.
@@ -388,11 +628,11 @@ PUBLIC int HTSetConfiguration ARGS1(
int HTLoadRules ARGS1(
CONST char *, filename)
{
- FILE * fp = fopen(filename, "r");
+ FILE * fp = fopen(filename, TXT_R);
char line[LINE_LENGTH+1];
if (!fp) {
- CTRACE(tfp, "HTRules: Can't open rules file %s\n", filename);
+ CTRACE((tfp, "HTRules: Can't open rules file %s\n", filename));
return -1; /* File open error */
}
for(;;) {
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTRules.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTRules.h
index fce782f8a4e..fb4a05d831e 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTRules.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTRules.h
@@ -22,13 +22,22 @@
#include <HTUtils.h>
#endif
-typedef enum _HTRuleOp {
+typedef enum {
HT_Invalid,
HT_Map,
HT_Pass,
HT_Fail,
HT_DefProt,
- HT_Protect
+ HT_Protect,
+ HT_Progress,
+ HT_InfoMsg,
+ HT_UserMsg,
+ HT_Alert,
+ HT_AlwaysAlert,
+ HT_Redirect,
+ HT_RedirectPerm,
+ HT_PermitRedir,
+ HT_UseProxy
} HTRuleOp;
#ifndef NO_RULES
@@ -57,7 +66,14 @@ HTAddRule: Add rule to the list
pattern points to 0-terminated string containing a single "*"
equiv points to the equivalent string with * for the place where the
- text matched by * goes.
+ text matched by * goes; or to other 2nd parameter
+ meaning depends on op).
+
+ cond_op, additional condition for applying rule; cond_op should
+ cond be either NULL (no additional condition), or one of
+ the strings "if" or "unless"; if cond_op is not NULL,
+ cond should point to a recognized condition keyword
+ (as a string) such as "userspec", "redirected".
ON EXIT,
@@ -68,7 +84,12 @@ HTAddRule: Add rule to the list
large.
*/
-extern int HTAddRule PARAMS((HTRuleOp op, CONST char * pattern, CONST char * equiv));
+extern int HTAddRule PARAMS((
+ HTRuleOp op,
+ CONST char * pattern,
+ CONST char * equiv,
+ CONST char * cond_op,
+ CONST char * cond));
/*
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStream.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStream.h
index dd18e40b348..868e0f419c7 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStream.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStream.h
@@ -54,6 +54,17 @@ typedef struct _HTStreamClass {
}HTStreamClass;
+/*
+
+ Generic Error Stream
+
+ The Error stream simply signals an error on all output methods.
+ This can be used to stop a stream as soon as data arrives, for
+ example from the network.
+
+ */
+extern HTStream * HTErrorStream NOPARAMS;
+
#endif /* HTSTREAM_H */
/*
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTString.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTString.c
index 90b6665bb3e..210eedcf641 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTString.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTString.c
@@ -13,13 +13,20 @@
#include <LYLeaks.h>
#include <LYStrings.h>
-PUBLIC int WWW_TraceFlag = 0; /* Global trace flag for ALL W3 code */
+#ifndef NO_LYNX_TRACE
+PUBLIC BOOLEAN WWW_TraceFlag = 0; /* Global trace flag for ALL W3 code */
+PUBLIC int WWW_TraceMask = 0; /* Global trace flag for ALL W3 code */
+#endif
#ifndef VC
#define VC "unknown"
#endif /* !VC */
+#ifdef _WINDOWS
+CONST char * HTLibraryVersion = "2.14FM"; /* String for help screen etc */
+#else
PUBLIC CONST char * HTLibraryVersion = VC; /* String for help screen etc */
+#endif
/*
** strcasecomp8 is a variant of strcasecomp (below)
@@ -73,8 +80,82 @@ PUBLIC int strncasecomp8 ARGS3(
}
/*NOTREACHED*/
}
+
#ifndef VM /* VM has these already it seems */
+#ifdef SH_EX /* 1997/12/23 (Tue) 16:40:31 */
+
+/*
+ * This array is designed for mapping upper and lower case letter
+ * together for a case independent comparison. The mappings are
+ * based upon ascii character sequences.
+ */
+static unsigned char charmap[] = {
+ '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
+ '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
+ '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
+ '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
+ '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
+ '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
+ '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
+ '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
+ '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+ '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+ '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+ '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
+ '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
+ '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
+ '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
+ '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
+ '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
+ '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
+ '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
+ '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
+ '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
+ '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
+ '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
+ '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
+ '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
+ '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
+ '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327',
+ '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337',
+ '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
+ '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
+ '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
+ '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
+};
+
+PUBLIC int strcasecomp ARGS2(
+ CONST char*, s1,
+ CONST char*, s2)
+{
+ register unsigned char *cm = charmap;
+ register unsigned char *us1 = (unsigned char *)s1;
+ register unsigned char *us2 = (unsigned char *)s2;
+
+ while (cm[*us1] == cm[*us2++])
+ if (*us1++ == '\0')
+ return(0);
+ return (cm[*us1] - cm[*--us2]);
+}
+
+PUBLIC int strncasecomp ARGS3(
+ CONST char*, a,
+ CONST char*, b,
+ int, n)
+{
+ register unsigned char *cm = charmap;
+ register unsigned char *us1 = (unsigned char *)a;
+ register unsigned char *us2 = (unsigned char *)b;
+
+ while ((long)(--n) >= 0 && cm[*us1] == cm[*us2++])
+ if (*us1++ == '\0')
+ return(0);
+ return ((long)n < 0 ? 0 : cm[*us1] - cm[*--us2]);
+}
+
+#else /* SH_EX */
+
/* Strings of any length
** ---------------------
*/
@@ -120,6 +201,8 @@ PUBLIC int strncasecomp ARGS3(
}
/*NOTREACHED*/
}
+
+#endif /* SH_EX */
#endif /* VM */
#ifdef NOT_ASCII
@@ -135,7 +218,7 @@ PUBLIC int AS_casecomp ARGS2(
for ( ; ; p++, q++) {
if (!(*p && *q))
- return ((unsigned char) *p - (unsigned char) *q);
+ return (UCH(*p) - UCH(*q));
diff = TOASCII(TOLOWER(*p))
- TOASCII(TOLOWER(*q));
if (diff)
@@ -159,7 +242,7 @@ PUBLIC int AS_ncmp ARGS3(
for ( ; (p-a) < n; p++, q++) {
if (!(*p && *q))
- return ((unsigned char) *p - (unsigned char) *q);
+ return (UCH(*p) - UCH(*q));
diff = TOASCII(*p)
- TOASCII(*q);
if (diff)
@@ -275,7 +358,7 @@ PUBLIC char * HTNextField ARGS1(
** On entry,
** *pstr points to a string to be parsed.
** delims lists characters to be recognized as delimiters.
-** If NULL default is white white space "," ";" or "=".
+** If NULL, default is white space "," ";" or "=".
** The word can optionally be quoted or enclosed with
** chars from bracks.
** Comments surrrounded by '(' ')' are filtered out
@@ -283,7 +366,7 @@ PUBLIC char * HTNextField ARGS1(
** ' ' or '(' in delims or bracks.
** bracks lists bracketing chars. Some are recognized as
** special, for those give the opening char.
-** If NULL defaults to <"> and "<" ">".
+** If NULL, defaults to <"> and "<" ">".
** found points to location to fill with the ending delimiter
** found, or is NULL.
**
@@ -298,7 +381,7 @@ PUBLIC char * HTNextTok ARGS4(
char **, pstr,
CONST char *, delims,
CONST char *, bracks,
- char *, found)
+ char *, found)
{
char * p = *pstr;
char * start = NULL;
@@ -310,9 +393,9 @@ PUBLIC char * HTNextTok ARGS4(
if (!delims) delims = " ;,=" ;
if (!bracks) bracks = "<\"" ;
- get_blanks = (!strchr(delims,' ') && !strchr(bracks,' '));
- get_comments = (strchr(bracks,'(') != NULL);
- skip_comments = (!get_comments && !strchr(delims,'(') && !get_blanks);
+ get_blanks = (BOOL) (!strchr(delims,' ') && !strchr(bracks,' '));
+ get_comments = (BOOL) (strchr(bracks,'(') != NULL);
+ skip_comments = (BOOL) (!get_comments && !strchr(delims,'(') && !get_blanks);
#define skipWHITE(c) (!get_blanks && WHITE(c))
while (*p && skipWHITE(*p))
@@ -350,9 +433,9 @@ PUBLIC char * HTNextTok ARGS4(
if (!*p || (!strchr(bracks,*p) && strchr(delims,*p))) {
break;
} else
- get_closing_char_too = (strchr(bracks,*p) != NULL);
+ get_closing_char_too = (BOOL) (strchr(bracks,*p) != NULL);
}
- } else if (strchr(bracks,*p)) { /* quoted or bracketted field */
+ } else if (strchr(bracks,*p)) { /* quoted or bracketed field */
switch (*p) {
case '<': closer = '>'; break;
case '[': closer = ']'; break;
@@ -368,16 +451,9 @@ PUBLIC char * HTNextTok ARGS4(
if (!*p || (!strchr(bracks,*p) && strchr(delims,*p))) {
break;
} else
- get_closing_char_too = (strchr(bracks,*p) != NULL);
+ get_closing_char_too = (BOOL) (strchr(bracks,*p) != NULL);
} else
break; /* kr95-10-9: needs to stop here */
-#if 0
- } else if (*p == '<') { /* quoted field */
- if (!start) start = ++p;
- for(;*p && *p!='>'; p++)
- if (*p == '\\' && *(p+1)) p++; /* Skip escaped chars */
- break; /* kr95-10-9: needs to stop here */
-#endif
} else { /* Spool field */
if (!start) start = p;
while(*p && !skipWHITE(*p) && !strchr(bracks,*p) &&
@@ -416,6 +492,16 @@ PRIVATE char *HTAlloc ARGS2(char *, ptr, size_t, length)
}
/*
+ * If SAVE_TIME_NOT_SPACE is defined, StrAllocVsprintf will hang on to
+ * its temporary string buffers instead of allocating and freeing them
+ * in each invocation. They only grow and never shrink, and won't be
+ * cleaned up on exit. - kw
+ */
+#if defined(_REENTRANT) || defined(_THREAD_SAFE) || defined(LY_FIND_LEAKS)
+#undef SAVE_TIME_NOT_SPACE
+#endif
+
+/*
* Replacement for sprintf, allocates buffer on the fly according to what's needed
* for its arguments. Unlike sprintf, this always concatenates to the destination
* buffer, so we do not have to provide both flavors.
@@ -433,27 +519,54 @@ typedef enum { Flags, Width, Prec, Type, Format } PRINTF;
#define GROW_EXPR(n) (((n) * 3) / 2)
#define GROW_SIZE 256
-PRIVATE char * StrAllocVsprintf ARGS4(
+PUBLIC_IF_FIND_LEAKS char * StrAllocVsprintf ARGS4(
char **, pstr,
size_t, dst_len,
CONST char *, fmt,
va_list *, ap)
{
+#ifdef SAVE_TIME_NOT_SPACE
+ static size_t tmp_len = 0;
+ static size_t fmt_len = 0;
+ static char *tmp_ptr = NULL;
+ static char *fmt_ptr = NULL;
+#else
size_t tmp_len = GROW_SIZE;
- size_t have, need;
char *tmp_ptr = 0;
char *fmt_ptr;
+#endif /* SAVE_TIME_NOT_SPACE */
+ size_t have, need;
char *dst_ptr = *pstr;
CONST char *format = fmt;
if (fmt == 0 || *fmt == '\0')
return 0;
+#ifdef USE_VASPRINTF
+ if (pstr && !dst_len) {
+ if (*pstr)
+ FREE(*pstr);
+ if (vasprintf(pstr, fmt, *ap) >= 0) {
+ mark_malloced(*pstr, strlen(*pstr)+1);
+ return(*pstr);
+ }
+ }
+#endif /* USE_VASPRINTF */
+
need = strlen(fmt) + 1;
+#ifdef SAVE_TIME_NOT_SPACE
+ if (!fmt_ptr || fmt_len < need*NUM_WIDTH) {
+ fmt_ptr = HTAlloc(fmt_ptr, fmt_len = need*NUM_WIDTH);
+ }
+ if (!tmp_ptr || tmp_len < GROW_SIZE) {
+ tmp_ptr = HTAlloc(tmp_ptr, tmp_len = GROW_SIZE);
+ }
+#else
if ((fmt_ptr = malloc(need*NUM_WIDTH)) == 0
|| (tmp_ptr = malloc(tmp_len)) == 0) {
outofmem(__FILE__, "StrAllocVsprintf");
}
+#endif /* SAVE_TIME_NOT_SPACE */
if (dst_ptr == 0) {
dst_ptr = HTAlloc(dst_ptr, have = GROW_SIZE + need);
@@ -482,7 +595,7 @@ PRIVATE char * StrAllocVsprintf ARGS4(
while (*++fmt != '\0' && !done) {
fmt_ptr[f++] = *fmt;
- if (isdigit(*fmt)) {
+ if (isdigit(UCH(*fmt))) {
int num = *fmt - '0';
if (state == Flags && num != 0)
state = Width;
@@ -506,7 +619,7 @@ PRIVATE char * StrAllocVsprintf ARGS4(
}
sprintf(&fmt_ptr[--f], "%d", ival);
f = strlen(fmt_ptr);
- } else if (isalpha(*fmt)) {
+ } else if (isalpha(UCH(*fmt))) {
done = TRUE;
switch (*fmt) {
case 'Z': /* FALLTHRU */
@@ -535,11 +648,6 @@ PRIVATE char * StrAllocVsprintf ARGS4(
case 'E': /* FALLTHRU */
case 'g': /* FALLTHRU */
case 'G': /* FALLTHRU */
-#if 0 /* we don't need this, it doesn't work on SunOS 4.x */
- if (type == 'L')
- VA_FLOAT(long double);
- else
-#endif
VA_FLOAT(double);
used = 'f';
break;
@@ -562,8 +670,8 @@ PRIVATE char * StrAllocVsprintf ARGS4(
used = 0;
break;
default:
- CTRACE(tfp, "unknown format character '%c' in %s\n",
- *fmt, format);
+ CTRACE((tfp, "unknown format character '%c' in %s\n",
+ *fmt, format));
break;
}
} else if (*fmt == '.') {
@@ -580,16 +688,21 @@ PRIVATE char * StrAllocVsprintf ARGS4(
case 'f':
if (width < prec + NUM_WIDTH)
width = prec + NUM_WIDTH;
+ /* FALLTHRU */
case 'i':
+ /* FALLTHRU */
case 'p':
if (width < prec + 2)
width = prec + 2; /* leading sign/space/zero, "0x" */
+ break;
case 'c':
+ break;
case '%':
break;
default:
if (width < prec)
width = prec;
+ break;
}
}
if (width >= (int)tmp_len) {
@@ -623,19 +736,27 @@ PRIVATE char * StrAllocVsprintf ARGS4(
}
}
+#ifndef SAVE_TIME_NOT_SPACE
FREE(tmp_ptr);
FREE(fmt_ptr);
+#endif
dst_ptr[dst_len] = '\0';
if (pstr)
- *pstr = dst_ptr;
+ *pstr = dst_ptr;
return (dst_ptr);
}
+#undef SAVE_TIME_NOT_SPACE
/*
* Replacement for sprintf, allocates buffer on the fly according to what's needed
* for its arguments. Unlike sprintf, this always concatenates to the destination
* buffer.
*/
+/* Note: if making changes, also check the memory tracking version
+ * LYLeakHTSprintf in LYLeaks.c. - kw */
+#ifdef HTSprintf /* if hidden by LYLeaks stuff */
+#undef HTSprintf
+#endif
#if ANSI_VARARGS
PUBLIC char * HTSprintf (char ** pstr, CONST char * fmt, ...)
#else
@@ -667,6 +788,11 @@ PUBLIC char * HTSprintf (va_alist)
* needed for its arguments. Like sprintf, this always resets the destination
* buffer.
*/
+/* Note: if making changes, also check the memory tracking version
+ * LYLeakHTSprintf0 in LYLeaks.c. - kw */
+#ifdef HTSprintf0 /* if hidden by LYLeaks stuff */
+#undef HTSprintf0
+#endif
#if ANSI_VARARGS
PUBLIC char * HTSprintf0 (char ** pstr, CONST char * fmt, ...)
#else
@@ -683,6 +809,15 @@ PUBLIC char * HTSprintf0 (va_alist)
char ** pstr = va_arg(ap, char **);
CONST char * fmt = va_arg(ap, CONST char *);
#endif
+#ifdef USE_VASPRINTF
+ if (pstr) {
+ if (*pstr)
+ FREE(*pstr);
+ if (vasprintf(pstr, fmt, ap) >= 0) /* else call outofmem?? */
+ mark_malloced(*pstr, strlen(*pstr)+1);
+ result = *pstr;
+ } else
+#endif /* USE_VASPRINTF */
result = StrAllocVsprintf(pstr, 0, fmt, &ap);
}
va_end(ap);
@@ -708,7 +843,7 @@ PUBLIC char *HTQuoteParameter ARGS1(
for (i=0; i < last; ++i)
if (strchr("\\&#$^*?(){}<>\"';`|", parameter[i]) != 0
- || isspace(parameter[i]))
+ || isspace(UCH(parameter[i])))
++quoted;
result = (char *)malloc(last + 5*quoted + 3);
@@ -725,10 +860,14 @@ PUBLIC char *HTQuoteParameter ARGS1(
result[n++] = parameter[i];
result[n++] = D_QUOTE;
result[n++] = S_QUOTE;
- } else if (parameter[i] == '\\') {
- result[n++] = parameter[i];
- result[n++] = parameter[i];
} else {
+ /* Note: No special handling of other characters, including
+ backslash, since we are constructing a single-quoted string!
+ Backslash has no special escape meaning within those for sh
+ and compatible shells, so trying to escape a backslash by
+ doubling it is unnecessary and would be interpreted by the
+ shell as an additional data character. - kw 2000-05-02
+ */
result[n++] = parameter[i];
}
}
@@ -806,12 +945,12 @@ PUBLIC void HTAddXpand ARGS4(
if (HTIsParam(next)) {
if (next != last) {
size_t len = (next - last)
- + ((*result != 0) ? strlen(*result) : 0);
+ + ((*result != 0) ? strlen(*result) : 0);
HTSACat(result, last);
(*result)[len] = 0;
}
HTSACat(result, parameter);
- CTRACE(tfp, "PARAM-EXP:%s\n", *result);
+ CTRACE((tfp, "PARAM-EXP:%s\n", *result));
return;
}
next++;
@@ -840,7 +979,9 @@ PUBLIC void HTAddParam ARGS4(
if (number > 0) {
CONST char *last = HTAfterCommandArg(command, number - 1);
CONST char *next = last;
+#if USE_QUOTED_PARAMETER
char *quoted;
+#endif
if (number <= 1) {
FREE(*result);
@@ -851,7 +992,7 @@ PUBLIC void HTAddParam ARGS4(
if (HTIsParam(next)) {
if (next != last) {
size_t len = (next - last)
- + ((*result != 0) ? strlen(*result) : 0);
+ + ((*result != 0) ? strlen(*result) : 0);
HTSACat(result, last);
(*result)[len] = 0;
}
@@ -862,7 +1003,7 @@ PUBLIC void HTAddParam ARGS4(
#else
HTSACat(result, parameter);
#endif
- CTRACE(tfp, "PARAM-ADD:%s\n", *result);
+ CTRACE((tfp, "PARAM-ADD:%s\n", *result));
return;
}
next++;
@@ -888,5 +1029,67 @@ PUBLIC void HTEndParam ARGS3(
if (last[0] != 0) {
HTSACat(result, last);
}
- CTRACE(tfp, "PARAM-END:%s\n", *result);
+ CTRACE((tfp, "PARAM-END:%s\n", *result));
+}
+
+
+#ifdef EXP_FILE_UPLOAD
+/* bstring Allocate and Concatenate
+*/
+
+/* Allocate a new copy of a bstring, and returns it
+*/
+PUBLIC void HTSABCopy ARGS3(
+ bstring**, dest,
+ CONST char *, src,
+ int, len)
+{
+ bstring *t;
+ CTRACE((tfp, "HTSABCopy(%p, %p, %d)\n", dest, src, len));
+ /* if we already have a bstring ** ... */
+ if (dest) {
+ /* ... with a valid bstring *, free it ... */
+ if (*dest) {
+ FREE((*dest)->str);
+ FREE(*dest);
+ }
+ *dest = malloc(sizeof(bstring));
+ if (src) {
+ CTRACE((tfp, "%% [%s]\n", src));
+ t = (bstring*) malloc(sizeof(bstring));
+ if (t == NULL)
+ outofmem(__FILE__, "HTSABCopy");
+ t->str = (char *) malloc (len);
+ if (t->str == NULL)
+ outofmem(__FILE__, "HTSABCopy");
+ memcpy (t->str, src, len);
+ t->len = len;
+ *dest = t;
+ }
+ }
+}
+
+PUBLIC void HTSABCat ARGS3(
+ bstring **, dest,
+ CONST char *, src,
+ int, len)
+{
+ bstring *t = *dest;
+ if (src) {
+ if (t) {
+ int length = t->len;
+ t->str = (char *)realloc(t->str, length + len);
+ } else {
+ t = typecalloc(bstring);
+ if (t == NULL)
+ outofmem(__FILE__, "HTSACat");
+ t->str = (char *)malloc(len);
+ }
+ if (t->str == NULL)
+ outofmem(__FILE__, "HTSACat");
+ memcpy (t->str + t->len, src, len);
+ t->len += len;
+ *dest = t;
+ }
}
+#endif /* EXP_FILE_UPLOAD */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTString.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTString.h
index 2891b29544c..53c52cd6792 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTString.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTString.h
@@ -11,8 +11,6 @@
#include <HTUtils.h>
#endif /* HTUTILS_H */
-extern int WWW_TraceFlag; /* Global flag for all W3 trace */
-
extern CONST char * HTLibraryVersion; /* String for help screen etc */
/*
@@ -81,7 +79,15 @@ extern char * HTSprintf () GCC_PRINTFLIKE(2,3);
extern char * HTSprintf0 () GCC_PRINTFLIKE(2,3);
#endif
-#if defined(VMS) || defined(DOSPATH) || defined(__EMX__)
+#if defined(LY_FIND_LEAKS) /* private otherwise */
+extern char * StrAllocVsprintf PARAMS((
+ char ** pstr,
+ size_t len,
+ CONST char * fmt,
+ va_list * ap));
+#endif
+
+#if (defined(VMS) || defined(DOSPATH) || defined(__EMX__)) && !defined(__CYGWIN__)
#define USE_QUOTED_PARAMETER 0
#else
#define USE_QUOTED_PARAMETER 1
@@ -102,4 +108,16 @@ extern void HTEndParam PARAMS((char ** result, CONST char * command, int number)
/* Force an option, with leading blanks, to be appended without quoting them */
#define HTOptParam(result, command, number, parameter) HTSACat(result, parameter)
+/* Binary copy and concat */
+#ifdef EXP_FILE_UPLOAD
+
+typedef struct {
+ char *str;
+ int len;
+} bstring;
+
+extern void HTSABCopy PARAMS((bstring** dest, CONST char * src, int len));
+extern void HTSABCat PARAMS((bstring ** dest, CONST char * src, int len));
+#endif
+
#endif /* HTSTRING_H */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStyle.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStyle.c
index c5cabf78a11..2e8494d237b 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStyle.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStyle.c
@@ -186,7 +186,7 @@ HTStyle * HTStyleNamed ARGS2 (HTStyleSheet *,self, CONST char *,name)
HTStyle * scan;
for (scan=self->styles; scan; scan=scan->next)
if (0==strcmp(scan->name, name)) return scan;
- CTRACE(tfp, "StyleSheet: No style named `%s'\n", name);
+ CTRACE((tfp, "StyleSheet: No style named `%s'\n", name));
return NULL;
}
@@ -237,8 +237,8 @@ HTStyle * HTStyleForRun (HTStyleSheet *self, NXRun *run)
}
}
}
- CTRACE(tfp, "HTStyleForRun: Best match for style is %d out of 18\n",
- bestMatch);
+ CTRACE((tfp, "HTStyleForRun: Best match for style is %d out of 18\n",
+ bestMatch));
return best;
}
#endif /* NEXT_SUPRESS */
@@ -329,7 +329,7 @@ HTStyleSheet * HTStyleSheetRead(HTStyleSheet * self, NXStream * stream)
HTStyle * style;
char styleName[80];
NXScanf(stream, " %d ", &numStyles);
- CTRACE(tfp, "Stylesheet: Reading %d styles\n", numStyles);
+ CTRACE((tfp, "Stylesheet: Reading %d styles\n", numStyles));
for (i=0; i<numStyles; i++) {
NXScanf(stream, "%s", styleName);
style = HTStyleNamed(self, styleName);
@@ -357,7 +357,7 @@ HTStyleSheet * HTStyleSheetWrite(HTStyleSheet * self, NXStream * stream)
for(style=self->styles; style; style=style->next) numStyles++;
NXPrintf(stream, "%d\n", numStyles);
- CTRACE(tfp, "StyleSheet: Writing %d styles\n", numStyles);
+ CTRACE((tfp, "StyleSheet: Writing %d styles\n", numStyles));
for (style=self->styles; style; style=style->next) {
NXPrintf(stream, "%s ", style->name);
(void) HTStyleWrite(style, stream);
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStyle.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStyle.h
index 0cc15895ed1..be958f079c4 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStyle.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTStyle.h
@@ -116,6 +116,7 @@ typedef struct _HTStyle {
} HTStyle;
+#define HT_ALIGN_NONE (-1)
/* Style functions:
*/
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTCP.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTCP.c
index 1a6b2621502..fd916955c4a 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTCP.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTCP.c
@@ -25,13 +25,17 @@
#ifdef NSL_FORK
#include <signal.h>
-#include <sys/wait.h>
+#include <www_wait.h>
#endif /* NSL_FORK */
#ifdef HAVE_RESOLV_H
#include <resolv.h>
#endif
+#if defined(__DJGPP__) && defined (WATT32)
+#include <netdb.h>
+#endif /* __DJGPP__ */
+
#define OK_HOST(p) ((p) != 0 && ((p)->h_length) != 0)
#ifdef SVR4_BSDSELECT
@@ -40,7 +44,7 @@ PUBLIC int BSDselect PARAMS((
fd_set * readfds,
fd_set * writefds,
fd_set * exceptfds,
- struct timeval * timeout));
+ struct timeval * select_timeout));
#ifdef select
#undef select
#endif /* select */
@@ -87,42 +91,33 @@ PUBLIC unsigned long socks_bind_remoteAddr; /* for long Rbind */
** global errno gives the error number in the Unix way.
**
** On return,
-** returns a negative status in the Unix way.
+** returns a negative status in the Unix way.
*/
-#ifndef PCNFS
-
-#ifdef VMS
-#include <perror.h>
-#ifndef errno
-extern int errno;
-#endif /* !errno */
-#endif /* VMS */
-
-#ifndef VM
-#ifndef VMS
-#ifndef THINK_C
#ifdef DECL_SYS_ERRLIST
extern char *sys_errlist[]; /* see man perror on cernvax */
extern int sys_nerr;
#endif /* DECL_SYS_ERRLIST */
-#endif /* !THINK_C */
-#endif /* !VMS */
-#endif /* !VM */
-
-#endif /* !PCNFS */
-
#ifdef _WINDOWS_NSL
- char host[512];
- struct hostent *phost; /* Pointer to host - See netdb.h */
- int donelookup;
+char host[512];
+struct hostent *phost; /* Pointer to host - See netdb.h */
+int donelookup;
-unsigned long _fork_func (void *arglist)
+static unsigned long _fork_func (void *arglist)
{
- phost = gethostbyname(host);
- donelookup = TRUE;
- return (unsigned long)(phost);
+#ifdef SH_EX
+ unsigned long addr;
+ addr = (unsigned long)inet_addr(host);
+ if ((int)addr != -1)
+ phost = gethostbyaddr((char *)&addr, sizeof (addr), AF_INET);
+ else
+ phost = gethostbyname(host);
+#else
+ phost = gethostbyname(host);
+#endif
+ donelookup = TRUE;
+ return (unsigned long)(phost);
}
#endif /* _WINDOWS_NSL */
@@ -131,9 +126,7 @@ unsigned long _fork_func (void *arglist)
** A routine to mimic the ioctl function for UCX.
** Bjorn S. Nilsson, 25-Nov-1993. Based on an example in the UCX manual.
*/
-#include <iodef.h>
-#define IOC_OUT (int)0x40000000
-extern int vaxc$get_sdc(), sys$qiow();
+#include <HTioctl.h>
PUBLIC int HTioctl ARGS3(
int, d,
@@ -154,7 +147,7 @@ PUBLIC int HTioctl ARGS3(
} ioctl_desc;
if ((sdc = vaxc$get_sdc (d)) == 0) {
- errno = EBADF;
+ set_errno(EBADF);
return -1;
}
ioctl_desc.opt = UCX$C_IOCTL;
@@ -173,81 +166,90 @@ PUBLIC int HTioctl ARGS3(
ioctl_comm.addr = (char *)argp;
status = sys$qiow (0, sdc, fun, iosb, 0, 0, 0, 0, 0, 0, p5, p6);
if (!(status & 01)) {
- errno = status;
+ set_errno(status);
return -1;
}
if (!(iosb[0] & 01)) {
- errno = iosb[0];
+ set_errno(iosb[0]);
return -1;
}
return 0;
}
#endif /* VMS && UCX */
+#define MY_FORMAT "TCP: Error %d in `SOCKET_ERRNO' after call to %s() failed.\n\t%s\n"
+ /* third arg is transport/platform specific */
+
/* Report Internet Error
** ---------------------
*/
PUBLIC int HTInetStatus ARGS1(
- char *, where)
+ char *, where)
{
+ int status;
+ int saved_errno = errno;
#ifdef VMS
#ifdef MULTINET
SOCKET_ERRNO = vmserrno;
#endif /* MULTINET */
#endif /* VMS */
- CTRACE(tfp,
- "TCP: Error %d in `SOCKET_ERRNO' after call to %s() failed.\n\t%s\n",
- SOCKET_ERRNO, where,
- /* third arg is transport/platform specific */
#ifdef VM
- "(Error number not translated)"); /* What Is the VM equiv? */
+ CTRACE((tfp, MY_FORMAT, SOCKET_ERRNO, where,
+ "(Error number not translated)")); /* What Is the VM equiv? */
#define ER_NO_TRANS_DONE
#endif /* VM */
#ifdef VMS
#ifdef MULTINET
- vms_errno_string());
+ CTRACE((tfp, MY_FORMAT, SOCKET_ERRNO, where,
+ vms_errno_string()));
#else
+ CTRACE((tfp, MY_FORMAT, SOCKET_ERRNO, where,
((SOCKET_ERRNO > 0 && SOCKET_ERRNO <= 65) ?
- strerror(SOCKET_ERRNO) : "(Error number not translated)"));
+ strerror(SOCKET_ERRNO) : "(Error number not translated)")));
#endif /* MULTINET */
#define ER_NO_TRANS_DONE
#endif /* VMS */
#ifdef HAVE_STRERROR
- strerror(SOCKET_ERRNO));
+ CTRACE((tfp, MY_FORMAT, SOCKET_ERRNO, where,
+ strerror(SOCKET_ERRNO)));
#define ER_NO_TRANS_DONE
#endif /* HAVE_STRERROR */
#ifndef ER_NO_TRANS_DONE
+ CTRACE((tfp, MY_FORMAT, SOCKET_ERRNO, where,
(SOCKET_ERRNO < sys_nerr ?
- sys_errlist[SOCKET_ERRNO] : "Unknown error" ));
+ sys_errlist[SOCKET_ERRNO] : "Unknown error" )));
#endif /* !ER_NO_TRANS_DONE */
#ifdef VMS
#ifndef MULTINET
- CTRACE(tfp,
+ CTRACE((tfp,
" Unix error number (SOCKET_ERRNO) = %ld dec\n",
- SOCKET_ERRNO);
- CTRACE(tfp,
+ SOCKET_ERRNO));
+ CTRACE((tfp,
" VMS error (vaxc$errno) = %lx hex\n",
- vaxc$errno);
+ vaxc$errno));
#endif /* MULTINET */
#endif /* VMS */
+ set_errno(saved_errno);
+
#ifdef VMS
/*
** uerrno and errno happen to be zero if vmserrno <> 0
*/
#ifdef MULTINET
- return -vmserrno;
+ status = -vmserrno;
#else
- return -vaxc$errno;
+ status = -vaxc$errno;
#endif /* MULTINET */
#else
- return -SOCKET_ERRNO;
+ status = -SOCKET_ERRNO;
#endif /* VMS */
+ return status;
}
/* Parse a cardinal value parse_cardinal()
@@ -295,15 +297,23 @@ PUBLIC unsigned int HTCardinal ARGS3(
** it is to be kept.
*/
PUBLIC CONST char * HTInetString ARGS1(
- SockA*, soc_in)
+ SockA*, soc_in)
{
- static char string[16];
+#ifdef INET6
+ static char hostbuf[MAXHOSTNAMELEN];
+ getnameinfo((struct sockaddr *)soc_in,
+ SOCKADDR_LEN(soc_in),
+ hostbuf, sizeof(hostbuf), NULL, 0, NI_NUMERICHOST);
+ return hostbuf;
+#else
+ static char string[20];
sprintf(string, "%d.%d.%d.%d",
(int)*((unsigned char *)(&soc_in->sin_addr)+0),
(int)*((unsigned char *)(&soc_in->sin_addr)+1),
(int)*((unsigned char *)(&soc_in->sin_addr)+2),
(int)*((unsigned char *)(&soc_in->sin_addr)+3));
return string;
+#endif /* INET6 */
}
#endif /* !DECNET */
@@ -314,6 +324,7 @@ PUBLIC CONST char * HTInetString ARGS1(
** - contains only valid chars for domain names (actually, the
** restrictions are somewhat relaxed),
** - no leading dots or empty segments,
+** - no segment starts with '-' or '+' [this protects telnet command],
** - max. length of dot-separated segment <= 63 (RFC 1034,1035),
** - total length <= 254 (if it ends with dot) or 253 (otherwise)
** [an interpretation of RFC 1034,1035, although RFC 1123
@@ -327,10 +338,10 @@ PUBLIC CONST char * HTInetString ARGS1(
** returns 1 if valid, otherwise 0.
*/
PUBLIC BOOL valid_hostname ARGS1(
- CONST char *, name)
+ char *, name)
{
int i=1, iseg = 0;
- CONST char *cp = name;
+ char *cp = name;
if (!(name && *name))
return NO;
for (; (*cp && i <= 253); cp++, i++) {
@@ -341,16 +352,18 @@ PUBLIC BOOL valid_hostname ARGS1(
iseg = 0;
continue;
}
+ } else if (iseg == 0 && (*cp == '-' || *cp == '+')) {
+ return NO;
} else if (++iseg > 63) {
- return NO;
+ return NO;
}
- if (!isalnum((unsigned char)*cp) &&
+ if (!isalnum(UCH(*cp)) &&
*cp != '-' && *cp != '_' &&
*cp != '$' && *cp != '+') {
return NO;
}
}
- return (*cp == '\0' || (*cp == '.' && iseg != 0 && cp[1] == '\0'));
+ return (BOOL) (*cp == '\0' || (*cp == '.' && iseg != 0 && cp[1] == '\0'));
}
#ifdef NSL_FORK
@@ -368,7 +381,7 @@ PRIVATE void quench ARGS1(
PUBLIC int lynx_nsl_status = HT_OK;
-#ifndef DJGPP /* much excluded! */
+#if !( defined(__DJGPP__) && !defined(WATT32) ) /* much excluded! */
#define DEBUG_HOSTENT /* disable in case of problems */
#define DEBUG_HOSTENT_CHILD /* for NSL_FORK, may screw up trace file */
@@ -387,52 +400,52 @@ PRIVATE void dump_hostent ARGS2(
if (TRACE) {
int i;
char **pcnt;
- CTRACE(tfp,"%s: %p ", msgprefix, phost);
+ CTRACE((tfp,"%s: %p ", msgprefix, phost));
if (phost) {
- CTRACE(tfp,"{ h_name = %p", phost->h_name);
+ CTRACE((tfp,"{ h_name = %p", phost->h_name));
if (phost->h_name) {
- CTRACE(tfp, " \"%s\",", phost->h_name);
+ CTRACE((tfp, " \"%s\",", phost->h_name));
} else {
- CTRACE(tfp, ",");
+ CTRACE((tfp, ","));
}
- CTRACE(tfp,"\n\t h_aliases = %p", phost->h_aliases);
+ CTRACE((tfp,"\n\t h_aliases = %p", phost->h_aliases));
if (phost->h_aliases) {
- CTRACE(tfp, " {");
+ CTRACE((tfp, " {"));
for (pcnt = phost->h_aliases; *pcnt; pcnt++) {
- CTRACE(tfp,"%s %p \"%s\"",
+ CTRACE((tfp,"%s %p \"%s\"",
(pcnt == phost->h_aliases ? " " : ", "),
- *pcnt, *pcnt);
+ *pcnt, *pcnt));
}
- CTRACE(tfp, "%s0x0 },\n\t",
- (*phost->h_aliases ? ", " : " "));
+ CTRACE((tfp, "%s0x0 },\n\t",
+ (*phost->h_aliases ? ", " : " ")));
} else {
- CTRACE(tfp, ",\n\t");
+ CTRACE((tfp, ",\n\t"));
}
- CTRACE(tfp," h_addrtype = %d,", phost->h_addrtype);
- CTRACE(tfp," h_length = %d,\n\t", phost->h_length);
- CTRACE(tfp," h_addr_list = %p", phost->h_addr_list);
+ CTRACE((tfp," h_addrtype = %d,", phost->h_addrtype));
+ CTRACE((tfp," h_length = %d,\n\t", phost->h_length));
+ CTRACE((tfp," h_addr_list = %p", phost->h_addr_list));
if (phost->h_addr_list) {
- CTRACE(tfp, " {");
+ CTRACE((tfp, " {"));
for (pcnt = phost->h_addr_list; *pcnt; pcnt++) {
- CTRACE(tfp,"%s %p",
+ CTRACE((tfp,"%s %p",
(pcnt == phost->h_addr_list ? "" : ","),
- *pcnt);
+ *pcnt));
for (i = 0; i < phost->h_length; i++) {
- CTRACE(tfp, "%s%d%s", (i==0 ? " \"" : "."),
+ CTRACE((tfp, "%s%d%s", (i==0 ? " \"" : "."),
(int)*((unsigned char *)(*pcnt)+i),
- (i+1 == phost->h_length ? "\"" : ""));
+ (i+1 == phost->h_length ? "\"" : "")));
}
}
if (*phost->h_addr_list) {
- CTRACE(tfp, ", 0x0 } }");
+ CTRACE((tfp, ", 0x0 } }"));
} else {
- CTRACE(tfp, " 0x0 } }");
+ CTRACE((tfp, " 0x0 } }"));
}
} else {
- CTRACE(tfp, "}");
+ CTRACE((tfp, "}"));
}
}
- CTRACE(tfp,"\n");
+ CTRACE((tfp,"\n"));
fflush(tfp);
}
}
@@ -445,11 +458,21 @@ PRIVATE void dump_hostent ARGS2(
** cast to a struct hostent. - kw
** See also description of LYGetHostByName.
*/
+#ifdef NSL_FORK
+
+#define REHOSTENT_SIZE 128 /* not bigger than pipe buffer! */
+
+typedef struct {
+ struct hostent h;
+ char rest[REHOSTENT_SIZE];
+ } AlignedHOSTENT;
+
PRIVATE size_t fill_rehostent ARGS3(
char *, rehostent,
size_t, rehostentsize,
CONST struct hostent *, phost)
{
+ AlignedHOSTENT *data = (AlignedHOSTENT *)rehostent;
int num_addrs = 0;
int num_aliases = 0;
char **pcnt;
@@ -509,8 +532,8 @@ PRIVATE size_t fill_rehostent ARGS3(
}
}
- ((struct hostent *)rehostent)->h_addrtype = phost->h_addrtype;
- ((struct hostent *)rehostent)->h_length = phost->h_length;
+ data->h.h_addrtype = phost->h_addrtype;
+ data->h.h_length = phost->h_length;
p_next_charptr = (char **)(rehostent + curlen);
p_next_char = rehostent + curlen;
if (phost->h_addr_list)
@@ -519,7 +542,7 @@ PRIVATE size_t fill_rehostent ARGS3(
p_next_char += (num_aliases+1) * sizeof(phost->h_aliases[0]);
if (phost->h_addr_list) {
- ((struct hostent *)rehostent)->h_addr_list = p_next_charptr;
+ data->h.h_addr_list = p_next_charptr;
for (pcnt=phost->h_addr_list, i_addr = 0;
i_addr < num_addrs;
pcnt++, i_addr++) {
@@ -529,11 +552,11 @@ PRIVATE size_t fill_rehostent ARGS3(
}
*p_next_charptr++ = NULL;
} else {
- ((struct hostent *)rehostent)->h_addr_list = NULL;
+ data->h.h_addr_list = NULL;
}
if (phost->h_name) {
- ((struct hostent *)rehostent)->h_name = p_next_char;
+ data->h.h_name = p_next_char;
if (name_len) {
strcpy(p_next_char, phost->h_name);
p_next_char += name_len + 1;
@@ -541,11 +564,11 @@ PRIVATE size_t fill_rehostent ARGS3(
*p_next_char++ = '\0';
}
} else {
- ((struct hostent *)rehostent)->h_name = NULL;
+ data->h.h_name = NULL;
}
if (phost->h_aliases) {
- ((struct hostent *)rehostent)->h_aliases = p_next_charptr;
+ data->h.h_aliases = p_next_charptr;
for (pcnt=phost->h_aliases, i_alias = 0;
(*pcnt && i_alias < num_addrs);
pcnt++, i_alias++) {
@@ -563,21 +586,22 @@ PRIVATE size_t fill_rehostent ARGS3(
}
*p_next_charptr++ = NULL;
} else {
- ((struct hostent *)rehostent)->h_aliases = NULL;
+ data->h.h_aliases = NULL;
}
curlen = p_next_char - (char *)rehostent;
return curlen;
}
-
-#define REHOSTENT_SIZE 128 /* not bigger than pipe buffer! */
+#endif /* NSL_FORK */
#ifndef HAVE_H_ERRNO
#undef h_errno
#define h_errno my_errno
static int my_errno;
#else /* we do HAVE_H_ERRNO: */
+#ifndef h_errno /* there may be a macro as well as the extern data */
extern int h_errno;
#endif
+#endif
/* Resolve an internet hostname, like gethostbyname
** ------------------------------------------------
@@ -614,17 +638,14 @@ extern int h_errno;
** HT_INTERNAL Internal error
*/
PUBLIC struct hostent * LYGetHostByName ARGS1(
- CONST char *, str)
+ char *, str)
{
#ifndef _WINDOWS_NSL
- CONST char *host = str;
-#endif /* _WINDOWS_NSL */
+ char *host = str;
+#endif
#ifdef NSL_FORK
/* for transfer of result between from child to parent: */
- static struct {
- struct hostent h;
- char rest[REHOSTENT_SIZE];
- } aligned_full_rehostent;
+ static AlignedHOSTENT aligned_full_rehostent;
/*
* We could define rehosten directly as a
* static char rehostent[REHOSTENT_SIZE],
@@ -645,7 +666,7 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
struct _statuses {
size_t rehostentlen;
int h_length;
- int child_errno; /* maybe not very useful */
+ int child_errno; /* sometimes useful to pass this on */
int child_h_errno;
BOOL h_errno_valid;
} statuses;
@@ -656,38 +677,40 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
struct hostent *result_phost = NULL;
if (!str) {
- CTRACE(tfp, "LYGetHostByName: Can't parse `NULL'.\n");
+ CTRACE((tfp, "LYGetHostByName: Can't parse `NULL'.\n"));
lynx_nsl_status = HT_INTERNAL;
return NULL;
}
- CTRACE(tfp, "LYGetHostByName: parsing `%s'.\n", str);
+ CTRACE((tfp, "LYGetHostByName: parsing `%s'.\n", str));
/* Could disable this if all our callers already check - kw */
if (HTCheckForInterrupt()) {
- CTRACE (tfp, "LYGetHostByName: INTERRUPTED for '%s'.\n", str);
+ CTRACE((tfp, "LYGetHostByName: INTERRUPTED for '%s'.\n", str));
lynx_nsl_status = HT_INTERRUPTED;
return NULL;
}
+#ifdef _WINDOWS_NSL
+ strncpy(host, str, sizeof(host));
+#endif /* _WINDOWS_NSL */
+
if (!valid_hostname(host)) {
lynx_nsl_status = HT_NOT_ACCEPTABLE;
#ifdef NO_RECOVERY
+#ifdef _WINDOWS
+ WSASetLastError(NO_RECOVERY);
+#else
h_errno = NO_RECOVERY;
#endif
+#endif
return NULL;
}
-#ifdef _WINDOWS_NSL
- strncpy(host, str, (size_t)512);
-#else
- host = str;
-#endif /* _WINDOWS_NSL */
-
#ifdef MVS /* Outstanding problem with crash in MVS gethostbyname */
- CTRACE(tfp, "LYGetHostByName: Calling gethostbyname(%s)\n", host);
+ CTRACE((tfp, "LYGetHostByName: Calling gethostbyname(%s)\n", host));
#endif /* MVS */
- CTRACE_FLUSH(tfp); /* so child messages will not mess parent log */
+ CTRACE_FLUSH(tfp); /* so child messages will not mess up parent log */
lynx_nsl_status = HT_INTERNAL; /* should be set to something else below */
@@ -699,16 +722,25 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
*/
{
int got_rehostent = 0;
+#if HAVE_SIGACTION
+ sigset_t old_sigset;
+ sigset_t new_sigset;
+#endif
/*
** Pipe, child pid, status buffers, start time, select()
** control variables.
*/
pid_t fpid, waitret;
- int pfd[2], selret, readret, waitstat = 0;
- time_t start_time = time(NULL);
+ int pfd[2], selret, readret;
+#ifdef HAVE_TYPE_UNIONWAIT
+ union wait waitstat;
+#else
+ int waitstat = 0;
+#endif
+ time_t start_time = time((time_t *)0);
fd_set readfds;
- struct timeval timeout;
- int dns_patience = 30; /* how many seconds will we wait for DNS? */
+ struct timeval one_second;
+ long dns_patience = 30; /* how many seconds will we wait for DNS? */
int child_exited = 0;
/*
@@ -727,6 +759,32 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
pipe(pfd);
+#if HAVE_SIGACTION
+ /*
+ * Attempt to prevent a rare situation where the child
+ * could execute the Lynx signal handlers because it gets
+ * killed before it even has a chance to reset its handlers,
+ * resulting in bogus 'Exiting via interrupt' message and
+ * screen corruption or worse.
+ * Should that continue to be reported, for systems without
+ * sigprocmask(), we need to find a different solutions for
+ * those. - kw 19990430
+ */
+ sigemptyset(&new_sigset);
+ sigaddset(&new_sigset, SIGTERM);
+ sigaddset(&new_sigset, SIGINT);
+#ifndef NOSIGHUP
+ sigaddset(&new_sigset, SIGHUP);
+#endif /* NOSIGHUP */
+#ifdef SIGTSTP
+ sigaddset(&new_sigset, SIGTSTP);
+#endif /* SIGTSTP */
+#ifdef SIGWINCH
+ sigaddset(&new_sigset, SIGWINCH);
+#endif /* SIGWINCH */
+ sigprocmask(SIG_BLOCK, &new_sigset, &old_sigset);
+#endif /* HAVE_SIGACTION */
+
if ((fpid = fork()) == 0 ) {
struct hostent *phost; /* Pointer to host - See netdb.h */
/*
@@ -764,15 +822,28 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
signal(SIGSEGV, SIG_DFL);
signal(SIGILL, SIG_DFL);
+#if HAVE_SIGACTION
+ /* Restore signal mask to whatever it was before the fork. -kw */
+ sigprocmask(SIG_SETMASK, &old_sigset, NULL);
+#endif /* HAVE_SIGACTION */
+
/*
** Child won't use read side. -BL
*/
close(pfd[0]);
+#ifdef HAVE_H_ERRNO
+ /* to detect cases when it doesn't get set although it should */
+ h_errno = -2;
+#endif
+ set_errno(0);
phost = gethostbyname(host);
+ statuses.child_errno = errno;
statuses.child_h_errno = h_errno;
+#ifdef HAVE_H_ERRNO
statuses.h_errno_valid = YES;
+#endif
#ifdef MVS
- CTRACE(tfp, "LYGetHostByName: gethostbyname() returned %d\n", phost);
+ CTRACE((tfp, "LYGetHostByName: gethostbyname() returned %d\n", phost));
#endif /* MVS */
#ifdef DEBUG_HOSTENT_CHILD
@@ -790,12 +861,17 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
statuses.h_length = 0;
} else {
statuses.h_length = ((struct hostent *)rehostent)->h_length;
+#ifdef HAVE_H_ERRNO
+ if (h_errno == -2) /* success, but h_errno unchanged? */
+ statuses.h_errno_valid = NO;
+#endif
}
/*
** Send variables indicating status of lookup to parent.
** That includes rehostentlen, which the parent will use
** as the size for the second read (if > 0).
*/
+ if (!statuses.child_errno)
statuses.child_errno = errno;
statuses.rehostentlen = rehostentlen;
write(pfd[1], &statuses, sizeof(statuses));
@@ -815,6 +891,14 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
}
}
+#if HAVE_SIGACTION
+ /*
+ ** (parent) Restore signal mask to whatever it was
+ ** before the fork. - kw
+ */
+ sigprocmask(SIG_SETMASK, &old_sigset, NULL);
+#endif /* HAVE_SIGACTION */
+
/*
** (parent) Wait until lookup finishes, or interrupt,
** or cycled too many times (just in case) -BL
@@ -827,7 +911,7 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
goto failed;
}
- while (child_exited || time(NULL) - start_time < dns_patience) {
+ while (child_exited || (long)(time((time_t *)0) - start_time) < dns_patience) {
FD_ZERO(&readfds);
/*
@@ -847,8 +931,8 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
}
}
- timeout.tv_sec = 1;
- timeout.tv_usec = 0;
+ one_second.tv_sec = 1;
+ one_second.tv_usec = 0;
FD_SET(pfd[0], &readfds);
/*
@@ -858,10 +942,10 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
*/
#ifdef SOCKS
if (socks_flag)
- selret = Rselect(pfd[0] + 1, (void *)&readfds, NULL, NULL, &timeout);
+ selret = Rselect(pfd[0] + 1, (void *)&readfds, NULL, NULL, &one_second);
else
#endif /* SOCKS */
- selret = select(pfd[0] + 1, (void *)&readfds, NULL, NULL, &timeout);
+ selret = select(pfd[0] + 1, (void *)&readfds, NULL, NULL, &one_second);
if ((selret > 0) && FD_ISSET(pfd[0], &readfds)) {
/*
@@ -870,9 +954,45 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
readret = read(pfd[0], &statuses, sizeof(statuses));
if (readret == sizeof(statuses)) {
h_errno = statuses.child_h_errno;
- errno = statuses.child_errno;
- if (statuses.h_errno_valid)
+ set_errno(statuses.child_errno);
+#ifdef HAVE_H_ERRNO
+ if (statuses.h_errno_valid) {
lynx_nsl_status = HT_H_ERRNO_VALID;
+ /*
+ * If something went wrong in the child process
+ * other than normal lookup errors, and it appears
+ * that we have enough info to know what went wrong,
+ * generate diagnostic output.
+ * ENOMEM observed on linux in processes constrained
+ * with ulimit. It would be too unkind to abort
+ * the session, access to local files or through a
+ * proxy may still work. - kw
+ */
+ if (
+#ifdef NETDB_INTERNAL /* linux glibc: defined in netdb.h */
+ (errno && h_errno == NETDB_INTERNAL) ||
+#endif
+ (errno == ENOMEM &&
+ statuses.rehostentlen == 0 &&
+ /* should probably be NETDB_INTERNAL if child
+ memory exhausted, but we may find that
+ h_errno remains unchanged. - kw */
+ h_errno == -2)) {
+#ifndef MULTINET
+ HTInetStatus("CHILD gethostbyname");
+#endif
+ HTAlert(LYStrerror(statuses.child_errno));
+ if (errno == ENOMEM) {
+ /*
+ * Not much point in continuing, right?
+ * Fake a 'z', should shorten pointless
+ * guessing cycle. - kw
+ */
+ LYFakeZap(YES);
+ }
+ }
+ }
+#endif /* HAVE_H_ERRNO */
if (statuses.rehostentlen > sizeof(struct hostent)) {
/*
** Then get the full reorganized hostent. -BL, kw
@@ -888,7 +1008,7 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
} else if (!statuses.h_errno_valid) {
lynx_nsl_status = HT_INTERNAL;
}
- }
+ }
} else {
lynx_nsl_status = HT_ERROR;
}
@@ -928,7 +1048,7 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
** Abort if interrupt key pressed.
*/
if (HTCheckForInterrupt()) {
- CTRACE(tfp, "LYGetHostByName: INTERRUPTED gethostbyname.\n");
+ CTRACE((tfp, "LYGetHostByName: INTERRUPTED gethostbyname.\n"));
kill(fpid, SIGTERM);
waitpid(fpid, NULL, WNOHANG);
close(pfd[0]);
@@ -943,20 +1063,20 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
}
if (waitret > 0) {
if (WIFEXITED(waitstat)) {
- CTRACE(tfp, "LYGetHostByName: NSL_FORK child %d exited, status 0x%x.\n",
- (int)waitret, waitstat);
+ CTRACE((tfp, "LYGetHostByName: NSL_FORK child %d exited, status 0x%x.\n",
+ (int)waitret, WEXITSTATUS(waitstat)));
} else if (WIFSIGNALED(waitstat)) {
- CTRACE(tfp, "LYGetHostByName: NSL_FORK child %d got signal, status 0x%x!\n",
- (int)waitret, waitstat);
+ CTRACE((tfp, "LYGetHostByName: NSL_FORK child %d got signal, status 0x%x!\n",
+ (int)waitret, WTERMSIG(waitstat)));
#ifdef WCOREDUMP
if (WCOREDUMP(waitstat)) {
- CTRACE(tfp, "LYGetHostByName: NSL_FORK child %d dumped core!\n",
- (int)waitret);
+ CTRACE((tfp, "LYGetHostByName: NSL_FORK child %d dumped core!\n",
+ (int)waitret));
}
#endif /* WCOREDUMP */
} else if (WIFSTOPPED(waitstat)) {
- CTRACE(tfp, "LYGetHostByName: NSL_FORK child %d is stopped, status 0x%x!\n",
- (int)waitret, waitstat);
+ CTRACE((tfp, "LYGetHostByName: NSL_FORK child %d is stopped, status 0x%x!\n",
+ (int)waitret, WEXITSTATUS(waitstat)));
}
}
if (!got_rehostent) {
@@ -967,50 +1087,53 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
#ifdef _WINDOWS_NSL
{
-#ifdef __BORLANDC__
- HANDLE hThread, dwThreadID;
-#else
- unsigned long hThread, dwThreadID;
-#endif /* __BORLANDC__ */
- phost = (struct hostent *) NULL;
- hThread = CreateThread((void *)NULL, 4096UL,
-#ifdef __BORLANDC__
- (LPTHREAD_START_ROUTINE)_fork_func,
-#else
- (unsigned long (*)())_fork_func,
-#endif /* __BORLANDC__ */
- (void *)NULL, 0UL, (unsigned long *)&dwThreadID);
- if (!hThread)
- MessageBox((void *)NULL, "CreateThread",
- "CreateThread Failed", 0L);
-
- donelookup = FALSE;
- while (!donelookup)
- if (HTCheckForInterrupt())
- {
- /* Note that host is a character array and is not freed */
- /* to avoid possible subthread problems: */
- if (!CloseHandle(hThread))
- MessageBox((void *)NULL, "CloseHandle","CloseHandle Failed",
- 0L);
- lynx_nsl_status = HT_INTERRUPTED;
- return NULL;
- };
- if (phost) {
- lynx_nsl_status = HT_OK;
- result_phost = phost;
- } else {
- lynx_nsl_status = HT_ERROR;
- goto failed;
+ HANDLE hThread, dwThreadID;
+
+ if (!system_is_NT) { /* for Windows9x */
+ unsigned long t;
+ t = (unsigned long)inet_addr(host);
+ if ((int)t != -1)
+ phost = gethostbyaddr((char *)&t, sizeof (t), AF_INET);
+ else
+ phost = gethostbyname(host);
+ } else { /* for Windows NT */
+ phost = (struct hostent *) NULL;
+ donelookup = FALSE;
+ hThread = CreateThread((void *)NULL, 4096UL,
+ (LPTHREAD_START_ROUTINE)_fork_func,
+ (void *)NULL, 0UL, (unsigned long *)&dwThreadID);
+ if (!hThread)
+ MessageBox((void *)NULL, "CreateThread",
+ "CreateThread Failed", 0L);
+
+ while (!donelookup) {
+ if (HTCheckForInterrupt()) {
+ /* Note that host is a character array and is not freed */
+ /* to avoid possible subthread problems: */
+ if (!CloseHandle(hThread)) {
+ MessageBox((void *)NULL,
+ "CloseHandle","CloseHandle Failed", 0L);
+ }
+ lynx_nsl_status = HT_INTERRUPTED;
+ return NULL;
}
- };
+ }
+ }
+ if (phost) {
+ lynx_nsl_status = HT_OK;
+ result_phost = phost;
+ } else {
+ lynx_nsl_status = HT_ERROR;
+ goto failed;
+ }
+ }
#else /* !NSL_FORK, !_WINDOWS_NSL: */
{
struct hostent *phost;
- phost = gethostbyname((char *)host); /* See netdb.h */
+ phost = gethostbyname(host); /* See netdb.h */
#ifdef MVS
- CTRACE(tfp, "LYGetHostByName: gethostbyname() returned %d\n", phost);
+ CTRACE((tfp, "LYGetHostByName: gethostbyname() returned %d\n", phost));
#endif /* MVS */
if (phost) {
lynx_nsl_status = HT_OK;
@@ -1025,18 +1148,18 @@ PUBLIC struct hostent * LYGetHostByName ARGS1(
#ifdef DEBUG_HOSTENT
dump_hostent("End of LYGetHostByName", result_phost);
- CTRACE(tfp, "LYGetHostByName: Resolved name to a hostent.\n");
+ CTRACE((tfp, "LYGetHostByName: Resolved name to a hostent.\n"));
#endif
return result_phost; /* OK */
failed:
- CTRACE(tfp, "LYGetHostByName: Can't find internet node name `%s'.\n",
- host);
+ CTRACE((tfp, "LYGetHostByName: Can't find internet node name `%s'.\n",
+ host));
return NULL;
}
-#endif /* from here on DJGPP joins us again. */
+#endif /* from here on DJGPP without WATT32 joins us again. */
/* Parse a network node address and port
@@ -1051,27 +1174,29 @@ failed:
** *soc_in is filled in. If no port is specified in str, that
** field is left unchanged in *soc_in.
*/
-PUBLIC int HTParseInet ARGS2(
+#ifndef INET6
+PRIVATE int HTParseInet ARGS2(
SockA *, soc_in,
CONST char *, str)
{
char *port;
int dotcount_ip = 0; /* for dotted decimal IP addr */
+ char *strptr;
#ifndef _WINDOWS_NSL
char *host = NULL;
#endif /* _WINDOWS_NSL */
if (!str) {
- CTRACE(tfp, "HTParseInet: Can't parse `NULL'.\n");
+ CTRACE((tfp, "HTParseInet: Can't parse `NULL'.\n"));
return -1;
}
- CTRACE(tfp, "HTParseInet: parsing `%s'.\n", str);
+ CTRACE((tfp, "HTParseInet: parsing `%s'.\n", str));
if (HTCheckForInterrupt()) {
- CTRACE (tfp, "HTParseInet: INTERRUPTED for '%s'.\n", str);
+ CTRACE((tfp, "HTParseInet: INTERRUPTED for '%s'.\n", str));
return -1;
}
#ifdef _WINDOWS_NSL
- strncpy(host, str, (size_t)512);
+ strncpy(host, str, sizeof(host));
#else
StrAllocCopy(host, str); /* Make a copy we can mutilate */
#endif /* _WINDOWS_NSL */
@@ -1080,26 +1205,34 @@ PUBLIC int HTParseInet ARGS2(
*/
if ((port = strchr(host, ':')) != NULL) {
*port++ = 0; /* Chop off port */
+ strptr = port;
if (port[0] >= '0' && port[0] <= '9') {
-#ifdef unix
- soc_in->sin_port = htons(atol(port));
+#ifdef UNIX
+ soc_in->sin_port = (PortNumber)htons(strtol(port, &strptr, 10));
#else /* VMS: */
#ifdef DECNET
- soc_in->sdn_objnum = (unsigned char)(strtol(port, (char**)0, 10));
+ soc_in->sdn_objnum = (unsigned char)(strtol(port, &strptr, 10));
#else
- soc_in->sin_port = htons((unsigned short)strtol(port,(char**)0,10));
+ soc_in->sin_port = htons((PortNumber)strtol(port, &strptr, 10));
#endif /* Decnet */
#endif /* Unix vs. VMS */
-#ifdef SUPPRESS /* 1. crashes!?!. 2. Not recommended */
+#ifdef SUPPRESS /* 1. crashes!?!. 2. URL syntax has number not name */
} else {
struct servent * serv = getservbyname(port, (char*)0);
if (serv) {
soc_in->sin_port = serv->s_port;
} else {
- CTRACE(tfp, "TCP: Unknown service %s\n", port);
+ CTRACE((tfp, "TCP: Unknown service %s\n", port));
}
#endif /* SUPPRESS */
}
+ if (strptr && *strptr != '\0') {
+#ifndef _WINDOWS_NSL
+ FREE(host);
+#endif /* _WINDOWS_NSL */
+ HTAlwaysAlert(NULL, gettext("Address has invalid port"));
+ return -1;
+ }
}
#ifdef DECNET
@@ -1109,16 +1242,16 @@ PUBLIC int HTParseInet ARGS2(
*/
soc_in->sdn_nam.n_len = min(DN_MAXNAML, strlen(host)); /* <=6 in phase 4 */
strncpy(soc_in->sdn_nam.n_name, host, soc_in->sdn_nam.n_len + 1);
- CTRACE(tfp, "DECnet: Parsed address as object number %d on host %.6s...\n",
- soc_in->sdn_objnum, host);
+ CTRACE((tfp, "DECnet: Parsed address as object number %d on host %.6s...\n",
+ soc_in->sdn_objnum, host));
#else /* parse Internet host: */
if (*host >= '0' && *host <= '9') { /* Test for numeric node address: */
- char *strptr = host;
+ strptr = host;
while (*strptr) {
if (*strptr == '.') {
dotcount_ip++;
- } else if (!isdigit(*strptr)) {
+ } else if (!isdigit(UCH(*strptr))) {
break;
}
strptr++;
@@ -1131,9 +1264,10 @@ PUBLIC int HTParseInet ARGS2(
/*
** Parse host number if present.
*/
- if (dotcount_ip == 3) { /* Numeric node address: */
+ if (dotcount_ip == 3) /* Numeric node address: */
+ {
-#ifdef DJGPP
+#if defined(__DJGPP__) && !defined(WATT32)
soc_in->sin_addr.s_addr = htonl(aton(host));
#else
#ifdef DGUX_OLD
@@ -1144,7 +1278,7 @@ PUBLIC int HTParseInet ARGS2(
#else
#ifdef HAVE_INET_ATON
if (!inet_aton(host, &(soc_in->sin_addr))) {
- CTRACE(tfp, "inet_aton(%s) returns error\n", host);
+ CTRACE((tfp, "inet_aton(%s) returns error\n", host));
#ifndef _WINDOWS_NSL
FREE(host);
#endif /* _WINDOWS_NSL */
@@ -1155,17 +1289,18 @@ PUBLIC int HTParseInet ARGS2(
#endif /* HAVE_INET_ATON */
#endif /* GUSI */
#endif /* DGUX_OLD */
-#endif /* DJGPP */
+#endif /* __DJGPP__ && !WATT32 */
#ifndef _WINDOWS_NSL
FREE(host);
#endif /* _WINDOWS_NSL */
- } else { /* Alphanumeric node name: */
+ } else
+ { /* Alphanumeric node name: */
#ifdef MVS /* Outstanding problem with crash in MVS gethostbyname */
- CTRACE(tfp, "HTParseInet: Calling LYGetHostByName(%s)\n", host);
+ CTRACE((tfp, "HTParseInet: Calling LYGetHostByName(%s)\n", host));
#endif /* MVS */
-#ifdef DJGPP
+#if defined(__DJGPP__) && !defined(WATT32)
if (!valid_hostname(host)) {
FREE(host);
return HT_NOT_ACCEPTABLE; /* only HTDoConnect checks this. */
@@ -1174,12 +1309,12 @@ PUBLIC int HTParseInet ARGS2(
if (soc_in->sin_addr.s_addr == 0) {
goto failed;
}
-#else /* !DJGPP: */
+#else /* !(__DJGPP__ && !WATT32) */
#ifdef _WINDOWS_NSL
phost = LYGetHostByName(host); /* See above */
if (!phost) goto failed;
memcpy((void *)&soc_in->sin_addr, phost->h_addr, phost->h_length);
-#else /* !DJGPP, !_WINDOWS_NSL: */
+#else /* !(__DJGPP__ && !WATT32) && !_WINDOWS_NSL */
{
struct hostent *phost;
phost = LYGetHostByName(host); /* See above */
@@ -1203,38 +1338,83 @@ PUBLIC int HTParseInet ARGS2(
memcpy((void *)&soc_in->sin_addr, phost->h_addr, phost->h_length);
#endif /* VMS && CMU_TCP */
}
-#endif /* !DJGPP, !_WINDOWS_NSL */
-#endif /* !DJGPP */
+#endif /* _WINDOWS_NSL */
+#endif /* __DJGPP__ && !WATT32 */
#ifndef _WINDOWS_NSL
FREE(host);
#endif /* _WINDOWS_NSL */
} /* Alphanumeric node name */
- CTRACE(tfp, "HTParseInet: Parsed address as port %d, IP address %d.%d.%d.%d\n",
+ CTRACE((tfp, "HTParseInet: Parsed address as port %d, IP address %d.%d.%d.%d\n",
(int)ntohs(soc_in->sin_port),
(int)*((unsigned char *)(&soc_in->sin_addr)+0),
(int)*((unsigned char *)(&soc_in->sin_addr)+1),
(int)*((unsigned char *)(&soc_in->sin_addr)+2),
- (int)*((unsigned char *)(&soc_in->sin_addr)+3));
+ (int)*((unsigned char *)(&soc_in->sin_addr)+3)));
#endif /* Internet vs. Decnet */
return 0; /* OK */
failed:
- CTRACE(tfp, "HTParseInet: Can't find internet node name `%s'.\n",
- host);
+ CTRACE((tfp, "HTParseInet: Can't find internet node name `%s'.\n",
+ host));
#ifndef _WINDOWS_NSL
FREE(host);
#endif /* _WINDOWS_NSL */
switch (lynx_nsl_status) {
- case HT_NOT_ACCEPTABLE:
- case HT_INTERRUPTED:
- return lynx_nsl_status;
- default:
- return -1;
+ case HT_NOT_ACCEPTABLE:
+ case HT_INTERRUPTED:
+ return lynx_nsl_status;
+ default:
+ return -1;
+ }
}
+#endif /* !INET6 */
+
+#ifdef INET6
+PRIVATE struct addrinfo *
+HTGetAddrInfo ARGS2(
+ CONST char *, str,
+ CONST int, defport)
+{
+ struct addrinfo hints, *res;
+ int error;
+ char *p;
+ char *s;
+ char *host, *port;
+ char pbuf[10];
+
+ s = strdup(str);
+
+ if (s[0] == '[' && (p = strchr(s, ']')) != NULL) {
+ *p++ = '\0';
+ host = s + 1;
+ } else {
+ p = s;
+ host = &s[0];
+ }
+ port = strrchr(p, ':');
+ if (port) {
+ *port++ = '\0';
+ } else {
+ snprintf(pbuf, sizeof(pbuf), "%d", defport);
+ port = pbuf;
+ }
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = PF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ error = getaddrinfo(host, port, &hints, &res);
+ if (error || !res) {
+ CTRACE((tfp, "HTGetAddrInfo: getaddrinfo(%s, %s): %s\n", host, port,
+ gai_strerror(error)));
+ res = NULL;
+ }
+
+ return res;
}
+#endif /* INET6 */
#ifdef LY_FIND_LEAKS
/* Free our name for the host on which we are - FM
@@ -1262,12 +1442,17 @@ PRIVATE void get_host_details NOARGS
char *domain_name; /* The name of this host domain */
#endif /* UCX */
#ifdef NEED_HOST_ADDRESS /* no -- needs name server! */
+#ifdef INET6
+ struct addrinfo hints, *res;
+ int error;
+#else
struct hostent * phost; /* Pointer to host -- See netdb.h */
+#endif /* INET6 */
#endif /* NEED_HOST_ADDRESS */
int namelength = sizeof(name);
if (hostname)
- return; /* Already done */
+ return; /* Already done */
gethostname(name, namelength); /* Without domain */
StrAllocCopy(hostname, name);
#ifdef LY_FIND_LEAKS
@@ -1278,28 +1463,47 @@ PRIVATE void get_host_details NOARGS
** UCX doesn't give the complete domain name.
** Get rest from UCX$BIND_DOM logical.
*/
- if (strchr(hostname,'.') == NULL) { /* Not full address */
+ if (strchr(hostname,'.') == NULL) { /* Not full address */
domain_name = getenv("UCX$BIND_DOMAIN");
+ if (domain_name == NULL)
+ domain_name = getenv("TCPIP$BIND_DOMAIN");
if (domain_name != NULL) {
StrAllocCat(hostname, ".");
StrAllocCat(hostname, domain_name);
}
}
#endif /* UCX */
- CTRACE(tfp, "TCP: Local host name is %s\n", hostname);
+ CTRACE((tfp, "TCP: Local host name is %s\n", hostname));
#ifndef DECNET /* Decnet ain't got no damn name server 8#OO */
#ifdef NEED_HOST_ADDRESS /* no -- needs name server! */
+#ifdef INET6
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = PF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_flags = AI_CANONNAME;
+ error = getaddrinfo(name, NULL, &hints, &res);
+ if (error || !res || !res->ai_canonname) {
+ CTRACE((tfp, "TCP: %s: `%s'\n", gai_strerror(error), name));
+ if (res)
+ freeaddrinfo(res);
+ return; /* Fail! */
+ }
+ StrAllocCopy(hostname, res->ai_canonname);
+ memcpy(&HTHostAddress, res->ai_addr, res->ai_addrlen);
+ freeaddrinfo(res);
+#else
phost = gethostbyname(name); /* See netdb.h */
if (!OK_HOST(phost)) {
- CTRACE(tfp, "TCP: Can't find my own internet node address for `%s'!!\n",
- name);
+ CTRACE((tfp, "TCP: Can't find my own internet node address for `%s'!!\n",
+ name));
return; /* Fail! */
}
StrAllocCopy(hostname, phost->h_name);
memcpy(&HTHostAddress, &phost->h_addr, phost->h_length);
- CTRACE(tfp, " Name server says that I am `%s' = %s\n",
- hostname, HTInetString(&HTHostAddress));
+#endif /* INET6 */
+ CTRACE((tfp, " Name server says that I am `%s' = %s\n",
+ hostname, HTInetString(&HTHostAddress)));
#endif /* NEED_HOST_ADDRESS */
#endif /* !DECNET */
@@ -1311,31 +1515,40 @@ PUBLIC CONST char * HTHostName NOARGS
return hostname;
}
+#ifndef MULTINET /* SOCKET_ERRNO != errno ? */
+#if !defined(UCX) || !defined(VAXC) /* errno not modifiable ? */
+#define SOCKET_DEBUG_TRACE /* show errno status after some system calls */
+#endif /* UCX && VAXC */
+#endif /* MULTINET */
/*
-** Interruptable connect as implemented for Mosaic by Marc Andreesen
+** Interruptible connect as implemented for Mosaic by Marc Andreesen
** and hacked in for Lynx years ago by Lou Montulli, and further
** modified over the years by numerous Lynx lovers. - FM
*/
PUBLIC int HTDoConnect ARGS4(
CONST char *, url,
- char *, protocol,
+ char *, protocol,
int, default_port,
int *, s)
{
- struct sockaddr_in soc_address;
- struct sockaddr_in *soc_in = &soc_address;
- int status;
+ int status = 0;
char *line = NULL;
char *p1 = NULL;
char *at_sign = NULL;
char *host = NULL;
+#ifdef INET6
+ struct addrinfo *res, *res0;
+#else
+ struct sockaddr_in soc_address;
+ struct sockaddr_in *soc_in = &soc_address;
/*
** Set up defaults.
*/
memset(soc_in, 0, sizeof(*soc_in));
soc_in->sin_family = AF_INET;
- soc_in->sin_port = htons(default_port);
+ soc_in->sin_port = htons((PortNumber) default_port);
+#endif /* INET6 */
/*
** Get node name and optional port number.
@@ -1351,8 +1564,20 @@ PUBLIC int HTDoConnect ARGS4(
}
FREE(p1);
- HTSprintf0 (&line, gettext("Looking up %s."), host);
+ HTSprintf0 (&line, "%s%s", WWW_FIND_MESSAGE, host);
_HTProgress (line);
+#ifdef INET6
+ /* HTParseInet() is useless! */
+ _HTProgress(host);
+ res0 = HTGetAddrInfo(host, default_port);
+ if (res0 == NULL) {
+ HTSprintf0 (&line, gettext("Unable to locate remote host %s."), host);
+ _HTProgress(line);
+ FREE(host);
+ FREE(line);
+ return HT_NO_DATA;
+ }
+#else
status = HTParseInet(soc_in, host);
if (status) {
if (status != HT_INTERRUPTED) {
@@ -1373,8 +1598,9 @@ PUBLIC int HTDoConnect ARGS4(
FREE(line);
return status;
}
+#endif /* INET6 */
- HTSprintf0 (&line, gettext("Making %s connection to %s."), protocol, host);
+ HTSprintf0 (&line, gettext("Making %s connection to %s"), protocol, host);
_HTProgress (line);
FREE(host);
FREE(line);
@@ -1382,11 +1608,27 @@ PUBLIC int HTDoConnect ARGS4(
/*
** Now, let's get a socket set up from the server for the data.
*/
+#ifdef INET6
+ for (res = res0; res; res = res->ai_next) {
+ *s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+ if (*s == -1) {
+ char hostbuf[1024], portbuf[1024];
+ getnameinfo(res->ai_addr, res->ai_addrlen,
+ hostbuf, sizeof(hostbuf), portbuf, sizeof(portbuf),
+ NI_NUMERICHOST|NI_NUMERICSERV);
+ HTSprintf0 (&line, gettext("socket failed: family %d addr %s port %s."),
+ res->ai_family, hostbuf, portbuf);
+ _HTProgress (line);
+ FREE(line);
+ continue;
+ }
+#else
*s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (*s == -1) {
HTAlert(gettext("socket failed."));
return HT_NO_DATA;
}
+#endif /* INET6 */
#ifndef DOSPATH
#if !defined(NO_IOCTL) || defined(USE_FCNTL)
@@ -1415,16 +1657,24 @@ PUBLIC int HTDoConnect ARGS4(
*/
#ifdef SOCKS
if (socks_flag) {
+#ifdef INET6
+ status = Rconnect(*s, res->ai_addr, res->ai_addrlen);
+#else
status = Rconnect(*s, (struct sockaddr*)&soc_address,
sizeof(soc_address));
+#endif /* INET6 */
/*
** For long Rbind.
*/
socks_bind_remoteAddr = soc_address.sin_addr.s_addr;
} else
#endif /* SOCKS */
+#ifdef INET6
+ status = connect(*s, res->ai_addr, res->ai_addrlen);
+#else
status = connect(*s, (struct sockaddr*)&soc_address, sizeof(soc_address));
-#ifndef DJGPP
+#endif /* INET6 */
+#ifndef __DJGPP__
/*
** According to the Sun man page for connect:
** EINPROGRESS The socket is non-blocking and the con-
@@ -1444,11 +1694,18 @@ PUBLIC int HTDoConnect ARGS4(
** the normal case.
*/
if ((status < 0) &&
- (SOCKET_ERRNO == EINPROGRESS || SOCKET_ERRNO == EAGAIN)) {
- struct timeval timeout;
+ (SOCKET_ERRNO == EINPROGRESS
+#ifdef EAGAIN
+ || SOCKET_ERRNO == EAGAIN
+#endif
+ )) {
+ struct timeval select_timeout;
int ret;
int tries=0;
+#ifdef SOCKET_DEBUG_TRACE
+ HTInetStatus("this socket's first connect");
+#endif /* SOCKET_DEBUG_TRACE */
ret = 0;
while (ret <= 0) {
fd_set writefds;
@@ -1456,34 +1713,49 @@ PUBLIC int HTDoConnect ARGS4(
/*
** Protect against an infinite loop.
*/
- if (tries++ >= 180000) {
- HTAlert(gettext("Connection failed for 180,000 tries."));
+ if ((tries++/10) >= connect_timeout) {
+ HTAlert(gettext("Connection failed (too many retries)."));
+#ifdef INET6
+ FREE(line);
+ freeaddrinfo(res0);
+#endif /* INET6 */
return HT_NO_DATA;
}
#ifdef _WINDOWS_NSL
- timeout.tv_sec = 100;
+ select_timeout.tv_sec = connect_timeout;
+ select_timeout.tv_usec = 0;
#else
- timeout.tv_sec = 0;
+ select_timeout.tv_sec = 0;
+ select_timeout.tv_usec = 100000;
#endif /* _WINDOWS_NSL */
- timeout.tv_usec = 100000;
FD_ZERO(&writefds);
- FD_SET(*s, &writefds);
+ FD_SET((unsigned) *s, &writefds);
#ifdef SOCKS
if (socks_flag)
ret = Rselect(FD_SETSIZE, NULL,
- (void *)&writefds, NULL, &timeout);
+ (void *)&writefds, NULL, &select_timeout);
else
#endif /* SOCKS */
- ret = select(FD_SETSIZE, NULL, (void *)&writefds, NULL, &timeout);
+ ret = select(FD_SETSIZE, NULL, (void *)&writefds, NULL, &select_timeout);
- /*
- ** If we suspend, then it is possible that select will be
- ** interrupted. Allow for this possibility. - JED
- */
- if ((ret == -1) && (errno == EINTR))
- continue;
+#ifdef SOCKET_DEBUG_TRACE
+ if (tries == 1) {
+ HTInetStatus("this socket's first select");
+ }
+#endif /* SOCKET_DEBUG_TRACE */
+ /*
+ ** If we suspend, then it is possible that select will be
+ ** interrupted. Allow for this possibility. - JED
+ */
+ if ((ret == -1) && (errno == EINTR))
+ continue;
+#ifdef SOCKET_DEBUG_TRACE
+ if (ret < 0) {
+ HTInetStatus("failed select");
+ }
+#endif /* SOCKET_DEBUG_TRACE */
/*
** Again according to the Sun and Motorola man pages for connect:
** EALREADY The socket is non-blocking and a previ-
@@ -1508,8 +1780,12 @@ PUBLIC int HTDoConnect ARGS4(
status = 0;
} else {
#endif /* SOCKS */
+#ifdef INET6
+ status = connect(*s, res->ai_addr, res->ai_addrlen);
+#else
status = connect(*s, (struct sockaddr*)&soc_address,
sizeof(soc_address));
+#endif /* INET6 */
#ifdef UCX
/*
** A UCX feature: Instead of returning EISCONN
@@ -1527,8 +1803,14 @@ PUBLIC int HTDoConnect ARGS4(
if (status && (SOCKET_ERRNO == EALREADY)) /* new stuff LJM */
ret = 0; /* keep going */
- else
+ else {
+#ifdef SOCKET_DEBUG_TRACE
+ if (status < 0) {
+ HTInetStatus("confirm-ready connect");
+ }
+#endif /* SOCKET_DEBUG_TRACE */
break;
+ }
#ifdef SOCKS
}
#endif /* SOCKS */
@@ -1551,27 +1833,61 @@ PUBLIC int HTDoConnect ARGS4(
** For some reason, UCX pre 3 apparently returns
** errno = 18242 instead the EALREADY or EISCONN.
*/
+#ifdef INET6
+ status = connect(*s, res->ai_addr, res->ai_addrlen);
+#else
status = connect(*s, (struct sockaddr*)&soc_address,
sizeof(soc_address));
+#endif /* INET6 */
if ((status < 0) &&
- (SOCKET_ERRNO != EALREADY && SOCKET_ERRNO != EAGAIN) &&
+ (SOCKET_ERRNO != EALREADY
+#ifdef EAGAIN
+ && SOCKET_ERRNO != EAGAIN
+#endif
+ ) &&
#ifdef UCX
(SOCKET_ERRNO != 18242) &&
#endif /* UCX */
(SOCKET_ERRNO != EISCONN)) {
+#ifdef SOCKET_DEBUG_TRACE
+ HTInetStatus("confirm-not-ready connect");
+#endif /* SOCKET_DEBUG_TRACE */
break;
}
}
if (HTCheckForInterrupt()) {
- CTRACE(tfp, "*** INTERRUPTED in middle of connect.\n");
+ CTRACE((tfp, "*** INTERRUPTED in middle of connect.\n"));
status = HT_INTERRUPTED;
+#ifdef _WINDOWS
+ WSASetLastError(EINTR);
+#else
SOCKET_ERRNO = EINTR;
+#endif
break;
}
}
}
-#endif /* !DJGPP */
- if (status < 0) {
+#ifdef SOCKET_DEBUG_TRACE
+ else if (status < 0) {
+ HTInetStatus("this socket's first and only connect");
+ }
+#endif /* SOCKET_DEBUG_TRACE */
+#ifdef INET6
+ if (status < 0) {
+ NETCLOSE(*s);
+ *s = -1;
+ continue;
+ }
+ break;
+ }
+#endif /* INET6 */
+#endif /* !__DJGPP__ */
+#ifdef INET6
+ if (*s < 0)
+#else
+ if (status < 0)
+#endif /* INET6 */
+ {
/*
** The connect attempt failed or was interrupted,
** so close up the socket.
@@ -1596,6 +1912,10 @@ PUBLIC int HTDoConnect ARGS4(
#endif /* !NO_IOCTL || USE_FCNTL */
#endif /* !DOSPATH */
+#ifdef INET6
+ FREE(line);
+ freeaddrinfo(res0);
+#endif /* INET6 */
return status;
}
@@ -1604,13 +1924,17 @@ PUBLIC int HTDoConnect ARGS4(
*/
PUBLIC int HTDoRead ARGS3(
int, fildes,
- void *, buf,
+ void *, buf,
unsigned, nbyte)
{
int ready, ret;
fd_set readfds;
- struct timeval timeout;
+ struct timeval select_timeout;
int tries=0;
+#ifdef EXP_READPROGRESS
+ int otries = 0;
+ time_t otime = time((time_t *)0);
+#endif
#if defined(UNIX) || defined(UCX)
int nb;
#endif /* UCX, BSN */
@@ -1622,7 +1946,7 @@ PUBLIC int HTDoRead ARGS3(
* have gone wrong. - kw
*/
if (isatty(fildes)) {
- CTRACE(tfp, "HTDoRead - refusing to read fd 0 which is a tty!\n");
+ CTRACE((tfp, "HTDoRead - refusing to read fd 0 which is a tty!\n"));
return -1;
}
} else
@@ -1631,7 +1955,11 @@ PUBLIC int HTDoRead ARGS3(
return -1;
if (HTCheckForInterrupt()) {
+#ifdef _WINDOWS
+ WSASetLastError(EINTR);
+#else
SOCKET_ERRNO = EINTR;
+#endif
return (HT_INTERRUPTED);
}
@@ -1646,27 +1974,43 @@ PUBLIC int HTDoRead ARGS3(
*/
if (tries++ >= 180000) {
HTAlert(gettext("Socket read failed for 180,000 tries."));
+#ifdef _WINDOWS
+ WSASetLastError(EINTR);
+#else
SOCKET_ERRNO = EINTR;
+#endif
return HT_INTERRUPTED;
}
+#ifdef EXP_READPROGRESS
+ if (tries - otries > 10) {
+ time_t t = time((time_t *)0);
+
+ otries = tries;
+ if (t - otime >= 5) {
+ otime = t;
+ HTReadProgress(-1, 0); /* Put "stalled" message */
+ }
+ }
+#endif
+
/*
** If we suspend, then it is possible that select will be
** interrupted. Allow for this possibility. - JED
*/
do {
- timeout.tv_sec = 0;
- timeout.tv_usec = 100000;
+ select_timeout.tv_sec = 0;
+ select_timeout.tv_usec = 100000;
FD_ZERO(&readfds);
- FD_SET(fildes, &readfds);
+ FD_SET((unsigned)fildes, &readfds);
#ifdef SOCKS
if (socks_flag)
ret = Rselect(FD_SETSIZE,
- (void *)&readfds, NULL, NULL, &timeout);
+ (void *)&readfds, NULL, NULL, &select_timeout);
else
#endif /* SOCKS */
ret = select(FD_SETSIZE,
- (void *)&readfds, NULL, NULL, &timeout);
+ (void *)&readfds, NULL, NULL, &select_timeout);
} while ((ret == -1) && (errno == EINTR));
if (ret < 0) {
@@ -1674,7 +2018,11 @@ PUBLIC int HTDoRead ARGS3(
} else if (ret > 0) {
ready = 1;
} else if (HTCheckForInterrupt()) {
+#ifdef _WINDOWS
+ WSASetLastError(EINTR);
+#else
SOCKET_ERRNO = EINTR;
+#endif
return HT_INTERRUPTED;
}
}
@@ -1682,7 +2030,6 @@ PUBLIC int HTDoRead ARGS3(
#if !defined(UCX) || !defined(VAXC)
#ifdef UNIX
while ((nb = SOCKET_READ (fildes, buf, nbyte)) == -1) {
- int saved_errno = errno;
if (errno == EINTR)
continue;
#ifdef ERESTARTSYS
@@ -1690,7 +2037,6 @@ PUBLIC int HTDoRead ARGS3(
continue;
#endif /* ERESTARTSYS */
HTInetStatus("read");
- errno = saved_errno; /* our caller may check it */
break;
}
return nb;
@@ -1704,8 +2050,8 @@ PUBLIC int HTDoRead ARGS3(
*/
errno = vaxc$errno = 0;
nb = SOCKET_READ (fildes, buf, nbyte);
- CTRACE(tfp,
- "Read - nb,errno,vaxc$errno: %d %d %d\n", nb,errno,vaxc$errno);
+ CTRACE((tfp,
+ "Read - nb,errno,vaxc$errno: %d %d %d\n", nb,errno,vaxc$errno));
if ((nb <= 0) && TRACE)
perror ("HTTCP.C:HTDoRead:read"); /* RJF */
/*
@@ -1713,7 +2059,7 @@ PUBLIC int HTDoRead ARGS3(
*/
if ((nb <= 0) && (errno == EPIPE)) {
nb = 0;
- errno = 0;
+ set_errno(0);
}
return nb;
#endif /* UCX, BSN */
@@ -1754,22 +2100,21 @@ PUBLIC int BSDselect ARGS5(
fd_set *, readfds,
fd_set *, writefds,
fd_set *, exceptfds,
- struct timeval *, timeout)
+ struct timeval *, select_timeout)
{
int rval,
i;
#ifdef SOCKS
if (socks_flag)
- rval = Rselect(nfds, readfds, writefds, exceptfds, timeout);
+ rval = Rselect(nfds, readfds, writefds, exceptfds, select_timeout);
else
#endif /* SOCKS */
- rval = select(nfds, readfds, writefds, exceptfds, timeout);
+ rval = select(nfds, readfds, writefds, exceptfds, select_timeout);
switch (rval) {
case -1:
return(rval);
- break;
case 0:
if (readfds != NULL)
@@ -1779,7 +2124,6 @@ PUBLIC int BSDselect ARGS5(
if (exceptfds != NULL)
FD_ZERO(exceptfds);
return(rval);
- break;
default:
for (i = 0, rval = 0; i < nfds; i++) {
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTCP.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTCP.h
index 4e43ed27cd8..91f98c80df9 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTCP.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTCP.h
@@ -10,7 +10,7 @@
#ifndef HTUTILS_H
#include <HTUtils.h>
#endif
-
+
/* Produce a string for an internet address
** ---------------------------------------
**
@@ -18,10 +18,11 @@
** returns a pointer to a static string which must be copied if
** it is to be kept.
*/
-#ifndef _WINDOWS
+#ifdef INET6
+extern CONST char * HTInetString PARAMS((SockA* mysin));
+#else
extern CONST char * HTInetString PARAMS((struct sockaddr_in* mysin));
-#endif
-
+#endif /* INET6 */
/* Encode INET status (as in sys/errno.h) inet_status()
** ------------------
@@ -33,7 +34,7 @@ extern CONST char * HTInetString PARAMS((struct sockaddr_in* mysin));
** On return:
** returns a negative status in the unix way.
*/
-#ifdef __STDC__
+#if defined(__STDC__) || defined(__BORLANDC__) || defined(_MSC_VER)
extern int HTInetStatus(char *where);
#else
extern int HTInetStatus();
@@ -68,7 +69,7 @@ extern unsigned int HTCardinal PARAMS((int *pstatus,
** -------------------------------------------------
*/
-extern BOOL valid_hostname PARAMS((CONST char * name));
+extern BOOL valid_hostname PARAMS((char * name));
/* Resolve an internet hostname, like gethostbyname
** ------------------------------------------------
@@ -86,29 +87,10 @@ extern BOOL valid_hostname PARAMS((CONST char * name));
*/
extern int lynx_nsl_status;
-#ifndef DJGPP
-extern struct hostent * LYGetHostByName PARAMS((
- CONST char * str));
-#endif /* DJGPP */
-
-
-/* Parse an internet node address and port
-** ---------------------------------------
-**
-** On entry:
-** str points to a string with a node name or number,
-** with optional trailing colon and port number.
-** sin points to the binary internet or decnet address field.
-**
-** On exit:
-** *sin is filled in. If no port is specified in str, that
-** field is left unchanged in *sin.
-*/
-#ifdef __STDC__
- extern int HTParseInet(struct sockaddr_in * mysin, CONST char * str);
- /*!! had to change this to get it to compile. CTB */
+#if defined(__DJGPP__) && !defined(WATT32)
+#define LYGetHostByName(host) resolv(host) /* we'll use it the same way */
#else
- extern int HTParseInet();
+extern struct hostent * LYGetHostByName PARAMS((char * str));
#endif
/* Get Name of This Machine
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTP.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTP.c
index 7bad3c773f9..0e7af29de68 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTP.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTP.c
@@ -1,4 +1,4 @@
-/* HyperText Tranfer Protocol - Client implementation HTTP.c
+/* HyperText Tranfer Protocol - Client implementation HTTP.c
** ==========================
** Modified:
** 27 Jan 1994 PDM Added Ari Luotonen's Fix for Reload when using proxy
@@ -7,15 +7,15 @@
*/
#include <HTUtils.h>
+#if defined(__DJGPP__) && defined (WATT32)
+#include <tcp.h>
+#endif /* __DJGPP__ */
#include <HTTP.h>
#include <LYUtils.h>
#ifdef USE_SSL
-#define free_func free__func
-#include <openssl/ssl.h>
-#include <openssl/crypto.h>
-#undef free_func
-#endif /* USE_SSL */
+#include <HTNews.h>
+#endif
#define HTTP_VERSION "HTTP/1.0"
@@ -77,17 +77,17 @@ PUBLIC SSL_CTX * ssl_ctx = NULL; /* SSL ctx */
PRIVATE void free_ssl_ctx NOARGS
{
if (ssl_ctx != NULL)
- SSL_CTX_free(ssl_ctx);
+ SSL_CTX_free(ssl_ctx);
}
PUBLIC SSL * HTGetSSLHandle NOARGS
{
if (ssl_ctx == NULL) {
- /*
+ /*
* First time only.
*/
#if SSLEAY_VERSION_NUMBER < 0x0800
- ssl_ctx = SSL_CTX_new();
+ ssl_ctx = SSL_CTX_new();
X509_set_default_verify_paths(ssl_ctx->cert);
#else
SSLeay_add_ssl_algorithms();
@@ -100,6 +100,44 @@ PUBLIC SSL * HTGetSSLHandle NOARGS
return(SSL_new(ssl_ctx));
}
+PUBLIC void HTSSLInitPRNG NOARGS
+{
+#if SSLEAY_VERSION_NUMBER >= 0x00905100
+ if (RAND_status() == 0) {
+ char rand_file[256];
+ time_t t;
+ pid_t pid;
+ long l,seed;
+
+ t = time(NULL);
+ pid = getpid();
+ RAND_file_name(rand_file, 256);
+ CTRACE((tfp,"HTTP: Seeding PRNG\n"));
+ if(rand_file != NULL) {
+ /* Seed as much as 1024 bytes from RAND_file_name */
+ RAND_load_file(rand_file, 1024);
+ }
+ /* Seed in time (mod_ssl does this) */
+ RAND_seed((unsigned char *)&t, sizeof(time_t));
+ /* Seed in pid (mod_ssl does this) */
+ RAND_seed((unsigned char *)&pid, sizeof(pid_t));
+ /* Initialize system's random number generator */
+ RAND_bytes((unsigned char *)&seed, sizeof(long));
+ lynx_srand(seed);
+ while (RAND_status() == 0) {
+ /* Repeatedly seed the PRNG using the system's random number generator until it has been seeded with enough data */
+ l = lynx_rand();
+ RAND_seed((unsigned char *)&l, sizeof(long));
+ }
+ if (rand_file != NULL) {
+ /* Write a rand_file */
+ RAND_write_file(rand_file);
+ }
+ }
+#endif /* SSLEAY_VERSION_NUMBER >= 0x00905100 */
+ return;
+}
+
#define HTTP_NETREAD(sock, buff, size, handle) \
(handle ? SSL_read(handle, buff, size) : NETREAD(sock, buff, size))
#define HTTP_NETWRITE(sock, buff, size, handle) \
@@ -107,16 +145,185 @@ PUBLIC SSL * HTGetSSLHandle NOARGS
#define HTTP_NETCLOSE(sock, handle) \
{ (void)NETCLOSE(sock); if (handle) SSL_free(handle); handle = NULL; }
-extern int HTNewsProxyConnect PARAMS (( int sock, CONST char *url,
- HTParentAnchor *anAnchor,
- HTFormat format_out,
- HTStream *sink ));
#else
#define HTTP_NETREAD(a, b, c, d) NETREAD(a, b, c)
#define HTTP_NETWRITE(a, b, c, d) NETWRITE(a, b, c)
#define HTTP_NETCLOSE(a, b) (void)NETCLOSE(a)
#endif /* USE_SSL */
+#ifdef _WINDOWS /* 1997/11/06 (Thu) 13:00:08 */
+
+#define BOX_TITLE "Lynx " __FILE__
+#define BOX_FLAG (MB_ICONINFORMATION | MB_SETFOREGROUND)
+
+typedef struct {
+ int fd;
+ char *buf;
+ int len;
+} recv_data_t;
+
+PUBLIC int ws_read_per_sec = 0;
+PRIVATE int ws_errno = 0;
+
+PRIVATE DWORD g_total_times = 0;
+PRIVATE DWORD g_total_bytes = 0;
+
+
+PUBLIC char * str_speed(void)
+{
+ static char buff[32];
+
+ if (ws_read_per_sec > 1000)
+ sprintf(buff, "%d.%03dkB", ws_read_per_sec / 1000,
+ (ws_read_per_sec % 1000) );
+ else
+ sprintf(buff, "%3d", ws_read_per_sec);
+
+ return buff;
+}
+
+/* The same like read, but takes care of EINTR and uses select to
+ timeout the stale connections. */
+
+PRIVATE int ws_read(int fd, char *buf, int len)
+{
+ int res;
+ int retry = 3;
+
+ do {
+ res = recv(fd, buf, len, 0);
+ if (WSAEWOULDBLOCK == WSAGetLastError()) {
+ Sleep(100);
+ if (retry-- > 0)
+ continue;
+ }
+ } while (res == SOCKET_ERROR && SOCKET_ERRNO == EINTR);
+
+ return res;
+}
+
+PRIVATE void _thread_func (void *p)
+{
+ int i, val, ret;
+ recv_data_t *q = (recv_data_t *)p;
+
+ i = 0;
+ i++;
+ val = ws_read(q->fd, q->buf, q->len);
+
+ if (val == SOCKET_ERROR) {
+ ws_errno = WSAGetLastError();
+#if 0
+ char buff[256];
+ sprintf(buff, "Thread read: %d, error (%ld), fd = %d, len = %d",
+ i, ws_errno, q->fd, q->len);
+ MessageBox(NULL, buff, BOX_TITLE, BOX_FLAG);
+#endif
+ ret = -1;
+ } else {
+ ret = val;
+ }
+
+ ExitThread((DWORD)ret);
+}
+
+/* The same like read, but takes care of EINTR and uses select to
+ timeout the stale connections. */
+
+PUBLIC int ws_netread(int fd, char *buf, int len)
+{
+ int i;
+ char buff[256];
+
+ /* 1998/03/30 (Mon) 09:01:21 */
+ HANDLE hThread;
+ DWORD dwThreadID;
+ DWORD exitcode = 0;
+ DWORD ret_val = -1, val, process_time, now_TickCount, save_TickCount;
+
+ static recv_data_t para;
+
+ extern int win32_check_interrupt(void); /* LYUtil.c */
+ extern int lynx_timeout; /* LYMain.c */
+ extern int AlertSecs; /* LYMain.c */
+ extern CRITICAL_SECTION critSec_READ; /* LYMain.c */
+
+#define TICK 5
+#define STACK_SIZE 0x2000uL
+
+ InitializeCriticalSection(&critSec_READ);
+
+ para.fd = fd;
+ para.buf = buf;
+ para.len = len;
+
+ ws_read_per_sec = 0;
+ save_TickCount = GetTickCount();
+
+ hThread = CreateThread((void *)NULL, STACK_SIZE,
+ (LPTHREAD_START_ROUTINE)_thread_func,
+ (void *)&para, 0UL, &dwThreadID);
+
+ if (hThread == 0) {
+ HTInfoMsg("CreateThread Failed (read)");
+ goto read_exit;
+ }
+
+ i = 0;
+ while (1) {
+ val = WaitForSingleObject(hThread, 1000/TICK);
+ i++;
+ if (val == WAIT_FAILED) {
+ HTInfoMsg("Wait Failed");
+ ret_val = -1;
+ break;
+ } else if (val == WAIT_TIMEOUT) {
+ i++;
+ if (i/TICK > (AlertSecs + 2)) {
+ sprintf(buff, "Read Waiting (%2d.%01d) for %d Bytes",
+ i/TICK, (i%TICK) * 10 / TICK, len);
+ SetConsoleTitle(buff);
+ }
+ if (win32_check_interrupt() || ((i/TICK) > lynx_timeout)) {
+ if (CloseHandle(hThread) == FALSE) {
+ HTInfoMsg("Thread terminate Failed");
+ }
+ WSASetLastError(ETIMEDOUT);
+ ret_val = HT_INTERRUPTED;
+ break;
+ }
+ } else if (val == WAIT_OBJECT_0) {
+ if (GetExitCodeThread(hThread, &exitcode) == FALSE) {
+ exitcode = -1;
+ }
+ if (CloseHandle(hThread) == FALSE) {
+ HTInfoMsg("Thread terminate Failed");
+ }
+ now_TickCount = GetTickCount();
+ if (now_TickCount > save_TickCount)
+ process_time = now_TickCount - save_TickCount;
+ else
+ process_time = now_TickCount + (0xffffffff - save_TickCount);
+
+ g_total_times += process_time;
+ g_total_bytes += exitcode;
+
+ if (g_total_bytes > 2000000) {
+ ws_read_per_sec = g_total_bytes / (g_total_times/1000);
+ } else {
+ ws_read_per_sec = g_total_bytes * 1000 / g_total_times;
+ }
+ ret_val = exitcode;
+ break;
+ }
+ } /* end while(1) */
+
+ read_exit:
+ LeaveCriticalSection(&critSec_READ);
+ return ret_val;
+}
+#endif
+
/* Load Document from HTTP Server HTLoadHTTP()
** ==============================
@@ -143,39 +350,42 @@ PRIVATE int HTLoadHTTP ARGS4 (
{
int s; /* Socket number for returned data */
CONST char *url = arg; /* The URL which get_physical() returned */
- char *command = NULL; /* The whole command */
+ char *command = NULL; /* The whole command */
char *eol; /* End of line if found */
char *start_of_data; /* Start of body of reply */
int status; /* tcp return */
int bytes_already_read;
- char crlf[3]; /* A CR LF equivalent string */
+ char crlf[3]; /* A CR LF equivalent string */
HTStream *target; /* Unconverted data */
HTFormat format_in; /* Format arriving in the message */
- BOOL do_head = FALSE; /* Whether or not we should do a head */
- BOOL do_post = FALSE; /* ARE WE posting ? */
+ BOOL do_head = FALSE; /* Whether or not we should do a head */
+ BOOL do_post = FALSE; /* ARE WE posting ? */
char *METHOD;
BOOL had_header; /* Have we had at least one header? */
char *line_buffer;
char *line_kept_clean;
+ int real_length_of_line;
BOOL extensions; /* Assume good HTTP server */
- char line[INIT_LINE_SIZE];
+ char *linebuf = NULL;
char temp[80];
BOOL first_Accept = TRUE;
BOOL show_401 = FALSE;
BOOL show_407 = FALSE;
- BOOL auth_proxy = NO; /* Generate a proxy authorization. - AJL */
+ BOOL auth_proxy = NO; /* Generate a proxy authorization. - AJL */
- int length, rv;
- BOOL doing_redirect, already_retrying = FALSE, bad_location = FALSE;
+ int length, rawlength, rv;
+ int server_status;
+ BOOL doing_redirect, already_retrying = FALSE;
int len = 0;
#ifdef USE_SSL
- BOOL do_connect = FALSE; /* ARE WE going to use a proxy tunnel ? */
- BOOL did_connect = FALSE; /* ARE WE actually using a proxy tunnel ? */
+ BOOL do_connect = FALSE; /* ARE WE going to use a proxy tunnel ? */
+ BOOL did_connect = FALSE; /* ARE WE actually using a proxy tunnel ? */
CONST char *connect_url = NULL; /* The URL being proxied */
- char *connect_host = NULL; /* The host being proxied */
- SSL * handle = NULL; /* The SSL handle */
+ char *connect_host = NULL; /* The host being proxied */
+ SSL * handle = NULL; /* The SSL handle */
+ char SSLprogress[256]; /* progress bar message */
#if SSLEAY_VERSION_NUMBER >= 0x0900
BOOL try_tls = TRUE;
#endif /* SSLEAY_VERSION_NUMBER >= 0x0900 */
@@ -201,24 +411,24 @@ PRIVATE int HTLoadHTTP ARGS4 (
#ifdef USE_SSL
if (using_proxy && !strncmp(url, "http://", 7)) {
- if (connect_url = strstr((url+7), "https://")) {
+ if ((connect_url = strstr((url+7), "https://"))) {
do_connect = TRUE;
connect_host = HTParse(connect_url, "https", PARSE_HOST);
if (!strchr(connect_host, ':')) {
sprintf(temp, ":%d", HTTPS_PORT);
StrAllocCat(connect_host, temp);
}
- CTRACE(tfp, "HTTP: connect_url = '%s'\n", connect_url);
- CTRACE(tfp, "HTTP: connect_host = '%s'\n", connect_host);
- } else if (connect_url = strstr((url+7), "snews://")) {
+ CTRACE((tfp, "HTTP: connect_url = '%s'\n", connect_url));
+ CTRACE((tfp, "HTTP: connect_host = '%s'\n", connect_host));
+ } else if ((connect_url = strstr((url+7), "snews://"))) {
do_connect = TRUE;
connect_host = HTParse(connect_url, "snews", PARSE_HOST);
if (!strchr(connect_host, ':')) {
sprintf(temp, ":%d", SNEWS_PORT);
StrAllocCat(connect_host, temp);
}
- CTRACE(tfp, "HTTP: connect_url = '%s'\n", connect_url);
- CTRACE(tfp, "HTTP: connect_host = '%s'\n", connect_host);
+ CTRACE((tfp, "HTTP: connect_url = '%s'\n", connect_url));
+ CTRACE((tfp, "HTTP: connect_host = '%s'\n", connect_host));
}
}
#endif /* USE_SSL */
@@ -245,12 +455,13 @@ try_again:
line_buffer = NULL;
line_kept_clean = NULL;
- if (!strncmp(url, "https", 5))
#ifdef USE_SSL
+ if (!strncmp(url, "https", 5))
status = HTDoConnect (url, "HTTPS", HTTPS_PORT, &s);
else
status = HTDoConnect (url, "HTTP", HTTP_PORT, &s);
#else
+ if (!strncmp(url, "https", 5))
{
HTAlert(gettext("This client does not contain support for HTTPS URLs."));
status = HT_NOT_LOADED;
@@ -262,19 +473,31 @@ try_again:
/*
** Interrupt cleanly.
*/
- CTRACE (tfp, "HTTP: Interrupted on connect; recovering cleanly.\n");
+ CTRACE((tfp, "HTTP: Interrupted on connect; recovering cleanly.\n"));
_HTProgress (CONNECTION_INTERRUPTED);
status = HT_NOT_LOADED;
goto done;
}
if (status < 0) {
- CTRACE(tfp, "HTTP: Unable to connect to remote host for `%s' (errno = %d).\n",
- url, SOCKET_ERRNO);
+#ifdef _WINDOWS
+ CTRACE((tfp, "HTTP: Unable to connect to remote host for `%s'\n"
+ " (status = %d, sock_errno = %d).\n",
+ url, status, SOCKET_ERRNO));
+#else
+ CTRACE((tfp,
+ "HTTP: Unable to connect to remote host for `%s' (errno = %d).\n",
+ url, SOCKET_ERRNO));
+#endif
HTAlert(gettext("Unable to connect to remote host."));
status = HT_NOT_LOADED;
goto done;
}
+/* *sob* All this needs to be converted to handle binary strings
+ * if we're going to be able to handle binary form uploads...
+ * This is a nice long function as well. *sigh* -RJP
+ */
+
#ifdef USE_SSL
use_tunnel:
/*
@@ -286,51 +509,63 @@ use_tunnel:
SSL_set_fd(handle, s);
#if SSLEAY_VERSION_NUMBER >= 0x0900
if (!try_tls)
- handle->options|=SSL_OP_NO_TLSv1;
+ handle->options|=SSL_OP_NO_TLSv1;
#endif /* SSLEAY_VERSION_NUMBER >= 0x0900 */
+ HTSSLInitPRNG();
status = SSL_connect(handle);
if (status <= 0) {
#if SSLEAY_VERSION_NUMBER >= 0x0900
if (try_tls) {
- CTRACE(tfp, "HTTP: Retrying connection without TLS\n");
+ CTRACE((tfp, "HTTP: Retrying connection without TLS\n"));
_HTProgress("Retrying connection.");
try_tls = FALSE;
if (did_connect)
- HTTP_NETCLOSE(s, handle);
- goto try_again;
+ HTTP_NETCLOSE(s, handle);
+ goto try_again;
} else {
- CTRACE(tfp,
-"HTTP: Unable to complete SSL handshake for remote host '%s' (SSLerror = %d)\n",
- url, status);
- HTAlert("Unable to make secure connection to remote host.");
+ unsigned long SSLerror;
+ CTRACE((tfp,
+"HTTP: Unable to complete SSL handshake for '%s', SSL_connect=%d, SSL error stack dump follows\n",
+ url, status));
+ SSL_load_error_strings();
+ while((SSLerror=ERR_get_error())!=0) {
+ CTRACE((tfp,"HTTP: SSL: %s\n",ERR_error_string(SSLerror,NULL)));
+ }
+ HTAlert("Unable to make secure connection to remote host.");
if (did_connect)
- HTTP_NETCLOSE(s, handle);
- status = HT_NOT_LOADED;
- goto done;
+ HTTP_NETCLOSE(s, handle);
+ status = HT_NOT_LOADED;
+ goto done;
}
#else
- CTRACE(tfp,
-"HTTP: Unable to complete SSL handshake for remote host '%s' (SSLerror = %d)\n",
- url, status);
- HTAlert("Unable to make secure connection to remote host.");
+ unsigned long SSLerror;
+ CTRACE((tfp,
+"HTTP: Unable to complete SSL handshake for '%s', SSL_connect=%d, SSL error stack dump follows\n",
+ url, status));
+ SSL_load_error_strings();
+ while((SSLerror=ERR_get_error())!=0) {
+ CTRACE((tfp,"HTTP: SSL: %s\n",ERR_error_string(SSLerror,NULL)));
+ }
+ HTAlert("Unable to make secure connection to remote host.");
if (did_connect)
HTTP_NETCLOSE(s, handle);
- status = HT_NOT_LOADED;
- goto done;
+ status = HT_NOT_LOADED;
+ goto done;
#endif /* SSLEAY_VERSION_NUMBER >= 0x0900 */
}
- _HTProgress (SSL_get_cipher(handle));
+ sprintf(SSLprogress,"Secure %d-bit %s (%s) HTTP connection",SSL_get_cipher_bits(handle,NULL),SSL_get_cipher_version(handle),SSL_get_cipher(handle));
+ _HTProgress(SSLprogress);
#ifdef NOTDEFINED
if (strcmp(HTParse(url, "", PARSE_HOST),
- strstr(X509_NAME_oneline(
- X509_get_subject_name(
+ strstr(X509_NAME_oneline(
+ X509_get_subject_name(
handle->session->peer)),"/CN=")+4)) {
HTAlert("Certificate is for different host name");
HTAlert(strstr(X509_NAME_oneline(
- X509_get_subject_name(
- handle->session->peer)),"/CN=")+4);
+ X509_get_subject_name(
+ handle->session->peer)),"/CN=")+4);
}
#endif /* NOTDEFINED */
}
@@ -368,8 +603,8 @@ use_tunnel:
if (using_proxy && !did_connect) {
if (do_connect)
StrAllocCat(command, connect_host);
- else
- StrAllocCat(command, p1+1);
+ else
+ StrAllocCat(command, p1+1);
}
#else
if (using_proxy)
@@ -391,8 +626,7 @@ use_tunnel:
char * host = NULL;
if ((host = HTParse(anAnchor->address, "", PARSE_HOST)) != NULL) {
- sprintf(line, "Host: %s%c%c", host, CR,LF);
- StrAllocCat(command, line);
+ HTSprintf(&command, "Host: %s%c%c", host, CR,LF);
FREE(host);
}
@@ -405,70 +639,61 @@ use_tunnel:
for (i = 0; i < n; i++) {
HTPresentation *pres =
(HTPresentation *)HTList_objectAt(HTPresentations, i);
- if (pres->rep_out == WWW_PRESENT) {
- if (pres->rep != WWW_SOURCE &&
- strcasecomp(HTAtom_name(pres->rep), "www/mime") &&
- strcasecomp(HTAtom_name(pres->rep), "www/compressed") &&
- pres->quality <= 1.0 && pres->quality >= 0.0) {
- if (pres->quality < 1.0) {
- if (pres->maxbytes > 0) {
- 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=%ld", pres->maxbytes);
+ if (pres->get_accept) {
+ if (pres->quality < 1.0) {
+ if (pres->maxbytes > 0) {
+ sprintf(temp, ";q=%4.3f;mxb=%ld",
+ pres->quality, pres->maxbytes);
} else {
- temp[0] = '\0';
+ sprintf(temp, ";q=%4.3f", pres->quality);
}
- sprintf(line, "%s%s%s",
- (first_Accept ?
- "Accept: " : ", "),
+ } else if (pres->maxbytes > 0) {
+ sprintf(temp, ";mxb=%ld", pres->maxbytes);
+ } else {
+ temp[0] = '\0';
+ }
+ HTSprintf0(&linebuf, "%s%s%s",
+ (first_Accept ?
+ "Accept: " : ", "),
+ HTAtom_name(pres->rep),
+ temp);
+ len += strlen(linebuf);
+ if (len > 252 && !first_Accept) {
+ StrAllocCat(command, crlf);
+ HTSprintf0(&linebuf, "Accept: %s%s",
HTAtom_name(pres->rep),
temp);
- len += strlen(line);
- if (len > 252 && !first_Accept) {
- StrAllocCat(command, crlf);
- sprintf(line, "Accept: %s%s",
- HTAtom_name(pres->rep),
- temp);
- len = strlen(line);
- }
- StrAllocCat(command, line);
- first_Accept = FALSE;
+ len = strlen(linebuf);
}
+ StrAllocCat(command, linebuf);
+ first_Accept = FALSE;
}
}
- sprintf(line, "%s*/*;q=0.01%c%c",
+ HTSprintf(&command, "%s*/*;q=0.01%c%c",
(first_Accept ?
"Accept: " : ", "), CR, LF);
- StrAllocCat(command, line);
first_Accept = FALSE;
len = 0;
- sprintf(line, "Accept-Encoding: %s, %s%c%c",
+ HTSprintf(&command, "Accept-Encoding: %s, %s%c%c",
"gzip", "compress", CR, LF);
- StrAllocCat(command, line);
if (language && *language) {
- sprintf(line, "Accept-Language: %s%c%c", language, CR, LF);
- StrAllocCat(command, line);
+ HTSprintf(&command, "Accept-Language: %s%c%c", language, CR, LF);
}
if (pref_charset && *pref_charset) {
StrAllocCat(command, "Accept-Charset: ");
- strcpy(line, pref_charset);
- if (line[strlen(line)-1] == ',')
- line[strlen(line)-1] = '\0';
- LYLowerCase(line);
- if (strstr(line, "iso-8859-1") == NULL)
- strcat(line, ", iso-8859-1;q=0.01");
- if (strstr(line, "us-ascii") == NULL)
- strcat(line, ", us-ascii;q=0.01");
- StrAllocCat(command, line);
- sprintf(line, "%c%c", CR, LF);
- StrAllocCat(command, line);
+ StrAllocCopy(linebuf, pref_charset);
+ if (linebuf[strlen(linebuf)-1] == ',')
+ linebuf[strlen(linebuf)-1] = '\0';
+ LYLowerCase(linebuf);
+ if (strstr(linebuf, "iso-8859-1") == NULL)
+ StrAllocCat(linebuf, ", iso-8859-1;q=0.01");
+ if (strstr(linebuf, "us-ascii") == NULL)
+ StrAllocCat(linebuf, ", us-ascii;q=0.01");
+ StrAllocCat(command, linebuf);
+ HTSprintf(&command, "%c%c", CR, LF);
}
#if 0
@@ -495,8 +720,7 @@ use_tunnel:
** new-httpd@apache.org from Koen Holtman, Jan 1999.
*/
if (!do_post) {
- sprintf(line, "Negotiate: trans%c%c", CR, LF);
- StrAllocCat(command, line);
+ HTSprintf(&command, "Negotiate: trans%c%c", CR, LF);
}
#endif /* 0 */
@@ -507,31 +731,32 @@ use_tunnel:
** Also send it as a Cache-Control header for HTTP/1.1. - FM
*/
if (reloading) {
- sprintf(line, "Pragma: no-cache%c%c", CR, LF);
- StrAllocCat(command, line);
- sprintf(line, "Cache-Control: no-cache%c%c", CR, LF);
- StrAllocCat(command, line);
+ HTSprintf(&command, "Pragma: no-cache%c%c", CR, LF);
+ HTSprintf(&command, "Cache-Control: no-cache%c%c", CR, LF);
}
if (LYUserAgent && *LYUserAgent) {
- sprintf(line, "User-Agent: %s%c%c", LYUserAgent, CR, LF);
+ char *cp = LYSkipBlanks(LYUserAgent);
+ /* Won't send it at all if all blank - kw */
+ if (*cp != '\0')
+ HTSprintf(&command, "User-Agent: %.*s%c%c",
+ INIT_LINE_SIZE-15, LYUserAgent, CR, LF);
} else {
- sprintf(line, "User-Agent: %s/%s libwww-FM/%s%c%c",
+ HTSprintf(&command, "User-Agent: %s/%s libwww-FM/%s%c%c",
HTAppName ? HTAppName : "unknown",
HTAppVersion ? HTAppVersion : "0.0",
HTLibraryVersion, CR, LF);
}
- StrAllocCat(command, line);
if (personal_mail_address && !LYNoFromHeader) {
- sprintf(line, "From: %s%c%c", personal_mail_address, CR,LF);
- StrAllocCat(command, line);
+ HTSprintf(&command, "From: %s%c%c", personal_mail_address, CR,LF);
}
if (!(LYUserSpecifiedURL ||
LYNoRefererHeader || LYNoRefererForThis) &&
strcmp(HTLoadedDocumentURL(), "")) {
- char *cp = HTLoadedDocumentURL();
+ char *cp = LYRequestReferer;
+ if (!cp) cp = HTLoadedDocumentURL(); /* @@@ Try both? - kw */
StrAllocCat(command, "Referer: ");
if (!strncasecomp(cp, "LYNXIMGMAP:", 11)) {
char *cp1 = strchr(cp, '#');
@@ -543,8 +768,7 @@ use_tunnel:
} else {
StrAllocCat(command, cp);
}
- sprintf(line, "%c%c", CR, LF);
- StrAllocCat(command, line);
+ HTSprintf(&command, "%c%c", CR, LF);
}
{
@@ -554,7 +778,7 @@ use_tunnel:
char *colon;
int portnumber;
char *auth, *cookie = NULL;
- BOOL secure = (strncmp(anAnchor->address, "https", 5) ?
+ BOOL secure = (BOOL) (strncmp(anAnchor->address, "https", 5) ?
FALSE : TRUE);
abspath = HTParse(arg, "", PARSE_PATH|PARSE_PUNCTUATION);
@@ -606,9 +830,8 @@ use_tunnel:
** If auth is not NULL nor zero-length, it's
** an Authorization header to be included. - FM
*/
- sprintf(line, "%s%c%c", auth, CR, LF);
- StrAllocCat(command, line);
- CTRACE(tfp, "HTTP: Sending authorization: %s\n", auth);
+ HTSprintf(&command, "%s%c%c", auth, CR, LF);
+ CTRACE((tfp, "HTTP: Sending authorization: %s\n", auth));
} else if (auth && *auth == '\0') {
/*
** If auth is a zero-length string, the user either
@@ -622,7 +845,7 @@ use_tunnel:
if (traversal || dump_output_immediately)
HTAlert(FAILED_NEED_PASSWD);
#ifdef USE_SSL
- if(did_connect)
+ if (did_connect)
HTTP_NETCLOSE(s, handle);
#endif /* USE_SSL */
FREE(command);
@@ -635,7 +858,7 @@ use_tunnel:
goto done;
}
} else {
- CTRACE(tfp, "HTTP: Not sending authorization (yet).\n");
+ CTRACE((tfp, "HTTP: Not sending authorization (yet).\n"));
}
/*
** Add 'Cookie:' header, if it's HTTP or HTTPS
@@ -668,7 +891,7 @@ use_tunnel:
*/
StrAllocCat(command, "Cookie2: $Version=\"1\"");
StrAllocCat(command, crlf);
- CTRACE(tfp, "HTTP: Sending Cookie2: $Version =\"1\"\n");
+ CTRACE((tfp, "HTTP: Sending Cookie2: $Version =\"1\"\n"));
}
if (*cookie != '\0') {
/*
@@ -679,7 +902,7 @@ use_tunnel:
StrAllocCat(command, "Cookie: ");
StrAllocCat(command, cookie);
StrAllocCat(command, crlf);
- CTRACE(tfp, "HTTP: Sending Cookie: %s\n", cookie);
+ CTRACE((tfp, "HTTP: Sending Cookie: %s\n", cookie));
}
FREE(cookie);
}
@@ -702,12 +925,11 @@ use_tunnel:
** an Authorization or Proxy-Authorization
** header to be included. - FM
*/
- sprintf(line, "%s%c%c", auth, CR, LF);
- StrAllocCat(command, line);
- CTRACE(tfp, (auth_proxy ?
+ HTSprintf(&command, "%s%c%c", auth, CR, LF);
+ CTRACE((tfp, (auth_proxy ?
"HTTP: Sending proxy authorization: %s\n" :
"HTTP: Sending authorization: %s\n"),
- auth);
+ auth));
} else if (auth && *auth == '\0') {
/*
** If auth is a zero-length string, the user either
@@ -730,9 +952,9 @@ use_tunnel:
goto done;
}
} else {
- CTRACE(tfp, (auth_proxy ?
+ CTRACE((tfp, (auth_proxy ?
"HTTP: Not sending proxy authorization (yet).\n" :
- "HTTP: Not sending authorization (yet).\n"));
+ "HTTP: Not sending authorization (yet).\n")));
}
FREE(hostname);
FREE(docname);
@@ -740,44 +962,44 @@ use_tunnel:
auth_proxy = NO;
}
+ if (
#ifdef USE_SSL
- if (!do_connect && do_post) {
-#else
- if (do_post) {
+ !do_connect &&
#endif /* USE_SSL */
- CTRACE (tfp, "HTTP: Doing post, content-type '%s'\n",
+ do_post) {
+ CTRACE((tfp, "HTTP: Doing post, content-type '%s'\n",
anAnchor->post_content_type ? anAnchor->post_content_type
- : "lose");
- sprintf (line, "Content-type: %s%c%c",
- anAnchor->post_content_type ? anAnchor->post_content_type
- : "lose", CR, LF);
- StrAllocCat(command, line);
- {
- int content_length;
- if (!anAnchor->post_data)
- content_length = 0;
- else
- content_length = strlen (anAnchor->post_data);
- sprintf (line, "Content-length: %d%c%c",
- content_length, CR, LF);
- StrAllocCat(command, line);
- }
-
- StrAllocCat(command, crlf); /* Blank line means "end" of headers */
-
- StrAllocCat(command, anAnchor->post_data);
+ : "lose"));
+ HTSprintf(&command, "Content-type: %s%c%c",
+ anAnchor->post_content_type
+ ? anAnchor->post_content_type
+ : "lose",
+ CR, LF);
+/*
+ * Ack! This assumes non-binary data! Icky!
+ *
+ */
+ HTSprintf(&command, "Content-length: %d%c%c",
+ (anAnchor->post_data)
+ ? strlen (anAnchor->post_data)
+ : 0,
+ CR, LF);
+
+ StrAllocCat(command, crlf); /* Blank line means "end" of headers */
+
+ StrAllocCat(command, anAnchor->post_data);
}
- else
- StrAllocCat(command, crlf); /* Blank line means "end" of headers */
+ else
+ StrAllocCat(command, crlf); /* Blank line means "end" of headers */
#ifdef USE_SSL
- CTRACE (tfp, "Writing:\n%s%s----------------------------------\n",
+ CTRACE((tfp, "Writing:\n%s%s----------------------------------\n",
command,
- (anAnchor->post_data && !do_connect ? crlf : ""));
+ (anAnchor->post_data && !do_connect ? crlf : "")));
#else
- CTRACE (tfp, "Writing:\n%s%s----------------------------------\n",
+ CTRACE((tfp, "Writing:\n%s%s----------------------------------\n",
command,
- (anAnchor->post_data ? crlf : ""));
+ (anAnchor->post_data ? crlf : "")));
#endif /* USE_SSL */
_HTProgress (gettext("Sending HTTP request."));
@@ -791,9 +1013,10 @@ use_tunnel:
#endif /* NOT_ASCII */
status = HTTP_NETWRITE(s, command, (int)strlen(command), handle);
FREE(command);
+ FREE(linebuf);
if (status <= 0) {
if (status == 0) {
- CTRACE (tfp, "HTTP: Got status 0 in initial write\n");
+ CTRACE((tfp, "HTTP: Got status 0 in initial write\n"));
/* Do nothing. */
} else if ((SOCKET_ERRNO == ENOTCONN ||
SOCKET_ERRNO == ECONNRESET ||
@@ -803,14 +1026,14 @@ use_tunnel:
/*
** Arrrrgh, HTTP 0/1 compability problem, maybe.
*/
- CTRACE (tfp, "HTTP: BONZO ON WRITE Trying again with HTTP0 request.\n");
+ CTRACE((tfp, "HTTP: BONZO ON WRITE Trying again with HTTP0 request.\n"));
_HTProgress (RETRYING_AS_HTTP0);
HTTP_NETCLOSE(s, handle);
extensions = NO;
already_retrying = TRUE;
goto try_again;
} else {
- CTRACE (tfp, "HTTP: Hit unexpected network WRITE error; aborting connection.\n");
+ CTRACE((tfp, "HTTP: Hit unexpected network WRITE error; aborting connection.\n"));
HTTP_NETCLOSE(s, handle);
status = -1;
HTAlert(gettext("Unexpected network write error; connection aborted."));
@@ -818,7 +1041,7 @@ use_tunnel:
}
}
- CTRACE (tfp, "HTTP: WRITE delivered OK\n");
+ CTRACE((tfp, "HTTP: WRITE delivered OK\n"));
_HTProgress (gettext("HTTP request sent; waiting for response."));
/* Read the first line of the response
@@ -829,7 +1052,7 @@ use_tunnel:
BOOL end_of_file = NO;
int buffer_length = INIT_LINE_SIZE;
- line_buffer = (char *)calloc(1, (buffer_length * sizeof(char)));
+ line_buffer = typecallocn(char, buffer_length);
if (line_buffer == NULL)
outofmem(__FILE__, "HTLoadHTTP");
@@ -845,31 +1068,33 @@ use_tunnel:
if (line_buffer == NULL)
outofmem(__FILE__, "HTLoadHTTP");
}
- CTRACE (tfp, "HTTP: Trying to read %d\n",
- buffer_length - length - 1);
+ CTRACE((tfp, "HTTP: Trying to read %d\n", buffer_length - length - 1));
status = HTTP_NETREAD(s, line_buffer + length,
buffer_length - length - 1, handle);
- CTRACE (tfp, "HTTP: Read %d\n", status);
+ CTRACE((tfp, "HTTP: Read %d\n", status));
if (status <= 0) {
/*
* Retry if we get nothing back too.
* Bomb out if we get nothing twice.
*/
if (status == HT_INTERRUPTED) {
- CTRACE (tfp, "HTTP: Interrupted initial read.\n");
+ CTRACE((tfp, "HTTP: Interrupted initial read.\n"));
_HTProgress (CONNECTION_INTERRUPTED);
HTTP_NETCLOSE(s, handle);
status = HT_NO_DATA;
goto clean_up;
} else if (status < 0 &&
(SOCKET_ERRNO == ENOTCONN ||
+#ifdef _WINDOWS /* 1997/11/09 (Sun) 16:59:58 */
+ SOCKET_ERRNO == ETIMEDOUT ||
+#endif
SOCKET_ERRNO == ECONNRESET ||
SOCKET_ERRNO == EPIPE) &&
!already_retrying && !do_post) {
/*
** Arrrrgh, HTTP 0/1 compability problem, maybe.
*/
- CTRACE (tfp, "HTTP: BONZO Trying again with HTTP0 request.\n");
+ CTRACE((tfp, "HTTP: BONZO Trying again with HTTP0 request.\n"));
HTTP_NETCLOSE(s, handle);
FREE(line_buffer);
FREE(line_kept_clean);
@@ -879,8 +1104,8 @@ use_tunnel:
_HTProgress (RETRYING_AS_HTTP0);
goto try_again;
} else {
- CTRACE (tfp, "HTTP: Hit unexpected network read error; aborting connection; status %d.\n",
- status);
+ CTRACE((tfp, "HTTP: Hit unexpected network read error; aborting connection; status %d.\n",
+ status));
HTAlert(gettext("Unexpected network read error; connection aborted."));
HTTP_NETCLOSE(s, handle);
status = -1;
@@ -916,6 +1141,7 @@ use_tunnel:
if (line_kept_clean == NULL)
outofmem(__FILE__, "HTLoadHTTP");
memcpy(line_kept_clean, line_buffer, buffer_length);
+ real_length_of_line = length + status;
}
eol = strchr(line_buffer + length, LF);
@@ -939,11 +1165,13 @@ use_tunnel:
while (!eol && !end_of_file && bytes_already_read < 100);
} /* Scope of loop variables */
+ /* save total length, in case we decide later to show it all - kw */
+ rawlength = length;
/* We now have a terminated unfolded line. Parse it.
** --------------------------------------------------
*/
- CTRACE(tfp, "HTTP: Rx: %s\n", line_buffer);
+ CTRACE((tfp, "HTTP: Rx: %s\n", line_buffer));
/*
** Kludge to work with old buggy servers and the VMS Help gateway.
@@ -959,7 +1187,7 @@ use_tunnel:
FREE(line_kept_clean);
extensions = NO;
already_retrying = TRUE;
- CTRACE(tfp, "HTTP: close socket %d to retry with HTTP0\n", s);
+ CTRACE((tfp, "HTTP: close socket %d to retry with HTTP0\n", s));
HTTP_NETCLOSE(s, handle);
/* print a progress message */
_HTProgress (RETRYING_AS_HTTP0);
@@ -970,7 +1198,6 @@ use_tunnel:
{
int fields;
char server_version[VERSION_LENGTH+1];
- int server_status;
server_version[0] = 0;
@@ -978,18 +1205,18 @@ use_tunnel:
server_version,
&server_status);
- CTRACE (tfp, "HTTP: Scanned %d fields from line_buffer\n", fields);
+ CTRACE((tfp, "HTTP: Scanned %d fields from line_buffer\n", fields));
if (http_error_file) { /* Make the status code externally available */
FILE *error_file;
#ifdef SERVER_STATUS_ONLY
- error_file = fopen(http_error_file, "w");
+ error_file = fopen(http_error_file, TXT_W);
if (error_file) { /* Managed to open the file */
fprintf(error_file, "error=%d\n", server_status);
fclose(error_file);
}
#else
- error_file = fopen(http_error_file, "a");
+ error_file = fopen(http_error_file, TXT_A);
if (error_file) { /* Managed to open the file */
fprintf(error_file, " URL=%s (%s)\n", url, METHOD);
fprintf(error_file, "STATUS=%s\n", line_buffer);
@@ -1010,7 +1237,7 @@ use_tunnel:
*/
HTAtom * encoding;
- CTRACE (tfp, "--- Talking HTTP0.\n");
+ CTRACE((tfp, "--- Talking HTTP0.\n"));
format_in = HTFileFormat(url, &encoding, NULL);
/*
@@ -1019,19 +1246,19 @@ use_tunnel:
** without looking at content.
*/
if (!strncmp(HTAtom_name(format_in), "text/plain",10)) {
- CTRACE(tfp, "HTTP: format_in being changed to text/HTML\n");
+ CTRACE((tfp, "HTTP: format_in being changed to text/HTML\n"));
format_in = WWW_HTML;
}
if (!IsUnityEnc(encoding)) {
/*
** Change the format to that for "www/compressed".
*/
- CTRACE(tfp, "HTTP: format_in is '%s',\n", HTAtom_name(format_in));
+ CTRACE((tfp, "HTTP: format_in is '%s',\n", HTAtom_name(format_in)));
StrAllocCopy(anAnchor->content_type, HTAtom_name(format_in));
StrAllocCopy(anAnchor->content_encoding, HTAtom_name(encoding));
format_in = HTAtom_for("www/compressed");
- CTRACE(tfp, " Treating as '%s' with encoding '%s'\n",
- "www/compressed", HTAtom_name(encoding));
+ CTRACE((tfp, " Treating as '%s' with encoding '%s'\n",
+ "www/compressed", HTAtom_name(encoding)));
}
start_of_data = line_kept_clean;
@@ -1040,7 +1267,7 @@ use_tunnel:
** Set up to decode full HTTP/1.n response. - FM
*/
format_in = HTAtom_for("www/mime");
- CTRACE (tfp, "--- Talking HTTP1.\n");
+ CTRACE((tfp, "--- Talking HTTP1.\n"));
/*
** We set start_of_data to "" when !eol here because there
@@ -1098,6 +1325,7 @@ use_tunnel:
*/
HTAlert(line_buffer);
HTTP_NETCLOSE(s, handle);
+ HTNoDataOK = 1;
status = HT_NO_DATA;
goto clean_up;
@@ -1135,17 +1363,17 @@ use_tunnel:
* > 206 is unknown.
* All should return something to display.
*/
-#ifdef USE_SSL
- if (do_connect) {
- CTRACE(tfp, "HTTP: Proxy tunnel to '%s' established.\n",
- connect_host);
+#if defined(USE_SSL) && !defined(DISABLE_NEWS)
+ if (do_connect) {
+ CTRACE((tfp, "HTTP: Proxy tunnel to '%s' established.\n",
+ connect_host));
do_connect = FALSE;
url = connect_url;
FREE(line_buffer);
FREE(line_kept_clean);
if (!strncmp(connect_url, "snews", 5)) {
- CTRACE(tfp,
- " Will attempt handshake and snews connection.\n");
+ CTRACE((tfp,
+ " Will attempt handshake and snews connection.\n"));
status = HTNewsProxyConnect(s, url, anAnchor,
format_out, sink);
goto done;
@@ -1157,10 +1385,10 @@ use_tunnel:
had_header = NO;
length = 0;
doing_redirect = FALSE;
- permanent_redirection = FALSE;
+ permanent_redirection = FALSE;
target = NULL;
- CTRACE(tfp,
- " Will attempt handshake and resubmit headers.\n");
+ CTRACE((tfp,
+ " Will attempt handshake and resubmit headers.\n"));
goto use_tunnel;
}
#endif /* USE_SSL */
@@ -1283,8 +1511,6 @@ use_tunnel:
* previous document. - FM
*/
{
- char *cp;
-
if ((dump_output_immediately || traversal) &&
do_post &&
server_status != 303 &&
@@ -1303,383 +1529,22 @@ use_tunnel:
goto clean_up;
}
- /*
- * Get the rest of the headers and data, if
- * any, and then close the connection. - FM
- */
- while ((status = HTTP_NETREAD(s, line_buffer,
- (INIT_LINE_SIZE - 1),
- handle)) > 0) {
-#ifdef NOT_ASCII /* S/390 -- gil -- 0581 */
- { char *p;
-
- for ( p = line_buffer; p < line_buffer + status; p++ )
- *p = FROMASCII(*p);
- }
-#endif /* NOT_ASCII */
- line_buffer[status] = '\0';
- StrAllocCat(line_kept_clean, line_buffer);
- }
- HTTP_NETCLOSE(s, handle);
- if (status == HT_INTERRUPTED) {
- /*
- * Impatient user. - FM
- */
- CTRACE (tfp, "HTTP: Interrupted followup read.\n");
- _HTProgress (CONNECTION_INTERRUPTED);
- status = HT_INTERRUPTED;
- goto clean_up;
- }
- doing_redirect = TRUE;
+ HTProgress(line_buffer);
if (server_status == 301) { /* Moved Permanently */
- HTProgress(line_buffer);
if (do_post) {
/*
* Don't make the redirection permanent
* if we have POST content. - FM
*/
- CTRACE(tfp, "HTTP: Have POST content. Treating 301 (Permanent) as Temporary.\n");
+ CTRACE((tfp, "HTTP: Have POST content. Treating 301 (Permanent) as Temporary.\n"));
HTAlert(
gettext("Have POST content. Treating Permanent Redirection as Temporary.\n"));
} else {
permanent_redirection = TRUE;
}
}
+ doing_redirect = TRUE;
- /*
- ** Look for "Set-Cookie:" and "Set-Cookie2:" headers. - FM
- */
- if (LYSetCookies == TRUE) {
- char *value = NULL;
- char *SetCookie = NULL;
- char *SetCookie2 = NULL;
- cp = line_kept_clean;
- while (*cp) {
- /*
- ** Assume a CRLF pair terminates
- ** the header section. - FM
- */
- if (*cp == CR) {
- if (*(cp+1) == LF &&
- *(cp+2) == CR && *(cp+3) == LF) {
- break;
- }
- }
- if (TOUPPER(*cp) != 'S') {
- cp++;
- } else if (!strncasecomp(cp, "Set-Cookie:", 11)) {
- char *cp1 = NULL, *cp2 = NULL;
- cp += 11;
-Cookie_continuation:
- /*
- * Trim leading spaces. - FM
- */
- while (isspace((unsigned char)*cp))
- cp++;
- /*
- ** Accept CRLF, LF, or CR as end of line. - FM
- */
- if (((cp1 = strchr(cp, LF)) != NULL) ||
- (cp2 = strchr(cp, CR)) != NULL) {
- if (*cp1) {
- *cp1 = '\0';
- if ((cp2 = strchr(cp, CR)) != NULL)
- *cp2 = '\0';
- } else {
- *cp2 = '\0';
- }
- }
- if (*cp == '\0') {
- if (cp1)
- *cp1 = LF;
- if (cp2)
- *cp2 = CR;
- if (value != NULL) {
- HTMIME_TrimDoubleQuotes(value);
- if (SetCookie == NULL) {
- StrAllocCopy(SetCookie, value);
- } else {
- StrAllocCat(SetCookie, ", ");
- StrAllocCat(SetCookie, value);
- }
- FREE(value);
- }
- break;
- }
- StrAllocCat(value, cp);
- cp += strlen(cp);
- if (cp1) {
- *cp1 = LF;
- cp1 = NULL;
- }
- if (cp2) {
- *cp2 = CR;
- cp2 = NULL;
- }
- cp1 = cp;
- if (*cp1 == CR)
- cp1++;
- if (*cp1 == LF)
- cp1++;
- if (*cp1 == ' ' || *cp1 == '\t') {
- StrAllocCat(value, " ");
- cp = cp1;
- cp++;
- cp1 = NULL;
- goto Cookie_continuation;
- }
- HTMIME_TrimDoubleQuotes(value);
- if (SetCookie == NULL) {
- StrAllocCopy(SetCookie, value);
- } else {
- StrAllocCat(SetCookie, ", ");
- StrAllocCat(SetCookie, value);
- }
- FREE(value);
- } else if (!strncasecomp(cp, "Set-Cookie2:", 12)) {
- char *cp1 = NULL, *cp2 = NULL;
- cp += 12;
-Cookie2_continuation:
- /*
- * Trim leading spaces. - FM
- */
- while (isspace((unsigned char)*cp))
- cp++;
- /*
- ** Accept CRLF, LF, or CR as end of line. - FM
- */
- if (((cp1 = strchr(cp, LF)) != NULL) ||
- (cp2 = strchr(cp, CR)) != NULL) {
- if (*cp1) {
- *cp1 = '\0';
- if ((cp2 = strchr(cp, CR)) != NULL)
- *cp2 = '\0';
- } else {
- *cp2 = '\0';
- }
- }
- if (*cp == '\0') {
- if (cp1)
- *cp1 = LF;
- if (cp2)
- *cp2 = CR;
- if (value != NULL) {
- HTMIME_TrimDoubleQuotes(value);
- if (SetCookie2 == NULL) {
- StrAllocCopy(SetCookie2, value);
- } else {
- StrAllocCat(SetCookie2, ", ");
- StrAllocCat(SetCookie2, value);
- }
- FREE(value);
- }
- break;
- }
- StrAllocCat(value, cp);
- cp += strlen(cp);
- if (cp1) {
- *cp1 = LF;
- cp1 = NULL;
- }
- if (cp2) {
- *cp2 = CR;
- cp2 = NULL;
- }
- cp1 = cp;
- if (*cp1 == CR)
- cp1++;
- if (*cp1 == LF)
- cp1++;
- if (*cp1 == ' ' || *cp1 == '\t') {
- StrAllocCat(value, " ");
- cp = cp1;
- cp++;
- cp1 = NULL;
- goto Cookie2_continuation;
- }
- HTMIME_TrimDoubleQuotes(value);
- if (SetCookie2 == NULL) {
- StrAllocCopy(SetCookie2, value);
- } else {
- StrAllocCat(SetCookie2, ", ");
- StrAllocCat(SetCookie2, value);
- }
- FREE(value);
- } else {
- cp++;
- }
- }
- FREE(value);
- if (SetCookie != NULL || SetCookie2 != NULL) {
- LYSetCookie(SetCookie, SetCookie2, anAnchor->address);
- FREE(SetCookie);
- FREE(SetCookie2);
- }
- }
-
- /*
- * Look for the "Location:" in the headers. - FM
- */
- cp = line_kept_clean;
- while (*cp) {
- if (TOUPPER(*cp) != 'L') {
- cp++;
- } else if (!strncasecomp(cp, "Location:", 9)) {
- char *cp1 = NULL, *cp2 = NULL;
- cp += 9;
- /*
- * Trim leading spaces. - FM
- */
- while (isspace((unsigned char)*cp))
- cp++;
- /*
- * Accept CRLF, LF, or CR as end of header. - FM
- */
- if (((cp1 = strchr(cp, LF)) != NULL) ||
- (cp2 = strchr(cp, CR)) != NULL) {
- if (*cp1) {
- *cp1 = '\0';
- if ((cp2 = strchr(cp, CR)) != NULL)
- *cp2 = '\0';
- } else {
- *cp2 = '\0';
- }
- /*
- * Load the new URL into redirecting_url,
- * and make sure it's not zero-length. - FM
- */
- StrAllocCopy(redirecting_url, cp);
- HTMIME_TrimDoubleQuotes(redirecting_url);
- if (*redirecting_url == '\0') {
- /*
- * The "Location:" value is zero-length, and
- * thus is probably something in the body, so
- * we'll show the user what was returned. - FM
- */
- CTRACE(tfp, "HTTP: 'Location:' is zero-length!\n");
- if (cp1)
- *cp1 = LF;
- if (cp2)
- *cp2 = CR;
- bad_location = TRUE;
- FREE(redirecting_url);
- HTAlert(
- gettext("Got redirection with a bad Location header."));
- HTProgress(line_buffer);
- break;
- }
-
- /*
- * Set up for checking redirecting_url in
- * LYGetFile.c for restrictions before we
- * seek the document at that Location. - FM
- */
- HTProgress(line_buffer);
- CTRACE(tfp, "HTTP: Picked up location '%s'\n",
- redirecting_url);
- if (cp1)
- *cp1 = LF;
- if (cp2)
- *cp2 = CR;
- if (server_status == 305) { /* Use Proxy */
- /*
- * Make sure the proxy field ends with
- * a slash. - FM
- */
- if (redirecting_url[strlen(redirecting_url)-1]
- != '/')
- StrAllocCat(redirecting_url, "/");
- /*
- * Append our URL. - FM
- */
- StrAllocCat(redirecting_url, anAnchor->address);
- CTRACE(tfp, "HTTP: Proxy URL is '%s'\n",
- redirecting_url);
- }
- if (!do_post ||
- server_status == 303 ||
- server_status == 302) {
- /*
- * We don't have POST content (nor support PUT
- * or DELETE), or the status is "See Other" or
- * "General Redirection" and we can convert to
- * GET, so go back and check out the new URL. - FM
- */
- status = HT_REDIRECTING;
- goto clean_up;
- }
- /*
- * Make sure the user wants to redirect
- * the POST content, or treat as GET - FM & DK
- */
- switch (HTConfirmPostRedirect(redirecting_url,
- server_status)) {
- /*
- * User failed to confirm.
- * Abort the fetch.
- */
- case 0:
- doing_redirect = FALSE;
- FREE(redirecting_url);
- status = HT_NO_DATA;
- goto clean_up;
-
- /*
- * User wants to treat as GET with no content.
- * Go back to check out the URL.
- */
- case 303:
- status = HT_REDIRECTING;
- goto clean_up;
-
- /*
- * Set the flag to retain the POST
- * content and go back to check out
- * the URL. - FM
- */
- default:
- status = HT_REDIRECTING;
- redirect_post_content = TRUE;
- goto clean_up;
- }
- }
- break;
- } else {
- /*
- * Keep looking for the Location header. - FM
- */
- cp++;
- }
- }
-
- /*
- * If we get to here, we didn't find the Location
- * header, so we'll show the user what we got, if
- * anything. - FM
- */
- CTRACE (tfp, "HTTP: Failed to pick up location.\n");
- doing_redirect = FALSE;
- permanent_redirection = FALSE;
- start_of_data = line_kept_clean;
- length = strlen(start_of_data);
- if (!bad_location) {
- HTAlert(gettext("Got redirection with no Location header."));
- HTProgress(line_buffer);
- }
- if (traversal) {
- HTTP_NETCLOSE(s, handle);
- status = -1;
- goto clean_up;
- }
- if (!dump_output_immediately &&
- format_out == HTAtom_for("www/download")) {
- /*
- * Convert a download request to
- * a presentation request for
- * interactive users. - FM
- */
- format_out = WWW_PRESENT;
- }
break;
}
@@ -1713,9 +1578,9 @@ Cookie2_continuation:
goto clean_up;
}
- CTRACE(tfp, "%s %d %s\n",
+ CTRACE((tfp, "%s %d %s\n",
"HTTP: close socket", s,
- "to retry with Access Authorization");
+ "to retry with Access Authorization"));
_HTProgress (
gettext("Retrying with access authorization information."));
@@ -1766,9 +1631,9 @@ Cookie2_continuation:
goto clean_up;
}
- CTRACE(tfp, "%s %d %s\n",
+ CTRACE((tfp, "%s %d %s\n",
"HTTP: close socket", s,
- "to retry with Proxy Authorization");
+ "to retry with Proxy Authorization"));
_HTProgress (HTTP_RETRY_WITH_PROXY);
FREE(line_buffer);
@@ -1913,6 +1778,13 @@ Cookie2_continuation:
*/
if (HTCheckForInterrupt()) {
HTTP_NETCLOSE(s, handle);
+ if (doing_redirect) {
+ /*
+ * Impatient user. - FM
+ */
+ CTRACE((tfp, "HTTP: Interrupted followup read.\n"));
+ _HTProgress (CONNECTION_INTERRUPTED);
+ }
status = HT_INTERRUPTED;
goto clean_up;
}
@@ -1924,8 +1796,31 @@ Cookie2_continuation:
** It was a HEAD request, or we want the headers and source.
*/
start_of_data = line_kept_clean;
- length = strlen(start_of_data);
+#ifdef SH_EX /* FIX BUG by kaz@maczuka.hitachi.ibaraki.jp */
+/* GIF file contains \0, so strlen does not return the data length */
+ length = real_length_of_line;
+#else
+ length = rawlength;
+#endif
format_in = HTAtom_for("text/plain");
+
+ } else if (doing_redirect) {
+
+ format_in = HTAtom_for("message/x-http-redirection");
+ StrAllocCopy(anAnchor->content_type, HTAtom_name(format_in));
+ if (traversal) {
+ format_out = WWW_DEBUG;
+ if (!sink)
+ sink = HTErrorStream();
+ } else if (!dump_output_immediately &&
+ format_out == HTAtom_for("www/download")) {
+ /*
+ * Convert a download request to
+ * a presentation request for
+ * interactive users. - FM
+ */
+ format_out = WWW_PRESENT;
+ }
}
target = HTStreamStack(format_in,
@@ -1933,12 +1828,13 @@ Cookie2_continuation:
sink, anAnchor);
if (!target || target == NULL) {
- char buffer[1024]; /* @@@@@@@@ */
+ char *buffer = NULL;
HTTP_NETCLOSE(s, handle);
- sprintf(buffer, CANNOT_CONVERT_I_TO_O,
+ HTSprintf0(&buffer, CANNOT_CONVERT_I_TO_O,
HTAtom_name(format_in), HTAtom_name(format_out));
_HTProgress (buffer);
+ FREE(buffer);
status = -1;
goto clean_up;
}
@@ -1953,12 +1849,23 @@ Cookie2_continuation:
*/
rv = HTCopy(anAnchor, s, (void *)handle, target);
+ /*
+ ** If we get here with doing_redirect set, it means that we were
+ ** looking for a Location header. We either have got it now in
+ ** redirecting_url - in that case the stream should not have loaded
+ ** any data. Or we didn't get it, in that case the stream may have
+ ** presented the message body normally. - kw
+ */
+
if (rv == -1) {
/*
** Intentional interrupt before data were received, not an error
*/
/* (*target->isa->_abort)(target, NULL); */ /* already done in HTCopy */
- status = HT_INTERRUPTED;
+ if (doing_redirect && traversal)
+ status = -1;
+ else
+ status = HT_INTERRUPTED;
HTTP_NETCLOSE(s, handle);
goto clean_up;
}
@@ -1968,21 +1875,29 @@ Cookie2_continuation:
** Aw hell, a REAL error, maybe cuz it's a dumb HTTP0 server
*/
(*target->isa->_abort)(target, NULL);
- HTTP_NETCLOSE(s, handle);
- if (!already_retrying && !do_post) {
- CTRACE (tfp, "HTTP: Trying again with HTTP0 request.\n");
+ if (doing_redirect && redirecting_url) {
/*
- ** May as well consider it an interrupt -- right?
+ ** Got a location before the error occurred? Then consider it
+ ** an interrupt but proceed below as normal. - kw
*/
- FREE(line_buffer);
- FREE(line_kept_clean);
- extensions = NO;
- already_retrying = TRUE;
- _HTProgress (RETRYING_AS_HTTP0);
- goto try_again;
+ /* do nothing here */
} else {
- status = HT_NOT_LOADED;
- goto clean_up;
+ HTTP_NETCLOSE(s, handle);
+ if (!doing_redirect && !already_retrying && !do_post) {
+ CTRACE((tfp, "HTTP: Trying again with HTTP0 request.\n"));
+ /*
+ ** May as well consider it an interrupt -- right?
+ */
+ FREE(line_buffer);
+ FREE(line_kept_clean);
+ extensions = NO;
+ already_retrying = TRUE;
+ _HTProgress (RETRYING_AS_HTTP0);
+ goto try_again;
+ } else {
+ status = HT_NOT_LOADED;
+ goto clean_up;
+ }
}
}
@@ -1990,23 +1905,107 @@ Cookie2_continuation:
** Free if complete transmission (socket was closed before return).
** Close socket if partial transmission (was freed on abort).
*/
- if (rv != HT_INTERRUPTED) {
+ if (rv != HT_INTERRUPTED && rv != -2) {
(*target->isa->_free)(target);
} else {
HTTP_NETCLOSE(s, handle);
}
if (doing_redirect) {
- /*
- ** We already jumped over all this if the "case 3:" code worked
- ** above, but we'll check here as a backup in case it fails. - FM
- */
- /* Lou's old comment: - FM */
- /* OK, now we've got the redirection URL temporarily stored
- in external variable redirecting_url, exported from HTMIME.c,
- since there's no straightforward way to do this in the library
- currently. Do the right thing. */
- status = HT_REDIRECTING;
+ if (redirecting_url) {
+ /*
+ * Set up for checking redirecting_url in
+ * LYGetFile.c for restrictions before we
+ * seek the document at that Location. - FM
+ */
+ CTRACE((tfp, "HTTP: Picked up location '%s'\n",
+ redirecting_url));
+ if (rv == HT_INTERRUPTED) {
+ /*
+ ** Intentional interrupt after data were received, not an
+ ** error (probably). We take it as a user request to
+ ** abandon the redirection chain.
+ ** This could reasonably be changed (by just removing this
+ ** block), it would make sense if there are redirecting
+ ** resources that "hang" after sending the headers. - kw
+ */
+ FREE(redirecting_url);
+ CTRACE((tfp, "HTTP: Interrupted followup read.\n"));
+ status = HT_INTERRUPTED;
+ goto clean_up;
+ }
+ HTProgress(line_buffer);
+ if (server_status == 305) { /* Use Proxy */
+ /*
+ * Make sure the proxy field ends with
+ * a slash. - FM
+ */
+ if (redirecting_url[strlen(redirecting_url)-1]
+ != '/')
+ StrAllocCat(redirecting_url, "/");
+ /*
+ * Append our URL. - FM
+ */
+ StrAllocCat(redirecting_url, anAnchor->address);
+ CTRACE((tfp, "HTTP: Proxy URL is '%s'\n",
+ redirecting_url));
+ }
+ if (!do_post ||
+ server_status == 303 ||
+ server_status == 302) {
+ /*
+ * We don't have POST content (nor support PUT
+ * or DELETE), or the status is "See Other" or
+ * "General Redirection" and we can convert to
+ * GET, so go back and check out the new URL. - FM
+ */
+ status = HT_REDIRECTING;
+ goto clean_up;
+ }
+ /*
+ * Make sure the user wants to redirect
+ * the POST content, or treat as GET - FM & DK
+ */
+ switch (HTConfirmPostRedirect(redirecting_url,
+ server_status)) {
+ /*
+ * User failed to confirm.
+ * Abort the fetch.
+ */
+ case 0:
+ doing_redirect = FALSE;
+ FREE(redirecting_url);
+ status = HT_NO_DATA;
+ goto clean_up;
+
+ /*
+ * User wants to treat as GET with no content.
+ * Go back to check out the URL.
+ */
+ case 303:
+ break;
+
+ /*
+ * Set the flag to retain the POST
+ * content and go back to check out
+ * the URL. - FM
+ */
+ default:
+ redirect_post_content = TRUE;
+ }
+
+ /* Lou's old comment: - FM */
+ /* OK, now we've got the redirection URL temporarily stored
+ in external variable redirecting_url, exported from HTMIME.c,
+ since there's no straightforward way to do this in the library
+ currently. Do the right thing. */
+
+ status = HT_REDIRECTING;
+
+ } else {
+ status = traversal ? -1 : HT_LOADED;
+ }
+
} else {
/*
** If any data were received, treat as a complete transmission
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTelnet.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTelnet.c
index df6084fac6f..33f87e4eb8d 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTelnet.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTTelnet.c
@@ -36,8 +36,12 @@
PRIVATE void do_system ARGS1(char *, command)
{
- CTRACE(tfp, "HTTelnet: Command is: %s\n\n", command);
+ CTRACE((tfp, "HTTelnet: Command is: %s\n\n", command));
+#ifdef UNIX /* want LYSystem's signal sanitizing - kw */
+ LYSystem(command);
+#else /* Non-UNIX should use LYSystem too? - left for now - kw */
system(command);
+#endif
FREE(command);
}
@@ -65,7 +69,7 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
* or tab to prevent security whole
*/
for(cp = host; *cp != '\0'; cp++) {
- if(!isalnum(*cp) && *cp != '_' && *cp != '-' &&
+ if(!isalnum(UCH(*cp)) && *cp != '_' && *cp != '-' &&
*cp != ':' && *cp != '.' && *cp != '@') {
*cp = '\0';
break;
@@ -86,12 +90,12 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
*port++ = '\0'; /* Split */
if (!hostname || *hostname == '\0') {
- CTRACE(tfp, "HTTelnet: No host specified!\n");
+ CTRACE((tfp, "HTTelnet: No host specified!\n"));
return HT_NO_DATA;
} else if (!valid_hostname(hostname)) {
char *prefix = NULL;
char *line = NULL;
- CTRACE(tfp, "HTTelnet: Invalid hostname %s!\n", host);
+ CTRACE((tfp, "HTTelnet: Invalid hostname %s!\n", host));
HTSprintf0(&prefix,
gettext("remote %s session:"), acc_method);
HTSprintf0(&line,
@@ -149,7 +153,7 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
* NeXTSTEP is the implied version of the NeXT operating system.
* You may need to define this yourself.
*/
-#if defined(NeXT) && defined(NeXTSTEP) && NeXTSTEP<=20100
+#if !defined(TELNET_DONE) && (defined(NeXT) && defined(NeXTSTEP) && NeXTSTEP<=20100)
#define FMT_TELNET "%s%s%s %s %s"
HTAddParam(&command, FMT_TELNET, 1, TELNET_PATH);
@@ -160,13 +164,11 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
HTEndParam(&command, FMT_TELNET, 5);
do_system(command);
- return HT_NO_DATA; /* Ok - it was done but no data */
#define TELNET_DONE
#endif
-/* Most unix machines suppport username only with rlogin */
-#if defined(unix) || defined(DOSPATH)
-#ifndef TELNET_DONE
+/* Most unix machines support username only with rlogin */
+#if !defined(TELNET_DONE) && (defined(UNIX) || defined(DOSPATH) || defined(__CYGWIN__))
#define FMT_RLOGIN "%s %s%s%s"
#define FMT_TN3270 "%s %s %s"
@@ -196,6 +198,9 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
}
#ifdef __DJGPP__
+#ifdef WATT32
+ _eth_release();
+#endif /* WATT32 */
__djgpp_set_ctrl_c(0);
_go32_want_ctrl_break(1);
#endif /* __DJGPP__ */
@@ -203,14 +208,16 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
#ifdef __DJGPP__
__djgpp_set_ctrl_c(1);
_go32_want_ctrl_break(0);
+#ifdef WATT32
+ _eth_init();
+#endif /* WATT32 */
#endif /* __DJGPP__ */
- return HT_NO_DATA; /* Ok - it was done but no data */
+
#define TELNET_DONE
-#endif /* !TELNET_DONE */
#endif /* unix */
/* VMS varieties */
-#if defined(MULTINET)
+#if !defined(TELNET_DONE) && (defined(MULTINET))
if (login_protocol == rlogin) {
HTSprintf0(&command, "RLOGIN%s%s%s%s%s %s", /*lm 930713 */
user ? "/USERNAME=\"" : "",
@@ -234,66 +241,60 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
}
do_system(command);
- return HT_NO_DATA; /* Ok - it was done but no data */
#define TELNET_DONE
#endif /* MULTINET */
-#if defined(WIN_TCP)
- {
- char *cp;
-
- if ((cp=getenv("WINTCP_COMMAND_STYLE")) != NULL &&
- 0==strncasecomp(cp, "VMS", 3)) { /* VMS command syntax */
- if (login_protocol == rlogin) {
- HTSprintf0(&command, "RLOGIN%s%s%s%s%s %s", /*lm 930713 */
- user ? "/USERNAME=\"" : "",
- user ? user : "",
- user ? "\"" : "",
- port ? "/PORT=" : "",
- port ? port : "",
- hostname);
-
- } else if (login_protocol == tn3270) {
- HTSprintf0(&command, "TELNET/TN3270 %s%s %s",
- port ? "/PORT=" : "",
- port ? port : "",
- hostname);
-
- } else { /* TELNET */
- HTSprintf0(&command, "TELNET %s%s %s",
- port ? "/PORT=" : "",
- port ? port : "",
- hostname);
- }
-
- } else { /* UNIX command syntax */
- if (login_protocol == rlogin) {
- HTSprintf0(&command, "RLOGIN %s%s%s%s%s",
- hostname,
- user ? " -l " : "",
- user ? "\"" : "",
- user ? user : "",
- user ? "\"" : "");
-
- } else if (login_protocol == tn3270) {
- HTSprintf0(&command, "TN3270 %s %s",
- hostname,
- port ? port : "");
-
- } else { /* TELNET */
- HTSprintf0(&command, "TELNET %s %s",
- hostname,
- port ? port : "");
- }
+#if !defined(TELNET_DONE) && defined(WIN_TCP)
+ if ((cp=getenv("WINTCP_COMMAND_STYLE")) != NULL &&
+ 0==strncasecomp(cp, "VMS", 3)) { /* VMS command syntax */
+ if (login_protocol == rlogin) {
+ HTSprintf0(&command, "RLOGIN%s%s%s%s%s %s", /*lm 930713 */
+ user ? "/USERNAME=\"" : "",
+ user ? user : "",
+ user ? "\"" : "",
+ port ? "/PORT=" : "",
+ port ? port : "",
+ hostname);
+
+ } else if (login_protocol == tn3270) {
+ HTSprintf0(&command, "TELNET/TN3270 %s%s %s",
+ port ? "/PORT=" : "",
+ port ? port : "",
+ hostname);
+
+ } else { /* TELNET */
+ HTSprintf0(&command, "TELNET %s%s %s",
+ port ? "/PORT=" : "",
+ port ? port : "",
+ hostname);
}
- do_system(command);
- return HT_NO_DATA; /* Ok - it was done but no data */
+ } else { /* UNIX command syntax */
+ if (login_protocol == rlogin) {
+ HTSprintf0(&command, "RLOGIN %s%s%s%s%s",
+ hostname,
+ user ? " -l " : "",
+ user ? "\"" : "",
+ user ? user : "",
+ user ? "\"" : "");
+
+ } else if (login_protocol == tn3270) {
+ HTSprintf0(&command, "TN3270 %s %s",
+ hostname,
+ port ? port : "");
+
+ } else { /* TELNET */
+ HTSprintf0(&command, "TELNET %s %s",
+ hostname,
+ port ? port : "");
+ }
}
+
+ do_system(command);
#define TELNET_DONE
#endif /* WIN_TCP */
-#ifdef UCX
+#if !defined(TELNET_DONE) && defined(UCX)
if (login_protocol == rlogin) {
HTSprintf0(&command, "RLOGIN%s%s%s %s %s",
user ? "/USERNAME=\"" : "",
@@ -314,11 +315,10 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
}
do_system(command);
- return HT_NO_DATA; /* Ok - it was done but no data */
#define TELNET_DONE
#endif /* UCX */
-#ifdef CMU_TCP
+#if !defined(TELNET_DONE) && defined(CMU_TCP)
if (login_protocol == telnet) {
HTSprintf0(&command, "TELNET %s%s %s",
port ? "/PORT=" : "",
@@ -336,14 +336,10 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
LYgetch();
HadVMSInterrupt = FALSE;
}
- return HT_NO_DATA; /* Ok - it was done but no data */
#define TELNET_DONE
#endif /* CMU_TCP */
-#ifdef SOCKETSHR_TCP
- {
- char *cp;
-
+#if !defined(TELNET_DONE) && defined(SOCKETSHR_TCP)
if (getenv("MULTINET_SOCKET_LIBRARY") != NULL) {
if (login_protocol == rlogin) {
HTSprintf0(&command, "MULTINET RLOGIN%s%s%s%s %s", /*lm 930713 */
@@ -409,7 +405,8 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
do_system(command);
return HT_NO_DATA; /* Ok - it was done but no data */
}
- else if (getenv("UCX$DEVICE") != NULL) {
+ else if (getenv("UCX$DEVICE") != NULL
+ || getenv("TCPIP$DEVICE") != NULL) {
if (login_protocol == rlogin) {
HTSprintf0(&command, "RLOGIN%s%s %s %s",
user ? "/USERNAME=" : "",
@@ -449,7 +446,6 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
LYgetch();
HadVMSInterrupt = FALSE;
}
- return HT_NO_DATA; /* Ok - it was done but no data */
}
else {
if (login_protocol == telnet) {
@@ -469,22 +465,18 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
LYgetch();
HadVMSInterrupt = FALSE;
}
- return HT_NO_DATA; /* Ok - it was done but no data */
}
- }
#define TELNET_DONE
#endif /* SOCKETSHR_TCP */
-#ifdef VM
-#define SIMPLE_TELNET
-#endif
-#ifdef SIMPLE_TELNET
+#if !defined(TELNET_DONE) && (defined(SIMPLE_TELNET) || defined(VM))
if (login_protocol == telnet) { /* telnet only */
HTSprintf0(&command, "TELNET %s", /* @@ Bug: port ignored */
hostname);
do_system(command);
return HT_NO_DATA; /* Ok - it was done but no data */
}
+#define TELNET_DONE
#endif
#ifndef TELNET_DONE
@@ -509,8 +501,8 @@ PRIVATE int remote_session ARGS2(char *, acc_method, char *, host)
}
#endif /* VMS */
}
- return HT_NO_DATA;
#endif /* !TELNET_DONE */
+ return HT_NO_DATA;
}
/* "Load a document" -- establishes a session
@@ -541,7 +533,7 @@ ARGS4
int status;
if (sink) {
- CTRACE(tfp, "HTTelnet: Can't output a live session -- must be interactive!\n");
+ CTRACE((tfp, "HTTelnet: Can't output a live session -- must be interactive!\n"));
return HT_NO_DATA;
}
acc_method = HTParse(addr, "file:", PARSE_ACCESS);
@@ -549,7 +541,7 @@ ARGS4
host = HTParse(addr, "", PARSE_HOST);
if (!host || *host == '\0') {
status = HT_NO_DATA;
- CTRACE(tfp, "HTTelnet: No host specified!\n");
+ CTRACE((tfp, "HTTelnet: No host specified!\n"));
} else {
status = remote_session(acc_method, host);
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTUU.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTUU.c
index 5465f89f375..580be9dae96 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTUU.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTUU.c
@@ -147,7 +147,7 @@ PUBLIC int HTUU_decode ARGS3(char *, bufcoded,
first = 0;
for(j=0; j<256; j++) pr2six[j] = MAXVAL+1;
- for(j=0; j<64; j++) pr2six[(unsigned char)six2pr[j]] = (unsigned char)j;
+ for(j=0; j<64; j++) pr2six[UCH(six2pr[j])] = UCH(j);
#if 0
pr2six['A']= 0; pr2six['B']= 1; pr2six['C']= 2; pr2six['D']= 3;
pr2six['E']= 4; pr2six['F']= 5; pr2six['G']= 6; pr2six['H']= 7;
@@ -177,7 +177,7 @@ PUBLIC int HTUU_decode ARGS3(char *, bufcoded,
* the output buffer, adjust the number of input bytes downwards.
*/
bufin = bufcoded;
- while(pr2six[(unsigned char)*(bufin++)] <= MAXVAL);
+ while(pr2six[UCH(*(bufin++))] <= MAXVAL);
nprbytes = bufin - bufcoded - 1;
nbytesdecoded = ((nprbytes+3)/4) * 3;
if(nbytesdecoded > outbufsize) {
@@ -187,18 +187,18 @@ PUBLIC int HTUU_decode ARGS3(char *, bufcoded,
bufin = bufcoded;
while (nprbytes > 0) {
- *(bufout++) = (unsigned char) (DEC(*bufin) << 2 | DEC(bufin[1]) >> 4);
- *(bufout++) = (unsigned char) (DEC(bufin[1]) << 4 | DEC(bufin[2]) >> 2);
- *(bufout++) = (unsigned char) (DEC(bufin[2]) << 6 | DEC(bufin[3]));
+ *(bufout++) = UCH((DEC(bufin[0]) << 2) | (DEC(bufin[1]) >> 4));
+ *(bufout++) = UCH((DEC(bufin[1]) << 4) | (DEC(bufin[2]) >> 2));
+ *(bufout++) = UCH((DEC(bufin[2]) << 6) | (DEC(bufin[3])));
bufin += 4;
nprbytes -= 4;
}
if(nprbytes & 03) {
if(pr2six[(int)bufin[-2]] > MAXVAL) {
- nbytesdecoded -= 2;
+ nbytesdecoded -= 2;
} else {
- nbytesdecoded -= 1;
+ nbytesdecoded -= 1;
}
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTUtils.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTUtils.h
index dd5be2dda44..8172a7501d4 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTUtils.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTUtils.h
@@ -1,7 +1,7 @@
/* Utility macros for the W3 code library
MACROS FOR GENERAL USE
- See also: the system dependent file "tcp.h", which is included here.
+ See also: the system dependent file "www_tcp.h", which is included here.
*/
@@ -17,10 +17,12 @@
#include <sys/types.h>
#include <stdio.h>
-#else
+#else /* HAVE_CONFIG_H */
#ifdef DJGPP
#include <sys/config.h> /* pseudo-autoconf values for DJGPP libc/headers */
+#define HAVE_TRUNCATE 1
+#include <limits.h>
#endif /* DJGPP */
#include <stdio.h>
@@ -40,15 +42,21 @@
#define DISP_PARTIAL /* experimental */
#endif
-#if defined(__STDC__) || defined(VMS)
+#if defined(__STDC__) || defined(VMS) || defined(_WINDOWS)
#define ANSI_VARARGS 1
#undef HAVE_STDARG_H
#define HAVE_STDARG_H 1
#endif
-/* FIXME: these should be removed after completing auto-configure script */
+#if defined(VMS) || defined(_WINDOWS)
+#define HAVE_STDLIB_H 1
+#endif
+
+/* Accommodate non-autoconf'd Makefile's (VMS, DJGPP, etc) */
-/* Accommodate pre-autoconf Makefile */
+#ifndef NO_ARPA_INET_H
+#define HAVE_ARPA_INET_H 1
+#endif
#ifndef NO_CBREAK
#define HAVE_CBREAK 1
@@ -94,44 +102,77 @@
#endif /* HAVE_CONFIG_H */
+#ifndef lynx_srand
+#define lynx_srand srand
+#endif
+
+#ifndef lynx_rand
+#define lynx_rand rand
+#endif
+
+#if '0' != 48
+#define NOT_ASCII
+#endif
+
+#if '0' == 240
+#define EBCDIC
+#endif
+
#ifndef LY_MAXPATH
#define LY_MAXPATH 256
#endif
+#ifndef GCC_NORETURN
+#define GCC_NORETURN /* nothing */
+#endif
+
#ifndef GCC_UNUSED
#define GCC_UNUSED /* nothing */
#endif
-#ifdef _WINDOWS /* SCW */
-#include <windef.h>
+/* FIXME: need a configure-test */
+#if defined(__STDC__) || defined(__DECC) || defined(_WINDOWS) || _WIN_CC
+#define ANSI_PREPRO 1
+#endif
+
+#if defined(__CYGWIN32__) && ! defined(__CYGWIN__)
+#define __CYGWIN__ 1
+#endif
+
+#if defined(__CYGWIN__) /* 1998/12/31 (Thu) 16:13:46 */
+#include <windows.h> /* #include "windef.h" */
+#define BOOLEAN_DEFINED
+#undef HAVE_POPEN /* FIXME: does this not work, or is it missing */
+#endif
+
+#if defined(_WINDOWS) && !defined(__CYGWIN__) /* SCW */
+#include <windows.h> /* #include "windef.h" */
#define BOOLEAN_DEFINED
-#define va_arg
+#if !_WIN_CC /* 1999/09/29 (Wed) 22:00:53 */
#include <dos.h>
+#endif
+#undef sleep /* 1998/06/23 (Tue) 16:54:53 */
+extern void sleep(unsigned __seconds);
#define popen _popen
#define pclose _pclose
-#endif /* _WINDOWS */
-
-#ifdef __EMX__
-#include <unistd.h> /* should be re-include protected under EMX */
-#include <stdlib.h> /* should be re-include protected under EMX */
-#define getcwd _getcwd2
-#define chdir _chdir2
+#if defined(_MSC_VER)
+typedef unsigned short mode_t;
#endif
-/*
+#endif /* _WINDOWS */
-Debug message control.
+#ifndef USE_COLOR_STYLE
+ /* it's useless for such setup */
+# define NO_EMPTY_HREFLESS_A
+#endif
- */
+#if defined(__EMX__) || defined(WIN_EX)
+# define CAN_CUT_AND_PASTE
+#endif
-#ifdef NO_LYNX_TRACE
-#define TRACE 0
-#define PROGRESS(str) /* nothing for now */
-#else
-#define TRACE (WWW_TraceFlag)
-#define PROGRESS(str) printf(str)
- extern int WWW_TraceFlag;
+#if defined(USE_SLANG) || (defined(USE_COLOR_STYLE) && defined(__EMX__))
+# define USE_BLINK
#endif
/*
@@ -150,9 +191,23 @@ typedef void * HTError; /* Unused at present -- best definition?
Standard C library for malloc() etc
*/
-#ifdef DGUX
+#ifdef HAVE_STDLIB_H
#include <stdlib.h>
-#endif /* DGUX */
+#endif
+
+#ifndef EXIT_SUCCESS
+#define EXIT_SUCCESS 0
+#endif
+
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif
+
+#ifdef __EMX__
+#include <unistd.h> /* should be re-include protected under EMX */
+#define getcwd _getcwd2
+#define chdir _chdir2
+#endif
#ifdef vax
#ifdef unix
@@ -166,22 +221,15 @@ Standard C library for malloc() etc
#ifdef NeXT
#include <libc.h> /* NeXT */
#endif /* NeXT */
-#ifndef MACH /* Vincent.Cate@furmint.nectar.cs.cmu.edu */
-#ifndef __STRICT_BSD__
-#include <stdlib.h>
-#endif /* !__STRICT_BSD__ */
-#endif /* !MACH */
#else /* ultrix: */
#include <malloc.h>
#include <memory.h>
-#include <stdlib.h> /* ANSI */ /* BSN */
#endif /* !ultrix */
#else /* VMS: */
-#include <stdlib.h>
#include <unixlib.h>
#if defined(VAXC) && !defined(__DECC)
#define malloc VAXC$MALLOC_OPT
@@ -201,7 +249,7 @@ Macros for declarations
#define PUBLIC /* Accessible outside this module */
#define PRIVATE static /* Accessible only within this module */
-#ifdef __STDC__
+#if defined(__STDC__) || defined(__BORLANDC__) || defined(_MSC_VER)
#define CONST const /* "const" only exists in STDC */
#define NOPARAMS (void)
#define PARAMS(parameter_list) parameter_list
@@ -263,6 +311,25 @@ Macros for declarations
#define NULL ((void *)0)
#endif
+#define NONNULL(s) (((s) != 0) ? s : "(null)")
+
+/* array/table size */
+#define TABLESIZE(v) (sizeof(v)/sizeof(v[0]))
+
+#define typecalloc(cast) (cast *)calloc(1,sizeof(cast))
+#define typecallocn(cast,ntypes) (cast *)calloc(ntypes,sizeof(cast))
+
+/*
+
+OFTEN USED INTEGER MACROS
+
+ Min and Max functions
+
+ */
+#ifndef HTMIN
+#define HTMIN(a,b) ((a) <= (b) ? (a) : (b))
+#define HTMAX(a,b) ((a) >= (b) ? (a) : (b))
+#endif
/*
Booleans
@@ -303,12 +370,12 @@ extern BOOL LYOutOfMemory; /* Declared in LYexit.c - FM */
/* Inline Function WHITE: Is character c white space? */
/* For speed, include all control characters */
-#define WHITE(c) (((unsigned char)(TOASCII(c))) <= 32)
+#define WHITE(c) ((UCH(TOASCII(c))) <= 32)
/* Inline Function LYIsASCII: Is character c a traditional ASCII
** character (i.e. <128) after converting from host character set. */
-#define LYIsASCII(c) (TOASCII((unsigned char)(c)) < 128)
+#define LYIsASCII(c) (TOASCII(UCH(c)) < 128)
/*
@@ -336,6 +403,8 @@ are generally not the response status from any specific protocol.
#define HT_FORBIDDEN -403 /* Access forbidden */
#define HT_NOT_ACCEPTABLE -406 /* Not Acceptable */
+#define HT_PARSER_REOPEN_ELT 700 /* tells SGML parser to keep tag open */
+#define HT_PARSER_OTHER_CONTENT 701 /* tells SGML to change content model */
#define HT_H_ERRNO_VALID -800 /* see h_errno for resolver error */
#define HT_INTERNAL -900 /* Weird -- should never happen. */
@@ -397,11 +466,11 @@ Upper- and Lowercase macros
#ifndef TOLOWER
/* Pyramid and Mips can't uppercase non-alpha */
-#define TOLOWER(c) (isupper((unsigned char)c) ? tolower((unsigned char)c) : ((unsigned char)c))
-#define TOUPPER(c) (islower((unsigned char)c) ? toupper((unsigned char)c) : ((unsigned char)c))
+#define TOLOWER(c) (isupper(UCH(c)) ? tolower(UCH(c)) : UCH(c))
+#define TOUPPER(c) (islower(UCH(c)) ? toupper(UCH(c)) : UCH(c))
#endif /* TOLOWER */
-#define FREE(x) if (x) {free(x); x = NULL;}
+#define FREE(x) if (x != 0) {free((char *)x); x = NULL;}
/*
@@ -415,14 +484,39 @@ The local equivalents of CR and LF
#define LF FROMASCII('\012') /* ASCII line feed LOCAL EQUIVALENT */
#define CR FROMASCII('\015') /* Will be converted to ^M for transmission */
-#define CTRACE if(TRACE)fprintf
+/*
+ * Debug message control.
+ */
+#ifdef NO_LYNX_TRACE
+#define WWW_TraceFlag 0
+#define WWW_TraceMask 0
+#define LYTraceLogFP 0
+#else
+extern BOOLEAN WWW_TraceFlag;
+extern int WWW_TraceMask;
+#endif
+
+#define TRACE (WWW_TraceFlag)
+#define TRACE_bit(n) (TRACE && (WWW_TraceMask & (1 << n)) != 0)
+#define TRACE_SGML (TRACE_bit(0))
+#define TRACE_STYLE (TRACE_bit(1))
+#define TRACE_TRST (TRACE_bit(2))
+
+#if defined(LY_TRACELINE)
+#define LY_SHOWWHERE fprintf( tfp, "%s: %d: ", __FILE__, LY_TRACELINE ),
+#else
+#define LY_SHOWWHERE /* nothing */
+#endif
+
+#define CTRACE(p) ((void)((TRACE) && ( LY_SHOWWHERE fprintf p )))
+#define CTRACE2(m,p) ((void)((m) && ( LY_SHOWWHERE fprintf p )))
#define tfp TraceFP()
#define CTRACE_SLEEP(secs) if (TRACE && LYTraceLogFP == 0) sleep(secs)
-#define CTRACE_FLUSH(fp) if(TRACE) fflush(fp)
+#define CTRACE_FLUSH(fp) if (TRACE) fflush(fp)
extern FILE *TraceFP NOPARAMS;
-#include <tcp.h>
+#include <www_tcp.h>
/*
* We force this include-ordering since socks.h contains redefinitions of
@@ -447,10 +541,52 @@ extern FILE *TraceFP NOPARAMS;
#define Rgetpeername getpeername
#endif
+/*
+ * Workaround for order-of-evaluation problem with gcc and socks5 headers
+ * which breaks the Rxxxx names by attaching the prefix twice:
+ */
+#ifdef INCLUDE_PROTOTYPES
+#undef Raccept
+#undef Rbind
+#undef Rconnect
+#undef Rlisten
+#undef Rselect
+#undef Rgetpeername
+#undef Rgetsockname
+#define Raccept accept
+#define Rbind bind
+#define Rconnect connect
+#define Rgetpeername getpeername
+#define Rgetsockname getsockname
+#define Rlisten listen
+#define Rselect select
+#endif
+
#endif /* USE_SOCKS5 */
#define SHORTENED_RBIND /* FIXME: do this in configure-script */
+#ifdef USE_SSL
+#define free_func free__func
+#ifdef USE_OPENSSL_INCL
+#include <openssl/ssl.h>
+#include <openssl/crypto.h>
+#include <openssl/rand.h>
+#include <openssl/err.h>
+#else
+#include <ssl.h>
+#include <crypto.h>
+#include <rand.h>
+#include <err.h>
+#endif
+#undef free_func
+
+extern SSL * HTGetSSLHandle NOPARAMS;
+extern void HTSSLInitPRNG NOPARAMS;
+extern char HTGetSSLCharacter PARAMS((void * handle));
+
+#endif /* USE_SSL */
+
#include <userdefs.h>
#endif /* HTUTILS_H */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.c
index 775d411f2fb..5d3720350d6 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.c
@@ -19,6 +19,7 @@
#include <UCDefs.h>
#include <UCMap.h>
#include <UCAux.h>
+#include <HTFTP.h>
#include <HTVMSUtils.h>
#include <ssdef.h>
#include <jpidef.h>
@@ -32,8 +33,7 @@
#include <LYUtils.h>
#include <LYLeaks.h>
-
-#define INFINITY 512 /* File name length @@ FIXME */
+#include <LYStrings.h>
PUBLIC BOOL HTVMSFileVersions=FALSE; /* Include version numbers in listing? */
@@ -104,7 +104,7 @@ unsigned long Prv[2], PreviousPrv[2];
if (Result == SS$_NORMAL) {
if (!(PreviousPrv[0] & PRV$M_SYSPRV)) {
- CTRACE(tfp, "HTVMS_enableSysPrv: Enabled SYSPRV\n");
+ CTRACE((tfp, "HTVMS_enableSysPrv: Enabled SYSPRV\n"));
}
}
}
@@ -130,7 +130,7 @@ unsigned long Prv[2], PreviousPrv[2];
if (Result == SS$_NORMAL) {
if (PreviousPrv[0] & PRV$M_SYSPRV) {
- CTRACE(tfp, "HTVMS_disableSysPrv: Disabled SYSPRV\n");
+ CTRACE((tfp, "HTVMS_disableSysPrv: Disabled SYSPRV\n"));
}
}
}
@@ -207,9 +207,9 @@ char *colon;
Result = sys$check_access(&ObjType,&FileNameDesc,&UserNameDesc,ItemList);
if (Result == SS$_NORMAL)
- return(YES);
+ return(YES);
else
- return(NO);
+ return(NO);
}
return(NO);
@@ -223,30 +223,31 @@ char *colon;
** vmsname VMS file specification (NO NODE)
**
** ON EXIT:
-** returns www file specification
+** returns www file specification
**
** EXAMPLES:
** vmsname wwwname
-** DISK$USER disk$user
-** DISK$USER: /disk$user/
-** DISK$USER:[DUNS] /disk$user/duns
-** DISK$USER:[DUNS.ECHO] /disk$user/duns/echo
-** [DUNS] duns
-** [DUNS.ECHO] duns/echo
-** [DUNS.ECHO.-.TRANS] duns/echo/../trans
-** [DUNS.ECHO.--.TRANS] duns/echo/../../trans
-** [.DUNS] duns
-** [.DUNS.ECHO] duns/echo
-** [.DUNS.ECHO]TEST.COM duns/echo/test.com
-** TEST.COM test.com
+** DISK$USER disk$user
+** DISK$USER: /disk$user/
+** DISK$USER:[DUNS] /disk$user/duns
+** DISK$USER:[DUNS.ECHO] /disk$user/duns/echo
+** [DUNS] duns
+** [DUNS.ECHO] duns/echo
+** [DUNS.ECHO.-.TRANS] duns/echo/../trans
+** [DUNS.ECHO.--.TRANS] duns/echo/../../trans
+** [.DUNS] duns
+** [.DUNS.ECHO] duns/echo
+** [.DUNS.ECHO]TEST.COM duns/echo/test.com
+** TEST.COM test.com
**
**
*/
PUBLIC char * HTVMS_wwwName ARGS1(
- char *, vmsname)
+ CONST char *, vmsname)
{
-static char wwwname[256];
-char *src, *dst;
+static char wwwname[LY_MAXPATH];
+CONST char *src;
+char *dst;
int dir;
dst = wwwname;
src = vmsname;
@@ -256,40 +257,40 @@ int dir;
{
switch(*src)
{
- case ':': *(dst++) = '/'; break;
- case '-': if (dir)
- {
- if ((*(src-1)=='[' || *(src-1)=='.' || *(src-1)=='-') &&
- (*(src+1)=='.' || *(src+1)=='-'))
+ case ':': *(dst++) = '/'; break;
+ case '-': if (dir)
+ {
+ if ((*(src-1)=='[' || *(src-1)=='.' || *(src-1)=='-') &&
+ (*(src+1)=='.' || *(src+1)=='-'))
{
- *(dst++) = '/';
- *(dst++) = '.';
- *(dst++) = '.';
+ *(dst++) = '/';
+ *(dst++) = '.';
+ *(dst++) = '.';
}
else
- *(dst++) = '-';
+ *(dst++) = '-';
}
else
{
if (*(src-1) == ']') *(dst++) = '/';
*(dst++) = '-';
}
- break;
- case '.': if (dir)
- {
- if (*(src-1) != '[') *(dst++) = '/';
- }
- else
+ break;
+ case '.': if (dir)
+ {
+ if (*(src-1) != '[') *(dst++) = '/';
+ }
+ else
{
if (*(src-1) == ']') *(dst++) = '/';
- *(dst++) = '.';
+ *(dst++) = '.';
}
- break;
- case '[': dir = 1; break;
- case ']': dir = 0; break;
- default: if (*(src-1) == ']') *(dst++) = '/';
- *(dst++) = *src;
- break;
+ break;
+ case '[': dir = 1; break;
+ case ']': dir = 0; break;
+ default: if (*(src-1) == ']') *(dst++) = '/';
+ *(dst++) = *src;
+ break;
}
}
*(dst++) = '\0';
@@ -297,78 +298,6 @@ int dir;
}
-/* PUBLIC HTVMS_name()
-** CONVERTS WWW name into a VMS name
-** ON ENTRY:
-** nn Node Name (optional)
-** fn WWW file name
-**
-** ON EXIT:
-** returns vms file specification
-**
-** Bug: Returns pointer to static -- non-reentrant
-*/
-PUBLIC char * HTVMS_name ARGS2(
- CONST char *, nn,
- CONST char *, fn)
-{
-
-/* We try converting the filename into Files-11 syntax. That is, we assume
-** first that the file is, like us, on a VMS node. We try remote
-** (or local) DECnet access. Files-11, VMS, VAX and DECnet
-** are trademarks of Digital Equipment Corporation.
-** The node is assumed to be local if the hostname WITHOUT DOMAIN
-** matches the local one. @@@
-*/
- static char vmsname[INFINITY]; /* returned */
- char * filename = (char*)malloc(strlen(fn)+1);
- char * nodename = (char*)malloc(strlen(nn)+2+1); /* Copies to hack */
- char *second; /* 2nd slash */
- char *last; /* last slash */
-
- char * hostname = (char *)HTHostName();
-
- if (!filename || !nodename) outofmem(__FILE__, "HTVMSname");
- strcpy(filename, fn);
- strcpy(nodename, ""); /* On same node? Yes if node names match */
- if (strncmp(nn,"localhost",9)) {
- char *p, *q;
- for (p=hostname, q=(char *)nn;
- *p && *p!='.' && *q && *q!='.'; p++, q++){
- if (TOUPPER(*p)!=TOUPPER(*q)) {
- strcpy(nodename, nn);
- q = strchr(nodename, '.'); /* Mismatch */
- if (q) *q=0; /* Chop domain */
- strcat(nodename, "::"); /* Try decnet anyway */
- break;
- }
- }
- }
-
- second = strchr(filename+1, '/'); /* 2nd slash */
- last = strrchr(filename, '/'); /* last slash */
-
- if (!second) { /* Only one slash */
- sprintf(vmsname, "%s%s", nodename, filename + 1);
- } else if(second==last) { /* Exactly two slashes */
- *second = 0; /* Split filename from disk */
- sprintf(vmsname, "%s%s:%s", nodename, filename+1, second+1);
- *second = '/'; /* restore */
- } else { /* More than two slashes */
- char * p;
- *second = 0; /* Split disk from directories */
- *last = 0; /* Split dir from filename */
- sprintf(vmsname, "%s%s:[%s]%s",
- nodename, filename+1, second+1, last+1);
- *second = *last = '/'; /* restore filename */
- for (p=strchr(vmsname, '['); *p!=']'; p++)
- if (*p=='/') *p='.'; /* Convert dir sep. to dots */
- }
- FREE(nodename);
- FREE(filename);
- return vmsname;
-}
-
/*
** The code below is for directory browsing by VMS Curses clients.
** It is based on the newer WWWLib's HTDirBrw.c. - Foteos Macrides
@@ -380,7 +309,7 @@ PUBLIC int HTStat ARGS2(
/*
the following stuff does not work in VMS with a normal stat...
--> /disk$user/duns/www if www is a directory
- is statted like: /disk$user/duns/www.dir
+ is statted like: /disk$user/duns/www.dir
after a normal stat has failed
--> /disk$user/duns if duns is a toplevel directory
is statted like: /disk$user/000000/duns.dir
@@ -394,7 +323,7 @@ PUBLIC int HTStat ARGS2(
int Result;
int Len;
char *Ptr, *Ptr2;
-char Name[256];
+static char *Name;
/* try normal stat... */
Result = stat((char *)filename,info);
@@ -402,32 +331,7 @@ char Name[256];
return(Result);
/* make local copy */
- strcpy(Name,filename);
-
-#ifdef NOT_USED
- /* if filename contains a node specification (! or ::), we will try to access
- the file via DECNET, but we do not stat it..., just return success
- with some fake information... */
- if (HTVMS_checkDecnet(Name))
- {
- /* set up fake info, only the one we use... */
- info->st_dev = NULL;
- info->st_ino[0] = 0;
- info->st_ino[1] = 0;
- info->st_ino[2] = 0;
- info->st_mode = S_IFREG | S_IREAD; /* assume it is a regular Readable file */
- info->st_nlink = NULL;
- info->st_uid = 0;
- info->st_gid = 0;
- info->st_rdev = 0;
- info->st_size = 0;
- info->st_atime = time(NULL);
- info->st_mtime = time(NULL);
- info->st_ctime = time(NULL);
-
- return(0);
- }
-#endif /* NOT_USED */
+ StrAllocCopy(Name,filename);
/* failed,so do device search in case root is requested */
if (!strcmp(Name,"/"))
@@ -444,7 +348,7 @@ char Name[256];
Ptr = strchr(Name+1,'/');
if ((Ptr == NULL) && (Name[0] == '/'))
{ /* device only... */
- strcat(Name,"/000000/000000");
+ StrAllocCat(Name, "/000000/000000");
}
if (Ptr != NULL)
@@ -452,21 +356,21 @@ char Name[256];
Ptr2 = strchr(Ptr+1,'/');
if ((Ptr2 == NULL) && (Name[0] == '/'))
{
- char End[256];
- strcpy(End,Ptr);
- *(Ptr+1) = '\0';
- strcat(Name,"000000");
- strcat(Name,End);
+ char End[256];
+ LYstrncpy(End, Ptr, sizeof(End) - 1);
+ *(Ptr+1) = '\0';
+ StrAllocCat(Name, "000000");
+ StrAllocCat(Name, End);
}
}
- /* try in case a file on toplevel directory or .DIR was alreadyt specified */
+ /* try in case a file on toplevel directory or .DIR was already specified */
Result = stat(Name,info);
if (Result == 0)
return(Result);
/* add .DIR and try again */
- strcat(Name,".dir");
+ StrAllocCat(Name, ".dir");
Result = stat(Name,info);
return(Result);
}
@@ -479,15 +383,7 @@ char Name[256];
#endif /* !_POSIX_SOURCE */
typedef struct __dirdesc {
-#if 0
- int dd_fd; /* file descriptor */
- long dd_loc; /* buf offset of entry from last readddir() */
- long dd_size; /* amount of valid data in buffer */
- long dd_bsize; /* amount of entries read at a time */
- long dd_off; /* Current offset in dir (for telldir) */
- char *dd_buf; /* directory data buffer */
-#endif
- long context; /* context descriptor for LIB$FIND_FILE calls */
+ long context; /* context descriptor for LIB$FIND_FILE calls */
char dirname[255+1]; /* keeps the directory name, including *.* */
struct dsc$descriptor_s dirname_desc; /* descriptor of dirname */
} DIR;
@@ -495,28 +391,11 @@ typedef struct __dirdesc {
PRIVATE DIR *HTVMSopendir(char *dirname);
PRIVATE struct dirent *HTVMSreaddir(DIR *dirp);
PRIVATE int HTVMSclosedir(DIR *dirp);
-#if 0
-#ifndef _POSIX_SOURCE
-extern void seekdir(/* DIR *dirp, int loc */);
-extern long telldir(/* DIR *dirp */);
-#endif /* POSIX_SOURCE */
-extern void rewinddir(/* DIR *dirp */);
-
-#ifndef lint
-#define rewinddir(dirp) seekdir((dirp), (long)0)
-#endif
-#endif /* not defined for VMS */
/*** #include <sys_dirent.h> ***/
/*** "sys_dirent.h" ***/
struct dirent {
-#if 0
- off_t d_off; /* offset of next disk dir entry */
-#endif
unsigned long d_fileno; /* file number of entry */
-#if 0
- unsigned short d_reclen; /* length of this record */
-#endif
unsigned short d_namlen; /* length of string in d_name */
char d_name[255+1]; /* name (up to MAXNAMLEN + 1) */
};
@@ -547,7 +426,8 @@ char *closebracket;
long status;
struct dsc$descriptor_s entryname_desc;
struct dsc$descriptor_s dirname_desc;
-char DirEntry[256];
+static char *DirEntry;
+char Actual[256];
char VMSentry[256];
char UnixEntry[256];
int index;
@@ -558,11 +438,13 @@ char *dot;
/* or like /disk$user/duns/www/test/multi/ */
/* DirEntry should look like disk$user:[duns.www.test]multi in both cases */
/* dir.dirname should look like disk$user:[duns.www.test.multi] */
- strcpy(UnixEntry,dirname);
+ sprintf(UnixEntry, "%.*s", sizeof(UnixEntry) - 2, dirname);
if (UnixEntry[strlen(UnixEntry)-1] != '/')
strcat(UnixEntry,"/");
- strcpy(DirEntry, HTVMS_name("",UnixEntry));
+ StrAllocCopy(DirEntry, HTVMS_name("",UnixEntry));
+ if (strlen(DirEntry) > sizeof(dir.dirname) - 1)
+ return (NULL);
strcpy(dir.dirname, DirEntry);
index = strlen(DirEntry) - 1;
@@ -574,31 +456,34 @@ char *dot;
char *openbr = strrchr(DirEntry,'[');
if (!openbr)
{ /* convert disk$user: into disk$user:[000000]000000.dir */
- strcpy(dir.dirname, DirEntry);
- strcat(dir.dirname, "[000000]");
- strcat(DirEntry,"[000000]000000.dir");
+ if (strlen(dir.dirname) > sizeof(dir.dirname) - 10)
+ return (NULL);
+ sprintf(dir.dirname, "%.*s[000000]", sizeof(dir.dirname) - 9, DirEntry);
+ StrAllocCat(DirEntry,"[000000]000000.dir");
}
else
{
- char End[256];
- strcpy(End,openbr+1);
- *(openbr+1) = '\0';
- strcat(DirEntry,"000000]");
- strcat(DirEntry,End);
- strcat(DirEntry,".dir");
+ char End[256];
+ strcpy(End,openbr+1);
+ *(openbr+1) = '\0';
+ StrAllocCat(DirEntry,"000000]");
+ StrAllocCat(DirEntry,End);
+ StrAllocCat(DirEntry,".dir");
}
}
else
{
*dot = ']';
- strcat(DirEntry,".dir");
+ StrAllocCat(DirEntry,".dir");
}
+ /* lib$find_file needs a fixed-size buffer */
+ LYstrncpy(Actual, DirEntry, sizeof(Actual)-1);
dir.context = 0;
- dirname_desc.dsc$w_length = strlen(DirEntry);
+ dirname_desc.dsc$w_length = strlen(Actual);
dirname_desc.dsc$b_dtype = DSC$K_DTYPE_T;
dirname_desc.dsc$b_class = DSC$K_CLASS_S;
- dirname_desc.dsc$a_pointer = (char *)&(DirEntry);
+ dirname_desc.dsc$a_pointer = (char *)&(Actual);
/* look for the directory */
entryname_desc.dsc$w_length = 255;
@@ -607,24 +492,16 @@ char *dot;
entryname_desc.dsc$a_pointer = VMSentry;
status = lib$find_file(&(dirname_desc),
- &entryname_desc,
- &(dir.context),
- 0,0,0,0);
+ &entryname_desc,
+ &(dir.context),
+ 0,0,0,0);
if (!(status & 0x01))
{ /* directory not found */
return(NULL);
}
-#if 0
- /* now correct dirname, which looks like disk$user:[duns.www.test]multi */
- /* and should look like disk$user:[duns.www.test.multi] */
- closebracket = strchr(dir.dirname,']');
- *closebracket = '.';
- closebracket = strstr(dir.dirname,".dir");
- *closebracket = '\0';
- strcat(dir.dirname,"]");
-#endif
-
+ if (strlen(dir.dirname) > sizeof(dir.dirname) - 10)
+ return (NULL);
if (HTVMSFileVersions)
strcat(dir.dirname,"*.*;*");
else
@@ -652,9 +529,9 @@ char *UnixEntry;
entryname_desc.dsc$a_pointer = VMSentry;
status = lib$find_file(&(dirp->dirname_desc),
- &entryname_desc,
- &(dirp->context),
- 0,0,0,0);
+ &entryname_desc,
+ &(dirp->context),
+ 0,0,0,0);
if (status == RMS$_NMF)
{ /* no more files */
return(NULL);
@@ -663,11 +540,11 @@ char *UnixEntry;
{ /* ok */
if (!(status & 0x01)) return(0);
if (HTVMSFileVersions)
- space = strchr(VMSentry,' ');
+ space = strchr(VMSentry,' ');
else
- space = strchr(VMSentry,';');
+ space = strchr(VMSentry,';');
if (space)
- *space = '\0';
+ *space = '\0';
/* convert to unix style... */
UnixEntry = HTVMS_wwwName(VMSentry);
@@ -733,12 +610,6 @@ PRIVATE void free_VMSEntryInfo_contents ARGS1(VMSEntryInfo *,entry_info)
/* dont free the struct */
}
-#define FILE_BY_NAME 0
-#define FILE_BY_TYPE 1
-#define FILE_BY_SIZE 2
-#define FILE_BY_DATE 3
-extern BOOLEAN HTfileSortMethod; /* specifies the method of sorting */
-
PUBLIC int compare_VMSEntryInfo_structs ARGS2(VMSEntryInfo *,entry1,
VMSEntryInfo *,entry2)
{
@@ -747,9 +618,9 @@ PUBLIC int compare_VMSEntryInfo_structs ARGS2(VMSEntryInfo *,entry1,
switch(HTfileSortMethod)
{
- case FILE_BY_SIZE:
+ case FILE_BY_SIZE:
/* both equal or both 0 */
- if(entry1->size == entry2->size)
+ if(entry1->size == entry2->size)
return(strcasecomp(entry1->filename,
entry2->filename));
else
@@ -757,24 +628,22 @@ PUBLIC int compare_VMSEntryInfo_structs ARGS2(VMSEntryInfo *,entry1,
return(1);
else
return(-1);
- break;
- case FILE_BY_TYPE:
- if(entry1->type && entry2->type) {
- status = strcasecomp(entry1->type, entry2->type);
+ case FILE_BY_TYPE:
+ if(entry1->type && entry2->type) {
+ status = strcasecomp(entry1->type, entry2->type);
if(status)
return(status);
/* else fall to filename comparison */
}
- return (strcasecomp(entry1->filename,
+ return (strcasecomp(entry1->filename,
entry2->filename));
- break;
- case FILE_BY_DATE:
- if(entry1->date && entry2->date) {
+ case FILE_BY_DATE:
+ if(entry1->date && entry2->date) {
/*
** Make sure we have the correct length. - FM
*/
if (strlen(entry1->date) != 12 ||
- strlen(entry2->date) != 12) {
+ strlen(entry2->date) != 12) {
return (strcasecomp(entry1->filename,
entry2->filename));
}
@@ -783,71 +652,70 @@ PUBLIC int compare_VMSEntryInfo_structs ARGS2(VMSEntryInfo *,entry1,
** chronological order. - FM
*/
if (entry1->date[7] != ' ') {
- strcpy(date1, "9999");
+ strcpy(date1, "9999");
strcpy(time1, (char *)&entry1->date[7]);
} else {
strcpy(date1, (char *)&entry1->date[8]);
- strcpy(time1, "00:00");
+ strcpy(time1, "00:00");
}
strncpy(month, entry1->date, 3);
month[3] = '\0';
for (i = 0; i < 12; i++) {
- if (!strcasecomp(month, months[i])) {
+ if (!strcasecomp(month, months[i])) {
break;
}
}
i++;
- sprintf(month, "%s%d", (i < 10 ? "0" : ""), i);
+ sprintf(month, "%02d", i);
strcat(date1, month);
strncat(date1, (char *)&entry1->date[4], 2);
date1[8] = '\0';
if (date1[6] == ' ') {
- date1[6] = '0';
+ date1[6] = '0';
}
strcat(date1, time1);
if (entry2->date[7] != ' ') {
- strcpy(date2, "9999");
+ strcpy(date2, "9999");
strcpy(time2, (char *)&entry2->date[7]);
} else {
strcpy(date2, (char *)&entry2->date[8]);
- strcpy(time2, "00:00");
+ strcpy(time2, "00:00");
}
strncpy(month, entry2->date, 3);
month[3] = '\0';
for (i = 0; i < 12; i++) {
- if (!strcasecomp(month, months[i])) {
+ if (!strcasecomp(month, months[i])) {
break;
}
}
i++;
- sprintf(month, "%s%d", (i < 10 ? "0" : ""), i);
+ sprintf(month, "%02d", i);
strcat(date2, month);
strncat(date2, (char *)&entry2->date[4], 2);
date2[8] = '\0';
if (date2[6] == ' ') {
- date2[6] = '0';
+ date2[6] = '0';
}
strcat(date2, time2);
/*
** Do the comparison. - FM
*/
- status = strcasecomp(date2, date1);
+ status = strcasecomp(date2, date1);
if(status)
return(status);
/* else fall to filename comparison */
}
- return (strcasecomp(entry1->filename,
+ return (strcasecomp(entry1->filename,
entry2->filename));
- break;
- case FILE_BY_NAME:
- default:
- return (strcmp(entry1->filename,
+ case FILE_BY_NAME:
+ default:
+ return (strcmp(entry1->filename,
entry2->filename));
}
}
-/* HTVMSBrowseDir()
+/* HTVMSBrowseDir()
**
** This function generates a directory listing as an HTML-object
** for local file URL's. It assumes the first two elements of
@@ -889,7 +757,7 @@ PUBLIC int HTVMSBrowseDir ARGS4(
extern BOOLEAN no_dotfiles, show_dotfiles;
HTUnEscape(pathname);
- CTRACE(tfp,"HTVMSBrowseDir: Browsing `%s\'\n", pathname);
+ CTRACE((tfp,"HTVMSBrowseDir: Browsing `%s\'\n", pathname));
/*
* Require at least two elements (presumably a device and directory)
@@ -898,12 +766,12 @@ PUBLIC int HTVMSBrowseDir ARGS4(
* to /sys$sysroot/syshlp) before calling this routine.
*/
if (((*pathname != '/') ||
- (cp=strchr(pathname+1, '/')) == NULL ||
+ (cp=strchr(pathname+1, '/')) == NULL ||
*(cp+1) == '\0' ||
0==strncmp((cp+1), "000000", 6)) ||
- (dp=HTVMSopendir(pathname)) == NULL) {
- FREE(pathname);
- return HTLoadError(sink, 403, COULD_NOT_ACCESS_DIR);
+ (dp=HTVMSopendir(pathname)) == NULL) {
+ FREE(pathname);
+ return HTLoadError(sink, 403, COULD_NOT_ACCESS_DIR);
}
/*
@@ -926,7 +794,7 @@ PUBLIC int HTVMSBrowseDir ARGS4(
cp = strrchr(pathname, '/'); /* find lastslash */
StrAllocCopy(tail, (cp+1)); /* take slash off the beginning */
if (*tail != '\0') {
- StrAllocCopy(title, tail);
+ StrAllocCopy(title, tail);
*cp = '\0';
if ((cp1=strrchr(pathname, '/')) != NULL &&
cp1 != pathname &&
@@ -934,7 +802,7 @@ PUBLIC int HTVMSBrowseDir ARGS4(
StrAllocCopy(parent, (cp1+1));
*cp = '/';
} else {
- pathname[strlen(pathname)-1] = '\0';
+ pathname[strlen(pathname)-1] = '\0';
cp = strrchr(pathname, '/');
StrAllocCopy(title, (cp+1));
pathname[strlen(pathname)] = '/';
@@ -974,19 +842,19 @@ PUBLIC int HTVMSBrowseDir ARGS4(
END(HTML_H1);
PUTC('\n');
if (HTDirReadme == HT_DIR_README_TOP) {
- FILE * fp;
+ FILE * fp;
if (header[strlen(header)-1] != '/')
StrAllocCat(header, "/");
StrAllocCat(header, HT_DIR_README_FILE);
- if ((fp = fopen(header, "r")) != NULL) {
+ if ((fp = fopen(header, "r")) != NULL) {
START(HTML_PRE);
for(;;) {
- char c = fgetc(fp);
- if (c == (char)EOF)
+ char c = fgetc(fp);
+ if (c == (char)EOF)
break;
#ifdef NOTDEFINED
- switch (c) {
- case '&':
+ switch (c) {
+ case '&':
case '<':
case '>':
PUTC('&');
@@ -997,21 +865,18 @@ PUBLIC int HTVMSBrowseDir ARGS4(
break;
default:
PUTC(c);
- }
+ }
#else
PUTC(c);
#endif /* NOTDEFINED */
}
END(HTML_PRE);
fclose(fp);
- }
+ }
}
FREE(header);
if (parent) {
- relative = (char*) malloc(strlen(tail) + 4);
- if (relative == NULL)
- outofmem(__FILE__, "HTVMSBrowseDir");
- sprintf(relative, "%s/..", tail);
+ HTSprintf0(&relative, "%s/..", tail);
HTStartAnchor(target, "", relative);
PUTS("Up to ");
HTUnEscape(parent);
@@ -1075,9 +940,9 @@ PUBLIC int HTVMSBrowseDir ARGS4(
if (HTStat(pathname, &file_info)) {
/* for VMS the failure here means the file is not readable...
we however continue to browse through the directory... */
- continue;
+ continue;
}
- entry_info = (VMSEntryInfo *)malloc(sizeof(VMSEntryInfo));
+ entry_info = (VMSEntryInfo *)malloc(sizeof(VMSEntryInfo));
if (entry_info == NULL)
outofmem(__FILE__, "HTVMSBrowseDir");
entry_info->type = 0;
@@ -1103,45 +968,45 @@ PUBLIC int HTVMSBrowseDir ARGS4(
StrAllocCopy(entry_info->filename, dirbuf->d_name);
if (S_ISDIR(file_info.st_mode)) {
- /* strip .DIR part... */
- char *dot;
- dot = strstr(entry_info->filename, ".DIR");
- if (dot)
- *dot = '\0';
+ /* strip .DIR part... */
+ char *dot;
+ dot = strstr(entry_info->filename, ".DIR");
+ if (dot)
+ *dot = '\0';
LYLowerCase(entry_info->filename);
StrAllocCopy(entry_info->type, "Directory");
} else {
- if ((cp = strstr(entry_info->filename, "READ")) == NULL) {
- cp = entry_info->filename;
+ if ((cp = strstr(entry_info->filename, "READ")) == NULL) {
+ cp = entry_info->filename;
} else {
cp += 4;
if (!strncmp(cp, "ME", 2)) {
- cp += 2;
+ cp += 2;
while (cp && *cp && *cp != '.') {
cp++;
}
} else if (!strncmp(cp, ".ME", 3)) {
- cp = (entry_info->filename +
+ cp = (entry_info->filename +
strlen(entry_info->filename));
} else {
- cp = entry_info->filename;
+ cp = entry_info->filename;
}
}
LYLowerCase(cp);
if (((len = strlen(entry_info->filename)) > 2) &&
entry_info->filename[len-1] == 'z') {
if (entry_info->filename[len-2] == '.' ||
- entry_info->filename[len-2] == '_')
+ entry_info->filename[len-2] == '_')
entry_info->filename[len-1] = 'Z';
}
}
/* Get the date */
{
- char *t = (char *)ctime((CONST time_t *)&file_info.st_ctime);
+ char *t = (char *)ctime((CONST time_t *)&file_info.st_ctime);
*(t+24) = '\0';
- StrAllocCopy(entry_info->date, (t+4));
+ StrAllocCopy(entry_info->date, (t+4));
*((entry_info->date)+7) = '\0';
if ((atoi((t+19))) < atoi(ThisYear))
StrAllocCat(entry_info->date, (t+19));
@@ -1153,16 +1018,16 @@ PUBLIC int HTVMSBrowseDir ARGS4(
/* Get the size */
if (!S_ISDIR(file_info.st_mode))
- entry_info->size = (unsigned int)file_info.st_size;
+ entry_info->size = (unsigned int)file_info.st_size;
else
- entry_info->size = 0;
+ entry_info->size = 0;
/* Now, update the BTree etc. */
if(entry_info->display)
{
- CTRACE(tfp,"Adding file to BTree: %s\n",
- entry_info->filename);
- HTBTree_add(bt, (VMSEntryInfo *)entry_info);
+ CTRACE((tfp,"Adding file to BTree: %s\n",
+ entry_info->filename));
+ HTBTree_add(bt, (VMSEntryInfo *)entry_info);
}
} /* End while HTVMSreaddir() */
@@ -1186,8 +1051,8 @@ PUBLIC int HTVMSBrowseDir ARGS4(
/* Output the date */
if(entry_info->date)
{
- PUTS(entry_info->date);
- PUTS(" ");
+ PUTS(entry_info->date);
+ PUTS(" ");
}
else
PUTS(" * ");
@@ -1196,9 +1061,9 @@ PUBLIC int HTVMSBrowseDir ARGS4(
if(entry_info->type)
{
for(i = 0; entry_info->type[i] != '\0' && i < 15; i++)
- PUTC(entry_info->type[i]);
+ PUTC(entry_info->type[i]);
for(; i < 17; i++)
- PUTC(' ');
+ PUTC(' ');
}
@@ -1207,10 +1072,10 @@ PUBLIC int HTVMSBrowseDir ARGS4(
PUTS(entry_info->filename);
END(HTML_A);
- /* Output the size */
+ /* Output the size */
if(entry_info->size)
{
- if(entry_info->size < 1024)
+ if(entry_info->size < 1024)
sprintf(string_buffer," %d bytes",
entry_info->size);
else
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.h
index c5bcb666662..2720125eba3 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.h
@@ -87,26 +87,7 @@ PUBLIC BOOL HTVMS_checkAccess PARAMS((
**
*/
PUBLIC char * HTVMS_wwwName PARAMS((
- char * vmsname));
-
-/* PUBLIC HTVMS_name()
-** CONVERTS WWW name into a VMS name
-** ON ENTRY:
-** nn Node Name (optional)
-** fn WWW file name
-**
-** ON EXIT:
-** returns vms file specification
-**
-** Bug: Returns pointer to static -- non-reentrant
-*/
-PUBLIC char * HTVMS_name PARAMS((
- CONST char * nn,
- CONST char * fn));
-
-PUBLIC int HTStat PARAMS((
- CONST char * filename,
- struct stat * info));
+ CONST char * vmsname));
PUBLIC int HTVMSBrowseDir PARAMS((
CONST char * address,
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisProt.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisProt.c
index 760814072e6..9fddc10b74f 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisProt.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisProt.c
@@ -865,6 +865,7 @@ char* buffer;
size -= (buf - originalBuf);
}
}
+ /* FALLTHRU */
case DT_Source:
buf = readString(&source,buf);
break;
@@ -1204,6 +1205,7 @@ char* buffer;
size -= (buf - originalBuf);
}
}
+ /* FALLTHRU */
case DT_Source:
buf = readString(&source,buf);
break;
@@ -2193,7 +2195,7 @@ query_term** terms;
docTerm = terms[termNum];
if (docTerm == NULL)
- break; /* we're done converting */;
+ break; /* we're done converting */
typeTerm = terms[termNum + 1]; /* get the lead Term if it exists */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.c
index 1f9ffcccd18..6f0811c0430 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.c
@@ -40,7 +40,7 @@
#include <HTVMS_WaisProt.h>
#include <HTTCP.h>
-#undef MAXINT /* we don't need it here, and tcp.h may conflict */
+#undef MAXINT /* we don't need it here, and www_tcp.h may conflict */
#include <math.h>
#include <LYexit.h>
@@ -220,7 +220,7 @@ transport_message(
if( request_length + HEADER_LENGTH !=
NETWRITE(connection,request_message,
- (int)( request_length +HEADER_LENGTH)) )
+ (int)( request_length +HEADER_LENGTH)) )
return 0;
/* read for the first '0' */
@@ -650,22 +650,22 @@ void* queryInfo)
query->ReplaceIndicator = replace;
query->ResultSetName = s_strdup(name);
query->DatabaseNames = NULL;
- if (databases != NULL)
- { for (i = 0, ptr = databases[i]; ptr != NULL; ptr = databases[++i])
- { if (query->DatabaseNames == NULL)
+ if (databases != NULL) {
+ for (i = 0, ptr = databases[i]; ptr != NULL; ptr = databases[++i]) {
+ if (query->DatabaseNames == NULL)
query->DatabaseNames = (char**)s_malloc((size_t)(sizeof(char*) * 2));
else
query->DatabaseNames = (char**)s_realloc((char*)query->DatabaseNames,
(size_t)(sizeof(char*) * (i + 2)));
query->DatabaseNames[i] = s_strdup(ptr);
query->DatabaseNames[i+1] = NULL;
- }
- }
+ }
+ }
query->QueryType = s_strdup(type);
query->ElementSetNames = NULL;
- if (elements != NULL)
- { for (i = 0, ptr = elements[i]; ptr != NULL; ptr = elements[++i])
- { if (query->ElementSetNames == NULL)
+ if (elements != NULL) {
+ for (i = 0, ptr = elements[i]; ptr != NULL; ptr = elements[++i]) {
+ if (query->ElementSetNames == NULL)
query->ElementSetNames = (char**)s_malloc((size_t)(sizeof(char*) * 2));
else
query->ElementSetNames = (char**)s_realloc((char*)query->ElementSetNames,
@@ -717,9 +717,9 @@ writeSearchAPDU(SearchAPDU* query, char* buffer, long* len)
buf = writeBoolean(query->ReplaceIndicator,buf,len);
buf = writeString(query->ResultSetName,DT_ResultSetName,buf,len);
/* write database names */
- if (query->DatabaseNames != NULL)
- { for (i = 0,scratch = NULL, ptr = query->DatabaseNames[i]; ptr != NULL; ptr = query->DatabaseNames[++i])
- { if (scratch == NULL)
+ if (query->DatabaseNames != NULL) {
+ for (i = 0,scratch = NULL, ptr = query->DatabaseNames[i]; ptr != NULL; ptr = query->DatabaseNames[++i]) {
+ if (scratch == NULL)
scratch = s_strdup(ptr);
else
{ size_t newScratchSize = (size_t)(strlen(scratch) + strlen(ptr) + 2);
@@ -727,16 +727,16 @@ writeSearchAPDU(SearchAPDU* query, char* buffer, long* len)
s_strncat(scratch,DB_DELIMITER,2,newScratchSize);
s_strncat(scratch,ptr,strlen(ptr) + 1,newScratchSize);
}
- }
+ }
buf = writeString(scratch,DT_DatabaseNames,buf,len);
s_free(scratch);
}
buf = writeString(query->QueryType,DT_QueryType,buf,len);
/* write element set names */
- if (query->ElementSetNames != NULL)
- { for (i = 0,scratch = NULL, ptr = query->ElementSetNames[i]; ptr != NULL; ptr = query->ElementSetNames[++i])
- { if (scratch == NULL)
- { if (query->ElementSetNames[i+1] == NULL) /* there is a single element set name */
+ if (query->ElementSetNames != NULL) {
+ for (i = 0,scratch = NULL, ptr = query->ElementSetNames[i]; ptr != NULL; ptr = query->ElementSetNames[++i]) {
+ if (scratch == NULL) {
+ if (query->ElementSetNames[i+1] == NULL) /* there is a single element set name */
{ scratch = (char*)s_malloc((size_t)strlen(ptr) + 2);
strncpy(scratch,ES_DELIMITER_1,2);
s_strncat(scratch,ptr,strlen(ptr) + 1,strlen(ptr) + 2);
@@ -749,7 +749,7 @@ writeSearchAPDU(SearchAPDU* query, char* buffer, long* len)
s_strncat(scratch,ES_DELIMITER_1,2,newScratchSize);
s_strncat(scratch,ptr,strlen(ptr) + 1,newScratchSize);
}
- }
+ }
else
{ char* esPtr = query->ElementSetNames[++i]; /* the element set name */
size_t newScratchSize = (size_t)(strlen(scratch) + strlen(ptr) + strlen(esPtr) + 3);
@@ -953,11 +953,11 @@ makeDiag(boolean surrogate, char* code, char* addInfo)
void
freeDiag(diagnosticRecord* diag)
{
- if (diag != NULL)
- { if (diag->ADDINFO != NULL)
+ if (diag != NULL) {
+ if (diag->ADDINFO != NULL)
s_free(diag->ADDINFO);
- s_free(diag);
- }
+ s_free(diag);
+ }
}
/*----------------------------------------------------------------------*/
@@ -2032,10 +2032,10 @@ readQuery(any *info)
query_term** terms = NULL;
query_term* qt = NULL;
long numTerms = 0L;
-char tmp[100];
+ char tmp[100];
-sprintf(tmp,"readquery: bytes: %ld",info->size);
-log_write(tmp);
+ sprintf(tmp,"readquery: bytes: %ld",info->size);
+ log_write(tmp);
while (readPos < info->bytes + info->size)
{ readPos = readQueryTerm(&qt,readPos);
@@ -2048,7 +2048,7 @@ log_write(tmp);
(query_term**)s_realloc((char*)terms,
(size_t)(sizeof(query_term*)*(numTerms+2)));
}
-if(qt==NULL)
+ if (qt == NULL)
log_write("qt = null");
terms[numTerms++] = qt;
terms[numTerms] = NULL;
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h
index 150e108df86..474b943d7bc 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMS_WaisUI.h
@@ -183,10 +183,6 @@ typedef unsigned long data_tag;
#define ACCEPT TRUE
#define REJECT FALSE
-/* values for SearchAPDU replace indicator element */
-#define ON TRUE
-#define OFF FALSE
-
/* values for SearchResponseAPDU search status element */
#define SUCCESS 0 /* intuitive huh? */
#define FAILURE 1
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTWAIS.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTWAIS.c
index 6eea24ee3c4..86e8701d1df 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTWAIS.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTWAIS.c
@@ -75,6 +75,7 @@
/* FROM WWW
** --------
*/
+#include <LYUtils.h>
#include <LYLeaks.h>
#define DIRECTORY "/cnidr.org:210/directory-of-servers"
@@ -86,11 +87,6 @@
#define HEX_ESCAPE '%'
-extern HTCJKlang HTCJK;
-
-extern int WWW_TraceFlag; /* Control diagnostic output */
-extern FILE * logfile; /* Log file output */
-
PRIVATE BOOL as_gate; /* Client is using us as gateway */
PRIVATE char line[2048]; /* For building strings to display */
@@ -119,36 +115,37 @@ struct _HTStream {
/* ------------------------------------------------------------------------ */
/* Returns 1 on success, 0 on fail, -1 on interrupt. */
PRIVATE int fd_mosaic_connect_to_server ARGS3(
- char *, host_name,
+ char *, host_name,
long, port,
- long *, fd)
+ long *, fd)
{
- /*
- ** New version.
- */
- char dummy[256];
+ char *dummy = NULL;
int status;
+ int result;
- sprintf (dummy, "wais://%s:%d/", host_name, port);
+ HTSprintf0(&dummy, "wais://%s:%d/", host_name, port);
status = HTDoConnect (dummy, "WAIS", 210, (int *)fd);
if (status == HT_INTERRUPTED) {
- return -1;
+ result = -1;
+ } else if (status < 0) {
+ result = 0;
+ } else {
+ result = 1;
}
- if (status < 0)
- return 0;
- return 1;
+ FREE(dummy);
+ return result;
}
/* Returns 1 on success, 0 on fail, -1 on interrupt. */
#ifdef VMS
PRIVATE int mosaic_connect_to_server ARGS3(
- char *, host_name,
+ char *, host_name,
long, port,
- long *, fdp)
+ long *, fdp)
#else
PRIVATE int mosaic_connect_to_server ARGS3(
- char *, host_name,
+ char *, host_name,
long, port,
FILE **, fp)
#endif /* VMS */
@@ -225,18 +222,18 @@ PRIVATE void init_acceptable NOARGS
**
**
** On exit,
-** returns nil if error
+** returns nil if error
** pointer to malloced string (must be freed) if ok
*/
PRIVATE char * WWW_from_archie ARGS1(
- char *, file)
+ char *, file)
{
char * end;
char * result;
char * colon;
for(end=file; *end > ' '; end++); /* assumes ASCII encoding*/
result = (char *)malloc(10 + (end-file));
- if (!result) return result; /* Malloc error */
+ if (!result) return result; /* Malloc error */
strcpy(result, "file://");
strncat(result, file, end-file);
colon = strchr(result+7, ':'); /* Expect colon after host */
@@ -253,7 +250,7 @@ PRIVATE char * WWW_from_archie ARGS1(
** The format of the docid MUST be good!
**
** On exit,
-** returns nil if error
+** returns nil if error
** pointer to malloced string (must be freed) if ok
*/
PRIVATE char hex [17] = "0123456789ABCDEF";
@@ -264,7 +261,9 @@ PRIVATE char * WWW_from_WAIS ARGS1(
static char buf[BIG];
char * q = buf;
char * p = (docid->bytes);
+ char * result = NULL;
int i, l;
+
if (TRACE) {
char *p;
fprintf(tfp, "WAIS id (%d bytes) is ", (int)docid->size);
@@ -278,9 +277,9 @@ PRIVATE char * WWW_from_WAIS ARGS1(
}
for (p = docid->bytes;
(p < docid->bytes+docid->size) && (q < &buf[BIG]);) {
- CTRACE(tfp, " Record type %d, length %d\n", p[0], p[1]);
+ CTRACE((tfp, " Record type %d, length %d\n", p[0], p[1]));
if (*p > 10) {
- CTRACE(tfp, "Eh? DOCID record type of %d!\n", *p);
+ CTRACE((tfp, "Eh? DOCID record type of %d!\n", *p));
return 0;
}
{ /* Bug fix -- allow any byte value 15 Apr 93 */
@@ -300,7 +299,7 @@ PRIVATE char * WWW_from_WAIS ARGS1(
l = *p++; /* Length */
for (i = 0; i < l; i++, p++){
if (!acceptable[*p]) {
- *q++ = HEX_ESCAPE; /* Means hex commming */
+ *q++ = HEX_ESCAPE; /* Means hex coming */
*q++ = hex[(*p) >> 4];
*q++ = hex[(*p) & 15];
}
@@ -309,21 +308,16 @@ PRIVATE char * WWW_from_WAIS ARGS1(
*q++= ';'; /* Terminate field */
}
*q++ = 0; /* Terminate string */
- CTRACE(tfp, "WWW form of id: %s\n", buf);
- {
- char * result = (char *)malloc(strlen(buf)+1);
- if (!result)
- outofmem(__FILE__, "WWW_from_WAIS");
- strcpy(result, buf);
- return result;
- }
+ CTRACE((tfp, "WWW form of id: %s\n", buf));
+ StrAllocCopy(result, buf);
+ return result;
} /* WWW_from_WAIS */
/* Transform URL into WAIS document identifier
** -------------------------------------------
**
** On entry,
-** docname points to valid name produced originally by
+** docname points to valid name produced originally by
** WWW_from_WAIS
** On exit,
** docid->size is valid
@@ -331,7 +325,7 @@ PRIVATE char * WWW_from_WAIS ARGS1(
*/
PRIVATE any * WAIS_from_WWW ARGS2(
any *, docid,
- char *, docname)
+ char *, docname)
{
char *z; /* Output pointer */
char *sor; /* Start of record - points to size field. */
@@ -340,7 +334,7 @@ PRIVATE any * WAIS_from_WWW ARGS2(
char *s; /* Position of semicolon */
int n; /* size */
- CTRACE(tfp, "WWW id (to become WAIS id): %s\n", docname);
+ CTRACE((tfp, "WWW id (to become WAIS id): %s\n", docname));
for (n = 0, p = docname; *p; p++) { /* Count sizes of strings */
n++;
if (*p == ';')
@@ -357,7 +351,7 @@ PRIVATE any * WAIS_from_WWW ARGS2(
for (p = docname; *p; ) { /* Convert of strings */
/* Record type */
- *z = 0; /* Initialize record type */
+ *z = 0; /* Initialize record type */
while (*p >= '0' && *p <= '9') {
*z = *z*10 + (*p++ - '0'); /* Decode decimal record type */
}
@@ -413,8 +407,8 @@ PRIVATE any * WAIS_from_WWW ARGS2(
** --------------------------------------
*/
PRIVATE void output_text_record ARGS4(
- HTStream *, target,
- WAISDocumentText *, record,
+ HTStream *, target,
+ WAISDocumentText *, record,
boolean, quote_string_quotes,
boolean, binary)
{
@@ -438,7 +432,7 @@ PRIVATE void output_text_record ARGS4(
/* if the next letter is '(' or ')', then ignore two letters */
if ('(' == record->DocumentText->bytes[count + 1] ||
')' == record->DocumentText->bytes[count + 1])
- count += 1; /* it is a term marker */
+ count += 1; /* it is a term marker */
else count += 4; /* it is a paragraph marker */
} else if (ch == '\n' || ch == '\r') {
PUTC('\n');
@@ -448,7 +442,7 @@ PRIVATE void output_text_record ARGS4(
}
} /* output text record */
-/* Format A Search response for the client display_search_response
+/* Format A Search response for the client display_search_response
** ---------------------------------------
*/
/* modified from tracy shen's version in wutil.c
@@ -463,9 +457,9 @@ PRIVATE void display_search_response ARGS4(
WAISSearchResponse *info;
long i, k;
- BOOL archie = strstr(database, "archie")!=0; /* Specical handling */
+ BOOL archie = strstr(database, "archie")!=0; /* Special handling */
- CTRACE(tfp, "HTWAIS: Displaying search response\n");
+ CTRACE((tfp, "HTWAIS: Displaying search response\n"));
PUTS(gettext("Index "));
START(HTML_EM);
PUTS(database);
@@ -497,17 +491,17 @@ PRIVATE void display_search_response ARGS4(
WAISDocumentHeader* head = info->DocHeaders[k];
char * headline = trim_junk(head->Headline);
any * docid = head->DocumentID;
- char * docname; /* printable version of docid */
+ char * docname; /* printable version of docid */
i++;
/*
** Make a printable string out of the document id.
*/
- CTRACE(tfp, "HTWAIS: %2ld: Score: %4ld, lines:%4ld '%s'\n",
+ CTRACE((tfp, "HTWAIS: %2ld: Score: %4ld, lines:%4ld '%s'\n",
i,
(long int)(info->DocHeaders[k]->Score),
(long int)(info->DocHeaders[k]->Lines),
- headline);
+ headline));
START(HTML_LI);
@@ -525,21 +519,24 @@ PRIVATE void display_search_response ARGS4(
} else { /* Not archie */
docname = WWW_from_WAIS(docid);
if (docname) {
- char * dbname = HTEscape(database, URL_XPALPHAS);
- sprintf(line,
- "/%s/%s/%d/%s", /* W3 address */
- dbname,
- head->Types ? head->Types[0] : "TEXT",
- (int)(head->DocumentLength),
- docname);
- HTStartAnchor(target, NULL,
- ((head->Types) &&
- (!strcmp(head->Types[0], "URL")))
- ?
- headline : line); /* NT, Sep 93 */
+ if ((head->Types) &&
+ (!strcmp(head->Types[0], "URL"))) {
+ HTStartAnchor(target, NULL, headline);
+ } else{
+ char * dbname = HTEscape(database, URL_XPALPHAS);
+ char * w3_address = NULL;
+ HTSprintf0(&w3_address,
+ "/%s/%s/%d/%s",
+ dbname,
+ head->Types ? head->Types[0] : "TEXT",
+ (int)(head->DocumentLength),
+ docname);
+ HTStartAnchor(target, NULL, w3_address);
+ FREE(w3_address);
+ FREE(dbname);
+ }
PUTS(headline);
END(HTML_A);
- FREE(dbname);
FREE(docname);
} else {
PUTS(gettext("(bad doc id)"));
@@ -616,17 +613,15 @@ PUBLIC int HTLoadWAIS ARGS4(
#define MAXDOCS 200
{
- static CONST char * error_header =
-"<h1>Access error</h1>\nThe following error occured in accesing a WAIS server:<P>\n";
- char * key; /* pointer to keywords in URL */
+ char * key; /* pointer to keywords in URL */
char* request_message = NULL; /* arbitrary message limit */
char* response_message = NULL; /* arbitrary message limit */
long request_buffer_length; /* how of the request is left */
SearchResponseAPDU *retrieval_response = 0;
char keywords[MAX_KEYWORDS_LENGTH + 1];
char *server_name;
- char *wais_database = NULL; /* name of current database */
- char *www_database; /* Same name escaped */
+ char *wais_database = NULL; /* name of current database */
+ char *www_database; /* Same name escaped */
char *service;
char *doctype;
char *doclength;
@@ -650,7 +645,7 @@ PUBLIC int HTLoadWAIS ARGS4(
/* Decipher and check syntax of WWW address:
** ----------------------------------------
**
- ** First we remove the "wais:" if it was spcified. 920110
+ ** First we remove the "wais:" if it was specified. 920110
*/
names = HTParse(arg, "", PARSE_HOST | PARSE_PATH | PARSE_PUNCTUATION);
key = strchr(names, '?');
@@ -663,7 +658,7 @@ PUBLIC int HTLoadWAIS ARGS4(
}
if (names[0] == '/') {
server_name = names+1;
- if (as_gate =(*server_name == '/'))
+ if ((as_gate =(*server_name == '/')) != 0)
server_name++; /* Accept one or two */
www_database = strchr(server_name,'/');
if (www_database) {
@@ -695,7 +690,7 @@ PUBLIC int HTLoadWAIS ARGS4(
if (!ok)
return HTLoadError(sink, 500, gettext("Syntax error in WAIS URL"));
- CTRACE(tfp, "HTWAIS: Parsed OK\n");
+ CTRACE((tfp, "HTWAIS: Parsed OK\n"));
service = strchr(names, ':');
if (service)
@@ -712,16 +707,16 @@ PUBLIC int HTLoadWAIS ARGS4(
} else if (!(key && !*key)) {
int status;
- CTRACE (tfp, "===WAIS=== calling mosaic_connect_to_server\n");
+ CTRACE((tfp, "===WAIS=== calling mosaic_connect_to_server\n"));
status = mosaic_connect_to_server(server_name,
atoi(service),
&connection);
if (status == 0) {
- CTRACE (tfp, "===WAIS=== connection failed\n");
+ CTRACE((tfp, "===WAIS=== connection failed\n"));
FREE(names);
return HT_NOT_LOADED;
} else if (status == -1) {
- CTRACE (tfp, "===WAIS=== connection interrupted\n");
+ CTRACE((tfp, "===WAIS=== connection interrupted\n"));
FREE(names);
return HT_NOT_LOADED;
}
@@ -734,11 +729,9 @@ PUBLIC int HTLoadWAIS ARGS4(
** This below fixed size stuff is terrible.
*/
#ifdef VMS
- if (!(request_message =
- (char*)calloc((size_t)MAX_MESSAGE_LEN*sizeof(char),1)))
+ if ((request_message = typecallocn(char, MAX_MESSAGE_LEN)) == 0)
outofmem(__FILE__, "HTLoadWAIS");
- if (!(response_message =
- (char*)calloc((size_t)MAX_MESSAGE_LEN*sizeof(char),1)))
+ if ((response_message = typecallocn(char, MAX_MESSAGE_LEN)) == 0)
outofmem(__FILE__, "HTLoadWAIS");
#else
request_message = (char*)s_malloc((size_t)MAX_MESSAGE_LEN * sizeof(char));
@@ -750,9 +743,9 @@ PUBLIC int HTLoadWAIS ARGS4(
** the user has followed a link to the index itself. It would be
** appropriate at this point to send him the .SRC file - how?
*/
- if (key && !*key) { /* I N D E X */
+ if (key && !*key) { /* I N D E X */
#ifdef CACHE_FILE_PREFIX
- char filename[256];
+ char * filename = NULL;
FILE * fp;
#endif
HTStructured * target = HTML_new(anAnchor, format_out, sink);
@@ -789,14 +782,14 @@ PUBLIC int HTLoadWAIS ARGS4(
** If we have seen a source file for this database, use that.
*/
#ifdef CACHE_FILE_PREFIX
- sprintf(filename, "%sWSRC-%s:%s:%.100s.txt",
+ HTSprintf0(&filename, "%sWSRC-%s:%s:%.100s.txt",
CACHE_FILE_PREFIX,
server_name, service, www_database);
fp = fopen(filename, "r"); /* Have we found this already? */
- CTRACE(tfp, "HTWAIS: Description of server %s %s.\n",
+ CTRACE((tfp, "HTWAIS: Description of server %s %s.\n",
filename,
- fp ? "exists already" : "does NOT exist!");
+ fp ? "exists already" : "does NOT exist!"));
if (fp) {
char c;
@@ -806,6 +799,7 @@ PUBLIC int HTLoadWAIS ARGS4(
END(HTML_PRE);
fclose(fp);
}
+ FREE(filename);
#endif
START(HTML_P);
PUTS(gettext("\nEnter the 's'earch command and then specify search words.\n"));
@@ -816,7 +810,8 @@ PUBLIC int HTLoadWAIS ARGS4(
HTStructured * target;
strncpy(keywords, key, MAX_KEYWORDS_LENGTH);
- while(p=strchr(keywords, '+')) *p = ' ';
+ while ((p = strchr(keywords, '+')) != 0)
+ *p = ' ';
/*
** Send advance title to get something fast to the other end.
@@ -850,8 +845,8 @@ PUBLIC int HTLoadWAIS ARGS4(
PUTC('\n');
request_buffer_length = MAX_MESSAGE_LEN; /* Amount left */
- CTRACE(tfp, "HTWAIS: Search for `%s' in `%s'\n",
- keywords, wais_database);
+ CTRACE((tfp, "HTWAIS: Search for `%s' in `%s'\n",
+ keywords, wais_database));
if(NULL ==
generate_search_apdu(request_message + HEADER_LENGTH,
&request_buffer_length,
@@ -909,8 +904,8 @@ PUBLIC int HTLoadWAIS ARGS4(
any doc_chunk;
any * docid = &doc_chunk;
- CTRACE(tfp, "HTWAIS: Retrieve document id `%s' type `%s' length %ld\n",
- docname, doctype, document_length);
+ CTRACE((tfp, "HTWAIS: Retrieve document id `%s' type `%s' length %ld\n",
+ docname, doctype, document_length));
format_in =
!strcmp(doctype, "WSRC") ? HTAtom_for("application/x-wais-source") :
@@ -946,7 +941,7 @@ PUBLIC int HTLoadWAIS ARGS4(
char *type = s_strdup(doctype); /* Gets freed I guess */
#endif /* VMS */
request_buffer_length = MAX_MESSAGE_LEN; /* Amount left */
- CTRACE(tfp, "HTWAIS: Slice number %ld\n", count);
+ CTRACE((tfp, "HTWAIS: Slice number %ld\n", count));
if (HTCheckForInterrupt()) {
HTAlert (TRANSFER_INTERRUPTED);
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTWSRC.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTWSRC.c
index 3388b100cf2..9d69669b7d5 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTWSRC.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTWSRC.c
@@ -22,8 +22,6 @@
#define PARAM_MAX BIG
#define CACHE_PERIOD (7*86400) /* Time to keep .src file in seconds */
-#define HEX_ESCAPE '%'
-
struct _HTStructured {
CONST HTStructuredClass * isa;
/* ... */
@@ -110,10 +108,10 @@ PUBLIC CONST char * hex = "0123456789ABCDEF";
PUBLIC char from_hex ARGS1(char, c)
{
- return (c>='0')&&(c<='9') ? c-'0'
+ return (char) ( (c>='0')&&(c<='9') ? c-'0'
: (c>='A')&&(c<='F') ? c-'A'+10
: (c>='a')&&(c<='f') ? c-'a'+10
- : 0;
+ : 0);
}
@@ -159,8 +157,8 @@ PRIVATE void WSRCParser_put_character ARGS2(HTStream*, me, char, c)
}
}
if (!par_name[me->param_number]) { /* Unknown field */
- CTRACE(tfp, "HTWSRC: Unknown field `%s' in source file\n",
- me->param);
+ CTRACE((tfp, "HTWSRC: Unknown field `%s' in source file\n",
+ me->param));
me->param_number = PAR_UNKNOWN;
me->state = before_value; /* Could be better ignore */
return;
@@ -244,28 +242,32 @@ PRIVATE void WSRCParser_put_character ARGS2(HTStream*, me, char, c)
PRIVATE BOOL write_cache ARGS1(HTStream *, me)
{
FILE * fp;
- char cache_file_name[256];
+ char * cache_file_name = NULL;
char * www_database;
+ int result = NO;
+
if (!me->par_value[PAR_DATABASE_NAME]
|| !me->par_value[PAR_IP_NAME]
) return NO;
www_database = HTEscape(me->par_value[PAR_DATABASE_NAME], URL_XALPHAS);
- sprintf(cache_file_name, "%sWSRC-%s:%s:%.100s.txt",
+ HTSprintf0(&cache_file_name, "%sWSRC-%s:%s:%.100s.txt",
CACHE_FILE_PREFIX,
me->par_value[PAR_IP_NAME],
me->par_value[PAR_TCP_PORT] ? me->par_value[PAR_TCP_PORT] : "210",
www_database);
+
+ if ((fp = fopen(cache_file_name, TXT_W)) != 0) {
+ result = YES;
+ if (me->par_value[PAR_DESCRIPTION])
+ fputs(me->par_value[PAR_DESCRIPTION], fp);
+ else
+ fputs("Description not available\n", fp);
+ fclose(fp);
+ }
FREE(www_database);
- fp = fopen(cache_file_name, "w");
- if (!fp) return NO;
-
- if (me->par_value[PAR_DESCRIPTION])
- fputs(me->par_value[PAR_DESCRIPTION], fp);
- else
- fputs("Description not available\n", fp);
- fclose(fp);
- return YES;
+ FREE(cache_file_name);
+ return result;
}
#endif
@@ -329,11 +331,11 @@ PRIVATE void WSRC_gen_html ARGS2(HTStream *, me, BOOL, source_file)
if (me->par_value[PAR_IP_NAME] &&
me->par_value[PAR_DATABASE_NAME]) {
- char WSRC_address[256];
+ char * WSRC_address = NULL;
char * www_database;
www_database = HTEscape(me->par_value[PAR_DATABASE_NAME],
URL_XALPHAS);
- sprintf(WSRC_address, "wais://%s%s%s/%s",
+ HTSprintf0(&WSRC_address, "wais://%s%s%s/%s",
me->par_value[PAR_IP_NAME],
me->par_value[PAR_TCP_PORT] ? ":" : "",
me->par_value[PAR_TCP_PORT] ? me->par_value[PAR_TCP_PORT] :"",
@@ -346,6 +348,7 @@ PRIVATE void WSRC_gen_html ARGS2(HTStream *, me, BOOL, source_file)
PUTS(gettext(" (or via proxy server, if defined)"));
FREE(www_database);
+ FREE(WSRC_address);
} else {
give_parameter(me, PAR_IP_NAME);
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HText.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HText.h
index 7258a34331d..b1a11ba4d1f 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HText.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HText.h
@@ -83,7 +83,7 @@ extern void HText_setStyle PARAMS((HText * text, HTStyle * style));
ADD ONE CHARACTER
*/
-extern void HText_appendCharacter PARAMS((HText * text, char ch));
+extern void HText_appendCharacter PARAMS((HText * text, int ch));
/*
@@ -126,7 +126,7 @@ extern int HText_beginAnchor PARAMS((
BOOL underline,
HTChildAnchor * anc));
extern void HText_endAnchor PARAMS((HText * text, int number));
-
+extern BOOL HText_isAnchorBlank PARAMS((HText * text, int number));
/*
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTioctl.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTioctl.h
new file mode 100644
index 00000000000..95e914e60ac
--- /dev/null
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTioctl.h
@@ -0,0 +1,11 @@
+/*
+** A routine to mimic the ioctl function for UCX.
+** Bjorn S. Nilsson, 25-Nov-1993. Based on an example in the UCX manual.
+*/
+#include <iodef.h>
+#define IOC_OUT (int)0x40000000
+extern int vaxc$get_sdc(), sys$qiow();
+
+#ifndef UCX$C_IOCTL
+#define UCX$C_IOCTL TCPIP$C_IOCTL
+#endif
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/LYLeaks.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/LYLeaks.h
index 5ecf8e67d2b..fe995fb669c 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/LYLeaks.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/LYLeaks.h
@@ -32,12 +32,23 @@
** string created by __FILE__ to not be dynamic in
** nature (don't free it and assume will exist at all
** times during execution).
+** If you are using LY_FIND_LEAKS and LY_FIND_LEAKS_EXTENDED and
+** want only normal memory tracking (not extended for
+** HTSprintf/HTSprintf0) to be used in a certain file,
+** define NO_EXTENDED_MEMORY_TRACKING and don't define
+** NO_MEMORY_TRACKING before including this file.
** Revision History:
** 05-26-94 created for Lynx 2-3-1, Garrett Arch Blythe
** 10-30-97 modified to handle StrAllocCopy() and
** StrAllocCat(). - KW & FM
+** 1999-10-17 modified to handle HTSprintf0 and HTSprintf(),
+** and to provide mark_malloced, if
+** LY_FIND_LEAKS_EXTENDED is defined. - kw
*/
+/* Undefine this to get no improved HTSprintf0/HTSprintf tracking: */
+#define LY_FIND_LEAKS_EXTENDED
+
/*
** Required includes
*/
@@ -146,13 +157,42 @@ typedef struct AllocationList_tag {
#endif /* StrAllocCat */
#define StrAllocCat(dest, src) LYLeakSACat(&(dest), src, __FILE__, __LINE__)
+#define mark_malloced(a,size) LYLeak_mark_malloced(a,size, __FILE__, __LINE__)
+
+#if defined(LY_FIND_LEAKS_EXTENDED) && !defined(NO_EXTENDED_MEMORY_TRACKING)
+#ifdef HTSprintf0
+#undef HTSprintf0
+#endif /* HTSprintf0 */
+#define HTSprintf0 (Get_htsprintf0_fn(__FILE__,__LINE__))
+#ifdef HTSprintf
+#undef HTSprintf
+#endif /* HTSprintf */
+#define HTSprintf (Get_htsprintf_fn(__FILE__,__LINE__))
+#endif /* LY_FIND_LEAKS_EXTENDED and not NO_EXTENDED_MEMORY_TRACKING */
+
+#else /* LY_FIND_LEAKS && !NO_MEMORY_TRACKING */
+
+#define mark_malloced(a,size) /* no-op */
+
#endif /* LY_FIND_LEAKS && !NO_MEMORY_TRACKING */
+#if defined(LY_FIND_LEAKS)
+#define PUBLIC_IF_FIND_LEAKS PUBLIC
+#else
+#define PUBLIC_IF_FIND_LEAKS PRIVATE
+#endif
/*
** Function declarations
** See the appropriate source file for usage.
*/
extern void LYLeaks NOPARAMS;
+#ifdef LY_FIND_LEAKS_EXTENDED
+extern AllocationList *LYLeak_mark_malloced PARAMS((
+ void * vp_alloced,
+ size_t st_bytes,
+ CONST char * cp_File,
+ CONST short ssi_Line));
+#endif /* LY_FIND_LEAKS_EXTENDED */
extern void *LYLeakMalloc PARAMS((
size_t st_bytes,
CONST char * cp_File,
@@ -182,4 +222,17 @@ extern char * LYLeakSACat PARAMS((
CONST char * cp_File,
CONST short ssi_Line));
+#ifdef LY_FIND_LEAKS_EXTENDED
+/* Trick to get tracking of var arg functions without relying
+ on var arg preprocessor macros: */
+
+typedef char * HTSprintflike PARAMS((char **, CONST char *, ...));
+extern HTSprintflike *Get_htsprintf_fn PARAMS((
+ CONST char * cp_File,
+ CONST short ssi_Line));
+extern HTSprintflike *Get_htsprintf0_fn PARAMS((
+ CONST char * cp_File,
+ CONST short ssi_Line));
+#endif /* LY_FIND_LEAKS_EXTENDED */
+
#endif /* __LYLEAKS_H */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/LYexit.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/LYexit.h
index 235b3e0b146..347ee0d364b 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/LYexit.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/LYexit.h
@@ -51,12 +51,8 @@
/*
* Function declarations
*/
-extern void exit_immediately PARAMS((int status)); /* in LYMain.c */
-extern void LYexit PARAMS((int status));
-#ifdef __STDC__
-extern int LYatexit(void (*function)(void));
-#else
-extern int LYatexit();
-#endif /* __STDC__ */
+extern void exit_immediately PARAMS((int status)) GCC_NORETURN;
+extern void LYexit PARAMS((int status)) GCC_NORETURN;
+extern int LYatexit PARAMS((void (*function)(void)));
#endif /* __LYEXIT_H */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/SGML.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/SGML.c
index 7d436284bef..6497f8ea1d2 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/SGML.c
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/SGML.c
@@ -35,13 +35,13 @@
#ifdef USE_COLOR_STYLE
# include <LYStyle.h>
#endif
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
# include <LYPrettySrc.h>
#endif
#define INVALID (-1)
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
# define PSRC(x) if (psrc_view) { x };
# define NPSRC(x) if (!psrc_view) { x };
@@ -76,7 +76,7 @@ PRIVATE void fake_put_character ARGS2(
if (ch->size >= ch->allocated) {\
ch->allocated = ch->allocated + ch->growby;\
ch->data = ch->data ? (char *)realloc(ch->data, ch->allocated)\
- : (char *)calloc(1, ch->allocated);\
+ : typecallocn(char, ch->allocated);\
if (!ch->data)\
outofmem(__FILE__, "HTChunkPutc");\
}\
@@ -86,9 +86,8 @@ PRIVATE void fake_put_character ARGS2(
#define PUTS(str) ((*context->actions->put_string)(context->target, str))
-#define OPT 0 /* don't make it 1 otherwise something wrong will be with
- TagSoup parser mode - I was unable to undestand why it works incorrectly -HV*/
-#define OPT1 1 /* set to 1 for several optimizations */
+#define OPT 1
+
/*the following macros are used for pretty source view. */
#define IS_C(attr) (attr.type == HTMLA_CLASS)
@@ -121,6 +120,51 @@ struct _HTElement {
HTTag* tag; /* The tag at this level */
};
+typedef enum {
+ S_text = 0
+ ,S_attr
+ ,S_attr_gap
+ ,S_comment
+ ,S_cro
+ ,S_doctype
+ ,S_dollar
+ ,S_dollar_dq
+ ,S_dollar_paren
+ ,S_dollar_paren_dq
+ ,S_dollar_paren_sq
+ ,S_dollar_sq
+ ,S_dquoted
+ ,S_end
+ ,S_entity
+ ,S_equals
+ ,S_ero
+ ,S_esc
+ ,S_esc_dq
+ ,S_esc_sq
+ ,S_exclamation
+ ,S_in_kanji
+ ,S_incro
+ ,S_junk_pi
+ ,S_junk_tag
+ ,S_litteral
+ ,S_marked
+ ,S_nonascii_text
+ ,S_nonascii_text_dq
+ ,S_nonascii_text_sq
+ ,S_paren
+ ,S_paren_dq
+ ,S_paren_sq
+ ,S_pcdata
+ ,S_script
+ ,S_sgmlatt
+ ,S_sgmlele
+ ,S_sgmlent
+ ,S_squoted
+ ,S_tag
+ ,S_tag_gap
+ ,S_tagname_slash
+ ,S_value
+} sgml_state;
/* Internal Context Data Structure
** -------------------------------
@@ -134,24 +178,15 @@ struct _HTStream {
HTStructured *target; /* target object */
HTTag *current_tag;
+ HTTag *slashedtag;
CONST HTTag *unknown_tag;
BOOL inSELECT;
+ BOOL no_lynx_specialcodes;
int current_attribute_number;
HTChunk *string;
HTElement *element_stack;
- enum sgml_state { S_text, S_litteral,
- S_tag, S_tag_gap, S_attr, S_attr_gap, S_equals, S_value,
- S_ero, S_cro, S_incro,
- S_exclamation, S_comment, S_doctype, S_marked,
- S_sgmlent, S_sgmlele, S_sgmlatt,
- S_squoted, S_dquoted, S_end, S_entity,
- S_esc, S_dollar, S_paren, S_nonascii_text,
- S_dollar_paren,
- S_esc_sq, S_dollar_sq, S_paren_sq, S_nonascii_text_sq,
- S_dollar_paren_sq,
- S_esc_dq, S_dollar_dq, S_paren_dq, S_nonascii_text_dq,
- S_dollar_paren_dq,
- S_in_kanji, S_junk_tag} state;
+ sgml_state state;
+ unsigned char kanji_buf;
#ifdef CALLERDATA
void * callerData;
#endif /* CALLERDATA */
@@ -181,21 +216,79 @@ struct _HTStream {
char * recover;
int recover_index;
char * include;
+ char * active_include;
int include_index;
char * url;
char * csi;
int csi_index;
-} ;
+#ifdef USE_PRETTYSRC
+ BOOL cur_attr_is_href;
+ BOOL cur_attr_is_name;
+ BOOL seen_nonwhite_in_junk_tag;
+#endif
+};
+
+#ifndef NO_LYNX_TRACE
+PRIVATE char *state_name ARGS1(sgml_state, n)
+{
+ char *result = "?";
+ switch (n) {
+ case S_attr: result = "S_attr"; break;
+ case S_attr_gap: result = "S_attr_gap"; break;
+ case S_comment: result = "S_comment"; break;
+ case S_cro: result = "S_cro"; break;
+ case S_doctype: result = "S_doctype"; break;
+ case S_dollar: result = "S_dollar"; break;
+ case S_dollar_dq: result = "S_dollar_dq"; break;
+ case S_dollar_paren: result = "S_dollar_paren"; break;
+ case S_dollar_paren_dq: result = "S_dollar_paren_dq"; break;
+ case S_dollar_paren_sq: result = "S_dollar_paren_sq"; break;
+ case S_dollar_sq: result = "S_dollar_sq"; break;
+ case S_dquoted: result = "S_dquoted"; break;
+ case S_end: result = "S_end"; break;
+ case S_entity: result = "S_entity"; break;
+ case S_equals: result = "S_equals"; break;
+ case S_ero: result = "S_ero"; break;
+ case S_esc: result = "S_esc"; break;
+ case S_esc_dq: result = "S_esc_dq"; break;
+ case S_esc_sq: result = "S_esc_sq"; break;
+ case S_exclamation: result = "S_exclamation"; break;
+ case S_in_kanji: result = "S_in_kanji"; break;
+ case S_incro: result = "S_incro"; break;
+ case S_junk_pi: result = "S_junk_pi"; break;
+ case S_junk_tag: result = "S_junk_tag"; break;
+ case S_litteral: result = "S_litteral"; break;
+ case S_marked: result = "S_marked"; break;
+ case S_nonascii_text: result = "S_nonascii_text"; break;
+ case S_nonascii_text_dq: result = "S_nonascii_text_dq"; break;
+ case S_nonascii_text_sq: result = "S_nonascii_text_sq"; break;
+ case S_paren: result = "S_paren"; break;
+ case S_paren_dq: result = "S_paren_dq"; break;
+ case S_paren_sq: result = "S_paren_sq"; break;
+ case S_pcdata: result = "S_pcdata"; break;
+ case S_script: result = "S_script"; break;
+ case S_sgmlatt: result = "S_sgmlatt"; break;
+ case S_sgmlele: result = "S_sgmlele"; break;
+ case S_sgmlent: result = "S_sgmlent"; break;
+ case S_squoted: result = "S_squoted"; break;
+ case S_tag: result = "S_tag"; break;
+ case S_tag_gap: result = "S_tag_gap"; break;
+ case S_tagname_slash: result = "S_tagname_slash"; break;
+ case S_text: result = "S_text"; break;
+ case S_value: result = "S_value"; break;
+ }
+ return result;
+}
+#endif
-#ifdef USE_PSRC
-static BOOL seen_letter_in_junk_tag;
+#ifdef USE_PRETTYSRC
PRIVATE void HTMLSRC_apply_markup ARGS3(
HTStream *, context,
- HTlexem, lexem,
+ HTlexeme, lexeme,
BOOL, start)
{
- HT_tagspec* ts = *( ( start ? lexem_start : lexem_end ) + lexem);
+ HT_tagspec* ts = *( ( start ? lexeme_start : lexeme_end ) + lexeme);
while (ts) {
#ifdef USE_COLOR_STYLE
@@ -206,7 +299,7 @@ PRIVATE void HTMLSRC_apply_markup ARGS3(
force_classname = TRUE;
}
#endif
- CTRACE(tfp,ts->start ? "SRCSTART %d\n" : "SRCSTOP %d\n",(int)lexem);
+ CTRACE((tfp,ts->start ? "SRCSTART %d\n" : "SRCSTOP %d\n",(int)lexeme));
if (ts->start)
(*context->actions->start_element)(
context->target,
@@ -224,11 +317,16 @@ PRIVATE void HTMLSRC_apply_markup ARGS3(
}
}
+#if ANSI_PREPRO
# define PSRCSTART(x) HTMLSRC_apply_markup(context,HTL_##x,START)
# define PSRCSTOP(x) HTMLSRC_apply_markup(context,HTL_##x,STOP)
+#else
+# define PSRCSTART(x) HTMLSRC_apply_markup(context,HTL_/**/x,START)
+# define PSRCSTOP(x) HTMLSRC_apply_markup(context,HTL_/**/x,STOP)
+#endif
-PRIVATE BOOL cur_attr_is_href;
-PRIVATE BOOL cur_attr_is_name;
+#define attr_is_href context->cur_attr_is_href
+#define attr_is_name context->cur_attr_is_name
#endif
PRIVATE void set_chartrans_handling ARGS3(
@@ -239,7 +337,7 @@ PRIVATE void set_chartrans_handling ARGS3(
if (chndl < 0) {
/*
** Nothing was set for the parser in earlier stages,
- ** so the HTML parser's UCLYhndl should still be it's
+ ** so the HTML parser's UCLYhndl should still be its
** default. - FM
*/
chndl = HTAnchor_getUCLYhndl(anchor, UCT_STAGE_STRUCTURED);
@@ -360,17 +458,17 @@ PRIVATE void handle_attribute_name ARGS2(
attr * attributes = tag->attributes;
int high, low, i, diff;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
- cur_attr_is_href = FALSE;
- cur_attr_is_name = FALSE;
+ attr_is_href = FALSE;
+ attr_is_name = FALSE;
}
#endif
/*
** Ignore unknown tag. - KW
*/
if (tag == context->unknown_tag) {
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
context->current_attribute_number = 1; /* anything !=INVALID */
#endif
@@ -387,28 +485,24 @@ PRIVATE void handle_attribute_name ARGS2(
diff = strcasecomp(attributes[i].name, s);
if (diff == 0) { /* success: found it */
context->current_attribute_number = i;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (!psrc_view) {
#endif
context->present[i] = YES;
FREE(context->value[i]);
#ifdef USE_COLOR_STYLE
-# ifdef USE_PSRC
-# if !OPT1
- current_is_class = (!strcasecomp("class", s));
-# else
+# ifdef USE_PRETTYSRC
current_is_class = IS_C(attributes[i]);
-# endif
# else
current_is_class = (!strcasecomp("class", s));
# endif
- CTRACE(tfp, "SGML: found attribute %s, %d\n", s, current_is_class);
+ CTRACE((tfp, "SGML: found attribute %s, %d\n", s, current_is_class));
#endif
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
} else {
- cur_attr_is_name = (attributes[i].type == HTMLA_ANAME);
- cur_attr_is_href = (attributes[i].type == HTMLA_HREF);
+ attr_is_name = (BOOL) (attributes[i].type == HTMLA_ANAME);
+ attr_is_href = (BOOL) (attributes[i].type == HTMLA_HREF);
}
#endif
return;
@@ -416,8 +510,8 @@ PRIVATE void handle_attribute_name ARGS2(
} /* for */
- CTRACE(tfp, "SGML: Unknown attribute %s for tag %s\n",
- s, context->current_tag->name);
+ CTRACE((tfp, "SGML: Unknown attribute %s for tag %s\n",
+ s, context->current_tag->name));
context->current_attribute_number = INVALID; /* Invalid */
}
@@ -435,15 +529,15 @@ PRIVATE void handle_attribute_value ARGS2(
if (current_is_class)
{
strncpy (class_string, s, TEMPSTRINGSIZE);
- CTRACE(tfp, "SGML: class is '%s'\n", s);
+ CTRACE((tfp, "SGML: class is '%s'\n", s));
}
else
{
- CTRACE(tfp, "SGML: attribute value is '%s'\n", s);
+ CTRACE((tfp, "SGML: attribute value is '%s'\n", s));
}
#endif
} else {
- CTRACE(tfp, "SGML: Attribute value %s ***ignored\n", s);
+ CTRACE((tfp, "SGML: Attribute value %s ***ignored\n", s));
}
context->current_attribute_number = INVALID; /* can't have two assignments! */
}
@@ -463,11 +557,19 @@ PRIVATE BOOL put_special_unicodes ARGS2(
HTStream *, context,
UCode_t, code)
{
+ /* (Tgf_nolyspcl) */
+ if (context->no_lynx_specialcodes) {
+ /*
+ ** We were asked by a "DTD" flag to not generate lynx specials. - kw
+ */
+ return NO;
+ }
+
if (code == CH_NBSP) { /* S/390 -- gil -- 0657 */
/*
** Use Lynx special character for nbsp.
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (!psrc_view)
#endif
PUTC(HT_NON_BREAK_SPACE);
@@ -475,7 +577,7 @@ PRIVATE BOOL put_special_unicodes ARGS2(
/*
** Use Lynx special character for shy.
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (!psrc_view)
#endif
PUTC(LY_SOFT_HYPHEN);
@@ -490,9 +592,10 @@ PRIVATE BOOL put_special_unicodes ARGS2(
** in the context of line wrapping. Unfortunately, if we use
** HT_EN_SPACE we override the chartrans tables for those spaces
** with a single '32' for all (but do line wrapping more fancy).
- ** Assume emsp as two ensp (below).
+ **
+ ** We may treat emsp as one or two ensp (below).
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (!psrc_view)
#endif
PUTC(HT_EN_SPACE);
@@ -500,12 +603,12 @@ PRIVATE BOOL put_special_unicodes ARGS2(
/*
** Use Lynx special character for emsp.
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (!psrc_view) {
#endif
/* PUTC(HT_EN_SPACE); let's stay with a single space :) */
PUTC(HT_EN_SPACE);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
}
#endif
} else {
@@ -557,7 +660,7 @@ PRIVATE void handle_entity ARGS2(
** Check for special Unicodes. - FM
*/
if (put_special_unicodes(context, code)) {
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
HTMLSRC_apply_markup(context,HTL_entity,START);
PUTC('&');
@@ -578,7 +681,7 @@ PRIVATE void handle_entity ARGS2(
uck < 256 &&
(uck < 127 ||
uck >= LYlowest_eightbit[context->outUCLYhndl])) {
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
HTMLSRC_apply_markup(context,HTL_entity,START);
PUTC('&'); PUTS(entity_string); if (term) PUTC(term);
@@ -596,7 +699,7 @@ PRIVATE void handle_entity ARGS2(
*/
(uck = UCTransUniCharStr(replace_buf, 60, code,
context->outUCLYhndl, 0) >= 0)) {
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
HTMLSRC_apply_markup(context,HTL_entity,START);
PUTC('&');
@@ -614,7 +717,7 @@ PRIVATE void handle_entity ARGS2(
/*
** If we're displaying UTF-8, try that now. - FM
*/
-#ifndef USE_PSRC
+#ifndef USE_PRETTYSRC
if (context->T.output_utf8 && PUTUTF8(code)) {
FoundEntity = TRUE;
return;
@@ -622,7 +725,7 @@ PRIVATE void handle_entity ARGS2(
#else
if (context->T.output_utf8 && (psrc_view ?
(UCPutUtf8_charstring((HTStream *)context->target,
- (putc_func_t*)(&fake_put_character), code)): PUTUTF8(code) ) ) {
+ (putc_func_t*)(fake_put_character), code)): PUTUTF8(code) ) ) {
if (psrc_view) {
HTMLSRC_apply_markup(context,HTL_entity,START);
@@ -638,7 +741,7 @@ PRIVATE void handle_entity ARGS2(
** If it's safe ASCII, use it. - FM
*/
if (code >= 32 && code < 127) {
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
HTMLSRC_apply_markup(context,HTL_entity,START);
PUTC('&');
@@ -661,8 +764,8 @@ PRIVATE void handle_entity ARGS2(
*/
if (!strcmp(s, "zwnj") ||
!strcmp(s, "zwj")) {
- CTRACE(tfp, "handle_entity: Ignoring '%s'.\n", s);
-#ifdef USE_PSRC
+ CTRACE((tfp, "handle_entity: Ignoring '%s'.\n", s));
+#ifdef USE_PRETTYSRC
if (psrc_view) {
HTMLSRC_apply_markup(context,HTL_entity,START);
PUTC('&');
@@ -680,8 +783,8 @@ PRIVATE void handle_entity ARGS2(
*/
if (!strcmp(s, "lrm") ||
!strcmp(s, "rlm")) {
- CTRACE(tfp, "handle_entity: Ignoring '%s'.\n", s);
-#ifdef USE_PSRC
+ CTRACE((tfp, "handle_entity: Ignoring '%s'.\n", s));
+#ifdef USE_PRETTYSRC
if (psrc_view) {
HTMLSRC_apply_markup(context,HTL_entity,START);
PUTC('&');
@@ -699,18 +802,18 @@ PRIVATE void handle_entity ARGS2(
/*
** If entity string not found, display as text.
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTART(badseq);
#endif
- CTRACE(tfp, "SGML: Unknown entity '%s' %ld %ld\n", s, (long)code, uck); /* S/390 -- gil -- 0695 */
+ CTRACE((tfp, "SGML: Unknown entity '%s' %ld %ld\n", s, (long)code, uck)); /* S/390 -- gil -- 0695 */
PUTC('&');
for (p = s; *p; p++) {
PUTC(*p);
}
if (term != '\0')
PUTC(term);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTOP(badseq);
#endif
@@ -725,7 +828,7 @@ PRIVATE void handle_comment ARGS1(
{
CONST char *s = context->string->data;
- CTRACE(tfp, "SGML Comment:\n<%s>\n", s);
+ CTRACE((tfp, "SGML Comment:\n<%s>\n", s));
if (context->csi == NULL &&
strncmp(s, "!--#", 4) == 0 &&
@@ -747,7 +850,7 @@ PRIVATE void handle_identifier ARGS1(
{
CONST char *s = context->string->data;
- CTRACE(tfp, "SGML Identifier:\n<%s>\n", s);
+ CTRACE((tfp, "SGML Identifier:\n<%s>\n", s));
return;
}
@@ -761,11 +864,15 @@ PRIVATE void handle_doctype ARGS1(
{
CONST char *s = context->string->data;
- CTRACE(tfp, "SGML Doctype:\n<%s>\n", s);
+ CTRACE((tfp, "SGML Doctype:\n<%s>\n", s));
return;
}
+PRIVATE void SGML_write PARAMS((
+ HTStream * me,
+ CONST char * s,
+ int l));
/* Handle marked
** -------------
@@ -775,8 +882,21 @@ PRIVATE void handle_marked ARGS1(
{
CONST char *s = context->string->data;
- CTRACE(tfp, "SGML Marked Section:\n<%s>\n", s);
+ CTRACE((tfp, "SGML Marked Section:\n<%s>\n", s));
+ if (!strncmp(context->string->data, "![INCLUDE[", 10)) {
+ context->string->data[context->string->size - 3] = '\0';
+ StrAllocCat(context->include, context->string->data + 10);
+ /* @@@ This needs to take charset into account! @@@
+ the wrong assumptions will be made about the data's
+ charset once it is in include - kw */
+
+ } else if (!strncmp(context->string->data, "![CDATA[", 8)) {
+ (*context->actions->_write)(context->target,
+ context->string->data + 8,
+ context->string->size - 11);
+
+ }
return;
}
@@ -789,7 +909,7 @@ PRIVATE void handle_sgmlent ARGS1(
{
CONST char *s = context->string->data;
- CTRACE(tfp, "SGML Entity Declaration:\n<%s>\n", s);
+ CTRACE((tfp, "SGML Entity Declaration:\n<%s>\n", s));
return;
}
@@ -803,7 +923,7 @@ PRIVATE void handle_sgmlele ARGS1(
{
CONST char *s = context->string->data;
- CTRACE(tfp, "SGML Element Declaration:\n<%s>\n", s);
+ CTRACE((tfp, "SGML Element Declaration:\n<%s>\n", s));
return;
}
@@ -817,11 +937,41 @@ PRIVATE void handle_sgmlatt ARGS1(
{
CONST char *s = context->string->data;
- CTRACE(tfp, "SGML Attribute Declaration:\n<%s>\n", s);
+ CTRACE((tfp, "SGML Attribute Declaration:\n<%s>\n", s));
return;
}
+/*
+ * Convenience macros - tags (elements) are identified sometimes
+ * by an int or enum value ('TAGNUM'), sometimes
+ * by a pointer to HTTag ('TAGP'). - kw
+ */
+#define TAGNUM_OF_TAGP(t) (t - context->dtd->tags)
+#define TAGP_OF_TAGNUM(e) (context->dtd->tags + e)
+
+/*
+ * The following implement special knowledge about OBJECT.
+ * As long as HTML_OBJECT is the only tag for which an alternative
+ * variant exist, they can be simple macros. - kw
+ */
+/* does 'TAGNUM' e have an alternative (variant) parsing mode? */
+#define HAS_ALT_TAGNUM(e) (e == HTML_OBJECT)
+
+/* return 'TAGNUM' of the alternative mode for 'TAGNUM' e, if any. */
+#define ALT_TAGNUM(e) ((e == HTML_OBJECT) ? HTML_ALT_OBJECT : e)
+
+/* return 'TAGNUM' of the normal mode for 'TAGNUM' e which may be alt. */
+#define NORMAL_TAGNUM(e) ((e >= HTML_ELEMENTS) ? HTML_OBJECT : e)
+
+/* More convenience stuff. - kw */
+#define ALT_TAGP_OF_TAGNUM(e) TAGP_OF_TAGNUM(ALT_TAGNUM(e))
+#define NORMAL_TAGP_OF_TAGNUM(e) TAGP_OF_TAGNUM(NORMAL_TAGNUM(e))
+
+#define ALT_TAGP(t) ALT_TAGP_OF_TAGNUM(TAGNUM_OF_TAGP(t))
+#define NORMAL_TAGP(t) NORMAL_TAGP_OF_TAGNUM(TAGNUM_OF_TAGP(t))
+
+
#ifdef EXTENDED_HTMLDTD
PRIVATE BOOL element_valid_within ARGS3(
@@ -835,10 +985,10 @@ PRIVATE BOOL element_valid_within ARGS3(
usecontains = (direct ? stacked_tag->contains : stacked_tag->icontains);
usecontained = (direct ? new_tag->contained : new_tag->icontained);
if (new_tag == stacked_tag)
- return ((Tgc_same & usecontains) &&
+ return (BOOL) ((Tgc_same & usecontains) &&
(Tgc_same & usecontained));
else
- return ((new_tag->tagclass & usecontains) &&
+ return (BOOL) ((new_tag->tagclass & usecontains) &&
(stacked_tag->tagclass & usecontained));
}
@@ -869,17 +1019,24 @@ PRIVATE void do_close_stacked ARGS1(
HTStream *, context)
{
HTElement * stacked = context->element_stack;
+ HTMLElement e;
if (!stacked)
return; /* stack was empty */
if (context->inSELECT && !strcasecomp(stacked->tag->name, "SELECT")) {
context->inSELECT = FALSE;
}
+ e = NORMAL_TAGNUM(TAGNUM_OF_TAGP(stacked->tag));
+#ifdef USE_PRETTYSRC
+ if (!psrc_view) /* Don't actually pass call on if viewing psrc - kw */
+#endif
(*context->actions->end_element)(
context->target,
- stacked->tag - context->dtd->tags,
+ e,
(char **)&context->include);
context->element_stack = stacked->next;
FREE(stacked);
+ context->no_lynx_specialcodes = context->element_stack ?
+ (context->element_stack->tag->flags & Tgf_nolyspcl) : NO;
}
PRIVATE int is_on_stack ARGS2(
@@ -889,7 +1046,8 @@ PRIVATE int is_on_stack ARGS2(
HTElement * stacked = context->element_stack;
int i = 1;
for (; stacked; stacked = stacked->next, i++) {
- if (stacked->tag == old_tag)
+ if (stacked->tag == old_tag ||
+ stacked->tag == ALT_TAGP(old_tag))
return i;
}
return 0;
@@ -913,36 +1071,36 @@ PRIVATE void end_element ARGS2(
while (canclose_check != close_NO &&
context->element_stack &&
(stackpos > 1 || (!extra_action_taken && stackpos == 0))) {
+ if (stackpos == 0 && (old_tag->flags & Tgf_startO) &&
+ element_valid_within(old_tag, context->element_stack->tag, YES)) {
+ CTRACE((tfp, "SGML: </%s> ignored\n", old_tag->name));
+ return;
+ }
canclose_check = can_close(old_tag, context->element_stack->tag);
if (canclose_check != close_NO) {
- CTRACE(tfp, "SGML: End </%s> \t<- %s end </%s>\n",
+ CTRACE((tfp, "SGML: End </%s> \t<- %s end </%s>\n",
context->element_stack->tag->name,
canclose_check == close_valid ? "supplied," : "***forced by",
- old_tag->name);
+ old_tag->name));
do_close_stacked(context);
extra_action_taken = YES;
stackpos = is_on_stack(context, old_tag);
- } else {
- CTRACE(tfp, "SGML: Still open %s \t<- ***invalid end </%s>\n",
- context->element_stack->tag->name,
- old_tag->name);
- return;
}
}
if (stackpos == 0 && old_tag->contents != SGML_EMPTY) {
- CTRACE(tfp, "SGML: Still open %s, ***no open %s for </%s>\n",
+ CTRACE((tfp, "SGML: Still open %s, ***no open %s for </%s>\n",
context->element_stack ?
context->element_stack->tag->name : "none",
old_tag->name,
- old_tag->name);
+ old_tag->name));
return;
}
if (stackpos > 1) {
- CTRACE(tfp, "SGML: Nesting <%s>...<%s> \t<- ***invalid end </%s>\n",
+ CTRACE((tfp, "SGML: Nesting <%s>...<%s> \t<- ***invalid end </%s>\n",
old_tag->name,
context->element_stack->tag->name,
- old_tag->name);
+ old_tag->name));
return;
}
}
@@ -964,18 +1122,18 @@ PRIVATE void end_element ARGS2(
/*
** Ignore the end tag. - FM
*/
- CTRACE(tfp, "SGML: ***Ignoring end tag </%s> in SELECT block.\n",
- old_tag->name);
+ CTRACE((tfp, "SGML: ***Ignoring end tag </%s> in SELECT block.\n",
+ old_tag->name));
return;
}
}
/*
** Handle the end tag. - FM
*/
- CTRACE(tfp, "SGML: End </%s>\n", old_tag->name);
+ CTRACE((tfp, "SGML: End </%s>\n", old_tag->name));
if (old_tag->contents == SGML_EMPTY) {
- CTRACE(tfp, "SGML: ***Illegal end tag </%s> found.\n",
- old_tag->name);
+ CTRACE((tfp, "SGML: ***Illegal end tag </%s> found.\n",
+ old_tag->name));
return;
}
#ifdef WIND_DOWN_STACK
@@ -984,24 +1142,47 @@ PRIVATE void end_element ARGS2(
if (context->element_stack) /* Substitute and remove one stack element */
#endif /* WIND_DOWN_STACK */
{
+ int status = HT_OK;
+ HTMLElement e;
HTElement * N = context->element_stack;
- HTTag * t = N->tag;
+ HTTag * t = (N->tag != old_tag) ? NORMAL_TAGP(N->tag) : N->tag;
if (old_tag != t) { /* Mismatch: syntax error */
if (context->element_stack->next) { /* This is not the last level */
- CTRACE(tfp, "SGML: Found </%s> when expecting </%s>. </%s> ***assumed.\n",
- old_tag->name, t->name, t->name);
+ CTRACE((tfp, "SGML: Found </%s> when expecting </%s>. </%s> ***assumed.\n",
+ old_tag->name, t->name, t->name));
} else { /* last level */
- CTRACE(tfp, "SGML: Found </%s> when expecting </%s>. </%s> ***Ignored.\n",
- old_tag->name, t->name, old_tag->name);
+ CTRACE((tfp, "SGML: Found </%s> when expecting </%s>. </%s> ***Ignored.\n",
+ old_tag->name, t->name, old_tag->name));
return; /* Ignore */
}
}
- context->element_stack = N->next; /* Remove from stack */
- FREE(N);
- (*context->actions->end_element)(context->target,
- t - context->dtd->tags, (char **)&context->include);
+ e = NORMAL_TAGNUM(TAGNUM_OF_TAGP(t));
+ CTRACE2(TRACE_SGML, (tfp, "tagnum(%p) = %d\n", t, e));
+#ifdef USE_PRETTYSRC
+ if (!psrc_view) /* Don't actually pass call on if viewing psrc - kw */
+#endif
+ status = (*context->actions->end_element)(context->target,
+ e, (char **)&context->include);
+ if (status == HT_PARSER_REOPEN_ELT) {
+ CTRACE((tfp, "SGML: Restart <%s>\n", t->name));
+ (*context->actions->start_element)(
+ context->target,
+ e,
+ NULL,
+ NULL,
+ context->current_tag_charset,
+ (char **)&context->include);
+ } else if (status == HT_PARSER_OTHER_CONTENT) {
+ CTRACE((tfp, "SGML: Continue with other content model for <%s>\n", t->name));
+ context->element_stack->tag = ALT_TAGP_OF_TAGNUM(e);
+ } else {
+ context->element_stack = N->next; /* Remove from stack */
+ FREE(N);
+ }
+ context->no_lynx_specialcodes = context->element_stack ?
+ (context->element_stack->tag->flags & Tgf_nolyspcl) : NO;
#ifdef WIND_DOWN_STACK
if (old_tag == t)
return; /* Correct sequence */
@@ -1012,8 +1193,8 @@ PRIVATE void end_element ARGS2(
/* Syntax error path only */
}
- CTRACE(tfp, "SGML: Extra end tag </%s> found and ignored.\n",
- old_tag->name);
+ CTRACE((tfp, "SGML: Extra end tag </%s> found and ignored.\n",
+ old_tag->name));
}
@@ -1022,11 +1203,10 @@ PRIVATE void end_element ARGS2(
PRIVATE void start_element ARGS1(
HTStream *, context)
{
+ int status;
HTTag * new_tag = context->current_tag;
-#if OPT1
- HTMLElement e = new_tag - context->dtd->tags;
+ HTMLElement e = TAGNUM_OF_TAGP(new_tag);
BOOL ok = FALSE;
-#endif
#ifdef EXTENDED_HTMLDTD
@@ -1044,27 +1224,27 @@ PRIVATE void start_element ARGS1(
direct_container))) {
canclose_check = can_close(new_tag, context->element_stack->tag);
if (canclose_check != close_NO) {
- CTRACE(tfp, "SGML: End </%s> \t<- %s start <%s>\n",
+ CTRACE((tfp, "SGML: End </%s> \t<- %s start <%s>\n",
context->element_stack->tag->name,
canclose_check == close_valid ? "supplied," : "***forced by",
- new_tag->name);
+ new_tag->name));
do_close_stacked(context);
extra_action_taken = YES;
if (canclose_check == close_error)
direct_container = NO;
} else {
- CTRACE(tfp, "SGML: Still open %s \t<- ***invalid start <%s>\n",
+ CTRACE((tfp, "SGML: Still open %s \t<- ***invalid start <%s>\n",
context->element_stack->tag->name,
- new_tag->name);
+ new_tag->name));
}
}
if (context->element_stack && !valid &&
(context->element_stack->tag->flags & Tgf_strict) &&
!(valid = element_valid_within(new_tag, context->element_stack->tag,
direct_container))) {
- CTRACE(tfp, "SGML: Still open %s \t<- ***ignoring start <%s>\n",
+ CTRACE((tfp, "SGML: Still open %s \t<- ***ignoring start <%s>\n",
context->element_stack->tag->name,
- new_tag->name);
+ new_tag->name));
return;
}
@@ -1075,10 +1255,10 @@ PRIVATE void start_element ARGS1(
for (; i< new_tag->number_of_attributes && !has_attributes; i++)
has_attributes = context->present[i];
if (!has_attributes) {
- CTRACE(tfp, "SGML: Still open %s, ***converting invalid <%s> to </%s>\n",
+ CTRACE((tfp, "SGML: Still open %s, ***converting invalid <%s> to </%s>\n",
context->element_stack->tag->name,
new_tag->name,
- new_tag->name);
+ new_tag->name));
end_element(context, new_tag);
return;
}
@@ -1090,9 +1270,9 @@ PRIVATE void start_element ARGS1(
new_tag,
context->element_stack->tag,
direct_container))) {
- CTRACE(tfp, "SGML: Still open %s \t<- ***invalid start <%s>\n",
+ CTRACE((tfp, "SGML: Still open %s \t<- ***invalid start <%s>\n",
context->element_stack->tag->name,
- new_tag->name);
+ new_tag->name));
}
}
/* Fall through to the non-extended code - kw */
@@ -1124,16 +1304,6 @@ PRIVATE void start_element ARGS1(
/*
** Ugh, it is not an OPTION. - FM
*/
-#if !OPT1
- if (!strcasecomp(new_tag->name, "INPUT") ||
- !strcasecomp(new_tag->name, "TEXTAREA") ||
- !strcasecomp(new_tag->name, "SELECT") ||
- !strcasecomp(new_tag->name, "BUTTON") ||
- !strcasecomp(new_tag->name, "FIELDSET") ||
- !strcasecomp(new_tag->name, "LABEL") ||
- !strcasecomp(new_tag->name, "LEGEND") ||
- !strcasecomp(new_tag->name, "FORM")) {
-#else
switch (e) {
case HTML_INPUT: case HTML_TEXTAREA: case HTML_SELECT:
case HTML_BUTTON: case HTML_FIELDSET: case HTML_LABEL:
@@ -1143,21 +1313,21 @@ PRIVATE void start_element ARGS1(
default:
break;
}
- if (ok) {
-#endif
+ if (ok)
+ {
/*
** It is another form-related start tag, so terminate
** the current SELECT block and fall through. - FM
*/
- CTRACE(tfp, "SGML: ***Faking SELECT end tag before <%s> start tag.\n",
- new_tag->name);
+ CTRACE((tfp, "SGML: ***Faking SELECT end tag before <%s> start tag.\n",
+ new_tag->name));
end_element(context, SGMLFindTag(context->dtd, "SELECT"));
} else {
/*
** Ignore the start tag. - FM
*/
- CTRACE(tfp, "SGML: ***Ignoring start tag <%s> in SELECT block.\n",
- new_tag->name);
+ CTRACE((tfp, "SGML: ***Ignoring start tag <%s> in SELECT block.\n",
+ new_tag->name));
return;
}
}
@@ -1165,14 +1335,16 @@ PRIVATE void start_element ARGS1(
/*
** Handle the start tag. - FM
*/
- CTRACE(tfp, "SGML: Start <%s>\n", new_tag->name);
- (*context->actions->start_element)(
+ CTRACE((tfp, "SGML: Start <%s>\n", new_tag->name));
+ status = (*context->actions->start_element)(
context->target,
- new_tag - context->dtd->tags,
+ TAGNUM_OF_TAGP(new_tag),
context->present,
(CONST char**) context->value, /* coerce type for think c */
context->current_tag_charset,
(char **)&context->include);
+ if (status == HT_PARSER_OTHER_CONTENT)
+ new_tag = ALT_TAGP(new_tag); /* this is only returned for OBJECT */
if (new_tag->contents != SGML_EMPTY) { /* i.e., tag not empty */
HTElement * N = (HTElement *)malloc(sizeof(HTElement));
if (N == NULL)
@@ -1180,11 +1352,9 @@ PRIVATE void start_element ARGS1(
N->next = context->element_stack;
N->tag = new_tag;
context->element_stack = N;
-#if !OPT
- } else if (!strcasecomp(new_tag->name, "META")) {
-#else
+ context->no_lynx_specialcodes = (new_tag->flags & Tgf_nolyspcl);
+
} else if (e == HTML_META ) {
-#endif
/*
** Check for result of META tag. - KW & FM
*/
@@ -1220,7 +1390,7 @@ PUBLIC HTTag * SGMLFindTag ARGS2(
return &dtd->tags[i];
}
}
- if (isalpha((unsigned char)string[0])) {
+ if (IsNmStart(string[0])) {
/*
** Unrecognized, but may be valid. - KW
*/
@@ -1251,6 +1421,7 @@ PRIVATE void SGML_free ARGS1(
FREE(context->url);
FREE(context->csi);
FREE(context->include);
+ FREE(context->active_include);
/*
** Wind down stack if any elements are open. - FM
@@ -1260,8 +1431,12 @@ PRIVATE void SGML_free ARGS1(
t = cur->tag;
context->element_stack = cur->next; /* Remove from stack */
FREE(cur);
- (*context->actions->end_element)(context->target,
- t - context->dtd->tags, (char **)&context->include);
+#ifdef USE_PRETTYSRC
+ if (!psrc_view) /* Don't actually call on target if viewing psrc - kw */
+#endif
+ (*context->actions->end_element)(context->target,
+ NORMAL_TAGNUM(TAGNUM_OF_TAGP(t)),
+ (char **)&context->include);
FREE(context->include);
}
@@ -1278,7 +1453,7 @@ PRIVATE void SGML_free ARGS1(
FREE(context->value[i]);
FREE(context);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
sgml_in_psrc_was_initialized =FALSE;
#endif
}
@@ -1300,6 +1475,7 @@ PRIVATE void SGML_abort ARGS2(
*/
FREE(context->recover);
FREE(context->include);
+ FREE(context->active_include);
FREE(context->url);
FREE(context->csi);
@@ -1320,7 +1496,7 @@ PRIVATE void SGML_abort ARGS2(
FREE(context->value[i]);
FREE(context);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
sgml_in_psrc_was_initialized =FALSE;
#endif
@@ -1358,9 +1534,14 @@ PRIVATE void SGML_character ARGS2(
HTChunk *string = context->string;
CONST char * EntityName;
char * p;
+ HTTag * testtag = NULL;
BOOLEAN chk; /* Helps (?) walk through all the else ifs... */
UCode_t clong, uck = 0; /* Enough bits for UCS4 ... */
+#ifdef CJK_EX
+ unsigned char c;
+#else
char c;
+#endif
char saved_char_in = '\0';
/*
@@ -1371,7 +1552,7 @@ PRIVATE void SGML_character ARGS2(
#define unsign_c clong
c = c_in;
- clong = (unsigned char)c; /* a.k.a. unsign_c */
+ clong = UCH(c); /* a.k.a. unsign_c */
if (context->T.decode_utf8) {
/*
@@ -1379,7 +1560,7 @@ PRIVATE void SGML_character ARGS2(
** Incomplete characters silently ignored.
** From Linux kernel's console.c. - KW
*/
- if (TOASCII((unsigned char)c) > 127) { /* S/390 -- gil -- 0710 */
+ if (TOASCII(UCH(c)) > 127) { /* S/390 -- gil -- 0710 */
/*
** We have an octet from a multibyte character. - FM
*/
@@ -1543,6 +1724,9 @@ PRIVATE void SGML_character ARGS2(
** its recover buffer, but it might not be for
** stuff other functions added to the insert or
** csi buffer, so bear that in mind. - FM
+** Stuff from the recover buffer is now handled
+** as UTF-8 if we can expect that's what it is,
+** and in that case we don't come back up here. - kw
*/
top:
saved_char_in = '\0';
@@ -1555,7 +1739,7 @@ top:
*/
top0a:
*(context->utf_buf) = '\0';
- clong = (unsigned char)c;
+ clong = UCH(c);
/*
** We jump to here from above if we have converted
** the input, or a multibyte sequence across calls,
@@ -1577,7 +1761,7 @@ top1:
if (TOASCII(unsign_c) < 32 &&
c != '\t' && c != '\n' && c != '\r' &&
HTCJK == NOCJK)
- return;
+ goto after_switch;
/*
** Ignore 127 if we don't have HTPassHighCtrlRaw
@@ -1587,7 +1771,7 @@ top1:
unsign_c >= LYlowest_eightbit[context->inUCLYhndl])
if (TOASCII(c) == 127 && /* S/390 -- gil -- 0830 */
!(PASSHICTRL || HTCJK != NOCJK))
- return;
+ goto after_switch;
/*
** Ignore 8-bit control characters 128 - 159 if
@@ -1595,11 +1779,34 @@ top1:
*/
if (TOASCII(unsign_c) > 127 && TOASCII(unsign_c) < 160 && /* S/390 -- gil -- 0847 */
!(PASSHICTRL || HTCJK != NOCJK))
- return;
+ goto after_switch;
+
+ /* Almost all CJK characters are double byte but only Japanese
+ * JIS X0201 Kana is single byte. To prevent to fail SGML parsing
+ * we have to care them here. -- TH
+ */
+ if ((HTCJK==JAPANESE) && (context->state==S_in_kanji) &&
+ !IS_JAPANESE_2BYTE(context->kanji_buf, UCH(c))) {
+#ifdef CONV_JISX0201KANA_JISX0208KANA
+ if (IS_SJIS_X0201KANA(context->kanji_buf)) {
+ unsigned char sjis_hi, sjis_lo;
+ JISx0201TO0208_SJIS(context->kanji_buf, &sjis_hi, &sjis_lo);
+ PUTC(sjis_hi);
+ PUTC(sjis_lo);
+ }
+ else
+#endif
+ PUTC(context->kanji_buf);
+ context->state = S_text;
+ }
/*
** Handle character based on context->state.
*/
+ CTRACE2(TRACE_SGML, (tfp, "SGML before %s|%.*s|%c\n",
+ state_name(context->state),
+ string->size,
+ string->data != NULL ? string->data : "", UCH(c)));
switch(context->state) {
case S_in_kanji:
@@ -1614,9 +1821,22 @@ top1:
** (see below). - FM
*/
context->state = S_text;
+ PUTC(context->kanji_buf);
PUTC(c);
break;
+ case S_tagname_slash:
+ /*
+ * We had something link "<name/" so far, set state to S_text
+ * but keep context->slashedtag as as a flag; except if we get
+ * '>' directly after the "<name/", and really have a tag for
+ * that name in context->slashedtag, in which case keep state as
+ * is and let code below deal with it. - kw
+ */
+ if (!(c == '>' && context->slashedtag && TOASCII(unsign_c) < 127)) {
+ context->state = S_text;
+ } /* fall through in any case! */
+
case S_text:
if (HTCJK != NOCJK && (TOASCII(c) & 0200) != 0) { /* S/390 -- gil -- 0864 */
/*
@@ -1630,7 +1850,7 @@ top1:
** to having raw mode off with CJK. - FM
*/
context->state = S_in_kanji;
- PUTC(c);
+ context->kanji_buf = c;
break;
} else if (HTCJK != NOCJK && TOASCII(c) == '\033') { /* S/390 -- gil -- 0881 */
/*
@@ -1641,13 +1861,28 @@ top1:
PUTC(c);
break;
}
+
+ if (c == '&' || c == '<') {
+#ifdef USE_PRETTYSRC
+ if (psrc_view) { /*there is nothing useful in the element_stack*/
+ testtag = context->current_tag;
+ } else
+#endif
+ {
+ testtag = context->element_stack ?
+ context->element_stack->tag : NULL;
+ }
+ }
+
if (c == '&' && TOASCII(unsign_c) < 127 && /* S/390 -- gil -- 0898 */
- (!context->element_stack ||
- (context->element_stack->tag &&
- (context->element_stack->tag->contents == SGML_MIXED ||
- context->element_stack->tag->contents == SGML_ELEMENT ||
- context->element_stack->tag->contents == SGML_PCDATA ||
- context->element_stack->tag->contents == SGML_RCDATA)))) {
+ (!testtag ||
+ (testtag->contents == SGML_MIXED ||
+ testtag->contents == SGML_ELEMENT ||
+ testtag->contents == SGML_PCDATA ||
+#ifdef USE_PRETTYSRC
+ testtag->contents == SGML_EMPTY ||
+#endif
+ testtag->contents == SGML_RCDATA))) {
/*
** Setting up for possible entity, without the leading '&'. - FM
*/
@@ -1658,17 +1893,88 @@ top1:
** Setting up for possible tag. - FM
*/
string->size = 0;
- context->state = (context->element_stack &&
- context->element_stack->tag &&
- context->element_stack->tag->contents == SGML_LITTERAL)
- ?
- S_litteral : S_tag;
+ if (testtag && testtag->contents == SGML_PCDATA) {
+ context->state = S_pcdata;
+ } else if (testtag && (testtag->contents == SGML_LITTERAL
+ || testtag->contents == SGML_CDATA)) {
+ context->state = S_litteral;
+ } else if (testtag && (testtag->contents == SGML_SCRIPT)) {
+ context->state = S_script;
+ } else {
+ context->state = S_tag;
+ }
+ context->slashedtag = NULL;
+ } else if (context->slashedtag &&
+ (c == '/' ||
+ (c == '>' && context->state == S_tagname_slash)) &&
+ TOASCII(unsign_c) < 127) {
+ /*
+ ** We got either the second slash of a pending "<NAME/blah blah/"
+ ** shortref construct, or the '>' of a mere "<NAME/>". In both
+ ** cases generate a "</NAME>" end tag in the recover buffer for
+ ** reparsing unless NAME is really an empty element. - kw
+ */
+#ifdef USE_PRETTYSRC
+ if (psrc_view) {
+ PSRCSTART(abracket);
+ PUTC(c);
+ PSRCSTOP(abracket);
+ } else
+#endif
+ if (context->slashedtag != context->unknown_tag &&
+ !ReallyEmptyTag(context->slashedtag)) {
+ if (context->recover == NULL) {
+ StrAllocCopy(context->recover, "</");
+ context->recover_index = 0;
+ } else {
+ StrAllocCat(context->recover, "</");
+ }
+ StrAllocCat(context->recover, context->slashedtag->name);
+ StrAllocCat(context->recover, ">");
+ }
+ context->slashedtag = NULL;
+
+ } else if (context->element_stack &&
+ (context->element_stack->tag->flags & Tgf_frecyc)) {
+ /*
+ * The element stack says we are within the contents of an
+ * element that the next stage (HTML.c) may want to feed
+ * us back again (via the *include string). So try to output
+ * text in UTF-8 if possible, using the same logic as for
+ * attribute values (which should be in line with what
+ * context->current_tag_charset indicates). - kw
+ */
+ if (context->T.decode_utf8 &&
+ *context->utf_buf) {
+ PUTS(context->utf_buf);
+ context->utf_buf_p = context->utf_buf;
+ *(context->utf_buf_p) = '\0';
+ } else if (HTCJK == NOCJK &&
+ (context->T.output_utf8 ||
+ context->T.trans_from_uni)) {
+ if (LYIsASCII(clong)) {
+ PUTC(c);
+ } else if (clong == 0xfffd && saved_char_in &&
+ HTPassEightBitRaw &&
+ UCH(saved_char_in) >=
+ LYlowest_eightbit[context->outUCLYhndl]) {
+ PUTUTF8((0xf000 | UCH(saved_char_in)));
+ } else {
+ PUTUTF8(clong);
+ }
+ } else if (saved_char_in && context->T.use_raw_char_in) {
+ PUTC(saved_char_in);
+ } else {
+ PUTC(c);
+ }
+
#define PASS8859SPECL context->T.pass_160_173_raw
/*
** Convert 160 (nbsp) to Lynx special character if
** neither HTPassHighCtrlRaw nor HTCJK is set. - FM
*/
} else if (unsign_c == CH_NBSP && /* S/390 -- gil -- 0932 */
+ !context->no_lynx_specialcodes &&
!(PASS8859SPECL || HTCJK != NOCJK)) {
PUTC(HT_NON_BREAK_SPACE);
/*
@@ -1676,6 +1982,7 @@ top1:
** neither HTPassHighCtrlRaw nor HTCJK is set. - FM
*/
} else if (unsign_c == CH_SHY && /* S/390 -- gil -- 0949 */
+ !context->no_lynx_specialcodes &&
!(PASS8859SPECL || HTCJK != NOCJK)) {
PUTC(LY_SOFT_HYPHEN);
/*
@@ -1693,12 +2000,12 @@ top1:
/******************************************************************
* I. LATIN-1 OR UCS2 TO DISPLAY CHARSET
******************************************************************/
- } else if ((chk = (context->T.trans_from_uni && TOASCII(unsign_c) >= 160)) && /* S/390 -- gil -- 0968 */
+ } else if ((chk = (BOOL) (context->T.trans_from_uni && TOASCII(unsign_c) >= 160)) && /* S/390 -- gil -- 0968 */
(uck = UCTransUniChar(unsign_c,
context->outUCLYhndl)) >= ' ' &&
uck < 256) {
- CTRACE(tfp, "UCTransUniChar returned 0x%.2lX:'%c'.\n",
- uck, FROMASCII((char)uck));
+ CTRACE((tfp, "UCTransUniChar returned 0x%.2lX:'%c'.\n",
+ uck, FROMASCII((char)uck)));
/*
** We got one octet from the conversions, so use it. - FM
*/
@@ -1743,7 +2050,7 @@ top1:
!(PASSHI8BIT || HTCJK != NOCJK) &&
!IncludesLatin1Enc) {
int i;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
int psrc_view_backup = 0;
#endif
@@ -1752,14 +2059,14 @@ top1:
for (i = 0; EntityName[i]; i++)
HTChunkPutc(string, EntityName[i]);
HTChunkTerminate(string);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
/* we need to disable it temporary*/
if (psrc_view) {
psrc_view_backup =1; psrc_view =0;
}
#endif
handle_entity(context, '\0');
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
/* we need to disable it temporary*/
if (psrc_view_backup)
psrc_view = TRUE;
@@ -1791,8 +2098,8 @@ top1:
** Check for a strippable koi8-r 8-bit character. - FM
*/
} else if (context->T.strip_raw_char_in && saved_char_in &&
- ((unsigned char)saved_char_in >= 0xc0) &&
- ((unsigned char)saved_char_in < 255)) {
+ (UCH(saved_char_in) >= 0xc0) &&
+ (UCH(saved_char_in) < 255)) {
/*
** KOI8 special: strip high bit, gives (somewhat) readable
** ASCII or KOI7 - it was constructed that way! - KW
@@ -1804,7 +2111,7 @@ top1:
** If we don't actually want the character,
** make it safe and output that now. - FM
*/
- } else if (TOASCII((unsigned char)c) < /* S/390 -- gil -- 0997 */
+ } else if (TOASCII(UCH(c)) < /* S/390 -- gil -- 0997 */
LYlowest_eightbit[context->outUCLYhndl] ||
(context->T.trans_from_uni && !HTPassEightBitRaw)) {
#ifdef NOTUSED_FOTEMODS
@@ -1857,29 +2164,139 @@ top1:
break;
/*
+ ** Found '<' in SGML_PCDATA content; treat this mode nearly like
+ ** S_litteral, but recognize '<!' and '<?' to filter out comments
+ ** and processing instructions. - kw
+ */
+ case S_pcdata:
+ if (!string->size && TOASCII(unsign_c) < 127) { /* first after '<' */
+ if (c == '!') { /* <! */
+ /*
+ ** Terminate and set up for possible comment,
+ ** identifier, declaration, or marked section
+ ** as under S_tag. - kw
+ */
+ context->state = S_exclamation;
+ context->lead_exclamation = TRUE;
+ context->doctype_bracket = FALSE;
+ context->first_bracket = FALSE;
+ HTChunkPutc(string, c);
+ break;
+ } else if (c == '?') { /* <? - ignore as a PI until '>' - kw */
+ CTRACE((tfp,
+ "SGML: Found PI in PCDATA, junking it until '>'\n"));
+#ifdef USE_PRETTYSRC
+ if (psrc_view) {
+ PSRCSTART(abracket);PUTS("<?");PSRCSTOP(abracket);
+ context->seen_nonwhite_in_junk_tag = TRUE; /* show all */
+ }
+#endif
+ context->state = S_junk_pi;
+ break;
+ }
+ }
+ goto case_S_litteral;
+
+ /*
+ ** Found '<' in SGML_SCRIPT content; treat this mode nearly like
+ ** S_litteral, but recognize '<!' to allow the content to be treated
+ ** as a comment by lynx.
+ */
+ case S_script:
+ if (!string->size && TOASCII(unsign_c) < 127) { /* first after '<' */
+ if (c == '!') { /* <! */
+ /*
+ ** Terminate and set up for possible comment,
+ ** identifier, declaration, or marked section
+ ** as under S_tag. - kw
+ */
+ context->state = S_exclamation;
+ context->lead_exclamation = TRUE;
+ context->doctype_bracket = FALSE;
+ context->first_bracket = FALSE;
+ HTChunkPutc(string, c);
+ break;
+ }
+ }
+ goto case_S_litteral;
+
+ /*
** In litteral mode, waits only for specific end tag (for
** compatibility with old servers, and for Lynx). - FM
*/
+ case_S_litteral:
case S_litteral: /*PSRC:this case not understood completely by HV, not done*/
HTChunkPutc(string, c);
+#ifdef USE_PRETTYSRC
+ if (psrc_view) { /*there is nothing useful in the element_stack*/
+ testtag = context->current_tag;
+ } else
+#endif
+ testtag = context->element_stack ?
+ context->element_stack->tag : NULL;
+
if (TOUPPER(c) != ((string->size == 1) ?
'/' :
- context->element_stack->tag->name[string->size-2])) {
+ testtag->name[string->size-2])) {
int i;
/*
** If complete match, end litteral.
*/
- if ((c == '>') &&
- (!context->element_stack->tag->name[string->size-2])) {
+ if ((c == '>') && testtag &&
+ string->size > 1 && !testtag->name[string->size-2]) {
+#ifdef USE_PRETTYSRC
+ if (psrc_view) {
+ PSRCSTART(abracket);PUTC('<');PUTC('/');PSRCSTOP(abracket);
+ PSRCSTART(tag);
+ strcpy(string->data,context->current_tag->name);
+ if (tagname_transform != 1) {
+ if (tagname_transform == 0)
+ LYLowerCase(string->data);
+ else
+ LYUpperCase(string->data);
+ }
+ PUTS(string->data);
+ PSRCSTOP(tag);
+ PSRCSTART(abracket);PUTC('>');PSRCSTOP(abracket);
+
+ context->current_tag = NULL;
+ string->size = 0;
+ context->current_attribute_number = INVALID;
+ context->state = S_text;
+ break;
+ }
+#endif
end_element(context, context->element_stack->tag);
string->size = 0;
context->current_attribute_number = INVALID;
context->state = S_text;
break;
}
+
+ if (((testtag->contents != SGML_LITTERAL &&
+ (testtag->flags & Tgf_strict)) ||
+ (context->state == S_pcdata &&
+ (testtag->flags & (Tgf_strict|Tgf_endO)))) &&
+ (string->size > 1 &&
+ (c == '>' || string->size > 2 || IsNmStart(c)))) {
+ context->state = S_end;
+ string->size--;
+ for (i = 0; i < string->size; i++) /* remove '/' */
+ string->data[i] = string->data[i+1];
+ if ((string->size == 1) ? IsNmStart(c) : IsNmChar(c))
+ break;
+ string->size--;
+ goto top1;
+ }
+ if (context->state == S_pcdata &&
+ (testtag->flags & (Tgf_strict|Tgf_endO)) &&
+ (string->size == 1 && IsNmStart(c))) {
+ context->state = S_tag;
+ break;
+ }
/*
- ** If Mismatch: recover string.
+ ** If Mismatch: recover string literally.
*/
PUTC('<');
for (i = 0; i < string->size-1; i++) /* recover, except last c */
@@ -1908,7 +2325,10 @@ top1:
*/
case S_entity:
if (TOASCII(unsign_c) < 127 && (string->size ? /* S/390 -- gil -- 1029 */
- isalnum((unsigned char)c) : isalpha((unsigned char)c))) {
+ isalnum(UCH(c)) : isalpha(UCH(c)))) {
+ /* Should probably use IsNmStart/IsNmChar above (is that right?),
+ but the world is not ready for that - there's &nbsp: (note
+ colon!) and stuff around. */
/*
** Accept valid ASCII character. - FM
*/
@@ -1918,12 +2338,12 @@ top1:
** It was an ampersand that's just text, so output
** the ampersand and recycle this character. - FM
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTART(badseq);
#endif
PUTC('&');
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTOP(badseq);
#endif
@@ -1934,11 +2354,11 @@ top1:
** Terminate entity name and try to handle it. - FM
*/
HTChunkTerminate(string);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
entity_string = string->data;
#endif
/* S/390 -- gil -- 1039 */
- /* CTRACE(tfp, "%s: %d: %s\n", __FILE__, __LINE__, string->data); */
+ /* CTRACE((tfp, "%s: %d: %s\n", __FILE__, __LINE__, string->data)); */
if (!strcmp(string->data, "zwnj") &&
(!context->element_stack ||
(context->element_stack->tag &&
@@ -1948,7 +2368,7 @@ top1:
*/
char temp[8];
- CTRACE(tfp, "SGML_character: Handling 'zwnj' entity as 'WBR' element.\n");
+ CTRACE((tfp, "SGML_character: Handling 'zwnj' entity as 'WBR' element.\n"));
if (c != ';') {
sprintf(temp, "<WBR>%c", c);
@@ -1975,7 +2395,7 @@ top1:
** via handle_entity(), or if the terminator is
** not the "standard" semi-colon for HTML. - FM
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view && FoundEntity && c == ';') {
HTMLSRC_apply_markup(context,HTL_entity, START);
PUTC(c);
@@ -1991,10 +2411,10 @@ top1:
** Check for a numeric entity.
*/
case S_cro:
- if (TOASCII(unsign_c) < 127 && TOLOWER((unsigned char)c) == 'x') { /* S/390 -- gil -- 1060 */
+ if (TOASCII(unsign_c) < 127 && TOLOWER(UCH(c)) == 'x') { /* S/390 -- gil -- 1060 */
context->isHex = TRUE;
context->state = S_incro;
- } else if (TOASCII(unsign_c) < 127 && isdigit((unsigned char)c)) {
+ } else if (TOASCII(unsign_c) < 127 && isdigit(UCH(c))) {
/*
** Accept only valid ASCII digits. - FM
*/
@@ -2006,13 +2426,13 @@ top1:
** No 'x' or digit following the "&#" so recover
** them and recycle the character. - FM
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTART(badseq);
#endif
PUTC('&');
PUTC('#');
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTOP(badseq);
#endif
@@ -2025,11 +2445,11 @@ top1:
** Handle a numeric entity.
*/
case S_incro:
- /* S/390 -- gil -- 1075 */ /* CTRACE(tfp, "%s: %d: numeric %d %d\n",
- __FILE__, __LINE__, unsign_c, c); */
+ /* S/390 -- gil -- 1075 */ /* CTRACE((tfp, "%s: %d: numeric %d %d\n",
+ __FILE__, __LINE__, unsign_c, c)); */
if ((TOASCII(unsign_c) < 127) &&
- (context->isHex ? isxdigit((unsigned char)c) :
- isdigit((unsigned char)c))) {
+ (context->isHex ? isxdigit(UCH(c)) :
+ isdigit(UCH(c)))) {
/*
** Accept only valid hex or ASCII digits. - FM
*/
@@ -2039,14 +2459,14 @@ top1:
** No hex digit following the "&#x" so recover
** them and recycle the character. - FM
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTART(badseq);
#endif
PUTC('&');
PUTC('#');
PUTC('x');
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTOP(badseq);
#endif
@@ -2060,7 +2480,7 @@ top1:
UCode_t code;
int i;
HTChunkTerminate(string);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
entity_string = string->data;
#endif
if ((context->isHex ? sscanf(string->data, "%lx", &code) :
@@ -2213,7 +2633,7 @@ top1:
*/
char temp[8];
- CTRACE(tfp, "SGML_character: Handling '8204' (zwnj) reference as 'WBR' element.\n");
+ CTRACE((tfp, "SGML_character: Handling '8204' (zwnj) reference as 'WBR' element.\n"));
/*
** Include the terminator if it is not
@@ -2243,7 +2663,7 @@ top1:
** We handled the value as a special character,
** so recycle the terminator or break. - FM
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(entity);
PUTS( (context->isHex ? "&#x" : "&#") );
@@ -2268,11 +2688,11 @@ top1:
uck < 256 &&
(uck < 127 ||
uck >= LYlowest_eightbit[context->outUCLYhndl])) {
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (!psrc_view) {
#endif
PUTC(FROMASCII((char)uck));
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
} else {
PSRCSTART(entity);
PUTS( (context->isHex ? "&#x" : "&#") );
@@ -2290,7 +2710,7 @@ top1:
(uck = UCTransUniCharStr(replace_buf, 60, code,
context->outUCLYhndl,
0) >= 0)) {
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(entity);
PUTS( (context->isHex ? "&#x" : "&#") );
@@ -2323,7 +2743,7 @@ top1:
/*
** Got an ASCII character (yippey). - FM
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(entity);
PUTS( (context->isHex ? "&#x" : "&#") );
@@ -2342,7 +2762,7 @@ top1:
/*
** Got a replacement string (yippey). - FM
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(entity);
PUTS( (context->isHex ? "&#x" : "&#") );
@@ -2371,7 +2791,7 @@ top1:
(context->isHex ? "&#x" : "&#"),
replace_buf);
}
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(badseq);
PUTS( (context->isHex ? "&#x" : "&#") );
@@ -2413,7 +2833,7 @@ top1:
** "&#" or "&#x" and digit(s), and recycle
** the terminator. - FM
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(badseq);
}
@@ -2427,7 +2847,7 @@ top1:
string->size--;
for (i = 0; i < string->size; i++) /* recover */
PUTC(string->data[i]);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTOP(badseq);
}
@@ -2442,7 +2862,7 @@ top1:
/*
** No conversion needed. - FM
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(entity);
PUTS( (context->isHex ? "&#x" : "&#") );
@@ -2476,7 +2896,7 @@ top1:
** Our conversion failed, so recover the "&#"
** and digit(s), and recycle the terminator. - FM
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTART(badseq);
#endif
@@ -2489,7 +2909,7 @@ top1:
string->size--;
for (i = 0; i < string->size; i++) /* recover */
PUTC(string->data[i]);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTOP(badseq);
#endif
@@ -2522,13 +2942,13 @@ top1:
string->size--;
HTChunkPutc(string, c);
HTChunkTerminate(string);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTART(badseq);
#endif
PUTC('&');
PUTC('#');
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTOP(badseq);
#endif
@@ -2555,7 +2975,7 @@ top1:
*/
case S_tag: /* new tag */
if (TOASCII(unsign_c) < 127 && (string->size ? /* S/390 -- gil -- 1179 */
- isalnum((unsigned char)c) : isalpha((unsigned char)c))) {
+ IsNmChar(c) : IsNmStart(c))) {
/*
** Add valid ASCII character. - FM
*/
@@ -2583,12 +3003,12 @@ top1:
** So recover the '<' and following character as data. - FM & KW
*/
context->state = S_text;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTART(badseq);
#endif
PUTC('<');
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTOP(badseq);
#endif
@@ -2599,43 +3019,65 @@ top1:
*/
HTTag * t;
if (c == '/') {
- if (string->size != 0)
- CTRACE(tfp,"SGML: `<%s/' found!\n", string->data);
- context->state = S_end;
- break;
+ if (string->size == 0) {
+ context->state = S_end;
+ break;
+ }
+ CTRACE((tfp,"SGML: `<%.*s/' found!\n", string->size, string->data));
}
HTChunkTerminate(string) ;
t = SGMLFindTag(dtd, string->data);
- if (t == context->unknown_tag && c == ':' &&
- 0 == strcasecomp(string->data, "URL")) {
+ if (t == context->unknown_tag &&
+ ((c == ':' &&
+ string->size == 4 && 0 == strcasecomp(string->data, "URL")) ||
+ (string->size > 4 && 0 == strncasecomp(string->data, "URL:", 4)))) {
/*
** Treat <URL: as text rather than a junk tag,
** so we display it and the URL (Lynxism 8-). - FM
*/
- int i;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTART(badseq);
#endif
PUTC('<');
- for (i = 0; i < 3; i++) /* recover */
- PUTC(string->data[i]);
+ PUTS(string->data); /* recover */
PUTC(c);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTOP(badseq);
#endif
- CTRACE(tfp, "SGML: Treating <%s%c as text\n",
- string->data, c);
+ CTRACE((tfp, "SGML: Treating <%s%c as text\n",
+ string->data, c));
string->size = 0;
context->state = S_text;
break;
- } else if (!t) {
- CTRACE(tfp, "SGML: *** Invalid element %s\n",
- string->data);
+ }
+ if (c == '/' && t) {
+ /*
+ * Element name was ended by '/'. Remember the tag that
+ * ended thusly, we'll interpret this as either an indication
+ * of an empty element (if '>' follows directly) or do
+ * some SGMLshortref-ish treatment. - kw
+ */
+ context->slashedtag = t;
+ }
+ if (!t) {
+ if (c == '?' && string->size <= 1) {
+ CTRACE((tfp, "SGML: Found PI, junking it until '>'\n"));
+#ifdef USE_PRETTYSRC
+ if (psrc_view) {
+ PSRCSTART(abracket);PUTS("<?");PSRCSTOP(abracket);
+ context->seen_nonwhite_in_junk_tag = TRUE; /*show all*/
+ }
+#endif
+ context->state = S_junk_pi;
+ break;
+ }
+ CTRACE((tfp, "SGML: *** Invalid element %s\n",
+ string->data));
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(abracket);PUTC('<');PSRCSTOP(abracket);
PSRCSTART(badtag);
@@ -2646,18 +3088,19 @@ top1:
LYUpperCase(string->data);
}
PUTS(string->data);
-
if (c == '>' ) {
PSRCSTOP(badtag);
PSRCSTART(abracket);PUTC('>');PSRCSTOP(abracket);
+ } else {
+ PUTC(c);
}
}
#endif
context->state = (c == '>') ? S_text : S_junk_tag;
break;
} else if (t == context->unknown_tag) {
- CTRACE(tfp, "SGML: *** Unknown element %s\n",
- string->data);
+ CTRACE((tfp, "SGML: *** Unknown element %s\n",
+ string->data));
/*
** Fall through and treat like valid
** tag for attribute parsing. - KW
@@ -2666,10 +3109,7 @@ top1:
}
context->current_tag = t;
- /*
- ** Clear out attributes.
- */
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(abracket);PUTC('<');PSRCSTOP(abracket);
if (t != context->unknown_tag)
@@ -2683,42 +3123,46 @@ top1:
LYUpperCase(string->data);
}
PUTS(string->data);
+ if (t != context->unknown_tag)
+ PSRCSTOP(tag);
+ else
+ PSRCSTOP(badtag);
}
if (!psrc_view) /*don't waste time */
#endif
{
-#if !OPT1
- int i;
- for (i = 0; i < context->current_tag->number_of_attributes; i++)
- context->present[i] = NO;
-#else
+ /*
+ ** Clear out attributes.
+ */
memset( (void*)context->present, 0 , sizeof(BOOL)*
context->current_tag->number_of_attributes);
-#endif
}
string->size = 0;
context->current_attribute_number = INVALID;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
- if (c == '>') {
- if (t != context->unknown_tag)
- PSRCSTOP(tag);
- else
- PSRCSTOP(badtag);
- PSRCSTART(abracket);
- PUTC('>');
- PSRCSTOP(abracket);
- context->state = S_text;
+ if (c == '>' || c == '<' || (c == '/' && context->slashedtag)) {
+ if (c != '<') {
+ PSRCSTART(abracket);
+ PUTC(c);
+ PSRCSTOP(abracket);
+ context->state = (c == '>') ? S_text : S_tagname_slash;
+ } else {
+ context->state = S_tag;
+ }
} else {
+ if (!WHITE(c))
+ PUTC(c);
context->state = S_tag_gap;
}
} else
#endif
- if (c == '>') {
+ if (c == '>' || c == '<' || (c == '/' && context->slashedtag)) {
if (context->current_tag->name)
start_element(context);
- context->state = S_text;
+ context->state = (c == '>') ? S_text :
+ (c == '<') ? S_tag : S_tagname_slash;
} else {
context->state = S_tag_gap;
}
@@ -2764,7 +3208,7 @@ top1:
** Try to handle identifier. - FM
*/
HTChunkTerminate(string);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(sgmlspecial);
PUTC('<');
@@ -2833,11 +3277,11 @@ top1:
*/
if (c == '>') {
HTChunkTerminate(string);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(comm);
PUTC('<');
- PUTS(string->data);
+ PUTS_TR(string->data);
PUTC('>');
PSRCSTOP(comm);
} else
@@ -2849,8 +3293,7 @@ top1:
context->state = S_text;
break;
}
- HTChunkPutc(string, c);
- break;
+ goto S_comment_put_c;
}
if (!context->first_dash && c == '-') {
HTChunkPutc(string, c);
@@ -2875,16 +3318,16 @@ top1:
** Terminate and handle the comment. - FM
*/
HTChunkTerminate(string);
-#ifdef USE_PSRC
- if (psrc_view) {
- PSRCSTART(comm);
- PUTC('<');
- PUTS(string->data);
- PUTC('>');
- PSRCSTOP(comm);
- } else
+#ifdef USE_PRETTYSRC
+ if (psrc_view) {
+ PSRCSTART(comm);
+ PUTC('<');
+ PUTS_TR(string->data);
+ PUTC('>');
+ PSRCSTOP(comm);
+ } else
#endif
- handle_comment(context);
+ handle_comment(context);
string->size = 0;
context->end_comment = FALSE;
context->first_dash = FALSE;
@@ -2892,9 +3335,32 @@ top1:
break;
}
context->first_dash = FALSE;
- if (context->end_comment && !isspace(c))
+ if (context->end_comment && !isspace(UCH(c)))
context->end_comment = FALSE;
- HTChunkPutc(string, c);
+
+ S_comment_put_c:
+ if (context->T.decode_utf8 &&
+ *context->utf_buf) {
+ HTChunkPuts(string, context->utf_buf);
+ context->utf_buf_p = context->utf_buf;
+ *(context->utf_buf_p) = '\0';
+ } else if (HTCJK == NOCJK &&
+ (context->T.output_utf8 ||
+ context->T.trans_from_uni)) {
+ if (clong == 0xfffd && saved_char_in &&
+ HTPassEightBitRaw &&
+ UCH(saved_char_in) >=
+ LYlowest_eightbit[context->outUCLYhndl]) {
+ HTChunkPutUtf8Char(string,
+ (0xf000 | UCH(saved_char_in)));
+ } else {
+ HTChunkPutUtf8Char(string, clong);
+ }
+ } else if (saved_char_in && context->T.use_raw_char_in) {
+ HTChunkPutc(string, saved_char_in);
+ } else {
+ HTChunkPutc(string, c);
+ }
break;
case S_doctype: /* Expecting DOCTYPE. - FM */
@@ -2911,7 +3377,7 @@ top1:
}
if (c == '>') {
HTChunkTerminate(string);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(sgmlspecial);
PUTC('<');
@@ -2943,7 +3409,7 @@ top1:
}
if (!context->second_bracket && c == '>') {
HTChunkTerminate(string);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(sgmlspecial);
PUTC('<');
@@ -2977,7 +3443,7 @@ top1:
}
if (context->end_comment && c == '>') {
HTChunkTerminate(string);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(sgmlspecial);
PUTC('<');
@@ -3014,7 +3480,7 @@ top1:
}
if (context->end_comment && c == '>') {
HTChunkTerminate(string);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(sgmlspecial);
PUTC('<');
@@ -3051,7 +3517,7 @@ top1:
}
if (context->end_comment && c == '>') {
HTChunkTerminate(string);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(sgmlspecial);
PUTC('<');
@@ -3075,17 +3541,13 @@ top1:
if (WHITE(c))
break; /* Gap between attributes */
if (c == '>') { /* End of tag */
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (!psrc_view)
#endif
if (context->current_tag->name)
start_element(context);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
- if (context->current_tag != context->unknown_tag)
- PSRCSTOP(tag);
- else
- PSRCSTOP(badtag);
PSRCSTART(abracket);
PUTC('>');
PSRCSTOP(abracket);
@@ -3103,7 +3565,7 @@ top1:
if (WHITE(c) || (c == '>') || (c == '=')) { /* End of word */
HTChunkTerminate(string);
handle_attribute_name(context, string->data);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (!psrc_view) {
#endif
string->size = 0;
@@ -3113,8 +3575,8 @@ top1:
context->state = S_text;
break;
}
-#ifdef USE_PSRC
- } else {
+#ifdef USE_PRETTYSRC
+ } else {
PUTC(' ');
if (context->current_attribute_number == INVALID)
PSRCSTART(badattr);
@@ -3127,18 +3589,12 @@ top1:
LYUpperCase(string->data);
}
PUTS(string->data);
- if (c == '=' || c == '>') {
- if (c == '=' ) PUTC('=');
- if (context->current_attribute_number == INVALID)
- PSRCSTOP(badattr);
- else
- PSRCSTOP(attrib);
- }
+ if (c == '=' ) PUTC('=');
+ if (context->current_attribute_number == INVALID)
+ PSRCSTOP(badattr);
+ else
+ PSRCSTOP(attrib);
if (c == '>') {
- if (context->current_tag != context->unknown_tag)
- PSRCSTOP(tag);
- else
- PSRCSTOP(badtag);
PSRCSTART(abracket);
PUTC('>');
PSRCSTOP(abracket);
@@ -3158,45 +3614,36 @@ top1:
if (WHITE(c))
break; /* Gap after attribute */
if (c == '>') { /* End of tag */
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
- if (context->current_attribute_number == INVALID)
+ if (context->current_attribute_number == INVALID) {
PSRCSTOP(badattr);
- else
+ } else {
PSRCSTOP(attrib);
- if (context->current_tag != context->unknown_tag)
- PSRCSTOP(tag);
- else
- PSRCSTOP(badtag);
+ }
PSRCSTART(abracket);
PUTC('>');
PSRCSTOP(abracket);
- } else
+ } else
#endif
if (context->current_tag->name)
start_element(context);
context->state = S_text;
break;
} else if (c == '=') {
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PUTC('=');
- if (context->current_attribute_number == INVALID)
+ if (context->current_attribute_number == INVALID) {
PSRCSTOP(badattr);
- else
+ } else {
PSRCSTOP(attrib);
+ }
}
#endif
context->state = S_equals;
break;
}
-#ifdef USE_PSRC
- /* we are here because this char seemed the beginning of attrname */
- if (psrc_view && context->current_attribute_number == INVALID) {
- PSRCSTOP(badattr);
- PUTC(' ');
- }
-#endif
HTChunkPutc(string, c);
context->state = S_attr; /* Get next attribute */
break;
@@ -3205,13 +3652,9 @@ top1:
if (WHITE(c))
break; /* Before attribute value */
if (c == '>') { /* End of tag */
- CTRACE(tfp, "SGML: found = but no value\n");
-#ifdef USE_PSRC
+ CTRACE((tfp, "SGML: found = but no value\n"));
+#ifdef USE_PRETTYSRC
if (psrc_view) {
- if (context->current_tag != context->unknown_tag)
- PSRCSTOP(tag);
- else
- PSRCSTOP(badtag);
PSRCSTART(abracket);
PUTC('>');
PSRCSTOP(abracket);
@@ -3223,7 +3666,7 @@ top1:
break;
} else if (c == '\'') {
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(attrval);
PUTC(c);
@@ -3233,7 +3676,7 @@ top1:
break;
} else if (c == '"') {
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(attrval);
PUTC(c);
@@ -3242,31 +3685,31 @@ top1:
context->state = S_dquoted;
break;
}
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view)
PSRCSTART(attrval);
#endif
context->state = S_value;
- /* no break! fall through to S_value and proccess current `c` */
+ /* no break! fall through to S_value and process current `c` */
case S_value:
if (WHITE(c) || (c == '>')) { /* End of word */
HTChunkTerminate(string) ;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
/*PSRCSTART(attrval);*/
- if (cur_attr_is_name) {
+ if (attr_is_name) {
HTStartAnchor(context->target, string->data, NULL);
(*context->actions->end_element)(
context->target,
HTML_A,
(char **)&context->include);
- } else if (cur_attr_is_href) {
+ } else if (attr_is_href) {
PSRCSTART(href);
HTStartAnchor(context->target,NULL,string->data);
}
PUTS_TR(string->data);
- if (cur_attr_is_href) {
+ if (attr_is_href) {
(*context->actions->end_element)(
context->target,
HTML_A,
@@ -3276,15 +3719,22 @@ top1:
PSRCSTOP(attrval);
} else
#endif
+#ifdef CJK_EX /* Quick hack. - JH7AYN */
+ { char jis_buf[512];
+ if (string->data[0] == '$') {
+ if (string->data[1] == 'B' || string->data[1] == '@') {
+ jis_buf[0] = '\033';
+ strcpy(jis_buf + 1, string->data);
+ TO_EUC((CONST unsigned char *)jis_buf, (unsigned char *)string->data);
+ }
+ }
+ }
+#endif
handle_attribute_value(context, string->data);
string->size = 0;
if (c == '>') { /* End of tag */
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
- if (context->current_tag != context->unknown_tag)
- PSRCSTOP(tag);
- else
- PSRCSTOP(badtag);
PSRCSTART(abracket);
PUTC('>');
PSRCSTOP(abracket);
@@ -3306,10 +3756,10 @@ top1:
context->T.trans_from_uni)) {
if (clong == 0xfffd && saved_char_in &&
HTPassEightBitRaw &&
- (unsigned char)saved_char_in >=
+ UCH(saved_char_in) >=
LYlowest_eightbit[context->outUCLYhndl]) {
HTChunkPutUtf8Char(string,
- (0xf000 | (unsigned char)saved_char_in));
+ (0xf000 | UCH(saved_char_in)));
} else {
HTChunkPutUtf8Char(string, clong);
}
@@ -3323,21 +3773,21 @@ top1:
case S_squoted: /* Quoted attribute value */
if (c == '\'') { /* End of attribute value */
HTChunkTerminate(string) ;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
/*PSRCSTART(attrval);*/
- if (cur_attr_is_name) {
+ if (attr_is_name) {
HTStartAnchor(context->target,string->data,NULL);
(*context->actions->end_element)(
context->target,
HTML_A,
(char **)&context->include);
- } else if (cur_attr_is_href) {
+ } else if (attr_is_href) {
PSRCSTART(href);
HTStartAnchor(context->target,NULL,string->data);
}
PUTS_TR(string->data);
- if (cur_attr_is_href) {
+ if (attr_is_href) {
(*context->actions->end_element)(
context->target,
HTML_A,
@@ -3368,10 +3818,10 @@ top1:
context->T.trans_from_uni)) {
if (clong == 0xfffd && saved_char_in &&
HTPassEightBitRaw &&
- (unsigned char)saved_char_in >=
+ UCH(saved_char_in) >=
LYlowest_eightbit[context->outUCLYhndl]) {
HTChunkPutUtf8Char(string,
- (0xf000 | (unsigned char)saved_char_in));
+ (0xf000 | UCH(saved_char_in)));
} else {
HTChunkPutUtf8Char(string, clong);
}
@@ -3387,21 +3837,21 @@ top1:
(soft_dquotes && /* If emulating old Netscape bug, treat '>' */
c == '>')) { /* as a co-terminator of dquoted and tag */
HTChunkTerminate(string) ;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
/*PSRCSTART(attrval);*/
- if (cur_attr_is_name) {
+ if (attr_is_name) {
HTStartAnchor(context->target,string->data,NULL);
(*context->actions->end_element)(
context->target,
HTML_A,
(char **)&context->include);
- } else if (cur_attr_is_href) {
+ } else if (attr_is_href) {
PSRCSTART(href);
HTStartAnchor(context->target,NULL,string->data);
}
PUTS_TR(string->data);
- if (cur_attr_is_href) {
+ if (attr_is_href) {
(*context->actions->end_element)(
context->target,
HTML_A,
@@ -3435,10 +3885,10 @@ top1:
context->T.trans_from_uni)) {
if (clong == 0xfffd && saved_char_in &&
HTPassEightBitRaw &&
- (unsigned char)saved_char_in >=
+ UCH(saved_char_in) >=
LYlowest_eightbit[context->outUCLYhndl]) {
HTChunkPutUtf8Char(string,
- (0xf000 | (unsigned char)saved_char_in));
+ (0xf000 | UCH(saved_char_in)));
} else {
HTChunkPutUtf8Char(string, clong);
}
@@ -3450,11 +3900,12 @@ top1:
break;
case S_end: /* </ */
- if (TOASCII(unsign_c) < 127 && isalnum((unsigned char)c)) { /* S/390 -- gil -- 1247 */
+ if (TOASCII(unsign_c) < 127 && (string->size ? /* S/390 -- gil -- 1247 */
+ IsNmChar(c) : IsNmStart(c))) {
HTChunkPutc(string, c);
} else { /* End of end tag name */
HTTag * t = 0;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
BOOL psrc_tagname_processed = FALSE;
#endif
@@ -3466,8 +3917,8 @@ top1:
t = SGMLFindTag(dtd, string->data);
}
if (!t || t == context->unknown_tag) {
- CTRACE(tfp, "Unknown end tag </%s>\n", string->data);
-#ifdef USE_PSRC
+ CTRACE((tfp, "Unknown end tag </%s>\n", string->data));
+#ifdef USE_PRETTYSRC
if (psrc_view) {
PSRCSTART(abracket);
PUTC('<');
@@ -3480,25 +3931,34 @@ top1:
else
LYUpperCase(string->data);
}
- PUTS(string->data); PSRCSTOP(badtag);
- PSRCSTART(abracket); PUTC('>'); PSRCSTOP(abracket);
+ PUTS(string->data);
+ if (c != '>') {
+ PUTC(c);
+ } else {
+ PSRCSTOP(badtag);
+ PSRCSTART(abracket); PUTC('>'); PSRCSTOP(abracket);
+ }
psrc_tagname_processed=TRUE;
}
} else if (psrc_view) {
#endif
} else {
- BOOL tag_OK = (c == '>' || WHITE(c));
+ BOOL tag_OK = (BOOL) (c == '>' || WHITE(c));
#if OPT
- HTMLElement e = context->current_tag - context->dtd->tags;
+ HTMLElement e = TAGNUM_OF_TAGP(t);
int branch = 2; /* it can be 0,1,2*/
#endif
context->current_tag = t;
+ if (HAS_ALT_TAGNUM(TAGNUM_OF_TAGP(t)) &&
+ context->element_stack &&
+ ALT_TAGP(t) == context->element_stack->tag)
+ context->element_stack->tag = NORMAL_TAGP(context->element_stack->tag);
#if OPT
+ if (tag_OK
#ifdef EXTENDED_HTMLDTD
- if (tag_OK && Old_DTD) {
-#else
- if (tag_OK) {
+ && Old_DTD
#endif
+ ) {
switch (e) {
case HTML_DD: case HTML_DT: case HTML_LI: case HTML_LH :
case HTML_TD: case HTML_TH: case HTML_TR: case HTML_THEAD:
@@ -3511,6 +3971,8 @@ top1:
case HTML_P: case HTML_STRONG: case HTML_TT: case HTML_U:
branch = 1;
break;
+ default:
+ break;
}
}
#endif
@@ -3524,9 +3986,10 @@ top1:
} else
#endif /* EXTENDED_HTMLDTD */
-
-#if !OPT
if (tag_OK &&
+#if OPT
+ (branch == 0)
+#else
(!strcasecomp(string->data, "DD") ||
!strcasecomp(string->data, "DT") ||
!strcasecomp(string->data, "LI") ||
@@ -3537,26 +4000,28 @@ top1:
!strcasecomp(string->data, "THEAD") ||
!strcasecomp(string->data, "TFOOT") ||
!strcasecomp(string->data, "TBODY") ||
- !strcasecomp(string->data, "COLGROUP"))) {
-#else
- if (tag_OK && branch == 0) {
+ !strcasecomp(string->data, "COLGROUP"))
#endif
+ ) {
/*
** Don't treat these end tags as invalid,
** nor act on them. - FM
*/
- CTRACE(tfp, "SGML: `</%s%c' found! ***Ignoring it.\n",
- string->data, c);
+ CTRACE((tfp, "SGML: `</%s%c' found! Ignoring it.\n",
+ string->data, c));
string->size = 0;
context->current_attribute_number = INVALID;
if (c != '>') {
context->state = S_junk_tag;
} else {
+ context->current_tag = NULL;
context->state = S_text;
}
break;
-#if !OPT
} else if (tag_OK &&
+#if OPT
+ (branch == 1)
+#else
(!strcasecomp(string->data, "A") ||
!strcasecomp(string->data, "B") ||
!strcasecomp(string->data, "BLINK") ||
@@ -3568,10 +4033,9 @@ top1:
!strcasecomp(string->data, "P") ||
!strcasecomp(string->data, "STRONG") ||
!strcasecomp(string->data, "TT") ||
- !strcasecomp(string->data, "U"))) {
-#else
- } else if (tag_OK && branch == 1) {
+ !strcasecomp(string->data, "U"))
#endif
+ ) {
/*
** Handle end tags for container elements declared
** as SGML_EMPTY to prevent "expected tag substitution"
@@ -3587,22 +4051,25 @@ top1:
/*
** It is not at FORM end tag, so ignore it. - FM
*/
- CTRACE(tfp, "SGML: ***Ignoring end tag </%s> in SELECT block.\n",
- string->data);
+ CTRACE((tfp, "SGML: ***Ignoring end tag </%s> in SELECT block.\n",
+ string->data));
} else {
/*
** End the SELECT block and then
** handle the FORM end tag. - FM
*/
- CTRACE(tfp, "SGML: ***Faking SELECT end tag before </%s> end tag.\n",
- string->data);
+ CTRACE((tfp, "SGML: ***Faking SELECT end tag before </%s> end tag.\n",
+ string->data));
end_element(context,
SGMLFindTag(context->dtd, "SELECT"));
- CTRACE(tfp, "SGML: End </%s>\n", string->data);
+ CTRACE((tfp, "SGML: End </%s>\n", string->data));
+#ifdef USE_PRETTYSRC
+ if (!psrc_view) /* Don't actually call if viewing psrc - kw */
+#endif
(*context->actions->end_element)
(context->target,
- (context->current_tag - context->dtd->tags),
+ TAGNUM_OF_TAGP(context->current_tag),
(char **)&context->include);
}
} else if (!strcasecomp(string->data, "P")) {
@@ -3610,8 +4077,8 @@ top1:
** Treat a P end tag like a P start tag (Ugh,
** what a hack! 8-). - FM
*/
- CTRACE(tfp, "SGML: `</%s%c' found! ***Treating as '<%s%c'.\n",
- string->data, c, string->data, c);
+ CTRACE((tfp, "SGML: `</%s%c' found! Treating as '<%s%c'.\n",
+ string->data, c, string->data, c));
{
int i;
for (i = 0;
@@ -3623,11 +4090,14 @@ top1:
if (context->current_tag->name)
start_element(context);
} else {
- CTRACE(tfp, "SGML: End </%s>\n", string->data);
+ CTRACE((tfp, "SGML: End </%s>\n", string->data));
+#ifdef USE_PRETTYSRC
+ if (!psrc_view) /* Don't actually call if viewing psrc - kw */
+#endif
(*context->actions->end_element)
(context->target,
- (context->current_tag - context->dtd->tags),
+ TAGNUM_OF_TAGP(context->current_tag),
(char **)&context->include);
}
string->size = 0;
@@ -3635,6 +4105,7 @@ top1:
if (c != '>') {
context->state = S_junk_tag;
} else {
+ context->current_tag = NULL;
context->state = S_text;
}
break;
@@ -3646,7 +4117,7 @@ top1:
}
}
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view && !psrc_tagname_processed) {
PSRCSTART(abracket);
PUTC('<');
@@ -3660,9 +4131,10 @@ top1:
LYUpperCase(string->data);
}
PUTS(string->data); PSRCSTOP(tag);
- if ( c != '>' )
+ if ( c != '>' ) {
PSRCSTART(badtag);
- else {
+ PUTC(c);
+ } else {
PSRCSTART(abracket);
PUTC('>');
PSRCSTOP(abracket);
@@ -3674,9 +4146,10 @@ top1:
context->current_attribute_number = INVALID;
if (c != '>') {
if (!WHITE(c))
- CTRACE(tfp,"SGML: `</%s%c' found!\n", string->data, c);
+ CTRACE((tfp,"SGML: `</%s%c' found!\n", string->data, c));
context->state = S_junk_tag;
} else {
+ context->current_tag = NULL;
context->state = S_text;
}
}
@@ -3728,6 +4201,8 @@ top1:
context->state = S_esc;
}
PUTC(c);
+ if (c < 32)
+ context->state = S_text;
break;
case S_esc_sq: /* Expecting '$'or '(' following CJK ESC. */
@@ -3825,32 +4300,61 @@ top1:
break;
case S_junk_tag:
+ case S_junk_pi:
if (c == '>') {
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
- PSRCSTOP(badtag);
+ if (context->state == S_junk_tag) {
+ PSRCSTOP(badtag);
+ }
PSRCSTART(abracket);
PUTC('>');
PSRCSTOP(abracket);
- seen_letter_in_junk_tag = FALSE;
+ context->seen_nonwhite_in_junk_tag = FALSE;
}
#endif
+ context->current_tag = NULL;
context->state = S_text;
}
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
else if (psrc_view) {
/*pack spaces until first non-space is seen*/
- if (!seen_letter_in_junk_tag) {
+ if (!context->seen_nonwhite_in_junk_tag) {
if (!WHITE(c)) {
- seen_letter_in_junk_tag = TRUE;
+ context->seen_nonwhite_in_junk_tag = TRUE;
PUTC(c);
- };
+ }
} else
PUTC(c);
- };
+ }
#endif
} /* switch on context->state */
+ CTRACE2(TRACE_SGML, (tfp, "SGML after %s|%.*s|%c\n",
+ state_name(context->state),
+ string->size,
+ string->data != NULL ? string->data : "", UCH(c)));
+
+after_switch:
+ /*
+ ** Check whether an external function has added
+ ** anything to the include buffer. If so, move the
+ ** new stuff to the beginning of active_include. - kw
+ */
+ if (context->include != NULL) {
+ if (context->include[0] == '\0') {
+ FREE(context->include);
+ } else {
+ if (context->active_include &&
+ context->active_include[context->include_index] != '\0')
+ StrAllocCat(context->include,
+ context->active_include + context->include_index);
+ FREE(context->active_include);
+ context->active_include = context->include;
+ context->include_index = 0;
+ context->include = NULL;
+ }
+ }
/*
** Check whether we've added anything to the recover buffer. - FM
@@ -3867,17 +4371,42 @@ top1:
}
/*
- ** Check whether an external function has added
- ** anything to the include buffer. - FM
+ ** Check whether an external function had added
+ ** anything to the include buffer; it should now be
+ ** in active_include. - FM / kw
*/
- if (context->include != NULL) {
- if (context->include[context->include_index] == '\0') {
- FREE(context->include);
+ if (context->active_include != NULL) {
+ if (context->active_include[context->include_index] == '\0') {
+ FREE(context->active_include);
context->include_index = 0;
} else {
- c = context->include[context->include_index];
- context->include_index++;
- goto top;
+ if (context->current_tag_charset == UTF8 ||
+ context->T.trans_from_uni) {
+ /*
+ * If it looks like we would have fed UTF-8 to the
+ * next processing stage, assume that whatever we were
+ * fed back is in UTF-8 form, too. This won't be always
+ * true for all uses of the include buffer, but it's a
+ * start. - kw
+ */
+ char *puni = context->active_include + context->include_index;
+ c = *puni;
+ clong = UCGetUniFromUtf8String(&puni);
+ if (clong < 256 && clong >= 0) {
+ c = ((char)(clong & 0xff));
+ }
+ saved_char_in = '\0';
+ context->include_index = puni - context->active_include + 1;
+ goto top1;
+ } else {
+ /*
+ * Otherwise assume no UTF-8 - do charset-naive processing
+ * and hope for the best. - kw
+ */
+ c = context->active_include[context->include_index];
+ context->include_index++;
+ goto top;
+ }
}
}
@@ -3961,9 +4490,13 @@ PUBLIC HTStream* SGML_new ARGS3(
context->actions = (CONST HTStructuredClass*)(((HTStream*)target)->isa);
/* Ugh: no OO */
context->unknown_tag = &HTTag_unrecognized;
+/* context->extra_tags = dtd->tags + dtd->number_of_tags; */
+ context->current_tag = context->slashedtag = NULL;
context->state = S_text;
+ context->kanji_buf = '\0';
context->element_stack = 0; /* empty */
context->inSELECT = FALSE;
+ context->no_lynx_specialcodes = NO; /* special codes normally generated */
#ifdef CALLERDATA
context->callerData = (void*) callerData;
#endif /* CALLERDATA */
@@ -4001,20 +4534,22 @@ PUBLIC HTStream* SGML_new ARGS3(
context->recover = NULL;
context->recover_index = 0;
context->include = NULL;
+ context->active_include = NULL;
context->include_index = 0;
context->url = NULL;
context->csi = NULL;
context->csi_index = 0;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view) {
psrc_view = FALSE;
- SGML_string(context, "<HTML><HEAD><TITLE>source</TITLE></HEAD>"
- "<BODY><PRE>") ;
+ mark_htext_as_source = TRUE;
+ SGML_string(context,
+ "<HTML><HEAD><TITLE>source</TITLE></HEAD><BODY><PRE>");
psrc_view = TRUE;
psrc_convert_string = FALSE;
sgml_in_psrc_was_initialized = TRUE;
- seen_letter_in_junk_tag = FALSE;
+ context->seen_nonwhite_in_junk_tag = FALSE;
}
#endif
@@ -4132,20 +4667,35 @@ PUBLIC void JISx0201TO0208_EUC ARGS4(
}
}
+PRIVATE int IS_SJIS_STR ARGS1(CONST unsigned char *, str)
+{
+ CONST unsigned char *s;
+ unsigned char ch;
+ int is_sjis = 0;
+
+ s = str;
+ while ((ch = *s++) != '\0') {
+ if (ch & 0x80)
+ if (IS_SJIS(ch, *s, is_sjis))
+ return 1;
+ }
+ return 0;
+}
+
PUBLIC unsigned char * SJIS_TO_JIS1 ARGS3(
register unsigned char, HI,
register unsigned char, LO,
register unsigned char *, JCODE)
{
- HI -= (HI <= 0x9F) ? 0x71 : 0xB1;
- HI = (HI << 1) + 1;
+ HI -= UCH((HI <= 0x9F) ? 0x71 : 0xB1);
+ HI = UCH((HI << 1) + 1);
if (0x7F < LO)
LO--;
if (0x9E <= LO) {
- LO -= 0x7D;
+ LO -= UCH(0x7D);
HI++;
} else {
- LO -= 0x1F;
+ LO -= UCH(0x1F);
}
JCODE[0] = HI;
JCODE[1] = LO;
@@ -4158,15 +4708,15 @@ PUBLIC unsigned char * JIS_TO_SJIS1 ARGS3(
register unsigned char *, SJCODE)
{
if (HI & 1)
- LO += 0x1F;
+ LO += UCH(0x1F);
else
- LO += 0x7D;
+ LO += UCH(0x7D);
if (0x7F <= LO)
LO++;
- HI = ((HI - 0x21) >> 1) + 0x81;
+ HI = UCH(((HI - 0x21) >> 1) + 0x81);
if (0x9F < HI)
- HI += 0x40;
+ HI += UCH(0x40);
SJCODE[0] = HI;
SJCODE[1] = LO;
return SJCODE;
@@ -4177,8 +4727,9 @@ PUBLIC unsigned char * EUC_TO_SJIS1 ARGS3(
unsigned char, LO,
register unsigned char *, SJCODE)
{
- if (HI == 0x8E) JISx0201TO0208_EUC(HI, LO, &HI, &LO);
- JIS_TO_SJIS1(HI&0x7F, LO&0x7F, SJCODE);
+ if (HI == 0x8E)
+ JISx0201TO0208_EUC(HI, LO, &HI, &LO);
+ JIS_TO_SJIS1(UCH(HI & 0x7F), UCH(LO & 0x7F), SJCODE);
return SJCODE;
}
@@ -4189,8 +4740,8 @@ PUBLIC void JISx0201TO0208_SJIS ARGS3(
{
unsigned char SJCODE[2];
- JISx0201TO0208_EUC(216, I, OHI, OLO);
- JIS_TO_SJIS1(*OHI&0x7F, *OLO&0x7F, SJCODE);
+ JISx0201TO0208_EUC(0x8E, I, OHI, OLO);
+ JIS_TO_SJIS1(UCH(*OHI & 0x7F), UCH(*OLO & 0x7F), SJCODE);
*OHI = SJCODE[0];
*OLO = SJCODE[1];
}
@@ -4213,17 +4764,17 @@ PUBLIC unsigned char * SJIS_TO_EUC ARGS2(
register unsigned char hi, lo, *sp, *dp;
register int in_sjis = 0;
- for (sp = src, dp = dst; (0 != (hi = sp[0]));) {
+ in_sjis = IS_SJIS_STR(src);
+ for (sp = src, dp = dst; (hi = sp[0]) != '\0';) {
lo = sp[1];
if (TREAT_SJIS && IS_SJIS(hi, lo, in_sjis)) {
- SJIS_TO_JIS1(hi,lo,dp);
+ SJIS_TO_JIS1(hi, lo, dp);
dp[0] |= 0x80;
dp[1] |= 0x80;
dp += 2;
sp += 2;
- } else {
+ } else
*dp++ = *sp++;
- }
}
*dp = 0;
return dst;
@@ -4238,7 +4789,7 @@ PUBLIC unsigned char * EUC_TO_SJIS ARGS2(
for (sp = src, dp = dst; *sp;) {
if (*sp & 0x80) {
if (sp[1] && (sp[1] & 0x80)) {
- JIS_TO_SJIS1(sp[0]&0x7F, sp[1]&0x7F, dp);
+ JIS_TO_SJIS1(UCH(sp[0] & 0x7F), UCH(sp[1] & 0x7F), dp);
dp += 2;
sp += 2;
} else {
@@ -4252,7 +4803,9 @@ PUBLIC unsigned char * EUC_TO_SJIS ARGS2(
return dst;
}
-PUBLIC unsigned char * EUC_TO_JIS ARGS4(
+#define Strcpy(a,b) (strcpy((char*)a,(CONST char*)b),&a[strlen((CONST char*)a)])
+
+PUBLIC unsigned char *EUC_TO_JIS ARGS4(
unsigned char *, src,
unsigned char *, dst,
CONST char *, toK,
@@ -4262,87 +4815,151 @@ PUBLIC unsigned char * EUC_TO_JIS ARGS4(
register unsigned char cch;
register unsigned char *sp = src;
register unsigned char *dp = dst;
- register int i;
+ int is_JIS = 0;
- while (0 != (cch = *sp++)) {
+ while ((cch = *sp++) != '\0') {
if (cch & 0x80) {
+ if (!IS_EUC(cch, *sp)) {
+ if (cch == 0xA0 && is_JIS) /* ignore NBSP */
+ continue;
+ is_JIS++;
+ *dp++ = cch;
+ continue;
+ }
if (!kana_mode) {
- kana_mode = ~kana_mode;
- for (i = 0; toK[i]; i++) {
- *dp++ = (unsigned char)toK[i];
- }
+ kana_mode = UCH(~kana_mode);
+ dp = Strcpy(dp, toK);
}
if (*sp & 0x80) {
- *dp++ = cch & ~0x80;
- *dp++ = *sp++ & ~0x80;
+ *dp++ = UCH(cch & ~0x80);
+ *dp++ = UCH(*sp++ & ~0x80);
}
} else {
if (kana_mode) {
- kana_mode = ~kana_mode;
- for (i = 0; toA[i]; i++) {
- *dp++ = (unsigned char)toA[i];
- *dp = '\0';
- }
+ kana_mode = UCH(~kana_mode);
+ dp = Strcpy(dp, toA);
}
*dp++ = cch;
}
}
- if (kana_mode) {
- for (i = 0; toA[i]; i++) {
- *dp++ = (unsigned char)toA[i];
- }
- }
+ if (kana_mode)
+ dp = Strcpy(dp, toA);
if (dp)
*dp = 0;
return dst;
}
-PUBLIC unsigned char * TO_EUC ARGS2(
+#define IS_JIS7(c1,c2) (0x20<(c1)&&(c1)<0x7F && 0x20<(c2)&&(c2)<0x7F)
+#define SO ('N'-0x40)
+#define SI ('O'-0x40)
+
+PUBLIC int repair_JIS = 0;
+
+PRIVATE CONST unsigned char *repairJIStoEUC ARGS2(
+ CONST unsigned char *, src,
+ unsigned char **, dstp)
+{
+ CONST unsigned char *s;
+ unsigned char *d, ch1, ch2;
+
+ d = *dstp;
+ s = src;
+ while ((ch1 = s[0]) && (ch2 = s[1])) {
+ s += 2;
+ if (ch1 == '(')
+ if (ch2 == 'B' || ch2 == 'J') {
+ *dstp = d;
+ return s;
+ }
+ if (!IS_JIS7(ch1, ch2))
+ return 0;
+
+ *d++ = UCH(0x80 | ch1);
+ *d++ = UCH(0x80 | ch2);
+ }
+ return 0;
+}
+
+PUBLIC unsigned char *TO_EUC ARGS2(
CONST unsigned char *, jis,
unsigned char *, euc)
{
register CONST unsigned char *s;
- register unsigned char *d, c, jis_stat;
+ register unsigned char c, jis_stat;
+ unsigned char *d;
register int to1B, to2B;
register int in_sjis = 0;
+ static int nje;
+ int n8bits;
+ int is_JIS;
+ nje++;
+ n8bits = 0;
s = jis;
d = euc;
jis_stat = 0;
to2B = TO_2BCODE;
to1B = TO_1BCODE;
-
- while (0 != (c = *s++)) {
+ in_sjis = IS_SJIS_STR(jis);
+ is_JIS = 0;
+
+ while ((c = *s++) != '\0') {
+ if (c == 0x80)
+ continue; /* ignore it */
+ if (c == 0xA0 && is_JIS)
+ continue; /* ignore Non-breaking space */
+
+ if (c == to2B && jis_stat == 0 && repair_JIS) {
+ if (*s == 'B' || *s == '@') {
+ CONST unsigned char *ts;
+ if ((ts = repairJIStoEUC(s + 1, &d)) != NULL) {
+ s = ts;
+ continue;
+ }
+ }
+ }
if (c == ESC) {
if (*s == to2B) {
- if ((s[1] == 'B') || (s[1] == '@') || (s[1] == 'A')) {
+ if ((s[1] == 'B') || (s[1] == '@')) {
jis_stat = 0x80;
s += 2;
- continue;
- } else if ((s[1] == '(') && s[2] && (s[2] == 'C')) {
- jis_stat = 0x80;
- s += 3;
+ is_JIS++;
continue;
}
- } else {
- if (*s == to1B) {
- if ((s[1]=='B') || (s[1]=='J') ||
- (s[1]=='H') || (s[1]=='T')) {
- jis_stat = 0;
- s += 2;
- continue;
- }
+ jis_stat = 0;
+ } else if (*s == to1B) {
+ jis_stat = 0;
+ if ((s[1] == 'B') || (s[1] == 'J') || (s[1] == 'H')) {
+ s += 2;
+ continue;
}
+ } else if (*s == ',') { /* MULE */
+ jis_stat = 0;
}
}
- if (IS_SJIS(c,*s,in_sjis)) {
+ if (c & 0x80)
+ n8bits++;
+
+ if (IS_SJIS(c, *s, in_sjis)) {
SJIS_TO_EUC1(c, *s, d);
d += 2;
s++;
+ is_JIS++;
+ } else if (jis_stat) {
+ if (c <= 0x20 || 0x7F <= c) {
+ *d++ = c;
+ if (c == '\n')
+ jis_stat = 0;
+ } else {
+ if (IS_JIS7(c, *s)) {
+ *d++ = jis_stat | c;
+ *d++ = jis_stat | *s++;
+ } else
+ *d++ = c;
+ }
} else {
- if (jis_stat && (0x20 < c)) {
- *d++ = jis_stat | c;
+ if (n8bits == 0 && (c == SI || c == SO)) {
} else {
*d++ = c;
}
@@ -4352,22 +4969,47 @@ PUBLIC unsigned char * TO_EUC ARGS2(
return euc;
}
+#define non94(ch) ((ch) <= 0x20 || (ch) == 0x7F)
+
+PRIVATE int is_EUC_JP ARGS1(unsigned char *, euc)
+{
+ unsigned char *cp;
+ int ch1, ch2;
+
+ for (cp = euc; (ch1 = *cp) != '\0'; cp++) {
+ if (ch1 & 0x80) {
+ ch2 = cp[1] & 0xFF;
+ if ((ch2 & 0x80) == 0) {
+ /* sv1log("NOT_EUC1[%x][%x]\n",ch1,ch2); */
+ return 0;
+ }
+ if (non94(ch1 & 0x7F) || non94(ch2 & 0x7F)) {
+ /* sv1log("NOT_EUC2[%x][%x]\n",ch1,ch2); */
+ return 0;
+ }
+ cp++;
+ }
+ }
+ return 1;
+}
+
PUBLIC void TO_SJIS ARGS2(
CONST unsigned char *, any,
unsigned char *, sjis)
{
unsigned char *euc;
- if (!any || !sjis)
- return;
-
- euc = (unsigned char*)malloc(strlen((CONST char *)any)+1);
- if (euc == NULL)
+ euc = malloc(strlen((CONST char *) any) + 1);
+#ifdef CJK_EX
+ if (!euc)
outofmem(__FILE__, "TO_SJIS");
-
+#endif
TO_EUC(any, euc);
- EUC_TO_SJIS(euc, sjis);
- FREE(euc);
+ if (is_EUC_JP(euc))
+ EUC_TO_SJIS(euc, sjis);
+ else
+ strcpy((char *) sjis, (CONST char *) any);
+ free(euc);
}
PUBLIC void TO_JIS ARGS2(
@@ -4376,14 +5018,18 @@ PUBLIC void TO_JIS ARGS2(
{
unsigned char *euc;
- if (!any || !jis)
+ if (any[0] == 0) {
+ jis[0] = 0;
return;
-
- euc = (unsigned char*)malloc(strlen((CONST char *)any)+1);
- if (euc == NULL)
+ }
+ euc = malloc(strlen((CONST char *) any) + 1);
+#ifdef CJK_EX
+ if (!euc)
outofmem(__FILE__, "TO_JIS");
-
+#endif
TO_EUC(any, euc);
+ is_EUC_JP(euc);
EUC_TO_JIS(euc, jis, TO_KANJI, TO_ASCII);
- FREE(euc);
+
+ free(euc);
}
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/SGML.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/SGML.h
index 9ae3ae365dd..315b5ee1059 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/SGML.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/SGML.h
@@ -19,28 +19,36 @@
#include <HTStream.h>
#include <HTAnchor.h>
+#include <LYJustify.h>
/*
SGML content types
*/
-typedef enum _SGMLContent {
+typedef enum {
SGML_EMPTY, /* No content. */
SGML_LITTERAL, /* Literal character data. Recognize exact close tag only.
Old www server compatibility only! Not SGML */
- SGML_CDATA, /* Character data. Recognize </ only. */
- SGML_RCDATA, /* Replaceable character data. Recognize </ and &ref; */
+ SGML_CDATA, /* Character data. Recognize </ only.
+ (But we treat it just as SGML_LITTERAL.) */
+ SGML_SCRIPT, /* Like CDATA, but allow it to be a comment */
+ SGML_RCDATA, /* Replaceable character data. Should recognize </ and &ref;
+ (but we treat it like SGML_MIXED for old times' sake). */
SGML_MIXED, /* Elements and parsed character data.
Recognize all markup. */
- SGML_ELEMENT, /* Any data found will be returned as an error. */
- SGML_PCDATA /* Added by KW. */
+ SGML_ELEMENT, /* Any data found should be regarded as an error.
+ (But we treat it just like SGML_MIXED.) */
+ SGML_PCDATA /* Should contain no elements but &ref; is parsed.
+ (We treat it like SGML_CDATA wrt. contained tags
+ i.e. pass them on literally, i.e. like we should
+ treat SGML_RCDATA) (added by KW). */
} SGMLContent;
typedef struct {
char * name; /* The (constant) name of the attribute */
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
char type; /* code of the type of the attribute. Code
values are in HTMLDTD.h */
#endif
@@ -69,7 +77,7 @@ typedef int TagClass;
text directly */
/* insertions */
#define Tgc_BRlike 0x01000 /* BR,IMG,TAB allowed in any text */
-#define Tgc_APPLETlike 0x02000 /* APPLET,OBJECT,EMBED,SCRIPT */
+#define Tgc_APPLETlike 0x02000 /* APPLET,OBJECT,EMBED,SCRIPT;BUTTON */
#define Tgc_HRlike 0x04000 /* HR,MARQUEE can contain all kinds of things
and/or are not allowed (?) in running text */
#define Tgc_MAPlike 0x08000 /* MAP,AREA some specials that never contain
@@ -89,9 +97,17 @@ typedef int TagFlags;
#define Tgf_mafse 0x00004 /* Make Attribute-Free Start-tag End instead
(if found invalid) */
#define Tgf_strict 0x00008 /* Ignore contained invalid elements,
- don't pass them on */
+ don't pass them on; or other variant
+ handling for some content types */
#define Tgf_nreie 0x00010 /* Not Really Empty If Empty,
used by color style code */
+#define Tgf_frecyc 0x00020 /* Pass element content on in a form that
+ allows recycling, i.e. don't translate to
+ output (display) character set yet (treat
+ content similar to attribute values) */
+#define Tgf_nolyspcl 0x00040 /* Don't generate lynx special characters
+ for soft hyphen and various spaces (nbsp,
+ ensp,..) */
/* A tag structure describes an SGML element.
** -----------------------------------------
@@ -113,6 +129,9 @@ struct _tag{
#ifdef USE_COLOR_STYLE
int name_len; /* The length of the name */
#endif
+#ifdef EXP_JUSTIFY_ELTS
+ BOOL can_justify; /* justification allowed?*/
+#endif
attr * attributes; /* The list of acceptable attributes */
int number_of_attributes; /* Number of possible attributes */
SGMLContent contents; /* End only on end tag @@ */
@@ -196,7 +215,7 @@ typedef struct _HTStructuredClass{
CONST char * str,
int len));
- void (*start_element) PARAMS((
+ int (*start_element) PARAMS((
HTStructured* me,
int element_number,
CONST BOOL* attribute_present,
@@ -204,7 +223,7 @@ typedef struct _HTStructuredClass{
int charset,
char ** include));
- void (*end_element) PARAMS((
+ int (*end_element) PARAMS((
HTStructured* me,
int element_number,
char ** include));
@@ -213,7 +232,7 @@ typedef struct _HTStructuredClass{
HTStructured* me,
int entity_number));
-}HTStructuredClass;
+} HTStructuredClass;
/*
Equivalents to the following functions possibly could be generalised
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/UCAux.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/UCAux.h
index 50cdf9baedd..44c9e881d01 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/UCAux.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/UCAux.h
@@ -34,7 +34,7 @@ typedef struct _UCTransParams UCTransParams;
#endif /* UCDEFS_H */
extern void UCSetTransParams PARAMS((
- UCTransParams * pT,
+ UCTransParams * pT,
int cs_in,
CONST LYUCcharset * p_in,
int cs_out,
@@ -66,9 +66,11 @@ extern BOOL UCPutUtf8_charstring PARAMS((
HTStream * target,
putc_func_t * actions,
UCode_t code));
-
+
extern BOOL UCConvertUniToUtf8 PARAMS((
UCode_t code,
char * buffer));
+extern UCode_t UCGetUniFromUtf8String PARAMS((char ** ppuni));
+
#endif /* UCAUX_H */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/UCDefs.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/UCDefs.h
index 53c3a807a5e..19007f75aa1 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/UCDefs.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/UCDefs.h
@@ -12,7 +12,8 @@ typedef struct _LYUCcharset {
CONST char * MIMEname;
int enc;
- int codepage; /* IBM OS/2 specific number */
+ int codepage; /* if positive, an IBM OS/2 specific number;
+ if negative, flag for no table translation */
/* parameters below are not used by chartrans mechanism, */
/* they describe some relationships against built-in Latin1 charset...*/
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/UCMap.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/UCMap.h
index 80ee73e7092..b412dc1e58a 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/UCMap.h
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/UCMap.h
@@ -51,6 +51,9 @@ extern int LATIN1; /* UCGetLYhndl_byMIME("iso-8859-1") */
extern int US_ASCII; /* UCGetLYhndl_byMIME("us-ascii") */
extern int UTF8; /* UCGetLYhndl_byMIME("utf-8") */
+#undef TRANSPARENT /* defined on Solaris in <sys/stream.h> */
+extern int TRANSPARENT; /* UCGetLYhndl_byMIME("x-transparent") */
+
/*
In general, Lynx translates letters from document charset to display charset.
If document charset is not specified or not recognized by Lynx, we fall back
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/makefile.in b/gnu/usr.bin/lynx/WWW/Library/Implementation/makefile.in
index 19def689e85..26b117514e1 100644
--- a/gnu/usr.bin/lynx/WWW/Library/Implementation/makefile.in
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/makefile.in
@@ -19,6 +19,7 @@ LYFLAGS = # FIXME: set in parent makefile
CC = @CC@
DEFS = @DEFS@
CPPFLAGS = @CPPFLAGS@
+_O = .o
INTLDIR_CPPFLAGS= @INTLDIR_CPPFLAGS@ -I$(top_srcdir)/intl
@@ -50,7 +51,7 @@ VC = 2.14
# (originally CommonMakefile)
# If this env var is set to something else Some makes will use that instead
-SHELL = /bin/sh
+SHELL = @CONFIG_SHELL@
RANLIB = @RANLIB@
@@ -78,7 +79,7 @@ LOB = .
# uncomment these and fill in WAISINC for adding direct wais access
# to Lynx.
#HTWAIS_c = $(CMN)/HTWAIS.c
-#HTWAIS_o = $(LOB)/HTWAIS.o
+#HTWAIS_o = $(LOB)/HTWAIS$(_O)
#WAIS = YES
#WAISINC = -I../../../../freeWAIS-0.202/ir
#WAISCFLAGS = -DDIRECT_WAIS
@@ -91,21 +92,21 @@ CFLAGS2 = $(CFLAGS) $(LYFLAGS) $(WAISCFLAGS) -I$(CMN) -DXMOSAIC_HACK -DACCESS_AU
COMPILE = $(ECHO) $(CC) $(CFLAGS2) -c
-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)/HTMLGen.o \
- $(LOB)/HTAtom.o $(LOB)/HTAnchor.o $(LOB)/HTStyle.o \
- $(LOB)/HTList.o $(LOB)/HTString.o \
- $(LOB)/HTRules.o $(LOB)/HTFormat.o $(LOB)/HTMIME.o \
- $(LOB)/HTNews.o $(LOB)/HTGopher.o \
- $(LOB)/HTTelnet.o $(LOB)/HTFinger.o $(LOB)/HTWSRC.o $(HTWAIS_o) \
- $(LOB)/HTAAUtil.o $(LOB)/HTAABrow.o \
- $(LOB)/HTGroup.o \
- $(LOB)/HTAAProt.o \
- $(LOB)/HTAssoc.o $(LOB)/HTLex.o $(LOB)/HTUU.o \
- $(LOB)/HTDOS.o
+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)/HTMLGen$(_O) \
+ $(LOB)/HTAtom$(_O) $(LOB)/HTAnchor$(_O) $(LOB)/HTStyle$(_O) \
+ $(LOB)/HTList$(_O) $(LOB)/HTString$(_O) \
+ $(LOB)/HTRules$(_O) $(LOB)/HTFormat$(_O) $(LOB)/HTMIME$(_O) \
+ $(LOB)/HTNews$(_O) $(LOB)/HTGopher$(_O) \
+ $(LOB)/HTTelnet$(_O) $(LOB)/HTFinger$(_O) $(LOB)/HTWSRC$(_O) $(HTWAIS_o) \
+ $(LOB)/HTAAUtil$(_O) $(LOB)/HTAABrow$(_O) \
+ $(LOB)/HTGroup$(_O) \
+ $(LOB)/HTAAProt$(_O) \
+ $(LOB)/HTAssoc$(_O) $(LOB)/HTLex$(_O) $(LOB)/HTUU$(_O) \
+ $(LOB)/HTDOS$(_O)
CFILES = $(CMN)HTParse.c $(CMN)HTAccess.c $(CMN)HTTP.c $(CMN)HTFile.c \
$(CMN)HTBTree.c \
@@ -135,7 +136,7 @@ HFILES = $(CMN)HTParse.h $(CMN)HTAccess.h $(CMN)HTTP.h $(CMN)HTFile.h \
$(CMN)HTFormat.h $(CMN)HTInit.h \
$(CMN)HTMIME.h $(CMN)HTNews.h \
$(CMN)HTGopher.h \
- $(CMN)HTUtils.h $(CMN)tcp.h $(CMN)HText.h \
+ $(CMN)HTUtils.h $(CMN)www_tcp.h $(CMN)HText.h \
$(CMN)HTTelnet.h $(CMN)HTFinger.h \
$(CMN)HTWAIS.h $(CMN)HTWSRC.h \
$(CMN)HTAABrow.h \
@@ -148,9 +149,9 @@ all : $(LOB)/libwww.a
lint:
$(LINT) $(LINTOPTS) $(CPPOPTS) $(srcdir)/../Implementation/*.c > ../../../lint.libwww
-.SUFFIXES: .i .h .html
+.SUFFIXES: $(_O) .i .h .html
-.c.o:
+.c$(_O):
@RULE_CC@
@ECHO_CC@$(CC) $(CPPOPTS) $(CFLAGS) -c $(srcdir)/$*.c
@@ -171,135 +172,136 @@ $(LOB)/libwww.a : $(COMMON)
# Clean up everything generatable except final products
clean :
- rm $(LOB)/*.o
+ rm -f core *.core *.leaks *.[oi] *.bak tags TAGS
+ rm $(LOB)/*$(_O)
# Common code
# -----------
-$(LOB)/HTList.o : $(OE) $(CMN)HTList.c $(CMN)HTUtils.h $(CMN)HTList.h
+$(LOB)/HTList$(_O) : $(OE) $(CMN)HTList.c $(CMN)HTUtils.h $(CMN)HTList.h
$(COMPILE) $(CMN)HTList.c
-$(LOB)/HTAnchor.o : $(OE) $(CMN)HTAnchor.c $(CMN)HTUtils.h $(CMN)HTList.h
+$(LOB)/HTAnchor$(_O) : $(OE) $(CMN)HTAnchor.c $(CMN)HTUtils.h $(CMN)HTList.h
$(COMPILE) $(CMN)HTAnchor.c
-$(LOB)/HTFormat.o : $(OE) $(CMN)HTFormat.c $(CMN)HTUtils.h $(CMN)HTList.h
+$(LOB)/HTFormat$(_O) : $(OE) $(CMN)HTFormat.c $(CMN)HTUtils.h $(CMN)HTList.h
$(COMPILE) $(CMN)HTFormat.c
-$(LOB)/HTMIME.o : $(OE) $(CMN)HTMIME.c $(CMN)HTUtils.h $(CMN)HTList.h
+$(LOB)/HTMIME$(_O) : $(OE) $(CMN)HTMIME.c $(CMN)HTUtils.h $(CMN)HTList.h
$(COMPILE) $(CMN)HTMIME.c
-$(LOB)/HTNews.o : $(OE) $(CMN)HTNews.c $(CMN)HTUtils.h $(CMN)HTList.h\
+$(LOB)/HTNews$(_O) : $(OE) $(CMN)HTNews.c $(CMN)HTUtils.h $(CMN)HTList.h\
$(CMN)HTMLDTD.h
$(COMPILE) $(CMN)HTNews.c
-$(LOB)/HTGopher.o : $(OE) $(CMN)HTGopher.c $(CMN)HTUtils.h $(CMN)HTList.h \
+$(LOB)/HTGopher$(_O) : $(OE) $(CMN)HTGopher.c $(CMN)HTUtils.h $(CMN)HTList.h \
$(CMN)HTMLDTD.h
$(COMPILE) $(CMN)HTGopher.c
-$(LOB)/HTTelnet.o : $(OE) $(CMN)HTTelnet.c $(CMN)HTUtils.h $(CMN)HTTelnet.h $(CMN)../../../userdefs.h
+$(LOB)/HTTelnet$(_O) : $(OE) $(CMN)HTTelnet.c $(CMN)HTUtils.h $(CMN)HTTelnet.h $(CMN)../../../userdefs.h
$(COMPILE) $(CMN)HTTelnet.c
-$(LOB)/HTFinger.o : $(OE) $(CMN)HTFinger.c $(CMN)HTUtils.h $(CMN)HTList.h \
+$(LOB)/HTFinger$(_O) : $(OE) $(CMN)HTFinger.c $(CMN)HTUtils.h $(CMN)HTList.h \
$(CMN)HTMLDTD.h
$(COMPILE) $(CMN)HTFinger.c
-$(LOB)/HTStyle.o : $(OE) $(CMN)HTStyle.c $(CMN)HTUtils.h
+$(LOB)/HTStyle$(_O) : $(OE) $(CMN)HTStyle.c $(CMN)HTUtils.h
$(COMPILE) $(CMN)HTStyle.c
-$(LOB)/HTAtom.o : $(OE) $(CMN)HTAtom.c $(CMN)HTUtils.h $(CMN)HTList.h
+$(LOB)/HTAtom$(_O) : $(OE) $(CMN)HTAtom.c $(CMN)HTUtils.h $(CMN)HTList.h
$(COMPILE) $(CMN)HTAtom.c
-$(LOB)/HTChunk.o : $(OE) $(CMN)HTChunk.c $(CMN)HTUtils.h
+$(LOB)/HTChunk$(_O) : $(OE) $(CMN)HTChunk.c $(CMN)HTUtils.h
$(COMPILE) $(CMN)HTChunk.c
-$(LOB)/HTString.o : $(OE) $(CMN)HTString.c $(CMN)HTUtils.h $(CMN)Version.make
+$(LOB)/HTString$(_O) : $(OE) $(CMN)HTString.c $(CMN)HTUtils.h $(CMN)Version.make
$(COMPILE) -DVC=\"$(VC)\" $(CMN)HTString.c
-$(LOB)/HTRules.o : $(OE) $(CMN)HTRules.c $(CMN)HTUtils.h $(CMN)Version.make \
+$(LOB)/HTRules$(_O) : $(OE) $(CMN)HTRules.c $(CMN)HTUtils.h $(CMN)Version.make \
$(CMN)HTAAProt.h
$(COMPILE) -DVC=\"$(VC)\" $(CMN)HTRules.c
-$(LOB)/SGML.o : $(OE) $(CMN)SGML.c $(CMN)HTUtils.h $(CMN)UCAux.h
+$(LOB)/SGML$(_O) : $(OE) $(CMN)SGML.c $(CMN)HTUtils.h $(CMN)UCAux.h
$(COMPILE) $(CMN)SGML.c
-$(LOB)/HTMLGen.o : $(OE) $(CMN)HTMLGen.c $(CMN)HTUtils.h $(CMN)HTMLDTD.h
+$(LOB)/HTMLGen$(_O) : $(OE) $(CMN)HTMLGen.c $(CMN)HTUtils.h $(CMN)HTMLDTD.h
$(COMPILE) $(CMN)HTMLGen.c
-$(LOB)/HTMLDTD.o : $(OE) $(CMN)HTMLDTD.c $(CMN)SGML.h
+$(LOB)/HTMLDTD$(_O) : $(OE) $(CMN)HTMLDTD.c $(CMN)SGML.h
$(COMPILE) $(CMN)HTMLDTD.c
-$(LOB)/HTPlain.o : $(OE) $(CMN)HTPlain.c $(CMN)HTPlain.h $(CMN)HTStream.h \
+$(LOB)/HTPlain$(_O) : $(OE) $(CMN)HTPlain.c $(CMN)HTPlain.h $(CMN)HTStream.h \
$(CMN)UCAux.h
$(COMPILE) $(CMN)HTPlain.c
-$(LOB)/HTWAIS.o : $(OE) $(CMN)HTWAIS.c $(CMN)HTUtils.h $(CMN)HTList.h
+$(LOB)/HTWAIS$(_O) : $(OE) $(CMN)HTWAIS.c $(CMN)HTUtils.h $(CMN)HTList.h
$(COMPILE) $(WAISINC) $(CMN)HTWAIS.c
-$(LOB)/HTWSRC.o : $(OE) $(CMN)HTWSRC.c $(CMN)HTUtils.h $(CMN)HTList.h
+$(LOB)/HTWSRC$(_O) : $(OE) $(CMN)HTWSRC.c $(CMN)HTUtils.h $(CMN)HTList.h
$(COMPILE) $(CMN)HTWSRC.c
# Access Authorization
-$(LOB)/HTAAUtil.o : $(OE) $(CMN)HTAAUtil.c $(CMN)HTAAUtil.h \
+$(LOB)/HTAAUtil$(_O) : $(OE) $(CMN)HTAAUtil.c $(CMN)HTAAUtil.h \
$(CMN)HTUtils.h $(CMN)HTString.h
$(COMPILE) $(CMN)HTAAUtil.c
-$(LOB)/HTGroup.o : $(OE) $(CMN)HTGroup.c $(CMN)HTGroup.h \
+$(LOB)/HTGroup$(_O) : $(OE) $(CMN)HTGroup.c $(CMN)HTGroup.h \
$(CMN)HTAAUtil.h \
$(CMN)HTAssoc.h $(CMN)HTLex.h
$(COMPILE) $(CMN)HTGroup.c
-$(LOB)/HTAABrow.o : $(OE) $(CMN)HTAABrow.c $(CMN)HTAABrow.h \
+$(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)HTAssoc.h
$(COMPILE) $(CMN)HTAABrow.c
-$(LOB)/HTAAProt.o : $(OE) $(CMN)HTAAProt.c $(CMN)HTAAProt.h \
+$(LOB)/HTAAProt$(_O) : $(OE) $(CMN)HTAAProt.c $(CMN)HTAAProt.h \
$(CMN)HTUtils.h $(CMN)HTAAUtil.h \
$(CMN)HTAssoc.h $(CMN)HTLex.h
$(COMPILE) $(CMN)HTAAProt.c
-$(LOB)/HTAssoc.o : $(OE) $(CMN)HTAssoc.c $(CMN)HTAssoc.h \
+$(LOB)/HTAssoc$(_O) : $(OE) $(CMN)HTAssoc.c $(CMN)HTAssoc.h \
$(CMN)HTUtils.h $(CMN)HTString.h $(CMN)HTList.h
$(COMPILE) $(CMN)HTAssoc.c
-$(LOB)/HTLex.o : $(OE) $(CMN)HTLex.c $(CMN)HTLex.h $(CMN)HTUtils.h
+$(LOB)/HTLex$(_O) : $(OE) $(CMN)HTLex.c $(CMN)HTLex.h $(CMN)HTUtils.h
$(COMPILE) $(CMN)HTLex.c
-$(LOB)/HTUU.o : $(OE) $(CMN)HTUU.c $(CMN)HTUU.h $(CMN)HTUtils.h
+$(LOB)/HTUU$(_O) : $(OE) $(CMN)HTUU.c $(CMN)HTUU.h $(CMN)HTUtils.h
$(COMPILE) $(CMN)HTUU.c
# Communications & Files
-$(LOB)/HTTP.o : $(OE) $(CMN)HTTP.c $(CMN)HTUtils.h $(CMN)HTAABrow.h
+$(LOB)/HTTP$(_O) : $(OE) $(CMN)HTTP.c $(CMN)HTUtils.h $(CMN)HTAABrow.h
$(COMPILE) $(CMN)HTTP.c
-$(LOB)/HTTCP.o : $(OE) $(CMN)HTTCP.c $(CMN)HTUtils.h
+$(LOB)/HTTCP$(_O) : $(OE) $(CMN)HTTCP.c $(CMN)HTUtils.h
$(COMPILE) $(CMN)HTTCP.c
-$(LOB)/HTFile.o : $(OE) $(CMN)HTFile.c $(CMN)HTUtils.h \
+$(LOB)/HTFile$(_O) : $(OE) $(CMN)HTFile.c $(CMN)HTUtils.h \
$(CMN)HTMLDTD.h
$(COMPILE) $(CMN)HTFile.c
-$(LOB)/HTBTree.o : $(OE) $(CMN)HTBTree.c $(CMN)HTUtils.h
+$(LOB)/HTBTree$(_O) : $(OE) $(CMN)HTBTree.c $(CMN)HTUtils.h
$(COMPILE) $(CMN)HTBTree.c
-$(LOB)/HTFTP.o : $(OE) $(CMN)HTFTP.c $(CMN)HTUtils.h
+$(LOB)/HTFTP$(_O) : $(OE) $(CMN)HTFTP.c $(CMN)HTUtils.h
$(COMPILE) $(CMN)HTFTP.c
-$(LOB)/HTAccess.o : $(OE) $(CMN)HTAccess.c $(CMN)HTUtils.h
+$(LOB)/HTAccess$(_O) : $(OE) $(CMN)HTAccess.c $(CMN)HTUtils.h
$(COMPILE) $(CMN)HTAccess.c
-$(LOB)/HTParse.o : $(OE) $(CMN)HTParse.c $(CMN)HTUtils.h
+$(LOB)/HTParse$(_O) : $(OE) $(CMN)HTParse.c $(CMN)HTUtils.h
$(COMPILE) $(CMN)HTParse.c
-$(LOB)/HTVMS_WaisUI.o : $(OE) $(CMN)HTVMS_WaisUI.c $(CMN)HTUtils.h
+$(LOB)/HTVMS_WaisUI$(_O) : $(OE) $(CMN)HTVMS_WaisUI.c $(CMN)HTUtils.h
$(COMPILE) $(CMN)HTVMS_WaisUI.c
-$(LOB)/HTDOS.o : $(OE) $(CMN)HTDOS.c $(CMN)HTUtils.h
+$(LOB)/HTDOS$(_O) : $(OE) $(CMN)HTDOS.c $(CMN)HTUtils.h
$(COMPILE) $(CMN)HTDOS.c
# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/www_tcp.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/www_tcp.h
new file mode 100644
index 00000000000..f3f5ac65a45
--- /dev/null
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/www_tcp.h
@@ -0,0 +1,843 @@
+/* System dependencies in the W3 library
+ SYSTEM DEPENDENCIES
+
+ System-system differences for TCP include files and macros. This
+ file includes for each system the files necessary for network and
+ file I/O. It should be used in conjunction with HTUtils.h to help
+ ensure portability across as many platforms and flavors of platforms
+ as possible.
+
+ AUTHORS
+
+ TBL Tim Berners-Lee, W3 project, CERN, <timbl@info.cern.ch>
+ EvA Eelco van Asperen <evas@cs.few.eur.nl>
+ MA Marc Andreessen NCSA
+ AT Aleksandar Totic <atotic@ncsa.uiuc.edu>
+ SCW Susan C. Weber <sweber@kyle.eitech.com>
+
+ HISTORY:
+ 22 Feb 91 Written (TBL) as part of the WWW library.
+ 16 Jan 92 PC code from EvA
+ 22 Apr 93 Merged diffs bits from xmosaic release
+ 29 Apr 93 Windows/NT code from SCW
+ 20 May 94 A.Harper Add support for VMS CMU TCP/IP transport
+ 3 Oct 94 A.Harper Add support for VMS SOCKETSHR/NETLIB
+ 15 Jul 95 S. Bjorndahl Gnu C for VMS Globaldef/ref support
+
+*/
+
+#ifndef TCP_H
+#define TCP_H
+
+/*
+
+Default values
+
+ These values may be reset and altered by system-specific sections
+ later on. there are also a bunch of defaults at the end .
+
+ */
+/* Default values of those: */
+#define NETCLOSE close /* Routine to close a TCP-IP socket */
+#define NETREAD HTDoRead /* Routine to read from a TCP-IP socket */
+#define NETWRITE write /* Routine to write to a TCP-IP socket */
+#define SOCKET_READ read /* normal socket read routine */
+#define IOCTL ioctl /* normal ioctl routine for sockets */
+#define SOCKET_ERRNO errno /* normal socket errno */
+
+/* Unless stated otherwise, */
+#define SELECT /* Can handle >1 channel. */
+#define GOT_SYSTEM /* Can call shell with string */
+
+#ifdef UNIX
+#define GOT_PIPE
+#endif /* UNIX */
+
+#define INVSOC (-1) /* Unix invalid socket */
+ /* NB: newer libwww has something different for Windows */
+
+#ifndef VMS
+
+#include <sys/types.h>
+
+#if defined(__BORLANDC__)
+#define DECL_ERRNO
+#endif
+
+#if defined(__DJGPP__) || defined(__BORLANDC__)
+#undef HAVE_DIRENT_H
+#define HAVE_DIRENT_H
+#undef HAVE_SYS_FILIO_H
+#endif /* DJGPP or __BORLANDC__ */
+
+#if defined(_MSC_VER)
+#undef HAVE_DIRENT_H
+#define HAVE_DIRENT_H
+#undef HAVE_SYS_FILIO_H
+#endif /* _MSC_VER */
+
+#ifdef HAVE_DIRENT_H
+# include <dirent.h>
+# define D_NAMLEN(dirent) strlen((dirent)->d_name)
+# define STRUCT_DIRENT struct dirent
+#else
+# define D_NAMLEN(dirent) (dirent)->d_namlen
+# define STRUCT_DIRENT struct direct
+# ifdef HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# ifdef HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# ifdef HAVE_NDIR_H
+# include <ndir.h>
+# endif
+#endif /* HAVE_DIRENT_H */
+#endif /* !VMS */
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#if defined(_AIX) && !defined(AIX)
+#define AIX
+#endif /* _AIX */
+
+#ifdef __CYGWIN__
+#define _WINDOWS_NSL
+#define WIN_EX
+#else
+#ifdef WIN_EX
+#define HAVE_FTIME 1
+#define HAVE_SYS_TIMEB_H 1
+#endif
+#endif /* __CYGWIN__ */
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#else
+#ifdef HAVE_SYS_FCNTL_H
+#include <sys/fcntl.h>
+#endif
+#endif
+
+#ifdef HAVE_STRING_H
+#include <string.h> /* For bzero etc */
+#endif /* HAVE_STRING_H */
+
+/*
+
+ MACROS FOR CONVERTING CHARACTERS
+
+ */
+#ifndef TOASCII
+#ifdef EBCDIC /* S/390 -- gil -- 1327 */
+
+extern char un_IBM1047[];
+extern unsigned char IBM1047[];
+/* For debugging
+#include <assert.h>
+#define TOASCII(c) (assert((c)>=0 && (c)<256), un_IBM1047[c])
+*/ /* for production */
+#define TOASCII(c) (un_IBM1047[c])
+
+#define FROMASCII(c) (IBM1047[c])
+
+#else /* EBCDIC */
+
+#if '0' != 48
+ error Host character set is not ASCII.
+#endif
+
+#define TOASCII(c) (c)
+#define FROMASCII(c) (c)
+
+#endif /* EBCDIC */
+#endif /* !TOASCII */
+
+/* convert a char to an unsigned, needed if we have signed characters for ctype.h */
+#define UCH(ch) ((unsigned char)(ch))
+
+/*
+IBM-PC running Windows NT
+
+ These parameters providede by Susan C. Weber <sweber@kyle.eitech.com>.
+*/
+
+#ifdef _WINDOWS
+#define _WINDOWS_NSL
+#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
+extern int ws_netread(int fd, char *buf, int len);
+#define NETREAD(s,b,l) ws_netread((s),(b),(l)) /* 1997/11/06 (Thu) */
+#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>
+
+#ifdef USE_WINSOCK2_H
+#include <winsock2.h> /* normally included in windows.h */
+
+#undef EINPROGRESS
+#undef EALREADY
+#undef EISCONN
+#undef EINTR
+#undef EAGAIN
+#undef ENOTCONN
+#undef ECONNRESET
+#undef ETIMEDOUT
+
+#define EINPROGRESS WSAEINPROGRESS
+#define EALREADY WSAEALREADY
+#define EISCONN WSAEISCONN
+#define EINTR WSAEINTR
+/* fine EAGAIN WSAEAGAIN */
+#define ENOTCONN WSAENOTCONN
+#define ECONNRESET WSAECONNRESET
+#define ETIMEDOUT WSAETIMEDOUT
+
+#else /* USE_WINSOCK_H */
+
+#include <winsock.h>
+typedef struct sockaddr_in SockA; /* See netinet/in.h */
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#undef EINTR
+#undef EAGAIN
+#endif /* _MSC_VER */
+
+#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 ETIMEDOUT WSAETIMEDOUT /* 1997/11/10 (Mon) */
+
+#undef SOCKET_ERRNO /* 1997/10/19 (Sun) 18:01:46 */
+#define SOCKET_ERRNO WSAGetLastError()
+
+#endif /* USE_WINSOCK_H */
+
+#define INCLUDES_DONE
+#define TCP_INCLUDES_DONE
+#endif /* WINDOWS */
+
+
+
+/*
+
+VAX/VMS
+
+ Under VMS, there are many versions of TCP-IP. Define one if you do
+ not use Digital's UCX product:
+
+ UCX DEC's "Ultrix connection" (default)
+ CMU_TCP Available via FTP from sacusr.mp.usbr.gov
+ SOCKETSHR Eckhart Meyer's interface to NETLIB
+ WIN_TCP From Wollongong, now GEC software.
+ MULTINET From SRI, became TGV, then Cisco.
+ DECNET Cern's TCP socket emulation over DECnet
+
+ The last three do not interfere with the
+ unix i/o library, and so they need special calls to read, write and
+ close sockets. In these cases the socket number is a VMS channel
+ number, so we make the @@@ HORRIBLE @@@ assumption that a channel
+ number will be greater than 10 but a unix file descriptor less than
+ 10. It works.
+
+ */
+#ifdef VMS
+
+#ifdef UCX
+#undef IOCTL
+#define IOCTL HTioctl
+#endif /* UCX */
+
+#ifdef WIN_TCP
+#undef SOCKET_READ
+#undef NETWRITE
+#undef NETCLOSE
+#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 */
+
+#ifdef CMU_TCP
+#undef SOCKET_READ
+#undef NETREAD
+#undef NETWRITE
+#undef NETCLOSE
+#define SOCKET_READ(s,b,l) (cmu_get_sdc((s)) != 0 ? cmu_read((s),(b),(l)) : read((s),(b),(l)))
+#define NETREAD(s,b,l) (cmu_get_sdc((s)) != 0 ? HTDoRead((s),(b),(l)) : read((s),(b),(l)))
+#define NETWRITE(s,b,l) (cmu_get_sdc((s)) != 0 ? cmu_write((s),(b),(l)) : write((s),(b),(l)))
+#define NETCLOSE(s) (cmu_get_sdc((s)) != 0 ? cmu_close((s)) : close((s)))
+#endif /* CMU_TCP */
+
+#ifdef MULTINET
+#undef NETCLOSE
+#undef SOCKET_READ
+#undef NETWRITE
+#undef IOCTL
+#undef SOCKET_ERRNO
+/*
+** Delete these socket_foo() prototypes as MultiNet adds them
+** to it's socket library headers. Compiler warnings due to
+** the absence of arguments in the generic prototypes here will
+** include the names of those which can be deleted. - FM
+*/
+extern int socket_read();
+extern int socket_write();
+extern int socket_close();
+extern int socket_ioctl();
+
+#define SOCKET_READ(s,b,l) ((s)>10 ? socket_read((s),(b),(l)) : \
+ read((s),(b),(l)))
+#define NETWRITE(s,b,l) ((s)>10 ? socket_write((s),(b),(l)) : \
+ write((s),(b),(l)))
+#define NETCLOSE(s) ((s)>10 ? socket_close(s) : close(s))
+#define IOCTL socket_ioctl
+#define SOCKET_ERRNO socket_errno
+#endif /* MULTINET */
+
+#ifdef SOCKETSHR_TCP
+#undef SOCKET_READ
+#undef NETREAD
+#undef NETWRITE
+#undef NETCLOSE
+#undef IOCTL
+#define SOCKET_READ(s,b,l) (si_get_sdc((s)) != 0 ? si_read((s),(b),(l)) : \
+ read((s),(b),(l)))
+#define NETREAD(s,b,l) (si_get_sdc((s)) != 0 ? HTDoRead((s),(b),(l)) : \
+ read((s),(b),(l)))
+#define NETWRITE(s,b,l) (si_get_sdc((s)) != 0 ? si_write((s),(b),(l)) : \
+ write((s),(b),(l)))
+#define NETCLOSE(s) (si_get_sdc((s)) != 0 ? si_close((s)) : close((s)))
+#define IOCTL si_ioctl
+#endif /* SOCKETSHR_TCP */
+
+#include <string.h>
+
+#include <file.h>
+#include <stat.h>
+#include <unixio.h>
+#include <unixlib.h>
+
+#define INCLUDES_DONE
+
+#ifdef MULTINET /* Include from standard Multinet directories */
+/*
+** Delete any of these multinet_foo() and associated prototypes
+** as MultiNet adds them to its socket library headers. You'll
+** get compiler warnings about them, due the absence of arguments
+** in the generic prototyping here, and the warnings will include
+** the names of the functions whose prototype entries can be
+** deleted here. - FM
+*/
+extern int multinet_accept();
+extern int multinet_bind();
+extern int multinet_connect();
+extern int multinet_gethostname();
+extern int multinet_getsockname();
+extern unsigned short multinet_htons(unsigned short __val);
+extern unsigned short multinet_ntohs(unsigned short __val);
+extern int multinet_listen();
+extern int multinet_select();
+extern int multinet_socket();
+extern char *vms_errno_string();
+
+#ifndef __SOCKET_TYPEDEFS
+#define __SOCKET_TYPEDEFS 1
+#endif /* !__SOCKET_TYPEDEFS */
+#include <time.h>
+#include <types.h>
+#ifdef __TIME_T
+#undef __TYPES
+#define __TYPES 1
+#define __TYPES_LOADED 1
+#endif /* __TIME_T */
+#ifdef __SOCKET_TYPEDEFS
+#undef __SOCKET_TYPEDEFS
+#endif /* __SOCKET_TYPEDEFS */
+#include "multinet_root:[multinet.include.sys]types.h"
+#ifndef __SOCKET_TYPEDEFS
+#define __SOCKET_TYPEDEFS 1
+#endif /* !__SOCKET_TYPEDEFS */
+#include "multinet_root:[multinet.include]errno.h"
+#ifdef __TYPES
+#undef __TIME_T
+#define __TIME_T 1
+#endif /* __TYPE */
+#ifdef __TIME_LOADED
+#undef __TIME
+#define __TIME 1 /* to avoid double definitions in in.h */
+#endif /* __TIME_LOADED */
+#include "multinet_root:[multinet.include.sys]time.h"
+#define MULTINET_NO_PROTOTYPES /* DECC is compatible-but-different */
+#include "multinet_root:[multinet.include.sys]socket.h"
+#undef MULTINET_NO_PROTOTYPES
+#include "multinet_root:[multinet.include.netinet]in.h"
+#include "multinet_root:[multinet.include.arpa]inet.h"
+#include "multinet_root:[multinet.include]netdb.h"
+#include "multinet_root:[multinet.include.sys]ioctl.h"
+#define TCP_INCLUDES_DONE
+/*
+** Uncomment this if you get compiler messages
+** about struct timeval having no linkage. - FM
+*/
+/*#define NO_TIMEVAL*/
+#ifdef NO_TIMEVAL
+struct timeval {
+ long tv_sec; /* seconds since Jan. 1, 1970 */
+ long tv_usec; /* microseconds */
+};
+#endif /* NO_TIMEVAL */
+#endif /* MULTINET */
+
+
+#ifdef DECNET
+#include <types.h>
+#include <errno.h>
+#include <time.h>
+#include <types.h> /* for socket.h */
+#include <socket.h>
+#include <dn>
+#include <dnetdb>
+/* #include "vms.h" */
+#define TCP_INCLUDES_DONE
+#endif /* DECNET */
+
+
+#ifdef UCX
+#include <types.h>
+#include <errno.h>
+#include <time.h>
+#include <socket.h>
+#include <in.h>
+#include <inet.h>
+#if defined(TCPWARE) && !defined(__DECC)
+#include "tcpware_include:netdb.h"
+#include "tcpware_include:ucx$inetdef.h"
+#else
+#include <netdb.h>
+#include <ucx$inetdef.h>
+#endif /* TCPWARE */
+#define TCP_INCLUDES_DONE
+#endif /* UCX */
+
+
+#ifdef CMU_TCP
+#include <types.h>
+#include <errno.h>
+#include "cmuip_root:[syslib]time.h"
+#include "cmuip_root:[syslib]socket.h"
+#include <in.h>
+#include <inet.h>
+#include <netdb.h>
+#include "cmuip_root:[syslib]ioctl.h"
+#define TCP_INCLUDES_DONE
+#endif /* CMU_TCP */
+
+
+#ifdef SOCKETSHR_TCP
+#include <types.h>
+#include <errno.h>
+#include <time.h>
+#include <socket.h>
+#include <in.h>
+#include <inet.h>
+#include <netdb.h>
+#include "socketshr_library:socketshr.h"
+#include "socketshr_library:ioctl.h"
+#define TCP_INCLUDES_DONE
+#endif /* SOCKETSHR_TCP */
+
+#ifdef WIN_TCP
+#include <types.h>
+#include <errno.h>
+#include <time.h>
+#include <socket.h>
+#include <in.h>
+#include <inet.h>
+#include <netdb.h>
+#ifndef NO_IOCTL
+#include <ioctl.h>
+#endif /* !NO_IOCTL */
+#define TCP_INCLUDES_DONE
+#endif /* WIN_TCP */
+
+#ifndef TCP_INCLUDES_DONE
+#include <types.h>
+#include <errno.h>
+#include <time.h>
+#ifdef VMS_SOCKET_HEADERS
+/*
+** Not all versions of VMS have the full set of headers
+** for socket library functions, because the TCP/IP
+** packages were layered products. If we want these
+** specifically, instead of those for the above packages,
+** the module should be compiled with VMS_SOCKET_HEADERS
+** defined instead of layered product definitions, above.
+** If the module is not using socket library functions,
+** none of the definitions need be used, and we include
+** only the above three headers. - FM
+*/
+#include <socket.h>
+#include <in.h>
+#include <inet.h>
+#include <netdb.h>
+#include <ioctl.h>
+#endif /* VMS_SOCKET_HEADERS */
+#define TCP_INCLUDES_DONE
+#endif /* !TCP_INCLUDES_DONE */
+
+/*
+
+ On VMS machines, the linker needs to be told to put global data sections into
+ a data
+ segment using these storage classes. (MarkDonszelmann)
+
+ */
+#if defined(VAXC) && !defined(__DECC)
+#define GLOBALDEF globaldef
+#define GLOBALREF globalref
+#else
+#ifdef __GNUC__ /* this added by Sterling Bjorndahl */
+#define GLOBALREF_IS_MACRO 1
+#define GLOBALDEF_IS_MACRO 1
+#include <gnu_hacks.h> /* defines GLOBALREF and GLOBALDEF for GNUC on VMS */
+#endif /* __GNUC__ */
+#endif /* VAXC && !DECC */
+
+#include <perror.h>
+#ifndef errno
+extern int errno;
+#endif /* !errno */
+
+#endif /* VMS */
+
+/*
+ * On non-VMS machines and for DECC on VMS, the GLOBALDEF and GLOBALREF
+ * storage types default to normal C storage types.
+ */
+#ifndef GLOBALREF
+#define GLOBALDEF
+#define GLOBALREF extern
+#endif /* !GLOBALREF */
+
+#ifdef __DJGPP__
+#undef SELECT
+#define TCP_INCLUDES_DONE
+#define NO_IOCTL
+#define DECL_ERRNO
+#include <errno.h>
+#include <sys/types.h>
+#include <socket.h>
+#include <io.h>
+#ifdef WATT32
+#include <arpa/inet.h>
+#include <tcp.h>
+#ifdef word
+#undef word
+#endif /* word */
+#define select select_s
+#endif /* WATT32 */
+
+#undef NETWRITE
+#define NETWRITE write_s
+#undef NETREAD
+#define NETREAD read_s
+#undef NETCLOSE
+#define NETCLOSE close_s
+#ifndef WATT32
+#define getsockname getsockname_s
+#endif /* !WATT32 */
+#ifdef HAVE_GETTEXT
+#define gettext gettext__
+#endif
+#endif /* DJGPP */
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+#ifdef HAVE_SYS_FILIO_H
+#include <sys/filio.h>
+#endif /* HAVE_SYS_FILIO_H */
+
+#if !defined(HAVE_LSTAT) && !defined(lstat)
+#define lstat(path,block) stat(path,block)
+#endif
+
+#if defined(DECL_ERRNO) && !defined(errno)
+extern int errno;
+#endif /* DECL_ERRNO */
+
+/*
+Regular BSD unix versions
+=========================
+ These are a default unix where not already defined specifically.
+ */
+#ifndef INCLUDES_DONE
+#include <sys/types.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif /* HAVE_STRING_H */
+#include <errno.h> /* independent */
+#ifdef __MVS__ /* S/390 -- gil -- 1361 */
+#include <time.h>
+#endif /* __MVS__ */
+#ifdef SCO
+#include <sys/timeb.h>
+#include <time.h>
+#endif /* SCO */
+#if defined(AIX) || defined(SVR4)
+#include <time.h>
+#endif /* AIX || SVR4 */
+#include <sys/time.h> /* independent */
+#include <sys/stat.h>
+#ifndef __MVS__ /* S/390 -- gil -- 1373 */
+#include <sys/param.h>
+#endif /* __MVS__ */
+#include <sys/file.h> /* For open() etc */
+
+#if defined(NeXT) || defined(sony_news)
+#ifndef mode_t
+typedef unsigned short mode_t;
+#endif /* !mode_t */
+
+#ifndef pid_t
+typedef int pid_t;
+#endif /* !pid_t */
+
+#endif /* NeXT || sony_news */
+
+#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>
+#include <sys/types.h>
+#include <sys/tty.h>
+#include <sys/sioctl.h>
+#include <sys/bsdtypes.h>
+#ifndef MERGE
+#define MERGE
+#include <sys/pty.h>
+#undef MERGE
+#else
+#include <sys/pty.h>
+#endif /* !MERGE */
+#ifndef USE_DIRENT
+#define USE_DIRENT /* sys V style directory open */
+#endif /* USE_DIRENT */
+#include <sys/dirent.h>
+#endif /* ISC */
+
+/* Directory reading stuff - BSD or SYS V
+*/
+#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
+
+#if !(defined(VM) || defined(VMS) || defined(THINK_C) || defined(PCNFS) || defined(__MINGW32__))
+#define DECL_SYS_ERRLIST 1
+#endif
+
+#endif /* !HAVE_CONFIG_H */
+
+#ifdef HAVE_LIBINTL_H
+#include <libintl.h>
+#endif
+
+#define N_(s) (s)
+
+#ifndef HAVE_GETTEXT
+#define gettext(s) s
+#endif
+
+/*
+Defaults
+========
+ INCLUDE FILES FOR TCP
+ */
+#ifndef TCP_INCLUDES_DONE
+#ifndef NO_IOCTL
+#include <sys/ioctl.h> /* EJB */
+#endif /* !NO_IOCTL */
+#include <sys/socket.h>
+#include <netinet/in.h>
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h> /* Must be after netinet/in.h */
+#endif
+#include <netdb.h>
+#endif /* TCP includes */
+
+typedef unsigned short PortNumber;
+
+#ifndef S_ISLNK
+#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#endif /* S_ISLNK */
+
+#ifndef S_ISDIR
+#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif /* S_ISDIR */
+
+#ifndef S_ISREG
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#endif /* S_ISREG */
+
+#ifndef S_ISUID
+#define S_ISUID 0004000
+#endif
+#ifndef S_ISGID
+#define S_ISGID 0002000
+#endif
+#ifndef S_ISVTX
+#define S_ISVTX 0001000
+#endif
+
+#ifndef S_IRWXU
+#define S_IRWXU 00700
+#endif
+
+#ifndef S_IRUSR
+#define S_IRUSR 00400
+#endif
+#ifndef S_IWUSR
+#define S_IWUSR 00200
+#endif
+#ifndef S_IXUSR
+#define S_IXUSR 00100
+#endif
+
+#ifndef S_IRWXG
+#define S_IRWXG 00070
+#endif
+
+#ifndef S_IRGRP
+#define S_IRGRP 00040
+#endif
+#ifndef S_IWGRP
+#define S_IWGRP 00020
+#endif
+#ifndef S_IXGRP
+#define S_IXGRP 00010
+#endif
+
+#ifndef S_IRWXO
+#define S_IRWXO 00007
+#endif
+
+#ifndef S_IROTH
+#define S_IROTH 00004
+#endif
+#ifndef S_IWOTH
+#define S_IWOTH 00002
+#endif
+#ifndef S_IXOTH
+#define S_IXOTH 00001
+#endif
+
+/*
+
+ROUGH ESTIMATE OF MAX PATH LENGTH
+
+*/
+#ifndef HT_MAX_PATH
+#ifdef MAXPATHLEN
+#define HT_MAX_PATH MAXPATHLEN
+#else
+#ifdef PATH_MAX
+#define HT_MAX_PATH PATH_MAX
+#else
+#define HT_MAX_PATH 1024 /* Any better ideas? */
+#endif
+#endif
+#endif /* HT_MAX_PATH */
+
+#if HT_MAX_PATH < 256
+#undef HT_MAX_PATH
+#define HT_MAX_PATH 256
+#endif
+
+/*
+ MACROS FOR MANIPULATING MASKS FOR SELECT()
+ */
+#ifdef SELECT
+#ifndef FD_SET
+typedef unsigned int fd_set;
+#define FD_SET(fd,pmask) (*(pmask)) |= (1<<(fd))
+#define FD_CLR(fd,pmask) (*(pmask)) &= ~(1<<(fd))
+#define FD_ZERO(pmask) (*(pmask))=0
+#define FD_ISSET(fd,pmask) (*(pmask) & (1<<(fd)))
+#endif /* !FD_SET */
+#endif /* SELECT */
+
+/*
+ * Macro for setting errno - only define this if you really can do it.
+ */
+#if defined(CAN_SET_ERRNO) || (!defined(errno) && (!defined(VMS) || defined(UCX)))
+#define set_errno(value) errno = value
+#else
+#define set_errno(value) /* we do not know how */
+#endif
+
+/* IPv6 support */
+#if defined(HAVE_GETADDRINFO) && defined(HAVE_GAI_STRERROR) && defined(ENABLE_IPV6)
+# define INET6
+#endif /* HAVE_GETADDRINFO && HAVE_GAI_STRERROR && ENABLE_IPV6 */
+
+#if !defined(__MINGW32__)
+#ifdef INET6
+typedef struct sockaddr_storage SockA; /* See netinet/in.h */
+#else
+typedef struct sockaddr_in SockA; /* See netinet/in.h */
+#endif /* INET6 */
+#endif
+
+#ifdef INET6
+#ifdef SIN6_LEN
+#define SOCKADDR_LEN(soc_address) ((struct sockaddr *)&soc_address)->sa_len
+#else
+#ifndef SA_LEN
+#define SA_LEN(x) (((x)->sa_family == AF_INET6)?sizeof(struct sockaddr_in6): \
+ (((x)->sa_family == AF_INET)?sizeof(struct sockaddr_in):sizeof(struct sockaddr)))
+#endif
+#define SOCKADDR_LEN(soc_address) SA_LEN((struct sockaddr *)&soc_address)
+#endif /* SIN6_LEN */
+#else
+#define SOCKADDR_LEN(soc_address) sizeof(soc_address)
+#endif /* INET6 */
+
+#endif /* TCP_H */
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/www_wait.h b/gnu/usr.bin/lynx/WWW/Library/Implementation/www_wait.h
new file mode 100644
index 00000000000..730b3ec5428
--- /dev/null
+++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/www_wait.h
@@ -0,0 +1,26 @@
+#ifndef WWW_WAIT_H
+#define WWW_WAIT_H 1
+
+#include <HTUtils.h>
+
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+#ifndef WEXITSTATUS
+# ifdef HAVE_TYPE_UNIONWAIT
+# define WEXITSTATUS(status) (status.w_retcode)
+# else
+# define WEXITSTATUS(status) (((status) & 0xff00) >> 8)
+# endif
+#endif
+
+#ifndef WTERMSIG
+# ifdef HAVE_TYPE_UNIONWAIT
+# define WTERMSIG(status) (status.w_termsig)
+# else
+# define WTERMSIG(status) ((status) & 0x7f)
+# endif
+#endif
+
+#endif /* WWW_WAIT_H */
diff --git a/gnu/usr.bin/lynx/WWW/Library/djgpp/CommonMakefile b/gnu/usr.bin/lynx/WWW/Library/djgpp/CommonMakefile
index f4bdad38263..99dc1f6a7b5 100644
--- a/gnu/usr.bin/lynx/WWW/Library/djgpp/CommonMakefile
+++ b/gnu/usr.bin/lynx/WWW/Library/djgpp/CommonMakefile
@@ -116,7 +116,7 @@ HFILES = $(CMN)HTParse.h $(CMN)HTAccess.h $(CMN)HTTP.h $(CMN)HTFile.h \
$(CMN)HTFormat.h $(CMN)HTInit.h \
$(CMN)HTMIME.h $(CMN)HTNews.h \
$(CMN)HTGopher.h \
- $(CMN)HTUtils.h $(CMN)tcp.h $(CMN)HText.h \
+ $(CMN)HTUtils.h $(CMN)www_tcp.h $(CMN)HText.h \
$(CMN)HTTelnet.h $(CMN)HTFinger.h \
$(CMN)HTWAIS.h $(CMN)HTWSRC.h \
$(CMN)HTAAUtil.h $(CMN)HTAABrow.h \
@@ -130,9 +130,6 @@ SOURCES = $(CFILES) $(HFILES) $(CMN)Version.make \
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
@@ -146,13 +143,12 @@ $(LOB)/libwww.a : $(COMMON)
# Clean up everything generatable except final products
clean :
- rm $(LOB)/*.o
- -rmdir $(LOB)
+ rm -f $(LOB)/*.o
# Clean up everything generatable including final products
cleanall : clean
- rm $(LOB)/libwww.a
+ rm -f $(LOB)/libwww.a
# Install W3 library into system space (not normally necessary)
diff --git a/gnu/usr.bin/lynx/WWW/Library/djgpp/makefile b/gnu/usr.bin/lynx/WWW/Library/djgpp/makefile
index 06e6f2e782b..893f6cdb29b 100644
--- a/gnu/usr.bin/lynx/WWW/Library/djgpp/makefile
+++ b/gnu/usr.bin/lynx/WWW/Library/djgpp/makefile
@@ -7,17 +7,45 @@ WWW_MACH = djgpp
# The ASIS repository's name for the machine we are on
#ASIS_MACH = hardware/os
-CFLAGS = -O3 -DUSE_ZLIB -DDOSPATH -DNOUSERS -DDISP_PARTIAL \
--DSOURCE_CACHE -DUSE_PSRC \
--I../Implementation \
--I../../../djgpp/tcplib/include \
--I../../../djgpp/tcplib/include/tcp \
--I../../../curses \
--I../../../src \
--I../../..
+# Use this option to enable optional and *experimental* color style.
+#ENABLE_COLOR_STYLE = \
+ -DUSE_COLOR_STYLE \
+ -DUSE_HASH \
+ -DLINKEDSTYLES
+
+# comment this line to suppress DIRED support
+DIRED_DEFS = -DDIRED_SUPPORT
+
+CFLAGS= -O2 $(MCFLAGS) $(INTLFLAGS) $(SSLFLAGS) $(SSLINC)
+
+MCFLAGS = \
+ $(DIRED_DEFS) \
+ $(ENABLE_COLOR_STYLE) \
+ -DDISP_PARTIAL \
+ -DDOSPATH \
+ -DEXP_FILE_UPLOAD \
+ -DNOUSERS \
+ -DSOURCE_CACHE \
+ -DUSE_PRETTYSRC \
+ -DUSE_ZLIB \
+ -DWATT32 \
+ -I../Implementation \
+ -I../../../src \
+ -I../../.. \
+ -I/djgpp/pdcur24 \
+ -I/djgpp/watt32/inc \
+ -I/djgpp/watt32/inc/sys
+
LFLAGS =
CC = gcc
+# Uncomment the following to enable Internationalization.
+#INTLFLAGS = -DHAVE_GETTEXT -DHAVE_LIBINTL_H
+
+# Uncomment the following to enable SSL.
+#SSLFLAGS = -DUSE_SSL
+#SSLINC = -I/djgpp/include/openssl
+
# Directory for installed binary:
!BINDIR = /usr/local/bin
diff --git a/gnu/usr.bin/lynx/WWW/Library/djgpp/makefile.sla b/gnu/usr.bin/lynx/WWW/Library/djgpp/makefile.sla
index 67e3171a74f..540f9a33cba 100644
--- a/gnu/usr.bin/lynx/WWW/Library/djgpp/makefile.sla
+++ b/gnu/usr.bin/lynx/WWW/Library/djgpp/makefile.sla
@@ -7,11 +7,11 @@ WWW_MACH = djgpp
# The ASIS repository's name for the machine we are on
#ASIS_MACH = hardware/os
-CFLAGS = -O3 -DUSE_SLANG -DUSE_ZLIB -DDOSPATH -DNOUSERS -DDISP_PARTIAL \
--DSOURCE_CACHE -DUSE_PSRC \
+CFLAGS = -O1 -DUSE_SLANG -DUSE_ZLIB -DDOSPATH -DNOUSERS -DDISP_PARTIAL \
+-DDIRED_SUPPORT -DSOURCE_CACHE -DUSE_PRETTYSRC \
+-DWATT32 \
-I../Implementation \
--I../../../djgpp/tcplib/include \
--I../../../djgpp/tcplib/include/tcp \
+-I../../../djgpp/watt32/inc -I../../../djgpp/watt32/inc/sys \
-I../../../src \
-I../../.. $(SLANGINC) $(INTLFLAGS)
LFLAGS =
diff --git a/gnu/usr.bin/lynx/WWW/Library/vms/descrip.mms b/gnu/usr.bin/lynx/WWW/Library/vms/descrip.mms
index 6bbdaaba63e..cff613c83e3 100644
--- a/gnu/usr.bin/lynx/WWW/Library/vms/descrip.mms
+++ b/gnu/usr.bin/lynx/WWW/Library/vms/descrip.mms
@@ -163,7 +163,7 @@ CFLAGS = $(DEBUGFLAGS) /Define = ($(EXTRADEFINES), MULTINET) $(INCLUDES)
CC = gcc
.endif
-!HEADERS = HTUtils.h, HTStream.h, tcp.h, HText.h -
+!HEADERS = HTUtils.h, HTStream.h, www_tcp.h, HText.h -
! HTParse.h, HTAccess.h, HTTP.h, HTFile.h, -
! HTBTree.h, HTTCP.h, SGML.h, -
! HTML.h, HTMLDTD.h, HTChunk.h, HTPlain.h, -
@@ -175,15 +175,15 @@ CC = gcc
! HTFinger.h, HTAABrow.h, -
! HTAAProt.h, HTAAUtil.h, -
! HTAssoc.h, HTUU.h, -
-! HTVMSUtils.h, ufc-crypt.h, patchlevel.h
+! HTVMSUtils.h,
MODULES = HTParse, HTAccess, HTTP, HTFile, HTBTree, HTFTP, HTTCP, HTString, -
SGML, HTMLDTD, HTChunk, HTPlain, HTMLGen, -
HTAtom, HTAnchor, HTStyle, HTList, HTRules, HTFormat, -
HTMIME, HTNews, HTGopher, HTTelnet, HTFinger, -
HTWSRC, HTAAUtil, HTAABrow, HTGroup, -
- HTAAProt, HTAssoc, HTLex, HTUU, HTVMSUtils, getpass, -
- getline, crypt, crypt_util, HTWAIS, HTVMS_WaisUI, HTVMS_WaisProt
+ HTAAProt, HTAssoc, HTLex, HTUU, HTVMSUtils, -
+ HTWAIS, HTVMS_WaisUI, HTVMS_WaisProt
!.ifdef DECNET ! Strip FTP, Gopher, News, WAIS
!HEADERS = $(COMMON_HEADERS)
@@ -212,7 +212,7 @@ clean :
! Simple Dependencies
-!HTString.obj : HTString.c HTString.h tcp.h Version.make HTUtils.h
+!HTString.obj : HTString.c HTString.h www_tcp.h Version.make HTUtils.h
!HTAtom.obj : HTAtom.c HTAtom.h HTUtils.h HTString.h
!HTChunk.obj : HTChunk.c HTChunk.h HTUtils.h
!HTList.obj : HTList.c HTList.h HTUtils.h
@@ -235,7 +235,7 @@ clean :
!HTNews.obj : HTNews.c HTNews.h HTUtils.h HTList.h
!HTParse.obj : HTParse.c HTParse.h HTUtils.h
!HTStyle.obj : HTStyle.c HTStyle.h HTUtils.h
-!HTTCP.obj : HTTCP.c HTTCP.h HTUtils.h tcp.h
+!HTTCP.obj : HTTCP.c HTTCP.h HTUtils.h www_tcp.h
!HTTP.obj : HTTP.c HTTP.h HTUtils.h
!SGML.obj : SGML.c SGML.h HTUtils.h
!HTAABrow.obj : HTAABrow.c HTUtils.h
@@ -245,6 +245,4 @@ clean :
!HTLex.obj : HTLex.c HTUtils.h
!HTAssoc.obj : HTAssoc.c HTAssoc.h HTAAUtil.h HTString.h
!HTUU.obj : HTUU.c HTUU.h HTUtils.h
-!crypt.obj : crypt.c ufc-crypt.h
!HTVMSUtils.obj : HTVMSUtils.c HTVMSUtils.h HTUtils.h
-!crypt_util.obj : crypt_util.c ufc-crypt.h patchlevel.h
diff --git a/gnu/usr.bin/lynx/WWW/Library/vms/libmake.com b/gnu/usr.bin/lynx/WWW/Library/vms/libmake.com
index d0bd31eed7e..4ad07d1941f 100644
--- a/gnu/usr.bin/lynx/WWW/Library/vms/libmake.com
+++ b/gnu/usr.bin/lynx/WWW/Library/vms/libmake.com
@@ -176,10 +176,6 @@ $ cc [-.Implementation]HTAssoc.c
$ cc [-.Implementation]HTLex.c
$ cc [-.Implementation]HTUU.c
$ cc [-.Implementation]HTVMSUtils.c
-$ cc [-.Implementation]getpass.c
-$ cc [-.Implementation]getline.c
-$ cc [-.Implementation]crypt.c
-$ cc [-.Implementation]crypt_util.c
$ cc [-.Implementation]HTWAIS.c
$ cc [-.Implementation]HTVMS_WaisUI.c
$ cc [-.Implementation]HTVMS_WaisProt.c
diff --git a/gnu/usr.bin/lynx/aclocal.m4 b/gnu/usr.bin/lynx/aclocal.m4
index c619e2c8fd0..29e32a7954e 100644
--- a/gnu/usr.bin/lynx/aclocal.m4
+++ b/gnu/usr.bin/lynx/aclocal.m4
@@ -1,14 +1,14 @@
dnl Macros for auto-configure script.
-dnl by T.E.Dickey <dickey@clark.net>
+dnl by T.E.Dickey <dickey@invisible-island.net>
dnl and Jim Spath <jspath@mail.bcpl.lib.md.us>
dnl and Philippe De Muyter <phdm@macqel.be>
dnl
dnl Created: 1997/1/28
-dnl Updated: 1999/5/8
+dnl Updated: 2001/4/15
dnl
dnl The autoconf used in Lynx development is GNU autoconf, patched
dnl by Tom Dickey. See your local GNU archives, and this URL:
-dnl http://www.clark.net/pub/dickey/autoconf/autoconf.html
+dnl http://invisible-island.net/autoconf/autoconf.html
dnl
dnl ---------------------------------------------------------------------------
dnl ---------------------------------------------------------------------------
@@ -27,9 +27,9 @@ AC_DEFUN(AM_GNU_GETTEXT,
AC_REQUIRE([AC_FUNC_MMAP])dnl
AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
-unistd.h values.h sys/param.h])
+unistd.h sys/param.h])
AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
-__argz_count __argz_stringify __argz_next])
+strdup __argz_count __argz_stringify __argz_next])
if test "${ac_cv_func_stpcpy+set}" != "set"; then
AC_CHECK_FUNCS(stpcpy)
@@ -93,7 +93,7 @@ __argz_count __argz_stringify __argz_next])
fi
fi
- dnl In the intl/makefile.in we have a special dependency which only
+ dnl In the intl/Makefile.in we have a special dependency which only
dnl makes sense for gettext. We comment this out for non-gettext
dnl packages.
if test "$PACKAGE" = "gettext"; then
@@ -119,12 +119,12 @@ __argz_count __argz_stringify __argz_next])
fi
AC_SUBST(MKINSTALLDIRS)
- dnl *** For now the libtool support in intl/makefile is not for real.
+ dnl *** For now the libtool support in intl/Makefile is not for real.
l=
AC_SUBST(l)
dnl Generate list of files to be processed by xgettext which will
- dnl be included in po/makefile.
+ dnl be included in po/Makefile.
if test "x$srcdir" != "x."; then
if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
posrcprefix="$srcdir/"
@@ -181,6 +181,7 @@ dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
AC_DEFUN(AM_PATH_PROG_WITH_TEST,
[# Extract the first word of "$2", so it can be a program name with args.
+AC_REQUIRE([CF_PATHSEP])
set dummy $2; ac_word=[$]2
AC_MSG_CHECKING([for $ac_word])
AC_CACHE_VAL(ac_cv_path_$1,
@@ -189,7 +190,7 @@ AC_CACHE_VAL(ac_cv_path_$1,
ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATHSEP}"
for ac_dir in ifelse([$5], , $PATH, [$5]); do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
@@ -216,10 +217,6 @@ AC_SUBST($1)dnl
])
dnl ---------------------------------------------------------------------------
-dnl gettext macros from hello-1.3.16
-dnl provided courtesy if Karl Eichwalder <ke@suse.de>
-dnl
-dnl
dnl Macro to add for using GNU gettext.
dnl Ulrich Drepper <drepper@cygnus.com>, 1995.
dnl
@@ -228,7 +225,7 @@ dnl be used in projects which are not available under the GNU Public License
dnl but which still want to provide support for the GNU gettext functionality.
dnl Please note that the actual code is *not* freely available.
dnl
-dnl serial 3
+dnl serial 5
dnl
AC_DEFUN(AM_WITH_NLS,
[AC_MSG_CHECKING([whether NLS is requested])
@@ -248,7 +245,7 @@ AC_DEFUN(AM_WITH_NLS,
AC_ARG_WITH(included-gettext,
[ --with-included-gettext use the GNU gettext library included here],
nls_cv_force_use_gnu_gettext=$withval,
- nls_cv_force_use_gnu_gettext=yes)
+ nls_cv_force_use_gnu_gettext=no)
AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
@@ -268,11 +265,18 @@ AC_DEFUN(AM_WITH_NLS,
if test "$gt_cv_func_gettext_libc" != "yes"; then
AC_CHECK_LIB(intl, bindtextdomain,
- [AC_CACHE_CHECK([for gettext in libintl],
+ [ gt_save_LIBS="$LIBS"
+ LIBS="$gt_save_LIBS -lintl"
+ AC_CACHE_CHECK([for gettext in libintl],
gt_cv_func_gettext_libintl,
[AC_TRY_LINK([], [return (int) gettext ("")],
gt_cv_func_gettext_libintl=yes,
- gt_cv_func_gettext_libintl=no)])])
+ gt_cv_func_gettext_libintl=no)])
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ if test "$gt_cv_func_gettext_libintl" = yes; then
+ LIBS="$LIBS -lintl"
fi
if test "$gt_cv_func_gettext_libc" = "yes" \
@@ -366,7 +370,7 @@ AC_DEFUN(AM_WITH_NLS,
: ;
else
AC_MSG_RESULT(
- [found xgettext programs is not GNU xgettext; ignore it])
+ [found xgettext program is not GNU xgettext; ignore it])
XGETTEXT=":"
fi
fi
@@ -386,6 +390,23 @@ AC_DEFUN(AM_WITH_NLS,
USE_INCLUDED_LIBINTL=yes
fi
+ # If we really do not use included intl, suppress the command that
+ # would attempt to symlink the two copies of its header.
+ if test "$USE_INCLUDED_LIBINTL" != yes; then
+ nls_cv_header_libgt=
+ nls_cv_header_intl=
+ fi
+ AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
+
+ AC_OUTPUT_COMMANDS([ #(vi
+ case "\$CONFIG_FILES" in
+ *po/makefile.in*) #(vi
+ sed -e "/POTFILES =/r po/POTFILES" po/makefile.in > po/makefile
+ ;;
+ *po/Makefile.in*)
+ sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
+ esac])
+
dnl These rules are solely for the distribution goal. While doing this
dnl we only have to keep exactly one list of the available catalogs
dnl in configure.in.
@@ -408,6 +429,28 @@ AC_DEFUN(AM_WITH_NLS,
AC_SUBST(POSUB)
])
dnl ---------------------------------------------------------------------------
+dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS
+AC_DEFUN([CF_ADD_CFLAGS],
+[
+for cf_add_cflags in $1
+do
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case "$CPPFLAGS" in
+ *$cf_add_cflags)
+ ;;
+ *)
+ CPPFLAGS="$CPPFLAGS $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ CFLAGS="$CFLAGS $cf_add_cflags"
+ ;;
+ esac
+done
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Add an include-directory to $CPPFLAGS. Don't add /usr/include, since it's
dnl redundant. We don't normally need to add -I/usr/local/include for gcc,
dnl but old versions (and some misinstalled ones) need that.
@@ -460,6 +503,7 @@ AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C)
AC_CACHE_VAL(cf_cv_ansi_cc,[
cf_cv_ansi_cc=no
cf_save_CFLAGS="$CFLAGS"
+cf_save_CPPFLAGS="$CPPFLAGS"
# Don't try gcc -ansi; that turns off useful extensions and
# breaks some systems' header files.
# AIX -qlanglvl=ansi
@@ -471,11 +515,11 @@ for cf_arg in "-DCC_HAS_PROTOS" \
"" \
-qlanglvl=ansi \
-std1 \
- "-Aa -D_HPUX_SOURCE +e" \
+ -Ae \
"-Aa -D_HPUX_SOURCE" \
-Xc
do
- CFLAGS="$cf_save_CFLAGS $cf_arg"
+ CF_ADD_CFLAGS($cf_arg)
AC_TRY_COMPILE(
[
#ifndef CC_HAS_PROTOS
@@ -490,12 +534,13 @@ choke me
[cf_cv_ansi_cc="$cf_arg"; break])
done
CFLAGS="$cf_save_CFLAGS"
+CPPFLAGS="$cf_save_CPPFLAGS"
])
AC_MSG_RESULT($cf_cv_ansi_cc)
if test "$cf_cv_ansi_cc" != "no"; then
if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
- CFLAGS="$CFLAGS $cf_cv_ansi_cc"
+ CF_ADD_CFLAGS($cf_cv_ansi_cc)
else
AC_DEFINE(CC_HAS_PROTOS)
fi
@@ -548,15 +593,93 @@ if test "$cf_cv_bool_defs" = no ; then
fi
])dnl
dnl ---------------------------------------------------------------------------
+dnl Top-level macro for configuring an application with a bundled copy of
+dnl the intl and po directories for gettext.
+dnl
+dnl $1 specifies either Makefile or makefile, defaulting to the former.
+AC_DEFUN([CF_BUNDLED_INTL],[
+cf_makefile=ifelse($1,,Makefile,$1)
+
+dnl Set of available languages (based on source distribution). Note that
+dnl setting $LINGUAS overrides $ALL_LINGUAS. Some environments set $LINGUAS
+dnl rather than $LC_ALL
+test -z "$ALL_LINGUAS" && ALL_LINGUAS=`test -d $srcdir/po && cd $srcdir/po && echo *.po|sed -e 's/\.po//g' -e 's/*//'`
+
+AM_GNU_GETTEXT
+
+INTLDIR_MAKE=
+MSG_DIR_MAKE=
+SUB_MAKEFILE=
+CF_OUR_MESSAGES
+if test "$USE_INCLUDED_LIBINTL" = yes ; then
+ if test "$nls_cv_force_use_gnu_gettext" = yes ; then
+ SUB_MAKEFILE="intl/$cf_makefile"
+ elif test "$nls_cv_use_gnu_gettext" = yes ; then
+ SUB_MAKEFILE="intl/$cf_makefile"
+ else
+ INTLDIR_MAKE="#"
+ fi
+ if test $use_our_messages = no ; then
+ MSG_DIR_MAKE="#"
+ SUB_MAKEFILE=
+ fi
+ if test "$use_our_messages" = yes ; then
+ SUB_MAKEFILE="$SUB_MAKEFILE po/$cf_makefile.in:po/$cf_makefile.inn"
+ else
+ MSG_DIR_MAKE="#"
+ fi
+elif test "$USE_NLS" = yes ; then
+ AC_CHECK_HEADERS(libintl.h)
+ INTLDIR_MAKE="#"
+ SUB_MAKEFILE="po/$cf_makefile.in:po/$cf_makefile.inn"
+else
+ INTLDIR_MAKE="#"
+ MSG_DIR_MAKE="#"
+fi
+
+dnl We might want to use a preinstalled message library rather than the one
+dnl which is bundled with this program.
+if test -z "$MSG_DIR_MAKE" ; then
+ if test $use_our_messages = no ; then
+ MSG_DIR_MAKE="#"
+ SUB_MAKEFILE=
+ fi
+fi
+
+if test -z "$INTLDIR_MAKE" ; then
+ CPPFLAGS="$CPPFLAGS -I../intl"
+fi
+
+AC_SUBST(INTLDIR_MAKE)
+AC_SUBST(MSG_DIR_MAKE)
+
+dnl FIXME: the underlying AM_GNU_GETTEXT macro either needs some fixes or a
+dnl little documentation. It doesn't define anything so that we can ifdef our
+dnl own code, except ENABLE_NLS, which is too vague to be of any use.
+
+if test "$USE_INCLUDED_LIBINTL" = yes ; then
+ if test "$nls_cv_force_use_gnu_gettext" = yes ; then
+ AC_DEFINE(HAVE_GETTEXT)
+ elif test "$nls_cv_use_gnu_gettext" = yes ; then
+ AC_DEFINE(HAVE_GETTEXT)
+ fi
+ if test -n "$nls_cv_header_intl" ; then
+ AC_DEFINE(HAVE_LIBINTL_H)
+ fi
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Check if we're accidentally using a cache from a different machine.
dnl Derive the system name, as a check for reusing the autoconf cache.
dnl
dnl If we've packaged config.guess and config.sub, run that (since it does a
-dnl better job than uname).
+dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow
+dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM
+dnl which is useful in cross-compiles.
AC_DEFUN([CF_CHECK_CACHE],
[
if test -f $srcdir/config.guess ; then
- AC_CANONICAL_HOST
+ ifelse([$1],,[AC_CANONICAL_HOST],[$1])
system_name="$host_os"
else
system_name="`(uname -s -r) 2>/dev/null`"
@@ -589,7 +712,7 @@ AC_DEFUN([CF_CHECK_ERRNO],
AC_MSG_CHECKING(if external $1 is declared)
AC_CACHE_VAL(cf_cv_dcl_$1,[
AC_TRY_COMPILE([
-#if HAVE_STDLIB_H
+#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <stdio.h>
@@ -597,7 +720,7 @@ AC_CACHE_VAL(cf_cv_dcl_$1,[
#include <errno.h> ],
[long x = (long) $1],
[eval 'cf_cv_dcl_'$1'=yes'],
- [eval 'cf_cv_dcl_'$1'=no]')
+ [eval 'cf_cv_dcl_'$1'=no'])
])
eval 'cf_result=$cf_cv_dcl_'$1
@@ -688,6 +811,28 @@ CF_CHECK_FUNCDECL([$1], $ac_func,
done
])dnl
dnl ---------------------------------------------------------------------------
+dnl Check for IPV6 configuration.
+AC_DEFUN([CF_CHECK_IPV6],[
+CF_FIND_IPV6_TYPE
+CF_FIND_IPV6_LIBS
+
+CF_FUNC_GETADDRINFO
+
+if test "$cf_cv_getaddrinfo" != "yes"; then
+ if test "$cf_cv_ipv6type" != "linux"; then
+ AC_MSG_ERROR(
+[You must get working getaddrinfo() function,
+or you can specify "--disable-ipv6"])
+ else
+ AC_MSG_WARN(
+[The getaddrinfo() implementation on your system seems be buggy.
+You should upgrade your system library to the newest version
+of GNU C library (aka glibc).])
+ fi
+fi
+
+])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).
@@ -716,49 +861,144 @@ if test $cf_cv_color_curses = yes ; then
fi
])
dnl ---------------------------------------------------------------------------
+dnl Look for the curses headers.
+AC_DEFUN([CF_CURSES_CPPFLAGS],[
+
+AC_CACHE_CHECK(for extra include directories,cf_cv_curses_incdir,[
+cf_cv_curses_incdir=no
+case $host_os in #(vi
+hpux10.*|hpux11.*) #(vi
+ test -d /usr/include/curses_colr && \
+ cf_cv_curses_incdir="-I/usr/include/curses_colr"
+ ;;
+sunos3*|sunos4*)
+ test -d /usr/5lib && \
+ test -d /usr/5include && \
+ cf_cv_curses_incdir="-I/usr/5include"
+ ;;
+esac
+])
+test "$cf_cv_curses_incdir" != no && CPPFLAGS="$CPPFLAGS $cf_cv_curses_incdir"
+
+AC_CACHE_CHECK(if we have identified curses headers,cf_cv_ncurses_header,[
+cf_cv_ncurses_header=curses.h
+for cf_header in \
+ curses.h \
+ ncurses.h \
+ ncurses/curses.h \
+ ncurses/ncurses.h
+do
+AC_TRY_COMPILE([#include <${cf_header}>],
+ [initscr(); tgoto("?", 0,0)],
+ [cf_cv_ncurses_header=$cf_header; break],[])
+done
+])
+
+# cheat, to get the right #define's for HAVE_NCURSES_H, etc.
+AC_CHECK_HEADERS($cf_cv_ncurses_header)
+
+])
+dnl ---------------------------------------------------------------------------
+dnl Curses-functions are a little complicated, since a lot of them are macros.
+AC_DEFUN([CF_CURSES_FUNCS],
+[
+AC_REQUIRE([CF_XOPEN_CURSES])
+for cf_func in $1
+do
+ CF_UPPER(cf_tr_func,$cf_func)
+ AC_MSG_CHECKING(for ${cf_func})
+ CF_MSG_LOG(${cf_func})
+ AC_CACHE_VAL(cf_cv_func_$cf_func,[
+ eval cf_result='$ac_cv_func_'$cf_func
+ if test ".$cf_result" != ".no"; then
+ AC_TRY_LINK([
+#ifdef HAVE_XCURSES
+#include <xcurses.h>
+char * XCursesProgramName = "test";
+#else
+#include <${cf_cv_ncurses_header-curses.h}>
+#if defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H)
+#include <ncurses/term.h>
+#else
+#ifdef HAVE_TERM_H
+#include <term.h>
+#endif
+#endif
+#endif],
+ [
+#ifndef ${cf_func}
+long foo = (long)(&${cf_func});
+exit(foo == 0);
+#endif
+ ],
+ [cf_result=yes],
+ [cf_result=no])
+ fi
+ eval 'cf_cv_func_'$cf_func'=$cf_result'
+ ])
+ # use the computed/retrieved cache-value:
+ eval 'cf_result=$cf_cv_func_'$cf_func
+ AC_MSG_RESULT($cf_result)
+ if test $cf_result != no; then
+ AC_DEFINE_UNQUOTED(HAVE_${cf_tr_func})
+ fi
+done
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Look for the curses libraries. Older curses implementations may require
-dnl termcap/termlib to be linked as well.
+dnl termcap/termlib to be linked as well. Call CF_CURSES_CPPFLAGS first.
AC_DEFUN([CF_CURSES_LIBS],[
-AC_CHECK_FUNC(initscr,,[
+
+AC_MSG_CHECKING(if we have identified curses libraries)
+AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>],
+ [initscr(); tgoto("?", 0,0)],
+ cf_result=yes,
+ cf_result=no)
+AC_MSG_RESULT($cf_result)
+
+if test "$cf_result" = no ; then
case $host_os in #(vi
freebsd*) #(vi
AC_CHECK_LIB(mytinfo,tgoto,[LIBS="-lmytinfo $LIBS"])
;;
-hpux10.*)
+hpux10.*|hpux11.*) #(vi
AC_CHECK_LIB(cur_colr,initscr,[
LIBS="-lcur_colr $LIBS"
- CFLAGS="-I/usr/include/curses_colr $CFLAGS"
ac_cv_func_initscr=yes
],[
AC_CHECK_LIB(Hcurses,initscr,[
# HP's header uses __HP_CURSES, but user claims _HP_CURSES.
LIBS="-lHcurses $LIBS"
- CFLAGS="-D__HP_CURSES -D_HP_CURSES $CFLAGS"
+ CPPFLAGS="-D__HP_CURSES -D_HP_CURSES $CPPFLAGS"
ac_cv_func_initscr=yes
])])
;;
linux*) # Suse Linux does not follow /usr/lib convention
LIBS="$LIBS -L/lib"
;;
+sunos3*|sunos4*)
+ test -d /usr/5lib && \
+ LIBS="$LIBS -L/usr/5lib -lcurses -ltermcap"
+ ac_cv_func_initscr=yes
+ ;;
esac
-if test ".$With5lib" != ".no" ; then
-if test -d /usr/5lib ; then
- # SunOS 3.x or 4.x
- CPPFLAGS="$CPPFLAGS -I/usr/5include"
- LIBS="$LIBS -L/usr/5lib"
-fi
-fi
-
if test ".$ac_cv_func_initscr" != .yes ; then
cf_save_LIBS="$LIBS"
cf_term_lib=""
cf_curs_lib=""
+ if test ".${cf_cv_ncurses_version-no}" != .no
+ then
+ cf_check_list="ncurses curses cursesX"
+ else
+ cf_check_list="cursesX curses ncurses"
+ fi
+
# Check for library containing tgoto. Do this before curses library
# because it may be needed to link the test-case for initscr.
AC_CHECK_FUNC(tgoto,[cf_term_lib=predefined],[
- for cf_term_lib in termcap termlib unknown
+ for cf_term_lib in $cf_check_list termcap termlib unknown
do
AC_CHECK_LIB($cf_term_lib,tgoto,[break])
done
@@ -766,7 +1006,7 @@ if test ".$ac_cv_func_initscr" != .yes ; then
# Check for library containing initscr
test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS"
- for cf_curs_lib in cursesX curses ncurses xcurses jcurses unknown
+ for cf_curs_lib in $cf_check_list xcurses jcurses unknown
do
AC_CHECK_LIB($cf_curs_lib,initscr,[break])
done
@@ -781,6 +1021,8 @@ if test ".$ac_cv_func_initscr" != .yes ; then
[cf_result=no])
AC_MSG_RESULT($cf_result)
test $cf_result = no && AC_ERROR(Cannot link curses library)
+ elif test "$cf_curs_lib" = "$cf_term_lib" ; then
+ :
elif test "$cf_term_lib" != predefined ; then
AC_MSG_CHECKING(if we need both $cf_curs_lib and $cf_term_lib libraries)
AC_TRY_LINK([#include <${cf_cv_ncurses_header-curses.h}>],
@@ -796,8 +1038,9 @@ if test ".$ac_cv_func_initscr" != .yes ; then
AC_MSG_RESULT($cf_result)
fi
fi
+fi
-])])
+])
dnl ---------------------------------------------------------------------------
dnl Solaris 2.x curses provides a "performance" tradeoff according to whether
dnl CURS_PERFORMANCE is defined. If defined, the implementation defines macros
@@ -828,6 +1071,30 @@ AC_MSG_RESULT($cf_cv_curs_performance)
test $cf_cv_curs_performance = yes && AC_DEFINE(CURS_PERFORMANCE)
])dnl
dnl ---------------------------------------------------------------------------
+dnl Check for the flavor of the touchline function, to distinguish between BSD
+dnl and SYSV. This is needed on NetBSD 1.5 which has a partial implementation
+dnl of SVR4 curses.
+AC_DEFUN([CF_CURS_TOUCHLINE],[
+AC_CACHE_CHECK(for curses touchline function,cf_cv_curs_touchline,[
+ AC_TRY_LINK([
+#include <${cf_cv_ncurses_header-curses.h}>],
+ [touchline(stdscr, 1,2,3);],
+ [cf_cv_curs_touchline=bsd],
+ [AC_TRY_LINK([
+#include <${cf_cv_ncurses_header-curses.h}>],
+ [touchline(stdscr, 1,2);],
+ [cf_cv_curs_touchline=sysv],
+ [cf_cv_curs_touchline=bsd])])])
+case "$cf_cv_curs_touchline" in #(vi
+bsd) #(vi
+ AC_DEFINE(HAVE_BSD_TOUCHLINE)
+ ;;
+sysv)
+ AC_DEFINE(HAVE_SYSV_TOUCHLINE)
+ ;;
+esac
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Check for a program in the given list $3, defining the corresponding
dnl program variable $2.
dnl
@@ -847,6 +1114,9 @@ AC_MSG_RESULT($cf_cv_$2)
AC_DEFINE_UNQUOTED($2,"$cf_cv_$2")
])
dnl ---------------------------------------------------------------------------
+dnl "dirname" is not portable, so we fake it with a shell script.
+AC_DEFUN([CF_DIRNAME],[$1=`echo $2 | sed -e 's:/[[^/]]*$::'`])dnl
+dnl ---------------------------------------------------------------------------
dnl You can always use "make -n" to see the actual options, but it's hard to
dnl pick out/analyze warning messages when the compile-line is long.
dnl
@@ -859,7 +1129,7 @@ dnl
AC_DEFUN([CF_DISABLE_ECHO],[
AC_MSG_CHECKING(if you want to see long compiling messages)
CF_ARG_DISABLE(echo,
- [ --disable-echo test: display "compiling" commands],
+ [ --disable-echo display "compiling" commands],
[
ECHO_LD='@echo linking [$]@;'
RULE_CC=' @echo compiling [$]<'
@@ -878,32 +1148,6 @@ AC_SUBST(SHOW_CC)
AC_SUBST(ECHO_CC)
])dnl
dnl ---------------------------------------------------------------------------
-dnl Check whether character set is EBCDIC.
-AC_DEFUN([CF_EBCDIC],[
-AC_MSG_CHECKING(if character set is EBCDIC)
-AC_CACHE_VAL(cf_cv_ebcdic,[
- AC_TRY_COMPILE([ ],
-[ /* TryCompile function for CharSet.
- Treat any failure as ASCII for compatibility with existing art.
- Use compile-time rather than run-time tests for cross-compiler
- tolerance. */
-#if '0'!=240
-make an error "Character set is not EBCDIC"
-#endif ],
-[ # TryCompile action if true
-cf_cv_ebcdic=yes ],
-[ # TryCompile action if false
-cf_cv_ebcdic=no])
-# end of TryCompile ])
-# end of CacheVal CvEbcdic
-AC_MSG_RESULT($cf_cv_ebcdic)
-case "$cf_cv_ebcdic" in #(vi
- yes) AC_DEFINE(EBCDIC)
- AC_DEFINE(NOT_ASCII);; #(vi
- *) ;;
-esac
-])dnl
-dnl ---------------------------------------------------------------------------
dnl Check if 'errno' is declared in <errno.h>
AC_DEFUN([CF_ERRNO],
[
@@ -929,51 +1173,209 @@ AC_MSG_RESULT($cf_cv_fancy_curses)
test $cf_cv_fancy_curses = yes && AC_DEFINE(FANCY_CURSES)
])
dnl ---------------------------------------------------------------------------
+dnl Based on the IPV6 stack type, look for the corresponding library.
+AC_DEFUN([CF_FIND_IPV6_LIBS],[
+AC_REQUIRE([CF_FIND_IPV6_TYPE])
+
+cf_ipv6lib=none
+cf_ipv6dir=none
+
+AC_MSG_CHECKING(for ipv6 library if required)
+case $cf_cv_ipv6type in #(vi
+solaris) #(vi
+ ;;
+inria) #(vi
+ ;;
+kame) #(vi
+ dnl http://www.kame.net/
+ cf_ipv6lib=inet6
+ cf_ipv6dir=v6
+ ;;
+linux-glibc) #(vi
+ ;;
+linux-libinet6) #(vi
+ dnl http://www.v6.linux.or.jp/
+ cf_ipv6lib=inet6
+ cf_ipv6dir=inet6
+ ;;
+toshiba) #(vi
+ cf_ipv6lib=inet6
+ cf_ipv6dir=v6
+ ;;
+v6d) #(vi
+ cf_ipv6lib=v6
+ cf_ipv6dir=v6
+ ;;
+zeta)
+ cf_ipv6lib=inet6
+ cf_ipv6dir=v6
+ ;;
+esac
+AC_MSG_RESULT($cf_ipv6lib)
+
+if test "$cf_ipv6lib" != "none"; then
+
+ AC_TRY_LINK([
+#include <sys/types.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <netinet/ip6.h>],
+ [getaddrinfo(0, 0, 0, 0)],,[
+ CF_HEADER_PATH(cf_search,$cf_ipv6dir)
+ for cf_incdir in $cf_search
+ do
+ cf_header=$cf_incdir/netinet/ip6.h
+ if test -f $cf_header
+ then
+ CPPFLAGS="$CPPFLAGS -I$cf_incdir"
+ test -n "$verbose" && echo " ... found $cf_header" 1>&AC_FD_MSG
+ break
+ fi
+ test -n "$verbose" && echo " ... tested $cf_header" 1>&AC_FD_MSG
+ done
+ ])
+
+ CF_FIND_LIBRARY([$cf_ipv6lib],[$cf_ipv6dir],[
+#include <sys/types.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <netinet/ip6.h>],
+ [getaddrinfo(0, 0, 0, 0)],
+ [getaddrinfo],
+ noexit)
+ if test $cf_found_library = no ; then
+ AC_MSG_ERROR(
+[No $cf_ipv6lib library found, cannot continue. You must fetch lib$cf_ipv6lib.a
+from an appropriate ipv6 kit and compile beforehand.])
+ fi
+fi
+
+])dnl
+dnl ---------------------------------------------------------------------------
+AC_DEFUN([CF_FIND_IPV6_TYPE],[
+AC_CACHE_CHECK(ipv6 stack type, cf_cv_ipv6type, [
+cf_cv_ipv6type=unknown
+for i in solaris inria kame linux-glibc linux-libinet6 toshiba v6d zeta
+do
+ case $i in #(vi
+ solaris) #(vi
+ if test "SunOS" = "`uname -s`"
+ then
+ if test -f /usr/include/netinet/ip6.h
+ then
+ cf_cv_ipv6type=$i
+ fi
+ fi
+ ;;
+ inria) #(vi
+ dnl http://www.kame.net/
+ AC_EGREP_CPP(yes, [dnl
+#include <netinet/in.h>
+#ifdef IPV6_INRIA_VERSION
+yes
+#endif], [cf_cv_ipv6type=$i])
+ ;;
+ kame) #(vi
+ dnl http://www.kame.net/
+ AC_EGREP_CPP(yes, [dnl
+#include <netinet/in.h>
+#ifdef __KAME__
+yes
+#endif], [cf_cv_ipv6type=$i])
+ ;;
+ linux-glibc) #(vi
+ dnl http://www.v6.linux.or.jp/
+ AC_EGREP_CPP(yes, [dnl
+#include <features.h>
+#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
+yes
+#endif], [cf_cv_ipv6type=$i])
+ ;;
+ linux-libinet6) #(vi
+ dnl http://www.v6.linux.or.jp/
+ if test -d /usr/inet6
+ then
+ cf_cv_ipv6type=$i
+ elif test -f /usr/include/netinet/ip6.h
+ then
+ cf_cv_ipv6type=$i
+ fi
+ ;;
+ toshiba) #(vi
+ AC_EGREP_CPP(yes, [dnl
+#include <sys/param.h>
+#ifdef _TOSHIBA_INET6
+yes
+#endif], [cf_cv_ipv6type=$i])
+ ;;
+ v6d) #(vi
+ AC_EGREP_CPP(yes, [dnl
+#include </usr/local/v6/include/sys/v6config.h>
+#ifdef __V6D__
+yes
+#endif], [cf_cv_ipv6type=$i])
+ ;;
+ zeta)
+ AC_EGREP_CPP(yes, [dnl
+#include <sys/param.h>
+#ifdef _ZETA_MINAMI_INET6
+yes
+#endif], [cf_cv_ipv6type=$i])
+ ;;
+ esac
+ if test "$cf_cv_ipv6type" != "unknown"; then
+ break
+ fi
+done
+])
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Look for a non-standard library, given parameters for AC_TRY_LINK. We
dnl prefer a standard location, and use -L options only if we do not find the
dnl library in the standard library location(s).
dnl $1 = library name
-dnl $2 = includes
-dnl $3 = code fragment to compile/link
-dnl $4 = corresponding function-name
+dnl $2 = library class, usually the same as library name
+dnl $3 = includes
+dnl $4 = code fragment to compile/link
+dnl $5 = corresponding function-name
+dnl $6 = flag, nonnull if failure causes an error-exit
dnl
dnl Sets the variable "$cf_libdir" as a side-effect, so we can see if we had
dnl to use a -L option.
AC_DEFUN([CF_FIND_LIBRARY],
[
- cf_cv_have_lib_$1=no
+ eval 'cf_cv_have_lib_'$1'=no'
cf_libdir=""
- AC_CHECK_FUNC($4,cf_cv_have_lib_$1=yes,[
+ AC_CHECK_FUNC($5,
+ eval 'cf_cv_have_lib_'$1'=yes',[
cf_save_LIBS="$LIBS"
- AC_MSG_CHECKING(for $4 in -l$1)
+ AC_MSG_CHECKING(for $5 in -l$1)
LIBS="-l$1 $LIBS"
- AC_TRY_LINK([$2],[$3],
+ AC_TRY_LINK([$3],[$4],
[AC_MSG_RESULT(yes)
- cf_cv_have_lib_$1=yes
+ eval 'cf_cv_have_lib_'$1'=yes'
],
[AC_MSG_RESULT(no)
- CF_LIBRARY_PATH(cf_search,$1)
+ CF_LIBRARY_PATH(cf_search,$2)
for cf_libdir in $cf_search
do
AC_MSG_CHECKING(for -l$1 in $cf_libdir)
LIBS="-L$cf_libdir -l$1 $cf_save_LIBS"
- AC_TRY_LINK([$2],[$3],
+ AC_TRY_LINK([$3],[$4],
[AC_MSG_RESULT(yes)
- cf_cv_have_lib_$1=yes
+ eval 'cf_cv_have_lib_'$1'=yes'
break],
[AC_MSG_RESULT(no)
LIBS="$cf_save_LIBS"])
done
])
])
-if test $cf_cv_have_lib_$1 = no ; then
+eval 'cf_found_library=[$]cf_cv_have_lib_'$1
+ifelse($6,,[
+if test $cf_found_library = no ; then
AC_ERROR(Cannot link $1 library)
fi
-case $host_os in #(vi
-linux*) # Suse Linux does not follow /usr/lib convention
- LIBS="$LIBS -L/lib"
- ;;
-esac
+])
])dnl
dnl ---------------------------------------------------------------------------
dnl Check for availability of fcntl versus ioctl(,FIONBIO,). Lynx uses this
@@ -1004,6 +1406,95 @@ AC_TRY_LINK([
test "$cf_cv_fionbio" = "fcntl" && AC_DEFINE(USE_FCNTL)
])dnl
dnl ---------------------------------------------------------------------------
+dnl Look for a working version of getaddrinfo(), for IPV6 support.
+AC_DEFUN([CF_FUNC_GETADDRINFO],[
+AC_CACHE_CHECK(working getaddrinfo, cf_cv_getaddrinfo,[
+AC_TRY_RUN([
+#include <sys/types.h>
+#include <netdb.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#define expect(a,b) if (strcmp(a,b) != 0) goto bad
+
+int main()
+{
+ int passive, gaierr, inet4 = 0, inet6 = 0;
+ struct addrinfo hints, *ai, *aitop;
+ char straddr[INET6_ADDRSTRLEN], strport[16];
+
+ for (passive = 0; passive <= 1; passive++) {
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_flags = passive ? AI_PASSIVE : 0;
+ hints.ai_socktype = SOCK_STREAM;
+ if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) {
+ (void)gai_strerror(gaierr);
+ goto bad;
+ }
+ for (ai = aitop; ai; ai = ai->ai_next) {
+ if (ai->ai_addr == NULL ||
+ ai->ai_addrlen == 0 ||
+ getnameinfo(ai->ai_addr, ai->ai_addrlen,
+ straddr, sizeof(straddr), strport, sizeof(strport),
+ NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
+ goto bad;
+ }
+ switch (ai->ai_family) {
+ case AF_INET:
+ expect(strport, "54321");
+ if (passive) {
+ expect(straddr, "0.0.0.0");
+ } else {
+ expect(straddr, "127.0.0.1");
+ }
+ inet4++;
+ break;
+ case AF_INET6:
+ expect(strport, "54321");
+ if (passive) {
+ expect(straddr, "::");
+ } else {
+ expect(straddr, "::1");
+ }
+ inet6++;
+ break;
+ case AF_UNSPEC:
+ goto bad;
+ break;
+ default:
+ /* another family support? */
+ break;
+ }
+ }
+ }
+
+ if (!(inet4 == 0 || inet4 == 2))
+ goto bad;
+ if (!(inet6 == 0 || inet6 == 2))
+ goto bad;
+
+ if (aitop)
+ freeaddrinfo(aitop);
+ exit(0);
+
+ bad:
+ if (aitop)
+ freeaddrinfo(aitop);
+ exit(1);
+}
+],
+[cf_cv_getaddrinfo=yes],
+[cf_cv_getaddrinfo=no],
+[cf_cv_getaddrinfo=unknown])
+])
+if test "$cf_cv_getaddrinfo" = yes ; then
+ AC_DEFINE(HAVE_GAI_STRERROR)
+ AC_DEFINE(HAVE_GETADDRINFO)
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
dnl A conventional existence-check for 'lstat' won't work with the Linux
dnl version of gcc 2.7.0, since the symbol is defined only within <sys/stat.h>
dnl as an inline function.
@@ -1026,6 +1517,25 @@ if test $ac_cv_func_lstat = yes; then
fi
])dnl
dnl ---------------------------------------------------------------------------
+dnl Check if we have the sigaction function and related structures.
+AC_DEFUN([CF_FUNC_SIGACTION],[
+AC_CACHE_CHECK(for sigaction and structs,cf_cv_func_sigaction,[
+AC_TRY_LINK([
+#include <sys/types.h>
+#include <signal.h>],
+ [struct sigaction act;
+ act.sa_handler = SIG_DFL;
+#ifdef SA_RESTART
+ act.sa_flags |= SA_RESTART;
+#endif /* SA_RESTART */
+ sigaction(1, &act, 0);
+ ],
+ [cf_cv_func_sigaction=yes],
+ [cf_cv_func_sigaction=no])
+])
+test "$cf_cv_func_sigaction" = yes && AC_DEFINE(HAVE_SIGACTION)
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Test for the presence of <sys/wait.h>, 'union wait', arg-type of 'wait()'
dnl and/or 'waitpid()'.
dnl
@@ -1069,7 +1579,7 @@ dnl compiler warnings. Though useful, not all are supported -- and contrary
dnl to documentation, unrecognized directives cause older compilers to barf.
AC_DEFUN([CF_GCC_ATTRIBUTES],
[
-if test -n "$GCC"
+if test "$GCC" = yes
then
cat > conftest.i <<EOF
#ifndef GCC_PRINTF
@@ -1085,10 +1595,9 @@ cat > conftest.i <<EOF
#define GCC_UNUSED /* nothing */
#endif
EOF
-if test -n "$GCC"
+if test "$GCC" = yes
then
- AC_CHECKING([for gcc __attribute__ directives])
- changequote(,)dnl
+ AC_CHECKING([for $CC __attribute__ directives])
cat > conftest.$ac_ext <<EOF
#line __oline__ "configure"
#include "confdefs.h"
@@ -1107,14 +1616,13 @@ cat > conftest.$ac_ext <<EOF
extern void wow(char *,...) GCC_SCANFLIKE(1,2);
extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
extern void foo(void) GCC_NORETURN;
-int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED) { return 0; }
+int main(int argc GCC_UNUSED, char *argv[[]] GCC_UNUSED) { return 0; }
EOF
- changequote([,])dnl
for cf_attribute in scanf printf unused noreturn
do
CF_UPPER(CF_ATTRIBUTE,$cf_attribute)
cf_directive="__attribute__(($cf_attribute))"
- echo "checking for gcc $cf_directive" 1>&AC_FD_CC
+ echo "checking for $CC $cf_directive" 1>&AC_FD_CC
case $cf_attribute in
scanf|printf)
cat >conftest.h <<EOF
@@ -1152,15 +1660,13 @@ dnl -pedantic
dnl
AC_DEFUN([CF_GCC_WARNINGS],
[
-if test -n "$GCC"
+if test "$GCC" = yes
then
- changequote(,)dnl
cat > conftest.$ac_ext <<EOF
#line __oline__ "configure"
-int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
+int main(int argc, char *argv[[]]) { return (argv[[argc-1]] == 0) ; }
EOF
- changequote([,])dnl
- AC_CHECKING([for gcc warning options])
+ AC_CHECKING([for $CC warning options])
cf_save_CFLAGS="$CFLAGS"
EXTRA_CFLAGS="-W -Wall"
cf_warn_CONST=""
@@ -1190,20 +1696,62 @@ fi
AC_SUBST(EXTRA_CFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
+dnl Check if we must define _GNU_SOURCE to get a reasonable value for
+dnl _XOPEN_SOURCE, upon which many POSIX definitions depend. This is a defect
+dnl (or misfeature) of glibc2, which breaks portability of many applications,
+dnl since it is interwoven with GNU extensions.
+dnl
+dnl Well, yes we could work around it...
+AC_DEFUN([CF_GNU_SOURCE],
+[
+AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[
+AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifndef _XOPEN_SOURCE
+make an error
+#endif],
+ [cf_cv_gnu_source=no],
+ [cf_save="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+ AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifdef _XOPEN_SOURCE
+make an error
+#endif],
+ [cf_cv_gnu_source=no],
+ [cf_cv_gnu_source=yes])
+ CPPFLAGS="$cf_save"
+ ])
+])
+test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Construct a search-list for a nonstandard header-file
AC_DEFUN([CF_HEADER_PATH],
[$1=""
-if test -d "$includedir" ; then
-test "$includedir" != NONE && $1="[$]$1 $includedir $includedir/$2"
-fi
-if test -d "$oldincludedir" ; then
-test "$oldincludedir" != NONE && $1="[$]$1 $oldincludedir $oldincludedir/$2"
-fi
-if test -d "$prefix"; then
-test "$prefix" != NONE && $1="[$]$1 $prefix/include $prefix/include/$2"
-fi
-test "$prefix" != /usr/local && $1="[$]$1 /usr/local/include /usr/local/include/$2"
-test "$prefix" != /usr && $1="[$]$1 /usr/include /usr/include/$2"
+
+test "$includedir" != NONE && \
+test -d "$includedir" && \
+$1="[$]$1 $includedir $includedir/$2"
+
+test "$oldincludedir" != NONE && \
+test -d "$oldincludedir" && \
+$1="[$]$1 $oldincludedir $oldincludedir/$2"
+
+test "$prefix" != NONE && \
+test -d "$prefix" && \
+$1="[$]$1 $prefix/include $prefix/include/$2 $prefix/$2/include"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+$1="[$]$1 /usr/local/include /usr/local/include/$2 /usr/local/$2/include"
+
+test "$prefix" != /usr && \
+$1="[$]$1 /usr/include /usr/include/$2 /usr/$2/include"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+$1="[$]$1 /opt/include /opt/include/$2 /opt/$2/include"
+
+$1="[$]$1 [$]HOME/lib [$]HOME/lib/$2 [$]HOME/$2/lib"
])dnl
dnl ---------------------------------------------------------------------------
dnl Insert text into the help-message, for readability, from AC_ARG_WITH.
@@ -1263,21 +1811,64 @@ else
fi
])dnl
dnl ---------------------------------------------------------------------------
+dnl Check for header defining _PATH_LASTLOG, or failing that, see if the lastlog
+dnl file exists.
+AC_DEFUN([CF_LASTLOG],
+[
+AC_CHECK_HEADERS(lastlog.h paths.h)
+AC_CACHE_CHECK(for lastlog path,cf_cv_path_lastlog,[
+AC_TRY_COMPILE([
+#include <sys/types.h>
+#ifdef HAVE_LASTLOG_H
+#include <lastlog.h>
+#else
+#ifdef HAVE_PATHS_H
+#include <paths.h>
+#endif
+#endif],[char *path = _PATH_LASTLOG],
+ [cf_cv_path_lastlog="_PATH_LASTLOG"],
+ [if test -f /usr/adm/lastlog ; then
+ cf_cv_path_lastlog=/usr/adm/lastlog
+ else
+ cf_cv_path_lastlog=no
+ fi])
+])
+test $cf_cv_path_lastlog != no && AC_DEFINE(USE_LASTLOG)
+]
+)dnl
+dnl ---------------------------------------------------------------------------
dnl Construct a search-list for a nonstandard library-file
AC_DEFUN([CF_LIBRARY_PATH],
[$1=""
-if test -d "$libdir" ; then
-test "$libdir" != NONE && $1="[$]$1 $libdir $libdir/$2"
-fi
-if test -d "$exec_prefix"; then
-test "$exec_prefix" != NONE && $1="[$]$1 $exec_prefix/lib $exec_prefix/lib/$2"
-fi
-if test -d "$prefix"; then
-test "$prefix" != NONE && \
-test "$prefix" != "$exec_prefix" && $1="[$]$1 $prefix/lib $prefix/lib/$2"
-fi
-test "$prefix" != /usr/local && $1="[$]$1 /usr/local/lib /usr/local/lib/$2"
-test "$prefix" != /usr && $1="[$]$1 /usr/lib /usr/lib/$2"
+
+test "$libdir" != NONE && \
+test -d $libdir && \
+$1="[$]$1 $libdir $libdir/$2"
+
+test "$exec_prefix" != NONE && \
+test -d $exec_prefix && \
+$1="[$]$1 $exec_prefix/lib $exec_prefix/lib/$2"
+
+test "$prefix" != NONE && \
+test "$prefix" != "$exec_prefix" && \
+test -d $prefix && \
+$1="[$]$1 $prefix/lib $prefix/lib/$2 $prefix/$2/lib"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+$1="[$]$1 /usr/local/lib /usr/local/lib/$2 /usr/local/$2/lib"
+
+test "$prefix" != /usr && \
+$1="[$]$1 /usr/lib /usr/lib/$2 /usr/$2/lib"
+
+test "$prefix" != / && \
+$1="[$]$1 /lib /lib/$2 /$2/lib"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+$1="[$]$1 /opt/lib /opt/lib/$2 /opt/$2/lib"
+
+$1="[$]$1 [$]HOME/lib [$]HOME/lib/$2 [$]HOME/$2/lib"
])dnl
dnl ---------------------------------------------------------------------------
dnl Check if we've got setlocale() and its header, <locale.h>
@@ -1294,6 +1885,12 @@ AC_MSG_RESULT($cf_cv_locale)
test $cf_cv_locale = yes && AC_DEFINE(LOCALE)
])
dnl ---------------------------------------------------------------------------
+dnl Write a debug message to config.log, along with the line number in the
+dnl configure script.
+AC_DEFUN([CF_MSG_LOG],[
+echo "(line __oline__) testing $* ..." 1>&AC_FD_CC
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Check for pre-1.9.9g ncurses (among other problems, the most obvious is
dnl that color combinations don't work).
AC_DEFUN([CF_NCURSES_BROKEN],
@@ -1322,14 +1919,16 @@ fi
])dnl
dnl ---------------------------------------------------------------------------
dnl Look for the SVr4 curses clone 'ncurses' in the standard places, adjusting
-dnl the CPPFLAGS variable.
+dnl the CPPFLAGS variable so we can include its header.
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 The header files may be installed as either curses.h, or ncurses.h (would
+dnl be obsolete, except that some packagers prefer this name to distinguish it
+dnl from a "native" curses implementation). If not installed for overwrite,
+dnl the curses.h file would be in an ncurses subdirectory (e.g.,
+dnl /usr/include/ncurses), but someone may have installed overwriting the
+dnl vendor's curses. Only very old versions (pre-1.9.2d, the first autoconf'd
+dnl version) of ncurses don't define either __NCURSES_H or NCURSES_VERSION in
+dnl 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
@@ -1337,9 +1936,14 @@ 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>],[
+AC_CACHE_CHECK(for ncurses header in include-path, cf_cv_ncurses_h,[
+ for cf_header in \
+ curses.h \
+ ncurses.h \
+ ncurses/curses.h \
+ ncurses/ncurses.h
+ do
+ AC_TRY_COMPILE([#include <$cf_header>],[
#ifdef NCURSES_VERSION
printf("%s\n", NCURSES_VERSION);
#else
@@ -1349,50 +1953,64 @@ printf("old\n");
make an error
#endif
#endif
- ],
- [cf_cv_ncurses_header=predefined],[
+ ]
+ ,[cf_cv_ncurses_h=$cf_header; break]
+ ,[cf_cv_ncurses_h=no])
+ done
+])
+
+if test "$cf_cv_ncurses_h" != no ; then
+ cf_cv_ncurses_header=$cf_cv_ncurses_h
+else
+AC_CACHE_CHECK(for ncurses include-path, cf_cv_ncurses_h2,[
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
+ ncurses.h \
+ curses.h
do
-changequote(,)dnl
- if egrep "NCURSES_[VH]" $cf_incdir/$cf_header 1>&AC_FD_CC 2>&1; then
-changequote([,])dnl
- cf_cv_ncurses_header=$cf_incdir/$cf_header
+ if egrep "NCURSES_[[VH]]" $cf_incdir/$cf_header 1>&AC_FD_CC 2>&1; then
+ cf_cv_ncurses_h2=$cf_incdir/$cf_header
test -n "$verbose" && echo $ac_n " ... found $ac_c" 1>&AC_FD_MSG
break
fi
test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&AC_FD_MSG
done
- test -n "$cf_cv_ncurses_header" && break
+ test -n "$cf_cv_ncurses_h2" && break
done
- test -z "$cf_cv_ncurses_header" && AC_ERROR(not found)
- ])])
-AC_MSG_RESULT($cf_cv_ncurses_header)
+ test -z "$cf_cv_ncurses_h2" && AC_ERROR(not found)
+ ])
+
+ CF_DIRNAME(cf_1st_incdir,$cf_cv_ncurses_h2)
+ CF_DIRNAME(cf_2nd_incdir,$cf_1st_incdir)
+ cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2`
+ echo cf_1st_include=$cf_1st_incdir
+ echo cf_2nd_include=$cf_2nd_incdir
+ if test `basename $cf_1st_incdir` = ncurses ; then
+ cf_cv_ncurses_header=ncurses/$cf_cv_ncurses_header
+ CF_ADD_INCDIR($cf_2nd_incdir)
+ fi
+ CF_ADD_INCDIR($cf_1st_incdir)
+
+fi
+
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)
+*ncurses.h)
AC_DEFINE(HAVE_NCURSES_H)
;;
esac
case $cf_cv_ncurses_header in # (vi
-predefined) # (vi
- cf_cv_ncurses_header=curses.h
- ;;
-*)
- CF_ADD_INCDIR($cf_incdir)
+ncurses/curses.h|ncurses/ncurses.h)
+ AC_DEFINE(HAVE_NCURSES_NCURSES_H)
;;
esac
+
CF_NCURSES_VERSION
])dnl
dnl ---------------------------------------------------------------------------
@@ -1424,7 +2042,7 @@ freebsd*)
esac
LIBS="$cf_ncurses_LIBS $LIBS"
-CF_FIND_LIBRARY(ncurses,
+CF_FIND_LIBRARY(ncurses,ncurses,
[#include <${cf_cv_ncurses_header-curses.h}>],
[initscr()],
initscr)
@@ -1447,13 +2065,17 @@ fi
])dnl
dnl ---------------------------------------------------------------------------
dnl Check for the version of ncurses, to aid in reporting bugs, etc.
+dnl Call CF_CURSES_CPPFLAGS first, or CF_NCURSES_CPPFLAGS. We don't use
+dnl AC_REQUIRE since that does not work with the shell's if/then/else/fi.
AC_DEFUN([CF_NCURSES_VERSION],
-[AC_MSG_CHECKING(for ncurses version)
-AC_CACHE_VAL(cf_cv_ncurses_version,[
+[
+AC_CACHE_CHECK(for ncurses version, cf_cv_ncurses_version,[
cf_cv_ncurses_version=no
cf_tempfile=out$$
+ rm -f $cf_tempfile
AC_TRY_RUN([
#include <${cf_cv_ncurses_header-curses.h}>
+#include <stdio.h>
int main()
{
FILE *fp = fopen("$cf_tempfile", "w");
@@ -1472,8 +2094,7 @@ int main()
#endif
exit(0);
}],[
- cf_cv_ncurses_version=`cat $cf_tempfile`
- rm -f $cf_tempfile],,[
+ cf_cv_ncurses_version=`cat $cf_tempfile`],,[
# This will not work if the preprocessor splits the line after the
# Autoconf token. The 'unproto' program does that.
@@ -1492,14 +2113,14 @@ EOF
cf_try="$ac_cpp conftest.$ac_ext 2>&AC_FD_CC | grep '^Autoconf ' >conftest.out"
AC_TRY_EVAL(cf_try)
if test -f conftest.out ; then
-changequote(,)dnl
- cf_out=`cat conftest.out | sed -e 's@^Autoconf @@' -e 's@^[^"]*"@@' -e 's@".*@@'`
-changequote([,])dnl
+ cf_out=`cat conftest.out | sed -e 's@^Autoconf @@' -e 's@^[[^"]]*"@@' -e 's@".*@@'`
test -n "$cf_out" && cf_cv_ncurses_version="$cf_out"
rm -f conftest.out
fi
-])])
-AC_MSG_RESULT($cf_cv_ncurses_version)
+])
+ rm -f $cf_tempfile
+])
+test "$cf_cv_ncurses_version" = no || AC_DEFINE(NCURSES)
])
dnl ---------------------------------------------------------------------------
dnl After checking for functions in the default $LIBS, make a further check
@@ -1524,7 +2145,8 @@ AC_CHECK_FUNCS(gethostname,,[
#
# FIXME: sequent needs this library (i.e., -lsocket -linet -lnsl), but
# I don't know the entrypoints - 97/7/22 TD
-AC_HAVE_LIBRARY(inet,cf_cv_netlibs="-linet $cf_cv_netlibs")
+# AC_HAVE_LIBRARY(inet,cf_cv_netlibs="-linet $cf_cv_netlibs")
+AC_CHECK_LIB(inet, main, cf_cv_netlibs="-linet $cf_cv_netlibs")
#
if test "$ac_cv_func_lsocket" != no ; then
AC_CHECK_FUNCS(socket,,[
@@ -1580,6 +2202,7 @@ dnl Check if we use the messages included with this program
AC_DEFUN([CF_OUR_MESSAGES],
[
use_our_messages=no
+if test "$USE_NLS" = yes ; then
if test -d $srcdir/po ; then
AC_MSG_CHECKING(if we should use included message-library)
AC_ARG_ENABLE(included-msgs,
@@ -1588,10 +2211,22 @@ AC_MSG_CHECKING(if we should use included message-library)
[use_our_messages=yes])
fi
AC_MSG_RESULT($use_our_messages)
+fi
test $use_our_messages = yes && USE_OUR_MESSAGES=
AC_SUBST(USE_OUR_MESSAGES)
])dnl
dnl ---------------------------------------------------------------------------
+dnl Provide a value for the $PATH and similar separator
+AC_DEFUN([CF_PATHSEP],
+[
+ case $cf_cv_system_name in
+ os2*) PATHSEP=';' ;;
+ *) PATHSEP=':' ;;
+ esac
+ifelse($1,,,[$1=$PATHSEP])
+ AC_SUBST(PATHSEP)
+])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.
@@ -1645,6 +2280,8 @@ AC_DEFUN([CF_PATH_SYNTAX],[
case ".[$]$1" in #(vi
./*) #(vi
;;
+.[[a-zA-Z]]:[[\\/]]*) #(vi OS/2 EMX
+ ;;
.\[$]{*prefix}*) #(vi
eval $1="[$]$1"
case ".[$]$1" in #(vi
@@ -1657,11 +2294,37 @@ case ".[$]$1" in #(vi
$1=`echo [$]$1 | sed -e s@NONE@$ac_default_prefix@`
;;
*)
- AC_ERROR(expected a pathname)
+ AC_ERROR(expected a pathname, not "[$]$1")
;;
esac
])dnl
dnl ---------------------------------------------------------------------------
+dnl Configure for PDCurses' X11 library
+AC_DEFUN([CF_PDCURSES_X11],[
+AC_REQUIRE([CF_X_ATHENA])
+LDFLAGS="$LDFLAGS $X_LIBS"
+CF_ADD_CFLAGS($X_CFLAGS)
+AC_CHECK_LIB(X11,XOpenDisplay,
+ [LIBS="-lX11 $LIBS"],,
+ [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])
+AC_CACHE_CHECK(for XCurses library,cf_cv_lib_XCurses,[
+LIBS="-lXCurses $LIBS"
+AC_TRY_LINK([
+#include <xcurses.h>
+char *XCursesProgramName = "test";
+],[XCursesExit();],
+[cf_cv_lib_XCurses=yes],
+[cf_cv_lib_XCurses=no])
+])
+if test $cf_cv_lib_XCurses = yes ; then
+ AC_DEFINE(UNIX)
+ AC_DEFINE(XCURSES)
+ AC_DEFINE(HAVE_XCURSES)
+else
+ AC_ERROR(Cannot link with XCurses)
+fi
+])
+dnl ---------------------------------------------------------------------------
dnl Re-check on a function to see if we can pick it up by adding a library.
dnl $1 = function to check
dnl $2 = library to check in
@@ -1679,7 +2342,7 @@ AC_CHECK_LIB($2,$1,[
CF_UPPER(cf_tr_func,$1)
AC_DEFINE_UNQUOTED(HAVE_$cf_tr_func)
ac_cv_func_$1=yes
- $3="-l$2 [$]$3"],[
+ if test "$cf_used_lib_$2" != yes ; then cf_used_lib_$2=yes; $3="-l$2 [$]$3"; fi],[
ac_cv_func_$1=unknown
unset ac_cv_func_$1 2>/dev/null
$4],
@@ -1714,29 +2377,51 @@ AC_MSG_RESULT($cf_cv_baddef_remove)
test "$cf_cv_baddef_remove" != no && AC_DEFINE(NEED_REMOVE)
])dnl
dnl ---------------------------------------------------------------------------
+dnl Check if 'errno' is declared in a fashion that lets us set it.
+AC_DEFUN([CF_SET_ERRNO],
+[
+AC_CACHE_CHECK(if we can set errno,cf_cv_set_errno,[
+AC_TRY_RUN([
+#include <errno.h>
+int main()
+{
+ errno = 255;
+ exit(errno != 255);
+}],
+ [cf_cv_set_errno=yes],
+ [cf_cv_set_errno=no],
+ [AC_TRY_LINK(
+ [#include <errno.h>],
+ [errno = 255],
+ [cf_cv_set_errno=maybe],
+ [cf_cv_set_errno=no])])
+])
+test "$cf_cv_set_errno" != no && AC_DEFINE(CAN_SET_ERRNO)
+])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,[
+AC_REQUIRE([CF_STRUCT_TERMIOS])
+AC_CACHE_CHECK(declaration of size-change, cf_cv_sizechange,[
cf_cv_sizechange=unknown
- cf_save_CFLAGS="$CFLAGS"
+ cf_save_CPPFLAGS="$CPPFLAGS"
for cf_opts in "" "NEED_PTEM_H"
do
- CFLAGS="$cf_save_CFLAGS"
- test -n "$cf_opts" && CFLAGS="$CFLAGS -D$cf_opts"
+ CPPFLAGS="$cf_save_CPPFLAGS"
+ test -n "$cf_opts" && CPPFLAGS="$CPPFLAGS -D$cf_opts"
AC_TRY_COMPILE([#include <sys/types.h>
-#if HAVE_TERMIOS_H
+#ifdef HAVE_TERMIOS_H
#include <termios.h>
#else
-#if HAVE_TERMIO_H
+#ifdef HAVE_TERMIO_H
#include <termio.h>
#endif
#endif
-#if NEED_PTEM_H
+#ifdef 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
*/
@@ -1764,16 +2449,22 @@ do
[cf_cv_sizechange=yes],
[cf_cv_sizechange=no])
- CFLAGS="$cf_save_CFLAGS"
+ CPPFLAGS="$cf_save_CPPFLAGS"
if test "$cf_cv_sizechange" = yes ; then
echo "size-change succeeded ($cf_opts)" >&AC_FD_CC
- test -n "$cf_opts" && AC_DEFINE_UNQUOTED($cf_opts)
+ test -n "$cf_opts" && cf_cv_sizechange="$cf_opts"
break
fi
done
- ])
-AC_MSG_RESULT($cf_cv_sizechange)
-test $cf_cv_sizechange != no && AC_DEFINE(HAVE_SIZECHANGE)
+])
+if test "$cf_cv_sizechange" != no ; then
+ AC_DEFINE(HAVE_SIZECHANGE)
+ case $cf_cv_sizechange in #(vi
+ NEED*)
+ AC_DEFINE_UNQUOTED($cf_cv_sizechange )
+ ;;
+ esac
+fi
])dnl
dnl ---------------------------------------------------------------------------
dnl Look for the slang header files in the standard places, adjusting the
@@ -1805,9 +2496,7 @@ AC_CACHE_VAL(cf_cv_slang_header,[
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_DIRNAME(cf_incdir,$cf_cv_slang_header)
case $cf_cv_slang_header in # (vi
predefined) # (vi
@@ -1825,7 +2514,15 @@ cf_slang_LIBS1="$LIBS"
CF_TERMCAP_LIBS
cf_slang_LIBS2="$LIBS"
AC_CHECK_FUNC(acos,,[CF_RECHECK_FUNC(acos,m,LIBS)])
-CF_FIND_LIBRARY(slang,
+case $host_os in #(vi
+os2*)
+ CF_FIND_LIBRARY(video,video,
+ [#include <sys/video.h>],
+ [v_init()],
+ v_init)
+ ;;
+esac
+CF_FIND_LIBRARY(slang,slang,
[#include <slang.h>],
[SLtt_get_screen_size()],
SLtt_get_screen_size)
@@ -1845,15 +2542,47 @@ AC_MSG_RESULT($cf_result)
test $cf_result = no && LIBS="$cf_slang_LIBS3"
])dnl
dnl ---------------------------------------------------------------------------
+dnl Slang's header files rely on some predefined symbols to declare variables
+dnl that we might find useful. This check is needed, because those symbols
+dnl are generally not available.
+AC_DEFUN([CF_SLANG_UNIX_DEFS],
+[
+AC_REQUIRE([CF_SLANG_CPPFLAGS])
+AC_REQUIRE([CF_SLANG_LIBS])
+AC_CACHE_CHECK(if we must tell slang this is UNIX,cf_cv_slang_unix,[
+AC_TRY_LINK([#include <slang.h>],
+ [
+#ifdef REAL_UNIX_SYSTEM
+make an error
+#else
+extern int SLang_TT_Baud_Rate;
+SLang_TT_Baud_Rate = 1
+#endif
+],
+ [cf_cv_slang_unix=yes],
+ [cf_cv_slang_unix=no])
+])
+test $cf_cv_slang_unix = yes && AC_DEFINE(REAL_UNIX_SYSTEM)
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Check for socks library
dnl $1 = the [optional] directory in which the library may be found
-dnl $2 = the [optional] name of the library
AC_DEFUN([CF_SOCKS],[
case "$1" in #(vi
no|yes) #(vi
;;
*)
- LIBS="$LIBS -L$1"
+ if test -d $1 ; then
+ if test -d $1/include ; then
+ CPPFLAGS="$CPPFLAGS -I$1/include"
+ LIBS="$LIBS -L$1/lib"
+ else
+ LIBS="$LIBS -L$1"
+ test -d $1/../include && CPPFLAGS="$CPPFLAGS -I$1/../include"
+ fi
+ else
+ AC_MSG_WARN(expected a directory: $1)
+ fi
;;
esac
LIBS="$LIBS -lsocks"
@@ -1879,14 +2608,24 @@ case "$1" in #(vi
no|yes) #(vi
;;
*)
- LIBS="$LIBS -L$1"
- CFLAGS="$CFLAGS -I$1/../include"
+ if test -d $1 ; then
+ if test -d $1/include ; then
+ CPPFLAGS="$CPPFLAGS -I$1/include"
+ LIBS="$LIBS -L$1/lib"
+ else
+ LIBS="$LIBS -L$1"
+ test -d $1/../include && CPPFLAGS="$CPPFLAGS -I$1/../include"
+ fi
+ else
+ AC_MSG_WARN(expected a directory: $1)
+ fi
;;
esac
LIBS="$LIBS -lsocks5"
AC_DEFINE(USE_SOCKS5)
AC_DEFINE(SOCKS)
AC_MSG_CHECKING(if the socks library uses socks4 prefix)
+cf_use_socks4=error
AC_TRY_LINK([
#include <socks.h>],[
Rinit((char *)0)],
@@ -1912,6 +2651,133 @@ else
AC_DEFINE(getsockname,SOCKSgetsockname)
AC_DEFINE(recvfrom,SOCKSrecvfrom)
fi
+AC_MSG_CHECKING(if socks5p.h is available)
+AC_TRY_COMPILE([
+#define INCLUDE_PROTOTYPES
+#include <socks.h>],[
+ init((char *)0)],
+ [cf_use_socks5p_h=yes],
+ [cf_use_socks5p_h=no])
+AC_MSG_RESULT($cf_use_socks5p_h)
+test "$cf_use_socks5p_h" = yes && AC_DEFINE(INCLUDE_PROTOTYPES)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check for functions similar to srand() and rand(). lrand48() and random()
+dnl return a 31-bit value, while rand() returns a value less than RAND_MAX
+dnl which usually is only 16-bits.
+AC_DEFUN([CF_SRAND],[
+AC_CACHE_CHECK(for random-integer functions, cf_cv_srand_func,[
+cf_cv_srand_func=unknown
+for cf_func in srand48/lrand48 srandom/random srand/rand
+do
+ cf_srand_func=`echo $cf_func | sed -e 's@/.*@@'`
+ cf_rand_func=`echo $cf_func | sed -e 's@.*/@@'`
+AC_TRY_LINK([
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+],[long seed = 1; $cf_srand_func(seed); seed = $cf_rand_func()],
+[cf_cv_srand_func=$cf_func
+ break])
+done
+])
+if test "$cf_cv_srand_func" != unknown ; then
+ AC_CACHE_CHECK(for range of random-integers, cf_cv_rand_max,[
+ case $cf_cv_srand_func in
+ srand/rand)
+ cf_cv_rand_max=RAND_MAX
+ cf_rand_max=16
+ ;;
+ *)
+ cf_cv_rand_max=INT_MAX
+ cf_rand_max=31
+ ;;
+ esac
+ AC_TRY_COMPILE([
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+ ],[long x = $cf_cv_rand_max],,
+ [cf_cv_rand_max="(1L<<$cf_rand_max)-1"])
+ ])
+ cf_srand_func=`echo $cf_func | sed -e 's@/.*@@'`
+ cf_rand_func=`echo $cf_func | sed -e 's@.*/@@'`
+ CF_UPPER(cf_rand_max,ifelse($1,,my_,$1)rand_max)
+ AC_DEFINE_UNQUOTED(ifelse($1,,my_,$1)srand,$cf_srand_func)
+ AC_DEFINE_UNQUOTED(ifelse($1,,my_,$1)rand, $cf_rand_func)
+ AC_DEFINE_UNQUOTED([$]cf_rand_max, $cf_cv_rand_max)
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check for ssl library
+dnl $1 = the [optional] directory in which the library may be found
+AC_DEFUN([CF_SSL],[
+cf_ssl_library="-lssl -lcrypto"
+case "$1" in #(vi
+no) #(vi
+ ;;
+yes) #(vi
+ AC_CHECK_LIB(ssl, SSL_get_version,[],[
+ if test -d /usr/local/ssl ; then
+ CF_VERBOSE(assume it is in /usr/local/ssl)
+ cf_ssl_library="-L/usr/local/ssl/lib $cf_ssl_library"
+ CPPFLAGS="-I/usr/local/ssl/include $CPPFLAGS"
+ else
+ AC_MSG_ERROR(cannot find ssl library)
+ fi
+ ],
+ [-lcrypto])
+ ;;
+*)
+ if test -d $1 ; then
+ if test -d $1/include ; then
+ CPPFLAGS="$CPPFLAGS -I$1/include"
+ cf_ssl_library="-L$1/lib $cf_ssl_library"
+ else
+ cf_ssl_library="-L$1 $cf_ssl_library"
+ test -d $1/../include && CPPFLAGS="$CPPFLAGS -I$1/../include"
+ fi
+ else
+ AC_MSG_WARN(expected a directory: $1)
+ fi
+ ;;
+esac
+LIBS="$cf_ssl_library $LIBS"
+
+AC_MSG_CHECKING(for openssl include directory)
+AC_TRY_COMPILE([
+#include <stdio.h>
+#include <openssl/ssl.h>],
+ [SSL_shutdown((SSL *)0)],
+ [cf_openssl_incl=yes],
+ [cf_openssl_incl=no])
+AC_MSG_RESULT($cf_openssl_incl)
+test "$cf_openssl_incl" = yes && AC_DEFINE(USE_OPENSSL_INCL)
+
+AC_MSG_CHECKING(if we can link to ssl library)
+AC_TRY_LINK([
+#include <stdio.h>
+#ifdef USE_OPENSSL_INCL
+#include <openssl/ssl.h>
+#else
+#include <ssl.h>
+#endif
+],
+ [SSL_shutdown((SSL *)0)],
+ [cf_ssl_library=yes],
+ [cf_ssl_library=no])
+AC_MSG_RESULT($cf_ssl_library)
+if test "$cf_ssl_library" = yes ; then
+ AC_DEFINE(USE_SSL)
+else
+ AC_ERROR(Cannot link with ssl library)
+fi
])dnl
dnl ---------------------------------------------------------------------------
dnl Remove "-g" option from the compiler options
@@ -1920,9 +2786,41 @@ AC_DEFUN([CF_STRIP_G_OPT],
dnl ---------------------------------------------------------------------------
dnl Remove "-O" option from the compiler options
AC_DEFUN([CF_STRIP_O_OPT],[
-changequote(,)dnl
-$1=`echo ${$1} | sed -e 's/-O[1-9]\? //' -e 's/-O[1-9]\?$//'`
-changequote([,])dnl
+$1=`echo ${$1} | sed -e 's/-O[[1-9]]\? //' -e 's/-O[[1-9]]\?$//'`
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Some machines require _POSIX_SOURCE to completely define struct termios.
+dnl If so, define SVR4_TERMIO
+AC_DEFUN([CF_STRUCT_TERMIOS],[
+AC_CHECK_HEADERS( \
+termio.h \
+termios.h \
+unistd.h \
+)
+if test "$ISC" = yes ; then
+ AC_CHECK_HEADERS( sys/termio.h )
+fi
+if test "$ac_cv_header_termios_h" = yes ; then
+ case "$CFLAGS $CPPFLAGS" in
+ *-D_POSIX_SOURCE*)
+ termios_bad=dunno ;;
+ *) termios_bad=maybe ;;
+ esac
+ if test "$termios_bad" = maybe ; then
+ AC_MSG_CHECKING(whether termios.h needs _POSIX_SOURCE)
+ AC_TRY_COMPILE([#include <termios.h>],
+ [struct termios foo; int x = foo.c_iflag],
+ termios_bad=no, [
+ AC_TRY_COMPILE([
+#define _POSIX_SOURCE
+#include <termios.h>],
+ [struct termios foo; int x = foo.c_iflag],
+ termios_bad=unknown,
+ termios_bad=yes AC_DEFINE(SVR4_TERMIO))
+ ])
+ AC_MSG_RESULT($termios_bad)
+ fi
+fi
])dnl
dnl ---------------------------------------------------------------------------
AC_DEFUN([CF_SYSTEM_MAIL_FLAGS],
@@ -1941,6 +2839,26 @@ AC_MSG_RESULT($cf_cv_system_mail_flags)
AC_DEFINE_UNQUOTED(SYSTEM_MAIL_FLAGS, "$cf_cv_system_mail_flags")
])dnl
dnl ---------------------------------------------------------------------------
+dnl Check if this is a SYSV flavor of UTMP
+AC_DEFUN([CF_SYSV_UTMP],
+[
+AC_REQUIRE([CF_UTMP])
+AC_CACHE_CHECK(if $cf_cv_have_utmp is SYSV flavor,cf_cv_sysv_utmp,[
+test "$cf_cv_have_utmp" = "utmp" && cf_prefix="ut" || cf_prefix="utx"
+AC_TRY_LINK([
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>],[
+struct $cf_cv_have_utmp x;
+ set${cf_prefix}ent ();
+ get${cf_prefix}id(&x);
+ put${cf_prefix}line(&x);
+ end${cf_prefix}ent();],
+ [cf_cv_sysv_utmp=yes],
+ [cf_cv_sysv_utmp=no])
+])
+test $cf_cv_sysv_utmp = yes && AC_DEFINE(USE_SYSV_UTMP)
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Check for declaration of sys_nerr and sys_errlist in one of stdio.h and
dnl errno.h. Declaration of sys_errlist on BSD4.4 interferes with our
dnl declaration. Reported by Keith Bostic.
@@ -1970,27 +2888,39 @@ if test "$1" = ncurses; then
cf_cv_termlib=terminfo
fi
])
-# HP-UX 9.x terminfo has setupterm, but no tigetstr.
-if test "$cf_cv_termlib" = none; then
- AC_CHECK_LIB(termlib, tigetstr, [LIBS="$LIBS -ltermlib" cf_cv_termlib=terminfo])
-fi
if test "$cf_cv_termlib" = none; then
- AC_CHECK_LIB(termlib, tgoto, [LIBS="$LIBS -ltermlib" cf_cv_termlib=termcap])
+ # FreeBSD's linker gives bogus results for AC_CHECK_LIB, saying that
+ # tgetstr lives in -lcurses when it is only an unsatisfied extern.
+ cf_save_LIBS="$LIBS"
+ for cf_lib in curses ncurses termlib termcap
+ do
+ LIBS="-l$cf_lib $cf_save_LIBS"
+ for cf_func in tigetstr tgetstr
+ do
+ AC_MSG_CHECKING(for $cf_func in -l$cf_lib)
+ AC_TRY_LINK([],[int x=$cf_func("")],[cf_result=yes],[cf_result=no])
+ AC_MSG_RESULT($cf_result)
+ if test "$cf_result" = yes ; then
+ if test "$cf_func" = tigetstr ; then
+ cf_cv_termlib=terminfo
+ else
+ cf_cv_termlib=termcap
+ fi
+ break
+ fi
+ done
+ test "$cf_result" = yes && break
+ done
+ test "$cf_result" = no && LIBS="$cf_save_LIBS"
fi
if test "$cf_cv_termlib" = none; then
# allow curses library for broken AIX system.
AC_CHECK_LIB(curses, initscr, [LIBS="$LIBS -lcurses" cf_cv_termlib=termcap])
AC_CHECK_LIB(termcap, tgoto, [LIBS="$LIBS -ltermcap" cf_cv_termlib=termcap])
fi
-if test "$cf_cv_termlib" = none; then
- AC_CHECK_LIB(termcap, tgoto, [LIBS="$LIBS -ltermcap" cf_cv_termlib=termcap])
-fi
-if test "$cf_cv_termlib" = none; then
- AC_CHECK_LIB(ncurses, tgoto, [LIBS="$LIBS -lncurses" cf_cv_termlib=ncurses])
-fi
])
if test "$cf_cv_termlib" = none; then
- AC_ERROR([Can't find -ltermlib, -lcurses, or -ltermcap])
+ AC_MSG_WARN([Cannot find -ltermlib, -lcurses, or -ltermcap])
fi
])])dnl
dnl ---------------------------------------------------------------------------
@@ -1999,8 +2929,8 @@ dnl FIXME: this is too Lynx-specific
AC_DEFUN([CF_TERMIO_AND_CURSES],
[
AC_CACHE_CHECK(if we can include termio.h with curses,cf_cv_termio_and_curses,[
- cf_save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -DHAVE_CONFIG_H -I. -I${srcdir-.} -I${srcdir-.}/src -I${srcdir-.}/WWW/Library/Implementation"
+ cf_save_CFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -DHAVE_CONFIG_H -I. -I${srcdir-.} -I${srcdir-.}/src -I${srcdir-.}/WWW/Library/Implementation"
touch lynx_cfg.h
AC_TRY_COMPILE([
#include <$1>
@@ -2008,7 +2938,7 @@ AC_CACHE_CHECK(if we can include termio.h with curses,cf_cv_termio_and_curses,[
[putchar(0x0a)],
[cf_cv_termio_and_curses=yes],
[cf_cv_termio_and_curses=no])
- CFLAGS="$cf_save_CFLAGS"
+ CPPFLAGS="$cf_save_CFLAGS"
rm -f lynx_cfg.h
])
@@ -2095,29 +3025,160 @@ 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
+$1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
])dnl
dnl ---------------------------------------------------------------------------
+dnl Check for UTMP/UTMPX headers
AC_DEFUN([CF_UTMP],
[
-AC_MSG_CHECKING(if struct utmp is declared)
-AC_CACHE_VAL(cf_cv_have_utmp,[
+AC_REQUIRE([CF_LASTLOG])
+AC_CACHE_CHECK(for utmp implementation,cf_cv_have_utmp,[
+ cf_cv_have_utmp=no
+for cf_header in utmpx utmp ; do
AC_TRY_COMPILE([
#include <sys/types.h>
-#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])
- ])
+#include <${cf_header}.h>
+#define getutent getutxent
+#ifdef USE_LASTLOG
+#include <lastlog.h> /* may conflict with utmpx.h on Linux */
+#endif
+],
+ [struct $cf_header x;
+ char *name = x.ut_name; /* utmp.h and compatible definitions */
+ ],
+ [cf_cv_have_utmp=$cf_header
+ break],
+ [
+ AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <${cf_header}.h>
+#define getutent getutxent
+#ifdef USE_LASTLOG
+#include <lastlog.h> /* may conflict with utmpx.h on Linux */
+#endif
+],
+ [struct $cf_header x;
+ char *name = x.ut_user; /* utmpx.h must declare this */
+ ],
+ [cf_cv_have_utmp=$cf_header
+ AC_DEFINE(ut_name,ut_user)
+ break
+ ])])
+done
+])
+
+if test $cf_cv_have_utmp != no ; then
+ AC_DEFINE(HAVE_UTMP)
+ test $cf_cv_have_utmp = utmpx && AC_DEFINE(UTMPX_FOR_UTMP)
+ CF_UTMP_UT_HOST
+ CF_UTMP_UT_XSTATUS
+ CF_UTMP_UT_XTIME
+ CF_UTMP_UT_SESSION
+ CF_SYSV_UTMP
+fi
+])
+dnl ---------------------------------------------------------------------------
+dnl Check if UTMP/UTMPX struct defines ut_host member
+AC_DEFUN([CF_UTMP_UT_HOST],
+[
+AC_REQUIRE([CF_UTMP])
+if test $cf_cv_have_utmp != no ; then
+AC_MSG_CHECKING(if utmp.ut_host is declared)
+AC_CACHE_VAL(cf_cv_have_utmp_ut_host,[
+ AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>],
+ [struct $cf_cv_have_utmp x; char *y = &x.ut_host[0]],
+ [cf_cv_have_utmp_ut_host=yes],
+ [cf_cv_have_utmp_ut_host=no])
+ ])
+AC_MSG_RESULT($cf_cv_have_utmp_ut_host)
+test $cf_cv_have_utmp_ut_host != no && AC_DEFINE(HAVE_UTMP_UT_HOST)
+fi
+])
+dnl ---------------------------------------------------------------------------
+dnl Check if UTMP/UTMPX struct defines ut_session member
+AC_DEFUN([CF_UTMP_UT_SESSION],
+[
+AC_REQUIRE([CF_UTMP])
+if test $cf_cv_have_utmp != no ; then
+AC_CACHE_CHECK(if utmp.ut_session is declared, cf_cv_have_utmp_ut_session,[
+ AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>],
+ [struct $cf_cv_have_utmp x; long y = x.ut_session],
+ [cf_cv_have_utmp_ut_session=yes],
+ [cf_cv_have_utmp_ut_session=no])
+])
+if test $cf_cv_have_utmp_ut_session != no ; then
+ AC_DEFINE(HAVE_UTMP_UT_SESSION)
+fi
+fi
+])
+dnl ---------------------------------------------------------------------------
+dnl Check for known variants on the UTMP/UTMPX struct's exit-status as reported
+dnl by various people:
+dnl
+dnl ut_exit.__e_exit (HPUX 11 - David Ellement, also in glibc2)
+dnl ut_exit.e_exit (SVR4)
+dnl ut_exit.ut_e_exit (os390 - Greg Smith)
+dnl ut_exit.ut_exit (Tru64 4.0f - Jeremie Petit, 4.0e - Tomas Vanhala)
+dnl
+dnl Note: utmp_xstatus is not a conventional compatibility definition in the
+dnl system header files.
+AC_DEFUN([CF_UTMP_UT_XSTATUS],
+[
+AC_REQUIRE([CF_UTMP])
+if test $cf_cv_have_utmp != no ; then
+AC_CACHE_CHECK(for exit-status in $cf_cv_have_utmp,cf_cv_have_utmp_ut_xstatus,[
+for cf_result in \
+ ut_exit.__e_exit \
+ ut_exit.e_exit \
+ ut_exit.ut_e_exit \
+ ut_exit.ut_exit
+do
+AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>],
+ [struct $cf_cv_have_utmp x; long y = x.$cf_result = 0],
+ [cf_cv_have_utmp_ut_xstatus=$cf_result
+ break],
+ [cf_cv_have_utmp_ut_xstatus=no])
+done
+])
+if test $cf_cv_have_utmp_ut_xstatus != no ; then
+ AC_DEFINE(HAVE_UTMP_UT_XSTATUS)
+ AC_DEFINE_UNQUOTED(ut_xstatus,$cf_cv_have_utmp_ut_xstatus)
+fi
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check if UTMP/UTMPX struct defines ut_xtime member
+AC_DEFUN([CF_UTMP_UT_XTIME],
+[
+AC_REQUIRE([CF_UTMP])
+if test $cf_cv_have_utmp != no ; then
+AC_CACHE_CHECK(if utmp.ut_xtime is declared, cf_cv_have_utmp_ut_xtime,[
+ AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>],
+ [struct $cf_cv_have_utmp x; long y = x.ut_xtime = 0],
+ [cf_cv_have_utmp_ut_xtime=yes],
+ [AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>],
+ [struct $cf_cv_have_utmp x; long y = x.ut_tv.tv_sec],
+ [cf_cv_have_utmp_ut_xtime=define],
+ [cf_cv_have_utmp_ut_xtime=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)
+])
+if test $cf_cv_have_utmp_ut_xtime != no ; then
+ AC_DEFINE(HAVE_UTMP_UT_XTIME)
+ if test $cf_cv_have_utmp_ut_xtime = define ; then
+ AC_DEFINE(ut_xtime,ut_tv.tv_sec)
+ fi
+fi
+fi
])
dnl ---------------------------------------------------------------------------
dnl Check for ANSI stdarg.h vs varargs.h. Note that some systems include
@@ -2194,3 +3255,173 @@ CF_PATH_SYNTAX(withval)
eval $3="$withval"
AC_SUBST($3)dnl
])dnl
+dnl ---------------------------------------------------------------------------
+dnl Test if we should define X/Open source for curses, needed on Digital Unix
+dnl 4.x, to see the extended functions, but breaks on IRIX 6.x.
+AC_DEFUN([CF_XOPEN_CURSES],
+[
+AC_CACHE_CHECK(if we must define _XOPEN_SOURCE_EXTENDED,cf_cv_need_xopen_extension,[
+AC_TRY_LINK([
+#include <stdlib.h>
+#include <${cf_cv_ncurses_header-curses.h}>],[
+ long x = winnstr(stdscr, "", 0)],
+ [cf_cv_need_xopen_extension=no],
+ [AC_TRY_LINK([
+#define _XOPEN_SOURCE_EXTENDED
+#include <stdlib.h>
+#include <${cf_cv_ncurses_header-curses.h}>],[
+ long x = winnstr(stdscr, "", 0)],
+ [cf_cv_need_xopen_extension=yes],
+ [cf_cv_need_xopen_extension=no])])])
+test $cf_cv_need_xopen_extension = yes && CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check for Xaw (Athena) libraries
+dnl
+AC_DEFUN([CF_X_ATHENA],
+[AC_REQUIRE([CF_X_TOOLKIT])
+cf_x_athena=${cf_x_athena-Xaw}
+
+AC_ARG_WITH(Xaw3d,
+ [ --with-Xaw3d link with Xaw 3d library],
+ [cf_x_athena=Xaw3d])
+
+AC_ARG_WITH(neXtaw,
+ [ --with-neXtaw link with neXT Athena library],
+ [cf_x_athena=neXtaw])
+
+
+AC_CHECK_LIB(Xext,XextCreateExtension,
+ [LIBS="-lXext $LIBS"])
+
+cf_x_athena_include=""
+cf_x_athena_lib=""
+
+for cf_path in default \
+ /usr/contrib/X11R6 \
+ /usr/contrib/X11R5 \
+ /usr/lib/X11R5 \
+ /usr/local
+do
+
+ if test -z "$cf_x_athena_include" ; then
+ cf_save="$CPPFLAGS"
+ cf_test=X11/$cf_x_athena/SimpleMenu.h
+ if test $cf_path != default ; then
+ CPPFLAGS="-I$cf_path/include $cf_save"
+ AC_MSG_CHECKING(for $cf_test in $cf_path)
+ else
+ AC_MSG_CHECKING(for $cf_test)
+ fi
+ AC_TRY_COMPILE([
+#include <X11/Intrinsic.h>
+#include <$cf_test>],[],
+ [cf_result=yes],
+ [cf_result=no])
+ AC_MSG_RESULT($cf_result)
+ if test "$cf_result" = yes ; then
+ cf_x_athena_include=$cf_path
+ else
+ CPPFLAGS="$cf_save"
+ fi
+ fi
+
+ for cf_lib in "-l$cf_x_athena -lXmu" "-l${cf_x_athena}_s -lXmu_s"
+ do
+ if test -z "$cf_x_athena_lib" ; then
+ cf_save="$LIBS"
+ cf_test=XawSimpleMenuAddGlobalActions
+ if test $cf_path != default ; then
+ LIBS="-L$cf_path/lib $cf_lib $LIBS"
+ AC_MSG_CHECKING(for $cf_lib in $cf_path)
+ else
+ LIBS="$cf_lib $LIBS"
+ AC_MSG_CHECKING(for $cf_test in $cf_lib)
+ fi
+ AC_TRY_LINK([],[$cf_test()],
+ [cf_result=yes],
+ [cf_result=no],
+ [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])
+ AC_MSG_RESULT($cf_result)
+ if test "$cf_result" = yes ; then
+ cf_x_athena_lib="$cf_lib"
+ else
+ LIBS="$cf_save"
+ fi
+ fi
+ done
+done
+
+if test -z "$cf_x_athena_include" ; then
+ AC_MSG_WARN(
+[Unable to successfully find Athena header files with test program])
+fi
+
+if test -z "$cf_x_athena_lib" ; then
+ AC_ERROR(
+[Unable to successfully link Athena library (-l$cf_x_athena) with test program])
+fi
+
+CF_UPPER(CF_X_ATHENA_LIBS,HAVE_LIB_$cf_x_athena)
+AC_DEFINE_UNQUOTED($CF_X_ATHENA_LIBS)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check for X Toolkit libraries
+dnl
+AC_DEFUN([CF_X_TOOLKIT],
+[
+AC_REQUIRE([CF_CHECK_CACHE])
+# We need to check for -lsocket and -lnsl here in order to work around an
+# autoconf bug. autoconf-2.12 is not checking for these prior to checking for
+# the X11R6 -lSM and -lICE libraries. The resultant failures cascade...
+# (tested on Solaris 2.5 w/ X11R6)
+SYSTEM_NAME=`echo "$cf_cv_system_name"|tr ' ' -`
+cf_have_X_LIBS=no
+case $SYSTEM_NAME in
+irix[[56]]*) ;;
+clix*)
+ # FIXME: modify the library lookup in autoconf to
+ # allow _s.a suffix ahead of .a
+ AC_CHECK_LIB(c_s,open,
+ [LIBS="-lc_s $LIBS"
+ AC_CHECK_LIB(bsd,gethostname,
+ [LIBS="-lbsd $LIBS"
+ AC_CHECK_LIB(nsl_s,gethostname,
+ [LIBS="-lnsl_s $LIBS"
+ AC_CHECK_LIB(X11_s,XOpenDisplay,
+ [LIBS="-lX11_s $LIBS"
+ AC_CHECK_LIB(Xt_s,XtAppInitialize,
+ [LIBS="-lXt_s $LIBS"
+ cf_have_X_LIBS=Xt
+ ]) ]) ]) ]) ])
+ ;;
+*)
+ AC_CHECK_LIB(socket,socket)
+ AC_CHECK_LIB(nsl,gethostname)
+ ;;
+esac
+
+if test $cf_have_X_LIBS = no ; then
+ AC_PATH_XTRA
+ LDFLAGS="$LDFLAGS $X_LIBS"
+ CF_ADD_CFLAGS($X_CFLAGS)
+ AC_CHECK_LIB(X11,XOpenDisplay,
+ [LIBS="-lX11 $LIBS"],,
+ [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])
+ AC_CHECK_LIB(Xt, XtAppInitialize,
+ [AC_DEFINE(HAVE_LIBXT)
+ cf_have_X_LIBS=Xt
+ LIBS="-lXt $X_PRE_LIBS $LIBS"],,
+ [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])
+else
+ LDFLAGS="$LDFLAGS $X_LIBS"
+ CF_ADD_CFLAGS($X_CFLAGS)
+fi
+
+if test $cf_have_X_LIBS = no ; then
+ AC_WARN(
+[Unable to successfully link X Toolkit library (-lXt) with
+test program. You will have to check and add the proper libraries by hand
+to makefile.])
+fi
+])dnl
diff --git a/gnu/usr.bin/lynx/build-slang.com b/gnu/usr.bin/lynx/build-slang.com
deleted file mode 100644
index 234eca5f1c1..00000000000
--- a/gnu/usr.bin/lynx/build-slang.com
+++ /dev/null
@@ -1,366 +0,0 @@
-$ v = 'f$verify(0)'
-$! BUILD-SLANG.COM
-$!
-$! Command file to build LYNX.EXE with SLANG instead of CURSES on VMS.
-$! Assumes you have SLANG v0.99-27 or higher, available from:
-$! ftp://space.mit.edu/pub/davis
-$! Also invokes build of the WWWLibrary if its
-$! object library does not already exist.
-$!=========================================================================
-$! NOTE: Set SLANGINC to the location of your slang.h and slcurses.h,
-$! ==== and SLANGLIB to the location of your slang.olb (can be relative
-$! to the lynx2-8.src subdirectory of this distribution):
-$!
-$! SLANGINC = "[-.slang.src]"
-$! SLANGLIB = "[-.slang.src]"
-$!
-$!=========================================================================
-$ If f$type(SLANGINC) .nes. "STRING" .or. f$type(SLANGLIB) .nes. "STRING"
-$ Then
-$ write sys$output ""
-$ write sys$output " READ the header of this command procedure!!!"
-$ write sys$output ""
-$ exit
-$ EndIf
-$!==========================================================================
-$!
-$! 08-Oct-1997 F.Macrides macrides@sci.wfeb.edu
-$! Added comments and minor tweaks for convenient addition of
-$! compiler definitions and compiler and linker options.
-$! 28-Jun-1997 F.Macrides macrides@sci.wfeb.edu
-$! Added chartrans support.
-$! 29-Mar-1996 F.Macrides macrides@sci.wfeb.edu
-$! Modified build.com to create build-slang.com
-$! 29-Feb-1996 F.Macrides macrides@sci.wfeb.edu
-$! Added LYMap to the compilation and link lists.
-$! 26-Jul-1995 F.Macrides macrides@sci.wfeb.edu
-$! Reorganized the option files into ones for the transport and
-$! ones for the compiler, and adding support for GNUC.
-$! 14-Jun-1995 F.Macrides macrides@sci.wfeb.edu
-$! Added LYList.
-$! 03-May-1995 F.Macrides macrides@sci.wfeb.edu
-$! Include /nomember for compilations with DECC. It's not the
-$! default on AXP and the code assumes byte alignment.
-$! 23-Mar-1995 F.Macrides macrides@sci.wfeb.edu
-$! Replaced references to v2.3.8 or v2.3.9 with v2.3-FM to avoid
-$! any confusion with official releases at UKans.
-$! 16-Mar-1995 F.Macrides macrides@sci.wfeb.edu
-$! Updated to permit submission to BATCH.
-$! 17-Feb-1995 F.Macrides macriees@sci.wfeb.edu
-$! Updated for v2.3-FM
-$! 07-Dec-1994 F.Macrides macrides@sci.wfeb.edu
-$! Updated for DECC/VAX, VAXC/VAX and DECC/AXP
-$! 03-OCT-1994 A.Harper A.Harper@kcl.ac.uk
-$! Mods to support SOCKETSHR/NETLIB and add a /DEBUG/NOOPT option
-$! 02-Jun-1994 F.Macrides macrides@sci.wfeb.edu
-$! Mods to support TCPWare (To use non-blocking connects, you need
-$! the DRIVERS_V405B.INC patch from FTP.PROCESS.COM for TCPware for
-$! OpenVMS Version 4.0-5, or a higher version of TCPWare, which will
-$! have that bug in the TCPDRIVER fixed. Otherwise, add NO_IOCTL to
-$! the $ cc := cc/define=(...) list in [.WWW.Library.VMS]libmake.com).
-$! 20-May-1994 Andy Harper A.Harper@bay.cc.kcl.ac.uk
-$! Mods to support CMU TCP/IP
-$! 13-Dec-1993 F.Macrides macrides@sci.wfeb.edu
-$! Mods for conditional compilations with VAXC versus DECC
-$! 10-Dec-1993 F.Macrides macrides@sci.wfeb.edu
-$! Initial version, for Lynx v2.1
-$!
-$ ON CONTROL_Y THEN GOTO CLEANUP
-$ ON ERROR THEN GOTO CLEANUP
-$ proc = f$environment("PROCEDURE")
-$ where = f$parse(proc,,,"DEVICE") + f$parse(proc,,,"DIRECTORY")
-$ set default 'where'
-$ write sys$output "Default directory:"
-$ show default
-$ write sys$output ""
-$!
-$! Compiler definitions can be added here as a comma separated
-$! list with a lead comma, e.g., ",HAVE_FOO_H,DO_BLAH". The
-$! definitions will apply only to the LYfoo.c modules. Ones
-$! for the libwww-FM modules can be added equivalently in
-$! [.WWW.Library.vms]libmake.com. - FM
-$!
-$ extra = ""
-$!
-$! If no TCP/IP agent is specified (as the first argument),
-$! prompt for a number from the list. Note that the agent
-$! must be the first argument if the debugger mode is to be
-$! set via a second argument (see below). - FM
-$!
-$ agent = 0
-$ IF P1 .EQS. ""
-$ THEN
-$ If f$mode() .eqs. "BATCH"
-$ Then
-$ write sys$output "TCP/IP agent not specified!"
-$ write sys$output "Defaulting to MULTINET"
-$ agent = 1
-$ Else
-$ write sys$output "Acceptable TCP/IP agents are"
-$ write sys$output " [1] MULTINET (default)"
-$ write sys$output " [2] UCX"
-$ write sys$output " [3] WIN_TCP"
-$ write sys$output " [4] CMU_TCP"
-$ write sys$output " [5] SOCKETSHR_TCP"
-$ write sys$output " [6] TCPWARE"
-$ read sys$command/prompt="Agent [1,2,3,4,5,6] (RETURN = [1]) " agent
-$ EndIf
-$ ENDIF
-$ option = ""
-$ if agent .eq. 1 .or. agent .eqs. "" .or. p1 .eqs. "" .or. p1 .eqs. "MULTINET" then -
- option = "MULTINET"
-$ if agent .eq. 2 .or. p1 .eqs. "UCX" then option = "UCX"
-$ if agent .eq. 3 .or. p1 .eqs. "WIN_TCP" then option = "WIN_TCP"
-$ if agent .eq. 4 .or. p1 .eqs. "CMU_TCP" then option = "CMU_TCP"
-$ if agent .eq. 5 .or. p1 .eqs. "SOCKETSHR_TCP" then option = "SOCKETSHR_TCP"
-$ if agent .eq. 6 .or. p1 .eqs. "TCPWARE" then option = "TCPWARE"
-$!
-$ if option .eqs. ""
-$ then
-$ write sys$output "TCP/IP agent could not be determined"
-$ exit 18
-$ endif
-$
-$ if option .eqs. "TCPWARE"
-$ then
-$ write sys$output "Building Lynx for TCPWARE with UCX emulation..."
-$ extra = extra + ",UCX"
-$ endif
-$!
-$ optfile = "''option'"
-$!
-$! Compiler and linker options can be specified here. If
-$! there was a second argument (with any value), then debugger
-$! mode with no optimization will be specified as well. The
-$! compiler options will apply only to the LYfoo.c and UCfoo.c
-$! modules. Ones for the libwww-FM modules can be specified
-$! in [.WWW.Library.vms]libmake.com. - FM
-$!
-$ cc_opts = ""
-$ link_opts = ""
-$!
-$ if p2 .nes. ""
-$ then
-$ debug_arg = "DEBUG"
-$ cc_opts = cc_opts + "/DEBUG/NOOPT"
-$ link_opts = link_opts + "/DEBUG"
-$ else
-$ debug_arg = ""
-$ endif
-$!
-$ IF f$search("[.WWW.Library.Implementation]WWWLib_''option'.olb") .nes. ""
-$ THEN
-$ write sys$output " WWWLib_''option'.olb already exists."
-$ If f$mode() .eqs. "BATCH"
-$ Then
-$ write sys$output " Updating WWWLib_''option'.olb"
-$ Else
-$ read sys$command/prompt=" Update it [default Y]? " reply
-$ if reply .nes. "" .and. -
- f$extract(0,1,f$edit(reply, "TRIM, UPCASE")) .nes. "Y" then -
-$ goto Compile_CHRTRANS
-$ EndIf
-$ ENDIF
-$ v1 = f$verify(1)
-$!
-$! Build the WWWLibrary
-$!
-$ set default [.WWW.Library.VMS]
-$ v1 = 'f$verify(0)'
-$ @libmake 'option' 'debug_arg'
-$ v1 = f$verify(1)
-$ set default [-.-.-]
-$ v1 = 'f$verify(0)'
-$ ON CONTROL_Y THEN GOTO CLEANUP
-$ ON ERROR THEN GOTO CLEANUP
-$!
-$Compile_CHRTRANS:
-$ IF f$search("[.src.chrtrans]makeuctb.exe") .nes. ""
-$ THEN
-$ write sys$output " [.src.chrtrans]makeuctb.exe already exists."
-$ If f$mode() .eqs. "BATCH"
-$ Then
-$ write sys$output " Updating makeuctb.exe and chrtrans header files."
-$ Else
-$ read sys$command -
- /prompt=" Update it and chrtrans header files [default Y]? " reply
-$ if reply .nes. "" .and. -
- f$extract(0,1,f$edit(reply, "TRIM, UPCASE")) .nes. "Y" then -
-$ goto Compile_SRC
-$ EndIf
-$ ENDIF
-$!
-$ v1 = f$verify(1)
-$!
-$! Build the chrtrans modules.
-$!
-$ set default [.src.chrtrans]
-$ v1 = 'f$verify(0)'
-$ @build-chrtrans
-$ v1 = f$verify(1)
-$ set default [-.-]
-$ v1 = 'f$verify(0)'
-$ ON CONTROL_Y THEN GOTO CLEANUP
-$ ON ERROR THEN GOTO CLEANUP
-$!
-$Compile_SRC:
-$ v1 = f$verify(1)
-$!
-$! Compile the Lynx [.SRC] modules
-$!
-$ set default [.SRC]
-$ v1 = 'f$verify(0)'
-$ IF f$trnlnm("VAXCMSG") .eqs. "DECC$MSG" .or. -
- f$trnlnm("DECC$CC_DEFAULT") .eqs. "/DECC" .or. -
- f$trnlnm("DECC$CC_DEFAULT") .eqs. "/VAXC"
-$ THEN
-$ compiler := "DECC"
-$ if option .eqs. "UCX" then optfile = "UCXSHR"
-$ if option .eqs. "TCPWARE" then optfile = "TCPWARESHR"
-$ if option .eqs. "SOCKETSHR_TCP" then extra = extra + ",_DECC_V4_SOURCE"
-$ if option .eqs. "MULTINET" then -
- extra = extra + ",_DECC_V4_SOURCE,__SOCKET_TYPEDEFS"
-$ v1 = f$verify(1)
-$! DECC:
-$ cc := cc/decc/prefix=all/nomember'cc_opts' -
- /DEFINE=(ACCESS_AUTH,'option''extra',USE_SLANG,__VMS_CURSES)-
- /INCLUDE=([],[-],[-.WWW.Library.Implementation],[.chrtrans],'SLANGINC')
-$ v1 = 'f$verify(0)'
-$ ELSE
-$ if option .eqs. "UCX" then optfile = "UCXOLB"
-$ if option .eqs. "TCPWARE" then optfile = "TCPWAREOLB"
-$ IF f$search("gnu_cc:[000000]gcclib.olb") .nes. ""
-$ THEN
-$ compiler := "GNUC"
-$ v1 = f$verify(1)
-$! GNUC:
-$ cc := gcc'cc_opts' -
- /DEFINE=(ACCESS_AUTH,'option''extra',USE_SLANG)-
- /INCLUDE=([],[-],[-.WWW.Library.Implementation],[.chrtrans],'SLANGINC')
-$ v1 = 'f$verify(0)'
-$ ELSE
-$ compiler := "VAXC"
-$ v1 = f$verify(1)
-$! VAXC:
-$ cc := cc'cc_opts' -
- /DEFINE=(ACCESS_AUTH,'option''extra',USE_SLANG)-
- /INCLUDE=([],[-],[-.WWW.Library.Implementation],[.chrtrans],'SLANGINC')
-$ v1 = 'f$verify(0)'
-$ ENDIF
-$ ENDIF
-$ v1 = f$verify(1)
-$!
-$ cc DefaultStyle
-$ cc GridText
-$ cc HTAlert
-$ cc HTFWriter
-$ cc HTInit
-$ cc HTML
-$ cc LYBookmark
-$ cc LYCgi
-$ cc LYCharSets
-$ cc LYCharUtils
-$ cc LYClean
-$ cc LYCookie
-$ cc LYCurses
-$ cc LYDownload
-$ cc LYEdit
-$ cc LYEditmap
-$ cc LYexit
-$ cc LYForms
-$ cc LYGetFile
-$ cc LYHistory
-$ cc LYJump
-$ cc LYKeymap
-$ cc LYLeaks
-$ cc LYList
-$ cc LYMail
-$ cc LYMain
-$ cc LYMainLoop
-$ cc LYMap
-$ cc LYNews
-$ cc LYOptions
-$ cc LYPrint
-$ cc LYrcFile
-$ cc LYReadCFG
-$ cc LYSearch
-$ cc LYShowInfo
-$ cc LYStrings
-$ cc LYTraversal
-$ cc LYUpload
-$ cc LYUtils
-$ cc UCAuto
-$ cc UCAux
-$ cc UCdomap
-$!
-$! Link the objects and libaries.
-$!
-$ link/exe=lynx.exe'link_opts' -
-DefaultStyle.obj, -
-GridText.obj, -
-HTAlert.obj, -
-HTFWriter.obj, -
-HTInit.obj, -
-HTML.obj, -
-LYBookmark.obj, -
-LYCgi.obj, -
-LYCharSets.obj, -
-LYCharUtils.obj, -
-LYClean.obj, -
-LYCookie.obj, -
-LYCurses.obj, -
-LYDownload.obj, -
-LYEdit.obj, -
-LYEditmap.obj, -
-LYexit.obj, -
-LYForms.obj, -
-LYGetFile.obj, -
-LYHistory.obj, -
-LYJump.obj, -
-LYKeymap.obj, -
-LYLeaks.obj, -
-LYList.obj, -
-LYMail.obj, -
-LYMain.obj, -
-LYMainLoop.obj, -
-LYMap.obj, -
-LYNews.obj, -
-LYOptions.obj, -
-LYPrint.obj, -
-LYrcFile.obj, -
-LYReadCFG.obj, -
-LYSearch.obj, -
-LYShowInfo.obj, -
-LYStrings.obj, -
-LYTraversal.obj, -
-LYUpload.obj, -
-LYUtils.obj, -
-UCAuto.obj, -
-UCAux.obj, -
-UCdomap.obj, -
-[-.WWW.Library.Implementation]WWWLib_'option'.olb/library, -
-'SLANGLIB'slang.olb/lib, -
-sys$disk:[]'optfile'.opt/opt, sys$disk:[]'compiler'.opt/opt
-$!
-$! Copy the executable to the top directory and restore the default.
-$!
-$ copy lynx.exe [-]
-$ set def [-]
-$!
-$ v1 = 'f$verify(0)'
-$!
-$! Issue message on how to include LYNX.HLP in the system HELP library
-$!
-$ write sys$output ""
-$ write sys$output " To install or update lynx.hlp in the system HELP library,"
-$ write sys$output " use:"
-$ write sys$output " library/replace sys$help:helplib.hlb lynx.hlp"
-$ write sys$output ""
-$!
-$ CLEANUP:
-$ v1 = 'f$verify(0)'
-$ set default 'where'
-$ write sys$output "Default directory:"
-$ show default
-$ v1 = f$verify(v)
-$ exit
diff --git a/gnu/usr.bin/lynx/build.com b/gnu/usr.bin/lynx/build.com
deleted file mode 100644
index d1275214be9..00000000000
--- a/gnu/usr.bin/lynx/build.com
+++ /dev/null
@@ -1,344 +0,0 @@
-$ v = 'f$verify(0)'
-$! BUILD.COM
-$!
-$! Command file to build LYNX.EXE on VMS systems.
-$! Also invokes build of the WWWLibrary if its
-$! object library does not already exist.
-$!
-$! 08-Oct-1997 F.Macrides macrides@sci.wfeb.edu
-$! Added comments and minor tweaks for convenient addition of
-$! compiler definitions and compiler and linker options.
-$! 28-Jun-1997 F.Macrides macrides@sci.wfeb.edu
-$! Added chartrans support.
-$! 29-Feb-1996 F.Macrides macrides@sci.wfeb.edu
-$! Added LYMap to the compilation and link lists.
-$! 26-Jul-1995 F.Macrides macrides@sci.wfeb.edu
-$! Reorganized the option files into ones for the transport and
-$! ones for the compiler, and adding support for GNUC.
-$! 14-Jun-1995 F.Macrides macrides@sci.wfeb.edu
-$! Added LYList.
-$! 03-May-1995 F.Macrides macrides@sci.wfeb.edu
-$! Include /nomember for compilations with DECC. It's not the
-$! default on AXP and the code assumes byte alignment.
-$! 23-Mar-1995 F.Macrides macrides@sci.wfeb.edu
-$! Replaced references to v2.3.8 or v2.3.9 with v2.3-FM to avoid
-$! any confusion with official releases at UKans.
-$! 16-Mar-1995 F.Macrides macrides@sci.wfeb.edu
-$! Updated to permit submission to BATCH.
-$! 17-Feb-1995 F.Macrides macriees@sci.wfeb.edu
-$! Updated for v2.3-FM
-$! 07-Dec-1994 F.Macrides macrides@sci.wfeb.edu
-$! Updated for DECC/VAX, VAXC/VAX and DECC/AXP
-$! 03-OCT-1994 A.Harper A.Harper@kcl.ac.uk
-$! Mods to support SOCKETSHR/NETLIB and add a /DEBUG/NOOPT option
-$! 02-Jun-1994 F.Macrides macrides@sci.wfeb.edu
-$! Mods to support TCPWare (To use non-blocking connects, you need
-$! the DRIVERS_V405B.INC patch from FTP.PROCESS.COM for TCPware for
-$! OpenVMS Version 4.0-5, or a higher version of TCPWare, which will
-$! have that bug in the TCPDRIVER fixed. Otherwise, add NO_IOCTL to
-$! the $ cc := cc/define=(...) list in [.WWW.Library.VMS]libmake.com).
-$! 20-May-1994 Andy Harper A.Harper@bay.cc.kcl.ac.uk
-$! Mods to support CMU TCP/IP
-$! 13-Dec-1993 F.Macrides macrides@sci.wfeb.edu
-$! Mods for conditional compilations with VAXC versus DECC
-$! 10-Dec-1993 F.Macrides macrides@sci.wfeb.edu
-$! Initial version, for Lynx v2.1
-$!
-$ ON CONTROL_Y THEN GOTO CLEANUP
-$ ON ERROR THEN GOTO CLEANUP
-$ proc = f$environment("PROCEDURE")
-$ where = f$parse(proc,,,"DEVICE") + f$parse(proc,,,"DIRECTORY")
-$ set default 'where'
-$ write sys$output "Default directory:"
-$ show default
-$ write sys$output ""
-$!
-$! Compiler definitions can be added here as a comma separated
-$! list with a lead comma, e.g., ",HAVE_FOO_H,DO_BLAH". The
-$! definitions will apply only to the LYfoo.c modules. Ones
-$! for the libwww-FM modules can be added equivalently in
-$! [.WWW.Library.vms]libmake.com. - FM
-$!
-$ extra = ""
-$!
-$! If no TCP/IP agent is specified (as the first argument),
-$! prompt for a number from the list. Note that the agent
-$! must be the first argument if the debugger mode is to be
-$! set via a second argument (see below). - FM
-$!
-$ agent = 0
-$ IF P1 .EQS. ""
-$ THEN
-$ If f$mode() .eqs. "BATCH"
-$ Then
-$ write sys$output "TCP/IP agent not specified!"
-$ write sys$output "Defaulting to MULTINET"
-$ agent = 1
-$ Else
-$ write sys$output "Acceptable TCP/IP agents are"
-$ write sys$output " [1] MULTINET (default)"
-$ write sys$output " [2] UCX"
-$ write sys$output " [3] WIN_TCP"
-$ write sys$output " [4] CMU_TCP"
-$ write sys$output " [5] SOCKETSHR_TCP"
-$ write sys$output " [6] TCPWARE"
-$ read sys$command/prompt="Agent [1,2,3,4,5,6] (RETURN = [1]) " agent
-$ EndIf
-$ ENDIF
-$ option = ""
-$ if agent .eq. 1 .or. agent .eqs. "" .or. p1 .eqs. "" .or. p1 .eqs. "MULTINET" then -
- option = "MULTINET"
-$ if agent .eq. 2 .or. p1 .eqs. "UCX" then option = "UCX"
-$ if agent .eq. 3 .or. p1 .eqs. "WIN_TCP" then option = "WIN_TCP"
-$ if agent .eq. 4 .or. p1 .eqs. "CMU_TCP" then option = "CMU_TCP"
-$ if agent .eq. 5 .or. p1 .eqs. "SOCKETSHR_TCP" then option = "SOCKETSHR_TCP"
-$ if agent .eq. 6 .or. p1 .eqs. "TCPWARE" then option = "TCPWARE"
-$!
-$ if option .eqs. ""
-$ then
-$ write sys$output "TCP/IP agent could not be determined"
-$ exit 18
-$ endif
-$
-$ if option .eqs. "TCPWARE"
-$ then
-$ write sys$output "Building Lynx for TCPWARE with UCX emulation..."
-$ extra = extra + ",UCX"
-$ endif
-$!
-$ optfile = "''option'"
-$!
-$! Compiler and linker options can be specified here. If
-$! there was a second argument (with any value), then debugger
-$! mode with no optimization will be specified as well. The
-$! compiler options will apply only to the LYfoo.c and UCfoo.c
-$! modules. Ones for the libwww-FM modules can be specified
-$! in [.WWW.Library.vms]libmake.com. - FM
-$!
-$ cc_opts = ""
-$ link_opts = ""
-$!
-$ if p2 .nes. ""
-$ then
-$ debug_arg = "DEBUG"
-$ cc_opts = cc_opts + "/DEBUG/NOOPT"
-$ link_opts = link_opts + "/DEBUG"
-$ else
-$ debug_arg = ""
-$ endif
-$!
-$ IF f$search("[.WWW.Library.Implementation]WWWLib_''option'.olb") .nes. ""
-$ THEN
-$ write sys$output " WWWLib_''option'.olb already exists."
-$ If f$mode() .eqs. "BATCH"
-$ Then
-$ write sys$output " Updating WWWLib_''option'.olb"
-$ Else
-$ read sys$command/prompt=" Update it [default Y]? " reply
-$ if reply .nes. "" .and. -
- f$extract(0,1,f$edit(reply, "TRIM, UPCASE")) .nes. "Y" then -
-$ goto Compile_CHRTRANS
-$ EndIf
-$ ENDIF
-$ v1 = f$verify(1)
-$!
-$! Build the WWWLibrary
-$!
-$ set default [.WWW.Library.VMS]
-$ v1 = 'f$verify(0)'
-$ @libmake 'option' 'debug_arg'
-$ v1 = f$verify(1)
-$ set default [-.-.-]
-$ v1 = 'f$verify(0)'
-$ ON CONTROL_Y THEN GOTO CLEANUP
-$ ON ERROR THEN GOTO CLEANUP
-$!
-$Compile_CHRTRANS:
-$ IF f$search("[.src.chrtrans]makeuctb.exe") .nes. ""
-$ THEN
-$ write sys$output " [.src.chrtrans]makeuctb.exe already exists."
-$ If f$mode() .eqs. "BATCH"
-$ Then
-$ write sys$output " Updating makeuctb.exe and chrtrans header files."
-$ Else
-$ read sys$command -
- /prompt=" Update it and chrtrans header files [default Y]? " reply
-$ if reply .nes. "" .and. -
- f$extract(0,1,f$edit(reply, "TRIM, UPCASE")) .nes. "Y" then -
-$ goto Compile_SRC
-$ EndIf
-$ ENDIF
-$!
-$ v1 = f$verify(1)
-$!
-$! Build the chrtrans modules.
-$!
-$ set default [.src.chrtrans]
-$ v1 = 'f$verify(0)'
-$ @build-chrtrans
-$ v1 = f$verify(1)
-$ set default [-.-]
-$ v1 = 'f$verify(0)'
-$ ON CONTROL_Y THEN GOTO CLEANUP
-$ ON ERROR THEN GOTO CLEANUP
-$!
-$Compile_SRC:
-$ v1 = f$verify(1)
-$!
-$! Compile the Lynx [.SRC] modules
-$!
-$ set default [.SRC]
-$ v1 = 'f$verify(0)'
-$ IF f$trnlnm("VAXCMSG") .eqs. "DECC$MSG" .or. -
- f$trnlnm("DECC$CC_DEFAULT") .eqs. "/DECC" .or. -
- f$trnlnm("DECC$CC_DEFAULT") .eqs. "/VAXC"
-$ THEN
-$ compiler := "DECC"
-$ if option .eqs. "UCX" then optfile = "UCXSHR"
-$ if option .eqs. "TCPWARE" then optfile = "TCPWARESHR"
-$ if option .eqs. "SOCKETSHR_TCP" then extra = extra + ",_DECC_V4_SOURCE"
-$ if option .eqs. "MULTINET" then -
- extra = extra + ",_DECC_V4_SOURCE,__SOCKET_TYPEDEFS"
-$ v1 = f$verify(1)
-$! DECC:
-$ cc := cc/decc/prefix=all/nomember'cc_opts' -
- /DEFINE=(ACCESS_AUTH,'option''extra',__VMS_CURSES)-
- /INCLUDE=([],[-],[-.WWW.Library.Implementation],[.chrtrans])
-$ v1 = 'f$verify(0)'
-$ ELSE
-$ if option .eqs. "UCX" then optfile = "UCXOLB"
-$ if option .eqs. "TCPWARE" then optfile = "TCPWAREOLB"
-$ IF f$search("gnu_cc:[000000]gcclib.olb") .nes. ""
-$ THEN
-$ compiler := "GNUC"
-$ v1 = f$verify(1)
-$! GNUC:
-$ cc := gcc'cc_opts' -
- /DEFINE=(ACCESS_AUTH,'option''extra')-
- /INCLUDE=([],[-],[-.WWW.Library.Implementation],[.chrtrans])
-$ v1 = 'f$verify(0)'
-$ ELSE
-$ compiler := "VAXC"
-$ v1 = f$verify(1)
-$! VAXC:
-$ cc := cc'cc_opts' -
- /DEFINE=(ACCESS_AUTH,'option''extra')-
- /INCLUDE=([],[-],[-.WWW.Library.Implementation],[.chrtrans])
-$ v1 = 'f$verify(0)'
-$ ENDIF
-$ ENDIF
-$ v1 = f$verify(1)
-$!
-$ cc DefaultStyle
-$ cc GridText
-$ cc HTAlert
-$ cc HTFWriter
-$ cc HTInit
-$ cc HTML
-$ cc LYBookmark
-$ cc LYCgi
-$ cc LYCharSets
-$ cc LYCharUtils
-$ cc LYClean
-$ cc LYCookie
-$ cc LYCurses
-$ cc LYDownload
-$ cc LYEdit
-$ cc LYEditmap
-$ cc LYexit
-$ cc LYForms
-$ cc LYGetFile
-$ cc LYHistory
-$ cc LYJump
-$ cc LYKeymap
-$ cc LYLeaks
-$ cc LYList
-$ cc LYMail
-$ cc LYMain
-$ cc LYMainLoop
-$ cc LYMap
-$ cc LYNews
-$ cc LYOptions
-$ cc LYPrint
-$ cc LYrcFile
-$ cc LYReadCFG
-$ cc LYSearch
-$ cc LYShowInfo
-$ cc LYStrings
-$ cc LYTraversal
-$ cc LYUpload
-$ cc LYUtils
-$ cc UCAuto
-$ cc UCAux
-$ cc UCdomap
-$!
-$! Link the objects and libaries.
-$!
-$ link/exe=lynx.exe'link_opts' -
-DefaultStyle.obj, -
-GridText.obj, -
-HTAlert.obj, -
-HTFWriter.obj, -
-HTInit.obj, -
-HTML.obj, -
-LYBookmark.obj, -
-LYCgi.obj, -
-LYCharSets.obj, -
-LYCharUtils.obj, -
-LYClean.obj, -
-LYCookie.obj, -
-LYCurses.obj, -
-LYDownload.obj, -
-LYEdit.obj, -
-LYEditmap.obj, -
-LYexit.obj, -
-LYForms.obj, -
-LYGetFile.obj, -
-LYHistory.obj, -
-LYJump.obj, -
-LYKeymap.obj, -
-LYLeaks.obj, -
-LYList.obj, -
-LYMail.obj, -
-LYMain.obj, -
-LYMainLoop.obj, -
-LYMap.obj, -
-LYNews.obj, -
-LYOptions.obj, -
-LYPrint.obj, -
-LYrcFile.obj, -
-LYReadCFG.obj, -
-LYSearch.obj, -
-LYShowInfo.obj, -
-LYStrings.obj, -
-LYTraversal.obj, -
-LYUpload.obj, -
-LYUtils.obj, -
-UCAuto.obj, -
-UCAux.obj, -
-UCdomap.obj, -
-[-.WWW.Library.Implementation]WWWLib_'option'.olb/library, -
-sys$disk:[]'optfile'.opt/opt, sys$disk:[]'compiler'.opt/opt
-$!
-$! Copy the executable to the top directory and restore the default.
-$!
-$ copy lynx.exe [-]
-$ set def [-]
-$!
-$ v1 = 'f$verify(0)'
-$!
-$! Issue message on how to include LYNX.HLP in the system HELP library
-$!
-$ write sys$output ""
-$ write sys$output " To install or update lynx.hlp in the system HELP library,"
-$ write sys$output " use:"
-$ write sys$output " library/replace sys$help:helplib.hlb lynx.hlp"
-$ write sys$output ""
-$!
-$ CLEANUP:
-$ v1 = 'f$verify(0)'
-$ set default 'where'
-$ write sys$output "Default directory:"
-$ show default
-$ v1 = f$verify(v)
-$ exit
diff --git a/gnu/usr.bin/lynx/cfg_defs.sh b/gnu/usr.bin/lynx/cfg_defs.sh
index b0a51b4e825..80a7c852c61 100644
--- a/gnu/usr.bin/lynx/cfg_defs.sh
+++ b/gnu/usr.bin/lynx/cfg_defs.sh
@@ -2,8 +2,7 @@
# Translate the lynx_cfg.h and config.cache data into a table, useful for
# display at runtime.
-SRCDIR=`dirname $0`
-
+TOP="${1-.}"
OUT=cfg_defs.h
cat >$OUT <<EOF
@@ -21,7 +20,7 @@ sed \
-e 's/^.[^=]*_cv_//' \
-e 's/=\${.*=/=/' \
-e 's/}$//' \
- config.cache | /bin/sh ${SRCDIR}/cfg_edit.sh >>$OUT
+ config.cache | /bin/sh $TOP/cfg_edit.sh >>$OUT
cat >>$OUT <<EOF
};
@@ -37,7 +36,7 @@ sed -e 's@ @ @g' \
-e 's@^[ ]*#define[ ]*@@' \
-e 's@[ ]*/\*.*\*/@@' \
-e 's@[ ][ ]*@=@' \
- | /bin/sh ${SRCDIR}/cfg_edit.sh >>$OUT
+ | /bin/sh $TOP/cfg_edit.sh >>$OUT
cat >>$OUT <<EOF
};
diff --git a/gnu/usr.bin/lynx/config.guess b/gnu/usr.bin/lynx/config.guess
index 38db15ba38d..db494f80643 100644
--- a/gnu/usr.bin/lynx/config.guess
+++ b/gnu/usr.bin/lynx/config.guess
@@ -1,7 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
-#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002 Free Software Foundation, Inc.
+
+timestamp='2002-02-19'
+
# 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
@@ -21,36 +24,193 @@
# 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.
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
#
# 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).
-#
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+
+dummy=dummy-$$
+trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script.
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int dummy(){}" > $dummy.c ;
+ for c in cc gcc c89 ; do
+ ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
+ if test $? = 0 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ rm -f $dummy.c $dummy.o $dummy.rel ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac'
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 8/24/94.)
+# (ghazi@noc.rutgers.edu 1994-08-24)
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_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
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ UNAME_MACHINE_ARCH=`(uname -p) 2>/dev/null` || \
+ UNAME_MACHINE_ARCH=unknown
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit 0 ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ macppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvmeppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ pmax:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mipseb-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ wgrisc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
alpha:OSF1:*:*)
if test $UNAME_RELEASE = "V4.0"; then
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
@@ -59,90 +219,89 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# 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.
- cat <<EOF >dummy.s
+ cat <<EOF >$dummy.s
+ .data
+\$Lformat:
+ .byte 37,100,45,37,120,10,0 # "%d-%x\n"
+
+ .text
.globl main
+ .align 4
.ent main
main:
- .frame \$30,0,\$26,0
- .prologue 0
- .long 0x47e03d80 # implver $0
- lda \$2,259
- .long 0x47e20c21 # amask $2,$1
- srl \$1,8,\$2
- sll \$2,2,\$2
- sll \$0,3,\$0
- addl \$1,\$0,\$0
- addl \$2,\$0,\$0
- ret \$31,(\$26),1
+ .frame \$30,16,\$26,0
+ ldgp \$29,0(\$27)
+ .prologue 1
+ .long 0x47e03d80 # implver \$0
+ lda \$2,-1
+ .long 0x47e20c21 # amask \$2,\$1
+ lda \$16,\$Lformat
+ mov \$0,\$17
+ not \$1,\$18
+ jsr \$26,printf
+ ldgp \$29,0(\$26)
+ mov 0,\$16
+ jsr \$26,exit
.end main
EOF
- ${CC-cc} dummy.s -o dummy 2>/dev/null
+ eval $set_cc_for_build
+ $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then
- ./dummy
- case "$?" in
- 7)
+ case `./$dummy` in
+ 0-0)
UNAME_MACHINE="alpha"
;;
- 15)
+ 1-0)
UNAME_MACHINE="alphaev5"
;;
- 14)
+ 1-1)
UNAME_MACHINE="alphaev56"
;;
- 10)
+ 1-101)
UNAME_MACHINE="alphapca56"
;;
- 16)
+ 2-303)
UNAME_MACHINE="alphaev6"
;;
+ 2-307)
+ UNAME_MACHINE="alphaev67"
+ ;;
+ 2-1307)
+ UNAME_MACHINE="alphaev68"
+ ;;
esac
fi
- rm -f dummy.s dummy
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
+ rm -f $dummy.s $dummy
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit 0 ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
exit 0 ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
exit 0 ;;
Amiga*:UNIX_System_V:4.0:*)
- echo m68k-cbm-sysv4
+ echo m68k-unknown-sysv4
exit 0;;
- amiga:NetBSD:*:*)
- echo m68k-cbm-netbsd${UNAME_RELEASE}
- exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
*:[Aa]miga[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-amigaos
exit 0 ;;
- arc64:OpenBSD:*:*)
- echo mips64el-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hkmips:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- pmax:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sgi:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
exit 0 ;;
- wgrisc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
exit 0 ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
exit 0;;
- arm32:NetBSD:*:*)
- echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- exit 0 ;;
- SR2?01:HI-UX/MPP:*:*)
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
exit 0;;
- Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*)
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
if test "`(/bin/universe) 2>/dev/null`" = att ; then
echo pyramid-pyramid-sysv3
@@ -150,7 +309,7 @@ EOF
echo pyramid-pyramid-bsd
fi
exit 0 ;;
- NILE:*:*:dcosx)
+ NILE*:*:*:dcosx)
echo pyramid-pyramid-svr4
exit 0 ;;
sun4H:SunOS:5.*:*)
@@ -181,7 +340,7 @@ EOF
echo m68k-sun-sunos${UNAME_RELEASE}
exit 0 ;;
sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
case "`/bin/arch`" in
sun3)
@@ -195,42 +354,35 @@ EOF
aushp:SunOS:*:*)
echo sparc-auspex-sunos${UNAME_RELEASE}
exit 0 ;;
- atari*:NetBSD:*:*)
- echo m68k-atari-netbsd${UNAME_RELEASE}
- exit 0 ;;
- atari*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sun3*:NetBSD:*:*)
- echo m68k-sun-netbsd${UNAME_RELEASE}
- exit 0 ;;
- sun3*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:NetBSD:*:*)
- echo m68k-apple-netbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- macppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvmeppc:OpenBSD:*:*)
- echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
exit 0 ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit 0 ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit 0 ;;
powerpc:machten:*:*)
echo powerpc-apple-machten${UNAME_RELEASE}
exit 0 ;;
- macppc:NetBSD:*:*)
- echo powerpc-apple-netbsd${UNAME_RELEASE}
- exit 0 ;;
RISC*:Mach:*:*)
echo mips-dec-mach_bsd4.3
exit 0 ;;
@@ -244,8 +396,14 @@ EOF
echo clipper-intergraph-clix${UNAME_RELEASE}
exit 0 ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
- sed 's/^ //' << EOF >dummy.c
- int main (argc, argv) int argc; char **argv; {
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
#if defined (host_mips) && defined (MIPSEB)
#if defined (SYSTYPE_SYSV)
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
@@ -260,12 +418,15 @@ EOF
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
+ $CC_FOR_BUILD $dummy.c -o $dummy \
+ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+ && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
echo mips-mips-riscos${UNAME_RELEASE}
exit 0 ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit 0 ;;
Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix
exit 0 ;;
@@ -281,15 +442,18 @@ EOF
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
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
echo m88k-dg-dgux${UNAME_RELEASE}
- else
+ else
echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
fi
- else echo i586-dg-dgux${UNAME_RELEASE}
- fi
exit 0 ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
@@ -310,16 +474,21 @@ EOF
????????: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:*:*)
+ i*86:AIX:*:*)
echo i386-ibm-aix
exit 0 ;;
- *:MVS:*:* | *:OS390:*:*|*:OS/390:*:*)
- # uname -m gives a processor model number /* S/390 -- gil -- 1389 */
- echo s390-ibm-os390 # on R1 and R2, uname -s reports OS390
- exit 0 ;; # on R3, uname -s reports OS/390
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit 0 ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- sed 's/^ //' << EOF >dummy.c
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
#include <sys/systemcfg.h>
main()
@@ -330,8 +499,8 @@ EOF
exit(0);
}
EOF
- ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $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
@@ -339,9 +508,9 @@ EOF
echo rs6000-ibm-aix3.2
fi
exit 0 ;;
- *:AIX:*:4)
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
- if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
+ *:AIX:*:[45])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
IBM_ARCH=powerpc
@@ -349,7 +518,7 @@ EOF
if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel`
else
- IBM_REV=4.${UNAME_RELEASE}
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
exit 0 ;;
@@ -359,7 +528,7 @@ EOF
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
echo romp-ibm-bsd4.4
exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
exit 0 ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
@@ -375,11 +544,30 @@ EOF
echo m68k-hp-bsd4.4
exit 0 ;;
9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/6?? | 9000/7?? | 9000/80[024] | 9000/8?[13679] | 9000/892 )
- sed 's/^ //' << EOF >dummy.c
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
#include <stdlib.h>
#include <unistd.h>
@@ -410,14 +598,20 @@ EOF
exit (0);
}
EOF
- (${CC-cc} dummy.c -o dummy 2>/dev/null ) && HP_ARCH=`./dummy`
- rm -f dummy.c dummy
+ (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy`
+ if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
+ rm -f $dummy.c $dummy
+ fi ;;
esac
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
exit 0 ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit 0 ;;
3050*:HI-UX:*:*)
- sed 's/^ //' << EOF >dummy.c
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
#include <unistd.h>
int
main ()
@@ -442,8 +636,8 @@ EOF
exit (0);
}
EOF
- ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $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:*:* )
@@ -452,13 +646,16 @@ EOF
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
exit 0 ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ 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:*:*)
+ i*86:OSF1:*:*)
if [ -x /usr/sbin/sysversion ] ; then
echo ${UNAME_MACHINE}-unknown-osf1mk
else
@@ -486,58 +683,66 @@ EOF
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}
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
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/
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
exit 0 ;;
CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE}
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
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/\///'`
+ CRAY*T3D:*:*:*)
+ echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ echo "${FUJITSU_PROC}-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-unknown-openbsd${UNAME_RELEASE}
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit 0 ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
- i?86:BSD/386:*:* | *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-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 ${UNAME_MACHINE}-pc-cygwin
exit 0 ;;
i*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit 0 ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit 0 ;;
+ x86:Interix*:3*)
+ echo i386-pc-interix3
+ exit 0 ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i386-pc-interix
+ exit 0 ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit 0 ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin
exit 0 ;;
@@ -547,145 +752,142 @@ EOF
*:GNU:*:*)
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
- *:Linux:*:*)
- # uname on the ARM produces all sorts of strangeness, and we need to
- # filter it out.
- case "$UNAME_MACHINE" in
- arm* | sa110*) UNAME_MACHINE="arm" ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit 0 ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux
+ exit 0 ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ rm -f $dummy.c
+ test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
+ ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit 0 ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit 0 ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit 0 ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
esac
-
+ exit 0 ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit 0 ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit 0 ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit 0 ;;
+ i*86: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`
- ld_supported_emulations=`echo $ld_help_string \
- | sed -ne '/supported emulations:/!d
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
s/[ ][ ]*/ /g
- s/.*supported emulations: *//
+ s/.*supported targets: *//
s/ .*//
p'`
- case "$ld_supported_emulations" in
- i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
- i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
- sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
- armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
- m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
- elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit 0 ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ exit 0 ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit 0 ;;
esac
-
- if test "${UNAME_MACHINE}" = "alpha" ; then
- sed 's/^ //' <<EOF >dummy.s
- .globl main
- .ent main
- main:
- .frame \$30,0,\$26,0
- .prologue 0
- .long 0x47e03d80 # implver $0
- lda \$2,259
- .long 0x47e20c21 # amask $2,$1
- srl \$1,8,\$2
- sll \$2,2,\$2
- sll \$0,3,\$0
- addl \$1,\$0,\$0
- addl \$2,\$0,\$0
- ret \$31,(\$26),1
- .end main
-EOF
- LIBC=""
- ${CC-cc} dummy.s -o dummy 2>/dev/null
- if test "$?" = 0 ; then
- ./dummy
- case "$?" in
- 7)
- UNAME_MACHINE="alpha"
- ;;
- 15)
- UNAME_MACHINE="alphaev5"
- ;;
- 14)
- UNAME_MACHINE="alphaev56"
- ;;
- 10)
- UNAME_MACHINE="alphapca56"
- ;;
- 16)
- UNAME_MACHINE="alphaev6"
- ;;
- esac
-
- objdump --private-headers dummy | \
- grep ld.so.1 > /dev/null
- if test "$?" = 0 ; then
- LIBC="libc1"
- fi
- fi
- rm -f dummy.s dummy
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
- elif test "${UNAME_MACHINE}" = "mips" ; then
- cat >dummy.c <<EOF
-main(argc, argv)
- int argc;
- char *argv[];
-{
-#ifdef __MIPSEB__
- printf ("%s-unknown-linux-gnu\n", argv[1]);
-#endif
-#ifdef __MIPSEL__
- printf ("%sel-unknown-linux-gnu\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
- 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.
- # If ld does not provide *any* "supported emulations:"
- # that means it is gnuoldld.
- echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
- test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
-
- case "${UNAME_MACHINE}" in
- i?86)
- VENDOR=pc;
- ;;
- *)
- VENDOR=unknown;
- ;;
- esac
- # Determine whether the default compiler is a.out or elf
- cat >dummy.c <<EOF
-#include <features.h>
-main(argc, argv)
- int argc;
- char *argv[];
-{
-#ifdef __ELF__
-# ifdef __GLIBC__
-# if (__GLIBC__ >= 2)
- printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
-# else
- printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-# endif
-# else
- printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-# endif
-#else
- printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
-#endif
- return 0;
-}
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #ifdef __INTEL_COMPILER
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
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*:*)
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ rm -f $dummy.c
+ test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
echo i386-sequent-sysv4
exit 0 ;;
- i?86:UNIX_SV:4.2MP:2.*)
+ i*86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
# I am not positive that other SVR4 systems won't match this,
@@ -693,28 +895,23 @@ EOF
# Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit 0 ;;
- # SysVr5/Unixware7
- i?86:*:5*:* | i?86:SYSTEM_V:5*:*)
- if uname -a | grep SCO >/dev/null 2>/dev/null ; then
- (/bin/uname -s|egrep UnixWare >/dev/null) && UNAME_VER=uw${UNAME_VERSION}
- if /bin/uname -X 2>/dev/null >/dev/null ; then
- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- fi
- echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}${UNAME_VER}
- else
- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv4.2uw${UNAME_VERSION}
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
fi
exit 0 ;;
- i?86:*:3.2:*)
+ i*86:*:5:[78]*)
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit 0 ;;
+ 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
@@ -723,19 +920,20 @@ EOF
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
+ (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
else
echo ${UNAME_MACHINE}-pc-sysv32
fi
exit 0 ;;
- i?86:UnixWare:*:*)
- if /bin/uname -X 2>/dev/null >/dev/null ; then
- (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- fi
- echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION}
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
exit 0 ;;
pc:*:*:*)
+ # Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about
# the processor, so we play safe by assuming i386.
echo i386-pc-msdosdjgpp
@@ -759,7 +957,7 @@ EOF
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)
+ 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
@@ -770,24 +968,30 @@ EOF
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.*:*)
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
echo m68k-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
exit 0 ;;
- i?86:LynxOS:2.*:*)
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
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.*:*)
+ rs6000:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
SM[BE]S:UNIX_SV:*:*)
echo mips-dde-sysv${UNAME_RELEASE}
exit 0 ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
RM*:SINIX-*:*:*)
echo mips-sni-sysv4
exit 0 ;;
@@ -799,8 +1003,8 @@ EOF
echo ns32k-sni-sysv
fi
exit 0 ;;
- PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
echo i586-unisys-sysv4
exit 0 ;;
*:UNIX_System_V:4*:FTX*)
@@ -812,13 +1016,17 @@ EOF
# From seanf@swdc.stratus.com.
echo i860-stratus-sysv4
exit 0 ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit 0 ;;
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
exit 0 ;;
- news*:NEWS-OS:*:6*)
+ news*:NEWS-OS:6*:*)
echo mips-sony-newsos6
exit 0 ;;
- R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv${UNAME_RELEASE}
else
@@ -834,12 +1042,91 @@ EOF
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
echo i586-pc-beos
exit 0 ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Darwin:*:*)
+ echo `uname -p`-apple-darwin${UNAME_RELEASE}
+ exit 0 ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ if test "${UNAME_MACHINE}" = "x86pc"; then
+ UNAME_MACHINE=pc
+ echo i386-${UNAME_MACHINE}-nto-qnx
+ else
+ echo `uname -p`-${UNAME_MACHINE}-nto-qnx
+ fi
+ exit 0 ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit 0 ;;
+ NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit 0 ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit 0 ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit 0 ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit 0 ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit 0 ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit 0 ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit 0 ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit 0 ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit 0 ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit 0 ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit 0 ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit 0 ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit 0 ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ 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
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
#ifdef _SEQUENT_
# include <sys/types.h>
# include <sys/utsname.h>
@@ -877,7 +1164,10 @@ main ()
#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);
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
exit (0);
#endif
@@ -922,11 +1212,24 @@ main ()
#endif
#if defined (vax)
-#if !defined (ultrix)
- printf ("vax-dec-bsd\n"); exit (0);
-#else
- printf ("vax-dec-ultrix\n"); exit (0);
-#endif
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
#endif
#if defined (alliant) && defined (i860)
@@ -937,8 +1240,8 @@ main ()
}
EOF
-${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
-rm -f dummy.c dummy
+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
+rm -f $dummy.c $dummy
# Apollos put the system type in the environment.
@@ -970,6 +1273,48 @@ then
esac
fi
-#echo '(Unable to guess system type)' 1>&2
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/gnu/usr.bin/lynx/config.hin b/gnu/usr.bin/lynx/config.hin
index 3579304245e..9ea3918d177 100644
--- a/gnu/usr.bin/lynx/config.hin
+++ b/gnu/usr.bin/lynx/config.hin
@@ -2,11 +2,14 @@
#ifndef LYNX_CFG_H
#define LYNX_CFG_H 1
+#undef ALL_CHARSETS /* AC_ARG_WITH(charsets) */
#undef ALT_CHAR_SET /* CF_ALT_CHAR_SET */
#undef ANSI_VARARGS /* CF_VARARGS */
#undef ARCHIVE_ONLY /* CF_ARG_DISABLE(dired-archive) */
#undef BZIP2_PATH /* CF_PATH_PROG(bzip2) */
+#undef CAN_SET_ERRNO /* CF_SET_ERRNO */
#undef CHMOD_PATH /* CF_PATH_PROG(chmod) */
+#undef CJK_EX /* CF_ARG_ENABLE(cjk) */
#undef COLOR_CURSES /* defined by CF_COLOR_CURSES */
#undef COMPRESS_PATH /* CF_PATH_PROG(compress) */
#undef COPY_PATH /* CF_PATH_PROG(cp) */
@@ -18,23 +21,31 @@
#undef DECL_STRSTR
#undef DECL_SYS_ERRLIST
#undef DIRED_SUPPORT /* AC_ARG_WITH(dired) */
+#undef DISABLE_BIBP /* CF_ARG_DISABLE(bibp-urls) */
#undef DISABLE_FINGER /* CF_ARG_DISABLE(finger) */
#undef DISABLE_FTP /* CF_ARG_DISABLE(ftp) */
#undef DISABLE_GOPHER /* CF_ARG_DISABLE(gopher) */
#undef DISABLE_NEWS /* CF_ARG_DISABLE(news) */
#undef DISP_PARTIAL /* CF_ARG_ENABLE(partial) */
#undef DONT_TRACK_INTERNAL_LINKS /* CF_ARG_DISABLE(internal-links) */
-#undef EBCDIC /* CF_EBCDIC */
+#undef ENABLE_IPV6 /* CF_CHECK_IPV6 */
#undef ENABLE_NLS /* defined if NLS is requested */
+#undef ENABLE_OPTS_CHANGE_EXEC /* CF_ARG_ENABLE(change-exec) */
#undef EXEC_LINKS /* CF_ARG_ENABLE(exec-links) */
#undef EXEC_SCRIPTS /* CF_ARG_ENABLE(exec-scripts) */
#undef EXP_ADDRLIST_PAGE /* CF_ARG_ENABLE(addrlist-page) */
#undef EXP_ALT_BINDINGS /* CF_ARG_ENABLE(alt-bindings) */
+#undef EXP_CHARSET_CHOICE /* CF_ARG_ENABLE(charset-choice) */
#undef EXP_CHARTRANS_AUTOSWITCH /* CF_ARG_ENABLE(font-switch) */
+#undef EXP_FILE_UPLOAD /* CF_ARG_ENABLE(file-upload) */
+#undef EXP_JUSTIFY_ELTS /* CF_ARG_ENABLE(justify-elts) */
#undef EXP_KEYBOARD_LAYOUT /* CF_ARG_ENABLE(kbd-layout) */
#undef EXP_LIBJS /* CF_ARG_ENABLE(libjs) */
+#undef EXP_NESTED_TABLES /* CF_ARG_ENABLE(nested-tables) */
#undef EXP_PERSISTENT_COOKIES /* CF_ARG_ENABLE(persistent-cookies) */
+#undef EXP_READPROGRESS /* CF_ARG_ENABLE(read-eta) */
#undef FANCY_CURSES /* defined by CF_FANCY_CURSES */
+#undef GCC_NORETURN /* CF_GCC_ATTRIBUTES */
#undef GCC_PRINTF /* CF_GCC_ATTRIBUTES */
#undef GCC_UNUSED /* CF_GCC_ATTRIBUTES */
#undef GETGROUPS_T /* AC_TYPE_GETGROUPS */
@@ -42,19 +53,30 @@
#undef HAVE_ALLOCA /* defined by AM_GNU_GETTEXT */
#undef HAVE_ALLOCA_H /* defined by AM_GNU_GETTEXT */
#undef HAVE_ARGZ_H /* defined by AM_GNU_GETTEXT */
+#undef HAVE_ARPA_INET_H
+#undef HAVE_ASSUME_DEFAULT_COLORS /* ncurses extension */
+#undef HAVE_BSD_TOUCHLINE /* CF_CURS_TOUCHLINE */
#undef HAVE_CATGETS /* defined if you want to use non-GNU catgets */
#undef HAVE_CBREAK
#undef HAVE_CURSESX_H
#undef HAVE_CUSERID
#undef HAVE_DCGETTEXT /* defined by AM_GNU_GETTEXT */
#undef HAVE_DEFINE_KEY
+#undef HAVE_DELSCREEN /* defined by CF_CURSES_FUNCS */
#undef HAVE_DIRENT_H /* defined by AC_HEADER_DIRENT */
#undef HAVE_FCNTL_H /* have <fcntl.h> */
+#undef HAVE_FTIME
+#undef HAVE_GAI_STRERROR /* CF_CHECK_IPV6 */
+#undef HAVE_GETADDRINFO /* CF_CHECK_IPV6 */
+#undef HAVE_GETATTRS
+#undef HAVE_GETBEGX
+#undef HAVE_GETBEGY
#undef HAVE_GETBKGD /* defined by CF_COLOR_CURSES */
#undef HAVE_GETCWD
#undef HAVE_GETGROUPS
#undef HAVE_GETTEXT /* defined if you want to use non-GNU gettext */
#undef HAVE_GETTIMEOFDAY
+#undef HAVE_GETUID
#undef HAVE_H_ERRNO
#undef HAVE_INET_ATON /* CF_INET_ADDR */
#undef HAVE_JCURSES_H
@@ -65,16 +87,27 @@
#undef HAVE_LOCALE_H
#undef HAVE_LSTAT /* defined by CF_FUNC_LSTAT */
#undef HAVE_MALLOC_H /* defined by AM_GNU_GETTEXT */
+#undef HAVE_MKSTEMP
+#undef HAVE_MKTEMP
#undef HAVE_MMAP /* defined by AM_GNU_GETTEXT */
#undef HAVE_MUNMAP /* defined by AM_GNU_GETTEXT */
+#undef HAVE_NAPMS
#undef HAVE_NCURSES_H /* defined if we include <ncurses.h> */
+#undef HAVE_NCURSES_NCURSES_H /* defined if we include <ncurses/ncurses.h> */
+#undef HAVE_NCURSES_TERM_H /* have <ncurses/term.h> */
+#undef HAVE_NEWPAD
+#undef HAVE_NEWTERM
#undef HAVE_NL_TYPES_H /* defined by AM_GNU_GETTEXT */
+#undef HAVE_PNOUTREFRESH
#undef HAVE_POPEN
#undef HAVE_PUTENV
#undef HAVE_READDIR
+#undef HAVE_RESIZETERM
#undef HAVE_RESOLV_H
#undef HAVE_SETENV /* defined by AM_GNU_GETTEXT */
#undef HAVE_SETLOCALE
+#undef HAVE_SETUID
+#undef HAVE_SIGACTION /* CF_FUNC_SIGACTION */
#undef HAVE_SIZECHANGE /* defined by CF_SIZECHANGE */
#undef HAVE_STDARG_H /* CF_VARARGS */
#undef HAVE_STDLIB_H
@@ -83,39 +116,58 @@
#undef HAVE_STRCHR /* defined by AM_GNU_GETTEXT */
#undef HAVE_STRERROR
#undef HAVE_STRING_H
+#undef HAVE_SYSLOG_H
+#undef HAVE_SYSV_TOUCHLINE /* CF_CURS_TOUCHLINE */
#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_IOCTL_H /* have <sys/ioctl.h> */
#undef HAVE_SYS_NDIR_H /* defined by AC_HEADER_DIRENT */
#undef HAVE_SYS_PARAM_H /* defined by AM_GNU_GETTEXT */
+#undef HAVE_SYS_TIMEB_H /* have <sys/timeb.h> */
#undef HAVE_SYS_WAIT_H /* have <sys/wait.h> */
#undef HAVE_TERMIOS_H /* have <termios.h> */
#undef HAVE_TERMIO_H /* have <termio.h> */
+#undef HAVE_TERM_H /* have <term.h> */
+#undef HAVE_TOUCHLINE
+#undef HAVE_TOUCHWIN
+#undef HAVE_TRUNCATE
+#undef HAVE_TTYNAME
#undef HAVE_TTYTYPE
#undef HAVE_TYPE_UNIONWAIT /* CF_UNION_WAIT */
#undef HAVE_UNISTD_H /* have <unistd.h> */
#undef HAVE_UNSETENV
#undef HAVE_USE_DEFAULT_COLORS /* ncurses extension */
-#undef HAVE_UTMP
+#undef HAVE_UTMP /* CF_UTMP */
+#undef HAVE_UTMP_UT_HOST /* CF_UTMP_UT_HOST */
+#undef HAVE_UTMP_UT_SESSION /* CF_UTMP_UT_SESSION */
+#undef HAVE_UTMP_UT_XSTATUS /* CF_UTMP_UT_XSTATUS */
+#undef HAVE_UTMP_UT_XTIME /* CF_UTMP_UT_XTIME */
#undef HAVE_VALUES_H /* defined by AM_GNU_GETTEXT */
#undef HAVE_VARARGS_H /* CF_VARARGS */
+#undef HAVE_VASPRINTF
+#undef HAVE_VFORK_H /* have <vfork.h> */
#undef HAVE_WAITPID
#undef HAVE_WBORDER
+#undef HAVE_WREDRAWLN
+#undef HAVE_WRESIZE
+#undef HAVE_XCURSES /* CF_PDCURSES_X11 */
#undef HAVE___ARGZ_COUNT /* defined by AM_GNU_GETTEXT */
#undef HAVE___ARGZ_NEXT /* defined by AM_GNU_GETTEXT */
#undef HAVE___ARGZ_STRINGIFY /* defined by AM_GNU_GETTEXT */
#undef IGNORE_CTRL_C /* FIXME: make tests? */
+#undef INCLUDE_PROTOTYPES /* CF_SOCKS5 */
#undef INSTALL_ARGS /* CF_PATH_PROG(install) */
#undef INSTALL_PATH /* CF_PATH_PROG(install) */
-#undef LINKEDSTYLES /* see USE_COLOR_STYLE */
#undef LINUX /* FIXME: make tests? */
#undef LOCALE /* for locale support */
#undef LONG_LIST /* CF_ARG_DISABLE(long-list) */
#undef LYNXCGI_LINKS /* CF_ARG_ENABLE(cgi-links) */
#undef LYNX_CFG_FILE /* $libdir/lynx.cfg */
#undef LYNX_LSS_FILE /* $libdir/lynx.lss */
-#undef LY_FIND_LEAKS /* configure --disable-leaks */
+#undef LYNX_RAND_MAX /* CF_SRAND */
+#undef LY_FIND_LEAKS /* CF_ARG_ENABLE(find-leaks) */
+#undef LY_TRACELINE /* CF_ARG_ENABLE(vertrace) */
#undef MKDIR_PATH /* CF_PATH_PROG(mkdir) */
#undef MV_PATH /* CF_PATH_PROG(mv) */
#undef NCURSES /* defined for ncurses support */
@@ -123,27 +175,27 @@
#undef NEED_PTEM_H /* defined by CF_SIZECHANGE */
#undef NEED_REMOVE /* defined by CF_REMOVE_BROKEN */
#undef NGROUPS /* defined by CF_NGROUPS */
-#undef NOT_ASCII /* CF_NOT_ASCII */
#undef NO_CHANGE_EXECUTE_PERMS /* CF_ARG_DISABLE(dired-xpermit) */
#undef NO_CONFIG_INFO /* CF_ARG_DISABLE(config-info) */
#undef NO_EXTENDED_HTMLDTD /* CF_ARG_DISABLE(extended-dtd) */
#undef NO_LYNX_TRACE /* CF_ARG_DISABLE(trace) */
#undef NO_OPTION_FORMS /* CF_ARG_DISABLE(forms-options) */
#undef NO_OPTION_MENU /* CF_ARG_DISABLE(option-menu) */
-#undef NO_PARENT_DIR_REFERENCE /* configure --disable-parent-dir */
+#undef NO_PARENT_DIR_REFERENCE /* CF_ARG_DISABLE(parent-dir-refs) */
#undef NSL_FORK /* CF_ARG_ENABLE(nsl-fork) */
#undef OK_GZIP /* CF_ARG_DISABLE(dired-gzip) */
+#undef OK_INSTALL
#undef OK_OVERRIDE /* CF_ARG_DISABLE(dired-override) */
#undef OK_PERMIT /* CF_ARG_DISABLE(dired-permit) */
#undef OK_TAR /* CF_ARG_DISABLE(dired-tar) */
#undef OK_UUDECODE /* CF_ARG_DISABLE(dired-uudecode) */
#undef OK_ZIP /* CF_ARG_DISABLE(dired-zip) */
+#undef REAL_UNIX_SYSTEM /* CF_SLANG_UNIX_DEFS */
#undef RLOGIN_PATH /* CF_PATH_PROG(rlogin) */
#undef RM_PATH /* CF_PATH_PROG(rm) */
#undef SOCKS /* CF_SOCKS, CF_SOCKS5 */
#undef SOURCE_CACHE /* CF_ARG_ENABLE(source-cache) */
#undef STDC_HEADERS
-#undef SYSLOG_REQUESTED_URLS /* CF_ARG_ENABLE(syslog) */
#undef SYSTEM_MAIL /* CF_DEFINE_PROG */
#undef SYSTEM_MAIL_FLAGS /* defined by CF_SYSTEM_MAIL_FLAGS */
#undef SYSTEM_NAME /* CF_CHECK_CACHE */
@@ -163,26 +215,40 @@
#undef USE_EXECVP /* CF_ARG_DISABLE(full-paths) */
#undef USE_EXTERNALS /* CF_ARG_ENABLE(externs) */
#undef USE_FCNTL /* CF_FIONBIO */
-#undef USE_HASH /* see USE_COLOR_STYLE */
-#undef USE_PSRC /* CF_ARG_ENABLE(prettysrc) */
-#undef USE_SIZECHANGEHACK /* FIXME: find a case where this works! */
+#undef USE_OPENSSL_INCL /* CF_SSL */
+#undef USE_PRETTYSRC /* CF_ARG_ENABLE(prettysrc) */
+#undef USE_SCROLLBAR /* CF_ARG_ENABLE(scrollbar) */
#undef USE_SLANG /* AC_ARG_WITH(screen=slang) */
#undef USE_SOCKS4_PREFIX /* CF_SOCKS5 */
#undef USE_SOCKS5 /* CF_SOCKS5 */
+#undef USE_SSL /* CF_SSL */
+#undef USE_SYSV_UTMP /* CF_UTMP */
#undef USE_ZLIB /* AC_ARG_WITH(zlib) */
#undef UTMPX_FOR_UTMP /* use <utmpx.h> since <utmp.h> not found */
#undef UUDECODE_PATH /* CF_PATH_PROG(uudecode) */
#undef WAITPID_USES_UNION /* CF_FUNC_WAIT */
#undef WAIT_USES_UNION /* CF_FUNC_WAIT */
+#undef XCURSES /* CF_PDCURSES_X11 */
#undef ZCAT_PATH /* CF_PATH_PROG(zcat) */
#undef ZIP_PATH /* CF_PATH_PROG(zip) */
#undef _ALL_SOURCE /* AC_AIX */
#undef inline /* defined by AC_C_INLINE */
+#undef lynx_rand /* CF_SRAND */
+#undef lynx_srand /* CF_SRAND */
#undef mode_t /* defined by AC_TYPE_MODE_T */
#undef off_t /* defined by AC_TYPE_OFF_T */
#undef pid_t /* defined by AC_TYPE_PID_T */
#undef uid_t /* defined by AC_TYPE_UID_T */
+#undef ut_name /* CF_UTMP */
+#undef ut_xstatus /* CF_UTMP_UT_XSTATUS */
+#undef ut_xtime /* CF_UTMP_UT_XTIME */
+
+/*
+ * U/Win defines vfork() as a macro in vfork.h, which is included from unistd.h.
+ */
+#ifndef HAVE_VFORK_H
#undef vfork /* defined by AC_FUNC_FORK */
+#endif
/* 'const' may be defined externally by the compiler-wrapper, as in 'unproto'
* or by AC_C_CONST
@@ -191,17 +257,19 @@
#undef const
#endif
-/* FIXME:ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
-/* FIXME:DECLARE_WAIS_LOGFILES */
-/* FIXME:DGUX */
+/*
+ * The configure script generates LYHelp.h (handcrafted makefiles may not do
+ * this, so we set a definition):
+ */
+#define HAVE_LYHELP_H 1
+
+/* FIXME:DGUX (done in $host_os case-statement) */
/* FIXME:DGUX_OLD */
/* FIXME:HP_TERMINAL */
-/* FIXME:NOPORT */
-/* FIXME:POSIX_JC */
/* FIXME:REVERSE_CLEAR_SCREEN_PROBLEM */
/* FIXME:SHORTENED_RBIND */
/* FIXME:SNAKE */
-/* FIXME:SVR4_BSDSELECT */
+/* FIXME:SVR4_BSDSELECT (done in $host_os case-statement) */
/* Some older socks libraries, especially AIX need special definitions */
#if defined(_AIX) && !defined(USE_SOCKS5)
@@ -215,6 +283,10 @@
#undef select
#endif
+#ifdef HAVE_SYSLOG_H
+#undef SYSLOG_REQUESTED_URLS /* CF_ARG_ENABLE(syslog) */
+#endif
+
#ifndef HAVE_LSTAT
#define lstat stat
#endif
diff --git a/gnu/usr.bin/lynx/config.sub b/gnu/usr.bin/lynx/config.sub
index 9c47333ac99..9df4e53f809 100644
--- a/gnu/usr.bin/lynx/config.sub
+++ b/gnu/usr.bin/lynx/config.sub
@@ -1,6 +1,10 @@
#! /bin/sh
-# Configuration validation subroutine script, version 1.1.
-# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+
+timestamp='2001-03-09'
+
# 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.
@@ -25,6 +29,8 @@
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
+# Please send patches to <config-patches@gnu.org>.
+#
# 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.
@@ -45,30 +51,73 @@
# 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
+me=`echo "$0" | sed -e 's,.*/,,'`
-# First pass through any local machine types.
-case $1 in
- *local*)
- echo $1
- exit 0
- ;;
- *)
- ;;
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit 0;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
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*)
+ nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
@@ -94,15 +143,25 @@ case $os in
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple)
+ -apple | -axis)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
os=
basic_machine=$1
;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
-hiux*)
os=-hiuxwe2
;;
-sco5)
- os=sco3.2v5
+ os=-sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco4)
@@ -121,6 +180,9 @@ case $os in
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
-isc)
os=-isc2.2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -143,27 +205,48 @@ case $os in
-psos*)
os=-psos
;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
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 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
- | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
+ tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \
+ | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \
+ | pyramid | mn10200 | mn10300 | tron | a29k \
| 580 | i960 | h8300 \
- | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w \
- | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
- | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
- | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
- | mipstx39 | mipstx39el \
- | sparc | sparclet | sparclite | sparc64 | v850)
+ | x86 | ppcbe | mipsbe | mipsle | shbe | shle \
+ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
+ | hppa64 \
+ | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
+ | alphaev6[78] \
+ | we32k | ns16k | clipper | i370 | sh | sh[34] \
+ | powerpc | powerpcle \
+ | 1750a | dsp16xx | pdp10 | pdp11 \
+ | mips16 | mips64 | mipsel | mips64el \
+ | mips64orion | mips64orionel | mipstx39 | mipstx39el \
+ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
+ | mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \
+ | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
+ | thumb | d10v | d30v | fr30 | avr | openrisc)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl)
;;
+
# 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[34567]86)
+ i[234567]86 | x86_64)
basic_machine=$basic_machine-pc
;;
# Object if more than one company name word.
@@ -172,28 +255,51 @@ case $basic_machine in
exit 1
;;
# Recognize the basic CPU types with company name.
- vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
- | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
+ # FIXME: clean up the formatting here.
+ vax-* | tahoe-* | i[234567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
+ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \
+ | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
- | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
+ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
| xmp-* | ymp-* \
+ | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \
| hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
- | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
- | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
- | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
- | sparc64-* | mips64-* | mipsel-* \
- | mips64el-* | mips64orion-* | mips64orionel-* \
- | mipstx39-* | mipstx39el-* \
- | f301-*)
+ | hppa2.0n-* | hppa64-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
+ | alphaev6[78]-* \
+ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
+ | clipper-* | orion-* \
+ | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
+ | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
+ | mips64el-* | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
+ | mipstx39-* | mipstx39el-* | mcore-* \
+ | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \
+ | [cjt]90-* \
+ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
+ | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \
+ | bs2000-* | tic54x-* | c54x-* | x86_64-*)
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
basic_machine=m68000-att
;;
3b*)
basic_machine=we32k-att
;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
alliant | fx80)
basic_machine=fx80-alliant
;;
@@ -209,20 +315,24 @@ case $basic_machine in
os=-sysv
;;
amiga | amiga-*)
- basic_machine=m68k-cbm
+ basic_machine=m68k-unknown
;;
amigaos | amigados)
- basic_machine=m68k-cbm
+ basic_machine=m68k-unknown
os=-amigaos
;;
amigaunix | amix)
- basic_machine=m68k-cbm
+ basic_machine=m68k-unknown
os=-sysv4
;;
apollo68)
basic_machine=m68k-apollo
os=-sysv
;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -259,13 +369,16 @@ case $basic_machine in
basic_machine=cray2-cray
os=-unicos
;;
- [ctj]90-cray)
- basic_machine=c90-cray
+ [cjt]90)
+ basic_machine=${basic_machine}-cray
os=-unicos
;;
crds | unos)
basic_machine=m68k-crds
;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
da30 | da30-*)
basic_machine=m68k-da30
;;
@@ -299,6 +412,10 @@ case $basic_machine in
encore | umax | mmax)
basic_machine=ns32k-encore
;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
fx2800)
basic_machine=i860-alliant
;;
@@ -309,6 +426,10 @@ case $basic_machine in
basic_machine=tron-gmicro
os=-sysv
;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
h3050r* | hiux*)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
@@ -317,6 +438,14 @@ case $basic_machine in
basic_machine=h8300-hitachi
os=-hms
;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
harris)
basic_machine=m88k-harris
os=-sysv3
@@ -332,13 +461,30 @@ case $basic_machine in
basic_machine=m68k-hp
os=-hpux
;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
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)
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
basic_machine=hppa1.1-hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
@@ -347,16 +493,16 @@ case $basic_machine in
hppa-next)
os=-nextstep3
;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
i370-ibm* | ibm*)
basic_machine=i370-ibm
- os=-mvs
- ;;
- s390 | s390-ibm*)
-# OS/390 support after:
-# Linkname: Mortice Kern Systems (MKS) Inc. - OS/390 OpenEdition -- GNU Utilities Downloads
-# URL: http://www.mks.com/s390/gnu/download.htm#autoconf
- basic_machine=s390-ibm # /* S/390 -- gil -- 1419 */
- os=-os390
;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
i[34567]86v32)
@@ -375,6 +521,14 @@ case $basic_machine in
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
iris | iris4d)
basic_machine=mips-sgi
case $os in
@@ -400,9 +554,17 @@ case $basic_machine in
basic_machine=ns32k-utek
os=-sysv
;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
miniframe)
basic_machine=m68000-convergent
;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
mipsel*-linux*)
basic_machine=mipsel-unknown
os=-linux-gnu
@@ -417,10 +579,34 @@ case $basic_machine in
mips3*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
;;
+ mmix*)
+ basic_machine=mmix-knuth
+ os=-mmixware
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
ncr3000)
basic_machine=i486-ncr
os=-sysv4
;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
news | news700 | news800 | news900)
basic_machine=m68k-sony
os=-newsos
@@ -433,6 +619,10 @@ case $basic_machine in
basic_machine=mips-sony
os=-newsos
;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
next | m*-next )
basic_machine=m68k-next
case $os in
@@ -458,9 +648,32 @@ case $basic_machine in
basic_machine=i960-intel
os=-nindy
;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
np1)
basic_machine=np1-gould
;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
pa-hitachi)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
@@ -478,28 +691,28 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
- pentium | p5 | k5 | nexen)
+ pentium | p5 | k5 | k6 | nexgen)
basic_machine=i586-pc
;;
- pentiumpro | p6 | k6 | 6x86)
+ pentiumpro | p6 | 6x86 | athlon)
basic_machine=i686-pc
;;
pentiumii | pentium2)
- basic_machine=i786-pc
+ basic_machine=i686-pc
;;
- pentium-* | p5-* | k5-* | nexen-*)
+ pentium-* | p5-* | k5-* | k6-* | nexgen-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
- pentiumpro-* | p6-* | k6-* | 6x86-*)
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumii-* | pentium2-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pn)
basic_machine=pn-gould
;;
- power) basic_machine=rs6000-ibm
+ power) basic_machine=power-ibm
;;
ppc) basic_machine=powerpc-unknown
;;
@@ -514,12 +727,24 @@ case $basic_machine in
ps2)
basic_machine=i386-ibm
;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
rm[46]00)
basic_machine=mips-siemens
;;
rtpc | rtpc-*)
basic_machine=romp-ibm
;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
sequent)
basic_machine=i386-sequent
;;
@@ -527,6 +752,10 @@ case $basic_machine in
basic_machine=sh-hitachi
os=-hms
;;
+ sparclite-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
sps7)
basic_machine=m68k-bull
os=-sysv2
@@ -534,6 +763,13 @@ case $basic_machine in
spur)
basic_machine=spur-unknown
;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
sun2)
basic_machine=m68000-sun
;;
@@ -574,10 +810,22 @@ case $basic_machine in
sun386 | sun386i | roadrunner)
basic_machine=i386-sun
;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
symmetry)
basic_machine=i386-sequent
os=-dynix
;;
+ t3e)
+ basic_machine=t3e-cray
+ os=-unicos
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
tx39)
basic_machine=mipstx39-unknown
;;
@@ -595,6 +843,10 @@ case $basic_machine in
basic_machine=a29k-nyu
os=-sym1
;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
vaxv)
basic_machine=vax-dec
os=-sysv
@@ -618,6 +870,14 @@ case $basic_machine in
basic_machine=a29k-wrs
os=-vxworks
;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
xmp)
basic_machine=xmp-cray
os=-unicos
@@ -625,6 +885,10 @@ case $basic_machine in
xps | xps100)
basic_machine=xps100-honeywell
;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
none)
basic_machine=none-none
os=-none
@@ -632,6 +896,15 @@ case $basic_machine in
# 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.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
mips)
if [ x$os = x-linux-gnu ]; then
basic_machine=mips-unknown
@@ -648,13 +921,20 @@ case $basic_machine in
vax)
basic_machine=vax-dec
;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
pdp11)
basic_machine=pdp11-dec
;;
we32k)
basic_machine=we32k-att
;;
- sparc)
+ sh3 | sh4)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv9)
basic_machine=sparc-sun
;;
cydra)
@@ -666,6 +946,16 @@ case $basic_machine in
orion105)
basic_machine=clipper-highlevel
;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ c4x*)
+ basic_machine=c4x-none
+ os=-coff
+ ;;
*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
@@ -716,16 +1006,38 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* | -os390* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -uxpv* | -beos*)
+ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i[34567]86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto*)
+ os=-nto-qnx
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
-linux*)
os=`echo $os | sed -e 's|linux|linux-gnu|'`
;;
@@ -735,6 +1047,12 @@ case $os in
-sunos6*)
os=`echo $os | sed -e 's|sunos6|solaris3|'`
;;
+ -opened*)
+ os=-openedition
+ ;;
+ -wince*)
+ os=-wince
+ ;;
-osfrose*)
os=-osfrose
;;
@@ -750,12 +1068,18 @@ case $os in
-acis*)
os=-aos
;;
+ -386bsd)
+ os=-bsd
+ ;;
-ctix* | -uts*)
os=-sysv
;;
-ns2 )
os=-nextstep2
;;
+ -nsk*)
+ os=-nsk
+ ;;
# Preserve the version number of sinix5.
-sinix5.*)
os=`echo $os | sed -e 's|sinix|sysv|'`
@@ -781,9 +1105,18 @@ case $os in
# This must come after -sysvr4.
-sysv*)
;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
-xenix)
os=-xenix
;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
-none)
;;
*)
@@ -809,9 +1142,15 @@ case $basic_machine in
*-acorn)
os=-riscix1.2
;;
+ arm*-rebel)
+ os=-linux
+ ;;
arm*-semi)
os=-aout
;;
+ pdp10-*)
+ os=-tops20
+ ;;
pdp11-*)
os=-none
;;
@@ -830,6 +1169,15 @@ case $basic_machine in
# default.
# os=-sunos4
;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
*-tti) # must be before sparc entry or we get the wrong os.
os=-sysv3
;;
@@ -839,12 +1187,18 @@ case $basic_machine in
*-be)
os=-beos
;;
- s390-ibm)
- os=-os390 # /* S/390 -- gil -- 1451 */
- ;;
*-ibm)
os=-aix
;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
*-hp)
os=-hpux
;;
@@ -905,9 +1259,21 @@ case $basic_machine in
*-masscomp)
os=-rtu
;;
- f301-fujitsu)
+ f30[01]-fujitsu | f700-fujitsu)
os=-uxpv
;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
*)
os=-none
;;
@@ -929,9 +1295,15 @@ case $basic_machine in
-aix*)
vendor=ibm
;;
+ -beos*)
+ vendor=be
+ ;;
-hpux*)
vendor=hp
;;
+ -mpeix*)
+ vendor=hp
+ ;;
-hiux*)
vendor=hitachi
;;
@@ -947,7 +1319,7 @@ case $basic_machine in
-genix*)
vendor=ns
;;
- -mvs*)
+ -mvs* | -opened*)
vendor=ibm
;;
-ptx*)
@@ -959,9 +1331,26 @@ case $basic_machine in
-aux*)
vendor=apple
;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
esac
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
;;
esac
echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/gnu/usr.bin/lynx/configure b/gnu/usr.bin/lynx/configure
index 130acb02de4..519f4114d95 100644
--- a/gnu/usr.bin/lynx/configure
+++ b/gnu/usr.bin/lynx/configure
@@ -1,7 +1,7 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13.19990117
+# Generated automatically using autoconf version 2.13.20000819
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
@@ -185,35 +185,51 @@ EOF
cat <<EOF
--enable and --with options recognized:
Development Options:
- --disable-echo test: display "compiling" commands
+ --disable-echo display "compiling" commands
--enable-find-leaks logic for testing memory leaks
- --enable-debug logic for object code debugging
+ --enable-debug compile w/ debugging (if \$CFLAGS is set, add -g there, too)
--disable-trace disable logic for trace code
+ --enable-vertrace verbose trace code
--enable-warnings GCC compiler warnings
Basic Configuration Options:
--enable-nls use Native Language Support
--with-included-gettext use the GNU gettext library included here
--with-catgets use catgets functions if available
- --with-nls-datadir=DIR NLS data, parent of locale (default: PREFIX/DATADIR)
--enable-included-msgs use included messages, for i18n support
- --disable-full-paths control whether full utility pathnames are used
+ --with-nls-datadir=DIR NLS data, parent of locale (default: PREFIX/DATADIR)
EOF
cat <<EOF
+ --disable-full-paths control whether full utility pathnames are used
+ --with-ssl[=path] link with ssl library if available
--with-socks[=path] link with socks library if available
--with-socks5[=path] link with socks5 library if available
--with-screen=XXX select screen type
(XXX is curses (default), ncurses or slang)
+ --with-charsets=list limit charsets to given list of MIME names
Experimental Options:
+ --disable-bibp-urls disable support for bibp: URLs
--disable-config-info disable browsable configuration-info
--disable-forms-options disable experimental forms-based options
--disable-menu-options disable old-style option menu
--enable-addrlist-page use experimental address-list page
- --enable-color-style use optional/experimental color style
+EOF
+cat <<EOF
+ --enable-charset-choice use experimental charset-selection logic
+ --enable-cjk use experimental CJK logic
+ --enable-color-style use optional/experimental color style (ncurses/curses)
--enable-default-colors enable use of default-colors (ncurses/slang)
+ --enable-file-upload use experimental file-upload support
+ --enable-htmlized-cfg build experimental htmlized lynx.cfg
+ --enable-ipv6 use experimental ipv6 (with ipv4) support
+ --enable-justify-elts use experimental element-justification logic
--enable-kbd-layout use experimental keyboard-layout support
+ --enable-libjs use experimental JavaScript support (Mozilla libjs)
+ --enable-nested-tables use experimental nested-table support
--enable-prettysrc colorize HTML source
EOF
cat <<EOF
+ --enable-read-eta experimental read-progress message shows ETA
+ --enable-scrollbar use experimental scrollbar, with mouse
--enable-source-cache cache HTML source for parse mode changes
Miscellaneous Options:
--disable-alt-bindings disable alternative line-edit bindings
@@ -222,12 +238,13 @@ Miscellaneous Options:
--enable-externs use external commands
--enable-font-switch use Linux setfont for character-translation
--enable-cgi-links support cgi links w/o a http daemon
+ --enable-change-exec allow users to change exec options
--enable-exec-links allow lynx to execute programs accessed via a link
+EOF
+cat <<EOF
--enable-exec-scripts allow lynx to execute programs inferred from a link
--enable-internal-links handle following links to same doc differently
--enable-nsl-fork fork NSL requests, allowing them to be aborted
-EOF
-cat <<EOF
--enable-syslog log URL requests via syslog
--disable-persistent-cookies disable persistent-cookie support
--enable-underlines underline links rather than using boldface
@@ -237,12 +254,12 @@ cat <<EOF
--disable-gopher disable GOPHER logic
--disable-news disable NEWS logic
--disable-ftp disable FTP logic
+EOF
+cat <<EOF
Directory Editor Options:
--disable-dired disable optional directory-editor, DirEd
--disable-dired-archive disable dearchiving commands
-EOF
-cat <<EOF
- --disable-dired-override disable private keymaps
+ --disable-dired-override disable DirEd override keymap
--disable-dired-permit disable chmod/attrib commands
--disable-dired-xpermit disable chmod/attrib commands
--disable-dired-tar disable "tar" command
@@ -253,6 +270,12 @@ cat <<EOF
--disable-parent-dir-refs
disable "Up-to" links in directory listings
EOF
+cat <<EOF
+Special Libraries for PDCurses X11:
+ --with-x use the X Window System
+ --with-Xaw3d link with Xaw 3d library
+ --with-neXtaw link with neXT Athena library
+EOF
exit 0 ;;
-host | --host | --hos | --ho)
@@ -402,7 +425,7 @@ EOF
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.13.19990117"
+ echo "configure generated by autoconf version 2.13.20000819"
exit 0 ;;
-with-* | --with-*)
@@ -590,7 +613,8 @@ else
fi
-
+cat config.cache; rm -f config.cache; touch config.cache
+CONFIG_H=lynx_cfg.h
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
@@ -620,7 +644,7 @@ 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:624: checking host system type" >&5
+echo "configure:648: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -667,15 +691,30 @@ if test ".$system_name" != ".$cf_cv_system_name" ; then
fi
+PACKAGE=lynx
+VERSION=2.8.4
+
+
+
+
+
+
test -z "$ALL_LINGUAS" && ALL_LINGUAS=`test -d $srcdir/po && cd $srcdir/po && echo *.po|sed -e 's/\.po//g' -e 's/*//'`
+case $host_os in
+openedition)
+ : ${CFLAGS="-D_ALL_SOURCE -Wl,EDIT=NO"}
+ : ${CC=c89}
+ ;;
+esac
+
# 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:679: checking for $ac_word" >&5
+echo "configure:718: 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
@@ -705,7 +744,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:709: checking for $ac_word" >&5
+echo "configure:748: 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
@@ -756,7 +795,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:760: checking for $ac_word" >&5
+echo "configure:799: 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
@@ -788,7 +827,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:792: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:831: 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.
@@ -799,12 +838,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 803 "configure"
+#line 842 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -830,12 +869,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:834: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:873: 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:839: checking whether we are using GNU C" >&5
+echo "configure:878: 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
@@ -844,7 +883,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:887: \"$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
@@ -863,7 +902,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:867: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:906: 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
@@ -895,7 +934,7 @@ else
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:899: checking how to run the C preprocessor" >&5
+echo "configure:938: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -910,13 +949,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 914 "configure"
+#line 953 "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:920: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:959: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -927,13 +966,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 931 "configure"
+#line 970 "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:937: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:976: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -944,13 +983,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 948 "configure"
+#line 987 "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:954: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:993: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -974,10 +1013,31 @@ else
fi
echo "$ac_t""$CPP" 1>&6
+echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
+echo "configure:1018: checking whether ln -s works" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ rm -f conftestdata
+if ln -s X conftestdata 2>/dev/null
+then
+ rm -f conftestdata
+ ac_cv_prog_LN_S="ln -s"
+else
+ ac_cv_prog_LN_S=ln
+fi
+fi
+LN_S="$ac_cv_prog_LN_S"
+if test "$ac_cv_prog_LN_S" = "ln -s"; then
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
# 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:981: checking for $ac_word" >&5
+echo "configure:1041: 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
@@ -1005,7 +1065,7 @@ else
fi
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1009: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:1069: 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
@@ -1043,7 +1103,7 @@ fi
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1047: checking for a BSD compatible install" >&5
+echo "configure:1107: 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
@@ -1100,7 +1160,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1104: checking for $ac_word" >&5
+echo "configure:1164: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LINT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1131,9 +1191,9 @@ done
echo $ac_n "checking for AIX""... $ac_c" 1>&6
-echo "configure:1135: checking for AIX" >&5
+echo "configure:1195: checking for AIX" >&5
cat > conftest.$ac_ext <<EOF
-#line 1137 "configure"
+#line 1197 "configure"
#include "confdefs.h"
#ifdef _AIX
yes
@@ -1155,7 +1215,7 @@ rm -f conftest*
echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
-echo "configure:1159: checking for POSIXized ISC" >&5
+echo "configure:1219: checking for POSIXized ISC" >&5
if test -d /etc/conf/kconfig.d &&
grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
then
@@ -1181,7 +1241,7 @@ fi
echo $ac_n "checking if you want to see long compiling messages""... $ac_c" 1>&6
-echo "configure:1185: checking if you want to see long compiling messages" >&5
+echo "configure:1245: 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
@@ -1229,7 +1289,7 @@ fi
echo $ac_n "checking if you want to check memory-leaks""... $ac_c" 1>&6
-echo "configure:1233: checking if you want to check memory-leaks" >&5
+echo "configure:1293: 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
@@ -1253,7 +1313,7 @@ EOF
echo $ac_n "checking if you want to enable debug-code""... $ac_c" 1>&6
-echo "configure:1257: checking if you want to enable debug-code" >&5
+echo "configure:1317: 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
@@ -1295,7 +1355,7 @@ else
fi
echo $ac_n "checking if you want to enable lynx trace code *recommended* ""... $ac_c" 1>&6
-echo "configure:1299: checking if you want to enable lynx trace code *recommended* " >&5
+echo "configure:1359: checking if you want to enable lynx trace code *recommended* " >&5
# Check whether --enable-trace or --disable-trace was given.
if test "${enable_trace+set}" = set; then
@@ -1318,10 +1378,34 @@ test $with_trace = no && cat >> confdefs.h <<\EOF
EOF
+echo $ac_n "checking if you want verbose trace code""... $ac_c" 1>&6
+echo "configure:1383: checking if you want verbose trace code" >&5
+
+# Check whether --enable-vertrace or --disable-vertrace was given.
+if test "${enable_vertrace+set}" = set; then
+ enableval="$enable_vertrace"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ with_vertrace=yes
+ else
+ with_vertrace=no
+ fi
+else
+ enableval=no
+ with_vertrace=no
+
+fi
+
+echo "$ac_t""$with_vertrace" 1>&6
+test $with_vertrace = yes && cat >> confdefs.h <<\EOF
+#define LY_TRACELINE __LINE__
+EOF
+
+
if test -n "$GCC"
then
echo $ac_n "checking if you want to turn on gcc warnings""... $ac_c" 1>&6
-echo "configure:1325: checking if you want to turn on gcc warnings" >&5
+echo "configure:1409: 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
@@ -1342,7 +1426,7 @@ echo "$ac_t""$with_warnings" 1>&6
if test "$with_warnings" = "yes"
then
-if test -n "$GCC"
+if test "$GCC" = yes
then
cat > conftest.i <<EOF
#ifndef GCC_PRINTF
@@ -1358,12 +1442,12 @@ cat > conftest.i <<EOF
#define GCC_UNUSED /* nothing */
#endif
EOF
-if test -n "$GCC"
+if test "$GCC" = yes
then
- echo "checking for gcc __attribute__ directives" 1>&6
-echo "configure:1365: checking for gcc __attribute__ directives" >&5
- cat > conftest.$ac_ext <<EOF
-#line 1367 "configure"
+ echo "checking for $CC __attribute__ directives" 1>&6
+echo "configure:1449: checking for $CC __attribute__ directives" >&5
+cat > conftest.$ac_ext <<EOF
+#line 1451 "configure"
#include "confdefs.h"
#include "conftest.h"
#include "conftest.i"
@@ -1382,13 +1466,13 @@ extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
extern void foo(void) GCC_NORETURN;
int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED) { return 0; }
EOF
- for cf_attribute in scanf printf unused noreturn
+ for cf_attribute in scanf printf unused noreturn
do
-CF_ATTRIBUTE=`echo $cf_attribute | tr '[a-z]' '[A-Z]'`
+CF_ATTRIBUTE=`echo "$cf_attribute" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cf_directive="__attribute__(($cf_attribute))"
- echo "checking for gcc $cf_directive" 1>&5
+ echo "checking for $CC $cf_directive" 1>&5
case $cf_attribute in
scanf|printf)
cat >conftest.h <<EOF
@@ -1401,7 +1485,7 @@ EOF
EOF
;;
esac
- if { (eval echo configure:1405: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:1489: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
test -n "$verbose" && echo "$ac_t""... $cf_attribute" 1>&6
cat conftest.h >>confdefs.h
# else
@@ -1415,14 +1499,14 @@ rm -rf conftest*
fi
-if test -n "$GCC"
+if test "$GCC" = yes
then
- cat > conftest.$ac_ext <<EOF
-#line 1422 "configure"
+ cat > conftest.$ac_ext <<EOF
+#line 1506 "configure"
int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
EOF
- echo "checking for gcc warning options" 1>&6
-echo "configure:1426: checking for gcc warning options" >&5
+ echo "checking for $CC warning options" 1>&6
+echo "configure:1510: checking for $CC warning options" >&5
cf_save_CFLAGS="$CFLAGS"
EXTRA_CFLAGS="-W -Wall"
cf_warn_CONST=""
@@ -1440,7 +1524,7 @@ echo "configure:1426: checking for gcc warning options" >&5
Wstrict-prototypes $cf_warn_CONST
do
CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
- if { (eval echo configure:1444: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:1528: \"$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"
test "$cf_opt" = Wcast-qual && EXTRA_CFLAGS="$EXTRA_CFLAGS -DXTSTRINGDEFINES"
@@ -1455,15 +1539,482 @@ fi
fi
+cat >> confdefs.h <<\EOF
+#define UNIX 1
+EOF
+
+
+echo $ac_n "checking for working const""... $ac_c" 1>&6
+echo "configure:1549: 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 1554 "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:1603: \"$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
+
+
+PROG_EXT=
+TRY_CFLAGS=
+case $host_os in
+aix4*)
+ TRY_CFLAGS="$TRY_CFLAGS -DAIX4 -D_BSD=44 -D_AIX"
+ LIBS="$LIBS -lbsd"
+ ;;
+aix*)
+ LIBS="$LIBS -lbsd"
+ ;;
+apollo*)
+ TRY_CFLAGS="$TRY_CFLAGS -D_BUILTINS -W0,-opt,4"
+ ;;
+bsdi*)
+ TRY_CFLAGS="$TRY_CFLAGS -DBSDI"
+ ;;
+clix*)
+ # Tested on CLIX 3.1 (T.Dickey). The original makefile entry
+ # contributed by Alex Matulich (matuli_a@marlin.navsea.navy.mil) also
+ # references -lmalloc and -lbsd.
+ echo $ac_n "checking for strcmp in -lc_s""... $ac_c" 1>&6
+echo "configure:1645: checking for strcmp in -lc_s" >&5
+ac_lib_var=`echo c_s'_'strcmp | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lc_s $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1653 "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 strcmp();
+
+int main() {
+strcmp()
+; return 0; }
+EOF
+if { (eval echo configure:1664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo c_s | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-lc_s $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ ;;
+convex*)
+ TRY_CFLAGS="$TRY_CFLAGS -D__STDC__ -Dunix"
+ ;;
+cygwin*)
+ PROG_EXT=".exe"
+ LIBS="$LIBS -luser32"
+ ;;
+dgux*)
+ TRY_CFLAGS="$TRY_CFLAGS -DDGUX"
+ ;;
+hpux*)
+ TRY_CFLAGS="$TRY_CFLAGS -DSNAKE"
+ test -z "$GCC" && TRY_CFLAGS="$TRY_CFLAGS -Wp,-H600000"
+ ;;
+isc*)
+ # -DPOSIX_JC is necessary, else LYBookmark.c never finds out what a mode_t is.
+ TRY_CFLAGS="$TRY_CFLAGS -DISC -DPOSIX_JC"
+ LIBS="$LIBS -linet -lnsl_s -lcposix"
+ ;;
+irix*)
+ # The original makefile used the $CFLAGS option -cckr for some form
+ # of K&R compatibility. However, this causes compilation warnings for
+ # varargs on IRIX 5.2, and does not appear to be needed.
+ ;;
+linux*)
+ TRY_CFLAGS="$TRY_CFLAGS -DLINUX"
+ ;;
+next*)
+ TRY_CFLAGS="$TRY_CFLAGS -DNEXT -DXMOSAIC_HACK"
+ ;;
+openbsd*)
+ LIBS="$LIBS -lcompat"
+ ;;
+os2*)
+ # We make sure -Zexe is not used -- it would interfere with @PROG_EXT@
+ TRY_CFLAGS="$TRY_CFLAGS -Zmt -D__ST_MT_ERRNO__"
+ LDFLAGS=`echo "$LDFLAGS -Zmt -Zcrtdll" | sed "s/-Zexe//g"`
+ PROG_EXT=".exe"
+ ;;
+osf4*)
+ # The -Olimit flag (see below) is no longer available with
+ # Digital C 5.2, which is bundled with Digital UNIX 4.0.
+ TRY_CFLAGS="$TRY_CFLAGS -DDSYS5"
+ ;;
+osf*)
+ # Increase the maximum size of functions that will be optimized.
+ test -z "$GCC" && TRY_CFLAGS="$TRY_CFLAGS -O -Olimit 4000"
+ TRY_CFLAGS="$TRY_CFLAGS -DDSYS5"
+ ;;
+sco3.2v5*)
+ test $ac_cv_prog_gcc != yes && TRY_CFLAGS="$TRY_CFLAGS -belf"
+ ;;
+sco*)
+ LIBS="$LIBS -lmalloc"
+ # It's a little late to do much, but try to warn user if he's using
+ # SCO's cc (which is reported to have broken const/volatile).
+ case "$CC" in #(vi
+ cc|*/cc)
+ echo "configure: warning: You should consider using gcc or rcc if available" 1>&2
+ unset ac_cv_prog_CC
+ for ac_prog in gcc rcc
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1757: 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=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="$ac_prog"
+ 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
+
+test -n "$CC" && break
+done
+test -n "$CC" || CC="$CC"
+
+ ;;
+ esac
+ ;;
+sequent-ptx)
+ TRY_CFLAGS="$TRY_CFLAGS -DSVR4_BSDSELECT -DNO_IOCTL -DUSE_FCNTL"
+ ;;
+sequent-ptx2)
+ TRY_CFLAGS="$TRY_CFLAGS -DSVR4_BSDSELECT"
+ ;;
+sony-newsos*)
+ TRY_CFLAGS="$TRY_CFLAGS -I/usr/sony/include"
+ for ac_hdr in jcurses.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1802: 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 1807 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1812: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ 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
+
+ ;;
+svr4)
+ TRY_CFLAGS="$TRY_CFLAGS -DSVR4_BSDSELECT -DSVR4"
+ ;;
+sunos3*)
+ TRY_CFLAGS="$TRY_CFLAGS -DSUN"
+ ;;
+sunos4*)
+ TRY_CFLAGS="$TRY_CFLAGS -DSUN -DSUN4"
+ ;;
+ultrix*)
+ # Increase the maximum size of functions that will be optimized.
+ test -z "$GCC" && TRY_CFLAGS="$TRY_CFLAGS -O -Olimit 600 -G 7"
+ TRY_CFLAGS="$TRY_CFLAGS -DULTRIX"
+ for ac_hdr in cursesX.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1856: 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 1861 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1866: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ 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
+ cat >> confdefs.h <<\EOF
+#define HAVE_CURSESX_H 1
+EOF
+
+ cf_cv_ncurses_header=cursesX.h
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+ ;;
+esac
+
+
+if test -z "$GCC" ; then
+
+echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6
+echo "configure:1903: checking for ${CC-cc} option to accept ANSI C" >&5
+if eval "test \"`echo '$''{'cf_cv_ansi_cc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+cf_cv_ansi_cc=no
+cf_save_CFLAGS="$CFLAGS"
+cf_save_CPPFLAGS="$CPPFLAGS"
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX -Aa -D_HPUX_SOURCE
+# SVR4 -Xc
+# UnixWare 1.2 (cannot use -Xc, since ANSI/POSIX clashes)
+for cf_arg in "-DCC_HAS_PROTOS" \
+ "" \
+ -qlanglvl=ansi \
+ -std1 \
+ -Ae \
+ "-Aa -D_HPUX_SOURCE" \
+ -Xc
+do
+
+for cf_add_cflags in $cf_arg
+do
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case "$CPPFLAGS" in
+ *$cf_add_cflags)
+ ;;
+ *)
+ CPPFLAGS="$CPPFLAGS $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ CFLAGS="$CFLAGS $cf_add_cflags"
+ ;;
+ esac
+done
+
+ cat > conftest.$ac_ext <<EOF
+#line 1946 "configure"
+#include "confdefs.h"
+
+#ifndef CC_HAS_PROTOS
+#if !defined(__STDC__) || (__STDC__ != 1)
+choke me
+#endif
+#endif
+
+int main() {
+
+ int test (int i, double x);
+ struct s1 {int (*f) (int a);};
+ struct s2 {int (*f) (double a);};
+; return 0; }
+EOF
+if { (eval echo configure:1962: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_ansi_cc="$cf_arg"; break
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+CFLAGS="$cf_save_CFLAGS"
+CPPFLAGS="$cf_save_CPPFLAGS"
+
+fi
+
+echo "$ac_t""$cf_cv_ansi_cc" 1>&6
+
+if test "$cf_cv_ansi_cc" != "no"; then
+if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
+
+for cf_add_cflags in $cf_cv_ansi_cc
+do
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case "$CPPFLAGS" in
+ *$cf_add_cflags)
+ ;;
+ *)
+ CPPFLAGS="$CPPFLAGS $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ CFLAGS="$CFLAGS $cf_add_cflags"
+ ;;
+ esac
+done
+
+else
+ cat >> confdefs.h <<\EOF
+#define CC_HAS_PROTOS 1
+EOF
+
+fi
+fi
+
+fi
+
+
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1462: checking for ANSI C header files" >&5
+echo "configure:2013: 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 1467 "configure"
+#line 2018 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -1471,7 +2022,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1475: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2026: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1488,7 +2039,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 1492 "configure"
+#line 2043 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -1506,7 +2057,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 1510 "configure"
+#line 2061 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -1527,7 +2078,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 1531 "configure"
+#line 2082 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1538,7 +2089,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
-if { (eval echo configure:1542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2093: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -1561,97 +2112,22 @@ EOF
fi
-echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:1566: 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 1571 "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:1620: \"$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
-
echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:1641: checking for inline" >&5
+echo "configure:2117: checking for inline" >&5
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF
-#line 1648 "configure"
+#line 2124 "configure"
#include "confdefs.h"
int main() {
} $ac_kw foo() {
; return 0; }
EOF
-if { (eval echo configure:1655: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2131: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_inline=$ac_kw; break
else
@@ -1677,12 +2153,12 @@ EOF
esac
echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:1681: checking for off_t" >&5
+echo "configure:2157: checking for off_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1686 "configure"
+#line 2162 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -1710,12 +2186,12 @@ EOF
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1714: checking for size_t" >&5
+echo "configure:2190: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1719 "configure"
+#line 2195 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -1745,19 +2221,19 @@ fi
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:1749: checking for working alloca.h" >&5
+echo "configure:2225: checking for working alloca.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1754 "configure"
+#line 2230 "configure"
#include "confdefs.h"
#include <alloca.h>
int main() {
char *p = alloca(2 * sizeof(int));
; return 0; }
EOF
-if { (eval echo configure:1761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_header_alloca_h=yes
else
@@ -1778,12 +2254,12 @@ EOF
fi
echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:1782: checking for alloca" >&5
+echo "configure:2258: checking for alloca" >&5
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1787 "configure"
+#line 2263 "configure"
#include "confdefs.h"
#ifdef __GNUC__
@@ -1811,7 +2287,7 @@ int main() {
char *p = (char *) alloca(1);
; return 0; }
EOF
-if { (eval echo configure:1815: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_alloca_works=yes
else
@@ -1843,12 +2319,12 @@ EOF
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:1847: checking whether alloca needs Cray hooks" >&5
+echo "configure:2323: checking whether alloca needs Cray hooks" >&5
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1852 "configure"
+#line 2328 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
@@ -1873,12 +2349,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
if test $ac_cv_os_cray = yes; then
for ac_func in _getb67 GETB67 getb67; do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1877: checking for $ac_func" >&5
+echo "configure:2353: 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 1882 "configure"
+#line 2358 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -1901,7 +2377,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:1905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -1928,7 +2404,7 @@ done
fi
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:1932: checking stack direction for C alloca" >&5
+echo "configure:2408: checking stack direction for C alloca" >&5
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1936,7 +2412,7 @@ else
ac_cv_c_stack_direction=0
else
cat > conftest.$ac_ext <<EOF
-#line 1940 "configure"
+#line 2416 "configure"
#include "confdefs.h"
find_stack_direction ()
{
@@ -1955,7 +2431,7 @@ main ()
exit (find_stack_direction() < 0);
}
EOF
-if { (eval echo configure:1959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_stack_direction=1
else
@@ -1980,17 +2456,17 @@ for ac_hdr in unistd.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1984: checking for $ac_hdr" >&5
+echo "configure:2460: 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 1989 "configure"
+#line 2465 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1994: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2470: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2019,12 +2495,12 @@ done
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2023: checking for $ac_func" >&5
+echo "configure:2499: 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 2028 "configure"
+#line 2504 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -2047,7 +2523,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:2051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -2072,7 +2548,7 @@ fi
done
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:2076: checking for working mmap" >&5
+echo "configure:2552: checking for working mmap" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2080,7 +2556,7 @@ else
ac_cv_func_mmap_fixed_mapped=no
else
cat > conftest.$ac_ext <<EOF
-#line 2084 "configure"
+#line 2560 "configure"
#include "confdefs.h"
/* Thanks to Mike Haertel and Jim Avera for this test.
@@ -2220,7 +2696,7 @@ main()
}
EOF
-if { (eval echo configure:2224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2700: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
@@ -2242,23 +2718,36 @@ EOF
fi
+
+ case $cf_cv_system_name in
+ os2*) PATHSEP=';' ;;
+ *) PATHSEP=':' ;;
+ esac
+
+
+
+
+cf_makefile=makefile
+
+test -z "$ALL_LINGUAS" && ALL_LINGUAS=`test -d $srcdir/po && cd $srcdir/po && echo *.po|sed -e 's/\.po//g' -e 's/*//'`
+
for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h string.h \
-unistd.h values.h sys/param.h
+unistd.h sys/param.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2252: checking for $ac_hdr" >&5
+echo "configure:2741: 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 2257 "configure"
+#line 2746 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2262: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2751: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2285,15 +2774,15 @@ fi
done
for ac_func in getcwd munmap putenv setenv setlocale strchr strcasecmp \
-__argz_count __argz_stringify __argz_next
+strdup __argz_count __argz_stringify __argz_next
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2292: checking for $ac_func" >&5
+echo "configure:2781: 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 2297 "configure"
+#line 2786 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -2316,7 +2805,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:2320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -2345,12 +2834,12 @@ done
for ac_func in stpcpy
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2349: checking for $ac_func" >&5
+echo "configure:2838: 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 2354 "configure"
+#line 2843 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -2373,7 +2862,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:2377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -2407,19 +2896,19 @@ EOF
if test $ac_cv_header_locale_h = yes; then
echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:2411: checking for LC_MESSAGES" >&5
+echo "configure:2900: checking for LC_MESSAGES" >&5
if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2416 "configure"
+#line 2905 "configure"
#include "confdefs.h"
#include <locale.h>
int main() {
return LC_MESSAGES
; return 0; }
EOF
-if { (eval echo configure:2423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2912: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_val_LC_MESSAGES=yes
else
@@ -2440,7 +2929,7 @@ EOF
fi
fi
echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:2444: checking whether NLS is requested" >&5
+echo "configure:2933: checking whether NLS is requested" >&5
# Check whether --enable-nls or --disable-nls was given.
if test "${enable_nls+set}" = set; then
@@ -2461,14 +2950,14 @@ fi
EOF
echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:2465: checking whether included gettext is requested" >&5
+echo "configure:2954: checking whether included gettext is requested" >&5
# Check whether --with-included-gettext or --without-included-gettext was given.
if test "${with_included_gettext+set}" = set; then
withval="$with_included_gettext"
nls_cv_force_use_gnu_gettext=$withval
else
- nls_cv_force_use_gnu_gettext=yes
+ nls_cv_force_use_gnu_gettext=no
fi
echo "$ac_t""$nls_cv_force_use_gnu_gettext" 1>&6
@@ -2481,17 +2970,17 @@ fi
ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:2485: checking for libintl.h" >&5
+echo "configure:2974: checking for libintl.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2490 "configure"
+#line 2979 "configure"
#include "confdefs.h"
#include <libintl.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2495: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2984: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2508,19 +2997,19 @@ fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
-echo "configure:2512: checking for gettext in libc" >&5
+echo "configure:3001: checking for gettext in libc" >&5
if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2517 "configure"
+#line 3006 "configure"
#include "confdefs.h"
#include <libintl.h>
int main() {
return (int) gettext ("")
; return 0; }
EOF
-if { (eval echo configure:2524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gt_cv_func_gettext_libc=yes
else
@@ -2536,7 +3025,7 @@ echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6
if test "$gt_cv_func_gettext_libc" != "yes"; then
echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:2540: checking for bindtextdomain in -lintl" >&5
+echo "configure:3029: checking for bindtextdomain in -lintl" >&5
ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2544,7 +3033,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lintl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2548 "configure"
+#line 3037 "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
@@ -2555,7 +3044,7 @@ int main() {
bindtextdomain()
; return 0; }
EOF
-if { (eval echo configure:2559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -2570,20 +3059,22 @@ 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 gettext in libintl""... $ac_c" 1>&6
-echo "configure:2575: checking for gettext in libintl" >&5
+ gt_save_LIBS="$LIBS"
+ LIBS="$gt_save_LIBS -lintl"
+ echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
+echo "configure:3066: checking for gettext in libintl" >&5
if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2580 "configure"
+#line 3071 "configure"
#include "confdefs.h"
int main() {
return (int) gettext ("")
; return 0; }
EOF
-if { (eval echo configure:2587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gt_cv_func_gettext_libintl=yes
else
@@ -2596,12 +3087,17 @@ rm -f conftest*
fi
echo "$ac_t""$gt_cv_func_gettext_libintl" 1>&6
+ LIBS="$gt_save_LIBS"
else
echo "$ac_t""no" 1>&6
fi
fi
+ if test "$gt_cv_func_gettext_libintl" = yes; then
+ LIBS="$LIBS -lintl"
+ fi
+
if test "$gt_cv_func_gettext_libc" = "yes" \
|| test "$gt_cv_func_gettext_libintl" = "yes"; then
cat >> confdefs.h <<\EOF
@@ -2609,9 +3105,10 @@ fi
EOF
# Extract the first word of "msgfmt", so it can be a program name with args.
+
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2615: checking for $ac_word" >&5
+echo "configure:3112: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2620,7 +3117,7 @@ else
ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATHSEP}"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
@@ -2645,12 +3142,12 @@ fi
for ac_func in dcgettext
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2649: checking for $ac_func" >&5
+echo "configure:3146: 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 2654 "configure"
+#line 3151 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -2673,7 +3170,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:2677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -2700,7 +3197,7 @@ done
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2704: checking for $ac_word" >&5
+echo "configure:3201: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2734,9 +3231,10 @@ else
fi
# Extract the first word of "xgettext", so it can be a program name with args.
+
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2740: checking for $ac_word" >&5
+echo "configure:3238: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2745,7 +3243,7 @@ else
ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATHSEP}"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
@@ -2768,7 +3266,7 @@ else
fi
cat > conftest.$ac_ext <<EOF
-#line 2772 "configure"
+#line 3270 "configure"
#include "confdefs.h"
int main() {
@@ -2776,7 +3274,7 @@ extern int _nl_msg_cat_cntr;
return _nl_msg_cat_cntr
; return 0; }
EOF
-if { (eval echo configure:2780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
CATOBJEXT=.gmo
DATADIRNAME=share
@@ -2799,7 +3297,7 @@ fi
if test "$CATOBJEXT" = "NONE"; then
echo $ac_n "checking whether catgets can be used""... $ac_c" 1>&6
-echo "configure:2803: checking whether catgets can be used" >&5
+echo "configure:3301: checking whether catgets can be used" >&5
# Check whether --with-catgets or --without-catgets was given.
if test "${with_catgets+set}" = set; then
@@ -2813,7 +3311,7 @@ fi
if test "$nls_cv_use_catgets" = "yes"; then
echo $ac_n "checking for main in -li""... $ac_c" 1>&6
-echo "configure:2817: checking for main in -li" >&5
+echo "configure:3315: checking for main in -li" >&5
ac_lib_var=`echo i'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2821,14 +3319,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-li $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2825 "configure"
+#line 3323 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:2832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3330: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -2856,12 +3354,12 @@ else
fi
echo $ac_n "checking for catgets""... $ac_c" 1>&6
-echo "configure:2860: checking for catgets" >&5
+echo "configure:3358: checking for catgets" >&5
if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2865 "configure"
+#line 3363 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char catgets(); below. */
@@ -2884,7 +3382,7 @@ catgets();
; return 0; }
EOF
-if { (eval echo configure:2888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3386: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_catgets=yes"
else
@@ -2906,7 +3404,7 @@ EOF
# Extract the first word of "gencat", so it can be a program name with args.
set dummy gencat; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2910: checking for $ac_word" >&5
+echo "configure:3408: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GENCAT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2942,7 +3440,7 @@ fi
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2946: checking for $ac_word" >&5
+echo "configure:3444: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2977,9 +3475,10 @@ fi
if test "$GMSGFMT" = "no"; then
# Extract the first word of "msgfmt", so it can be a program name with args.
+
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2983: checking for $ac_word" >&5
+echo "configure:3482: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2988,7 +3487,7 @@ else
ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATHSEP}"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
@@ -3012,9 +3511,10 @@ fi
fi
# Extract the first word of "xgettext", so it can be a program name with args.
+
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3018: checking for $ac_word" >&5
+echo "configure:3518: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3023,7 +3523,7 @@ else
ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATHSEP}"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
@@ -3070,9 +3570,10 @@ fi
if test "$nls_cv_use_gnu_gettext" = "yes"; then
INTLOBJS="\$(GETTOBJS)"
# Extract the first word of "msgfmt", so it can be a program name with args.
+
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3076: checking for $ac_word" >&5
+echo "configure:3577: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3081,7 +3582,7 @@ else
ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATHSEP}"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
@@ -3106,7 +3607,7 @@ fi
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3110: checking for $ac_word" >&5
+echo "configure:3611: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3140,9 +3641,10 @@ else
fi
# Extract the first word of "xgettext", so it can be a program name with args.
+
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3146: checking for $ac_word" >&5
+echo "configure:3648: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3151,7 +3653,7 @@ else
ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATHSEP}"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
@@ -3189,7 +3691,7 @@ fi
if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
: ;
else
- echo "$ac_t""found xgettext programs is not GNU xgettext; ignore it" 1>&6
+ echo "$ac_t""found xgettext program is not GNU xgettext; ignore it" 1>&6
XGETTEXT=":"
fi
fi
@@ -3209,6 +3711,16 @@ fi
USE_INCLUDED_LIBINTL=yes
fi
+ # If we really do not use included intl, suppress the command that
+ # would attempt to symlink the two copies of its header.
+ if test "$USE_INCLUDED_LIBINTL" != yes; then
+ nls_cv_header_libgt=
+ nls_cv_header_intl=
+ fi
+
+
+
+
for lang in $ALL_LINGUAS; do
GMOFILES="$GMOFILES $lang.gmo"
POFILES="$POFILES $lang.po"
@@ -3232,7 +3744,7 @@ fi
LINGUAS=
else
echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:3236: checking for catalogs to be installed" >&5
+echo "configure:3748: checking for catalogs to be installed" >&5
NEW_LINGUAS=
for lang in ${LINGUAS=$ALL_LINGUAS}; do
case "$ALL_LINGUAS" in
@@ -3261,17 +3773,17 @@ echo "configure:3236: checking for catalogs to be installed" >&5
if test "$CATOBJEXT" = ".cat"; then
ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
-echo "configure:3265: checking for linux/version.h" >&5
+echo "configure:3777: checking for linux/version.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 3270 "configure"
+#line 3782 "configure"
#include "confdefs.h"
#include <linux/version.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3275: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3787: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -3344,46 +3856,15 @@ fi
fi
-
-# Check whether --with-nls-datadir or --without-nls-datadir was given.
-if test "${with_nls_datadir+set}" = set; then
- withval="$with_nls_datadir"
- :
-else
- withval="${NLS_DATADIR-$prefix/$DATADIRNAME}"
-fi
-
-case ".$withval" in #(vi
-./*) #(vi
- ;;
-.\${*prefix}*) #(vi
- eval withval="$withval"
- case ".$withval" in #(vi
- .NONE/*)
- withval=`echo $withval | sed -e s@NONE@$ac_default_prefix@`
- ;;
- esac
- ;; #(vi
-.NONE/*)
- withval=`echo $withval | sed -e s@NONE@$ac_default_prefix@`
- ;;
-*)
- { echo "configure: error: expected a pathname" 1>&2; exit 1; }
- ;;
-esac
-
-eval NLS_DATADIR="$withval"
-
-
-INTLDIR_CPPFLAGS="#"
INTLDIR_MAKE=
MSG_DIR_MAKE=
SUB_MAKEFILE=
use_our_messages=no
+if test "$USE_NLS" = yes ; then
if test -d $srcdir/po ; then
echo $ac_n "checking if we should use included message-library""... $ac_c" 1>&6
-echo "configure:3387: checking if we should use included message-library" >&5
+echo "configure:3868: checking if we should use included message-library" >&5
# Check whether --enable-included-msgs or --disable-included-msgs was given.
if test "${enable_included_msgs+set}" = set; then
@@ -3395,13 +3876,15 @@ fi
fi
echo "$ac_t""$use_our_messages" 1>&6
+fi
test $use_our_messages = yes && USE_OUR_MESSAGES=
if test "$USE_INCLUDED_LIBINTL" = yes ; then
if test "$nls_cv_force_use_gnu_gettext" = yes ; then
- echo "configure: warning: Using included gettext anyway, since none was found" 1>&2
- SUB_MAKEFILE="intl/makefile"
+ SUB_MAKEFILE="intl/$cf_makefile"
+ elif test "$nls_cv_use_gnu_gettext" = yes ; then
+ SUB_MAKEFILE="intl/$cf_makefile"
else
INTLDIR_MAKE="#"
fi
@@ -3410,7 +3893,7 @@ if test "$USE_INCLUDED_LIBINTL" = yes ; then
SUB_MAKEFILE=
fi
if test "$use_our_messages" = yes ; then
- SUB_MAKEFILE="$SUB_MAKEFILE po/makefile.in:po/makefile.inn"
+ SUB_MAKEFILE="$SUB_MAKEFILE po/$cf_makefile.in:po/$cf_makefile.inn"
else
MSG_DIR_MAKE="#"
fi
@@ -3419,17 +3902,17 @@ elif test "$USE_NLS" = yes ; then
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3423: checking for $ac_hdr" >&5
+echo "configure:3906: 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 3428 "configure"
+#line 3911 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3433: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3916: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -3456,7 +3939,7 @@ fi
done
INTLDIR_MAKE="#"
- SUB_MAKEFILE="po/makefile.in:po/makefile.inn"
+ SUB_MAKEFILE="po/$cf_makefile.in:po/$cf_makefile.inn"
else
INTLDIR_MAKE="#"
MSG_DIR_MAKE="#"
@@ -3470,14 +3953,13 @@ if test -z "$MSG_DIR_MAKE" ; then
fi
if test -z "$INTLDIR_MAKE" ; then
- INTLDIR_CPPFLAGS=
+ CPPFLAGS="$CPPFLAGS -I../intl"
fi
-
if test "$USE_INCLUDED_LIBINTL" = yes ; then
if test "$nls_cv_force_use_gnu_gettext" = yes ; then
cat >> confdefs.h <<\EOF
@@ -3498,8 +3980,49 @@ EOF
fi
fi
+
+INTLDIR_CPPFLAGS="#"
+if test -z "$INTLDIR_MAKE" ; then
+ INTLDIR_CPPFLAGS=
+fi
+
+
+
+
+# Check whether --with-nls-datadir or --without-nls-datadir was given.
+if test "${with_nls_datadir+set}" = set; then
+ withval="$with_nls_datadir"
+ :
+else
+ withval="${NLS_DATADIR-$prefix/$DATADIRNAME}"
+fi
+
+case ".$withval" in #(vi
+./*) #(vi
+ ;;
+.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX
+ ;;
+.\${*prefix}*) #(vi
+ eval withval="$withval"
+ case ".$withval" in #(vi
+ .NONE/*)
+ withval=`echo $withval | sed -e s@NONE@$ac_default_prefix@`
+ ;;
+ esac
+ ;; #(vi
+.NONE/*)
+ withval=`echo $withval | sed -e s@NONE@$ac_default_prefix@`
+ ;;
+*)
+ { echo "configure: error: expected a pathname" 1>&2; exit 1; }
+ ;;
+esac
+
+eval NLS_DATADIR="$withval"
+
+
echo $ac_n "checking if you want full utility pathnames""... $ac_c" 1>&6
-echo "configure:3503: checking if you want full utility pathnames" >&5
+echo "configure:4026: 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
@@ -3524,7 +4047,7 @@ EOF
echo $ac_n "checking for system mailer""... $ac_c" 1>&6
-echo "configure:3528: checking for system mailer" >&5
+echo "configure:4051: 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
@@ -3551,7 +4074,7 @@ EOF
echo $ac_n "checking system mail flags""... $ac_c" 1>&6
-echo "configure:3555: checking system mail flags" >&5
+echo "configure:4078: 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
@@ -3579,7 +4102,7 @@ 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:3583: checking for $ac_word" >&5
+echo "configure:4106: 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
@@ -3614,7 +4137,7 @@ fi
else
echo $ac_n "checking for chmod""... $ac_c" 1>&6
-echo "configure:3618: checking for chmod" >&5
+echo "configure:4141: checking for chmod" >&5
echo "$ac_t""$CHMOD" 1>&6
eval 'ac_cv_path_'CHMOD'="'chmod'"'
fi
@@ -3656,7 +4179,7 @@ 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:3660: checking for $ac_word" >&5
+echo "configure:4183: 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
@@ -3691,7 +4214,7 @@ fi
else
echo $ac_n "checking for compress""... $ac_c" 1>&6
-echo "configure:3695: checking for compress" >&5
+echo "configure:4218: checking for compress" >&5
echo "$ac_t""$COMPRESS" 1>&6
eval 'ac_cv_path_'COMPRESS'="'compress'"'
fi
@@ -3733,7 +4256,7 @@ 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:3737: checking for $ac_word" >&5
+echo "configure:4260: 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
@@ -3768,7 +4291,7 @@ fi
else
echo $ac_n "checking for cp""... $ac_c" 1>&6
-echo "configure:3772: checking for cp" >&5
+echo "configure:4295: checking for cp" >&5
echo "$ac_t""$COPY" 1>&6
eval 'ac_cv_path_'COPY'="'cp'"'
fi
@@ -3810,7 +4333,7 @@ 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:3814: checking for $ac_word" >&5
+echo "configure:4337: 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
@@ -3845,7 +4368,7 @@ fi
else
echo $ac_n "checking for gzip""... $ac_c" 1>&6
-echo "configure:3849: checking for gzip" >&5
+echo "configure:4372: checking for gzip" >&5
echo "$ac_t""$GZIP" 1>&6
eval 'ac_cv_path_'GZIP'="'gzip'"'
fi
@@ -3887,7 +4410,7 @@ 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:3891: checking for $ac_word" >&5
+echo "configure:4414: 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
@@ -3922,7 +4445,7 @@ fi
else
echo $ac_n "checking for mkdir""... $ac_c" 1>&6
-echo "configure:3926: checking for mkdir" >&5
+echo "configure:4449: checking for mkdir" >&5
echo "$ac_t""$MKDIR" 1>&6
eval 'ac_cv_path_'MKDIR'="'mkdir'"'
fi
@@ -3964,7 +4487,7 @@ 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:3968: checking for $ac_word" >&5
+echo "configure:4491: 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
@@ -3999,7 +4522,7 @@ fi
else
echo $ac_n "checking for mv""... $ac_c" 1>&6
-echo "configure:4003: checking for mv" >&5
+echo "configure:4526: checking for mv" >&5
echo "$ac_t""$MV" 1>&6
eval 'ac_cv_path_'MV'="'mv'"'
fi
@@ -4041,7 +4564,7 @@ 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:4045: checking for $ac_word" >&5
+echo "configure:4568: 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
@@ -4076,7 +4599,7 @@ fi
else
echo $ac_n "checking for rm""... $ac_c" 1>&6
-echo "configure:4080: checking for rm" >&5
+echo "configure:4603: checking for rm" >&5
echo "$ac_t""$RM" 1>&6
eval 'ac_cv_path_'RM'="'rm'"'
fi
@@ -4118,7 +4641,7 @@ 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:4122: checking for $ac_word" >&5
+echo "configure:4645: 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
@@ -4153,7 +4676,7 @@ fi
else
echo $ac_n "checking for tar""... $ac_c" 1>&6
-echo "configure:4157: checking for tar" >&5
+echo "configure:4680: checking for tar" >&5
echo "$ac_t""$TAR" 1>&6
eval 'ac_cv_path_'TAR'="'tar'"'
fi
@@ -4195,7 +4718,7 @@ 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:4199: checking for $ac_word" >&5
+echo "configure:4722: 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
@@ -4230,7 +4753,7 @@ fi
else
echo $ac_n "checking for touch""... $ac_c" 1>&6
-echo "configure:4234: checking for touch" >&5
+echo "configure:4757: checking for touch" >&5
echo "$ac_t""$TOUCH" 1>&6
eval 'ac_cv_path_'TOUCH'="'touch'"'
fi
@@ -4272,7 +4795,7 @@ 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:4276: checking for $ac_word" >&5
+echo "configure:4799: 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
@@ -4307,7 +4830,7 @@ fi
else
echo $ac_n "checking for gunzip""... $ac_c" 1>&6
-echo "configure:4311: checking for gunzip" >&5
+echo "configure:4834: checking for gunzip" >&5
echo "$ac_t""$UNCOMPRESS" 1>&6
eval 'ac_cv_path_'UNCOMPRESS'="'gunzip'"'
fi
@@ -4349,7 +4872,7 @@ 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:4353: checking for $ac_word" >&5
+echo "configure:4876: 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
@@ -4384,7 +4907,7 @@ fi
else
echo $ac_n "checking for unzip""... $ac_c" 1>&6
-echo "configure:4388: checking for unzip" >&5
+echo "configure:4911: checking for unzip" >&5
echo "$ac_t""$UNZIP" 1>&6
eval 'ac_cv_path_'UNZIP'="'unzip'"'
fi
@@ -4426,7 +4949,7 @@ if test "$with_full_paths" = yes ; then
# Extract the first word of "bzip2", so it can be a program name with args.
set dummy bzip2; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4430: checking for $ac_word" >&5
+echo "configure:4953: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_BZIP2'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4461,7 +4984,7 @@ fi
else
echo $ac_n "checking for bzip2""... $ac_c" 1>&6
-echo "configure:4465: checking for bzip2" >&5
+echo "configure:4988: checking for bzip2" >&5
echo "$ac_t""$BZIP2" 1>&6
eval 'ac_cv_path_'BZIP2'="'bzip2'"'
fi
@@ -4503,7 +5026,7 @@ 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:4507: checking for $ac_word" >&5
+echo "configure:5030: 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
@@ -4538,7 +5061,7 @@ fi
else
echo $ac_n "checking for uudecode""... $ac_c" 1>&6
-echo "configure:4542: checking for uudecode" >&5
+echo "configure:5065: checking for uudecode" >&5
echo "$ac_t""$UUDECODE" 1>&6
eval 'ac_cv_path_'UUDECODE'="'uudecode'"'
fi
@@ -4580,7 +5103,7 @@ 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:4584: checking for $ac_word" >&5
+echo "configure:5107: 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
@@ -4615,7 +5138,7 @@ fi
else
echo $ac_n "checking for zcat""... $ac_c" 1>&6
-echo "configure:4619: checking for zcat" >&5
+echo "configure:5142: checking for zcat" >&5
echo "$ac_t""$ZCAT" 1>&6
eval 'ac_cv_path_'ZCAT'="'zcat'"'
fi
@@ -4657,7 +5180,7 @@ 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:4661: checking for $ac_word" >&5
+echo "configure:5184: 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
@@ -4692,7 +5215,7 @@ fi
else
echo $ac_n "checking for zip""... $ac_c" 1>&6
-echo "configure:4696: checking for zip" >&5
+echo "configure:5219: checking for zip" >&5
echo "$ac_t""$ZIP" 1>&6
eval 'ac_cv_path_'ZIP'="'zip'"'
fi
@@ -4734,7 +5257,7 @@ if test "$with_full_paths" = yes ; then
# Extract the first word of "telnet", so it can be a program name with args.
set dummy telnet; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4738: checking for $ac_word" >&5
+echo "configure:5261: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_TELNET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4769,7 +5292,7 @@ fi
else
echo $ac_n "checking for telnet""... $ac_c" 1>&6
-echo "configure:4773: checking for telnet" >&5
+echo "configure:5296: checking for telnet" >&5
echo "$ac_t""$TELNET" 1>&6
eval 'ac_cv_path_'TELNET'="'telnet'"'
fi
@@ -4811,7 +5334,7 @@ if test "$with_full_paths" = yes ; then
# Extract the first word of "tn3270", so it can be a program name with args.
set dummy tn3270; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4815: checking for $ac_word" >&5
+echo "configure:5338: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_TN3270'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4846,7 +5369,7 @@ fi
else
echo $ac_n "checking for tn3270""... $ac_c" 1>&6
-echo "configure:4850: checking for tn3270" >&5
+echo "configure:5373: checking for tn3270" >&5
echo "$ac_t""$TN3270" 1>&6
eval 'ac_cv_path_'TN3270'="'tn3270'"'
fi
@@ -4888,7 +5411,7 @@ if test "$with_full_paths" = yes ; then
# Extract the first word of "rlogin", so it can be a program name with args.
set dummy rlogin; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4892: checking for $ac_word" >&5
+echo "configure:5415: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_RLOGIN'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4923,7 +5446,7 @@ fi
else
echo $ac_n "checking for rlogin""... $ac_c" 1>&6
-echo "configure:4927: checking for rlogin" >&5
+echo "configure:5450: checking for rlogin" >&5
echo "$ac_t""$RLOGIN" 1>&6
eval 'ac_cv_path_'RLOGIN'="'rlogin'"'
fi
@@ -4968,452 +5491,180 @@ EOF
;;
*) # (vi
- cat >> confdefs.h <<EOF
-#define INSTALL_PATH "$INSTALL"
-EOF
-
- ;;
-esac
-
-
-cat >> confdefs.h <<\EOF
-#define UNIX 1
-EOF
-
-
-if test -z "$GCC" ; then
+ cf_save_INSTALL="$INSTALL"
-echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6
-echo "configure:4988: checking for ${CC-cc} option to accept ANSI C" >&5
-if eval "test \"`echo '$''{'cf_cv_ansi_cc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
-
-cf_cv_ansi_cc=no
-cf_save_CFLAGS="$CFLAGS"
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX -Aa -D_HPUX_SOURCE
-# SVR4 -Xc
-# UnixWare 1.2 (cannot use -Xc, since ANSI/POSIX clashes)
-for cf_arg in "-DCC_HAS_PROTOS" \
- "" \
- -qlanglvl=ansi \
- -std1 \
- "-Aa -D_HPUX_SOURCE +e" \
- "-Aa -D_HPUX_SOURCE" \
- -Xc
-do
- CFLAGS="$cf_save_CFLAGS $cf_arg"
- cat > conftest.$ac_ext <<EOF
-#line 5012 "configure"
-#include "confdefs.h"
-
-#ifndef CC_HAS_PROTOS
-#if !defined(__STDC__) || (__STDC__ != 1)
-choke me
-#endif
-#endif
-
-int main() {
-
- int test (int i, double x);
- struct s1 {int (*f) (int a);};
- struct s2 {int (*f) (double a);};
-; return 0; }
-EOF
-if { (eval echo configure:5028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- cf_cv_ansi_cc="$cf_arg"; break
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -f conftest*
-done
-CFLAGS="$cf_save_CFLAGS"
-
-fi
-
-echo "$ac_t""$cf_cv_ansi_cc" 1>&6
-
-if test "$cf_cv_ansi_cc" != "no"; then
-if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
- CFLAGS="$CFLAGS $cf_cv_ansi_cc"
-else
- cat >> confdefs.h <<\EOF
-#define CC_HAS_PROTOS 1
-EOF
-
-fi
-fi
-
-fi
-echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:5056: 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 5061 "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:5110: \"$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
-
-
-PROG_EXT=
-TRY_CFLAGS=
-case $host_os in
-aix4*)
- CFLAGS="$CFLAGS -DAIX4 -D_BSD=44 -D_AIX"
- LIBS="$LIBS -lbsd"
- ;;
-aix*)
- LIBS="$LIBS -lbsd"
- ;;
-apollo*)
- TRY_CFLAGS="$TRY_CFLAGS -D_BUILTINS -W0,-opt,4"
- ;;
-bsdi*)
- CFLAGS="$CFLAGS -DBSDI"
- ;;
-clix*)
- # Tested on CLIX 3.1 (T.Dickey). The original makefile entry
- # contributed by Alex Matulich (matuli_a@marlin.navsea.navy.mil) also
- # references -lmalloc and -lbsd.
- echo $ac_n "checking for strcmp in -lc_s""... $ac_c" 1>&6
-echo "configure:5152: checking for strcmp in -lc_s" >&5
-ac_lib_var=`echo c_s'_'strcmp | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lc_s $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 5160 "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 strcmp();
-
-int main() {
-strcmp()
-; return 0; }
-EOF
-if { (eval echo configure:5171: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_lib=HAVE_LIB`echo c_s | sed -e 's/[^a-zA-Z0-9_]/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
-
- LIBS="-lc_s $LIBS"
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
- ;;
-convex*)
- CFLAGS="$CFLAGS -D__STDC__ -Dunix"
- ;;
-dgux*)
- CFLAGS="$CFLAGS -DDGUX"
- ;;
-hpux*)
- CFLAGS="$CFLAGS -DSNAKE"
- test -z "$GCC" && TRY_CFLAGS="$TRY_CFLAGS -Wp,-H600000"
- ;;
-isc*)
- # -DPOSIX_JC is necessary, else LYBookmark.c never finds out what a mode_t is.
- CFLAGS="$CFLAGS -DISC -DPOSIX_JC"
- LIBS="$LIBS -linet -lnsl_s -lcposix"
- ;;
-irix*)
- # The original makefile used the $CFLAGS option -cckr for some form
- # of K&R compatibility. However, this causes compilation warnings for
- # varargs on IRIX 5.2, and does not appear to be needed.
- #removed: CFLAGS="$CFLAGS -cckr"
- ;;
-linux*)
- CFLAGS="$CFLAGS -DLINUX"
- ;;
-next*)
- CFLAGS="$CFLAGS -DNEXT -DXMOSAIC_HACK"
- ;;
-openbsd*)
- LIBS="$LIBS -lcompat -ltermlib -lssl -lcrypto"
- ;;
-os2*)
- # We make sure -Zexe is not used -- it would interfere with @PROG_EXT@
- CFLAGS="$CFLAGS -Zmt -D__ST_MT_ERRNO__"
- LDFLAGS=`echo "$LDFLAGS -Zmt -Zcrtdll" | sed "s/-Zexe//g"`
- PROG_EXT=".exe"
- ;;
-osf4*)
- # The -Olimit flag (see below) is no longer available with
- # Digital C 5.2, which is bundled with Digital UNIX 4.0.
- CFLAGS="$CFLAGS -DDSYS5"
- ;;
-osf*)
- # Increase the maximum size of functions that will be optimized.
- test -z "$GCC" && TRY_CFLAGS="$TRY_CFLAGS -O -Olimit 4000"
- CFLAGS="$CFLAGS -DDSYS5"
- ;;
-sco3.2v5*)
- test $ac_cv_prog_gcc != yes && TRY_CFLAGS="$TRY_CFLAGS -belf"
- ;;
-sco*)
- LIBS="$LIBS -lmalloc"
- # It's a little late to do much, but try to warn user if he's using
- # SCO's cc (which is reported to have broken const/volatile).
- case "$CC" in #(vi
- cc|*/cc)
- echo "configure: warning: You should consider using gcc or rcc if available" 1>&2
- unset ac_cv_prog_CC
- for ac_prog in gcc rcc
-do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+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:5261: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+echo "configure:5502: 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
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
+ case "$INSTALL" in
+ /*)
+ ac_cv_path_INSTALL="$INSTALL" # Let the user override the test with a path.
+ ;;
+ ?:/*)
+ ac_cv_path_INSTALL="$INSTALL" # Let the user override the test with a dos path.
+ ;;
+ *)
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
+ for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="$ac_prog"
+ 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
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+INSTALL="$ac_cv_path_INSTALL"
+if test -n "$INSTALL"; then
+ echo "$ac_t""$INSTALL" 1>&6
else
echo "$ac_t""no" 1>&6
fi
-test -n "$CC" && break
-done
-test -n "$CC" || CC="$CC"
-
- ;;
- esac
- ;;
-sequent-ptx)
- CFLAGS="$CFLAGS -DSVR4_BSDSELECT -DNO_IOCTL -DUSE_FCNTL"
+else
+ echo $ac_n "checking for install""... $ac_c" 1>&6
+echo "configure:5537: checking for install" >&5
+ echo "$ac_t""$INSTALL" 1>&6
+ eval 'ac_cv_path_'INSTALL'="'install'"'
+fi
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= }"; cf_save_ifs="$IFS"
+case $host_os in #(vi
+os2*) #(vi
+ IFS="${IFS};"
;;
-sequent-ptx2)
- CFLAGS="$CFLAGS -DSVR4_BSDSELECT"
+*)
+ IFS="${IFS}:"
;;
-sony-newsos*)
- CFLAGS="$CFLAGS -I/usr/sony/include"
- for ac_hdr in jcurses.h
+esac
+for cf_temp in $ac_cv_path_INSTALL
do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5306: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ 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
+
+
+ INSTALL="$cf_save_INSTALL"
+ ;;
+esac
+
+
+echo $ac_n "checking if we must define _GNU_SOURCE""... $ac_c" 1>&6
+echo "configure:5579: checking if we must define _GNU_SOURCE" >&5
+if eval "test \"`echo '$''{'cf_cv_gnu_source'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- cat > conftest.$ac_ext <<EOF
-#line 5311 "configure"
+
+cat > conftest.$ac_ext <<EOF
+#line 5585 "configure"
#include "confdefs.h"
-#include <$ac_hdr>
+#include <sys/types.h>
+int main() {
+
+#ifndef _XOPEN_SOURCE
+make an error
+#endif
+; return 0; }
EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5316: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
+if { (eval echo configure:5595: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
+ cf_cv_gnu_source=no
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
-
- ;;
-svr4)
- CFLAGS="$CFLAGS -DSVR4_BSDSELECT -DSVR4"
- ;;
-sunos3*)
- CFLAGS="$CFLAGS -DSUN"
- ;;
-sunos4*)
- CFLAGS="$CFLAGS -DSUN -DSUN4"
- ;;
-ultrix*)
- # Increase the maximum size of functions that will be optimized.
- test -z "$GCC" && TRY_CFLAGS="$TRY_CFLAGS -O -Olimit 600 -G 7"
- CFLAGS="$CFLAGS -DULTRIX"
- for ac_hdr in cursesX.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5360: 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 5365 "configure"
+ cf_save="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+ cat > conftest.$ac_ext <<EOF
+#line 5605 "configure"
#include "confdefs.h"
-#include <$ac_hdr>
+#include <sys/types.h>
+int main() {
+
+#ifdef _XOPEN_SOURCE
+make an error
+#endif
+; return 0; }
EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5370: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
+if { (eval echo configure:5615: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
+ cf_cv_gnu_source=no
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"
+ cf_cv_gnu_source=yes
fi
rm -f conftest*
+ CPPFLAGS="$cf_save"
+
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
- cat >> confdefs.h <<\EOF
-#define HAVE_CURSESX_H 1
-EOF
+rm -f conftest*
- cf_cv_ncurses_header=cursesX.h
-else
- echo "$ac_t""no" 1>&6
fi
-done
- ;;
-esac
+echo "$ac_t""$cf_cv_gnu_source" 1>&6
+test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
if test -n "$TRY_CFLAGS" ; then
cf_save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $TRY_CFLAGS"
+ cf_save_CPPFLAGS="$CPPFLAGS"
+
+for cf_add_cflags in $TRY_CFLAGS
+do
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case "$CPPFLAGS" in
+ *$cf_add_cflags)
+ ;;
+ *)
+ CPPFLAGS="$CPPFLAGS $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ CFLAGS="$CFLAGS $cf_add_cflags"
+ ;;
+ esac
+done
+
echo $ac_n "checking if we should use compile options $TRY_CFLAGS""... $ac_c" 1>&6
-echo "configure:5408: checking if we should use compile options $TRY_CFLAGS" >&5
+echo "configure:5659: checking if we should use compile options $TRY_CFLAGS" >&5
cat > conftest.$ac_ext <<EOF
-#line 5410 "configure"
+#line 5661 "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
FILE *fp = stdin
; return 0; }
EOF
-if { (eval echo configure:5417: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5668: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_result=yes
else
@@ -5424,14 +5675,37 @@ else
fi
rm -f conftest*
echo "$ac_t""$cf_result" 1>&6
- test "$cf_result" = no && CFLAGS="$cf_save_CFLAGS"
+ if test "$cf_result" = no ; then
+ CFLAGS="$cf_save_CFLAGS"
+ CPPFLAGS="$cf_save_CPPFLAGS"
+ fi
fi
### Look for network libraries first, since some functions (such as gethostname)
### are used in a lot of places.
+echo $ac_n "checking if you want ssl library""... $ac_c" 1>&6
+echo "configure:5689: checking if you want ssl library" >&5
+if eval "test \"`echo '$''{'cf_cv_use_libssl'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+
+# Check whether --with-ssl or --without-ssl was given.
+if test "${with_ssl+set}" = set; then
+ withval="$with_ssl"
+ cf_cv_use_libssl=$withval
+else
+ cf_cv_use_libssl=no
+fi
+
+
+fi
+
+echo "$ac_t""$cf_cv_use_libssl" 1>&6
+
echo $ac_n "checking if you want socks library""... $ac_c" 1>&6
-echo "configure:5435: checking if you want socks library" >&5
+echo "configure:5709: checking if you want socks library" >&5
if eval "test \"`echo '$''{'cf_cv_use_libsocks'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5451,7 +5725,7 @@ fi
echo "$ac_t""$cf_cv_use_libsocks" 1>&6
echo $ac_n "checking if you want socks5 library""... $ac_c" 1>&6
-echo "configure:5455: checking if you want socks5 library" >&5
+echo "configure:5729: checking if you want socks5 library" >&5
if eval "test \"`echo '$''{'cf_cv_use_libsocks5'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5476,7 +5750,17 @@ case "$cf_cv_use_libsocks" in #(vi
no|yes) #(vi
;;
*)
- LIBS="$LIBS -L$cf_cv_use_libsocks"
+ if test -d $cf_cv_use_libsocks ; then
+ if test -d $cf_cv_use_libsocks/include ; then
+ CPPFLAGS="$CPPFLAGS -I$cf_cv_use_libsocks/include"
+ LIBS="$LIBS -L$cf_cv_use_libsocks/lib"
+ else
+ LIBS="$LIBS -L$cf_cv_use_libsocks"
+ test -d $cf_cv_use_libsocks/../include && CPPFLAGS="$CPPFLAGS -I$cf_cv_use_libsocks/../include"
+ fi
+ else
+ echo "configure: warning: expected a directory: $cf_cv_use_libsocks" 1>&2
+ fi
;;
esac
LIBS="$LIBS -lsocks"
@@ -5517,7 +5801,7 @@ cat >> confdefs.h <<\EOF
EOF
cat > conftest.$ac_ext <<EOF
-#line 5521 "configure"
+#line 5805 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -5526,7 +5810,7 @@ int main() {
accept((char *)0)
; return 0; }
EOF
-if { (eval echo configure:5530: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
:
else
echo "configure: failed program was:" >&5
@@ -5542,8 +5826,17 @@ case "$cf_cv_use_libsocks5" in #(vi
no|yes) #(vi
;;
*)
- LIBS="$LIBS -L$cf_cv_use_libsocks5"
- CFLAGS="$CFLAGS -I$cf_cv_use_libsocks5/../include"
+ if test -d $cf_cv_use_libsocks5 ; then
+ if test -d $cf_cv_use_libsocks5/include ; then
+ CPPFLAGS="$CPPFLAGS -I$cf_cv_use_libsocks5/include"
+ LIBS="$LIBS -L$cf_cv_use_libsocks5/lib"
+ else
+ LIBS="$LIBS -L$cf_cv_use_libsocks5"
+ test -d $cf_cv_use_libsocks5/../include && CPPFLAGS="$CPPFLAGS -I$cf_cv_use_libsocks5/../include"
+ fi
+ else
+ echo "configure: warning: expected a directory: $cf_cv_use_libsocks5" 1>&2
+ fi
;;
esac
LIBS="$LIBS -lsocks5"
@@ -5556,9 +5849,10 @@ cat >> confdefs.h <<\EOF
EOF
echo $ac_n "checking if the socks library uses socks4 prefix""... $ac_c" 1>&6
-echo "configure:5560: checking if the socks library uses socks4 prefix" >&5
+echo "configure:5853: checking if the socks library uses socks4 prefix" >&5
+cf_use_socks4=error
cat > conftest.$ac_ext <<EOF
-#line 5562 "configure"
+#line 5856 "configure"
#include "confdefs.h"
#include <socks.h>
@@ -5567,7 +5861,7 @@ int main() {
Rinit((char *)0)
; return 0; }
EOF
-if { (eval echo configure:5571: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define USE_SOCKS4_PREFIX 1
@@ -5579,14 +5873,14 @@ else
cat conftest.$ac_ext >&5
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 5583 "configure"
+#line 5877 "configure"
#include "confdefs.h"
#include <socks.h>
int main() {
SOCKSinit((char *)0)
; return 0; }
EOF
-if { (eval echo configure:5590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_use_socks4=no
else
@@ -5650,12 +5944,40 @@ EOF
EOF
fi
+echo $ac_n "checking if socks5p.h is available""... $ac_c" 1>&6
+echo "configure:5949: checking if socks5p.h is available" >&5
+cat > conftest.$ac_ext <<EOF
+#line 5951 "configure"
+#include "confdefs.h"
+
+#define INCLUDE_PROTOTYPES
+#include <socks.h>
+int main() {
+
+ init((char *)0)
+; return 0; }
+EOF
+if { (eval echo configure:5961: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_use_socks5p_h=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_use_socks5p_h=no
+fi
+rm -f conftest*
+echo "$ac_t""$cf_use_socks5p_h" 1>&6
+test "$cf_use_socks5p_h" = yes && cat >> confdefs.h <<\EOF
+#define INCLUDE_PROTOTYPES 1
+EOF
+
else
cf_test_netlibs=no
echo $ac_n "checking for network libraries""... $ac_c" 1>&6
-echo "configure:5659: checking for network libraries" >&5
+echo "configure:5981: checking for network libraries" >&5
if eval "test \"`echo '$''{'cf_cv_netlibs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5666,12 +5988,12 @@ cf_test_netlibs=yes
for ac_func in gethostname
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5670: checking for $ac_func" >&5
+echo "configure:5992: 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 5675 "configure"
+#line 5997 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5694,7 +6016,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6020: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5717,7 +6039,7 @@ else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for gethostname in -lnsl""... $ac_c" 1>&6
-echo "configure:5721: checking for gethostname in -lnsl" >&5
+echo "configure:6043: 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
@@ -5725,7 +6047,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lnsl $cf_cv_netlibs $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5729 "configure"
+#line 6051 "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
@@ -5736,7 +6058,7 @@ int main() {
gethostname()
; return 0; }
EOF
-if { (eval echo configure:5740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5753,14 +6075,14 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
-cf_tr_func=`echo gethostname | tr 'a-z' 'A-Z'`
+cf_tr_func=`echo "gethostname" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define HAVE_$cf_tr_func 1
EOF
ac_cv_func_gethostname=yes
- cf_cv_netlibs="-lnsl $cf_cv_netlibs"
+ if test "$cf_used_lib_nsl" != yes ; then cf_used_lib_nsl=yes; cf_cv_netlibs="-lnsl $cf_cv_netlibs"; fi
else
echo "$ac_t""no" 1>&6
@@ -5769,7 +6091,7 @@ else
echo $ac_n "checking for gethostname in -lsocket""... $ac_c" 1>&6
-echo "configure:5773: checking for gethostname in -lsocket" >&5
+echo "configure:6095: 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
@@ -5777,7 +6099,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsocket $cf_cv_netlibs $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5781 "configure"
+#line 6103 "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
@@ -5788,7 +6110,7 @@ int main() {
gethostname()
; return 0; }
EOF
-if { (eval echo configure:5792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5805,14 +6127,14 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
-cf_tr_func=`echo gethostname | tr 'a-z' 'A-Z'`
+cf_tr_func=`echo "gethostname" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define HAVE_$cf_tr_func 1
EOF
ac_cv_func_gethostname=yes
- cf_cv_netlibs="-lsocket $cf_cv_netlibs"
+ if test "$cf_used_lib_socket" != yes ; then cf_used_lib_socket=yes; cf_cv_netlibs="-lsocket $cf_cv_netlibs"; fi
else
echo "$ac_t""no" 1>&6
@@ -5831,37 +6153,41 @@ done
#
# FIXME: sequent needs this library (i.e., -lsocket -linet -lnsl), but
# I don't know the entrypoints - 97/7/22 TD
-echo $ac_n "checking for -linet""... $ac_c" 1>&6
-echo "configure:5836: checking for -linet" >&5
-if eval "test \"`echo '$''{'ac_cv_lib_inet'+set}'`\" = set"; then
+# AC_HAVE_LIBRARY(inet,cf_cv_netlibs="-linet $cf_cv_netlibs")
+echo $ac_n "checking for main in -linet""... $ac_c" 1>&6
+echo "configure:6159: checking for main in -linet" >&5
+ac_lib_var=`echo inet'_'main | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="-linet $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5843 "configure"
+#line 6167 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:5850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
- ac_cv_lib_inet=yes
+ eval "ac_cv_lib_$ac_lib_var=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- ac_cv_lib_inet=no
+ eval "ac_cv_lib_$ac_lib_var=no"
fi
rm -f conftest*
LIBS="$ac_save_LIBS"
fi
-echo "$ac_t""$ac_cv_lib_inet" 1>&6
-if test "$ac_cv_lib_inet" = yes; then
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
cf_cv_netlibs="-linet $cf_cv_netlibs"
+else
+ echo "$ac_t""no" 1>&6
fi
#
@@ -5869,12 +6195,12 @@ if test "$ac_cv_func_lsocket" != no ; then
for ac_func in socket
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5873: checking for $ac_func" >&5
+echo "configure:6199: 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 5878 "configure"
+#line 6204 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5897,7 +6223,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5920,7 +6246,7 @@ else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:5924: checking for socket in -lsocket" >&5
+echo "configure:6250: 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
@@ -5928,7 +6254,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsocket $cf_cv_netlibs $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5932 "configure"
+#line 6258 "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
@@ -5939,7 +6265,7 @@ int main() {
socket()
; return 0; }
EOF
-if { (eval echo configure:5943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5956,14 +6282,14 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
-cf_tr_func=`echo socket | tr 'a-z' 'A-Z'`
+cf_tr_func=`echo "socket" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define HAVE_$cf_tr_func 1
EOF
ac_cv_func_socket=yes
- cf_cv_netlibs="-lsocket $cf_cv_netlibs"
+ if test "$cf_used_lib_socket" != yes ; then cf_used_lib_socket=yes; cf_cv_netlibs="-lsocket $cf_cv_netlibs"; fi
else
echo "$ac_t""no" 1>&6
@@ -5972,7 +6298,7 @@ else
echo $ac_n "checking for socket in -lbsd""... $ac_c" 1>&6
-echo "configure:5976: checking for socket in -lbsd" >&5
+echo "configure:6302: 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
@@ -5980,7 +6306,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lbsd $cf_cv_netlibs $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5984 "configure"
+#line 6310 "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
@@ -5991,7 +6317,7 @@ int main() {
socket()
; return 0; }
EOF
-if { (eval echo configure:5995: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6008,14 +6334,14 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
-cf_tr_func=`echo socket | tr 'a-z' 'A-Z'`
+cf_tr_func=`echo "socket" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define HAVE_$cf_tr_func 1
EOF
ac_cv_func_socket=yes
- cf_cv_netlibs="-lbsd $cf_cv_netlibs"
+ if test "$cf_used_lib_bsd" != yes ; then cf_used_lib_bsd=yes; cf_cv_netlibs="-lbsd $cf_cv_netlibs"; fi
else
echo "$ac_t""no" 1>&6
@@ -6036,12 +6362,12 @@ fi
for ac_func in gethostbyname
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6040: checking for $ac_func" >&5
+echo "configure:6366: 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 6045 "configure"
+#line 6371 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6064,7 +6390,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6087,7 +6413,7 @@ else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:6091: checking for gethostbyname in -lnsl" >&5
+echo "configure:6417: 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
@@ -6095,7 +6421,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lnsl $cf_cv_netlibs $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6099 "configure"
+#line 6425 "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
@@ -6106,7 +6432,7 @@ int main() {
gethostbyname()
; return 0; }
EOF
-if { (eval echo configure:6110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6123,14 +6449,14 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
-cf_tr_func=`echo gethostbyname | tr 'a-z' 'A-Z'`
+cf_tr_func=`echo "gethostbyname" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define HAVE_$cf_tr_func 1
EOF
ac_cv_func_gethostbyname=yes
- cf_cv_netlibs="-lnsl $cf_cv_netlibs"
+ if test "$cf_used_lib_nsl" != yes ; then cf_used_lib_nsl=yes; cf_cv_netlibs="-lnsl $cf_cv_netlibs"; fi
else
echo "$ac_t""no" 1>&6
@@ -6147,12 +6473,12 @@ done
for ac_func in strcasecmp
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6151: checking for $ac_func" >&5
+echo "configure:6477: 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 6156 "configure"
+#line 6482 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6175,7 +6501,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6198,7 +6524,7 @@ else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for strcasecmp in -lresolv""... $ac_c" 1>&6
-echo "configure:6202: checking for strcasecmp in -lresolv" >&5
+echo "configure:6528: 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
@@ -6206,7 +6532,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lresolv $cf_cv_netlibs $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6210 "configure"
+#line 6536 "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
@@ -6217,7 +6543,7 @@ int main() {
strcasecmp()
; return 0; }
EOF
-if { (eval echo configure:6221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6234,14 +6560,14 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
-cf_tr_func=`echo strcasecmp | tr 'a-z' 'A-Z'`
+cf_tr_func=`echo "strcasecmp" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define HAVE_$cf_tr_func 1
EOF
ac_cv_func_strcasecmp=yes
- cf_cv_netlibs="-lresolv $cf_cv_netlibs"
+ if test "$cf_used_lib_resolv" != yes ; then cf_used_lib_resolv=yes; cf_cv_netlibs="-lresolv $cf_cv_netlibs"; fi
else
echo "$ac_t""no" 1>&6
@@ -6263,13 +6589,13 @@ test $cf_test_netlibs = no && echo "$cf_cv_netlibs" >&6
fi
echo $ac_n "checking for inet_aton function""... $ac_c" 1>&6
-echo "configure:6267: checking for inet_aton function" >&5
+echo "configure:6593: checking for inet_aton function" >&5
if eval "test \"`echo '$''{'cf_cv_have_inet_aton'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6273 "configure"
+#line 6599 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/socket.h>
@@ -6280,7 +6606,7 @@ int main() {
inet_aton(0, (struct in_addr *)0)
; return 0; }
EOF
-if { (eval echo configure:6284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_have_inet_aton=yes
else
@@ -6300,13 +6626,13 @@ EOF
else
echo $ac_n "checking for inet_addr function""... $ac_c" 1>&6
-echo "configure:6304: checking for inet_addr function" >&5
+echo "configure:6630: checking for inet_addr function" >&5
if eval "test \"`echo '$''{'cf_cv_have_inet_addr'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6310 "configure"
+#line 6636 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/socket.h>
@@ -6317,7 +6643,7 @@ int main() {
inet_addr(0)
; return 0; }
EOF
-if { (eval echo configure:6321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_have_inet_addr=yes
else
@@ -6332,7 +6658,7 @@ fi
echo "$ac_t""$cf_cv_have_inet_addr" 1>&6
if test "$cf_cv_have_inet_addr" = no ; then
echo $ac_n "checking for library with inet_addr""... $ac_c" 1>&6
-echo "configure:6336: checking for library with inet_addr" >&5
+echo "configure:6662: checking for library with inet_addr" >&5
if eval "test \"`echo '$''{'cf_cv_lib_inet_addr'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6342,7 +6668,7 @@ else
do
LIBS="$cf_save_LIBS $cf_inetlib"
cat > conftest.$ac_ext <<EOF
-#line 6346 "configure"
+#line 6672 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/socket.h>
@@ -6353,7 +6679,7 @@ int main() {
inet_addr(0)
; return 0; }
EOF
-if { (eval echo configure:6357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_lib_inet_addr=$cf_inetlib
else
@@ -6378,9 +6704,156 @@ echo "$ac_t""$cf_cv_lib_inet_addr" 1>&6
fi
fi
+if test "x$cf_cv_use_libssl" != xno ; then
+
+cf_ssl_library="-lssl -lcrypto"
+case "$cf_cv_use_libssl" in #(vi
+no) #(vi
+ ;;
+yes) #(vi
+ echo $ac_n "checking for SSL_get_version in -lssl""... $ac_c" 1>&6
+echo "configure:6716: checking for SSL_get_version in -lssl" >&5
+ac_lib_var=`echo ssl'_'SSL_get_version | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lssl -lcrypto $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 6724 "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 SSL_get_version();
+
+int main() {
+SSL_get_version()
+; return 0; }
+EOF
+if { (eval echo configure:6735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo ssl | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-lssl $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+
+ if test -d /usr/local/ssl ; then
+ test -n "$verbose" && echo " assume it is in /usr/local/ssl" 1>&6
+
+ cf_ssl_library="-L/usr/local/ssl/lib $cf_ssl_library"
+ CPPFLAGS="-I/usr/local/ssl/include $CPPFLAGS"
+ else
+ { echo "configure: error: cannot find ssl library" 1>&2; exit 1; }
+ fi
+
+fi
+
+ ;;
+*)
+ if test -d $cf_cv_use_libssl ; then
+ if test -d $cf_cv_use_libssl/include ; then
+ CPPFLAGS="$CPPFLAGS -I$cf_cv_use_libssl/include"
+ cf_ssl_library="-L$cf_cv_use_libssl/lib $cf_ssl_library"
+ else
+ cf_ssl_library="-L$cf_cv_use_libssl $cf_ssl_library"
+ test -d $cf_cv_use_libssl/../include && CPPFLAGS="$CPPFLAGS -I$cf_cv_use_libssl/../include"
+ fi
+ else
+ echo "configure: warning: expected a directory: $cf_cv_use_libssl" 1>&2
+ fi
+ ;;
+esac
+LIBS="$cf_ssl_library $LIBS"
+
+echo $ac_n "checking for openssl include directory""... $ac_c" 1>&6
+echo "configure:6790: checking for openssl include directory" >&5
+cat > conftest.$ac_ext <<EOF
+#line 6792 "configure"
+#include "confdefs.h"
+
+#include <stdio.h>
+#include <openssl/ssl.h>
+int main() {
+SSL_shutdown((SSL *)0)
+; return 0; }
+EOF
+if { (eval echo configure:6801: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_openssl_incl=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_openssl_incl=no
+fi
+rm -f conftest*
+echo "$ac_t""$cf_openssl_incl" 1>&6
+test "$cf_openssl_incl" = yes && cat >> confdefs.h <<\EOF
+#define USE_OPENSSL_INCL 1
+EOF
+
+
+echo $ac_n "checking if we can link to ssl library""... $ac_c" 1>&6
+echo "configure:6818: checking if we can link to ssl library" >&5
+cat > conftest.$ac_ext <<EOF
+#line 6820 "configure"
+#include "confdefs.h"
+
+#include <stdio.h>
+#ifdef USE_OPENSSL_INCL
+#include <openssl/ssl.h>
+#else
+#include <ssl.h>
+#endif
+
+int main() {
+SSL_shutdown((SSL *)0)
+; return 0; }
+EOF
+if { (eval echo configure:6834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_ssl_library=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_ssl_library=no
+fi
+rm -f conftest*
+echo "$ac_t""$cf_ssl_library" 1>&6
+if test "$cf_ssl_library" = yes ; then
+ cat >> confdefs.h <<\EOF
+#define USE_SSL 1
+EOF
+
+else
+ { echo "configure: error: Cannot link with ssl library" 1>&2; exit 1; }
+fi
+
+fi
echo $ac_n "checking for screen type""... $ac_c" 1>&6
-echo "configure:6384: checking for screen type" >&5
+echo "configure:6857: checking for screen type" >&5
if eval "test \"`echo '$''{'cf_cv_screen'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6391,7 +6864,7 @@ if test "${with_screen+set}" = set; then
withval="$with_screen"
case $withval in
-curses|ncurses|slang)
+curses|ncurses|pdcurses|slang)
cf_cv_screen=$withval
;;
*) { echo "configure: error: Unexpected value" 1>&2; exit 1; }
@@ -6405,66 +6878,236 @@ fi
echo "$ac_t""$cf_cv_screen" 1>&6
-if test $cf_cv_screen != ncurses ; then
+case $cf_cv_screen in
+ncurses|slang)
+ ;;
+pdcurses)
+ cf_cv_ncurses_header=xcurses.h
+ ;;
+curses)
if eval "test \"`echo '$''{'cf_cv_ncurses_header'+set}'`\" != set"; then
cf_cv_ncurses_header=curses.h
fi
-fi
+ ;;
+esac
case $cf_cv_screen in
curses)
-echo $ac_n "checking for initscr""... $ac_c" 1>&6
-echo "configure:6419: checking for initscr" >&5
-if eval "test \"`echo '$''{'ac_cv_func_initscr'+set}'`\" = set"; then
+
+echo $ac_n "checking for extra include directories""... $ac_c" 1>&6
+echo "configure:6900: checking for extra include directories" >&5
+if eval "test \"`echo '$''{'cf_cv_curses_incdir'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- cat > conftest.$ac_ext <<EOF
-#line 6424 "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();
+
+cf_cv_curses_incdir=no
+case $host_os in #(vi
+hpux10.*|hpux11.*) #(vi
+ test -d /usr/include/curses_colr && \
+ cf_cv_curses_incdir="-I/usr/include/curses_colr"
+ ;;
+sunos3*|sunos4*)
+ test -d /usr/5lib && \
+ test -d /usr/5include && \
+ cf_cv_curses_incdir="-I/usr/5include"
+ ;;
+esac
-int main() {
+fi
-/* 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
+echo "$ac_t""$cf_cv_curses_incdir" 1>&6
+test "$cf_cv_curses_incdir" != no && CPPFLAGS="$CPPFLAGS $cf_cv_curses_incdir"
+echo $ac_n "checking if we have identified curses headers""... $ac_c" 1>&6
+echo "configure:6924: checking if we have identified curses headers" >&5
+if eval "test \"`echo '$''{'cf_cv_ncurses_header'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+cf_cv_ncurses_header=curses.h
+for cf_header in \
+ curses.h \
+ ncurses.h \
+ ncurses/curses.h \
+ ncurses/ncurses.h
+do
+cat > conftest.$ac_ext <<EOF
+#line 6937 "configure"
+#include "confdefs.h"
+#include <${cf_header}>
+int main() {
+initscr(); tgoto("?", 0,0)
; return 0; }
EOF
-if { (eval echo configure:6447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6944: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- eval "ac_cv_func_initscr=yes"
+ cf_cv_ncurses_header=$cf_header; break
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*
+done
+
fi
-if eval "test \"`echo '$ac_cv_func_'initscr`\" = yes"; then
+echo "$ac_t""$cf_cv_ncurses_header" 1>&6
+
+# cheat, to get the right #define's for HAVE_NCURSES_H, etc.
+for ac_hdr in $cf_cv_ncurses_header
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:6963: 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 6968 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:6973: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ 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 for ncurses version""... $ac_c" 1>&6
+echo "configure:7003: checking for ncurses version" >&5
+if eval "test \"`echo '$''{'cf_cv_ncurses_version'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cf_cv_ncurses_version=no
+ cf_tempfile=out$$
+ rm -f $cf_tempfile
+ if test "$cross_compiling" = yes; then
+
+ # This will not work if the preprocessor splits the line after the
+ # Autoconf token. The 'unproto' program does that.
+ cat > conftest.$ac_ext <<EOF
+#include <${cf_cv_ncurses_header-curses.h}>
+#undef Autoconf
+#ifdef NCURSES_VERSION
+Autoconf NCURSES_VERSION
+#else
+#ifdef __NCURSES_H
+Autoconf "old"
+#endif
+;
+#endif
+EOF
+ cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out"
+ { (eval echo configure:7029: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
+ if test -f conftest.out ; then
+ cf_out=`cat conftest.out | sed -e 's@^Autoconf @@' -e 's@^[^"]*"@@' -e 's@".*@@'`
+ test -n "$cf_out" && cf_cv_ncurses_version="$cf_out"
+ rm -f conftest.out
+ fi
+
+else
+ cat > conftest.$ac_ext <<EOF
+#line 7038 "configure"
+#include "confdefs.h"
+
+#include <${cf_cv_ncurses_header-curses.h}>
+#include <stdio.h>
+int main()
+{
+ FILE *fp = fopen("$cf_tempfile", "w");
+#ifdef NCURSES_VERSION
+# ifdef NCURSES_VERSION_PATCH
+ fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH);
+# else
+ fprintf(fp, "%s\n", NCURSES_VERSION);
+# endif
+#else
+# ifdef __NCURSES_H
+ fprintf(fp, "old\n");
+# else
+ make an error
+# endif
+#endif
+ exit(0);
+}
+EOF
+if { (eval echo configure:7062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+
+ cf_cv_ncurses_version=`cat $cf_tempfile`
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -fr conftest*
+fi
+
+ rm -f $cf_tempfile
+
+fi
+
+echo "$ac_t""$cf_cv_ncurses_version" 1>&6
+test "$cf_cv_ncurses_version" = no || cat >> confdefs.h <<\EOF
+#define NCURSES 1
+EOF
+
+
+
+
+echo $ac_n "checking if we have identified curses libraries""... $ac_c" 1>&6
+echo "configure:7086: checking if we have identified curses libraries" >&5
+cat > conftest.$ac_ext <<EOF
+#line 7088 "configure"
+#include "confdefs.h"
+#include <${cf_cv_ncurses_header-curses.h}>
+int main() {
+initscr(); tgoto("?", 0,0)
+; return 0; }
+EOF
+if { (eval echo configure:7095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_result=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_result=no
+fi
+rm -f conftest*
+echo "$ac_t""$cf_result" 1>&6
+
+if test "$cf_result" = no ; then
case $host_os in #(vi
freebsd*) #(vi
echo $ac_n "checking for tgoto in -lmytinfo""... $ac_c" 1>&6
-echo "configure:6468: checking for tgoto in -lmytinfo" >&5
+echo "configure:7111: checking for tgoto in -lmytinfo" >&5
ac_lib_var=`echo mytinfo'_'tgoto | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6472,7 +7115,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lmytinfo $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6476 "configure"
+#line 7119 "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
@@ -6483,7 +7126,7 @@ int main() {
tgoto()
; return 0; }
EOF
-if { (eval echo configure:6487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6504,9 +7147,9 @@ else
fi
;;
-hpux10.*)
+hpux10.*|hpux11.*) #(vi
echo $ac_n "checking for initscr in -lcur_colr""... $ac_c" 1>&6
-echo "configure:6510: checking for initscr in -lcur_colr" >&5
+echo "configure:7153: checking for initscr in -lcur_colr" >&5
ac_lib_var=`echo cur_colr'_'initscr | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6514,7 +7157,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lcur_colr $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6518 "configure"
+#line 7161 "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
@@ -6525,7 +7168,7 @@ int main() {
initscr()
; return 0; }
EOF
-if { (eval echo configure:6529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6542,14 +7185,13 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
LIBS="-lcur_colr $LIBS"
- CFLAGS="-I/usr/include/curses_colr $CFLAGS"
ac_cv_func_initscr=yes
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for initscr in -lHcurses""... $ac_c" 1>&6
-echo "configure:6553: checking for initscr in -lHcurses" >&5
+echo "configure:7195: checking for initscr in -lHcurses" >&5
ac_lib_var=`echo Hcurses'_'initscr | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6557,7 +7199,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lHcurses $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6561 "configure"
+#line 7203 "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
@@ -6568,7 +7210,7 @@ int main() {
initscr()
; return 0; }
EOF
-if { (eval echo configure:6572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7214: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6586,7 +7228,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
# HP's header uses __HP_CURSES, but user claims _HP_CURSES.
LIBS="-lHcurses $LIBS"
- CFLAGS="-D__HP_CURSES -D_HP_CURSES $CFLAGS"
+ CPPFLAGS="-D__HP_CURSES -D_HP_CURSES $CPPFLAGS"
ac_cv_func_initscr=yes
else
@@ -6599,30 +7241,34 @@ fi
linux*) # Suse Linux does not follow /usr/lib convention
LIBS="$LIBS -L/lib"
;;
+sunos3*|sunos4*)
+ test -d /usr/5lib && \
+ LIBS="$LIBS -L/usr/5lib -lcurses -ltermcap"
+ ac_cv_func_initscr=yes
+ ;;
esac
-if test ".$With5lib" != ".no" ; then
-if test -d /usr/5lib ; then
- # SunOS 3.x or 4.x
- CPPFLAGS="$CPPFLAGS -I/usr/5include"
- LIBS="$LIBS -L/usr/5lib"
-fi
-fi
-
if test ".$ac_cv_func_initscr" != .yes ; then
cf_save_LIBS="$LIBS"
cf_term_lib=""
cf_curs_lib=""
+ if test ".${cf_cv_ncurses_version-no}" != .no
+ then
+ cf_check_list="ncurses curses cursesX"
+ else
+ cf_check_list="cursesX curses ncurses"
+ fi
+
# Check for library containing tgoto. Do this before curses library
# because it may be needed to link the test-case for initscr.
echo $ac_n "checking for tgoto""... $ac_c" 1>&6
-echo "configure:6621: checking for tgoto" >&5
+echo "configure:7267: checking for tgoto" >&5
if eval "test \"`echo '$''{'ac_cv_func_tgoto'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6626 "configure"
+#line 7272 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char tgoto(); below. */
@@ -6645,7 +7291,7 @@ tgoto();
; return 0; }
EOF
-if { (eval echo configure:6649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_tgoto=yes"
else
@@ -6663,10 +7309,10 @@ if eval "test \"`echo '$ac_cv_func_'tgoto`\" = yes"; then
else
echo "$ac_t""no" 1>&6
- for cf_term_lib in termcap termlib unknown
+ for cf_term_lib in $cf_check_list termcap termlib unknown
do
echo $ac_n "checking for tgoto in -l$cf_term_lib""... $ac_c" 1>&6
-echo "configure:6670: checking for tgoto in -l$cf_term_lib" >&5
+echo "configure:7316: checking for tgoto in -l$cf_term_lib" >&5
ac_lib_var=`echo $cf_term_lib'_'tgoto | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6674,7 +7320,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-l$cf_term_lib $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6678 "configure"
+#line 7324 "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
@@ -6685,7 +7331,7 @@ int main() {
tgoto()
; return 0; }
EOF
-if { (eval echo configure:6689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7335: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6712,10 +7358,10 @@ fi
# Check for library containing initscr
test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS"
- for cf_curs_lib in cursesX curses ncurses xcurses jcurses unknown
+ for cf_curs_lib in $cf_check_list xcurses jcurses unknown
do
echo $ac_n "checking for initscr in -l$cf_curs_lib""... $ac_c" 1>&6
-echo "configure:6719: checking for initscr in -l$cf_curs_lib" >&5
+echo "configure:7365: checking for initscr in -l$cf_curs_lib" >&5
ac_lib_var=`echo $cf_curs_lib'_'initscr | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6723,7 +7369,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-l$cf_curs_lib $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6727 "configure"
+#line 7373 "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
@@ -6734,7 +7380,7 @@ int main() {
initscr()
; return 0; }
EOF
-if { (eval echo configure:6738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6760,16 +7406,16 @@ fi
LIBS="-l$cf_curs_lib $cf_save_LIBS"
if test "$cf_term_lib" = unknown ; then
echo $ac_n "checking if we can link with $cf_curs_lib library""... $ac_c" 1>&6
-echo "configure:6764: checking if we can link with $cf_curs_lib library" >&5
+echo "configure:7410: checking if we can link with $cf_curs_lib library" >&5
cat > conftest.$ac_ext <<EOF
-#line 6766 "configure"
+#line 7412 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
int main() {
initscr()
; return 0; }
EOF
-if { (eval echo configure:6773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_result=yes
else
@@ -6781,18 +7427,20 @@ fi
rm -f conftest*
echo "$ac_t""$cf_result" 1>&6
test $cf_result = no && { echo "configure: error: Cannot link curses library" 1>&2; exit 1; }
+ elif test "$cf_curs_lib" = "$cf_term_lib" ; then
+ :
elif test "$cf_term_lib" != predefined ; then
echo $ac_n "checking if we need both $cf_curs_lib and $cf_term_lib libraries""... $ac_c" 1>&6
-echo "configure:6787: checking if we need both $cf_curs_lib and $cf_term_lib libraries" >&5
+echo "configure:7435: checking if we need both $cf_curs_lib and $cf_term_lib libraries" >&5
cat > conftest.$ac_ext <<EOF
-#line 6789 "configure"
+#line 7437 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
int main() {
initscr(); tgoto((char *)0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:6796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_result=no
else
@@ -6802,14 +7450,14 @@ else
LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6806 "configure"
+#line 7454 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
int main() {
initscr()
; return 0; }
EOF
-if { (eval echo configure:6813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_result=yes
else
@@ -6825,20 +7473,19 @@ rm -f conftest*
echo "$ac_t""$cf_result" 1>&6
fi
fi
-
-
fi
+
echo $ac_n "checking for curses performance tradeoff""... $ac_c" 1>&6
-echo "configure:6835: checking for curses performance tradeoff" >&5
+echo "configure:7482: 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 6842 "configure"
+#line 7489 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
@@ -6852,11 +7499,11 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:6856: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 6860 "configure"
+#line 7507 "configure"
#include "confdefs.h"
#define CURS_PERFORMANCE
@@ -6871,7 +7518,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:6875: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7522: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_curs_performance=yes
else
@@ -6892,19 +7539,87 @@ test $cf_cv_curs_performance = yes && cat >> confdefs.h <<\EOF
EOF
+
+echo $ac_n "checking for curses touchline function""... $ac_c" 1>&6
+echo "configure:7545: checking for curses touchline function" >&5
+if eval "test \"`echo '$''{'cf_cv_curs_touchline'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cat > conftest.$ac_ext <<EOF
+#line 7551 "configure"
+#include "confdefs.h"
+
+#include <${cf_cv_ncurses_header-curses.h}>
+int main() {
+touchline(stdscr, 1,2,3);
+; return 0; }
+EOF
+if { (eval echo configure:7559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_curs_touchline=bsd
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cat > conftest.$ac_ext <<EOF
+#line 7567 "configure"
+#include "confdefs.h"
+
+#include <${cf_cv_ncurses_header-curses.h}>
+int main() {
+touchline(stdscr, 1,2);
+; return 0; }
+EOF
+if { (eval echo configure:7575: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_curs_touchline=sysv
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_curs_touchline=bsd
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$cf_cv_curs_touchline" 1>&6
+case "$cf_cv_curs_touchline" in #(vi
+bsd) #(vi
+ cat >> confdefs.h <<\EOF
+#define HAVE_BSD_TOUCHLINE 1
+EOF
+
+ ;;
+sysv)
+ cat >> confdefs.h <<\EOF
+#define HAVE_SYSV_TOUCHLINE 1
+EOF
+
+ ;;
+esac
+
;;
ncurses)
-echo $ac_n "checking for ncurses header file""... $ac_c" 1>&6
-echo "configure:6900: checking for ncurses header file" >&5
-if eval "test \"`echo '$''{'cf_cv_ncurses_header'+set}'`\" = set"; then
+echo $ac_n "checking for ncurses header in include-path""... $ac_c" 1>&6
+echo "configure:7609: checking for ncurses header in include-path" >&5
+if eval "test \"`echo '$''{'cf_cv_ncurses_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
+ for cf_header in \
+ curses.h \
+ ncurses.h \
+ ncurses/curses.h \
+ ncurses/ncurses.h
+ do
cat > conftest.$ac_ext <<EOF
-#line 6906 "configure"
+#line 7621 "configure"
#include "confdefs.h"
-#include <curses.h>
+#include <$cf_header>
int main() {
#ifdef NCURSES_VERSION
@@ -6917,75 +7632,112 @@ make an error
#endif
#endif
+
; return 0; }
EOF
-if { (eval echo configure:6923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7639: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- cf_cv_ncurses_header=predefined
+ cf_cv_ncurses_h=$cf_header; break
+
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
-
- cf_search=""
-if test -d "$includedir" ; then
-test "$includedir" != NONE && cf_search="$cf_search $includedir $includedir/ncurses"
+ cf_cv_ncurses_h=no
fi
-if test -d "$oldincludedir" ; then
-test "$oldincludedir" != NONE && cf_search="$cf_search $oldincludedir $oldincludedir/ncurses"
-fi
-if test -d "$prefix"; then
-test "$prefix" != NONE && cf_search="$cf_search $prefix/include $prefix/include/ncurses"
+rm -f conftest*
+ done
+
fi
-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"
+
+echo "$ac_t""$cf_cv_ncurses_h" 1>&6
+
+if test "$cf_cv_ncurses_h" != no ; then
+ cf_cv_ncurses_header=$cf_cv_ncurses_h
+else
+echo $ac_n "checking for ncurses include-path""... $ac_c" 1>&6
+echo "configure:7660: checking for ncurses include-path" >&5
+if eval "test \"`echo '$''{'cf_cv_ncurses_h2'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cf_search=""
+
+test "$includedir" != NONE && \
+test -d "$includedir" && \
+cf_search="$cf_search $includedir $includedir/ncurses"
+
+test "$oldincludedir" != NONE && \
+test -d "$oldincludedir" && \
+cf_search="$cf_search $oldincludedir $oldincludedir/ncurses"
+
+test "$prefix" != NONE && \
+test -d "$prefix" && \
+cf_search="$cf_search $prefix/include $prefix/include/ncurses $prefix/ncurses/include"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+cf_search="$cf_search /usr/local/include /usr/local/include/ncurses /usr/local/ncurses/include"
+
+test "$prefix" != /usr && \
+cf_search="$cf_search /usr/include /usr/include/ncurses /usr/ncurses/include"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+cf_search="$cf_search /opt/include /opt/include/ncurses /opt/ncurses/include"
+
+cf_search="$cf_search $HOME/lib $HOME/lib/ncurses $HOME/ncurses/lib"
test -n "$verbose" && echo
for cf_incdir in $cf_search
do
for cf_header in \
- curses.h \
- ncurses.h
+ ncurses.h \
+ curses.h
do
if egrep "NCURSES_[VH]" $cf_incdir/$cf_header 1>&5 2>&1; then
- cf_cv_ncurses_header=$cf_incdir/$cf_header
+ cf_cv_ncurses_h2=$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
+ test -n "$cf_cv_ncurses_h2" && break
done
- test -z "$cf_cv_ncurses_header" && { echo "configure: error: not found" 1>&2; exit 1; }
+ test -z "$cf_cv_ncurses_h2" && { 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
+echo "$ac_t""$cf_cv_ncurses_h2" 1>&6
-cf_incdir=`echo $cf_cv_ncurses_header | sed -e 's:/[^/]*$::'`
-
-case $cf_cv_ncurses_header in # (vi
-*/ncurses.h)
- cat >> confdefs.h <<\EOF
-#define HAVE_NCURSES_H 1
-EOF
-
- ;;
-esac
+ cf_1st_incdir=`echo $cf_cv_ncurses_h2 | sed -e 's:/[^/]*$::'`
+ cf_2nd_incdir=`echo $cf_1st_incdir | sed -e 's:/[^/]*$::'`
+ cf_cv_ncurses_header=`basename $cf_cv_ncurses_h2`
+ echo cf_1st_include=$cf_1st_incdir
+ echo cf_2nd_include=$cf_2nd_incdir
+ if test `basename $cf_1st_incdir` = ncurses ; then
+ cf_cv_ncurses_header=ncurses/$cf_cv_ncurses_header
+
+for cf_add_incdir in $cf_2nd_incdir
+do
+ while true
+ do
+ case $cf_add_incdir in
+ /usr/include) # (vi
+ ;;
+ *) # (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
-case $cf_cv_ncurses_header in # (vi
-predefined) # (vi
- cf_cv_ncurses_header=curses.h
- ;;
-*)
+ fi
-for cf_add_incdir in $cf_incdir
+for cf_add_incdir in $cf_1st_incdir
do
while true
do
@@ -7002,16 +7754,43 @@ do
done
done
+
+fi
+
+cat >> confdefs.h <<\EOF
+#define NCURSES 1
+EOF
+
+
+
+case $cf_cv_ncurses_header in # (vi
+*ncurses.h)
+ cat >> confdefs.h <<\EOF
+#define HAVE_NCURSES_H 1
+EOF
+
+ ;;
+esac
+
+case $cf_cv_ncurses_header in # (vi
+ncurses/curses.h|ncurses/ncurses.h)
+ cat >> confdefs.h <<\EOF
+#define HAVE_NCURSES_NCURSES_H 1
+EOF
+
;;
esac
+
+
echo $ac_n "checking for ncurses version""... $ac_c" 1>&6
-echo "configure:7009: checking for ncurses version" >&5
+echo "configure:7787: checking for ncurses version" >&5
if eval "test \"`echo '$''{'cf_cv_ncurses_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cf_cv_ncurses_version=no
cf_tempfile=out$$
+ rm -f $cf_tempfile
if test "$cross_compiling" = yes; then
@@ -7030,7 +7809,7 @@ Autoconf "old"
#endif
EOF
cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out"
- { (eval echo configure:7034: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
+ { (eval echo configure:7813: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
if test -f conftest.out ; then
cf_out=`cat conftest.out | sed -e 's@^Autoconf @@' -e 's@^[^"]*"@@' -e 's@".*@@'`
test -n "$cf_out" && cf_cv_ncurses_version="$cf_out"
@@ -7039,10 +7818,11 @@ EOF
else
cat > conftest.$ac_ext <<EOF
-#line 7043 "configure"
+#line 7822 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
+#include <stdio.h>
int main()
{
FILE *fp = fopen("$cf_tempfile", "w");
@@ -7062,11 +7842,10 @@ int main()
exit(0);
}
EOF
-if { (eval echo configure:7066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
cf_cv_ncurses_version=`cat $cf_tempfile`
- rm -f $cf_tempfile
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
@@ -7074,9 +7853,15 @@ fi
rm -fr conftest*
fi
+ rm -f $cf_tempfile
+
fi
echo "$ac_t""$cf_cv_ncurses_version" 1>&6
+test "$cf_cv_ncurses_version" = no || cat >> confdefs.h <<\EOF
+#define NCURSES 1
+EOF
+
@@ -7087,7 +7872,7 @@ echo "$ac_t""$cf_cv_ncurses_version" 1>&6
cf_ncurses_LIBS=""
cf_ncurses_SAVE="$LIBS"
echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6
-echo "configure:7091: checking for Gpm_Open in -lgpm" >&5
+echo "configure:7876: 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
@@ -7095,7 +7880,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lgpm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7099 "configure"
+#line 7884 "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
@@ -7106,7 +7891,7 @@ int main() {
Gpm_Open()
; return 0; }
EOF
-if { (eval echo configure:7110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7895: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7122,7 +7907,7 @@ fi
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for initscr in -lgpm""... $ac_c" 1>&6
-echo "configure:7126: checking for initscr in -lgpm" >&5
+echo "configure:7911: 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
@@ -7130,7 +7915,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lgpm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7134 "configure"
+#line 7919 "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
@@ -7141,7 +7926,7 @@ int main() {
initscr()
; return 0; }
EOF
-if { (eval echo configure:7145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7172,7 +7957,7 @@ freebsd*)
# This is only necessary if you are linking against an obsolete
# version of ncurses (but it should do no harm, since it's static).
echo $ac_n "checking for tgoto in -lmytinfo""... $ac_c" 1>&6
-echo "configure:7176: checking for tgoto in -lmytinfo" >&5
+echo "configure:7961: checking for tgoto in -lmytinfo" >&5
ac_lib_var=`echo mytinfo'_'tgoto | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7180,7 +7965,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lmytinfo $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7184 "configure"
+#line 7969 "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
@@ -7191,7 +7976,7 @@ int main() {
tgoto()
; return 0; }
EOF
-if { (eval echo configure:7195: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7216,15 +8001,15 @@ esac
LIBS="$cf_ncurses_LIBS $LIBS"
- cf_cv_have_lib_ncurses=no
+ eval 'cf_cv_have_lib_'ncurses'=no'
cf_libdir=""
echo $ac_n "checking for initscr""... $ac_c" 1>&6
-echo "configure:7223: checking for initscr" >&5
+echo "configure:8008: 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 7228 "configure"
+#line 8013 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char initscr(); below. */
@@ -7247,7 +8032,7 @@ initscr();
; return 0; }
EOF
-if { (eval echo configure:7251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8036: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_initscr=yes"
else
@@ -7261,26 +8046,26 @@ fi
if eval "test \"`echo '$ac_cv_func_'initscr`\" = yes"; then
echo "$ac_t""yes" 1>&6
- cf_cv_have_lib_ncurses=yes
+ eval 'cf_cv_have_lib_'ncurses'=yes'
else
echo "$ac_t""no" 1>&6
cf_save_LIBS="$LIBS"
echo $ac_n "checking for initscr in -lncurses""... $ac_c" 1>&6
-echo "configure:7271: checking for initscr in -lncurses" >&5
+echo "configure:8056: checking for initscr in -lncurses" >&5
LIBS="-lncurses $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7274 "configure"
+#line 8059 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
int main() {
initscr()
; return 0; }
EOF
-if { (eval echo configure:7281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
- cf_cv_have_lib_ncurses=yes
+ eval 'cf_cv_have_lib_'ncurses'=yes'
else
echo "configure: failed program was:" >&5
@@ -7288,36 +8073,53 @@ else
rm -rf conftest*
echo "$ac_t""no" 1>&6
cf_search=""
-if test -d "$libdir" ; then
-test "$libdir" != NONE && cf_search="$cf_search $libdir $libdir/ncurses"
-fi
-if test -d "$exec_prefix"; then
-test "$exec_prefix" != NONE && cf_search="$cf_search $exec_prefix/lib $exec_prefix/lib/ncurses"
-fi
-if test -d "$prefix"; then
-test "$prefix" != NONE && \
-test "$prefix" != "$exec_prefix" && cf_search="$cf_search $prefix/lib $prefix/lib/ncurses"
-fi
-test "$prefix" != /usr/local && cf_search="$cf_search /usr/local/lib /usr/local/lib/ncurses"
-test "$prefix" != /usr && cf_search="$cf_search /usr/lib /usr/lib/ncurses"
+
+test "$libdir" != NONE && \
+test -d $libdir && \
+cf_search="$cf_search $libdir $libdir/ncurses"
+
+test "$exec_prefix" != NONE && \
+test -d $exec_prefix && \
+cf_search="$cf_search $exec_prefix/lib $exec_prefix/lib/ncurses"
+
+test "$prefix" != NONE && \
+test "$prefix" != "$exec_prefix" && \
+test -d $prefix && \
+cf_search="$cf_search $prefix/lib $prefix/lib/ncurses $prefix/ncurses/lib"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+cf_search="$cf_search /usr/local/lib /usr/local/lib/ncurses /usr/local/ncurses/lib"
+
+test "$prefix" != /usr && \
+cf_search="$cf_search /usr/lib /usr/lib/ncurses /usr/ncurses/lib"
+
+test "$prefix" != / && \
+cf_search="$cf_search /lib /lib/ncurses /ncurses/lib"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+cf_search="$cf_search /opt/lib /opt/lib/ncurses /opt/ncurses/lib"
+
+cf_search="$cf_search $HOME/lib $HOME/lib/ncurses $HOME/ncurses/lib"
for cf_libdir in $cf_search
do
echo $ac_n "checking for -lncurses in $cf_libdir""... $ac_c" 1>&6
-echo "configure:7308: checking for -lncurses in $cf_libdir" >&5
+echo "configure:8110: checking for -lncurses in $cf_libdir" >&5
LIBS="-L$cf_libdir -lncurses $cf_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7311 "configure"
+#line 8113 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
int main() {
initscr()
; return 0; }
EOF
-if { (eval echo configure:7318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8120: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
- cf_cv_have_lib_ncurses=yes
+ eval 'cf_cv_have_lib_'ncurses'=yes'
break
else
echo "configure: failed program was:" >&5
@@ -7334,19 +8136,17 @@ rm -f conftest*
fi
-if test $cf_cv_have_lib_ncurses = no ; then
+eval 'cf_found_library=$cf_cv_have_lib_'ncurses
+
+if test $cf_found_library = no ; then
{ echo "configure: error: Cannot link ncurses library" 1>&2; exit 1; }
fi
-case $host_os in #(vi
-linux*) # Suse Linux does not follow /usr/lib convention
- LIBS="$LIBS -L/lib"
- ;;
-esac
+
if test -n "$cf_ncurses_LIBS" ; then
echo $ac_n "checking if we can link ncurses without $cf_ncurses_LIBS""... $ac_c" 1>&6
-echo "configure:7350: checking if we can link ncurses without $cf_ncurses_LIBS" >&5
+echo "configure:8150: checking if we can link ncurses without $cf_ncurses_LIBS" >&5
cf_ncurses_SAVE="$LIBS"
for p in $cf_ncurses_LIBS ; do
q=`echo $LIBS | sed -e 's/'$p' //' -e 's/'$p'$//'`
@@ -7355,14 +8155,14 @@ echo "configure:7350: checking if we can link ncurses without $cf_ncurses_LIBS"
fi
done
cat > conftest.$ac_ext <<EOF
-#line 7359 "configure"
+#line 8159 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
int main() {
initscr(); mousemask(0,0); tgoto((char *)0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:7366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
else
@@ -7375,24 +8175,109 @@ fi
rm -f conftest*
fi
+
+echo $ac_n "checking for ncurses version""... $ac_c" 1>&6
+echo "configure:8181: checking for ncurses version" >&5
+if eval "test \"`echo '$''{'cf_cv_ncurses_version'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cf_cv_ncurses_version=no
+ cf_tempfile=out$$
+ rm -f $cf_tempfile
+ if test "$cross_compiling" = yes; then
+
+
+ # This will not work if the preprocessor splits the line after the
+ # Autoconf token. The 'unproto' program does that.
+ cat > conftest.$ac_ext <<EOF
+#include <${cf_cv_ncurses_header-curses.h}>
+#undef Autoconf
+#ifdef NCURSES_VERSION
+Autoconf NCURSES_VERSION
+#else
+#ifdef __NCURSES_H
+Autoconf "old"
+#endif
+;
+#endif
+EOF
+ cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out"
+ { (eval echo configure:8207: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
+ if test -f conftest.out ; then
+ cf_out=`cat conftest.out | sed -e 's@^Autoconf @@' -e 's@^[^"]*"@@' -e 's@".*@@'`
+ test -n "$cf_out" && cf_cv_ncurses_version="$cf_out"
+ rm -f conftest.out
+ fi
+
+else
+ cat > conftest.$ac_ext <<EOF
+#line 8216 "configure"
+#include "confdefs.h"
+
+#include <${cf_cv_ncurses_header-curses.h}>
+#include <stdio.h>
+int main()
+{
+ FILE *fp = fopen("$cf_tempfile", "w");
+#ifdef NCURSES_VERSION
+# ifdef NCURSES_VERSION_PATCH
+ fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH);
+# else
+ fprintf(fp, "%s\n", NCURSES_VERSION);
+# endif
+#else
+# ifdef __NCURSES_H
+ fprintf(fp, "old\n");
+# else
+ make an error
+# endif
+#endif
+ exit(0);
+}
+EOF
+if { (eval echo configure:8240: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+
+ cf_cv_ncurses_version=`cat $cf_tempfile`
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -fr conftest*
+fi
+
+ rm -f $cf_tempfile
+
+fi
+
+echo "$ac_t""$cf_cv_ncurses_version" 1>&6
+test "$cf_cv_ncurses_version" = no || cat >> confdefs.h <<\EOF
+#define NCURSES 1
+EOF
+
+
+ ;;
+pdcurses)
+ # do this last, since it changes definition of main: CF_PDCURSES_X11
;;
slang)
echo $ac_n "checking for slang header file""... $ac_c" 1>&6
-echo "configure:7383: checking for slang header file" >&5
+echo "configure:8268: 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
cat > conftest.$ac_ext <<EOF
-#line 7389 "configure"
+#line 8274 "configure"
#include "confdefs.h"
#include <slang.h>
int main() {
printf("%s\n", SLANG_VERSION)
; return 0; }
EOF
-if { (eval echo configure:7396: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8281: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_slang_header=predefined
else
@@ -7401,17 +8286,31 @@ else
rm -rf conftest*
cf_search=""
-if test -d "$includedir" ; then
-test "$includedir" != NONE && cf_search="$cf_search $includedir $includedir/slang"
-fi
-if test -d "$oldincludedir" ; then
-test "$oldincludedir" != NONE && cf_search="$cf_search $oldincludedir $oldincludedir/slang"
-fi
-if test -d "$prefix"; then
-test "$prefix" != NONE && cf_search="$cf_search $prefix/include $prefix/include/slang"
-fi
-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"
+
+test "$includedir" != NONE && \
+test -d "$includedir" && \
+cf_search="$cf_search $includedir $includedir/slang"
+
+test "$oldincludedir" != NONE && \
+test -d "$oldincludedir" && \
+cf_search="$cf_search $oldincludedir $oldincludedir/slang"
+
+test "$prefix" != NONE && \
+test -d "$prefix" && \
+cf_search="$cf_search $prefix/include $prefix/include/slang $prefix/slang/include"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+cf_search="$cf_search /usr/local/include /usr/local/include/slang /usr/local/slang/include"
+
+test "$prefix" != /usr && \
+cf_search="$cf_search /usr/include /usr/include/slang /usr/slang/include"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+cf_search="$cf_search /opt/include /opt/include/slang /opt/slang/include"
+
+cf_search="$cf_search $HOME/lib $HOME/lib/slang $HOME/slang/lib"
for cf_incdir in $cf_search
do
@@ -7465,7 +8364,7 @@ done
;;
esac
-
+
cf_slang_LIBS1="$LIBS"
if eval "test \"`echo '$''{'cf_cv_termlib'+set}'`\" = set"; then
@@ -7474,24 +8373,24 @@ else
cf_cv_termlib=none
cat > conftest.$ac_ext <<EOF
-#line 7478 "configure"
+#line 8377 "configure"
#include "confdefs.h"
int main() {
char *x=(char*)tgoto("",0,0)
; return 0; }
EOF
-if { (eval echo configure:7485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 7488 "configure"
+#line 8387 "configure"
#include "confdefs.h"
int main() {
int x=tigetstr("")
; return 0; }
EOF
-if { (eval echo configure:7495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_termlib=terminfo
else
@@ -7510,95 +8409,53 @@ else
rm -rf conftest*
-# HP-UX 9.x terminfo has setupterm, but no tigetstr.
if test "$cf_cv_termlib" = none; then
- echo $ac_n "checking for tigetstr in -ltermlib""... $ac_c" 1>&6
-echo "configure:7517: 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 7525 "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:7536: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- LIBS="$LIBS -ltermlib" cf_cv_termlib=terminfo
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-if test "$cf_cv_termlib" = none; then
- echo $ac_n "checking for tgoto in -ltermlib""... $ac_c" 1>&6
-echo "configure:7559: 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 7567 "configure"
+ # FreeBSD's linker gives bogus results for AC_CHECK_LIB, saying that
+ # tgetstr lives in -lcurses when it is only an unsatisfied extern.
+ cf_save_LIBS="$LIBS"
+ for cf_lib in curses ncurses termlib termcap
+ do
+ LIBS="-l$cf_lib $cf_save_LIBS"
+ for cf_func in tigetstr tgetstr
+ do
+ echo $ac_n "checking for $cf_func in -l$cf_lib""... $ac_c" 1>&6
+echo "configure:8423: checking for $cf_func in -l$cf_lib" >&5
+ cat > conftest.$ac_ext <<EOF
+#line 8425 "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()
+int x=$cf_func("")
; return 0; }
EOF
-if { (eval echo configure:7578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+ cf_result=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ cf_result=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_termlib=termcap
-else
- echo "$ac_t""no" 1>&6
-fi
-
+ echo "$ac_t""$cf_result" 1>&6
+ if test "$cf_result" = yes ; then
+ if test "$cf_func" = tigetstr ; then
+ cf_cv_termlib=terminfo
+ else
+ cf_cv_termlib=termcap
+ fi
+ break
+ fi
+ done
+ test "$cf_result" = yes && break
+ done
+ test "$cf_result" = no && LIBS="$cf_save_LIBS"
fi
if test "$cf_cv_termlib" = none; then
# allow curses library for broken AIX system.
echo $ac_n "checking for initscr in -lcurses""... $ac_c" 1>&6
-echo "configure:7602: checking for initscr in -lcurses" >&5
+echo "configure:8459: 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
@@ -7606,7 +8463,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lcurses $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7610 "configure"
+#line 8467 "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
@@ -7617,7 +8474,7 @@ int main() {
initscr()
; return 0; }
EOF
-if { (eval echo configure:7621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7638,7 +8495,7 @@ else
fi
echo $ac_n "checking for tgoto in -ltermcap""... $ac_c" 1>&6
-echo "configure:7642: checking for tgoto in -ltermcap" >&5
+echo "configure:8499: 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
@@ -7646,7 +8503,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ltermcap $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7650 "configure"
+#line 8507 "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
@@ -7657,7 +8514,7 @@ int main() {
tgoto()
; return 0; }
EOF
-if { (eval echo configure:7661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7678,70 +8535,84 @@ else
fi
fi
+
+fi
+rm -f conftest*
if test "$cf_cv_termlib" = none; then
- echo $ac_n "checking for tgoto in -ltermcap""... $ac_c" 1>&6
-echo "configure:7684: 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 "configure: warning: Cannot find -ltermlib, -lcurses, or -ltermcap" 1>&2
+fi
+
+fi
+
+cf_slang_LIBS2="$LIBS"
+echo $ac_n "checking for acos""... $ac_c" 1>&6
+echo "configure:8550: checking for acos" >&5
+if eval "test \"`echo '$''{'ac_cv_func_acos'+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 7692 "configure"
+ cat > conftest.$ac_ext <<EOF
+#line 8555 "configure"
#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char acos(); 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 tgoto();
+char acos();
int main() {
-tgoto()
+
+/* 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_acos) || defined (__stub___acos)
+choke me
+#else
+acos();
+#endif
+
; return 0; }
EOF
-if { (eval echo configure:7703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+ eval "ac_cv_func_acos=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ eval "ac_cv_func_acos=no"
fi
rm -f conftest*
-LIBS="$ac_save_LIBS"
-
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+
+if eval "test \"`echo '$ac_cv_func_'acos`\" = yes"; then
echo "$ac_t""yes" 1>&6
- LIBS="$LIBS -ltermcap" cf_cv_termlib=termcap
+ :
else
echo "$ac_t""no" 1>&6
-fi
-fi
-if test "$cf_cv_termlib" = none; then
- echo $ac_n "checking for tgoto in -lncurses""... $ac_c" 1>&6
-echo "configure:7726: checking for tgoto in -lncurses" >&5
-ac_lib_var=`echo ncurses'_'tgoto | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for acos in -lm""... $ac_c" 1>&6
+echo "configure:8597: checking for acos in -lm" >&5
+ac_lib_var=`echo m'_'acos | 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"
+LIBS="-lm $LIBS $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7734 "configure"
+#line 8605 "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();
+char acos();
int main() {
-tgoto()
+acos()
; return 0; }
EOF
-if { (eval echo configure:7745: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7756,135 +8627,184 @@ 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_termlib=ncurses
+
+
+cf_tr_func=`echo "acos" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+ cat >> confdefs.h <<EOF
+#define HAVE_$cf_tr_func 1
+EOF
+
+ ac_cv_func_acos=yes
+ if test "$cf_used_lib_m" != yes ; then cf_used_lib_m=yes; LIBS="-lm $LIBS"; fi
else
echo "$ac_t""no" 1>&6
-fi
+ ac_cv_func_acos=unknown
+ unset ac_cv_func_acos 2>/dev/null
+
fi
-fi
-rm -f conftest*
-if test "$cf_cv_termlib" = none; then
- { echo "configure: error: Can't find -ltermlib, -lcurses, or -ltermcap" 1>&2; exit 1; }
-fi
fi
-cf_slang_LIBS2="$LIBS"
-echo $ac_n "checking for acos""... $ac_c" 1>&6
-echo "configure:7777: checking for acos" >&5
-if eval "test \"`echo '$''{'ac_cv_func_acos'+set}'`\" = set"; then
+case $host_os in #(vi
+os2*)
+
+ eval 'cf_cv_have_lib_'video'=no'
+ cf_libdir=""
+ echo $ac_n "checking for v_init""... $ac_c" 1>&6
+echo "configure:8658: checking for v_init" >&5
+if eval "test \"`echo '$''{'ac_cv_func_v_init'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7782 "configure"
+#line 8663 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char acos(); below. */
+ which can conflict with char v_init(); 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 acos();
+char v_init();
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_acos) || defined (__stub___acos)
+#if defined (__stub_v_init) || defined (__stub___v_init)
choke me
#else
-acos();
+v_init();
#endif
; return 0; }
EOF
-if { (eval echo configure:7805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
- eval "ac_cv_func_acos=yes"
+ eval "ac_cv_func_v_init=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- eval "ac_cv_func_acos=no"
+ eval "ac_cv_func_v_init=no"
fi
rm -f conftest*
fi
-if eval "test \"`echo '$ac_cv_func_'acos`\" = yes"; then
+if eval "test \"`echo '$ac_cv_func_'v_init`\" = yes"; then
echo "$ac_t""yes" 1>&6
- :
+ eval 'cf_cv_have_lib_'video'=yes'
else
echo "$ac_t""no" 1>&6
-echo $ac_n "checking for acos in -lm""... $ac_c" 1>&6
-echo "configure:7824: checking for acos in -lm" >&5
-ac_lib_var=`echo m'_'acos | 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="-lm $LIBS $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 7832 "configure"
+ cf_save_LIBS="$LIBS"
+ echo $ac_n "checking for v_init in -lvideo""... $ac_c" 1>&6
+echo "configure:8706: checking for v_init in -lvideo" >&5
+ LIBS="-lvideo $LIBS"
+ cat > conftest.$ac_ext <<EOF
+#line 8709 "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 acos();
-
+#include <sys/video.h>
int main() {
-acos()
+v_init()
; return 0; }
EOF
-if { (eval echo configure:7843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+ echo "$ac_t""yes" 1>&6
+ eval 'cf_cv_have_lib_'video'=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"
+ echo "$ac_t""no" 1>&6
+ cf_search=""
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
-
-
-cf_tr_func=`echo acos | tr '[a-z]' '[A-Z]'`
+test "$libdir" != NONE && \
+test -d $libdir && \
+cf_search="$cf_search $libdir $libdir/video"
- cat >> confdefs.h <<EOF
-#define HAVE_$cf_tr_func 1
-EOF
+test "$exec_prefix" != NONE && \
+test -d $exec_prefix && \
+cf_search="$cf_search $exec_prefix/lib $exec_prefix/lib/video"
- ac_cv_func_acos=yes
- LIBS="-lm $LIBS"
+test "$prefix" != NONE && \
+test "$prefix" != "$exec_prefix" && \
+test -d $prefix && \
+cf_search="$cf_search $prefix/lib $prefix/lib/video $prefix/video/lib"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+cf_search="$cf_search /usr/local/lib /usr/local/lib/video /usr/local/video/lib"
+
+test "$prefix" != /usr && \
+cf_search="$cf_search /usr/lib /usr/lib/video /usr/video/lib"
+
+test "$prefix" != / && \
+cf_search="$cf_search /lib /lib/video /video/lib"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+cf_search="$cf_search /opt/lib /opt/lib/video /opt/video/lib"
+
+cf_search="$cf_search $HOME/lib $HOME/lib/video $HOME/video/lib"
+
+ for cf_libdir in $cf_search
+ do
+ echo $ac_n "checking for -lvideo in $cf_libdir""... $ac_c" 1>&6
+echo "configure:8760: checking for -lvideo in $cf_libdir" >&5
+ LIBS="-L$cf_libdir -lvideo $cf_save_LIBS"
+ cat > conftest.$ac_ext <<EOF
+#line 8763 "configure"
+#include "confdefs.h"
+#include <sys/video.h>
+int main() {
+v_init()
+; return 0; }
+EOF
+if { (eval echo configure:8770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ echo "$ac_t""yes" 1>&6
+ eval 'cf_cv_have_lib_'video'=yes'
+ break
else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
echo "$ac_t""no" 1>&6
-
- ac_cv_func_acos=unknown
- unset ac_cv_func_acos 2>/dev/null
-
+ LIBS="$cf_save_LIBS"
+fi
+rm -f conftest*
+ done
+
+fi
+rm -f conftest*
+
fi
+eval 'cf_found_library=$cf_cv_have_lib_'video
+if test $cf_found_library = no ; then
+ { echo "configure: error: Cannot link video library" 1>&2; exit 1; }
fi
- cf_cv_have_lib_slang=no
+ ;;
+esac
+
+ eval 'cf_cv_have_lib_'slang'=no'
cf_libdir=""
echo $ac_n "checking for SLtt_get_screen_size""... $ac_c" 1>&6
-echo "configure:7883: checking for SLtt_get_screen_size" >&5
+echo "configure:8803: 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 7888 "configure"
+#line 8808 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char SLtt_get_screen_size(); below. */
@@ -7907,7 +8827,7 @@ SLtt_get_screen_size();
; return 0; }
EOF
-if { (eval echo configure:7911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_SLtt_get_screen_size=yes"
else
@@ -7921,26 +8841,26 @@ fi
if eval "test \"`echo '$ac_cv_func_'SLtt_get_screen_size`\" = yes"; then
echo "$ac_t""yes" 1>&6
- cf_cv_have_lib_slang=yes
+ eval 'cf_cv_have_lib_'slang'=yes'
else
echo "$ac_t""no" 1>&6
cf_save_LIBS="$LIBS"
echo $ac_n "checking for SLtt_get_screen_size in -lslang""... $ac_c" 1>&6
-echo "configure:7931: checking for SLtt_get_screen_size in -lslang" >&5
+echo "configure:8851: checking for SLtt_get_screen_size in -lslang" >&5
LIBS="-lslang $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7934 "configure"
+#line 8854 "configure"
#include "confdefs.h"
#include <slang.h>
int main() {
SLtt_get_screen_size()
; return 0; }
EOF
-if { (eval echo configure:7941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
- cf_cv_have_lib_slang=yes
+ eval 'cf_cv_have_lib_'slang'=yes'
else
echo "configure: failed program was:" >&5
@@ -7948,36 +8868,53 @@ else
rm -rf conftest*
echo "$ac_t""no" 1>&6
cf_search=""
-if test -d "$libdir" ; then
-test "$libdir" != NONE && cf_search="$cf_search $libdir $libdir/slang"
-fi
-if test -d "$exec_prefix"; then
-test "$exec_prefix" != NONE && cf_search="$cf_search $exec_prefix/lib $exec_prefix/lib/slang"
-fi
-if test -d "$prefix"; then
-test "$prefix" != NONE && \
-test "$prefix" != "$exec_prefix" && cf_search="$cf_search $prefix/lib $prefix/lib/slang"
-fi
-test "$prefix" != /usr/local && cf_search="$cf_search /usr/local/lib /usr/local/lib/slang"
-test "$prefix" != /usr && cf_search="$cf_search /usr/lib /usr/lib/slang"
+
+test "$libdir" != NONE && \
+test -d $libdir && \
+cf_search="$cf_search $libdir $libdir/slang"
+
+test "$exec_prefix" != NONE && \
+test -d $exec_prefix && \
+cf_search="$cf_search $exec_prefix/lib $exec_prefix/lib/slang"
+
+test "$prefix" != NONE && \
+test "$prefix" != "$exec_prefix" && \
+test -d $prefix && \
+cf_search="$cf_search $prefix/lib $prefix/lib/slang $prefix/slang/lib"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+cf_search="$cf_search /usr/local/lib /usr/local/lib/slang /usr/local/slang/lib"
+
+test "$prefix" != /usr && \
+cf_search="$cf_search /usr/lib /usr/lib/slang /usr/slang/lib"
+
+test "$prefix" != / && \
+cf_search="$cf_search /lib /lib/slang /slang/lib"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+cf_search="$cf_search /opt/lib /opt/lib/slang /opt/slang/lib"
+
+cf_search="$cf_search $HOME/lib $HOME/lib/slang $HOME/slang/lib"
for cf_libdir in $cf_search
do
echo $ac_n "checking for -lslang in $cf_libdir""... $ac_c" 1>&6
-echo "configure:7968: checking for -lslang in $cf_libdir" >&5
+echo "configure:8905: checking for -lslang in $cf_libdir" >&5
LIBS="-L$cf_libdir -lslang $cf_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7971 "configure"
+#line 8908 "configure"
#include "confdefs.h"
#include <slang.h>
int main() {
SLtt_get_screen_size()
; return 0; }
EOF
-if { (eval echo configure:7978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
- cf_cv_have_lib_slang=yes
+ eval 'cf_cv_have_lib_'slang'=yes'
break
else
echo "configure: failed program was:" >&5
@@ -7994,18 +8931,16 @@ rm -f conftest*
fi
-if test $cf_cv_have_lib_slang = no ; then
+eval 'cf_found_library=$cf_cv_have_lib_'slang
+
+if test $cf_found_library = no ; then
{ echo "configure: error: Cannot link slang library" 1>&2; exit 1; }
fi
-case $host_os in #(vi
-linux*) # Suse Linux does not follow /usr/lib convention
- LIBS="$LIBS -L/lib"
- ;;
-esac
+
cf_slang_LIBS3="$LIBS"
echo $ac_n "checking if we can link slang without termcap""... $ac_c" 1>&6
-echo "configure:8009: checking if we can link slang without termcap" >&5
+echo "configure:8944: checking if we can link slang without termcap" >&5
if test -n "`echo $cf_slang_LIBS1 | sed -e 's/ //g'`" ; then
cf_exclude=`echo ".$cf_slang_LIBS2" | sed -e "s@$cf_slang_LIBS1@@" -e 's@^.@@'`
else
@@ -8013,14 +8948,14 @@ else
fi
LIBS=`echo ".$cf_slang_LIBS3" | sed -e "s@$cf_exclude@@" -e 's@^.@@'`
cat > conftest.$ac_ext <<EOF
-#line 8017 "configure"
+#line 8952 "configure"
#include "confdefs.h"
#include <slang.h>
int main() {
SLtt_get_screen_size()
; return 0; }
EOF
-if { (eval echo configure:8024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_result=yes
else
@@ -8033,6 +8968,49 @@ rm -f conftest*
echo "$ac_t""$cf_result" 1>&6
test $cf_result = no && LIBS="$cf_slang_LIBS3"
+
+
+
+echo $ac_n "checking if we must tell slang this is UNIX""... $ac_c" 1>&6
+echo "configure:8976: checking if we must tell slang this is UNIX" >&5
+if eval "test \"`echo '$''{'cf_cv_slang_unix'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+cat > conftest.$ac_ext <<EOF
+#line 8982 "configure"
+#include "confdefs.h"
+#include <slang.h>
+int main() {
+
+#ifdef REAL_UNIX_SYSTEM
+make an error
+#else
+extern int SLang_TT_Baud_Rate;
+SLang_TT_Baud_Rate = 1
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:8996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_slang_unix=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_slang_unix=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_slang_unix" 1>&6
+test $cf_cv_slang_unix = yes && cat >> confdefs.h <<\EOF
+#define REAL_UNIX_SYSTEM 1
+EOF
+
+
;;
esac
@@ -8040,7 +9018,7 @@ eval cf_libdir=$libdir
cf_libdir=`echo $cf_libdir | sed -e s@'^NONE/'@$prefix/@ -e s@'^NONE/'@$ac_default_prefix/@`
echo $ac_n "checking for location of config-file""... $ac_c" 1>&6
-echo "configure:8044: checking for location of config-file" >&5
+echo "configure:9022: checking for location of config-file" >&5
LYNX_CFG_FILE=$cf_libdir/lynx.cfg
cat >> confdefs.h <<EOF
#define LYNX_CFG_FILE "$LYNX_CFG_FILE"
@@ -8048,14 +9026,77 @@ EOF
echo "$ac_t""$LYNX_CFG_FILE" 1>&6
+CHARSET_DEFS=
+
+
+echo $ac_n "checking if you want only a few charsets""... $ac_c" 1>&6
+echo "configure:9034: checking if you want only a few charsets" >&5
+
+# Check whether --with-charsets or --without-charsets was given.
+if test "${with_charsets+set}" = set; then
+ withval="$with_charsets"
+ cf_charsets=$withval
+else
+ cf_charsets=
+fi
+
+
+if test -n "$cf_charsets" ; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define ALL_CHARSETS 0
+EOF
+
+ cf_min_charsets=us-ascii,iso-8859-1,utf-8
+ if test "$cf_charsets" = "no" ; then
+ cf_charsets=minimal
+ fi
+ if test "$cf_charsets" = "minimal" ; then
+ test -n "$verbose" && echo " using minimal list of charsets: $cf_min_charsets" 1>&6
+
+ fi
+ cf_charsets=`echo $cf_charsets | sed -e "s/minimal/$cf_min_charsets/g" -e 's/,/ /g'`
+ for cf_charset in $cf_charsets
+ do
+ cf_def_charset=`echo $cf_charset | sed -e 's/+/_/g' -e 's/-/_/g'`
+ cf_use_charset=no
+ # check charsets that are defined via .tbl files
+ if ( egrep '^M'$cf_charset'$' $srcdir/src/chrtrans/*.tbl 2>/dev/null >/dev/null )
+ then
+ cf_use_charset=yes
+ # check charsets that are "built-in"
+ else
+ for cf_tst_charset in big5 euc_cn euc_jp euc_kr shift_jis x_transparent
+ do
+ if test "$cf_tst_charset" = "$cf_def_charset"
+ then
+ cf_use_charset=yes
+ break
+ fi
+ done
+ fi
+ if test $cf_use_charset=yes
+ then
+ test -n "$verbose" && echo " found $cf_charset" 1>&6
+
+ CHARSET_DEFS="-DNO_CHARSET_${cf_def_charset}=0 $CHARSET_DEFS"
+ else
+ test -n "$verbose" && echo " not found $cf_charset" 1>&6
+
+ fi
+ done
+else
+ echo "$ac_t""no" 1>&6
+fi
+
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:8054: checking for ANSI C header files" >&5
+echo "configure:9095: 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 8059 "configure"
+#line 9100 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -8063,7 +9104,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8067: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9108: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8080,7 +9121,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 8084 "configure"
+#line 9125 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -8098,7 +9139,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 8102 "configure"
+#line 9143 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -8119,7 +9160,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 8123 "configure"
+#line 9164 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -8130,7 +9171,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
-if { (eval echo configure:8134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -8154,12 +9195,12 @@ EOF
fi
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:8158: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:9199: 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 8163 "configure"
+#line 9204 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/time.h>
@@ -8168,7 +9209,7 @@ int main() {
struct tm *tp;
; return 0; }
EOF
-if { (eval echo configure:8172: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9213: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_time=yes
else
@@ -8193,12 +9234,12 @@ 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:8197: checking for $ac_hdr that defines DIR" >&5
+echo "configure:9238: 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 8202 "configure"
+#line 9243 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_hdr>
@@ -8206,7 +9247,7 @@ int main() {
DIR *dirp = 0;
; return 0; }
EOF
-if { (eval echo configure:8210: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9251: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "ac_cv_header_dirent_$ac_safe=yes"
else
@@ -8231,7 +9272,7 @@ done
# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
if test $ac_header_dirent = dirent.h; then
echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:8235: checking for opendir in -ldir" >&5
+echo "configure:9276: 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
@@ -8239,7 +9280,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldir $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 8243 "configure"
+#line 9284 "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
@@ -8250,7 +9291,7 @@ int main() {
opendir()
; return 0; }
EOF
-if { (eval echo configure:8254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -8272,7 +9313,7 @@ fi
else
echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:8276: checking for opendir in -lx" >&5
+echo "configure:9317: 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
@@ -8280,7 +9321,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lx $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 8284 "configure"
+#line 9325 "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
@@ -8291,7 +9332,7 @@ int main() {
opendir()
; return 0; }
EOF
-if { (eval echo configure:8295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -8314,6 +9355,7 @@ fi
fi
for ac_hdr in \
+ arpa/inet.h \
fcntl.h \
limits.h \
stdlib.h \
@@ -8322,25 +9364,28 @@ for ac_hdr in \
sys/filio.h \
sys/ioctl.h \
sys/param.h \
+ sys/timeb.h \
sys/time.h \
+ syslog.h \
termio.h \
termios.h \
unistd.h \
+ vfork.h \
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8334: checking for $ac_hdr" >&5
+echo "configure:9379: 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 8339 "configure"
+#line 9384 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8344: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9389: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8368,13 +9413,13 @@ done
echo $ac_n "checking termio.h and termios.h""... $ac_c" 1>&6
-echo "configure:8372: checking termio.h and termios.h" >&5
+echo "configure:9417: 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 8378 "configure"
+#line 9423 "configure"
#include "confdefs.h"
#if HAVE_TERMIO_H
@@ -8387,7 +9432,7 @@ int main() {
putchar (0x0a)
; return 0; }
EOF
-if { (eval echo configure:8391: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9436: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_termio_and_termios=yes
else
@@ -8406,21 +9451,63 @@ EOF
+echo $ac_n "checking for sigaction and structs""... $ac_c" 1>&6
+echo "configure:9456: checking for sigaction and structs" >&5
+if eval "test \"`echo '$''{'cf_cv_func_sigaction'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+cat > conftest.$ac_ext <<EOF
+#line 9462 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <signal.h>
+int main() {
+struct sigaction act;
+ act.sa_handler = SIG_DFL;
+#ifdef SA_RESTART
+ act.sa_flags |= SA_RESTART;
+#endif /* SA_RESTART */
+ sigaction(1, &act, 0);
+
+; return 0; }
+EOF
+if { (eval echo configure:9477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_func_sigaction=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_func_sigaction=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_func_sigaction" 1>&6
+test "$cf_cv_func_sigaction" = yes && cat >> confdefs.h <<\EOF
+#define HAVE_SIGACTION 1
+EOF
+
+
+
for ac_hdr in sys/wait.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8414: checking for $ac_hdr" >&5
+echo "configure:9501: 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 8419 "configure"
+#line 9506 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8424: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9511: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8457,17 +9544,17 @@ for ac_hdr in wait.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8461: checking for $ac_hdr" >&5
+echo "configure:9548: 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 8466 "configure"
+#line 9553 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8471: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9558: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8497,17 +9584,17 @@ for ac_hdr in waitstatus.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8501: checking for $ac_hdr" >&5
+echo "configure:9588: 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 8506 "configure"
+#line 9593 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8511: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9598: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8548,13 +9635,13 @@ fi
echo $ac_n "checking for union wait""... $ac_c" 1>&6
-echo "configure:8552: checking for union wait" >&5
+echo "configure:9639: checking for union wait" >&5
if eval "test \"`echo '$''{'cf_cv_type_unionwait'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8558 "configure"
+#line 9645 "configure"
#include "confdefs.h"
$cf_wait_headers
int main() {
@@ -8565,7 +9652,7 @@ int x;
; return 0; }
EOF
-if { (eval echo configure:8569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9656: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_type_unionwait=no
echo compiles ok w/o union wait 1>&5
@@ -8576,7 +9663,7 @@ else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 8580 "configure"
+#line 9667 "configure"
#include "confdefs.h"
$cf_wait_headers
int main() {
@@ -8591,7 +9678,7 @@ union wait x;
; return 0; }
EOF
-if { (eval echo configure:8595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_type_unionwait=yes
echo compiles ok with union wait and possibly macros too 1>&5
@@ -8618,20 +9705,20 @@ EOF
if test $cf_cv_type_unionwait = yes; then
echo $ac_n "checking if union wait can be used as wait-arg""... $ac_c" 1>&6
-echo "configure:8622: checking if union wait can be used as wait-arg" >&5
+echo "configure:9709: checking if union wait can be used as wait-arg" >&5
if eval "test \"`echo '$''{'cf_cv_arg_union_wait'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8628 "configure"
+#line 9715 "configure"
#include "confdefs.h"
$cf_wait_headers
int main() {
union wait x; wait(&x)
; return 0; }
EOF
-if { (eval echo configure:8635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9722: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_arg_union_wait=yes
else
@@ -8651,20 +9738,20 @@ EOF
echo $ac_n "checking if union wait can be used as waitpid-arg""... $ac_c" 1>&6
-echo "configure:8655: checking if union wait can be used as waitpid-arg" >&5
+echo "configure:9742: checking if union wait can be used as waitpid-arg" >&5
if eval "test \"`echo '$''{'cf_cv_arg_union_waitpid'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8661 "configure"
+#line 9748 "configure"
#include "confdefs.h"
$cf_wait_headers
int main() {
union wait x; waitpid(0, &x, 0)
; return 0; }
EOF
-if { (eval echo configure:8668: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9755: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_arg_union_waitpid=yes
else
@@ -8690,17 +9777,17 @@ for ac_hdr in stdarg.h varargs.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8694: checking for $ac_hdr" >&5
+echo "configure:9781: 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 8699 "configure"
+#line 9786 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8704: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8727,13 +9814,13 @@ fi
done
echo $ac_n "checking for standard varargs""... $ac_c" 1>&6
-echo "configure:8731: checking for standard varargs" >&5
+echo "configure:9818: checking for standard varargs" >&5
if eval "test \"`echo '$''{'cf_cv_ansi_varargs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8737 "configure"
+#line 9824 "configure"
#include "confdefs.h"
#if HAVE_STDARG_H
@@ -8748,7 +9835,7 @@ int main() {
return 0;} int foo(char *fmt,...){va_list args;va_start(args,fmt);va_end(args)
; return 0; }
EOF
-if { (eval echo configure:8752: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9839: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_ansi_varargs=yes
else
@@ -8768,12 +9855,12 @@ EOF
echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:8772: checking for uid_t in sys/types.h" >&5
+echo "configure:9859: checking for uid_t in sys/types.h" >&5
if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8777 "configure"
+#line 9864 "configure"
#include "confdefs.h"
#include <sys/types.h>
EOF
@@ -8802,7 +9889,7 @@ EOF
fi
echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6
-echo "configure:8806: checking type of array argument to getgroups" >&5
+echo "configure:9893: checking type of array argument to getgroups" >&5
if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8810,7 +9897,7 @@ else
ac_cv_type_getgroups=cross
else
cat > conftest.$ac_ext <<EOF
-#line 8814 "configure"
+#line 9901 "configure"
#include "confdefs.h"
/* Thanks to Mike Rendell for this test. */
@@ -8835,7 +9922,7 @@ main()
}
EOF
-if { (eval echo configure:8839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_type_getgroups=gid_t
else
@@ -8849,7 +9936,7 @@ fi
if test $ac_cv_type_getgroups = cross; then
cat > conftest.$ac_ext <<EOF
-#line 8853 "configure"
+#line 9940 "configure"
#include "confdefs.h"
#include <unistd.h>
EOF
@@ -8873,12 +9960,12 @@ EOF
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:8877: checking for pid_t" >&5
+echo "configure:9964: 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 8882 "configure"
+#line 9969 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -8906,12 +9993,12 @@ EOF
fi
echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:8910: checking for uid_t in sys/types.h" >&5
+echo "configure:9997: checking for uid_t in sys/types.h" >&5
if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8915 "configure"
+#line 10002 "configure"
#include "confdefs.h"
#include <sys/types.h>
EOF
@@ -8940,12 +10027,12 @@ EOF
fi
echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:8944: checking for mode_t" >&5
+echo "configure:10031: checking for mode_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8949 "configure"
+#line 10036 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -8976,17 +10063,17 @@ fi
ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
-echo "configure:8980: checking for vfork.h" >&5
+echo "configure:10067: 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 8985 "configure"
+#line 10072 "configure"
#include "confdefs.h"
#include <vfork.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8990: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10077: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -9011,18 +10098,18 @@ else
fi
echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:9015: checking for working vfork" >&5
+echo "configure:10102: 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:9021: checking for vfork" >&5
+echo "configure:10108: 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 9026 "configure"
+#line 10113 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char vfork(); below. */
@@ -9045,7 +10132,7 @@ vfork();
; return 0; }
EOF
-if { (eval echo configure:9049: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_vfork=yes"
else
@@ -9067,7 +10154,7 @@ fi
ac_cv_func_vfork_works=$ac_cv_func_vfork
else
cat > conftest.$ac_ext <<EOF
-#line 9071 "configure"
+#line 10158 "configure"
#include "confdefs.h"
/* Thanks to Paul Eggert for this test. */
#include <stdio.h>
@@ -9162,7 +10249,7 @@ main() {
}
}
EOF
-if { (eval echo configure:9166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_vfork_works=yes
else
@@ -9186,13 +10273,13 @@ fi
echo $ac_n "checking if we should use fcntl or ioctl""... $ac_c" 1>&6
-echo "configure:9190: checking if we should use fcntl or ioctl" >&5
+echo "configure:10277: checking if we should use fcntl or ioctl" >&5
if eval "test \"`echo '$''{'cf_cv_fionbio'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9196 "configure"
+#line 10283 "configure"
#include "confdefs.h"
#include <sys/types.h>
@@ -9204,7 +10291,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:9208: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_fionbio=ioctl
else
@@ -9213,7 +10300,7 @@ else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 9217 "configure"
+#line 10304 "configure"
#include "confdefs.h"
#include <sys/types.h>
@@ -9230,7 +10317,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:9234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_fionbio=fcntl
else
@@ -9253,20 +10340,20 @@ EOF
echo $ac_n "checking for broken/missing definition of remove""... $ac_c" 1>&6
-echo "configure:9257: checking for broken/missing definition of remove" >&5
+echo "configure:10344: 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 9263 "configure"
+#line 10350 "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
remove("dummy")
; return 0; }
EOF
-if { (eval echo configure:9270: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_baddef_remove=no
else
@@ -9274,7 +10361,7 @@ else
cat conftest.$ac_ext >&5
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 9278 "configure"
+#line 10365 "configure"
#include "confdefs.h"
#include <stdio.h>
int __unlink(name) { return unlink(name); }
@@ -9282,7 +10369,7 @@ int main() {
remove("dummy")
; return 0; }
EOF
-if { (eval echo configure:9286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_baddef_remove=yes
else
@@ -9306,13 +10393,13 @@ EOF
echo $ac_n "checking for lstat""... $ac_c" 1>&6
-echo "configure:9310: checking for lstat" >&5
+echo "configure:10397: checking for lstat" >&5
if eval "test \"`echo '$''{'ac_cv_func_lstat'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9316 "configure"
+#line 10403 "configure"
#include "confdefs.h"
#include <sys/types.h>
@@ -9321,7 +10408,7 @@ int main() {
lstat(".", (struct stat *)0)
; return 0; }
EOF
-if { (eval echo configure:9325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10412: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_lstat=yes
else
@@ -9344,24 +10431,32 @@ fi
for ac_func in \
cuserid \
+ ftime \
getcwd \
getgroups \
gettimeofday \
+ getuid \
+ mkstemp \
+ mktemp \
popen \
putenv \
readdir \
+ setuid \
strerror \
+ truncate \
+ ttyname \
unsetenv \
+ vasprintf \
waitpid \
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9360: checking for $ac_func" >&5
+echo "configure:10455: 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 9365 "configure"
+#line 10460 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -9384,7 +10479,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:9388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -9414,12 +10509,12 @@ for ac_func in \
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9418: checking for $ac_func" >&5
+echo "configure:10513: 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 9423 "configure"
+#line 10518 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -9442,7 +10537,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:9446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -9469,16 +10564,121 @@ done
+
+echo $ac_n "checking for random-integer functions""... $ac_c" 1>&6
+echo "configure:10570: checking for random-integer functions" >&5
+if eval "test \"`echo '$''{'cf_cv_srand_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+cf_cv_srand_func=unknown
+for cf_func in srand48/lrand48 srandom/random srand/rand
+do
+ cf_srand_func=`echo $cf_func | sed -e 's@/.*@@'`
+ cf_rand_func=`echo $cf_func | sed -e 's@.*/@@'`
+cat > conftest.$ac_ext <<EOF
+#line 10581 "configure"
+#include "confdefs.h"
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+int main() {
+long seed = 1; $cf_srand_func(seed); seed = $cf_rand_func()
+; return 0; }
+EOF
+if { (eval echo configure:10595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_srand_func=$cf_func
+ break
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+
+fi
+
+echo "$ac_t""$cf_cv_srand_func" 1>&6
+if test "$cf_cv_srand_func" != unknown ; then
+ echo $ac_n "checking for range of random-integers""... $ac_c" 1>&6
+echo "configure:10611: checking for range of random-integers" >&5
+if eval "test \"`echo '$''{'cf_cv_rand_max'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ case $cf_cv_srand_func in
+ srand/rand)
+ cf_cv_rand_max=RAND_MAX
+ cf_rand_max=16
+ ;;
+ *)
+ cf_cv_rand_max=INT_MAX
+ cf_rand_max=31
+ ;;
+ esac
+ cat > conftest.$ac_ext <<EOF
+#line 10627 "configure"
+#include "confdefs.h"
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+int main() {
+long x = $cf_cv_rand_max
+; return 0; }
+EOF
+if { (eval echo configure:10641: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_rand_max="(1L<<$cf_rand_max)-1"
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_rand_max" 1>&6
+ cf_srand_func=`echo $cf_func | sed -e 's@/.*@@'`
+ cf_rand_func=`echo $cf_func | sed -e 's@.*/@@'`
+
+cf_rand_max=`echo "lynx_rand_max" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+ cat >> confdefs.h <<EOF
+#define lynx_srand $cf_srand_func
+EOF
+
+ cat >> confdefs.h <<EOF
+#define lynx_rand $cf_rand_func
+EOF
+
+ cat >> confdefs.h <<EOF
+#define $cf_rand_max $cf_cv_rand_max
+EOF
+
+fi
+
for ac_func in strstr
do
echo $ac_n "checking for $ac_func declaration""... $ac_c" 1>&6
-echo "configure:9477: checking for $ac_func declaration" >&5
+echo "configure:10677: checking for $ac_func declaration" >&5
if eval "test \"`echo '$''{'ac_cv_func_decl_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9482 "configure"
+#line 10682 "configure"
#include "confdefs.h"
#include <string.h>
int main() {
@@ -9487,11 +10687,11 @@ extern int ${ac_func}();
#endif
; return 0; }
EOF
-if { (eval echo configure:9491: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10691: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 9495 "configure"
+#line 10695 "configure"
#include "confdefs.h"
#include <string.h>
int main() {
@@ -9500,7 +10700,7 @@ int (*p)() = ${ac_func};
#endif
; return 0; }
EOF
-if { (eval echo configure:9504: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10704: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "ac_cv_func_decl_$ac_func=yes"
@@ -9529,7 +10729,7 @@ else
echo "$ac_t""no" 1>&6
-ac_tr_func=`echo DECL_$ac_func | tr '[a-z]' '[A-Z]'`
+ac_tr_func=`echo "DECL_$ac_func" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
@@ -9542,12 +10742,12 @@ for ac_func in getgrgid getgrnam
do
echo $ac_n "checking for $ac_func declaration""... $ac_c" 1>&6
-echo "configure:9546: checking for $ac_func declaration" >&5
+echo "configure:10746: checking for $ac_func declaration" >&5
if eval "test \"`echo '$''{'ac_cv_func_decl_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9551 "configure"
+#line 10751 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -9558,11 +10758,11 @@ extern int ${ac_func}();
#endif
; return 0; }
EOF
-if { (eval echo configure:9562: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10762: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 9566 "configure"
+#line 10766 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -9573,7 +10773,7 @@ int (*p)() = ${ac_func};
#endif
; return 0; }
EOF
-if { (eval echo configure:9577: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "ac_cv_func_decl_$ac_func=yes"
@@ -9602,7 +10802,7 @@ else
echo "$ac_t""no" 1>&6
-ac_tr_func=`echo DECL_$ac_func | tr '[a-z]' '[A-Z]'`
+ac_tr_func=`echo "DECL_$ac_func" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
@@ -9615,13 +10815,13 @@ done
echo $ac_n "checking if TRUE/FALSE are defined""... $ac_c" 1>&6
-echo "configure:9619: checking if TRUE/FALSE are defined" >&5
+echo "configure:10819: checking if TRUE/FALSE are defined" >&5
if eval "test \"`echo '$''{'cf_cv_bool_defs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9625 "configure"
+#line 10825 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
@@ -9630,7 +10830,7 @@ int main() {
int x = TRUE, y = FALSE
; return 0; }
EOF
-if { (eval echo configure:9634: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10834: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_bool_defs=yes
else
@@ -9657,16 +10857,16 @@ fi
echo $ac_n "checking if external errno is declared""... $ac_c" 1>&6
-echo "configure:9661: checking if external errno is declared" >&5
+echo "configure:10861: checking if external errno is declared" >&5
if eval "test \"`echo '$''{'cf_cv_dcl_errno'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9667 "configure"
+#line 10867 "configure"
#include "confdefs.h"
-#if HAVE_STDLIB_H
+#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <stdio.h>
@@ -9676,7 +10876,7 @@ int main() {
long x = (long) errno
; return 0; }
EOF
-if { (eval echo configure:9680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval 'cf_cv_dcl_'errno'=yes'
else
@@ -9696,7 +10896,7 @@ echo "$ac_t""$cf_result" 1>&6
if test "$cf_result" = no ; then
eval 'cf_result=DECL_'errno
-cf_result=`echo $cf_result | tr '[a-z]' '[A-Z]'`
+cf_result=`echo "$cf_result" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define $cf_result 1
@@ -9707,13 +10907,13 @@ fi
# It's possible (for near-UNIX clones) that the data doesn't exist
echo $ac_n "checking if external errno exists""... $ac_c" 1>&6
-echo "configure:9711: checking if external errno exists" >&5
+echo "configure:10911: checking if external errno exists" >&5
if eval "test \"`echo '$''{'cf_cv_have_errno'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9717 "configure"
+#line 10917 "configure"
#include "confdefs.h"
#undef errno
@@ -9723,7 +10923,7 @@ int main() {
errno = 2
; return 0; }
EOF
-if { (eval echo configure:9727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval 'cf_cv_have_'errno'=yes'
else
@@ -9742,7 +10942,7 @@ echo "$ac_t""$cf_result" 1>&6
if test "$cf_result" = yes ; then
eval 'cf_result=HAVE_'errno
-cf_result=`echo $cf_result | tr '[a-z]' '[A-Z]'`
+cf_result=`echo "$cf_result" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define $cf_result 1
@@ -9754,21 +10954,80 @@ fi
+echo $ac_n "checking if we can set errno""... $ac_c" 1>&6
+echo "configure:10959: checking if we can set errno" >&5
+if eval "test \"`echo '$''{'cf_cv_set_errno'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+if test "$cross_compiling" = yes; then
+ cat > conftest.$ac_ext <<EOF
+#line 10966 "configure"
+#include "confdefs.h"
+#include <errno.h>
+int main() {
+errno = 255
+; return 0; }
+EOF
+if { (eval echo configure:10973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_set_errno=maybe
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_set_errno=no
+fi
+rm -f conftest*
+else
+ cat > conftest.$ac_ext <<EOF
+#line 10985 "configure"
+#include "confdefs.h"
+
+#include <errno.h>
+int main()
+{
+ errno = 255;
+ exit(errno != 255);
+}
+EOF
+if { (eval echo configure:10995: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ cf_cv_set_errno=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ cf_cv_set_errno=no
+fi
+rm -fr conftest*
+fi
+
+
+fi
+
+echo "$ac_t""$cf_cv_set_errno" 1>&6
+test "$cf_cv_set_errno" != no && cat >> confdefs.h <<\EOF
+#define CAN_SET_ERRNO 1
+EOF
+
+
+
echo $ac_n "checking for setlocale()""... $ac_c" 1>&6
-echo "configure:9759: checking for setlocale()" >&5
+echo "configure:11018: 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 9765 "configure"
+#line 11024 "configure"
#include "confdefs.h"
#include <locale.h>
int main() {
setlocale(LC_ALL, "")
; return 0; }
EOF
-if { (eval echo configure:9772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11031: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_locale=yes
else
@@ -9789,13 +11048,13 @@ EOF
echo $ac_n "checking if NGROUPS is defined""... $ac_c" 1>&6
-echo "configure:9793: checking if NGROUPS is defined" >&5
+echo "configure:11052: checking if NGROUPS is defined" >&5
if eval "test \"`echo '$''{'cf_cv_ngroups'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9799 "configure"
+#line 11058 "configure"
#include "confdefs.h"
#if HAVE_SYS_PARAM_H
@@ -9809,7 +11068,7 @@ int main() {
int x = NGROUPS
; return 0; }
EOF
-if { (eval echo configure:9813: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11072: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_ngroups=yes
else
@@ -9817,7 +11076,7 @@ else
cat conftest.$ac_ext >&5
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 9821 "configure"
+#line 11080 "configure"
#include "confdefs.h"
#if HAVE_SYS_PARAM_H
@@ -9831,7 +11090,7 @@ int main() {
int x = NGROUPS_MAX
; return 0; }
EOF
-if { (eval echo configure:9835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11094: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_ngroups=NGROUPS_MAX
else
@@ -9865,16 +11124,16 @@ for cf_name in sys_nerr sys_errlist
do
echo $ac_n "checking if external $cf_name is declared""... $ac_c" 1>&6
-echo "configure:9869: checking if external $cf_name is declared" >&5
+echo "configure:11128: checking if external $cf_name is declared" >&5
if eval "test \"`echo '$''{'cf_cv_dcl_$cf_name'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9875 "configure"
+#line 11134 "configure"
#include "confdefs.h"
-#if HAVE_STDLIB_H
+#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <stdio.h>
@@ -9884,7 +11143,7 @@ int main() {
long x = (long) $cf_name
; return 0; }
EOF
-if { (eval echo configure:9888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11147: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval 'cf_cv_dcl_'$cf_name'=yes'
else
@@ -9904,7 +11163,7 @@ echo "$ac_t""$cf_result" 1>&6
if test "$cf_result" = no ; then
eval 'cf_result=DECL_'$cf_name
-cf_result=`echo $cf_result | tr '[a-z]' '[A-Z]'`
+cf_result=`echo "$cf_result" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define $cf_result 1
@@ -9915,13 +11174,13 @@ fi
# It's possible (for near-UNIX clones) that the data doesn't exist
echo $ac_n "checking if external $cf_name exists""... $ac_c" 1>&6
-echo "configure:9919: checking if external $cf_name exists" >&5
+echo "configure:11178: checking if external $cf_name exists" >&5
if eval "test \"`echo '$''{'cf_cv_have_$cf_name'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9925 "configure"
+#line 11184 "configure"
#include "confdefs.h"
#undef $cf_name
@@ -9931,7 +11190,7 @@ int main() {
$cf_name = 2
; return 0; }
EOF
-if { (eval echo configure:9935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval 'cf_cv_have_'$cf_name'=yes'
else
@@ -9950,7 +11209,7 @@ echo "$ac_t""$cf_result" 1>&6
if test "$cf_result" = yes ; then
eval 'cf_result=HAVE_'$cf_name
-cf_result=`echo $cf_result | tr '[a-z]' '[A-Z]'`
+cf_result=`echo "$cf_result" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define $cf_result 1
@@ -9963,72 +11222,430 @@ fi
done
-echo $ac_n "checking if struct utmp is declared""... $ac_c" 1>&6
-echo "configure:9968: checking if struct utmp is declared" >&5
+for ac_hdr in lastlog.h paths.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:11230: 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 11235 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:11240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ 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 for lastlog path""... $ac_c" 1>&6
+echo "configure:11267: checking for lastlog path" >&5
+if eval "test \"`echo '$''{'cf_cv_path_lastlog'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+cat > conftest.$ac_ext <<EOF
+#line 11273 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#ifdef HAVE_LASTLOG_H
+#include <lastlog.h>
+#else
+#ifdef HAVE_PATHS_H
+#include <paths.h>
+#endif
+#endif
+int main() {
+char *path = _PATH_LASTLOG
+; return 0; }
+EOF
+if { (eval echo configure:11288: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_path_lastlog="_PATH_LASTLOG"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ if test -f /usr/adm/lastlog ; then
+ cf_cv_path_lastlog=/usr/adm/lastlog
+ else
+ cf_cv_path_lastlog=no
+ fi
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_path_lastlog" 1>&6
+test $cf_cv_path_lastlog != no && cat >> confdefs.h <<\EOF
+#define USE_LASTLOG 1
+EOF
+
+
+
+
+
+echo $ac_n "checking for utmp implementation""... $ac_c" 1>&6
+echo "configure:11315: checking for utmp implementation" >&5
if eval "test \"`echo '$''{'cf_cv_have_utmp'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
+ cf_cv_have_utmp=no
+for cf_header in utmpx utmp ; do
cat > conftest.$ac_ext <<EOF
-#line 9974 "configure"
+#line 11323 "configure"
#include "confdefs.h"
#include <sys/types.h>
-#include <utmp.h>
+#include <${cf_header}.h>
+#define getutent getutxent
+#ifdef USE_LASTLOG
+#include <lastlog.h> /* may conflict with utmpx.h on Linux */
+#endif
+
int main() {
-struct utmp x; char *y = &x.ut_host[0]
+struct $cf_header x;
+ char *name = x.ut_name; /* utmp.h and compatible definitions */
+
; return 0; }
EOF
-if { (eval echo configure:9983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11339: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- cf_cv_have_utmp=yes
+ cf_cv_have_utmp=$cf_header
+ break
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- cat > conftest.$ac_ext <<EOF
-#line 9991 "configure"
+
+ cat > conftest.$ac_ext <<EOF
+#line 11349 "configure"
#include "confdefs.h"
-#include <utmpx.h>
+
+#include <sys/types.h>
+#include <${cf_header}.h>
+#define getutent getutxent
+#ifdef USE_LASTLOG
+#include <lastlog.h> /* may conflict with utmpx.h on Linux */
+#endif
+
int main() {
-struct utmpx x; char *y = &x.ut_host[0]
+struct $cf_header x;
+ char *name = x.ut_user; /* utmpx.h must declare this */
+
; return 0; }
EOF
-if { (eval echo configure:9998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11365: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- cf_cv_have_utmp=utmpx
+ cf_cv_have_utmp=$cf_header
+ cat >> confdefs.h <<\EOF
+#define ut_name ut_user
+EOF
+
+ break
+
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*
-
+done
+
fi
echo "$ac_t""$cf_cv_have_utmp" 1>&6
-test $cf_cv_have_utmp != no && cat >> confdefs.h <<\EOF
+
+if test $cf_cv_have_utmp != no ; then
+ cat >> confdefs.h <<\EOF
#define HAVE_UTMP 1
EOF
-test $cf_cv_have_utmp = utmpx && cat >> confdefs.h <<\EOF
+ test $cf_cv_have_utmp = utmpx && cat >> confdefs.h <<\EOF
#define UTMPX_FOR_UTMP 1
EOF
+
+
+if test $cf_cv_have_utmp != no ; then
+echo $ac_n "checking if utmp.ut_host is declared""... $ac_c" 1>&6
+echo "configure:11400: checking if utmp.ut_host is declared" >&5
+if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_host'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cat > conftest.$ac_ext <<EOF
+#line 11406 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>
+int main() {
+struct $cf_cv_have_utmp x; char *y = &x.ut_host[0]
+; return 0; }
+EOF
+if { (eval echo configure:11415: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_have_utmp_ut_host=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_have_utmp_ut_host=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_have_utmp_ut_host" 1>&6
+test $cf_cv_have_utmp_ut_host != no && cat >> confdefs.h <<\EOF
+#define HAVE_UTMP_UT_HOST 1
+EOF
+
+fi
+
+
+
+if test $cf_cv_have_utmp != no ; then
+echo $ac_n "checking for exit-status in $cf_cv_have_utmp""... $ac_c" 1>&6
+echo "configure:11439: checking for exit-status in $cf_cv_have_utmp" >&5
+if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_xstatus'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+for cf_result in \
+ ut_exit.__e_exit \
+ ut_exit.e_exit \
+ ut_exit.ut_e_exit \
+ ut_exit.ut_exit
+do
+cat > conftest.$ac_ext <<EOF
+#line 11451 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>
+int main() {
+struct $cf_cv_have_utmp x; long y = x.$cf_result = 0
+; return 0; }
+EOF
+if { (eval echo configure:11460: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_have_utmp_ut_xstatus=$cf_result
+ break
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_have_utmp_ut_xstatus=no
+fi
+rm -f conftest*
+done
+
+fi
+
+echo "$ac_t""$cf_cv_have_utmp_ut_xstatus" 1>&6
+if test $cf_cv_have_utmp_ut_xstatus != no ; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_UTMP_UT_XSTATUS 1
+EOF
+
+ cat >> confdefs.h <<EOF
+#define ut_xstatus $cf_cv_have_utmp_ut_xstatus
+EOF
+
+fi
+fi
+
+
+
+if test $cf_cv_have_utmp != no ; then
+echo $ac_n "checking if utmp.ut_xtime is declared""... $ac_c" 1>&6
+echo "configure:11492: checking if utmp.ut_xtime is declared" >&5
+if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_xtime'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cat > conftest.$ac_ext <<EOF
+#line 11498 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>
+int main() {
+struct $cf_cv_have_utmp x; long y = x.ut_xtime = 0
+; return 0; }
+EOF
+if { (eval echo configure:11507: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_have_utmp_ut_xtime=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cat > conftest.$ac_ext <<EOF
+#line 11515 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>
+int main() {
+struct $cf_cv_have_utmp x; long y = x.ut_tv.tv_sec
+; return 0; }
+EOF
+if { (eval echo configure:11524: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_have_utmp_ut_xtime=define
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_have_utmp_ut_xtime=no
+fi
+rm -f conftest*
+
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_have_utmp_ut_xtime" 1>&6
+if test $cf_cv_have_utmp_ut_xtime != no ; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_UTMP_UT_XTIME 1
+EOF
+
+ if test $cf_cv_have_utmp_ut_xtime = define ; then
+ cat >> confdefs.h <<\EOF
+#define ut_xtime ut_tv.tv_sec
+EOF
+
+ fi
+fi
+fi
+
+
+
+if test $cf_cv_have_utmp != no ; then
+echo $ac_n "checking if utmp.ut_session is declared""... $ac_c" 1>&6
+echo "configure:11559: checking if utmp.ut_session is declared" >&5
+if eval "test \"`echo '$''{'cf_cv_have_utmp_ut_session'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cat > conftest.$ac_ext <<EOF
+#line 11565 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>
+int main() {
+struct $cf_cv_have_utmp x; long y = x.ut_session
+; return 0; }
+EOF
+if { (eval echo configure:11574: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_have_utmp_ut_session=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_have_utmp_ut_session=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_have_utmp_ut_session" 1>&6
+if test $cf_cv_have_utmp_ut_session != no ; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_UTMP_UT_SESSION 1
+EOF
+
+fi
+fi
+
+
+
+echo $ac_n "checking if $cf_cv_have_utmp is SYSV flavor""... $ac_c" 1>&6
+echo "configure:11599: checking if $cf_cv_have_utmp is SYSV flavor" >&5
+if eval "test \"`echo '$''{'cf_cv_sysv_utmp'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+test "$cf_cv_have_utmp" = "utmp" && cf_prefix="ut" || cf_prefix="utx"
+cat > conftest.$ac_ext <<EOF
+#line 11606 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <${cf_cv_have_utmp}.h>
+int main() {
+
+struct $cf_cv_have_utmp x;
+ set${cf_prefix}ent ();
+ get${cf_prefix}id(&x);
+ put${cf_prefix}line(&x);
+ end${cf_prefix}ent();
+; return 0; }
+EOF
+if { (eval echo configure:11620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_sysv_utmp=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_sysv_utmp=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_sysv_utmp" 1>&6
+test $cf_cv_sysv_utmp = yes && cat >> confdefs.h <<\EOF
+#define USE_SYSV_UTMP 1
+EOF
+
+
+fi
echo $ac_n "checking if external h_errno exists""... $ac_c" 1>&6
-echo "configure:10026: checking if external h_errno exists" >&5
+echo "configure:11643: checking if external h_errno exists" >&5
if eval "test \"`echo '$''{'cf_cv_have_h_errno'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10032 "configure"
+#line 11649 "configure"
#include "confdefs.h"
#undef h_errno
@@ -10038,7 +11655,7 @@ int main() {
h_errno = 2
; return 0; }
EOF
-if { (eval echo configure:10042: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval 'cf_cv_have_'h_errno'=yes'
else
@@ -10057,7 +11674,7 @@ echo "$ac_t""$cf_result" 1>&6
if test "$cf_result" = yes ; then
eval 'cf_result=HAVE_'h_errno
-cf_result=`echo $cf_result | tr '[a-z]' '[A-Z]'`
+cf_result=`echo "$cf_result" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
cat >> confdefs.h <<EOF
#define $cf_result 1
@@ -10067,62 +11684,53 @@ fi
-
-echo $ac_n "checking if character set is EBCDIC""... $ac_c" 1>&6
-echo "configure:10073: checking if character set is EBCDIC" >&5
-if eval "test \"`echo '$''{'cf_cv_ebcdic'+set}'`\" = set"; then
+### These tests must be run after establishing the curses library.
+if test $cf_cv_screen != slang ; then
+ if test $cf_cv_screen != pdcurses ; then
+ for ac_hdr in ncurses/term.h term.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:11695: 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 10079 "configure"
+ cat > conftest.$ac_ext <<EOF
+#line 11700 "configure"
#include "confdefs.h"
-
-int main() {
- /* TryCompile function for CharSet.
- Treat any failure as ASCII for compatibility with existing art.
- Use compile-time rather than run-time tests for cross-compiler
- tolerance. */
-#if '0'!=240
-make an error "Character set is not EBCDIC"
-#endif
-; return 0; }
+#include <$ac_hdr>
EOF
-if { (eval echo configure:10092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:11705: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
rm -rf conftest*
- # TryCompile action if true
-cf_cv_ebcdic=yes
+ 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*
- # TryCompile action if false
-cf_cv_ebcdic=no
+ eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
-# end of TryCompile
fi
-
-# end of CacheVal CvEbcdic
-echo "$ac_t""$cf_cv_ebcdic" 1>&6
-case "$cf_cv_ebcdic" in #(vi
- yes) cat >> confdefs.h <<\EOF
-#define EBCDIC 1
-EOF
-
- cat >> confdefs.h <<\EOF
-#define NOT_ASCII 1
+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
-;; #(vi
- *) ;;
-esac
-
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
-### These tests must be run after establishing the curses library.
-if test $cf_cv_screen != slang ; then
+ fi
echo $ac_n "checking if curses supports alternate-character set""... $ac_c" 1>&6
-echo "configure:10126: checking if curses supports alternate-character set" >&5
+echo "configure:11734: 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
@@ -10130,7 +11738,7 @@ else
for mapname in acs_map _acs_map
do
cat > conftest.$ac_ext <<EOF
-#line 10134 "configure"
+#line 11742 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
@@ -10139,7 +11747,7 @@ int main() {
chtype x = $mapname['l']; $mapname['m'] = 0
; return 0; }
EOF
-if { (eval echo configure:10143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_alt_char_set=$mapname
break
@@ -10162,13 +11770,13 @@ EOF
echo $ac_n "checking if curses supports fancy attributes""... $ac_c" 1>&6
-echo "configure:10166: checking if curses supports fancy attributes" >&5
+echo "configure:11774: 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 10172 "configure"
+#line 11780 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
@@ -10181,7 +11789,7 @@ attrset(A_UNDERLINE|A_BOLD|A_REVERSE);
; return 0; }
EOF
-if { (eval echo configure:10185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_fancy_curses=yes
else
@@ -10200,91 +11808,17 @@ test $cf_cv_fancy_curses = yes && cat >> confdefs.h <<\EOF
EOF
- echo $ac_n "checking for ncurses version""... $ac_c" 1>&6
-echo "configure:10205: checking for ncurses version" >&5
-if eval "test \"`echo '$''{'cf_cv_ncurses_version'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
-
- cf_cv_ncurses_version=no
- cf_tempfile=out$$
- if test "$cross_compiling" = yes; then
-
-
- # This will not work if the preprocessor splits the line after the
- # Autoconf token. The 'unproto' program does that.
- cat > conftest.$ac_ext <<EOF
-#include <${cf_cv_ncurses_header-curses.h}>
-#undef Autoconf
-#ifdef NCURSES_VERSION
-Autoconf NCURSES_VERSION
-#else
-#ifdef __NCURSES_H
-Autoconf "old"
-#endif
-;
-#endif
-EOF
- cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out"
- { (eval echo configure:10230: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
- if test -f conftest.out ; then
- cf_out=`cat conftest.out | sed -e 's@^Autoconf @@' -e 's@^[^"]*"@@' -e 's@".*@@'`
- test -n "$cf_out" && cf_cv_ncurses_version="$cf_out"
- rm -f conftest.out
- fi
-
-else
- cat > conftest.$ac_ext <<EOF
-#line 10239 "configure"
-#include "confdefs.h"
-
-#include <${cf_cv_ncurses_header-curses.h}>
-int main()
-{
- FILE *fp = fopen("$cf_tempfile", "w");
-#ifdef NCURSES_VERSION
-# ifdef NCURSES_VERSION_PATCH
- fprintf(fp, "%s.%d\n", NCURSES_VERSION, NCURSES_VERSION_PATCH);
-# else
- fprintf(fp, "%s\n", NCURSES_VERSION);
-# endif
-#else
-# ifdef __NCURSES_H
- fprintf(fp, "old\n");
-# else
- make an error
-# endif
-#endif
- exit(0);
-}
-EOF
-if { (eval echo configure:10262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
-
- cf_cv_ncurses_version=`cat $cf_tempfile`
- rm -f $cf_tempfile
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$cf_cv_ncurses_version" 1>&6
-
if test "$cf_cv_ncurses_version" != no ; then
echo $ac_n "checking for obsolete/broken version of ncurses""... $ac_c" 1>&6
-echo "configure:10282: checking for obsolete/broken version of ncurses" >&5
+echo "configure:11816: checking for obsolete/broken version of ncurses" >&5
if eval "test \"`echo '$''{'cf_cv_ncurses_broken'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10288 "configure"
+#line 11822 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
@@ -10298,7 +11832,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:10302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11836: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_ncurses_broken=no
else
@@ -10323,13 +11857,13 @@ fi
echo $ac_n "checking if curses supports color attributes""... $ac_c" 1>&6
-echo "configure:10327: checking if curses supports color attributes" >&5
+echo "configure:11861: 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 10333 "configure"
+#line 11867 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
@@ -10344,7 +11878,7 @@ chtype x = COLOR_BLUE;
; return 0; }
EOF
-if { (eval echo configure:10348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_color_curses=yes
else
@@ -10370,32 +11904,175 @@ EOF
fi
+for ac_hdr in \
+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:11916: 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 11921 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:11926: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ 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
+
+if test "$ISC" = yes ; then
+ for ac_hdr in sys/termio.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:11957: 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 11962 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:11967: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ 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
+
+fi
+if test "$ac_cv_header_termios_h" = yes ; then
+ case "$CFLAGS $CPPFLAGS" in
+ *-D_POSIX_SOURCE*)
+ termios_bad=dunno ;;
+ *) termios_bad=maybe ;;
+ esac
+ if test "$termios_bad" = maybe ; then
+ echo $ac_n "checking whether termios.h needs _POSIX_SOURCE""... $ac_c" 1>&6
+echo "configure:12002: checking whether termios.h needs _POSIX_SOURCE" >&5
+ cat > conftest.$ac_ext <<EOF
+#line 12004 "configure"
+#include "confdefs.h"
+#include <termios.h>
+int main() {
+struct termios foo; int x = foo.c_iflag
+; return 0; }
+EOF
+if { (eval echo configure:12011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ termios_bad=no
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+
+ cat > conftest.$ac_ext <<EOF
+#line 12020 "configure"
+#include "confdefs.h"
+
+#define _POSIX_SOURCE
+#include <termios.h>
+int main() {
+struct termios foo; int x = foo.c_iflag
+; return 0; }
+EOF
+if { (eval echo configure:12029: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ termios_bad=unknown
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ termios_bad=yes cat >> confdefs.h <<\EOF
+#define SVR4_TERMIO 1
+EOF
+
+fi
+rm -f conftest*
+
+fi
+rm -f conftest*
+ echo "$ac_t""$termios_bad" 1>&6
+ fi
+fi
+
+
+
echo $ac_n "checking declaration of size-change""... $ac_c" 1>&6
-echo "configure:10375: checking declaration of size-change" >&5
+echo "configure:12052: 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"
+ cf_save_CPPFLAGS="$CPPFLAGS"
for cf_opts in "" "NEED_PTEM_H"
do
- CFLAGS="$cf_save_CFLAGS"
- test -n "$cf_opts" && CFLAGS="$CFLAGS -D$cf_opts"
+ CPPFLAGS="$cf_save_CPPFLAGS"
+ test -n "$cf_opts" && CPPFLAGS="$CPPFLAGS -D$cf_opts"
cat > conftest.$ac_ext <<EOF
-#line 10389 "configure"
+#line 12066 "configure"
#include "confdefs.h"
#include <sys/types.h>
-#if HAVE_TERMIOS_H
+#ifdef HAVE_TERMIOS_H
#include <termios.h>
#else
-#if HAVE_TERMIO_H
+#ifdef HAVE_TERMIO_H
#include <termio.h>
#endif
#endif
-#if NEED_PTEM_H
+#ifdef 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
*/
@@ -10424,7 +12101,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:10428: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12105: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_sizechange=yes
else
@@ -10435,41 +12112,48 @@ else
fi
rm -f conftest*
- CFLAGS="$cf_save_CFLAGS"
+ CPPFLAGS="$cf_save_CPPFLAGS"
if test "$cf_cv_sizechange" = yes ; then
echo "size-change succeeded ($cf_opts)" >&5
- test -n "$cf_opts" && cat >> confdefs.h <<EOF
-#define $cf_opts 1
-EOF
-
+ test -n "$cf_opts" && cf_cv_sizechange="$cf_opts"
break
fi
done
-
+
fi
echo "$ac_t""$cf_cv_sizechange" 1>&6
-test $cf_cv_sizechange != no && cat >> confdefs.h <<\EOF
+if test "$cf_cv_sizechange" != no ; then
+ cat >> confdefs.h <<\EOF
#define HAVE_SIZECHANGE 1
EOF
+ case $cf_cv_sizechange in #(vi
+ NEED*)
+ cat >> confdefs.h <<EOF
+#define $cf_cv_sizechange 1
+EOF
+
+ ;;
+ esac
+fi
echo $ac_n "checking if ttytype is declared in curses library""... $ac_c" 1>&6
-echo "configure:10460: checking if ttytype is declared in curses library" >&5
+echo "configure:12144: 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 10466 "configure"
+#line 12150 "configure"
#include "confdefs.h"
#include <${cf_cv_ncurses_header-curses.h}>
int main() {
char *x = &ttytype[1]; *x = 1
; return 0; }
EOF
-if { (eval echo configure:10473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_have_ttytype=yes
else
@@ -10488,65 +12172,146 @@ test $cf_cv_have_ttytype = yes && cat >> confdefs.h <<\EOF
EOF
- for ac_func in \
+
+echo $ac_n "checking if we must define _XOPEN_SOURCE_EXTENDED""... $ac_c" 1>&6
+echo "configure:12178: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5
+if eval "test \"`echo '$''{'cf_cv_need_xopen_extension'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+cat > conftest.$ac_ext <<EOF
+#line 12184 "configure"
+#include "confdefs.h"
+
+#include <stdlib.h>
+#include <${cf_cv_ncurses_header-curses.h}>
+int main() {
+
+ long x = winnstr(stdscr, "", 0)
+; return 0; }
+EOF
+if { (eval echo configure:12194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_need_xopen_extension=no
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cat > conftest.$ac_ext <<EOF
+#line 12202 "configure"
+#include "confdefs.h"
+
+#define _XOPEN_SOURCE_EXTENDED
+#include <stdlib.h>
+#include <${cf_cv_ncurses_header-curses.h}>
+int main() {
+
+ long x = winnstr(stdscr, "", 0)
+; return 0; }
+EOF
+if { (eval echo configure:12213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_need_xopen_extension=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_need_xopen_extension=no
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$cf_cv_need_xopen_extension" 1>&6
+test $cf_cv_need_xopen_extension = yes && CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
+
+
+
+for cf_func in \
+ assume_default_colors \
cbreak \
define_key \
+ delscreen \
+ getattrs \
+ getbegx \
+ getbegy \
keypad \
+ napms \
+ newpad \
+ newterm \
+ pnoutrefresh \
+ wresize resizeterm \
+ touchline \
+ touchwin \
use_default_colors \
wborder \
-
+ wredrawln
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:10501: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+
+cf_tr_func=`echo "$cf_func" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+ echo $ac_n "checking for ${cf_func}""... $ac_c" 1>&6
+echo "configure:12256: checking for ${cf_func}" >&5
+
+echo "(line 12258) testing ${cf_func} ..." 1>&5
+
+ if eval "test \"`echo '$''{'cf_cv_func_$cf_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- cat > conftest.$ac_ext <<EOF
-#line 10506 "configure"
+
+ eval cf_result='$ac_cv_func_'$cf_func
+ if test ".$cf_result" != ".no"; then
+ cat > conftest.$ac_ext <<EOF
+#line 12267 "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
+#ifdef HAVE_XCURSES
+#include <xcurses.h>
+char * XCursesProgramName = "test";
#else
-$ac_func();
+#include <${cf_cv_ncurses_header-curses.h}>
+#if defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H)
+#include <ncurses/term.h>
+#else
+#ifdef HAVE_TERM_H
+#include <term.h>
#endif
+#endif
+#endif
+int main() {
+#ifndef ${cf_func}
+long foo = (long)(&${cf_func});
+exit(foo == 0);
+#endif
+
; return 0; }
EOF
-if { (eval echo configure:10529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
+ cf_result=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
+ cf_result=no
fi
rm -f conftest*
+ fi
+ eval 'cf_cv_func_'$cf_func'=$cf_result'
+
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
+ # use the computed/retrieved cache-value:
+ eval 'cf_result=$cf_cv_func_'$cf_func
+ echo "$ac_t""$cf_result" 1>&6
+ if test $cf_result != no; then
+ cat >> confdefs.h <<EOF
+#define HAVE_${cf_tr_func} 1
EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
+
+ fi
done
fi
@@ -10554,8 +12319,32 @@ fi
+echo $ac_n "checking if bibp: URLs should be supported""... $ac_c" 1>&6
+echo "configure:12324: checking if bibp: URLs should be supported" >&5
+
+# Check whether --enable-bibp-urls or --disable-bibp-urls was given.
+if test "${enable_bibp_urls+set}" = set; then
+ enableval="$enable_bibp_urls"
+ test "$enableval" != no && enableval=yes
+ if test "$enableval" != "yes" ; then
+ use_bibp_urls=$enableval
+ else
+ use_bibp_urls=yes
+ fi
+else
+ enableval=yes
+ use_bibp_urls=yes
+
+fi
+
+echo "$ac_t""$use_bibp_urls" 1>&6
+test $use_bibp_urls = no && cat >> confdefs.h <<\EOF
+#define DISABLE_BIBP 1
+EOF
+
+
echo $ac_n "checking if configuration info should be browsable""... $ac_c" 1>&6
-echo "configure:10559: checking if configuration info should be browsable" >&5
+echo "configure:12348: checking if configuration info should be browsable" >&5
# Check whether --enable-config-info or --disable-config-info was given.
if test "${enable_config_info+set}" = set; then
@@ -10579,7 +12368,7 @@ EOF
echo $ac_n "checking if new-style forms-based options screen should be used""... $ac_c" 1>&6
-echo "configure:10583: checking if new-style forms-based options screen should be used" >&5
+echo "configure:12372: checking if new-style forms-based options screen should be used" >&5
# Check whether --enable-forms-options or --disable-forms-options was given.
if test "${enable_forms_options+set}" = set; then
@@ -10603,7 +12392,7 @@ EOF
echo $ac_n "checking if old-style options menu should be used""... $ac_c" 1>&6
-echo "configure:10607: checking if old-style options menu should be used" >&5
+echo "configure:12396: checking if old-style options menu should be used" >&5
# Check whether --enable-menu-options or --disable-menu-options was given.
if test "${enable_menu_options+set}" = set; then
@@ -10627,7 +12416,7 @@ EOF
echo $ac_n "checking if experimental address-list page should be used""... $ac_c" 1>&6
-echo "configure:10631: checking if experimental address-list page should be used" >&5
+echo "configure:12420: checking if experimental address-list page should be used" >&5
# Check whether --enable-addrlist-page or --disable-addrlist-page was given.
if test "${enable_addrlist_page+set}" = set; then
@@ -10650,8 +12439,56 @@ test $use_addrlist_page != no && cat >> confdefs.h <<\EOF
EOF
+echo $ac_n "checking if experimental charset-selection logic should be used""... $ac_c" 1>&6
+echo "configure:12444: checking if experimental charset-selection logic should be used" >&5
+
+# Check whether --enable-charset-choice or --disable-charset-choice was given.
+if test "${enable_charset_choice+set}" = set; then
+ enableval="$enable_charset_choice"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ use_charset_choice=$enableval
+ else
+ use_charset_choice=no
+ fi
+else
+ enableval=no
+ use_charset_choice=no
+
+fi
+
+echo "$ac_t""$use_charset_choice" 1>&6
+test $use_charset_choice != no && cat >> confdefs.h <<\EOF
+#define EXP_CHARSET_CHOICE 1
+EOF
+
+
+echo $ac_n "checking if experimental CJK logic should be used""... $ac_c" 1>&6
+echo "configure:12468: checking if experimental CJK logic should be used" >&5
+
+# Check whether --enable-cjk or --disable-cjk was given.
+if test "${enable_cjk+set}" = set; then
+ enableval="$enable_cjk"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ use_cjk=$enableval
+ else
+ use_cjk=no
+ fi
+else
+ enableval=no
+ use_cjk=no
+
+fi
+
+echo "$ac_t""$use_cjk" 1>&6
+test $use_cjk != no && cat >> confdefs.h <<\EOF
+#define CJK_EX 1
+EOF
+
+
echo $ac_n "checking if color-style code should be used""... $ac_c" 1>&6
-echo "configure:10655: checking if color-style code should be used" >&5
+echo "configure:12492: checking if color-style code should be used" >&5
# Check whether --enable-color-style or --disable-color-style was given.
if test "${enable_color_style+set}" = set; then
@@ -10676,14 +12513,6 @@ if test $use_color_style != no ; then
if test $cf_cv_screen = slang ; then
{ echo "configure: error: Configuration does not support color-styles" 1>&2; exit 1; }
fi
- cat >> confdefs.h <<\EOF
-#define USE_HASH 1
-EOF
-
- cat >> confdefs.h <<\EOF
-#define LINKEDSTYLES 1
-EOF
-
fi
case $use_color_style in
@@ -10699,7 +12528,7 @@ EOF
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for location of style-sheet file""... $ac_c" 1>&6
-echo "configure:10703: checking for location of style-sheet file" >&5
+echo "configure:12532: checking for location of style-sheet file" >&5
LYNX_LSS_FILE=$cf_libdir/lynx.lss
cat >> confdefs.h <<EOF
#define LYNX_LSS_FILE "$LYNX_LSS_FILE"
@@ -10713,11 +12542,11 @@ esac
use_dft_colors=no
test ".$cf_cv_screen" = ".slang" && use_dft_colors=maybe
-test ".$ac_cv_func_use_default_colors" = ".yes" && use_dft_colors=maybe
+test ".$cf_cv_func_use_default_colors" = ".yes" && use_dft_colors=maybe
if test "$use_dft_colors" != no ; then
echo $ac_n "checking if you want to use default-colors""... $ac_c" 1>&6
-echo "configure:10721: checking if you want to use default-colors" >&5
+echo "configure:12550: checking if you want to use default-colors" >&5
# Check whether --enable-default-colors or --disable-default-colors was given.
if test "${enable_default_colors+set}" = set; then
@@ -10741,8 +12570,641 @@ EOF
fi
+echo $ac_n "checking if experimental file-upload logic should be used""... $ac_c" 1>&6
+echo "configure:12575: checking if experimental file-upload logic should be used" >&5
+
+# Check whether --enable-file-upload or --disable-file-upload was given.
+if test "${enable_file_upload+set}" = set; then
+ enableval="$enable_file_upload"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ use_file_upload=$enableval
+ else
+ use_file_upload=no
+ fi
+else
+ enableval=no
+ use_file_upload=no
+
+fi
+
+echo "$ac_t""$use_file_upload" 1>&6
+test $use_file_upload != no && cat >> confdefs.h <<\EOF
+#define EXP_FILE_UPLOAD 1
+EOF
+
+
+echo $ac_n "checking if experimental htmlized lynx.cfg should be built""... $ac_c" 1>&6
+echo "configure:12599: checking if experimental htmlized lynx.cfg should be built" >&5
+
+# Check whether --enable-htmlized-cfg or --disable-htmlized-cfg was given.
+if test "${enable_htmlized_cfg+set}" = set; then
+ enableval="$enable_htmlized_cfg"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ use_exp_htmlized_cfg=$enableval
+ else
+ use_exp_htmlized_cfg=no
+ fi
+else
+ enableval=no
+ use_exp_htmlized_cfg=no
+
+fi
+
+echo "$ac_t""$use_exp_htmlized_cfg" 1>&6
+
+LYNXCFG_MAKE=''
+LYNXCFG_URL=''
+if test $use_exp_htmlized_cfg = no ; then
+ LYNXCFG_MAKE='#'
+ LYNXCFG_URL='http://www.hippo.ru/%7Ehvv/'
+fi
+
+
+
+### check for ipv6 support
+echo $ac_n "checking whether to enable ipv6""... $ac_c" 1>&6
+echo "configure:12629: checking whether to enable ipv6" >&5
+
+# Check whether --enable-ipv6 or --disable-ipv6 was given.
+if test "${enable_ipv6+set}" = set; then
+ enableval="$enable_ipv6"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ cat >> confdefs.h <<\EOF
+#define ENABLE_IPV6 1
+EOF
+
+ fi
+else
+ enableval=no
+fi
+
+echo "$ac_t""$enableval" 1>&6
+if test "$enableval" = "yes"; then
+
+
+echo $ac_n "checking ipv6 stack type""... $ac_c" 1>&6
+echo "configure:12650: checking ipv6 stack type" >&5
+if eval "test \"`echo '$''{'cf_cv_ipv6type'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+cf_cv_ipv6type=unknown
+for i in solaris inria kame linux-glibc linux-libinet6 toshiba v6d zeta
+do
+ case $i in #(vi
+ solaris) #(vi
+ if test "SunOS" = "`uname -s`"
+ then
+ if test -f /usr/include/netinet/ip6.h
+ then
+ cf_cv_ipv6type=$i
+ fi
+ fi
+ ;;
+ inria) #(vi
+ cat > conftest.$ac_ext <<EOF
+#line 12670 "configure"
+#include "confdefs.h"
+dnl
+#include <netinet/in.h>
+#ifdef IPV6_INRIA_VERSION
+yes
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ cf_cv_ipv6type=$i
+fi
+rm -f conftest*
+
+ ;;
+ kame) #(vi
+ cat > conftest.$ac_ext <<EOF
+#line 12688 "configure"
+#include "confdefs.h"
+dnl
+#include <netinet/in.h>
+#ifdef __KAME__
+yes
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ cf_cv_ipv6type=$i
+fi
+rm -f conftest*
+
+ ;;
+ linux-glibc) #(vi
+ cat > conftest.$ac_ext <<EOF
+#line 12706 "configure"
+#include "confdefs.h"
+dnl
+#include <features.h>
+#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
+yes
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ cf_cv_ipv6type=$i
+fi
+rm -f conftest*
+
+ ;;
+ linux-libinet6) #(vi
+ if test -d /usr/inet6
+ then
+ cf_cv_ipv6type=$i
+ elif test -f /usr/include/netinet/ip6.h
+ then
+ cf_cv_ipv6type=$i
+ fi
+ ;;
+ toshiba) #(vi
+ cat > conftest.$ac_ext <<EOF
+#line 12733 "configure"
+#include "confdefs.h"
+dnl
+#include <sys/param.h>
+#ifdef _TOSHIBA_INET6
+yes
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ cf_cv_ipv6type=$i
+fi
+rm -f conftest*
+
+ ;;
+ v6d) #(vi
+ cat > conftest.$ac_ext <<EOF
+#line 12751 "configure"
+#include "confdefs.h"
+dnl
+#include </usr/local/v6/include/sys/v6config.h>
+#ifdef __V6D__
+yes
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ cf_cv_ipv6type=$i
+fi
+rm -f conftest*
+
+ ;;
+ zeta)
+ cat > conftest.$ac_ext <<EOF
+#line 12769 "configure"
+#include "confdefs.h"
+dnl
+#include <sys/param.h>
+#ifdef _ZETA_MINAMI_INET6
+yes
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ cf_cv_ipv6type=$i
+fi
+rm -f conftest*
+
+ ;;
+ esac
+ if test "$cf_cv_ipv6type" != "unknown"; then
+ break
+ fi
+done
+
+fi
+
+echo "$ac_t""$cf_cv_ipv6type" 1>&6
+
+
+
+
+cf_ipv6lib=none
+cf_ipv6dir=none
+
+echo $ac_n "checking for ipv6 library if required""... $ac_c" 1>&6
+echo "configure:12802: checking for ipv6 library if required" >&5
+case $cf_cv_ipv6type in #(vi
+solaris) #(vi
+ ;;
+inria) #(vi
+ ;;
+kame) #(vi
+ cf_ipv6lib=inet6
+ cf_ipv6dir=v6
+ ;;
+linux-glibc) #(vi
+ ;;
+linux-libinet6) #(vi
+ cf_ipv6lib=inet6
+ cf_ipv6dir=inet6
+ ;;
+toshiba) #(vi
+ cf_ipv6lib=inet6
+ cf_ipv6dir=v6
+ ;;
+v6d) #(vi
+ cf_ipv6lib=v6
+ cf_ipv6dir=v6
+ ;;
+zeta)
+ cf_ipv6lib=inet6
+ cf_ipv6dir=v6
+ ;;
+esac
+echo "$ac_t""$cf_ipv6lib" 1>&6
+
+if test "$cf_ipv6lib" != "none"; then
+
+ cat > conftest.$ac_ext <<EOF
+#line 12836 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <netinet/ip6.h>
+int main() {
+getaddrinfo(0, 0, 0, 0)
+; return 0; }
+EOF
+if { (eval echo configure:12847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+
+ cf_search=""
+
+test "$includedir" != NONE && \
+test -d "$includedir" && \
+cf_search="$cf_search $includedir $includedir/$cf_ipv6dir"
+
+test "$oldincludedir" != NONE && \
+test -d "$oldincludedir" && \
+cf_search="$cf_search $oldincludedir $oldincludedir/$cf_ipv6dir"
+
+test "$prefix" != NONE && \
+test -d "$prefix" && \
+cf_search="$cf_search $prefix/include $prefix/include/$cf_ipv6dir $prefix/$cf_ipv6dir/include"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+cf_search="$cf_search /usr/local/include /usr/local/include/$cf_ipv6dir /usr/local/$cf_ipv6dir/include"
+
+test "$prefix" != /usr && \
+cf_search="$cf_search /usr/include /usr/include/$cf_ipv6dir /usr/$cf_ipv6dir/include"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+cf_search="$cf_search /opt/include /opt/include/$cf_ipv6dir /opt/$cf_ipv6dir/include"
+
+cf_search="$cf_search $HOME/lib $HOME/lib/$cf_ipv6dir $HOME/$cf_ipv6dir/lib"
+
+ for cf_incdir in $cf_search
+ do
+ cf_header=$cf_incdir/netinet/ip6.h
+ if test -f $cf_header
+ then
+ CPPFLAGS="$CPPFLAGS -I$cf_incdir"
+ test -n "$verbose" && echo " ... found $cf_header" 1>&6
+ break
+ fi
+ test -n "$verbose" && echo " ... tested $cf_header" 1>&6
+ done
+
+fi
+rm -f conftest*
+
+
+ eval 'cf_cv_have_lib_'$cf_ipv6lib'=no'
+ cf_libdir=""
+ echo $ac_n "checking for getaddrinfo""... $ac_c" 1>&6
+echo "configure:12900: checking for getaddrinfo" >&5
+if eval "test \"`echo '$''{'ac_cv_func_getaddrinfo'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 12905 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char getaddrinfo(); 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 getaddrinfo();
+
+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_getaddrinfo) || defined (__stub___getaddrinfo)
+choke me
+#else
+getaddrinfo();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:12928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_getaddrinfo=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_getaddrinfo=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'getaddrinfo`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ eval 'cf_cv_have_lib_'$cf_ipv6lib'=yes'
+else
+ echo "$ac_t""no" 1>&6
+
+ cf_save_LIBS="$LIBS"
+ echo $ac_n "checking for getaddrinfo in -l$cf_ipv6lib""... $ac_c" 1>&6
+echo "configure:12948: checking for getaddrinfo in -l$cf_ipv6lib" >&5
+ LIBS="-l$cf_ipv6lib $LIBS"
+ cat > conftest.$ac_ext <<EOF
+#line 12951 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <netinet/ip6.h>
+int main() {
+getaddrinfo(0, 0, 0, 0)
+; return 0; }
+EOF
+if { (eval echo configure:12962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ echo "$ac_t""yes" 1>&6
+ eval 'cf_cv_have_lib_'$cf_ipv6lib'=yes'
+
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ echo "$ac_t""no" 1>&6
+ cf_search=""
+
+test "$libdir" != NONE && \
+test -d $libdir && \
+cf_search="$cf_search $libdir $libdir/$cf_ipv6dir"
+
+test "$exec_prefix" != NONE && \
+test -d $exec_prefix && \
+cf_search="$cf_search $exec_prefix/lib $exec_prefix/lib/$cf_ipv6dir"
+
+test "$prefix" != NONE && \
+test "$prefix" != "$exec_prefix" && \
+test -d $prefix && \
+cf_search="$cf_search $prefix/lib $prefix/lib/$cf_ipv6dir $prefix/$cf_ipv6dir/lib"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+cf_search="$cf_search /usr/local/lib /usr/local/lib/$cf_ipv6dir /usr/local/$cf_ipv6dir/lib"
+
+test "$prefix" != /usr && \
+cf_search="$cf_search /usr/lib /usr/lib/$cf_ipv6dir /usr/$cf_ipv6dir/lib"
+
+test "$prefix" != / && \
+cf_search="$cf_search /lib /lib/$cf_ipv6dir /$cf_ipv6dir/lib"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+cf_search="$cf_search /opt/lib /opt/lib/$cf_ipv6dir /opt/$cf_ipv6dir/lib"
+
+cf_search="$cf_search $HOME/lib $HOME/lib/$cf_ipv6dir $HOME/$cf_ipv6dir/lib"
+
+ for cf_libdir in $cf_search
+ do
+ echo $ac_n "checking for -l$cf_ipv6lib in $cf_libdir""... $ac_c" 1>&6
+echo "configure:13006: checking for -l$cf_ipv6lib in $cf_libdir" >&5
+ LIBS="-L$cf_libdir -l$cf_ipv6lib $cf_save_LIBS"
+ cat > conftest.$ac_ext <<EOF
+#line 13009 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <netinet/ip6.h>
+int main() {
+getaddrinfo(0, 0, 0, 0)
+; return 0; }
+EOF
+if { (eval echo configure:13020: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ echo "$ac_t""yes" 1>&6
+ eval 'cf_cv_have_lib_'$cf_ipv6lib'=yes'
+ break
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ echo "$ac_t""no" 1>&6
+ LIBS="$cf_save_LIBS"
+fi
+rm -f conftest*
+ done
+
+fi
+rm -f conftest*
+
+fi
+
+eval 'cf_found_library=$cf_cv_have_lib_'$cf_ipv6lib
+
+
+ if test $cf_found_library = no ; then
+ { echo "configure: error: No $cf_ipv6lib library found, cannot continue. You must fetch lib$cf_ipv6lib.a
+from an appropriate ipv6 kit and compile beforehand." 1>&2; exit 1; }
+ fi
+fi
+
+
+
+
+echo $ac_n "checking working getaddrinfo""... $ac_c" 1>&6
+echo "configure:13053: checking working getaddrinfo" >&5
+if eval "test \"`echo '$''{'cf_cv_getaddrinfo'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+if test "$cross_compiling" = yes; then
+ cf_cv_getaddrinfo=unknown
+else
+ cat > conftest.$ac_ext <<EOF
+#line 13062 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <netdb.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#define expect(a,b) if (strcmp(a,b) != 0) goto bad
+
+int main()
+{
+ int passive, gaierr, inet4 = 0, inet6 = 0;
+ struct addrinfo hints, *ai, *aitop;
+ char straddr[INET6_ADDRSTRLEN], strport[16];
+
+ for (passive = 0; passive <= 1; passive++) {
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_flags = passive ? AI_PASSIVE : 0;
+ hints.ai_socktype = SOCK_STREAM;
+ if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) {
+ (void)gai_strerror(gaierr);
+ goto bad;
+ }
+ for (ai = aitop; ai; ai = ai->ai_next) {
+ if (ai->ai_addr == NULL ||
+ ai->ai_addrlen == 0 ||
+ getnameinfo(ai->ai_addr, ai->ai_addrlen,
+ straddr, sizeof(straddr), strport, sizeof(strport),
+ NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
+ goto bad;
+ }
+ switch (ai->ai_family) {
+ case AF_INET:
+ expect(strport, "54321");
+ if (passive) {
+ expect(straddr, "0.0.0.0");
+ } else {
+ expect(straddr, "127.0.0.1");
+ }
+ inet4++;
+ break;
+ case AF_INET6:
+ expect(strport, "54321");
+ if (passive) {
+ expect(straddr, "::");
+ } else {
+ expect(straddr, "::1");
+ }
+ inet6++;
+ break;
+ case AF_UNSPEC:
+ goto bad;
+ break;
+ default:
+ /* another family support? */
+ break;
+ }
+ }
+ }
+
+ if (!(inet4 == 0 || inet4 == 2))
+ goto bad;
+ if (!(inet6 == 0 || inet6 == 2))
+ goto bad;
+
+ if (aitop)
+ freeaddrinfo(aitop);
+ exit(0);
+
+ bad:
+ if (aitop)
+ freeaddrinfo(aitop);
+ exit(1);
+}
+
+EOF
+if { (eval echo configure:13141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ cf_cv_getaddrinfo=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ cf_cv_getaddrinfo=no
+fi
+rm -fr conftest*
+fi
+
+
+fi
+
+echo "$ac_t""$cf_cv_getaddrinfo" 1>&6
+if test "$cf_cv_getaddrinfo" = yes ; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_GAI_STRERROR 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_GETADDRINFO 1
+EOF
+
+fi
+
+
+if test "$cf_cv_getaddrinfo" != "yes"; then
+ if test "$cf_cv_ipv6type" != "linux"; then
+ { echo "configure: error: You must get working getaddrinfo() function,
+or you can specify "--disable-ipv6"" 1>&2; exit 1; }
+ else
+ echo "configure: warning: The getaddrinfo() implementation on your system seems be buggy.
+You should upgrade your system library to the newest version
+of GNU C library (aka glibc)." 1>&2
+ fi
+fi
+
+
+fi
+
+echo $ac_n "checking if experimental element-justification logic should be used""... $ac_c" 1>&6
+echo "configure:13184: checking if experimental element-justification logic should be used" >&5
+
+# Check whether --enable-justify-elts or --disable-justify-elts was given.
+if test "${enable_justify_elts+set}" = set; then
+ enableval="$enable_justify_elts"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ use_exp_justify_elts=$enableval
+ else
+ use_exp_justify_elts=no
+ fi
+else
+ enableval=no
+ use_exp_justify_elts=no
+
+fi
+
+echo "$ac_t""$use_exp_justify_elts" 1>&6
+test $use_exp_justify_elts != no && cat >> confdefs.h <<\EOF
+#define EXP_JUSTIFY_ELTS 1
+EOF
+
+
echo $ac_n "checking if experimental keyboard-layout logic should be used""... $ac_c" 1>&6
-echo "configure:10746: checking if experimental keyboard-layout logic should be used" >&5
+echo "configure:13208: checking if experimental keyboard-layout logic should be used" >&5
# Check whether --enable-kbd-layout or --disable-kbd-layout was given.
if test "${enable_kbd_layout+set}" = set; then
@@ -10765,9 +13227,56 @@ test $use_kbd_layout != no && cat >> confdefs.h <<\EOF
EOF
+echo $ac_n "checking if experimental JavaScript support should be used""... $ac_c" 1>&6
+echo "configure:13232: checking if experimental JavaScript support should be used" >&5
+
+# Check whether --enable-libjs or --disable-libjs was given.
+if test "${enable_libjs+set}" = set; then
+ enableval="$enable_libjs"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ use_libjs=$enableval
+ else
+ use_libjs=no
+ fi
+else
+ enableval=no
+ use_libjs=no
+
+fi
+
+echo "$ac_t""$use_libjs" 1>&6
+test $use_libjs != no && cat >> confdefs.h <<\EOF
+#define EXP_LIBJS 1
+EOF
+
+
+echo $ac_n "checking if experimental nested-table logic should be used""... $ac_c" 1>&6
+echo "configure:13256: checking if experimental nested-table logic should be used" >&5
+
+# Check whether --enable-nested-tables or --disable-nested-tables was given.
+if test "${enable_nested_tables+set}" = set; then
+ enableval="$enable_nested_tables"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ use_nested_tables=$enableval
+ else
+ use_nested_tables=no
+ fi
+else
+ enableval=no
+ use_nested_tables=no
+
+fi
+
+echo "$ac_t""$use_nested_tables" 1>&6
+test $use_nested_tables != no && cat >> confdefs.h <<\EOF
+#define EXP_NESTED_TABLES 1
+EOF
+
echo $ac_n "checking if html source should be colorized""... $ac_c" 1>&6
-echo "configure:10771: checking if html source should be colorized" >&5
+echo "configure:13280: checking if html source should be colorized" >&5
# Check whether --enable-prettysrc or --disable-prettysrc was given.
if test "${enable_prettysrc+set}" = set; then
@@ -10786,12 +13295,67 @@ fi
echo "$ac_t""$use_prettysrc" 1>&6
test $use_prettysrc != no && cat >> confdefs.h <<\EOF
-#define USE_PSRC 1
+#define USE_PRETTYSRC 1
+EOF
+
+
+echo $ac_n "checking if read-progress message should show ETA""... $ac_c" 1>&6
+echo "configure:13304: checking if read-progress message should show ETA" >&5
+
+# Check whether --enable-read-eta or --disable-read-eta was given.
+if test "${enable_read_eta+set}" = set; then
+ enableval="$enable_read_eta"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ use_read_eta=$enableval
+ else
+ use_read_eta=no
+ fi
+else
+ enableval=no
+ use_read_eta=no
+
+fi
+
+echo "$ac_t""$use_read_eta" 1>&6
+test $use_read_eta != no && cat >> confdefs.h <<\EOF
+#define EXP_READPROGRESS 1
+EOF
+
+
+echo $ac_n "checking if scrollbar code should be used""... $ac_c" 1>&6
+echo "configure:13328: checking if scrollbar code should be used" >&5
+
+# Check whether --enable-scrollbar or --disable-scrollbar was given.
+if test "${enable_scrollbar+set}" = set; then
+ enableval="$enable_scrollbar"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ use_scrollbar=$enableval
+ else
+ use_scrollbar=no
+ fi
+else
+ enableval=no
+ use_scrollbar=no
+
+fi
+
+echo "$ac_t""$use_scrollbar" 1>&6
+
+if test $use_scrollbar != no ; then
+ if test .$cf_cv_fancy_curses != .yes ; then
+ echo "configure: warning: Configuration does not support ACS_xxx definitions" 1>&2
+ else
+ cat >> confdefs.h <<\EOF
+#define USE_SCROLLBAR 1
EOF
+ fi
+fi
echo $ac_n "checking if source caching should be used""... $ac_c" 1>&6
-echo "configure:10795: checking if source caching should be used" >&5
+echo "configure:13359: checking if source caching should be used" >&5
# Check whether --enable-source-cache or --disable-source-cache was given.
if test "${enable_source_cache+set}" = set; then
@@ -10818,7 +13382,7 @@ EOF
echo $ac_n "checking if alternative line-edit bindings should be used""... $ac_c" 1>&6
-echo "configure:10822: checking if alternative line-edit bindings should be used" >&5
+echo "configure:13386: checking if alternative line-edit bindings should be used" >&5
# Check whether --enable-alt-bindings or --disable-alt-bindings was given.
if test "${enable_alt_bindings+set}" = set; then
@@ -10842,7 +13406,7 @@ EOF
echo $ac_n "checking if you want to use extended HTML DTD logic""... $ac_c" 1>&6
-echo "configure:10846: checking if you want to use extended HTML DTD logic" >&5
+echo "configure:13410: checking if you want to use extended HTML DTD logic" >&5
# Check whether --enable-extended-dtd or --disable-extended-dtd was given.
if test "${enable_extended_dtd+set}" = set; then
@@ -10866,7 +13430,7 @@ EOF
echo $ac_n "checking if partial-display should be used""... $ac_c" 1>&6
-echo "configure:10870: checking if partial-display should be used" >&5
+echo "configure:13434: checking if partial-display should be used" >&5
# Check whether --enable-partial or --disable-partial was given.
if test "${enable_partial+set}" = set; then
@@ -10890,7 +13454,7 @@ EOF
echo $ac_n "checking if you want to use external commands""... $ac_c" 1>&6
-echo "configure:10894: checking if you want to use external commands" >&5
+echo "configure:13458: checking if you want to use external commands" >&5
# Check whether --enable-externs or --disable-externs was given.
if test "${enable_externs+set}" = set; then
@@ -10908,13 +13472,16 @@ else
fi
echo "$ac_t""$use_externs" 1>&6
-test $use_externs != ".no" && cat >> confdefs.h <<\EOF
+if test $use_externs != "no" ; then
+ cat >> confdefs.h <<\EOF
#define USE_EXTERNALS 1
EOF
+ LIBOBJS="$LIBOBJS LYExtern.o"
+fi
echo $ac_n "checking if you want to use setfont support""... $ac_c" 1>&6
-echo "configure:10918: checking if you want to use setfont support" >&5
+echo "configure:13485: checking if you want to use setfont support" >&5
# Check whether --enable-font-switch or --disable-font-switch was given.
if test "${enable_font_switch+set}" = set; then
@@ -10938,7 +13505,7 @@ EOF
echo $ac_n "checking if you want cgi-link support""... $ac_c" 1>&6
-echo "configure:10942: checking if you want cgi-link support" >&5
+echo "configure:13509: checking if you want cgi-link support" >&5
# Check whether --enable-cgi-links or --disable-cgi-links was given.
if test "${enable_cgi_links+set}" = set; then
@@ -10956,46 +13523,80 @@ fi
echo "$ac_t""$enableval" 1>&6
+echo $ac_n "checking if you want change-exec support""... $ac_c" 1>&6
+echo "configure:13528: checking if you want change-exec support" >&5
+
+# Check whether --enable-change-exec or --disable-change-exec was given.
+if test "${enable_change_exec+set}" = set; then
+ enableval="$enable_change_exec"
+ test "$enableval" != yes && enableval=no
+ if test "$enableval" != "no" ; then
+ use_change_exec=yes
+ else
+ use_change_exec=no
+ fi
+else
+ enableval=no
+ use_change_exec=no
+
+fi
+
+echo "$ac_t""$use_change_exec" 1>&6
+test $use_change_exec = yes && cat >> confdefs.h <<\EOF
+#define ENABLE_OPTS_CHANGE_EXEC 1
+EOF
+
+
echo $ac_n "checking if you want exec-links support""... $ac_c" 1>&6
-echo "configure:10961: checking if you want exec-links support" >&5
+echo "configure:13552: checking if you want exec-links support" >&5
# Check whether --enable-exec-links or --disable-exec-links was given.
if test "${enable_exec_links+set}" = set; then
enableval="$enable_exec_links"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- cat >> confdefs.h <<\EOF
-#define EXEC_LINKS 1
-EOF
-
+ test "$enableval" != no && enableval=yes
+ if test "$enableval" != "$use_change_exec" ; then
+ use_exec_links=$enableval
+ else
+ use_exec_links=$enableval
fi
else
- enableval=no
+ enableval=$use_change_exec
+ use_exec_links=$enableval
+
fi
-echo "$ac_t""$enableval" 1>&6
+echo "$ac_t""$use_exec_links" 1>&6
+test $use_exec_links = yes && cat >> confdefs.h <<\EOF
+#define EXEC_LINKS 1
+EOF
+
echo $ac_n "checking if you want exec-scripts support""... $ac_c" 1>&6
-echo "configure:10980: checking if you want exec-scripts support" >&5
+echo "configure:13576: checking if you want exec-scripts support" >&5
# Check whether --enable-exec-scripts or --disable-exec-scripts was given.
if test "${enable_exec_scripts+set}" = set; then
enableval="$enable_exec_scripts"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
- cat >> confdefs.h <<\EOF
-#define EXEC_SCRIPTS 1
-EOF
-
+ test "$enableval" != no && enableval=yes
+ if test "$enableval" != "$use_change_exec" ; then
+ use_exec_scripts=$enableval
+ else
+ use_exec_scripts=$enableval
fi
else
- enableval=no
+ enableval=$use_change_exec
+ use_exec_scripts=$enableval
+
fi
-echo "$ac_t""$enableval" 1>&6
+echo "$ac_t""$use_exec_scripts" 1>&6
+test $use_exec_scripts = yes && cat >> confdefs.h <<\EOF
+#define EXEC_SCRIPTS 1
+EOF
+
echo $ac_n "checking if you want internal-links feature""... $ac_c" 1>&6
-echo "configure:10999: checking if you want internal-links feature" >&5
+echo "configure:13600: checking if you want internal-links feature" >&5
# Check whether --enable-internal-links or --disable-internal-links was given.
if test "${enable_internal_links+set}" = set; then
@@ -11019,7 +13620,7 @@ EOF
echo $ac_n "checking if you want to fork NSL requests""... $ac_c" 1>&6
-echo "configure:11023: checking if you want to fork NSL requests" >&5
+echo "configure:13624: checking if you want to fork NSL requests" >&5
# Check whether --enable-nsl-fork or --disable-nsl-fork was given.
if test "${enable_nsl_fork+set}" = set; then
@@ -11043,7 +13644,7 @@ EOF
echo $ac_n "checking if you want to log URL requests via syslog""... $ac_c" 1>&6
-echo "configure:11047: checking if you want to log URL requests via syslog" >&5
+echo "configure:13648: checking if you want to log URL requests via syslog" >&5
# Check whether --enable-syslog or --disable-syslog was given.
if test "${enable_syslog+set}" = set; then
@@ -11067,19 +13668,19 @@ EOF
echo $ac_n "checking if persistent-cookie logic should be used""... $ac_c" 1>&6
-echo "configure:11071: checking if persistent-cookie logic should be used" >&5
+echo "configure:13672: checking if persistent-cookie logic should be used" >&5
# Check whether --enable-persistent-cookies or --disable-persistent-cookies was given.
if test "${enable_persistent_cookies+set}" = set; then
enableval="$enable_persistent_cookies"
- test "$enableval" != yes && enableval=no
- if test "$enableval" != "no" ; then
+ test "$enableval" != no && enableval=yes
+ if test "$enableval" != "yes" ; then
use_filed_cookies=$enableval
else
use_filed_cookies=yes
fi
else
- enableval=no
+ enableval=yes
use_filed_cookies=yes
fi
@@ -11091,7 +13692,7 @@ EOF
echo $ac_n "checking if you want to underline links""... $ac_c" 1>&6
-echo "configure:11095: checking if you want to underline links" >&5
+echo "configure:13696: checking if you want to underline links" >&5
# Check whether --enable-underlines or --disable-underlines was given.
if test "${enable_underlines+set}" = set; then
@@ -11115,7 +13716,7 @@ EOF
echo $ac_n "checking if help files should be gzip'ed""... $ac_c" 1>&6
-echo "configure:11119: checking if help files should be gzip'ed" >&5
+echo "configure:13720: checking if help files should be gzip'ed" >&5
# Check whether --enable-gzip-help or --disable-gzip-help was given.
if test "${enable_gzip_help+set}" = set; then
@@ -11144,7 +13745,7 @@ fi
echo $ac_n "checking if you want to use zlib for decompression of some gzip files""... $ac_c" 1>&6
-echo "configure:11148: checking if you want to use zlib for decompression of some gzip files" >&5
+echo "configure:13749: checking if you want to use zlib for decompression of some gzip files" >&5
# Check whether --with-zlib or --without-zlib was given.
if test "${with_zlib+set}" = set; then
@@ -11157,16 +13758,94 @@ fi
echo "$ac_t""$use_zlib" 1>&6
if test ".$use_zlib" != ".no" ; then
+ echo $ac_n "checking if we need to add -I option to get zlib.h""... $ac_c" 1>&6
+echo "configure:13763: checking if we need to add -I option to get zlib.h" >&5
+ cat > conftest.$ac_ext <<EOF
+#line 13765 "configure"
+#include "confdefs.h"
+#include <zlib.h>
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:13772: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ echo "$ac_t""no" 1>&6
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+
+ echo "$ac_t""yes" 1>&6
+ cf_search=""
+
+test "$includedir" != NONE && \
+test -d "$includedir" && \
+cf_search="$cf_search $includedir $includedir/zlib"
+
+test "$oldincludedir" != NONE && \
+test -d "$oldincludedir" && \
+cf_search="$cf_search $oldincludedir $oldincludedir/zlib"
+
+test "$prefix" != NONE && \
+test -d "$prefix" && \
+cf_search="$cf_search $prefix/include $prefix/include/zlib $prefix/zlib/include"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+cf_search="$cf_search /usr/local/include /usr/local/include/zlib /usr/local/zlib/include"
+
+test "$prefix" != /usr && \
+cf_search="$cf_search /usr/include /usr/include/zlib /usr/zlib/include"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+cf_search="$cf_search /opt/include /opt/include/zlib /opt/zlib/include"
+
+cf_search="$cf_search $HOME/lib $HOME/lib/zlib $HOME/zlib/lib"
+
+ for cf_incdir in $cf_search
+ do
+ if test -f $cf_incdir/zlib.h ; then
+
+for cf_add_cflags in -I$cf_incdir
+do
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case "$CPPFLAGS" in
+ *$cf_add_cflags)
+ ;;
+ *)
+ CPPFLAGS="$CPPFLAGS $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ CFLAGS="$CFLAGS $cf_add_cflags"
+ ;;
+ esac
+done
+
+ test -n "$verbose" && echo " ... found in $cf_incdir" 1>&6
+
+ break
+ fi
+ test -n "$verbose" && echo " ... tested $cf_incdir" 1>&6
+
+ done
- cf_cv_have_lib_z=no
+fi
+rm -f conftest*
+
+ eval 'cf_cv_have_lib_'z'=no'
cf_libdir=""
echo $ac_n "checking for gzopen""... $ac_c" 1>&6
-echo "configure:11165: checking for gzopen" >&5
+echo "configure:13844: checking for gzopen" >&5
if eval "test \"`echo '$''{'ac_cv_func_gzopen'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11170 "configure"
+#line 13849 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char gzopen(); below. */
@@ -11189,7 +13868,7 @@ gzopen();
; return 0; }
EOF
-if { (eval echo configure:11193: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_gzopen=yes"
else
@@ -11203,26 +13882,26 @@ fi
if eval "test \"`echo '$ac_cv_func_'gzopen`\" = yes"; then
echo "$ac_t""yes" 1>&6
- cf_cv_have_lib_z=yes
+ eval 'cf_cv_have_lib_'z'=yes'
else
echo "$ac_t""no" 1>&6
cf_save_LIBS="$LIBS"
echo $ac_n "checking for gzopen in -lz""... $ac_c" 1>&6
-echo "configure:11213: checking for gzopen in -lz" >&5
+echo "configure:13892: checking for gzopen in -lz" >&5
LIBS="-lz $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 11216 "configure"
+#line 13895 "configure"
#include "confdefs.h"
#include <zlib.h>
int main() {
gzopen("name","mode")
; return 0; }
EOF
-if { (eval echo configure:11223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
- cf_cv_have_lib_z=yes
+ eval 'cf_cv_have_lib_'z'=yes'
else
echo "configure: failed program was:" >&5
@@ -11230,36 +13909,53 @@ else
rm -rf conftest*
echo "$ac_t""no" 1>&6
cf_search=""
-if test -d "$libdir" ; then
-test "$libdir" != NONE && cf_search="$cf_search $libdir $libdir/z"
-fi
-if test -d "$exec_prefix"; then
-test "$exec_prefix" != NONE && cf_search="$cf_search $exec_prefix/lib $exec_prefix/lib/z"
-fi
-if test -d "$prefix"; then
-test "$prefix" != NONE && \
-test "$prefix" != "$exec_prefix" && cf_search="$cf_search $prefix/lib $prefix/lib/z"
-fi
-test "$prefix" != /usr/local && cf_search="$cf_search /usr/local/lib /usr/local/lib/z"
-test "$prefix" != /usr && cf_search="$cf_search /usr/lib /usr/lib/z"
+
+test "$libdir" != NONE && \
+test -d $libdir && \
+cf_search="$cf_search $libdir $libdir/z"
+
+test "$exec_prefix" != NONE && \
+test -d $exec_prefix && \
+cf_search="$cf_search $exec_prefix/lib $exec_prefix/lib/z"
+
+test "$prefix" != NONE && \
+test "$prefix" != "$exec_prefix" && \
+test -d $prefix && \
+cf_search="$cf_search $prefix/lib $prefix/lib/z $prefix/z/lib"
+
+test "$prefix" != /usr/local && \
+test -d /usr/local && \
+cf_search="$cf_search /usr/local/lib /usr/local/lib/z /usr/local/z/lib"
+
+test "$prefix" != /usr && \
+cf_search="$cf_search /usr/lib /usr/lib/z /usr/z/lib"
+
+test "$prefix" != / && \
+cf_search="$cf_search /lib /lib/z /z/lib"
+
+test "$prefix" != /opt && \
+test -d /opt && \
+cf_search="$cf_search /opt/lib /opt/lib/z /opt/z/lib"
+
+cf_search="$cf_search $HOME/lib $HOME/lib/z $HOME/z/lib"
for cf_libdir in $cf_search
do
echo $ac_n "checking for -lz in $cf_libdir""... $ac_c" 1>&6
-echo "configure:11250: checking for -lz in $cf_libdir" >&5
+echo "configure:13946: checking for -lz in $cf_libdir" >&5
LIBS="-L$cf_libdir -lz $cf_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 11253 "configure"
+#line 13949 "configure"
#include "confdefs.h"
#include <zlib.h>
int main() {
gzopen("name","mode")
; return 0; }
EOF
-if { (eval echo configure:11260: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13956: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "$ac_t""yes" 1>&6
- cf_cv_have_lib_z=yes
+ eval 'cf_cv_have_lib_'z'=yes'
break
else
echo "configure: failed program was:" >&5
@@ -11276,14 +13972,12 @@ rm -f conftest*
fi
-if test $cf_cv_have_lib_z = no ; then
+eval 'cf_found_library=$cf_cv_have_lib_'z
+
+if test $cf_found_library = no ; then
{ echo "configure: error: Cannot link z library" 1>&2; exit 1; }
fi
-case $host_os in #(vi
-linux*) # Suse Linux does not follow /usr/lib convention
- LIBS="$LIBS -L/lib"
- ;;
-esac
+
cat >> confdefs.h <<\EOF
#define USE_ZLIB 1
@@ -11292,7 +13986,7 @@ EOF
fi
echo $ac_n "checking if you want to exclude FINGER code""... $ac_c" 1>&6
-echo "configure:11296: checking if you want to exclude FINGER code" >&5
+echo "configure:13990: checking if you want to exclude FINGER code" >&5
# Check whether --enable-finger or --disable-finger was given.
if test "${enable_finger+set}" = set; then
@@ -11316,7 +14010,7 @@ EOF
echo $ac_n "checking if you want to exclude GOPHER code""... $ac_c" 1>&6
-echo "configure:11320: checking if you want to exclude GOPHER code" >&5
+echo "configure:14014: checking if you want to exclude GOPHER code" >&5
# Check whether --enable-gopher or --disable-gopher was given.
if test "${enable_gopher+set}" = set; then
@@ -11340,7 +14034,7 @@ EOF
echo $ac_n "checking if you want to exclude NEWS code""... $ac_c" 1>&6
-echo "configure:11344: checking if you want to exclude NEWS code" >&5
+echo "configure:14038: checking if you want to exclude NEWS code" >&5
# Check whether --enable-news or --disable-news was given.
if test "${enable_news+set}" = set; then
@@ -11364,7 +14058,7 @@ EOF
echo $ac_n "checking if you want to exclude FTP code""... $ac_c" 1>&6
-echo "configure:11368: checking if you want to exclude FTP code" >&5
+echo "configure:14062: checking if you want to exclude FTP code" >&5
# Check whether --enable-ftp or --disable-ftp was given.
if test "${enable_ftp+set}" = set; then
@@ -11393,7 +14087,7 @@ EOF
# All DirEd functions that were enabled on compilation can be disabled
# or modified at run time via DIRED_MENU symbols in lynx.cfg.
echo $ac_n "checking if directory-editor code should be used""... $ac_c" 1>&6
-echo "configure:11397: checking if directory-editor code should be used" >&5
+echo "configure:14091: checking if directory-editor code should be used" >&5
# Check whether --enable-dired or --disable-dired was given.
if test "${enable_dired+set}" = set; then
@@ -11413,17 +14107,18 @@ fi
echo "$ac_t""$use_dired" 1>&6
if test ".$use_dired" != ".no" ; then
+ LIBOBJS="$LIBOBJS LYLocal.o"
cat >> confdefs.h <<\EOF
#define DIRED_SUPPORT 1
EOF
echo $ac_n "checking if you wish to allow extracting from archives via DirEd""... $ac_c" 1>&6
-echo "configure:11423: checking if you wish to allow extracting from archives via DirEd" >&5
+echo "configure:14118: checking if you wish to allow extracting from archives via DirEd" >&5
-# Check whether --enable-dired-archive or --disable-dired-archive was given.
-if test "${enable_dired_archive+set}" = set; then
- enableval="$enable_dired_archive"
+# Check whether --enable-dired-dearchive or --disable-dired-dearchive was given.
+if test "${enable_dired_dearchive+set}" = set; then
+ enableval="$enable_dired_dearchive"
test "$enableval" != no && enableval=yes
if test "$enableval" != "yes" ; then
cat >> confdefs.h <<\EOF
@@ -11437,8 +14132,8 @@ fi
echo "$ac_t""$enableval" 1>&6
- echo $ac_n "checking if you wish to allow users to redefine DirEd keys""... $ac_c" 1>&6
-echo "configure:11442: checking if you wish to allow users to redefine DirEd keys" >&5
+ echo $ac_n "checking if DirEd mode should override keys""... $ac_c" 1>&6
+echo "configure:14137: checking if DirEd mode should override keys" >&5
# Check whether --enable-dired-override or --disable-dired-override was given.
if test "${enable_dired_override+set}" = set; then
@@ -11464,7 +14159,7 @@ fi
echo "$ac_t""$enableval" 1>&6
echo $ac_n "checking if you wish to allow permissions commands via DirEd""... $ac_c" 1>&6
-echo "configure:11468: checking if you wish to allow permissions commands via DirEd" >&5
+echo "configure:14163: checking if you wish to allow permissions commands via DirEd" >&5
# Check whether --enable-dired-permit or --disable-dired-permit was given.
if test "${enable_dired_permit+set}" = set; then
@@ -11490,7 +14185,7 @@ fi
echo "$ac_t""$enableval" 1>&6
echo $ac_n "checking if you wish to allow executable-permission commands via DirEd""... $ac_c" 1>&6
-echo "configure:11494: checking if you wish to allow executable-permission commands via DirEd" >&5
+echo "configure:14189: checking if you wish to allow executable-permission commands via DirEd" >&5
# Check whether --enable-dired-xpermit or --disable-dired-xpermit was given.
if test "${enable_dired_xpermit+set}" = set; then
@@ -11509,7 +14204,7 @@ fi
echo "$ac_t""$enableval" 1>&6
echo $ac_n "checking if you wish to allow "tar" commands from DirEd""... $ac_c" 1>&6
-echo "configure:11513: checking if you wish to allow "tar" commands from DirEd" >&5
+echo "configure:14208: checking if you wish to allow "tar" commands from DirEd" >&5
# Check whether --enable-dired-tar or --disable-dired-tar was given.
if test "${enable_dired_tar+set}" = set; then
@@ -11535,7 +14230,7 @@ fi
echo "$ac_t""$enableval" 1>&6
echo $ac_n "checking if you wish to allow "uudecode" commands from DirEd""... $ac_c" 1>&6
-echo "configure:11539: checking if you wish to allow "uudecode" commands from DirEd" >&5
+echo "configure:14234: checking if you wish to allow "uudecode" commands from DirEd" >&5
# Check whether --enable-dired-uudecode or --disable-dired-uudecode was given.
if test "${enable_dired_uudecode+set}" = set; then
@@ -11561,7 +14256,7 @@ fi
echo "$ac_t""$enableval" 1>&6
echo $ac_n "checking if you wish to allow "zip" and "unzip" commands from DirEd""... $ac_c" 1>&6
-echo "configure:11565: checking if you wish to allow "zip" and "unzip" commands from DirEd" >&5
+echo "configure:14260: checking if you wish to allow "zip" and "unzip" commands from DirEd" >&5
# Check whether --enable-dired-zip or --disable-dired-zip was given.
if test "${enable_dired_zip+set}" = set; then
@@ -11587,7 +14282,7 @@ fi
echo "$ac_t""$enableval" 1>&6
echo $ac_n "checking if you wish to allow "gzip" and "gunzip" commands from DirEd""... $ac_c" 1>&6
-echo "configure:11591: checking if you wish to allow "gzip" and "gunzip" commands from DirEd" >&5
+echo "configure:14286: checking if you wish to allow "gzip" and "gunzip" commands from DirEd" >&5
# Check whether --enable-dired-gzip or --disable-dired-gzip was given.
if test "${enable_dired_gzip+set}" = set; then
@@ -11614,7 +14309,7 @@ fi
fi
echo $ac_n "checking if you want long-directory listings""... $ac_c" 1>&6
-echo "configure:11618: checking if you want long-directory listings" >&5
+echo "configure:14313: checking if you want long-directory listings" >&5
# Check whether --enable-long-list or --disable-long-list was given.
if test "${enable_long_list+set}" = set; then
@@ -11640,7 +14335,7 @@ fi
echo "$ac_t""$enableval" 1>&6
echo $ac_n "checking if parent-directory references are permitted""... $ac_c" 1>&6
-echo "configure:11644: checking if parent-directory references are permitted" >&5
+echo "configure:14339: checking if parent-directory references are permitted" >&5
# Check whether --enable-parent-dir-refs or --disable-parent-dir-refs was given.
if test "${enable_parent_dir_refs+set}" = set; then
@@ -11658,18 +14353,1584 @@ fi
echo "$ac_t""$enableval" 1>&6
+if test $cf_cv_screen = pdcurses ; then
+
+ # If we find X, set shell vars x_includes and x_libraries to the
+# paths, otherwise set no_x=yes.
+# Uses ac_ vars as temps to allow command line to override cache and checks.
+# --without-x overrides everything else, but does not touch the cache.
+echo $ac_n "checking for X""... $ac_c" 1>&6
+echo "configure:14364: checking for X" >&5
+
+
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+ withval="$with_x"
+ :
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
+else
+ if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+ # Both variables are already set.
+ have_x=yes
+ else
+if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=NO ac_x_libraries=NO
+rm -fr conftestdir
+if mkdir conftestdir; then
+ cd conftestdir
+ # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+ cat > Imakefile <<'EOF'
+acfindx:
+ @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+EOF
+ if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+ # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+ eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+ for ac_extension in a so sl; do
+ if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+ test -f $ac_im_libdir/libX11.$ac_extension; then
+ ac_im_usrlibdir=$ac_im_libdir; break
+ fi
+ done
+ # Screen out bogus values from the imake configuration. They are
+ # bogus both because they are the default anyway, and because
+ # using them would break gcc on systems where it needs fixed includes.
+ case "$ac_im_incroot" in
+ /usr/include) ;;
+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;;
+ esac
+ case "$ac_im_usrlibdir" in
+ /usr/lib | /lib) ;;
+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;;
+ esac
+ fi
+ cd ..
+ rm -fr conftestdir
+fi
+
+if test "$ac_x_includes" = NO; then
+ # Guess where to find include files, by looking for this one X11 .h file.
+ test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
+
+ # First, try using that file with no special directory specified.
+cat > conftest.$ac_ext <<EOF
+#line 14427 "configure"
+#include "confdefs.h"
+#include <$x_direct_test_include>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:14432: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ # Look for the header file in a standard set of common directories.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ for ac_dir in \
+ /usr/X11/include \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11 \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ /usr/local/include/X11R4 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include/X11 \
+ \
+ /usr/include \
+ /usr/local/include \
+ /usr/unsupported/include \
+ /usr/athena/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ \
+ /usr/openwin/include \
+ /usr/openwin/share/include \
+ ; \
+ do
+ if test -r "$ac_dir/$x_direct_test_include"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+ done
+fi
+rm -f conftest*
+fi # $ac_x_includes = NO
+
+if test "$ac_x_libraries" = NO; then
+ # Check for the libraries.
+
+ test -z "$x_direct_test_library" && x_direct_test_library=Xt
+ test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
+
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS="$LIBS"
+ LIBS="-l$x_direct_test_library $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 14501 "configure"
+#include "confdefs.h"
+
+int main() {
+${x_direct_test_function}()
+; return 0; }
+EOF
+if { (eval echo configure:14508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ LIBS="$ac_save_LIBS"
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ LIBS="$ac_save_LIBS"
+# First see if replacing the include by lib works.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \
+ /usr/X11/lib \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11R4/lib \
+ \
+ /usr/lib/X11 \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ /usr/lib/X11R4 \
+ \
+ /usr/local/X11/lib \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ /usr/local/X11R4/lib \
+ \
+ /usr/local/lib/X11 \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ /usr/local/lib/X11R4 \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ /lib/usr/lib/X11 \
+ \
+ /usr/openwin/lib \
+ /usr/openwin/share/lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+fi
+rm -f conftest*
+fi # $ac_x_libraries = NO
+
+if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then
+ # Didn't find X anywhere. Cache the known absence of X.
+ ac_cv_have_x="have_x=no"
+else
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ echo "$ac_t""$have_x" 1>&6
+ no_x=yes
+else
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+ echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6
+fi
+
+
+
+# We need to check for -lsocket and -lnsl here in order to work around an
+# autoconf bug. autoconf-2.12 is not checking for these prior to checking for
+# the X11R6 -lSM and -lICE libraries. The resultant failures cascade...
+# (tested on Solaris 2.5 w/ X11R6)
+SYSTEM_NAME=`echo "$cf_cv_system_name"|tr ' ' -`
+cf_have_X_LIBS=no
+case $SYSTEM_NAME in
+irix[56]*) ;;
+clix*)
+ # FIXME: modify the library lookup in autoconf to
+ # allow _s.a suffix ahead of .a
+ echo $ac_n "checking for open in -lc_s""... $ac_c" 1>&6
+echo "configure:14608: checking for open in -lc_s" >&5
+ac_lib_var=`echo c_s'_'open | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lc_s $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 14616 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char open();
+
+int main() {
+open()
+; return 0; }
+EOF
+if { (eval echo configure:14627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="-lc_s $LIBS"
+ echo $ac_n "checking for gethostname in -lbsd""... $ac_c" 1>&6
+echo "configure:14644: checking for gethostname in -lbsd" >&5
+ac_lib_var=`echo bsd'_'gethostname | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lbsd $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 14652 "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:14663: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="-lbsd $LIBS"
+ echo $ac_n "checking for gethostname in -lnsl_s""... $ac_c" 1>&6
+echo "configure:14680: checking for gethostname in -lnsl_s" >&5
+ac_lib_var=`echo nsl_s'_'gethostname | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lnsl_s $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 14688 "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:14699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="-lnsl_s $LIBS"
+ echo $ac_n "checking for XOpenDisplay in -lX11_s""... $ac_c" 1>&6
+echo "configure:14716: checking for XOpenDisplay in -lX11_s" >&5
+ac_lib_var=`echo X11_s'_'XOpenDisplay | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lX11_s $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 14724 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XOpenDisplay();
+
+int main() {
+XOpenDisplay()
+; return 0; }
+EOF
+if { (eval echo configure:14735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="-lX11_s $LIBS"
+ echo $ac_n "checking for XtAppInitialize in -lXt_s""... $ac_c" 1>&6
+echo "configure:14752: checking for XtAppInitialize in -lXt_s" >&5
+ac_lib_var=`echo Xt_s'_'XtAppInitialize | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lXt_s $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 14760 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XtAppInitialize();
+
+int main() {
+XtAppInitialize()
+; return 0; }
+EOF
+if { (eval echo configure:14771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="-lXt_s $LIBS"
+ cf_have_X_LIBS=Xt
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ ;;
+*)
+ echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
+echo "configure:14812: checking for socket in -lsocket" >&5
+ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lsocket $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 14820 "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:14831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-lsocket $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ echo $ac_n "checking for gethostname in -lnsl""... $ac_c" 1>&6
+echo "configure:14859: checking for gethostname in -lnsl" >&5
+ac_lib_var=`echo nsl'_'gethostname | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lnsl $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 14867 "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:14878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-lnsl $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ ;;
+esac
+
+if test $cf_have_X_LIBS = no ; then
+ if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+ cat >> confdefs.h <<\EOF
+#define X_DISPLAY_MISSING 1
+EOF
+
+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+ if test -n "$x_includes"; then
+ X_CFLAGS="$X_CFLAGS -I$x_includes"
+ fi
+
+ # It would also be nice to do this for all -L options, not just this one.
+ if test -n "$x_libraries"; then
+ X_LIBS="$X_LIBS -L$x_libraries"
+ # For Solaris; some versions of Sun CC require a space after -R and
+ # others require no space. Words are not sufficient . . . .
+ case "`(uname -sr) 2>/dev/null`" in
+ "SunOS 5"*)
+ echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
+echo "configure:14929: checking whether -R must be followed by a space" >&5
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
+ cat > conftest.$ac_ext <<EOF
+#line 14932 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:14939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_R_nospace=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_R_nospace=no
+fi
+rm -f conftest*
+ if test $ac_R_nospace = yes; then
+ echo "$ac_t""no" 1>&6
+ X_LIBS="$X_LIBS -R$x_libraries"
+ else
+ LIBS="$ac_xsave_LIBS -R $x_libraries"
+ cat > conftest.$ac_ext <<EOF
+#line 14955 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:14962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_R_space=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_R_space=no
+fi
+rm -f conftest*
+ if test $ac_R_space = yes; then
+ echo "$ac_t""yes" 1>&6
+ X_LIBS="$X_LIBS -R $x_libraries"
+ else
+ echo "$ac_t""neither works" 1>&6
+ fi
+ fi
+ LIBS="$ac_xsave_LIBS"
+ esac
+ fi
+
+ # Check for system-dependent libraries X programs must link with.
+ # Do this before checking for the system-independent R6 libraries
+ # (-lICE), since we may need -lsocket or whatever for X linking.
+
+ if test "$ISC" = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+ else
+ # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X
+ # libraries were built with DECnet support. And karl@cs.umb.edu says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
+echo "configure:14994: checking for dnet_ntoa in -ldnet" >&5
+ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldnet $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15002 "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 dnet_ntoa();
+
+int main() {
+dnet_ntoa()
+; return 0; }
+EOF
+if { (eval echo configure:15013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
+echo "configure:15035: checking for dnet_ntoa in -ldnet_stub" >&5
+ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldnet_stub $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15043 "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 dnet_ntoa();
+
+int main() {
+dnet_ntoa()
+; return 0; }
+EOF
+if { (eval echo configure:15054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+ # to get the SysV transport functions.
+ # chad@anasazi.com says the Pyramis MIS-ES running DC/OSx (SVR4)
+ # needs -lnsl.
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to dickey@clark.net.
+ echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
+echo "configure:15083: 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 15088 "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:15111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_gethostbyname=yes"
+else
+ 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
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_gethostbyname = no; then
+ echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
+echo "configure:15132: 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 $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15140 "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:15151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # lieder@skyler.mavd.honeywell.com says without -lsocket,
+ # socket/setsockopt and other routines are undefined under SCO ODT
+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
+ # on later versions), says simon@lia.di.epfl.ch: it contains
+ # gethostby* variants that don't use the nameserver (or something).
+ # -lsocket must be given before -lnsl if both are needed.
+ # We assume that if connect needs -lnsl, so does gethostbyname.
+ echo $ac_n "checking for connect""... $ac_c" 1>&6
+echo "configure:15181: checking for connect" >&5
+if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 15186 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char connect(); 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 connect();
+
+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_connect) || defined (__stub___connect)
+choke me
+#else
+connect();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:15209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_connect=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_connect=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_connect = no; then
+ echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
+echo "configure:15230: checking for connect in -lsocket" >&5
+ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15238 "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 connect();
+
+int main() {
+connect()
+; return 0; }
+EOF
+if { (eval echo configure:15249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
+ echo $ac_n "checking for remove""... $ac_c" 1>&6
+echo "configure:15273: checking for remove" >&5
+if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 15278 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char remove(); 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 remove();
+
+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_remove) || defined (__stub___remove)
+choke me
+#else
+remove();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:15301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_remove=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_remove=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'remove`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_remove = no; then
+ echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
+echo "configure:15322: checking for remove in -lposix" >&5
+ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lposix $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15330 "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 remove();
+
+int main() {
+remove()
+; return 0; }
+EOF
+if { (eval echo configure:15341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ echo $ac_n "checking for shmat""... $ac_c" 1>&6
+echo "configure:15365: checking for shmat" >&5
+if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 15370 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shmat(); 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 shmat();
+
+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_shmat) || defined (__stub___shmat)
+choke me
+#else
+shmat();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:15393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_shmat=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_shmat=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'shmat`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test $ac_cv_func_shmat = no; then
+ echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
+echo "configure:15414: checking for shmat in -lipc" >&5
+ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lipc $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15422 "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 shmat();
+
+int main() {
+shmat()
+; return 0; }
+EOF
+if { (eval echo configure:15433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ fi
+ fi
+
+ # Check for libraries that X11R6 Xt/Xaw programs need.
+ ac_save_LDFLAGS="$LDFLAGS"
+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+ # check for ICE first), but we must link in the order -lSM -lICE or
+ # we get undefined symbols. So assume we have SM if we have ICE.
+ # These have to be linked with before -lX11, unlike the other
+ # libraries we check for below, so use a different variable.
+ # --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
+ echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
+echo "configure:15466: checking for IceConnectionNumber in -lICE" >&5
+ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15474 "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 IceConnectionNumber();
+
+int main() {
+IceConnectionNumber()
+; return 0; }
+EOF
+if { (eval echo configure:15485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ LDFLAGS="$ac_save_LDFLAGS"
+
+fi
+
+ LDFLAGS="$LDFLAGS $X_LIBS"
+
+for cf_add_cflags in $X_CFLAGS
+do
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case "$CPPFLAGS" in
+ *$cf_add_cflags)
+ ;;
+ *)
+ CPPFLAGS="$CPPFLAGS $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ CFLAGS="$CFLAGS $cf_add_cflags"
+ ;;
+ esac
+done
+
+ echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
+echo "configure:15530: checking for XOpenDisplay in -lX11" >&5
+ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15538 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XOpenDisplay();
+
+int main() {
+XOpenDisplay()
+; return 0; }
+EOF
+if { (eval echo configure:15549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="-lX11 $LIBS"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ echo $ac_n "checking for XtAppInitialize in -lXt""... $ac_c" 1>&6
+echo "configure:15570: checking for XtAppInitialize in -lXt" >&5
+ac_lib_var=`echo Xt'_'XtAppInitialize | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15578 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XtAppInitialize();
+
+int main() {
+XtAppInitialize()
+; return 0; }
+EOF
+if { (eval echo configure:15589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define HAVE_LIBXT 1
+EOF
+
+ cf_have_X_LIBS=Xt
+ LIBS="-lXt $X_PRE_LIBS $LIBS"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+else
+ LDFLAGS="$LDFLAGS $X_LIBS"
+
+for cf_add_cflags in $X_CFLAGS
+do
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case "$CPPFLAGS" in
+ *$cf_add_cflags)
+ ;;
+ *)
+ CPPFLAGS="$CPPFLAGS $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ CFLAGS="$CFLAGS $cf_add_cflags"
+ ;;
+ esac
+done
+
+fi
+
+if test $cf_have_X_LIBS = no ; then
+ echo "configure: warning: Unable to successfully link X Toolkit library (-lXt) with
+test program. You will have to check and add the proper libraries by hand
+to makefile." 1>&2
+fi
+
+
+cf_x_athena=${cf_x_athena-Xaw}
+
+
+# Check whether --with-Xaw3d or --without-Xaw3d was given.
+if test "${with_Xaw3d+set}" = set; then
+ withval="$with_Xaw3d"
+ cf_x_athena=Xaw3d
+fi
+
+
+
+# Check whether --with-neXtaw or --without-neXtaw was given.
+if test "${with_neXtaw+set}" = set; then
+ withval="$with_neXtaw"
+ cf_x_athena=neXtaw
+fi
+
+
+
+echo $ac_n "checking for XextCreateExtension in -lXext""... $ac_c" 1>&6
+echo "configure:15664: checking for XextCreateExtension in -lXext" >&5
+ac_lib_var=`echo Xext'_'XextCreateExtension | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lXext $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15672 "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 XextCreateExtension();
+
+int main() {
+XextCreateExtension()
+; return 0; }
+EOF
+if { (eval echo configure:15683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="-lXext $LIBS"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+cf_x_athena_include=""
+cf_x_athena_lib=""
+
+for cf_path in default \
+ /usr/contrib/X11R6 \
+ /usr/contrib/X11R5 \
+ /usr/lib/X11R5 \
+ /usr/local
+do
+
+ if test -z "$cf_x_athena_include" ; then
+ cf_save="$CPPFLAGS"
+ cf_test=X11/$cf_x_athena/SimpleMenu.h
+ if test $cf_path != default ; then
+ CPPFLAGS="-I$cf_path/include $cf_save"
+ echo $ac_n "checking for $cf_test in $cf_path""... $ac_c" 1>&6
+echo "configure:15720: checking for $cf_test in $cf_path" >&5
+ else
+ echo $ac_n "checking for $cf_test""... $ac_c" 1>&6
+echo "configure:15723: checking for $cf_test" >&5
+ fi
+ cat > conftest.$ac_ext <<EOF
+#line 15726 "configure"
+#include "confdefs.h"
+
+#include <X11/Intrinsic.h>
+#include <$cf_test>
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:15735: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_result=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_result=no
+fi
+rm -f conftest*
+ echo "$ac_t""$cf_result" 1>&6
+ if test "$cf_result" = yes ; then
+ cf_x_athena_include=$cf_path
+ else
+ CPPFLAGS="$cf_save"
+ fi
+ fi
+
+ for cf_lib in "-l$cf_x_athena -lXmu" "-l${cf_x_athena}_s -lXmu_s"
+ do
+ if test -z "$cf_x_athena_lib" ; then
+ cf_save="$LIBS"
+ cf_test=XawSimpleMenuAddGlobalActions
+ if test $cf_path != default ; then
+ LIBS="-L$cf_path/lib $cf_lib $LIBS"
+ echo $ac_n "checking for $cf_lib in $cf_path""... $ac_c" 1>&6
+echo "configure:15761: checking for $cf_lib in $cf_path" >&5
+ else
+ LIBS="$cf_lib $LIBS"
+ echo $ac_n "checking for $cf_test in $cf_lib""... $ac_c" 1>&6
+echo "configure:15765: checking for $cf_test in $cf_lib" >&5
+ fi
+ cat > conftest.$ac_ext <<EOF
+#line 15768 "configure"
+#include "confdefs.h"
+
+int main() {
+$cf_test()
+; return 0; }
+EOF
+if { (eval echo configure:15775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_result=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_result=no
+fi
+rm -f conftest*
+ echo "$ac_t""$cf_result" 1>&6
+ if test "$cf_result" = yes ; then
+ cf_x_athena_lib="$cf_lib"
+ else
+ LIBS="$cf_save"
+ fi
+ fi
+ done
+done
+
+if test -z "$cf_x_athena_include" ; then
+ echo "configure: warning: Unable to successfully find Athena header files with test program" 1>&2
+fi
+
+if test -z "$cf_x_athena_lib" ; then
+ { echo "configure: error: Unable to successfully link Athena library (-l$cf_x_athena) with test program" 1>&2; exit 1; }
+fi
+
+
+CF_X_ATHENA_LIBS=`echo "HAVE_LIB_$cf_x_athena" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+cat >> confdefs.h <<EOF
+#define $CF_X_ATHENA_LIBS 1
+EOF
+
+
+
+
+LDFLAGS="$LDFLAGS $X_LIBS"
+
+for cf_add_cflags in $X_CFLAGS
+do
+ case $cf_add_cflags in #(vi
+ -undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+ case "$CPPFLAGS" in
+ *$cf_add_cflags)
+ ;;
+ *)
+ CPPFLAGS="$CPPFLAGS $cf_add_cflags"
+ ;;
+ esac
+ ;;
+ *)
+ CFLAGS="$CFLAGS $cf_add_cflags"
+ ;;
+ esac
+done
+
+echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
+echo "configure:15834: checking for XOpenDisplay in -lX11" >&5
+ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15842 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XOpenDisplay();
+
+int main() {
+XOpenDisplay()
+; return 0; }
+EOF
+if { (eval echo configure:15853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="-lX11 $LIBS"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking for XCurses library""... $ac_c" 1>&6
+echo "configure:15874: checking for XCurses library" >&5
+if eval "test \"`echo '$''{'cf_cv_lib_XCurses'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+LIBS="-lXCurses $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 15881 "configure"
+#include "confdefs.h"
+
+#include <xcurses.h>
+char *XCursesProgramName = "test";
+
+int main() {
+XCursesExit();
+; return 0; }
+EOF
+if { (eval echo configure:15891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_lib_XCurses=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_lib_XCurses=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_lib_XCurses" 1>&6
+if test $cf_cv_lib_XCurses = yes ; then
+ cat >> confdefs.h <<\EOF
+#define UNIX 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define XCURSES 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_XCURSES 1
+EOF
+
+else
+ { echo "configure: error: Cannot link with XCurses" 1>&2; exit 1; }
+fi
+
+else
+
echo $ac_n "checking if we can include termio.h with curses""... $ac_c" 1>&6
-echo "configure:11664: checking if we can include termio.h with curses" >&5
+echo "configure:15925: checking if we can include termio.h with curses" >&5
if eval "test \"`echo '$''{'cf_cv_termio_and_curses'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- cf_save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -DHAVE_CONFIG_H -I. -I${srcdir-.} -I${srcdir-.}/src -I${srcdir-.}/WWW/Library/Implementation"
+ cf_save_CFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -DHAVE_CONFIG_H -I. -I${srcdir-.} -I${srcdir-.}/src -I${srcdir-.}/WWW/Library/Implementation"
touch lynx_cfg.h
cat > conftest.$ac_ext <<EOF
-#line 11673 "configure"
+#line 15934 "configure"
#include "confdefs.h"
#include <LYCurses.h>
@@ -11678,7 +15939,7 @@ int main() {
putchar(0x0a)
; return 0; }
EOF
-if { (eval echo configure:11682: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15943: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_termio_and_curses=yes
else
@@ -11688,7 +15949,7 @@ else
cf_cv_termio_and_curses=no
fi
rm -f conftest*
- CFLAGS="$cf_save_CFLAGS"
+ CPPFLAGS="$cf_save_CFLAGS"
rm -f lynx_cfg.h
fi
@@ -11700,6 +15961,7 @@ test $cf_cv_termio_and_curses = yes && cat >> confdefs.h <<\EOF
EOF
+fi
### Finally, build config.h and the makefiles
CFLAGS="$CFLAGS $EXTRA_CFLAGS"
@@ -11707,8 +15969,8 @@ srcdir="$srcdir"
SRCDIR_CLEAN="#"
if test -n "$srcdir" ; then
echo srcdir is $srcdir
- ${CONFIG_SHELL-/bin/sh} $srcdir/mkdirs.sh WWW/Library/Implementation
- ${CONFIG_SHELL-/bin/sh} $srcdir/mkdirs.sh src/chrtrans
+ /bin/sh $srcdir/mkdirs.sh WWW/Library/Implementation
+ /bin/sh $srcdir/mkdirs.sh src/chrtrans
test "$USE_INCLUDED_LIBINTL" = yes && $srcdir/mkdirs.sh intl
test "$srcdir" != "." && SRCDIR_CLEAN=""
fi
@@ -11807,7 +16069,7 @@ do
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.13.19990117"
+ echo "$CONFIG_STATUS generated by autoconf version 2.13.20000819"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
@@ -11823,7 +16085,7 @@ trap 'rm -fr `echo "makefile \
src/makefile \
src/chrtrans/makefile \
$SUB_MAKEFILE
- lynx_cfg.h:config.hin" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+ $CONFIG_H:config.hin" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
@@ -11860,8 +16122,13 @@ 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%@PACKAGE@%$PACKAGE%g
+s%@VERSION@%$VERSION%g
+s%@DESTDIR@%$DESTDIR%g
+s%@CONFIG_H@%$CONFIG_H%g
s%@CC@%$CC%g
s%@CPP@%$CPP%g
+s%@LN_S@%$LN_S%g
s%@RANLIB@%$RANLIB%g
s%@SET_MAKE@%$SET_MAKE%g
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
@@ -11874,8 +16141,10 @@ s%@SHOW_CC@%$SHOW_CC%g
s%@ECHO_CC@%$ECHO_CC%g
s%@DONT_ECHO_CC@%$DONT_ECHO_CC%g
s%@EXTRA_CFLAGS@%$EXTRA_CFLAGS%g
+s%@PROG_EXT@%$PROG_EXT%g
s%@ALLOCA@%$ALLOCA%g
s%@USE_NLS@%$USE_NLS%g
+s%@PATHSEP@%$PATHSEP%g
s%@MSGFMT@%$MSGFMT%g
s%@GMSGFMT@%$GMSGFMT%g
s%@XGETTEXT@%$XGETTEXT%g
@@ -11896,11 +16165,11 @@ s%@GT_NO@%$GT_NO%g
s%@GT_YES@%$GT_YES%g
s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g
s%@l@%$l%g
-s%@NLS_DATADIR@%$NLS_DATADIR%g
s%@USE_OUR_MESSAGES@%$USE_OUR_MESSAGES%g
-s%@INTLDIR_CPPFLAGS@%$INTLDIR_CPPFLAGS%g
s%@INTLDIR_MAKE@%$INTLDIR_MAKE%g
s%@MSG_DIR_MAKE@%$MSG_DIR_MAKE%g
+s%@INTLDIR_CPPFLAGS@%$INTLDIR_CPPFLAGS%g
+s%@NLS_DATADIR@%$NLS_DATADIR%g
s%@CHMOD@%$CHMOD%g
s%@COMPRESS@%$COMPRESS%g
s%@COPY@%$COPY%g
@@ -11919,11 +16188,18 @@ s%@ZIP@%$ZIP%g
s%@TELNET@%$TELNET%g
s%@TN3270@%$TN3270%g
s%@RLOGIN@%$RLOGIN%g
-s%@PROG_EXT@%$PROG_EXT%g
+s%@INSTALL@%$INSTALL%g
+s%@CHARSET_DEFS@%$CHARSET_DEFS%g
s%@LIBOBJS@%$LIBOBJS%g
s%@INSTALL_LSS@%$INSTALL_LSS%g
+s%@LYNXCFG_MAKE@%$LYNXCFG_MAKE%g
+s%@LYNXCFG_URL@%$LYNXCFG_URL%g
s%@COMPRESS_PROG@%$COMPRESS_PROG%g
s%@COMPRESS_EXT@%$COMPRESS_EXT%g
+s%@X_CFLAGS@%$X_CFLAGS%g
+s%@X_PRE_LIBS@%$X_PRE_LIBS%g
+s%@X_LIBS@%$X_LIBS%g
+s%@X_EXTRA_LIBS@%$X_EXTRA_LIBS%g
s%@CONFIG_SHELL@%$CONFIG_SHELL%g
s%@SRCDIR_CLEAN@%$SRCDIR_CLEAN%g
@@ -12053,7 +16329,7 @@ ac_eD='%g'
if test "${CONFIG_HEADERS+set}" != set; then
EOF
cat >> $CONFIG_STATUS <<EOF
- CONFIG_HEADERS="lynx_cfg.h:config.hin"
+ CONFIG_HEADERS="$CONFIG_H:config.hin"
EOF
cat >> $CONFIG_STATUS <<\EOF
fi
@@ -12141,7 +16417,61 @@ cat >> $CONFIG_STATUS <<\EOF
fi; done
EOF
+
cat >> $CONFIG_STATUS <<EOF
+ac_sources="$nls_cv_header_libgt"
+ac_dests="$nls_cv_header_intl"
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+srcdir=$ac_given_srcdir
+while test -n "$ac_sources"; do
+ set $ac_dests; ac_dest=$1; shift; ac_dests=$*
+ set $ac_sources; ac_source=$1; shift; ac_sources=$*
+
+ echo "linking $srcdir/$ac_source to $ac_dest"
+
+ if test ! -r $srcdir/$ac_source; then
+ { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; }
+ fi
+ rm -f $ac_dest
+
+ # Make relative symlinks.
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then
+ # The dest file is in a subdirectory.
+ test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir"
+ ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dest_dir_suffix.
+ ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dest_dir_suffix= ac_dots=
+ fi
+
+ case "$srcdir" in
+ [/$]*) ac_rel_source="$srcdir/$ac_source" ;;
+ *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;;
+ esac
+
+ # Make a symlink if possible; otherwise try a hard link.
+ if ln -s $ac_rel_source $ac_dest 2>/dev/null ||
+ ln $srcdir/$ac_source $ac_dest; then :
+ else
+ { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; }
+ fi
+done
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ #(vi
+ case "\$CONFIG_FILES" in
+ *po/makefile.in*) #(vi
+ sed -e "/POTFILES =/r po/POTFILES" po/makefile.in > po/makefile
+ ;;
+ *po/Makefile.in*)
+ sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
+ esac
+
# Extra initialization commands, if any
USE_NLS=$USE_NLS
@@ -12156,7 +16486,7 @@ cat >> $CONFIG_STATUS <<\EOF
if test "$use_our_messages" = yes ; then
echo creating po/makefile
rm -f po/temp$$
- sed -e 's@^.*LYMessages.c@../LYMessages.c@' \
+ sed -e 's@^.*LYMessages.c@ ../LYMessages.c@' \
-e '$s/\\//' po/POTFILES >po/temp$$
sed -e "/POTFILES =/r po/temp$$" \
po/makefile.in > po/makefile
diff --git a/gnu/usr.bin/lynx/configure.in b/gnu/usr.bin/lynx/configure.in
index 7ba388833bf..9955b5d59f2 100644
--- a/gnu/usr.bin/lynx/configure.in
+++ b/gnu/usr.bin/lynx/configure.in
@@ -1,16 +1,25 @@
dnl Process this file with autoconf to produce a configure script.
dnl written jan/1997
-dnl by T.E.Dickey <dickey@clark.net>
+dnl by T.E.Dickey <dickey@invisible-island.net>
dnl and Jim Spath <jspath@mail.bcpl.lib.md.us>
-AC_PREREQ(2.12)
-rm -f config.cache
+AC_PREREQ(2.13)
AC_INIT(userdefs.h)
-AC_CONFIG_HEADER(lynx_cfg.h:config.hin)
+rm -f config.cache; touch config.cache
+CONFIG_H=lynx_cfg.h
+AC_CONFIG_HEADER($CONFIG_H:config.hin)
CF_CHECK_CACHE
+PACKAGE=lynx
+VERSION=2.8.4
+
+AC_SUBST(PACKAGE)
+AC_SUBST(VERSION)
+AC_SUBST(DESTDIR)
+AC_SUBST(CONFIG_H)
+
dnl Set of available languages (based on source distribution)
test -z "$ALL_LINGUAS" && ALL_LINGUAS=`test -d $srcdir/po && cd $srcdir/po && echo *.po|sed -e 's/\.po//g' -e 's/*//'`
@@ -20,8 +29,18 @@ dnl --------------------------------------------------------------------------
dnl Checks for location of programs
dnl --------------------------------------------------------------------------
+dnl Only add to this case statement when a system has a compiler that is not
+dnl detected by AC_PROG_CC.
+case $host_os in
+openedition)
+ : ${CFLAGS="-D_ALL_SOURCE -Wl,EDIT=NO"}
+ : ${CC=c89}
+ ;;
+esac
+
AC_PROG_CC
AC_PROG_CPP
+AC_PROG_LN_S
AC_PROG_RANLIB
AC_PROG_MAKE_SET
AC_PROG_INSTALL
@@ -57,7 +76,7 @@ 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 logic for object code debugging],
+ [ --enable-debug compile w/ debugging (if \$CFLAGS is set, add -g there, too)],
[with_debug=yes],
[with_debug=no])
AC_MSG_RESULT($with_debug)
@@ -90,6 +109,14 @@ CF_ARG_DISABLE(trace,
AC_MSG_RESULT($with_trace)
test $with_trace = no && AC_DEFINE(NO_LYNX_TRACE)
+AC_MSG_CHECKING(if you want verbose trace code)
+CF_ARG_ENABLE(vertrace,
+ [ --enable-vertrace verbose trace code],
+ [with_vertrace=yes],
+ [with_vertrace=no])
+AC_MSG_RESULT($with_vertrace)
+test $with_vertrace = yes && AC_DEFINE(LY_TRACELINE,__LINE__)
+
if test -n "$GCC"
then
AC_MSG_CHECKING(if you want to turn on gcc warnings)
@@ -106,137 +133,12 @@ fi
fi
dnl --------------------------------------------------------------------------
-dnl --------------------------------------------------------------------------
-
-CF_HELP_MESSAGE(
-Basic Configuration Options:)
-
-dnl internationalization macros
-AM_GNU_GETTEXT
-
-CF_WITH_PATH(nls-datadir,
-[ --with-nls-datadir=DIR NLS data, parent of locale],
-NLS_DATADIR,
-[PREFIX/DATADIR],
-[$prefix/$DATADIRNAME])
-
-INTLDIR_CPPFLAGS="#"
-INTLDIR_MAKE=
-MSG_DIR_MAKE=
-SUB_MAKEFILE=
-CF_OUR_MESSAGES
-if test "$USE_INCLUDED_LIBINTL" = yes ; then
- if test "$nls_cv_force_use_gnu_gettext" = yes ; then
- AC_MSG_WARN(Using included gettext anyway[,] since none was found)
- SUB_MAKEFILE="intl/makefile"
- else
- INTLDIR_MAKE="#"
- fi
- if test $use_our_messages = no ; then
- MSG_DIR_MAKE="#"
- SUB_MAKEFILE=
- fi
- if test "$use_our_messages" = yes ; then
- SUB_MAKEFILE="$SUB_MAKEFILE po/makefile.in:po/makefile.inn"
- else
- MSG_DIR_MAKE="#"
- fi
-elif test "$USE_NLS" = yes ; then
- AC_CHECK_HEADERS(libintl.h)
- INTLDIR_MAKE="#"
- SUB_MAKEFILE="po/makefile.in:po/makefile.inn"
-else
- INTLDIR_MAKE="#"
- MSG_DIR_MAKE="#"
-fi
-
-dnl We might want to use a preinstalled message library rather than the one
-dnl which is bundled with this program.
-if test -z "$MSG_DIR_MAKE" ; then
- if test $use_our_messages = no ; then
- MSG_DIR_MAKE="#"
- SUB_MAKEFILE=
- fi
-fi
-
-if test -z "$INTLDIR_MAKE" ; then
- INTLDIR_CPPFLAGS=
-fi
-
-AC_SUBST(INTLDIR_CPPFLAGS)
-AC_SUBST(INTLDIR_MAKE)
-AC_SUBST(MSG_DIR_MAKE)
-
-dnl FIXME: the underlying AM_GNU_GETTEXT macro either needs some fixes or a
-dnl little documentation. It doesn't define anything so that we can ifdef our
-dnl own code, except ENABLE_NLS, which is too vague to be of any use.
-
-if test "$USE_INCLUDED_LIBINTL" = yes ; then
- if test "$nls_cv_force_use_gnu_gettext" = yes ; then
- AC_DEFINE(HAVE_GETTEXT)
- elif test "$nls_cv_use_gnu_gettext" = yes ; then
- AC_DEFINE(HAVE_GETTEXT)
- fi
- if test -n "$nls_cv_header_intl" ; then
- AC_DEFINE(HAVE_LIBINTL_H)
- fi
-fi
-
-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)
-test $with_full_paths = no && AC_DEFINE(USE_EXECVP)
-
-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(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(BZIP2, bzip2)
-CF_PATH_PROG(UUDECODE, uudecode)
-CF_PATH_PROG(ZCAT, zcat)
-CF_PATH_PROG(ZIP, zip)
-CF_PATH_PROG(TELNET, telnet)
-CF_PATH_PROG(TN3270, tn3270)
-CF_PATH_PROG(RLOGIN, rlogin)
-
-dnl 'INSTALL' is a special case, since the configure script has to find a
-dnl BSD-compatible one so the build/install works properly.
-case "$INSTALL" in
-$srcdir*) # (vi
- AC_DEFINE_UNQUOTED(INSTALL_PATH,"install")
- ;;
-*) # (vi
- AC_DEFINE_UNQUOTED(INSTALL_PATH,"$INSTALL")
- ;;
-esac
-
-dnl --------------------------------------------------------------------------
dnl Checks for compiler & standard-library characteristics
dnl --------------------------------------------------------------------------
dnl If we're able to run this script, this is true!
AC_DEFINE(UNIX)
-if test -z "$GCC" ; then
- CF_ANSI_CC_CHECK
-fi
AC_C_CONST
dnl Only add to this case statement things that we cannot design tests for.
@@ -244,7 +146,7 @@ PROG_EXT=
TRY_CFLAGS=
case $host_os in
aix4*)
- CFLAGS="$CFLAGS -DAIX4 -D_BSD=44 -D_AIX"
+ TRY_CFLAGS="$TRY_CFLAGS -DAIX4 -D_BSD=44 -D_AIX"
LIBS="$LIBS -lbsd"
;;
aix*)
@@ -254,7 +156,7 @@ apollo*)
TRY_CFLAGS="$TRY_CFLAGS -D_BUILTINS -W0,-opt,4"
;;
bsdi*)
- CFLAGS="$CFLAGS -DBSDI"
+ TRY_CFLAGS="$TRY_CFLAGS -DBSDI"
;;
clix*)
# Tested on CLIX 3.1 (T.Dickey). The original makefile entry
@@ -263,50 +165,53 @@ clix*)
AC_CHECK_LIB(c_s,strcmp)
;;
convex*)
- CFLAGS="$CFLAGS -D__STDC__ -Dunix"
+ TRY_CFLAGS="$TRY_CFLAGS -D__STDC__ -Dunix"
+ ;;
+cygwin*)
+ PROG_EXT=".exe"
+ LIBS="$LIBS -luser32"
;;
dgux*)
- CFLAGS="$CFLAGS -DDGUX"
+ TRY_CFLAGS="$TRY_CFLAGS -DDGUX"
;;
hpux*)
- CFLAGS="$CFLAGS -DSNAKE"
+ TRY_CFLAGS="$TRY_CFLAGS -DSNAKE"
test -z "$GCC" && TRY_CFLAGS="$TRY_CFLAGS -Wp,-H600000"
;;
isc*)
# -DPOSIX_JC is necessary, else LYBookmark.c never finds out what a mode_t is.
- CFLAGS="$CFLAGS -DISC -DPOSIX_JC"
+ TRY_CFLAGS="$TRY_CFLAGS -DISC -DPOSIX_JC"
LIBS="$LIBS -linet -lnsl_s -lcposix"
;;
irix*)
# The original makefile used the $CFLAGS option -cckr for some form
# of K&R compatibility. However, this causes compilation warnings for
# varargs on IRIX 5.2, and does not appear to be needed.
- #removed: CFLAGS="$CFLAGS -cckr"
;;
linux*)
- CFLAGS="$CFLAGS -DLINUX"
+ TRY_CFLAGS="$TRY_CFLAGS -DLINUX"
;;
next*)
- CFLAGS="$CFLAGS -DNEXT -DXMOSAIC_HACK"
+ TRY_CFLAGS="$TRY_CFLAGS -DNEXT -DXMOSAIC_HACK"
;;
openbsd*)
- LIBS="$LIBS -lcompat -ltermlib -lssl -lcrypto"
+ LIBS="$LIBS -lcompat"
;;
os2*)
# We make sure -Zexe is not used -- it would interfere with @PROG_EXT@
- CFLAGS="$CFLAGS -Zmt -D__ST_MT_ERRNO__"
+ TRY_CFLAGS="$TRY_CFLAGS -Zmt -D__ST_MT_ERRNO__"
LDFLAGS=`echo "$LDFLAGS -Zmt -Zcrtdll" | sed "s/-Zexe//g"`
PROG_EXT=".exe"
;;
osf4*)
# The -Olimit flag (see below) is no longer available with
# Digital C 5.2, which is bundled with Digital UNIX 4.0.
- CFLAGS="$CFLAGS -DDSYS5"
+ TRY_CFLAGS="$TRY_CFLAGS -DDSYS5"
;;
osf*)
# Increase the maximum size of functions that will be optimized.
test -z "$GCC" && TRY_CFLAGS="$TRY_CFLAGS -O -Olimit 4000"
- CFLAGS="$CFLAGS -DDSYS5"
+ TRY_CFLAGS="$TRY_CFLAGS -DDSYS5"
;;
sco3.2v5*)
test $ac_cv_prog_gcc != yes && TRY_CFLAGS="$TRY_CFLAGS -belf"
@@ -324,28 +229,28 @@ sco*)
esac
;;
sequent-ptx)
- CFLAGS="$CFLAGS -DSVR4_BSDSELECT -DNO_IOCTL -DUSE_FCNTL"
+ TRY_CFLAGS="$TRY_CFLAGS -DSVR4_BSDSELECT -DNO_IOCTL -DUSE_FCNTL"
;;
sequent-ptx2)
- CFLAGS="$CFLAGS -DSVR4_BSDSELECT"
+ TRY_CFLAGS="$TRY_CFLAGS -DSVR4_BSDSELECT"
;;
sony-newsos*)
- CFLAGS="$CFLAGS -I/usr/sony/include"
+ TRY_CFLAGS="$TRY_CFLAGS -I/usr/sony/include"
AC_CHECK_HEADERS(jcurses.h)
;;
svr4)
- CFLAGS="$CFLAGS -DSVR4_BSDSELECT -DSVR4"
+ TRY_CFLAGS="$TRY_CFLAGS -DSVR4_BSDSELECT -DSVR4"
;;
sunos3*)
- CFLAGS="$CFLAGS -DSUN"
+ TRY_CFLAGS="$TRY_CFLAGS -DSUN"
;;
sunos4*)
- CFLAGS="$CFLAGS -DSUN -DSUN4"
+ TRY_CFLAGS="$TRY_CFLAGS -DSUN -DSUN4"
;;
ultrix*)
# Increase the maximum size of functions that will be optimized.
test -z "$GCC" && TRY_CFLAGS="$TRY_CFLAGS -O -Olimit 600 -G 7"
- CFLAGS="$CFLAGS -DULTRIX"
+ TRY_CFLAGS="$TRY_CFLAGS -DULTRIX"
AC_CHECK_HEADERS(cursesX.h,
[AC_DEFINE(HAVE_CURSESX_H)
cf_cv_ncurses_header=cursesX.h])
@@ -353,14 +258,93 @@ ultrix*)
esac
AC_SUBST(PROG_EXT)
+if test -z "$GCC" ; then
+ CF_ANSI_CC_CHECK
+fi
+
+dnl --------------------------------------------------------------------------
+dnl --------------------------------------------------------------------------
+
+CF_HELP_MESSAGE(
+Basic Configuration Options:)
+
+dnl internationalization macros
+CF_BUNDLED_INTL(makefile)
+
+INTLDIR_CPPFLAGS="#"
+if test -z "$INTLDIR_MAKE" ; then
+ INTLDIR_CPPFLAGS=
+fi
+
+AC_SUBST(INTLDIR_CPPFLAGS)
+
+CF_WITH_PATH(nls-datadir,
+[ --with-nls-datadir=DIR NLS data, parent of locale],
+NLS_DATADIR,
+[PREFIX/DATADIR],
+[$prefix/$DATADIRNAME])
+
+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)
+test $with_full_paths = no && AC_DEFINE(USE_EXECVP)
+
+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(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(BZIP2, bzip2)
+CF_PATH_PROG(UUDECODE, uudecode)
+CF_PATH_PROG(ZCAT, zcat)
+CF_PATH_PROG(ZIP, zip)
+CF_PATH_PROG(TELNET, telnet)
+CF_PATH_PROG(TN3270, tn3270)
+CF_PATH_PROG(RLOGIN, rlogin)
+
+dnl 'INSTALL' is a special case, since the configure script has to find a
+dnl BSD-compatible one so the build/install works properly.
+case "$INSTALL" in
+$srcdir*) # (vi
+ AC_DEFINE_UNQUOTED(INSTALL_PATH,"install")
+ ;;
+*) # (vi
+ cf_save_INSTALL="$INSTALL"
+ CF_PATH_PROG(INSTALL, install)
+ INSTALL="$cf_save_INSTALL"
+ ;;
+esac
+
+CF_GNU_SOURCE
+
dnl Collect tests for compiler options into one place
if test -n "$TRY_CFLAGS" ; then
cf_save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $TRY_CFLAGS"
+ cf_save_CPPFLAGS="$CPPFLAGS"
+ CF_ADD_CFLAGS($TRY_CFLAGS)
AC_MSG_CHECKING(if we should use compile options $TRY_CFLAGS)
AC_TRY_COMPILE([#include <stdio.h>],[FILE *fp = stdin],[cf_result=yes],[cf_result=no])
AC_MSG_RESULT($cf_result)
- test "$cf_result" = no && CFLAGS="$cf_save_CFLAGS"
+ if test "$cf_result" = no ; then
+ CFLAGS="$cf_save_CFLAGS"
+ CPPFLAGS="$cf_save_CPPFLAGS"
+ fi
fi
dnl --------------------------------------------------------------------------
@@ -369,6 +353,13 @@ dnl --------------------------------------------------------------------------
### Look for network libraries first, since some functions (such as gethostname)
### are used in a lot of places.
+AC_CACHE_CHECK(if you want ssl library,cf_cv_use_libssl,[
+AC_ARG_WITH(ssl,
+ [ --with-ssl[=path] link with ssl library if available],
+ [cf_cv_use_libssl=$withval],
+ [cf_cv_use_libssl=no])
+])
+
AC_CACHE_CHECK(if you want socks library,cf_cv_use_libsocks,[
AC_ARG_WITH(socks,
[ --with-socks[=path] link with socks library if available],
@@ -391,6 +382,9 @@ else
CF_NETLIBS
fi
CF_INET_ADDR
+if test "x$cf_cv_use_libssl" != xno ; then
+ CF_SSL($cf_cv_use_libssl)
+fi
dnl This has to be cached, since there's a lot of interdependent tests.
AC_CACHE_CHECK(for screen type, cf_cv_screen,[
@@ -399,7 +393,7 @@ AC_ARG_WITH(screen,
(XXX is curses (default), ncurses or slang)],
[
case $withval in
-curses|ncurses|slang)
+curses|ncurses|pdcurses|slang)
cf_cv_screen=$withval
;;
*) AC_ERROR(Unexpected value)
@@ -407,24 +401,37 @@ curses|ncurses|slang)
esac],
[cf_cv_screen=curses])])
-if test $cf_cv_screen != ncurses ; then
+case $cf_cv_screen in
+ncurses|slang)
+ ;;
+pdcurses)
+ cf_cv_ncurses_header=xcurses.h
+ ;;
+curses)
if eval "test \"`echo '$''{'cf_cv_ncurses_header'+set}'`\" != set"; then
cf_cv_ncurses_header=curses.h
fi
-fi
+ ;;
+esac
case $cf_cv_screen in
curses)
+ CF_CURSES_CPPFLAGS
+ CF_NCURSES_VERSION
CF_CURSES_LIBS
CF_CURS_PERFORMANCE
+ CF_CURS_TOUCHLINE
;;
ncurses)
CF_NCURSES_CPPFLAGS
CF_NCURSES_LIBS
+ CF_NCURSES_VERSION
+ ;;
+pdcurses)
+ # do this last, since it changes definition of main: CF_PDCURSES_X11
;;
slang)
- CF_SLANG_CPPFLAGS
- CF_SLANG_LIBS
+ CF_SLANG_UNIX_DEFS
;;
esac
@@ -439,6 +446,60 @@ AC_DEFINE_UNQUOTED(LYNX_CFG_FILE,"$LYNX_CFG_FILE")
AC_MSG_RESULT($LYNX_CFG_FILE)
dnl --------------------------------------------------------------------------
+dnl Check for subsets of compiled-in tables.
+dnl --------------------------------------------------------------------------
+CHARSET_DEFS=
+AC_SUBST(CHARSET_DEFS)
+
+AC_MSG_CHECKING(if you want only a few charsets)
+AC_ARG_WITH(charsets,
+[ --with-charsets=list limit charsets to given list of MIME names],
+[cf_charsets=$withval],
+[cf_charsets=])
+
+if test -n "$cf_charsets" ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(ALL_CHARSETS,0)
+ cf_min_charsets=us-ascii,iso-8859-1,utf-8
+ if test "$cf_charsets" = "no" ; then
+ cf_charsets=minimal
+ fi
+ if test "$cf_charsets" = "minimal" ; then
+ CF_VERBOSE(using minimal list of charsets: $cf_min_charsets)
+ fi
+ cf_charsets=`echo $cf_charsets | sed -e "s/minimal/$cf_min_charsets/g" -e 's/,/ /g'`
+ for cf_charset in $cf_charsets
+ do
+ cf_def_charset=`echo $cf_charset | sed -e 's/+/_/g' -e 's/-/_/g'`
+ cf_use_charset=no
+ # check charsets that are defined via .tbl files
+ if ( egrep '^M'$cf_charset'$' $srcdir/src/chrtrans/*.tbl 2>/dev/null >/dev/null )
+ then
+ cf_use_charset=yes
+ # check charsets that are "built-in"
+ else
+ for cf_tst_charset in big5 euc_cn euc_jp euc_kr shift_jis x_transparent
+ do
+ if test "$cf_tst_charset" = "$cf_def_charset"
+ then
+ cf_use_charset=yes
+ break
+ fi
+ done
+ fi
+ if test $cf_use_charset=yes
+ then
+ CF_VERBOSE(found $cf_charset)
+ CHARSET_DEFS="-DNO_CHARSET_${cf_def_charset}=0 $CHARSET_DEFS"
+ else
+ CF_VERBOSE(not found $cf_charset)
+ fi
+ done
+else
+ AC_MSG_RESULT(no)
+fi
+
+dnl --------------------------------------------------------------------------
dnl Checks for standard headers
dnl --------------------------------------------------------------------------
@@ -447,6 +508,7 @@ AC_HEADER_TIME
AC_HEADER_DIRENT
dnl Don't check for sys/wait.h here since it is covered by another test.
AC_CHECK_HEADERS( \
+ arpa/inet.h \
fcntl.h \
limits.h \
stdlib.h \
@@ -455,12 +517,16 @@ AC_CHECK_HEADERS( \
sys/filio.h \
sys/ioctl.h \
sys/param.h \
+ sys/timeb.h \
sys/time.h \
+ syslog.h \
termio.h \
termios.h \
unistd.h \
+ vfork.h \
)
CF_TERMIO_AND_TERMIOS
+CF_FUNC_SIGACTION
CF_FUNC_WAIT
CF_VARARGS
AC_TYPE_GETGROUPS
@@ -478,14 +544,21 @@ CF_REMOVE_BROKEN
CF_FUNC_LSTAT
AC_CHECK_FUNCS( \
cuserid \
+ ftime \
getcwd \
getgroups \
gettimeofday \
+ getuid \
+ mkstemp \
popen \
putenv \
readdir \
+ setuid \
strerror \
+ truncate \
+ ttyname \
unsetenv \
+ vasprintf \
waitpid \
)
AC_REPLACE_FUNCS( \
@@ -493,6 +566,7 @@ AC_REPLACE_FUNCS( \
strstr \
)
+CF_SRAND(lynx_)
CF_CHECK_FUNCDECLS([#include <string.h>], strstr)
CF_CHECK_FUNCDECLS([
#include <stdio.h>
@@ -504,30 +578,43 @@ dnl --------------------------------------------------------------------------
CF_BOOL_DEFS
CF_ERRNO
+CF_SET_ERRNO
CF_LOCALE
CF_NGROUPS
CF_SYS_ERRLIST
CF_UTMP
CF_CHECK_EXTERN_DATA(h_errno,int)
-CF_EBCDIC
-
### These tests must be run after establishing the curses library.
if test $cf_cv_screen != slang ; then
+ if test $cf_cv_screen != pdcurses ; then
+ AC_CHECK_HEADERS(ncurses/term.h term.h)
+ fi
CF_ALT_CHAR_SET
CF_FANCY_CURSES
- CF_NCURSES_VERSION
CF_NCURSES_BROKEN
CF_COLOR_CURSES
CF_SIZECHANGE
CF_TTYTYPE
- AC_CHECK_FUNCS( \
+ CF_CURSES_FUNCS( \
+ assume_default_colors \
cbreak \
define_key \
+ delscreen \
+ getattrs \
+ getbegx \
+ getbegy \
keypad \
+ napms \
+ newpad \
+ newterm \
+ pnoutrefresh \
+ wresize resizeterm \
+ touchline \
+ touchwin \
use_default_colors \
wborder \
- )
+ wredrawln )
fi
dnl --------------------------------------------------------------------------
@@ -537,6 +624,14 @@ dnl --------------------------------------------------------------------------
CF_HELP_MESSAGE(
Experimental Options:)
+AC_MSG_CHECKING(if bibp: URLs should be supported)
+CF_ARG_DISABLE(bibp-urls,
+[ --disable-bibp-urls disable support for bibp: URLs],
+ [use_bibp_urls=$enableval],
+ [use_bibp_urls=yes])
+AC_MSG_RESULT($use_bibp_urls)
+test $use_bibp_urls = no && AC_DEFINE(DISABLE_BIBP)
+
AC_MSG_CHECKING(if configuration info should be browsable)
CF_ARG_DISABLE(config-info,
[ --disable-config-info disable browsable configuration-info],
@@ -569,9 +664,25 @@ CF_ARG_ENABLE(addrlist-page,
AC_MSG_RESULT($use_addrlist_page)
test $use_addrlist_page != no && AC_DEFINE(EXP_ADDRLIST_PAGE)
+AC_MSG_CHECKING(if experimental charset-selection logic should be used)
+CF_ARG_ENABLE(charset-choice,
+[ --enable-charset-choice use experimental charset-selection logic],
+ [use_charset_choice=$enableval],
+ [use_charset_choice=no])
+AC_MSG_RESULT($use_charset_choice)
+test $use_charset_choice != no && AC_DEFINE(EXP_CHARSET_CHOICE)
+
+AC_MSG_CHECKING(if experimental CJK logic should be used)
+CF_ARG_ENABLE(cjk,
+[ --enable-cjk use experimental CJK logic],
+ [use_cjk=$enableval],
+ [use_cjk=no])
+AC_MSG_RESULT($use_cjk)
+test $use_cjk != no && AC_DEFINE(CJK_EX)
+
AC_MSG_CHECKING(if color-style code should be used)
CF_ARG_ENABLE(color-style,
-[ --enable-color-style use optional/experimental color style],
+[ --enable-color-style use optional/experimental color style (ncurses/curses)],
[use_color_style=$enableval],
[use_color_style=no])
@@ -582,8 +693,6 @@ if test $use_color_style != no ; then
if test $cf_cv_screen = slang ; then
AC_ERROR(Configuration does not support color-styles)
fi
- AC_DEFINE(USE_HASH)
- AC_DEFINE(LINKEDSTYLES)
fi
case $use_color_style in
@@ -606,7 +715,7 @@ AC_SUBST(INSTALL_LSS)
use_dft_colors=no
test ".$cf_cv_screen" = ".slang" && use_dft_colors=maybe
-test ".$ac_cv_func_use_default_colors" = ".yes" && use_dft_colors=maybe
+test ".$cf_cv_func_use_default_colors" = ".yes" && use_dft_colors=maybe
if test "$use_dft_colors" != no ; then
AC_MSG_CHECKING(if you want to use default-colors)
@@ -618,6 +727,49 @@ AC_MSG_RESULT($use_dft_colors)
test $use_dft_colors = "yes" && AC_DEFINE(USE_DEFAULT_COLORS)
fi
+AC_MSG_CHECKING(if experimental file-upload logic should be used)
+CF_ARG_ENABLE(file-upload,
+[ --enable-file-upload use experimental file-upload support],
+ [use_file_upload=$enableval],
+ [use_file_upload=no])
+AC_MSG_RESULT($use_file_upload)
+test $use_file_upload != no && AC_DEFINE(EXP_FILE_UPLOAD)
+
+AC_MSG_CHECKING(if experimental htmlized lynx.cfg should be built)
+CF_ARG_ENABLE(htmlized-cfg,
+[ --enable-htmlized-cfg build experimental htmlized lynx.cfg],
+ [use_exp_htmlized_cfg=$enableval],
+ [use_exp_htmlized_cfg=no])
+AC_MSG_RESULT($use_exp_htmlized_cfg)
+
+LYNXCFG_MAKE=''
+LYNXCFG_URL=''
+if test $use_exp_htmlized_cfg = no ; then
+ LYNXCFG_MAKE='#'
+ LYNXCFG_URL='http://www.hippo.ru/%7Ehvv/'
+fi
+AC_SUBST(LYNXCFG_MAKE)
+AC_SUBST(LYNXCFG_URL)
+
+### check for ipv6 support
+AC_MSG_CHECKING([whether to enable ipv6])
+CF_ARG_ENABLE(ipv6,
+ [ --enable-ipv6 use experimental ipv6 (with ipv4) support],
+[AC_DEFINE(ENABLE_IPV6)])
+AC_MSG_RESULT($enableval)
+if test "$enableval" = "yes"; then
+ CF_CHECK_IPV6
+fi
+dnl AC_REPLACE_FUNCS(getaddrinfo getnameinfo)
+
+AC_MSG_CHECKING(if experimental element-justification logic should be used)
+CF_ARG_ENABLE(justify-elts,
+[ --enable-justify-elts use experimental element-justification logic],
+ [use_exp_justify_elts=$enableval],
+ [use_exp_justify_elts=no])
+AC_MSG_RESULT($use_exp_justify_elts)
+test $use_exp_justify_elts != no && AC_DEFINE(EXP_JUSTIFY_ELTS)
+
AC_MSG_CHECKING(if experimental keyboard-layout logic should be used)
CF_ARG_ENABLE(kbd-layout,
[ --enable-kbd-layout use experimental keyboard-layout support],
@@ -626,13 +778,21 @@ CF_ARG_ENABLE(kbd-layout,
AC_MSG_RESULT($use_kbd_layout)
test $use_kbd_layout != no && AC_DEFINE(EXP_KEYBOARD_LAYOUT)
-dnl AC_MSG_CHECKING(if experimental JavaScript support should be used)
-dnl CF_ARG_ENABLE(libjs,
-dnl [ --enable-libjs use experimental JavaScript support (Mozilla libjs)],
-dnl [use_libjs=$enableval],
-dnl [use_libjs=no])
-dnl AC_MSG_RESULT($use_libjs)
-dnl test $use_libjs != no && AC_DEFINE(EXP_LIBJS)
+AC_MSG_CHECKING(if experimental JavaScript support should be used)
+CF_ARG_ENABLE(libjs,
+[ --enable-libjs use experimental JavaScript support (Mozilla libjs)],
+ [use_libjs=$enableval],
+ [use_libjs=no])
+AC_MSG_RESULT($use_libjs)
+test $use_libjs != no && AC_DEFINE(EXP_LIBJS)
+
+AC_MSG_CHECKING(if experimental nested-table logic should be used)
+CF_ARG_ENABLE(nested-tables,
+[ --enable-nested-tables use experimental nested-table support],
+ [use_nested_tables=$enableval],
+ [use_nested_tables=no])
+AC_MSG_RESULT($use_nested_tables)
+test $use_nested_tables != no && AC_DEFINE(EXP_NESTED_TABLES)
AC_MSG_CHECKING(if html source should be colorized)
CF_ARG_ENABLE(prettysrc,
@@ -640,7 +800,30 @@ CF_ARG_ENABLE(prettysrc,
[use_prettysrc=$enableval],
[use_prettysrc=no])
AC_MSG_RESULT($use_prettysrc)
-test $use_prettysrc != no && AC_DEFINE(USE_PSRC)
+test $use_prettysrc != no && AC_DEFINE(USE_PRETTYSRC)
+
+AC_MSG_CHECKING(if read-progress message should show ETA)
+CF_ARG_ENABLE(read-eta,
+[ --enable-read-eta experimental read-progress message shows ETA],
+ [use_read_eta=$enableval],
+ [use_read_eta=no])
+AC_MSG_RESULT($use_read_eta)
+test $use_read_eta != no && AC_DEFINE(EXP_READPROGRESS)
+
+AC_MSG_CHECKING(if scrollbar code should be used)
+CF_ARG_ENABLE(scrollbar,
+[ --enable-scrollbar use experimental scrollbar, with mouse],
+ [use_scrollbar=$enableval],
+ [use_scrollbar=no])
+AC_MSG_RESULT($use_scrollbar)
+
+if test $use_scrollbar != no ; then
+ if test .$cf_cv_fancy_curses != .yes ; then
+ AC_MSG_WARN(Configuration does not support ACS_xxx definitions)
+ else
+ AC_DEFINE(USE_SCROLLBAR)
+ fi
+fi
AC_MSG_CHECKING(if source caching should be used)
CF_ARG_ENABLE(source-cache,
@@ -687,7 +870,10 @@ CF_ARG_ENABLE(externs,
[use_externs=yes],
[use_externs=no])
AC_MSG_RESULT($use_externs)
-test $use_externs != ".no" && AC_DEFINE(USE_EXTERNALS)
+if test $use_externs != "no" ; then
+ AC_DEFINE(USE_EXTERNALS)
+ LIBOBJS="$LIBOBJS LYExtern.o"
+fi
AC_MSG_CHECKING(if you want to use setfont support)
CF_ARG_ENABLE(font-switch,
@@ -703,17 +889,31 @@ CF_ARG_ENABLE(cgi-links,
[AC_DEFINE(LYNXCGI_LINKS)])
AC_MSG_RESULT($enableval)
+AC_MSG_CHECKING(if you want change-exec support)
+CF_ARG_ENABLE(change-exec,
+[ --enable-change-exec allow users to change exec options],
+ [use_change_exec=yes],
+ [use_change_exec=no])
+AC_MSG_RESULT($use_change_exec)
+test $use_change_exec = yes && AC_DEFINE(ENABLE_OPTS_CHANGE_EXEC)
+
AC_MSG_CHECKING(if you want exec-links support)
-CF_ARG_ENABLE(exec-links,
+CF_ARG_OPTION(exec-links,
[ --enable-exec-links allow lynx to execute programs accessed via a link],
- [AC_DEFINE(EXEC_LINKS)])
-AC_MSG_RESULT($enableval)
+ [use_exec_links=$enableval],
+ [use_exec_links=$enableval],
+ [$use_change_exec])
+AC_MSG_RESULT($use_exec_links)
+test $use_exec_links = yes && AC_DEFINE(EXEC_LINKS)
AC_MSG_CHECKING(if you want exec-scripts support)
-CF_ARG_ENABLE(exec-scripts,
+CF_ARG_OPTION(exec-scripts,
[ --enable-exec-scripts allow lynx to execute programs inferred from a link],
- [AC_DEFINE(EXEC_SCRIPTS)])
-AC_MSG_RESULT($enableval)
+ [use_exec_scripts=$enableval],
+ [use_exec_scripts=$enableval],
+ [$use_change_exec])
+AC_MSG_RESULT($use_exec_scripts)
+test $use_exec_scripts = yes && AC_DEFINE(EXEC_SCRIPTS)
AC_MSG_CHECKING(if you want internal-links feature)
CF_ARG_ENABLE(internal-links,
@@ -740,7 +940,7 @@ AC_MSG_RESULT($use_syslog)
test $use_syslog = yes && AC_DEFINE(SYSLOG_REQUESTED_URLS)
AC_MSG_CHECKING(if persistent-cookie logic should be used)
-CF_ARG_ENABLE(persistent-cookies,
+CF_ARG_DISABLE(persistent-cookies,
[ --disable-persistent-cookies disable persistent-cookie support],
[use_filed_cookies=$enableval],
[use_filed_cookies=yes])
@@ -779,7 +979,21 @@ AC_ARG_WITH(zlib,
AC_MSG_RESULT($use_zlib)
if test ".$use_zlib" != ".no" ; then
- CF_FIND_LIBRARY(z,
+ AC_MSG_CHECKING(if we need to add -I option to get zlib.h)
+ AC_TRY_COMPILE([#include <zlib.h>],[],[AC_MSG_RESULT(no)],[
+ AC_MSG_RESULT(yes)
+ CF_HEADER_PATH(cf_search,zlib)
+ for cf_incdir in $cf_search
+ do
+ if test -f $cf_incdir/zlib.h ; then
+ CF_ADD_CFLAGS(-I$cf_incdir)
+ CF_VERBOSE(... found in $cf_incdir)
+ break
+ fi
+ CF_VERBOSE(... tested $cf_incdir)
+ done
+ ])
+ CF_FIND_LIBRARY(z,z,
[#include <zlib.h>],
[gzopen("name","mode")],
gzopen)
@@ -835,16 +1049,17 @@ CF_ARG_DISABLE(dired,
AC_MSG_RESULT($use_dired)
if test ".$use_dired" != ".no" ; then
+ LIBOBJS="$LIBOBJS LYLocal.o"
AC_DEFINE(DIRED_SUPPORT)
AC_MSG_CHECKING(if you wish to allow extracting from archives via DirEd)
- CF_ARG_DISABLE(dired-archive,
+ CF_ARG_DISABLE(dired-dearchive,
[ --disable-dired-archive disable dearchiving commands],[AC_DEFINE(ARCHIVE_ONLY)])
AC_MSG_RESULT($enableval)
- AC_MSG_CHECKING(if you wish to allow users to redefine DirEd keys)
+ AC_MSG_CHECKING(if DirEd mode should override keys)
CF_ARG_DISABLE(dired-override,
- [ --disable-dired-override disable private keymaps],,[AC_DEFINE(OK_OVERRIDE)])
+ [ --disable-dired-override disable DirEd override keymap],,[AC_DEFINE(OK_OVERRIDE)])
AC_MSG_RESULT($enableval)
AC_MSG_CHECKING(if you wish to allow permissions commands via DirEd)
@@ -894,7 +1109,12 @@ AC_MSG_RESULT($enableval)
dnl --------------------------------------------------------------------------
dnl Test features that rely on configure-definitions
dnl --------------------------------------------------------------------------
-CF_TERMIO_AND_CURSES(LYCurses.h)
+if test $cf_cv_screen = pdcurses ; then
+ CF_HELP_MESSAGE(Special Libraries for PDCurses X11:)
+ CF_PDCURSES_X11
+else
+ CF_TERMIO_AND_CURSES(LYCurses.h)
+fi
### Finally, build config.h and the makefiles
CFLAGS="$CFLAGS $EXTRA_CFLAGS"
@@ -902,8 +1122,8 @@ srcdir="$srcdir"
SRCDIR_CLEAN="#"
if test -n "$srcdir" ; then
echo srcdir is $srcdir
- ${CONFIG_SHELL-/bin/sh} $srcdir/mkdirs.sh WWW/Library/Implementation
- ${CONFIG_SHELL-/bin/sh} $srcdir/mkdirs.sh src/chrtrans
+ /bin/sh $srcdir/mkdirs.sh WWW/Library/Implementation
+ /bin/sh $srcdir/mkdirs.sh src/chrtrans
test "$USE_INCLUDED_LIBINTL" = yes && $srcdir/mkdirs.sh intl
test "$srcdir" != "." && SRCDIR_CLEAN=""
fi
@@ -923,7 +1143,7 @@ AC_OUTPUT(
if test "$use_our_messages" = yes ; then
echo creating po/makefile
rm -f po/temp$$
- sed -e 's@^.*LYMessages.c@../LYMessages.c@' \
+ sed -e 's@^.*LYMessages.c@ ../LYMessages.c@' \
-e '$s/\\//' po/POTFILES >po/temp$$
sed -e "/POTFILES =/r po/temp$$" \
po/makefile.in > po/makefile
diff --git a/gnu/usr.bin/lynx/descrip.mms b/gnu/usr.bin/lynx/descrip.mms
deleted file mode 100644
index 21f2d69d5f1..00000000000
--- a/gnu/usr.bin/lynx/descrip.mms
+++ /dev/null
@@ -1,132 +0,0 @@
-! Make LYNX hypertext browser under VMS
-! =====================================
-!
-! NOTE: Use [.SRC.CHRTRANS]BUILD-CHRTRANS.COM to create the
-! chrtrans header files before using this descrip.mms.
-!
-! History:
-! 01/01/93 creation at KU (Lou montulli@ukanaix.cc.ukans.edu).
-! 04/12/93 (seb@lns61.tn.cornell.edu)
-! modified to support either UCX or MULTINET
-! 12/13/93 (macrides@sci.wfeb.edu)
-! Added conditional compilations for VAXC vs. DECC
-! (dependencies not yet specified; this is just a
-! "starter", should anyone want to do it well).
-! 10/26/94 (dyson@IowaSP.Physics.UIowa.EDU) RLD
-! Updated for AXP/VMS v6.1 and VAX/VMS v5.5-1
-! 12/07/94 (macrides@sci.wfeb.edu)
-! Updated for DECC/VAX, VAXC/VAX and DECC/AXP
-! 02/17/95 (macrides@sci.wfeb.edu)
-! Updated for v2.3-FM
-! 03/23/95 (macrides@sci.wfeb.edu)
-! Replaced references to v2.3.8 or v2.3.9 with v2.3-FM to
-! avoid any confusion with official releases at UKans.
-! 07/29/95 (macrides@sci.wfeb.edu)
-! Added support for GNUC.
-!
-! Instructions:
-! Use the correct command line for your TCP/IP implementation:
-!
-! $ MMS /Macro = (MULTINET=1) for VAXC - MultiNet
-! $ MMS /Macro = (WIN_TCP=1) for VAXC - Wollongong TCP/IP
-! $ MMS /Macro = (UCX=1) for VAXC - UCX
-! $ MMS /Macro = (CMU_TCP=1) for VAXC - OpenCMU TCP/IP
-! $ MMS /Macro = (SOCKETSHR_TCP=1) for VAXC - SOCKETSHR/NETLIB
-! $ MMS /Macro = (TCPWARE=1) for VAXC - TCPWare TCP/IP
-! $ MMS /Macro = (DECNET=1) for VAXC - socket emulation over DECnet
-!
-! $ MMS /Macro = (MULTINET=1, DEC_C=1) for DECC - MultiNet
-! $ MMS /Macro = (WIN_TCP=1, DEC_C=1) for DECC - Wollongong TCP/IP
-! $ MMS /Macro = (UCX=1, DEC_C=1) for DECC - UCX
-! $ MMS /Macro = (CMU_TCP=1, DEC_C=1) for DECC - OpenCMU TCP/IP
-! $ MMS /Macro = (SOCKETSHR_TCP=1,DEC_C=1) for DECC - SOCKETSHR/NETLIB
-! $ MMS /Macro = (TCPWARE=1, DEC_C=1) for DECC - TCPWare TCP/IP
-! $ MMS /Macro = (DECNET=1, DEC_C=1) for DECC - socket emulation over DECnet
-!
-! $ MMS /Macro = (MULTINET=1, GNU_C=1) for GNUC - MultiNet
-! $ MMS /Macro = (WIN_TCP=1, GNU_C=1) for GNUC - Wollongong TCP/IP
-! $ MMS /Macro = (UCX=1, GNU_C=1) for GNUC - UCX
-! $ MMS /Macro = (CMU_TCP=1, GNU_C=1) for GNUC - OpenCMU TCP/IP
-! $ MMS /Macro = (SOCKETSHR_TCP=1,GNU_C=1) for GNUC - SOCKETSHR/NETLIB
-! $ MMS /Macro = (TCPWARE=1, GNU_C=1) for GNUC - TCPWare TCP/IP
-! $ MMS /Macro = (DECNET=1, GNU_C=1) for GNUC - socket emulation over DECnet
-
-.ifdef MULTINET
-TCPM = MULTINET
-.endif
-
-.ifdef WIN_TCP
-TCPM = WIN_TCP
-.endif
-
-.ifdef UCX
-TCPM = UCX
-.endif
-
-.ifdef CMU_TCP
-TCPM = CMU_TCP
-.endif
-
-.ifdef SOCKETSHR_TCP
-TCPM = SOCKETSHR_TCP
-.endif
-
-.ifdef TCPWARE
-TCPM = TCPWARE
-.endif
-
-.ifdef DECNET
-TCPM = DECNET
-.endif
-
-.ifdef TCPM
-.else
-TCPM = MULTINET !Default to MultiNet
-.endif
-
-.ifdef GNU_C
-CC = gcc
-.endif
-
-lynx : lynx.exe
- ! Finished Building LYNX for VMS!!!
-
-lynx.exe : library exe
- @ Continue
-
-library :
- Set Default [.www.library.implementation]
-.ifdef DEC_C
- $(MMS) $(MMSQUALIFIERS) /Description = [-.VMS]DESCRIP.MMS /Macro = ($(TCPM)=1, DEC_C=1) Library
-.else
-.ifdef GNU_C
- $(MMS) $(MMSQUALIFIERS) /Description = [-.VMS]DESCRIP.MMS /Macro = ($(TCPM)=1, GNU_C=1) Library
-.else
- $(MMS) $(MMSQUALIFIERS) /Description = [-.VMS]DESCRIP.MMS /Macro = ($(TCPM)=1) Library
-.endif
-.endif
- Set Default [---]
-
-exe :
- Set Default [.src]
-.ifdef DEC_C
- $(MMS) $(MMSQUALIFIERS) /Macro = ($(TCPM)=1, DEC_C=1) Lynx
-.else
-.ifdef GNU_C
- $(MMS) $(MMSQUALIFIERS) /Macro = ($(TCPM)=1, GNU_C=1) Lynx
-.else
- $(MMS) $(MMSQUALIFIERS) /Macro = ($(TCPM)=1) Lynx
-.endif
-.endif
- Copy /NoLog /NoConfirm lynx.exe [-]
- Set Protection = (Owner:RWE, World:RE) [-]lynx.exe
- Set Default [-]
-
-clean :
- Set Default [.www.library.implementation]
- $(MMS) $(MMSQUALIFIERS) /Description = [-.VMS]DESCRIP.MMS clean
- Set Default [---]
- Set Default [.src]
- $(MMS) $(MMSQUALIFIERS) clean
- Set Default [-]
- - Purge /NoLog /NoConfirm
diff --git a/gnu/usr.bin/lynx/docs/OS-390.announce b/gnu/usr.bin/lynx/docs/OS-390.announce
index 6eac7d2536e..47cbae06092 100644
--- a/gnu/usr.bin/lynx/docs/OS-390.announce
+++ b/gnu/usr.bin/lynx/docs/OS-390.announce
@@ -1,26 +1,26 @@
This document suggests steps to install Lynx on OS/390 systems.
========================================================================
-o Download the archive file lynx2-8-2.tar.Z in BINARY from the site
+o Download the archive file lynx2-8-4.tar.Z in BINARY from the site
where you found this announcement or from a site listed at
http://lynx.browser.org/
o Unpack with:
- uncompress <lynx2-8-2.tar.Z | pax -rv -o to=IBM-1047
+ uncompress <lynx2-8-4.tar.Z | pax -rv -o to=IBM-1047
The "-o to=IBM-1047" is needed to convert the ASCII archive
to EBCDIC. You must not download as a text file; the conversion
must be performed after the uncompress.
========================================================================
-o Alternatively, download the PKZIPped archive lynx2-8-2.zip in BINARY.
+o Alternatively, download the PKZIPped archive lynx2-8-4.zip in BINARY.
o Unpack with:
- unzip -a lynx2.8.2.zip
+ unzip -aa lynx2-8-4.zip
- The "-a" is needed to convert the ASCII archive
+ The "-aa" is needed to convert the ASCII archive
to EBCDIC. (unzip is not shipped with OS/390. You can
obtain it from:
@@ -38,7 +38,7 @@ o Run the configure script:
cd ./OS390
rm -f config.cache
CC=c89 CFLAGS="-D_XOPEN_SOURCE_EXTENDED=1 -D_ALL_SOURCE" \
- ../lynx2-8-2/configure
+ ../lynx2-8-4/configure
The definitions select the ANSI C compiler (c89) and options
to select the right header file directories. You may also
@@ -64,8 +64,8 @@ o Build Lynx
========================================================================
o Test Lynx:
- ./lynx -cfg=../lynx2-8-2/lynx.cfg \
- ../lynx2-8-2/lynx_help/lynx_help_main.html
+ ./lynx -cfg=../lynx2-8-4/lynx.cfg \
+ ../lynx2-8-4/lynx_help/lynx_help_main.html
========================================================================
o Install Lynx:
diff --git a/gnu/usr.bin/lynx/docs/README.TRST b/gnu/usr.bin/lynx/docs/README.TRST
new file mode 100644
index 00000000000..68b27af7bfc
--- /dev/null
+++ b/gnu/usr.bin/lynx/docs/README.TRST
@@ -0,0 +1,158 @@
+Tabular Support for Simple Tables
+=================================
+Some definitions first:
+
+* NO table support
+ What it says. :) Table related tags are treated like other
+ completely unrecognized tags.
+ Only listed for completeness, this does not describe Lynx.
+
+* MINIMAL table support
+ Table related tags are recognized, and are used to separate
+ the contents of different cells (by at least a space) and rows
+ (by a line break) visibly from each other.
+
+* LYNX minimal table support (LMTS)
+ The minimal table support as implemented by Lynx up to this point,
+ also includes the way ALIGN attributes are handled on TABLE, TR
+ and other specific tweaks (e.g. handle TABLE within PRE specially).
+ LMTS formatting is briefly described in the Lynx User Guide, see
+ the section "Lynx and HTML Tables" there. (The Users Guide has not
+ yet been updated for tabular support.)
+
+* TABULAR support for tables
+ Support for tables that really arranges table cells in tabular form.
+
+* Tabular Rendering for SIMPLE Tables (TRST)
+ Tabular support for some tables that are 'simple' enough; what this
+ code change provides.
+
+One basic idea behind providing TRST is that correct tabular support
+for all tables is complex, doesn't fit well into the overwhelmingly
+one-pass way in which Lynx does things, and may in the end not give
+pleasant results anyway for pages that (ab-)use more complex table
+structures for display formatting purposes (especially in view of Lynx
+limitations such as fixed character cell size and lack of horizontal
+scrolling; see also emacs w3 mode). Full table support within Lynx
+hasn't happened so far, and continues to seem unlikely to happen in the
+near future.
+
+The other basic idea is the observation that for simple tables, as
+used mostly for data that are really tabular in nature, LMTS rendering
+can be transformed into TRST rendering, after parsing the TABLE element,
+by two simple transformations applied line by line:
+- Insert spaces in the right places.
+- Shift the line as a whole.
+
+And that's exactly what TRST does. An implementation based on the
+simple observation above is relatively straightforward, for simple
+tables. On encountering the start of a TABLE element, Lynx generates
+output as usual for LMTS. But it also keeps track of cell positions
+and lengths in parallel. If all goes well, that additional information
+is used to fix up the already formatted output lines when the TABLE
+ends. If not all goes well, the table was not 'simple' enough, the
+additional processing is canceled. One advantage is that we always
+have a 'safe' fallback to well-understood traditional LMTS formatting:
+TRST won't make more complex tables look worse than before.
+
+What are 'simple' tables? A table is simple enough if each of its TR
+rows translates into at most one display line in LMTS formatting (excluding
+leading and trailing line breaks), and the width required by each row
+(before as well as after fixup) does not exceed the available screen size.
+Note that this excludes all tables where some of the cells are marked up as
+block elements ('paragraphs'). Tables that include nested TABLE elements
+are always specifically excluded, but the inner tables may be subject to
+TRST handling. Also excluded are some constructs that indicate that markup
+was already optimized for Lynx (or other browsers with no or minimal table
+support): TABLE in PRE, use of TAB.
+
+The description so far isn't completely accurate. In many cases, tables are
+not simple enough according to the last paragraph, but parts of each TR row
+can still benefit from some TRST treatment. Some partial treatment is done
+for some tables in this grey zone, which may or may not help to a better
+display, depending on how the table is used. This is an area where tweaks
+in the future are most expected, and where the code's behavior is currently
+not well defined.
+
+One possible approach:
+- The table is 'simple' according to all criteria set out in the previous
+ paragraph, except that some cells at the beginning and/or end of TR rows
+ may contain block elements (or other markup that results in formatting
+ like separate paragraphs).
+- There is at most one range of (non-empty) table cells in each row whose
+ contents is not paragraph-formatted, and who are rendered on one line
+ together by LMTS, separate from the paragraph-formatted cells. Let's
+ call these cells the 'core' of a row.
+Fixups are then only applied to the text lines showing the 'core' cells.
+The paragraph-formatted cells are effectively pulled out before/after
+their row (no horizontal space is allocated to them for the purpose of
+determining column widths for core line formatting).
+
+This is expected to be most useful for tables that are mostly
+simple tabular data cells, but with the occasional longer
+text thrown in. For example, a table with intended rendering:
+
+ --------------------------------------------------------
+ | date | item no. | price | remarks |
+ |--------|--------------|---------|----------------------|
+ | date-1 | item #1 | $0.00 | |
+ |--------|--------------|---------|----------------------|
+ | date-2 | item #2 | $101.99 | A longer annotation |
+ | | | | marked up as a block |
+ | | | | of text. |
+ |--------|--------------|---------|----------------------|
+ | date-3 | long item #3 | $99.00 | |
+ --------------------------------------------------------
+
+It may now be shown by Lynx as
+
+ .................................................
+
+ date item no. price remarks
+ date-1 item #1 $0.00
+ date-2 item #2 $101.99
+
+ A longer annotation marked up as a block of
+ text.
+
+ date-3 long item #3 $99.00
+
+ .................................................
+
+As can be seen, this is still quite far from the intended rendering,
+but it is better than without any tabular support.
+
+Whether the code does something sensible with "grey area" tables is up
+for testing. Most of the typical tables in typical Web pages aren't
+used in a way that can benefit from the TRST approach. Parts of such
+tables may still end up getting shifted left or right by the TRST code
+when that doesn't improve anything, but I haven't seen it make things
+really worse so far (with the current code).
+
+TRST and Partial Display
+------------------------
+[ Partial display mode is the feature which allows viewing and scrolling
+of pages while they are loaded, without having to wait for a complete
+transfer. ] During partial display rendering, table lines can sometimes
+be shown in the original formatting, i.e. with horizontal fixups not yet
+applied. This is more likely for longer tables, and depends on the state
+in which partial display 'catches' the TRST code. Sometimes the display
+may flicker: first the preliminary rendering of table lines is shown, then
+after loading is finished it is replaced by the fixed-up version. I do
+not consider this a serious problem: if you have partial display mode
+enabled, presumably you want to be able to see as much data as possible,
+and scroll up and down through it, as early as possible. In fact, the
+approach taken keeps Lynx free from a problem that may graphical browsers
+have: they often cannot render a table at all until it is received in full.
+
+------------------------------------------------------------------------
+
+To summarize:
+ - TRST is a solution that works in many cases where lack of tabular support
+ was most annoying.
+ - TRST doesn't implement a full table model, and it is extremely unlikely
+ that it will ever be the basis for that. Keep on exploring external
+ solutions, or perhaps waiting for (better: working on) a more fundamental
+ redesign of Lynx's rendering engine.
+
+Klaus Weide - kweide@enteract.com 1999-10-13
diff --git a/gnu/usr.bin/lynx/docs/README.defines b/gnu/usr.bin/lynx/docs/README.defines
index 5ca9c25b947..2ec2ac46426 100644
--- a/gnu/usr.bin/lynx/docs/README.defines
+++ b/gnu/usr.bin/lynx/docs/README.defines
@@ -5,10 +5,10 @@ Does not include
- symbols defined and documented in userdefs.h
- symbols expected to be set by compiler to indicate system type or
compiler features
-- some symbols set and used only in connection with the ./configure
+- many symbols set and used only in connection with the ./configure
mechanism - the full and current list can be found in config.hin
(as a template) or, after running ./configure, in lynx_cfg.h.
-- symbols and macros defined in the source code
+- most symbols and macros defined in the source code
***Not complete.***
@@ -37,6 +37,16 @@ packet driver. I created four new defines to accomplish this.
Added for 8+3 filesystems (DOS):
FNAMES_8_3 also defined in userdefs.h if __DJGPP__
+* incorporate changes for win32 by Hiroyuki Senshu <senshu@shonai-cit.ac.jp>
+ (SH) from
+ ftp://crab.it.osha.sut.ac.jp/pub/Win32/develope/senshu/Lynx/
+ Most changes are ifdef'd
+ #define _WIN_CC= .... for Windows C Compiler
+ #define CJK_EX .... CJK EXtension
+ #define SH_EX .... Senshu Hiroyuki EXtension
+ #define WIN_EX .... Windows EXtension
+
+
B. Symbols to enable or disable specific features, mostly
=========================================================
Note that some of these may be only usable on some system types,
@@ -48,10 +58,9 @@ Network related, specific protocols
see comments in makefile.in
# -DSHORTENED_RBIND For a SOCKSified lynx with the short version of Rbind.
see comments in makefile.in
-# -DNOPORT if you must use PASV instead of PORT for FTP
-Related to DirEd code - probably one usable for UNIX or similar
----------------------------------------------------------------
+Related to DirEd code - probably only usable for UNIX or similar
+----------------------------------------------------------------
# -DDIRED_SUPPORT (see INSTALLATION, Section II-1c)
# -DOK_GZIP (see INSTALLATION, Section II-1c)
# -DOK_OVERRIDE (see INSTALLATION, Section II-1c)
@@ -59,8 +68,10 @@ Related to DirEd code - probably one usable for UNIX or similar
# -DOK_TAR (see INSTALLATION, Section II-1c)
# -DOK_UUDECODE (see INSTALLATION, Section II-1c)
# -DOK_ZIP (see INSTALLATION, Section II-1c)
+# -DOK_INSTALL to enable dired menu "Install" function
# -DARCHIVE_ONLY (see INSTALLATION, Section II-1c)
# -DNO_CHANGE_EXECUTE_PERMS (see INSTALLATION, Section II-1c)
+# -DCANT_EDIT_UNWRITABLE_FILES (see LYEdit.c - always in effect for VMS)
Related to formatting of local directory listings
-------------------------------------------------
@@ -82,8 +93,7 @@ Using curses or ncurses library:
# -DNO_SIZECHANGE (old) or HAVE_SIZECHANGE (new) whether using code to detect
new size after size changes of the terminal (window).
for UNIX handled by ./configure, may be set in HTUtils.h
-# -DUSE_SIZECHANGEHACK enable hack to handle increasing the window size
- above window size at startup
+# -DUSE_SCROLLBAR supports scrollbar when built with ncurses
Using slang library:
# -DUSE_SLANG (see INSTALLATION, Section II-1c)
@@ -93,21 +103,61 @@ Both:
# if you have the reverse clear screen problem of some SUN4 systems, or
# to work around some other "garbage on the screen" problems
-Related to *experimental* (unsupported) character style code
+Related to experimental (unsupported) character style code
------------------------------------------------------------
-# -DUSE_COLOR_STYLE (see INSTALLATION, Section II-1c) probably needs -DNCURSES
-# -DUSE_HASH (see INSTALLATION, Section II-1c) probably needs the above
-# -DLINKEDSTYLES (see INSTALLATION, Section II-1c) probably needs the above
-
-Other
------
-# -DDONT_TRACK_INTERNAL_LINKS - Handle following links to same doc differently.
-# -DEXP_CHARTRANS_AUTOSWITCH also let lynx switch term mode(Linux console only)
+# -DUSE_COLOR_STYLE (see INSTALLATION, Section II-1c) needs SVr4 curses
+
+Other general
+-------------
# -DIGNORE_CTRL_C Define if Control-C shouldn't exit lynx.
-# -DLY_FIND_LEAKS (see INSTALLATION, Section II-1c)
# -DNO_CPU_LIMIT Disables Max CPU timeout (includes CLOCKS_PER_SECOND)
-# -DNSL_FORK For fork-based name server lookups that can be 'z'apped.
-# -DSYSLOG_REQUESTED_URLS
-# if you would like logging of client requests via syslog()
-# -DUSE_ZLIB To use some functions from zlib library if you have it.
-# -DDECLARE_WAIS_LOGFILES see comments in makefile.in
+# -DNO_DUMP_WITH_BACKSPACES Disables -with_backspaces code
+# -DUSE_VASPRINT Use vasprintf() function
+# -DNO_RULES Disables code for CERN-style rules files
+# -DMISC_EXP Enable some truly experimental stuff
+# -DINACTIVE_INPUT_STYLE_VH Different style for showing inactive text fields
+
+Untested
+--------
+# -DNO_EXTENDED_HTMLDTD Disable some "SortaSGML" code, see SGML.c
+# -DWIND_DOWN_STACK Aggressive handling of end tags for "TagSoup", SGML.c
+
+C. Secondary symbols
+====================
+Some macros that are not primary, i.e. they are normally automatically
+set or unset in the code based on other macros (including those from
+./configure), but it may be sometimes useful to set them differently.
+They may directly affect several source files. Filenames show where
+they are set. Normally installers shouldn't have to care about these
+symbols.
+
+COOKIE_FILE LYMain.c default cookie file in HOME dir
+SHOW_WHEREIS_TARGETS LYCurses.h whereis search highlighting
+USE_KEYMAPS LYCurses.h use of .lynx-keymaps files
+
+D. Symbols defined locally to modify some behavior
+==================================================
+Defined in the source files to which they apply. Only filenames are listed,
+the files would have to be read and edited anyway to change the definition.
+Normally installers shouldn't have to care about any of these symbols.
+
+ADVANCED_INFO LYShowInfo.c
+ALLOW_PROXY_HEAD LYUtils.c
+CHECK_FREE_MEM GridText.c
+CLEAN_URLS HTParse.c
+DEBUG_HOSTENT HTTCP.c
+DEBUG_HOSTENT_CHILD HTTCP.c
+DEFAULT_INVCHECK_BV LYCookie.c
+DUPLICATE_ANCHOR_NAME_WORKAROUND HTAnchor.c
+EXTENDED_OPTION_LOGIC LYMain.c
+EXTENDED_STARTFILE_RECALL LYMain.c
+OPTNAME_ALLOW_DASHES LYMain.c
+OVERLAP HTNews.c
+RESTRICT_NM_ALLOW_DASHES LYUtils.c
+SOCKET_DEBUG_TRACE HTTCP.c
+TRADITIONAL_SUFFIXES HTInit.c
+USE_XHDR HTNews.c
+max_cookies_buffer LYCookie.c
+max_cookies_domain LYCookie.c
+max_cookies_global LYCookie.c
+reverse_mailcap HTInit.c
diff --git a/gnu/usr.bin/lynx/docs/README.jp b/gnu/usr.bin/lynx/docs/README.jp
new file mode 100644
index 00000000000..b2d5a526db0
--- /dev/null
+++ b/gnu/usr.bin/lynx/docs/README.jp
@@ -0,0 +1,133 @@
+README for Japanese
+===================
+
+This document shows some supplements for Japanese in Japanese.
+¤³¤Îʸ½ñ¤Ç¤ÏÆüËܸì¤Ç¸æÍøÍѤÎÊý¤Î¤¿¤á¤ÎÊä­»ö¹à¤¬µ­½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
+
+1. ³µÍ×
+
+Lynx Version 2.8.3 (¤È¶²¤é¤¯¤½¤ì°Ê¹ß¤Î Lynx) ¤Ç¤Ï¡¢2.8.2 °ÊÁ°¤Î
+¤â¤Î¤ÈÆüËܸì¤Îʸ»ú¥³¡¼¥É¤Î°·¤¤¤¬°Û¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤Îʸ½ñ¤Ç¤Ï
+Lynx ¤òÆüËܸì´Ä¶­¤ÇÍøÍѤµ¤ì¤ë¾ì¹ç¤Î¸ÇÍ­¤ÎÀßÄê¤ò´Êñ¤ËÀâÌÀ¤·¤Þ¤¹¡£
+
+ÆÃ¤Ë ASSUME_CHARSET ¤Î°·¤¤¤¬Êѹ¹¤µ¤ì¤¿´Ø·¸¾å¡¢°ÊÁ°¤ÈƱ¤¸ÀßÄê¤ÇÍøÍÑ
+¤·¤Æ¤¤¤ë¤È½¾Íèʸ»ú²½¤±¤·¤Æ¤¤¤Ê¤«¤Ã¤¿Ê¸¾Ï¤¬Ê¸»ú²½¤±¤·¤Æ¤·¤Þ¤¦²ÄǽÀ­¤¬
+¤¢¤ê¤Þ¤¹¤Î¤Ç¸æÃí°Õ¤¯¤À¤µ¤¤¡£¤³¤ÎÅÀ¤Ë´Ø¤·¤Æ¤Ï¡¢¤³¤Îʸ½ñ¤Î
+¡Ö4. lynx.cfg ¤ÎÀßÄê¡×¤Î¾Ï¤ò¸æ»²¾È¤¯¤À¤µ¤¤¡£
+
+
+2. ÆüËܸì¤Îʸ½ñ¤Î¿·¤·¤¤½èÍýÊýË¡
+
+(1) ÆüËܸì¤Çµ­½Ò¤µ¤ì¤¿ HTML ʸ½ñ¤Îʸ»ú¥³¡¼¥É (Character-Set) ¤¬¡¢
+ META Í×ÁÇ¡¢¤â¤·¤¯¤Ï HTTP ¤Î±þÅú¤Ç»ØÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¡¢Ê¸½ñ¤¬
+ ¤½¤Îʸ»ú¥³¡¼¥É¤Çµ­½Ò¤µ¤ì¤Æ¤¤¤ë¤È²¾Äꤷ¤Æ½èÍý¤·¤Þ¤¹¡£
+
+(2) (1) °Ê³°¤Î¾ì¹ç¤Ç¡¢ASSUME_CHARSET ¤¬ shift_jis ¤â¤·¤¯¤Ï euc_jp ¤Ë
+ ÀßÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¡¢Ê¸½ñ¤¬¤½¤Îʸ»ú¥³¡¼¥É¤Çµ­½Ò¤µ¤ì¤Æ¤¤¤ë¤È²¾Äꤷ¤Æ
+ ½èÍý¤·¤Þ¤¹¡£
+
+(3) (1) ¤ª¤è¤Ó (2) °Ê³°¤Î¾ì¹ç¡¢Ê£¿ô¤Îʸ»ú¥³¡¼¥É¤òÍѤ¤¤Æ¤Ò¤È¤Ä¤Îʸ½ñ¤¬
+ ½ñ¤«¤ì¤Æ¤¤¤Ê¤¤¤È²¾Äꤷ¤Æ½èÍý¤·¤Þ¤¹¡£
+
+
+3. ¥¤¥ó¥¹¥È¡¼¥ë
+
+¥¤¥ó¥¹¥È¡¼¥ë»þ¤Ë¤ª¤±¤ëÆüËܸì¸ÇÍ­¤ÎÀßÄê¤Ë¤Ï°Ê²¼¤Î¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£
+ɬÍפ˱þ¤¸¤ÆÀßÄê¤òÊѹ¹¤·¤Æ¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+configure ¥ª¥×¥·¥ç¥ó
+ ¡¦enable-cjk
+ À齩»á¤Ë¤è¤ë¼ç¤ËÆüËܸì¤Î½èÍý¤Ë¤«¤«¤ï¤ë³ÈÄ¥¤òÍ­¸ú¤Ë¤¹¤ë¤¿¤á¤Î
+ ¥ª¥×¥·¥ç¥ó¤Ç¤¹¡£¤³¤ì¤é¤Î³ÈÄ¥¤Ïº£¸åɸ½à¤ÇÁȤ߹þ¤Þ¤ì¤ë¤«¡¢Â¾¤Î
+ ¥ª¥×¥·¥ç¥ó¤Ë¤è¤êÍ­¸ú¤Ë¤¹¤ëÊý¿Ë¤Î¤¿¤á¡¢¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï¾­Íè
+ Çѻߤµ¤ì¤ë¤È»×¤ï¤ì¤Þ¤¹¡£
+
+¥Þ¥¯¥í
+ ¡¦USE_TH_JP_AUTO_DETECT
+ Á°¾Ï (3) ¤Î½èÍý¤òÍ­¸ú¤Ë¤·¤Þ¤¹¡£
+ ¤³¤Î¥Þ¥¯¥í¤Ï userdefs.h ¤Ë¤ª¤¤¤ÆÉ¸½à¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
+
+ ¡¦CONV_JISX0201KANA_JISX0208KANA
+ ¤¤¤ï¤æ¤ëȾ³Ñ¥«¥Ê¤òÁ´³Ñ¤ËÊÑ´¹¤·¤ÆÉ½¼¨¤·¤Þ¤¹¡£
+ ¤³¤Î¥Þ¥¯¥í¤Ï userdefs.h ¤Ë¤ª¤¤¤ÆÉ¸½à¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
+
+ ¡¦KANJI_CODE_OVERRIDE
+ ʸ½ñ¤Îʸ»ú¥³¡¼¥É¤ò¥æ¡¼¥¶¤¬»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë½èÍý¤òÍ­¸ú¤Ë
+ ¤·¤Þ¤¹¡£¤³¤Î»ØÄê¤Ï¡¢META Í×ÁÇ¡¢HTTP ¤Î±þÅú¡¢ASSUME_CHARSET
+ ¤Ç»ØÄꤵ¤ì¤¿Ê¸»ú¥³¡¼¥É¤è¤ê¤âÍ¥À褵¤ì¤Þ¤¹¡£¼ç¤Ëʸ½ñ¤¬´Ö°ã¤Ã¤¿
+ ʸ»ú¥³¡¼¥É¤ò»ØÄꤷ¤Æ¤¤¤¿¾ì¹ç¤ËÍ­¸ú¤Ç¤¹¡£Ê¸»ú¥³¡¼¥É¤Ï ^L ¤Ë¤è¤ê
+ ÀÚ¤êÂØ¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¿¤À¤·¡¢Â¿¤¯¤Î¥±¡¼¥¹¤Ç¤ÏÉÔÍפǤ¹¡£
+ ¤³¤Î¥Þ¥¯¥í¤Ïɸ½à¤ÇÄêµÁ *¤µ¤ì¤Þ¤»¤ó*¡£
+
+ ¡¦SH_EX
+ À齩»á¤Ë¤è¤ë°ìÈÌŪ¤Ê³ÈÄ¥¤òÍ­¸ú¤Ë¤¹¤ë¤¿¤á¤Î¥Þ¥¯¥í¤Ç¤¹¡£
+ ¤³¤Î¥Þ¥¯¥í¤òÀßÄꤹ¤ë¤È¡¢¾åµ­ KANJI_CODE_OVERRIDE ¤òÍ­¸ú¤Ë
+ ¤·¤¿¾ì¹ç¤Îʸ»ú¥³¡¼¥É¤¬²èÌ̾åÉô¤Ë¾ï¤Ëɽ¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
+ ¤³¤Î¥Þ¥¯¥í¤Ïɸ½à¤ÇÄêµÁ *¤µ¤ì¤Þ¤»¤ó*¡£
+
+
+4. lynx.cfg ¤ÎÀßÄê
+
+******************** ½Å Í× ********************
+lynx.cfg ¤Ç¤Ï ASSUME_CHARSET¡¢ASSUME_LOCAL_CHARSET¡¢
+ASSUME_UNREC_CHARSET ¤òÀßÄꤷ¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£
+******************** ½Å Í× ********************
+
+Lynx Version 2.8.3 °Ê¹ß¤Ç¤Ï¡¢ÆüËܸì¤Çµ­½Ò¤µ¤ì¤¿ HTML ʸ½ñ¤Îʸ»ú¥³¡¼¥É
+¤¬ÌÀ¼¨Åª¤Ë»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ç¡¢ASSUME_CHARSET ¤¬ shift_jis ¤â¤·¤¯¤Ï
+euc_jp ¤ËÀßÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¡¢Ê¸½ñ¤¬¤½¤Îʸ»ú¥³¡¼¥É¤Çµ­½Ò¤µ¤ì¤Æ¤¤¤ë¤È
+²¾Äꤷ¤Æ½èÍý¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
+
+¤¿¤À¤·¡¢ASSUME_CHARSET ¤ò»ØÄꤷ¤Ê¤¯¤Æ¤âÆüËܸì¤Îʸ»ú¥³¡¼¥É¤Ï¼«Æ°Åª¤Ë
+ȽÊ̤µ¤ì¡¢Â¿¤¯¤Î¥±¡¼¥¹¤Ç¤ÏŬÀڤ˽èÍý¤µ¤ì¤Þ¤¹¡£¤à¤·¤í¡¢ASSUME_CHARSET
+¤ò shift_jis ¤ä euc_jp ¤Ë»ØÄꤷ¤Æ¤¤¤ë¤È¡¢¤½¤ì¤¾¤ì EUC¡¢SJIS ¤Ç½ñ¤«¤ì¤¿
+ʸ½ñ¤¬Ê¸»ú²½¤±¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
+
+½¾¤Ã¤Æ¡¢lynx.cfg Æâ¤Ë¡¢
+
+-------------------- ¤³¤³¤«¤é --------------------
+ASSUME_CHARSET:euc-jp
+-------------------- ¤³¤³¤Þ¤Ç --------------------
+
+¤Î¤è¤¦¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë¤Èʸ»ú²½¤±¤Î¸¶°ø¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢ÆÃ¤ËÍýͳ¤¬¤Ê¤¤
+¸Â¤ê¡¢°Ê²¼¤Î¤è¤¦¤Ë¥³¥á¥ó¥È¥¢¥¦¥È¤¹¤ë¤Ê¤É¤·¤Æ ASSUME_CHARSET ¤¬ÀßÄê
+¤µ¤ì¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤ (ASSUME_LOCAL_CHARSET¡¢ASSUME_UNREC_CHARSET
+¤Ë¤Ä¤¤¤Æ¤âƱÍÍ)¡£
+
+-------------------- ¤³¤³¤«¤é --------------------
+#ASSUME_CHARSET:euc-jp
+-------------------- ¤³¤³¤Þ¤Ç --------------------
+
+ɬÍפǤ¢¤ì¤Ð ASSUME_CHARSET ¤Ï¥ª¥×¥·¥ç¥ó¥á¥Ë¥å¡¼¡¢¤â¤·¤¯¤Ï
+¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤«¤éÊѹ¹¤·¤Æ²¼¤µ¤¤¡£
+
+Êä­:
+ASSUME_LOCAL_CHARSET ¤Ï Lynx Version 2.8.3 ¤Ç¤Ï»²¾È¤·¤Æ¤¤¤Ê¤¤¤«¤â
+¤·¤ì¤Þ¤»¤ó¤¬¡¢¾­Í軲¾È¤¹¤ë¤è¤¦¤Ë¤Ê¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¤Î¤Ç¡¢¤ä¤Ï¤êÀßÄê
+¤·¤Ê¤¤Êý¤¬¤¤¤¤¤È»×¤¤¤Þ¤¹¡£
+
+
+5. ÆüËܸ줬ʸ»ú²½¤±¤·¤¿¤é
+
+¤¹¤Ù¤Æ¤ÎÆüËܸì¤Ç½ñ¤«¤ì¤¿Ê¸½ñ¤¬Ê¸»ú²½¤±¤¹¤ë¤Ê¤é¡¢¥ª¥×¥·¥ç¥ó¥á¥Ë¥å¡¼¤Ç
+¡ÖDisplay Character Set¡×¤ò¡ÖJapanese (EUC-JP)¡×¡¢¤â¤·¤¯¤Ï
+¡ÖJapanese (Shift_JIS)¡×¤ËÊѹ¹¤·¤Æ¡¢Êѹ¹¤òÊݸ¤·¤Æ¤¯¤À¤µ¤¤¡£
+¤â¤·¤¯¤Ï lynx.cfg Æâ¤Ç CHARACTER_SET ¤ò euc-jp ¤â¤·¤¯¤Ï shift_jis ¤Ë
+ÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
+
+°ìÉô¤ÎÆüËܸì¤Ç½ñ¤«¤ì¤¿Ê¸½ñ¤¬Ê¸»ú²½¤±¤¹¤ë¤Ê¤é¡¢Á°¾Ï¡Ö4. lynx.cfg ¤ÎÀßÄê¡×
+¤ò»²¾È¤·¡¢ASSUME_CHARSET ¤òÀßÄꤷ¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤«¡¢¤â¤·¤¯¤Ï¥ª¥×¥·¥ç¥ó
+¥á¥Ë¥å¡¼¤Ç¡Öassumed document character set¡×¤ÎÉôʬ¤ò»²¾È¤·¡¢shift_jis
+¤ä euc-jp ¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤¤¤«³Îǧ¤·¡¢¤â¤·¤Ê¤Ã¤Æ¤¤¤¿¤é iso-8859-1 Åù¤ËÊѹ¹
+¤·¤Æ¡¢Lynx ¤¬ÆüËܸì¤Îʸ»ú¥³¡¼¥É¤ò¼«Æ°È½Ê̤¹¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+¤½¤ì¤Ç¤âʸ»ú²½¤±¤¹¤ë¾ì¹ç¤Ï¡¢
+ ¡¦META Í×ÁÇ¡¢¤â¤·¤¯¤Ï HTTP ¤Î±þÅú¤Ç»ØÄꤵ¤ì¤Æ¤ëʸ»ú¥³¡¼¥É¤È¤Ï°Û¤Ê¤ë
+ ʸ»ú¥³¡¼¥É¤Çʸ½ñ¤¬µ­½Ò¤µ¤ì¤Æ¤¤¤ë
+¤â¤·¤¯¤Ï
+ ¡¦¤Ò¤È¤Ä¤Îʸ½ñÃæ¤ËÊ£¿ô¤Îʸ»ú¥³¡¼¥É¤Ç½ñ¤«¤ì¤¿Ê¸»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë
+¤È»×¤ï¤ì¤Þ¤¹¡£Á°¼Ô¤Î¾ì¹ç¤Ïʸ½ñ¤Î´ÉÍý¼Ô¤Ë²þÁ±¤ò°ÍÍꤹ¤ë¤«¡¢
+KANJI_CODE_OVERRIDE ¤òÄêµÁ¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤·¤¿ Lynx ¤ò¤ª»È¤¤¤¯¤À¤µ¤¤¡£
+¸å¼Ô¤Î¾ì¹ç¤Ï»Äǰ¤Ç¤¹¤¬¤¢¤­¤é¤á¤Æ¤¯¤À¤µ¤¤¡£
+----
+2000/3/28 Takeshi Hataguchi <patakuti@t3.rim.or.jp>
diff --git a/gnu/usr.bin/lynx/docs/README.ssl b/gnu/usr.bin/lynx/docs/README.ssl
new file mode 100644
index 00000000000..a560f476045
--- /dev/null
+++ b/gnu/usr.bin/lynx/docs/README.ssl
@@ -0,0 +1,47 @@
+SSL support for Lynx 2.8.4 (SSL-MM 1.4.1)
+-- adapted from http://www.moxienet.com/lynx/
+
+Lynx, in its unmodified form, will not allow you to make secure socket layer
+(SSL) connections. SSL is used for the secure transfer of information over the
+Internet. Many sites are now requiring SSL to ensure security for themselves
+and their users. With a version of Lynx modified to support SSL, Lynx users
+can now visit these sites with ease as well.
+
+The SSL configure option (--with-ssl) for Lynx provides the ability to make use
+of SSL over HTTP for secure access to web sites (HTTPS) and over NNTP for
+secure access to news servers (SNEWS). SSL is handled transparently, allowing
+users to continue accessing web sites and news services from within Lynx
+through the same interface for both secure and standard transfers.
+
+This is based on, and requires, the OpenSSL library. OpenSSL's distribution
+and use may be restricted by licenses and laws. For information on obtaining
+OpenSSL, as well as information on its distribution, see
+http://www.openssl.org/. The main distribution site is ftp://ftp.openssl.org/.
+
+To test your version of Lynx for its SSL support, try it out with an SSL site.
+http://www.moxienet.com/lynx/ssl-test will redirect you to a secure (https)
+page which will load if your browser contains SSL support, and give you some
+information about the connection. Note that the server that you are redirected
+to may not have a valid certificate. Lynx will not complain, as it does not
+yet support certificates, but other browsers may. Since you will not be
+sending any sensitive data to the test page, this should not present a problem.
+
+It is the user's responsibility to ensure that all patent laws,
+export restrictions, and other considerations have been taken into account
+before using this software.
+
+-- Note:
+
+Lynx is GPL'd, so it falls under the regulations in EAR section
+740.13(e)(1):
+
+ (1) Encryption source code controlled under 5D002, which would be
+ considered publicly available under section 734.3(b)(3) and
+ which is not subject an express agreement for the payment a
+ licensing fee or royalty for commercial production or sale of
+ any product developed with the source code, is released from
+ EI controls and may be exported or reexported without review
+ under License Exception TSU, provided you have submitted
+ written notification to BXA of the Internet location (e.g.,
+ URL or Internet address) or a copy of source code by the time
+ of export.
diff --git a/gnu/usr.bin/lynx/docs/win-386.announce b/gnu/usr.bin/lynx/docs/win-386.announce
index 2f36fb23723..dcc482b81a5 100644
--- a/gnu/usr.bin/lynx/docs/win-386.announce
+++ b/gnu/usr.bin/lynx/docs/win-386.announce
@@ -26,3 +26,15 @@ contacted the author of DJGPP for help with getting this port further.
Wayne Buttles
lynx-port@fdisk.com
+
+
+
+Win32 port was further extended by Hiroyuki Senshu <senshu@shonai-cit.ac.jp>
+ftp://crab.it.osha.sut.ac.jp/pub/Win32/develope/senshu/Lynx/
+ Most changes are ifdef'd
+ #define _WIN_CC= .... for Windows C Compiler
+ #define CJK_EX .... CJK EXtension
+ #define SH_EX .... Senshu Hiroyuki EXtension
+ #define WIN_EX .... Windows EXtension
+
+Lynx now builds with C++ Builder, Borland C++, Visual C++, and Cygwin.
diff --git a/gnu/usr.bin/lynx/fixed512.com b/gnu/usr.bin/lynx/fixed512.com
deleted file mode 100644
index 50b50fd5cdc..00000000000
--- a/gnu/usr.bin/lynx/fixed512.com
+++ /dev/null
@@ -1,54 +0,0 @@
-$! v = 'f$verify(0)'
-$!
-$! FIXED512.COM: Uses the FILE utility or SET FILE/ATTR
-$! to convert binary stream_LF file headers
-$! to FIXED 512.
-$!
-$! Author: F.Macrides (macrides@sci.wfeb.edu)
-$!
-$! Usage: @Lynx_Dir:FIXED512 <stream_LF file that's actually binary>
-$!
-$! Lynx performs the conversion via internal code if the file is
-$! recognized as binary. This command procedure can be used externally
-$! if that detection failed, e.g., for binary files downloaded from FTP
-$! servers with extensions that hadn't been mapped to a binary MIME
-$! type in the Lynx configuration files.
-$!
-$!===========================================================================
-$!
-$! Get and build Joe Meadow's FILE utility for VAX and AXP:
-$! ftp://ftp.wku.edu/vms/fileserv/file.zip
-$! and define it here, or system-wide, as a foreign command.
-$!
-$! FILE := $device:[directory]FILE.EXE
-$!-----------------------------------------------------------
-$!
-$! Just exit and leave the file stream_LF if we didn't get
-$! the filename as P1, or if it's not a valid file spec.
-$!
-$ IF P1 .EQS. "" THEN EXIT
-$ IF F$SEARCH(P1) .EQS. "" THEN EXIT
-$!-----------------------------------------------------------
-$!
-$! If we have FILE installed, use it.
-$!
-$ If f$type(FILE) .eqs. "STRING"
-$ Then
-$ FILE 'P1'-
- /TYPE=FIXED -
- /ATTRIBUTES=NOIMPLIEDCC -
- /CHARACTERISTICS=BEST_TRY_CONTIGUOUS -
- /RECORD_SIZE=512 -
- /MAXIMUM_RECORD_SIZE=512
-$ EXIT
-$ EndIf
-$!-----------------------------------------------------------
-$!
-$! If we get to here, and we're VMS v6+,
-$! we'll use SET FILE/ATTR to do it.
-$!
-$ If f$extract(1,1,f$getsyi("VERSION")) .ge. 6
-$ Then
-$ SET FILE/ATTR=(RFM:FIX,LRL:512,MRS:512,RAT:NONE) 'P1'
-$ EndIf
-$ EXIT
diff --git a/gnu/usr.bin/lynx/install.sh b/gnu/usr.bin/lynx/install.sh
index ab74c882e92..a9611d9e68c 100644
--- a/gnu/usr.bin/lynx/install.sh
+++ b/gnu/usr.bin/lynx/install.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5.
@@ -103,7 +103,7 @@ fi
if [ x"$dir_arg" != x ]; then
dst=$src
src=""
-
+
if [ -d $dst ]; then
instcmd=:
else
@@ -112,7 +112,7 @@ if [ x"$dir_arg" != x ]; then
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
+# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if [ -f $src -o -d $src ]
@@ -122,7 +122,7 @@ else
echo "install: $src does not exist"
exit 1
fi
-
+
if [ x"$dst" = x ]
then
echo "install: no destination specified"
@@ -189,17 +189,17 @@ else
# If we're going to rename the final executable, determine the name now.
- if [ x"$transformarg" = x ]
+ if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
else
- dstfile=`basename $dst $transformbasename |
+ dstfile=`basename $dst $transformbasename |
sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename
- if [ x"$dstfile" = x ]
+ if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
else
@@ -230,7 +230,7 @@ else
# Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
fi &&
diff --git a/gnu/usr.bin/lynx/intl/ChangeLog b/gnu/usr.bin/lynx/intl/ChangeLog
index ecff6f6b2cd..198950159da 100644
--- a/gnu/usr.bin/lynx/intl/ChangeLog
+++ b/gnu/usr.bin/lynx/intl/ChangeLog
@@ -1,3 +1,67 @@
+1998-04-29 Ulrich Drepper <drepper@cygnus.com>
+
+ * intl/localealias.c (read_alias_file): Use unsigned char for
+ local variables. Remove unused variable tp.
+ * intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char *
+ for type of codeset. For loosing Solaris systems.
+ * intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset.
+ * intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable
+ len if not needed.
+ Patches by Jim Meyering.
+
+1998-04-28 Ulrich Drepper <drepper@cygnus.com>
+
+ * loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if
+ mmap is not supported.
+
+ * hash-string.h: Don't include <values.h>.
+
+1998-04-27 Ulrich Drepper <drepper@cygnus.com>
+
+ * textdomain.c: Use strdup is available.
+
+ * localealias.c: Define HAVE_MEMPCPY so that we can use this
+ function. Define and use semapahores to protect modfication of
+ global objects when compiling for glibc. Add code to allow
+ freeing alias table.
+
+ * l10nflist.c: Don't assume stpcpy not being a macro.
+
+ * gettextP.h: Define internal_function macri if not already done.
+ Use glibc byte-swap macros instead of defining SWAP when compiled
+ for glibc.
+ (struct loaded_domain): Add elements to allow unloading.
+
+ * Makefile.in (distclean): Don't remove libintl.h here.
+
+ * bindtextdomain.c: Carry over changes from glibc. Use strdup if
+ available.
+
+ * dcgettext.c: Don't assume stpcpy not being a macro. Mark internal
+ functions. Add memory freeing code for glibc.
+
+ * dgettext.c: Update copyright.
+
+ * explodename.c: Include stdlib.h and string.h only if they exist.
+ Use strings.h eventually.
+
+ * finddomain.c: Mark internal functions. Use strdup if available.
+ Add memory freeing code for glibc.
+
+1997-10-10 20:00 Ulrich Drepper <drepper@cygnus.com>
+
+ * libgettext.h: Fix dummy textdomain and bindtextdomain macros.
+ They should return reasonable values.
+ Reported by Tom Tromey <tromey@cygnus.com>.
+
+1997-09-16 03:33 Ulrich Drepper <drepper@cygnus.com>
+
+ * libgettext.h: Define PARAMS also to `args' if __cplusplus is defined.
+ * intlh.inst.in: Likewise.
+ Reported by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>.
+
+ * libintl.glibc: Update from current glibc version.
+
1997-09-06 02:10 Ulrich Drepper <drepper@cygnus.com>
* intlh.inst.in: Reformat copyright.
diff --git a/gnu/usr.bin/lynx/intl/VERSION b/gnu/usr.bin/lynx/intl/VERSION
index d31950a61d6..ee66b0612bc 100644
--- a/gnu/usr.bin/lynx/intl/VERSION
+++ b/gnu/usr.bin/lynx/intl/VERSION
@@ -1 +1 @@
-GNU gettext library from gettext-0.10.32
+GNU gettext library from gettext-0.10.35
diff --git a/gnu/usr.bin/lynx/intl/bindtextdom.c b/gnu/usr.bin/lynx/intl/bindtextdom.c
index d700dd53397..d9c3f349e04 100644
--- a/gnu/usr.bin/lynx/intl/bindtextdom.c
+++ b/gnu/usr.bin/lynx/intl/bindtextdom.c
@@ -1,5 +1,5 @@
/* Implementation of the bindtextdomain(3) function
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
#if defined STDC_HEADERS || defined _LIBC
@@ -41,10 +41,10 @@ void free ();
#ifdef _LIBC
# include <libintl.h>
#else
-# include <libgettext.h>
+# include "libgettext.h"
#endif
-#include <gettext.h>
-#include <gettextP.h>
+#include "gettext.h"
+#include "gettextP.h"
/* @@ end of prolog @@ */
@@ -61,7 +61,9 @@ extern struct binding *_nl_domain_bindings;
prefix. So we have to make a difference here. */
#ifdef _LIBC
# define BINDTEXTDOMAIN __bindtextdomain
-# define strdup(str) __strdup (str)
+# ifndef strdup
+# define strdup(str) __strdup (str)
+# endif
#else
# define BINDTEXTDOMAIN bindtextdomain__
#endif
@@ -133,7 +135,9 @@ BINDTEXTDOMAIN (domainname, dirname)
else
{
/* We have to create a new binding. */
+#if !defined _LIBC && !defined HAVE_STRDUP
size_t len;
+#endif
struct binding *new_binding =
(struct binding *) malloc (sizeof (*new_binding));
diff --git a/gnu/usr.bin/lynx/intl/cat-compat.c b/gnu/usr.bin/lynx/intl/cat-compat.c
index 13323820c88..867d901b8ff 100644
--- a/gnu/usr.bin/lynx/intl/cat-compat.c
+++ b/gnu/usr.bin/lynx/intl/cat-compat.c
@@ -16,7 +16,7 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
#include <stdio.h>
@@ -35,7 +35,7 @@ char *getenv ();
# include <nl_types.h>
#endif
-#include <libgettext.h>
+#include "libgettext.h"
/* @@ end of prolog @@ */
@@ -44,7 +44,7 @@ char *getenv ();
setting of `local'.''
However it does not specify the exact format. And even worse: POSIX
defines this not at all. So we can use this feature only on selected
- system (e.g., those using GNU C Library). */
+ system (e.g. those using GNU C Library). */
#ifdef _LIBC
# define HAVE_LOCALE_NULL
#endif
diff --git a/gnu/usr.bin/lynx/intl/dcgettext.c b/gnu/usr.bin/lynx/intl/dcgettext.c
index 47331cc662c..eeaafcceac9 100644
--- a/gnu/usr.bin/lynx/intl/dcgettext.c
+++ b/gnu/usr.bin/lynx/intl/dcgettext.c
@@ -1,5 +1,5 @@
-/* Implementation of the dcgettext(3) function
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Implementation of the dcgettext(3) function.
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
#include <sys/types.h>
@@ -75,14 +75,14 @@ void free ();
# include <unistd.h>
#endif
-#include <gettext.h>
-#include <gettextP.h>
+#include "gettext.h"
+#include "gettextP.h"
#ifdef _LIBC
# include <libintl.h>
#else
-# include <libgettext.h>
+# include "libgettext.h"
#endif
-#include <hash-string.h>
+#include "hash-string.h"
/* @@ end of prolog @@ */
@@ -91,7 +91,9 @@ void free ();
because some ANSI C functions will require linking with this object
file and the name space must not be polluted. */
# define getcwd __getcwd
-# define stpcpy __stpcpy
+# ifndef stpcpy
+# define stpcpy __stpcpy
+# endif
#else
# if !defined HAVE_GETCWD
char *getwd ();
@@ -141,7 +143,7 @@ static char *stpcpy PARAMS ((char *dest, const char *src));
setting of `local'.''
However it does not specify the exact format. And even worse: POSIX
defines this not at all. So we can use this feature only on selected
- system (e.g., those using GNU C Library). */
+ system (e.g. those using GNU C Library). */
#ifdef _LIBC
# define HAVE_LOCALE_NULL
#endif
@@ -162,10 +164,11 @@ struct binding *_nl_domain_bindings;
/* Prototypes for local functions. */
static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
- const char *msgid));
-static const char *category_to_name PARAMS ((int category));
+ const char *msgid)) internal_function;
+static const char *category_to_name PARAMS ((int category)) internal_function;
static const char *guess_category_value PARAMS ((int category,
- const char *categoryname));
+ const char *categoryname))
+ internal_function;
/* For those loosing systems which don't have `alloca' we have to add
@@ -325,7 +328,7 @@ DCGETTEXT (domainname, msgid, category)
{
/* The whole contents of CATEGORYVALUE has been searched but
no valid entry has been found. We solve this situation
- by implicitly appending a "C" entry, i.e., no translation
+ by implicitly appending a "C" entry, i.e. no translation
will take place. */
single_locale[0] = 'C';
single_locale[1] = '\0';
@@ -388,6 +391,7 @@ weak_alias (__dcgettext, dcgettext);
static char *
+internal_function
find_msg (domain_file, msgid)
struct loaded_l10nfile *domain_file;
const char *msgid;
@@ -476,6 +480,7 @@ find_msg (domain_file, msgid)
/* Return string representation of locale CATEGORY. */
static const char *
+internal_function
category_to_name (category)
int category;
{
@@ -535,6 +540,7 @@ category_to_name (category)
/* Guess value of current locale from value of the environment variables. */
static const char *
+internal_function
guess_category_value (category, categoryname)
int category;
const char *categoryname;
@@ -580,7 +586,7 @@ guess_category_value (category, categoryname)
avoid the non-standard function stpcpy. In GNU C Library this
function is available, though. Also allow the symbol HAVE_STPCPY
to be defined. */
-#if !_LIBC && !HAVE_STPCPY
+#if !defined(_LIBC) && !defined(HAVE_STPCPY)
static char *
stpcpy (dest, src)
char *dest;
@@ -591,3 +597,28 @@ stpcpy (dest, src)
return dest - 1;
}
#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+ program's end. */
+static void __attribute__ ((unused))
+free_mem (void)
+{
+ struct binding *runp;
+
+ for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next)
+ {
+ free (runp->domainname);
+ if (runp->dirname != _nl_default_dirname)
+ /* Yes, this is a pointer comparison. */
+ free (runp->dirname);
+ }
+
+ if (_nl_current_default_domain != _nl_default_default_domain)
+ /* Yes, again a pointer comparison. */
+ free ((char *) _nl_current_default_domain);
+}
+
+text_set_element (__libc_subfreeres, free_mem);
+#endif
diff --git a/gnu/usr.bin/lynx/intl/dgettext.c b/gnu/usr.bin/lynx/intl/dgettext.c
index d5f479c3eb7..0510c2b071f 100644
--- a/gnu/usr.bin/lynx/intl/dgettext.c
+++ b/gnu/usr.bin/lynx/intl/dgettext.c
@@ -1,22 +1,22 @@
-/* dgettext.c -- implementation of the dgettext(3) function
- Copyright (C) 1995 Software Foundation, Inc.
+/* Implementation of the dgettext(3) function
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
-This program 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, or (at your option)
-any later version.
+ This program 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, 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.
+ 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. */
+ 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. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
#if defined HAVE_LOCALE_H || defined _LIBC
@@ -26,7 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef _LIBC
# include <libintl.h>
#else
-# include <libgettext.h>
+# include "libgettext.h"
#endif
/* @@ end of prolog @@ */
diff --git a/gnu/usr.bin/lynx/intl/explodename.c b/gnu/usr.bin/lynx/intl/explodename.c
index a7cce98b2a7..8066dc29962 100644
--- a/gnu/usr.bin/lynx/intl/explodename.c
+++ b/gnu/usr.bin/lynx/intl/explodename.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
This program is free software; you can redistribute it and/or modify
@@ -16,14 +16,21 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
-#include <stdlib.h>
-#include <string.h>
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+#endif
#include <sys/types.h>
-#include <loadinfo.h>
+#include "loadinfo.h"
/* On some strange systems still no definition of NULL is found. Sigh! */
#ifndef NULL
diff --git a/gnu/usr.bin/lynx/intl/finddomain.c b/gnu/usr.bin/lynx/intl/finddomain.c
index 33c11fc7a3e..81ea29bf4e4 100644
--- a/gnu/usr.bin/lynx/intl/finddomain.c
+++ b/gnu/usr.bin/lynx/intl/finddomain.c
@@ -1,5 +1,5 @@
/* Handle list of needed message catalogs
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
#include <ctype.h>
@@ -53,12 +53,12 @@ void free ();
# include <unistd.h>
#endif
-#include <gettext.h>
-#include <gettextP.h>
+#include "gettext.h"
+#include "gettextP.h"
#ifdef _LIBC
# include <libintl.h>
#else
-# include <libgettext.h>
+# include "libgettext.h"
#endif
/* @@ end of prolog @@ */
@@ -70,6 +70,7 @@ static struct loaded_l10nfile *_nl_loaded_domains;
the DOMAINNAME and CATEGORY parameters with respect to the currently
established bindings. */
struct loaded_l10nfile *
+internal_function
_nl_find_domain (dirname, locale, domainname)
const char *dirname;
char *locale;
@@ -95,9 +96,9 @@ _nl_find_domain (dirname, locale, domainname)
language[_territory][+audience][+special][,[sponsor][_revision]]
- Beside the first all of them are allowed to be missing. If the
- full specified locale is not found, the less specific one are
- looked for. The various part will be stripped of according to
+ Beside the first part all of them are allowed to be missing. If
+ the full specified locale is not found, the less specific one are
+ looked for. The various parts will be stripped off according to
the following order:
(1) revision
(2) sponsor
@@ -142,12 +143,18 @@ _nl_find_domain (dirname, locale, domainname)
alias_value = _nl_expand_alias (locale);
if (alias_value != NULL)
{
+#if defined _LIBC || defined HAVE_STRDUP
+ locale = strdup (alias_value);
+ if (locale == NULL)
+ return NULL;
+#else
size_t len = strlen (alias_value) + 1;
locale = (char *) malloc (len);
if (locale == NULL)
return NULL;
memcpy (locale, alias_value, len);
+#endif
}
/* Now we determine the single parts of the locale name. First
@@ -187,3 +194,23 @@ _nl_find_domain (dirname, locale, domainname)
return retval;
}
+
+
+#ifdef _LIBC
+static void __attribute__ ((unused))
+free_mem (void)
+{
+ struct loaded_l10nfile *runp = _nl_loaded_domains;
+
+ while (runp != NULL)
+ {
+ struct loaded_l10nfile *here = runp;
+ if (runp->data != NULL)
+ _nl_unload_domain ((struct loaded_domain *) runp->data);
+ runp = runp->next;
+ free (here);
+ }
+}
+
+text_set_element (__libc_subfreeres, free_mem);
+#endif
diff --git a/gnu/usr.bin/lynx/intl/gettext.c b/gnu/usr.bin/lynx/intl/gettext.c
index b7791872e7b..d929f98d68a 100644
--- a/gnu/usr.bin/lynx/intl/gettext.c
+++ b/gnu/usr.bin/lynx/intl/gettext.c
@@ -1,4 +1,4 @@
-/* Implementation of gettext(3) function
+/* Implementation of gettext(3) function.
Copyright (C) 1995, 1997 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
@@ -16,7 +16,7 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
#ifdef _LIBC
@@ -37,7 +37,7 @@
#ifdef _LIBC
# include <libintl.h>
#else
-# include <libgettext.h>
+# include "libgettext.h"
#endif
/* @@ end of prolog @@ */
diff --git a/gnu/usr.bin/lynx/intl/gettext.h b/gnu/usr.bin/lynx/intl/gettext.h
index 6b4b9e3316c..d0d608b78df 100644
--- a/gnu/usr.bin/lynx/intl/gettext.h
+++ b/gnu/usr.bin/lynx/intl/gettext.h
@@ -1,4 +1,4 @@
-/* Internal header for GNU gettext internationalization functions
+/* Internal header for GNU gettext internationalization functions.
Copyright (C) 1995, 1997 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
@@ -21,7 +21,7 @@
#include <stdio.h>
-#if HAVE_LIMITS_H || _LIBC
+#if defined(HAVE_LIMITS_H) || defined(_LIBC)
# include <limits.h>
#endif
diff --git a/gnu/usr.bin/lynx/intl/gettextP.h b/gnu/usr.bin/lynx/intl/gettextP.h
index 197d62dad53..00c52031972 100644
--- a/gnu/usr.bin/lynx/intl/gettextP.h
+++ b/gnu/usr.bin/lynx/intl/gettextP.h
@@ -1,5 +1,6 @@
/* Header describing internals of gettext library
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+ Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,7 +19,7 @@
#ifndef _GETTEXTP_H
#define _GETTEXTP_H
-#include <loadinfo.h>
+#include "loadinfo.h"
/* @@ end of prolog @@ */
@@ -30,11 +31,19 @@
# endif
#endif
+#ifndef internal_function
+# define internal_function
+#endif
+
#ifndef W
# define W(flag, data) ((flag) ? SWAP (data) : (data))
#endif
+#ifdef _LIBC
+# include <byteswap.h>
+# define SWAP(i) bswap_32 (i)
+#else
static nls_uint32 SWAP PARAMS ((nls_uint32 i));
static inline nls_uint32
@@ -43,11 +52,14 @@ SWAP (i)
{
return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
}
+#endif
struct loaded_domain
{
const char *data;
+ int use_mmap;
+ size_t mmap_size;
int must_swap;
nls_uint32 nstrings;
struct string_desc *orig_tab;
@@ -65,8 +77,12 @@ struct binding
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
char *__locale,
- const char *__domainname));
-void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain));
+ const char *__domainname))
+ internal_function;
+void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain))
+ internal_function;
+void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
+ internal_function;
/* @@ begin of epilog @@ */
diff --git a/gnu/usr.bin/lynx/intl/hash-string.h b/gnu/usr.bin/lynx/intl/hash-string.h
index e66e8417a97..cacb38e479f 100644
--- a/gnu/usr.bin/lynx/intl/hash-string.h
+++ b/gnu/usr.bin/lynx/intl/hash-string.h
@@ -16,10 +16,6 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#ifdef HAVE_VALUES_H
-# include <values.h>
-#endif
-
/* @@ end of prolog @@ */
#ifndef PARAMS
diff --git a/gnu/usr.bin/lynx/intl/intl-compat.c b/gnu/usr.bin/lynx/intl/intl-compat.c
index e17e68d757f..503efa0fa9c 100644
--- a/gnu/usr.bin/lynx/intl/intl-compat.c
+++ b/gnu/usr.bin/lynx/intl/intl-compat.c
@@ -17,10 +17,10 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
-#include <libgettext.h>
+#include "libgettext.h"
/* @@ end of prolog @@ */
diff --git a/gnu/usr.bin/lynx/intl/l10nflist.c b/gnu/usr.bin/lynx/intl/l10nflist.c
index 2ae3596280a..9c7dc18360f 100644
--- a/gnu/usr.bin/lynx/intl/l10nflist.c
+++ b/gnu/usr.bin/lynx/intl/l10nflist.c
@@ -1,6 +1,6 @@
/* Handle list of needed message catalogs
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
- Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,7 +17,7 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
@@ -48,7 +48,7 @@
# include <stdlib.h>
#endif
-#include <loadinfo.h>
+#include "loadinfo.h"
/* On some strange systems still no definition of NULL is found. Sigh! */
#ifndef NULL
@@ -65,7 +65,9 @@
/* Rename the non ANSI C functions. This is required by the standard
because some ANSI C functions will require linking with this object
file and the name space must not be polluted. */
-# define stpcpy(dest, src) __stpcpy(dest, src)
+# ifndef stpcpy
+# define stpcpy(dest, src) __stpcpy(dest, src)
+# endif
#else
# ifndef HAVE_STPCPY
static char *stpcpy PARAMS ((char *dest, const char *src));
@@ -350,7 +352,7 @@ _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
names. */
const char *
_nl_normalize_codeset (codeset, name_len)
- const char *codeset;
+ const unsigned char *codeset;
size_t name_len;
{
int len = 0;
diff --git a/gnu/usr.bin/lynx/intl/libgettext.h b/gnu/usr.bin/lynx/intl/libgettext.h
index 3d49ab51ea0..248e0635375 100644
--- a/gnu/usr.bin/lynx/intl/libgettext.h
+++ b/gnu/usr.bin/lynx/intl/libgettext.h
@@ -1,5 +1,5 @@
/* Message catalogs for internationalization.
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,13 +15,13 @@
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-/* Because on some systems (e.g., Solaris) we sometimes have to include
+/* Because on some systems (e.g. Solaris) we sometimes have to include
the systems libintl.h as well as this file we have more complex
include protection above. But the systems header might perhaps also
define _LIBINTL_H and therefore we have to protect the definition here. */
-#if !defined (_LIBINTL_H) || !defined (_LIBGETTEXT_H)
-#if !defined (_LIBINTL_H)
+#if !defined _LIBINTL_H || !defined _LIBGETTEXT_H
+#ifndef _LIBINTL_H
# define _LIBINTL_H 1
#endif
#define _LIBGETTEXT_H 1
@@ -44,7 +44,7 @@ extern "C" {
/* @@ end of prolog @@ */
#ifndef PARAMS
-# if __STDC__
+# if __STDC__ || defined __cplusplus
# define PARAMS(args) args
# else
# define PARAMS(args) ()
@@ -76,7 +76,7 @@ struct _msg_ent
};
-#if HAVE_CATGETS
+#ifdef HAVE_CATGETS
/* These two variables are defined in the automatically by po-to-tbl.sed
generated file `cat-id-tbl.c'. */
extern const struct _msg_ent _msg_tbl[];
@@ -126,7 +126,7 @@ extern char *bindtextdomain__ PARAMS ((const char *__domainname,
/* Solaris 2.3 has the gettext function but dcgettext is missing.
So we omit this optimization for Solaris 2.3. BTW, Solaris 2.4
has dcgettext. */
-# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT)
+# if !defined(HAVE_CATGETS) && (!defined(HAVE_GETTEXT) || defined(HAVE_DCGETTEXT))
# define gettext(Msgid) \
dgettext (NULL, Msgid)
@@ -168,8 +168,8 @@ extern int _nl_msg_cat_cntr;
# define gettext(Msgid) (Msgid)
# define dgettext(Domainname, Msgid) (Msgid)
# define dcgettext(Domainname, Msgid, Category) (Msgid)
-# define textdomain(Domainname) while (0) /* nothing */
-# define bindtextdomain(Domainname, Dirname) while (0) /* nothing */
+# define textdomain(Domainname) ((char *) Domainname)
+# define bindtextdomain(Domainname, Dirname) ((char *) Dirname)
#endif
diff --git a/gnu/usr.bin/lynx/intl/loadinfo.h b/gnu/usr.bin/lynx/intl/loadinfo.h
index c67c2eb2e8e..f4ebf6d8112 100644
--- a/gnu/usr.bin/lynx/intl/loadinfo.h
+++ b/gnu/usr.bin/lynx/intl/loadinfo.h
@@ -1,3 +1,21 @@
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ This program 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, 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. */
+
#ifndef PARAMS
# if __STDC__
# define PARAMS(args) args
@@ -32,7 +50,7 @@ struct loaded_l10nfile
};
-extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
+extern const char *_nl_normalize_codeset PARAMS ((const unsigned char *codeset,
size_t name_len));
extern struct loaded_l10nfile *
diff --git a/gnu/usr.bin/lynx/intl/loadmsgcat.c b/gnu/usr.bin/lynx/intl/loadmsgcat.c
index 19b2cce9434..515892dfb86 100644
--- a/gnu/usr.bin/lynx/intl/loadmsgcat.c
+++ b/gnu/usr.bin/lynx/intl/loadmsgcat.c
@@ -1,5 +1,5 @@
-/* Load needed message catalogs
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Load needed message catalogs.
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
#include <fcntl.h>
@@ -35,8 +35,8 @@
# include <sys/mman.h>
#endif
-#include <gettext.h>
-#include <gettextP.h>
+#include "gettext.h"
+#include "gettextP.h"
/* @@ end of prolog @@ */
@@ -44,7 +44,6 @@
/* Rename the non ISO C functions. This is required by the standard
because some ISO C functions will require linking with this object
file and the name space must not be polluted. */
-# define fstat __fstat
# define open __open
# define close __close
# define read __read
@@ -61,10 +60,12 @@ int _nl_msg_cat_cntr = 0;
/* Load the message catalogs specified by FILENAME. If it is no valid
message catalog do nothing. */
void
+internal_function
_nl_load_domain (domain_file)
struct loaded_l10nfile *domain_file;
{
int fd;
+ size_t size;
struct stat st;
struct mo_file_header *data = (struct mo_file_header *) -1;
#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
@@ -90,7 +91,8 @@ _nl_load_domain (domain_file)
/* We must know about the size of the file. */
if (fstat (fd, &st) != 0
- && st.st_size < (off_t) sizeof (struct mo_file_header))
+ || (size = (size_t) st.st_size) != st.st_size
+ || size < sizeof (struct mo_file_header))
{
/* Something went wrong. */
close (fd);
@@ -101,7 +103,7 @@ _nl_load_domain (domain_file)
|| defined _LIBC
/* Now we are ready to load the file. If mmap() is available we try
this first. If not available or it failed we try to load it. */
- data = (struct mo_file_header *) mmap (NULL, st.st_size, PROT_READ,
+ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
MAP_PRIVATE, fd, 0);
if (data != (struct mo_file_header *) -1)
@@ -112,18 +114,18 @@ _nl_load_domain (domain_file)
}
#endif
- /* If the data is not yet available (i.e., mmap'ed) we try to load
+ /* If the data is not yet available (i.e. mmap'ed) we try to load
it manually. */
if (data == (struct mo_file_header *) -1)
{
- off_t to_read;
+ size_t to_read;
char *read_ptr;
- data = (struct mo_file_header *) malloc (st.st_size);
+ data = (struct mo_file_header *) malloc (size);
if (data == NULL)
return;
- to_read = st.st_size;
+ to_read = size;
read_ptr = (char *) data;
do
{
@@ -150,7 +152,7 @@ _nl_load_domain (domain_file)
#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
|| defined _LIBC
if (use_mmap)
- munmap ((caddr_t) data, st.st_size);
+ munmap ((caddr_t) data, size);
else
#endif
free (data);
@@ -164,6 +166,11 @@ _nl_load_domain (domain_file)
domain = (struct loaded_domain *) domain_file->data;
domain->data = (char *) data;
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+ || defined _LIBC
+ domain->use_mmap = use_mmap;
+#endif
+ domain->mmap_size = size;
domain->must_swap = data->magic != _MAGIC;
/* Fill in the information about the available tables. */
@@ -184,7 +191,7 @@ _nl_load_domain (domain_file)
#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
|| defined _LIBC
if (use_mmap)
- munmap ((caddr_t) data, st.st_size);
+ munmap ((caddr_t) data, size);
else
#endif
free (data);
@@ -197,3 +204,19 @@ _nl_load_domain (domain_file)
translations invalid. */
++_nl_msg_cat_cntr;
}
+
+
+#ifdef _LIBC
+void
+internal_function
+_nl_unload_domain (domain)
+ struct loaded_domain *domain;
+{
+ if (domain->use_mmap)
+ munmap ((caddr_t) domain->data, domain->mmap_size);
+ else
+ free ((void *) domain->data);
+
+ free (domain);
+}
+#endif
diff --git a/gnu/usr.bin/lynx/intl/localealias.c b/gnu/usr.bin/lynx/intl/localealias.c
index d13b2c645b8..bca555a610f 100644
--- a/gnu/usr.bin/lynx/intl/localealias.c
+++ b/gnu/usr.bin/lynx/intl/localealias.c
@@ -1,5 +1,5 @@
-/* Handle aliases for locale names
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Handle aliases for locale names.
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
#include <ctype.h>
@@ -69,8 +69,8 @@ void free ();
# endif
#endif
-#include <gettext.h>
-#include <gettextP.h>
+#include "gettext.h"
+#include "gettextP.h"
/* @@ end of prolog @@ */
@@ -79,6 +79,14 @@ void free ();
because some ANSI C functions will require linking with this object
file and the name space must not be polluted. */
# define strcasecmp __strcasecmp
+
+# define mempcpy __mempcpy
+# define HAVE_MEMPCPY 1
+
+/* We need locking here since we can be called from different places. */
+# include <bits/libc-lock.h>
+
+__libc_lock_define_initialized (static, lock);
#endif
@@ -125,13 +133,17 @@ struct alias_map
};
+static char *string_space = NULL;
+static size_t string_space_act = 0;
+static size_t string_space_max = 0;
static struct alias_map *map;
static size_t nmap = 0;
static size_t maxmap = 0;
/* Prototypes for local functions. */
-static size_t read_alias_file PARAMS ((const char *fname, int fname_len));
+static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
+ internal_function;
static void extend_alias_table PARAMS ((void));
static int alias_compare PARAMS ((const struct alias_map *map1,
const struct alias_map *map2));
@@ -143,8 +155,13 @@ _nl_expand_alias (name)
{
static const char *locale_alias_path = LOCALE_ALIAS_PATH;
struct alias_map *retval;
+ const char *result = NULL;
size_t added;
+#ifdef _LIBC
+ __libc_lock_lock (lock);
+#endif
+
do
{
struct alias_map item;
@@ -162,7 +179,10 @@ _nl_expand_alias (name)
/* We really found an alias. Return the value. */
if (retval != NULL)
- return retval->value;
+ {
+ result = retval->value;
+ break;
+ }
/* Perhaps we can find another alias file. */
added = 0;
@@ -183,11 +203,16 @@ _nl_expand_alias (name)
}
while (added != 0);
- return NULL;
+#ifdef _LIBC
+ __libc_lock_unlock (lock);
+#endif
+
+ return result;
}
static size_t
+internal_function
read_alias_file (fname, fname_len)
const char *fname;
int fname_len;
@@ -202,8 +227,13 @@ read_alias_file (fname, fname_len)
full_fname = (char *) alloca (fname_len + sizeof aliasfile);
ADD_BLOCK (block_list, full_fname);
+#ifdef HAVE_MEMPCPY
+ mempcpy (mempcpy (full_fname, fname, fname_len),
+ aliasfile, sizeof aliasfile);
+#else
memcpy (full_fname, fname, fname_len);
memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+#endif
fp = fopen (full_fname, "r");
if (fp == NULL)
@@ -220,15 +250,28 @@ read_alias_file (fname, fname_len)
b) these fields must be usable as file names and so must not
be that long
*/
- char buf[BUFSIZ];
- char *alias;
- char *value;
- char *cp;
+ unsigned char buf[BUFSIZ];
+ unsigned char *alias;
+ unsigned char *value;
+ unsigned char *cp;
- if (fgets (buf, BUFSIZ, fp) == NULL)
+ if (fgets (buf, sizeof buf, fp) == NULL)
/* EOF reached. */
break;
+ /* Possibly not the whole line fits into the buffer. Ignore
+ the rest of the line. */
+ if (strchr (buf, '\n') == NULL)
+ {
+ char altbuf[BUFSIZ];
+ do
+ if (fgets (altbuf, sizeof altbuf, fp) == NULL)
+ /* Make sure the inner loop will be left. The outer loop
+ will exit at the `feof' test. */
+ break;
+ while (strchr (altbuf, '\n') == NULL);
+ }
+
cp = buf;
/* Ignore leading white space. */
while (isspace (cp[0]))
@@ -250,8 +293,8 @@ read_alias_file (fname, fname_len)
if (cp[0] != '\0')
{
- char *tp;
- size_t len;
+ size_t alias_len;
+ size_t value_len;
value = cp++;
while (cp[0] != '\0' && !isspace (cp[0]))
@@ -271,42 +314,37 @@ read_alias_file (fname, fname_len)
if (nmap >= maxmap)
extend_alias_table ();
- /* We cannot depend on strdup available in the libc. Sigh! */
- len = strlen (alias) + 1;
- tp = (char *) malloc (len);
- if (tp == NULL)
- {
- FREE_BLOCKS (block_list);
- return added;
- }
- memcpy (tp, alias, len);
- map[nmap].alias = tp;
+ alias_len = strlen (alias) + 1;
+ value_len = strlen (value) + 1;
- len = strlen (value) + 1;
- tp = (char *) malloc (len);
- if (tp == NULL)
+ if (string_space_act + alias_len + value_len > string_space_max)
{
- FREE_BLOCKS (block_list);
- return added;
+ /* Increase size of memory pool. */
+ size_t new_size = (string_space_max
+ + (alias_len + value_len > 1024
+ ? alias_len + value_len : 1024));
+ char *new_pool = (char *) realloc (string_space, new_size);
+ if (new_pool == NULL)
+ {
+ FREE_BLOCKS (block_list);
+ return added;
+ }
+ string_space = new_pool;
+ string_space_max = new_size;
}
- memcpy (tp, value, len);
- map[nmap].value = tp;
+
+ map[nmap].alias = memcpy (&string_space[string_space_act],
+ alias, alias_len);
+ string_space_act += alias_len;
+
+ map[nmap].value = memcpy (&string_space[string_space_act],
+ value, value_len);
+ string_space_act += value_len;
++nmap;
++added;
}
}
-
- /* Possibly not the whole line fits into the buffer. Ignore
- the rest of the line. */
- while (strchr (cp, '\n') == NULL)
- {
- cp = buf;
- if (fgets (buf, BUFSIZ, fp) == NULL)
- /* Make sure the inner loop will be left. The outer loop
- will exit at the `feof' test. */
- *cp = '\n';
- }
}
/* Should we test for ferror()? I think we have to silently ignore
@@ -329,22 +367,30 @@ extend_alias_table ()
struct alias_map *new_map;
new_size = maxmap == 0 ? 100 : 2 * maxmap;
- new_map = (struct alias_map *) malloc (new_size
- * sizeof (struct alias_map));
+ new_map = (struct alias_map *) realloc (map, (new_size
+ * sizeof (struct alias_map)));
if (new_map == NULL)
/* Simply don't extend: we don't have any more core. */
return;
- memcpy (new_map, map, nmap * sizeof (struct alias_map));
-
- if (maxmap != 0)
- free (map);
-
map = new_map;
maxmap = new_size;
}
+#ifdef _LIBC
+static void __attribute__ ((unused))
+free_mem (void)
+{
+ if (string_space != NULL)
+ free (string_space);
+ if (map != NULL)
+ free (map);
+}
+text_set_element (__libc_subfreeres, free_mem);
+#endif
+
+
static int
alias_compare (map1, map2)
const struct alias_map *map1;
diff --git a/gnu/usr.bin/lynx/intl/makefile.in b/gnu/usr.bin/lynx/intl/makefile.in
index 10c0aefec6a..390e8d30b17 100644
--- a/gnu/usr.bin/lynx/intl/makefile.in
+++ b/gnu/usr.bin/lynx/intl/makefile.in
@@ -15,12 +15,22 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-# PACKAGE = @PACKAGE@
-PACKAGE = lynx
-# VERSION = @VERSION@
-VERSION = 2.8.2
+# Changes:
+# # Added a variable $(MAKEFILE) permitting us to use "makefile.in" for
+# ease of porting to systems with case-independent filenames.
+# # Renamed po2tbl.sed.in to po2tbl.sed_in to allow bundling in VMS zips.
+# # Set CDPATH to . in the makefile.in's that use cd, in case user has set
+# CDPATH without . at the beginning.
+# # Add variable $(CONFIG_H) permitting us to use a different name than
+# "config.h" in the parent package.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
SHELL = @CONFIG_SHELL@
+CDPATH = .
+MAKEFILE = makefile
+CONFIG_H = @CONFIG_H@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
@@ -42,11 +52,13 @@ subdir = intl
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
MKINSTALLDIRS = @MKINSTALLDIRS@
+DESTDIR = @DESTDIR@
l = @l@
AR = ar
CC = @CC@
+LN_S = @LN_S@
LIBTOOL = @LIBTOOL@
RANLIB = @RANLIB@
@@ -69,7 +81,7 @@ finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
explodename.$lo
CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
GETTOBJS = intl-compat.$lo
-DISTFILES.common = ChangeLog makefile.in linux-msg.sed po2tbl.sed.in \
+DISTFILES.common = ChangeLog $(MAKEFILE).in linux-msg.sed po2tbl.sed_in \
xopen-msg.sed $(HEADERS) $(SOURCES)
DISTFILES.normal = VERSION
DISTFILES.gettext = libintl.glibc intlh.inst.in
@@ -116,26 +128,26 @@ install-exec: all
if test "$(PACKAGE)" = "gettext" \
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
if test -r $(MKINSTALLDIRS); then \
- $(MKINSTALLDIRS) $(libdir) $(includedir); \
+ $(MKINSTALLDIRS) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
else \
- $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
+ $(top_srcdir)/mkinstalldirs $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
fi; \
- $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
- $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
+ $(INSTALL_DATA) intlh.inst $(DESTDIR)$(includedir)/libintl.h; \
+ $(INSTALL_DATA) libintl.a $(DESTDIR)$(libdir)/libintl.a; \
else \
: ; \
fi
install-data: all
if test "$(PACKAGE)" = "gettext"; then \
if test -r $(MKINSTALLDIRS); then \
- $(MKINSTALLDIRS) $(gettextsrcdir); \
+ $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \
else \
- $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
+ $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \
fi; \
- $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
+ $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
dists="$(DISTFILES.common)"; \
for file in $$dists; do \
- $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \
+ $(INSTALL_DATA) $(srcdir)/$$file $(DESTDIR)$(gettextsrcdir)/$$file; \
done; \
else \
: ; \
@@ -147,12 +159,14 @@ installcheck:
uninstall:
dists="$(DISTFILES.common)"; \
for file in $$dists; do \
- rm -f $(gettextsrcdir)/$$file; \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
done
info dvi:
-$(OBJECTS): ../lynx_cfg.h libgettext.h
+$(OBJECTS): config.h libgettext.h
+config.h : $(top_srcdir)/@CONFIG_H@
+ cp $(top_srcdir)/@CONFIG_H@ $@
bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
@@ -173,7 +187,8 @@ mostlyclean:
clean: mostlyclean
distclean: clean
- rm -f makefile ID TAGS po2msg.sed po2tbl.sed # libintl.h
+ rm -f $(MAKEFILE) ID TAGS po2msg.sed po2tbl.sed libintl.h
+ rm -f config.h
maintainer-clean: distclean
@echo "This command is intended for maintainers to use;"
@@ -183,7 +198,7 @@ maintainer-clean: distclean
# GNU gettext needs not contain the file `VERSION' but contains some
# other files which should not be distributed in other packages.
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
-dist distdir: makefile $(DISTFILES)
+dist distdir: $(MAKEFILE) $(DISTFILES)
if test "$(PACKAGE)" = gettext; then \
additional="$(DISTFILES.gettext)"; \
else \
@@ -197,13 +212,13 @@ dist distdir: makefile $(DISTFILES)
dist-libc:
tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
-makefile: makefile.in ../config.status
+$(MAKEFILE): $(MAKEFILE).in ../config.status
cd .. \
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
# The dependency for intlh.inst is different in gettext and all other
-# packages. Because we cannot you GNU make features we have to solve
-# the problem while rewriting makefile.in.
+# packages. Because we cannot use GNU make features we have to solve
+# the problem while rewriting $(MAKEFILE).in.
@GT_YES@intlh.inst: intlh.inst.in ../config.status
@GT_YES@ cd .. \
@GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
diff --git a/gnu/usr.bin/lynx/intl/po2tbl.sed_in b/gnu/usr.bin/lynx/intl/po2tbl.sed_in
new file mode 100644
index 00000000000..b3bcca4d730
--- /dev/null
+++ b/gnu/usr.bin/lynx/intl/po2tbl.sed_in
@@ -0,0 +1,102 @@
+# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
+# Copyright (C) 1995 Free Software Foundation, Inc.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+#
+# This program 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, 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.
+#
+1 {
+ i\
+/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot. */\
+\
+#if HAVE_CONFIG_H\
+# include <config.h>\
+#endif\
+\
+#include "libgettext.h"\
+\
+const struct _msg_ent _msg_tbl[] = {
+ h
+ s/.*/0/
+ x
+}
+#
+# Write msgid entries in C array form.
+#
+/^msgid/ {
+ s/msgid[ ]*\(".*"\)/ {\1/
+ tb
+# Append the next line
+ :b
+ N
+# Look whether second part is continuation line.
+ s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
+# Yes, then branch.
+ ta
+# Because we assume that the input file correctly formed the line
+# just read cannot be again be a msgid line. So it's safe to ignore
+# it.
+ s/\(.*\)\n.*/\1/
+ bc
+# We found a continuation line. But before printing insert '\'.
+ :a
+ s/\(.*\)\(\n.*\)/\1\\\2/
+ P
+# We cannot use D here.
+ s/.*\n\(.*\)/\1/
+# Some buggy seds do not clear the `successful substitution since last ``t'''
+# flag on `N', so we do a `t' here to clear it.
+ tb
+# Not reached
+ :c
+ x
+# The following nice solution is by
+# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+ td
+# Increment a decimal number in pattern space.
+# First hide trailing `9' digits.
+ :d
+ s/9\(_*\)$/_\1/
+ td
+# Assure at least one digit is available.
+ s/^\(_*\)$/0\1/
+# Increment the last digit.
+ s/8\(_*\)$/9\1/
+ s/7\(_*\)$/8\1/
+ s/6\(_*\)$/7\1/
+ s/5\(_*\)$/6\1/
+ s/4\(_*\)$/5\1/
+ s/3\(_*\)$/4\1/
+ s/2\(_*\)$/3\1/
+ s/1\(_*\)$/2\1/
+ s/0\(_*\)$/1\1/
+# Convert the hidden `9' digits to `0's.
+ s/_/0/g
+ x
+ G
+ s/\(.*\)\n\([0-9]*\)/\1, \2},/
+ s/\(.*\)"$/\1/
+ p
+}
+#
+# Last line.
+#
+$ {
+ i\
+};\
+
+ g
+ s/0*\(.*\)/int _msg_tbl_length = \1;/p
+}
+d
diff --git a/gnu/usr.bin/lynx/intl/textdomain.c b/gnu/usr.bin/lynx/intl/textdomain.c
index cddebefddd6..88557460f3b 100644
--- a/gnu/usr.bin/lynx/intl/textdomain.c
+++ b/gnu/usr.bin/lynx/intl/textdomain.c
@@ -1,5 +1,5 @@
-/* Implementation of the textdomain(3) function
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Implementation of the textdomain(3) function.
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifdef HAVE_CONFIG_H
-# include <lynx_cfg.h>
+# include <config.h>
#endif
#if defined STDC_HEADERS || defined _LIBC
@@ -36,7 +36,7 @@
#ifdef _LIBC
# include <libintl.h>
#else
-# include <libgettext.h>
+# include "libgettext.h"
#endif
/* @@ end of prolog @@ */
@@ -54,7 +54,9 @@ extern const char *_nl_current_default_domain;
prefix. So we have to make a difference here. */
#ifdef _LIBC
# define TEXTDOMAIN __textdomain
-# define strdup(str) __strdup (str)
+# ifndef strdup
+# define strdup(str) __strdup (str)
+# endif
#else
# define TEXTDOMAIN textdomain__
#endif
diff --git a/gnu/usr.bin/lynx/lynx.cfg b/gnu/usr.bin/lynx/lynx.cfg
index 1dd7da86a41..13093d89d03 100644
--- a/gnu/usr.bin/lynx/lynx.cfg
+++ b/gnu/usr.bin/lynx/lynx.cfg
@@ -1,24 +1,32 @@
# lynx.cfg file.
-# The default placement for this file is /usr/local/lib/lynx.cfg (Unix)
-# or Lynx_Dir:lynx.cfg (VMS)
-#
+# The default placement for this file is /etc/lynx.cfg
#
# Definition pairs are of the form VARIABLE:DEFINITION
# NO spaces are allowed between the pair items.
#
-# If you do not have write access to /usr/local/bin you may change
+# If you do not have write access to /etc you may change
# the default location of this file in the userdefs.h file and recompile,
# or specify its location on the command line with the "-cfg"
# command line option.
#
# Items may be commented out by putting a '#' as the FIRST char of the line
-#
-# All definitions must be flush left and have NO spaces.!!!
+# (Any line beginning with punctuation is ignored). Leading blanks on each
+# line are ignored; trailing blanks may be significant depending on the option.
# An HTML'ized description of all settings (based on comments in this file,
# with alphabetical table of settings and with table of settings by category)
# is available at http://www.hippo.ru/~hvv/lynxcfg_toc.html
+#
+### The conversion is done via the scripts/cfg2html.pl script.
+### Several directives beginning with '.' are used for this purpose.
+
+
+.h1 Auxiliary Facilities
+# These settings control the auxiliary navigating facilities of lynx, e.g.,
+# jumpfiles, bookmarks, default URLs.
+
+.h2 INCLUDE
# Starting with Lynx 2.8.1, the lynx.cfg file has a crude "include"
# facility. This means that you can take advantage of the global lynx.cfg
# while also supplying your own tweaks.
@@ -37,7 +45,7 @@
# and now your own tweaks.
#
# Starting with Lynx 2.8.2, the INCLUDE facility is yet more powerful. You can
-# suppress all but specific settings that will be read from included files.
+# suppress all but specific settings that will be read from included files.
# This allows sysadmins to provide users the ability to customize lynx with
# options that normally do not affect security, such as COLOR, VIEWER, KEYMAP.
#
@@ -46,9 +54,11 @@
# INCLUDE:filename for <space-separated-list-of-allowed-settings>
#
# sample:
+.ex
#INCLUDE:~/lynx.cfg for COLOR VIEWER KEYMAP
# only one space character should surround the word 'for'. On Unix systems ':'
# is also accepted as separator. In that case, the example can be written as
+.ex
#INCLUDE:~/lynx.cfg:COLOR VIEWER KEYMAP
# In the example, only the settings COLOR, VIEWER and KEYMAP are accepted by
# lynx. Other settings are ignored. Note: INCLUDE is also treated as a
@@ -63,6 +73,8 @@
# user-defined configuration file if the original list of allowed settings is
# secure.
+
+.h2 STARTFILE
# STARTFILE is the default starting URL if none is specified
# on the command line or via a WWW_HOME environment variable;
# Lynx will refuse to start without a starting URL of some kind.
@@ -73,16 +85,19 @@
#
# Normally we expect you will connect to a remote site, e.g., the Lynx starting
# site:
-STARTFILE:http://www.OpenBSD.org/
+#STARTFILE:http://www.OpenBSD.org
#
# As an alternative, you may want to use a local URL. A good choice for this is
# the user's home directory:
+.ex
#STARTFILE:file://localhost/~/
#
# Your choice of STARTFILE should reflect your site's needs, and be a URL that
# you can connect to reliably. Otherwise users will become confused and think
# that they cannot run Lynx.
+
+.h2 HELPFILE
# HELPFILE must be defined as a URL and must have a
# complete path if local:
# file://localhost/PATH_TO/lynx_help/lynx_help_main.html
@@ -90,12 +105,15 @@ STARTFILE:http://www.OpenBSD.org/
# for this distribution (use SHELL syntax including the device
# on VMS systems).
# The default HELPFILE is:
-# http://www.crl.com/~subir/lynx/lynx_help/lynx_help_main.html
+# http://www.trill-home.com/lynx/lynx_help/lynx_help_main.html
# This should be changed to the local path.
#
-#HELPFILE:http://www.crl.com/~subir/lynx/lynx_help/lynx_help_main.html
-HELPFILE:file://localhost/usr/share/doc/html/lynx_help/lynx_help_main.html
+#HELPFILE:http://www.trill-home.com/lynx/lynx_help/lynx_help_main.html
+.ex
+#HELPFILE:file://localhost/usr/share/doc/html/lynx_help/lynx_help_main.html
+
+.h2 DEFAULT_INDEX_FILE
# DEFAULT_INDEX_FILE is the default file retrieved when the
# user presses the 'I' key when viewing any document.
# An index to your CWIS can be placed here or a document containing
@@ -103,6 +121,10 @@ HELPFILE:file://localhost/usr/share/doc/html/lynx_help/lynx_help_main.html
#
DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
+
+.h1 Interaction
+
+.h2 GOTOBUFFER
# Set GOTOBUFFER to TRUE if you want to have the previous goto URL,
# if any, offered for reuse or editing when using the 'g'oto command.
# The default is defined in userdefs.h. If left FALSE, the circular
@@ -111,6 +133,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#GOTOBUFFER:FALSE
+
+.h2 JUMP_PROMPT
# JUMP_PROMPT is the default statusline prompt for selecting a jumps file
# shortcut. (see below).
# You can change the prompt here from that defined in userdefs.h. Any
@@ -122,14 +146,18 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#JUMP_PROMPT:Jump to (use '?' for list):
+
+.h1 Auxiliary Facilities
+
+.h2 JUMPFILE
# JUMPFILE is the local file checked for short-cut names for URLs
# when the user presses the 'j' (JUMP) key. The user will be prompted
# to enter a short-cut name for an URL, which Lynx will then follow
# in a similar manner to 'g'oto; alternatively, s/he can enter '?'
# to view the full JUMPFILE list of short-cuts with associated URLs.
# There is an example jumps file in the samples subdirectory.
-# If not defined here or in userdefs.h , the JUMP command will invoke
-# the NO_JUMPFILE statusline message (cp LYMessages_en.h ).
+# If not defined here or in userdefs.h, the JUMP command will invoke
+# the NO_JUMPFILE statusline message (see LYMessages_en.h ).
#
# To allow '?' to work, include in the JUMPFILE
# a short-cut to the JUMPFILE itself, e.g.
@@ -137,14 +165,28 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
# On VMS, use Unix SHELL syntax (including a lead slash) to define it.
#
-# Additional jumps files can be defined and mapped to keystrokes
-# in lynx.cfg , but you should first define the default jumps file,
-# which is mapped by default to 'j' (or 'J' when VI keys are ON).
+# Alternate jumps files can be defined and mapped to keys here. If the
+# keys have already been mapped, then those mappings will be replaced,
+# but you should leave at least one key mapped to the default jumps
+# file. You optionally may include a statusline prompt string for the
+# mapping. You must map upper and lowercase keys separately (beware of
+# mappings to keys which the user can further remap via the 'o'ptions
+# menu). The format is:
+#
+# JUMPFILE:path:key[:prompt]
+#
+# where path should begin with a '/' (i.e., not include file://localhost).
+# Any white space following a prompt string will be trimmed, and a single
+# space will be added by Lynx.
#
# In the following line, include the actual full local path to JUMPFILE,
# but do not include 'file://localhost' in the line.
#JUMPFILE:/FULL_LOCAL_PATH/jumps.html
+.ex
+#JUMPFILE:/Lynx_Dir/ips.html:i:IP or Interest group (? for list):
+
+.h2 JUMPBUFFER
# Set JUMPBUFFER to TRUE if you want to have the previous jump target,
# if any, offered for reuse or editing when using the 'J'ump command.
# The default is defined in userdefs.h. If left FALSE, the circular
@@ -159,6 +201,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#JUMPBUFFER:FALSE
+
+.h1 Internal Behavior
+
+.h2 SAVE_SPACE
# If SAVE_SPACE is defined, it will be used as a path prefix for the
# suggested filename in "Save to Disk" operations from the 'p'rint or
# 'd'ownload menus. On VMS, you can use either VMS (e.g., "SYS$LOGIN:")
@@ -171,6 +217,29 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#SAVE_SPACE:~/foo/
+
+.h2 REUSE_TEMPFILES
+# Lynx uses temporary files for (among other purposes) the content of
+# various user interface pages. REUSE_TEMPFILES changes the behavior
+# for some of these temp files, among them pages shown for HISTORY,
+# VLINKS, OPTIONS, INFO, PRINT, DOWNLOAD commands.
+# If set to TRUE, the same file can be used multiple times for the same
+# purpose. If set to FALSE, a new filename is generated each time before
+# rewriting such a page. With TRUE, repeated invocation of these commands
+# is less likely to push previous documents out of the cache of rendered
+# texts (see also DEFAULT_CACHE_SIZE). This is especially useful with
+# intermittent (dialup) network connections, when it is desirable to
+# continue browsing through the cached documents after disconnecting.
+# With the default setting of FALSE, there can be more than one incarnation
+# of e.g. the VLINKS page cached in memory (but still only the most recently
+# generated one is kept as a file), resulting in sometimes less surprising
+# behaviour when returning to such a page via HISTORY or PREV_DOC functions
+# (most users will not encounter and notice this difference).
+#
+#REUSE_TEMPFILES:FALSE
+
+
+.h2 LYNX_HOST_NAME
# If LYNX_HOST_NAME is defined here or in userdefs.h, it will be
# treated as an alias for the local host name in checks for URLs on
# the local host (e.g., when the -localhost switch is set), and this
@@ -180,15 +249,20 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#LYNX_HOST_NAME:www.cc.ukans.edu
+
+.h2 LOCALHOST_ALIAS
# localhost aliases
# Any LOCALHOST_ALIAS definitions also will be accepted as local when
# the -localhost switch is set. These need not actually be local, i.e.,
# in contrast to LYNX_HOST_NAME, you can define them to trusted hosts at
# other Internet sites.
#
+.ex 2
#LOCALHOST_ALIAS:gopher.server.domain
#LOCALHOST_ALIAS:news.server.domain
+
+.h2 LOCAL_DOMAIN
# LOCAL_DOMAIN is used for a tail match with the ut_host element of
# the utmp or utmpx structure on systems with utmp capabilities, to
# determine if a user is local to your campus or organization when
@@ -199,6 +273,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#LOCAL_DOMAIN:ukans.edu
+
+.h1 Character sets
+
+.h2 CHARACTER_SET
# CHARACTER_SET defines the display character set, i.e., assumed to be
# installed on the user's terminal. It determines which characters or strings
# will be used to represent 8-bit character entities within HTML. New
@@ -254,6 +332,7 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
# Recognized character sets include:
#
+.nf
# string for 'O'ptions Menu MIME name
# =========================== =========
# 7 bit approximations (US-ASCII) us-ascii
@@ -301,6 +380,7 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
# RFC 1345 w/o Intro mnemonic+ascii+0
# RFC 1345 Mnemonic mnemonic
# Transparent x-transparent
+.fi
#
# The value should be the MIME name of a character set recognized by
# Lynx (case insensitive).
@@ -308,6 +388,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#CHARACTER_SET:iso-8859-1
+
+.h2 ASSUME_CHARSET
# ASSUME_CHARSET changes the handling of documents which do not
# explicitly specify a charset. Normally Lynx assumes that 8-bit
# characters in those documents are encoded according to iso-8859-1
@@ -321,6 +403,51 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#ASSUME_CHARSET:iso-8859-1
+
+.h2 ASSUMED_DOC_CHARSET_CHOICE
+.h2 DISPLAY_CHARSET_CHOICE
+# It is possible to reduce the number of charset choices in the 'O'ptions menu
+# for "display charset" and "assumed document charset" fields via
+# DISPLAY_CHARSET_CHOICE and ASSUMED_DOC_CHARSET_CHOICE settings correspondingly.
+# Each of these settings can be used several times to define the set of possible
+# choices for corresponding field. The syntax for the values is
+#
+# string | prefix* | *
+#
+# where
+#
+# 'string' is either the MIME name of charset or it's full name (listed
+# either in the left or in the right column of table of
+# recognized charsets), case-insensitive - e.g. 'Koi8-R' or
+# 'Cyrillic (KOI8-R)' (both without quotes),
+#
+# 'prefix' is any string, and such value will select all charsets having
+# the name with prefix matching given (case insensitive), i.e.,
+# for the charsets listed in the table of recognized charsets,
+#
+.ex
+# ASSUMED_DOC_CHARSET_CHOICE:cyrillic*
+# will be equal to specifying
+.ex 4
+# ASSUMED_DOC_CHARSET_CHOICE:cp866
+# ASSUMED_DOC_CHARSET_CHOICE:windows-1251
+# ASSUMED_DOC_CHARSET_CHOICE:koi8-r
+# ASSUMED_DOC_CHARSET_CHOICE:iso-8859-5
+# or lines with full names of charsets.
+#
+# literal string '*' (without quotes) will enable all charset choices
+# in corresponding field. This is useful for overriding site
+# defaults in private pieces of lynx.cfg included via INCLUDE
+# directive.
+#
+# Default values for both settings are '*', but any occurrence of settings
+# with values that denote any charsets will make only listed choices available
+# for corresponding field.
+#ASSUMED_DOC_CHARSET_CHOICE:*
+#DISPLAY_CHARSET_CHOICE:*
+
+
+.h2 ASSUME_LOCAL_CHARSET
# ASSUME_LOCAL_CHARSET is like ASSUME_CHARSET but only applies to local
# files. If no setting is given here or by an -assume_local_charset
# command line option, the value for ASSUME_CHARSET or -assume_charset
@@ -332,6 +459,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#ASSUME_LOCAL_CHARSET:iso-8859-1
+
+.h2 PREPEND_CHARSET_TO_SOURCE
# PREPEND_CHARSET_TO_SOURCE:TRUE tells Lynx to prepend a META CHARSET line
# to text/html source files when they are retrieved for 'd'ownloading
# or passed to 'p'rint functions, so HTTP headers will not be lost.
@@ -346,6 +475,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#PREPEND_CHARSET_TO_SOURCE:TRUE
+
+.h2 NCR_IN_BOOKMARKS
# NCR_IN_BOOKMARKS:TRUE allows you to save 8-bit characters in bookmark titles
# in the unicode format (NCR). This may be useful if you need to switch
# display charsets frequently. This is the case when you use Lynx on different
@@ -358,6 +489,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#NCR_IN_BOOKMARKS:FALSE
+
+.h2 FORCE_8BIT_TOUPPER
# FORCE_8BIT_TOUPPER overrides locale settings and uses internal 8-bit
# case-conversion mechanism for case-insensitive searches in non-ASCII display
# character sets. It is FALSE by default and should not be changed unless
@@ -365,6 +498,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#FORCE_8BIT_TOUPPER:FALSE
+
+.h2 OUTGOING_MAIL_CHARSET
# While Lynx supports different platforms and display character sets
# we need to limit the charset in outgoing mail to reduce
# trouble for remote recipients who may not recognize our charset.
@@ -374,6 +509,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#OUTGOING_MAIL_CHARSET:
+
+.h2 ASSUME_UNREC_CHARSET
# If Lynx encounters a charset parameter it doesn't recognize, it will
# replace the value given by ASSUME_UNREC_CHARSET (or a corresponding
# -assume_unrec_charset command line option) for it. This can be used
@@ -384,6 +521,7 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#ASSUME_UNREC_CHARSET:iso-8859-1
+.h2 PREFERRED_LANGUAGE
# PREFERRED_LANGUAGE is the language in MIME notation (e.g., "en",
# "fr") which will be indicated by Lynx in its Accept-Language headers
# as the preferred language. If available, the document will be
@@ -393,6 +531,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#PREFERRED_LANGUAGE:en
+
+.h2 PREFERRED_CHARSET
# PREFERRED_CHARSET specifies the character set in MIME notation (e.g.,
# "ISO-8859-2", "ISO-8859-5") which Lynx will indicate you prefer in
# requests to http servers using an Accept-Charsets header. Users can
@@ -410,6 +550,45 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#PREFERRED_CHARSET:
+
+.h2 CHARSETS_DIRECTORY
+# CHARSETS_DIRECTORY specifies the directory with the fonts (glyph data)
+# used by Lynx to switch the display-font to a font best suited for the
+# given document. The font should be in a format understood by the
+# platforms TTY-display-font-switching API. Currently supported on OS/2 only.
+#
+# Lynx expects the glyphs for the charset CHARSET with character cell
+# size HHHxWWW to be stored in a file HHHxWWW/CHARSET.fnt inside the directory
+# specified by CHARSETS_DIRECTORY. E.g., the font for koi8-r sized 14x9
+# should be in the file 14x9/koi8-r.fnt.
+#
+#CHARSETS_DIRECTORY:
+
+
+.h2 CHARSET_SWITCH_RULES
+# CHARSET_SWITCH_RULES hints lynx on how to choose the best display
+# font given the document encoding. This strings is a sequence of
+# chunks, each chunk having the following form:
+#
+# IN_CHARSET1 IN_CHARSET2 ... IN_CHARSET5 :OUT_CHARSET
+#
+# For readability, one may insert arbitrary additional punctuation (anything
+# but : is ignored). E.g., if lynx is able to switch only to display charsets
+# cp866, cp850, cp852, and cp862, then the following setting may be useful
+# (split for readability):
+#
+# CHARSET_SWITCH_RULES: koi8-r ISO-8859-5 windows-1251 cp866u KOI8-U :cp866,
+# iso-8859-1 windows-1252 ISO-8859-15 :cp850,
+# ISO-8859-2 windows-1250 :cp852,
+# ISO-8859-8 windows-1255 :cp862
+#
+#CHARSET_SWITCH_RULES:
+
+
+.h1 Interaction
+
+.h2 URL_DOMAIN_PREFIXES
+.h2 URL_DOMAIN_SUFFIXES
# URL_DOMAIN_PREFIXES and URL_DOMAIN_SUFFIXES are strings which will be
# prepended (together with a scheme://) and appended to the first element
# of command line or 'g'oto arguments which are not complete URLs and
@@ -434,23 +613,42 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#URL_DOMAIN_PREFIXES:www.
#URL_DOMAIN_SUFFIXES:.com,.edu,.net,.org
-# Lynx Options Menu style toggle: forms-based or old-style.
-# Works if old-style menu is compiled in as well as the forms-based menu.
+
+.h2 FORMS_OPTIONS
+# Toggle whether the Options Menu is key-based or form-based;
+# the key-based version is available only if specified at compile time.
#FORMS_OPTIONS:TRUE
+
+.h2 PARTIAL
# Display partial pages while downloading
#PARTIAL:TRUE
+
+.h2 PARTIAL_THRES
# Set the threshold # of lines Lynx must render before it
# redraws the screen in PARTIAL mode. Anything < 0 implies
# use of the screen size.
#PARTIAL_THRES:-1
+
+.h2 SHOW_KB_RATE
# While getting large files, Lynx shows the approximate rate of transfer.
# Set this to change the units shown:
-# TRUE for KB/sec or FALSE for bytes/sec: default is TRUE.
+# NONE to disable the display of transfer rate altogether.
+# TRUE or KB for KB/sec.
+# FALSE or BYTES for bytes/sec.
+# KB,ETA to show KB/sec with estimated completion time.
+# BYTES,ETA to show BYTES/sec with estimated completion time.
+# Note that the "ETA" values are available if EXP_READPROGRESS was defined.
#SHOW_KB_RATE:TRUE
+
+.h1 Timeouts
+
+.h2 INFOSECS
+.h2 MESSAGESECS
+.h2 ALERTSECS
# The following three definitions set the number of seconds for
# pauses following statusline messages that would otherwise be
# replaced immediately, and are more important than the unpaused
@@ -464,10 +662,19 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
# are defined in userdefs.h, and can be modified here should longer
# pauses be desired for braille-based access to Lynx.
#
+# SVr4-curses implementations support time delays in milliseconds,
+# hence the value may be given shorter, e.g., 0.5
+#
#INFOSECS:1
#MESSAGESECS:2
#ALERTSECS:3
+
+.h1 Appearance
+# These settings control the appearance of Lynx's screen and the way
+# Lynx renders some tags.
+
+.h2 USE_SELECT_POPUPS
# 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
@@ -479,12 +686,14 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#USE_SELECT_POPUPS:TRUE
+
+.h2 SHOW_CURSOR
# SHOW_CURSOR controls whether or not the cursor is hidden or appears
# over the current link in documents or the current option in popups.
# Showing the cursor is handy if you are a sighted user with a poor
# terminal that can't do bold and reverse video at the same time or
# at all. It also can be useful to blind users, as an alternative
-# or supplement to setting LINKS_AND_FORM_FIELDS_ARE_NUMBERED or
+# or supplement to setting LINKS_AND_FIELDS_ARE_NUMBERED or
# LINKS_ARE_NUMBERED.
# The default defined here or in userdefs.h can be changed via the
# 'o'ptions menu and saved in the RC file, and always can be toggled
@@ -492,15 +701,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#SHOW_CURSOR:FALSE
-# VERBOSE_IMAGES controls whether or not Lynx replaces the [LINK], [INLINE] and
-# [IMAGE] comments (for images without ALT) with filenames of these images.
-# This can be useful in determining what images are decorations
-# (button.gif, line.gif) and what images are important (if the page writer
-# bothers to use useful names).
-#
-# If this option is set here, it will override the setting in userdefs.h.
-#VERBOSE_IMAGES:TRUE
+.h2 BOLD_HEADERS
# If BOLD_HEADERS is set to TRUE the HT_BOLD default style will be acted
# upon for <H1> through <H6> headers. The compilation default is FALSE
# (only the indentation styles are acted upon, but see BOLD_H1, below).
@@ -509,6 +711,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#BOLD_HEADERS:FALSE
+
+.h2 BOLD_H1
# If BOLD_H1 is set to TRUE the HT_BOLD default style will be acted
# upon for <H1> headers even if BOLD_HEADERS is FALSE. The compilation
# default is FALSE. On Unix, compilation with -DUNDERLINE_LINKS also
@@ -516,6 +720,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#BOLD_H1:FALSE
+
+.h2 BOLD_NAME_ANCHORS
# If BOLD_NAME_ANCHORS is set to TRUE the content of anchors without
# an HREF attribute, (i.e., anchors with a NAME or ID attribute) will
# have the HT_BOLD default style. The compilation default is FALSE.
@@ -524,6 +730,11 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#BOLD_NAME_ANCHORS:FALSE
+
+.h1 Internal Behavior
+
+.h2 DEFAULT_CACHE_SIZE
+.h2 DEFAULT_VIRTUAL_MEMORY_SIZE
# The DEFAULT_CACHE_SIZE specifies the number of WWW documents to be
# cached in memory at one time.
#
@@ -551,6 +762,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#DEFAULT_CACHE_SIZE:10
#DEFAULT_VIRTUAL_MEMORY_SIZE:512000
+
+.h2 SOURCE_CACHE
# SOURCE_CACHE sets the source caching behavior for Lynx:
# FILE causes Lynx to keep a temporary file for each cached document
# containing the HTML source of the document, which it uses to regenerate
@@ -565,6 +778,17 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#SOURCE_CACHE:NONE
+
+.h2 SOURCE_CACHE_FOR_ABORTED
+# This setting controls what will happen with cached source for the document
+# being fetched from the net if fetching was aborted (either user pressed
+# 'z' or network went down). If set to KEEP, the source fetched so far will
+# be preserved (and used as cache), if set to DROP lynx will drop the
+# source cache for that document (i.e. only completely downloaded documents
+# will be cached in that case).
+#SOURCE_CACHE_FOR_ABORTED:DROP
+
+.h2 ALWAYS_RESUBMIT_POSTS
# If ALWAYS_RESUBMIT_POSTS is set TRUE, Lynx always will resubmit forms
# with method POST, dumping any cache from a previous submission of the
# form, including when the document returned by that form is sought with
@@ -579,6 +803,17 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#ALWAYS_RESUBMIT_POSTS:FALSE
+.h2 TRIM_INPUT_FIELDS
+# If TRIM_INPUT_FIELDS is set TRUE, Lynx will trim trailing whitespace (e.g.,
+# space, tab, carriage return, line feed and form feed) from the text entered
+# into form text and textarea fields. Older versions of Lynx do this trimming
+# unconditionally, but other browsers do not, which would yield different
+# behavior for CGI scripts.
+#TRIM_INPUT_FIELDS:FALSE
+
+.h1 HTML Parsing
+
+.h2 NO_ISMAP_IF_USEMAP
# If NO_ISMAP_IF_USEMAP is set TRUE, Lynx will not include a link to the
# server-side image map if both a server-side and client-side map for the
# same image is indicated in the HTML markup. The compilation default is
@@ -595,6 +830,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#NO_ISMAP_IF_USEMAP:FALSE
+
+.h2 SEEK_FRAG_MAP_IN_CUR
# If SEEK_FRAG_MAP_IN_CUR is set FALSE, then USEMAP attribute values
# (in IMG or OBJECT tags) consisting of only a fragment (USEMAP="#foo")
# will be resolved with respect to the current document's base, which
@@ -608,6 +845,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#SEEK_FRAG_MAP_IN_CUR:TRUE
+
+.h2 SEEK_FRAG_AREA_IN_CUR
# If SEEK_FRAG_AREA_IN_CUR is set FALSE, then HREF attribute values
# in AREA tags consisting of only a fragment (HREF="#foo") will be
# resolved with respect to the current document's base, which might
@@ -618,8 +857,16 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#SEEK_FRAG_AREA_IN_CUR:TRUE
-# Local execution links and scripts are by default completely disabled
-# unless a change is made to the userdefs.h file to enabled them.
+
+.h1 CGI scripts
+# These settings control Lynx's ability to execute various types of scripts.
+
+.h2 LOCAL_EXECUTION_LINKS_ALWAYS_ON
+.h2 LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE
+# Local execution links and scripts are by default completely disabled,
+# unless a change is made to the userdefs.h file to enable them or
+# the configure script is used with the corresponding options
+# (--enable-exec-links and --enable-exec-scripts).
# See the Lynx source code distribution and the userdefs.h
# file for more detail on enabling execution links and scripts.
#
@@ -643,13 +890,15 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#LOCAL_EXECUTION_LINKS_ALWAYS_ON:FALSE
#LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE:FALSE
+
+.h2 TRUSTED_EXEC
# If LOCAL_EXECUTION_LINK_ON_BUT_NOT_REMOTE is TRUE, and no TRUSTED_EXEC
# rule is defined, it defaults to "file://localhost/" and any lynxexec
-# or lynxprog command will be permitted if it was referenced with a URL
-# beginning with that string. If you wish to restrict the referencing URLs
-# further, you can extend the string to include a trusted path. You also can
-# specify a trusted directory for http URLs, which will then be treated as
-# if they were local rather than remote. For example:
+# or lynxprog command will be permitted if it was referenced from within
+# a document whose URL begins with that string. If you wish to restrict the
+# referencing URLs further, you can extend the string to include a trusted
+# path. You also can specify a trusted directory for http URLs, which will
+# then be treated as if they were local rather than remote. For example:
#
# TRUSTED_EXEC:file://localhost/trusted/
# TRUSTED_EXEC:http://www.wfbr.edu/trusted/
@@ -659,9 +908,11 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
# the string, separated by a tab. For example:
#
# Unix:
+# ====
# TRUSTED_EXEC:file://localhost/<tab>/bin/cp
# TRUSTED_EXEC:file://localhost/<tab>/bin/rm
# VMS:
+# ===
# TRUSTED_EXEC:file://localhost/<tab>copy
# TRUSTED_EXEC:file://localhost/<tab>delete
#
@@ -687,6 +938,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#TRUSTED_EXEC:none
+
+.h2 ALWAYS_TRUSTED_EXEC
# If EXEC_LINKS was defined, any lynxexec or lynxprog URL can be made
# always enabled by an ALWAYS_TRUSTED_EXEC rule for it. This is useful for
# anonymous accounts in which you have disabled execution links generally,
@@ -695,9 +948,11 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
# like that for TRUSTED_EXEC. For example:
#
# Unix:
+# ====
# ALWAYS_TRUSTED_EXEC:file://localhost/<tab>/usr/local/kinetic/bin/usertime
# ALWAYS_TRUSTED_EXEC:http://www.more.net/<tab>/usr/local/kinetic/bin/who.sh
# VMS:
+# ===
# ALWAYS_TRUSTED_EXEC:file://localhost/<tab>usertime
# ALWAYS_TRUSTED_EXEC:http://www.more.net/<tab>show users
#
@@ -705,6 +960,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#ALWAYS_TRUSTED_EXEC:none
+
+.h2 TRUSTED_LYNXCGI
# Unix:
# =====
# TRUSTED_LYNXCGI rules define the permitted sources and/or paths for
@@ -723,11 +980,16 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#TRUSTED_LYNXCGI:none
+
+.h2 LYNXCGI_ENVIRONMENT
# Unix:
# =====
# LYNXCGI_ENVIRONMENT adds the current value of the specified
# environment variable to the list of environment variables passed on to the
-# lynxcgi script. Useful variables are HOME, USER, EDITOR, etc...
+# lynxcgi script. Useful variables are HOME, USER, etc... If proxies
+# are in use, and the script invokes another copy of lynx (or a program like
+# wget) in a subsidiary role, it can be useful to add http_proxy and other
+# *_proxy variables.
#
# VMS:
# ====
@@ -735,6 +997,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#LYNXCGI_ENVIRONMENT:
+
+.h2 LYNXCGI_DOCUMENT_ROOT
# Unix:
# =====
# LYNXCGI_DOCUMENT_ROOT is the value of DOCUMENT_ROOT that will be passed
@@ -749,6 +1013,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#LYNXCGI_DOCUMENT_ROOT:
+
+.h1 Cookies
+
+.h2 FORCE_SSL_COOKIES_SECURE
# If FORCE_SSL_COOKIES_SECURE is set to TRUE, then SSL encrypted cookies
# received from https servers never will be sent unencrypted to http
# servers. The compilation default is to impose this block only if the
@@ -758,6 +1026,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#FORCE_SSL_COOKIES_SECURE:FALSE
+
+.h1 Internal Behavior
+
+.h2 MAIL_SYSTEM_ERROR_LOGGING
# MAIL_SYSTEM_ERROR_LOGGING will send a message to the owner of
# the information, or ALERTMAIL if there is no owner, every time
# that a document cannot be accessed!
@@ -766,6 +1038,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#MAIL_SYSTEM_ERROR_LOGGING:FALSE
+
+.h2 CHECKMAIL
# If CHECKMAIL is set to TRUE, the user will be informed (via a statusline
# message) about the existence of any unread mail at startup of Lynx, and
# will get statusline messages if subsequent new mail arrives. If a jumps
@@ -774,7 +1048,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
# and read the messages. The checks and statusline reports will not be
# performed if Lynx has been invoked with the -restrictions=mail switch.
#
-# VMS USERS !!!
+# VMS USERS !!!
+# =============
# New mail is normally broadcast as it arrives, via "unsolicited screen
# broadcasts", which can be "wiped" from the Lynx display via the Ctrl-W
# command. You may prefer to disable the broadcasts and use CHECKMAIL
@@ -783,6 +1058,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#CHECKMAIL:FALSE
+
+.h1 News-groups
+
+.h2 NNTPSERVER
# To enable news reading ability via Lynx, the environment variable NNTPSERVER
# must be set so that it points to your site's NNTP server
# (see Lynx Users Guide on environment variables).
@@ -798,18 +1077,25 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#NNTPSERVER:news.server.dom
+
+.h2 LIST_NEWS_NUMBERS
# If LIST_NEWS_NUMBERS is set TRUE, Lynx will use an ordered list and include
# the numbers of articles in news listings, instead of using an unordered
# list. The default is defined in userdefs.h, and can be overridden here.
#
#LIST_NEWS_NUMBERS:FALSE
+
+.h2 LIST_NEWS_DATES
# If LIST_NEWS_DATES is set TRUE, Lynx will include the dates of articles in
# news listings. The dates always are included in the articles, themselves.
# The default is defined in userdefs.h, and can be overridden here.
#
#LIST_NEWS_DATES:FALSE
+
+.h2 NEWS_CHUNK_SIZE
+.h2 NEWS_MAX_CHUNK
# NEWS_CHUNK_SIZE and NEWS_MAX_CHUNK regulate the chunking of news article
# listings with inclusion of links for listing earlier and/or later articles.
# The defaults are defined in HTNews.c as 30 and 40, respectively. If the
@@ -829,6 +1115,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#NEWS_CHUNK_SIZE:30
#NEWS_MAX_CHUNK:40
+
+.h2 NEWS_POSTING
# Set NEWS_POSTING to FALSE if you do not want to support posting to
# news groups via Lynx. If left TRUE, Lynx will use its news gateway to
# post new messages or followups to news groups, using the URL schemes
@@ -846,6 +1134,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#NEWS_POSTING:TRUE
+
+.h2 LYNX_SIG_FILE
# LYNX_SIG_FILE defines the name of a file containing a signature which
# can be appended to email messages and news postings or followups. The
# user will be prompted whether to append it. It is sought in the home
@@ -855,10 +1145,67 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#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.
+.h1 Bibliographic Protocol (bibp scheme)
+
+.h2 BIBP_GLOBAL_SERVER
+# BIBP_GLOBAL_SERVER is the default global server for bibp: links, used
+# when a local bibhost or document-specified citehost is unavailable.
+# Set in userdefs.h and can be changed here.
+#BIBP_GLOBAL_SERVER:http://usin.org/
+
+.h2 BIBP_BIBHOST
+# BIBP_BIBHOST is the URL at which local bibp service may be found, if
+# it exists. Defaults to http://bibhost/ for protocol conformance, but
+# may be overridden here or via --bibhost parameter.
+#BIBP_BIBHOST:http://bibhost/
+
+.h1 Interaction
+# These settings control interaction of the user with lynx.
+
+.h2 SCROLLBAR
+# If SCROLLBAR is set TRUE, Lynx will show scrollbar on windows. With mouse
+# enabled, the scrollbar strip outside the bar is clickable, and scrolls the
+# window by pages. The appearance of the scrollbar can be changed from
+# LYNX_LSS file: define attributes scroll.bar, scroll.back (for the bar, and
+# for the strip along which the scrollbar moves).
+#SCROLLBAR:FALSE
+
+
+.h2 SCROLLBAR_ARROW
+# If SCROLLBAR_ARROW is set TRUE, Lynx's scrollbar will have arrows at the
+# ends. With mouse enabled, the arrows are clickable, and scroll the window by
+# 2 lines. The appearance of the scrollbar arrows can be changed from LYNX_LSS
+# file: define attributes scroll.arrow, scroll.noarrow (for enabled-arrows,
+# and disabled arrows). An arrow is "disabled" if the bar is at this end of
+# the strip.
+#SCROLLBAR_ARROW:TRUE
+
+
+.h2 USE_MOUSE
+# If Lynx is configured with ncurses, PDcurses or slang & USE_MOUSE is TRUE,
+# users can perform commands by left-clicking certain parts of the screen:
+# on a link = `g'oto + ACTIVATE (ie move highlight & follow the link);
+# on the top/bottom lines = PREV/NEXT_PAGE (ie go up/down 1 page);
+# on the top/bottom left corners = PREV_DOC (ie go to the previous document);
+# on the top/bottom right corners = HISTORY (ie call up the history page).
+# NB if the mouse is defined in this way, it will not be available
+# for copy/paste operations using the clipboard of a desktop manager:
+# for flexibility instead, use the command-line switch -use_mouse .
+#
+# ncurses and slang have built-in support for the xterm mouse protocol. In
+# addition, ncurses can be linked with the gpm mouse library, to automatically
+# provide support for this interface in applications such as Lynx. (Please
+# read the ncurses faq to work around broken gpm configurations packaged by
+# some distributors). PDCurses implements mouse support for win32 console
+# windows, as does slang.
#USE_MOUSE:FALSE
+
+.h1 HTML Parsing
+# These settings control the way Lynx parses invalid HTML
+# and how it may resolve such issues.
+
+.h2 COLLAPSE_BR_TAGS
# If COLLAPSE_BR_TAGS is set FALSE, Lynx will not collapse serial BR tags.
# If set TRUE, two or more concurrent BRs will be collapsed into a single
# line break. Note that the valid way to insert extra blank lines in HTML
@@ -866,59 +1213,125 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#COLLAPSE_BR_TAGS:TRUE
+
+.h2 TAGSOUP
# If TAGSOUP is set, Lynx uses the "Tag Soup DTD" rather than "SortaSGML".
# The two approaches differ by the style of error detection and recovery.
# Tag Soup DTD allows for improperly nested tags; SortaSGML is stricter.
#TAGSOUP:FALSE
+
+.h1 Cookies
+
+.h2 SET_COOKIES
# If SET_COOKIES is set FALSE, Lynx will ignore Set-Cookie headers
-# in http server replies.
+# in http server replies. Note that if a COOKIE_FILE is in use (see
+# below) that contains cookies at startup, Lynx will still send those
+# persistent cookies in requests as appropriate. Setting SET_COOKIES
+# to FALSE just prevents accepting any new cookies from servers. To
+# prevent all cookie processing (sending *and* receiving) in a session,
+# make sure that PERSISTENT_COOKIES is not TRUE or that COOKIE_FILE does
+# not point to a file with cookies, in addition to setting SET_COOKIES
+# to FALSE.
# The default is defined in userdefs.h, and can be overridden here,
# and/or toggled via the -cookies command line switch.
#
#SET_COOKIES:TRUE
+
+.h2 ACCEPT_ALL_COOKIES
# If ACCEPT_ALL_COOKIES is set TRUE, Lynx will accept cookies from all
-# domains with no user interaction.
+# domains with no user interaction. This is equivalent to automatically
+# replying to all cookie 'Allow?' prompts with 'A'lways. Note that it
+# does not preempt validity checking, which has to be controlled separately
+# (see below).
# The default is defined in userdefs.h and can be overridden here, or
# in the .lynxrc file via an o(ptions) screen setting. It may also be
# toggled via the -accept_all_cookies command line switch.
#
#ACCEPT_ALL_COOKIES:FALSE
+
+.h2 COOKIE_ACCEPT_DOMAINS
+.h2 COOKIE_REJECT_DOMAINS
# COOKIE_ACCEPT_DOMAINS and COOKIE_REJECT_DOMAINS are comma-delimited lists
-# of domains from which Lynx should automatically accept or reject all
-# cookies. If a domain is specified in both options, rejection will take
-# precedence. The ACCEPT_ALL_COOKIES parameter will override any settings
-# made here.
+# of domains from which Lynx should automatically accept or reject cookies
+# without asking for confirmation. If the same domain is specified in both
+# lists, rejection will take precedence.
+# Note that in order to match cookies, domains have to be spelled out exactly
+# in the form in which they would appear on the Cookie Jar page (case is
+# insignificant). They are not wildcards. Domains that apply to more than
+# one host have a leading '.', but have to match *the cookie's* domain
+# exactly.
#
#COOKIE_ACCEPT_DOMAINS:
#COOKIE_REJECT_DOMAINS:
+
+.h2 COOKIE_LOOSE_INVALID_DOMAINS
+.h2 COOKIE_STRICT_INVALID_DOMAINS
+.h2 COOKIE_QUERY_INVALID_DOMAINS
# COOKIE_LOOSE_INVALID_DOMAINS, COOKIE_STRICT_INVALID_DOMAINS, and
-# COOKIE_QUERY_INVALID_DOMAINS are comma-delimited lists of which domains
-# should be subjected to varying degrees of validity checking. If a
-# domain is set to strict checking, strict conformance to RFC2109 will
+# COOKIE_QUERY_INVALID_DOMAINS are comma-delimited lists of domains.
+# They control the degree of validity checking that is applied to cookies
+# for the specified domains.
+# Note that in order to match cookies, domains have to be spelled out exactly
+# in the form in which they would appear on the Cookie Jar page (case is
+# insignificant). They are not wildcards. Domains that apply to more than
+# one host have a leading '.', but have to match *the cookie's* domain
+# exactly.
+# If a domain is set to strict checking, strict conformance to RFC2109 will
# be applied. A domain with loose checking will be allowed to set cookies
# with an invalid path or domain attribute. All domains will default to
-# querying the user for an invalid path or domain.
+# asking the user for confirmation in case of an invalid path or domain.
+# Cookie validity checking takes place as a separate step before the
+# final decision to accept or reject (see previous options), therefore
+# a cookie that passes validity checking may still be automatically
+# rejected or cause another prompt.
#
#COOKIE_LOOSE_INVALID_DOMAINS:
#COOKIE_STRICT_INVALID_DOMAINS:
#COOKIE_QUERY_INVALID_DOMAINS:
-# COOKIE_FILE is the default file to store persistent downloaded cookies
-# in, if Lynx was compiled with EXP_PERSISTENT_COOKIES. The cookie file
-# can also be specified in .lynxrc or on the commandline.
+
+.h2 PERSISTENT_COOKIES
+# PERSISTENT_COOKIES indicates that cookies should be read at startup from
+# the COOKIE_FILE, and saved at exit for storage between Lynx sessions.
+# It is not used if Lynx was compiled without EXP_PERSISTENT_COOKIES.
+# The default is FALSE, so that the feature needs to be enabled here
+# explicitly if you want it.
+#
+#PERSISTENT_COOKIES:FALSE
+
+
+.h2 COOKIE_FILE
+# COOKIE_FILE is the default file from which persistent cookies are read
+# at startup (if the file exists), if Lynx was compiled with
+# EXP_PERSISTENT_COOKIES and the PERSISTENT_COOKIES option is enabled.
+# The cookie file can also be specified in .lynxrc or on the command line.
+#
#COOKIE_FILE:~/.lynx_cookies
-# PERSISTENT_COOKIES indicates that cookies should be stored for use between
-# Lynx sessions. It is only used if Lynx was compiled with
-# EXP_PERSISTENT_COOKIES. Use this flag to disable the feature.
-#PERSISTENT_COOKIES:TRUE
+.h2 COOKIE_SAVE_FILE
+# COOKIE_SAVE_FILE is the default file in which persistent cookies are
+# stored at exit, if Lynx was compiled with EXP_PERSISTENT_COOKIES and the
+# PERSISTENT_COOKIES option is enabled. The cookie save file can also be
+# specified on the command line.
+#
+# With an interactive Lynx session, COOKIE_SAVE_FILE will default to
+# COOKIE_FILE if it is not set. With a non-interactive Lynx session (e.g.,
+# -dump), cookies will only be saved to file if COOKIE_SAVE_FILE is set.
+#
+#COOKIE_SAVE_FILE:~/.lynx_cookies
+
+
+.h1 Mail-related
+
+.h2 SYSTEM_MAIL
+.h2 SYSTEM_MAIL_FLAGS
# VMS:
-#=====
+# ===
# The mail command and qualifiers are defined in userdefs.h. Lynx
# will spawn a subprocess to send replies and error messages. The
# command, and qualifiers (if any), can be re-defined here. If
@@ -927,15 +1340,17 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
# command line via a /subject="SUBJECT" qualifier, and inclusion
# of other relevant headers may not be possible.
# If your mailer uses another syntax, some hacking of the mailform()
-# mailmsg() and reply_by_mail() functions in LYMail.c, and printfile()
+# mailmsg() and reply_by_mail() functions in LYMail.c, and send_file_to_mail()
# function in LYPrint.c, may be required.
#
+.ex 2
#SYSTEM_MAIL:PMDF SEND
#SYSTEM_MAIL_FLAGS:/headers
#
+.ex 2
#SYSTEM_MAIL:MAIL
#SYSTEM_MAIL_FLAGS:
-
+#
# Unix:
#======
# The mail path and flags normally are defined for sendmail (or submit
@@ -943,12 +1358,15 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
# read the zillions of CERT advisories about security problems with Unix
# mailers.
#
+.ex 2
#SYSTEM_MAIL:/usr/mmdf/bin/submit
#SYSTEM_MAIL_FLAGS:-mlruxto,cc\*
#
+.ex 2
#SYSTEM_MAIL:/usr/sbin/sendmail
#SYSTEM_MAIL_FLAGS:-t -oi
#
+.ex 2
#SYSTEM_MAIL:/usr/lib/sendmail
#SYSTEM_MAIL_FLAGS:-t -oi
@@ -958,8 +1376,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#SYSTEM_MAIL:sendmail -f me@my.host -h my.host -r my.smtp.mailer -m SMTP
+
+.h2 MAIL_ADRS
# VMS ONLY:
-#==========
+# ========
# MAIL_ADRS is defined in userdefs.h and normally is structured for PMDF's
# IN%"INTERNET_ADDRESS" scheme. The %s is replaced with the address given
# by the user. If you are using a different Internet mail transport, change
@@ -967,8 +1387,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#MAIL_ADRS:"IN%%""%s"""
+
+.h2 USE_FIXED_RECORDS
# VMS ONLY:
-#==========
+# ========
# If USE_FIXED_RECORDS is set to TRUE here or in userdefs.h, Lynx will
# convert 'd'ownloaded binary files to FIXED 512 record format before saving
# them to disk or acting on a DOWNLOADER option. If set to FALSE, the
@@ -980,29 +1402,54 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#USE_FIXED_RECORDS:TRUE
-# VI_KEYS can be turned on by the user in the options
-# screen or the .lynxrc file. This is just the default.
-#
+
+.h1 Keyboard Input
+# These settings control the way Lynx interprets user input.
+
+
+.h2 VI_KEYS_ALWAYS_ON
+.h2 EMACS_KEYS_ALWAYS_ON
+# Vi or Emacs movement keys, i.e. familiar hjkl or ^N^P^F^B .
+# These are defaults, which can be changed in the Options Menu or .lynxrc .
#VI_KEYS_ALWAYS_ON:FALSE
+#EMACS_KEYS_ALWAYS_ON:FALSE
+
-# EMACS_KEYS can be turned on by the user in the options
-# screen or the .lynxrc file. This is just the default.
+.h2 DEFAULT_KEYPAD_MODE
+# DEFAULT_KEYPAD_MODE may be set to NUMBERS_AS_ARROWS
+# or LINKS_ARE_NUMBERED
+# or LINKS_AND_FIELDS_ARE_NUMBERED
+# to specify whether numbers (e.g. [10]) appear before all links,
+# allowing immediate access by entering the number on the keyboard,
+# or numbers on the numeric key-pad work like arrows;
+# the 3rd option causes form fields also to be preceded by numbers.
+# The first two options (but not the last) can be changed in lynx.cfg
+# and all three can be changed via the Options Menu.
#
-#EMACS_KEYS_ALWAYS_ON:FALSE
+#DEFAULT_KEYPAD_MODE:NUMBERS_AS_ARROWS
+
-# DEFAULT_KEYPAD_MODE specifies whether numbers work like arrows or
-# numbered links.
-# DEFAULT_KEYPAD_MODE set to TRUE indicates numbers act as arrows,
+.h2 DEFAULT_KEYPAD_MODE_IS_NUMBERS_AS_ARROWS
+# Obsolete form of DEFAULT_KEYPAD_MODE,
+# numbers work like arrows or numbered links.
+# Set to TRUE, indicates numbers act as arrows,
# and set to FALSE indicates numbers refer to numbered links on the page.
-# LINKS_AND_FORM_FIELDS_ARE_NUMBERED cannot currently be set by this option.
+# LINKS_AND_FIELDS_ARE_NUMBERED cannot be set by this option because
+# it allows only two values (true and false).
#
#DEFAULT_KEYPAD_MODE_IS_NUMBERS_AS_ARROWS:TRUE
+
+.h2 CASE_SENSITIVE_ALWAYS_ON
# The default search type.
# This is a default that can be overridden by the user!
#
#CASE_SENSITIVE_ALWAYS_ON:FALSE
+
+.h1 Auxiliary Facilities
+
+.h2 DEFAULT_BOOKMARK_FILE
# DEFAULT_BOOKMARK_FILE is the filename used for storing personal bookmarks.
# It will be prepended by the user's home directory.
# NOTE that a file ending in .html or other suffix mapped to text/html
@@ -1021,6 +1468,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#DEFAULT_BOOKMARK_FILE:lynx_bookmarks.html
+
+.h2 MULTI_BOOKMARK_SUPPORT
# If MULTI_BOOKMARK_SUPPORT is set TRUE, and BLOCK_MULTI_BOOKMARKS (see
# below) is FALSE, and sub-bookmarks exist, all bookmark operations will
# first prompt the user to select an active sub-bookmark file or the
@@ -1042,6 +1491,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#MULTI_BOOKMARK_SUPPORT:FALSE
+
+.h2 BLOCK_MULTI_BOOKMARKS
# If BLOCK_MULTI_BOOKMARKS is set TRUE, multiple bookmark support will
# be forced off, and cannot to toggled on via the 'o'ptions menu. The
# compilation setting is normally FALSE, and can be overridden here.
@@ -1050,6 +1501,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#BLOCK_MULTI_BOOKMARKS:FALSE
+
+.h1 Interaction
+
+.h2 DEFAULT_USER_MODE
# DEFAULT_USER_MODE sets the default user mode for Lynx users.
# NOVICE shows a three line help message at the bottom of the screen.
# INTERMEDIATE shows normal amount of help (one line).
@@ -1057,26 +1512,46 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#DEFAULT_USER_MODE:NOVICE
-# DEFAULT_EDITOR sets the default editor for Lynx users.
-# If an editor is defined then the user may edit local documents
-# using that editor. The editor will also be used for sending
-# mail messages. If no editor is defined here or by the user
-# the user will not be able to edit local documents and a primitive
-# line oriented mail input mode will be used.
-# NOTE: Do not define an editor unless you know that every user will
-# know how to use it. Most users do not enjoy getting stuck in
-# an unknown editor that they can't exit. Users can
-# easily define an editor of their own using the options menu,
-# so it is not always desirable to set the DEFAULT_EDITOR.
+
+.h1 External Programs
+
+.h2 DEFAULT_EDITOR
+# If DEFAULT_EDITOR is defined, users may edit local documents with it
+# & it will also be used for sending mail messages.
+# If no editor is defined here or by the user,
+# the user will not be able to edit local documents
+# and a primitive line-oriented mail-input mode will be used.
+#
+# For sysadmins: do not define a default editor
+# unless you know EVERY user will know how to use it;
+# users can easily define their own editor in the Options Menu.
#
#DEFAULT_EDITOR:
-# SYSTEM_EDITOR behaves the same as DEFAULT_EDITOR except that it can't be
-# changed.
+
+.h2 SYSTEM_EDITOR
+# SYSTEM_EDITOR behaves the same as DEFAULT_EDITOR,
+# except that it can't be changed by users.
#
#SYSTEM_EDITOR:
-# Proxy variables
+
+.h1 Proxy
+
+.h2 HTTP_PROXY
+.h2 HTTPS_PROXY
+.h2 FTP_PROXY
+.h2 GOPHER_PROXY
+.h2 NEWSPOST_PROXY
+.h2 NEWSREPLY_PROXY
+.h2 NEWS_PROXY
+.h2 NNTP_PROXY
+.h2 SNEWSPOST_PROXY
+.h2 SNEWSREPLY_PROXY
+.h2 SNEWS_PROXY
+.h2 WAIS_PROXY
+.h2 FINGER_PROXY
+.h2 CSO_PROXY
# Lynx version 2.2 and beyond supports the use of proxy servers that can act as
# firewall gateways and caching servers. They are preferable to the older
# gateway servers. Each protocol used by Lynx can be mapped separately using
@@ -1087,6 +1562,7 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
# VMS these proxy variables are set as process logicals rather than symbols, to
# preserve lowercasing, and will outlive the Lynx image.
#
+.ex 15
#http_proxy:http://some.server.dom:port/
#https_proxy:http://some.server.dom:port/
#ftp_proxy:http://some.server.dom:port/
@@ -1103,14 +1579,18 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#cso_proxy:http://some.server.dom:port/
#no_proxy:host.domain.dom
+
+.h2 NO_PROXY
# The no_proxy variable can be a comma-separated list of strings defining
# no-proxy zones in the DNS domain name space. If a tail substring of the
# domain-path for a host matches one of these strings, transactions with that
# node will not be proxied.
+.ex
#no_proxy:domain.path1,path2
#
# A single asterisk as an entry will override all proxy variables and no
# transactions will be proxied.
+.ex
#no_proxy:*
# This is the only allowed use of * in no_proxy.
#
@@ -1118,10 +1598,18 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
# for the .mil domain as well as the .il domain. If the entry is '.il' this
# will not happen.
-# PRINTER & DOWNLOADER DEFINITIONS:
+
+.h1 External Programs
+
+.h2 PRINTER
+.h2 DOWNLOADER
+.h2 UPLOADER
+# PRINTER, DOWNLOADER & UPLOADER DEFINITIONS:
# Lynx has 4 pre-defined print options & 1 pre-defined download option,
# which are called up on-screen when `p' or `d' are entered;
# any number of options can be added by the user, as explained below.
+# Uploaders can be defined only for UNIX with DIRED_SUPPORT:
+# see the Makefile in the top directory & the header of src/LYUpload.c .
#
# For `p' pre-defined options are: `Save to local file', `E-mail the file',
# `Print to screen' and `Print to local printer attached to vt100'.
@@ -1131,22 +1619,30 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
# For `d' the pre-defined option is: `Download to local file'.
#
# To define your own print or download option use the following formats:
+#
# PRINTER:<name>:<command>:<option>:<lines/page>
+#
# DOWNLOADER:<name>:<command>:<option>
#
# <name> is what you will see on the print/download screen.
+#
# <command> is the command your system will execute:
# the 1st %s in the command will be replaced
# by the temporary filename used by Lynx;
# a 2nd %s will be replaced by a filename of your choice,
-# for which Lynx will prompt, offering a suggestion;
-# if the command format of your printer/downloader requires
+# for which Lynx will prompt, offering a suggestion.
+# On Unix, which has pipes, you may use a '|' as the first
+# character of the command, and Lynx will open a pipe to
+# the command.
+# If the command format of your printer/downloader requires
# a different layout, you will need to use a script
# (see the last 2 download examples below).
+#
# <option> TRUE : the printer/downloader will always be ENABLED,
# except that downloading is disabled when -validate is used;
# FALSE : both will be DISABLED for anonymous users
# and printing will be disabled when -noprint is used.
+#
# <lines/page> (printers: optional) the number of lines/page (default 66):
# used to compute the approximate output size
# and prompt if the document is > 4 printer pages;
@@ -1159,72 +1655,60 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
# `Printer' can be any file-handling program you find useful,
# even if it does not physically print anything.
#
-# Usually, downloading involves the use of (e.g.) Ckermit or ZModem
+# Usually, down/up-loading involves the use of (e.g.) Ckermit or ZModem
# to transfer files to a user's local machine over a serial link,
# but download options do not have to be download-protocol programs.
#
# Printer examples:
+.ex 3
#PRINTER:Computer Center printer:lpr -Pccprt %s:FALSE
#PRINTER:Office printer:lpr -POffprt %s:TRUE
#PRINTER:VMS printer:print /queue=cc$print %s:FALSE:58
# If you have a very busy VMS print queue
# and Lynx deletes the temporary files before they have been queued,
# use the VMSPrint.com included in the distribution:
+.ex
#PRINTER:Busy VMS printer:@Lynx_Dir\:VMSPrint sys$print %s:FALSE:58
# To specify a print option at run-time:
# NBB if you have ANONYMOUS users, DO NOT allow this option!
+.ex
#PRINTER:Specify at run-time:echo -n "Enter a print command\: "; read word; sh -c "$word %s":FALSE
# To pass to a sophisticated file viewer: -k suppresses invocation
# of hex display mode if 8-bit or control characters are present;
# +s invokes secure mode (see ftp://space.mit.edu/pub/davis/most):
+.ex
#PRINTER:Use Most to view:most -k +s %s:TRUE:23
#
# Downloader examples:
# in Kermit, -s %s is the filename sent, -a %s the filename on arrival
# (if they are given in reverse order here, the command will fail):
+.ex
#DOWNLOADER:Use Kermit to download to the terminal:kermit -i -s %s -a %s:TRUE
# NB don't use -k with Most, so that binaries will invoke hexadecimal mode:
+.ex
#DOWNLOADER:Use Most to view:most +s %s:TRUE
# The following example gives wrong filenames
# (`sz' doesn't support a suggested filename parameter):
+.ex
#DOWNLOADER:Use Zmodem to download to the local terminal:sz %s:TRUE
# The following example returns correct filenames
# by using a script to make a subdirectory in /tmp,
# but may conflict with very strong security or permissions restrictions:
+.ex
#DOWNLOADER:Use Zmodem to download to the local terminal:set %s %s;td=/tmp/Lsz$$;mkdir $td;ln -s $1 $td/"$2";sz $td/"$2";rm -r $td:TRUE
-
-# Note for OS/390: The following is strongly recommended /* S/390 -- gil -- 1464 */
-# to undo ASCII->EBCDIC conversion.
+.ex 2
+#UPLOADER:Use Kermit to upload from your computer: kermit -i -r -a %s:TRUE
+#UPLOADER:Use Zmodem to upload from your computer: rz %s:TRUE
#
+# Note for OS/390: /* S/390 -- gil -- 1464 */
+# The following is strongly recommended to undo ASCII->EBCDIC conversion.
+.ex
#DOWNLOADER:Save OS/390 binary file: iconv -f IBM-1047 -t ISO8859-1 %s >%s:FALSE
-# Unix ONLY:
-#===========
-# Uploader definitions (implemented only with Unix DIRED_SUPPORT;
-# see the Makefile in the top directory,
-# and the header of ./src/LYUpload.c)
-# any number of uploaders may be defined by using multiple
-# uploader definition sets. Uploaders may be any programs
-# that could be useful to your users; they do not necessarily
-# have to be upload protocol programs. The most common use
-# of an uploader is to use Ckermit or some other transfer
-# program so that the user may easily transfer files from
-# their local machine over a serial link.
-#
-# the definition of an uploader is of the same form as a downloader
-# UPLOADER:<uploadername>:<uploader command>:<uploader option>
-#
-# You must put the whole definition on one line.
-#
-# If you must use a colon, precede it with a backslash!
-#
-# If you do not include a %s, you will not be prompted for an
-# output filename.
-#
-# example
-#UPLOADER:Use Kermit to upload from your computer: kermit -i -r -a %s:TRUE
-#UPLOADER:Use Zmodem to upload from your computer: rz %s:TRUE
+.h1 Interaction
+
+.h2 NO_DOT_FILES
# If NO_DOT_FILES is TRUE (normal default via userdefs.h), the user will not
# be allowed to specify files beginning with a dot in reply to output filename
# prompts, and files beginning with a dot (e.g., file://localhost/path/.lynxrc)
@@ -1235,6 +1719,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#NO_DOT_FILES:TRUE
+
+.h1 Internal Behavior
+
+.h2 NO_FROM_HEADER
# If NO_FROM_HEADER is set FALSE, From headers will be sent in transmissions
# to http or https servers if the personal_mail_address has been defined via
# the 'o'ptions menu. The compilation default is TRUE (no From header is
@@ -1244,6 +1732,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#NO_FROM_HEADER:TRUE
+
+.h2 NO_REFERER_HEADER
# If NO_REFERER_HEADER is TRUE, Referer headers never will be sent in
# transmissions to servers. Lynx normally sends the URL of the document
# from which the link was derived, but not for startfile URLs, 'g'oto
@@ -1254,44 +1744,90 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#NO_REFERER_HEADER:FALSE
+
+.h1 Internal Behavior
+
+.h2 NO_FILE_REFERER
# If NO_FILE_REFERER is TRUE, Referer headers never will be sent in
# transmissions to servers for links or actions derived from documents
-# or forms with file URLs. This would ensure that paths associated
-# with the local file system are never indicated to servers, even if
-# NO_REFERER_HEADER is FALSE. If left FALSE here, it can be set TRUE
-# at run time via the -nofilereferer switch.
+# or forms with file URLs. This ensures that paths associated with
+# the local file system are never indicated to servers, even if
+# NO_REFERER_HEADER is FALSE. If set to FALSE here, it can still be
+# set TRUE at run time via the -nofilereferer switch.
+#
+#NO_FILE_REFERER:TRUE
+
+
+.h2 REFERER_WITH_QUERY
+# REFERER_WITH_QUERY controls what happens when the URL in a Referer
+# header to be sent would contain a query part in the form of a '?'
+# character followed by one or more attribute=value pairs. Query parts
+# often contain sensitive or personal information resulting from filling
+# out forms, or other info that allows tracking of a user's browsing path
+# through a site, an thus should not be put in a Referer header (which may
+# get sent to an unrelated third-party site). On the other hand, some
+# sites (improperly) rely on browsers sending Referer headers, even when
+# the user is coming from a page whose URL has a query part.
+#
+# If REFERER_WITH_QUERY is SEND, full Referer headers will be sent
+# including the query part (unless sending of Referer is disabled in
+# general, see NO_REFERER_HEADER above). If REFERER_WITH_QUERY is
+# PARTIAL, the Referer header will contain a partial URL, with the query
+# part stripped off. This is not strictly correct, but should satisfy
+# those sites that check only whether the user arrived at a page from an
+# "outside" link. If REFERER_WITH_QUERY is set to DROP (or anything else
+# unrecognized), the default, no Referer header is sent at all in this
+# situation.
#
-#NO_FILE_REFERER:FALSE
+#REFERER_WITH_QUERY:DROP
+
+.h1 Appearance
+
+.h2 VERBOSE_IMAGES
+# VERBOSE_IMAGES controls whether Lynx replaces [LINK], [INLINE] and [IMAGE]
+# (for images without ALT) with filenames of these images.
+# This can be useful in determining what images are important
+# and which are mere decorations, e.g. button.gif, line.gif,
+# provided the author uses meaningful names.
+#
+# The definition here will override the setting in userdefs.h.
+#
+#VERBOSE_IMAGES:TRUE
+
+
+.h2 MAKE_LINKS_FOR_ALL_IMAGES
# If MAKE_LINKS_FOR_ALL_IMAGES is TRUE, all images will be given links
# which can be ACTIVATEd. For inlines, the ALT or pseudo-ALT ("[INLINE]")
-# strings will be links for the resolved SRC rather than just text. For
-# ISMAP or other graphic links, the ALT or pseudo-ALT ("[ISMAP]" or "[LINK]")
-# strings will have '-' and a link labeled "[IMAGE]" for the resolved SRC
-# appended. See also VERBOSE_IMAGES flag.
-#
-# The default defined here will override that in userdefs.h, and the user
-# can use LYK_IMAGE_TOGGLE to toggle the feature on or off at run time.
+# strings will be links for the resolved SRC rather than just text.
+# For ISMAP or other graphic links, ALT or pseudo-ALT ("[ISMAP]" or "[LINK]")
+# will have '-' and a link labeled "[IMAGE]" for the resolved SRC appended.
+# See also VERBOSE_IMAGES flag.
#
-# The default also can be toggled via an "-image_links" command line switch.
+# The definition here will override that in userdefs.h
+# and can be toggled via an "-image_links" command-line switch.
+# The user can also use the LYK_IMAGE_TOGGLE key (default `*')
+# or `Show Images' in the Form-based Options Menu.
#
#MAKE_LINKS_FOR_ALL_IMAGES:FALSE
-# If MAKE_PSEUDO_ALTS_FOR_INLINES is FALSE, inline images which do not
-# specify an ALT string will not have "[INLINE]" inserted as a pseudo-ALT,
-# i.e., they'll be treated as having ALT="". If MAKE_LINKS_FOR_ALL_IMAGES
-# is defined or toggled to TRUE, however, the pseudo-ALTs will be created
-# for inlines, so that they can be used as links to the SRCs.
+.h2 MAKE_PSEUDO_ALTS_FOR_INLINES
+# If MAKE_PSEUDO_ALTS_FOR_INLINES is FALSE, inline images which don't specify
+# an ALT string will not have "[INLINE]" inserted as a pseudo-ALT,
+# i.e. they'll be treated as having ALT="".
+# Otherwise (if TRUE), pseudo-ALTs will be created for inlines,
+# so that they can be used as links to the SRCs.
# See also VERBOSE_IMAGES flag.
#
-# The default defined here will override that in userdefs.h, and the user
-# can use LYK_INLINE_TOGGLE to toggle the feature on or off at run time.
-#
-# The default also can be toggled via a "-pseudo_inlines" command line
-# switch.
+# The definition here will override that in userdefs.h
+# and can be toggled via a "-pseudo_inlines" command-line switch.
+# The user can also use the LYK_INLINE_TOGGLE key (default `[')
+# or `Show Images' in the Form-based Options Menu.
#
#MAKE_PSEUDO_ALTS_FOR_INLINES:TRUE
+
+.h2 SUBSTITUTE_UNDERSCORES
# If SUBSTITUTE_UNDERSCORES is TRUE, the _underline_ format will be used
# for emphasis tags in dumps.
#
@@ -1300,6 +1836,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#SUBSTITUTE_UNDERSCORES:FALSE
+
+.h1 Interaction
+
+.h2 QUIT_DEFAULT_YES
# If QUIT_DEFAULT_YES is TRUE then when the QUIT command is entered, any
# response other than n or N will confirm. It should be FALSE if you
# prefer the more conservative action of requiring an explicit Y or y to
@@ -1307,6 +1847,10 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#QUIT_DEFAULT_YES:TRUE
+
+.h1 HTML Parsing
+
+.h2 HISTORICAL_COMMENTS
# If HISTORICAL_COMMENTS is TRUE, Lynx will revert to the "Historical"
# behavior of treating any '>' as a terminator for comments, instead of
# seeking a valid '-->' terminator (note that white space can be present
@@ -1318,6 +1862,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
#HISTORICAL_COMMENTS:FALSE
+
+.h2 MINIMAL_COMMENTS
# If MINIMAL_COMMENTS is TRUE, Lynx will not use Valid comment parsing
# of '--' pairs as serial comments within an overall comment element,
# and instead will seek only a '-->' terminator for the overall comment
@@ -1336,6 +1882,8 @@ DEFAULT_INDEX_FILE:http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/MetaIndex.html
#
MINIMAL_COMMENTS:TRUE
+
+.h2 SOFT_DQUOTES
# If SOFT_DQUOTES is TRUE, Lynx will emulate the invalid behavior of
# treating '>' as a co-terminator of a double-quoted attribute value
# and the tag which contains it, as was done in old versions of Netscape
@@ -1346,6 +1894,8 @@ MINIMAL_COMMENTS:TRUE
#
#SOFT_DQUOTES:FALSE
+
+.h2 STRIP_DOTDOT_URLS
# If STRIP_DOTDOT_URLS is TRUE, Lynx emulates the invalid behavior of many
# browsers to strip a leading "../" segment from relative URLs in HTML
# documents with a http or https base URL, if this would otherwise lead to
@@ -1363,6 +1913,10 @@ MINIMAL_COMMENTS:TRUE
#
#STRIP_DOTDOT_URLS:TRUE
+
+.h1 Appearance
+
+.h2 ENABLE_SCROLLBACK
# If ENABLE_SCROLLBACK is TRUE, Lynx will clear the entire screen before
# displaying each new screenful of text. Though less efficient for normal
# use, this allows programs that maintain a buffer of previously-displayed
@@ -1385,6 +1939,8 @@ MINIMAL_COMMENTS:TRUE
#
#ENABLE_SCROLLBACK:FALSE
+
+.h2 SCAN_FOR_BURIED_NEWS_REFS
# If SCAN_FOR_BURIED_NEWS_REFS is set to TRUE, Lynx will scan the bodies
# of news articles for buried article and URL references and convert them
# to links. The compilation default is TRUE, but some email addresses
@@ -1398,6 +1954,8 @@ MINIMAL_COMMENTS:TRUE
#
#SCAN_FOR_BURIED_NEWS_REFS:TRUE
+
+.h2 PREPEND_BASE_TO_SOURCE
# If PREPEND_BASE_TO_SOURCE is set to FALSE, Lynx will not prepend a
# Request URL comment and BASE element to text/html source files when
# they are retrieved for 'd'ownloading or passed to 'p'rint functions.
@@ -1408,6 +1966,7 @@ MINIMAL_COMMENTS:TRUE
#
#PREPEND_BASE_TO_SOURCE:TRUE
+
# MIME types and viewers!
#
# file extensions may be assigned to MIME types using
@@ -1415,8 +1974,11 @@ MINIMAL_COMMENTS:TRUE
#
# NOTE: It is normally preferable to define new extension mappings in
# EXTENSION_MAP files (see below) instead of here: Definitions
-# here are overriden by those in EXTENSION_MAP files and even by
-# some built-in defaults in src/HTInit.c.
+# here are overridden by those in EXTENSION_MAP files and even by
+# some built-in defaults in src/HTInit.c. On the other hand,
+# definitions here allow some more fields that are not possible
+# in those files.
+#
# Extension mappings have an effect mostly for ftp and local files,
# they are NOT used to determine the type of content for URLs with
# the http protocol. This is because HTTP servers already specify
@@ -1425,70 +1987,170 @@ MINIMAL_COMMENTS:TRUE
# even if they are accessed only via the HTTP protocol, if the viewer
# (see below) for those MIME types requires a certain suffix for the
# temporary file passed to it.]
+
+
+.h1 External Programs
+
+.h2 GLOBAL_EXTENSION_MAP
+.h2 PERSONAL_EXTENSION_MAP
+# The global and personal EXTENSION_MAP files allow you to assign extensions
+# to MIME types which will override any of the suffix maps in this (lynx.cfg)
+# configuration file, or in src/HTInit.c. See the example mime.types file
+# in the samples subdirectory.
#
+# Unix:
+# ====
+#GLOBAL_EXTENSION_MAP:/usr/local/lib/mosaic/mime.types
+# VMS:
+# ===
+#GLOBAL_EXTENSION_MAP:Lynx_Dir:mime.types
+#
+# Unix (sought in user's home directory):
+#PERSONAL_EXTENSION_MAP:.mime.types
+# VMS (sought in user's sys$login directory):
+#PERSONAL_EXTENSION_MAP:mime.types
+
+
+.h2 SUFFIX_ORDER
+# With SUFFIX_ORDER the precedence of suffix mappings can be changed.
+# Two kinds of settings are recognized:
+#
+# PRECEDENCE_OTHER or PRECEDENCE_HERE
+# Suffix mappings can come from four sources: (1) SUFFIX rules
+# given here - see below, (2) builtin defaults (HTInit.c), and the
+# (3) GLOBAL_EXTENSION_MAP and (4) PERSONAL_EXTENSION_MAP files.
+# The order of precedence is normally as listed: (1) has the
+# *lowest*, (4) has the *highest* precedence if there are conflicts.
+# In other words, SUFFIX mappings here are overridden by conflicting
+# ones elsewhere. This default ordering is called PRECEDENCE_OTHER.
+# With PRECEDENCE_HERE, the order becomes (2) (3) (4) (1), i.e.
+# mappings here override others made elsewhere.
+#
+# NO_BUILTIN
+# This disables all builtin default rules. In other words, (2) in the
+# list above is skipped. Some recognition for compressed files (".gz",
+# ".Z") is still hardwired. A mapping for some basic types, at least
+# for text/html is probably necessary to get a usable configuration,
+# it can be given in a SUFFIX rule below or an extension map file.
+# Both kinds of settings can be combined, separated by comma as in
+# SUFFIX_ORDER:PRECEDENCE_HERE,NO_BUILTIN
+# Note: Using PRECEDENCE_HERE has only an effect on SUFFIX rules that follow.
+# Moreover, if GLOBAL_EXTENSION_MAP or PERSONAL_EXTENSION_MAP directives
+# are used, they should come *before* a SUFFIX_ORDER:PRECEDENCE_HERE.
+#
+#SUFFIX_ORDER:PRECEDENCE_OTHER
+
+
+.h2 SUFFIX
# The SUFFIX definition takes the form of:
-# SUFFIX:<file extension>:<mime type>
-# for instance the following definition maps the
+#
+# SUFFIX:<file extension>:<mime type>:<encoding>:<quality>:<description>
+#
+# All fields after <mime type> are optional (including the separators
+# if no more fields follow).
+#
+# <file extension> trailing end of file name. This need not strictly
+# be a file extension as understood by the OS, a dot
+# has to be given explicitly if it is indented, for
+# some uses one could even match full filenames here.
+# In addition, two forms are special: "*.*" and "*"
+# refer to the defaults for otherwise unmatched files
+# (the first for filenames with a dot somewhere in
+# the name, the second without), these are currently
+# mapped to text/plain in the (HTInit.c) builtin code.
+#
+# <mime type> a MIME content type. It can also contain a charset
+# parameter, see example below. This should be given in
+# all lowercase, use <description> for more fancy labels.
+# It can be left empty if an HTTP style encoding is given.
+#
+# Fields in addition to the usual ones are
+#
+# <encoding> either a mail style trivial encoding (7bit, 8bit, binary)
+# which could be used on some systems to determine how to
+# open local files (currently it isn't), and is used to
+# determine transfer mode for some FTP URLs; or a HTTP style
+# content encoding (gzip (equivalent to x-gzip), compress)
+#
+# <quality> a floating point quality factor, usually between 0.0 and 1.0
+# currently unused in most situations.
+#
+# <description> text that can appear in FTP directory listings, and in
+# local directory listings (see LIST_FORMAT, code %t)
+#
+# For instance the following definition maps the
# extension ".gif" to the mime type "image/gif"
+.ex
# SUFFIX:.gif:image/gif
#
+# The following can be used if you have a convention to label
+# HTML files in some character set that differs from your local
+# default (see also ASSUME_LOCAL_CHARSET) with a different
+# extension, here ".html-u8". It also demonstrates use of the
+# description field, note extra separators for omitted fields:
+.ex
+# SUFFIX:.html-u8:text/html;charset=utf-8:::UTF-8 HTML
+#
+# The following shows how a suffix can indicate a combination
+# of MIME type and compression method. (The ending ".ps.gz" should
+# already be recognized by default; the form below could be used on
+# systems that don't allow more than one dot in filenames.)
+.ex
+# SUFFIX:.ps_gz:application/postscript:gzip::gzip'd Postscript
+#
+# The following is meant to match a full filename (but can match
+# any file ending in "core", so be careful):
+.ex
+# SUFFIX:core:application/x-core-file
+#
# file suffixes are case INsensitive!
#
# The suffix definitions listed here in the default lynx.cfg file are
-# among those established via src/HTInit.c. You can change any of the
-# defaults by editing that file, or via the global or personal mime.types
-# files at run time. Assignments made here will be overridden by entries
-# in those files.
+# similar to those normally established via src/HTInit.c. You can change
+# the defaults by editing that file or disable them, or via the global or
+# personal mime.types files at run time (except for the additional fields).
+# Assignments made here are overridden by entries in those files
+# unless preceded with a SUFFIX_ORDER:PRECEDENCE_HERE.
#
+.ex 29
#SUFFIX:.ps:application/postscript
#SUFFIX:.eps:application/postscript
#SUFFIX:.ai:application/postscript
-#SUFFIX:.rtf:application/x-rtf
+#SUFFIX:.rtf:application/rtf
#SUFFIX:.snd:audio/basic
#SUFFIX:.gif:image/gif
#SUFFIX:.rgb:image/x-rgb
-#SUFFIX:.pict:image/x-pict
+#SUFFIX:.png:image/png
#SUFFIX:.xbm:image/x-xbitmap
-#SUFFIX:.tiff:image/x-tiff
+#SUFFIX:.tiff:image/tiff
#SUFFIX:.jpg:image/jpeg
#SUFFIX:.jpeg:image/jpeg
#SUFFIX:.mpg:video/mpeg
#SUFFIX:.mpeg:video/mpeg
#SUFFIX:.mov:video/quicktime
-#SUFFIX:.hqx:application/octet-stream
+#SUFFIX:.hqx:application/mac-binhex40
#SUFFIX:.bin:application/octet-stream
#SUFFIX:.exe:application/octet-stream
-#SUFFIX:.tar:application/octet-stream
-#SUFFIX:.Z:application/octet-stream
-#SUFFIX:.gz:application/octet-stream
-#SUFFIX:.bz2:application/octet-stream
-#SUFFIX:.zip:application/octet-stream
-#SUFFIX:.lzh:application/octet-stream
-#SUFFIX:.lha:application/octet-stream
-#SUFFIX:.dms:application/octet-stream
-
-# The global and personal EXTENSION_MAP files allow you to assign extensions
-# to MIME types which will override any of the suffix maps in this (lynx.cfg)
-# configuration file, or in src/HTInit.c. See the example mime.types file
-# in the samples subdirectory.
-#
-# Unix:
-#GLOBAL_EXTENSION_MAP:/usr/local/lib/mosaic/mime.types
-# VMS:
-#GLOBAL_EXTENSION_MAP:Lynx_Dir:mime.types
-#
-# Unix (sought in user's home directory):
-#PERSONAL_EXTENSION_MAP:.mime.types
-# VMS (sought in user's sys$login directory):
-#PERSONAL_EXTENSION_MAP:mime.types
-
+#SUFFIX:.tar:application/x-tar
+#SUFFIX:.tgz:application/x-tar:gzip
+#SUFFIX:.Z::compress
+#SUFFIX:.gz::gzip
+#SUFFIX:.bz2:application/x-bzip2
+#SUFFIX:.zip:application/zip
+#SUFFIX:.lzh:application/x-lzh
+#SUFFIX:.lha:application/x-lha
+#SUFFIX:.dms:application/x-dms
+#SUFFIX:.html:text/html
+#SUFFIX:.txt:text/plain
+
+
+.h2 XLOADIMAGE_COMMAND
# VMS:
# ====
# XLOADIMAGE_COMMAND will be used as a default in src/HTInit.c
# for viewing image content types when the DECW$DISPLAY logical
# is set. Make it the foreign command for your system's X image
-# viewer (commonly, "xv"). Make it "exit" or something like that
-# if you don't have one. It can be anything that will handle GIF,
+# viewer (commonly, "xv"). It can be anything that will handle GIF,
# TIFF and other popular image formats. Freeware ports of xv for
# VMS are available in the ftp://ftp.wku.edu/vms/unsupported and
# http://www.openvms.digital.com/cd/XV310A/ subdirectories. You
@@ -1496,6 +2158,10 @@ MINIMAL_COMMENTS:TRUE
# in userdefs.h and can be overridden here, or via the global or
# personal mailcap files (see below).
#
+# Make this empty (but no commented out) if you don't have such a
+# viewer or don't want to disable the built-in default viewer
+# mappings for image types.
+#
#XLOADIMAGE_COMMAND:xv %s
# Unix:
@@ -1503,20 +2169,23 @@ MINIMAL_COMMENTS:TRUE
# XLOADIMAGE_COMMAND will be used as a default in src/HTInit.c for
# viewing image content types when the DISPLAY environment variable
# is set. Make it the full path and name of the xli (also know as
-# xloadimage or xview) command, or other image viewer. Put 'echo' or
-# something like it here if you don't have a suitable viewer. It can
-# be anything that will handle GIF, TIFF and other popular image formats
+# xloadimage or xview) command, or other image viewer. It can be
+# anything that will handle GIF, TIFF and other popular image formats
# (xli does). The freeware distribution of xli is available in the
# ftp://ftp.x.org/contrib subdirectory. The shareware, xv, also is
# suitable. You must also have a "%s" for the filename; "&" for
# background is optional. The default is defined in userdefs.h and can be
# overridden here, or via the global or personal mailcap files (see below).
+# Make this empty (but not commented out) if you don't have such a
+# viewer or don't want to disable the built-in default viewer
+# mappings for image types.
# Note that open is used as the default for NeXT, instead of the
# XLOADIMAGE_COMMAND definition.
# If you use xli, you may want to add the -quiet flag.
#
#XLOADIMAGE_COMMAND:xli %s &
+.h2 VIEWER
# MIME types may be assigned to external viewers using
# the VIEWER definition.
#
@@ -1558,28 +2227,38 @@ MINIMAL_COMMENTS:TRUE
# global or personal mailcap files. Assignments made here will be overridden
# by entries in those files.
#
+.ex 7
#VIEWER:application/postscript:ghostview %s&:XWINDOWS
#VIEWER:image/gif:xli %s&:XWINDOWS
#VIEWER:image/x-xbm:xli %s&:XWINDOWS
-#VIEWER:image/x-rgb:xli %s&:XWINDOWS
-#VIEWER:image/x-tiff:xli %s&:XWINDOWS
+#VIEWER:image/png:xli %s&:XWINDOWS
+#VIEWER:image/tiff:xli %s&:XWINDOWS
#VIEWER:image/jpeg:xli %s&:XWINDOWS
#VIEWER:video/mpeg:mpeg_play %s &:XWINDOWS
+
+.h2 GLOBAL_MAILCAP
+.h2 PERSONAL_MAILCAP
# The global and personal MAILCAP files allow you to specify external
# viewers to be spawned when Lynx encounters different MIME types, which
# will override any of the suffix maps in this (lynx.cfg) configuration
# file, or in src/HTInit.c. See http://www.internic.net/rfc/rfc1524.txt
# and the example mailcap file in the samples subdirectory.
#
-# Unix:
+# Unix:
+# ====
#GLOBAL_MAILCAP:/usr/local/lib/mosaic/mailcap
-# VMS:
+# VMS:
+# ===
#GLOBAL_MAILCAP:Lynx_Dir:mailcap
#
# Sought in user's home (Unix) or sys$login (VMS) directory.
#PERSONAL_MAILCAP:.mailcap
+
+.h1 Keyboard Input
+
+.h2 KEYBOARD_LAYOUT
# If your terminal (or terminal emulator, or operating system) does not
# support 8-bit input (at all or in easy way), you can use Lynx to
# generate 8-bit characters from 7-bit ones output by terminal.
@@ -1592,11 +2271,14 @@ MINIMAL_COMMENTS:TRUE
# This feature is ifdef'd with EXP_KEYBOARD_LAYOUT.
#KEYBOARD_LAYOUT:JCUKEN Cyrillic, for AT 101-key kbd
+
+.h2 KEYMAP
# Key remapping definitions!
#
# You may redefine the keymapping of any function in Lynx by
-# using the KEYMAP variable. The form of KEYMAP is:
+# using the KEYMAP option. The basic form of KEYMAP is:
# KEYMAP:<KEYSTROKE>:<LYNX FUNCTION>
+# (See below for an extended format.)
#
# You must map upper and lowercase keys separately.
#
@@ -1611,7 +2293,7 @@ MINIMAL_COMMENTS:TRUE
# the default mapping unless you change that files manually,
# so you are responsible for possible deviations
# when you are changing any KEYMAP below).
-#
+.nf
#
# Keystrokes for special keys are represented by the following codes:
# Up Arrow: 0x100
@@ -1620,13 +2302,13 @@ MINIMAL_COMMENTS:TRUE
# Left Arrow: 0x103
# Page Down: 0x104
# Page Up: 0x105
-# Keypad Home: 0x106
-# Keypad End: 0x107
+# Keypad Home: 0x106 (see also 0x10A)
+# Keypad End: 0x107 (see also 0x10B)
# Function key 1: 0x108
# vt100 Help Key: 0x108
# vt100 Do Key: 0x109
-# vt100 Find Key: 0x10A
-# vt100 Select Key: 0x10B
+# vt100 Find Key: 0x10A (The key with label "Home" may be treated as Find)
+# vt100 Select Key: 0x10B (The key with label "End" may be treated as Select)
# Insert Key: 0x10C
# Remove (Del) Key: 0x10D
# ignored key 0x10E (reserved for internal use, DO_NOTHING)
@@ -1634,106 +2316,237 @@ MINIMAL_COMMENTS:TRUE
# reserved code 0x11D (reserved for internal use with -use_mouse)
# reserved code 0x290 (reserved for internal use with -use_mouse)
#
+.fi
# Other codes not listed above may be available for additional keys,
# depending on operating system and libraries used to compile Lynx.
-
-#KEYMAP:0x2F:SOURCE # Toggle source viewing mode (show HTML source)
-#KEYMAP:^R:RELOAD # Reload the current document and redisplay
-#KEYMAP:q:QUIT # Ask the user to quit
-#KEYMAP:Q:ABORT # Quit without verification
-#KEYMAP:0x20:NEXT_PAGE # Move down to next page
-#KEYMAP:-:PREV_PAGE # Move up to previous page
-#KEYMAP:^P:UP_TWO # Move display up two lines
-#KEYMAP:0x10C:UP_TWO # Function key Insert - Move display up two lines
-#KEYMAP:^N:DOWN_TWO # Move display down two lines
-#KEYMAP:0x10D:DOWN_TWO # Function key Remove - Move display down two lines
-#KEYMAP:(:UP_HALF # Move display up half a page
-#KEYMAP:):DOWN_HALF # Move display down half a page
-#KEYMAP:^W:REFRESH # Refresh the screen
-#KEYMAP:^A:HOME # Go to top of current document
-#KEYMAP:0x106:HOME # Keypad Home - Go to top of current document
-#KEYMAP:0x10A:HOME # Function key Find - Go to top of current document
-#KEYMAP:^E:END # Go to bottom of current document
-#KEYMAP:0x107:END # Keypad End - Go to bottom of current document
-#KEYMAP:0x10B:END # Function key Select - Go to bottom of current document
-#KEYMAP:0x100:PREV_LINK # Move to the previous link or page
-#KEYMAP:0x101:NEXT_LINK # Move to the next link or page
-#KEYMAP:0x10F:FASTBACKW_LINK # Move always to previous link or text area
-#KEYMAP:^I:FASTFORW_LINK # Move always to next link or text area
-#KEYMAP:<:UP_LINK # Move to the link above
-#KEYMAP:>:DOWN_LINK # Move to the link below
-#KEYMAP:0x7F:HISTORY # Show the history list
-#KEYMAP:0x08:HISTORY # Show the history list
-#KEYMAP:0x103:PREV_DOC # Return to the previous document in history stack
-#KEYMAP:0x102:ACTIVATE # Select the current link
-#KEYMAP:0x109:ACTIVATE # Function key Do - Select the current link
-#KEYMAP:g:GOTO # Goto a random URL
-#KEYMAP:G:ECGOTO # Edit the current document's URL and go to it
-#KEYMAP:H:HELP # Show default help screen
-#KEYMAP:0x108:HELP # Function key Help - Show default help screen
-#KEYMAP:i:INDEX # Show default index
-#*** Edit FORM_LINK_SUBMIT_MESSAGE in userdefs.h if you change NOCACHE ***
-#KEYMAP:x:NOCACHE # Force submission of form or link with no-cache
+# On some systems, if compiled with recent versions of slang or ncurses
+# (if macro USE_KEYMAPS was in effect during compilation), an additional
+# level of key mapping is supported via an external ".lynx-keymaps" file.
+# This file, if found in the home directory at startup, will always be
+# used under those conditions; see lynx-keymaps distributed in the samples
+# subdirectory for further explanation. Note that mapping via
+# .lynx-keymaps, if applicable, is a step that logically comes before the
+# mappings done here: KEYMAP maps the result of that step (which still
+# represents a key) to a function (which represents an action that Lynx
+# should perform).
+#
+.nf
+#KEYMAP:0x5C:SOURCE # Toggle source viewing mode (show HTML source)
+#KEYMAP:^R:RELOAD # Reload the current document and redisplay
+#KEYMAP:q:QUIT # Ask the user to quit
+#KEYMAP:Q:ABORT # Quit without verification
+#KEYMAP:0x20:NEXT_PAGE # Move down to next page
+#KEYMAP:-:PREV_PAGE # Move up to previous page
+#KEYMAP:^P:UP_TWO # Move display up two lines
+#KEYMAP:0x10C:UP_TWO # Function key Insert - Move display up two lines
+#KEYMAP:^N:DOWN_TWO # Move display down two lines
+#KEYMAP:0x10D:DOWN_TWO # Function key Remove - Move display down two lines
+#KEYMAP:(:UP_HALF # Move display up half a page
+#KEYMAP:):DOWN_HALF # Move display down half a page
+#KEYMAP:^W:REFRESH # Refresh the screen
+#KEYMAP:^A:HOME # Go to top of current document
+#KEYMAP:0x106:HOME # Keypad Home - Go to top of current document
+#KEYMAP:0x10A:HOME # Function key Find - Go to top of current document
+#KEYMAP:^E:END # Go to bottom of current document
+#KEYMAP:0x107:END # Keypad End - Go to bottom of current document
+#KEYMAP:0x10B:END # Function key Select - Go to bottom of current document
+#KEYMAP:0x100:PREV_LINK # Move to the previous link or page
+#KEYMAP:0x101:NEXT_LINK # Move to the next link or page
+#KEYMAP:0x10F:FASTBACKW_LINK # Back Tab - Move to previous link or text area
+#KEYMAP:^I:FASTFORW_LINK # Tab key - Move always to next link or text area
+#KEYMAP:^:FIRST_LINK # Move to the first link on line
+#KEYMAP:$:LAST_LINK # Move to the last link on line
+#KEYMAP:<:UP_LINK # Move to the link above
+#KEYMAP:>:DOWN_LINK # Move to the link below
+#KEYMAP:0x7F:HISTORY # Show the history list
+#KEYMAP:0x08:HISTORY # Show the history list
+#KEYMAP:0x103:PREV_DOC # Return to the previous document in history stack
+#KEYMAP:0x102:ACTIVATE # Select the current link
+#KEYMAP:0x109:ACTIVATE # Function key Do - Select the current link
+#KEYMAP:g:GOTO # Goto a random URL
+#KEYMAP:G:ECGOTO # Edit the current document's URL and go to it
+#KEYMAP:H:HELP # Show default help screen
+#KEYMAP:0x108:DWIMHELP # Function key Help - Show a help screen
+#KEYMAP:i:INDEX # Show default index
+#*** Edit FORM_LINK_* messages in LYMessages_en.h if you change NOCACHE ***
+#KEYMAP:x:NOCACHE # Force submission of form or link with no-cache
#*** Do not change INTERRUPT from 'z' & 'Z' ***
-#KEYMAP:z:INTERRUPT # Interrupt network transmission
-#KEYMAP:m:MAIN_MENU # Return to the main menu
-#KEYMAP:o:OPTIONS # Show the options menu
-#KEYMAP:i:INDEX_SEARCH # Search a server based index
-#KEYMAP:/:WHEREIS # Find a string within the current document
-#KEYMAP:n:NEXT # Find next occurrence of string within document
-#KEYMAP:c:COMMENT # Comment to the author of the current document
-#KEYMAP:e:EDIT # Edit current document or form's textarea (call: ^Ve)
-#KEYMAP:E:ELGOTO # Edit the current link's URL or ACTION and go to it
-#KEYMAP:=:INFO # Show info about current document
-#KEYMAP:p:PRINT # Show print options
-#KEYMAP:a:ADD_BOOKMARK # Add current document to bookmark list
-#KEYMAP:v:VIEW_BOOKMARK # View the bookmark list
-#KEYMAP:V:VLINKS # List links visited during the current Lynx session
-#KEYMAP:!:SHELL # Spawn default shell
-#KEYMAP:d:DOWNLOAD # Download current link
-#KEYMAP:j:JUMP # Jump to a predefined target
-#KEYMAP:k:KEYMAP # Display the current key map
-#KEYMAP:l:LIST # List the references (links) in the current document
-#KEYMAP:#:TOOLBAR # Go to the Toolbar or Banner in the current document
-#KEYMAP:^T:TRACE_TOGGLE # Toggle detailed tracing for debugging
-#KEYMAP:;:TRACE_LOG # View trace log if available for the current session
-#KEYMAP:*:IMAGE_TOGGLE # Toggle inclusion of links for all images
-#KEYMAP:[:INLINE_TOGGLE # Toggle pseudo-ALTs for inlines with no ALT string
-#KEYMAP:]:HEAD # Send a HEAD request for current document or link
-#*** Must be compiled with USE_EXTERNALS to enable EXTERN ***
-#KEYMAP:.:EXTERN # Run external program with url
+#KEYMAP:z:INTERRUPT # Interrupt network transmission
+#KEYMAP:m:MAIN_MENU # Return to the main menu
+#KEYMAP:o:OPTIONS # Show the options menu
+#KEYMAP:i:INDEX_SEARCH # Search a server based index
+#KEYMAP:/:WHEREIS # Find a string within the current document
+#KEYMAP:n:NEXT # Find next occurrence of string within document
+#KEYMAP:c:COMMENT # Comment to the author of the current document
+#KEYMAP:C:CHDIR # Change current directory
+#KEYMAP:e:EDIT # Edit current document or form's textarea (call: ^Ve)
+#KEYMAP:E:ELGOTO # Edit the current link's URL or ACTION and go to it
+#KEYMAP:=:INFO # Show info about current document
+#KEYMAP:p:PRINT # Show print options
+#KEYMAP:a:ADD_BOOKMARK # Add current document to bookmark list
+#KEYMAP:v:VIEW_BOOKMARK # View the bookmark list
+#KEYMAP:V:VLINKS # List links visited during the current Lynx session
+#KEYMAP:!:SHELL # Spawn default shell
+#KEYMAP:d:DOWNLOAD # Download current link
+#KEYMAP:j:JUMP # Jump to a predefined target
+#KEYMAP:k:KEYMAP # Display the current key map
+#KEYMAP:l:LIST # List the references (links) in the current document
+#KEYMAP:#:TOOLBAR # Go to the Toolbar or Banner in the current document
+#KEYMAP:^T:TRACE_TOGGLE # Toggle detailed tracing for debugging
+#KEYMAP:;:TRACE_LOG # View trace log if available for the current session
+#KEYMAP:*:IMAGE_TOGGLE # Toggle inclusion of links for all images
+#KEYMAP:[:INLINE_TOGGLE # Toggle pseudo-ALTs for inlines with no ALT string
+#KEYMAP:]:HEAD # Send a HEAD request for current document or link
+#*** Must be compiled with USE_EXTERNALS to enable EXTERN_LINK, EXTERN_PAGE ***
+#KEYMAP:,:EXTERN_PAGE # Run external program with current page
+#KEYMAP:.:EXTERN_LINK # Run external program with current link
#*** Escaping from text input fields with ^V is independent from this: ***
-#KEYMAP:^V:SWITCH_DTD # Toggle between SortaSGML and TagSoup HTML parsing
-#KEYMAP:0x00:DO_NOTHING # Does nothing (ignore this key)
-#KEYMAP:0x10E:DO_NOTHING # Does nothing (ignore this key)
-#
-# In addition, the following functions are not mapped to any keys by default:
+#KEYMAP:^V:SWITCH_DTD # Toggle between SortaSGML and TagSoup HTML parsing
+#KEYMAP:0x00:DO_NOTHING # Does nothing (ignore this key)
+#KEYMAP:0x10E:DO_NOTHING # Does nothing (ignore this key)
+#KEYMAP:{:SHIFT_LEFT # shift the screen left
+#KEYMAP:}:SHIFT_RIGHT # shift the screen right
+#KEYMAP:|:LINEWRAP_TOGGLE # toggle linewrap on/off, for shift-commands
+#KEYMAP:~:NESTED_TABLES_TOGGLE # toggle nested-tables parsing on/off
+#
+.fi
+# In addition to the bindings available by default, the following functions
+# are not directly mapped to any keys by default, although some of them may
+# be mapped in specific line-editor bindings (effective while in text input
+# fields):
+.nf
+#
+#KEYMAP:???:RIGHT_LINK # Move to the link to the right
+#KEYMAP:???:LEFT_LINK # Move to the link to the left
+#KEYMAP:???:LPOS_PREV_LINK # Like PREV_LINK, last column pos if form input
+#KEYMAP:???:LPOS_NEXT_LINK # Like NEXT_LINK, last column pos if form input
+#*** Only useful in form text fields , need PASS or prefixing with ^V: ***
+#KEYMAP:???:DWIMHELP # Display help page that may depend on context
+#KEYMAP:???:DWIMEDIT # Use external editor for context-dependent purpose
+#*** Only useful in a form textarea, need PASS or prefixing with ^V: ***
+#KEYMAP:???:EDITTEXTAREA # use external editor to edit a form textarea
+#KEYMAP:???:GROWTEXTAREA # Add some blank lines to bottom of textarea
+#KEYMAP:???:INSERTFILE # Insert file into a textarea (just above cursor)
+#*** Only useful with dired support and OK_INSTALL: ***
+#KEYMAP:???:INSTALL # install (i.e. copy) local files to new location
+.fi
#
-#KEYMAP:???:RIGHT_LINK # Move to the link to the right
-#KEYMAP:???:LEFT_LINK # Move to the link to the left
-
# If TOGGLE_HELP is mapped, in novice mode the second help menu line
# can be toggled among NOVICE_LINE_TWO_A, _B, and _C, as defined in
# LYMessages_en.h Otherwise, it will be NOVICE_LINE_TWO.
#
-#KEYMAP:O:TOGGLE_HELP # Show other commands in the novice help menu
-
-# Alternate jumps files can be defined and mapped to keys here. If the
-# keys have already been mapped, then those mappings will be replaced,
-# but you should leave at least one key mapped to the default jumps
-# file. You optionally may include a statusline prompt string for the
-# mapping. You must map upper and lowercase keys separately (beware of
-# mappings to keys which the user can further remap via the 'o'ptions
-# menu). The format is:
-#
-# JUMPFILE:path:key[:prompt]
-#
-# where path should begin with a '/' (i.e., not include file://localhost).
-# Any white space following a prompt string will be trimmed, and a single
-# space will be added by Lynx.
-#
-#JUMPFILE:/Lynx_Dir/ips.html:i:IP or Interest group (? for list):
-
+#KEYMAP:O:TOGGLE_HELP # Show other commands in the novice help menu
+#
+# KEYMAP lines can have one or two additional fields. The extended format is
+# KEYMAP:<KEYSTROKE>:[<MAIN LYNX FUNCTION>]:<OTHER BINDING>[:<SELECT>]
+#
+# If the additional field OTHER BINDING specifies DIRED, then the function is
+# mapped in the override table used only in DIRED mode. This is only valid
+# if lynx was compiled with dired support and OK_OVERRIDE defined. A
+# MAIN LYNX FUNCTION must be given (it should of course be one that makes
+# sense in Dired mode), and SELECT is meaningless. Default built-in override
+# mappings are
+#
+#KEYMAP:^U:PREV_DOC:DIRED # Return to the previous document
+#KEYMAP:.:TAG_LINK:DIRED # Tag a file or directory for later action
+#KEYMAP:c:CREATE:DIRED # Create a new file or directory
+#KEYMAP:C:CHDIR:DIRED # change current directory
+#KEYMAP:f:DIRED_MENU:DIRED # Display a menu of file operations
+#KEYMAP:m:MODIFY:DIRED # Modify name or location of a file or directory
+#KEYMAP:r:REMOVE:DIRED # Remove files or directories
+#KEYMAP:t:TAG_LINK:DIRED # Tag a file or directory for later action
+#KEYMAP:u:UPLOAD:DIRED # Show menu of "Upload Options"
+#
+# If the OTHER BINDING field does not specify DIRED, then it is taken as a
+# line-editor action. It is possible to keep the MAIN LYNX FUNCTION field
+# empty in that case, for changing only the line-editing behavior.
+# If alternative line edit styles are compiled in, and modifying a key's
+# line-editor binding on a per style basis is possible, then SELECT can be
+# used to specify which styles are affected. By default, or if SELECT is
+# 0, all line edit styles are affected. If SELECT is a positive integer
+# number, only the binding for the numbered style is changed (numbering
+# is in the order in which styles are shown in the Options Menu, starting
+# with 1 for the Default style). If SELECT is negative (-n), all styles
+# except n are affected.
+.nf
+#
+# NOP # Do Nothing
+# ABORT # Input cancelled
+#
+# BOL # Go to begin of line
+# EOL # Go to end of line
+# FORW # Cursor forwards
+# FORW_RL # Cursor forwards or right link
+# BACK # Cursor backwards
+# FORWW # Word forward
+# BACKW # Word back
+# BACK_LL # Cursor backwards or left link
+#
+# DELN # Delete next/curr char
+# DELP # Delete prev char
+# DELNW # Delete next word
+# DELPW # Delete prev word
+# DELBL # Delete back to BOL
+# DELEL # Delete thru EOL
+# ERASE # Erase the line
+# LOWER # Lower case the line
+# UPPER # Upper case the line
+#
+# LKCMD # In fields: Invoke key command prompt (default for ^V)
+# PASS # In fields: handle as non-lineedit key; in prompts: ignore
+#
+.fi
+# Modify following key (prefixing only works within line-editing, edit actions
+# of some resulting prefixed keys are built-in, see Line Editor help pages)
+# SETM1 # Set modifier 1 flag (default for ^X - key prefix)
+# SETM2 # Set modifier 2 flag (another key prefix - same effect)
+#
+# May not always be compiled in:
+.nf
+#
+# TPOS # Transpose characters
+# SETMARK # emacs-like set-mark-command
+# XPMARK # emacs-like exchange-point-and-mark
+# KILLREG # emacs-like kill-region
+# YANK # emacs-like yank
+# SWMAP # Switch input keymap
+# PASTE # ClipBoard to Lynx - Windows Extension
+#
+.fi
+# May work differently from expected if not bound to their expected keys:
+.nf
+#
+# CHAR # Insert printable char (default for all ASCII printable)
+# ENTER # Input complete, return char/lynxkeycode (for RETURN/ENTER)
+# TAB # Input complete, return TAB (for ASCII TAB char ^I)
+#
+.fi
+# Internal use, probably not useful for binding, listed for completeness:
+.nf
+#
+# UNMOD # Fall back to no-modifier command
+# AIX # Hex 97
+# C1CHAR # Insert C1 char if printable
+#
+.fi
+# If OTHER BINDING specifies PASS, then if the key is pressed in a text input
+# field it is passed by the built-in line-editor to normal KEYMAP handling,
+# i.e. this flag acts like an implied ^V escape (always overrides line-editor
+# behavior of the key). For example,
+#KEYMAP:0x10C:UP_TWO:PASS # Function key Insert - Move display up two lines
+#
+# Other examples (repeating built-in bindings)
+#KEYMAP:^V::LKCMD # set (only) line-edit action for ^V
+#KEYMAP:^V:SWITCH_DTD:LKCMD # set main lynxaction and line-edit action for ^V
+#KEYMAP:^U::ERASE:1 # set line-edit binding for ^U, for default style
+#KEYMAP:^[::SETM2:3 # use escape key as modifier - works only sometimes
+
+
+.h1 External Programs
+# These settings control the ability of Lynx to invoke various programs for
+# the user.
+
+.h2 CSWING_PATH
# VMS ONLY:
#==========
# On VMS, CSwing (an XTree emulation for VTxxx terminals) is intended for
@@ -1754,6 +2567,31 @@ MINIMAL_COMMENTS:TRUE
#
#CSWING_PATH:swing
+
+.h1 Internal Behavior
+
+.h2 AUTO_UNCACHE_DIRLISTS
+# AUTO_UNCACHE_DIRLISTS determines when local file directory listings are
+# automatically regenerated (by re-reading the actual directory from disk).
+# Set the value to 0 to avoid automatic regeneration in most cases. This is
+# useful for browsing large directories that take some time to read and format.
+# An update can still always be forced with the RELOAD key, and specific DIRED
+# actions may cause a refresh anyway. Set the value to 1 to force regeneration
+# after commands that usually change the directory or some files and would make
+# the displayed info stale, like EDIT and REMOVE. Set it to 2 (the default) or
+# greater to force regeneration even after leaving the displayed directory
+# listing by some action that usually causes no change, like GOTO or entering a
+# file with the ACTIVATE key. This option is only honored in DIRED mode (i.e.
+# when lynx is compiled with DIRED_SUPPORT and it is not disabled with a
+# -restriction). Local directories displayed without DIRED normally act as if
+# AUTO_UNCACHE_DIRLISTS:0 was in effect.
+#
+#AUTO_UNCACHE_DIRLISTS:2
+
+
+.h1 Appearance
+
+.h2 LIST_FORMAT
# Unix ONLY:
#===========
# LIST_FORMAT defines the display for local files when Lynx has been
@@ -1763,6 +2601,7 @@ MINIMAL_COMMENTS:TRUE
# modified parameter list.
#
# The percent items in the list are interpreted as follows:
+.nf
#
# %p Unix-style permission bits
# %l link count
@@ -1777,22 +2616,30 @@ MINIMAL_COMMENTS:TRUE
# %K as above but omit size for directories
# %s size of file in bytes
#
+.fi
# Anything between the percent and the letter is passed on to sprintf.
# A double percent yields a literal percent on output. Other characters
# are passed through literally.
#
# If you want only the filename:
#
+.ex
#LIST_FORMAT: %a
#
# If you want a brief output:
#
+.ex
#LIST_FORMAT: %4K %-12.12d %a
#
# If you want the Unix "ls -l" format:
#
+.ex
#LIST_FORMAT: %p %4l %-8.8o %-8.8g %7s %-12.12d %a
+
+.h1 External Programs
+
+.h2 DIRED_MENU
# Unix ONLY:
#===========
# DIRED_MENU items are used to compose the F)ull menu list in DIRED mode
@@ -1805,6 +2652,7 @@ MINIMAL_COMMENTS:TRUE
# definitions, so a complete set must then be defined here.
#
# Each line consists of the following fields:
+.nf
#
# DIRED_MENU:type:suffix:link text:extra text:action
#
@@ -1824,17 +2672,20 @@ MINIMAL_COMMENTS:TRUE
# link text and action are scanned for % sequences that are expanded
# at display time as follows:
#
-# %p path of current selection
-# %f filename (last component) of current selection
-# %t tagged list (full paths)
-# %l list of tagged file names
-# %d the current directory
+# %p path of current selection
+# %f filename (last component) of current selection
+# %t tagged list (full paths)
+# %l list of tagged file names
+# %d the current directory
#
+.fi
#DIRED_MENU:::New File:(in current directory):LYNXDIRED://NEW_FILE%d
#DIRED_MENU:::New Directory:(in current directory):LYNXDIRED://NEW_FOLDER%d
-#DIRED_MENU:FILE::Install:(of current selection):LYNXDIRED://INSTALL_SRC%p
-#DIRED_MENU:DIR::Install:(of current selection):LYNXDIRED://INSTALL_SRC%p
+# Following depends on OK_INSTALL
+#DIRED_MENU:FILE::Install:selected file to new location:LYNXDIRED://INSTALL_SRC%p
+#DIRED_MENU:DIR::Install:selected directory to new location: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
@@ -1890,9 +2741,50 @@ MINIMAL_COMMENTS:TRUE
#DIRED_MENU:FILE::Compress:(using zip):LYNXDIRED://ZIP%p
#DIRED_MENU:TAG::Move all tagged items to another location.::LYNXDIRED://MOVE_TAGGED%d
+
+# Following depends on OK_INSTALL
+#DIRED_MENU:TAG::Install tagged files into another directory.::LYNXDIRED://INSTALL_SRC%00
+
#DIRED_MENU:TAG::Remove all tagged files and directories.::LYNXDIRED://REMOVE_TAGGED
#DIRED_MENU:TAG::Untag all tagged items.::LYNXDIRED://CLEAR_TAGGED
+
+.h1 Internal Behavior
+
+.h2 NONRESTARTING_SIGWINCH
+# Some systems only:
+#===================
+# Lynx tries to detect window size changes with a signal handler for
+# SIGWINCH if supported. If NONRESTARTING_SIGWINCH is set to TRUE,
+# and the sigaction interface is available on the system, the handler
+# is installed as 'non-restarting'. On some systems (depending on the
+# library used for handling keyboard input, e.g. ncurses), this allows
+# more immediate notification of window size change events. If the value
+# is set to FALSE, the signal() interface is used; this normally makes
+# the handler 'restarting', with the effect that lynx can react to size
+# changes only after some key is pressed. The value can also be set to
+# XWINDOWS; this is equivalent to TRUE when the user has the environment
+# variable DISPLAY defined *at program start*, and equivalent to FALSE
+# otherwise. The non-restarting behavior can also be changed to TRUE
+# or FALSE with the -nonrestarting_sigwinch switch, which overrides the
+# value in this file.
+#
+# Note that Lynx never re-parses document text purely as a result of a
+# window size change, so text lines may appear truncated after narrowing
+# the window, until the document is reloaded with ^R or a similar key
+# or until a different text is loaded.
+#
+# The default is FALSE since there is a possibility that non-restarting
+# interrupts may be mis-interpreted as fatal input errors in some
+# configurations (leading to an abrupt program exit), and since this
+# option is useful mostly only for users running Lynx under xterm or a
+# similar X terminal emulator. On systems where the preconditions don't
+# apply this option is ignored.
+#
+#NONRESTARTING_SIGWINCH:FALSE
+
+
+.h2 NO_FORCED_CORE_DUMP
# Unix ONLY:
#===========
# If NO_FORCED_CORE_DUMP is set to TRUE, Lynx will not force
@@ -1907,27 +2799,34 @@ MINIMAL_COMMENTS:TRUE
#
#NO_FORCED_CORE_DUMP:FALSE
+
+.h1 Appearance
+
+.h2 COLOR
# COLORS (only available if compiled with SVr4 curses or slang)
#
# The line must be of the form:
+#
# COLOR:Integer:Foreground:Background
+.nf
#
# The Integer value is interpreted as follows:
-# 0 - normal - normal text
-# 1 - bold - hyperlinks, see also BOLD_* options above
-# 2 - reverse - statusline
-# 3 - bold + reverse (not used)
-# 4 - underline - text emphasis (EM, I, B tags etc.)
-# 5 - bold + underline - hyperlinks within text emphasis
-# 6 - reverse + underline - currently selected hyperlink
-# 7 - reverse + underline + bold - WHEREIS search hits
+# 0 - normal - normal text
+# 1 - bold - hyperlinks, see also BOLD_* options above
+# 2 - reverse - statusline
+# 3 - bold + reverse (not used)
+# 4 - underline - text emphasis (EM, I, B tags etc.)
+# 5 - bold + underline - hyperlinks within text emphasis
+# 6 - reverse + underline - currently selected hyperlink
+# 7 - reverse + underline + bold - WHEREIS search hits
#
# Each Foreground and Background value must be one of:
-# black red green brown
-# blue magenta cyan lightgray
-# gray brightred brightgreen yellow
-# brightblue brightmagenta brightcyan white
+# black red green brown
+# blue magenta cyan lightgray
+# gray brightred brightgreen yellow
+# brightblue brightmagenta brightcyan white
#
+.fi
# or (if you have configured using --enable-default-colors with ncurses or
# slang), "default" may be used for foreground and background.
#
@@ -1940,8 +2839,26 @@ MINIMAL_COMMENTS:TRUE
#COLOR:4:magenta:white
#COLOR:5:blue:white
#COLOR:6:red:white
+COLOR:6:brightred:black
#COLOR:7:magenta:cyan
+
+.h2 ASSUMED_COLOR
+# If built with a library that recognizes default colors, initializes it
+# to assume the corresponding foreground and background colors. Default
+# colors are those that the terminal (emulator) itself is initialized to.
+# For instance, you might have an xterm running with black text on a white
+# background, and want lynx to display colored text on the white background,
+# but leave the possibility of using the same configuration to draw colored
+# text on a different xterm, this time using its background set to black.
+#
+# The first value given is the foreground, the second is the background.
+#ASSUMED_COLOR:default:default
+
+
+.h1 External Programs
+
+.h2 EXTERNAL
# External application support. This feature allows Lynx to pass a given
# URL to an external program. It was written for three reasons.
#
@@ -1955,13 +2872,14 @@ MINIMAL_COMMENTS:TRUE
# URLs can be made up such as mymail: to spawn desired applications
# via the external command.
#
-# Restrictions can be imposed using -restrictions=externals at the Lynx
-# command line. This will disallow all EXTERNAL lines in lynx.cfg that
-# end in FALSE. TRUE lines will still function.
+# Restrictions can be imposed using -restrictions=externals at the Lynx command
+# line. This will disallow all EXTERNAL lines in lynx.cfg that have FALSE in
+# the 3rd field (not counting the name of the setting). TRUE lines will still
+# function.
#
# The lynx.cfg line is as follows:
#
-# EXTERNAL:<url>:<command> %s:<norestriction>
+# EXTERNAL:<url>:<command> %s:<norestriction>:<allow_for_activate>
#
# <url> Any given URL. This can be normal ones like ftp or http or it
# can be one made up like mymail.
@@ -1975,8 +2893,23 @@ MINIMAL_COMMENTS:TRUE
# for certain externals to be enabled while restricting others. TRUE means
# a command will still function while Lynx is restricted. WB
#
-# EXTERNAL:ftp:wget %s &:TRUE
+# <allow_for_activate> Setting this to TRUE allows the use of this command not
+# only when EXTERN key is pressed, but also when ACTIVATE command is invoked
+# (i.e., activating the link with the given prefix will be equivalent to
+# pressing EXTERN key on it). If this component of the line is absent, then
+# FALSE is assumed.
+#
+# For invoking the command use the EXTERN_LINK or EXTERN_PAGE key. By default
+# EXTERN_LINK is mapped to '.', and EXTERN_PAGE to ',' (if the feature is
+# enabled), see the KEYMAP section above.
+#
+#EXTERNAL:ftp:wget %s &:TRUE
+
+
+.h1 Internal Behavior
+.h2 RULE
+.h2 RULESFILE
# CERN-style rules, EXPERIMENTAL - URL-specific rules
#
# A CERN-style rules file can be given with RULESFILE. Use the system's
@@ -1990,23 +2923,31 @@ MINIMAL_COMMENTS:TRUE
# in the samples subdirectory for further explanation.
#
# Examples:
+.ex 5
# RULESFILE:/etc/lynx/cernrules
# RULE:Fail gopher:* # reject by scheme
# RULE:Pass finger://*@localhost/ # allow this,
# RULE:Fail finger:* # but not others
-# RULE:Map http://old.server/* http://new.server/*
+# RULE:Redirect http://old.server/* http://new.server/*
+
+
+.h1 Appearance
+.h2 PRETTYSRC
+# Enable pretty source view
+#PRETTYSRC:FALSE
+.h2 PRETTYSRC_SPEC
# Pretty source view settings. These settings are in effect when -prettysrc
-# was specified.
-# The following lexical elements (lexems) are recognised:
+# is specified.
+# The following lexical elements (lexemes) are recognized:
# comment, tag, attribute, attribute value, generalized angle brackets (
-# '<' '>' '</' ), entity, hyperlink destination , entire file,bad sequence,
+# '<' '>' '</' ), entity, hyperlink destination, entire file, bad sequence,
# bad tag, bad attribute, sgml special.
# The following group of option tells which styles will surround each
-# lexem. The syntax of option in this group is:
-#HTMLSRC_<LEXEMNAME>:<TAGSPEC>:<TAGSPEC>
-# The first <TAGSPEC> specifies what tags will precede lexems of that class
+# lexeme. The syntax of option in this group is:
+#PRETTYSRC_SPEC:<LEXEMENAME>:<TAGSPEC>:<TAGSPEC>
+# The first <TAGSPEC> specifies what tags will precede lexemes of that class
# in the internal html markup. The second - what will be placed (internally)
# after it.
# TAGSPEC has the following syntax:
@@ -2014,86 +2955,259 @@ MINIMAL_COMMENTS:TRUE
# <TAGOPEN>:= tagname[.classname]
# <TAGCLOSE>:= !tagname
#
-# The following table gives correspondence between lexem and lexem name
-# Lexem LEXEMNAME FURTHER EXPLANATION
-# ------------------------------------
-# comment COMM
-# tag TAG everything in gen. brackets
-# attribute ATTRIB
-# attribute value ATTRVAL
-# generalized brackets ABRACKET < > </
-# entity ENTITY
-# hyperlink destination HREF
-# entire file ENTIRE
-# bad sequence BADSEQ bad entity or invalid construct at text
+# The following table gives correspondence between lexeme and lexeme name
+.nf
+# Lexeme LEXEMENAME FURTHER EXPLANATION
+# =========================================================
+# comment COMM
+# tag TAG recognized tag name only
+# attribute ATTRIB
+# attribute value ATTRVAL
+# generalized brackets ABRACKET < > </
+# entity ENTITY
+# hyperlink destination HREF
+# entire file ENTIRE
+# bad sequence BADSEQ bad entity or invalid construct at text
# level.
-# bad tag BADTAG Unrecognized contruct in generalized
+# bad tag BADTAG Unrecognized construct in generalized
# brackets.
-# bad attribute BADATTR The name of the attribute unknown to lynx
-# of the tag known to lynx. (ie
+# bad attribute BADATTR The name of the attribute unknown to lynx
+# of the tag known to lynx. (i.e.,
# attributes of unknown tags will have
# markup of ATTRIB)
-# sgml special SGMLSPECIAL doctype, sgmlelt, sgmlele,
+# sgml special SGMLSPECIAL doctype, sgmlelt, sgmlele,
# sgmlattlist, marked section, identifier
+.fi
+#
+# Notes:
#
-# Notes:
# 1) The markup for HTML_ENTIRE will be emitted only once - it will surround
-# entire file source.
-# 2) The tagnames specified by TAGPEC should be valid html tag names.
+# entire file source.
+#
+# 2) The tagnames specified by TAGSPEC should be valid html tag names.
+#
# 3) If the tag/class combination given by TAGOPEN is not assigned a color
# style in lss file (for lynx compiled with lss support), that tag/class
-# combination will be anyway emitted during internal html markup. Such
+# combination will be emitted anyway during internal html markup. Such
# combinations will be also reported to the trace log.
-# 4) Lexeme 'tag' means everything contained in generalized angle brackets
+#
+# 4) Lexeme 'tag' means tag name only
+#
# 5) Angle brackets of html specials won't be surrounded by markup for ABRACKET
#
-# Examples:
-# HTMLSRC_COMM:B I:!I !B
-# - html comments will be surrounded by <b><i> and </i></b> in the
+.ex
+# PRETTYSRC_SPEC:COMM:B I:!I !B
+# HTML comments will be surrounded by <b><i> and </i></b> in the
# internal html markup
-# HTMLSRC_ATTRVAL: span.attrval : !span
-# - values of the attributes will be surrounded by the
+.ex
+# PRETTYSRC_SPEC:ATTRVAL: span.attrval : !span
+# Values of the attributes will be surrounded by the
# <SPAN class=attrval> </SPAN>
-# HTMLSRC_HREF::
-# - no special html markup will surround hyperlink destinations (
+.ex
+# PRETTYSRC_SPEC:HREF::
+# No special html markup will surround hyperlink destinations (
# this means that only default color style for hrefs will be applied
# to them)
#
# For lynx compiled with lss support, the following settings are the default:
-#HTMLSRC_COMM:span.htmlsrc_comment:!span
-#HTMLSRC_TAG:span.htmlsrc_tag:!span
-#HTMLSRC_ATTRIB:span.htmlsrc_attrib:!span
-#HTMLSRC_ATTRVAL:span.htmlsrc_attrval:!span
-#HTMLSRC_ABRACKET:span.htmlsrc_abracket:!span
-#HTMLSRC_ENTITY:span.htmlsrc_entity:!span
-#HTMLSRC_HREF:span.htmlsrc_href:!span
-#HTMLSRC_ENTIRE:span.htmlsrc_entire:!span
-#HTMLSRC_BADSEQ:span.htmlsrc_badseq:!span
-#HTMLSRC_BADTAG:span.htmlsrc_badtag:!span
-#HTMLSRC_BADATTR:span.htmlsrc_badattr:!span
-#HTMLSRC_SGMLSPECIAL:span.htmlsrc_sgmlspecial:!span
+#PRETTYSRC_SPEC:COMM:span.htmlsrc_comment:!span
+#PRETTYSRC_SPEC:TAG:span.htmlsrc_tag:!span
+#PRETTYSRC_SPEC:ATTRIB:span.htmlsrc_attrib:!span
+#PRETTYSRC_SPEC:ATTRVAL:span.htmlsrc_attrval:!span
+#PRETTYSRC_SPEC:ABRACKET:span.htmlsrc_abracket:!span
+#PRETTYSRC_SPEC:ENTITY:span.htmlsrc_entity:!span
+#PRETTYSRC_SPEC:HREF:span.htmlsrc_href:!span
+#PRETTYSRC_SPEC:ENTIRE:span.htmlsrc_entire:!span
+#PRETTYSRC_SPEC:BADSEQ:span.htmlsrc_badseq:!span
+#PRETTYSRC_SPEC:BADTAG:span.htmlsrc_badtag:!span
+#PRETTYSRC_SPEC:BADATTR:span.htmlsrc_badattr:!span
+#PRETTYSRC_SPEC:SGMLSPECIAL:span.htmlsrc_sgmlspecial:!span
# the styles corresponding to them are present in sample .lss file.
# For lynx compiled without lss support, the following settings are the default:
-#HTMLSRC_COMM:b:!b
-#HTMLSRC_TAG:b:!b
-#HTMLSRC_ATTRIB::
-#HTMLSRC_ATTRVAL:!b:b
-#HTMLSRC_ABRACKET:b:!b
-#HTMLSRC_ENTITY:b:!b
-#HTMLSRC_HREF::
-#HTMLSRC_ENTIRE::
-#HTMLSRC_BADSEQ:b:!b
-#HTMLSRC_BADTAG::
-#HTMLSRC_BADATTR:!b:b
-#HTMLSRC_SGMLSPECIAL:b:!b
-#
-# Other source-view related options:
-#
+#PRETTYSRC_SPEC:COMM:b:!b
+#PRETTYSRC_SPEC:TAG:b:!b
+#PRETTYSRC_SPEC:ATTRIB:b:!b
+#PRETTYSRC_SPEC:ATTRVAL::
+#PRETTYSRC_SPEC:ABRACKET:b:!b
+#PRETTYSRC_SPEC:ENTITY:b:!b
+#PRETTYSRC_SPEC:HREF::
+#PRETTYSRC_SPEC:ENTIRE::
+#PRETTYSRC_SPEC:BADSEQ:b:!b
+#PRETTYSRC_SPEC:BADTAG::
+#PRETTYSRC_SPEC:BADATTR::
+#PRETTYSRC_SPEC:SGMLSPECIAL:b:!b
+
+
+.h2 HTMLSRC_ATTRNAME_XFORM
+.h2 HTMLSRC_TAGNAME_XFORM
# Options HTMLSRC_TAGNAME_XFORM and HTMLSRC_ATTRNAME_XFORM control the way the
# names of tags and names of attributes are transformed correspondingly.
# Possible values: 0 - lowercase, 1 - leave as is, 2 - uppercase.
#HTMLSRC_TAGNAME_XFORM:2
#HTMLSRC_ATTRNAME_XFORM:2
-# Set FTP_PASSIVE to FALSE if you want to use active mode ftp transfers.
+
+.h2 PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING
+# PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING - pretty source view setting
+# If "keypad mode" in 'O'ptions screen is "Links are numbered" or
+# "Links and form fields are numbered", and PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING is
+# TRUE, then links won't be numbered in psrc view and will be numbered
+# otherwise. Set this setting to TRUE if you prefer numbered links, but wish
+# to get valid HTML source when printing or mailing when in psrc view.
+# Default is FALSE.
+#PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING:FALSE
+
+
+.h1 HTML Parsing
+
+.h2 FORCE_EMPTY_HREFLESS_A
+# FORCE_EMPTY_HREFLESS_A - HTML parsing
+# This option mirrors command-line option with the same name. Default is
+# FALSE. If true, then any 'A' element without HREF will be closed
+# immediately. This is useful when viewing documentation produced by broken
+# translator that doesn't emit balanced A elements. If lynx was compiled with
+# color styles, setting this option to TRUE will make lynx screen much more
+# reasonable (otherwise all text will probably have color corresponding to the
+# A element).
+#
+#FORCE_EMPTY_HREFLESS_A:FALSE
+
+.h2 HIDDEN_LINK_MARKER
+# HIDDEN_LINK_MARKER - HTML parsing
+# This option defines the string that will be used as title of hidden link (a
+# link that otherwise will have no label associated with it). Using an empty
+# string as the value will cause lynx to behave in the old way - hidden links
+# will be handled according to other settings (mostly the parameter of
+# --hiddenlinks command-line switch). If the value is non-empty string, hidden
+# link becomes non-hidden so it won't be handled as hidden link, e.g., listed
+# among hidden links on 'l'isting page.
+#
+#HIDDEN_LINK_MARKER:
+
+.h1 Appearance
+
+.h2 JUSTIFY
+# JUSTIFY - Appearance
+# This option mirrors command-line option with same name. Default is TRUE. If
+# true, most of text (except headers and like this) will be justified. This
+# has no influence on CJK text rendering.
+#
+# This option is only available if Lynx was compiled with EXP_JUSTIFY_ELTS.
+#
+#JUSTIFY:TRUE
+
+.h2 JUSTIFY_MAX_VOID_PERCENT
+# JUSTIFY_MAX_VOID_PERCENT - Appearance
+# This option controls the maximum allowed value for ratio (in percents) of
+# 'the number of spaces to spread across the line to justify it' to
+# 'max line size for current style and nesting' when justification is allowed.
+# When that ratio exceeds the value specified, that particular line won't be
+# justified. I.e. the value 28 for this setting will mean maximum value for
+# that ratio is 0.28.
+#
+#JUSTIFY_MAX_VOID_PERCENT:35
+
+
+.h1 Interaction
+
+.h2 TEXTFIELDS_NEED_ACTIVATION
+# If TEXTFIELDS_NEED_ACTIVATION is set to TRUE, and lynx was compiled with
+# TEXTFIELDS_MAY_NEED_ACTIVATION defined, then text input form fields need
+# to be activated (by pressing the Enter key or similar) before the user
+# can enter or modify input. By default, input fields become automatically
+# activated when selected. Requiring explicit activation can be desired for
+# users who use alphanumeric keys for navigation (or other keys that have
+# special meaning in the line editor - ' ', 'b', INS, DEL, etc), and don't
+# want to 'get stuck' in form fields. Instead of setting the option here,
+# explicit activation can also be requested with the -tna command line
+# option.
+#
+#TEXTFIELDS_NEED_ACTIVATION:FALSE
+
+.h2 LEFTARROW_IN_TEXTFIELD_PROMPT
+# LEFTARROW_IN_TEXTFIELD_PROMPT
+# This option controls what happens when a Left Arrow key is pressed while
+# in the first position of an active text input field. By default, Lynx
+# asks for confirmation ("Do you want to go back to the previous document?")
+# only if the contents of the fields have been changed since entering it.
+# If set to TRUE, the confirmation prompt is always issued.
+#
+#LEFTARROW_IN_TEXTFIELD_PROMPT:FALSE
+
+
+.h1 Timeouts
+
+.h2 CONNECT_TIMEOUT
+# Specifies (in seconds) connect timeout. Not available under DOS (use
+# sockdelay parameter of wattcp). Default value is rather huge.
+#CONNECT_TIMEOUT:18000
+
+
+.h1 Internal Behavior
+# These settings control internal lynx behavior - the way it interacts with the
+# operating system and Internet. Modifying these settings will not change
+# the rendition of documents that you browse with lynx, but can change various
+# delays and resource utilization.
+
+.h2 FTP_PASSIVE
+# Set FTP_PASSIVE to TRUE if you want to use passive mode ftp transfers.
+# You might have to do this if you're behind a restrictive firewall.
#FTP_PASSIVE:TRUE
+
+.h2 ENABLE_LYNXRC
+# The forms-based O'ptions menu shows a (!) marker beside items which are not
+# saved to ~/.lynxrc -- the reason for disabling some of these items is that
+# they are likely to cause confusion if they are read from the .lynxrc file for
+# each session. However, they can be enabled or disabled using the
+# ENABLE_LYNXRC settings. The default (compiled-in) settings are shown below.
+# The second column is the name by which a setting is saved to .lynxrc (which
+# is chosen where possible to correspond with lynx.cfg). Use "OFF" to disable
+# writing a setting, "ON" to enable it. Settings are read from .lynxrc after
+# the corresponding data from lynx.cfg, so they override lynx.cfg, which is
+# probably what users expect.
+#
+# Note that a few settings (Cookies and Show images) are comprised of more than
+# one lynx.cfg setting.
+.nf
+#ENABLE_LYNXRC:DTD_recovery:OFF
+#ENABLE_LYNXRC:accept_all_cookies:ON
+#ENABLE_LYNXRC:assume_char_set:OFF
+#ENABLE_LYNXRC:bookmark_file:ON
+#ENABLE_LYNXRC:case_sensitive_searching:ON
+#ENABLE_LYNXRC:character_set:ON
+#ENABLE_LYNXRC:cookie_accept_domains:ON
+#ENABLE_LYNXRC:cookie_file:ON
+#ENABLE_LYNXRC:cookie_loose_invalid_domains:ON
+#ENABLE_LYNXRC:cookie_query_invalid_domains:ON
+#ENABLE_LYNXRC:cookie_reject_domains:ON
+#ENABLE_LYNXRC:cookie_strict_invalid_domains:ON
+#ENABLE_LYNXRC:dir_list_style:ON
+#ENABLE_LYNXRC:display:OFF
+#ENABLE_LYNXRC:emacs_keys:ON
+#ENABLE_LYNXRC:file_editor:ON
+#ENABLE_LYNXRC:file_sorting_method:ON
+#ENABLE_LYNXRC:kblayout:ON
+#ENABLE_LYNXRC:keypad_mode:ON
+#ENABLE_LYNXRC:lineedit_mode:ON
+#ENABLE_LYNXRC:make_pseudo_alts_for_inlines:OFF
+#ENABLE_LYNXRC:make_links_for_all_images:OFF
+#ENABLE_LYNXRC:multi_bookmark:ON
+#ENABLE_LYNXRC:personal_mail_address:ON
+#ENABLE_LYNXRC:preferred_charset:ON
+#ENABLE_LYNXRC:preferred_language:ON
+#ENABLE_LYNXRC:raw_mode:OFF
+#ENABLE_LYNXRC:run_all_execution_links:ON
+#ENABLE_LYNXRC:run_execution_links_on_local_files:ON
+#ENABLE_LYNXRC:select_popups:ON
+#ENABLE_LYNXRC:set_cookies:OFF
+#ENABLE_LYNXRC:show_color:ON
+#ENABLE_LYNXRC:show_cursor:ON
+#ENABLE_LYNXRC:show_dotfiles:ON
+#ENABLE_LYNXRC:show_rate:OFF
+#ENABLE_LYNXRC:sub_bookmarks:ON
+#ENABLE_LYNXRC:user_agent:OFF
+#ENABLE_LYNXRC:user_mode:ON
+#ENABLE_LYNXRC:verbose_images:ON
+#ENABLE_LYNXRC:vi_keys:ON
+#ENABLE_LYNXRC:visited_links:ON
+.fi
diff --git a/gnu/usr.bin/lynx/lynx.hlp b/gnu/usr.bin/lynx/lynx.hlp
index bc2ca656a0d..843cb202725 100644
--- a/gnu/usr.bin/lynx/lynx.hlp
+++ b/gnu/usr.bin/lynx/lynx.hlp
@@ -1,489 +1,698 @@
1 LYNX
- NAME
- lynx - a general purpose distributed information browser for the World
- Wide Web
-
-2 SYNOPSIS
- Lynx [options] [path or URL]
-
- use "lynx -help" to display a complete list of current options.
-
-2 DESCRIPTION
- Lynx is a fully-featured World Wide Web (WWW) client for users running
- cursor-addressable, character-cell display devices (e.g., vt100 terminals,
- vt100 emulators running on PCs or Macs, or any other "curses-oriented"
- display). It will display hypertext markup language (HTML) documents con-
- taining links to files residing on the local system, as well as files
- residing on remote systems running Gopher, HTTP, FTP, WAIS, and NNTP
- servers. Current versions of Lynx run on Unix, VMS, Windows95/NT,
- 386DOS and OS/2 EMX.
-
- Lynx can be used to access information on the World Wide Web, or to build
- information systems intended primarily for local access. For example, Lynx
- has been used to build several Campus Wide Information Systems (CWIS). In
- addition, Lynx can be used to build systems isolated within a single LAN.
-
-2 OPTIONS
- At start up, Lynx will load any local file or remote URL specified at
- the command line. For help with URLs, press "?" or "h" while running
- Lynx. Then follow the link titled, "Help on URLs."
-
- -
- If the argument is only '-', then Lynx expects to receive
- arguments from stdin. This is to allow for the potentially
- very long command line that can be associated with the
- -get_data or -post_data arguments (see below). Encase it
- in double-quotes ("-").
-
- -accept_all_cookies
- accept all cookies.
+2 Name
+ lynx - a general purpose distributed information browser
+ for the World Wide Web
+
+2 Synopsis
+ lynx [options] [path or URL]
+
+ use "lynx -help" to display a complete list of current
+ options.
+
+2 Description
+ Lynx is a fully-featured World Wide Web (WWW) client for
+ users running cursor-addressable, character-cell display
+ devices (e.g., vt100 terminals, vt100 emulators running on
+ Windows 95/NT or Macintoshes, or any other "curses-
+ oriented" display). It will display hypertext markup
+ language (HTML) documents containing links to files
+ residing on the local system, as well as files residing on
+ remote systems running Gopher, HTTP, FTP, WAIS, and NNTP
+ servers. Current versions of Lynx run on Unix, VMS,
+ Windows 95/NT, 386DOS and OS/2 EMX.
+
+ Lynx can be used to access information on the World Wide
+ Web, or to build information systems intended primarily
+ for local access. For example, Lynx has been used to
+ build several Campus Wide Information Systems (CWIS). In
+ addition, Lynx can be used to build systems isolated
+ within a single LAN.
+
+2 Options
+ At start up, Lynx will load any local file or remote URL
+ specified at the command line. For help with URLs, press
+ "?" or "H" while running Lynx. Then follow the link
+ titled, "Help on URLs."
+
+ Lynx uses only long option names. Option names can begin
+ with double dash as well, underscores and dashes can be
+ intermixed in option names (in the reference below options
+ are with one dash before them and with underscores).
+
+ - If the argument is only '-', then Lynx expects to
+ receive the arguments from stdin. This is to allow
+ for the potentially very long command line that can
+ be associated with the -get_data or -post_data
+ arguments (see below). It can also be used to
+ avoid having sensitive information in the invoking
+ command line (which would be visible to other
+ processes on most systems), especially when the
+ -auth or -pauth options are used.
+
+ -accept_all_cookies
+ accept all cookies.
+
+ -anonymous
+ apply restrictions for anonymous account, see also
+ -restrictions.
+
+ -assume_charset=MIMEname
+ charset for documents that don't specify it.
+
+ -assume_local_charset=MIMEname
+ charset assumed for local files.
+
+ -assume_unrec_charset=MIMEname
+ use this instead of unrecognized charsets.
+
+ -auth=ID:PASSWD
+ set authorization ID and password for protected
+ documents at startup. Be sure to protect any
+ script files which use this switch.
+
+ -base prepend a request URL comment and BASE tag to
+ text/html outputs for -source dumps.
+
+ -bibp=URL
+ specify a local bibp server (default
+ http://bibhost/).
+
+ -blink forces high intensity background colors for color
+ mode, if available and supported by the terminal.
+ This applies to the slang library (for a few
+ terminal emulators), or to OS/2 EMX with ncurses.
+
+ -book use the bookmark page as the startfile. The
+ default or command line startfile is still set for
+ the Main screen command, and will be used if the
+ bookmark page is unavailable or blank.
+
+ -buried_news
+ toggles scanning of news articles for buried
+ references, and converts them to news links. Not
+ recommended because email addresses enclosed in
+ angle brackets will be converted to false news
+ links, and uuencoded messages can be trashed.
+
+ -cache=NUMBER
+ set the NUMBER of documents cached in memory. The
+ default is 10.
+
+ -case enable case-sensitive string searching.
+
+ -center
+ Toggle center alignment in HTML TABLE.
+
+ -cfg=FILENAME
+ specifies a Lynx configuration file other than the
+ default lynx.cfg.
+
+ -child exit on left-arrow in startfile, and disable save
+ to disk.
+
+ -cmd_log=FILENAME
+ write keystroke commands and related information to
+ the specified file.
+
+ -cmd_script=FILENAME
+ read keystroke commands from the specified file.
+ You can use the data written using the -cmd_log
+ option. Lynx will ignore other information which
+ the command-logging may have written to the
+ logfile.
+
+ -color forces color mode on, if available. Default color
+ control sequences which work for many terminal
+ types are assumed if the terminal capability
+ description does not specify how to handle color.
+ Lynx needs to be compiled with the slang library
+ for this flag, it is equivalent to setting the
+ COLORTERM environment variable. (If color support
+ is instead provided by a color-capable curses
+ library like ncurses, Lynx relies completely on the
+ terminal description to determine whether color
+ mode is possible, and this flag is not needed and
+ thus unavailable.) A saved show_color=always
+ setting found in a .lynxrc file at startup has the
+ same effect. A saved show_color=never found in
+ .lynxrc on startup is overridden by this flag.
+
+ -connect_timeout=N
+ Sets the connection timeout, where N is given in
+ seconds. This is not available under DOS (use the
+ sockdelay parameter of WATTCP under DOS).
- -anonymous
- used to specify the anonymous account.
+ -cookie_file=FILENAME
+ specifies a file to use to read cookies. If none
+ is specified, the default value is ~/.lynx_cookies
+ for most systems, but ~/cookies for MS-DOS.
- -assume_charset=MIMEname
- charset for documents that don't specify it.
+ -cookie_save_file=FILENAME
+ specifies a file to use to store cookies. If none
+ is specified, the value given by -cookie_file is
+ used.
- -assume_local_charset=MIMEname
- charset assumed for local files.
+ -cookies
+ toggles handling of Set-Cookie headers.
- -assume_unrec_charset=MIMEname
- use this instead of unrecognized charsets.
+ -core toggles forced core dumps on fatal errors.
- -auth=ID:PASSWD
- set authorization ID and password for protected documents
- at startup. Be sure to protect any script files which use
- this switch.
+ -crawl with -traversal, output each page to a file. with
+ -dump, format output as with -traversal, but to
+ stdout.
- -base
- prepend a request URL comment and BASE tag to text/html
- outputs for -source dumps.
+ -curses_pads
+ toggles the use of curses "pad" feature which
+ supports left/right scrolling of the display.
- -blink
- forces high intensity bg colors for color mode, if available
- and supported by the terminal.
- Lynx needs to be compiled with the slang library for this flag.
+ -debug_partial
+ separate incremental display stages with
+ MessageSecs delay
- -book
- use the bookmark page as the startfile. The default or command
- line startfile is still set for the Main screen command, and will
- be used if the bookmark page is unavailable or blank.
+ -display=DISPLAY
+ set the display variable for X rexec-ed programs.
- -buried_news
- toggles scanning of news articles for buried references, and
- converts them to news links. Not recommended because email
- addresses enclosed in angle brackets will be converted to
- false news links, and uuencoded messages can be trashed.
+ -display_charset=MIMEname
+ set the charset for the terminal output.
- -cache=NUMBER
- set the NUMBER of documents cached in memory. The default is 10.
+ -dont_wrap_pre
+ inhibit wrapping of text in <pre> when -dump'ing
+ and -crawl'ing, mark wrapped lines in interactive
+ session.
- -case
- enable case-sensitive string searching.
+ -dump dumps the formatted output of the default document
+ or one specified on the command line to standard
+ output. This can be used in the following way:
- -cfg=FILENAME
- specifies a Lynx configuration file other than the default lynx.cfg.
+ lynx -dump http://www.trill-home.com/lynx.html
- -child
- exit on left-arrow in startfile, and disable save to disk.
+ -editor=EDITOR
+ enable external editing, using the specified
+ EDITOR. (vi, ed, emacs, etc.)
- -color
- forces color mode on, if available. Default color control sequences
- which work for many terminal types are assumed if the terminal
- capability description does not specify how to handle color.
- Lynx needs to be compiled with the slang library for this flag.
- A saved show_color=always setting found in a .lynxrc file at
- startup has the same effect. A saved show_color=always found
- in .lynxrc on startup is overridden by this flag.
+ -emacskeys
+ enable emacs-like key movement.
- -cookies
- toggles handling of Set-Cookie headers.
+ -enable_scrollback
+ toggles compatibility with communication programs'
+ scrollback keys (may be incompatible with some
+ curses packages).
- -cookie_file=FILENAME
- specifies a file to use to store cookies.
+ -error_file=FILE
+ define a file where Lynx will report HTTP access
+ codes.
- -crawl
- with -traversal, output each page to a file.
- with -dump, format output as with -traversal, but to stdout.
+ -exec enable local program execution (normally not
+ configured).
- -debug_partial
- incremental display stages with MessageSecs delay
+ -fileversions
+ include all versions of files in local VMS
+ directory listings.
- -display=DISPLAY
- set the display variable for X rexec-ed programs.
+ -force_empty_hrefless_a
+ force HREF-less 'A' elements to be empty (close
+ them as soon as they are seen).
- -dump
- dumps the formatted output of the default document or one specified
- on the command line to standard out. This can be used in the
- following way:
- lynx -dump http://www.crl.com/~subir/lynx.html
+ -force_html
+ forces the first document to be interpreted as
- -editor=EDITOR
- enable edit mode using the specified EDITOR. (vi, ed, emacs, etc.)
+ HTML.
- -emacskeys
- enable emacs-like key movement.
+ -force_secure
+ toggles forcing of the secure flag for SSL cookies.
- -enable_scrollback
- toggles compatibility with comm programs' scrollback keys
- (may be incompatible with some curses packages).
+ -forms_options
+ toggles whether the Options Menu is key-based or
+ form-based.
- -error_file=FILE
- define a file where Lynx will report HTTP access codes.
+ -from toggles transmissions of From headers.
- -exec
- enable local program execution (normally not configured).
+ -ftp disable ftp access.
- -fileversions
- include all versions of files in local VMS directory listings.
+ -get_data
+ properly formatted data for a get form are read in
+ from stdin and passed to the form. Input is
+ terminated by a line that starts with '---'.
- -force_html
- forces the first document to be interpreted as HTML.
+ -head send a HEAD request for the mime headers.
- -force_secure
- toggles forcing of the secure flag for SSL cookies.
+ -help print the Lynx command syntax usage message.
- -forms_options
- toggles the style of options (menu or forms).
+ -hiddenlinks=[option]
+ control the display of hidden links.
- -from
- toggles transmissions of From headers.
+ merge hidden links show up as bracketed numbers and
+ are numbered together with other links in the
+ sequence of their occurrence in the document.
- -ftp
- disable ftp access.
+ listonly hidden links are shown only on L)ist
+ screens and listings generated by -dump or from the
+ P)rint menu, but appear separately at the end of
+ those lists. This is the default behavior.
- -get_data
- send form data from stdin using GET method and dump results.
+ ignore hidden links do not appear even in listings.
- -head
- send a HEAD request for the mime headers.
+ -historical
+ toggles use of '>' or '-->' as a terminator for
+ comments.
- -help
- print the Lynx command syntax usage message.
+ -homepage=URL
+ set homepage separate from start page.
- -hiddenlinks=[option]
- control the display of hidden links.
+ -image_links
+ toggles inclusion of links for all images.
- + merge
- hidden links show up as bracketed numbers and are numbered together
- with other links in the sequence of their occurrence in the document.
+ -index=URL
+ set the default index file to the specified URL.
- + listonly
- hidden links are shown only on L)ist screens and listings generated by
- -dump or from the P)rint menu, but appear separately at the end of
- those lists. This is the default behavior.
+ -ismap toggles inclusion of ISMAP links when client-side
+ MAPs are present.
- + ignore
- hidden links do not appear even in listings.
+ -justify
+ do justification of text.
- -historical
- toggles use of '>' or '-->' as a terminator for comments.
+ -link=NUMBER
+ starting count for lnk#.dat files produced by
+ -crawl.
- -homepage=URL
- set homepage separate from start page.
+ -localhost
+ disable URLs that point to remote hosts.
- -image_links
- toggles inclusion of links for all images.
+ -locexec
+ enable local program execution from local files
+ only (if Lynx was compiled with local execution
+ enabled).
- -index=URL
- set the default index file to the specified URL.
+ -lss=FILENAME
+ specify filename containing color-style
+ information. The default is lynx.lss.
- -ismap
- toggles inclusion of ISMAP links when client-side
- MAPs are present.
+ -mime_header
+ prints the MIME header of a fetched document along
+ with its source.
- -link=NUMBER
- starting count for lnk#.dat files produced by -crawl.
+ -minimal
+ toggles minimal versus valid comment parsing.
- -localhost
- disable URLs that point to remote hosts.
+ -newschunksize=NUMBER
+ number of articles in chunked news listings.
- -locexec
- enable local program execution from local files only (if
- Lynx was compiled with local execution enabled).
+ -newsmaxchunk=NUMBER
+ maximum news articles in listings before chunking.
- -mime_header
- prints the MIME header of a fetched document along with its
- source.
+ -nobold
+ disable bold video-attribute.
- -minimal
- toggles minimal versus valid comment parsing.
+ -nobrowse
+ disable directory browsing.
- -newschunksize=NUMBER
- number of articles in chunked news listings.
+ -nocc disable Cc: prompts for self copies of mailings.
+ Note that this does not disable any CCs which are
+ incorporated within a mailto URL or form ACTION.
- -newsmaxchunk=NUMBER
- maximum news articles in listings before chunking.
+ -nocolor
+ force color mode off, overriding terminal
+ capabilities and any -color flags, COLORTERM
+ variable, and saved .lynxrc settings.
- -nobrowse
- disable directory browsing.
+ -noexec
+ disable local program execution. (DEFAULT)
- -nocc
- disable Cc: prompts for self copies of mailings. Note
- that this does not disable any CCs which are incorporated
- within a mailto URL or form ACTION.
+ -nofilereferer
+ disable transmissions of Referer headers for file
+ URLs.
- -nocolor
- force color mode off, overriding terminal capabilities and any
- -color flags, COLORTERM variable, and saved .lynxrc settings.
+ -nolist
+ disable the link list feature in dumps.
- -noexec
- disable local program execution. (DEFAULT)
+ -nolog disable mailing of error messages to document
+ owners.
- -nofilereferer
- disable transmissions of Referer headers for file URLs.
+ -nonrestarting_sigwinch
+ This flag is not available on all systems, Lynx
+ needs to be compiled with HAVE_SIGACTION defined.
+ If available, this flag may cause Lynx to react
+ more immediately to window changes when run within
+ an xterm.
- -nolist
- disable the link list feature in dumps.
+ -nopause
+ disable forced pauses for statusline messages.
- -nolog
- disable mailing of error messages to document owners.
+ -noprint
+ disable most print functions.
- -nopause
- disable forced pauses for statusline messages.
+ -noredir
+ prevents automatic redirection and prints a message
+ with a link to the new URL.
- -noprint
- disable print functions.
+ -noreferer
+ disable transmissions of Referer headers.
- -noredir
- prevents automatic redirection and prints a message with a
- link to the new URL.
+ -noreverse
+ disable reverse video-attribute.
- -noreferer
- disable transmissions of Referer headers.
+ -nosocks
+ disable SOCKS proxy usage by a SOCKSified Lynx.
- -nosocks
- disable SOCKS proxy usage by a SOCKSified Lynx.
+ -nostatus
+ disable the retrieval status messages.
- -nostatus
- disable the retrieval status messages.
+ -nounderline
+ disable underline video-attribute.
- -number_links
- force numbering of links.
+ -number_fields
+ force numbering of links as well as form input
+ fields
- -partial
- display partial pages while downloading.
+ -number_links
+ force numbering of links.
- -partial_thres=NUMBER
- number of lines to render before repainting display
- with partial-display logic
+ -partial
+ toggles display partial pages while loading.
- -pauth=ID:PASSWD
- set authorization ID and password for a protected proxy
- server at startup. Be sure to protect any script files
- which use this switch.
+ -partial_thres=NUMBER
+ number of lines to render before repainting display
+ with partial-display logic
- -popup
- toggles handling of single-choice SELECT options via
- popup windows or as lists of radio buttons.
+ -pauth=ID:PASSWD
+ set authorization ID and password for a protected
+ proxy server at startup. Be sure to protect any
+ script files which use this switch.
- -post_data
- send form data from stdin using POST method and dump results.
+ -popup toggles handling of single-choice SELECT options
+ via popup windows or as lists of radio buttons.
- -preparsed
- show HTML source preparsed and reformatted when used with -source
- or in source view.
+ -post_data
+ properly formatted data for a post form are read in
+ from stdin and passed to the form. Input is
+ terminated by a line that starts with '---'.
- -print
- enable print functions. (default)
+ -preparsed
+ show HTML source preparsed and reformatted when
+ used with -source or in source view.
- -pseudo_inlines
- toggles pseudo-ALTs for inlines with no ALT string.
+ -prettysrc
+ show HTML source view with lexical elements and
+ tags in color.
- -raw
- toggles default setting of 8-bit character translations
- or CJK mode for the startup character set.
+ -print enable print functions. (default)
- -realm
- restricts access to URLs in the starting realm.
+ -pseudo_inlines
+ toggles pseudo-ALTs for inlines with no ALT string.
- -reload
- flushes the cache on a proxy server
- (only the first document affected).
+ -raw toggles default setting of 8-bit character
+ translations or CJK mode for the startup character
+ set.
- -restrictions=[option][,,option]...
- allows a list of services to be disabled selectively. The following
- list is printed if no options are specified.
+ -realm restricts access to URLs in the starting realm.
- all - restricts all options.
+ -reload
+ flushes the cache on a proxy server (only the first
+ document affected).
- bookmark - disallow changing the location of the bookmark file.
+ -restrictions=[option][,option][,option]...
+ allows a list of services to be disabled
+ selectively. Dashes and underscores in option names
+ can be intermixed. The following list is printed if
+ no options are specified.
- bookmark_exec - disallow execution links via the bookmark file.
+ all - restricts all options listed below.
- change_exec_perms - disallow changing the eXecute permission on
- files (but still allow it for directories) when local file
- management is enabled.
+ bookmark - disallow changing the location of the
+ bookmark file.
- default - same as command line option -anonymous. Disables default
- services for anonymous users. Currently set to all restricted
- except for: inside_telnet, outside_telnet, inside_news,
- inside_ftp, outside_ftp, inside_rlogin, outside_rlogin, jump,
- mail and goto. Defaults are setable within userdefs.h.
+ bookmark_exec - disallow execution links via the
+ bookmark file.
- dired_support - disallow local file management.
+ change_exec_perms - disallow changing the eXecute
+ permission on files (but still allow it for
+ directories) when local file management is enabled.
- disk_save - disallow saving to disk in the download and print
- menus.
+ default - same as command line option -anonymous.
+ Disables default services for anonymous users. Set
+ to all restricted, except for: inside_telnet,
+ outside_telnet, inside_ftp, outside_ftp,
+ inside_rlogin, outside_rlogin, inside_news,
- download - disallow downloaders in the download menu.
+ outside_news, telnet_port, jump, mail, print, exec,
+ and goto. The settings for these, as well as
+ additional goto restrictions for specific URL
+ schemes that are also applied, are derived from
+ definitions within userdefs.h.
- editor - disallow editing.
+ dired_support - disallow local file management.
- exec - disable execution scripts.
+ disk_save - disallow saving to disk in the download
+ and print menus.
- exec_frozen - disallow the user from changing the local execution
- option.
+ dotfiles - disallow access to, or creation of,
+ hidden (dot) files.
- file_url - disallow using G)oto, served links or bookmarks for
- file: URLs.
+ download - disallow some downloaders in the
+ download menu (does not imply disk_save
+ restriction).
- goto - disable the 'g' (goto) command.
+ editor - disallow external editing.
- inside_ftp - disallow ftps for people coming from inside your domain
- (utmp required for selectivity).
+ exec - disable execution scripts.
- inside_news - disallow USENET news posting for people coming from
- inside our domain (utmp required for selectivity).
+ exec_frozen - disallow the user from changing the
+ local execution option.
- inside_rlogin - disallow rlogins for people coming from inside your
- domain (utmp required for selectivity).
+ externals - disallow some "EXTERNAL" configuration
+ lines if support for passing URLs to external
+ applications (with the EXTERN command) is compiled
+ in.
- inside_telnet - disallow telnets for people coming from inside your
- domain (utmp required for selectivity).
+ file_url - disallow using G)oto, served links or
+ bookmarks for file: URLs.
- jump - disable the 'j' (jump) command.
+ goto - disable the 'g' (goto) command.
- multibook - disallow multiple bookmark files.
+ inside_ftp - disallow ftps for people coming from
+ inside your domain (utmp required for selectivity).
- mail - disallow mail.
+ inside_news - disallow USENET news posting for
+ people coming from inside your domain (utmp
+ required for selectivity).
- news_post - disallow USENET News posting.
+ inside_rlogin - disallow rlogins for people coming
+ from inside your domain (utmp required for
+ selectivity).
- options_save - disallow saving options in .lynxrc.
+ inside_telnet - disallow telnets for people coming
+ from inside your domain (utmp required for
+ selectivity).
- outside_ftp - disallow ftps for people coming from outside your
- domain (utmp required for selectivity).
+ jump - disable the 'j' (jump) command.
- outside_news - disallow USENET news posting for people coming from
- outside your domain (utmp required for selectivity).
+ multibook - disallow multiple bookmarks.
+ mail - disallow mail.
- outside_rlogin - disallow rlogins for people coming from outside your
- domain (utmp required for selectivity).
+ news_post - disallow USENET News posting.
- outside_telnet - disallow telnets for people coming from outside your
- domain (utmp required for selectivity).
+ options_save - disallow saving options in .lynxrc.
- print - disallow most print options.
+ outside_ftp - disallow ftps for people coming from
+ outside your domain (utmp required for
+ selectivity).
- shell - disallow shell escapes and lynxexec or lynxprog G)oto's.
+ outside_news - disallow USENET news reading and
+ posting for people coming from outside your domain
+ (utmp required for selectivity). This restriction
+ applies to "news", "nntp", "newspost", and
+ "newsreply" URLs, but not to "snews", "snewspost",
+ or "snewsreply" in case they are supported.
- suspend - disallow Unix Control-Z suspends with escape to shell.
+ outside_rlogin - disallow rlogins for people coming
+ from outside your domain (utmp required for
+ selectivity).
- telnet_port - disallow specifying a port in telnet G)oto's.
+ outside_telnet - disallow telnets for people coming
+ from outside your domain (utmp required for
+ selectivity).
- useragent - disallow modifications of the User-Agent header.
+ print - disallow most print options.
- -resubmit_posts
- toggles forced resubmissions (no-cache) of forms with
- method POST when the documents they returned are sought
- with the PREV_DOC command or from the History List.
+ shell - disallow shell escapes and lynxexec or
+ lynxprog G)oto's.
- -rlogin
- disable recognition of rlogin commands.
+ suspend - disallow Unix Control-Z suspends with
+ escape to shell.
- -selective
- require .www_browsable files to browse directories.
+ telnet_port - disallow specifying a port in telnet
+ G)oto's.
- -show_cursor
- If enabled the cursor will not be hidden in the right hand corner
- but will instead be positioned at the start of the currently
- selected link. Show cursor is the default for systems without
- FANCY_CURSES capabilities. The default configuration can be
- changed in userdefs.h or lynx.cfg. The command line switch
- toggles the default.
+ useragent - disallow modifications of the User-
+ Agent header.
- -soft_dquotes
- toggles emulation of the old Netscape and Mosaic bug which
- treated '>' as a co-terminator for double-quotes and tags.
+ -resubmit_posts
+ toggles forced resubmissions (no-cache) of forms
+ with method POST when the documents they returned
+ are sought with the PREV_DOC command or from the
+ History List.
- -source
- works the same as dump but outputs HTML source instead of formatted
- text.
+ -rlogin
+ disable recognition of rlogin commands.
- -stack_dump
- disable SIGINT cleanup handler
+ -scrollbar
+ toggles showing scrollbar.
- -startfile_ok
- allow non-http startfile and homepage with -validate.
+ -scrollbar_arrow
+ toggles showing arrows at ends of the scrollbar.
- -tagsoup
- initialize parser, using Tag Soup DTD rather than SortaSGML.
+ -selective
+ require .www_browsable files to browse directories.
- -telnet
- disable recognition of telnet commands.
+ -short_url
+ show very long URLs in the status line with "..."
+ to represent the portion which cannot be displayed.
+ The beginning and end of the URL are displayed,
+ rather than suppressing the end.
- -term=TERM
- tell Lynx what terminal type to assume its talking to. (This may be
- useful for remote execution, when, for example, Lynx connects to a
- remote TCP/IP port that starts a script that, in turn, starts another
- Lynx process.)
+ -show_cursor
+ If enabled the cursor will not be hidden in the
+ right hand corner but will instead be positioned at
+ the start of the currently selected link. Show
+ cursor is the default for systems without
+ FANCY_CURSES capabilities. The default
+ configuration can be changed in userdefs.h or
+ lynx.cfg. The command line switch toggles the
+ default.
+
+ -show_rate
+ If enabled the transfer rate is shown in
+ bytes/second. If disabled, no transfer rate is
+ shown. Use lynx.cfg or the options menu to select
+ KB/second and/or ETA.
- -tlog
- toggles use of a Lynx Trace Log for the current session.
-
- -trace
- turns on WWW trace mode.
-
- -traversal
- traverse all http links derived from startfile. When used with
- -crawl, each link that begins with the same string as startfile
- is output to a file, intended for indexing. See CRAWL.announce
- for more information.
-
- -underscore
- toggles use of _underline_ format in dumps.
-
- -use_mouse
- turn on xterm mouse support.
- Clicking the left mouse button on a link traverses it.
- Clicking the right mouse button pops back.
- Click in the first line of a page to scroll up.
- Click in the last line of a page to scroll down.
- Lynx must be compiled with ncurses or slang to support this feature.
-
- -useragent=Name
- set alternate Lynx User-Agent header.
-
- -validate
- accept only http URLs (for validation). Complete security
- restrictions also are implemented.
-
- -verbose
- taggles [LINK], [IMAGE] and [INLINE] comments
- with filenames of these images.
-
- -version
- print version information.
-
- -vikeys
- enable vi-like key movement.
-
- -width=NUMBER
- number of columns for formatting of dumps, default is 80.
-
-2 COMMANDS
- o Use Up arrow and Down arrow to scroll through hypertext links.
- o Right arrow or Return will follow a highlighted hypertext link.
- o Left Arrow will retreat from a link.
- o Type "H" or "?" for online help and descriptions of key-stroke commands.
- o Type "K" for a complete list of the current key-stroke command mappings.
-
-2 ENVIRONMENT
+ -soft_dquotes
+ toggles emulation of the old Netscape and Mosaic
+ bug which treated '>' as a co-terminator for
+ double-quotes and tags.
+
+ -source
+ works the same as dump but outputs HTML source
+ instead of formatted text.
+
+ -stack_dump
+ disable SIGINT cleanup handler
+
+ -startfile_ok
+ allow non-http startfile and homepage with
+ -validate.
+
+ -stdin read the startfile from standard input (UNIX only).
+
+ -syslog=text
+ information for syslog call.
+
+ -tagsoup
+ initialize parser, using Tag Soup DTD rather than
+ SortaSGML.
+
+ -telnet
+ disable recognition of telnet commands.
+
+ -term=TERM
+ tell Lynx what terminal type to assume it is
+ talking to. (This may be useful for remote
+ execution, when, for example, Lynx connects to a
+ remote TCP/IP port that starts a script that, in
+ turn, starts another Lynx process.)
+
+ -timeout=N
+ For win32, sets the network read-timeout, where N
+ is given in seconds.
+
+ -tlog toggles between using a Lynx Trace Log and stderr
+ for trace output from the session.
+
+ -tna turns on "Textfields Need Activation" mode.
+
+ -trace turns on Lynx trace mode. Destination of trace
+ output depends on -tlog.
+
+ -trace_mask=value
+ turn on optional traces, which may result in very
+ large trace files. Logically OR the values to
+ combine options:
+ 1=SGML character parsing states
+ 2=color-style
+ 4=TRST (table layout)
+
+ -traversal
+ traverse all http links derived from startfile.
+ When used with -crawl, each link that begins with
+ the same string as startfile is output to a file,
+ intended for indexing. See CRAWL.announce for more
+ information.
+
+ trim_input_fields
+ trim input text/textarea fields in forms.
+
+ -underscore
+ toggles use of _underline_ format in dumps.
+
+ -use_mouse
+ turn on mouse support, if available. Clicking the
+ left mouse button on a link traverses it. Clicking
+ the right mouse button pops back. Click on the top
+ line to scroll up. Click on the bottom line to
+ scroll down. The first few positions in the top
+ and bottom line may invoke additional functions.
+ Lynx must be compiled with ncurses or slang to
+ support this feature. If ncurses is used, clicking
+ the middle mouse button pops up a simple menu.
+ Mouse clicks may only work reliably while Lynx is
+ idle waiting for input.
+
+ -useragent=Name
+ set alternate Lynx User-Agent header.
+
+ -validate
+ accept only http URLs (for validation). Complete
+ security restrictions also are implemented.
+
+ -verbose
+ toggle [LINK], [IMAGE] and [INLINE] comments with
+ filenames of these images.
+
+ -version
+ print version information.
+
+ -vikeys
+ enable vi-like key movement.
+
+ -wdebug
+ enable Waterloo tcp/ip packet debug (print to watt
+ debugfile). This applies only to DOS versions
+ compiled with WATTCP or WATT-32.
+
+ -width=NUMBER
+ number of columns for formatting of dumps, default
+ is 80.
+
+ -with_backspaces
+ emit backspaces in output if -dumping or -crawling
+ (like 'man' does)
+
+2 Commands
+ o Use Up arrow and Down arrow to scroll through hypertext
+ links.
+ o Right arrow or Return will follow a highlighted
+ hypertext link.
+ o Left Arrow will retreat from a link.
+ o Type "H" or "?" for online help and descriptions of key-
+ stroke commands.
+ o Type "K" for a complete list of the current key-stroke
+ command mappings.
+
+2 Environment
In addition to various "standard" environment variables
- such as HOME, PATH, USER, DISPLAY, TMPDIR, etc, Lynx uti-
- lizes several Lynx-specific environment variables, if they
- exist.
+ such as HOME, PATH, USER, DISPLAY, TMPDIR, etc, Lynx
+ utilizes several Lynx-specific environment variables, if
+ they exist.
Others may be created or modified by Lynx to pass data to
an external program, or for other reasons. These are
@@ -498,10 +707,10 @@
Environment Variables Used By Lynx:
- COLORTERM If set, color capability for the ter-
- minal is forced on at startup time.
- The actual value assigned to the vari-
- able is ignored. This variable is
+ COLORTERM If set, color capability for the
+ terminal is forced on at startup time.
+ The actual value assigned to the
+ variable is ignored. This variable is
only meaningful if Lynx was built
using the slang screen-handling
library.
@@ -525,53 +734,55 @@
the default path prefix for files
saved to disk that is defined in the
lynx.cfg SAVE_SPACE: statement. See
- the lynx.cfg file for more informa-
- tion.
+ the lynx.cfg file for more
+ information.
LYNX_TEMP_SPACE This variable, if set, will override
the default path prefix for temporary
- files that was defined during instal-
- lation, as well as any value that may
- be assigned to the TMPDIR variable.
+ files that was defined during
+ installation, as well as any value
+ that may be assigned to the TMPDIR
+ variable.
- MAIL This variable specifies the default
+ MAIL This variable specifies the default
inbox Lynx will check for new mail, if
- such checking is enabled in the
+ such checking is enabled in the
lynx.cfg file.
- NEWS_ORGANIZATION This variable, if set, provides the
- string used in the Organization:
- header of USENET news postings. It
- will override the setting of the ORGA-
- NIZATION environment variable, if it
- is also set (and, on UNIX, the con-
- tents of an /etc/organization file, if
- present).
-
- NNTPSERVER If set, this variable specifies the
- default NNTP server that will be used
- for USENET news reading and posting
+ NEWS_ORGANIZATION This variable, if set, provides the
+ string used in the Organization:
+ header of USENET news postings. It
+ will override the setting of the
+ ORGANIZATION environment variable, if
+ it is also set (and, on UNIX, the
+
+ contents of an /etc/organization file,
+ if present).
+
+ NNTPSERVER If set, this variable specifies the
+ default NNTP server that will be used
+ for USENET news reading and posting
with Lynx, via news: URL's.
- ORGANIZATION This variable, if set, provides the
- string used in the Organization:
- header of USENET news postings. On
+ ORGANIZATION This variable, if set, provides the
+ string used in the Organization:
+ header of USENET news postings. On
UNIX, it will override the contents of
an /etc/organization file, if present.
PROTOCOL_proxy Lynx supports the use of proxy servers
- that can act as firewall gateways and
- caching servers. They are preferable
+ that can act as firewall gateways and
+ caching servers. They are preferable
to the older gateway servers (see
- WWW_access_GATEWAY, below). Each pro-
- tocol used by Lynx, (http, ftp,
+ WWW_access_GATEWAY, below). Each
+ protocol used by Lynx, (http, ftp,
gopher, etc), can be mapped separately
- by setting environment variables of
+ by setting environment variables of
the form PROTOCOL_proxy (literally:
http_proxy, ftp_proxy, gopher_proxy,
- etc), to
- "http://some.server.dom:port/".
- See Lynx Users Guide for additional
+ etc), to
+ "http://some.server.dom:port/". See
+ Lynx Users Guide for additional
details and examples.
WWW_access_GATEWAY Lynx still supports use of gateway
@@ -582,60 +793,66 @@
however most gateway servers have been
discontinued. Note that you do not
include a terminal '/' for gateways,
- but do for proxies specified by PROTO-
- COL_proxy environment variables. See
- Lynx Users Guide for details.
+ but do for proxies specified by
+ PROTOCOL_proxy environment variables.
+ See Lynx Users Guide for details.
- WWW_HOME This variable, if set, will override
- the default startup URL specified in
+ WWW_HOME This variable, if set, will override
+ the default startup URL specified in
any of the Lynx configuration files.
Environment Variables Set or Modified By Lynx:
LYNX_PRINT_DATE This variable is set by the Lynx
- p(rint) function, to the Date: string
- seen in the document's "Information
- about" page (= cmd), if any. It is
- created for use by an external pro-
- gram, as defined in a lynx.cfg
+ p(rint) function, to the Date: string
+ seen in the document's "Information
+ about" page (= cmd), if any. It is
+ created for use by an external
+ program, as defined in a lynx.cfg
PRINTER: definition statement. If the
field does not exist for the document,
- the variable is set to a null string
+ the variable is set to a null string
under UNIX, or "No Date" under VMS.
LYNX_PRINT_LASTMOD This variable is set by the Lynx
- p(rint) function, to the Last Mod:
- string seen in the document's "Infor-
- mation about" page (= cmd), if any.
- It is created for use by an external
- program, as defined in a lynx.cfg
- PRINTER: definition statement. If the
- field does not exist for the document,
- the variable is set to a null string
- under UNIX, or "No LastMod" under VMS.
+ p(rint) function, to the Last Mod:
+ string seen in the document's
+ "Information about" page (= cmd), if
+ any. It is created for use by an
+ external program, as defined in a
+ lynx.cfg PRINTER: definition
+ statement. If the field does not
+ exist for the document, the variable
+ is set to a null string under UNIX, or
+ "No LastMod" under VMS.
LYNX_PRINT_TITLE This variable is set by the Lynx
p(rint) function, to the Linkname:
- string seen in the document's "Infor-
- mation about" page (= cmd), if any.
- It is created for use by an external
- program, as defined in a lynx.cfg
- PRINTER: definition statement. If the
- field does not exist for the document,
- the variable is set to a null string
- under UNIX, or "No Title" under VMS.
+ string seen in the document's
+ "Information about" page (= cmd), if
+ any. It is created for use by an
+ external program, as defined in a
+ lynx.cfg PRINTER: definition
+ statement. If the field does not
+ exist for the document, the variable
+ is set to a null string under UNIX, or
+ "No Title" under VMS.
LYNX_PRINT_URL This variable is set by the Lynx
p(rint) function, to the URL: string
seen in the document's "Information
about" page (= cmd), if any. It is
- created for use by an external pro-
- gram, as defined in a lynx.cfg
+ created for use by an external
+ program, as defined in a lynx.cfg
PRINTER: definition statement. If the
field does not exist for the document,
the variable is set to a null string
under UNIX, or "No URL" under VMS.
+ LYNX_TRACE If set, causes Lynx to write a trace
+ file as if the -trace option were
+ supplied.
+
LYNX_VERSION This variable is always set by Lynx,
and may be used by an external program
to determine if it was invoked by
@@ -645,26 +862,27 @@
TERM Normally, this variable is used by
Lynx to determine the terminal type
- being used to invoke Lynx. If, how-
- ever, it is unset at startup time (or
- has the value "unknown"), or if the
- -term command-line option is used (see
- OPTIONS section above), Lynx will set
- or modify its value to the user speci-
- fied terminal type (for the Lynx exe-
- cution environment). Note: If
+ being used to invoke Lynx. If,
+ however, it is unset at startup time
+
+ (or has the value "unknown"), or if
+ the -term command-line option is used
+ (see OPTIONS section above), Lynx will
+ set or modify its value to the user
+ specified terminal type (for the Lynx
+ execution environment). Note: If
set/modified by Lynx, the values of
the LINES and/or COLUMNS environment
variables may also be changed.
-2 SIMULATED CGI SUPPORT
- If built with the cgi-links option enabled, Lynx allows
- access to a cgi script directly without the need for an
+2 Simulated Cgi Support
+ If built with the cgi-links option enabled, Lynx allows
+ access to a cgi script directly without the need for an
http daemon.
- When executing such "lynxcgi scripts" (if enabled), the
- following variables may be set for simulating a CGI envi-
- ronment:
+ When executing such "lynxcgi scripts" (if enabled), the
+ following variables may be set for simulating a CGI
+ environment:
CONTENT_LENGTH
@@ -692,72 +910,74 @@
SERVER_SOFTWARE
- Other environment variables are not inherited by the
+ Other environment variables are not inherited by the
script, unless they are provided via a LYNXCGI_ENVIRONMENT
- statement in the configuration file. See the lynx.cfg
- file, and the (draft) CGI 1.1 Specification
+ statement in the configuration file. See the lynx.cfg
+ file, and the (draft) CGI 1.1 Specification
<http://Web.Golux.Com/coar/cgi/draft-coar-cgi-v11-00.txt>
for the definition and usage of these variables.
The CGI Specification, and other associated documentation,
- should be consulted for general information on CGI script
+ should be consulted for general information on CGI script
programming.
-2 NATIVE LANGUAGE SUPPORT
- If configured and installed with Native Language Support,
- Lynx will display status and other messages in your local
- language. See the file ABOUT_NLS in the source distribu-
- tion, or at your local GNU site, for more information
- about internationalization.
+2 Native Language Support
+ If configured and installed with Native Language Support,
+ Lynx will display status and other messages in your local
+ language. See the file ABOUT_NLS in the source
+ distribution, or at your local GNU site, for more
+ information about internationalization.
- The following environment variables may be used to alter
+ The following environment variables may be used to alter
default settings:
- LANG This variable, if set, will override
- the default message language. It is
+ LANG This variable, if set, will override
+ the default message language. It is
an ISO 639 two-letter code identifying
- the language. Language codes are NOT
+ the language. Language codes are NOT
the same as the country codes given in
ISO 3166.
- LANGUAGE This variable, if set, will override
+ LANGUAGE This variable, if set, will override
the default message language. This is
- a GNU extension that has higher prior-
- ity for setting the message catalog
- than LANG or LC_ALL.
+ a GNU extension that has higher
+ priority for setting the message
+ catalog than LANG or LC_ALL.
LC_ALL and
- LC_MESSAGES These variables, if set, specify the
- notion of native language formatting
+ LC_MESSAGES These variables, if set, specify the
+ notion of native language formatting
style. They are POSIXly correct.
- LINGUAS This variable, if set prior to config-
- uration, limits the installed lan-
- guages to specific values. It is a
- space-separated list of two-letter
+ LINGUAS This variable, if set prior to
+ configuration, limits the installed
+ languages to specific values. It is a
+ space-separated list of two-letter
codes. Currently, it is hard-coded to
a wish list.
- NLSPATH This variable, if set, is used as the
+ NLSPATH This variable, if set, is used as the
path prefix for message catalogs.
-2 NOTES
- This is the Lynx v2.8.2 Release
+2 Notes
+ This is the Lynx v2.8.4 Release
- If you wish to contribute to the further development of Lynx, subscribe
- to our mailing list. Send email to <majordomo@sig.net> with
- "subscribe lynx-dev" as the only line in the body of your
- message.
+ If you wish to contribute to the further development of
+ Lynx, subscribe to our mailing list. Send email to
+ <majordomo@sig.net> with "subscribe lynx-dev" as the only
+ line in the body of your message.
- Send bug reports, comments, suggestions to <lynx-dev@sig.net>
- after subscribing.
+ Send bug reports, comments, suggestions to <lynx-
+ dev@sig.net> after subscribing.
- Unsubscribe by sending email to <majordomo@sig.net> with
- "unsubscribe lynx-dev" as the only line in the body of your message.
- Do not send the unsubscribe message to the lynx-dev list, itself.
+ Unsubscribe by sending email to <majordomo@sig.net> with
+ "unsubscribe lynx-dev" as the only line in the body of
-2 SEE ALSO
+ your message. Do not send the unsubscribe message to the
+ lynx-dev list, itself.
+
+2 See Also
catgets(3), curses(3), environ(7), execve(2), ftp(1),
gettext(GNU), localeconv(3), ncurses(3), setlocale(3),
slang(?), termcap(5), terminfo(5), wget(GNU)
@@ -768,38 +988,42 @@
A section shown as (GNU), is intended to denote that the
topic may be available via an info page, instead of a man
- page (ie, try "info subject", rather than "man subject").
+ page (i.e., try "info subject", rather than "man subject").
A section shown as (?) denotes that documentation on the
- topic exists, but is not part of an established documenta-
- tion retrieval system (see the distribution files associ-
- ated with the topic, or contact your System Administrator
+ topic exists, but is not part of an established documentation
+ retrieval system (see the distribution files associated
+ with the topic, or contact your System Administrator
for further information).
-2 ACKNOWLEDGMENTS
- Lynx has incorporated code from a variety of sources along the way.
- The earliest versions of Lynx included code from Earl Fogel of Computing
- Services at the University of Saskatchewan, who implemented HYPERREZ
- in the Unix environment. HYPERREZ was developed by Niel Larson of
- Think.com and served as the model for the early versions of Lynx.
- Those versions also incorporated libraries from the Unix Gopher clients
- developed at the University of Minnesota, and the later versions of
- Lynx rely on the WWW client library code developed by Tim Berners-Lee
- and the WWW community. Also a special thanks to Foteos Macrides who
- ported much of Lynx to VMS and did or organized most of its development
- since the departures of Lou Montulli and Garrett Blythe from the
- University of Kansas in the summer of 1994 through the release
- of v2.7.2, and to everyone on the net who has contributed to Lynx's
- development either directly (through patches, comments or bug reports)
- or indirectly (through inspiration and development of other systems).
-
-2 AUTHORS
- Lou Montulli, Garrett Blythe, Craig Lavender, Michael Grobe, Charles Rezac
- Academic Computing Services
- University of Kansas
- Lawrence, Kansas 66047
-
- Foteos Macrides
- Worcester Foundation for Biomedical Research
- Shrewsbury, Massachusetts 01545
-
+2 Acknowledgments
+ Lynx has incorporated code from a variety of sources along
+ the way. The earliest versions of Lynx included code from
+ Earl Fogel of Computing Services at the University of
+ Saskatchewan, who implemented HYPERREZ in the Unix envi-
+ ronment. HYPERREZ was developed by Niel Larson of
+ Think.com and served as the model for the early versions
+ of Lynx. Those versions also incorporated libraries from
+ the Unix Gopher clients developed at the University of
+ Minnesota, and the later versions of Lynx rely on the WWW
+ client library code developed by Tim Berners-Lee and the
+ WWW community. Also a special thanks to Foteos Macrides
+ who ported much of Lynx to VMS and did or organized most
+ of its development since the departures of Lou Montulli
+ and Garrett Blythe from the University of Kansas in the
+ summer of 1994 through the release of v2.7.2, and to ev-
+ eryone on the net who has contributed to Lynx's develop-
+ ment either directly (through patches, comments or bug re-
+ ports) or indirectly (through inspiration and development
+ of other systems).
+
+2 Authors
+ Lou Montulli, Garrett Blythe, Craig Lavender, Michael
+ Grobe, Charles Rezac
+ Academic Computing Services
+ University of Kansas
+ Lawrence, Kansas 66047
+
+ Foteos Macrides
+ Worcester Foundation for Biomedical Research
+ Shrewsbury, Massachusetts 01545
diff --git a/gnu/usr.bin/lynx/lynx.man b/gnu/usr.bin/lynx/lynx.man
index 498d3267266..04bfe6dc434 100644
--- a/gnu/usr.bin/lynx/lynx.man
+++ b/gnu/usr.bin/lynx/lynx.man
@@ -52,6 +52,12 @@ file or remote URL specified at the command
line. For help with URLs, press \fB"?"\fR
or \fB"H"\fR while running \fILynx\fR.
Then follow the link titled, "Help on URLs."
+
+\fILynx\fR uses only long option names. Option
+names can begin with double dash as well,
+underscores and dashes can be intermixed in
+option names (in the reference below options
+are with one dash before them and with underscores).
.PP
.TP
.B -
@@ -59,17 +65,21 @@ If the argument is only '-', then Lynx expects to receive
the arguments from stdin. This is to allow for the
potentially very long command line that can be associated
with the -get_data or -post_data arguments (see below).
+It can also be used to avoid having sensitive information
+in the invoking command line (which would be visible to
+other processes on most systems), especially when
+the -auth or -pauth options are used.
.TP
.B -accept_all_cookies
accept all cookies.
.TP
.B -anonymous
-used to specify the anonymous account.
+apply restrictions for anonymous account, see also -restrictions.
.TP
-.B -assume_charset\fR=\fIID\fR:\fIMIMEname
+.B -assume_charset\fR=\fIMIMEname
charset for documents that don't specify it.
.TP
-.B -assume_local_charset\fR=\fIID\fR:\fIMIMEname
+.B -assume_local_charset\fR=\fIMIMEname
charset assumed for local files.
.TP
.B -assume_unrec_charset\fR=\fIMIMEname
@@ -84,10 +94,14 @@ this switch.
prepend a request URL comment and BASE tag to text/html
outputs for -source dumps.
.TP
+.B -bibp\fR=\fIURL
+specify a local bibp server (default http://bibhost/).
+.TP
.B -blink
-forces high intensity bg colors for color mode, if available
+forces high intensity background colors for color mode, if available
and supported by the terminal.
-Lynx needs to be compiled with the slang library for this flag.
+This applies to the \fBslang\fR library (for a few terminal emulators),
+or to OS/2 EMX with \fBncurses\fR.
.TP
.B -book
use the bookmark page as the startfile. The default or command
@@ -107,6 +121,9 @@ The default is 10.
.B -case
enable case-sensitive string searching.
.TP
+.B -center
+Toggle center alignment in HTML TABLE.
+.TP
.B -cfg\fR=\fIFILENAME
specifies a Lynx configuration file other than the default
lynx.cfg.
@@ -114,20 +131,46 @@ lynx.cfg.
.B -child
exit on left-arrow in startfile, and disable save to disk.
.TP
+.B -cmd_log\fR=\fIFILENAME
+write keystroke commands and related information to the specified file.
+.TP
+.B -cmd_script\fR=\fIFILENAME
+read keystroke commands from the specified file.
+You can use the data written using the \fB\-cmd_log\fR option.
+Lynx will ignore other information which the command-logging may have
+written to the logfile.
+.TP
.B -color
forces color mode on, if available. Default color control sequences
which work for many terminal types are assumed if the terminal
capability description does not specify how to handle color.
-Lynx needs to be compiled with the slang library for this flag.
+Lynx needs to be compiled with the \fBslang\fR library for this flag,
+it is equivalent to setting the \fBCOLORTERM\fR environment variable.
+(If color support is instead provided by a color-capable curses
+library like \fBncurses\fR, Lynx relies completely on the terminal
+description to determine whether color mode is possible, and
+this flag is not needed and thus unavailable.)
A saved show_color=always setting found in a .lynxrc file at
-startup has the same effect. A saved show_color=always found
+startup has the same effect. A saved show_color=never found
in .lynxrc on startup is overridden by this flag.
.TP
-.B -cookies
-toggles handling of Set-Cookie headers.
+.B -connect_timeout\fR=\fIN
+Sets the connection timeout, where N is given in seconds.
+This is not available under DOS (use the sockdelay
+parameter of WATTCP under DOS).
.TP
.B -cookie_file\fR=\fIFILENAME
+specifies a file to use to read cookies.
+If none is specified, the default value is ~/.lynx_cookies
+for most systems, but ~/cookies for MS-DOS.
+.TP
+.B -cookie_save_file\fR=\fIFILENAME
specifies a file to use to store cookies.
+If none is specified, the value given by
+\fB-cookie_file\fR is used.
+.TP
+.B -cookies
+toggles handling of Set-Cookie headers.
.TP
.B -core
toggles forced core dumps on fatal errors.
@@ -136,28 +179,39 @@ toggles forced core dumps on fatal errors.
with -traversal, output each page to a file.
with -dump, format output as with -traversal, but to stdout.
.TP
+.B -curses_pads
+toggles the use of curses "pad" feature which supports
+left/right scrolling of the display.
+.TP
.B -debug_partial
-incremental display stages with MessageSecs delay
+separate incremental display stages with MessageSecs delay
.TP
.B -display\fR=\fIDISPLAY
set the display variable for X rexec-ed programs.
.TP
+.B -display_charset\fR=\fIMIMEname
+set the charset for the terminal output.
+.TP
+.B -dont_wrap_pre
+inhibit wrapping of text in <pre> when -dump'ing and -crawl'ing, mark
+wrapped lines in interactive session.
+.TP
.B -dump
dumps the formatted output of the default document or one
-specified on the command line to standard out.
+specified on the command line to standard output.
This can be used in the following way:
.sp
-lynx -dump http://www.crl.com/~subir/lynx.html
+lynx -dump http://www.trill-home.com/lynx.html
.TP
.B -editor\fR=\fIEDITOR
-enable edit mode using the specified
+enable external editing, using the specified
EDITOR. (vi, ed, emacs, etc.)
.TP
.B -emacskeys
enable emacs-like key movement.
.TP
.B -enable_scrollback
-toggles compatibility with comm programs' scrollback keys
+toggles compatibility with communication programs' scrollback keys
(may be incompatible with some curses packages).
.TP
.B -error_file\fR=\fIFILE
@@ -169,6 +223,9 @@ enable local program execution (normally not configured).
.B -fileversions
include all versions of files in local VMS directory listings.
.TP
+.B -force_empty_hrefless_a
+force HREF-less 'A' elements to be empty (close them as soon as they are seen).
+.TP
.B -force_html
forces the first document to be interpreted as HTML.
.TP
@@ -176,7 +233,7 @@ forces the first document to be interpreted as HTML.
toggles forcing of the secure flag for SSL cookies.
.TP
.B -forms_options
-toggles the style of options (menu or forms).
+toggles whether the Options Menu is key-based or form-based.
.TP
.B -from
toggles transmissions of From headers.
@@ -185,7 +242,9 @@ toggles transmissions of From headers.
disable ftp access.
.TP
.B -get_data
-send form data from stdin using GET method and dump results.
+properly formatted data for a get form are read in from
+stdin and passed to the form.
+Input is terminated by a line that starts with '---'.
.TP
.B -head
send a HEAD request for the mime headers.
@@ -226,6 +285,9 @@ set the default index file to the specified URL.
toggles inclusion of ISMAP links when client-side
MAPs are present.
.TP
+.B -justify
+do justification of text.
+.TP
.B -link\fR=\fINUMBER
starting count for lnk#.dat files produced by -crawl.
.TP
@@ -236,6 +298,10 @@ disable URLs that point to remote hosts.
enable local program execution from local files only (if
Lynx was compiled with local execution enabled).
.TP
+.B -lss\fR=\fIFILENAME
+specify filename containing color-style information.
+The default is lynx.lss.
+.TP
.B -mime_header
prints the MIME header of a fetched document along with its
source.
@@ -249,6 +315,9 @@ number of articles in chunked news listings.
.B -newsmaxchunk\fR=\fINUMBER
maximum news articles in listings before chunking.
.TP
+.B -nobold
+disable bold video-attribute.
+.TP
.B -nobrowse
disable directory browsing.
.TP
@@ -273,11 +342,18 @@ disable the link list feature in dumps.
.B -nolog
disable mailing of error messages to document owners.
.TP
+.B -nonrestarting_sigwinch
+This flag is not available on all systems,
+Lynx needs to be compiled with HAVE_SIGACTION defined.
+If available, this flag \fImay\fR cause Lynx to react
+more immediately to window changes when run within
+an \fBxterm\fR.
+.TP
.B -nopause
disable forced pauses for statusline messages.
.TP
.B -noprint
-disable print functions.
+disable most print functions.
.TP
.B -noredir
prevents automatic redirection and prints a message with a
@@ -286,19 +362,28 @@ link to the new URL.
.B -noreferer
disable transmissions of Referer headers.
.TP
+.B -noreverse
+disable reverse video-attribute.
+.TP
.B -nosocks
disable SOCKS proxy usage by a SOCKSified Lynx.
.TP
.B -nostatus
disable the retrieval status messages.
.TP
+.B -nounderline
+disable underline video-attribute.
+.TP
+.B -number_fields
+force numbering of links as well as form input fields
+.TP
.B -number_links
force numbering of links.
.TP
.B -partial
-display partial pages while downloading.
+toggles display partial pages while loading.
.TP
-.B partial_thres\fR=\fINUMBER
+.B -partial_thres\fR=\fINUMBER
number of lines to render before repainting display
with partial-display logic
.TP
@@ -312,7 +397,9 @@ toggles handling of single-choice SELECT options via
popup windows or as lists of radio buttons.
.TP
.B -post_data
-send form data from stdin using POST method and dump results.
+properly formatted data for a post form are read in from
+stdin and passed to the form.
+Input is terminated by a line that starts with '---'.
.TP
.B -preparsed
show HTML source preparsed and reformatted when used with -source
@@ -340,11 +427,12 @@ flushes the cache on a proxy server
.TP
.B -restrictions\fR=\fI[option][,option][,option]...
allows a list of services to be disabled
-selectively. The following list is printed
+selectively. Dashes and underscores in option names
+can be intermixed. The following list is printed
if no options are specified.
.I all
-- restricts all options.
+- restricts all options listed below.
.I bookmark
- disallow changing the location of the bookmark
@@ -361,11 +449,16 @@ management is enabled.
.I default
- same as command line option -anonymous.
Disables default services for anonymous users.
-Currently set to all restricted except for:
-inside_telnet, outside_telnet, inside_news,
-inside_ftp, outside_ftp, inside_rlogin,
-outside_rlogin, jump, mail and goto. Defaults
-are setable within userdefs.h.
+Set to all restricted, except for:
+inside_telnet, outside_telnet,
+inside_ftp, outside_ftp,
+inside_rlogin, outside_rlogin,
+inside_news, outside_news, telnet_port,
+jump, mail, print, exec, and goto.
+The settings for these,
+as well as additional goto restrictions for
+specific URL schemes that are also applied,
+are derived from definitions within userdefs.h.
.I dired_support
- disallow local file management.
@@ -374,11 +467,15 @@ are setable within userdefs.h.
- disallow saving to disk in the download and
print menus.
+.I dotfiles
+- disallow access to, or creation of, hidden (dot) files.
+
.I download
-- disallow downloaders in the download menu.
+- disallow some downloaders in the download menu (does not
+imply disk_save restriction).
.I editor
-- disallow editing.
+- disallow external editing.
.I exec
- disable execution scripts.
@@ -387,6 +484,12 @@ print menus.
- disallow the user from changing the local
execution option.
+.I externals
+- disallow some "EXTERNAL" configuration lines
+if support for passing URLs to external
+applications (with the EXTERN command) is
+compiled in.
+
.I file_url
- disallow using G)oto, served links or bookmarks for
file: URLs.
@@ -430,8 +533,11 @@ your domain (utmp required for selectivity).
domain (utmp required for selectivity).
.I outside_news
-- disallow USENET news posting for people coming
+- disallow USENET news reading and posting for people coming
from outside your domain (utmp required for selectivity).
+This restriction applies to "news", "nntp", "newspost", and
+"newsreply" URLs, but not to "snews", "snewspost",
+or "snewsreply" in case they are supported.
.I outside_rlogin
- disallow rlogins for people coming from outside
@@ -465,9 +571,20 @@ with the PREV_DOC command or from the History List.
.B -rlogin
disable recognition of rlogin commands.
.TP
+.B -scrollbar
+toggles showing scrollbar.
+.TP
+.B -scrollbar_arrow
+toggles showing arrows at ends of the scrollbar.
+.TP
.B -selective
require .www_browsable files to browse directories.
.TP
+.B -short_url
+show very long URLs in the status line with "..." to represent the
+portion which cannot be displayed.
+The beginning and end of the URL are displayed, rather than suppressing the end.
+.TP
.B -show_cursor
If enabled the cursor will not be hidden in the right hand
corner but will instead be positioned at the start of the
@@ -476,6 +593,11 @@ systems without FANCY_CURSES capabilities. The default
configuration can be changed in userdefs.h or lynx.cfg.
The command line switch toggles the default.
.TP
+.B -show_rate
+If enabled the transfer rate is shown in bytes/second.
+If disabled, no transfer rate is shown.
+Use lynx.cfg or the options menu to select KB/second and/or ETA.
+.TP
.B -soft_dquotes
toggles emulation of the old Netscape and Mosaic bug which
treated '>' as a co-terminator for double-quotes and tags.
@@ -490,6 +612,13 @@ disable SIGINT cleanup handler
.B -startfile_ok
allow non-http startfile and homepage with -validate.
.TP
+.B -stdin
+read the startfile from standard input
+(UNIX only).
+.TP
+.B -syslog\fR=\fItext
+information for syslog call.
+.TP
.B -tagsoup
initialize parser, using Tag Soup DTD rather than SortaSGML.
.TP
@@ -497,16 +626,34 @@ initialize parser, using Tag Soup DTD rather than SortaSGML.
disable recognition of telnet commands.
.TP
.B -term\fR=\fITERM
-tell Lynx what terminal type to assume its talking to.
+tell Lynx what terminal type to assume it is talking to.
(This may be useful for remote execution, when, for example,
Lynx connects to a remote TCP/IP port that starts a script that,
in turn, starts another Lynx process.)
.TP
+.B -timeout\fR=\fIN
+For win32, sets the network read-timeout, where N is given in seconds.
+.TP
.B -tlog
-toggles use of a Lynx Trace Log for the current session.
+toggles between using a Lynx Trace Log and stderr for trace output
+from the session.
+.TP
+.B -tna
+turns on "Textfields Need Activation" mode.
.TP
.B -trace
-turns on WWW trace mode.
+turns on Lynx trace mode. Destination of trace output depends
+on -tlog.
+.TP
+.B -trace_mask\fR=\fIvalue
+turn on optional traces, which may result in very large trace files.
+Logically OR the values to combine options:
+.br
+1=SGML character parsing states
+.br
+2=color-style
+.br
+4=TRST (table layout)
.TP
.B -traversal
traverse all http links derived from startfile. When used with
@@ -514,16 +661,24 @@ traverse all http links derived from startfile. When used with
is output to a file, intended for indexing. See CRAWL.announce
for more information.
.TP
+.B trim_input_fields
+trim input text/textarea fields in forms.
+.TP
.B -underscore
toggles use of _underline_ format in dumps.
.TP
.B -use_mouse
-turn on xterm mouse support.
+turn on mouse support, if available.
Clicking the left mouse button on a link traverses it.
Clicking the right mouse button pops back.
-Click in the first line of a page to scroll up.
-Click in the last line of a page to scroll down.
-Lynx must be compiled with ncurses or slang to support this feature.
+Click on the top line to scroll up.
+Click on the bottom line to scroll down.
+The first few positions in the top and bottom line may invoke
+additional functions.
+Lynx must be compiled with \fBncurses\fR or \fBslang\fR to support this feature.
+If \fBncurses\fR is used, clicking the middle mouse button pops up
+a simple menu. Mouse clicks may only work reliably while Lynx is
+idle waiting for input.
.TP
.B -useragent=Name
set alternate Lynx User-Agent header.
@@ -533,7 +688,7 @@ accept only http URLs (for validation). Complete security
restrictions also are implemented.
.TP
.B -verbose
-taggles [LINK], [IMAGE] and [INLINE] comments with filenames of these images.
+toggle [LINK], [IMAGE] and [INLINE] comments with filenames of these images.
.TP
.B -version
print version information.
@@ -541,8 +696,15 @@ print version information.
.B -vikeys
enable vi-like key movement.
.TP
+.B -wdebug
+enable Waterloo tcp/ip packet debug (print to watt debugfile).
+This applies only to DOS versions compiled with WATTCP or WATT-32.
+.TP
.B -width\fR=\fINUMBER
number of columns for formatting of dumps, default is 80.
+.TP
+.B -with_backspaces
+emit backspaces in output if -dumping or -crawling (like 'man' does)
.SH COMMANDS
o Use \fBUp arrow\fR and \fBDown arrow\fR to scroll through hypertext links.
.br
@@ -682,6 +844,10 @@ It is created for use by an external program, as defined in a
If the field does not exist for the document, the variable is set to a
null string under \fBUNIX\fR, or "No URL" under \fBVMS\fR.
.TP 20
+.B LYNX_TRACE
+If set, causes \fILynx\fR to write a trace file as if the \fB-trace\fR
+option were supplied.
+.TP 20
.B LYNX_VERSION
This variable is always set by \fILynx\fR, and may be used by an external
program to determine if it was invoked by \fILynx\fR. See also the comments
@@ -771,7 +937,7 @@ codes. Currently, it is hard-coded to a wish list.
.B NLSPATH
This variable, if set, is used as the path prefix for message catalogs.
.SH NOTES
-This is the Lynx v2.8.2 Release
+This is the Lynx v2.8.4 Release
.PP
If you wish to contribute to the further development
of \fILynx\fR, subscribe to our mailing list. Send email to
@@ -805,7 +971,7 @@ Note that man page availability and section numbering is somewhat
platform dependent, and may vary from the above references.
.PP
A section shown as (GNU), is intended to denote that the topic
-may be available via an info page, instead of a man page (ie, try
+may be available via an info page, instead of a man page (i.e., try
"info subject", rather than "man subject").
.PP
A section shown as (?) denotes that documentation on the topic exists,
diff --git a/gnu/usr.bin/lynx/lynx_help/Lynx_users_guide.html b/gnu/usr.bin/lynx/lynx_help/Lynx_users_guide.html
index 45d82fab93d..64d84119a70 100644
--- a/gnu/usr.bin/lynx/lynx_help/Lynx_users_guide.html
+++ b/gnu/usr.bin/lynx/lynx_help/Lynx_users_guide.html
@@ -1,12 +1,12 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
-<title>Lynx Users Guide v2.8.2</title>
+<title>Lynx Users Guide v2.8.4</title>
<link rev="made" href="mailto:lynx-dev@sig.net">
</head>
<body>
-<h1>Lynx Users Guide v2.8.2</h1>
+<h1>Lynx Users Guide v2.8.4</h1>
Lynx is a fully-featured <em>World Wide Web</em> (<em>WWW</em>) client
for users running cursor-addressable, character-cell display devices (e.g.,
@@ -19,7 +19,7 @@ well as files on remote systems running <em>http</em>, <em>gopher</em>,
logins to <em>telnet</em>, <em>tn3270</em> or <em>rlogin</em> accounts (see
<a href="lynx_url_support.html">URL Schemes Supported by Lynx</a>).
<a href="#Hist">Current</a> versions of Lynx run on Unix, VMS,
-Windows95/NT, 386DOS and OS/2 EMX.
+Windows3.x/9x/NT, 386DOS and OS/2 EMX.
<p>Lynx can be used to access information on the <em>WWW</em>, or to build
information systems intended primarily for local access. For example, Lynx
@@ -47,8 +47,10 @@ within a single LAN.
<li><A HREF="#Bookmarks" NAME="ToC-Bookmarks">Lynx bookmarks</A>
<li><A HREF="#Jumps" NAME="ToC-Jumps">Jump command</A>
<li><A HREF="#DirEd" NAME="ToC-DirEd">Directory Editing</A>
+<li><A HREF="#ColorMouse" NAME="ToC-ColorMouse">Using Color & the Mouse</A>
<li><A HREF="#MiscKeys" NAME="ToC-MiscKeys">Scrolling and Other useful commands</A>
<li><a href="#Forms" NAME="ToC-Forms">Lynx and HTML Forms</a>
+| <a href="#Images" NAME="ToC-Images">Lynx and HTML Images</a>
<li><a href="#Tables" NAME="ToC-Tables">Lynx and HTML Tables</a>
| <a href="#Tabs" NAME="ToC-Tabs">Lynx and HTML Tabs</a>
<li><a href="#Frames" NAME="ToC-Frames">Lynx and HTML Frames</a>
@@ -57,7 +59,7 @@ within a single LAN.
| <a href="#Notes" NAME="ToC-Notes">Lynx and HTML Notes</a>
<li><a href="#Lists" NAME="ToC-Lists">Lynx and HTML Lists</a>
<li><a href="#Quotes" NAME="ToC-Quotes">Lynx and HTML Quotes</a>
-<li><a href="#Eightbit" NAME="ToC-Eightbit">Lynx and HTML Internationalization: 8bit, unicode, etc.</a>
+<li><a href="#Eightbit" NAME="ToC-Eightbit">Lynx and HTML Internationalization: 8bit, UNICODE, etc.</a>
<li><a href="#USEMAP" NAME="ToC-USEMAP">Lynx and Client-Side-Image-Maps</a>
<li><a href="#Refresh" NAME="ToC-Refresh">Lynx and Client-Side-Pull</a>
<li><a href="#Cookies" NAME="ToC-Cookies">Lynx and State Management</a> (Me want <em>cookie</em>!)
@@ -80,11 +82,14 @@ through the help files.
and their key bindings is available by pressing the '<em>K</em>' key (or
the '<em>k</em>' key if vi-like key movement is not on).
[<A HREF="#ToC-Help">ToC</A>]
+<p>
+If you want to recall recent status-line messages, you can do so
+by entering the `g' command, followed by `LYNXMESSAGES:'.
<h2 ID="Local"><A NAME="Local"><em>Viewing local files with Lynx</em></A></h2>
Lynx can be started by entering the Lynx command along with
-the name of a file to display. For example these commands could
+the name of a file to display. For example these commands could
all be used to display an arbitrary ASCII text or HTML file:
<dl>
@@ -110,15 +115,14 @@ all be used to display an arbitrary ASCII text or HTML file:
specified file as will fit on the screen. Pressing a <em>down-arrow</em>
will bring up the next screen, and pressing an <em>up-arrow</em> will bring
up the previous screen. If no file is specified at startup, a default file
-will be displayed. (The default is configured by the system administrator
-when the command is installed.)
+will be displayed, depending on settings e.g., in <em>lynx.cfg</em>.
<p>Lynx will display local files written in the <em>HyperText Markup
Language</em> (<em>HTML</em>), if the file's name ends with the characters
<em>.html</em>, <em>.htm</em>, <em>.shtml</em>, <em>.htmlx</em>,
<em>.html3</em>, or <em>.ht3</em>. HTML is a file format that allows users
to create a file that contains (among other things) hypertext links to other
-files. Several files linked together may be described as a
+files. Several files linked together may be described as a
<em>hypertext document</em>. If the filename does not have one of the
suffixes mapped by Lynx to HTML, the <em>-force_html</em> command line
option can be included to force treatment of the file as hypertext.
@@ -181,34 +185,34 @@ general form:
<dl>
<dt><code>PROTOCOL</code>
- <dd>identifies the communications protocol (<em>scheme</em>) used
- by the server that will provide the file. As mentioned earlier,
- Lynx (and any WWW client) can interact with a variety of servers,
- each with its own protocol.
+ <dd>identifies the communications protocol (<em>scheme</em>) used
+ by the server that will provide the file. As mentioned earlier,
+ Lynx (and any WWW client) can interact with a variety of servers,
+ each with its own protocol.
<dt><code>HOST</code>
- <dd>is the Internet address of the computer system on which the
- server is running, and
+ <dd>is the Internet address of the computer system on which the
+ server is running, and
<dt><code>PATH</code>
- <dd>is a scheme-specific field which for some schemes may
- correspond to a directory path and/or filename.
+ <dd>is a scheme-specific field which for some schemes may
+ correspond to a directory path and/or filename.
</dl>
Here are some sample URLs.
<dl>
<dt>HTTP (HyperText Transfer Protocol)
- <dd><code>http://www.crl.com/~subir/lynx.html</code>
+ <dd><code>http://www.trill-home.com/lynx.html</code>
<dt>Gopher
- <dd><code>gopher://gopher.micro.umn.edu/11/</code>
+ <dd><code>gopher://gopher.micro.umn.edu/11/</code>
<dt>FTP (File Transfer Protocol)
- <dd><code>ftp://ftp2.cc.ukans.edu/pub/lynx/README</code>
+ <dd><code>ftp://ftp2.cc.ukans.edu/pub/lynx/README</code>
<dt>WAIS (Wide Area Information Service protocol)
- <dd><code>wais://cnidr.org/directory-of-servers</code>
+ <dd><code>wais://cnidr.org/directory-of-servers</code>
<dt>A URL may be specified to Lynx on the command line, as in:
<dd><code>lynx http://kufacts.cc.ukans.edu/cwis/kufacts_start.html</code>
@@ -216,13 +220,13 @@ Here are some sample URLs.
Lynx also will attempt to create a complete URL if you include adequate
portions of it in the startfile argument. For example:<br>
-<tab indent="34"><em>wfbr</em>
-<tab indent="62">will be expanded to:<br>
-<tab indent="12"><em>http://www.wfbr.edu/</em>
-<tab indent="62">and:<br>
-<tab indent="26"><em>ftp.more.net/pub</em>
-<tab indent="62">will be expanded to:<br>
-<tab indent="14"><em>ftp://ftp.more.net/pub</em><br>
+<pre>
+1234.6789.1234.6789.1234.6789.1234.6789.1234.6789.1234.6789.1234.6789.1234.6789
+ <em>wfbr</em> will be expanded to:
+ <em>http://www.wfbr.edu/</em> and:
+ <em>ftp.more.net/pub</em> will be expanded to:
+ <em>ftp://ftp.more.net/pub</em>
+</pre>
See <a href="lynx_url_support.html">URL Schemes Supported by Lynx</a> for
more detailed information. [<A HREF="#ToC-Remote">ToC</A>]
@@ -234,10 +238,10 @@ environment variable,
<dt>UNIX
<dd>
<dl>
- <dt>ksh
- <dd><code>export WWW_HOME=http://www.w3.org/</code>
- <dt>csh
- <dd><code>setenv WWW_HOME http://www.w3.org/</code>
+ <dt>ksh
+ <dd><code>export WWW_HOME=http://www.w3.org/</code>
+ <dt>csh
+ <dd><code>setenv WWW_HOME http://www.w3.org/</code>
</dl>
<dt>VMS
<dd><code>define "WWW_HOME" "http://www.w3.org/"</code>
@@ -292,10 +296,8 @@ LIST and ADDRLIST keystroke commands, normally mapped to '<em>l</em>' and
the current document, and they can be selected via those lists.
<p>The '<em>i</em>' key presents an index of documents. The default index
-is usually a document pointing to servers around the world, but the index
-can be changed by the system administrator or on the command line using
-the <em>-index=URL</em> switch, and therefore depends on how the Lynx
-program you are using was configured.
+offered contains many useful links, but can be changed in <em>lynx.cfg</em>
+or on the command line using the <em>-index=URL</em> switch.
<p>If you choose a link to a server with active access authorization, Lynx
will automatically prompt for a username and a password. If you give the
@@ -321,7 +323,7 @@ mail files to themselves and print the entire file to the screen.
Lynx from their own accounts (that is, so-called "non-anonymous
users"). In particular, the <em>Save to a local file</EM>
option allows you to save the document into a file on your disk
-space. Additional print options may also be
+space. Additional print options may also be
available as configured in the <A HREF="#lynx.cfg">lynx.cfg</A> file.
<p>Some options, such as <em>Save to a local file</em>, involve prompting
@@ -351,11 +353,11 @@ may have a local copy of the document source, but it is better to <a
href="#RemoteSource">Download</a> the source.
<p>NOTE: When saving an HTML document it is important to name the
-document with a <em>.html</em> extension, if you want to read it with
-Lynx again later.
+document with a <em>.html</em> or <em>.htm</em> extension, if you
+want to read it with Lynx again later.
-<p>Lynx can allow users to edit documents that reside on the local
-system. To enable editing, documents must be referenced using a
+<p ID="FileEdit">Lynx can allow users to edit documents that reside on the
+local system. To enable editing, documents must be referenced using a
"file:" URL or by specifying a plain filename on the command line as
in the following two examples:
@@ -440,7 +442,7 @@ are case sensitive and case insensitive. These searches are
entirely local to Lynx.
<p>Some documents are designated <em>index documents</em> by virtue of an
-ISINDEX element in their HEAD section. These documents can be used to
+ISINDEX element in their HEAD section. These documents can be used to
retrieve additional information based on searches using words or phrases
submitted to an index server. The Lynx statusline will indicate that you
are viewing such a document, and if so, the '<em>s</em>' key will invoke a
@@ -468,77 +470,90 @@ searches directly via WAIS or Gopher servers in conjunction with the internal
gateways for such servers. For example, an HTML index document can act as a
<em>cover page</em> describing a WAIS database and how to formulate query
strings for searching it, and include an element such as:<BR>
-<tab indent="12"><em>&lt;ISINDEX <tab id="idx">PROMPT="Enter WAIS query:"<BR>
-<tab to="idx">HREF="wais://net.bio.net/biologists-addresses"&gt;</em><BR>
+<pre>
+ <em>&lt;ISINDEX PROMPT="Enter WAIS query:"
+ HREF="wais://net.bio.net/biologists-addresses"&gt;</em>
+</pre>
for submitting a search of the Biologist's Addresses database directly
to the net.bio.net WAIS server. [<A HREF="#ToC-Search">ToC</A>]
<h2 ID="InteractiveOptions"><A NAME="InteractiveOptions"><em>Lynx Options Menu</em></A></h2>
The Lynx <em>Options Menu</em> may be accessed by pressing the '<em>o</em>'
-key. The current Options Menu allows you to change options which are
-useful at runtime. Most of these are read/saved from your .lynxrc file.
-Other options are stored in the <A HREF="#lynx.cfg">lynx.cfg</A> file.
-
-<p>Lynx supports two styles of options menu. The new style shown below is an HTML
-file generated at runtime:
-
+key. It allows you to change options at runtime, if you need to.
+Most changes are read from &amp; saved to your .lynxrc file; those which are not
+are marked (!) in the form-based menu (as below). Many other options
+are stored in the <A HREF="#lynx.cfg">lynx.cfg</A> file.
+
+<p>Lynx supports two styles of Options Menu, key-based &amp; form-based.
+The form-based menu shown below is an HTML file generated at runtime,
+in which the user fills in choices as in any ordinary HTML form.
<pre>
- Options Menu (Lynx Version 2.8.2pre.6)
+ Options Menu (Lynx Version 2.8.4rel.1)
Accept Changes - Reset Changes Left Arrow cancels changes <A
HREF="keystrokes/option_help.html">HELP!</A>
Save options to disk: [_]
+ (options marked with (!) will not be saved)
- Personal Preferences
- Cookies : [ask user..]
+ General Preferences
+ User mode : [Advanced....]
Editor : __________________________________________
- Emacs keys : [OFF]
- Keypad mode : [Numbers act as arrows.............]
- Personal mail address : __________________________________________
Searching type : [Case insensitive]
- Show color : [ON....]
- Show cursor : [OFF]
- User mode : [Advanced....]
+ Cookies (!) : [ask user..]
+
+ Keyboard Input
+ Keypad mode : [Links are numbered................]
+ Emacs keys : [OFF]
VI keys : [OFF]
- Display character set : [Western (ISO-8859-1)...........]
- X Display : __________________________________________
+ Line edit style : [Bash-like Bindings]
+ Keyboard layout : [YAWERTY Cyrillic, for DEC LK201 kbd]
+
+ Display and Character Sets
+ Display character set : [Cyrillic (ISO-8859-5)..........]
+ Assumed document character set(!): [iso-8859-1......]
+ Raw 8-bit (!) : [OFF]
+ X Display (!) : __________________________________________
- Document Layout
- Assumed document character set : [iso-8859-1......]
- Raw 8-bit : [ON.]
- HTML error recovery : [strict (SortaSGML mode)]
+ Document Appearance
+ Show color : [ON....]
+ Show cursor : [OFF]
Popups for select fields : [ON.]
- Show images : [as labels]
- Verbose images : [show filename]
+ HTML error recovery (!) : [strict (SortaSGML mode)]
+ Show images (!) : [as labels]
+ Verbose images : [OFF..........]
- Bookmark Options
- Multi-bookmarks : [OFF.....]
- Bookmarks file : __________________________________________
+ Headers Transferred to Remote Servers
+ Personal mail address : __________________________________________
+ Preferred document character set : _________________________________
+ Preferred document language : _________________________________
+ User-Agent header (!) : __________________________________________
- File Management Options
+ Listing and Accessing Files
FTP sort criteria : [By Name]
Local directory sort criteria : [Mixed style......]
+ Show dot files : [ON.]
+ Execution links : [FOR LOCAL FILES ONLY]
- Headers transferred to remote server
- Preferred document character set : _________________________________
- Preferred document language : _________________________________
- User-Agent header : __________________________________________
+ Special Files and Screens
+ Multi-bookmarks : [ADVANCED]
+ Review/edit Bookmarks files : Goto multi-bookmark menu
+ Visited Pages : [As Visit Tree..........]
Check your lynx.cfg here
Accept Changes - Reset Changes Left Arrow cancels changes
</pre>
-
-<p>The old style of options menu is a fixed form. Normally this will be
-compiled into Lynx, and is accessed by setting FORMS_OPTIONS true in your
-<A HREF="#lynx.cfg">lynx.cfg</A> file.
-
+<p>The key-based menu depends on key-strokes to identify options
+which the user wants to change. It is compiled into Lynx
+and is accessed by setting FORMS_OPTIONS to TRUE in
+<A HREF="#lynx.cfg">lynx.cfg</A>.
<pre>
- Options Menu (Lynx Version 2.8.2pre.6)
+
+ Options Menu (Lynx Version 2.8.4rel.1)
(E)ditor : emacs
(D)ISPLAY variable : aixtest.cc.ukans.edu:0.0
@@ -565,7 +580,7 @@ parentheses for the option you wish to change (e.g., '<em>E</em>' for Editor
or '<em>@</em>' for show cursor). For fields where text must be entered,
simply enter the text by typing on the keyboard. The <a
href="keystrokes/edit_help.html">Line Editor</a> can be used to
-correct mistakes, and <em>Control-U</em> can be used to erase the whole
+correct mistakes, and <em>Control-U</em> can be used to erase the
line. When you are done entering a change press the <em>Return</em> key
to get back to the <em>Command?</em> prompt.
@@ -591,322 +606,337 @@ return to Lynx or the '<em>&gt;</em>' command to save the options to a
<dl>
<dt>Editor
- <dd>The editor to be invoked when editing browsable files, and
- sending mail or comments. The full pathname of the editor
- command should be specified when possible.
+ <dd>The editor to be invoked when editing browsable files, when
+ sending mail or comments, when preparing a news article for
+ posting, and for external TEXTAREA editing. The full pathname
+ of the editor command should be specified when possible.
<dt>DISPLAY variable
- <dd>This option is only relevant to X Window users. The DISPLAY
- (Unix) or DECW$DISPLAY (VMS) variable is picked up automatically
- from the environment if it has been previously set.
+ <dd>This option is only relevant to X Window users. The DISPLAY
+ (Unix) or DECW$DISPLAY (VMS) variable is picked up automatically
+ from the environment if it has been previously set.
<dt>Multi-bookmarks
- <dd>Lynx supports a default bookmark file, and up to 26 total
- bookmark files (see below). When multi-bookmarks is OFF,
- the default bookmark file is used for the '<em>v</em>'iew
- bookmarks and '<em>a</em>'dd bookmark link commands. If
- multi-bookmark support is available in your account, the
- setting can be changed to STANDARD or ADVANCED. In STANDARD
- mode, a menu of available bookmarks always is invoked when
- you seek to view a bookmark file or add a link, and you select
- the bookmark file by its letter token (see
- <em>Bookmark file</em>, below) in that menu. In ADVANCED mode,
- you instead are prompted for the letter of the desired bookmark
- file, but can enter '<em>=</em>' to invoke the STANDARD selection
- menu, or <em>RETURN</em> for the default bookmark file.
+ <dd>Lynx supports a default bookmark file, and up to 26 total
+ bookmark files (see below). When multi-bookmarks is OFF,
+ the default bookmark file is used for the '<em>v</em>'iew
+ bookmarks and '<em>a</em>'dd bookmark link commands. If
+ multi-bookmark support is available in your account, the
+ setting can be changed to STANDARD or ADVANCED. In STANDARD
+ mode, a menu of available bookmarks always is invoked when
+ you seek to view a bookmark file or add a link, and you select
+ the bookmark file by its letter token (see
+ <em>Bookmark file</em>, below) in that menu. In ADVANCED mode,
+ you instead are prompted for the letter of the desired bookmark
+ file, but can enter '<em>=</em>' to invoke the STANDARD selection
+ menu, or <em>RETURN</em> for the default bookmark file.
<dt>Bookmark file
- <dd>When multi-bookmarks is OFF, this is the filename and location
- of your default personal bookmark file. Enter '<em>B</em>' to
- modify the filename and/or location via the <a
- href="keystrokes/edit_help.html">Line Editor</a>.
- Bookmark files allow frequently traveled links to be stored in
- personal easy to access files. Using the '<em>a</em>'dd bookmark
- link command (see <a href="#Bookmarks">Lynx bookmarks</a>) you may save
- any link that does not have associated POST content into a
- bookmark file. All bookmark files must be in or under your
- account's home directory. If the location specified does not
- begin with a dot-slash (./), its presence will still be assumed,
- and referenced to the home directory. When multi-bookmarks is
- STANDARD or ADVANCED, entering '<em>B</em>' will invoke a menu
- of up to 26 bookmark files (associated with the letters of the
- English alphabet), for editing their filenames and locations
- (<em>filepath</em>), and descriptions. Lynx will create bookmark
- files, if they don't already exist, when you first '<em>a</em>'dd
- a bookmark link to them. However, if you've specified a
- subdirectory (e.g., ./BM/lynx_bookmarks.html), that subdirectory
- must already exist. Note that on VMS you should use the URL
- syntax for the filepath (e.g., <em>not</em>
- [.BM]lynx_bookmarks.html).
- For Win32, see [???].
+ <dd>When multi-bookmarks is OFF, this is the filename and location
+ of your default personal bookmark file. Enter '<em>B</em>' to
+ modify the filename and/or location via the <a
+ href="keystrokes/edit_help.html">Line Editor</a>.
+ Bookmark files allow frequently traveled links to be stored in
+ personal easy to access files. Using the '<em>a</em>'dd bookmark
+ link command (see <a href="#Bookmarks">Lynx bookmarks</a>) you may save
+ any link that does not have associated POST content into a
+ bookmark file. All bookmark files must be in or under your
+ account's home directory. If the location specified does not
+ begin with a dot-slash (./), its presence will still be assumed,
+ and referenced to the home directory. When multi-bookmarks is
+ STANDARD or ADVANCED, entering '<em>B</em>' will invoke a menu
+ of up to 26 bookmark files (associated with the letters of the
+ English alphabet), for editing their filenames and locations
+ (<em>filepath</em>), and descriptions. Lynx will create bookmark
+ files, if they don't already exist, when you first '<em>a</em>'dd
+ a bookmark link to them. However, if you've specified a
+ subdirectory (e.g., ./BM/lynx_bookmarks.html), that subdirectory
+ must already exist. Note that on VMS you should use the URL
+ syntax for the filepath (e.g., <em>not</em>
+ [.BM]lynx_bookmarks.html).
+ For Win32, see [???].
<dt>FTP sort criteria
- <dd>This option allows you to specify how files will be sorted
- within FTP listings. The current options include
- "<code>By Filename</code>", "<code>By Size</code>",
- "<code>By Type</code>", and "<code>By Date</code>".
+ <dd>This option allows you to specify how files will be sorted
+ within FTP listings. The current options include
+ "<code>By Filename</code>", "<code>By Size</code>",
+ "<code>By Type</code>", and "<code>By Date</code>".
<dt>Personal mail address
- <dd>This mail address will be used to help you send files to
- yourself and will be included as the From: address in any mail
- or comments that you send. It will also be sent as the From:
- field in HTTP or HTTPS requests if inclusion of that header
- has been enabled via the NO_FROM_HEADER definition in
- <A HREF="#lynx.cfg">lynx.cfg</A>
- (the compilation default is not to send the header), or via the
- <em>-from</em> command line toggle.
+ <dd>This mail address will be used to help you send files to
+ yourself and will be included as the From: address in any mail
+ or comments that you send. It will also be sent as the From:
+ field in HTTP or HTTPS requests if inclusion of that header
+ has been enabled via the NO_FROM_HEADER definition in
+ <A HREF="#lynx.cfg">lynx.cfg</A>
+ (the compilation default is not to send the header), or via the
+ <em>-from</em> command line toggle.
<dt>Searching type
- <dd>Searching type has two possible values: CASE INSENSITIVE
- (default) and CASE SENSITIVE. The searching type effects
- inter-document searches only, and determines whether searches
- for words within documents will be done in a case-sensitive or
- case-insensitive manner.
+ <dd>Searching type has two possible values: CASE INSENSITIVE
+ (default) and CASE SENSITIVE. The searching type effects
+ inter-document searches only, and determines whether searches
+ for words within documents will be done in a case-sensitive or
+ case-insensitive manner.
<dt>Preferred Document Language
- <dd>The language you prefer if multi-language files are available
- from servers. Use RFC 1766 abbreviations, e.g., en for English,
- fr for French, etc. Can be a comma-separated list, which may
- be interpreted by servers as descending order of preferences.
- You can also make your order of preference explicit by using
- q factors as defined by the HTTP protocol, for servers which
- understand it, for example:
- da,&nbsp;en-gb;q=0.8,&nbsp;en;q=0.7
+ <dd>The language you prefer if multi-language files are available
+ from servers. Use RFC 1766 abbreviations, e.g., en for English,
+ fr for French, etc. Can be a comma-separated list, which may
+ be interpreted by servers as descending order of preferences.
+ You can also make your order of preference explicit by using
+ q factors as defined by the HTTP protocol, for servers which
+ understand it, for example:
+ da,&nbsp;en-gb;q=0.8,&nbsp;en;q=0.7
<dt>Preferred Document Charset
- <dd>The character set you prefer if sets in addition to ISO-8859-1
- and US-ASCII are available from servers. Use MIME notation
- (e.g., ISO-8859-2) and do not include ISO-8859-1 or US-ASCII,
- since those values are always assumed by default. Can be a
- comma-separated list, which may be interpreted by servers as
- descending order of preferences. You can also make your order
- of preference explicit by using q factors as defined by the
- HTTP protocol, for servers which understand it, for example:
- iso-8859-5,&nbsp;utf-8;q=0.8
+ <dd>The character set you prefer if sets in addition to ISO-8859-1
+ and US-ASCII are available from servers. Use MIME notation
+ (e.g., ISO-8859-2) and do not include ISO-8859-1 or US-ASCII,
+ since those values are always assumed by default. Can be a
+ comma-separated list, which may be interpreted by servers as
+ descending order of preferences. You can also make your order
+ of preference explicit by using q factors as defined by the
+ HTTP protocol, for servers which understand it, for example:
+ iso-8859-5,&nbsp;utf-8;q=0.8
<dt>Display Character set
- <dd>This option allows you to set up the default character set for
- your specific terminal. The display character set provides a
- mapping from the character encodings of viewed documents and
- from HTML entities into viewable characters. It should be set
- according to your terminal's character set so that characters
- other than 7-bit ASCII can be displayed correctly, using
- approximations if necessary. You must have the selected
- character set installed on your terminal. (Since Lynx now
- supports a wide range of platforms it may be useful to note
- that cpXXX codepages used within IBM PC computers, and
- windows-xxxx within native MS-Windows apps.)
+ <dd>This option allows you to set up the default character set for
+ your specific terminal. The display character set provides a
+ mapping from the character encodings of viewed documents and
+ from HTML entities into viewable characters. It should be set
+ according to your terminal's character set so that characters
+ other than 7-bit ASCII can be displayed correctly, using
+ approximations if necessary. You must have the selected
+ character set installed on your terminal. (Since Lynx now
+ supports a wide range of platforms it may be useful to note
+ that cpXXX codepages used within IBM PC computers, and
+ windows-xxxx within native MS-Windows apps.)
<dt>Raw 8-bit or CJK Mode
- <dd>Whether 8-bit characters are assumed to correspond with the
- display character set and therefore are processed without
- translation via the chartrans conversion tables. Should be ON
- by default when the display character set is one of the
- Asian (CJK) sets and the 8-bit characters are Kanji multibytes.
- Should be OFF for the other display character sets,
- but can be turned ON
- when the document's charset is unknown (e.g., is not ISO-8859-1
- and no charset parameter was specified in a reply header from
- an HTTP server to indicate what it is) but you know by some
- means that you have the matching display character set selected.
- Should be OFF when an Asian (CJK) set is selected but the document
- is ISO-8859-1 or another 'assumed document character set'.
- The setting also can be toggled via the RAW_TOGGLE
- command, normally mapped to '<em>@</em>', and at startup via the
- <em>-raw</em> switch.
+ <dd>Whether 8-bit characters are assumed to correspond with the
+ display character set and therefore are processed without
+ translation via the chartrans conversion tables. Should be ON
+ by default when the display character set is one of the
+ Asian (CJK) sets and the 8-bit characters are Kanji multibytes.
+ Should be OFF for the other display character sets,
+ but can be turned ON
+ when the document's charset is unknown (e.g., is not ISO-8859-1
+ and no charset parameter was specified in a reply header from
+ an HTTP server to indicate what it is) but you know by some
+ means that you have the matching display character set selected.
+ Should be OFF when an Asian (CJK) set is selected but the document
+ is ISO-8859-1 or another 'assumed document character set'.
+ The setting also can be toggled via the RAW_TOGGLE
+ command, normally mapped to '<em>@</em>', and at startup via the
+ <em>-raw</em> switch.
<dt>Assumed document character set
- <dd>This option changes the handling of documents which do not
- explicitly specify a charset. Normally Lynx assumes that 8-bit
- characters in those documents are encoded according to iso-8859-1
- (the official default for the HTTP protocol). Unfortunately,
- many non-English web pages "forget" to include proper charset info;
- this option helps you to browse those broken pages if you know
- by some means what the charset is. When the value
- given here or by an -assume_charset command line flag is in effect,
- Lynx will treat documents as if they were encoded accordingly.
- This option active when 'Raw 8-bit or CJK Mode' is OFF.
+ <dd>This option changes the handling of documents which do not
+ explicitly specify a charset. Normally Lynx assumes that 8-bit
+ characters in those documents are encoded according to iso-8859-1
+ (the official default for the HTTP protocol). Unfortunately,
+ many non-English web pages "forget" to include proper charset info;
+ this option helps you to browse those broken pages if you know
+ by some means what the charset is. When the value
+ given here or by an -assume_charset command line flag is in effect,
+ Lynx will treat documents as if they were encoded accordingly.
+ This option active when 'Raw 8-bit or CJK Mode' is OFF.
<dt>Show color.
- <dd>This option will be present if color support is available.
- If set to ON or ALWAYS, color mode will be forced on if possible.
- If (n)curses color support is available but cannot be used for
- the current terminal type, selecting ON is rejected with a message.
- If set to OFF or NEVER, color mode will be turned off.<BR>
- ALWAYS and
- NEVER are not offered in anonymous accounts. If saved to a
- <em>.lynxrc</em> file in non-anonymous accounts, ALWAYS will
- cause Lynx to set color mode on at startup if supported.
- If Lynx is built with the slang library, this is equivalent to
- having included the <em>-color</em> command line switch or having the
- <em>COLORTERM</em> environment variable set. If color support is
- provided by curses or ncurses, this is equivalent to the default
- behavior of using color when the terminal type supports it.
- If (n)curses color support is available but cannot be used for
- the current terminal type, the preference can still be saved
- but will have no effect.<BR>
- A saved value of NEVER will
- cause Lynx to assume a monochrome terminal at startup.
- It is similar to the <em>-nocolor</em> switch, but (when the
- slang library is used) can be overridden with the <em>-color</em>
- switch.<BR>
- If the setting is OFF or ON
- when the current options are saved to a <em>.lynxrc</em> file,
- the default startup behavior is retained, such that color mode
- will be turned on at startup only if the terminal info indicates
- that you have a color-capable terminal, or (when the
- slang library is used) if forced on via the
- <em>-color</em> switch or <em>COLORTERM</em> variable. This
- default behavior always is used in anonymous accounts, or if
- the <em>option_save</em> restriction is set explicitly. If
- for any reason the startup color mode is incorrect for your
- terminal, set it appropriately on or off via this option.
+ <dd>This option will be present if color support is available.
+ If set to ON or ALWAYS, color mode will be forced on if possible.
+ If (n)curses color support is available but cannot be used for
+ the current terminal type, selecting ON is rejected with a message.
+ If set to OFF or NEVER, color mode will be turned off.<BR>
+ ALWAYS and
+ NEVER are not offered in anonymous accounts. If saved to a
+ <em>.lynxrc</em> file in non-anonymous accounts, ALWAYS will
+ cause Lynx to set color mode on at startup if supported.
+ If Lynx is built with the slang library, this is equivalent to
+ having included the <em>-color</em> command line switch or having the
+ <em>COLORTERM</em> environment variable set. If color support is
+ provided by curses or ncurses, this is equivalent to the default
+ behavior of using color when the terminal type supports it.
+ If (n)curses color support is available but cannot be used for
+ the current terminal type, the preference can still be saved
+ but will have no effect.<BR>
+ A saved value of NEVER will
+ cause Lynx to assume a monochrome terminal at startup.
+ It is similar to the <em>-nocolor</em> switch, but (when the
+ slang library is used) can be overridden with the <em>-color</em>
+ switch.<BR>
+ If the setting is OFF or ON
+ when the current options are saved to a <em>.lynxrc</em> file,
+ the default startup behavior is retained, such that color mode
+ will be turned on at startup only if the terminal info indicates
+ that you have a color-capable terminal, or (when the
+ slang library is used) if forced on via the
+ <em>-color</em> switch or <em>COLORTERM</em> variable. This
+ default behavior always is used in anonymous accounts, or if
+ the <em>option_save</em> restriction is set explicitly. If
+ for any reason the startup color mode is incorrect for your
+ terminal, set it appropriately on or off via this option.
<dt>VI keys
- <dd>If set to ON then the lowercase h, j, k, and l keys will be
- mapped to left, down, up, and right arrow, respectively. The
- uppercase H, J, K, and L keys remain mapped to their configured
- bindings (normally HELP, JUMP, KEYMAP, and LIST, respectively).
+ <dd>If set to ON then the lowercase h, j, k, and l keys will be
+ mapped to left, down, up, and right arrow, respectively. The
+ uppercase H, J, K, and L keys remain mapped to their configured
+ bindings (normally HELP, JUMP, KEYMAP, and LIST, respectively).
- <p>Note: this has no effect on the line-editor's key bindings.
+ <p>Note: this has no effect on the line-editor's key bindings.
<dt>Emacs keys
- <dd>If set to ON then the CTRL-P, CTRL-N, CTRL-F, and CTRL-B keys
- will be mapped to up-arrow, down-arrow, right-arrow, and
- left-arrow, respectively. Otherwise, they remain mapped to
- their configured bindings (normally UP_TWO lines, DOWN_TWO
- lines, NEXT_PAGE, and PREV_PAGE, respectively).
-
- <p>Note: this has no effect on the line-editor's key bindings.
+ <dd>If set to ON then the CTRL-P, CTRL-N, CTRL-F, and CTRL-B keys
+ will be mapped to up-arrow, down-arrow, right-arrow, and
+ left-arrow, respectively. Otherwise, they remain mapped to
+ their configured bindings (normally UP_TWO lines, DOWN_TWO
+ lines, NEXT_PAGE, and PREV_PAGE, respectively).
+
+ <p>Note: this has no direct effect on the line-editor's key bindings.
+
+ <dt>Visited Pages
+ <dd>Enable several different views of the visited links:
+ <dl>
+ <dt>By First Visit
+ <dt>By First Visit Reversed
+ <dt>As Visit Tree
+ <dt>By Last Visit
+ <dt>By Last Visit Reversed
+ </dl>
<dt>Show dot files
- <dd>If display/creation of hidden (dot) files/directories is
- enabled, you can turn the feature on or off via this setting.
+ <dd>If display/creation of hidden (dot) files/directories is
+ enabled, you can turn the feature on or off via this setting.
<dt>Popups for select fields
- <dd>Lynx normally uses a popup window for the OPTIONs in form
- SELECT fields when the field does not have the MULTIPLE
- attribute specified, and thus only one OPTION can be selected.
- The use of popup windows can be disabled by changing this setting
- to OFF, in which case the OPTIONs will be rendered as a list of
- radio buttons. Note that if the SELECT field does have the
- MULTIPLE attribute specified, the OPTIONs always are rendered
- as a list of checkboxes.
+ <dd>Lynx normally uses a popup window for the OPTIONs in form
+ SELECT fields when the field does not have the MULTIPLE
+ attribute specified, and thus only one OPTION can be selected.
+ The use of popup windows can be disabled by changing this setting
+ to OFF, in which case the OPTIONs will be rendered as a list of
+ radio buttons. Note that if the SELECT field does have the
+ MULTIPLE attribute specified, the OPTIONs always are rendered
+ as a list of checkboxes.
<dt>Show cursor for current link or option.
- <dd>Lynx normally hides the cursor by positioning it to the right
- and if possible the very bottom of the screen, so that the
- current link or OPTION is indicated solely by its highlighting
- or color. If show cursor is set to ON, the cursor will be
- positioned at the left of the current link or OPTION. This
- is helpful when Lynx is being used with a speech or braille
- interface. It also is useful for sighted users when the
- terminal cannot distinguish the character attributes used
- to distinguish the current link or OPTION from the others in
- the screen display.
+ <dd>Lynx normally hides the cursor by positioning it to the right
+ and if possible the very bottom of the screen, so that the
+ current link or OPTION is indicated solely by its highlighting
+ or color. If show cursor is set to ON, the cursor will be
+ positioned at the left of the current link or OPTION. This
+ is helpful when Lynx is being used with a speech or braille
+ interface. It also is useful for sighted users when the
+ terminal cannot distinguish the character attributes used
+ to distinguish the current link or OPTION from the others in
+ the screen display.
<dt>Keypad as arrows, numbered links, or numbered links and form fields
- <dd>This option gives the choice among navigating with the arrow
- keys, or having every link numbered so that the links may be
- selected or made current by numbers as well as using the arrow
- keys, or having every link as well as every form field numbered
- so that they can be selected or sought by numbers. See the<br>
- &nbsp;&nbsp;<a href="keystrokes/follow_help.html"
- >Follow link (or page) number:</a> and<br>
- &nbsp;&nbsp;<a
- href="keystrokes/follow_help.html#select-option"
- >Select option (or page) number:</a><br>
- help for more information.
+ <dd>This option gives the choice among navigating with the arrow
+ keys, or having every link numbered so that the links may be
+ selected or made current by numbers as well as using the arrow
+ keys, or having every link as well as every form field numbered
+ so that they can be selected or sought by numbers. See the<br>
+ &nbsp;&nbsp;<a href="keystrokes/follow_help.html"
+ >Follow link (or page) number:</a> and<br>
+ &nbsp;&nbsp;<a
+ href="keystrokes/follow_help.html#select-option"
+ >Select option (or page) number:</a><br>
+ help for more information.
<dt>Line edit style
- <dd>This option allows you to set alternate key bindings for the
- built-in line editor, if your system administrator has installed
- alternates. Otherwise, Lynx uses the <a
- href="keystrokes/edit_help.html">Default Binding</a>.
+ <dd>This option allows you to set alternative key bindings for the
+ built-in line editor, if alternative line-edit bindings have
+ been compiled in. Otherwise, Lynx uses the <a
+ href="keystrokes/edit_help.html">Default Binding</a>.
<dt>List directory style
- <dd>Applies to Directory Editing. Files and directories can be
- presented in the following ways:
- <dl>
- <dt>Mixed style
- <dd>Files and directories are listed together in alphabetical
- order.
- <dt>Directories first
- <dd>Files and directories are separated into two alphabetical
- lists. Directories are listed first.
- <dt>Files first
- <dd>Files and directories are separated into two alphabetical
- lists. Files are listed first.
- </dl>
+ <dd>Applies to Directory Editing. Files and directories can be
+ presented in the following ways:
+ <dl>
+ <dt>Mixed style
+ <dd>Files and directories are listed together in alphabetical
+ order.
+ <dt>Directories first
+ <dd>Files and directories are separated into two alphabetical
+ lists. Directories are listed first.
+ <dt>Files first
+ <dd>Files and directories are separated into two alphabetical
+ lists. Files are listed first.
+ </dl>
<dt>User Mode
<dd>There are three possible choices: Novice, Intermediate, and
- Advanced.
- <dl>
- <dt>Novice
- <dd>In Novice mode two lines of help are displayed at the
- bottom of the screen.
- <dt>Intermediate
- <dd>Intermediate mode turns off the help lines.
- <dt>Advanced
- <dd>Advanced mode displays the URL of the currently selected
- link at the bottom of the screen.
- </dl>
+ Advanced.
+ <dl>
+ <dt>Novice
+ <dd>In Novice mode two lines of help are displayed at the
+ bottom of the screen.
+ <dt>Intermediate
+ <dd>Intermediate mode turns off the help lines.
+ <dt>Advanced
+ <dd>Advanced mode displays the URL of the currently selected
+ link at the bottom of the screen.
+ </dl>
<dt>Verbose Images
- <dd>Controls whether or not Lynx replaces the [LINK], [INLINE] and
- [IMAGE] comments (for images without ALT) with filenames of these
- images. This is extremely useful because now we can determine
- immediately what images are just decorations (button.gif, line.gif)
- and what images are important. This setting can also be toggled
- on startup via the <em>-verbose</em> switch.
+ <dd>Controls whether or not Lynx replaces the [LINK], [INLINE] and
+ [IMAGE] comments (for images without ALT) with filenames of these
+ images. This is extremely useful because now we can determine
+ immediately what images are just decorations (button.gif, line.gif)
+ and what images are important. This setting can also be toggled
+ on startup via the <em>-verbose</em> switch.
<dt>User Agent
- <dd>The header string which Lynx sends to servers to indicate the
- User-Agent is displayed here. Changes may be disallowed via
- the <em>-restrictions</em> switch. Otherwise, the header can be
- changed temporarily to a string such as <em>L_y_n_x/2.8.2</em>
- for access to sites which discriminate against Lynx based on
- checks for the presence of &quot;Lynx&quot; in the header. If
- changed during a Lynx session, the default User-Agent header can
- be restored by deleting the modified string in the
- Options Menu. Whenever the User-Agent header is
- changed, the current document is reloaded, with the no-cache
- flags set, on exit from the Options Menu. Changes of
- the header are not saved in the RC file.
- <dd><em>NOTE</em> that Netscape Communications Corp. has claimed
- that false transmissions of "Mozilla" as the User-Agent are a
- copyright infringement, which will be prosecuted. <em>DO NOT</em>
- misrepresent Lynx as Mozilla. The Options Menu issues
- a warning about possible copyright infringement whenever the
- header is changed to one which does not include &quot;Lynx&quot;
- or &quot;lynx&quot;.
+ <dd>The header string which Lynx sends to HTTP servers to indicate the
+ User-Agent is displayed here. Changes may be disallowed via
+ the <em>-restrictions</em> switch. Otherwise, the header can be
+ changed temporarily to a string such as <em>L_y_n_x/2.8.4</em>
+ for access to sites which discriminate against Lynx based on
+ checks for the presence of &quot;Lynx&quot; in the header. If
+ the User-Agent header has been changed, it can
+ be restored to the built-in default value
+ by deleting the modified string in the
+ Options Menu. Whenever the User-Agent header is
+ changed, the current document is reloaded, with the no-cache
+ flags set, on exit from the Options Menu. Changes of
+ the header are not saved in the RC file.
+ <dd><em ID="note_ua">NOTE:</em> Some sites may regard misrepresenting
+ the browser
+ as fraudulent deception, or as gaining unauthorized access, if
+ it is used to circumvent blocking that was intentionally put in
+ place. Some browser manufacturers may find the transmission of
+ their product's name objectionable. If you change the User-Agent
+ string, it is your responsibility. The Options Menu issues
+ a reminder whenever the
+ header is changed to one which does not include &quot;Lynx&quot;
+ or &quot;L_y_n_x&quot;.
<dt>Local execution scripts or links
- <dd>Local execution can be activated by the system administrator.
- If it has not been activated you will not see this option
- in the <em>Options Menu</em>.
- <dd>When a local execution script is encountered Lynx checks the
- users options to see whether the script can be executed. Users
- have the following options:
- <dl>
- <dt> Always off
- <dd>Local execution scripts will never be executed
- <dt>For Local files only
- <dd>Local execution scripts will only be executed if the
- script to be executed resides on the local machine,
- and is referenced by a URL that begins with
- <em>file://localhost</em>
- <dt>Always on
- <dd>All local execution scripts will be executed
- </dl>
-
- <dd>If the users options permit the script to be executed Lynx will
- spawn a shell and run the script. If the script cannot be
- executed Lynx will show the script within the Lynx window and
- inform the user that the script is not allowed to be executed
- and will ask the user to check his/her options.
- [<A HREF="#ToC-InteractiveOptions">ToC</A>]
+ <dd>Local execution is activated when Lynx is first set up.
+ If it has not been activated you will not see this option
+ in the <em>Options Menu</em>.
+ <dd>When a local execution script is encountered Lynx checks the
+ users options to see whether the script can be executed. Users
+ have the following options:
+ <dl>
+ <dt> Always off
+ <dd>Local execution scripts will never be executed
+ <dt>For Local files only
+ <dd>Local execution scripts will only be executed if the
+ script to be executed resides on the local machine,
+ and is referenced by a URL that begins with
+ <em>file://localhost</em>
+ <dt>Always on
+ <dd>All local execution scripts will be executed
+ </dl>
+
+ <dd>If the users options permit the script to be executed Lynx will
+ spawn a shell and run the script. If the script cannot be
+ executed Lynx will show the script within the Lynx window and
+ inform the user that the script is not allowed to be executed
+ and will ask the user to check his/her options.
+ [<A HREF="#ToC-InteractiveOptions">ToC</A>]
</dl>
<h2 ID="Mail"><A NAME="Mail"><em>Comments and mailto: links</em></A></h2>
@@ -963,38 +993,40 @@ received the article supports posting from your site, a link that says
<dl>
<dt>Reply to user@host
- <dd>user@host will correspond to the mail address of the
- person who posted the news article. Selecting the link will
- allow you to send a message to the person who wrote the message
- you are currently viewing. You will be given the option of
- including the original message in your reply.
+ <dd>user@host will correspond to the mail address of the
+ person who posted the news article. Selecting the link will
+ allow you to send a message to the person who wrote the message
+ you are currently viewing. You will be given the option of
+ including the original message in your reply.
<dt>Followup to newsgroup(s)
- <dd>Selecting this link will allow you to post back to the
- newsgroup that you are currently reading and any newsgroups
- to which the message was cross-posted. You will be given
- the option of including the original message in your reply.
- Once you have typed in your message, you will be asked for
- confirmation of whether to proceed with the posting, and
- whether to append your signature file if one was defined in
- <A HREF="#lynx.cfg">lynx.cfg</A> and is accessible. See <a
- href="lynx_url_support.html">Supported URLs</a> for more
- information about the URL schemes for posting or sending
- followups (replies) to nntp servers with Lynx.
- [<A HREF="#ToC-News">ToC</A>]
+ <dd>Selecting this link will allow you to post back to the
+ newsgroup that you are currently reading and any newsgroups
+ to which the message was cross-posted. You will be given
+ the option of including the original message in your reply.
+ Once you have typed in your message, you will be asked for
+ confirmation of whether to proceed with the posting, and
+ whether to append your signature file if one was defined in
+ <A HREF="#lynx.cfg">lynx.cfg</A> and is accessible. See <a
+ href="lynx_url_support.html">Supported URLs</a> for more
+ information about the URL schemes for posting or sending
+ followups (replies) to nntp servers with Lynx.
+ [<A HREF="#ToC-News">ToC</A>]
</dl>
<h2 ID="Bookmarks"><A NAME="Bookmarks"><em>Lynx bookmarks</em></A></h2>
-It is often useful to place a bookmark to aid in returning quickly to
-a document. To use the bookmark feature you must first use the
-<em>Options Menu</em> to specify a bookmark filename.
-
-<p>To save a bookmark to the document you wish to place in the
+Bookmarks are entries in your <em>bookmark file</em>, which record
+the URL of a document you may want to return to easily, with a name
+of your choice to identify the document. To use bookmarks
+you must first have specified a name for your bookmark file
+in <A HREF="#lynx.cfg">lynx.cfg</A> or via the <em>Options Menu</em>.
+<p>
+To save a bookmark to the document you wish to place in the
bookmark file press the '<em>a</em>' key and you will be asked:
<blockquote>
- Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c):
+ Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c):
</blockquote>
Answer '<em>d</em>' to save a link to the document you are currently
@@ -1004,16 +1036,16 @@ your bookmark file.
<p>A bookmark file will be created in conjunction with acting on the
'<em>a</em>'dd command if it does not already exist. Otherwise, the link
-will be added to the bottom of the pre-existing bookmark file. You must
+will be added to the bottom of the pre-existing bookmark file. You must
have created a bookmark file via the '<em>a</em>'dd command before you
can view it.
<p>Use the '<em>v</em>' command to view the list of bookmarks you have
-saved. While viewing the bookmark list you may select a bookmark as you
+saved. While viewing the bookmark list you may select a bookmark as you
would any other link.
<p>You can remove a link from the bookmark list by pressing the
-'<em>r</em>' key when positioned on that link. You also can use a
+'<em>r</em>' key when positioned on that link. You also can use a
standard text editor (e.g., via the '<em>e</em>'dit command while viewing
a bookmark file, if an external editor has been defined via the <em>Options
menu</em>) to delete or re-order links in the bookmark file, or to modify
@@ -1084,8 +1116,7 @@ on your local system. The commands available in DIRED mode are
<dd>Type '<em>c</em>' to create a new file. New file will be empty.
<dt><code>D)ownload</code>
-<dd>Type '<em>d</em>' to download selection using one of the options defined
- by your system administrator.
+<dd>Type '<em>d</em>' to download using one of the pre-defined options.
<dt><code>E)dit</code>
<dd>Type '<em>e</em>' to spawn the editor defined in <em>Options Menu</em>
@@ -1106,15 +1137,23 @@ on your local system. The commands available in DIRED mode are
<dd>Type '<em>r</em>' to remove the selected file or directory.
<dt><code>T)ag</code>
-<dd>Type '<em>t</em>' to tag highlighted file. Further operations will be
+<dd>Type '<em>t</em>' to tag highlighted file. Further operations will be
performed on tagged files instead of highlighted ones.
<dt><code>U)pload</code>
-<dd>Type '<em>u</em>' to upload a file to the present directory. Upload
- methods are defined by your system administrator.
+<dd>Type '<em>u</em>' to upload a file to the present directory.
+ An uploading method must have been pre-defined in
+ <A HREF="#lynx.cfg">lynx.cfg</A> .
</dl>
[<A HREF="#ToC-DirEd">ToC</A>]
+<h2 ID="ColorMouse"><A NAME="ColorMouse"><em>Using Color & the Mouse</em></A></h2>
+
+A limited range of colors & mouse commands are available, if the user chooses:
+see <em>lynx.cfg</em> for details.
+
+[<A HREF="#ToC-ColorMouse">ToC</A>]
+
<h2 ID="MiscKeys"><A NAME="MiscKeys"><em>Scrolling and Other useful commands</em></A></h2>
A summary of all the keystroke commands and their key bindings can
@@ -1124,173 +1163,175 @@ commands.
<dl>
<dt><em>^A</em>
- <dd><em>Control-A</em> jumps you to the beginning of the current
- document. It is a synonym for the Keypad <em>Home</em> key, and
- can be used also when <em>Links are numbered</em> mode is on. The
- <em>Find</em> Function key also is a synonym, and ideally the
- latter has been mapped to the Function key labeled <em>Home</em>
- if you are using an IBM Enhanced Keyboard.
+ <dd><em>Control-A</em> jumps you to the beginning of the current
+ document. It is a synonym for the Keypad <em>Home</em> key, and
+ can be used also when <em>Links are numbered</em> mode is on. The
+ <em>Find</em> Function key also is a synonym, and ideally the
+ latter has been mapped to the Function key labeled <em>Home</em>
+ if you are using an IBM Enhanced Keyboard.
<dt><em>^E</em>
- <dd><em>Control-E</em> jumps you to the end of the current document.
- It is a synonym for the Keypad <em>End</em> key, and can be used
- also when <em>Links are numbered</em> mode is on. The <em>Select</em>
- Function key also is a synonym, and ideally the latter has been
- mapped to the Function key labeled <em>End</em> if you are using
- an IBM Enhanced Keyboard.
+ <dd><em>Control-E</em> jumps you to the end of the current document.
+ It is a synonym for the Keypad <em>End</em> key, and can be used
+ also when <em>Links are numbered</em> mode is on. The <em>Select</em>
+ Function key also is a synonym, and ideally the latter has been
+ mapped to the Function key labeled <em>End</em> if you are using
+ an IBM Enhanced Keyboard.
<dt><em>^B</em>
- <dd><em>Control-B</em> normally jumps you to the previous page of
- the current document, and thus is a synonym for the Keypad and
- Function <em>Page-Up</em> keys. However, <em>Control-B</em>
- acts as <em>right-arrow</em> when emacs-like key movement is
- enabled (see <A HREF="#InteractiveOptions">Lynx
- Options Menu</A>).
+ <dd><em>Control-B</em> normally jumps you to the previous page of
+ the current document, and thus is a synonym for the Keypad and
+ Function <em>Page-Up</em> keys. However, <em>Control-B</em>
+ acts as <em>right-arrow</em> when emacs-like key movement is
+ enabled (see <A HREF="#InteractiveOptions">Lynx
+ Options Menu</A>).
<dt><em>^F</em>
- <dd><em>Control-F</em> normally jumps you to the next page of the
- current document, and thus is a synonym for the Keypad and
- Function <em>Page-Down</em> keys. However, <em>Control-F</em>
- becomes <em>right-arrow</em> when emacs-like key movement is
- enabled.
+ <dd><em>Control-F</em> normally jumps you to the next page of the
+ current document, and thus is a synonym for the Keypad and
+ Function <em>Page-Down</em> keys. However, <em>Control-F</em>
+ becomes <em>right-arrow</em> when emacs-like key movement is
+ enabled.
<dt><em>^N</em>
- <dd><em>Control-N</em> normally jumps you forward two lines in the
- current document. The <em>Remove</em> Function key (labeled
- <em>Delete</em> on IBM Enhanced keyboards, and distinct
- from their <em>Backspace</em> key) is a synonym.
- <em>Control-N</em> becomes <em>down-arrow</em> when emacs-like
- key movement is enabled.
+ <dd><em>Control-N</em> normally jumps you forward two lines in the
+ current document. The <em>Remove</em> Function key (labeled
+ <em>Delete</em> on IBM Enhanced keyboards, and distinct
+ from their <em>Backspace</em> key) is a synonym.
+ <em>Control-N</em> becomes <em>down-arrow</em> when emacs-like
+ key movement is enabled.
<dt><em>^P</em>
- <dd><em>Control-P</em> normally jumps you back two lines in the
- current document. The <em>Insert</em> Function key is a synonym.
- <em>Control-P</em> becomes <em>up-arrow</em> when emacs-like
- key movement is enabled.
+ <dd><em>Control-P</em> normally jumps you back two lines in the
+ current document. The <em>Insert</em> Function key is a synonym.
+ <em>Control-P</em> becomes <em>up-arrow</em> when emacs-like
+ key movement is enabled.
<dt><em>)</em>
- <dd>The <em>)</em> command jumps you forward half a page in the
- current document.
+ <dd>The <em>)</em> command jumps you forward half a page in the
+ current document.
<dt><em>(</em>
- <dd>The <em>(</em> command jumps you back half a page in the
- current document.
+ <dd>The <em>(</em> command jumps you back half a page in the
+ current document.
<dt><em>#</em>
- <dd>The '<em>#</em>' command jumps you to the pseudo Toolbar or
- Banner if present in the current document. Use
- <em>left-arrow</em> to return from there to your previous
- position in the document.
+ <dd>The '<em>#</em>' command jumps you to the pseudo Toolbar or
+ Banner if present in the current document. Use
+ <em>left-arrow</em> to return from there to your previous
+ position in the document.
<dt><em>!</em>
- <dd>When '<em>!</em>' is pressed your default shell will be spawned.
- When you quit or exit the shell you will return to Lynx (usually
- <em>exit</em> under Unix and <em>logout</em> under VMS). This
- command is usually disabled for anonymous users. On VMS,
- '<em>$</em>' normally is a synonym.
- On Win32, this has no effect [???].
+ <dd>When '<em>!</em>' is pressed your default shell will be spawned.
+ When you quit or exit the shell you will return to Lynx (usually
+ <em>exit</em> under Unix and <em>logout</em> under VMS). This
+ command is usually disabled for anonymous users. On VMS,
+ '<em>$</em>' normally is a synonym.
+ On Win32, this has no effect [???].
<dt><em>g</em>
- <dd>The '<em>g</em>' command allows any URL to be viewed. Pressing
- the '<em>g</em>' command will bring up a prompt asking for a URL.
- Type in the URL that you wish to view. All previously entered
- goto URLs are saved in a circular buffer, and can be accessed at
- the prompt by pressing the <em>up-arrow</em> or
- <em>down-arrow</em> keys.
+ <dd>The '<em>g</em>' command allows any URL to be viewed. Pressing
+ the '<em>g</em>' command will bring up a prompt asking for a URL.
+ Type in the URL that you wish to view. All previously entered
+ goto URLs are saved in a circular buffer, and can be accessed at
+ the prompt by pressing the <em>up-arrow</em> or
+ <em>down-arrow</em> keys.
<dt><em>G</em>
- <dd>The '<em>G</em>' command allows you to edit the URL of the
- current document and then use that as a goto URL. Pressing
- the '<em>G</em>' command will bring up a prompt asking you
- to edit the current document's URL. If you do not modify
- it, or completely delete it, or enter Control-G, the command
- will be cancelled. If the current document has POST content
- associated with it, an Alert will be issued. If you do edit
- that URL, and it does not simply involve a fragment change
- (for seeking a position in the current document), the modified
- URL will be submitted with method GET and no POST content. If
- a modification of the current document's URL results in a
- submission, that modified URL will be entered into the circular
- buffer for goto URLs, and can be accessed for further
- modification via the '<em>g</em>' command.
+ <dd>The '<em>G</em>' command allows you to edit the URL of the
+ current document and then use that as a goto URL. Pressing
+ the '<em>G</em>' command will bring up a prompt asking you
+ to edit the current document's URL. If you do not modify
+ it, or completely delete it, or enter Control-G, the command
+ will be cancelled. If the current document has POST content
+ associated with it, an Alert will be issued. If you do edit
+ that URL, and it does not simply involve a fragment change
+ (for seeking a position in the current document), the modified
+ URL will be submitted with method GET and no POST content. If
+ a modification of the current document's URL results in a
+ submission, that modified URL will be entered into the circular
+ buffer for goto URLs, and can be accessed for further
+ modification via the '<em>g</em>' command.
<dt><em>E</em>
- <dd>The '<em>E</em>' command allows you to edit the URL (or ACTION)
- of the current link and then use that as a goto URL. Pressing
- the '<em>E</em>' command will bring up a prompt asking you
- to edit the current link's URL. If you do not modify it, or
- completely delete it, or enter Control-G, the command will be
- cancelled. Otherwise, the request for the 'E'dited URL will be
- sent with method GET, and will be entered into the circular
- buffer for goto URLs so that it can be accessed for further
- modification via the '<em>g</em>' command. Note that lower
- case 'e' invokes the editor for the current document.
+ <dd>The '<em>E</em>' command allows you to edit the URL (or ACTION)
+ of the current link and then use that as a goto URL. Pressing
+ the '<em>E</em>' command will bring up a prompt asking you
+ to edit the current link's URL. If you do not modify it, or
+ completely delete it, or enter Control-G, the command will be
+ cancelled. Otherwise, the request for the 'E'dited URL will be
+ sent with method GET, and will be entered into the circular
+ buffer for goto URLs so that it can be accessed for further
+ modification via the '<em>g</em>' command. Note that lower
+ case 'e' invokes the external editor for the current document.
<dt><em>=</em>
- <dd>The '<em>=</em>' command shows information about the current
- document and the currently selected link if there is one. The
- number of lines in the file, URL, title, owner, and type are
- shown.
+ <dd>The '<em>=</em>' command shows information about the current
+ document and the currently selected link if there is one. The
+ number of lines in the file, URL, title, owner, and type are
+ shown.
<dt><em>^T</em>
- <dd><em>Control-T</em> toggles Lynx trace mode on and off. This is
- useful for diagnosing bad html. If you get a <em>Bad HTML</em>
- statusline message when loading a document, enter
- <em>Control-T</em> and then <em>Control-R</em> to reload the
- document in trace mode. You also can submit the document for
- validation via links in the online help menu. If you are able
- to diagnose the problem, send a message about it to the
- document's author.
+ <dd><em>Control-T</em> toggles Lynx trace mode on and off. This is
+ useful for diagnosing bad html. If you get a <em>Bad HTML</em>
+ statusline message when loading a document, enter
+ <em>Control-T</em> and then <em>Control-R</em> to reload the
+ document in trace mode. You may then examine the
+ <em>Lynx Trace Log</em> file with the <em>;</em> command
+ if enabled (see below), watch out especially for lines marked
+ with a number of asterisks '<code>*****</code>'.
+ You also can submit the document for
+ validation via links in the online help menu. If you are able
+ to diagnose the problem, send a message about it to the
+ document's author.
<dt><em>;</em>
- <dd>The <em>;</em> command shows the <em>Lynx Trace Log</em>
- (<em>Lynx.trace</em> in the home directory) if one has been
- started for the current session. If a log has not been started,
- any trace and other stderr messages will be sent to the screen
- (and will disturb the normal display) unless the system supports
- piping and that was used to redirect stderr messages to a file.
- The log is started when Lynx trace mode is turned on via the
- <em>-trace</em> command line switch, or via the
- <em>Control-T</em> toggle, if Lynx has been compiled to log
- the trace and other stderr messages. If not, ability to
- create a log can be toggled on with the <em>-tlog</em> switch.
- Note that this ability is disabled in anonymous or validation
- accounts.
+ <dd>The <em>;</em> command shows the <em>Lynx Trace Log</em>
+ (<em>Lynx.trace</em> in the home directory) if one has been
+ started for the current session. If a log has not been started,
+ any trace messages will be sent to the screen
+ (and will disturb the normal display) unless the system supports
+ piping and that was used to redirect stderr messages to a file.
+ The log is started when Lynx trace mode is turned on via the
+ <em>-trace</em> command line switch, or via the
+ <em>Control-T</em> toggle, if Lynx has been compiled to log
+ the trace and other stderr messages by default. If not,
+ ability to create a log can be toggled on with
+ the <em>-tlog</em> switch. Note that this ability is
+ probably disabled in anonymous or validation accounts.
<dt><A NAME="*-key"><em>*</em></A>
- <dd>The '<em>*</em>' command toggles image_links mode on and off.
- When on, links will be created for all images, including inlines.
- If you have an image viewer mapped to the image's MIME type, you
- can activate such links to view an inline image. You should
- normally have this mode toggled off.
+ <dd>The '<em>*</em>' command toggles image_links mode on and off.
+ When on, links will be created for all images, including inlines.
+ If you have an image viewer mapped to the image's MIME type, you
+ can activate such links to view an inline image. You should
+ normally have this mode toggled off.
<dt><em>@</em>
- <dd>The '<em>@</em>' command toggles raw 8-bit or CJK mode on and off.
- When on, the charset is assumed to match the selected character
- set and 8-bit characters are not reverse translated with respect
- to the ISO-8859-1 conversion tables.
+ <dd>The '<em>@</em>' command toggles raw 8-bit or CJK mode on and off.
+ When on, the charset is assumed to match the selected character
+ set and 8-bit characters are not reverse translated with respect
+ to the ISO-8859-1 conversion tables.
<dt><A NAME="[-key"><em>[</em></A>
- <dd>The '<em>[</em>' command toggles pseudo_inlines mode on and off.
- When on, inline images which have no ALT string specified will
- have an <em>[INLINE]</em> pseudo-ALT string inserted in the Lynx
- display. When off, they will be treated as having ALT="" (i.e.,
- they'll be ignored). If image_links mode is toggled on, the
- pseudo-ALT strings will be restored, to serve as links to the
- inline images' sources.
+ <dd>The '<em>[</em>' command toggles pseudo_inlines mode on and off.
+ When on, inline images which have no ALT string specified will
+ have an <em>[INLINE]</em> pseudo-ALT string inserted in the Lynx
+ display. When off, they will be treated as having ALT="" (i.e.,
+ they'll be ignored). If image_links mode is toggled on, the
+ pseudo-ALT strings will be restored, to serve as links to the
+ inline images' sources.
<dt><em>]</em>
- <dd>The '<em>]</em>' command is used to send HEAD requests for the
- current document or link. It applies only to documents or links
- (or form submit buttons) of http servers. A statusline message
- will notify you if the context for this command was inappropriate.
- The HEAD requests always are sent to the http server, i.e., Lynx
- does not retrieve any previous server replies from its cache.
- Note that for form submissions, http servers vary in whether
- they'll treat HEAD requests as valid and return the CGI script's
- headers, or treat it as invalid and return an error message.
+ <dd>The '<em>]</em>' command is used to send HEAD requests for the
+ current document or link. It applies only to documents or links
+ (or form submit buttons) of http servers. A statusline message
+ will notify you if the context for this command was inappropriate.
+ The HEAD requests always are sent to the http server, i.e., Lynx
+ does not retrieve any previous server replies from its cache.
+ Note that for form submissions, http servers vary in whether
+ they'll treat HEAD requests as valid and return the CGI script's
+ headers, or treat it as invalid and return an error message.
<dt><em>^K</em>
- <dd><em>Control-K</em> invokes the <a
- href="keystrokes/cookie_help.html">Cookie Jar Page</a>
- if it contains cookies.
+ <dd><em>Control-K</em> invokes the <a
+ href="keystrokes/cookie_help.html">Cookie Jar Page</a>
+ if it contains cookies.
<dt><em>z</em>
- <dd>Lynx supports completely interruptible I/O processes. Press the
- '<em>z</em>' key at any time during a connect or transfer process
- and the process will be halted. If any data was transferred
- before the interrupt, it will be displayed.
+ <dd>Lynx supports completely interruptible I/O processes. Press the
+ '<em>z</em>' key at any time during a connect or transfer process
+ and the process will be halted. If any data was transferred
+ before the interrupt, it will be displayed.
<dt><em>numbers</em>
- <dd>Lynx offers other, advanced navigation features when numbers
- are used to invoke the <a
- href="keystrokes/follow_help.html"
- >Follow link (or goto link or page) number:</a> or<br>
- &nbsp;&nbsp;<a
- href="keystrokes/follow_help.html#select-option"
- >Select option (or page) number:</a><br>
- prompts.
- [<A HREF="#ToC-MiscKeys">ToC</A>]
+ <dd>Lynx offers other, advanced navigation features when numbers
+ are used to invoke the
+ <a href="keystrokes/follow_help.html">Follow Link
+ (or goto link or page) number:</a>
+ or <a href="keystrokes/follow_help.html#select-option">Select
+ Pop-up Option Number:</a> prompts.
+ [<A HREF="#ToC-MiscKeys">ToC</A>]
</dl>
<h2 ID="Forms"><A NAME="Forms"><em>Lynx and HTML Forms</em></a></h2>
@@ -1303,13 +1344,12 @@ on the form can be used to search a database or complete a survey.
<p>An HTML Form provides for the use of buttons to perform an action
(such as <em>submit</em>), checkboxes, radio buttons or popups to select
options from a list, and fields for entering text.
-<p>
<dl>
<dt>Buttons:
<dd>Buttons are displayed in the same way that Lynx displays links in
a document. To "push" the button press the <em>right-arrow</em> or
<em>Return</em> key. If it is a form submission button, you also can
- use the RESUBMIT ('<em>x</em>') or DOWNLOAD ('<em>d</em>') keystroke
+ use the NOCACHE ('<em>x</em>') or DOWNLOAD ('<em>d</em>') keystroke
commands to "push" the button (see below).
<dt>Checkboxes and Radio buttons
@@ -1342,10 +1382,10 @@ options from a list, and fields for entering text.
<dt> Text Entry Fields
<dd>Text entry (INPUT) fields are displayed as a row of underscores the
length of the entry field: <em>_______</em>. You may enter text directly
- by typing at the keyboard. Use the <a
+ by typing at the keyboard. Use the <a
href="keystrokes/edit_help.html">Line Editor</a> keys to
correct errors. If you try to input more text than the field can hold,
- the line editor will not accept the additional characters. If you fill
+ the line editor will not accept the additional characters. If you fill
a text field the cursor will not move off the field but remain at the
last field position. Use the <em>up-arrow</em>, and <em>down-arrow</em>,
<em>TAB</em> or <em>Return</em> keys to move up, or down from the text
@@ -1353,83 +1393,162 @@ options from a list, and fields for entering text.
href="#submit">submit</a> the form if the text entry field is the
only non-hidden field in the form.
+ If <A NAME="tna">"Textfields Need Activation"</A> mode is turned on
+ (with the <kbd>-tna</kbd> command-line option or in <A HREF="#lynx.cfg"
+ >lynx.cfg</A>),
+ then text entry fields do not become active immediately upon being
+ selected, as normally. Keystrokes have their normal command meaning
+ unless the Line Editor gets activated with <em>Return</em> or <em>Right
+ Arrow</em>. This mode can be used to avoid "getting stuck" in input
+ fields, especially by users who rarely fill out forms.
+
+ <DIV ID="CtrlVNote">
+ <p><em>NOTE:</em> If you have a text input field selected you will not
+ have access to most of the Lynx keystroke commands, because they are
+ interpreted by the <a href="keystrokes/edit_help.html"
+ >Line Editor</a> as either text entries or editing commands. Select a
+ button or box when you want to use Lynx keystrokes; or prefix your
+ keystroke with <em>^V</em> to temporarily escape from line editing.
+ <p>
+ Some flavors of UNIX, shells &amp; terminal settings require
+ that you enter <em>^V^Ve</em> in order to start the external editor,
+ as they also use <em>^V</em> as default command-line quote key
+ (called `lnext' in stty man pages and `stty -a' output);
+ to avoid this, you can put `stty lnext undef' in your .cshrc
+ file (or .profile or .bashrc, depending on what shell you use),
+ or invoke Lynx with a wrapper script, e.g.<p>
+
+ <code>
+ &nbsp;&nbsp;#!/bin/sh<br>
+ &nbsp;&nbsp;stty lnext undef<br>
+ &nbsp;&nbsp;$HOME/bin/lynx "$@"<br>
+ &nbsp;&nbsp;stty lnext ^V<br>
+ &nbsp;&nbsp;exit</code><p>
+
+ NB when NOT in the Line Editor, <em>^V</em> is by default bound
+ to the command
+ to switch between SortaSGML and TagSoup HTML parsing
+ (i.e., SWITCH_DTD).
+ To avoid confusion, either of these separate functions could be changed
+ (mapped away) with a KEYMAP directive in <em>lynx.cfg</em>. For
+ example,
+ <p>
+ &nbsp;&nbsp;KEYMAP:^V:DO_NOTHING<br>
+ &nbsp;&nbsp;KEYMAP:#:SWITCH_DTD
+ <p>
+ would map SWITCH_DTD away from <em>^V</em> to <em>#</em>, while leaving
+ its default Line Editor function as a command escape in place. On the
+ other hand,
+ <p>
+ &nbsp;&nbsp;KEYMAP:^V::NOP:1<br>
+ &nbsp;&nbsp;KEYMAP:^_::LKCMD:1
+ <p>
+ would move <em>^V</em>'s Line Editor binding as command escape to
+ <em>^_</em> for the first Line Edit style, letting <em>^V</em> still
+ act as SWITCH_DTD
+ outside of text input fields.
+ </DIV>
+
<dt>TEXTAREA Fields
-<dd>TEXTAREA fields are handled as if they were a series of text entry
- (INPUT) fields for which successive lines imply a newline at the end of
+<dd>TEXTAREA fields are for most purposes handled as if they were a series of
+ text entry (INPUT) fields
+ for which successive lines imply a newline at the end of
the preceding line. You enter text on each line to construct the overall
message. Any blank lines at the bottom of the TEXTAREA field will be
eliminated from the submission. The <em>up-arrow</em>, and
<em>down-arrow</em> or <em>Return</em> keys move you to the preceding,
- or next line of the overall message, as for INPUT fields, and the
+ or next line of the overall message, as for INPUT fields. The
<em>TAB</em> key will move you down beyond the bottom of the TEXTAREA
- field, or to the first line on the next page if the overall field
- extends beyond the currently displayed page.<P>
-
-<dt>Editing TEXTAREA Fields
-<dd>TEXTAREA fields can be edited using an external editor
- by entering <em>^ve</em> when in the TEXTAREA.<p>
-
- You can also use two other special TEXTAREA functions
+ field, and <em>Back Tab</em> (if available, e.g., as Shift-Tab, and
+ correctly mapped in the terminal description) will move backward to
+ a link or field before the TEXTAREA.
+
+<dt>Editing TEXTAREA Fields and Special TEXTAREA Functions
+<dd>TEXTAREA fields can be edited using an external editor.
+ The statusline should tell you when this is possible and what
+ key to use, it might for example say
+
+<PRE> <strong
+ >(Textarea) Enter text. </strong>[ ..... ]<strong> (^Xe for editor).</strong></PRE>
+
+ An external editor has to be defined, for example in the <a
+ href="#InteractiveOptions">Options Menu</a>, before you can start
+ using this function.
+
+ <p>A key to invoke external TEXTAREA editing is normally provided
+ by the <a href="keystrokes/edit_help.html">Line-Editor Key</a> Bindings.
+ A KEYMAP directive in <em>lynx.cfg</em> can also be used to
+ make a different key invoke external editing; it will then normally
+ be necessary to prefix that key with <em>^V</em> to "escape" from
+ line-editing. Two variants exist,<br>
+ &nbsp;&nbsp;KEYMAP:e:EDITTEXTAREA<br>
+ or<br>
+ &nbsp;&nbsp;KEYMAP:e:DWIMEDIT<br>
+ (the first is only functional for TEXTAREA editing, while the second
+ allows to use the same key for normal <a href="#FileEdit">file
+ editing</a> <em>as long as both functions don't conflict</em>).
+ <p>Please see the <a href="#CtrlVNote">note above</a> for details
+ about <em>^V</em> behavior.</p>
+
+ You can also use two other special TEXTAREA functions. Again, these
+ are already bound to key sequences in the <a
+ href="keystrokes/edit_help.html#TASpecial">Line-Editor
+ Bindings</a>, by default <em>^Xg</em> and <em>^Xi</em>.
+ You can use different keys
by adding KEYMAP bindings to your <em>lynx.cfg</em> file, e.g.<p>
&nbsp;&nbsp;KEYMAP:$:GROWTEXTAREA<br>
&nbsp;&nbsp;KEYMAP:#:INSERTFILE<p>
- With these binding -- you can choose other keys -- ,<br>
- (in a TEXTAREA only) <em>^v$</em> adds 5 lines to the TEXTAREA
- and <em>^v#</em> brings up the name of an existing file
+ With these bindings,
+ (in a TEXTAREA only) <em>^V$</em> would add 5 lines to the TEXTAREA
+ and <em>^V#</em> would prompt for the name of an existing file
to be inserted into the TEXTAREA (above the cursorline).
- An automatic variation is normally compiled in,
+ An automatic variation of GROWTEXTAREA is normally compiled in,
so that hitting <em>Enter</em> with the cursor on the last line
adds a new line to the TEXTAREA, with the cursor on it.<p>
- Some flavors of UNIX, shells &amp; terminal settings require
- that you enter <em>^v^ve</em> in order to start the editor,
- as they also use <em>^v</em> as default command-line quote key
- (called `lnext' in stty man pages and `stty -a' output);
- to avoid this, you can put `stty lnext undef' in .cshrc
- or invoke Lynx with a wrapper script, e.g.<p>
-
- <code>
- &nbsp;&nbsp;#!/bin/sh<br>
- &nbsp;&nbsp;stty lnext undef<br>
- &nbsp;&nbsp;$HOME/bin/lynx "$@"<br>
- &nbsp;&nbsp;stty lnext ^V<br>
- &nbsp;&nbsp;exit</code><p>
-
- NB when NOT in a TEXTAREA, <em>^v</em> is the default command
- to switch between SortaSGML and TagSoup HTML parsing
- (i.e., SWITCH_DTD ).
-
+ If you have some single keys (or control keys) to spare that you
+ do not need for their normal purposes, you can dedicate those keys
+ to invoke the special functions (without requiring a prefix key).
+ For example, to use
+ the <em>^E</em> key for the DWIMEDIT action, and
+ the <em>Insert</em> key for the INSERTFILE action,
+ use<br>
+ &nbsp;&nbsp;KEYMAP:^E:DWIMEDIT:PASS<br>
+ &nbsp;&nbsp;KEYMAP:0x10C:INSERTFILE:PASS<br>
+ (see lynx.cfg for other keystroke codes to use).
+
+ <p>Note that the default bindings that use <em>^X</em> as a prefix key
+ <em>may</em> also work by substituting the <kbd>Escape</kbd> key
+ for ^X. If your keyboard has a modifier (Meta) key that gets
+ transmitted as an ESC prefix, for example <kbd>Alt</kbd>, you can
+ then even use <em>Alt-e</em> instead of <em>^Xe</em>, <em>Alt-g</em>
+ instead of <em>^Xg</em>, and so on. But this does not work reliably
+ everywhere (it depends on the way Lynx is compiled, including which
+ libraries are used, and behavior of the connection and terminal type).
</dl>
In general, you can move around the form using the standard Lynx navigation
keys. The <em>up-arrow</em> and <em>down-arrow</em> keys, respectively,
select the previous or next field, box, or button. The <em>TAB</em> key
-selects the next field (or next page of a TEXTAREA if it extends onto the
-next page), box, or button.
-
-<p><em>NOTE:</em> If you have a text input field selected you will not
-have access to most of the Lynx keystroke commands, because they are
-interpreted by the <a href="keystrokes/edit_help.html"
->Line Editor</a> as either text entries or editing commands. Select a
-button or box when you want to use Lynx keystrokes.
+selects the next field, box, or button.
<p>To <A name="submit"><em>submit</em></a> the form press
<em>right-arrow</em> or <em>Return</em> when positioned on the form's
-submit button. If you've submitted the form previously during the Lynx
+submit button. If you've submitted the form previously during the Lynx
session, have not changed any of the form content, and the METHOD was
<em>GET</em>, Lynx will retrieve from its cache what was returned from the
previous submission. If you wish to resubmit that form to the server with
-the same content as previously, use the RESUBMIT command ('<em>x</em>') when
+the same content as previously, use the NOCACHE command ('<em>x</em>') when
positioned on the submit button. The <em>right-arrow</em> and <em>Return</em>
keys also will invoke a no-cache resubmission if the reply from a form
submission included a META element with a no-cache Pragma or Cache-Control
directive:<BR>
-<tab indent="12"
-><em>&lt;META HTTP-EQUIV="Pragma" CONTENT="no-cache"&gt;</em><BR>
-<tab indent="12"
-><em>&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt;</em><BR>
+<pre>
+ <em>&lt;META HTTP-EQUIV="Pragma" CONTENT="no-cache"&gt;</em>
+ <em>&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt;</em>
+</pre>
or the server sent a "Pragma" or "Cache-Control" MIME header with a
no-cache directive.
@@ -1557,19 +1676,52 @@ Otherwise, Lynx uses the last symbolic element in the path for the FORM's
ACTION, which is normally the script, itself, or a PATH_INFO field, and
thus might be misleading. This also can be done via a META element in
any document:
-<tab indent="12"
-><em>&lt;META <tab id="cdis">HTTP-EQUIV="Content-Disposition"<BR>
-<tab to="cdis">CONTENT="file;&nbsp;filename=name.suffix"&gt;</em><BR>
+<pre>
+ <em>&lt;META HTTP-EQUIV="Content-Disposition"
+ CONTENT="file;&nbsp;filename=name.suffix"&gt;</em>
+</pre>
[<A HREF="#ToC-Forms">ToC</A>]
+<h2 ID="Images"><A NAME="Images"><em>Lynx and HTML Images</em></a></h2>
+
+As a text browser, Lynx does not display images as such
+-- you need to define a viewer in <em>lynx.cfg</em>: see there -- ,
+but users can choose a number of ways of showing their presence.
+<p>
+There are 3 choices in <em>lynx.cfg</em>, with 2 corresponding keys:
+<pre>
+ MAKE_LINKS_FOR_ALL_IMAGES * IMAGE_TOGGLE
+ MAKE_PSEUDO_ALTS_FOR_INLINES [ INLINE_TOGGLE
+ VERBOSE_IMAGES no corresponding key
+</pre><p>
+You can also use the <em>Options Menu</em>, as outlined below:
+<pre>
+ key lynx.cfg FM KM .lynxrc variable in source
+
+ * MAKE_LINKS_ Y N N clickable_images
+ [ MAKE_PSEUDO_ Y N N pseudo_inline_alts
+ VERBOSE_ Y Y Y verbose_img
+
+FM = Form-based Menu ; KM = Key-based Menu ;
+in .lynxrc , VERBOSE_IMAGES is called `verbose_images':
+the other two cannot be saved between sessions.
+</pre><p>
+In the Form-based Menu, the 3-way `Show images' selection
+combines the effects of the `*' &amp; `[' keys, as follows:
+<pre>
+ Ignore clickable_images = FALSE, pseudo_inline_alts = FALSE
+ As labels clickable_images = FALSE, pseudo_inline_alts = TRUE
+ As links clickable_images = TRUE, pseudo_inline_alts = unchanged
+</pre>
+
<h2 ID="Tables"><A NAME="Tables"><em>Lynx and HTML Tables</em></a></h2>
HTML includes markup for creating <em>tables</em> structured as arrays of
cells aligned by columns and rows on the displayed page.
<p>Lynx recognizes the TABLE element and all of its associated elements
-as described in <a href="ftp://ds.internic.net/rfc/rfc1942.txt"
->ftp://ds.internic.net/rfc/rfc1942.txt</a>
+as described in <a href="http://www.faqs.org/rfcs/rfc1942.html"
+>http://www.faqs.org/rfcs/rfc1942.html</a>
and will process any ID attributes in the start tags for handling as NAME-ed
anchors, but does not create actual <em>tables</em>. Instead, it treats
the TR start tag as a collapsible BR (line break), and inserts a collapsible
@@ -1584,6 +1736,50 @@ formatted content, or, if the <em>table</em> includes markup not allowed
for PRE content, construct the <em>table</em> using <a
href="#Tabs">HTML Tabs</a>. An example <em>table</em> using <em>TAB</em>
elements is included in the test subdirectory of the Lynx distribution.
+
+<DIV ID="TRST">
+<p>Starting with version 2.8.3, Lynx renders some tables in tabular
+form. This tabular representation for <em>simple</em> tables
+(<dfn>TRST</dfn>) does not attempt to implement full support for any table
+model. Limitations are:
+<ul>
+ <li>All data constituting a table row generally has to fit within the
+ display width without inserting line breaks.
+ <li>Cell contents have to be simple. In general, only inline markup is
+ acceptable, no <code>&lt;P&gt;</code>, <code>&lt;BR&gt;</code> etc.
+ (although <code>&lt;BR&gt;</code> may
+ be ignored at the beginning of the first cell or at the end of the
+ last cell of a row).
+ <li>When tables are nested, only the innermost level is a candidate
+ for tabular representation.
+ <li>Most attributes are ignored, including borders, <code>WIDTH</code>,
+ vertical alignment.
+</ul>
+Horizontal alignments (<code>LEFT</code>, <code>CENTER</code>,
+<code>RIGHT</code>), <code>COLSPAN</code>, and <code>ROWSPAN</code> are
+interpreted according to HTML 4.01. (<code>ROWSPAN</code> can only reserve
+empty space in subsequent rows, because of the limitations above.) When
+TRST fails because a table is not "simple" enough, the representation falls
+back to the minimal handling described earlier.
+Many (but, unfortunately, by no means all) tables that represent inherently
+tabular material will thus be shown with correct tabular formatting.
+Where table markup is used only for layout purposes (containing whole blocks
+of text and list within table cells) and not essential for understanding
+the textual contents, it remains basically ignored. Some more information
+on details is available in the file <kbd>README.TRST</kbd> of the source
+distribution.
+</DIV>
+
+<p>For tabular display of more complex tables, Lynx users can make use of
+external scripts or programs. The normal Lynx distribution currently does
+not provide such scripts, but they can be written locally or downloaded
+from several sources. It is suggested to use one of Lynx's facilities for
+invoking external programs (see <kbd>DOWNLOADER</kbd>, <kbd>PRINTER</kbd>,
+<kbd>EXTERNAL</kbd>, <kbd>TRUSTED_LYNXCGI</kbd> in <A
+HREF="#lynx.cfg">lynx.cfg</A> and <A HREF="lynx_url_support.html#cgi"><code
+>lynxcgi:</code></A> in <em>Supported URLs</em> for information on various
+ways for setting this up).
+
[<A HREF="#ToC-Tables">ToC</A>]
<h2 ID="Tabs"><A NAME="Tabs"><em>Lynx and HTML Tabs</em></a></h2>
@@ -1594,7 +1790,7 @@ TAB element only when LEFT alignment is in effect. If the alignment is
CENTER or RIGHT (JUSTIFY is not yet implemented in Lynx, and is treated
as a synonym for LEFT), or if the TAB element indicates a position to the
left of the current position on the screen, it is treated as a collapsible
-space. For purposes of implementing TAB, Lynx treats <em>en</em> units as
+space. For purposes of implementing TAB, Lynx treats <em>en</em> units as
half a character cell width when specified by the INDENT attribute, and
rounds up for odd values (e.g., a value of either 5 or 6 will be treated
as three spaces, each the width of a character cell). See the example
@@ -1653,8 +1849,10 @@ a number of others which have subsequently been proposed. These
<em>Meta</em>, <em>URC</em>, <em>Hotlist</em>, <em>Begin</em>,
<em>First</em>, <em>End</em>, <em>Last</em>, <em>Pointer</em>,
<em>Translation</em>, <em>Definition</em>, <em>Chapter</em>,
+<em>Section</em>, <em>Subsection</em>, <em>Alternate</em>,
<em>Documentation</em>, <em>Biblioentry</em>, <em>Bibliography</em>,
-<em>Bookmark</em> and <em>Banner</em>. Any LINK elements with those
+<em>Start</em>, <em>Appendix</em>,
+<em>Bookmark</em> and <em>Banner</em>. Any LINK elements with those
tokens as the REL attribute value, and an HREF attribute value in the LINK,
will invoke creation of a <em>banner</em> at the top of the first page,
with the element's HREF as the link, and the token as the default link
@@ -1710,13 +1908,14 @@ document. However, in contrast to named <em>A</em>nchors, the FN container
element is treated as a block (i.e., as if a new paragraph were indicated
whether or not that is indicated in its content) with greater than normal
left and right margins, and the block will begin with a <em>FOOTNOTE:</em>
-label. For example, if the document contains:<BR>
-<tab indent="16">See the <em>&lt;A
-HREF="#fn1"&gt;</em><a href="#an1">footnote</a><em>&lt;/A&gt;</em>.<BR>
+label. For example, if the document contains:
+<pre>
+ See the <em>&lt;A HREF="#fn1"&gt;</em><a href="#an1">footnote</a><em>&lt;/A&gt;</em>.
+</pre>
activating that link will take you to the labeled rendering of:
-
-<p><tab indent="16"><em>&lt;FN ID="fn1"&gt;</em>&lt;p&gt;<a name="an1">Lynx
-does not use popups for FN blocks.</a>&lt;/p&gt;<em>&lt;/FN&gt;</em>
+<pre>
+ <em>&lt;FN ID="fn1"&gt;</em>&lt;p&gt;<a name="an1">Lynx does not use popups for FN blocks.</a>&lt;/p&gt;<em>&lt;/FN&gt;</em>
+</pre>
<p>i.e., position it at the top of the page. Then, upon reading the footnote,
you can return to your previous position in the document by pressing the
@@ -1739,12 +1938,13 @@ default label <em>NOTE:</em> will be used. Lynx recognizes the values
have an ID attribute, which will be treated as a named <em>A</em>nchor, as
for <a href="#Footnotes">HTML Footnotes</a>,
but the NOTE block need not be placed
-at the bottom of the document. The content of a NOTE block can be any HTML
+at the bottom of the document. The content of a NOTE block can be any HTML
markup that is valid in the BODY of the document. This is an example:<BR>
-<tab indent="12"><em>&lt;NOTE CLASS="warning" ID="too-bad"&gt;<BR>
-<tab indent="14">&lt;p&gt;The W3C vendors did not retain
-NOTE in the HTML 3.2 draft.&lt;/p&gt;<BR>
-<tab indent="12">&lt;/NOTE&gt;</em><BR>
+<pre>
+ <em>&lt;NOTE CLASS="warning" ID="too-bad"&gt;
+ &lt;p&gt;The W3C vendors did not retain NOTE in the HTML 3.2 draft.&lt;/p&gt;
+ &lt;/NOTE&gt;</em>
+</pre>
It will <em>degrade gracefully</em> for WWW browsers which do not support
NOTE, except for recognition of the ID attribute as a named <em>A</em>nchor.
[<A HREF="#ToC-Notes">ToC</A>]
@@ -1756,8 +1956,8 @@ href="http://www.w3.org/MarkUp/html3/Contents.html">HTML 3.0</a>
list elements UL (<em>Unordered List</em>), OL (<em>Ordered List</em>),
and DL (<em>Definition List</em>), and their associated attributes, and
elements (LH, LI, DT, and DD) for the most part as described in that
-specification. The lists can be nested, yielding progressively greater
-indentation, up to six levels. The <a
+specification. The lists can be nested, yielding progressively greater
+indentation, up to six levels. The <a
href="http://www.w3.org/MarkUp/html-spec/html-spec_toc.html"
>HTML 2.0</a> MENU and DIR elements <em>both</em> are treated as synonyms
for UL with the PLAIN attribute (no <em>bullets</em>, see below). Note,
@@ -1789,7 +1989,7 @@ alphabetical depending on the TYPE for the block. The values can range from
For Roman numerals, they can range from <em>1</em> (<em>I</em> or <em>i</em>)
to <em>3000</em> (<em>MMM</em> or <em>mmm.</em>). For alphabetical orders,
the values can range from <em>1</em> (<em>A</em> or <em>a</em>) to
-<em>18278</em> (<em>ZZZ</em> or <em>zzz</em>). If the CONTINUE attribute is
+<em>18278</em> (<em>ZZZ</em> or <em>zzz</em>). If the CONTINUE attribute is
used, you do not need to specify a START or SEQNUM attribute to extend the
ordering from a previous block, and you can include a TYPE attribute to
change among Arabic, Roman, or alphabetical ordering styles, or their casing,
@@ -1836,7 +2036,7 @@ its first line.
of a hyperlink in the form URL#id. It is treated just
like the NAME in <em>A</em>nchors. [<A HREF="#ToC-Quotes">ToC</A>]
-<h2 ID="Eightbit"><A NAME="Eightbit"><em>Lynx and HTML Internationalization: 8bit, unicode, etc.</em></a></h2>
+<h2 ID="Eightbit"><A NAME="Eightbit"><em>Lynx and HTML Internationalization: 8bit, UNICODE, etc.</em></a></h2>
Lynx has superior support for HTML 4.0/I18N internationalization issues.
However, to see the characters other than 7bit properly you <em>should</em>
@@ -1873,7 +2073,7 @@ sight-challenged Webizens, and thus did not include ALT attributes, Lynx
uses the resolved URLs pointed to by the HREF attributes as the link names.
Lynx uses the TITLE attribute of the IMG element, or the TITLE attribute of
the MAP, if either was present in the markup, as the title and main header
-of the menu. Otherwise, it uses the ALT attribute of the IMG element. If
+of the menu. Otherwise, it uses the ALT attribute of the IMG element. If
neither TITLE nor ALT attributes were present in the markup, Lynx creates
and uses a <em>[USEMAP]</em> pseudo-ALT. The MAPs need not be in the same
document as the IMG elements. If not in the same document, Lynx will fetch
@@ -1921,9 +2121,10 @@ in META elements, and one such instruction, via the token <em>Refresh</em>,
should invoke reloading of the document, fetched from a server with the
same URL or a new URL, at a specified number of seconds following receipt
of the current document. This procedure has been termed
-<em>client-side-pull</em>. An example of such an element is:<BR>
-<tab indent="12"><em>&lt;META HTTP-EQUIV="Refresh" CONTENT="3;
-URL="http://host/path"&gt;</em><BR>
+<em>client-side-pull</em>. An example of such an element is:
+<pre>
+ <em>&lt;META HTTP-EQUIV="Refresh" CONTENT="3; URL="http://host/path"&gt;</em>
+</pre>
which instructs a client to fetch the indicated URL in 3 seconds after
receiving the current document. If the <em>URL=</em> field is omitted,
the URL defaults to that of the current document. A <em>no-cache</em>
@@ -1987,7 +2188,7 @@ cookies from that <em>domain</em> (server's Fully Qualified Domain Name,
or site-identifying portion of the FQDN) without further confirmation
prompts, or ne'<em>V</em>'er to never allow cookies from that
<em>domain</em> to be accepted (silently ignore its <em>Set-Cookie</em>
-MIME headers). All unexpired cookies are held in a hypothetical
+MIME headers). All unexpired cookies are held in a hypothetical
<em>Cookie Jar</em> which can be examined via the COOKIE_JAR keystroke
command, normally mapped to <em>Ctrl-K</em>, for invoking the <a
href="keystrokes/cookie_help.html">Cookie Jar Page</a>. If Lynx has been
@@ -1996,7 +2197,7 @@ will be stored between sessions in the filename set with the COOKIE_FILE
option in your .lynxrc.
<p>A common use of cookies by http servers is simply to track the
-documents visited by individual users. Though this can be useful to the
+documents visited by individual users. Though this can be useful to the
site's WebMaster for evaluating and improving the organization of links
in the various documents of the site, if the user has configured Lynx
to include a <em>From</em> MIME header with the user's email address in
@@ -2028,416 +2229,637 @@ be represented as one of the following:
<dl>
<dt><code>Command</code>
- <dd><code>lynx [options]</code>
- <dd><code>lynx [options] startfile</code>
+ <dd><code>lynx [options]</code>
+ <dd><code>lynx [options] startfile</code>
</dl>
where
<dl>
<dt><code>startfile</code>
- <dd>is the file or URL that Lynx will load at start-up.
- <ul>
- <li>If startfile is not specified, Lynx will use a default
- starting file and base directory determined during
- installation.
- <li>If a specified file is local (i.e., not a URL) Lynx
- displays that file and uses the directory in which that
- file resides as the base directory.
- <li>If a URL is specified, the file will be retrieved,
- and only the server base directory will be relevant
- to further accesses.
- </ul>
+ <dd>is the file or URL that Lynx will load at start-up.
+ <ul>
+ <li>If startfile is not specified, Lynx will use a default
+ starting file and base directory determined during
+ installation.
+ <li>If a specified file is local (i.e., not a URL) Lynx
+ displays that file and uses the directory in which that
+ file resides as the base directory.
+ <li>If a URL is specified, the file will be retrieved,
+ and only the server base directory will be relevant
+ to further accesses.
+ </ul>
<dt><code>options</code>
- <dd>can be selected from the following list, where items in
- all-caps indicate that a substitution must be made.
- <dl>
- <dt><code>-</code>
- <dd>If the argument is only '<code>-</code>' (dash), then Lynx
- expects to receive the arguments from stdin. This is to
- allow for the potentially very long command line that can
- be associated with the <em>-get_data</em> or
- <em>-post_data</em> arguments (see below). On VMS, it
- must be encased in double-quotes (&quot;-&quot;) and the
- keyboard input terminated with <em>Control-Z</em> or the
- command file input terminated by a line that begins
- with '<em>$</em>'. On Unix, the keyboard input terminator
- is <em>Control-D</em>. On Win32, [???].
- <dt><code>-accept_all_cookies</code>
- <dd>accept all cookies.
- <dt><code>-anonymous</code>
- <dd>used to specify the anonymous account.
- <dt><code>-assume_charset=MIMEname</code>
- <dd>charset for documents that don't specify it.
- <dt><code>-assume_local_charset=MIMEname</code>
- <dd>charset assumed for local files.
- <dt><code>-assume_unrec_charset=MIMEname</code>
- <dd>use this instead of unrecognized charsets.
- <dt><code>-auth=ID:PW</code>
- <dd>set authorization ID and password for protected documents
- at startup. Be sure to protect any script files which use
- this switch.
- <dt><code>-base</code>
- <dd>prepend a request URL comment and BASE tag to text/html
- outputs for -source dumps.
- <dt><code>-blink</code>
- <dd>forces high intensity bg colors for color mode,
- if available and supported by the terminal.
- Lynx needs to be compiled with the slang library for this
- flag.
- <dt><code>-book</code>
- <dd>use the bookmark page as the startfile. The default or
- command line startfile is still set for the Main screen
- command, and will be used if the bookmark page is
- unavailable or blank.
- <dt><code>-buried_news</code>
- <dd>toggles scanning of news articles for buried references,
- and converts them to news links. Not recommended because
- email addresses enclosed in angle brackets will be
- converted to false news links, and uuencoded messages can
- be trashed.
- <dt><code>-cache=NUMBER</code>
- <dd>set the <em>NUMBER</em> of documents cached in memory.
- The default is 10.
- <dt><code>-case</code>
- <dd>enable case-sensitive string searching.
- <dt><code>-cfg=FILENAME</code>
- <dd>specifies a Lynx configuration file other than the default
- <A HREF="#lynx.cfg">lynx.cfg</A>.
- <dt><code>-child</code>
- <dd>exit on left-arrow in startfile, and disable save to disk.
- <dt><code>-color</code>
- <dd>forces color mode on, if available. Default color control sequences
- which work for many terminal types are assumed if the terminal
- capability description does not specify how to handle color.
- Lynx needs to be compiled with the slang library for this flag.
- A saved show_color=always setting found in a .lynxrc file at
- startup has the same effect. A saved show_color=always found
- in .lynxrc on startup is overridden by this flag.
- <dt><code>-cookies</code>
- <dd>toggles handling of Set-Cookie headers.
- <dt><code>-core</code>
- <dd>toggles forced core dumps on fatal errors. (Unix only)
- <dt><code>-crawl</code>
- <dd>with <em>-traversal</em>, output each page to a file.<br>
- with <em>-dump</em>, format output as with
- <em>-traversal</em>, but to stdout.
- <dt><code>-display=DISPLAY</code>
- <dd>set the display variable for X rexe-ced programs.
- <dt><code>-dump</code>
- <dd>dumps the formatted output of the default document
- or one specified on the command line to standard out.
- This can be used in the following way:<br>
- <em>lynx -dump http://www.w3.org/</em>
- <dt><code>-editor=EDITOR</code>
- <dd>enable edit mode using the specified
- <em>EDITOR</em>. (vi, ed, emacs, etc.)
- <dt><code>-emacskeys</code>
- <dd>enable emacs-like key movement.
- <dt><code>-enable_scrollback</code>
- <dd>toggles behavior compatible with the scrollback keys in
- some communications software (may be incompatible with
- some curses packages).
- <dt><code>-error_file=FILENAME</code>
- <dd>the status code from the HTTP request is placed in this
- file.
- <dt><code>-locexec</code>
- <dd>enable local program execution from local files only
- (if lynx was compiled with local execution enabled).
- <dt><code>-fileversions</code>
- <dd>include all versions of files in local VMS directory
- listings.
- <dt><code>-force_html</code>
- <dd>forces the first document to be interpreted as HTML.
- <dt><code>-force_secure</code>
- <dd>toggles forcing of the secure flag for SSL cookies.
- <dt><code>-from</code>
- <dd>toggles transmissions of From headers to HTTP or HTTPS
- servers.
- <dt><code>-ftp</code>
- <dd>disable ftp access.
- <dt><code>-get_data</code>
- <dd>properly formatted data for a get form are read in from
- stdin and passed to the form. Input is terminated by a
- line that starts with '---'.
- <dt><code>-head</code>
- <dd>send a HEAD request for the mime headers.
- <dt><code>-help</code>
- <dd>print this Lynx command syntax usage message.
- <dt><code>-historical</code>
- <dd>toggles use of '&gt;' or '--&gt;' as a terminator for
- comments.
- <dt><code>-homepage=URL</code>
- <dd>set homepage separate from start page. Will be used
- if a fetch of the start page fails or if it is a
- script which does not return a document, and as the
- <code>URL</code> for the '<em>m</em>'ain menu command.
- <dt><code>-image_links</code>
- <dd>toggles inclusion of links for all images.
- <dt><code>-ismap</code>
- <dd>toggles inclusion of ISMAP links when client-side
- MAPs are present.
- <dt><code>-index=URL</code>
- <dd>set the default index file to the specified <em>URL</em>
- <dt><code>-link=NUMBER</code>
- <dd>starting count for lnk#.dat files produced by
- <em>-crawl</em>.
- <dt><code>-localhost</code>
- <dd>disable URLs that point to remote hosts.
- <dt><code>-mime_header</code>
- <dd>include mime headers and force source dump.
- <dt><code>-minimal</code>
- <dd>toggles minimal versus valid comment parsing. When
- minimal, any '--&gt;' serves as a terminator for a
- comment element. When valid, pairs of '--' are
- treated as delimiters for series of comments within
- the overall comment element. If historical is set,
- that overrides minimal or valid comment parsing.
- <dt><code>-newschunksize=NUMBER</code>
- <dd>number of articles in chunked news listings.
- <dt><code>-newsmaxchunk=NUMBER</code>
- <dd>maximum news articles in listings before chunking.
- <dt><code>-nobrowse</code>
- <dd>disable directory browsing.
- <dt><code>-nocc</code>
- <dd>disable Cc: prompts for self copies of mailings. Note
- that this does not disable any CCs which are incorporated
- within a mailto URL or form ACTION.
- <dt><code>-nocolor</code>
- <dd>force color mode off, overriding terminal capabilities and any
- <em>-color</em> flags, <em>COLORTERM</em> variable, and saved .lynxrc settings.
- <dt><code>-noexec</code>
- <dd>disable local program execution. (DEFAULT)
- <dt><code>-nofilereferer</code>
- <dd>disable transmissions of Referer headers for file URLs.
- <dt><code>-nolist</code>
- <dd>disable the link list feature in dumps.
- <dt><code>-nolog</code>
- <dd>disable mailing of error messages to document owners.
- <dt><code>-nopause</code>
- <dd>disable forced pauses for statusline messages.
- <dt><code>-noprint</code>
- <dd>disable print functions.
- <dt><code>-noredir</code>
- <dd>don't follow URL redirections
- <dt><code>-noreferer</code>
- <dd>disable transmissions of Referer headers.
- <dt><code>-nosocks</code>
- <dd>disable SOCKS proxy usage by a SOCKSified Lynx.
- <dt><code>-nostatus</code>
- <dd>disable the retrieval status messages.
- <dt><code>-number_links</code>
- <dd>force numbering of links.
- <dt><code>-partial</code>
- <dd>toggles display partial pages while downloading.
- <dt><code>-pauth=ID:PW</code>
- <dd>set authorization ID and password for a protected proxy
- server at startup. Be sure to protect any script files
- which use this switch.
- <dt><code>-popup</code>
- <dd>toggles handling of single-choice SELECT options via
- popup windows or as lists of radio buttons. The default
- configuration can be changed in userdefs.h or
- <A HREF="#lynx.cfg">lynx.cfg</A>.
- It also can be set and saved via the 'o'ptions menu.
- The command line switch toggles the default.
- <dt><code>-post_data</code>
- <dd>properly formatted data for a post form are read in from
- stdin and passed to the form. Input is terminated by a
- line that starts with '---'.
- <dt><code>-preparsed</code>
- <dd>show source preparsed and reformatted when used with
- -source or in source view ('<em>\</em>').
- May be useful for debugging of broken HTML markup
- to visualize the difference between SortaSGML and TagSoup
- <A HREF="keystrokes/option_help.html#tagsoup">recovery modes</A>,
- switched by '<em>^V</em>'.
- <dt><code>-print</code>
- <dd>enable print functions. (default)
- <dt><code>-pseudo_inlines</code>
- <dd>toggles pseudo-ALTs for inlines with no ALT string.
- <dt><code>-raw</code>
- <dd>toggles default setting of 8-bit character translations
- or CJK mode for the startup character set.
- <dt><code>-realm</code>
- <dd>restricts access to URLs in the starting realm.
- <dt><code>-reload</code>
- <dd>flushes the cache on a proxy server
- (only the first document affected).
- <dt><code>-restrictions</code>
- <dd>allows a list of services to be disabled
- selectively and takes the following form:
- <dd><em>lynx -restrictions=[option][,option][,option]...</em>
- <dd>This list is printed if no options are specified.
- <dl>
- <dt>all
- <dd>restricts all options.
- <dt>bookmark
- <dd>disallow changing the location of the bookmark
- file.
- <dt>bookmark_exec
- <dd>disallow execution links via the bookmark file.
- <dt>change_exec_perms
- <dd>disallow changing the eXecute permission on
- files (but still allow it for directories) when
- local file management is enabled.
- <dt>default
- <dd>same as command line option <em>-anonymous</em>.
- Disables default services for anonymous users.
- Currently set to all restricted except for:
- inside_telnet, outside_telnet, inside_news,
- inside_ftp, outside_ftp, inside_rlogin,
- outside_rlogin, jump, mail and goto. Defaults
- are settable within userdefs.h.
- <dt>dired_support
- <dd>disallow local file management.
- <dt>disk_save
- <dd>disallow saving to disk in the download and print
- menus.
- <dt>download
- <dd>disallow downloaders in the download menu.
- <dt>editor
- <dd>disallow editing.
- <dt>exec
- <dd>disable execution scripts.
- <dt>exec_frozen
- <dd>disallow the user from changing the local
- execution option.
- <dt>file_url
- <dd>disallow using G)oto, served links or bookmarks
- for file: URLs.
- <dt>goto
- <dd>disable the '<em>g</em>' (goto) command.
- <dt>inside_ftp
- <dd>disallow ftps for people coming from inside your
- domain.
- <dt>inside_news
- <dd>disallow USENET news posting for people coming
- from inside you domain.
- <dt>inside_rlogin
- <dd>disallow rlogins for people coming from inside
- your domain.
- <dt>inside_telnet
- <dd>disallow telnets for people coming from inside
- your domain.
- <dt>jump
- <dd>disable the '<em>j</em>' (jump) command.
- <dt>mail
- <dd>disallow mailing feature.
- <dt>multibook
- <dd>disallow multiple bookmarks.
- <dt>news_post
- <dd>disallow USENET News posting.
- <dt>options_save
- <dd>disallow saving options in .lynxrc.
- <dt>outside_ftp
- <dd>disallow ftps for people coming from outside your
- domain.
- <dt>outside_news
- <dd>disallow USENET news posting for people coming
- from outside you domain.
- <dt>outside_rlogin
- <dd>disallow rlogins for people coming from outside
- your domain.
- <dt>outside_telnet
- <dd>disallow telnets for people coming from
- outside your domain.
- <dt>print
- <dd>disallow most print options.
- <dt>shell
- <dd>disallow shell escapes.
- <dt>suspend
- <dd>disallow <em>Control-Z</em> suspends with escape
- to shell on Unix.
- <dt>telnet_port
- <dd>disallow specifying a port in telnet G)oto's.
- <dt>useragent
- <dd>disallow modifications of the User-Agent header.
- </dl>
-
- <dt><code>-resubmit_posts</code>
- <dd>toggles forced resubmissions (no-cache) of forms with
- method POST when the documents they returned are sought
- with the PREV_DOC (<em>left-arrow</em>) command or from
- the <em>History Page</em>.
- <dt><code>-rlogin</code>
- <dd>disable recognition of rlogin commands.
- <dt><code>-selective</code>
- <dd>require .www_browsable files to browse directories.
- <dt><code>-show_cursor </code>
- <dd>If enabled the cursor will not be hidden in the right hand
- corner but will instead be positioned at the start of the
- currently selected link. Show cursor is the default for
- systems without FANCY_CURSES capabilities. The default
- configuration can be changed in userdefs.h or
- <A HREF="#lynx.cfg">lynx.cfg</A>.
- It also can be set and saved via the 'o'ptions menu.
- The command line switch toggles the default.
- <dt><code>-soft_dquotes</code>
- <dd>toggles emulation of the old Netscape and Mosaic bug which
- treated '<em>&gt;</em>' as a co-terminator for
- double-quotes and tags.
- <dt><code>-source</code>
- <dd>works the same as dump but outputs HTML source instead of
- formatted text.
- <dt><code>-startfile_ok</code>
- <dd>allow non-http startfile and homepage with
- <em>-validate</em>.
- <dt><code>-tagsoup</code>
- <dd>initialize DTD with "TagSoup" tables,
- <A HREF="keystrokes/option_help.html#tagsoup">more details</A>.
- <dt><code>-telnet</code>
- <dd>disable recognition of telnet commands.
- <dt><code>-term=TERM</code>
- <dd>tell Lynx what terminal type to assume its talking to.
- (This may be useful for remote execution, when, for
- example, Lynx connects to a remote TCP/IP port that starts
- a script that, in turn, starts another Lynx process.)
- <dt><code>-tlog</code>
- <dd>toggles use of a <em>Lynx Trace Log</em> for the current
- session. The log is named <em>Lynx.trace</em> and is
- created in the home directory when Lynx trace mode is
- turned on via the <em>-trace</em> command line switch
- (see below), or via the TOGGLE_TRACE (<em>Control-T</em>)
- keystroke command. Once a log is started for the session,
- all trace and other stderr messages are written to the
- log. The contents of the log can be examined during
- the session via the TRACE_LOG (normally, '<em>;</em>')
- keystroke command.
- <dt><code>-trace</code>
- <dd>turns on Lynx trace mode. If a Lynx Trace Log
- (<em>Lynx.trace</em> in the home directory) has
- been started for the current session, all trace and
- other stderr messages are written to that log, and
- can be examined during the session via the TRACE_LOG
- (normally, '<em>;</em>') command.
- <dt><code>-traversal</code>
- <dd>traverse all http links derived from startfile. When
- used with <em>-crawl</em>, each link that begins with the
- same string as startfile is output to a file, intended for
- indexing. See CRAWL.announce for more information.
- <dt><code>-underscore</code>
- <dd>toggles use of _underline_ format in dumps.
- <dt><code>-useragent=Name</code>
- <dd>set alternate Lynx User-Agent header.
- <dt><code>-validate</code>
- <dd>accept only http URLs (for validation). Complete
- security restrictions also are implemented.
- <dt><code>-verbose</code>
- <dd>toggles [LINK], [IMAGE] and [INLINE] comments
- with filenames of these images.
- <dt><code>-version</code>
- <dd>print version information.
- <dt><code>-vikeys</code>
- <dd>enable vi-like key movement.
- <dt><code>-width=NUMBER</code>
- <dd>number of columns for formatting of dumps, default is 80.
- </dl>
+ <dd>can be selected from the following list, where items in all-caps
+ indicate that a substitution must be made. Many options are
+ "toggles", meaning that they will change the default action,
+ however it was specified. To always set the option on, use the
+ syntax "-option+", "-option=on", or "-option:on". To always set
+ the option off, use the syntax "-option-", "-option=off", or
+ "-option:off". The syntax with the "=" may not work under DOS
+ because of operating system constraints. Use one of the other
+ forms in that case.
+ <dl>
+ <dt><code>-</code>
+ <dd>If the argument is only '<code>-</code>' (dash), then Lynx
+ expects to receive the arguments from stdin. This is to
+ allow for the potentially very long command line that can
+ be associated with the <em>-get_data</em> or
+ <em>-post_data</em> arguments (see below).
+ It can also be used to avoid having sensitive information
+ in the invoking command line (which would be visible to
+ other processes on most systems), especially when
+ the <em>-auth</em> or <em>-pauth</em> options are used.
+ On VMS, the dash
+ must be encased in double-quotes (&quot;-&quot;) and the
+ keyboard input terminated with <em>Control-Z</em> or the
+ command file input terminated by a line that begins
+ with '<em>$</em>'. On Unix, the keyboard input terminator
+ is <em>Control-D</em>. On Win32, [???].
+ <dt><code>-accept_all_cookies</code>
+ <dd>accept all cookies.
+ <dt><code>-anonymous</code>
+ <dd>apply restrictions appropriate for an anonymous
+ account, see <em>-restrictions</em> below for some
+ details.
+ <dt><code>-assume_charset=MIMENAME</code>
+ <dd>charset for documents that don't specify it.
+ <dt><code>-assume_local_charset=MIMENAME</code>
+ <dd>charset assumed for local files.
+ <dt><code>-assume_unrec_charset=MIMENAME</code>
+ <dd>use this instead of unrecognized charsets.
+ <dt><code>-auth=ID:PW</code>
+ <dd>set authorization ID and password for protected documents
+ at startup. Be sure to protect any script files which use
+ this switch.
+ <dt><code>-base</code>
+ <dd>prepend a request URL comment and BASE tag to text/html
+ outputs for -source dumps.
+ <dt><code>-bibp=URL</code>
+ <dd>specify a local bibp server (default http://bibhost/).
+ <dt><code>-blink</code>
+ <dd>forces high intensity background colors for color mode,
+ if available and supported by the terminal.
+ This applies to the slang library (for a few terminal
+ emulators), or to OS/2 EMX with ncurses.
+ <dt><code>-book</code>
+ <dd>use the bookmark page as the startfile. The default or
+ command line startfile is still set for the Main screen
+ command, and will be used if the bookmark page is
+ unavailable or blank.
+ <dt><code>-buried_news</code>
+ <dd>toggles scanning of news articles for buried references,
+ and converts them to news links. Not recommended because
+ email addresses enclosed in angle brackets will be
+ converted to false news links, and uuencoded messages can
+ be trashed.
+ <dt><code>-cache=NUMBER</code>
+ <dd>set the <em>NUMBER</em> of documents cached in memory.
+ The default is 10.
+ <dt><code>-center</code>
+ <dd>Toggle center alignment in HTML TABLE.
+ <dt><code>-case</code>
+ <dd>enable case-sensitive string searching.
+ <dt><code>-cfg=FILENAME</code>
+ <dd>specifies a Lynx configuration file other than the default
+ <A HREF="#lynx.cfg">lynx.cfg</A>.
+ <dt><code>-child</code>
+ <dd>exit on left-arrow in startfile, and disable save to disk.
+ <dt><code>-cmd_log=FILENAME</code>
+ <dd>write keystroke commands and related information to the
+ specified file.
+ <dt><code>-cmd_script=FILENAME</code>
+ <dd>read keystroke commands from the specified file. You can
+ use the data written using the <em>-cmd_log</em> option.
+ Lynx will ignore other information which the
+ command-logging may have written to the log-file.
+ <dt><code>-color</code>
+ <dd>forces color mode on, if available. Default color control sequences
+ which work for many terminal types are assumed if the terminal
+ capability description does not specify how to handle color.
+ Lynx needs to be compiled with the slang library for this flag.
+ It is equivalent to setting the COLORTERM environment variable.
+ (If color support is instead provided by a color-capable curses
+ library like ncurses, Lynx relies completely on the terminal
+ description to determine whether color mode is possible, and
+ this flag is not needed and thus unavailable.)
+ A saved show_color=always setting found in a .lynxrc file at
+ startup has the same effect. A saved show_color=always found
+ in .lynxrc on startup is overridden by this flag.
+ <dt><code>-connect_timeout=N</code>
+ <dd>Sets the connection timeout, where N is given in seconds.
+ This is not available under DOS (use the sockdelay
+ parameter of WATTCP under DOS).
+ <dt><code>-cookie_file=FILENAME</code>
+ <dd>specifies a file to use to read cookies.
+ If none is specified, the default value is ~/.lynx_cookies
+ for most systems, but ~/cookies for MS-DOS.
+ <dt><code>-cookie_save_file=FILENAME</code>
+ <dd>specifies a file to use to store cookies.
+ If none is specified, the value given by
+ <code>-cookie_file</code> is used.
+ <dt><code>-cookies</code>
+ <dd>toggles handling of Set-Cookie headers.
+ <dt><code>-core</code>
+ <dd>toggles forced core dumps on fatal errors. (Unix only)
+ <dt><code>-crawl</code>
+ <dd>with <em>-traversal</em>, output each page to a file.<br>
+ with <em>-dump</em>, format output as with
+ <em>-traversal</em>, but to stdout.
+ <dt><code>-curses_pads</code>
+ <dd>toggles the use of curses "pad" feature which supports
+ left/right scrolling of the display.
+ <dt><code>-debug_partial</code>
+ <dd>separate incremental display stages with MessageSecs delay
+ <dt><code>-display=DISPLAY</code>
+ <dd>set the display variable for X rexe-ced programs.
+ <dt><code>-display_charset=MIMEname</code>
+ <dd>set the charset for the terminal output.
+ <dt><code>-dont_wrap_pre</code>
+ <dd>inhibit wrapping of text in &lt;pre&gt; when -dump'ing and
+ -crawl'ing, mark wrapped lines in interactive session.
+ <dt><code>-dump</code>
+ <dd>dumps the formatted output of the default document
+ or one specified on the command line to standard out.
+ This can be used in the following way:<br>
+ <em>lynx -dump http://www.w3.org/</em>
+ <dt><code>-editor=EDITOR</code>
+ <dd>enable external editing using the specified
+ <em>EDITOR</em>. (vi, ed, emacs, etc.)
+ <dt><code>-emacskeys</code>
+ <dd>enable emacs-like key movement.
+ <dt><code>-enable_scrollback</code>
+ <dd>toggles behavior compatible with the scrollback keys in
+ some communications software (may be incompatible with
+ some curses packages).
+ <dt><code>-error_file=FILENAME</code>
+ <dd>the status code from the HTTP request is placed in this
+ file.
+ <dt><code>-exec</code>
+ <dd>enable local program execution (normally not configured).
+ <dt><code>-fileversions</code>
+ <dd>include all versions of files in local VMS directory
+ listings.
+ <dt><code>-force_empty_hrefless_a</code>
+ <dd>force HREF-less 'A' elements to be empty (close them as soon as they are seen).
+ <dt><code>-force_html</code>
+ <dd>forces the first document to be interpreted as HTML.
+ <dt><code>-force_secure</code>
+ <dd>toggles forcing of the secure flag for SSL cookies.
+ <dt><code>-forms_options</code>
+ <dd>toggles whether the Options Menu is key-based or form-based.
+ <dt><code>-from</code>
+ <dd>toggles transmissions of From headers to HTTP or HTTPS
+ servers.
+ <dt><code>-ftp</code>
+ <dd>disable ftp access.
+ <dt><code>-get_data</code>
+ <dd>properly formatted data for a get form are read in from
+ stdin and passed to the form. Input is terminated by a
+ line that starts with '---'.
+ <dt><code>-head</code>
+ <dd>send a HEAD request for the mime headers.
+ <dt><code>-help</code>
+ <dd>print this Lynx command syntax usage message.
+ <dt><code>-hiddenlinks=<em>option</em></code>
+ <dd>control the display of hidden links. Option values are:
+ <dl>
+ <dt><code>merge</code>
+ <dd>hidden links show up as bracketed numbers and are
+ numbered together with other links in the sequence of
+ their occurrence in the document.
+ <dt><code>listonly</code>
+ <dd>hidden links are shown only on <em>L</em>ist screens and
+ listings generated by <code>-dump</code> or from the
+ <em>P</em>rint menu, but appear separately at the end of
+ those lists. This is the default behavior.
+ <dt><code>ignore</code>
+ <dd>hidden links do not appear even in listings.
+ </dl>
+ <dt><code>-historical</code>
+ <dd>toggles use of '&gt;' or '--&gt;' as a terminator for
+ comments.
+ <dt><code>-homepage=URL</code>
+ <dd>set homepage separate from start page. Will be used
+ if a fetch of the start page fails or if it is a
+ script which does not return a document, and as the
+ <code>URL</code> for the '<em>m</em>'ain menu command.
+ <dt><code>-image_links</code>
+ <dd>toggles inclusion of links for all images.
+ <dt><code>-ismap</code>
+ <dd>toggles inclusion of ISMAP links when client-side
+ MAPs are present.
+ <dt><code>-index=URL</code>
+ <dd>set the default index file to the specified <em>URL</em>
+ <dt><code>-justify</code>
+ <dd>do justification of text.
+ <dt><code>-link=NUMBER</code>
+ <dd>starting count for lnk#.dat files produced by
+ <em>-crawl</em>.
+ <dt><code>-localhost</code>
+ <dd>disable URLs that point to remote hosts.
+ <dt><code>-locexec</code>
+ <dd>enable local program execution from local files only
+ (if lynx was compiled with local execution enabled).
+ <dt><code>-lss=FILENAME</code>
+ <dd>specify filename containing color-style information.
+ The default is lynx.lss.
+ <dt><code>-mime_header</code>
+ <dd>include mime headers and force source dump.
+ <dt><code>-minimal</code>
+ <dd>toggles minimal versus valid comment parsing. When
+ minimal, any '--&gt;' serves as a terminator for a
+ comment element. When valid, pairs of '--' are
+ treated as delimiters for series of comments within
+ the overall comment element. If historical is set,
+ that overrides minimal or valid comment parsing.
+ <dt><code>-newschunksize=NUMBER</code>
+ <dd>number of articles in chunked news listings.
+ <dt><code>-newsmaxchunk=NUMBER</code>
+ <dd>maximum news articles in listings before chunking.
+ <dt><code>-nobold</code>
+ <dd>disable bold video-attribute.
+ <dt><code>-nobrowse</code>
+ <dd>disable directory browsing.
+ <dt><code>-nocc</code>
+ <dd>disable Cc: prompts for self copies of mailings. Note
+ that this does not disable any CCs which are incorporated
+ within a mailto URL or form ACTION.
+ <dt><code>-nocolor</code>
+ <dd>force color mode off, overriding terminal capabilities and any
+ <em>-color</em> flags, <em>COLORTERM</em> variable, and saved .lynxrc settings.
+ <dt><code>-noexec</code>
+ <dd>disable local program execution. (DEFAULT)
+ <dt><code>-nofilereferer</code>
+ <dd>disable transmissions of Referer headers for file URLs.
+ <dt><code>-nolist</code>
+ <dd>disable the link list feature in dumps.
+ <dt><code>-nolog</code>
+ <dd>disable mailing of error messages to document owners.
+ <dt><code>-nonrestarting_sigwinch</code>
+ <dd>make window size change handler non-restarting.
+ This flag is not available on all systems,
+ Lynx needs to be compiled with HAVE_SIGACTION defined.
+ If available, this flag <em>may</em> cause Lynx to react
+ more immediately to window changes when run within an
+ xterm.
+ <dt><code>-nopause</code>
+ <dd>disable forced pauses for statusline messages.
+ <dt><code>-noprint</code>
+ <dd>disable most print functions.
+ <dt><code>-noredir</code>
+ <dd>don't follow URL redirections
+ <dt><code>-noreferer</code>
+ <dd>disable transmissions of Referer headers.
+ <dt><code>-noreverse</code>
+ <dd>disable reverse video-attribute.
+ <dt><code>-nosocks</code>
+ <dd>disable SOCKS proxy usage by a SOCKSified Lynx.
+ <dt><code>-nostatus</code>
+ <dd>disable the retrieval status messages.
+ <dt><code>-nounderline</code>
+ <dd>disable underline video-attribute.
+ <dt><code>-number_fields</code>
+ <dd>force numbering of links as well as form input fields.
+ <dt><code>-number_links</code>
+ <dd>force numbering of links.
+ <dt><code>-partial</code>
+ <dd>toggles displaying of partial pages while loading.
+ <dt><code>-partial_thres=<em>NUMBER</em></code>
+ <dd>number of lines to render before repainting display
+ with partial-display logic.
+ <dt><code>-pauth=ID:PW</code>
+ <dd>set authorization ID and password for a protected proxy
+ server at startup. Be sure to protect any script files
+ which use this switch.
+ <dt><code>-popup</code>
+ <dd>toggles handling of single-choice SELECT options via
+ popup windows or as lists of radio buttons. The default
+ configuration can be changed in userdefs.h or
+ <A HREF="#lynx.cfg">lynx.cfg</A>.
+ It also can be set and saved via the 'o'ptions menu.
+ The command line switch toggles the default.
+ <dt><code>-post_data</code>
+ <dd>properly formatted data for a post form are read in from
+ stdin and passed to the form. Input is terminated by a
+ line that starts with '---'.
+ <dt><code>-preparsed</code>
+ <dd>show source preparsed and reformatted when used with
+ -source or in source view ('<em>\</em>').
+ May be useful for debugging of broken HTML markup
+ to visualize the difference between SortaSGML and TagSoup
+ <A HREF="keystrokes/option_help.html#tagsoup">recovery modes</A>,
+ switched by '<em>^V</em>'.
+ <dt><code>-prettysrc</code>
+ <dd>do syntax highlighting and hyperlink handling in source
+ view.
+ <dt><code>-print</code>
+ <dd>enable print functions. (default)
+ <dt><code>-pseudo_inlines</code>
+ <dd>toggles pseudo-ALTs for inlines with no ALT string.
+ <dt><code>-raw</code>
+ <dd>toggles default setting of 8-bit character translations
+ or CJK mode for the startup character set.
+ <dt><code>-realm</code>
+ <dd>restricts access to URLs in the starting realm.
+ <dt><code>-reload</code>
+ <dd>flushes the cache on a proxy server
+ (only the first document affected).
+ <dt><code>-restrictions</code>
+ <dd>allows a list of services to be disabled
+ selectively and takes the following form:
+ <dd><em>lynx -restrictions=[option][,option][,option]...</em>
+ <dd>The list of recognized options is printed if none
+ are specified.
+ <dl>
+ <dt>?
+ <dd>if used alone, lists restrictions in effect.
+ <dt>all
+ <dd>restricts all options listed below.
+ <dt>bookmark
+ <dd>disallow changing the location of the bookmark
+ file.
+ <dt>bookmark_exec
+ <dd>disallow execution links via the bookmark file.
+ <dt>change_exec_perms
+ <dd>disallow changing the eXecute permission on
+ files (but still allow it for directories) when
+ local file management is enabled.
+ <dt>chdir
+ <dd>disallow command which changes Lynx's working
+ directory.
+ <dt>default
+ <dd>same as command line option <em>-anonymous</em>.
+ Set default restrictions for anonymous users.
+ All specific services listed are always
+ restricted, except for:
+ inside_telnet, outside_telnet, inside_ftp,
+ outside_ftp, inside_rlogin, outside_rlogin,
+ inside_news, outside_news, telnet_port, jump,
+ mail, print, exec, and goto. The settings for these,
+ as well as additional goto restrictions for
+ specific URL schemes that are also applied,
+ are derived from definitions within userdefs.h.<br>
+ Note that this is the only option value that
+ may have the effect of <em>removing</em> some
+ restrictions, if they have been set by other
+ options, namely for those services that
+ <em>are</em> allowed by default according to
+ userdefs.h. However, if the separate command
+ line option form (<em>-anonymous</em>) is used,
+ Lynx takes care to set the default restrictions
+ before handling additional <em>-restrictions=</em>
+ options (even if they precede the
+ <em>anonymous</em> option), so that this cannot
+ happen.
+ <dt>dired_support
+ <dd>disallow local file management.
+ <dt>disk_save
+ <dd>disallow saving to disk in the download and print
+ menus.
+ <dt>dotfiles
+ <dd>disallow access to, or creation of, hidden (dot)
+ files.
+ <dt>download
+ <dd>disallow some downloaders in the download menu.
+ This does <em>not</em> imply the disk_save
+ restriction. It also does not disable the
+ DOWNLOAD command, and does not prevent
+ "Download or Cancel" offers when a MIME type
+ cannot otherwise be handled. Those are only
+ disabled if additionally the disk_save
+ restriction is in effect <em>and</em>
+ no download methods are defined in a <A
+ HREF="#lynx.cfg">Lynx configuration
+ file</A> that are marked as "always ENABLED"
+ (or, alternatively, if the -validate switch
+ is used).
+ <dt>editor
+ <dd>disallow external editing.
+ <dt>exec
+ <dd>disable execution scripts.
+ <dt>exec_frozen
+ <dd>disallow the user from changing the local
+ execution option.
+ <dt>externals
+ <dd>disallow some "EXTERNAL" configuration lines,
+ if support for passing URLs to external
+ applications (with the EXTERN_LINK or EXTERN_PAGE
+ command) is compiled in.
+ <dt>file_url
+ <dd>disallow using G)oto, served links or bookmarks
+ for file: URLs.
+ <dt>goto
+ <dd>disable the '<em>g</em>' (goto) command.
+ <dt>inside_ftp
+ <dd>disallow ftps for people coming from inside your
+ domain.
+ <dt>inside_news
+ <dd>disallow USENET news reading and posting for
+ people coming from inside you domain. This
+ applies to "news", "nntp", "newspost", and
+ "newsreply" URLs, but not to "snews", "snewspost",
+ or "snewsreply" in case they are supported.
+
+ <dt>inside_rlogin
+ <dd>disallow rlogins for people coming from inside
+ your domain.
+ <dt>inside_telnet
+ <dd>disallow telnets for people coming from inside
+ your domain.
+ <dt>jump
+ <dd>disable the '<em>j</em>' (jump) command.
+ <dt>lynxcgi
+ <dd>disallow execution of Lynx CGI URLs.
+ <dt>mail
+ <dd>disallow mailing feature.
+ <dt>multibook
+ <dd>disallow multiple bookmarks.
+ <dt>news_post
+ <dd>disallow USENET News posting,
+ <dt>options_save
+ <dd>disallow saving options in .lynxrc.
+ <dt>outside_ftp
+ <dd>disallow ftps for people coming from outside your
+ domain.
+ <dt>outside_news
+ <dd>disallow USENET news reading and posting for
+ people coming from outside you domain. This
+ applies to "news", "nntp", "newspost", and
+ "newsreply" URLs, but not to "snews", "snewspost",
+ or "snewsreply" in case they are supported.
+ <dt>outside_rlogin
+ <dd>disallow rlogins for people coming from outside
+ your domain.
+ <dt>outside_telnet
+ <dd>disallow telnets for people coming from
+ outside your domain.
+ <dt>print
+ <dd>disallow most print options.
+ <dt>shell
+ <dd>disallow shell escapes.
+ <dt>suspend
+ <dd>disallow <em>Control-Z</em> suspends with escape
+ to shell on Unix.
+ <dt>telnet_port
+ <dd>disallow specifying a port in telnet G)oto's.
+ <dt>useragent
+ <dd>disallow modifications of the User-Agent header.
+ </dl>
+
+ <dt><code>-resubmit_posts</code>
+ <dd>toggles forced resubmissions (no-cache) of forms with
+ method POST when the documents they returned are sought
+ with the PREV_DOC (<em>left-arrow</em>) command or from
+ the <em>History Page</em>.
+ <dt><code>-rlogin</code>
+ <dd>disable recognition of rlogin commands.
+ <dt><code>-scrollbar</code>
+ <dd>toggles showing scrollbar.
+ <dt><code>-scrollbar_arrow</code>
+ <dd>toggles showing arrows at ends of the scrollbar.
+ <dt><code>-selective</code>
+ <dd>require .www_browsable files to browse directories.
+ <dt><code>-short_url</code>
+ <dd>show very long URLs in the status line with "..." to
+ represent the portion which cannot be displayed. The
+ beginning and end of the URL are displayed, rather than
+ suppressing the end.
+ <dt><code>-show_cursor </code>
+ <dd>If enabled the cursor will not be hidden in the right hand
+ corner but will instead be positioned at the start of the
+ currently selected link. Show cursor is the default for
+ systems without FANCY_CURSES capabilities. The default
+ configuration can be changed in userdefs.h or
+ <A HREF="#lynx.cfg">lynx.cfg</A>.
+ It also can be set and saved via the 'o'ptions menu.
+ The command line switch toggles the default.
+ <dt><code>-show_rate</code>
+ <dd>If enabled the transfer rate is shown in bytes/second. If
+ disabled, no transfer rate is shown. Use lynx.cfg or the
+ options menu to select KB/second and/or ETA.
+ <dt><code>-soft_dquotes</code>
+ <dd>toggles emulation of the old Netscape and Mosaic bug which
+ treated '<em>&gt;</em>' as a co-terminator for
+ double-quotes and tags.
+ <dt><code>-source</code>
+ <dd>works the same as dump but outputs HTML source instead of
+ formatted text.
+ <dt><code>-stack_dump</code>
+ <dd>disable SIGINT cleanup handler.
+ <dt><code>-startfile_ok</code>
+ <dd>allow non-http startfile and homepage with
+ <em>-validate</em>.
+ <dt><code>-stdin</code>
+ <dd>read the startfile from standard input
+ (UNIX only).
+ <dt><code>-syslog=<em>text</em>
+ <dd>information for syslog call.
+ <dt><code>-tagsoup</code>
+ <dd>initialize DTD with "TagSoup" tables,
+ <A HREF="keystrokes/option_help.html#tagsoup">more details</A>.
+ <dt><code>-telnet</code>
+ <dd>disable recognition of telnet commands.
+ <dt><code>-term=TERM</code>
+ <dd>tell Lynx what terminal type to assume its talking to.
+ (This may be useful for remote execution, when, for
+ example, Lynx connects to a remote TCP/IP port that starts
+ a script that, in turn, starts another Lynx process.)
+ <dt><code>-timeout=<em>N</em></code>
+ <dd>For win32, sets the network read-timeout, where N is given in seconds.
+ <dt><code>-tlog</code>
+ <dd>toggles use of a <em>Lynx Trace Log</em> for the
+ session. The log is named <em>Lynx.trace</em> and is
+ created in the home directory when Lynx trace mode is
+ turned on via the <em>-trace</em> command line switch
+ (see below), or via the TRACE_TOGGLE (<em>Control-T</em>)
+ keystroke command. Once a log is started for the session,
+ all trace and other stderr messages are written to the
+ log. The contents of the log can be examined during
+ the session via the TRACE_LOG (normally, '<em>;</em>')
+ keystroke command. If use of a Lynx Trace Log
+ is turned off, any trace output will go to the standard
+ error stream.
+ <dt><code>-tna</code>
+ <dd>turns on <A HREF="#tna">"Textfields Need Activation"</A>
+ mode.
+ <dt><code>-trace</code>
+ <dd>turns on Lynx trace mode. If a Lynx Trace Log
+ (<em>Lynx.trace</em> in the home directory) has
+ been started for the current session, all trace
+ messages are written to that log, and
+ can be examined during the session via the TRACE_LOG
+ (normally, '<em>;</em>') command. If no Trace Log
+ file is in use, trace messages go to stderr.
+ <dt><code>-trace_mask=<em>value</em></code>
+ <dd>turn on optional traces, which may result in very large trace files.
+ Logically OR the values to combine options:
+ <dl>
+ <dt>1
+ <dd>SGML character parsing states
+ <dt>2
+ <dd>color-style
+ <dt>4
+ <dd>TRST (table layout)
+ <dl>
+ <dt><code>-traversal</code>
+ <dd>traverse all http links derived from startfile. When
+ used with <em>-crawl</em>, each link that begins with the
+ same string as startfile is output to a file, intended for
+ indexing. See CRAWL.announce for more information.
+ <dt><code>-trim_input_fields</code>
+ <dd>trim input text/textarea fields in forms.
+ <dt><code>-underscore</code>
+ <dd>toggles use of _underline_ format in dumps.
+ <dt><code>-use_mouse</code>
+ <dd>turn on mouse support, if available.
+ <dt><code>-useragent=STRING</code>
+ <dd>set different Lynx User-Agent header. Lynx produces a
+ warning on startup if the STRING does not contain "Lynx"
+ or "L_y_n_x", see the <A HREF="#note_ua">note</A> in the
+ Options Menu section for rationale.
+ <dt><code>-validate</code>
+ <dd>accept only http URLs (meant for validation).
+ <dd>This flag implies security restrictions
+ generally more severe than <em>-anonymous</em>:
+ restriction options as for
+ <em>-restrictions=all</em>, with the notable
+ exception that goto remains enabled for
+ http and https URLs; in addition,
+ the PRINT and DOWNLOAD commands are completely
+ disabled, and use of a Trace Log file is
+ forced off.
+ <dd>Any relaxing of restriction that might be implied
+ by an also present (or implied) <em>-anonymous</em>
+ flag is overridden, the only way to possibly relax
+ <em>some</em> of the restrictions to the level
+ applicable for "anononymous" accounts is with an
+ explicit <em>-restrictions=default</em>.
+ <dt><code>-verbose</code>
+ <dd>toggles [LINK], [IMAGE] and [INLINE] comments
+ with filenames of these images.
+ <dt><code>-version</code>
+ <dd>print version information.
+ <dt><code>-vikeys</code>
+ <dd>enable vi-like key movement.
+ <dt><code>-wdebug</code>
+ <dd>enable Waterloo tcp/ip packet debug (print to watt
+ debugfile). This applies only to DOS versions compiled
+ with WATTCP or WATT-32.
+ <dt><code>-width=NUMBER</code>
+ <dd>number of columns for formatting of dumps, default is 80.
+ <dt><code>-with_backspaces</code>
+ <dd>emit backspaces in output if -dumping or -crawling (like
+ <code>man</code> does).
+ </dl>
</dl>
<p>No options are required, nor is a startfile argument required.
-White space may be substituted for any equal sign ('<em>=</em>')
-appearing in the option list above. [<A HREF="#ToC-Invoking">ToC</A>]
+White space can be used in place of equal sign separators ('<em>=</em>')
+appearing in the option list above. It can not be used in place of the equal
+signs in forms like "-option=on" and "-option=off" for simple switches and
+toggles, for which "-option" alone (without a value) is valid.
+[<A HREF="#ToC-Invoking">ToC</A>]
<h2 ID="Environments"><A NAME="Environment"><em>Environment variables used by Lynx</em></A></h2>
@@ -2473,10 +2895,11 @@ You may visit an index of options:
<a href="http://www.hippo.ru/%7Ehvv/lynxcfg_toc.html">by category</a> or
<a href="http://www.hippo.ru/%7Ehvv/lynxcfg_toc.html#alphatoc">by alphabet</a>.
-<p>To see the current lynx.cfg state you may press <em>'o'</em> key
-for <em>Options Menu</em> and follow <em>check your lynx.cfg</em> link
-near the bottom; alternatively, you may also press <em>'='</em> key
-for <em>Lynx Information Page</em> and follow a link from there near the top.
+<p>To view your current configuration derived from lynx.cfg and any
+included configuration files, press <em>'g'</em> and type in
+'<em>lynxcfg:</em>'. If you are using the forms-based <em>Options
+Menu</em>, you may press <em>'o'</em> for the Options Menu and follow
+the '<em>Check your lynx.cfg</em>' link near the bottom.
<p>However, for those who have a restricted account many Lynx features
may be disabled by the system administrator, you probably will not see
@@ -2495,12 +2918,12 @@ A custom hypertext format was developed to support hypertext links to
local files and files on remote Gopher servers. Using Gopher servers
for distributed file service allowed information providers to publish
information from a wide variety of platforms (including Unix, VMS,
-VM/CMS and Macintosh). In addition, Lynx became the most user-friendly
+VM/CMS and Macintosh). In addition, Lynx became the most user-friendly
Gopher client, although that was only an ancillary capability.
<p>This distributed approach let providers retain complete control
over their information, but it made communication between users
-and providers somewhat more difficult. Following the lead of Neal
+and providers somewhat more difficult. Following the lead of Neal
Erdwien, of Kansas State University, the Lynx hypertext format was
extended to include links for including ownership information with
each file. This information made it possible for users running
@@ -2538,6 +2961,8 @@ The v2-7-1FM code set was released as v2.7.2 in January 1998.<br>
The 2.7.1 development set was released as v2.8 in March 1998.<br>
The 2.8 development set was released as v2.8.1 in October 1998.<br>
The 2.8.1 development set was released as v2.8.2 in June 1999.<br>
+The 2.8.2 development set was released as v2.8.3 in April 2000.<br>
+The 2.8.3 development set was released as v2.8.4 in July 2001.<br>
<p>Since early 1997, the Lynx code has expanded into autoconfigure and
PC versions. The branching of the Lynx source base from a single
@@ -2559,7 +2984,7 @@ file. Earlier CHANGES file can be found in the docs/ subdirectory
of this distribution.
<p>Information on obtaining the most current version of Lynx is available
-at <a href="http://www.slcc.edu/lynx/current/index.html">the current distribution page</a>.
+at <a href="http://lynx.isc.org/current/index.html">the current distribution page</a>.
<p>[<A HREF="#TOC">ToC</A>]
</body>
diff --git a/gnu/usr.bin/lynx/lynx_help/about_lynx.html b/gnu/usr.bin/lynx/lynx_help/about_lynx.html
index 053ec674a4e..4c158dd004b 100644
--- a/gnu/usr.bin/lynx/lynx_help/about_lynx.html
+++ b/gnu/usr.bin/lynx/lynx_help/about_lynx.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>About Lynx</TITLE>
@@ -13,11 +13,11 @@
<h1><em>About Lynx</em></h1>
-Lynx is a fully featured World-Wide Web browser for users on both Unix and
-VMS platforms who are connected to those systems via cursor-addressable,
-character-cell terminals or emulators. That includes VT100 terminals,
-and desktop-based software packages emulating VT100 terminals (e.g.,
-Kermit, Procomm, etc.).
+Lynx is a fully-featured <em>World Wide Web</em> (<em>WWW</em>) browser
+for users on Unix, VMS, and other platforms running cursor-addressable,
+character-cell terminals or emulators. That includes vt100 terminals,
+other character-cell displays, and vt100 emulators such as Kermit or
+Procomm running on PCs or Macs.
<P>For information on how to use Lynx see the
<A HREF="../lynx_help/Lynx_users_guide.html">Lynx User's Guide</A>, or the
@@ -27,7 +27,7 @@ Kermit, Procomm, etc.).
Lynx was a product of the Distributed Computing Group within
Academic Computing Services of <A
-HREF="http://www.cc.ukans.edu/index.html">The University of Kansas</A>.
+HREF="http://www.cc.ukans.edu/">The University of Kansas</A>.
<P>Lynx was originally developed by
<A HREF="http://www.cc.ukans.edu/cwis/people/Lou.Montulli.html"
@@ -60,8 +60,7 @@ Lynx contains other sections of code that are copyrighted
by other institutions or individuals.
The Lynx copyright does not override or invalidate those copyrights.
-<P>Thanks to <A NAME="13"
-HREF="http://www.w3.org/hypertext/WWW/People.html#BernersLee"
+<P>Thanks to <A NAME="13" HREF="http://www.w3.org/People/Berners-Lee/"
>Tim Berners-Lee</A> and the other <A NAME="14"
HREF="http://www.w3.org/hypertext/WWW/People.html">CERN World Wide
Web wizards</A> for the WWW client library code and all of their other
@@ -84,7 +83,7 @@ had their own hypertext format.
<H2><A NAME="availability"><EM>Availability</EM></A></H2>
<p>Information on obtaining the most current version of Lynx is
-available via <a href="http://www.crl.com/~subir/lynx.html"
+available via <a href="http://www.trill-home.com/lynx.html"
>Lynx links</a>.
<H2><A NAME="lynx-dev_list"><EM>Mailing List</EM></A></H2>
diff --git a/gnu/usr.bin/lynx/lynx_help/help_files.txt b/gnu/usr.bin/lynx/lynx_help/help_files.txt
index c88cbb618c3..1b8f236bb27 100644
--- a/gnu/usr.bin/lynx/lynx_help/help_files.txt
+++ b/gnu/usr.bin/lynx/lynx_help/help_files.txt
@@ -12,6 +12,7 @@
#
ABOUT_LYNX=about_lynx.html
ALT_EDIT_HELP=alt_edit_help.html
+BASHLIKE_EDIT_HELP=bashlike_edit_help.html
BOOKMARK_HELP=bookmark_help.html
COOKIE_HELP=cookie_help.html
DIRED_HELP=dired_help.html
@@ -38,12 +39,12 @@ LYNX_DEV=lynx-dev.html
# Each link has to contain 'http:' or 'ftp:' otherwise install-help will fail.
#
LYNX_DEV_ARCHIVE=http://www.flora.org/lynx-dev/html/
-LYNX_DIST=http://www.slcc.edu/lynx/current/index.html
-LYNX_FAQ=http://www.slcc.edu/lynx/faq.html
-LYNX_FAQ_AL=http://www.access.digex.net/~asgilman/lynx/FAQ/
+LYNX_DIST=http://lynx.isc.org/current/index.html
+LYNX_FAQ=http://lynx.isc.org/cgi-bin/fom
+LYNX_FAQ_O_MATIC=http://lynx.isc.org/cgi-bin/fom
LYNX_HOME=http://lynx.browser.org/
LYNX_SPEECH=http://leb.net/blinux/blynx/
-LYNX_SUBIR=http://www.crl.com/~subir/lynx.html
+LYNX_SUBIR=http://www.trill-home.com/lynx.html
WWW_NEWS=http://www.w3.org/hypertext/DataSources/News/Groups/Overview.html
WWW_HTML2=http://www.w3.org/MarkUp/html-spec/html-spec_toc.html
WWW_HTML3=http://www.w3.org/MarkUp/html3/Contents.html
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/alt_edit_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/alt_edit_help.html
index bd79c6e89cd..3c779c1c06b 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/alt_edit_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/alt_edit_help.html
@@ -1,24 +1,27 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
-<title>Lynx Line Editor Alternate Key Binding</title>
+<title>Lynx Line Editor Alternative Key Binding</title>
<link rev="made" href="mailto:lynx-dev@sig.net">
+<link rel="Sibling" title="Default Binding" href="edit_help.html">
+<link rel="Sibling" title="Bash-Like Binding" href="bashlike_edit_help.html">
</head>
<body>
-<h1>+++ALTERNATE BINDINGS+++</h1>
+<h1>+++ALTERNATIVE BINDING+++</h1>
Lynx invokes a built-in <em>Line Editor</em> for entering strings in
response to prompts, in forms, and for email messages if an external editor
-has not been defined. Administrators can offer additional alternate key
-bindings by adding them in LYEditmap.c before compiling Lynx. If available,
+has not been defined. Additional alternative key-bindings can be offered
+by configuring with --enable-alt-bindings or by adding them in
+LYEditmap.c before compiling Lynx. If available,
they may be selected via the 'o'ptions menu, or by editing lineedit_mode in
the '.lynxrc' file.
-<p>Note: setting emacs/vi keys ON has no effect on line-editor bindings.
+<p>Note: setting emacs/vi keys ON has no direct effect on line-editor bindings.
-<p>This is the <em>Alternate Bindings</em> keymap:
+<p>This is the <em>Alternative Binding</em> keymap:
-<p><pre>
+<pre>
ENTER Input complete - RETURN
TAB Input complete - TAB, Do
ABORT Input cancelled - Ctrl-G, Ctrl-O, (Ctrl-C on some systems)
@@ -35,7 +38,6 @@ the '.lynxrc' file.
DELN Delete next [1] char - Ctrl-D
DELPW Delete prev word - Ctrl-R
DELNW Delete next word - Ctrl-T
- DELBL Delete to beg of line - Ctrl-X
DELEL Delete to end of line - Ctrl-K
UPPER Upper case the line - Ctrl-^
@@ -43,12 +45,23 @@ the '.lynxrc' file.
LKCMD Invoke cmd prompt - Ctrl-V (in form text fields, only) [2]
+<A NAME="TASpecial">Special commands for use only in textarea fields</A>[3]:
+
+ Textarea external edit - Ctrl-X e
+ Insert file in textarea - Ctrl-X i
+ Grow textarea - Ctrl-X g
+
[1] "next" means the character "under" a box or underline style cursor; it
means "to the immediate right of" an I-beam (between characters) type
cursor.
-[2] Follow Ctrl-V with the key "e" bound to the EDIT function,
- to edit the form's textarea field using an external editor.
+[2] Follow Ctrl-V with any recognized key command, to "escape" from a text
+ input field.
+
+[3] For other key combinations using Ctrl-X as a prefix key, see the
+ Help page for the <a rel="Sibling" title="Bash-Like Binding"
+ href="bashlike_edit_help.html"
+ >Bash-Like</a> Binding.
</pre>
</body>
</html>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/bashlike_edit_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/bashlike_edit_help.html
new file mode 100644
index 00000000000..6c066468113
--- /dev/null
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/bashlike_edit_help.html
@@ -0,0 +1,215 @@
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
+<html>
+<head>
+<title>Lynx Line Editor Bash-Like Key Binding</title>
+<link rev="made" href="mailto:lynx-dev@sig.net">
+<link rel="Sibling" title="Default Binding" href="edit_help.html">
+<link rel="Sibling" title="Alternative Binding" href="alt_edit_help.html">
+</head>
+<body>
+<h1>+++BASH-LIKE BINDING+++</h1>
+
+Lynx invokes a built-in <em>Line Editor</em> for entering strings in
+response to prompts, in forms, and for email messages if an external editor
+has not been defined. Several sets of key-bindings can be offered
+by configuring with --enable-alt-bindings or by adding them in
+LYEditmap.c before compiling Lynx. If available,
+they may be selected via the 'o'ptions menu, or by editing lineedit_mode in
+the '.lynxrc' file.
+
+<p>Note: setting emacs/vi keys ON has no direct effect on line-editor bindings.
+
+<p>This is the <em>Bash-like Binding</em> keymap.</p>
+<h2>Basic commands</h2>
+<pre>
+ ENTER Input complete - Enter, RETURN
+ TAB Completion [2]/ Next - TAB, Do
+ ABORT Cancel / Undo Change - C-g, C-_
+ ERASE Erase the line - M-k, C-x k
+
+ BACK Cursor back char - Left-Arrow, C-b
+ FORW Cursor forward char - Right-Arrow, C-f
+ BACKW Cursor back word - M-b, C-r
+ FORWW Cursor forward word - M-f, C-s [5]
+ BOL Go to begin of line - C-a, Home, Find
+ EOL Go to end of line - C-e [4], End, Select
+
+ DELP Delete prev char - C-h, Backspace, Rubout
+ DELN Delete next [1] char - C-d, Delete, Remove
+ DELPW Delete prev word - C-w [3], M-Backspace, M-Delete (?)
+ DELNW Delete next word - M-d
+ DELBL Delete to beg of line - C-u
+ DELEL Delete to end of line - C-k [4]
+
+ UPPER Upper case the line - M-u
+ LOWER Lower case the line - M-l
+
+ LKCMD Invoke cmd prompt - C-v [FORM]
+ SWMAP Switch input keymap - C-^ (if compiled in)
+
+<A NAME="TASpecial">Special commands for use in textarea fields</A> [FORM]:
+
+ PASS! Textarea external edit - C-e C-e [4], C-x e
+ PASS! Insert file in textarea - C-x i
+ PASS! Grow textarea - C-x g
+
+</pre>
+Here is a little textarea for practice:<BR>
+<FORM action=""><TEXTAREA name="practice" cols=40 ROWS=5>
+This text cannot be submitted. Normally lines like
+these would be part of a form that is filled out and
+then submitted. You can move around here and delete
+or add text as you like, using the Line-Editor keys.
+</TEXTAREA><INPUT TYPE=reset VALUE="[reset content]"></FORM>
+<pre>
+
+Advanced emacs-like commands:
+
+ TPOS Transpose characters - C-t
+ SETMARK Set mark at current position in line - C-@
+ XPMARK Exchange current position with mark - C-x C-x
+ KILLREG Kill region between mark and position - C-x C-w [3]
+ YANK Insert text last killed (with KILLREG) - C-y
+</pre>
+<h2>Notes</h2>
+<P><samp>
+ <DFN>C-</DFN><strong>key</strong> means Control+<strong><kbd>key</kbd></strong>. <DFN
+ ><code>C-x </code></DFN><strong>key</strong> means first Control+<kbd>x</kbd>, then
+ <strong><kbd>key</kbd></strong>.
+ <DFN
+ >M-</DFN>key means Meta+<strong><kbd>key</kbd></strong>, where Meta
+ is a modifier that can be entered in a variety of ways:
+</samp></P><UL>
+<LI>First ESC, then the <strong><kbd>key</kbd></strong>.
+ This doesn't work with all systems or on all connections, and if it
+ does may not work for some keys (because the ESC character is also
+ part of code sequences for "normal" function keys).
+<LI>Alt+<strong><kbd>key</kbd></strong>.
+ This works if the terminal, console, or comm program is set up to
+ interpret Alt as a modifier to send ESC. The Linux console acts
+ like that by default for most keys; Kermit can be set up to do it,
+ xterm can be for some keys, and so on. But the same caveats as for
+ the previous item apply.
+ This Alt mapping may also be possible, independent of the ESC character,
+ for some keys in Lynx for DOS/i386 or for Win32.
+<LI>C-x <strong><kbd>key</kbd></strong>.
+ Actually, currently the same internal table is used for Meta and the
+ C-x prefix. Therefore all M-<strong><kbd>key</kbd></strong> combinations can
+ also be typed as C-x <strong><kbd>key</kbd></strong>, and vice versa.
+</UL><pre>
+[1] "next" means the character "under" a box or underline style cursor; it
+ means "to the immediate right of" an I-beam (between characters) type
+ cursor.
+[2] For entering strings in response to prompts (that is, when not editing
+ form text fields), some keys have different actions: TAB tries to
+ complete input based on previous response; Up-Arrow and Down-Arrow
+ may offer previous response and next response, respectively, from
+ recall buffer for some prompts.
+[3] C-w can only be used for editing functions if its default KEYMAP
+ to REFRESH is changed. This can be done in the lynx.cfg file,
+ for example with the line "KEYMAP:^W:DO_NOTHING". This also applies
+ for other keys: as long as the key's action is mapped to REFRESH,
+ either with an explicit KEYMAP in lynx.cfg or by default, the
+ key's Line Editor binding is disabled.
+[4] These keys invoke special behavior when pressed twice in a row:
+ C-e C-e calls the external editor for changing the text in a
+ textarea (if available). C-k C-k will move to the next link,
+ so that all lines in a textarea can be conveniently cleared by
+ repeating C-k.
+[5] Key is likely unavailable for Lynx, because it is interpreted by
+ operating system, comm program, or curses library, or swallowed
+ as part of escape sequence recognition. Binding is provided for
+ the benefit of those where this doesn't apply.
+[FORM] In form text fields, only. Ignored by Line Editor elsewhere.
+
+
+More notes
+
+ When a text input field, including a textarea line, is selected,
+ the Line Editor functions get a first grab at the keys entered.
+ If a key has no function defined in the Line Editor binding, it
+ can either be ignored, or passed on for normal key command handling,
+ where modifiers like C-x or Meta currently have no effect (see the
+ <A HREF="LYNXKEYMAP:"
+ >Key Map Page</A> accessible with the key <kbd>K</kbd> for current information).
+
+
+</pre>
+<h2>Additional details on other keys, for the curious
+(very much subject to change)</h2>
+<pre>
+Normal key action when used in form fields, subject to remapping
+with KEYMAP: [FORM (except Up-Arrow, Down-Arrow)]
+ C-l [3], C-o, C-z [5], C-\ [5], C-] [5]
+ C-n [emacskey], C-p [emacskey]
+ Up-Arrow [2], Down-Arrow [2]
+ Page-Up, Page-Down, F1, Back-Tab
+
+Normal key command with Meta modifier ignored when used in form fields,
+subject to remapping with KEYMAP: [FORM (except Up-Arrow, Down-Arrow)]
+ M-C-l [3], M-C-o [!], M-C-z [5], M-C-\ [5], M-C-] [5]
+ M-C-u, M-/, M-n
+ M-Up-Arrow [2][!], M-Down-Arrow [2][!]
+ M-Page-Up [!], M-Page-Down [!], M-Home, M-End
+
+Passed as specific command:
+ lynx action duplicates by default
+ ----------- ---------------------
+ M-C-d NEXT_LINK Down-Arrow
+ M-C-e EDITTEXTAREA C-e C-e
+ M-C-k LPOS_NEXT_LINK (none, Down-Arrow suggested)
+ M-e EDITTEXTAREA C-e C-e
+ M-g GROWTEXTAREA (none, C-v $ suggested?)
+ M-i INSERTFILE (none, C-v # suggested?)
+ M-&lt; HOME M-Home
+ M-&gt; END M-End
+ M-F1 DWIMHELP F1
+ M-Find WHEREIS C-v /
+ M-Select NEXT C-v n
+
+Duplicates function of other key(s):
+ edit action duplicates
+ ----------- ----------
+ M-C-b BACKW M-b, C-r
+ M-C-f FORWW M-f
+ M-C-n FORWW M-f
+ M-C-p BACKW M-b, C-r
+ M-C-r BACKW M-b, C-r
+ M-a BOL C-a, Home, ...
+
+Modifier ignored, and duplicates function of other key(s):
+ edit action duplicates
+ ----------- ----------
+ M-C-a BOL C-a, Home, ...
+ M-C-g ABORT C-g, ...
+ M-TAB TAB C-i [!]
+ M-C-j ENTER C-m, C-j, Enter / RETURN
+ M-RETURN ENTER C-m, C-j, Enter / RETURN
+ M-C-y YANK C-y [!]
+ M-C-^ SWMAP C-^ [!] (if compiled in)
+ M-Right-Arrow FORW Right-Arrow [!], C-f
+ M-Left-Arrow BACK Left-Arrow [!], C-b
+ M-Do TAB C-i [!]
+
+Key completely ignored:
+ C-q, Insert
+ M-C-q, M-C-s [5], M-C-t, M-C-v, M-ESC
+ M-C-@, M-C-_, M-Remove, M-Insert [!]
+
+Meta + other (mostly, printable character) keys:
+ Modifier ignored, or sequence swallowed (see [5]).
+ M-@, M-E...M-Z [5], M-\, M-^, M-_ attempt to interpret
+ as 7-bit escape representation for character in 8-bit
+ control (C1) range if appropriate according to
+ Display Character Set.
+
+
+[emacskey] Normal key action subject to emacs_keys setting.
+[!] Action of key with Meta modifier follows action of key without
+ Meta. If you manage to enter the Meta key while Line-Editor
+ Binding is not set to Bash-Like, and the unmodified binding
+ is different from that listed here, M-&lt;<var>key</var>&gt; will act
+ like &lt;<var>key</var>&gt;.
+</pre>
+</body>
+</html>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/bookmark_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/bookmark_help.html
index de08f3947f1..6a9e5e5e410 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/bookmark_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/bookmark_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Lynx Bookmark Help</TITLE>
@@ -15,7 +15,7 @@ the current document or the currently highlighted link to your default
enabled. The remove feature, invoked by pressing an '<em>r</em>' when
a <em>Bookmark file</em> is being displayed, will remove the currently
highlighted link. You may set and modify the paths and names of your
-<em>Bookmark files</em>, and enable or disable multiple bookmarks, in
-the <A HREF="option_help.html">options screen.</A>
+<em>Bookmark files</em> and enable or disable multiple bookmarks
+in the <A HREF="option_help.html">Options Menu</A>.
</BODY>
</HTML>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/cookie_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/cookie_help.html
index 081bb3e52bf..6959c9f4d46 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/cookie_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/cookie_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Help on the Cookie Jar Page</TITLE>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/dired_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/dired_help.html
index eb1d1ae65c8..b881ad6145f 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/dired_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/dired_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Lynx Dired Help</title>
@@ -8,44 +8,46 @@
<h1>+++DIRED HELP+++</h1>
Lynx changes into Dired mode when you use a URL of the type
-<em>file://localhost/path/</em>. While in Dired mode, some keys are
+<em>file://localhost/path/</em>. While in Dired mode, some keys are
remapped to do the following functions:
<pre>
- C)reate - Create a new, empty file in the current
- directory. You will be prompted to enter
- a name for the file.
- D)ownload - Download selection using options listed in
- the download options screen.
+ C)reate - Create a new, empty file in the current
+ directory. You will be prompted to enter
+ a name for the file.
- E)dit - Spawn the editor defined in the <a
- href="option_help.html">options screen</a>
- and load selection for editing.
+ F)ull menu - Show a full menu of commands for currently
+ selected file or directory.
- F)ull menu - Show a full menu of commands for currently
- selected file or directory.
+ M)odify - Modify the name or location of selection. If
+ multiple files have been selected, you will
+ only be able to change the location. Choose
+ between changing the name or location and then
+ enter a new filename or path.
- M)odify - Modify the name or location of selection. If
- multiple files have been selected, you will
- only be able to change the location. Choose
- between changing the name or location and then
- enter a new filename or path.
+ R)emove - Delete currently selected files.
- R)emove - Delete currently selected files.
+ T)ag - Tag the highlighted file. Multiple files may
+ be tagged and all other commands except "Create"
+ will be performed on tagged files instead of the
+ one highlighted. Press '<em>t</em>' again to untag
+ a file.
- T)ag - Tag the highlighted file. Multiple files may
- be tagged and all other commands except "Create"
- will be performed on tagged files instead of the
- one highlighted. Press '<em>t</em>' again to untag
- a file.
+ U)pload - Upload a file to the current directory using
+ one of the options listed in the upload screen.
+</pre>
+Some other keys useful in Dired mode:
+<pre>
+ D)ownload - Download selection using options listed in
+ the download options screen.
- U)pload - Upload a file to the current directory using
- one of the options listed in the upload
- options screen.
+ E)dit - Spawn the editor defined in the <a
+ href="option_help.html">Options Menu</a>
+ and load selection for editing.
</pre>
-<em>Note:</em> Dired mode must be activated at compile time by the
-system administrator. Otherwise, the above commands will not be available
-and lynx will treat a directory listing as a HTML file.
+<em>Note:</em> Dired mode must be activated at compile time.
+Otherwise, the above commands will not be available
+and Lynx will treat a directory listing as an HTML file.
</body>
</html>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/edit_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/edit_help.html
index 92008a637e7..c5eae4b172c 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/edit_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/edit_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Lynx Line Editor Default Key Binding</title>
@@ -9,23 +9,25 @@
Lynx invokes a built-in <em>Line Editor</em> for entering strings in
response to prompts, in forms, and for email messages if an external editor
-has not been defined. Administrators can offer alternate key bindings
-by adding them in LYEditmap.c before compiling Lynx. If available, they may
+has not been defined. Alternative key bindings can be offered
+by configuring with --enable-alt-bindings or by adding them in LYEditmap.c
+before compiling Lynx. If available, they may
be selected via the 'o'ptions menu, or by editing lineedit_mode in the
'.lynxrc' file.
-<p>One such alternate key binding, which may be available on your system,
-is the <A HREF="alt_edit_help.html">Alternate Bindings</A> keymap.
+<p>Two such alternative key bindings, which may be available on your system,
+are the <A HREF="alt_edit_help.html">Alternative Binding</A> keymap and the
+<A HREF="bashlike_edit_help.html">Bash-like Binding</A> keymap.
<p>Note: setting emacs/vi keys ON has no effect on line-editor bindings.
<p>This is the <em>Default Binding</em> keymap:
-<p><pre>
+<pre>
ENTER Input complete - RETURN
TAB Input complete - TAB, Do
ABORT Input cancelled - Ctrl-G, Ctrl-O, (Ctrl-C on some systems)
- ERASE Erase the line - Ctrl-U, Ctrl-X
+ ERASE Erase the line - Ctrl-U
BACK Cursor back char - Left-Arrow
FORW Cursor forward char - Right-Arrow
@@ -44,14 +46,25 @@ is the <A HREF="alt_edit_help.html">Alternate Bindings</A> keymap.
LOWER Lower case the line - Ctrl-K
LKCMD Invoke cmd prompt - Ctrl-V (in form text fields, only) [2]
- SWMAP Switch input keymap - Ctrl-^
+ SWMAP Switch input keymap - Ctrl-^ (if compiled in)
+
+<A NAME="TASpecial">Special commands for use only in textarea fields</A>[3]:
+
+ Textarea external edit - Ctrl-X e
+ Insert file in textarea - Ctrl-X i
+ Grow textarea - Ctrl-X g
[1] "next" means the character "under" a box or underline style cursor; it
means "to the immediate right of" an I-beam (between characters) type
cursor.
-[2] Follow Ctrl-V with the key "e" bound to the EDIT function,
- to edit the form's textarea field using an external editor.
+[2] Follow Ctrl-V with any recognized key command, to "escape" from a text
+ input field.
+
+[3] For other key combinations using Ctrl-X as a prefix key, see the
+ Help page for the <a rel="Sibling" title="Bash-Like Binding"
+ href="bashlike_edit_help.html"
+ >Bash-Like</a> Binding.
</pre>
</body>
</html>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/environments.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/environments.html
index 9e578fdc35c..290ffcb0417 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/environments.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/environments.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Help on Environment variables</title>
@@ -261,10 +261,10 @@ NATIVE LANGUAGE SUPPORT
ISO 3166.
LANGUAGE This variable, if set, will override
- the default message language. This is a
- GNU extension that has higher priority for
- setting the message catalog than LANG or
- LC_ALL.
+ the default message language. This is a
+ GNU extension that has higher priority for
+ setting the message catalog than LANG or
+ LC_ALL.
LC_ALL and
@@ -273,9 +273,9 @@ NATIVE LANGUAGE SUPPORT
style. They are POSIXly correct.
LINGUAS This variable, if set prior to configuration,
- limits the installed languages to specific values.
- It is a space-separated list of two-letter codes.
- Currently, it is hard-coded to a wish list.
+ limits the installed languages to specific values.
+ It is a space-separated list of two-letter codes.
+ Currently, it is hard-coded to a wish list.
NLSPATH This variable, if set, is used as the
path prefix for message catalogs.
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/follow_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/follow_help.html
index 76f5b93460d..b5893963e81 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/follow_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/follow_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Help on the Follow link (or page) number feature</TITLE>
@@ -31,7 +31,7 @@ it will not be ACTIVATE-ed.
<p>If the number entered at the prompt has a '<em>g</em>' suffix (e.g.,
<em>123g</em>), then Lynx will make the link corresponding to that number
the current link, paging as appropriate if the link does not appear in
-the currently displayed page. The '<em>g</em>' suffix is implied (need
+the currently displayed page. The '<em>g</em>' suffix is inferred (need
not be entered) for form fields in <em>Links and form fields are
numbered</em> mode.
@@ -54,7 +54,7 @@ the page. <em>5p+</em> skips ahead 5 pages, and so on.
You can also enter <em>5+</em> or <em>5-</em>, which will activate
the 5th link ahead/behind where you are currently positioned.
Note that typing <em>1g+</em> is different from typing a down arrow
-in that <em>1g+</em> may skip pages containing no links, or
+in that <em>1g+</em> skips pages containing no links, or
intervening non-numbered links, such as form fields when
form fields are not numbered. It also differs from
the <em>&lt;tab&gt;</em> command in that <em>1g+</em>
@@ -62,8 +62,8 @@ does not skip over whole textareas, unless form fields
are not numbered.
<p>
-<em>NOTE:</em> <em>1+g 1-g 1+p 1-p</em> are all recognized as equivalent<br>
-to <em>1g+ 1g- 1p+ 1p-</em> . Any other (mistyped) characters terminate<br>
+<em>NOTE:</em> <em>1+g 1-g 1+p 1-p</em> are all recognized as equivalent
+to <em>1g+ 1g- 1p+ 1p-</em> . Any other (mistyped) characters end
the formula: e.g. <em>1gh+</em> is treated as <em>1g</em>.
<p>If the user has set <em>Keypad mode</em> to <em>Numbers act as arrows</em>,
@@ -88,7 +88,7 @@ numbered</em> mode. In any keypad mode, the <em>F_LINK_NUM</em>
('<em>0</em>') command will invoke a <em>Select option (or page)
number:</em> prompt, and you can enter a number, and optionally a
'<em>g</em>' or '<em>p</em>' suffix, to select or seek an OPTION in that
-list. If only an number is entered at the prompt, the corresponding OPTION
+list. If only a number is entered at the prompt, the corresponding OPTION
will be selected and the popup will be retracted. If the '<em>g</em>'
suffix is included, then you will be positioned on the corresponding OPTION
in the list, paging through the list if necessary, but it will not be
@@ -123,9 +123,9 @@ Anchor's HREF attribute is intended as a navigation aid for robots
document. With the <em>-ismap</em> command line switch, Lynx will
additionally treat a link to a server-side image maps as hidden if
there also is a client-side map for the same image.
-Finally, in some cases links which are not intended to be hidden
+Finally, in some cases links that are not intended to be hidden
may effectively become <em>hidden links</em> because of bad HTML.
-The <em>hidden links</em> differ from Anchors which have only a
+The <em>hidden links</em> differ from Anchors that have only a
NAME or ID attribute name/value pair (intended as positioning targets from
other links which do have HREF attributes and values that include a
fragment).
@@ -146,15 +146,15 @@ shown in the text even in <em>links are numbered</em> mode. Not using a
<em>hidden links</em>, they will be reported, with appropriate labeling,
in the menus created for the LIST ('<em>l</em>') or ADDRLIST ('<em>A</em>')
commands, unless <em>-hiddenlinks=ignore</em> is used. They can then be
-ACTIVATE-ed via those menus. Also, if a link was hidden due to an ALT
+ACTIVATE-ed via those menus. Also, if a link was hidden because of an ALT
attribute in an IMG element, it will be converted to a <em>visible link</em>
whenever the IMAGE_TOGGLE ('<em>*</em>') command is used to create links
for SRC attribute values of IMG elements, because this indicates that the
user does have some form of image handling enabled via a helper application,
-or wishes to download files for subsequent use with a graphic browsers or
+or wishes to download files for subsequent use with a graphic browser or
other suitable software.
-<p>HTML forms also can have fields with a HIDDEN attribute, indicating that
+<p>HTML forms also may have fields with a HIDDEN attribute, indicating that
a name/value pair for the fields should be included in the content submitted
for the form, but the value should not be displayed in the rendered form.
Lynx respects this attribute as well, and neither displays the HIDDEN field,
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/gopher_types_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/gopher_types_help.html
index 629256e1347..206665c5c5d 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/gopher_types_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/gopher_types_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Listing of Gopher types</TITLE>
@@ -26,19 +26,19 @@ nameserver interface
</ul>
<dt>(HQX)
-<dd>A Macintosh file that has be BinHexed
+<dd>A Macintosh file that has been BinHexed
<dt>(?)
<dd>A searchable database
<dt>(IMG)
-<dd>An unknown image type
+<dd>An unknown image type<br>
You must have an <A HREF="xterm_help.html">X terminal</A> to
view images
<dt>(GIF)
-<dd>An image in Graphics Interchange Format
+<dd>An image in Graphics Interchange Format<br>
You must have an <A HREF="xterm_help.html">X terminal</A> to
view images
@@ -49,8 +49,7 @@ view images
<dd>The link will open a connection to another host using telnet
<dt>(3270)
-<dd>The link will open a connection to another
-host using tn3270
+<dd>The link will open a connection to another host using tn3270
<dt>(UKN)
<dd>An unknown or unsupported type
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/history_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/history_help.html
index c6e3010fdd4..db1776a20af 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/history_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/history_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Help on the History Page</TITLE>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/keystroke_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/keystroke_help.html
index aa7a3da110a..d3ca4ede9fa 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/keystroke_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/keystroke_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Help on Lynx Keystroke Commands</TITLE>
@@ -11,7 +11,7 @@
>MOVEMENT</A>: Down arrow - Highlight next topic
Up arrow - Highlight previous topic
Right arrow, - Jump to highlighted topic
- Return, Enter
+ Return, Enter - Follow selected link
Left arrow - Return to previous topic
<A HREF="scrolling_help.html"
@@ -19,86 +19,106 @@
- - Scroll up to previous page (Page-Up)
SPACE - Scroll down to next page (Page-Down)
b - Scroll up to previous page (Page-Up)
- CTRL-A - Go to first page of the current document (Home)
- CTRL-E - Go to last page of the current document (End)
- CTRL-B - Scroll up to previous page (Page-Up)
- CTRL-F - Scroll down to next page (Page-Down)
- CTRL-N - Go forward two lines in the current document
- CTRL-P - Go back two lines in the current document
- ) - Go forward half a page in the current document
- ( - Go back half a page in the current document
- # - Go to Toolbar or Banner in the current document
+ CTRL-A - Go to first page of the current document (Home)
+ CTRL-E - Go to last page of the current document (End)
+ CTRL-B - Scroll up to previous page (Page-Up)
+ CTRL-F - Scroll down to next page (Page-Down)
+ CTRL-N - Go forward two lines in the current document
+ CTRL-P - Go back two lines in the current document
+ ) - Go forward half a page in the current document
+ ( - Go back half a page in the current document
+ ^ - Go to the first link on the current line
+ $ - Go to the last link on the current line
+ &lt; - Go to the previous link in the current column
+ &gt; - Go to the next link in the current column
+ # - Go to Toolbar or Banner in the current document
- <A HREF="dired_help.html">DIRED</A>: c - Create a new file
- d - Download selected file
- e - Edit selected file
- E - Edit the current link's URL (or ACTION) and
- use that as a goto URL.
- f - Show a full menu of options for current file
- m - Modify the name or location of selected file
- r - Remove selected file
- t - Tag highlighted file
- u - Upload a file into the current directory
+ <A HREF="dired_help.html">DIRED</A>: c - Create a new file
+ d - Download selected file
+ e - Edit selected file
+ f - Show a full menu of options for current file
+ m - Modify the name or location of selected file
+ r - Remove selected file
+ t - Tag highlighted file
+ u - Upload a file into the current directory
<A HREF="other_help.html">OTHER</A>: ? (or h) - Help (this screen)
a - Add the current link to a bookmark file
c - Send a comment to the document owner
d - Download the current link
- e - Edit the current file
+ e - Edit the current file
+ E - Edit the current link's URL (or ACTION) and
+ use that as a goto URL.
g - Goto a user specified <a
- href="../lynx_url_support.html">URL</a> or file
+ href="../lynx_url_support.html">URL</a> or file
G - Edit the current document's URL and use that
as a goto URL.
- i - Show an index of documents
- j - Execute a jump operation
- k - Show a list of key mappings
- l - List references (links) in current document
+ i - Show an index of documents
+ j - Execute a jump operation
+ k - Show list of actual key mappings
+ l - List references (links) in current document
m - Return to main screen
o - Set your <A HREF="option_help.html">options</A>
p - <a href="print_help.html"
- >Print</a> to a file, mail, printers, or other
+ >Print</a> to a file, mail, printers, or other
q - Quit (Capital 'Q' for quick quit)
/ - Search for a string within the current document
s - Enter a search string for an external search
n - Go to the next search string
+ N - Go to the previous search string
v - View a <A HREF="bookmark_help.html"
- >bookmark file</A>
+ >bookmark file</A>
V - Go to the <A HREF="visited_help.html"
- >Visited Links Page</A>
+ >Visited Links Page</A>
x - Force submission of form or link with no-cache
z - Cancel transfer in progress
[backspace] - Go to the <A HREF="history_help.html"
- >History Page</A>
+ >History Page</A>
= - Show info about current document, URL and link
\ - Toggle document source/rendered view
- ! - Spawn your default shell
- ' - Toggle "historical" vs minimal or valid comment
- parsing
- _ - Clear all authorization info for this session
- ` - Toggle minimal or valid comment parsing
- * - Toggle image_links mode on and off
- @ - Toggle raw 8-bit translations or CJK mode
- on or off
- [ - Toggle pseudo_inlines mode on and off
- ] - Send a HEAD request for the current doc or link
- " - Toggle valid or "soft" double-quote parsing
+ ! - Spawn your default shell
+ ' - Toggle "historical" vs minimal or valid comment
+ parsing
+ _ - Clear all authorization info for this session
+ ` - Toggle minimal or valid comment parsing
+ * - Toggle image_links mode on and off
+ @ - Toggle raw 8-bit translations or CJK mode
+ on or off
+ . - Run external program on the current link.
+ , - Run external program on the current document.
+ { - Shift the screen left.
+ } - Shift the screen right.
+ | - Toggle line-wrap mode. When line-wrap is
+ off, you may use { and } to shift the screen
+ left/right. The screen width is set to 999.
+ ~ - Toggle parsing of nested tables (experimental).
+ [ - Toggle pseudo_inlines mode on and off
+ ] - Send a HEAD request for the current doc or link
+ " - Toggle valid or "soft" double-quote parsing
CTRL-R - Reload current file and refresh the screen
- CTRL-V - Switch to <A HREF="option_help.html#tagsoup"
- >alternative parsing</A> of HTML documents
- CTRL-W - Refresh the screen
+ CTRL-L - Refresh the screen
+
+ CTRL-V - Outside of a text input line or field,
+ switch to <A HREF="option_help.html#tagsoup"
+ >alternative parsing</A> of HTML.
+ - In a form text input field,
+ CTRL-V prompts for a key command (allows
+ <A HREF="../Lynx_users_guide.html#CtrlVNote"
+ >escaping</A> from the field).
CTRL-U - Erase input line (<a href="edit_help.html"
- >more input line commands</a>)
+ >more input line commands</a>)
CTRL-G - Cancel input or transfer
+
CTRL-T - Toggle trace mode on and off
; - View the Lynx Trace Log for the current session
CTRL-K - Invoke the <A HREF="cookie_help.html"
- >Cookie Jar Page</A>
+ >Cookie Jar Page</A>
numbers - Invoke the prompt
- <a href="follow_help.html"
- >Follow link (or goto link or page) number:</a>
+ <a href="follow_help.html"
+ >Follow link (or goto link or page) number:</a>
or the
<a href="follow_help.html#select-option"
- >Select option (or page) number:</a>
+ >Select option (or page) number:</a>
prompt
</PRE>
</BODY>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/movement_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/movement_help.html
index 4655db31a76..d3661d9ad97 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/movement_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/movement_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Help on Lynx Movement commands</TITLE>
@@ -27,9 +27,9 @@
from the '.lynxrc' file, lowercase h,j,k,l will
move left, down, up, and right, respectively.
- *note: If 'Emacs Keys' are enabled from the options menu or
- from the '.lynxrc' file, Ctrl-B, Ctrl-N, Ctrl-P,
- Ctrl-F will move left, down, up, and right, respectively.
+ *note: If 'Emacs Keys' are enabled from the options menu or
+ from the '.lynxrc' file, Ctrl-B, Ctrl-N, Ctrl-P,
+ Ctrl-F will move left, down, up, and right, respectively.
*note: If the 'Num Lock' on your keyboard is on, Lynx will
translate the numbers of your keypad into movement
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/option_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/option_help.html
index 17205d779fe..b27cca2e888 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/option_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/option_help.html
@@ -1,70 +1,90 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
-<TITLE>Options Screen Help</TITLE>
+<TITLE>Form-based Options Menu : Help</TITLE>
<LINK rev="made" href="mailto:lynx-dev@sig.net">
</HEAD>
<BODY>
-<h1>OPTIONS SCREEN HELP</h1>
+<h1>FORM-BASED OPTIONS MENU : HELP</h1>
-The Options Screen allows you to set and modify many Lynx features.<BR>
+The Options Menu allows you to set and modify many Lynx features.<BR>
Note: some options appear on the screen only if they have been
-compiled in or chosen in `lynx.cfg':<P>
+compiled in or chosen in `lynx.cfg':
<UL>
-<LI>Personal Preferences
+
+<LI>General Preferences
<UL>
-<LI><A HREF="#CK">Cookies</A>
+<LI><A HREF="#UM">User Mode</A>
<LI><A HREF="#ED">Editor</A>
-<LI><A HREF="#EM">Emacs keys</A>
-<LI><A HREF="#KM">Keypad mode</A>
-<LI><A HREF="#LE">Line edit style</A>
-<LI><A HREF="#PM">Personal Mail Address</A>
<LI><A HREF="#ST">Searching type</A>
-<LI><A HREF="#SC">Show color</A>
-<LI><A HREF="#CL">Show cursor for current link or option</A>
-<LI><A HREF="#UM">User Mode</A>
+<LI><A HREF="#CK">Cookies</A>
+</UL>
+
+<LI>Keyboard Input
+<UL>
+<LI><A HREF="#KM">Keypad mode</A>
+<LI><A HREF="#EM">Emacs keys</A>
<LI><A HREF="#VI">VI keys</A>
-<LI><A HREF="#DC">Display Character set</A>
-<LI><A HREF="#DV">X DISPLAY variable</A></UL>
-<LI>Document Layout
+<LI><A HREF="#LE">Line edit style</A>
+</UL>
+
+<LI>Display and Character Set
<UL>
+<LI><A HREF="#DC">Display Character set</A>
<LI><A HREF="#AD">Assumed document character set</A>
<LI><A HREF="#JK">Raw 8-bit or CJK mode</A>
-<LI><A HREF="#tagsoup">HTML error recovery</A>
+<LI><A HREF="#DV">X DISPLAY variable</A>
+</UL>
+
+<LI>Document Appearance
+<UL>
+<LI><A HREF="#SC">Show color</A>
+<LI><A HREF="#CL">Show cursor for current link or option</A>
<LI><A HREF="#PU">Pop-ups for select fields</A>
+<LI><A HREF="#tagsoup">HTML error recovery</A>
<LI><A HREF="#SI">Show Images</A>
-<LI><A HREF="#VB">Verbose Images</A></UL>
-<LI>Bookmark Options
+<LI><A HREF="#VB">Verbose Images</A>
+</UL>
+
+<LI>Headers Transferred to Remote Servers
<UL>
-<LI><A HREF="#MB">Multi-bookmarks</A>
-<LI><A HREF="#BF">Bookmark file</A></UL>
-<LI>File Management Options
+<LI><A HREF="#PM">Personal Mail Address</A>
+<LI><A HREF="#PC">Preferred Document Charset</A>
+<LI><A HREF="#PL">Preferred Document Language</A>
+<LI><A HREF="#UA">User Agent</A>
+</UL>
+
+<LI>Listing and Accessing Files
<UL>
<LI><A HREF="#FT">FTP sort criteria</A>
<LI><A HREF="#LD">Local directory sort criteria</A>
<LI><A HREF="#DF">Show dot files</A>
-<LI><A HREF="#LL">Execution links</A></UL>
-<LI>Headers transferred to remote server
+<LI><A HREF="#LL">Execution links</A>
+</UL>
+
+<LI>Special Files and Screens
<UL>
-<LI><A HREF="#PC">Preferred Document Charset</A>
-<LI><A HREF="#PL">Preferred Document Language</A>
-<LI><A HREF="#UA">User Agent</A></UL>
+<LI><A HREF="#MB">Multi-bookmarks</A>
+<LI><A HREF="#BF">Bookmark file</A>
+<LI><A HREF="#VP">Visited Pages</A>
+</UL>
+
</UL>
<H1><A NAME="CK">Cookies</A></H1>
This can be set to accept or reject all cookies or to ask each time.
-See the Users Guide for details of <A HREF="../Lynx_users_guide.html#Cookies"
->cookie usage</A>.
+See the Users Guide for details of <A HREF="../Lynx_users_guide.html#Cookies"
+>cookie usage</A>.
<H1><A NAME="ED">Editor</A></H1>
-This is the editor to be invoked when editing browsable files,
-sending mail or comments, or filling form's textarea (multiline input field).
-The full pathname of the editor command should be specified when possible.
-It is assumed the text editor supports the same character set
-you have for "display character set" in Lynx.
+This is the editor to be invoked when editing browsable files,
+sending mail or comments, or filling form's textarea (multiline input field).
+The full pathname of the editor command should be specified when possible.
+It is assumed the text editor supports the same character set
+you have for "display character set" in Lynx.
<H1><A NAME="EM">Emacs keys</A></H1>
@@ -90,8 +110,7 @@ with the arrow keys. You can also number form fields.
<H1><A NAME="LE">Line edit style</A></H1>
This allows you to set alternate key bindings for the built-in line editor,
-if your system administrator has installed
-<A HREF="alt_edit_help.html">Alternate Bindings</A>.
+if <A HREF="alt_edit_help.html">Alternate Bindings</A> have been installed.
Otherwise, Lynx uses the <A HREF="edit_help.html">Default Binding</A>.
<H1><A NAME="PM">Personal Mail Address</A></H1>
@@ -251,21 +270,25 @@ from lynx.cfg or command line switch.
<H1><A NAME="SI">Show Images</A></H1>
-Text-based browser cannot show images directly, so we have a choice:
-<em>ignore all</em> images without ALT= text string
-(this is also switched by <A HREF="../Lynx_users_guide.html#[-key">'[' key</A>),
-<em>show labels</em> (see also "verbose images" for choice between [IMAGE] and filename),
-<em>use links</em> for every image to make it possible to download them
-(also switched by <A HREF="../Lynx_users_guide.html#*-key">'*' key</A>).
-Changing these settings will not be saved but could be made permanent
-by changing the respective settings in lynx.cfg.
+This option combines the effects of the `*' &amp; `[' keys as follows:
+<pre>
+ <em>ignore</em> all images which lack an ALT= text string,
+ <em>show labels</em>, e.g. [INLINE] -- see `Verbose Images' below -- ,
+ <em>use links</em> for every image, enabling downloading.
+</pre><p>
+This option setting cannot be saved between sessions.
+See <A HREF="../Lynx_users_guide.html#Images">Users Guide</A>
+&amp; <em>lynx.cfg</em> for more details.
<H1><A NAME="VB">Verbose Images</A></H1>
-Controls whether or not Lynx replaces the [LINK], [INLINE] and [IMAGE] comments
-(for images without ALT) with filenames of these images. This is extremely
-useful because now we can determine immediately which images are decorations
-(button.gif, line.gif) and which are important.
+This allows you to replace [LINK], [INLINE] and [IMAGE]
+-- for images without ALT -- with filenames:
+this can be helpful by revealing which images are important
+&amp; which are merely decoration, e.g. <em>button.gif</em>, <em>line.gif</em>.
+See <A HREF="../Lynx_users_guide.html#Images">Users Guide</A>
+&amp; <em>lynx.cfg</em> for more details.
+
<H1><A NAME="VI">VI keys</A></H1>
@@ -290,9 +313,9 @@ and windows-xxxx within native MS-Windows applications.
<H1><A NAME="DV">X DISPLAY variable</A></H1>
-This option is only relevant to X Window users. It specifies
-the DISPLAY (Unix) or DECW$DISPLAY (VMS) variable. It is picked up
-automatically from the environment if it has been previously set.
+This option is only relevant to X Window users. It specifies
+the DISPLAY (Unix) or DECW$DISPLAY (VMS) variable. It is picked up
+automatically from the environment if it has been previously set.
<H1><A NAME="MB">Multi-bookmarks</A></H1>
@@ -325,6 +348,38 @@ if subdirectories are included (e.g., './BM/lynx_bookmarks.html').
Lynx will create bookmark files when you first 'a'dd a link,
but any subdirectories in the filepath must already exist.
+<H1><A NAME="VP">Visited Pages</A></H1>
+
+This allows you to change the appearance of the
+<a href="visited_help.html">Visited Links Page</a>
+
+Normally it shows a list, in reverse order of the pages visited.
+The popup menu allows you these choices:
+<dl>
+<dt><EM>By First Visit</EM>:
+The default appearance, shows the pages based on when they were first visited.
+The list is shown in reverse order, to make the current page (usually) at
+the top of the list.
+<dt><EM>By First Visit Reversed</EM>
+The default appearance, shows the pages based on when they were first visited.
+The list is shown in order, to make the current page (usually) at
+the bottom of the list.
+<dt><EM>As Visit Tree</EM>
+Combines the first/last visited information, showing the list in order of
+the first visit, but using the indentation level of the page immediately
+previous to determine indentation of new entries.
+That gives a clue to the order of visiting pages when moving around in
+the History or Visited Pages lists.
+<dt><EM>By Last Visit</EM>
+The default appearance, shows the pages based on when they were last visited.
+The list is shown in reverse order, to make the current page (usually) at
+the top of the list.
+<dt><EM>By Last Visit Reversed</EM>
+The default appearance, shows the pages based on when they were last visited.
+The list is shown in order, to make the current page (usually) at
+the bottom of the list.
+</dl>
+
<H1><A NAME="FT">FTP sort criteria</A></H1>
This allows you to specify how files will be sorted within FTP listings.
@@ -370,7 +425,7 @@ e.g., <kbd>da, en-gb;q=0.8, en;q=0.7</kbd> .
The header string which Lynx sends to servers to indicate the User-Agent
is displayed here. Changes may be disallowed via the -restrictions switch.
-Otherwise, the header can be changed temporarily to e.g., L_y_n_x/2.8.2
+Otherwise, the header can be changed temporarily to e.g., L_y_n_x/2.8.3
for access to sites which discriminate against Lynx based on checks
for the presence of `Lynx' in the header. If changed during a Lynx session,
the default User-Agent header can be restored by deleting the modified string
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/other_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/other_help.html
index 2aa7f337493..0f41f20c5e1 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/other_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/other_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Help on Misc. Lynx Commands</TITLE>
@@ -7,55 +7,53 @@
<BODY>
<h1>+++ Other Commands +++</h1>
<PRE>
- a - Places the link that you are currently positioned
- on into a personal <A HREF="bookmark_help.html">bookmark file</A>.
+ a - Places the link that you are currently positioned
+ on into a personal <A HREF="bookmark_help.html">bookmark file</A>.
- c - Allows you to send a mail message to the owner
- or maintainer of the data that you are currently
- viewing. In the case that no owner is known,
- you cannot send a comment.
+ c - Allows you to send a mail message to the owner
+ or maintainer of the data that you are currently
+ viewing. In the case that no owner is known,
+ you cannot send a comment.
- d - Downloads the file pointed to by the current link
- and displays an option menu allowing the file to
- be saved or transferred by configurable options.
- Can also be used when positioned on a form SUBMIT
- button to download the reply to a form submission.
+ d - Downloads the file pointed to by the current link
+ and displays an option menu allowing the file to
+ be saved or transferred by configurable options.
+ Can also be used when positioned on a form SUBMIT
+ button to download the reply to a form submission.
e - Allows you to edit the current document if it is a
- local file.
+ local file.
E - Allows you to edit the current link's URL (or ACTION) and
- use that as a <em>goto</em> URL.
+ use that as a <em>goto</em> URL.
- g - Allows you to enter any <a href="http://www.ncsa.uiuc.edu/demoweb/url-primer.html">URL</a> or filename that
- you wish to view, and then <em>goto</em> it.
+ g - Allows you to enter any <a href="http://www.ncsa.uiuc.edu/demoweb/url-primer.html">URL</a> or filename that
+ you wish to view, and then <em>goto</em> it.
- G - Allows you to edit the current document's URL and use that
+ G - Allows you to edit the current document's URL and use that
as a <em>goto</em> URL.
- ? or H - Hypertext help to explain how to navigate in
- Lynx and use its features.
+ ? or H - Hypertext help to explain how to navigate in
+ Lynx and use its features.
- i - Shows an index of files or subjects. This is
- configurable by the System administrator, or
- within documents that you may be viewing.
+ i - Shows an index of files or subjects,
+ which may be changed in <em>lynx.cfg</em>.
- j - Allows you to enter a "short" name to execute a
- jump command configured by your system administrator.
- Press "?" and ENTER to see a list of defined
- jump commands.
+ j - Allows you to enter a short name to goto an URL,
+ if a jumps file has been defined. Press "?"
+ and ENTER to see the list of defined jump commands.
- k - Shows a list of key mappings. Keys remapped in
- "lynx.cfg" show up in this list.
+ k - Shows a list of key mappings. Keys remapped in
+ "lynx.cfg" show up in this list.
- l - Brings up a list of references (links) in the current
- document, which can be used for rapid access to the
- links in large documents.
+ l - Brings up a list of references (links) in the current
+ document, which can be used for rapid access to the
+ links in large documents.
- m - Returns to the first screen and empties the
- history stack.
+ m - Returns to the first screen and empties the
+ history stack.
- p - Brings up a list of <A HREF="print_help.html">print commands</A>.
+ p - Brings up a list of <A HREF="print_help.html">print commands</A>.
o - Brings up a list of settable <A HREF="option_help.html">options</A>.
@@ -65,36 +63,36 @@
(case insensitive or case sensitive
depending on the <A HREF="option_help.html">options</A> set).
- s - Search through an external searchable indexed document.
+ s - Search through an external searchable indexed document.
- n - Move to the next instance of a search string if you
- have searched previously.
+ n - Move to the next instance of a search string if you
+ have searched previously.
- v - View a <A HREF="bookmark_help.html">Bookmark file</A>.
+ v - View a <A HREF="bookmark_help.html">Bookmark file</A>.
V - Go to the <A HREF="visited_help.html">Visited Links Page</A>
x - Force submission of form or link with no-cache.
- z - Abort a network transfer in progress. If any partial
+ z - Abort a network transfer in progress. If any partial
data has been transferred it will be displayed.
&lt;backspace&gt; - displays the <a href="history_help.html">History Page</A>.
- = - Show information about the file and link that you
- are currently viewing.
+ = - Show information about the file and link that you
+ are currently viewing.
- \ - Toggles between viewing the HTML source of a
- document and the rendered version of the document.
+ \ - Toggles between viewing the HTML source of a
+ document and the rendered version of the document.
- ! - Spawns your default operating system shell.
+ ! - Spawns your default operating system shell.
- ' - Toggles "historical" vs minimal or valid comment parsing.
+ ' - Toggles "historical" vs minimal or valid comment parsing.
When historical, any close-angle-bracket will be treated
- as a comment terminator, emulating the parsing bug in old
- versions of Mosaic and Netscape, rather than validly
- requiring pairs of two successive dashes to delimit
- comments within the angle-brackets.
+ as a comment terminator, emulating the parsing bug in old
+ versions of Mosaic and Netscape, rather than validly
+ requiring pairs of two successive dashes to delimit
+ comments within the angle-brackets.
_ - Clears all authorization info for the current session. Can
be used when leaving one's terminal without ending the Lynx
@@ -103,17 +101,17 @@
Note that any protected documents that are still in cache
can still be accessed.
- ` - Toggles minimal or valid comment parsing. When minimal, any
- two successive dashes followed by a close-angle-bracket will
- be treated as a comment terminator, emulating the parsing bug
- in Netscape v2.0. If historical comment parsing is set, that
- will override minimal or valid comment parsing.
+ ` - Toggles minimal or valid comment parsing. When minimal, any
+ two successive dashes followed by a close-angle-bracket will
+ be treated as a comment terminator, emulating the parsing bug
+ in Netscape v2.0. If historical comment parsing is set, that
+ will override minimal or valid comment parsing.
- * - Toggles image_links mode on and off. When on, links will
+ * - Toggles image_links mode on and off. When on, links will
be created for all images, including inlines.
@ - Toggles raw 8-bit translations or CJK mode on and off, only
- for documents which does not specify character set explicitely.
+ for documents which does not specify character set explicitly.
Should be on when the document's charset matches the
display character set, and otherwise off so that 8-bit
characters will be translated by Lynx with respect to the
@@ -139,21 +137,21 @@
the CGI script's headers, or treat it as invalid and return
an error message.
- " - Toggles valid or "soft" double-quote parsing. When soft,
+ " - Toggles valid or "soft" double-quote parsing. When soft,
a close-angle-bracket will serve as both a close-double-
- quote and close-tag, emulating the parsing bug in old
- versions of Mosaic and Netscape.
+ quote and close-tag, emulating the parsing bug in old
+ versions of Mosaic and Netscape.
- CTRL-R - Reloads the current document and resets the display.
+ CTRL-R - Reloads the current document and resets the display.
- CTRL-V - Switches to an alternative way of parsing HTML documents.
+ CTRL-V - Switches to an alternative way of parsing HTML documents.
This may help to get a more readable rendering of some
documents with invalidly placed HTML tags, <A
HREF="option_help.html#tagsoup">more details</A>.
- CTRL-W - Resets or cleans up the display.
+ CTRL-W - Resets or cleans up the display.
- CTRL-U - Clears text from an input field or prompt.
+ CTRL-U - Clears text from an input field or prompt.
CTRL-G - Cancels any input prompt, mail message or data transfer.
@@ -168,7 +166,7 @@
<a href="follow_help.html"
>Follow link (or goto link or page) number:</a> or
<a href="follow_help.html#select-option"
- >Select option (or page) number:</a>
+ >Select option (or page) number:</a>
prompts.
</PRE>
</BODY>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/print_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/print_help.html
index 153caa74c31..052852731c2 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/print_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/print_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Lynx Print Help</TITLE>
@@ -30,8 +30,7 @@ may be available:
valid e-mail address.
<dt>Custom print options:
-<dd>Any number of custom print options may be available, as defined
- by your system administrator.
+<dd>Any number of custom print options may be defined in <em>lynx.cfg</em>.
</dl>
</BODY>
</HTML>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/scrolling_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/scrolling_help.html
index d19313462bb..71a401d7d0b 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/scrolling_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/scrolling_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Lynx Scrolling Help</TITLE>
@@ -15,7 +15,7 @@
or CTRL-B) will bring you back up one page (Page-Up).
If the 'Num Lock' on your keyboard is on, Lynx will translate
- the numbers of your keypad into movement commands as follows:
+ the numbers of your keypad into movement commands as follows:
9 - page up
8 - up arrow
@@ -49,6 +49,14 @@
( - Moves you back half a page in the current
document (Up-Half).
+ ^ - Go to the first link on the current line.
+
+ $ - Go to the last link on the current line.
+
+ &lt; - Go to the previous link in the current column.
+
+ &gt; - Go to the next link in the current column.
+
# - Jumps you to the pseudo Toolbar or Banner if
present in the current document. Use left-arrow
to return from there to your previous position
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/test_display.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/test_display.html
index b053daeb068..122796958d0 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/test_display.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/test_display.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Quick test for identifying display character set</TITLE>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/visited_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/visited_help.html
index 0a6874f3fc9..5c62fb3eb56 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/visited_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/visited_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>Help on the Visited Links Page</TITLE>
@@ -11,7 +11,7 @@ The Visited Links Page displays all of the links that you have traveled
through during the current Lynx session, except for any temporary menu
or list files, bookmark files, or any documents associated with POST
content. The VLINKS keystroke command for invoking this page normally
-is mapped to uppercase '<em>V</em>'. The list of Visited Links is in
+is mapped to uppercase '<em>V</em>'. The list of Visited Links is normally in
order of recency (most recently visited links first), without repetitions
in the list if a link was visited more than once during the session (unless
the URLs differ due to appended fragments), and is supplementary to the
@@ -25,7 +25,12 @@ can use this list to save such links in your <A HREF="bookmark_help.html"
<p>In contrast to the History Page, the Visited Links Page includes any
links which were retrieved for '<em>d</em>'ownloading or were passed to
-helper applications, i.e, not just the links that were rendered and
+helper applications, i.e., not just the links that were rendered and
displayed by Lynx, itself.
+
+<p>You may change the appearance of the Visited Links Page via a popup
+menu on that page (which also appears on the
+<A HREF="option_help.html#VP">Options Menu</A>).
+
</BODY>
</HTML>
diff --git a/gnu/usr.bin/lynx/lynx_help/keystrokes/xterm_help.html b/gnu/usr.bin/lynx/lynx_help/keystrokes/xterm_help.html
index d40ea45016f..640cc9139c9 100644
--- a/gnu/usr.bin/lynx/lynx_help/keystrokes/xterm_help.html
+++ b/gnu/usr.bin/lynx/lynx_help/keystrokes/xterm_help.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>X Terminal Help</TITLE>
@@ -22,7 +22,7 @@ programs, usually called X servers, that make them act like X Window
terminals and are frequently used as X terminals.
<dl>
-<dt>Note:
+<dt>Note:
<dd>The terminology used to describe processes associated with X
terminals can be confusing. An X terminal is also known as
an "X display server," and the program running on the host
diff --git a/gnu/usr.bin/lynx/lynx_help/lynx-dev.html b/gnu/usr.bin/lynx/lynx_help/lynx-dev.html
index 07abb81bdcd..8eeca51a61d 100644
--- a/gnu/usr.bin/lynx/lynx_help/lynx-dev.html
+++ b/gnu/usr.bin/lynx/lynx_help/lynx-dev.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 2.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>Lynx-Dev Discussion List</title>
@@ -35,13 +35,13 @@ Anyone may read what has been said on the list by visiting
<p>
Besides <em>releases</em>, which are stable versions of Lynx
which come out once or twice a year and can be obtained
-from <a href="http://www.slcc.edu/lynx/release">the release site</a>,
+from <a href="http://lynx.isc.org/release/">the release site</a>,
there are <em>development</em> versions,
which are experimental -- though usually stable enough to use --
and appear every few weeks, depending on current activity.
You can find the latest <em>development</em> version of Lynx
by visiting
-<a href="http://sol.slcc.edu/lynx/current">the development site</a>.
+<a href="http://lynx.isc.org/current/">the development site</a>.
<h1><em>Subscribing to Lynx-Dev</em></h1>
<p>
diff --git a/gnu/usr.bin/lynx/lynx_help/lynx_help_main.html b/gnu/usr.bin/lynx/lynx_help/lynx_help_main.html
index ea2005f41a9..91060a7c599 100644
--- a/gnu/usr.bin/lynx/lynx_help/lynx_help_main.html
+++ b/gnu/usr.bin/lynx/lynx_help/lynx_help_main.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<link rev="made" href="mailto:lynx-dev@sig.net">
@@ -29,11 +29,11 @@
<li><a href="http://www.hippo.ru/%7Ehvv/lynxcfg_toc.html">lynx.cfg options</a>
-- a reference for advanced configurations
<li><a href="http://www.chass.utoronto.ca/%7Epurslow/lhfb.html">Lynx Help for Beginners</a> -- quick help on many common problems
-<li><a href="http://www.access.digex.net/%7Easgilman/lynx/FAQ/">Al Gilman's FAQs</a> -- many common queries, some more advanced
-<li><a href="http://www.crl.com/%7Esubir/lynx.html">Lynx Links</a>
+<li><a href="http://lynx.isc.org/cgi-bin/fom">The Lynx FAQ-O-Matic</a> -- many common queries, some more advanced; users may add answers.
+<li><a href="http://www.trill-home.com/lynx.html">Lynx Links</a>
-- source &amp; binaries, FAQs, developers &amp; archives,<br>
SSL &amp; security, and more
-<li><A HREF="http://www.ocf.berkeley.edu/%7Ejeffwong/lynxstuff/">Lynxstuff</A>
+<li><a href="http://www.ocf.berkeley.edu/%7Ejeffwong/lynxstuff/">Lynxstuff</a>
-- SSL, Wyse terminals, Lynx-friendly Web design
<li><a href="http://leb.net/blinux/blynx/">Blynx</a>
-- Speech-Friendly Help for the visually impaired
@@ -42,14 +42,14 @@ SSL &amp; security, and more
<h2>World Wide Web Consortium documents:</h2>
<ul>
-<li>HTML -- <a href="http://www.w3.org/TR/PR-html40/">4.0</a>
+<li>HTML -- <a href="http://www.w3.org/TR/REC-html40/">4.0</a>
-- <a href="http://www.w3.org/MarkUp/">3.2</a>
-- <a href="http://www.w3.org/MarkUp/html3/Contents.html">3.0</a>
-- <a href="http://www.w3.org/MarkUp/html-spec/html-spec_toc.html">2.0</a>
<li>HTTP -- <a href="http://www.w3.org/Protocols/">1.1</a>
-- <a href="http://www.isi.edu/in-notes/rfc1945.txt">1.0</a>
<li><a href="http://www.w3.org/Addressing/Addressing.html">Web Naming &amp; Addressing Overview: URIs, URLs etc</a>
-<li><a href="http://www.alis.com:8085/ietf/html/">HTML Internationalisation</a>
+<li><a href="http://www.w3c.org/International/">HTML Internationalization</a>
<li><a href="http://www.w3.org/TheProject.html">WWW Consortium: home page</a>
</ul>
@@ -72,11 +72,13 @@ SSL &amp; security, and more
<h2>Other browsing software:</h2>
<ul>
-<li><a href="ftp://gnjilux.cc.fer.hr/pub/unix/util/wget/">WGET</a>
+<li><a href="http://sunsite.dk/wget/">GNU Wget</a>
-- powerful &amp; flexible non-interactive downloader
-<li><a href="http://www.fts.frontec.se/%7Edast/curl/">cURL</a>
+<li><a href="http://www.idata.sk/~ondrej/pavuk/">Pavuk</a>
+ -- powerful &amp; an even more-featured downloader
+<li><a href="http://curl.haxx.se/">cURL</a>
-- non-interactive downloader which supports HTTPS
-<li><a href="http://www.xach.com/snarf/">SNARF</a>
+<li><a href="http://www.xach.com/snarf/">snarf</a>
-- small simple 1-file non-interactive downloader
</ul>
@@ -91,14 +93,24 @@ SSL &amp; security, and more
<ul>
<li><a href="http://www.altavista.com/">AltaVista</a>
<li><a href="http://www.excite.com/">Excite</a>
-<li><a href="http://www.infind.com/">Inference Find</a>
-<li><a href="http://www.Infoseek.com/">Infoseek</a>
+<li><a href="http://www.go.com/">GO.com</a>
+<li><a href="http://www.google.com/">Google</a>
<li><a href="http://www.lycos.com/">Lycos</a>
<li><a href="http://www.metacrawler.com/">MetaCrawler</a>
-<li><a href="http://www.savvysearch.com/">Savvy Search</a>
+<li><a href="http://www.search.com/">Search.com</a>
<li><a href="http://www.webcrawler.com/">WebCrawler</a>
<li><a href="http://www.yahoo.com/">Yahoo!</a>
</ul>
+<H2>Free WWW E-mail services:</H2>
+
+<ul>
+<li><a href="http://www.eudoramail.com/">Eudora Web-Mail</a>
+<li><a href="http://www.excite.com/">Excite Inbox</a>
+<li><a href="http://www.hotmail.com/">Hotmail</a>
+<li><a href="http://www.netaddress.com/">Net@ddress</a>
+<li><a href="http://mail.yahoo.com/">Yahoo! Mail</a>
+</ul>
+
</body>
</html>
diff --git a/gnu/usr.bin/lynx/lynx_help/lynx_url_support.html b/gnu/usr.bin/lynx/lynx_help/lynx_url_support.html
index 759e32f2bd5..bee820509ca 100644
--- a/gnu/usr.bin/lynx/lynx_help/lynx_url_support.html
+++ b/gnu/usr.bin/lynx/lynx_help/lynx_url_support.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html public "-//IETF//DTD HTML 3.0//EN">
+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<HTML>
<HEAD>
<TITLE>URL Schemes Supported in Lynx</TITLE>
@@ -18,6 +18,7 @@
<a href="#mailto">mailto</a> <em>|</em>
<a href="#finger">finger</a> <em>|</em>
<a href="#cso">cso</a> <em>|</em>
+<a href="#bibp">bibp</a> <em>|</em>
<a href="#exec">lynxexec, lynxprog</a> <em>|</em>
<a href="#cgi">lynxcgi</a><em>|</em>
<a href="#internal">internal</a><em>]</em>
@@ -30,8 +31,8 @@ more details about URLs (Uniform Resource Locators) see <em>RFC1738</em>:
<ul>
<li><a href="http://www.w3.org/Addressing/rfc1738.txt"
>http://www.w3.org/Addressing/rfc1738.txt</a>
-<li><a href="ftp://ds.internic.net/rfc/rfc1738.txt"
->ftp://ds.internic.net/rfc/rfc1738.txt</a>
+<li><a href="ftp://ftp.rfc-editor.org/in-notes/rfc1738.txt"
+>ftp://ftp.rfc-editor.org/in-notes/rfc1738.txt</a>
</ul>
<p>Lynx resolves partial or relative URLs in documents with respect to
@@ -40,8 +41,8 @@ absolute URL, using the rules described in <em>RFC1808</em>:
<ul>
<li><a href="http://www.w3.org/Addressing/rfc1808.txt"
>http://www.w3.org/Addressing/rfc1808.txt</a>
-<li><a href="ftp://ds.internic.net/rfc/rfc1808.txt"
->ftp://ds.internic.net/rfc/rfc1808.txt</a>
+<li><a href="ftp://ftp.rfc-editor.org/in-notes/rfc1808.txt"
+>ftp://ftp.rfc-editor.org/in-notes/rfc1808.txt</a>
</ul>
and in subsequent drafts of the <em>IETF</em>:
@@ -76,8 +77,10 @@ according to the rules specified in RFC1808 and subsequent IETF drafts.
<H2><a name="http">The <em>http</em> and <em>https</em> URLs:</a></H2>
Lynx handles http URLs exactly as specified in RFC1738. The format
-is:<BR>
-<tab indent="12"><em>http://host:port/path?searchpart#fragment</em><BR>
+is:
+<pre>
+ <em>http://host:port/path?searchpart#fragment</em>
+</pre>
where <em>:port</em> is optional and defaults to <em>:80</em>,
<em>/path</em> if present is a slash-separated series of symbolic
elements, and <em>?searchpart</em> if present is the query for an ISINDEX
@@ -91,7 +94,7 @@ which can correspond to positions in the rendering of the document.
<p>The https URL has the same format, but the default port is <em>:443</em>.
Patches for support of https URLs and the CONNECT procedure are available
for qualified recipients via <a
-href="http://www.crl.com/~subir/lynx.html">Lynx links</a>. US Export laws
+href="http://www.trill-home.com/lynx.html">Lynx links</a>. US Export laws
and associated red tape pose severe impediments to inclusion of this support
in the general distributions of freeware WWW clients such as Lynx. Sorry.
<HR>
@@ -100,8 +103,10 @@ in the general distributions of freeware WWW clients such as Lynx. Sorry.
>The <em>telnet</em>, <em>tn3270</em>, and <em>rlogin</em> URLs:</a></H2>
A <em>telnet</em> URL generally results in Lynx spawning a telnet
-session. Lynx implements the complete telnet URL scheme, i.e.:<BR>
-<tab indent="12"><em>telnet://user:password@host:port</em>
+session. Lynx implements the complete telnet URL scheme, i.e.:
+<pre>
+ <em>telnet://user:password@host:port</em>
+</pre>
<p>The <em>user</em> and/or <em>:password</em> fields may be omitted, and
the <em>@</em> should be omitted if neither is present. The port defaults
@@ -120,8 +125,10 @@ or not one was included in the URL.
<H2><a name="gopher">The <em>gopher</em> URL:</a></H2>
-The gopher URL takes the form:<BR>
-<tab indent="12"><em>gopher://host:port/gopher-path</em><BR>
+The gopher URL takes the form:
+<pre>
+ <em>gopher://host:port/gopher-path</em>
+</pre>
where <em>:port</em> is optional and defaults to <em>:70</em>, and the
<em>/gopher-path</em> is opaque (not fully equivalent to the
slash-separated series of symbolic elements of http paths) as explained
@@ -150,9 +157,13 @@ but other WWW clients may mishandle it.
<p>For the <em>gophertype</em> which signifies HTML (<em>h</em>), if the
<em>selector</em> begins with <em>GET%20/</em> Lynx will convert the gopher
URL to an http URL, e.g.:<BR>
-<tab indent="12"><em>gopher://www.wfbr.edu:80/hGET%20/</em><BR>
+<pre>
+<em>gopher://www.wfbr.edu:80/hGET%20/</em>
+</pre>
will become:<BR>
-<tab indent="12"><em>http://www.wfbr.edu/</em><BR>
+<pre>
+<em>http://www.wfbr.edu/</em>
+</pre>
The port field will be retained if it is not <em>:80</em>, and will default
to <em>:70</em> if it was defaulted originally. These conventions were
adopted during development of the University of Minnesota gopher software
@@ -166,23 +177,27 @@ and UMN Gopherisms.
The file URL is used to retrieve files or generate a directory listing
on the local host. The host field can be <em>localhost</em> or a domain
name for the local host:<BR>
-<tab indent="12"><em>file://localhost/path</em><BR>
+<pre>
+<em>file://localhost/path</em>
+</pre>
If you do not use <em>localhost</em> or a domain name for the local host,
Lynx will substitute <em>ftp://</em> for <em>file://</em> and treat it
as an ftp URL.
<p>The <em>/path</em> is treated as originating at the root, unless
-you include a tilde (<em>~</em>), e.g.:<BR>
-<tab indent="12"><em>file://localhost/~/foo</em>
-<tab indent="60">will be converted to:<BR>
-<tab indent="12"><em>file://localhost/your/login/directory/foo</em><BR>
+you include a tilde (<em>~</em>), e.g.:
+<pre>
+ <em>file://localhost/~/foo</em> will be converted to:
+ <em>file://localhost/your/login/directory/foo</em>
+</pre>
The latter feature is a Lynxism, is done homologously on Unix and VMS,
and should be used ONLY in local documents intended for Lynx.
<p>On VMS, the first element of the path, if not a tilde, is assumed to
-be a device, e.g.:<BR>
-<tab indent="12"
-><em>file://localhost/www_root/directory/filename.suffix</em><BR>
+be a device, e.g.:
+<pre>
+ <em>file://localhost/www_root/directory/filename.suffix</em>
+</pre>
should be used for: <em>www_root:[directory]filename.suffix</em><BR>
If you are unsure how to specify a file URL in local documents on
VMS, invoke Lynx with the desired file or directory as the
@@ -193,19 +208,26 @@ URL which Lynx created for it.
<H2><a name="ftp">The <em>ftp</em> URL:</a></H2>
-The ftp URL has the general format:<BR>
-<tab indent="12"
-><em>ftp://username:password@host:port/path;type=[D,I, or A]</em><BR>
+The ftp URL has the general format:
+<pre>
+ <em>ftp://host:port/path;type=[D,I, or A]</em>
+ <em>ftp://username@host:port/path;type=[D,I, or A]</em>
+</pre>
<p>The default port is <em>:21</em> and the default <em>username</em>
-is <em>anonymous</em>. If <em>username</em> is included but not
-<em>:password</em>, Lynx will prompt you for the password. This is
-recommended, as otherwise the URL will have it completely unencrypted.
-Do not include the <em>@</em> if neither <em>username</em> nor
-<em>:password</em> is included. For anonymous ftp, Lynx uses your
-<em>personal_mail_address</em> (user@host) as the <em>:password</em>
+is <em>anonymous</em>. If <em>username</em> is included,
+Lynx will prompt you for the password. For anonymous ftp, Lynx uses your
+<em>personal_mail_address</em> (user@host) as the <em>password</em>
if it has been defined via the '<em>o</em>'ptions menu. Otherwise,
Lynx uses the dummy password <em>WWWUser</em>.
+(A password can also be embedded in the URL, by replacing
+<em>username</em> with <em>username:password</em>. This is strongly
+discouraged for 'real' passwords that must be kept secret, since URLs
+with the completely unencrypted <em>password</em> may show up on the
+screen, in HISTORY and LIST pages etc., and may even become visible to
+remote sites for example through Referer headers.)
+Do not include the <em>@</em> if neither <em>username</em> nor
+<em>:password</em> is included.
<p>The <em>;type=</em> parameter can be used with value <em>D</em>,
<em>I</em>, or <em>A</em> to force handling of the URL as, respectively,
@@ -221,12 +243,16 @@ string if present is treated as in or under the login directory. For
VMS ftp servers, if you wish to have the first element treated as a
device rather than file or subdirectory name, begin it with a hex-escaped
slash (<em>%2f</em>), e.g.:<BR>
-<tab indent="12"><em>ftp://user@myhost/%2fsys$common/syshlp</em><BR>
+<pre>
+<em>ftp://user@myhost/%2fsys$common/syshlp</em>
+</pre>
can be used for a listing of sys$common:[syshlp]<BR>
Also, on VM/CMS ftp servers, if the <em>path</em> string begins
with <em>vmsysu%3a</em> it receives special handling as an SFS
-path, e.g.:<BR>
-<tab indent="12"><em>ftp://ubvm.cc.buffalo.edu/vmsysu%3alistserv.webshare</em>
+path, e.g.:
+<pre>
+ <em>ftp://ubvm.cc.buffalo.edu/vmsysu%3alistserv.webshare</em>
+</pre>
<p>For Unix and Unix-emulation ftp servers, RFC1738 is not respected
and the lead slash is treated as the root, i.e., the <em>/path</em> is
@@ -235,17 +261,21 @@ irrelevant for anonymous ftp, but matters when using ftp for
non-anonymous accounts. If you are using ftp with a Unix server and
do wish to get a listing of the login directory or have the <em>path</em>
string treated as a file or path under the login directory, include a
-tilde (<em>~</em>) as for <a href="#file">file</a> URLs, e.g.:<BR>
-<tab indent="12"><em>ftp://user@myhost/~</em>
+tilde (<em>~</em>) as for <a href="#file">file</a> URLs, e.g.:
+<pre>
+ <em>ftp://user@myhost/~</em>
+</pre>
<HR>
<H2><a name="wais">The <em>wais</em> URL:</a></H2>
The wais URL is used to retrieve resources using the Wide Area Information
-System protocol. The format is:<BR>
-<tab indent="12"><em>wais://host:port/database</em><BR>
-<tab indent="12"><em>wais://host:port/database?wais_query</em><BR>
-<tab indent="12"><em>wais://host:port/database/wais_type/wais_path</em><BR>
+System protocol. The format is:
+<pre>
+ <em>wais://host:port/database</em>
+ <em>wais://host:port/database?wais_query</em>
+ <em>wais://host:port/database/wais_type/wais_path</em>
+</pre>
where <em>:port</em> defaults to <em>:210</em>
<p>Direct wais support is built into Lynx for VMS, and can be compiled
@@ -270,20 +300,19 @@ server pointed to by the NNTPSERVER environment variable or configuration
symbol (see lynx.cfg), with default port <em>:119</em>. A host field must
be included in nntp URLs, and the port field is optional with the same
default. Patches for support of snews URLs are available to qualified
-recipients via <a href="http://www.crl.com/~subir/lynx.html">Lynx links</a>
+recipients via <a href="http://www.trill-home.com/lynx.html">Lynx links</a>
but cannot be included in the general distribution (sorry, see <a
href="#http">http and https</a>).
<p>The formats are:<BR>
-<tab indent="12"><em>news:newsgroup</em> <tab
-id="ng">(retrieves list of messages in newsgroup)<BR>
-<tab indent="12"><em>news:messageID</em> <tab
-to="ng">(retrieves the message)<BR>
-<tab indent="12"><em>news:*</em> <tab
-to="ng">(retrieves list of all available newsgroups)<BR>
-<tab indent="12"><em>nntp://host:port/newsgroup</em><BR>
-<tab indent="12"><em>nntp://host:port/messageID</em><BR>
-<tab indent="12"><em>nntp://host:port/*</em><BR>
+<pre>
+ <em>news:newsgroup</em> (retrieves list of messages in newsgroup)
+ <em>news:messageID</em> (retrieves the message)
+ <em>news:*</em> (retrieves list of all available newsgroups)
+ <em>nntp://host:port/newsgroup</em>
+ <em>nntp://host:port/messageID</em>
+ <em>nntp://host:port/*</em>
+</pre>
(snews same as nntp, but the default port is <em>:563</em>)
<p>The <em>messageID</em> is the message's unique identifier, consisting
@@ -291,9 +320,11 @@ of an identification string and the host of origin for the message
(<em>ident_string@origin_host</em>).
<p>Lynx also supports wildcarding via an asterisk for listings of news
-hierarchies or sub-hierarchies, e.g.:<BR>
-<tab indent="12"><em>news:comp.infosystems.*</em><BR>
-<tab indent="12"><em>nntp://host:port/comp.infosystems.*</em><BR>
+hierarchies or sub-hierarchies, e.g.:
+<pre>
+ <em>news:comp.infosystems.*</em>
+ <em>nntp://host:port/comp.infosystems.*</em>
+</pre>
(snews same as nntp, but the default port is <em>:563</em>)<BR>
This is not in RFC1738 and may not be supported by all other clients.
@@ -306,12 +337,12 @@ snewspost, snewsreply</a>).
with a supported scheme into a link for accessing that URL.
<p>Lynx also supports the newsgroup and message number URL scheme:<BR>
-<tab indent="12"><em>news:newsgroup/startNo-endNo</em> <tab
-id="ngno">(lists message range in newsgroup)<BR>
-<tab indent="12"><em>news:newsgroup/messageNo</em> <tab
-to="ngno">(retrieves the message by number)<BR>
-<tab indent="12"><em>nntp://host:port/newsgroup/startNo-endNo</em><BR>
-<tab indent="12"><em>nntp://host:port/newsgroup/messageNo</em><BR>
+<pre>
+ <em>news:newsgroup/startNo-endNo</em> (lists message range in newsgroup)
+ <em>news:newsgroup/messageNo</em> (retrieves the message by number)
+ <em>nntp://host:port/newsgroup/startNo-endNo</em>
+ <em>nntp://host:port/newsgroup/messageNo</em>
+</pre>
(snews same as nntp, but the default port is <em>:563</em>)<BR>
Use of this scheme is not recommended, because the message numbers
are specific to each nntp server, unlike the unique identifiers for
@@ -336,22 +367,22 @@ with SSL capable nntp servers, but the latter requires patches for built
in SSL support, or use of a daemon which handles the secure communications
on behalf of Lynx.
-<p>The formats are:<BR>
-<tab indent="12"><em>newspost://host:port/newsgroup(s)</em>&nbsp;&nbsp;<tab
-id="ngp">(post a new message)<BR>
-<tab indent="12"><em>newsreply://host:port/newsgroup(s)</em> <tab
-to="ngp">(post a followup message)<BR>
+<p>The formats are:
+<pre>
+ <em>newspost://host:port/newsgroup(s)</em>&nbsp;&nbsp;(post a new message)
+ <em>newsreply://host:port/newsgroup(s)</em> (post a followup message)
+</pre>
(snewspost and snewsreply have the same formats, but the default port is
<em>:563</em>)
<p>If the host field is omitted, it defaults to that pointed to by the
NNTPSERVER configuration or environmental variable. Inclusion of at
least one newsgroup in the URL is required, and additional groups can
-be specified as a comma-separated list. Wildcarding of newgroup names
+be specified as a comma-separated list. Wildcarding of newsgroup names
is not supported for these URLs. For newsreply and snewsreply URLs, if
an external editor has been defined via the <em>Options Menu</em>, the
user is offered an option to include the currently displayed document,
-which presumeably is a news article with a <em>followup</em> link that
+which presumably is a news article with a <em>followup</em> link that
was activated, and if confirmed, each line of that document is prefixed
with a right-angle-bracket. The user is expected to edit such an inclusion
so that only the passages relevant to the followup message are retained.
@@ -368,8 +399,10 @@ are supported only by Lynx.
The mailto URL is used to provide links that when activated can be
used to send a comment or the content of a FORM to an Internet email
-address (user@host). The format is:<BR>
-<tab indent="12"><em>mailto:user@host</em>
+address (user@host). The format is:
+<pre>
+ <em>mailto:user@host</em>
+</pre>
<p>The description of the mailto URL in RFC1738 has been interpreted by
some as allowing only a single recipient, but Lynx invented the mailto URL,
@@ -383,18 +416,18 @@ at the <em>?</em>, and uses the value as the default Subject: for
the message or FORM content mailing. This is not recommended practice.
The preferred way to indicate the default Subject: for a LINK or Anchor
with a mailto HREF, or a FORM with a mailto ACTION, is via a TITLE
-attribute with the subject string as its value, e.g.:<BR>
-<tab indent="12"><em>&lt;LINK <tab id="rev">REV="made"<BR>
-<tab to="rev">HREF="mailto:me@myhost,her@herhost" TITLE="The Subject"&gt;</em>
+attribute with the subject string as its value, e.g.:
+<pre>
+ <em>&lt;LINK REV="made"
+ HREF="mailto:me@myhost,her@herhost" TITLE="The Subject"&gt;</em>
-<p><tab indent="12"><em>&lt;A
-HREF="mailto:user@host" TITLE="The Subject"&gt;...&lt;/A&gt;</em>
+ <em>&lt;A HREF="mailto:user@host" TITLE="The Subject"&gt;...&lt;/A&gt;</em>
-<p><tab indent="12"><em>&lt;FORM <tab id="met">METHOD="post"
-ENCTYPE="text/plain"<BR>
-<tab to="met">ACTION="mailto:WebMaster@host" TITLE="The Subject"&gt;<BR>
-<tab indent="14">...<BR>
-<tab indent="12">&lt;/FORM&gt;</em>
+ <em>&lt;FORM METHOD="post" ENCTYPE="text/plain"
+ ACTION="mailto:WebMaster@host" TITLE="The Subject"&gt;
+ ...
+ &lt;/FORM&gt;</em>
+</pre>
<p>Note that a TITLE attribute for FORM is now included in the HTML
specifications. Some clients use a SUBJECT attribute for this purpose
@@ -425,14 +458,14 @@ normally would lead to a new scheme being used (e.g., <em>mail:</em>, or
ACTION, Lynx will not hex escape the name=value pairs of the FORM's content,
and will use physical newlines instead of '<em>&amp;</em>' or '<em>;</em>'
to separate the pairs, so that the content will be readable directly.
-Otherwise, Lynx will mail the content with the default:<BR>
-<tab indent="12"
-><em>ENCTYPE="application/x-www-form-urlencoded"</em> <tab id="enc">('<em
->&amp;</em>' separates pairs)<BR>
-or:<BR>
-<tab indent="12"
-><em>ENCTYPE="application/sgml-form-urlencoded"</em> <tab to="enc">('<em
->;</em>' separates pairs)<BR>
+Otherwise, Lynx will mail the content with the default:
+<pre>
+ <em>ENCTYPE="application/x-www-form-urlencoded"</em> ('<em >&amp;</em>' separates pairs)
+</pre>
+or:
+<pre>
+ <em>ENCTYPE="application/sgml-form-urlencoded"</em> ('<em >;</em>' separates pairs)
+</pre>
if the latter was indicated.
<p>Note that when mailing FORM content Lynx wraps any lines longer than 78
@@ -489,11 +522,15 @@ creation of links for any strings which appear to be supported URLs.
The cso URL is intended to provide a gateway to CSO/PH (QI) servers.
The requests are made on port 105 by default (<em>:105</em>), with the
following overt cso URL format:<BR>
-<tab indent="12"><em>cso://host</em><BR>
+<pre>
+<em>cso://host</em>
+</pre>
<p>You also can use a gopher URL format with port 105 and the CSO
-(<em>2</em>) <em>gophertype</em> specified:<BR>
-<tab indent="12"><em>gopher://host:105/2</em>
+(<em>2</em>) <em>gophertype</em> specified:
+<pre>
+ <em>gopher://host:105/2</em>
+</pre>
<p>Lynx will parse the stream returned by the server for the above
URLs and create a FORM for submitting additional requests (searches)
@@ -502,18 +539,27 @@ to the server. Any strings in the reports returned for these requests
converted into a link for accessing that URL.
<HR>
+<H2><a name="bibp">The <em>bibp</em> URL:</a></H2>
+
+<p>Lynx provides built-in support for bibliographic protocol (BibP).
+BibP links are links to published works such as books or journal articles,
+without a predefined server. BibP links are intended for resolution
+by a local bibhost server (http://bibhost/) if it exists. Otherwise,
+resolution is performed by a document-specified server or a known global
+server.
+
<H2><a name="exec">The <em>lynxexec</em> and <em>lynxprog</em> URLs:</a></H2>
If execution of spawned commands has been enabled in your Lynx image, the
lynxexec and lynxprog URLs can be used to execute arbitrary system commands
or invoke system utilities. Any system command and associated switches
or qualifiers can be used, with the syntax appropriate for a shell running
-Lynx on Unix, or for DCL on VMS, e.g.:<BR>
-<tab indent="12"><em>lynxexec:dir/date/size foo:[blah]</em> <tab
-id="listing">(VMS)<BR>
-<tab indent="12"><em>lynxexec:ls -l /foo/blah</em> <tab
-to="listing">(Unix)<BR>
-<tab indent="12"><em>lynxprog:news</em><BR>
+Lynx on Unix, or for DCL on VMS, e.g.:
+<pre>
+ <em>lynxexec:dir/date/size foo:[blah]</em> (VMS)
+ <em>lynxexec:ls -l /foo/blah</em> (Unix)
+ <em>lynxprog:news</em>
+</pre>
(Note, however, that restrictions on acceptable commands or utilities
may be imposed by the system administrator.)
@@ -532,13 +578,17 @@ solely for Lynx.
<H2><a name="cgi">The <em>lynxcgi</em> URL:</a></H2>
The lynxcgi URL is implemented only on Unix, can be used as the
-ACTION for a FORM, and if enabled in your Lynx image has the format:<BR>
-<tab indent="12"><em>ly<tab id="lh">
-nxcgi://localhost/path_to_CGI_script</em><BR>
-<tab to="lh">where <em>//localhost/</em> is optional and always implied.
-The output of the script should be text/html and is rendered and displayed
-by Lynx. (Note that restrictions on acceptable paths can be imposed
-by the system administrator.)
+ACTION for a FORM, and if enabled in your Lynx image has the format:
+<pre>
+ <em>lynxcgi://localhost/path_to_CGI_script</em>
+</pre>
+where <em>//localhost</em> is optional and always implied;
+the full path should be specified, as `~' is not recognized;
+if the script is in the directory Lynx was started from,
+the simple file name is adequate. The output of the script
+should be text/html and is rendered and displayed by Lynx.
+Restrictions on use of lynxcgi and on acceptable paths can be imposed
+in <em>userdefs.h</em> and <em>lynx.cfg</em>, qv.
<p>This is a Lynxism and should be used only in local documents intended
solely for Lynx, or for limited local testing of CGI scripts without an
@@ -554,20 +604,42 @@ within Lynx.
<H2><a name="internal">The <em>LYNXfoo</em> internal URLs:</a></H2>
-Lynx uses a variety of internal URL schemes as structured stream
-objects for communication among its display modules. If you discover
-what they are, and are tempted to use them externally in documents,
-find the self-restraint to <em>resist</em> that temptation!!!
-
-<p>For example, tempting though it might be, do <em>not</em> use these:<BR>
-<tab indent="12"
-><em>Return to your &lt;A HREF="LYNXHIST:0"&gt;Startfile&lt;/A&gt;</em><BR>
-<tab indent="12"
-><em>Review your &lt;A HREF="LYNXKEYMAP:"&gt;Keymap&lt;/A&gt;</em><BR>
-(Yes, they'll work. No, they won't do any harm. But...)
+Lynx uses a variety of private URL schemes for communication among its
+internal modules. They start with uppercase letters <code>LYNX</code>
+by convention, although, as input, URL schemes are recognized in a
+case-insensitive manner.
+<p>
+As you discover what they are, and are tempted to use them externally in
+documents, you should <em>resist</em> that temptation:
+<UL><LI>There already is too much browser-specific markup around...
+<LI>The schemes, or their meanings, may change between Lynx versions.
+<LI>Even if a scheme stays the same, some aspect of its behavior may
+ be modified without notice, or the context in which it is allowed
+ may change.
+<LI>If it doesn't work as expected when used outside of the intended
+ purpose, don't expect anyone to "fix" it.
+</UL>
+
+<p>For example, tempting though it might be, do not use these:
+<pre>
+ <em>Return to your &lt;A HREF="LYNXHIST:0"&gt;Startfile&lt;/A&gt;</em>
+ <em>Review your &lt;A HREF="LYNXKEYMAP:"&gt;Keymap&lt;/A&gt;</em>
+</pre>
+(No, they won't do any harm. Yes, they work. But don't rely on it.)
-<p>If you <em>must</em> try one, the second is OK from the command line:<BR>
-<tab indent="12"><em>lynx LYNXKEYMAP:</em><BR>
+<p>If you must try one, the second is OK from the command line:<BR>
+<pre>
+ <em>lynx LYNXKEYMAP:</em>
+</pre>
But within Lynx, use the '<em>K</em>' keystroke command.
+Sometimes it may be convenient to use a private scheme with
+'<em>g</em>'oto, as in:
+<pre>
+ <em>g LYNXMESSAGES:</em>
+ <em>g LYNXCOMPILEOPTS:</em>
+ <em>g LYNXCFG:</em>
+</pre>
+But again, there usually is a way in which those special pages are
+meant to be reached that is more convenient.
</BODY>
</HTML>
diff --git a/gnu/usr.bin/lynx/makefile.in b/gnu/usr.bin/lynx/makefile.in
index 9a62e8febd6..7d18f3de8ec 100644
--- a/gnu/usr.bin/lynx/makefile.in
+++ b/gnu/usr.bin/lynx/makefile.in
@@ -1,6 +1,7 @@
##makefile for lynx
SHELL = @CONFIG_SHELL@
+CDPATH = .
x = @PROG_EXT@
@@ -23,19 +24,20 @@ LIBS = @LIBS@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
+LN_S = @LN_S@
## This is the version which we are developing (or, upon release, make this
## the same). Use no dots in the name, since it must work on VMS and MS-DOS.
-VERSION = 2-8-2
+VERSION = 2-8-4
##this is the name of the directory the lynx source code is in.
-##(e.g., lynx2-8-2, not the full path)
+##(e.g., lynx2-8-4, not the full path)
lynxdir= lynx$(VERSION)
lynxname= lynx$(VERSION)
## The 'DESTDIR' variable allows you to install the program into a different
## location, e.g., for packaging, without affecting the compiled-in pathnames.
-DESTDIR=
+DESTDIR= @DESTDIR@
## Where you want lynx installed
bindir= @bindir@
@@ -94,7 +96,7 @@ COMPRESS_EXT=@COMPRESS_EXT@
# !!!!!!!!!!!!! NCURSES Support (For color version of Lynx). !!!!!!!!!!!!!!
# If you need ncurses, the latest version can always be found
-# in ftp://ftp.clark.net/pub/dickey/ncurses/
+# in ftp://invisible-island.net/ncurses/
# or ftp://ftp.gnu.org/pub/gnu/
# Also be sure to check out the compilation symbols in userdefs.h
@@ -113,11 +115,11 @@ SITE_DEFS = # Your defines here
# defines for which there are no configure options:
# -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)
# -DNO_RULES Disables CERN-style access rules (see lynx.cfg).
# -DSHORTENED_RBIND For a SOCKSified lynx with the short version of Rbind.
# -DSLANG_MBCS_HACK prevent cutoff lines when using UTF8 console (slang only)
+# -DUSE_SCROLLBAR supports scrollbar when built with ncurses
#
# if you are linking to freeWAIS-0.202 or older, you should define this
# in SITE_DEFS
@@ -148,7 +150,6 @@ SITE_DEFS = # Your defines here
# -DEXEC_SCRIPTS
# -DEXP_CHARTRANS_AUTOSWITCH
# -DEXP_PERSISTENT_COOKIES
-# -DLINKEDSTYLES
# -DLONG_LIST
# -DLYNXCGI_LINKS
# -DLY_FIND_LEAKS
@@ -171,7 +172,6 @@ SITE_DEFS = # Your defines here
# -DUSE_COLOR_STYLE
# -DUSE_DEFAULT_COLORS
# -DUSE_EXTERNALS
-# -DUSE_HASH
# -DUSE_SLANG
# -DUSE_SOCKS5
# -DUSE_ZLIB
@@ -228,6 +228,8 @@ clean:
@INTLDIR_MAKE@ cd intl && $(MAKE) $@
@MSG_DIR_MAKE@ cd po && $(MAKE) $@
rm -f *.b src/lynx$x *.leaks cfg_defs.h LYHelp.h lint.*
+@LYNXCFG_MAKE@ -rm -f alphatoc.html body.html cattoc.html tmp007
+ rm -f help_files.sed
rm -f core *.core
depend: cfg_defs.h LYHelp.h
@@ -241,10 +243,11 @@ distclean: clean
-cd src && $(MAKE) $@
-cd src/chrtrans && $(MAKE) $@
@INTLDIR_MAKE@ cd intl && $(MAKE) $@
+ -rm -f intl/libintl.h
@MSG_DIR_MAKE@ -rmdir intl
@MSG_DIR_MAKE@ cd po && $(MAKE) $@
@MSG_DIR_MAKE@ -rmdir po
- -rm -f *~ *.bak *.sav
+ -rm -f *~ *.bak *.sav tags TAGS
-rm -f $(WWWINC)/makefile src/makefile src/chrtrans/makefile
@SRCDIR_CLEAN@ -rmdir $(WWWINC) && rmdir WWW/Library && rmdir WWW
@SRCDIR_CLEAN@ -rmdir src/chrtrans && rmdir src
@@ -285,7 +288,7 @@ compress: tar
REFDIR=orig/$(lynxdir)
lynx.patch: $(top_srcdir) $(top_srcdir)/CHANGES
- cd $(top_srcdir)/.. && cd $(REFDIR) && { rm -f \
+ - cd $(top_srcdir)/.. && cd $(REFDIR) && { rm -f \
config.log \
config.status \
lynx_cfg.h \
@@ -294,12 +297,14 @@ lynx.patch: $(top_srcdir) $(top_srcdir)/CHANGES
( set -x; cd $$I && rm -f *.orig *.rej makefile ); : ); \
done; }
( cd $(top_srcdir)/..; echo "%%% Created `date` by target $@. %%%"; \
- diff -brc $(REFDIR) $(lynxdir) ) \
+ if diff -bru /dev/null /dev/null; \
+ then diff -bru $(REFDIR) $(lynxdir); \
+ else diff -brc $(REFDIR) $(lynxdir); fi ) \
| grep -v '^Common' \
| grep -v '^Binary files ' \
- | grep -v '^Only ' | tee $@ | grep '^--- $(lynxdir)'
+ | grep -v '^Only ' | tee $@ | egrep '^\-\-\- .*$(lynxdir)'
-install: lynx$x install-bin install-man install-cfg @INSTALL_LSS@
+install: install-bin install-man install-cfg @INSTALL_LSS@
@echo
@echo "Use $(MAKE) install-help to install the help-files"
@echo "Use $(MAKE) install-doc to install extra documentation files"
@@ -308,7 +313,7 @@ install: lynx$x install-bin install-man install-cfg @INSTALL_LSS@
install-full: install install-help install-doc
@echo Full installation complete.
-install-bin: $(BINDIR)
+install-bin: $(BINDIR) lynx$x
@MSG_DIR_MAKE@ cd po && $(MAKE) CC="$(CC)" install
-mv -f $(BINDIR)/lynx$x $(BINDIR)/lynx.old
$(INSTALL_PROGRAM) lynx$x $(BINDIR)/lynx$x
@@ -316,34 +321,58 @@ install-bin: $(BINDIR)
install-man : $(MANDIR)
$(INSTALL_DATA) $(srcdir)/lynx.man $(MANDIR)/lynx.1
-install-doc : $(DOCDIR)
+install-doc : $(DOCDIR) $(HELPDIR)
@echo Copying sample files
(cd $(srcdir) && tar cf - C[HO]* PROBLEMS README samples test ) | \
- ( cd $(DOCDIR) && tar xf - )
+ ( cd $(DOCDIR) && chmod -R u+w . && tar xf - )
+ $(SHELL) -c 'for name in COPYING COPYHEADER; do \
+ cd $(HELPDIR) && rm -f $$name ;\
+ cd $(HELPDIR) && ( $(LN_S) $(DOCDIR)/$$name . || cp $(DOCDIR)/$$name . );\
+ done'
# HPUX 'sed' does not seem to like '=' as pattern delimiter.
-FIX_SED = tr '=' '%'
-#FIX_SED = cat
-
-install-help : $(DOCDIR) $(HELPDIR)
- (cd $(HELPDIR) && rm -rf *)
- @echo Constructing sed-script
+# We cannot use '%' because it may appear in a URL.
+# Andrew filesystem uses '@'.
+# So we limit sed delimiters to '!' and '%', depending on the expected text.
+FIX_SED = tr '=' '"'
+
+help_files.sed : makefile $(srcdir)/lynx_help/help_files.txt
+ @echo Constructing sed-script $@
+ @-rm -f $@ help_files.tmp
+ @cat $(srcdir)/lynx_help/help_files.txt > help_files.tmp
+@LYNXCFG_MAKE@ @echo 's!http://www.hippo.ru/%7Ehvv/lynxcfg_toc.html#alphatoc!alphatoc.html!g' >> help_files.tmp
+@LYNXCFG_MAKE@ @echo 's!http://www.hippo.ru/%7Ehvv/lynxcfg_toc.html!cattoc.html!g' >> help_files.tmp
+@LYNXCFG_MAKE@ @echo 's!alphatoc\.html!alphatoc.html$(COMPRESS_EXT)!g' >> help_files.tmp
+@LYNXCFG_MAKE@ @echo 's!cattoc\.html!cattoc.html$(COMPRESS_EXT)!g' >> help_files.tmp
+@LYNXCFG_MAKE@ @echo 's!body\.html!body.html$(COMPRESS_EXT)!g' >> help_files.tmp
@ECHO_CC@sed -e '/^#/d' -e '/^$$/d' \
-e 's%\(.*\)=\(.*\@.*\)$$%s=@\1@=\2=g%' \
-e 's%\(.*\)=\(http:.*\)$$%s=@\1@=\2=g%' \
-e 's%\(.*\)=\(ftp:.*\)$$%s=@\1@=\2=g%' \
-e 's%\(.*\)=\(.*\.html\)$$%s=@\1@=\2$(COMPRESS_EXT)=g%' \
- $(srcdir)/lynx_help/help_files.txt | $(FIX_SED) > \
- $(HELPDIR)/help_files.sed
- @echo Appending interim-fix for existing html files
+ help_files.tmp | $(FIX_SED) > $@
+ @echo Appending interim-fix for existing html files to $@
@ECHO_CC@sed -e '/^#/d' -e '/[:@]/d' -e '/^$$/d' \
-e 's%\(.*\)=\(.*\.html\)$$%s=\2=\2$(COMPRESS_EXT)=g%' \
-e 's%\.html=%\\.html=%' \
- $(srcdir)/lynx_help/help_files.txt | $(FIX_SED) >> \
- $(HELPDIR)/help_files.sed
- @ECHO_CC@if test -n "$(COMPRESS_EXT)"; then echo 's%\$(COMPRESS_EXT)\$(COMPRESS_EXT)%$(COMPRESS_EXT)%g' >> \
- $(HELPDIR)/help_files.sed; fi
+ help_files.tmp | $(FIX_SED) >> $@
+ @ECHO_CC@if test -n "$(COMPRESS_EXT)"; then echo 's%\$(COMPRESS_EXT)\$(COMPRESS_EXT)%$(COMPRESS_EXT)%g' >> $@; fi
+ @-rm -f help_files.tmp
+
+install-help : help_files.sed $(HELPDIR)
+ (cd $(HELPDIR) && WD=`pwd` && HEAD=`echo $$WD|sed -e 's!/lynx_help$$!!'` && test $$WD != $$HEAD && rm -rf *)
+@LYNXCFG_MAKE@ @echo 'Making htmlized lynx.cfg'
+@LYNXCFG_MAKE@ cd src && make LYReadCFG.i
+@LYNXCFG_MAKE@ @-rm -f alphatoc.html body.html cattoc.html
+@LYNXCFG_MAKE@ sed -n -e '/Config_Type *Config_Table/,/{0, *0, *0}/ p' src/LYReadCFG.i | \
+@LYNXCFG_MAKE@ sed -e 's/ *{ *"\([^"]*\)".*/\1/' | \
+@LYNXCFG_MAKE@ perl $(srcdir)/scripts/cfg2html.pl -ms $(srcdir)/lynx.cfg
@echo Translating/copying html files
+ @cat help_files.sed > $(HELPDIR)/help_files.sed
+@LYNXCFG_MAKE@ @$(SHELL) -c 'for f in alphatoc.html body.html cattoc.html ; do \
+@LYNXCFG_MAKE@ sed -f $(HELPDIR)/help_files.sed $$f > $(HELPDIR)/$$f ; \
+@LYNXCFG_MAKE@ done'
+@LYNXCFG_MAKE@ -rm -f src/LYReadCFG.i
@ECHO_CC@$(SHELL) -c 'cd $(srcdir)/lynx_help && ( \
dirs=keystrokes; \
(cd $(HELPDIR) && mkdir $$dirs 2>/dev/null ) ; \
@@ -355,7 +384,7 @@ install-help : $(DOCDIR) $(HELPDIR)
(cd $(HELPDIR) && $(COMPRESS_PROG) $$files ) \
fi ; \
)'
- -rm -f $(HELPDIR)/help_files.sed
+ @-rm -f $(HELPDIR)/help_files.sed
@echo Updating $(libdir)/lynx.cfg
$(SHELL) -c 'if test -f $(LIBDIR)/lynx.cfg ; then \
mv $(LIBDIR)/lynx.cfg $(LIBDIR)/lynx.tmp ; \
@@ -363,33 +392,19 @@ install-help : $(DOCDIR) $(HELPDIR)
cp $(srcdir)/lynx.cfg $(LIBDIR)/lynx.tmp ; \
fi'
@echo Updating $(libdir)/lynx.cfg to point to installed help-files
- @ECHO_CC@sed -e '/^HELPFILE:http/s@^@#@' \
- -e '/^#HELPFILE:file/s@#@@' \
- -e '/^HELPFILE:file/s@/PATH_TO/lynx_help@$(helpdir)@' \
- -e '/^[A-Z_]*:/s@/PATH_TO/lynx_doc@$(docdir)@' \
- -e '/^HELPFILE:file/s@$$@$(COMPRESS_EXT)@' \
- -e '/^HELPFILE:file/s@$(COMPRESS_EXT)$(COMPRESS_EXT)$$@$(COMPRESS_EXT)@' \
+ @ECHO_CC@sed -e '/^HELPFILE:http/s!^!#!' \
+ -e '/^#HELPFILE:file/s!#!!' \
+ -e '/^HELPFILE:file/s!/PATH_TO/lynx_help!$(helpdir)!' \
+ -e '/^[A-Z_]*:/s!/PATH_TO/lynx_doc!$(docdir)!' \
+ -e '/^HELPFILE:file/s!$$!$(COMPRESS_EXT)!' \
+ -e '/^HELPFILE:file/s!$(COMPRESS_EXT)$(COMPRESS_EXT)$$!$(COMPRESS_EXT)!' \
$(LIBDIR)/lynx.tmp >$(LIBDIR)/lynx.cfg
chmod 644 $(LIBDIR)/lynx.cfg
-rm -f $(LIBDIR)/lynx.tmp
- $(INSTALL_DATA) $(srcdir)/COPYHEADER $(DOCDIR)/COPYHEADER
- $(INSTALL_DATA) $(srcdir)/COPYING $(DOCDIR)/COPYING
- cd $(HELPDIR) && ( \
- ln $(DOCDIR)/COPYHEADER . || cp $(DOCDIR)/COPYHEADER . ; \
- ln $(DOCDIR)/COPYING . || cp $(DOCDIR)/COPYING . )
-
-LYHelp.h : LYHelp.hin
- @echo Constructing sed-script
- @ECHO_CC@sed -e '/^#/d' -e '/^$$/d' \
- -e 's%\(.*\)=\(.*\@.*\)$$%s=@\1@=\2=g%' \
- -e 's%\(.*\)=\(http:.*\)$$%s=@\1@=\2=g%' \
- -e 's%\(.*\)=\(ftp:.*\)$$%s=@\1@=\2=g%' \
- -e 's%\(.*\)=\(.*\.html\)$$%s=@\1@=\2$(COMPRESS_EXT)=g%' \
- $(srcdir)/lynx_help/help_files.txt | $(FIX_SED) > \
- help_files.sed
+
+LYHelp.h : help_files.sed LYHelp.hin
@echo Creating $@
@sed -f help_files.sed $(srcdir)/LYHelp.hin > $@
- -@rm -f help_files.sed
@echo '**********************************************'
@echo
@$(SHELL) -c 'if test "$(COMPRESS_PROG)" = "" ; then \
@@ -402,9 +417,9 @@ LYHelp.h : LYHelp.hin
@echo
@echo '**********************************************'
-cfg_defs.h : $(srcdir)/cfg_defs.sh lynx_cfg.h
+cfg_defs.h : $(srcdir)/cfg_defs.sh $(srcdir)/cfg_edit.sh config.cache lynx_cfg.h
@rm -f $@
- PATH=$(srcdir):$$PATH; export PATH; $(SHELL) -c '$(SHELL) $(srcdir)/cfg_defs.sh'
+ $(SHELL) -c '/bin/sh $(srcdir)/cfg_defs.sh $(srcdir)'
install-cfg : $(LIBDIR)
-mv -f $(LIBDIR)/lynx.cfg $(LIBDIR)/lynx.oldcfg
@@ -414,14 +429,23 @@ install-lss : $(LIBDIR)
-mv -f $(LIBDIR)/lynx.lss $(LIBDIR)/lynx.oldlss
$(INSTALL_DATA) $(srcdir)/samples/lynx.lss $(LIBDIR)/lynx.lss
-uninstall:
+uninstall ::
@MSG_DIR_MAKE@ cd po && $(MAKE) CC="$(CC)" uninstall
-rm -f $(BINDIR)/lynx$x
-rm -f $(MANDIR)/lynx.1
-rm -f $(LIBDIR)/lynx.cfg
-rm -f $(LIBDIR)/lynx.lss
- -rm -rf $(HELPDIR)
- -rm -rf $(DOCDIR)
+
+uninstall \
+uninstall-help ::
+ -test -d $(HELPDIR) && WD=`cd $(HELPDIR) && pwd` && HEAD=`echo $$WD|sed -e 's!/lynx_help$$!!'` && test $$WD != $$HEAD && rm -rf $(HELPDIR)
+
+uninstall \
+uninstall-doc ::
+ -test -d $(DOCDIR) && WD=`cd $(DOCDIR) && pwd` && HEAD=`echo $$WD|sed -e 's!/lynx_doc$$!!'` && test $$WD != $$HEAD && rm -rf $(DOCDIR)
+ -test -d $(HELPDIR) && WD=`cd $(HELPDIR) && pwd` && HEAD=`echo $$WD|sed -e 's!/lynx_help$$!!'` && test $$WD != $$HEAD && cd $(HELPDIR) && rm -f COPYING COPYHEADER
$(BINDIR) $(MANDIR) $(LIBDIR) $(HELPDIR) $(DOCDIR) :
$(srcdir)/mkdirs.sh $@
+etags:
+ etags -r "/\(PRIVATE\|PUBLIC\)[ \t]+\([a-zA-Z_][a-zA-Z_0-1]*[ \t*]+\)*\([a-zA-Z_][a-zA-Z_0-1]*\)[ \t]+\(ARGS[0-9]\|NOARGS\)/\3/" *.[ch] */*.[ch] */*/*.[ch] */*/*/*.[ch]
diff --git a/gnu/usr.bin/lynx/mkdirs.sh b/gnu/usr.bin/lynx/mkdirs.sh
index 9a20f82228d..8f0503e0382 100644
--- a/gnu/usr.bin/lynx/mkdirs.sh
+++ b/gnu/usr.bin/lynx/mkdirs.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/sh
# mkinstalldirs --- make directory hierarchy
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
# Created: 1993-05-16
@@ -22,7 +22,10 @@ for file in ${1+"$@"} ; do
if test ! -d "$pathcomp"; then
echo "mkdir $pathcomp" 1>&2
- mkdir "$pathcomp" || errstatus=$?
+ case "$pathcomp" in
+ [a-zA-Z]: ) ;; # DOSISH systems
+ * ) mkdir "$pathcomp" || errstatus=$? ;;
+ esac
fi
pathcomp="$pathcomp/"
diff --git a/gnu/usr.bin/lynx/po/POTFILES.in b/gnu/usr.bin/lynx/po/POTFILES.in
index 30e50b50940..b4d8b975cec 100644
--- a/gnu/usr.bin/lynx/po/POTFILES.in
+++ b/gnu/usr.bin/lynx/po/POTFILES.in
@@ -6,9 +6,7 @@ LYMessages.c
WWW/Library/Implementation/HTAABrow.c
WWW/Library/Implementation/HTAccess.c
WWW/Library/Implementation/HTFTP.c
-WWW/Library/Implementation/HTFile.c
WWW/Library/Implementation/HTFinger.c
-WWW/Library/Implementation/HTGopher.c
WWW/Library/Implementation/HTNews.c
WWW/Library/Implementation/HTTCP.c
WWW/Library/Implementation/HTTP.c
@@ -23,6 +21,7 @@ src/LYCgi.c
src/LYClean.c
src/LYCookie.c
src/LYCurses.c
+src/LYEdit.c
src/LYDownload.c
src/LYHistory.c
src/LYLeaks.c
diff --git a/gnu/usr.bin/lynx/po/cs.po b/gnu/usr.bin/lynx/po/cs.po
new file mode 100644
index 00000000000..dbe5883759a
--- /dev/null
+++ b/gnu/usr.bin/lynx/po/cs.po
@@ -0,0 +1,5496 @@
+# Czech translation of the Lynx.
+# Copyright (C) 1998 Free Software Foundation, Inc.
+# Jiøí Pavlovský <pavlovsk@ff.cuni.cz>, 1999
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lynx 2.8.4\n"
+"POT-Creation-Date: 2001-06-01 18:42-0400\n"
+"PO-Revision-Date: 1999-12-11 12:55+0100\n"
+"Last-Translator: Jiøí Pavlovský <pavlovsk@ff.cuni.cz>\n"
+"Language-Team: Czech <cs@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ******************************************************************
+#. * The following definitions are for status line prompts, messages, or
+#. * warnings issued by Lynx during program execution. You can modify
+#. * them to make them more appropriate for your site. We recommend that
+#. * you extend these definitions to other languages using the gettext
+#. * library. There are also scattered uses of 'gettext()' throughout the
+#. * Lynx source, covering all but those messages which (a) are used for
+#. * debugging (CTRACE) or (b) are constants used in interaction with
+#. * other programs.
+#. *
+#. * Links to collections of alternate definitions, developed by the Lynx
+#. * User Community, are maintained in Lynx links:
+#. *
+#. * http://www.trill-home.com/lynx.html
+#. *
+#. * See ABOUT-NLS and po/readme for details and location of contributed
+#. * translations. When no translation is available, the English default is
+#. * used.
+#.
+#: LYMessages.c:29
+#, c-format
+msgid "Alert!: %s"
+msgstr "Pozor!: %s"
+
+#: LYMessages.c:30
+msgid "Welcome"
+msgstr "Vítejte"
+
+#: LYMessages.c:31 LYMessages.c:32
+msgid "Are you sure you want to quit?"
+msgstr "Opravdu chcete ukonèit program?"
+
+#: LYMessages.c:34 LYMessages.c:35
+msgid "Really exit from Lynx?"
+msgstr "Opravdu chcete ukonèit Lynx?"
+
+#: LYMessages.c:37
+msgid "Connection interrupted."
+msgstr "Spojení bylo pøeru¹eno."
+
+#: LYMessages.c:38
+msgid "Data transfer interrupted."
+msgstr "Pøenos dat byl pøeru¹en."
+
+#: LYMessages.c:39
+msgid "Cancelled!!!"
+msgstr "Zru¹eno!!!"
+
+#: LYMessages.c:40
+msgid "Cancelling!"
+msgstr "Ru¹ím!"
+
+#: LYMessages.c:41
+msgid "Excellent!!!"
+msgstr "Výbornì!!!"
+
+#: LYMessages.c:42
+msgid "OK"
+msgstr "OK"
+
+#: LYMessages.c:43
+msgid "Done!"
+msgstr "Hotovo!"
+
+#: LYMessages.c:44
+msgid "Bad request!"
+msgstr "Chybný po¾adavek!"
+
+#: LYMessages.c:45
+msgid "previous"
+msgstr "pøedchozí"
+
+#: LYMessages.c:46
+msgid "next screen"
+msgstr "následující obrazovka"
+
+#: LYMessages.c:47
+msgid "HELP!"
+msgstr "NÁPOVÌDA!"
+
+#: LYMessages.c:48
+msgid ", help on "
+msgstr ", nápovìda pro "
+
+#. #define HELP
+#: LYMessages.c:50
+msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
+msgstr "Pøíkazy: ¹ipky: pohyb, '?': nápovìda, 'q': ukonèení, '<-': návrat zpìt"
+
+#. #define MOREHELP
+#: LYMessages.c:52
+msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
+msgstr "-- mezerník: dal¹í strana, ¹ipky: pohyb, '?': nápovìda. 'q': ukonèení"
+
+#: LYMessages.c:53
+msgid "-- press space for next page --"
+msgstr "-- mezerníkem zobrazíte dal¹í stranu --"
+
+#: LYMessages.c:54
+msgid "URL too long"
+msgstr "Cesta je pøíli¹ dlouhá."
+
+#. Inactive input fields, messages used with -tna option - kw
+#. #define FORM_LINK_TEXT_MESSAGE_INA
+#: LYMessages.c:60
+msgid "(Text entry field) Inactive. Press <return> to activate."
+msgstr ""
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA
+#: LYMessages.c:62
+msgid "(Textarea) Inactive. Press <return> to activate."
+msgstr ""
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA_E
+#: LYMessages.c:64
+#, c-format
+msgid "(Textarea) Inactive. Press <return> to activate (%s for editor)."
+msgstr "(Textové pole) Zadejte text. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA
+#: LYMessages.c:66
+msgid "(Form field) Inactive. Use <return> to edit."
+msgstr "(Pole formuláøe) Zadejte text. <return> ode¹le ('x' pro 'NO CACHE')."
+
+#. #define FORM_TEXT_SUBMIT_MESSAGE_INA_X
+#: LYMessages.c:68
+#, c-format
+msgid "(Form field) Inactive. Use <return> to edit (%s to submit with no cache)."
+msgstr "(Pole formuláøe) Zadejte text. <return> ode¹le (%s pro 'NO CACHE')."
+
+#. #define FORM_TEXT_RESUBMIT_MESSAGE_INA
+#: LYMessages.c:70
+msgid "(Form field) Inactive. Press <return> to edit, press <return> twice to submit."
+msgstr "(Pole formuláøe) Zadejte text. <return> ode¹le, ¹ipky èi tab pro odchod."
+
+#. #define FORM_TEXT_SUBMIT_MAILTO_MSG_INA
+#: LYMessages.c:72
+msgid "(mailto form field) Inactive. Press <return> to change."
+msgstr "(mailto pole formuláøe) Zadejte text. <return> ode¹le, ¹ipky pro odchod."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE_INA
+#: LYMessages.c:74
+msgid "(Password entry field) Inactive. Press <return> to activate."
+msgstr "(Pole pro zadání hesla) Zadejte text. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_FILE_UNM_MSG
+#: LYMessages.c:77
+msgid "UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off."
+msgstr "NEMODIFIKOVATELNÉ pole pro výbìr souboru. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_FILE_MESSAGE
+#: LYMessages.c:79
+msgid "(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off."
+msgstr "(Pole pro výbìr souboru) Vyberte soubor. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_TEXT_MESSAGE
+#: LYMessages.c:81
+msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Pole pro textový vstup) Zadejte text. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE
+#: LYMessages.c:83
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off."
+msgstr "(Textové pole) Zadejte text. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_E
+#: LYMessages.c:85
+#, c-format
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor)."
+msgstr "(Textové pole) Zadejte text. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_TEXT_UNM_MSG
+#: LYMessages.c:87
+msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
+msgstr "NEMODIFIKOVATELNÉ textové pole formuláøe. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE
+#: LYMessages.c:89
+msgid "(Form field) Enter text. Use <return> to submit."
+msgstr "(Pole formuláøe) Zadejte text. <return> ode¹le ('x' pro 'NO CACHE')."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_X
+#: LYMessages.c:91
+#, c-format
+msgid "(Form field) Enter text. Use <return> to submit (%s for no cache)."
+msgstr "(Pole formuláøe) Zadejte text. <return> ode¹le (%s pro 'NO CACHE')."
+
+#. #define FORM_LINK_TEXT_RESUBMIT_MESSAGE
+#: LYMessages.c:93
+msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
+msgstr "(Pole formuláøe) Zadejte text. <return> ode¹le, ¹ipky èi tab pro odchod."
+
+#. #define FORM_LINK_TEXT_SUBMIT_UNM_MSG
+#: LYMessages.c:95
+msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
+msgstr "NEMODIFIKOVATELNÉ pole formuláøe. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_MSG
+#: LYMessages.c:97
+msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
+msgstr "(mailto pole formuláøe) Zadejte text. <return> ode¹le, ¹ipky pro odchod."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:99
+msgid "(mailto form field) Mail is disallowed so you cannot submit."
+msgstr "('mailto' pole formuláøe) Po¹ta je vypnuta, tudí¾ nemù¾ete nic poslat."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE
+#: LYMessages.c:101
+msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Pole pro zadání hesla) Zadejte text. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_PASSWORD_UNM_MSG
+#: LYMessages.c:103
+msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
+msgstr "NEMODIFIKOVATELNÉ heslo formuláøe. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_CHECKBOX_MESSAGE
+#: LYMessages.c:105
+msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
+msgstr "(Za¹krtávací pole). ©ipka vpravo èi <return> pro pøepnutí."
+
+#. #define FORM_LINK_CHECKBOX_UNM_MSG
+#: LYMessages.c:107
+msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
+msgstr "NEMODIFIKOVATELNÉ za¹krtávací pole. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_RADIO_MESSAGE
+#: LYMessages.c:109
+msgid "(Radio Button) Use right-arrow or <return> to toggle."
+msgstr "(Pøepínací tlaèítko) ©ipka vpravo èi <return> pro pøepnutí."
+
+#. #define FORM_LINK_RADIO_UNM_MSG
+#: LYMessages.c:111
+msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
+msgstr "NEMODIFIKOVATELNÉ pøepínací tlaèítko. ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_SUBMIT_PREFIX
+#: LYMessages.c:113
+msgid "Submit ('x' for no cache) to "
+msgstr "Odeslat ('x' pro 'NO CACHE') na "
+
+#. #define FORM_LINK_RESUBMIT_PREFIX
+#: LYMessages.c:115
+msgid "Submit to "
+msgstr "Odeslat na "
+
+#. #define FORM_LINK_SUBMIT_MESSAGE
+#: LYMessages.c:117
+msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
+msgstr "(Tlaèítko pro odeslání) ©ipka vpravo èi <return> pro odeslání (x pro NO CACHE)"
+
+#. #define FORM_LINK_RESUBMIT_MESSAGE
+#: LYMessages.c:119
+msgid "(Form submit button) Use right-arrow or <return> to submit."
+msgstr "(Tlaèítko pro odeslání) ©ipka vpravo èi <return> pro odeslání"
+
+#. #define FORM_LINK_SUBMIT_DIS_MSG
+#: LYMessages.c:121
+msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
+msgstr "(VYPNUTÉ tlaèítko pro odeslání) ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_PREFIX
+#: LYMessages.c:123
+msgid "Submit mailto form to "
+msgstr "Odeslat 'mailto' formuláø na "
+
+#. #define FORM_LINK_SUBMIT_MAILTO_MSG
+#: LYMessages.c:125
+msgid "(mailto form submit button) Use right-arrow or <return> to submit."
+msgstr "(Tlaèítko pro odeslání) ©ipka vpravo èi <return> pro odeslání"
+
+#. #define FORM_LINK_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:127
+msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
+msgstr "(Tlaèítko pro odeslání) Po¹ta je zakázána, tudí¾ nemù¾ete nic odeslat."
+
+#. #define FORM_LINK_RESET_MESSAGE
+#: LYMessages.c:129
+msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
+msgstr "(Tlaèítko pro smazání) ©ipka vpravo èi <return> pro smazání vlo¾ených údajù."
+
+#. #define FORM_LINK_RESET_DIS_MSG
+#: LYMessages.c:131
+msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
+msgstr "(VYPNUTÉ tlaèítko pro smazání) ©ipky NAHORU/DOLÙ èi tab pro odchod."
+
+#. #define FORM_LINK_OPTION_LIST_MESSAGE
+#: LYMessages.c:133
+msgid "(Option list) Hit return and use arrow keys and return to select option."
+msgstr "(Seznam voleb) <return> a ¹ipky pro vybrání."
+
+#. #define CHOICE_LIST_MESSAGE
+#: LYMessages.c:135
+msgid "(Choice list) Hit return and use arrow keys and return to select option."
+msgstr "(Nabídka mo¾ností) <return> a ¹ipky pro zvolení."
+
+#. #define FORM_LINK_OPTION_LIST_UNM_MSG
+#: LYMessages.c:137
+msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
+msgstr "NEMODIFIKOVATELNÝ seznam voleb. <return> èi ¹ipky pro prohlí¾ení èi odchod"
+
+#. #define CHOICE_LIST_UNM_MSG
+#: LYMessages.c:139
+msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
+msgstr "NEMODIFIKOVATELNÁ nabídka mo¾ností. <return> èi ¹ipky pro prohlí¾ení èi odchod"
+
+#: LYMessages.c:140
+msgid "Submitting form..."
+msgstr "Odesílám formuláø..."
+
+#: LYMessages.c:141
+msgid "Resetting form..."
+msgstr "Ma¾u obsah formuláøe..."
+
+#. #define RELOADING_FORM
+#: LYMessages.c:143
+msgid "Reloading document. Any form entries will be lost!"
+msgstr "Znovu nahrávám dokument. V¹echny údaje zapsané do formuláøù budou ztraceny!"
+
+#: LYMessages.c:144
+#, c-format
+msgid "Warning: Cannot transcode form data to charset %s!"
+msgstr "Varování: Data formuláøe nelze pøevést do znakové sady %s!"
+
+#. #define NORMAL_LINK_MESSAGE
+#: LYMessages.c:147
+msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
+msgstr "(BÌ®NÝ ODKAZ) Pou¾ijte ¹ipku vpravo èi <return> pro aktivaci."
+
+#: LYMessages.c:148
+msgid "The resource requested is not available at this time."
+msgstr "Po¾adovaný zdroj není v tuto chvíli pøístupný."
+
+#: LYMessages.c:149
+msgid "Enter Lynx keystroke command: "
+msgstr "Stisknìte nìjakou pøíkazovou klávesu: "
+
+#: LYMessages.c:150
+msgid "Looking up "
+msgstr "Vyhledávám "
+
+#: LYMessages.c:151
+#, c-format
+msgid "Getting %s"
+msgstr "Získávám %s"
+
+#: LYMessages.c:152
+#, c-format
+msgid "Skipping %s"
+msgstr "Pøeskakuji %s"
+
+#: LYMessages.c:153
+#, c-format
+msgid "Using %s"
+msgstr "Pou¾ívám %s"
+
+#: LYMessages.c:154
+#, c-format
+msgid "Illegal URL: %s"
+msgstr "Chybné URL %s"
+
+#: LYMessages.c:155
+#, c-format
+msgid "Badly formed address %s"
+msgstr "Adresa %s je chybnì utvoøená."
+
+#: LYMessages.c:156
+#, c-format
+msgid "URL: %s"
+msgstr "URL: %s"
+
+#: LYMessages.c:157
+msgid "Unable to access WWW file!!!"
+msgstr "Pøístup k WWW souboru nelze získat!!!"
+
+#: LYMessages.c:158
+#, c-format
+msgid "This is a searchable index. Use %s to search."
+msgstr "Toto je prohledávatelný rejstøík. Pou¾ijte %s pro hledání."
+
+#. #define WWW_INDEX_MORE_MESSAGE
+#: LYMessages.c:160
+#, c-format
+msgid "--More-- This is a searchable index. Use %s to search."
+msgstr "--Více-- Toto je prohledávatelný rejstøík. Pou¾ijte %s pro hledání."
+
+#: LYMessages.c:161
+msgid "You have entered an invalid link number."
+msgstr "Èíslo odkazu, které jste zadal je chybné."
+
+#. #define SOURCE_HELP
+#: LYMessages.c:163
+msgid "Currently viewing document source. Press '\\' to return to rendered version."
+msgstr "Zobrazuji zdrojový kód. Stisknìte '\\' pro návrat k interpretované verzi."
+
+#. #define NOVICE_LINE_ONE
+#: LYMessages.c:165
+msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
+msgstr " ©ipky: Nahoru/Dolù pro pohyb. Vpravo následuje odkaz; vlevo se vrátí zpìt. \n"
+
+#. #define NOVICE_LINE_TWO
+#: LYMessages.c:167
+msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
+msgstr "H>Nápovìda Vo)lby P>Tisk G>Jdi M>Hlavní obrazovka /=hledej [delete]=historie \n"
+
+#. #define NOVICE_LINE_TWO_A
+#: LYMessages.c:169
+msgid " O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)uit \n"
+msgstr " O)statní pøík. H>Nápovìda K)lávesová mapa G>Jdi_na P>Tisk M>Hlavní obrazovka o>volby Q>Konec\n"
+
+#. #define NOVICE_LINE_TWO_B
+#: LYMessages.c:171
+msgid " O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n"
+msgstr " O)statní pøík. B>Zpìt E)ditovat D>Stáhnout ^R>Znovu nahrát ^W>Smazat obraz hledat: /\n"
+
+#. #define NOVICE_LINE_TWO_C
+#: LYMessages.c:173
+msgid "O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)emove \n"
+msgstr " O)statní pøík. C>Komentáø Historie: <delete> Zálo¾ky: V>Zobrazit A>Nová R>Smazat\n"
+
+#. #define FORM_NOVICELINE_ONE
+#: LYMessages.c:175
+msgid " Enter text into the field by typing on the keyboard "
+msgstr " Pomocí klávesnice vlo¾te text do pole "
+
+#. #define FORM_NOVICELINE_TWO
+#: LYMessages.c:177
+msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U vyma¾e ve¹kerý text v poli; [Backspace] sma¾e jeden znak "
+
+#. #define FORM_NOVICELINE_TWO_DELBL
+#: LYMessages.c:179
+msgid " Ctrl-U to delete text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U vyma¾e ve¹kerý text v poli; [Backspace] sma¾e jeden znak "
+
+#. #define FORM_NOVICELINE_TWO_VAR
+#: LYMessages.c:181
+#, c-format
+msgid " %s to delete all text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U vyma¾e ve¹kerý text v poli; [Backspace] sma¾e jeden znak "
+
+#. #define FORM_NOVICELINE_TWO_DELBL_VAR
+#: LYMessages.c:183
+#, c-format
+msgid " %s to delete text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U vyma¾e ve¹kerý text v poli; [Backspace] sma¾e jeden znak "
+
+#. mailto
+#: LYMessages.c:186
+msgid "Malformed mailto form submission! Cancelled!"
+msgstr "Pokus o odeslání chybného 'mailto' formuláøe! Zru¹eno!"
+
+#: LYMessages.c:187
+msgid "Warning! Control codes in mail address replaced by ?"
+msgstr "Varování! Øídící znaky v po¹tovní adrese byly nahrazeny ?"
+
+#: LYMessages.c:188
+msgid "Mail disallowed! Cannot submit."
+msgstr "Po¹ta je zakázána! Nelze nic poslat."
+
+#: LYMessages.c:189
+msgid "Mailto form submission failed!"
+msgstr "Odeslání 'mailto' formuláøe se nezdaøilo!"
+
+#: LYMessages.c:190
+msgid "Mailto form submission Cancelled!!!"
+msgstr "Odeslání 'mailto' formuláøe zru¹eno!!!"
+
+#: LYMessages.c:191
+msgid "Sending form content..."
+msgstr "Posílám obsah formuláøe..."
+
+#: LYMessages.c:192
+msgid "No email address is present in mailto URL!"
+msgstr "'Mailto' URL neobsahuje po¹tovní adresu!"
+
+#. #define MAILTO_URL_TEMPOPEN_FAILED
+#: LYMessages.c:194
+msgid "Unable to open temporary file for mailto URL!"
+msgstr "Doèasný soubor pro 'mailto' URL nelze otevøít!"
+
+#. #define INC_ORIG_MSG_PROMPT
+#: LYMessages.c:196
+msgid "Do you wish to include the original message?"
+msgstr "Chcete zaøadit text pùvodní zprávy?"
+
+#. #define INC_PREPARSED_MSG_PROMPT
+#: LYMessages.c:198
+msgid "Do you wish to include the preparsed source?"
+msgstr "Chcete zaøadit pøedzpracovaný zdrojový text?"
+
+#. #define SPAWNING_EDITOR_FOR_MAIL
+#: LYMessages.c:200
+msgid "Spawning your selected editor to edit mail message"
+msgstr "Spou¹tím vámi zvolený textový editor pro editaci zprávy"
+
+#. #define ERROR_SPAWNING_EDITOR
+#: LYMessages.c:202
+msgid "Error spawning editor, check your editor definition in the options menu"
+msgstr "Chyba pøi startu editoru. Zkontrolujte nastavení editoru v konfiguraèním menu."
+
+#: LYMessages.c:203
+msgid "Send this comment?"
+msgstr "Odeslat tento komentáø?"
+
+#: LYMessages.c:204
+msgid "Send this message?"
+msgstr "Odeslat tuto zprávu?"
+
+#: LYMessages.c:205
+msgid "Sending your message..."
+msgstr "Odesílám va¹i zprávu..."
+
+#: LYMessages.c:206
+msgid "Sending your comment:"
+msgstr "Odesílám vá¹ komentáø:"
+
+#. textarea
+#: LYMessages.c:209
+msgid "Not in a TEXTAREA; cannot use external editor."
+msgstr "Toto není textová oblast; externí editor nelze pou¾ít."
+
+#: LYMessages.c:210
+msgid "Not in a TEXTAREA; cannot use command."
+msgstr "Toto není textová oblast; externí editor nelze pou¾ít."
+
+#: LYMessages.c:213
+msgid "file: ACTIONs are disallowed!"
+msgstr "file: AKCE jsou zakázány!"
+
+#. #define FILE_SERVED_LINKS_DISALLOWED
+#: LYMessages.c:215
+msgid "file: URLs via served links are disallowed!"
+msgstr "Pou¾ívání odkazù ze vzdálených dokumentù pro lokální soubory je zakázáno!"
+
+#: LYMessages.c:216
+msgid "Access to local files denied."
+msgstr "Pøístup k teèkovým souborùm je zakázán!"
+
+#: LYMessages.c:217
+msgid "file: URLs via bookmarks are disallowed!"
+msgstr "Pou¾ívání zálo¾ek pro lokální soubory je zakázáno!"
+
+#. #define SPECIAL_VIA_EXTERNAL_DISALLOWED
+#: LYMessages.c:219
+msgid "This special URL is not allowed in external documents!"
+msgstr "Toto zvlá¹tní URL není v externích dokumentech povoleno!"
+
+#: LYMessages.c:220
+msgid "Press <return> to return to Lynx."
+msgstr "Stisknìte <return> pro návrat do programu Lynx."
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:223
+msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
+msgstr "Spou¹tím DCL proces. Pou¾ijte 'logout' pro návrat do programu Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:227
+msgid "Type EXIT to return to Lynx.\n"
+msgstr "Napi¹te EXIT pro návrat do programu Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:230
+msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
+msgstr "Spou¹tím implicitní shell. Pou¾ijte 'exit' pro návrat do programu Lynx.\n"
+
+#: LYMessages.c:233
+msgid "Spawning is currently disabled."
+msgstr "Spou¹tìní je nyní vypnuto."
+
+#: LYMessages.c:234
+msgid "The 'd'ownload command is currently disabled."
+msgstr "Pøíkaz 'd' je nyní vypnut."
+
+#: LYMessages.c:235
+msgid "You cannot download an input field."
+msgstr "Nemù¾ete stahovat vstupní pole."
+
+#: LYMessages.c:236
+msgid "Form has a mailto action! Cannot download."
+msgstr "Formuláø obsahuje 'mailto' akci! Nelze stáhnout."
+
+#: LYMessages.c:237
+msgid "You cannot download a mailto: link."
+msgstr "Nemù¾ete stáhnout 'mailto:' odkaz."
+
+#: LYMessages.c:238
+msgid "You cannot download cookies."
+msgstr "Nemù¾ete stahovat cookies."
+
+#: LYMessages.c:239
+msgid "You cannot download a printing option."
+msgstr "Polo¾ku z menu voleb tisku nelze stahovat."
+
+#: LYMessages.c:240
+msgid "You cannot download an upload option."
+msgstr "Polo¾ku z menu voleb posílání nelze stahovat."
+
+#: LYMessages.c:241
+msgid "You cannot download an permit option."
+msgstr "Polo¾ku z menu nastavení práv souborù nelze stahovat."
+
+#: LYMessages.c:242
+msgid "This special URL cannot be downloaded!"
+msgstr "Toto zvlá¹tní URL nemù¾e být sta¾eno!"
+
+#: LYMessages.c:243
+msgid "Nothing to download."
+msgstr "Není co stáhnout."
+
+#: LYMessages.c:244
+msgid "Trace ON!"
+msgstr "Sledování ZAPNUTO!"
+
+#: LYMessages.c:245
+msgid "Trace OFF!"
+msgstr "Sledování VYPNUTO!"
+
+#. #define CLICKABLE_IMAGES_ON
+#: LYMessages.c:247
+msgid "Links will be included for all images! Reloading..."
+msgstr "Budou zaøazeny odkazy na v¹echny obrázky! Znovu naèítám..."
+
+#. #define CLICKABLE_IMAGES_OFF
+#: LYMessages.c:249
+msgid "Standard image handling restored! Reloading..."
+msgstr "Implicitní zpracování obrázkù obnoveno! Znovu naèítám..."
+
+#. #define PSEUDO_INLINE_ALTS_ON
+#: LYMessages.c:251
+msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
+msgstr "Zobrazuji pseudo-popisy pro vlo¾ené obrázky bez popisu! Znovu naèítám..."
+
+#. #define PSEUDO_INLINE_ALTS_OFF
+#: LYMessages.c:253
+msgid "Inlines without an ALT string specified will be ignored! Reloading..."
+msgstr "Vlo¾ené obrázky bez popisu budou ignorovány! Znovu naèítám..."
+
+#: LYMessages.c:254
+msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
+msgstr "Pøímý 8bitový èi CJK re¾im VYPNUT! Znovu naèítám..."
+
+#: LYMessages.c:255
+msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
+msgstr "Pøímý 8bitový èi CJK re¾im ZAPNUT! Znovu naèítám..."
+
+#. #define HEAD_D_L_OR_CANCEL
+#: LYMessages.c:257
+msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
+msgstr "Poslat HEAD po¾adavek pro D)okument, L>Odkaz èi C>Zru¹it? (d,l,c): "
+
+#. #define HEAD_D_OR_CANCEL
+#: LYMessages.c:259
+msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
+msgstr "Poslat HEAD po¾adavek pro D)okument èi C>Zru¹it? (d,c): "
+
+#: LYMessages.c:260
+msgid "Sorry, the document is not an http URL."
+msgstr "Lituji, dokument není http URL."
+
+#: LYMessages.c:261
+msgid "Sorry, the link is not an http URL."
+msgstr "Lituji, odkaz není http URL."
+
+#: LYMessages.c:262
+msgid "Sorry, the ACTION for this form is disabled."
+msgstr "Akce tohoto formuláøe je vypnuta."
+
+#. #define FORM_ACTION_NOT_HTTP_URL
+#: LYMessages.c:264
+msgid "Sorry, the ACTION for this form is not an http URL."
+msgstr "Akce tohoto formuláøe není http URL."
+
+#: LYMessages.c:265
+msgid "Not an http URL or form ACTION!"
+msgstr "Toto není http URL ani akce formuláøe!"
+
+#: LYMessages.c:266
+msgid "This special URL cannot be a form ACTION!"
+msgstr "Toto zvlá¹tní URL nemù¾e být akcí formuláøe!"
+
+#: LYMessages.c:267
+msgid "URL is not in starting realm!"
+msgstr "URL není ve startovní oblasti!"
+
+#: LYMessages.c:268
+msgid "News posting is disabled!"
+msgstr "Odesílání pøíspìvkù do diskuzních skupin je zakázáno!"
+
+#: LYMessages.c:269
+msgid "File management support is disabled!"
+msgstr "Správce souborù je zakázán!"
+
+#: LYMessages.c:270
+msgid "No jump file is currently available."
+msgstr "®ádný soubor zkratek není dostupný."
+
+#: LYMessages.c:271
+msgid "Jump to (use '?' for list): "
+msgstr "Skoèit na ('?' pro seznam): "
+
+#: LYMessages.c:272
+msgid "Jumping to a shortcut URL is disallowed!"
+msgstr "Není povoleno pøeskakovat na zkrácená URL!"
+
+#: LYMessages.c:273
+msgid "Random URL is disallowed! Use a shortcut."
+msgstr "Náhodná URL jsou zakázána! Pou¾ijte zkratku."
+
+#: LYMessages.c:274
+msgid "No random URLs have been used thus far."
+msgstr "Doposud nebyla pou¾ita ¾ádná náhodná URL."
+
+#: LYMessages.c:275
+msgid "Bookmark features are currently disabled."
+msgstr "Pou¾ívání zálo¾ek je nyní zakázáno."
+
+#: LYMessages.c:276
+msgid "Execution via bookmarks is disabled."
+msgstr "Spou¹tìní programù pøes soubory zálo¾ek je zakázáno."
+
+#. #define BOOKMARK_FILE_NOT_DEFINED
+#: LYMessages.c:278
+#, c-format
+msgid "Bookmark file is not defined. Use %s to see options."
+msgstr "Soubor se zálo¾kami není zadán. Pou¾ijte %s pro zobrazení mo¾ností."
+
+#. #define NO_TEMP_FOR_HOTLIST
+#: LYMessages.c:280
+msgid "Unable to open tempfile for X Mosaic hotlist conversion."
+msgstr "Doèasný soubor pro konverzi X Mosaic 'hotlistu' nelze otevøít."
+
+#: LYMessages.c:281
+msgid "ERROR - unable to open bookmark file."
+msgstr "CHYBA - soubor zálo¾ek nelze otevøít."
+
+#. #define BOOKMARK_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:283
+msgid "Unable to open bookmark file for deletion of link."
+msgstr "Zálo¾ku nelze smazat: soubor zálo¾ek nelze otevøít"
+
+#. #define BOOKSCRA_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:285
+msgid "Unable to open scratch file for deletion of link."
+msgstr "Zálo¾ku nelze smazat: doèasný soubor nelze otevøít"
+
+#: LYMessages.c:287
+msgid "Error renaming scratch file."
+msgstr "Chyba pøi pøejmenovávání doèasného souboru."
+
+#: LYMessages.c:289
+msgid "Error renaming temporary file."
+msgstr "Chyba pøi pøejmenovávání doèasného souboru."
+
+#. #define BOOKTEMP_COPY_FAIL
+#: LYMessages.c:291
+msgid "Unable to copy temporary file for deletion of link."
+msgstr "Zálo¾ku nelze smazat: doèasný soubor nelze kopírovat"
+
+#. #define BOOKTEMP_REOPEN_FAIL_FOR_DEL
+#: LYMessages.c:293
+msgid "Unable to reopen temporary file for deletion of link."
+msgstr "Zálo¾ku nelze smazat: doèasný soubor nelze znovu otevøít"
+
+#. #define BOOKMARK_LINK_NOT_ONE_LINE
+#: LYMessages.c:296
+msgid "Link is not by itself all on one line in bookmark file."
+msgstr "Zálo¾ka je del¹í ne¾ jeden øádek."
+
+#: LYMessages.c:297
+msgid "Bookmark deletion failed."
+msgstr "Odstranìní zálo¾ky se nezdaøilo."
+
+#. #define BOOKMARKS_NOT_TRAVERSED
+#: LYMessages.c:299
+msgid "Bookmark files cannot be traversed (only http URLs)."
+msgstr "Soubory se zálo¾kami nelze prolézat (pouze http URL)."
+
+#. #define BOOKMARKS_NOT_OPEN
+#: LYMessages.c:301
+msgid "Unable to open bookmark file, use 'a' to save a link first"
+msgstr "Soubor se zálo¾kami nelze otevøít. Klávesou 'a' nejprve ulo¾te odkaz"
+
+#: LYMessages.c:302
+msgid "There are no links in this bookmark file!"
+msgstr "Tento soubor zálo¾ek je prázdný!"
+
+#. #define BOOK_D_L_OR_CANCEL
+#: LYMessages.c:304
+msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
+msgstr "Ulo¾it do souboru se zálo¾kami D)okument, L>Odkaz èi C>Zru¹it? (d,l,c): "
+
+#: LYMessages.c:305
+msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
+msgstr "Ulo¾it do souboru se zálo¾kami D)okument èi C>Zru¹it? (d,c): "
+
+#: LYMessages.c:306
+msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
+msgstr "Ulo¾it do souboru se zálo¾kami L>Odkaz èi C>Zru¹it? (l,c): "
+
+#. #define NOBOOK_POST_FORM
+#: LYMessages.c:308
+msgid "Documents from forms with POST content cannot be saved as bookmarks."
+msgstr "Zálo¾ky pro dokumenty s POST obsahem ukládat nelze."
+
+#: LYMessages.c:309
+msgid "Cannot save form fields/links"
+msgstr "Formuláøová pole/odkazy nelze ukládat."
+
+#. #define NOBOOK_HSML
+#: LYMessages.c:311
+msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
+msgstr "Zálo¾ky pro historii, showinfo, menu a seznamy nelze ukládat."
+
+#. #define CONFIRM_BOOKMARK_DELETE
+#: LYMessages.c:313
+msgid "Do you really want to delete this link from your bookmark file?"
+msgstr "Opravdu chcete vymazat tento odkaz z va¹eho souboru se zálo¾kami?"
+
+#: LYMessages.c:314
+msgid "Malformed address."
+msgstr "Chybná adresa."
+
+#. #define HISTORICAL_ON_MINIMAL_OFF
+#: LYMessages.c:316
+msgid "Historical comment parsing ON (Minimal is overridden)!"
+msgstr "Historické komentáøe zapnuto (minimální komentáøe potlaèeny)!"
+
+#. #define HISTORICAL_OFF_MINIMAL_ON
+#: LYMessages.c:318
+msgid "Historical comment parsing OFF (Minimal is in effect)!"
+msgstr "Historické komentáøe vypnuty (minimální komentáøe aktivní)!"
+
+#. #define HISTORICAL_ON_VALID_OFF
+#: LYMessages.c:320
+msgid "Historical comment parsing ON (Valid is overridden)!"
+msgstr "Historické komentáøe zapnuty (platné komentáøe potlaèeny)!"
+
+#. #define HISTORICAL_OFF_VALID_ON
+#: LYMessages.c:322
+msgid "Historical comment parsing OFF (Valid is in effect)!"
+msgstr "Historické komentáøe vypnuty (platné komentáøù aktivní)!"
+
+#. #define MINIMAL_ON_IN_EFFECT
+#: LYMessages.c:324
+msgid "Minimal comment parsing ON (and in effect)!"
+msgstr "Pou¾ívání minimálních komentáøù zapnuto a aktivní!"
+
+#. #define MINIMAL_OFF_VALID_ON
+#: LYMessages.c:326
+msgid "Minimal comment parsing OFF (Valid is in effect)!"
+msgstr "Pou¾ívání minimálních komentáøù vypnuto (platné komentáøe aktivní)!"
+
+#. #define MINIMAL_ON_BUT_HISTORICAL
+#: LYMessages.c:328
+msgid "Minimal comment parsing ON (but Historical is in effect)!"
+msgstr "Pou¾ívání minimálních komentáøù zapnuto (ale aktivní jsou historické komentáøe)!"
+
+#. #define MINIMAL_OFF_HISTORICAL_ON
+#: LYMessages.c:330
+msgid "Minimal comment parsing OFF (Historical is in effect)!"
+msgstr "Pou¾ívání minimálních komentáøù vypnuto (historické komentáøù aktivní)!"
+
+#: LYMessages.c:331
+msgid "Soft double-quote parsing ON!"
+msgstr "Pou¾ívání '>' jako zakonèení znaèek a citací zapnuto!"
+
+#: LYMessages.c:332
+msgid "Soft double-quote parsing OFF!"
+msgstr "Pou¾ívání '>' jako zakonèení znaèek a citací vypnuto!"
+
+#: LYMessages.c:333
+msgid "Now using TagSoup parsing of HTML."
+msgstr "Pou¾ívám 'TagSoup' metodu zpracování HTML."
+
+#: LYMessages.c:334
+msgid "Now using SortaSGML parsing of HTML!"
+msgstr "Pou¾ívám 'SortaSGML' metodu zpracování HTML!"
+
+#: LYMessages.c:335
+msgid "You are already at the end of this document."
+msgstr "Ji¾ jste na konci dokumentu."
+
+#: LYMessages.c:336
+msgid "You are already at the beginning of this document."
+msgstr "Ji¾ jste na zaèátku dokumentu."
+
+#: LYMessages.c:337
+#, c-format
+msgid "You are already at page %d of this document."
+msgstr "Ji¾ jste na stranì %d."
+
+#: LYMessages.c:338
+#, c-format
+msgid "Link number %d already is current."
+msgstr "Odkaz èíslo %d je právì zvolen."
+
+#: LYMessages.c:339
+msgid "You are already at the first document"
+msgstr "Jste na prvním dokumentu."
+
+#: LYMessages.c:340
+msgid "There are no links above this line of the document."
+msgstr "Nad tímto øádkem ji¾ nejsou ¾ádné odkazy."
+
+#: LYMessages.c:341
+msgid "There are no links below this line of the document."
+msgstr "Pod tímto øádkem ji¾ nejsou ¾ádné odkazy."
+
+#. #define MAXLEN_REACHED_DEL_OR_MOV
+#: LYMessages.c:343
+msgid "Maximum length reached! Delete text or move off field."
+msgstr "Maximální délka dosa¾ena! Sma¾te text, nebo se pøesuòte mimo pole."
+
+#. #define NOT_ON_SUBMIT_OR_LINK
+#: LYMessages.c:345
+msgid "You are not on a form submission button or normal link."
+msgstr "Toto není bì¾ný odkaz ani tlaèítko na odeslání formuláøe."
+
+#. #define NEED_CHECKED_RADIO_BUTTON
+#: LYMessages.c:347
+msgid "One radio button must be checked at all times!"
+msgstr "V¾dy musí být vybráno alespoò jedno z pøepínacích tlaèítek!"
+
+#: LYMessages.c:348
+msgid "No submit button for this form, submit single text field?"
+msgstr ""
+
+#: LYMessages.c:349
+msgid "Do you want to go back to the previous document?"
+msgstr "Chcete se vrátit k pøedchozímu dokumentu?"
+
+#: LYMessages.c:350
+msgid "Use arrows or tab to move off of field."
+msgstr "Pou¾ijte ¹ipky èi tabelátor pro pøesun mimo pole."
+
+#. #define ENTER_TEXT_ARROWS_OR_TAB
+#: LYMessages.c:352
+msgid "Enter text. Use arrows or tab to move off of field."
+msgstr "Vlo¾te text. Pou¾ijte ¹ipky èi tabelátor pro pøesun mimo pole."
+
+#: LYMessages.c:353
+msgid "** Bad HTML!! No form action defined. **"
+msgstr "** Chybné HTML!! Formuláø nemá definovánu ¾ádnou akci. **"
+
+#: LYMessages.c:354
+msgid "Bad HTML!! Unable to create popup window!"
+msgstr "Chybné HTML!! Nelze vytvoøit vyskakovací okno!"
+
+#: LYMessages.c:355
+msgid "Unable to create popup window!"
+msgstr "Nelze vytvoøit vyskakovací okno!"
+
+#: LYMessages.c:356
+msgid "Goto a random URL is disallowed!"
+msgstr "Náhodná URL je zakázáno pou¾ít jako cíl!"
+
+#: LYMessages.c:357
+msgid "Goto a non-http URL is disallowed!"
+msgstr "Ne-http URL je zakázáno pou¾ít jako cíl!"
+
+#: LYMessages.c:358
+#, c-format
+msgid "You are not allowed to goto \"%s\" URLs"
+msgstr "\"%s\" URL nesmíte pou¾ít jako cíl!"
+
+#: LYMessages.c:359
+msgid "URL to open: "
+msgstr "Cílové URL: "
+
+#: LYMessages.c:360
+msgid "Edit the current Goto URL: "
+msgstr "Editace aktuálního cílového URL: "
+
+#: LYMessages.c:361
+msgid "Edit the previous Goto URL: "
+msgstr "Editace pøedchozího cílového URL: "
+
+#: LYMessages.c:362
+msgid "Edit a previous Goto URL: "
+msgstr "Editace pøedchozího cílového URL: "
+
+#: LYMessages.c:363
+msgid "Current document has POST data."
+msgstr "Aktuální dokument obsahuje POST data."
+
+#: LYMessages.c:364
+msgid "Edit this document's URL: "
+msgstr "Editace URL tohoto dokumentu: "
+
+#: LYMessages.c:365
+msgid "Edit the current link's URL: "
+msgstr "Editace URL aktuálního odkazu: "
+
+#: LYMessages.c:366
+msgid "You cannot edit File Management URLs"
+msgstr "Nemù¾ete editovat URL Správce souborù"
+
+#: LYMessages.c:367
+msgid "Enter a database query: "
+msgstr "Zadejte dotaz na databázi: "
+
+#: LYMessages.c:368
+msgid "Enter a whereis query: "
+msgstr "Zadejte hledaný øetìzec: "
+
+#: LYMessages.c:369
+msgid "Edit the current query: "
+msgstr "Editace aktuálního dotazu: "
+
+#: LYMessages.c:370
+msgid "Edit the previous query: "
+msgstr "Editace pøedchozího dotazu: "
+
+#: LYMessages.c:371
+msgid "Edit a previous query: "
+msgstr "Editace pøedchozího dotazu: "
+
+#. #define USE_C_R_TO_RESUB_CUR_QUERY
+#: LYMessages.c:373
+msgid "Use Control-R to resubmit the current query."
+msgstr "Pou¾ijte Control-R pro opìtovné odeslání dotazu."
+
+#: LYMessages.c:374
+msgid "Edit the current shortcut: "
+msgstr "Editovat aktuální zkratku: "
+
+#: LYMessages.c:375
+msgid "Edit the previous shortcut: "
+msgstr "Editovat pøedchozí zkratku: "
+
+#: LYMessages.c:376
+msgid "Edit a previous shortcut: "
+msgstr "Editovat pøedchozí zkratku: "
+
+#: LYMessages.c:377
+#, c-format
+msgid "Key '%c' is not mapped to a jump file!"
+msgstr "Klávesa '%s' není svázána se souborem zkratek!"
+
+#: LYMessages.c:378
+msgid "Cannot locate jump file!"
+msgstr "Soubor zkratek nelze nalézt!"
+
+#: LYMessages.c:379
+msgid "Cannot open jump file!"
+msgstr "Soubor zkratek nelze otevøít!"
+
+#: LYMessages.c:380
+msgid "Error reading jump file!"
+msgstr "Chyba pøi ètení souboru zkratek!"
+
+#: LYMessages.c:381
+msgid "Out of memory reading jump file!"
+msgstr "Pøi ètení souboru zkratek do¹la pamì»!"
+
+#: LYMessages.c:382
+msgid "Out of memory reading jump table!"
+msgstr "Pøi ètení tabulky zkratek do¹la pamì»!"
+
+#: LYMessages.c:383
+msgid "No index is currently available."
+msgstr "Není dostupný ¾ádný rejstøík."
+
+#. #define CONFIRM_MAIN_SCREEN
+#: LYMessages.c:385
+msgid "Do you really want to go to the Main screen?"
+msgstr "Opravdu chcete pøejít na hlavní obrazovku?"
+
+#: LYMessages.c:386
+msgid "You are already at main screen!"
+msgstr "Ji¾ jste na hlavní obrazovce!"
+
+#. #define NOT_ISINDEX
+#: LYMessages.c:388
+msgid "Not a searchable indexed document -- press '/' to search for a text string"
+msgstr "Toto není prohledávatelný rejstøík -- pou¾ijte '/' pro vyhledání øetìzce"
+
+#. #define NO_OWNER
+#: LYMessages.c:390
+msgid "No owner is defined for this file so you cannot send a comment"
+msgstr "Není udán vlastník tohoto dokumentu, tudí¾ nemù¾ete zaslat komentáø."
+
+#: LYMessages.c:391
+#, c-format
+msgid "No owner is defined. Use %s?"
+msgstr "Není udán vlastník. Pou¾ít %s?"
+
+#: LYMessages.c:392
+msgid "Do you wish to send a comment?"
+msgstr "Chcete zaslat komentáø?"
+
+#: LYMessages.c:393
+msgid "Mail is disallowed so you cannot send a comment"
+msgstr "Po¹ta je zakázána, tudí¾ nemù¾ete zaslat komentáø."
+
+#: LYMessages.c:394
+msgid "The 'e'dit command is currently disabled."
+msgstr "Pou¾ití pøíkazu 'e' je nyní zakázáno."
+
+#: LYMessages.c:395
+msgid "External editing is currently disabled."
+msgstr "Spou¹tìní externích programù je nyní zakázáno."
+
+#: LYMessages.c:396
+msgid "System error - failure to get status."
+msgstr "Systémová chyba - status nelze zjistit."
+
+#: LYMessages.c:397
+msgid "No editor is defined!"
+msgstr "Není zadán ¾ádný editor!"
+
+#: LYMessages.c:398
+msgid "The 'p'rint command is currently disabled."
+msgstr "Pou¾ití pøíkazu 'p' je nyní zakázáno."
+
+#: LYMessages.c:399
+msgid "Document has no Toolbar links or Banner."
+msgstr "Dokument nemá ¾ádnou nástrojovou li¹tu ani reklamní nudli."
+
+#: LYMessages.c:400
+msgid "Unable to open traversal file."
+msgstr "Nelze otevøít 'traverse' soubor."
+
+#: LYMessages.c:401
+msgid "Unable to open traversal found file."
+msgstr "Nelze otevøít 'traverse_found' soubor."
+
+#: LYMessages.c:402
+msgid "Unable to open reject file."
+msgstr "Nelze otevøít 'traverse_reject' soubor."
+
+#: LYMessages.c:403
+msgid "Unable to open traversal errors output file"
+msgstr "Nelze otevøít 'traverse_errors' soubor."
+
+#: LYMessages.c:404
+msgid "TRAVERSAL WAS INTERRUPTED"
+msgstr "PROLÉZÁNÍ BYLO PØERU©ENO"
+
+#: LYMessages.c:405
+msgid "Follow link (or goto link or page) number: "
+msgstr "Následovat odkaz (èi jít na odkaz nebo stránku) èíslo: "
+
+#: LYMessages.c:406
+msgid "Select option (or page) number: "
+msgstr "Zvolte èíslo volby (èi strany): "
+
+#: LYMessages.c:407
+#, c-format
+msgid "Option number %d already is current."
+msgstr "Volba èíslo %d je právì aktivní."
+
+#. #define ALREADY_AT_OPTION_END
+#: LYMessages.c:409
+msgid "You are already at the end of this option list."
+msgstr "Jste na konci seznamu voleb."
+
+#. #define ALREADY_AT_OPTION_BEGIN
+#: LYMessages.c:411
+msgid "You are already at the beginning of this option list."
+msgstr "Jste na zaèátku seznamu voleb."
+
+#. #define ALREADY_AT_OPTION_PAGE
+#: LYMessages.c:413
+#, c-format
+msgid "You are already at page %d of this option list."
+msgstr "Ji¾ jste na stranì %s nabídky."
+
+#: LYMessages.c:414
+msgid "You have entered an invalid option number."
+msgstr "Zadal jste chybné èíslo volby."
+
+#: LYMessages.c:415
+msgid "** Bad HTML!! Use -trace to diagnose. **"
+msgstr "** Chybné HTML!! Pou¾ijte -trace pro diagnostiku. **"
+
+#: LYMessages.c:416
+msgid "Give name of file to save in"
+msgstr "Zadejte jméno souboru, do kterého mám ulo¾it"
+
+#: LYMessages.c:417
+msgid "Can't save data to file -- please run WWW locally"
+msgstr "Data nelze do souboru ulo¾it -- spus»te WWW místnì"
+
+#: LYMessages.c:418
+msgid "Can't open temporary file!"
+msgstr "Doèasný soubor nelze otevøít!"
+
+#: LYMessages.c:419
+msgid "Can't open output file! Cancelling!"
+msgstr "Výstupní soubor nelze otevøít! Ru¹ím!"
+
+#: LYMessages.c:420
+msgid "Execution is disabled."
+msgstr "Spou¹tìní programù je zakázáno."
+
+#. #define EXECUTION_DISABLED_FOR_FILE
+#: LYMessages.c:422
+#, c-format
+msgid "Execution is not enabled for this file. See the Options menu (use %s)."
+msgstr "Tento soubor nelze spustit. Viz Konfiguraèní menu (pou¾ijte %s)."
+
+#. #define EXECUTION_NOT_COMPILED
+#: LYMessages.c:424
+msgid "Execution capabilities are not compiled into this version."
+msgstr "Podpora pro spou¹tìní programù byla vypnuta pøi pøekladu programu."
+
+#: LYMessages.c:425
+msgid "This file cannot be displayed on this terminal."
+msgstr "Tento soubor nelze na tomto terminálu zobrazit."
+
+#. #define CANNOT_DISPLAY_FILE_D_OR_C
+#: LYMessages.c:427
+msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
+msgstr "Tento soubor nelze na tomto terminálu zobrazit: D>Stáhnout èi C>Zru¹it"
+
+#: LYMessages.c:428
+#, c-format
+msgid "%s D)ownload, or C)ancel"
+msgstr "%s D>Stáhnout èi C>Zru¹it"
+
+#: LYMessages.c:429
+msgid "Cancelling file."
+msgstr "Zru¹eno"
+
+#: LYMessages.c:430
+msgid "Retrieving file. - PLEASE WAIT -"
+msgstr "Stahuji soubor. - POÈKEJTE, PROSÍM -"
+
+#: LYMessages.c:431
+msgid "Enter a filename: "
+msgstr "Zadejte jméno souboru: "
+
+#: LYMessages.c:432
+msgid "Edit the previous filename: "
+msgstr "Editace pøedchozího jména souboru: "
+
+#: LYMessages.c:433
+msgid "Edit a previous filename: "
+msgstr "Editace pøedchozího jména souboru: "
+
+#: LYMessages.c:434
+msgid "Enter a new filename: "
+msgstr "Zadejte nové jméno souboru: "
+
+#: LYMessages.c:435
+msgid "File name may not begin with a dot."
+msgstr "Jméno souboru nesmí zaèínat teèkou."
+
+#: LYMessages.c:437
+msgid "File exists. Create higher version?"
+msgstr "Soubor ji¾ existuje. Vytvoøit jeho novou verzi?"
+
+#: LYMessages.c:439
+msgid "File exists. Overwrite?"
+msgstr "Soubor ji¾ existuje. Pøepsat?"
+
+#: LYMessages.c:441
+msgid "Cannot write to file."
+msgstr "Do souboru nelze zapisovat."
+
+#: LYMessages.c:442
+msgid "ERROR! - download command is misconfigured."
+msgstr "CHYBA! - pøíkaz pro stahování je chybný"
+
+#: LYMessages.c:443
+msgid "Unable to download file."
+msgstr "Soubor nelze stáhnout."
+
+#: LYMessages.c:444
+msgid "Reading directory..."
+msgstr "Ètu adresáø..."
+
+#: LYMessages.c:445
+msgid "Building directory listing..."
+msgstr "Sestavuji výpis adresáøe..."
+
+#: LYMessages.c:446
+msgid "Saving..."
+msgstr "Ukládám..."
+
+#: LYMessages.c:447
+#, c-format
+msgid "Could not edit file '%s'."
+msgstr "Soubor '%s' nelze editovat."
+
+#: LYMessages.c:448
+msgid "Unable to access document!"
+msgstr "Pøístup k dokumentu nelze získat!"
+
+#: LYMessages.c:449
+msgid "Could not access file."
+msgstr "Soubor není dostupný."
+
+#: LYMessages.c:450
+msgid "Could not access directory."
+msgstr "Adresáø není dostupný."
+
+#: LYMessages.c:451
+msgid "Could not load data."
+msgstr "Nelze naèíst data."
+
+#. #define CANNOT_EDIT_REMOTE_FILES
+#: LYMessages.c:453
+msgid "Lynx cannot currently (e)dit remote WWW files."
+msgstr "V souèasné dobì nelze vzdálené WWW dokumenty z Lynxu (e)ditovat."
+
+#. #define CANNOT_EDIT_FIELD
+#: LYMessages.c:455
+msgid "This field cannot be (e)dited with an external editor."
+msgstr "Toto pole nemù¾e být (e)ditováno pomocí externího editoru."
+
+#: LYMessages.c:456
+msgid "Bad rule"
+msgstr "Chybné pravidlo"
+
+#: LYMessages.c:457
+msgid "Insufficient operands:"
+msgstr "Chybí operandy: "
+
+#: LYMessages.c:458
+msgid "You are not authorized to edit this file."
+msgstr "Nejste oprávnìn editovat tento soubor."
+
+#: LYMessages.c:459
+msgid "Title: "
+msgstr "Titulek: "
+
+#: LYMessages.c:460
+msgid "Subject: "
+msgstr "Pøedmìt: "
+
+#: LYMessages.c:461
+msgid "Username: "
+msgstr "U¾ivatelské jméno: "
+
+#: LYMessages.c:462
+msgid "Password: "
+msgstr "Heslo: "
+
+#: LYMessages.c:463
+msgid "lynx: Username and Password required!!!"
+msgstr "lynx: Je tøena u¾ivatelské jméno a heslo!!!"
+
+#: LYMessages.c:464
+msgid "lynx: Password required!!!"
+msgstr "Lynx: Je tøeba heslo!!!"
+
+#: LYMessages.c:465
+msgid "Clear all authorization info for this session?"
+msgstr "Smazat v¹echny autorizaèní informace pro toto sezení?"
+
+#: LYMessages.c:466
+msgid "Authorization info cleared."
+msgstr "Autorizaèní informace smazány."
+
+#: LYMessages.c:467
+msgid "Authorization failed. Retry?"
+msgstr "Autorizace se nezdaøila. Nový pokus?"
+
+#: LYMessages.c:468
+msgid "cgi support has been disabled."
+msgstr "podpora cgi byla vypnuta správcem systému"
+
+#. #define CGI_NOT_COMPILED
+#: LYMessages.c:470
+msgid "Lynxcgi capabilities are not compiled into this version."
+msgstr "Podpora pro spou¹tìní cgi byla vypnuta pøi pøekladu programu."
+
+#: LYMessages.c:471
+#, c-format
+msgid "Sorry, no known way of converting %s to %s."
+msgstr "Není znám zpùsob jak pøevést %s na %s."
+
+#: LYMessages.c:472
+msgid "Unable to set up connection."
+msgstr "Spojení nelze navázat."
+
+#: LYMessages.c:473
+msgid "Unable to make connection"
+msgstr "Spojení nelze navázat."
+
+#. #define MALFORMED_EXEC_REQUEST
+#: LYMessages.c:475
+msgid "Executable link rejected due to malformed request."
+msgstr "Chybný po¾adavek na spu¹tìní programu."
+
+#. #define BADCHAR_IN_EXEC_LINK
+#: LYMessages.c:477
+#, c-format
+msgid "Executable link rejected due to `%c' character."
+msgstr "Odkaz na program obsahuje chybný znak `%c'."
+
+#. #define RELPATH_IN_EXEC_LINK
+#: LYMessages.c:479
+msgid "Executable link rejected due to relative path string ('../')."
+msgstr "Odkaz na program nesmí být relativní ('../')'."
+
+#. #define BADLOCPATH_IN_EXEC_LINK
+#: LYMessages.c:481
+msgid "Executable link rejected due to location or path."
+msgstr "Odkaz na program odmítnut kvùli umístìní èi názvu cesty."
+
+#: LYMessages.c:482
+msgid "Mail access is disabled!"
+msgstr "Po¹ta je zakázána!"
+
+#. #define ACCESS_ONLY_LOCALHOST
+#: LYMessages.c:484
+msgid "Only files and servers on the local host can be accessed."
+msgstr "Pøístup je povolen pouze k místním souborùm a slu¾bám."
+
+#: LYMessages.c:485
+msgid "Telnet access is disabled!"
+msgstr "Pou¾ití telnetu je zakázáno!"
+
+#. #define TELNET_PORT_SPECS_DISABLED
+#: LYMessages.c:487
+msgid "Telnet port specifications are disabled."
+msgstr "Je zakázáno uvádìt port u telnetu."
+
+#: LYMessages.c:488
+msgid "USENET news access is disabled!"
+msgstr "Pøístup do diskuzních skupin je zakázán!"
+
+#: LYMessages.c:489
+msgid "Rlogin access is disabled!"
+msgstr "Pou¾ití rlogin je zakázáno!"
+
+#: LYMessages.c:490
+msgid "Ftp access is disabled!"
+msgstr "Pou¾ití FTP je zakázáno!"
+
+#: LYMessages.c:491
+msgid "There are no references from this document."
+msgstr "Tento dokument neobsahuje ¾ádné odkazy."
+
+#: LYMessages.c:492
+msgid "There are only hidden links from this document."
+msgstr "Tento dokument obsahuje pouze skryté odkazy."
+
+#: LYMessages.c:494
+msgid "Unable to open command file."
+msgstr "Soubor s pøíkazy nelze otevøít."
+
+#: LYMessages.c:496
+msgid "News Post Cancelled!!!"
+msgstr "Odeslání pøíspìvku do diskuzních skupin ZRU©ENO!!!"
+
+#. #define SPAWNING_EDITOR_FOR_NEWS
+#: LYMessages.c:498
+msgid "Spawning your selected editor to edit news message"
+msgstr "Spou¹tím editor pro editaci diskuzního pøíspìvku."
+
+#: LYMessages.c:499
+msgid "Post this message?"
+msgstr "Odeslat tuto zprávu?"
+
+#: LYMessages.c:500
+#, c-format
+msgid "Append '%s'?"
+msgstr "Pøipojit '%s'?"
+
+#: LYMessages.c:501
+msgid "Posting to newsgroup(s)..."
+msgstr "Zasílám do diskuzních skupin..."
+
+#: LYMessages.c:503
+msgid "*** You have unread mail. ***"
+msgstr "*** Máte nepøeètenou po¹tu. ***"
+
+#: LYMessages.c:505
+msgid "*** You have mail. ***"
+msgstr "*** Máte po¹tu. ***"
+
+#: LYMessages.c:507
+msgid "*** You have new mail. ***"
+msgstr "*** Máte novou po¹tu. ***"
+
+#: LYMessages.c:508
+msgid "File insert cancelled!!!"
+msgstr "Po¾adavek na vlo¾ení souboru byl zru¹en!!!"
+
+#: LYMessages.c:509
+msgid "Not enough memory for file!"
+msgstr "Pøi ètení souboru zkratek do¹la pamì»!"
+
+#: LYMessages.c:510
+msgid "Can't open file for reading."
+msgstr "Soubor pro dekompresi nelze otevøít!"
+
+#: LYMessages.c:511
+msgid "File does not exist."
+msgstr "Soubor neexistuje."
+
+#: LYMessages.c:512
+msgid "File does not exist - reenter or cancel:"
+msgstr "Soubor neexistuje. Zadejte jiný, èi zru¹te:"
+
+#: LYMessages.c:513
+msgid "File is not readable."
+msgstr "Soubor je neèitelný."
+
+#: LYMessages.c:514
+msgid "File is not readable - reenter or cancel:"
+msgstr "Soubor je neèitelný. Zadejte jiný, èi zru¹te:"
+
+#: LYMessages.c:515
+msgid "Nothing to insert - file is 0-length."
+msgstr "Není co vlo¾it - soubor má nulovou délku."
+
+#: LYMessages.c:516
+msgid "Save request cancelled!!!"
+msgstr "Po¾adavek na ulo¾ení byl zru¹en!!!"
+
+#: LYMessages.c:517
+msgid "Mail request cancelled!!!"
+msgstr "Po¾adavek na odeslání po¹ty byl zru¹en!!!"
+
+#. #define CONFIRM_MAIL_SOURCE_PREPARSED
+#: LYMessages.c:519
+msgid "Viewing preparsed source. Are you sure you want to mail it?"
+msgstr "Zobrazuji pøedzpracovaný zdrojový kód. Opravdu jej chcete poslat po¹tou?"
+
+#: LYMessages.c:520
+msgid "Please wait..."
+msgstr "Okam¾ik, prosím..."
+
+#: LYMessages.c:521
+msgid "Mailing file. Please wait..."
+msgstr "Posílám soubor po¹tou. Okam¾ik, prosím..."
+
+#: LYMessages.c:522
+msgid "ERROR - Unable to mail file"
+msgstr "CHYBA - Soubor nelze po¹tou odeslat."
+
+#. #define CONFIRM_LONG_SCREEN_PRINT
+#: LYMessages.c:524
+#, c-format
+msgid "File is %d screens long. Are you sure you want to print?"
+msgstr "Délka souboru v obrazovkách je %d. Opravdu jej chcete vytisknout?"
+
+#: LYMessages.c:525
+msgid "Print request cancelled!!!"
+msgstr "Po¾adavek na tisk byl zru¹en!!!"
+
+#: LYMessages.c:526
+msgid "Press <return> to begin: "
+msgstr "Zahajte stisknutím <return>: "
+
+#: LYMessages.c:527
+msgid "Press <return> to finish: "
+msgstr "Ukonèete stisknutím <return>: "
+
+#. #define CONFIRM_LONG_PAGE_PRINT
+#: LYMessages.c:529
+#, c-format
+msgid "File is %d pages long. Are you sure you want to print?"
+msgstr "Délka souboru ve stranách je %d. Opravdu jej chcete vytisknout?"
+
+#. #define CHECK_PRINTER
+#: LYMessages.c:531
+msgid "Be sure your printer is on-line. Press <return> to start printing:"
+msgstr "Ujistìte se, ¾e tiskárna je zapnuta. Tisk zahajte stisknutím <return>:"
+
+#: LYMessages.c:532
+msgid "ERROR - Unable to allocate file space!!!"
+msgstr "CHYBA - není dostatek místa pro soubor!!!"
+
+#: LYMessages.c:533
+msgid "Unable to open tempfile"
+msgstr "Doèasný soubor nelze otevøít."
+
+#: LYMessages.c:534
+msgid "Unable to open print options file"
+msgstr "Soubor s menu voleb tisku nelze otevøít."
+
+#: LYMessages.c:535
+msgid "Printing file. Please wait..."
+msgstr "Tisknu soubor. Okam¾ik, prosím..."
+
+#: LYMessages.c:536
+msgid "Please enter a valid internet mail address: "
+msgstr "Zadejte platnou adresu elektronické po¹ty: "
+
+#: LYMessages.c:537
+msgid "ERROR! - printer is misconfigured!"
+msgstr "CHYBA! - tiskárna je ¹patnì nastavena!"
+
+#: LYMessages.c:538
+msgid "Image map from POST response not available!"
+msgstr "Klikací mapa z odpovìdi na POST není dostupná!"
+
+#: LYMessages.c:539
+msgid "Misdirected client-side image MAP request!"
+msgstr "Chybnì cílený po¾adavek z klikací mapy!"
+
+#: LYMessages.c:540
+msgid "Client-side image MAP is not accessible!"
+msgstr "Klientská klikací mapa není pøístupná!"
+
+#: LYMessages.c:541
+msgid "No client-side image MAPs are available!"
+msgstr "Není dostupná ¾ádná klientská klikací mapa!"
+
+#: LYMessages.c:542
+msgid "Client-side image MAP is not available!"
+msgstr "Klientská klikací mapa není dostupná!"
+
+#. #define OPTION_SCREEN_NEEDS_24
+#: LYMessages.c:545
+msgid "Screen height must be at least 24 lines for the Options menu!"
+msgstr "Konfiguraèní menu potøebuje obrazovku o alespoò 24 øádcích!"
+
+#. #define OPTION_SCREEN_NEEDS_23
+#: LYMessages.c:547
+msgid "Screen height must be at least 23 lines for the Options menu!"
+msgstr "Konfiguraèní menu potøebuje obrazovku o alespoò 23 øádcích!"
+
+#. #define OPTION_SCREEN_NEEDS_22
+#: LYMessages.c:549
+msgid "Screen height must be at least 22 lines for the Options menu!"
+msgstr "Konfiguraèní menu potøebuje obrazovku o alespoò 23 øádcích!"
+
+#: LYMessages.c:551
+msgid "That key requires Advanced User mode."
+msgstr "Tato klávesa funguje pouze v re¾imu pro pokroèilé u¾ivatele."
+
+#: LYMessages.c:552
+#, c-format
+msgid "Content-type: %s"
+msgstr "Content-type: %s"
+
+#: LYMessages.c:553
+msgid "Command: "
+msgstr "Pøíkaz: "
+
+#: LYMessages.c:554
+msgid "Unknown or ambiguous command"
+msgstr ""
+
+#: LYMessages.c:555
+msgid " Version "
+msgstr " Verze "
+
+#: LYMessages.c:556
+msgid " first"
+msgstr " jako první."
+
+#: LYMessages.c:557
+msgid ", guessing..."
+msgstr ", hádám..."
+
+#: LYMessages.c:558
+msgid "Permissions for "
+msgstr "Pøístupová práva pro "
+
+#: LYMessages.c:559
+msgid "Select "
+msgstr "Zvolte "
+
+#: LYMessages.c:560
+msgid "capital letter"
+msgstr "velké písmeno"
+
+#: LYMessages.c:561
+msgid " of option line,"
+msgstr " z volby,"
+
+#: LYMessages.c:562
+msgid " to save,"
+msgstr " pro ulo¾ení,"
+
+#: LYMessages.c:563
+msgid " to "
+msgstr " do "
+
+#: LYMessages.c:564
+msgid " or "
+msgstr " èi "
+
+#: LYMessages.c:565
+msgid " index"
+msgstr " rejstøík"
+
+#: LYMessages.c:566
+msgid " to return to Lynx."
+msgstr " pro návrat do programu Lynx."
+
+#: LYMessages.c:567
+msgid "Accept Changes"
+msgstr "Pøijmout zmìny"
+
+#: LYMessages.c:568
+msgid "Reset Changes"
+msgstr "Zru¹it zmìny"
+
+#: LYMessages.c:569
+msgid "Left Arrow cancels changes"
+msgstr "©ipka vlevo zru¹í zmìny"
+
+#: LYMessages.c:570
+msgid "Save options to disk"
+msgstr "Ulo¾it konfiguraci na disk"
+
+#: LYMessages.c:571
+msgid "Hit RETURN to accept entered data."
+msgstr "Stisknìte RETURN pro pøijetí údajù."
+
+#. #define ACCEPT_DATA_OR_DEFAULT
+#: LYMessages.c:573
+msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
+msgstr "Stisknìte RETURN pro pøijetí údajù. Smazáním vyvoláte implicitní nastavení."
+
+#: LYMessages.c:574
+msgid "Value accepted!"
+msgstr "Hodnota pøijmuta!"
+
+#. #define VALUE_ACCEPTED_WARNING_X
+#: LYMessages.c:576
+msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
+msgstr "Hodnota pøijmuta! -- VAROVÁNÍ: Lynx je nastaven pro XWINDOWS!"
+
+#. #define VALUE_ACCEPTED_WARNING_NONX
+#: LYMessages.c:578
+msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
+msgstr "Hodnota pøijmuta! -- VAROVÁNÍ: Lynx není nastaven pro XWINDOWS!"
+
+#: LYMessages.c:579
+msgid "You are not allowed to change which editor to use!"
+msgstr "Nemáte oprávnìní mìnit editor!"
+
+#: LYMessages.c:580
+msgid "Failed to set DISPLAY variable!"
+msgstr "Promìnnou DISPLAY se nepodaøilo nastavit!"
+
+#: LYMessages.c:581
+msgid "Failed to clear DISPLAY variable!"
+msgstr "Promìnnou DISPLAY se nepodaøilo nastavit!"
+
+#. #define BOOKMARK_CHANGE_DISALLOWED
+#: LYMessages.c:583
+msgid "You are not allowed to change the bookmark file!"
+msgstr "Nemáte oprávnìní mìnit soubor zálo¾ek!"
+
+#: LYMessages.c:584
+msgid "Terminal does not support color"
+msgstr "Terminál nepodporuje barvy."
+
+#: LYMessages.c:585
+#, c-format
+msgid "Your '%s' terminal does not support color."
+msgstr "Terminál '%s' nepodporuje barvy."
+
+#: LYMessages.c:586
+msgid "Access to dot files is disabled!"
+msgstr "Pøístup k teèkovým souborùm je zakázán!"
+
+#. #define UA_NO_LYNX_WARNING
+#: LYMessages.c:588
+msgid "User-Agent string does not contain \"Lynx\" or \"L_y_n_x\""
+msgstr ""
+
+#. #define UA_PLEASE_USE_LYNX
+#: LYMessages.c:590
+msgid "Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional deception!"
+msgstr ""
+
+#. #define UA_CHANGE_DISABLED
+#: LYMessages.c:592
+msgid "Changing of the User-Agent string is disabled!"
+msgstr ""
+
+#. #define CHANGE_OF_SETTING_DISALLOWED
+#: LYMessages.c:594
+msgid "You are not allowed to change this setting."
+msgstr "Nemáte oprávnìní mìnit tuto volbu."
+
+#: LYMessages.c:595
+msgid "Saving Options..."
+msgstr "Ukládám konfiguraci..."
+
+#: LYMessages.c:596
+msgid "Options saved!"
+msgstr "Konfigurace ulo¾ena!"
+
+#: LYMessages.c:597
+msgid "Unable to save Options!"
+msgstr "Konfiguraci nelze ulo¾it!"
+
+#: LYMessages.c:598
+msgid " 'r' to return to Lynx "
+msgstr " 'r' pro návrat do programu Lynx"
+
+#: LYMessages.c:599
+msgid " '>' to save, or 'r' to return to Lynx "
+msgstr "'>' pro ulo¾ení èi 'r' pro návrat do programu Lynx"
+
+#. #define ANY_KEY_CHANGE_RET_ACCEPT
+#: LYMessages.c:601
+msgid "Hit any key to change value; RETURN to accept."
+msgstr "Stisknìte jakoukoli klávesu pro zmìnu hodnoty; RETURN pro její pøijetí."
+
+#: LYMessages.c:602
+msgid "Error uncompressing temporary file!"
+msgstr "Chyba pøi dekompresi doèasného souboru!"
+
+#: LYMessages.c:603
+msgid "Unsupported URL scheme!"
+msgstr "Nepodporovaný typ URL!"
+
+#: LYMessages.c:604
+msgid "Unsupported data: URL! Use SHOWINFO, for now."
+msgstr "Nepodporované 'data:' URL! Pou¾ijte SHOWINFO."
+
+#: LYMessages.c:605
+msgid "Redirection limit of 10 URL's reached."
+msgstr "Maximální poèet pøesmìrování (10 URL) byl dosa¾en."
+
+#: LYMessages.c:606
+msgid "Illegal redirection URL received from server!"
+msgstr "Server zaslal chybné URL pro pøesmìrování!"
+
+#. #define SERVER_ASKED_FOR_REDIRECTION
+#: LYMessages.c:608
+#, c-format
+msgid "Server asked for %d redirection of POST content to"
+msgstr "Server po¾aduje %d pøesmìrování POST obsahu na"
+
+#: LYMessages.c:611
+msgid "P)roceed, use G)ET or C)ancel "
+msgstr "P)okraèovat, pou¾ít G)ET èi C>Zru¹it"
+
+#: LYMessages.c:612
+msgid "P)roceed, or C)ancel "
+msgstr "P)okraèovat èi C>Zru¹it "
+
+#. #define ADVANCED_POST_GET_REDIRECT
+#: LYMessages.c:614
+msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
+msgstr "Pøesmìrování POST obsahu. P)okraèovat, zobrazit U)RL, pou¾ít G)ET èi C>Zru¹it"
+
+#. #define ADVANCED_POST_REDIRECT
+#: LYMessages.c:616
+msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
+msgstr "Pøesmìrování POST obsahu. P)okraèovat, zobrazit U>RL èi C>Zru¹it"
+
+#. #define CONFIRM_POST_RESUBMISSION
+#: LYMessages.c:618
+msgid "Document from Form with POST content. Resubmit?"
+msgstr "Dokument z formuláøe s POST obsahem? Odeslat znovu?"
+
+#. #define CONFIRM_POST_RESUBMISSION_TO
+#: LYMessages.c:620
+#, c-format
+msgid "Resubmit POST content to %s ?"
+msgstr "Odeslat znovu POST obsah na %s?"
+
+#. #define CONFIRM_POST_LIST_RELOAD
+#: LYMessages.c:622
+#, c-format
+msgid "List from document with POST data. Reload %s ?"
+msgstr "Seznam z dokumentu s POST obsahem? Naèíst %s znovu?"
+
+#. #define CONFIRM_POST_DOC_HEAD
+#: LYMessages.c:624
+msgid "Document from POST action, HEAD may not be understood. Proceed?"
+msgstr "Dokument vznikl z POST akce. Hlavièka nemusí být správnì zpracována. Pokraèovat?"
+
+#. #define CONFIRM_POST_LINK_HEAD
+#: LYMessages.c:626
+msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
+msgstr "Akce formuláøe pou¾ívá POST. Hlavièka nemusí být správnì zpracována. Pokraèovat?"
+
+#: LYMessages.c:627
+msgid "Proceed without a username and password?"
+msgstr "Pokraèovat bez ovìøení u¾ivatelským jménem a heslem?"
+
+#: LYMessages.c:628
+#, c-format
+msgid "Proceed (%s)?"
+msgstr "Pokraèovat (%s)?"
+
+#: LYMessages.c:629
+msgid "Cannot POST to this host."
+msgstr "Na tento poèítaè nelze data metodou POST odeslat."
+
+#: LYMessages.c:630
+msgid "POST not supported for this URL - ignoring POST data!"
+msgstr "Pro toto URL není metoda POST podporována - ignoruji POST data!"
+
+#: LYMessages.c:631
+msgid "Discarding POST data..."
+msgstr "Zahazuji POST data..."
+
+#: LYMessages.c:632
+msgid "Document will not be reloaded!"
+msgstr "Dokument nebude znovu naèten!"
+
+#: LYMessages.c:633
+msgid "Location: "
+msgstr "Umístìní: "
+
+#: LYMessages.c:634
+#, c-format
+msgid "'%s' not found!"
+msgstr "'%s' nebylo nalezeno!"
+
+#: LYMessages.c:635
+msgid "Default Bookmark File"
+msgstr "Implicitní soubor zálo¾ek"
+
+#: LYMessages.c:636
+msgid "Screen too small! (8x35 min)"
+msgstr "Obrazovka je pøíli¹ malá! (alespoò 8x35)"
+
+#: LYMessages.c:637
+msgid "Select destination or ^G to Cancel: "
+msgstr "Zvolte cíl èi zru¹te pomocí ^G: "
+
+#. #define MULTIBOOKMARKS_SELECT
+#: LYMessages.c:639
+msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
+msgstr "Zvolte zálo¾ku, '=' pro menu èi ^G pro zru¹ení: "
+
+#. #define MULTIBOOKMARKS_SELF
+#: LYMessages.c:641
+msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
+msgstr "L>Duplikovat zálo¾ku v tomto souboru èi C>Zru¹it? (l,c): "
+
+#: LYMessages.c:642
+msgid "Multiple bookmark support is not available."
+msgstr "Dìlené zálo¾ky nejsou podporovány."
+
+#: LYMessages.c:643
+#, c-format
+msgid " Select Bookmark (screen %d of %d)"
+msgstr " Zvolte zálo¾ku (obrazovka %d/%d)"
+
+#: LYMessages.c:644
+msgid " Select Bookmark"
+msgstr " Zvolte zálo¾ku"
+
+#. #define MULTIBOOKMARKS_EHEAD_MASK
+#: LYMessages.c:646
+#, c-format
+msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
+msgstr "Nastavení podsouborù zálo¾ek a jejich popisu (%d/2)"
+
+#. #define MULTIBOOKMARKS_EHEAD
+#: LYMessages.c:648
+msgid " Editing Bookmark DESCRIPTION and FILEPATH"
+msgstr " Nastavení podsouborù zálo¾ek a jejich popisu"
+
+#: LYMessages.c:649
+msgid "Letter: "
+msgstr "Písmeno: "
+
+#. #define USE_PATH_OFF_HOME
+#: LYMessages.c:652
+msgid "Use a filepath off your login directory in SHELL syntax!"
+msgstr "Pou¾ijte jméno cesty z pøihla¹ovacího adresáøe a v syntaxi SHELLU!"
+
+#: LYMessages.c:654
+msgid "Use a filepath off your home directory!"
+msgstr "Pou¾ijte jméno cesty z domácího adresáøe!"
+
+#. #define MAXLINKS_REACHED
+#: LYMessages.c:657
+msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
+msgstr "Maximální poèet odkazù na stránku dosa¾en! Pou¾ijte posun o 1/2 strany èi 2 øádky."
+
+#. #define MAXHIST_REACHED
+#: LYMessages.c:659
+msgid "History List maximum reached! Document not pushed."
+msgstr "Maximální velikost seznamu historie dosa¾ena! Dokument nebyl zaznamenán."
+
+#: LYMessages.c:660
+msgid "No previously visited links available!"
+msgstr "®ádné nav¹tívené odkazy nejsou k dispozici!"
+
+#: LYMessages.c:661
+msgid "Memory exhausted! Program aborted!"
+msgstr "Do¹la pamì»! Program pøeru¹en!"
+
+#: LYMessages.c:662
+msgid "Memory exhausted! Aborting..."
+msgstr "Do¹la pamì»! Pøeru¹uji..."
+
+#: LYMessages.c:663
+msgid "Not enough memory!"
+msgstr ""
+
+#: LYMessages.c:664
+msgid "Directory/File Manager not available"
+msgstr "Správce souborù není k dispozici."
+
+#: LYMessages.c:665
+msgid "HREF in BASE tag is not an absolute URL."
+msgstr "Cílové URL v BASE znaèce není absolutní."
+
+#: LYMessages.c:666
+msgid "Location URL is not absolute."
+msgstr "URL není absolutní."
+
+#: LYMessages.c:667
+msgid "Refresh URL is not absolute."
+msgstr "Obnovovací URL není absolutní."
+
+#. #define SENDING_MESSAGE_WITH_BODY_TO
+#: LYMessages.c:669
+msgid ""
+"You are sending a message with body to:\n"
+" "
+msgstr ""
+"Posíláte zprávu na:\n"
+" "
+
+#: LYMessages.c:670
+msgid ""
+"You are sending a comment to:\n"
+" "
+msgstr ""
+"Posíláte komentáø na:\n"
+" "
+
+#: LYMessages.c:671
+msgid ""
+"\n"
+" With copy to:\n"
+" "
+msgstr ""
+"\n"
+" S kopií na:\n"
+" "
+
+#: LYMessages.c:672
+msgid ""
+"\n"
+" With copies to:\n"
+" "
+msgstr ""
+"\n"
+" S kopiemi na:\n"
+" "
+
+#. #define CTRL_G_TO_CANCEL_SEND
+#: LYMessages.c:674
+msgid ""
+"\n"
+"\n"
+"Use Ctrl-G to cancel if you do not want to send a message\n"
+msgstr ""
+"\n"
+"\n"
+"Odeslání zprávy mù¾ete zru¹it pomocí Ctrl-G.\n"
+
+#. #define ENTER_NAME_OR_BLANK
+#: LYMessages.c:676
+msgid ""
+"\n"
+" Please enter your name, or leave it blank to remain anonymous\n"
+msgstr ""
+"\n"
+" Zadejte va¹e jméno, nebo ponechte prázdné, aby jste zùstal v anonymitì.\n"
+
+#. #define ENTER_MAIL_ADDRESS_OR_OTHER
+#: LYMessages.c:678
+msgid ""
+"\n"
+" Please enter a mail address or some other\n"
+msgstr ""
+"\n"
+"Pokud chcete dostat odpovìï, udejte adresu\n"
+
+#. #define MEANS_TO_CONTACT_FOR_RESPONSE
+#: LYMessages.c:680
+msgid " means to contact you, if you desire a response.\n"
+msgstr "elektronické po¹ty èi jiný kontakt na vás.\n"
+
+#: LYMessages.c:681
+msgid ""
+"\n"
+" Please enter a subject line.\n"
+msgstr ""
+"\n"
+" Zadejte pøedmìt.\n"
+
+#. #define ENTER_ADDRESS_FOR_CC
+#: LYMessages.c:683
+msgid ""
+"\n"
+" Enter a mail address for a CC of your message.\n"
+msgstr ""
+"\n"
+" Zadejte adresu pro odeslání kopie této zprávy.\n"
+
+#: LYMessages.c:684
+msgid " (Leave blank if you don't want a copy.)\n"
+msgstr " (Ponechte prázdné, pokud kopie nechcete poslat.)\n"
+
+#: LYMessages.c:685
+msgid ""
+"\n"
+" Please review the message body:\n"
+"\n"
+msgstr ""
+"\n"
+" Zkontrolujte tìlo zprávy:\n"
+"\n"
+
+#: LYMessages.c:686
+msgid ""
+"\n"
+"Press RETURN to continue: "
+msgstr ""
+"\n"
+"Stisknìte RETURN pro pokraèování: "
+
+#: LYMessages.c:687
+msgid ""
+"\n"
+"Press RETURN to clean up: "
+msgstr ""
+"\n"
+"Stisknìte RETURN pro úklid: "
+
+#: LYMessages.c:688
+msgid " Use Control-U to erase the default.\n"
+msgstr " Pou¾ijte Control-U pro smazání implicitních hodnot.\n"
+
+#: LYMessages.c:689
+msgid ""
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+" Zadejte text va¹í zprávy."
+
+#. #define ENTER_PERIOD_WHEN_DONE_A
+#: LYMessages.c:691 src/LYNews.c:380
+msgid ""
+"\n"
+" When you are done, press enter and put a single period (.)"
+msgstr ""
+"\n"
+" A¾ budete hotov, stisknìte enter a napi¹te jednu teèku (.)"
+
+#. #define ENTER_PERIOD_WHEN_DONE_B
+#: LYMessages.c:693 src/LYNews.c:381
+msgid ""
+"\n"
+" on a line and press enter again."
+msgstr ""
+"\n"
+" na zaèátek øádku a stisknìte opìt enter."
+
+#. Cookies messages
+#. #define ADVANCED_COOKIE_CONFIRMATION
+#: LYMessages.c:697
+#, c-format
+msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
+msgstr "%s cookie: %.*s=%.*s Pøijmout? (Y/N/Always/neVer)"
+
+#. #define INVALID_COOKIE_DOMAIN_CONFIRMATION
+#: LYMessages.c:699
+#, c-format
+msgid "Accept invalid cookie domain=%s for '%s'?"
+msgstr "Pøijmout chybnou cookie doménu (%s) pro '%s'?"
+
+#. #define INVALID_COOKIE_PATH_CONFIRMATION
+#: LYMessages.c:701
+#, c-format
+msgid "Accept invalid cookie path=%s as a prefix of '%s'?"
+msgstr "Pøijmout chybnou cookie cestu (%s) jako prefix '%s'?"
+
+#: LYMessages.c:702
+msgid "Allowing this cookie."
+msgstr "Cookie pøijmuto."
+
+#: LYMessages.c:703
+msgid "Rejecting this cookie."
+msgstr "Cookie zamítnuto."
+
+#: LYMessages.c:704
+msgid "The Cookie Jar is empty."
+msgstr "Sklad cookies je prázdný."
+
+#. #define ACTIVATE_TO_GOBBLE
+#: LYMessages.c:706
+msgid "Activate links to gobble up cookies or entire domains,"
+msgstr ""
+
+#: LYMessages.c:707
+msgid "or to change a domain's 'allow' setting."
+msgstr ""
+
+#: LYMessages.c:708
+msgid "(Cookies never allowed.)"
+msgstr "(Cookies zakázány)"
+
+#: LYMessages.c:709
+msgid "(Cookies always allowed.)"
+msgstr "(Cookies v¾dy povoleny)"
+
+#: LYMessages.c:710
+msgid "(Cookies allowed via prompt.)"
+msgstr "(Pøijetí cookies musí potvrdit u¾ivatel.)"
+
+#: LYMessages.c:711
+msgid "(Persistent Cookies.)"
+msgstr "(Trvalé cookies)"
+
+#: LYMessages.c:712
+msgid "(No title.)"
+msgstr "(®ádný titulek)"
+
+#: LYMessages.c:713
+msgid "(No name.)"
+msgstr "(®ádné jméno)"
+
+#: LYMessages.c:714
+msgid "(No value.)"
+msgstr "(®ádná hodnota)"
+
+#: LYMessages.c:715
+msgid "None"
+msgstr "Nic"
+
+#: LYMessages.c:716
+msgid "(End of session.)"
+msgstr "(Konec sezení)"
+
+#: LYMessages.c:717
+msgid "Delete this cookie?"
+msgstr "Smazat toto cookie?"
+
+#: LYMessages.c:718
+msgid "The cookie has been eaten!"
+msgstr "Cookie bylo smazáno!"
+
+#: LYMessages.c:719
+msgid "Delete this empty domain?"
+msgstr "Smazat tuto prázdnou doménu?"
+
+#: LYMessages.c:720
+msgid "The domain has been eaten!"
+msgstr "Doména byla smazána!"
+
+#. #define DELETE_COOKIES_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:722
+msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D>Smazat cookies z domény, pøijmout A>V¾dy/P)o potvrzení/V>Nikdy èi C>Zru¹it?"
+
+#. #define DELETE_DOMAIN_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:724
+msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D>Smazat doménu, pøijmout A>V¾dy/P)o potvrzení/V>Nikdy èi C>Zru¹it?"
+
+#: LYMessages.c:725
+msgid "All cookies in the domain have been eaten!"
+msgstr "V¹echna cookie v této doménì byly smazána!"
+
+#: LYMessages.c:726
+#, c-format
+msgid "'A'lways allowing from domain '%s'."
+msgstr "'A'V¾dy pøijímám z domény '%s'."
+
+#: LYMessages.c:727
+#, c-format
+msgid "ne'V'er allowing from domain '%s'."
+msgstr "'V'Nikdy nepøijímám z domény '%s'."
+
+#: LYMessages.c:728
+#, c-format
+msgid "'P'rompting to allow from domain '%s'."
+msgstr "Pøijetí z domény '%s' musí 'p'otvrdit u¾ivatel."
+
+#: LYMessages.c:729
+msgid "Delete all cookies in this domain?"
+msgstr "Smazat v¹echny cookies v této doménì?"
+
+#: LYMessages.c:730
+msgid "All of the cookies in the jar have been eaten!"
+msgstr "Ùlo¾na cookies byla vyprázdnìna!"
+
+#: LYMessages.c:732
+msgid "Port 19 not permitted in URLs."
+msgstr "URL nesmí obsahovat port 19."
+
+#: LYMessages.c:733
+msgid "Port 25 not permitted in URLs."
+msgstr "URL nesmí obsahovat port 25."
+
+#: LYMessages.c:734
+#, c-format
+msgid "Port %lu not permitted in URLs."
+msgstr "URL nesmí obsahovat port %lu."
+
+#: LYMessages.c:735
+msgid "URL has a bad port field."
+msgstr "URL obsahuje chybný port."
+
+#: LYMessages.c:736
+msgid "Maximum nesting of HTML elements exceeded."
+msgstr "Maximální povolený poèet vnoøení HTML prvkù pøekroèen."
+
+#: LYMessages.c:737
+msgid "Bad partial reference! Stripping lead dots."
+msgstr "Chybný relativní odkaz! Odtrhuji úvodní teèky."
+
+#: LYMessages.c:738
+msgid "Trace Log open failed. Trace off!"
+msgstr "Nepodaøilo se otevøít soubor pro záznam èinnosti. Sledování vypnuto!"
+
+#: LYMessages.c:739
+msgid "Lynx Trace Log"
+msgstr "Záznam èinnosti programu Lynx"
+
+#: LYMessages.c:740
+msgid "No trace log has been started for this session."
+msgstr "Pro toto sezení nebylo sledování spu¹tìno."
+
+#. #define MAX_TEMPCOUNT_REACHED
+#: LYMessages.c:742
+msgid "The maximum temporary file count has been reached!"
+msgstr "Maximální povolený poèet doèasných souborù pøekroèen."
+
+#. #define FORM_VALUE_TOO_LONG
+#: LYMessages.c:744
+msgid "Form field value exceeds buffer length! Trim the tail."
+msgstr "Hodnota pole formuláøe pøesahuje délku bufferu! Zkra»te ji."
+
+#. #define FORM_TAIL_COMBINED_WITH_HEAD
+#: LYMessages.c:746
+msgid "Modified tail combined with head of form field value."
+msgstr "Zmìnìný konec hodnoty pole formuláøe byl spojen s jejím zaèátkem."
+
+#. HTFile.c
+#: LYMessages.c:749
+msgid "Directory"
+msgstr "Adresáø"
+
+#: LYMessages.c:750
+msgid "Directory browsing is not allowed."
+msgstr "Procházení adresáøù je zakázáno."
+
+#: LYMessages.c:751
+msgid "Selective access is not enabled for this directory"
+msgstr "Selektivní pøístup k tomuto adresáøi není zapnut."
+
+#: LYMessages.c:752
+msgid "Multiformat: directory scan failed."
+msgstr "Multiformat: volání scandir pro adresáø se nezdaøilo"
+
+#: LYMessages.c:753
+msgid "This directory is not readable."
+msgstr "Tento adresáø nelze èíst."
+
+#: LYMessages.c:754
+msgid "Can't access requested file."
+msgstr "Pøístup k po¾adovanému souboru nelze získat."
+
+#: LYMessages.c:755
+msgid "Could not find suitable representation for transmission."
+msgstr "Nelze nalézt vhodný formát dat pro pøenos."
+
+#: LYMessages.c:756
+msgid "Could not open file for decompression!"
+msgstr "Soubor pro dekompresi nelze otevøít!"
+
+#: LYMessages.c:757
+msgid "Files:"
+msgstr "Soubory:"
+
+#: LYMessages.c:758
+msgid "Subdirectories:"
+msgstr "Podadresáøe:"
+
+#: LYMessages.c:759
+msgid " directory"
+msgstr " adresáø"
+
+#: LYMessages.c:760
+msgid "Up to "
+msgstr "O úroveò vý¹e do "
+
+#: LYMessages.c:761
+msgid "Current directory is "
+msgstr "Aktuální adresáø je "
+
+#. HTGopher.c
+#: LYMessages.c:764
+msgid "No response from server!"
+msgstr "Od serveru nepøi¹la odpovìï!"
+
+#: LYMessages.c:765
+msgid "CSO index"
+msgstr "CSO rejstøík"
+
+#: LYMessages.c:766
+msgid ""
+"\n"
+"This is a searchable index of a CSO database.\n"
+msgstr ""
+"\n"
+"Toto je prohledávatelný rejstøík CSO databáze.\n"
+
+#: LYMessages.c:767
+msgid "CSO Search Results"
+msgstr "Výsledky prohledávání CSO"
+
+#: LYMessages.c:768
+#, c-format
+msgid "Seek fail on %s\n"
+msgstr "Posun ukazovátka pro %s selhal\n"
+
+#: LYMessages.c:769
+msgid ""
+"\n"
+"Press the 's' key and enter search keywords.\n"
+msgstr ""
+"\n"
+"Stisknìte klávesu 's' a zadejte hledaná klíèová slova.\n"
+
+#: LYMessages.c:770
+msgid ""
+"\n"
+"This is a searchable Gopher index.\n"
+msgstr ""
+"\n"
+"Toto je prohledávatelný Gopher rejstøík.\n"
+
+#: LYMessages.c:771
+msgid "Gopher index"
+msgstr "Gopher rejstøík"
+
+#: LYMessages.c:772
+msgid "Gopher Menu"
+msgstr "Gopher Menu"
+
+#: LYMessages.c:773
+msgid " Search Results"
+msgstr " Výsledky hledání"
+
+#: LYMessages.c:774
+msgid "Sending CSO/PH request."
+msgstr "Posílám CSO/PH po¾adavek."
+
+#: LYMessages.c:775
+msgid "Sending Gopher request."
+msgstr "Posílám Gopher po¾adavek."
+
+#: LYMessages.c:776
+msgid "CSO/PH request sent; waiting for response."
+msgstr "CSO/PH po¾adavek poslán; èekám na odpovìï."
+
+#: LYMessages.c:777
+msgid "Gopher request sent; waiting for response."
+msgstr "Gopher po¾adavek poslán; èekám na odpovìï."
+
+#: LYMessages.c:778
+msgid ""
+"\n"
+"Please enter search keywords.\n"
+msgstr ""
+"\n"
+"Zadejte hledaná klíèová slova.\n"
+
+#: LYMessages.c:779
+msgid ""
+"\n"
+"The keywords that you enter will allow you to search on a"
+msgstr ""
+"\n"
+"Klíèová slova, která zadáte, vám umo¾ní hledat"
+
+#: LYMessages.c:780
+msgid " person's name in the database.\n"
+msgstr " jméno osoby v databázi.\n"
+
+#. HTNews.c
+#: LYMessages.c:783
+msgid "Connection closed ???"
+msgstr "Spojení uzavøeno ???"
+
+#: LYMessages.c:784
+msgid "Cannot open temporary file for news POST."
+msgstr "Nelze otevøít doèasný soubor pro odeslání diskuzního pøíspìvku."
+
+#: LYMessages.c:785
+msgid "This client does not contain support for posting to news with SSL."
+msgstr "Tento klient nepodporuje zasílání zpráv do diskuzních skupin pøes SSL."
+
+#. HTStyle.c
+#: LYMessages.c:788
+#, c-format
+msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
+msgstr "Styl %d `%s' SGML:%s. Písmo %s %.1f bodù.\n"
+
+#: LYMessages.c:789
+#, c-format
+msgid "\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
+msgstr "\tOdsazení: první=%.0f dal¹í=%.0f, Vý¹ka=%.1f Popis=%.1f\n"
+
+#: LYMessages.c:790
+#, c-format
+msgid "\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
+msgstr "\tZarovnání=%d, %d tabulátorù. (%.0f pøed, %.0f za)\n"
+
+#: LYMessages.c:791
+#, c-format
+msgid "\t\tTab kind=%d at %.0f\n"
+msgstr "\t\tDruh tabulátorù=%d na %.0f\n"
+
+#. HTTP.c
+#: LYMessages.c:794
+msgid "Can't proceed without a username and password."
+msgstr "Bez u¾ivatelského jména a hesla nelze pokraèovat."
+
+#: LYMessages.c:795
+msgid "Can't retry with authorization! Contact the server's WebMaster."
+msgstr "Dal¹í pokus s autorizací není mo¾ný! Kontaktujte pøíslu¹ného webmastera."
+
+#: LYMessages.c:796
+msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
+msgstr "S proxy autorizací není dal¹í pokus mo¾ný! Kontaktujte pøíslu¹ného webmastera."
+
+#: LYMessages.c:797
+msgid "Retrying with proxy authorization information."
+msgstr "Zkou¹im to znovu s proxy autorizací."
+
+#. HTWAIS.c
+#: LYMessages.c:800
+msgid "HTWAIS: Return message too large."
+msgstr "HTWAIS: Odpovìï je pøíli¹ veliká."
+
+#: LYMessages.c:801
+msgid "Enter WAIS query: "
+msgstr "Zadejte WAIS dotaz: "
+
+#. Miscellaneous status
+#: LYMessages.c:804
+msgid "Retrying as HTTP0 request."
+msgstr "Posílám znovu jako HTTP0 po¾adavek."
+
+#: LYMessages.c:805
+#, c-format
+msgid "Transferred %d bytes"
+msgstr "Pøeneseno bajtù: %d"
+
+#: LYMessages.c:806
+msgid "Data transfer complete"
+msgstr "Pøenos dat dokonèen"
+
+#: LYMessages.c:807
+#, c-format
+msgid "Error processing line %d of %s\n"
+msgstr "Chyba pøi zpracování %d. øádku souboru%s\n"
+
+#. Lynx internal page titles
+#: LYMessages.c:810
+msgid "Address List Page"
+msgstr "Seznam adres"
+
+#: LYMessages.c:811
+msgid "Bookmark file"
+msgstr "Soubor se zálo¾kami"
+
+#: LYMessages.c:812
+msgid "Configuration Definitions"
+msgstr "Konfigurace"
+
+#: LYMessages.c:813
+msgid "Cookie Jar"
+msgstr "Sklad cookies"
+
+#: LYMessages.c:814
+msgid "Current Key Map"
+msgstr "Aktuální klávesová mapa"
+
+#: LYMessages.c:815
+msgid "File Management Options"
+msgstr "Nabídka správce souborù"
+
+#: LYMessages.c:816
+msgid "Download Options"
+msgstr "Mo¾nosti stahování"
+
+#: LYMessages.c:817
+msgid "History Page"
+msgstr "Historie"
+
+#: LYMessages.c:818
+msgid "List Page"
+msgstr "Seznam odkazù"
+
+#: LYMessages.c:819
+msgid "Lynx.cfg Information"
+msgstr "Lynx.cfg Informace"
+
+#: LYMessages.c:820
+msgid "Converted Mosaic Hotlist"
+msgstr "Pøevedený 'Hotlist' Mosaicu"
+
+#: LYMessages.c:821
+msgid "Options Menu"
+msgstr "Konfiguraèní menu"
+
+#: LYMessages.c:822
+msgid "File Permission Options"
+msgstr "Menu nastavení práv souboru"
+
+#: LYMessages.c:823
+msgid "Printing Options"
+msgstr "Menu voleb tisku"
+
+#: LYMessages.c:824
+msgid "Information about the current document"
+msgstr "Informace o aktuálním dokumentu"
+
+#: LYMessages.c:825
+msgid "Your recent statusline messages"
+msgstr "Zprávy stavové øádky"
+
+#: LYMessages.c:826
+msgid "Upload Options"
+msgstr "Menu voleb posílání"
+
+#: LYMessages.c:827
+msgid "Visited Links Page"
+msgstr "Nav¹tívené odkazy"
+
+#. CONFIG_DEF_TITLE subtitles
+#: LYMessages.c:830
+msgid "See also"
+msgstr "Viz té¾"
+
+#: LYMessages.c:831
+msgid "your"
+msgstr "vá¹"
+
+#: LYMessages.c:832
+msgid "for runtime options"
+msgstr "pro aktuální konfiguraci"
+
+#: LYMessages.c:833
+msgid "compile time options"
+msgstr "volby zadané pøi pøekladu"
+
+#: LYMessages.c:834
+msgid "latest release"
+msgstr "poslední verze"
+
+#: LYMessages.c:835
+msgid "pre-release version"
+msgstr "vývojová verze"
+
+#: LYMessages.c:836
+msgid "development version"
+msgstr "vývojová verze"
+
+#. #define AUTOCONF_CONFIG_CACHE
+#: LYMessages.c:838
+msgid ""
+"The following data were derived during the automatic configuration/build\n"
+"process of this copy of Lynx. When reporting a bug, please include a copy\n"
+"of this page."
+msgstr ""
+"Následující údaje byly získány pøi automatické konfiguraci a pøekladu této\n"
+"kopie programu Lynx. Pøi oznamování chyby pøilo¾te kopii této stránky."
+
+#. #define AUTOCONF_LYNXCFG_H
+#: LYMessages.c:842
+msgid ""
+"The following data were used as automatically-configured compile-time\n"
+"definitions when this copy of Lynx was built."
+msgstr ""
+"Následující údaje byly získány pøi automatické konfiguraci a pou¾ity pøi\n"
+"pøekladu této kopie programu Lynx."
+
+#. #define DIRED_NOVICELINE
+#: LYMessages.c:847
+msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
+msgstr " C>Vytvoøit D>Stáhnout E)ditovat F>Úplné menu R>Smazat T>Oznaèit U>Poslat \n"
+
+#: LYMessages.c:848
+msgid "Failed to obtain status of current link!"
+msgstr "Nepodaøilo se zjistit status aktuálního odkazu!"
+
+#. #define INVALID_PERMIT_URL
+#: LYMessages.c:851
+msgid "Special URL only valid from current File Permission menu!"
+msgstr "Zvlá¹tní URL je platné pouze z aktuálního menu nastavení práv souboru!"
+
+#: LYMessages.c:855
+msgid "External support is currently disabled."
+msgstr "Spou¹tìní externích programù je nyní zakázáno."
+
+#. new with 2.8.4dev.21
+#: LYMessages.c:859
+#, fuzzy
+msgid "Changing working-directory is currently disabled."
+msgstr "Spou¹tìní je nyní vypnuto."
+
+#: LYMessages.c:860
+#, fuzzy
+msgid "Linewrap OFF!"
+msgstr "Sledování VYPNUTO!"
+
+#: LYMessages.c:861
+msgid "Linewrap ON!"
+msgstr ""
+
+#: LYMessages.c:862
+#, fuzzy
+msgid "Parsing nested-tables toggled OFF! Reloading..."
+msgstr "Pøímý 8bitový èi CJK re¾im VYPNUT! Znovu naèítám..."
+
+#: LYMessages.c:863
+#, fuzzy
+msgid "Parsing nested-tables toggled ON! Reloading..."
+msgstr "Pøímý 8bitový èi CJK re¾im ZAPNUT! Znovu naèítám..."
+
+#: LYMessages.c:864
+msgid "Shifting is disabled while line-wrap is in effect"
+msgstr ""
+
+#: LYMessages.c:865
+#, fuzzy
+msgid "Trace not supported"
+msgstr "Terminál nepodporuje barvy."
+
+#: WWW/Library/Implementation/HTAABrow.c:648
+#, c-format
+msgid "Username for '%s' at %s '%s%s':"
+msgstr "U¾ivatelské jméno pro '%s' na %s '%s%s':"
+
+#: WWW/Library/Implementation/HTAABrow.c:914
+msgid "This client doesn't know how to compose proxy authorization information for scheme"
+msgstr "Tento klient neumí vytvoøit proxy autorizaèní informace pro schéma "
+
+#: WWW/Library/Implementation/HTAABrow.c:989
+msgid "This client doesn't know how to compose authorization information for scheme"
+msgstr "Tento klient neumí vytvoøit autorizaèní informace pro schéma "
+
+#: WWW/Library/Implementation/HTAABrow.c:1097
+#, c-format
+msgid "Invalid header '%s%s%s%s%s'"
+msgstr "Chybná hlavièka '%s%s%s%s%s'"
+
+#: WWW/Library/Implementation/HTAABrow.c:1201
+msgid "Proxy authorization required -- retrying"
+msgstr "Proxy vy¾aduje autorizaci -- zkou¹ím znovu"
+
+#: WWW/Library/Implementation/HTAABrow.c:1260
+msgid "Access without authorization denied -- retrying"
+msgstr "Pøístup není bez autorizace povolen -- zkou¹ím znovu"
+
+#: WWW/Library/Implementation/HTAccess.c:683
+msgid "Access forbidden by rule"
+msgstr "Pøístup odmítnut implicitním pravidlem"
+
+#: WWW/Library/Implementation/HTAccess.c:785
+msgid "Document with POST content not found in cache. Resubmit?"
+msgstr "Dokument s POST obsahem nenalezen v cache. Odeslat znovu?"
+
+#: WWW/Library/Implementation/HTAccess.c:1026 src/GridText.c:8039
+msgid "Loading incomplete."
+msgstr "Nahrávání dokonèeno."
+
+#: WWW/Library/Implementation/HTAccess.c:1056
+msgid "**** HTAccess: socket or file number returned by obsolete load routine!\n"
+msgstr "**** HTAccess: soket èi èíslo souboru vráceno zastaralou load funkcí!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1058
+msgid "**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"
+msgstr "**** HTAccess: Vnitøní chyba programu. Za¹lete oznámení na lynx_dev@sig.net!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1059
+#, c-format
+msgid "**** HTAccess: Status returned was: %d\n"
+msgstr "**** HTAccess: Návratový status: %d\n"
+
+#.
+#. * hack: if we fail in HTAccess.c
+#. * avoid duplicating URL, oh.
+#.
+#: WWW/Library/Implementation/HTAccess.c:1065 src/LYMainLoop.c:7834
+msgid "Can't Access"
+msgstr "Nelze získat pøístup"
+
+#: WWW/Library/Implementation/HTAccess.c:1073
+msgid "Unable to access document."
+msgstr "Nelze získat pøístup k dokumentu."
+
+#: WWW/Library/Implementation/HTFTP.c:756
+#, c-format
+msgid "Enter password for user %s@%s:"
+msgstr "Zadejte heslo pro u¾ivatele %s@%s:"
+
+#: WWW/Library/Implementation/HTFTP.c:784
+msgid "Unable to connect to FTP host."
+msgstr "Nelze navázat spojení s FTP serverem."
+
+#: WWW/Library/Implementation/HTFTP.c:1054
+msgid "close master socket"
+msgstr "zavøít hlavní soket"
+
+#: WWW/Library/Implementation/HTFTP.c:1116
+msgid "socket for master socket"
+msgstr "hlavní soket"
+
+#.
+#. ** It's a symbolic link, does the user care about
+#. ** knowing if it is symbolic? I think so since
+#. ** it might be a directory.
+#.
+#: WWW/Library/Implementation/HTFTP.c:1630 WWW/Library/Implementation/HTFTP.c:2251
+msgid "Symbolic Link"
+msgstr "Symbol. odkaz"
+
+#: WWW/Library/Implementation/HTFTP.c:2612
+msgid "Receiving FTP directory."
+msgstr "Stahuji výpis FTP adresáøe."
+
+#: WWW/Library/Implementation/HTFTP.c:2755
+#, c-format
+msgid "Transferred %d bytes (%5d)"
+msgstr "Pøeneseno bajtù: %d"
+
+#: WWW/Library/Implementation/HTFTP.c:3090
+msgid "connect for data"
+msgstr "datové spojení"
+
+#: WWW/Library/Implementation/HTFTP.c:3690
+msgid "Receiving FTP file."
+msgstr "Stahuji FTP soubor."
+
+#: WWW/Library/Implementation/HTFinger.c:275
+msgid "Could not set up finger connection."
+msgstr "Spojení s finger serverem nelze navázat."
+
+#: WWW/Library/Implementation/HTFinger.c:320
+msgid "Could not load data (no sitename in finger URL)"
+msgstr "Finger URL neobsahuje jméno serveru."
+
+#: WWW/Library/Implementation/HTFinger.c:328
+msgid "Invalid port number - will only use port 79!"
+msgstr "Chybné èíslo portu - pou¾iji pouze port 79!"
+
+#: WWW/Library/Implementation/HTFinger.c:396
+msgid "Could not access finger host."
+msgstr "Spojení s finger serverem nelze navázat."
+
+#: WWW/Library/Implementation/HTFinger.c:407
+msgid "No response from finger server."
+msgstr "Od finger serveru nepøi¹la ¾ádná odpovìï."
+
+#: WWW/Library/Implementation/HTNews.c:372
+#, c-format
+msgid "Username for news host '%s':"
+msgstr "U¾ivatelské jméno na news serveru '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:425
+msgid "Change username?"
+msgstr "Zmìnit u¾ivatelské jméno?"
+
+#: WWW/Library/Implementation/HTNews.c:429
+msgid "Username:"
+msgstr "U¾ivatelské jméno:"
+
+#: WWW/Library/Implementation/HTNews.c:453
+#, c-format
+msgid "Password for news host '%s':"
+msgstr "Heslo na news serveru '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:536
+msgid "Change password?"
+msgstr "Zmìnit heslo?"
+
+#: WWW/Library/Implementation/HTNews.c:1691
+#, c-format
+msgid "No matches for: %s"
+msgstr "%s nic nevyhovuje"
+
+#: WWW/Library/Implementation/HTNews.c:1744
+msgid ""
+"\n"
+"No articles in this group.\n"
+msgstr ""
+"\n"
+"Tato skupina neobsahuje ¾ádné pøíspìvky.\n"
+
+#: WWW/Library/Implementation/HTNews.c:1757
+msgid ""
+"\n"
+"No articles in this range.\n"
+msgstr ""
+"\n"
+"V zadaném intervalu se nenacházejí ¾ádné pøíspìvky.\n"
+
+#.
+#. ** Set window title.
+#.
+#: WWW/Library/Implementation/HTNews.c:1770
+#, c-format
+msgid "%s, Articles %d-%d"
+msgstr "%s, Èlánky %d-%d"
+
+#: WWW/Library/Implementation/HTNews.c:1792
+msgid "Earlier articles"
+msgstr "Pøedchozí pøíspìvky"
+
+#: WWW/Library/Implementation/HTNews.c:1805
+#, c-format
+msgid ""
+"\n"
+"There are about %d articles currently available in %s, IDs as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"Poèet èlánkù v %2$s: %1$d. ID jsou následující:\n"
+"\n"
+
+#: WWW/Library/Implementation/HTNews.c:1865
+msgid "All available articles in "
+msgstr "V¹echny dostupné pøíspìvky v "
+
+#: WWW/Library/Implementation/HTNews.c:2081
+msgid "Later articles"
+msgstr "Pozdìj¹í pøíspìvky"
+
+#: WWW/Library/Implementation/HTNews.c:2105
+msgid "Post to "
+msgstr "Poslat do"
+
+#: WWW/Library/Implementation/HTNews.c:2323
+msgid "This client does not contain support for SNEWS URLs."
+msgstr "Tento klient nepodporuje SNEWS URL."
+
+#: WWW/Library/Implementation/HTNews.c:2531
+msgid "No target for raw text!"
+msgstr "®ádný cíl pro prostý text!"
+
+#: WWW/Library/Implementation/HTNews.c:2561
+msgid "Connecting to NewsHost ..."
+msgstr "Navazuji spojení s news serverem..."
+
+#: WWW/Library/Implementation/HTNews.c:2612
+#, c-format
+msgid "Could not access %s."
+msgstr "S %s nelze navázat spojení."
+
+#: WWW/Library/Implementation/HTNews.c:2712
+#, c-format
+msgid "Can't read news info. News host %.20s responded: %.200s"
+msgstr "Informace o diskuzních skupinách nelze získat. News server %.20s odpovìdìl %.200s"
+
+#: WWW/Library/Implementation/HTNews.c:2716
+#, c-format
+msgid "Can't read news info, empty response from host %s"
+msgstr "Informace o diskuzních skupinách nelze získat. News server odpovìdìl %s"
+
+#.
+#. ** List available newsgroups. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2920
+msgid "Reading list of available newsgroups."
+msgstr "Ètu seznam dostupných diskuzních skupin."
+
+#: WWW/Library/Implementation/HTNews.c:2942
+msgid "Reading list of articles in newsgroup."
+msgstr "Ètu seznam èlánkù v diskuzní skupinì."
+
+#.
+#. ** Get an article from a news group. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2948
+msgid "Reading news article."
+msgstr "Ètu pøíspìvek z diskuzní skupiny."
+
+#: WWW/Library/Implementation/HTNews.c:2978
+msgid "Sorry, could not load requested news."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1233
+msgid "Address has invalid port"
+msgstr "Délka adresy se zdá být chybnou."
+
+#: WWW/Library/Implementation/HTTCP.c:1336
+msgid "Address length looks invalid"
+msgstr "Délka adresy se zdá být chybnou."
+
+#: WWW/Library/Implementation/HTTCP.c:1574 WWW/Library/Implementation/HTTCP.c:1592
+#, c-format
+msgid "Unable to locate remote host %s."
+msgstr "Adresu poèítaèe %s nelze zjistit."
+
+#. Not HTProgress, so warning won't be overwritten
+#. * immediately; but not HTAlert, because typically
+#. * there will be other alerts from the callers. - kw
+#.
+#: WWW/Library/Implementation/HTTCP.c:1589 WWW/Library/Implementation/HTTelnet.c:103
+#, c-format
+msgid "Invalid hostname %s"
+msgstr "Jméno poèítaèe %s je chybné"
+
+#: WWW/Library/Implementation/HTTCP.c:1603
+#, c-format
+msgid "Making %s connection to %s"
+msgstr "Navazuji %s spojení s %s."
+
+#: WWW/Library/Implementation/HTTCP.c:1619
+#, c-format
+msgid "socket failed: family %d addr %s port %s."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1628
+msgid "socket failed."
+msgstr "chyba soketu."
+
+#: WWW/Library/Implementation/HTTCP.c:1648
+msgid "Could not make connection non-blocking."
+msgstr "Soket nelze nastavit jako neblokující."
+
+#: WWW/Library/Implementation/HTTCP.c:1717
+msgid "Connection failed (too many retries)."
+msgstr "Spojení se nepodaøilo navázat na 180 000. pokus."
+
+#: WWW/Library/Implementation/HTTCP.c:1910
+msgid "Could not restore socket to blocking."
+msgstr "Soket nelze nastavit jako blokující."
+
+#: WWW/Library/Implementation/HTTCP.c:1976
+msgid "Socket read failed for 180,000 tries."
+msgstr "180 000 neúspì¹ných pokusù èíst ze soketu."
+
+#: WWW/Library/Implementation/HTTP.c:466
+msgid "This client does not contain support for HTTPS URLs."
+msgstr "Tento klient nepodporuje HTTPS URL."
+
+#: WWW/Library/Implementation/HTTP.c:491
+msgid "Unable to connect to remote host."
+msgstr "Spojení se vzdáleným poèítaèem nelze navázat."
+
+#: WWW/Library/Implementation/HTTP.c:1005
+msgid "Sending HTTP request."
+msgstr "Odesílám HTTP po¾adavek."
+
+#: WWW/Library/Implementation/HTTP.c:1039
+msgid "Unexpected network write error; connection aborted."
+msgstr "Neoèekávaná chyba pøi zápisu na soket; spojení uzavøeno."
+
+#: WWW/Library/Implementation/HTTP.c:1045
+msgid "HTTP request sent; waiting for response."
+msgstr "HTTP po¾adavek odeslán; èekám na odpovìï"
+
+#: WWW/Library/Implementation/HTTP.c:1109
+msgid "Unexpected network read error; connection aborted."
+msgstr "Neoèekávaná chyba pøi ètení ze soketu; spojení uzavøeno."
+
+#.
+#. ** HTTP/1.1 Informational statuses.
+#. ** 100 Continue.
+#. ** 101 Switching Protocols.
+#. ** > 101 is unknown.
+#. ** We should never get these, and they have only
+#. ** the status line and possibly other headers,
+#. ** so we'll deal with them by showing the full
+#. ** header to the user as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1305
+msgid "Got unexpected Informational Status."
+msgstr "Neoèekávané Informaèní hlá¹ení."
+
+#.
+#. * Reset Content. The server has fulfilled the
+#. * request but nothing is returned and we should
+#. * reset any form content. We'll instruct the
+#. * user to do that, and restore the current
+#. * document. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1340
+msgid "Request fulfilled. Reset Content."
+msgstr "Po¾adavek vyøízen. Obsah formuláøe smazán."
+
+#. Not Modified
+#.
+#. * We didn't send an "If-Modified-Since" header,
+#. * so this status is inappropriate. We'll deal
+#. * with it by showing the full header to the user
+#. * as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1459
+msgid "Got unexpected 304 Not Modified status."
+msgstr "Neoèekávané hlá¹ení: 304 Not Modified"
+
+#: WWW/Library/Implementation/HTTP.c:1526
+msgid "Redirection of POST content requires user approval."
+msgstr "Pøesmìrování POST obsahu vy¾aduje souhlas u¾ivatele."
+
+#: WWW/Library/Implementation/HTTP.c:1541
+msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
+msgstr "Obsahuje POST data. Trvalé pøesmìrování pou¾ívám pouze jako doèasné.\n"
+
+#: WWW/Library/Implementation/HTTP.c:1586
+msgid "Retrying with access authorization information."
+msgstr "Zkou¹ím to znovu s proxy autorizací."
+
+#: WWW/Library/Implementation/HTTP.c:1598
+msgid "Show the 401 message body?"
+msgstr "Zobrazit tìlo 401 hlá¹ení?"
+
+#: WWW/Library/Implementation/HTTP.c:1643
+msgid "Show the 407 message body?"
+msgstr "Zobrazit tìlo 407 hlá¹ení?"
+
+#.
+#. ** Bad or unknown server_status number.
+#. ** Take a chance and hope there is
+#. ** something to display. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1748
+msgid "Unknown status reply from server!"
+msgstr "Neznámé hlá¹ení od serveru!"
+
+#: WWW/Library/Implementation/HTTelnet.c:101
+#, c-format
+msgid "remote %s session:"
+msgstr "vzdálené %s sezení:"
+
+#: WWW/Library/Implementation/HTWAIS.c:161
+msgid "Could not connect to WAIS server."
+msgstr "Spojení s WAIS serverem nelze navázat."
+
+#: WWW/Library/Implementation/HTWAIS.c:170
+msgid "Could not open WAIS connection for reading."
+msgstr "WAIS nelze pro ètení otevøít."
+
+#: WWW/Library/Implementation/HTWAIS.c:194
+msgid "Diagnostic code is "
+msgstr "Diagnostický kód je"
+
+#: WWW/Library/Implementation/HTWAIS.c:463
+msgid "Index "
+msgstr "Rejstøík"
+
+#: WWW/Library/Implementation/HTWAIS.c:467
+#, c-format
+msgid " contains the following %d item%s relevant to \""
+msgstr " obsahuje %d následujících polo¾ek vztahujících se k \""
+
+#: WWW/Library/Implementation/HTWAIS.c:475
+msgid "The first figure after each entry is its relative score, "
+msgstr "Za ka¾dou polo¾kou následuje nejprve její bodové ohodnocení "
+
+#: WWW/Library/Implementation/HTWAIS.c:476
+msgid "the second is the number of lines in the item."
+msgstr "a poté poèet øádkù."
+
+#: WWW/Library/Implementation/HTWAIS.c:517
+msgid " (bad file name)"
+msgstr " (chybné jméno souboru)"
+
+#: WWW/Library/Implementation/HTWAIS.c:542
+msgid "(bad doc id)"
+msgstr "(chybné id dokumentu)"
+
+#: WWW/Library/Implementation/HTWAIS.c:558
+msgid "(Short Header record, can't display)"
+msgstr "('Short Header' záznam, nelze zobrazit)"
+
+#: WWW/Library/Implementation/HTWAIS.c:565
+msgid ""
+"\n"
+"Long Header record, can't display\n"
+msgstr ""
+"\n"
+"'Long Header' záznamu, nelze zobrazit\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:572
+msgid ""
+"\n"
+"Text record\n"
+msgstr ""
+"\n"
+"Textový záznam\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:581
+msgid ""
+"\n"
+"Headline record, can't display\n"
+msgstr ""
+"\n"
+"'Headline' záznam, nelze zobrazit\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:589
+msgid ""
+"\n"
+"Code record, can't display\n"
+msgstr ""
+"\n"
+"'Code' záznam, nelze zobrazit\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:691
+msgid "Syntax error in WAIS URL"
+msgstr "Syntaktická chyba ve WAIS URL."
+
+#: WWW/Library/Implementation/HTWAIS.c:761
+msgid " (WAIS Index)"
+msgstr " (WAIS rejstøík)"
+
+#: WWW/Library/Implementation/HTWAIS.c:768
+msgid "WAIS Index: "
+msgstr "WAIS rejstøík: "
+
+#: WWW/Library/Implementation/HTWAIS.c:774
+msgid "This is a link for searching the "
+msgstr "Tento odkaz ukazuje na prohledávaè "
+
+#: WWW/Library/Implementation/HTWAIS.c:778
+msgid " WAIS Index.\n"
+msgstr " WAIS rejstøíku.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:805
+msgid ""
+"\n"
+"Enter the 's'earch command and then specify search words.\n"
+msgstr ""
+"\n"
+"Stisknìte 's' a pak zadejte hledaná slova.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:827
+msgid " (in "
+msgstr " (v "
+
+#: WWW/Library/Implementation/HTWAIS.c:836
+msgid "WAIS Search of \""
+msgstr "WAIS hledání \""
+
+#: WWW/Library/Implementation/HTWAIS.c:840
+msgid "\" in: "
+msgstr "\" v: "
+
+#: WWW/Library/Implementation/HTWAIS.c:855
+msgid "HTWAIS: Request too large."
+msgstr "HTWAIS: po¾adavek pøíli¹ dlouhý."
+
+#: WWW/Library/Implementation/HTWAIS.c:864
+msgid "Searching WAIS database..."
+msgstr "Prohledávám WAIS databázi..."
+
+#: WWW/Library/Implementation/HTWAIS.c:874
+msgid "Search interrupted."
+msgstr "Hledání pøeru¹eno."
+
+#: WWW/Library/Implementation/HTWAIS.c:924
+msgid "Can't convert format of WAIS document"
+msgstr "Formát WAIS dokumentu nelze pøevést"
+
+#: WWW/Library/Implementation/HTWAIS.c:968
+msgid "HTWAIS: Request too long."
+msgstr "HTWAIS: po¾adavek pøíli¹ dlouhý"
+
+#.
+#. ** Actually do the transaction given by request_message.
+#.
+#: WWW/Library/Implementation/HTWAIS.c:982
+msgid "Fetching WAIS document..."
+msgstr "Stahuji WAIS dokument..."
+
+#. display_search_response(target, retrieval_response,
+#. wais_database, keywords);
+#: WWW/Library/Implementation/HTWAIS.c:1021
+msgid "No text was returned!\n"
+msgstr "®ádná odpovìï!\n"
+
+#: WWW/Library/Implementation/HTWSRC.c:287
+msgid " NOT GIVEN in source file; "
+msgstr "NENACHÁZÍ se ve zdrojovém souboru; "
+
+#: WWW/Library/Implementation/HTWSRC.c:311
+msgid " WAIS source file"
+msgstr " zdrojový soubor WAIS"
+
+#: WWW/Library/Implementation/HTWSRC.c:318
+msgid " description"
+msgstr " popis"
+
+#: WWW/Library/Implementation/HTWSRC.c:328
+msgid "Access links"
+msgstr "Odkazy"
+
+#: WWW/Library/Implementation/HTWSRC.c:345
+msgid "Direct access"
+msgstr "Pøímý pøístup"
+
+#. * Proxy will be used if defined, so let user know that - FM *
+#: WWW/Library/Implementation/HTWSRC.c:348
+msgid " (or via proxy server, if defined)"
+msgstr " (èi, pokud je definován, pøes proxy server)"
+
+#: WWW/Library/Implementation/HTWSRC.c:363
+msgid "Maintainer"
+msgstr "Správce"
+
+#: WWW/Library/Implementation/HTWSRC.c:371
+msgid "Host"
+msgstr "Poèítaè"
+
+#: src/GridText.c:607
+msgid "Memory exhausted, display interrupted!"
+msgstr "Do¹la pamì», zobrazení pøeru¹eno!"
+
+#: src/GridText.c:612
+msgid "Memory exhausted, will interrupt transfer!"
+msgstr "Do¹la pamì», pøenos pøeru¹en!"
+
+#: src/GridText.c:3395
+msgid " *** MEMORY EXHAUSTED ***"
+msgstr " *** DO©LA PAMÌ« ***"
+
+#: src/GridText.c:5733 src/GridText.c:5740 src/LYList.c:258
+msgid "unknown field or link"
+msgstr "neznámé pole èi odkaz"
+
+#: src/GridText.c:5749
+msgid "text entry field"
+msgstr "textové vstupní pole"
+
+#: src/GridText.c:5752
+msgid "password entry field"
+msgstr "vstupní pole pro heslo"
+
+#: src/GridText.c:5755
+msgid "checkbox"
+msgstr "za¹krtávací políèko"
+
+#: src/GridText.c:5758
+msgid "radio button"
+msgstr "pøepínací tlaèítko"
+
+#: src/GridText.c:5761
+msgid "submit button"
+msgstr "tlaèítko pro odeslání dat serveru"
+
+#: src/GridText.c:5764
+msgid "reset button"
+msgstr "tlaèítko pro obnovení implicitních hodnot"
+
+#: src/GridText.c:5767
+msgid "popup menu"
+msgstr "vyskakovací menu"
+
+#: src/GridText.c:5770
+msgid "hidden form field"
+msgstr "skryté pole formuláøe"
+
+#: src/GridText.c:5773
+msgid "text entry area"
+msgstr "textová vstupní oblast"
+
+#: src/GridText.c:5776
+msgid "range entry field"
+msgstr "vstupní pole pro interval"
+
+#: src/GridText.c:5779
+msgid "file entry field"
+msgstr "pole pro výbìr souboru"
+
+#: src/GridText.c:5782
+msgid "text-submit field"
+msgstr "tlaèítko pro odeslání textu"
+
+#: src/GridText.c:5785
+msgid "image-submit button"
+msgstr "tlaèítko pro odeslání obrázku"
+
+#: src/GridText.c:5788
+msgid "keygen field"
+msgstr "pole pro vytvoøení klíèe"
+
+#: src/GridText.c:5791
+msgid "unknown form field"
+msgstr "neznámé pole formuláøe"
+
+#. We can't open the file, what do we do?
+#: src/GridText.c:10348
+#, fuzzy
+msgid "Can't open file for uploading"
+msgstr "Soubor pro dekompresi nelze otevøít!"
+
+#. We got an error reading the file, what do we do?
+#: src/GridText.c:10359
+msgid "Short read from file, problem?"
+msgstr ""
+
+#: src/GridText.c:10721
+#, c-format
+msgid "Submitting %s"
+msgstr "Odesílám %s"
+
+#. ugliness has happened; inform user and do the best we can
+#: src/GridText.c:11887
+msgid "Hang Detect: TextAnchor struct corrupted - suggest aborting!"
+msgstr ""
+
+#. don't show previous state
+#: src/GridText.c:12092
+msgid "Wrap lines to fit displayed area?"
+msgstr ""
+
+#: src/GridText.c:12144
+msgid "Very long lines have been wrapped!"
+msgstr ""
+
+#: src/GridText.c:12591
+msgid "Very long lines have been truncated!"
+msgstr ""
+
+#: src/HTAlert.c:155 src/LYShowInfo.c:318
+msgid "bytes"
+msgstr "bajtù"
+
+#: src/HTAlert.c:156
+msgid "KB"
+msgstr "KB"
+
+#: src/HTAlert.c:255
+#, c-format
+msgid "Read %s of %s of data"
+msgstr "Mno¾ství pøenesených dat: %s/%s"
+
+#: src/HTAlert.c:257
+#, c-format
+msgid "Read %s of data"
+msgstr "Mno¾ství pøenesených dat: %s"
+
+#: src/HTAlert.c:262
+#, c-format
+msgid ", %s/sec"
+msgstr ", %s/s."
+
+#: src/HTAlert.c:269
+#, c-format
+msgid " (stalled for %ld sec)"
+msgstr ""
+
+#: src/HTAlert.c:271
+#, c-format
+msgid ", ETA %ld sec"
+msgstr ", %ld s."
+
+#: src/HTAlert.c:277
+msgid " (Press 'z' to abort)"
+msgstr " (Stisknìte 'z' pro ukonèení)"
+
+#. Meta-note: don't move the following note from its place right
+#. in front of the first gettext(). As it is now, it should
+#. automatically appear in generated lynx.pot files. - kw
+#.
+#. NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+#. * will take the first byte of the translation as a positive response
+#. * to Yes/No questions. If you provide a translation for "no", lynx
+#. * will take the first byte of the translation as a negative response
+#. * to Yes/No questions. For both, lynx will also try to show the
+#. * first byte in the prompt as a character, instead of (y) or (n),
+#. * respectively. This will not work right for multibyte charsets!
+#. * Don't translate "yes" and "no" for CJK character sets (or translate
+#. * them to "yes" and "no"). For a translation using UTF-8, don't
+#. * translate if the translation would begin with anything but a 7-bit
+#. * (US_ASCII) character. That also means do not translate if the
+#. * translation would begin with anything but a 7-bit character, if
+#. * you use a single-byte character encoding (a charset like ISO-8859-n)
+#. * but anticipate that the message catalog may be used re-encoded in
+#. * UTF-8 form.
+#. * For translations using other character sets, you may also wish to
+#. * leave "yes" and "no" untranslated, if using (y) and (n) is the
+#. * preferred behavior.
+#. * Lynx will also accept y Y n N as responses unless there is a conflict
+#. * with the first letter of the "yes" or "no" translation.
+#.
+#: src/HTAlert.c:334
+msgid "yes"
+msgstr "ano"
+
+#: src/HTAlert.c:335
+msgid "no"
+msgstr "ne"
+
+#: src/HTML.c:6342
+msgid "Description:"
+msgstr "Popis:"
+
+#: src/HTML.c:6347
+msgid "(none)"
+msgstr "(¾ádný)"
+
+#: src/HTML.c:6351
+msgid "Filepath:"
+msgstr "Cesta:"
+
+#: src/HTML.c:6356
+msgid "(unknown)"
+msgstr "(neznámá)"
+
+#: src/HTML.c:7804
+msgid "Document has only hidden links. Use the 'l'ist command."
+msgstr "Dokument obsahuje pouze skryté odkazy. Pou¾ijte 'l' pro jejich vypsání."
+
+#: src/HTML.c:8328
+msgid "Source cache error - disk full?"
+msgstr ""
+
+#: src/HTML.c:8341
+msgid "Source cache error - not enough memory!"
+msgstr ""
+
+#: src/LYBookmark.c:166
+msgid ""
+" This file is an HTML representation of the X Mosaic hotlist file.\n"
+" Outdated or invalid links may be removed by using the\n"
+" remove bookmark command, it is usually the 'R' key but may have\n"
+" been remapped by you or your system administrator."
+msgstr ""
+" Tento soubor je HTML obdobou 'hotlistu' programu 'X Mosaic'. Zastaralé\n"
+" èi chybné odkazy mohou být smazány pomocí klávesy 'R'. Správce\n"
+" systému ale mohl tuto funkci svázat s jinou klávesou."
+
+#: src/LYBookmark.c:382
+msgid ""
+" You can delete links by the 'R' key<br>\n"
+"<ol>\n"
+msgstr ""
+
+#: src/LYBookmark.c:385
+msgid ""
+" You can delete links using the remove bookmark command. It is usually\n"
+" the 'R' key but may have been remapped by you or your system\n"
+" administrator."
+msgstr ""
+" Odkazy mohou být smazány pomocí klávesy 'R'. Správce\n"
+" systému ale mohl tuto funkci svázat s jinou klávesou."
+
+#: src/LYBookmark.c:389
+msgid ""
+" This file also may be edited with a standard text editor to delete\n"
+" outdated or invalid links, or to change their order."
+msgstr ""
+" Mazání odkazù èi zmìna jejich poøadí Mù¾e být provedena i pomocí úprav\n"
+" tohoto souboru bì¾ným textovým editorem."
+
+#: src/LYBookmark.c:392
+msgid ""
+"Note: if you edit this file manually\n"
+" you should not change the format within the lines\n"
+" or add other HTML markup.\n"
+" Make sure any bookmark link is saved as a single line."
+msgstr ""
+"Poznámka: pokud budete upravovat tento soubor ruènì, nemìl byste\n"
+" mìnit jeho formát, èi pøidávat dal¹í HTML znaèky.\n"
+" ®ádná zálo¾ka nesmí zabírat více ne¾ jeden øádek."
+
+#: src/LYBookmark.c:683
+#, c-format
+msgid "File may be recoverable from %s during this session"
+msgstr ""
+
+#.
+#. * Neither the path as given nor any components examined by
+#. * backing up were stat()able. - kw
+#.
+#: src/LYCgi.c:232
+msgid "Unable to access cgi script"
+msgstr "Nelze získat pøístup k cgi skriptu"
+
+#: src/LYCgi.c:651 src/LYCgi.c:654
+msgid "Good Advice"
+msgstr "Dobrá rada"
+
+#: src/LYCgi.c:657
+msgid "An excellent http server for VMS is available via"
+msgstr "Vynikající http server pro VMS je dostupný pøes"
+
+#: src/LYCgi.c:664
+msgid "this link"
+msgstr "tento odkaz."
+
+#: src/LYCgi.c:668
+msgid "It provides state of the art CGI script support.\n"
+msgstr "Poskytuje výbornou podporu pro cgi skripty.\n"
+
+#: src/LYClean.c:108
+msgid "Exiting via interrupt:"
+msgstr "Konèím kvùli pøeru¹ení:"
+
+#: src/LYCookie.c:2659
+msgid "(from a previous session)"
+msgstr "(z pøedchozího sezení)"
+
+#: src/LYCookie.c:2719
+msgid "Maximum Gobble Date:"
+msgstr ""
+
+#: src/LYCookie.c:2764
+msgid "Internal"
+msgstr " (vnitøní)"
+
+#: src/LYCookie.c:2765
+msgid "cookie_domain_flag_set error, aborting program"
+msgstr ""
+
+#: src/LYCurses.c:936
+msgid "Terminal initialisation failed - unknown terminal type?"
+msgstr "Inicializace terminálu se nezdaøila - neznámý typ terminálu?"
+
+#: src/LYCurses.c:1328
+msgid "Terminal ="
+msgstr "Terminál ="
+
+#: src/LYCurses.c:1332
+msgid "You must use a vt100, 200, etc. terminal with this program."
+msgstr "Tento program vy¾aduje terminál typu vt100, 200 etc."
+
+#: src/LYCurses.c:1384
+msgid "Your Terminal type is unknown!"
+msgstr "Typ va¹eho terminálu je neznámý!"
+
+#: src/LYCurses.c:1385
+msgid "Enter a terminal type:"
+msgstr "Zadejte typ terminálu:"
+
+#: src/LYCurses.c:1398
+msgid "TERMINAL TYPE IS SET TO"
+msgstr "TYP TERMINÁLU JE NASTAVEN NA"
+
+#: src/LYCurses.c:1749
+#, c-format
+msgid ""
+"\n"
+"A Fatal error has occurred in %s Ver. %s\n"
+msgstr ""
+"\n"
+"V programu %s verze %s nastala fatální chyba.\n"
+
+#: src/LYCurses.c:1751
+msgid ""
+"\n"
+"Please notify your system administrator to confirm a bug, and if\n"
+"confirmed, to notify the lynx-dev list. Bug reports should have concise\n"
+"descriptions of the command and/or URL which causes the problem, the\n"
+"operating system name with version number, the TCPIP implementation, the\n"
+"TRACEBACK if it can be captured, and any other relevant information.\n"
+msgstr ""
+"\n"
+"Zeptejte se va¹eho správce systému, zda se vskutku jedná o chybu a pokud ano,\n"
+"uvìdomte o ní úèastníky konference lynx-dev. Chybová hlá¹ení by mìla obsahovat\n"
+"struèný popis pøíkazu a/nebo URL, který ji zpùsobil, jméno a verzi operaèního\n"
+"systému, TCPIP implementaci, TRACEBACK a v¹echny dal¹í relevantní informace.\n"
+
+#: src/LYDownload.c:520
+msgid "Downloaded link:"
+msgstr "Sta¾ený odkaz:"
+
+#: src/LYDownload.c:525
+msgid "Suggested file name:"
+msgstr "Doporuèené jméno souboru:"
+
+#: src/LYDownload.c:530
+msgid "Standard download options:"
+msgstr "Standardní menu nabídek pro stahování:"
+
+#: src/LYDownload.c:531
+msgid "Download options:"
+msgstr "Menu nabídek pro stahování:"
+
+#: src/LYDownload.c:545
+msgid "Save to disk"
+msgstr "Ulo¾it na disk"
+
+#: src/LYDownload.c:547
+msgid "Save to disk disabled."
+msgstr "Ukládání na disk je zakázáno."
+
+#: src/LYDownload.c:551 src/LYPrint.c:1338
+msgid "Local additions:"
+msgstr "Místní roz¹íøení:"
+
+#: src/LYDownload.c:560 src/LYUpload.c:224
+msgid "No Name Given"
+msgstr "Nebylo zadáno ¾ádné jméno."
+
+#: src/LYHistory.c:633
+msgid "You selected:"
+msgstr "Nav¹tívené odkazy:"
+
+#: src/LYHistory.c:657 src/LYHistory.c:905
+msgid "(no address)"
+msgstr "(¾ádná adresa)"
+
+#: src/LYHistory.c:661
+msgid " (internal)"
+msgstr " (vnitøní)"
+
+#: src/LYHistory.c:663
+msgid " (was internal)"
+msgstr " (pùvodnì vnitøní)"
+
+#: src/LYHistory.c:761
+msgid " (From History)"
+msgstr " (z historie)"
+
+#: src/LYHistory.c:825
+msgid "You visited (POSTs, bookmark, menu and list files excluded):"
+msgstr "Nav¹tívené odkazy (POST, zálo¾ky, menu a seznamy odkazù vynechány):"
+
+#: src/LYHistory.c:1124
+msgid "(No messages yet)"
+msgstr ""
+
+#: src/LYLeaks.c:78
+msgid "Invalid pointer detected."
+msgstr "Nalezen chybný ukazatel."
+
+#: src/LYLeaks.c:80 src/LYLeaks.c:117
+msgid "Pointer:"
+msgstr "Ukazatel:"
+
+#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:136
+msgid "FileName:"
+msgstr "Jméno souboru:"
+
+#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:139 src/LYLeaks.c:150
+msgid "LineCount:"
+msgstr "Øádek:"
+
+#: src/LYLeaks.c:115
+msgid "Memory leak detected."
+msgstr "Zji¹tìn problém s pamìtí."
+
+#: src/LYLeaks.c:120
+msgid "Contains:"
+msgstr "Obsahuje:"
+
+#: src/LYLeaks.c:133
+msgid "ByteSize:"
+msgstr "Velikost v bajtech:"
+
+#: src/LYLeaks.c:147
+msgid "realloced:"
+msgstr "realokováno:"
+
+#: src/LYLeaks.c:170
+msgid "Total memory leakage this run:"
+msgstr "Celkový poèet problémù s pamìtí:"
+
+#: src/LYList.c:91
+msgid "References in "
+msgstr "Odkazy v "
+
+#: src/LYList.c:92
+msgid "this document:"
+msgstr "v tomto dokumentu:"
+
+#: src/LYList.c:98
+msgid "Visible links:"
+msgstr "Viditelné odkazy:"
+
+#: src/LYList.c:199 src/LYList.c:319
+msgid "Hidden links:"
+msgstr "Skryté odkazy:"
+
+#: src/LYList.c:267
+msgid "References"
+msgstr "Reference"
+
+#: src/LYList.c:269
+msgid "Visible links"
+msgstr "Viditelné odkazy"
+
+#: src/LYLocal.c:267
+#, c-format
+msgid "Unable to get status of '%s'."
+msgstr "Status '%s' nelze zjistit."
+
+#: src/LYLocal.c:301
+msgid "The selected item is not a file or a directory! Request ignored."
+msgstr "Vybraný pøedmìt není souborem ani adresáøem! Po¾adavek ignorován."
+
+#: src/LYLocal.c:383
+#, c-format
+msgid "Unable to %s due to system error!"
+msgstr "%s selhalo kvùli systémové chybì!"
+
+#. error return
+#: src/LYLocal.c:415
+#, c-format
+msgid "Probable failure to %s due to system error!"
+msgstr "%s pravdìpodobnì selhalo kvùli systémové chybì!"
+
+#: src/LYLocal.c:453
+#, c-format
+msgid "move %s to %s"
+msgstr "pøesunout %s do %s"
+
+#: src/LYLocal.c:475
+msgid "There is already a directory with that name! Request ignored."
+msgstr "Byl nalezen adresáø stejného jména! Po¾adavek ignorován."
+
+#: src/LYLocal.c:477
+msgid "There is already a file with that name! Request ignored."
+msgstr "Byl nalezen soubor stejného jména! Po¾adavek ignorován."
+
+#: src/LYLocal.c:479
+msgid "The specified name is already in use! Request ignored."
+msgstr "Zadané jméno je ji¾ pou¾íváno! Po¾adavek ignorován."
+
+#: src/LYLocal.c:490
+msgid "Destination has different owner! Request denied."
+msgstr "Cíl má jiného vlastníka! Po¾adavek zamítnut."
+
+#: src/LYLocal.c:493
+msgid "Destination is not a valid directory! Request denied."
+msgstr "Cíl není platným adresáøem! Po¾adavek zamítnut."
+
+#: src/LYLocal.c:516
+msgid "Remove all tagged files and directories?"
+msgstr "Smazat v¹echny oznaèené soubory a adresáøe "
+
+#: src/LYLocal.c:537
+#, c-format
+msgid "remove %s"
+msgstr "smazat %s"
+
+#: src/LYLocal.c:580
+msgid "Enter new location for tagged items: "
+msgstr "Zadejte nové místo urèení pro oznaèené pøedmìty: "
+
+#: src/LYLocal.c:649
+msgid "Path too long"
+msgstr "Cesta je pøíli¹ dlouhá."
+
+#: src/LYLocal.c:680
+msgid "Source and destination are the same location - request ignored!"
+msgstr "Zdroj a cíl oznaèují jedno a to samé místo - po¾adavek zamítnut!"
+
+#: src/LYLocal.c:738
+msgid "Enter new name for directory: "
+msgstr "Zadejte nové jméno adresáøe: "
+
+#: src/LYLocal.c:740
+msgid "Enter new name for file: "
+msgstr "Zadejte nové jméno souboru: "
+
+#: src/LYLocal.c:751
+msgid "Illegal character (path-separator) found! Request ignored."
+msgstr "Nalezen chybný znak \"/\"! Po¾adavek ignorován."
+
+#: src/LYLocal.c:800
+msgid "Enter new location for directory: "
+msgstr "Zadejte nové místo urèení pro adresáø: "
+
+#: src/LYLocal.c:802
+msgid "Enter new location for file: "
+msgstr "Zadejte nové místo urèení pro soubor: "
+
+#: src/LYLocal.c:827
+msgid "Unexpected failure - unable to find trailing path separator"
+msgstr "Neoèekávaná chyba - koncové \"/\" nelze najít"
+
+#: src/LYLocal.c:847
+msgid "Source and destination are the same location! Request ignored!"
+msgstr "Zdroj a cíl oznaèují jedno a to samé místo - po¾adavek zamítnut!"
+
+#: src/LYLocal.c:894
+msgid "Modify name, location, or permission (n, l, or p): "
+msgstr "Zmìnit jméno, umístìní èi pøístupová práva? (n,l èi p): "
+
+#: src/LYLocal.c:896
+msgid "Modify name or location (n or l): "
+msgstr "Zmìnit jméno èi umístìní? (n èi l): "
+
+#.
+#. * Code for changing ownership needed here.
+#.
+#: src/LYLocal.c:925
+msgid "This feature not yet implemented!"
+msgstr "Tato funkce zatím nebyla implementována!"
+
+#: src/LYLocal.c:943
+msgid "Enter name of file to create: "
+msgstr "Zadejte jméno souboru, který mám vytvoøit: "
+
+#: src/LYLocal.c:951 src/LYLocal.c:999
+msgid "Illegal redirection \"//\" found! Request ignored."
+msgstr "Nalezeno chybné pøesmìrování \"//\"! Po¾adavek ignorován."
+
+#: src/LYLocal.c:966
+#, c-format
+msgid "create %s"
+msgstr "vytvoøit %s"
+
+#: src/LYLocal.c:991
+msgid "Enter name for new directory: "
+msgstr "Zadejte nové jméno adresáøe: "
+
+#: src/LYLocal.c:1042
+msgid "Create file or directory (f or d): "
+msgstr "Vytvoøit soubor èi adresáø? (f èi d):"
+
+#: src/LYLocal.c:1083
+#, c-format
+msgid "Remove '%s' and all of its contents?"
+msgstr "Smazat '%s' a ve¹kerý jeho obsah: "
+
+#: src/LYLocal.c:1086
+msgid "Remove directory and all of its contents?"
+msgstr "Smazat adresáø a ve¹kerý jeho obsah: "
+
+#: src/LYLocal.c:1090
+#, c-format
+msgid "Remove file '%s'?"
+msgstr "Smazat soubor '%s': "
+
+#: src/LYLocal.c:1092
+msgid "Remove file?"
+msgstr "Smazat soubor: "
+
+#: src/LYLocal.c:1097
+#, c-format
+msgid "Remove symbolic link '%s'?"
+msgstr "Smazat symbolický odkaz '%s': "
+
+#: src/LYLocal.c:1099
+msgid "Remove symbolic link?"
+msgstr "Smazat symbolický odkaz: "
+
+#: src/LYLocal.c:1190
+msgid "Sorry, don't know how to permit non-UNIX files yet."
+msgstr "Nevím jak nastavit pøístupová práva na ne-UNIXOVÉM systému souborù"
+
+#: src/LYLocal.c:1220
+msgid "Unable to open permit options file"
+msgstr "Soubor s menu nastavení práv souborù nelze otevøít."
+
+#: src/LYLocal.c:1247
+msgid "Specify permissions below:"
+msgstr "Zadejte pøístupová práva:"
+
+#: src/LYLocal.c:1248 src/LYShowInfo.c:196
+msgid "Owner:"
+msgstr "Vlastník:"
+
+#: src/LYLocal.c:1264
+msgid "Group"
+msgstr "Skupina"
+
+#: src/LYLocal.c:1280
+msgid "Others:"
+msgstr "Ostatní:"
+
+#: src/LYLocal.c:1298
+msgid "form to permit"
+msgstr "formuláø"
+
+#: src/LYLocal.c:1396
+msgid "Invalid mode format."
+msgstr "Chybný formát."
+
+#: src/LYLocal.c:1400
+msgid "Invalid syntax format."
+msgstr "Chybná syntaxe."
+
+#: src/LYLocal.c:1575
+msgid "NULL URL pointer"
+msgstr "NULOVÝ URL ukazatel"
+
+#: src/LYLocal.c:1670
+msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
+msgstr "Varování! UUdekódovaný soubor bude vytvoøen v adresáøi, ze kterého byl Lynx spu¹tìn."
+
+#: src/LYLocal.c:1782
+#, c-format
+msgid "Executing %s "
+msgstr "Spou¹tím %s "
+
+#: src/LYLocal.c:1785
+msgid "Executing system command. This might take a while."
+msgstr "Spou¹tí se systémový pøíkaz. Okam¾ik, prosím."
+
+#: src/LYLocal.c:1831
+msgid "Unable to open file management menu file."
+msgstr "Nelze otevøít soubor s menu správce souborù."
+
+#: src/LYLocal.c:1862
+msgid "Current directory:"
+msgstr "Aktuální adresáø:"
+
+#: src/LYLocal.c:1865 src/LYLocal.c:1883
+msgid "Current selection:"
+msgstr "Zvolené polo¾ky:"
+
+#: src/LYLocal.c:1869
+msgid "Nothing currently selected."
+msgstr "®ádné polo¾ky nejsou zvoleny."
+
+#: src/LYLocal.c:1884
+msgid "tagged item:"
+msgstr "oznaèena polo¾ka:"
+
+#: src/LYLocal.c:1884
+msgid "tagged items:"
+msgstr "oznaèené polo¾ky:"
+
+#: src/LYLocal.c:1983 src/LYLocal.c:1994
+msgid "Illegal filename; request ignored."
+msgstr "Chybné jméno souboru; po¾adavek ignorován."
+
+#: src/LYLocal.c:2137
+msgid "The selected item is not a directory! Request ignored."
+msgstr "Zvolená polo¾ka není adresáøem! Po¾adavek ignorován."
+
+#. directory not writable
+#: src/LYLocal.c:2141
+msgid "Install in the selected directory not permitted."
+msgstr "Instalace do zvoleného adresáøe není povolena."
+
+#: src/LYLocal.c:2146
+msgid "Just a moment, ..."
+msgstr "Okam¾ik, prosím ..."
+
+#: src/LYLocal.c:2163
+msgid "Error buiding install args"
+msgstr ""
+
+#: src/LYLocal.c:2178 src/LYLocal.c:2210
+#, c-format
+msgid "Source and target are the same: %s"
+msgstr ""
+
+#: src/LYLocal.c:2188 src/LYLocal.c:2220
+#, c-format
+msgid "Already in target directory: %s"
+msgstr "Ètu adresáø: %s"
+
+#: src/LYLocal.c:2238
+msgid "Installation complete"
+msgstr "Instalace dokonèena"
+
+#: src/LYLocal.c:2427
+msgid "Temporary URL or list would be too long."
+msgstr "Doèasné URL nebo seznam by bylo pøíli¹ dlouhé."
+
+#: src/LYMail.c:503
+msgid "Sending"
+msgstr "Posílám"
+
+#: src/LYMail.c:989
+#, c-format
+msgid "The link %s :?: %s \n"
+msgstr "Odkaz %s :?: %s \n"
+
+#: src/LYMail.c:991
+#, c-format
+msgid "called \"%s\"\n"
+msgstr "volaný \"%s\"\n"
+
+#: src/LYMail.c:992
+#, c-format
+msgid "in the file \"%s\" called \"%s\"\n"
+msgstr "v souboru \"%s\" se jménem \"%s\"\n"
+
+#: src/LYMail.c:993
+msgid "was requested but was not available."
+msgstr "byl po¾adován, ale nebyl dostupný."
+
+#: src/LYMail.c:994
+msgid "Thought you might want to know."
+msgstr "Pouze jsem vás chtìl informovat."
+
+#: src/LYMail.c:996
+msgid "This message was automatically generated by"
+msgstr "Tato zpráva byla vytvoøena automaticky programem"
+
+#: src/LYMain.c:897
+msgid "No Winsock found, sorry."
+msgstr "Winsock nenalezen. lituji."
+
+#: src/LYMain.c:1103
+msgid "You MUST define a valid TMP or TEMP area!\n"
+msgstr "MUSÍTE zadat platný TMP èi TEMP prostor!\n"
+
+#: src/LYMain.c:1156 src/LYMainLoop.c:5117
+msgid "No such directory"
+msgstr " adresáø"
+
+#: src/LYMain.c:1378
+#, c-format
+msgid ""
+"\n"
+"Configuration file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Konfiguraèní soubor %s je nedostupný.\n"
+"\n"
+
+#: src/LYMain.c:1388
+msgid ""
+"\n"
+"Lynx character sets not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Znakové sady Lynxu nejsou deklarovány.\n"
+"\n"
+
+#: src/LYMain.c:1417
+msgid ""
+"\n"
+"Lynx edit map not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Editovací mapy Lynxu nejsou deklarovány.\n"
+"\n"
+
+#: src/LYMain.c:1446
+#, c-format
+msgid ""
+"\n"
+"Lynx file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Soubor %s není dostupný.\n"
+"\n"
+
+#: src/LYMain.c:1704
+msgid "Warning:"
+msgstr ""
+
+#: src/LYMain.c:2247
+msgid "persistent cookies state will be changed in next session only."
+msgstr "Stav trvalých cookies bude zmìnìn a¾ pøi pøí¹tím sezení."
+
+#: src/LYMain.c:2477 src/LYMain.c:2525
+#, c-format
+msgid "Lynx: ignoring unrecognized charset=%s\n"
+msgstr ""
+
+#: src/LYMain.c:3047
+#, c-format
+msgid "%s Version %s (%s)\n"
+msgstr "%s verze %s (%s)\n"
+
+#: src/LYMain.c:3072
+#, c-format
+msgid "Built on %s %s %s\n"
+msgstr "Pøelo¾en na %s %s %s\n"
+
+#: src/LYMain.c:3077
+msgid "Copyrights held by the University of Kansas, CERN, and other contributors.\n"
+msgstr "Autorská práva patøí Kansaské univerzitì, CERN a ostatním autorùm.\n"
+
+#: src/LYMain.c:3079
+msgid "Distributed under the GNU General Public License.\n"
+msgstr "Roz¹iøován podle podmínek Obecné veøejné licence GNU.\n"
+
+#: src/LYMain.c:3081
+msgid ""
+"See http://lynx.browser.org/ and the online help for more information.\n"
+"\n"
+msgstr ""
+"Podrobnìj¹í informace získáte na http://lynx.browser.org a z nápovìdy k programu.\n"
+"\n"
+
+#: src/LYMain.c:3800
+#, c-format
+msgid "USAGE: %s [options] [file]\n"
+msgstr "Pou¾ití: %s [pøepínaèe] [soubor]\n"
+
+#: src/LYMain.c:3801
+msgid "Options are:\n"
+msgstr "Pøepínaèe:\n"
+
+#: src/LYMain.c:4060
+#, c-format
+msgid "%s: Invalid Option: %s\n"
+msgstr "%s: Chybný pøepínaè %s\n"
+
+#: src/LYMainLoop.c:512
+#, c-format
+msgid "Internal error: Invalid mouse link %d!"
+msgstr ""
+
+#.
+#. * Make a name for this new URL.
+#.
+#: src/LYMainLoop.c:625 src/LYMainLoop.c:5139
+msgid "A URL specified by the user"
+msgstr "URL zadané u¾ivatelem"
+
+#: src/LYMainLoop.c:1114
+msgid "Enctype multipart/form-data not yet supported! Cannot submit."
+msgstr "Kódování multipart/form-data není zatím podporováno. Nelze odeslat."
+
+#.
+#. * Make a name for this help file.
+#.
+#: src/LYMainLoop.c:3097
+msgid "Help Screen"
+msgstr "Nápovìda"
+
+#: src/LYMainLoop.c:3231
+msgid "System Index"
+msgstr "Systémový index"
+
+#: src/LYMainLoop.c:3611 src/LYMainLoop.c:5347
+msgid "Entry into main screen"
+msgstr "Vstup na hlavní obrazovku"
+
+#: src/LYMainLoop.c:3897
+msgid "No next document present"
+msgstr ""
+
+#: src/LYMainLoop.c:4206
+msgid "charset for this document specified explicitly, sorry..."
+msgstr "znaková sada tohoto dokumentu je explicitnì zadána, lituji..."
+
+#: src/LYMainLoop.c:5093
+msgid "cd to:"
+msgstr " do "
+
+#: src/LYMainLoop.c:5120
+msgid "A component of path is not a directory"
+msgstr ""
+
+#: src/LYMainLoop.c:5123
+msgid "failed to change directory"
+msgstr "Adresáø není dostupný."
+
+#: src/LYMainLoop.c:6291
+msgid "Reparsing document under current settings..."
+msgstr "Znovu zpracovávám dokument za pou¾ití nových nastavení..."
+
+#: src/LYMainLoop.c:6579 src/LYMainLoop.c:6583
+#, c-format
+msgid "Fatal error - could not open output file %s\n"
+msgstr "Fatální chyba - výstupní soubor %s nelze otevøít\n"
+
+#: src/LYMainLoop.c:7719 src/LYMainLoop.c:7892
+msgid "-index-"
+msgstr " rejstøík"
+
+#: src/LYMainLoop.c:7829
+msgid "lynx: Can't access startfile"
+msgstr "lynx: startovní soubor nelze otevøít"
+
+#: src/LYMainLoop.c:7842
+msgid "lynx: Start file could not be found or is not text/html or text/plain"
+msgstr "lynx: startovní soubor nelze nalézt, nebo není ani typu text/html ani text/plain."
+
+#: src/LYMainLoop.c:7843
+msgid " Exiting..."
+msgstr " Konèím..."
+
+#: src/LYMainLoop.c:7886
+msgid "-more-"
+msgstr ""
+
+#. Enable scrolling.
+#: src/LYNews.c:203
+msgid "You will be posting to:"
+msgstr "Posíláte po¹tu na:"
+
+#.
+#. * Get the mail address for the From header,
+#. * offering personal_mail_address as default.
+#.
+#: src/LYNews.c:212
+msgid ""
+"\n"
+"\n"
+" Please provide your mail address for the From: header\n"
+msgstr ""
+"\n"
+"\n"
+"Zadejte adresu pro hlavièku From:\n"
+
+#.
+#. * Get the Subject header, offering the current
+#. * document's title as the default if this is a
+#. * followup rather than a new post. - FM
+#.
+#: src/LYNews.c:230
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Subject: header\n"
+msgstr ""
+"\n"
+"\n"
+"Zadejte pøedmìt zprávy\n"
+
+#: src/LYNews.c:322
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Organization: header\n"
+msgstr ""
+"\n"
+"\n"
+"Zadejte hodnotu pro hlavièku Organization:\n"
+
+#.
+#. * Use the built in line editior.
+#.
+#: src/LYNews.c:379
+msgid ""
+"\n"
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+"\n"
+"Zadejte text zprávy."
+
+#: src/LYNews.c:425
+msgid "Message has no original text!"
+msgstr "Zpráva neobsahuje ¾ádný pùvodní text!"
+
+#: src/LYOptions.c:743
+msgid "review/edit B)ookmarks files"
+msgstr "zobrazit/editovat soubory se zálo¾kami B>"
+
+#: src/LYOptions.c:745
+msgid "B)ookmark file: "
+msgstr "Soubor se zálo¾kami B>:"
+
+#: src/LYOptions.c:2507 src/LYOptions.c:2531
+#, c-format
+msgid "Use %s to invoke the Options menu!"
+msgstr ""
+
+#: src/LYOptions.c:3208
+msgid "General Preferences"
+msgstr "Osobní nastavení"
+
+#. ***************************************************************
+#. User Mode: SELECT
+#: src/LYOptions.c:3212
+msgid "User mode"
+msgstr "U¾ivatelský re¾im"
+
+#. Editor: INPUT
+#: src/LYOptions.c:3218
+msgid "Editor"
+msgstr "Editor"
+
+#. Search Type: SELECT
+#: src/LYOptions.c:3223
+msgid "Type of Search"
+msgstr ""
+
+#. Cookies: SELECT
+#: src/LYOptions.c:3229
+msgid "Cookies"
+msgstr "Cookies"
+
+#: src/LYOptions.c:3243
+msgid "Keyboard Input"
+msgstr ""
+
+#. ***************************************************************
+#. Keypad Mode: SELECT
+#: src/LYOptions.c:3247
+msgid "Keypad mode"
+msgstr "Re¾im numerické klávesnice"
+
+#. Emacs keys: ON/OFF
+#: src/LYOptions.c:3253
+msgid "Emacs keys"
+msgstr "Emacs klávesy"
+
+#. VI Keys: ON/OFF
+#: src/LYOptions.c:3259
+msgid "VI keys"
+msgstr "VI klávesy"
+
+#. Line edit style: SELECT
+#. well, at least 2 line edit styles available
+#: src/LYOptions.c:3266
+msgid "Line edit style"
+msgstr ""
+
+#. Keyboard layout: SELECT
+#: src/LYOptions.c:3278
+msgid "Keyboard layout"
+msgstr ""
+
+#.
+#. * Display and Character Set
+#.
+#: src/LYOptions.c:3291
+msgid "Display and Character Set"
+msgstr "Místní znaková sada"
+
+#. ***************************************************************
+#. Display Character Set: SELECT
+#: src/LYOptions.c:3295
+msgid "Display character set"
+msgstr "Místní znaková sada"
+
+#: src/LYOptions.c:3324
+msgid "Assumed document character set"
+msgstr "Pøedpokládaná znaková sada"
+
+#.
+#. * Since CJK people hardly mixed with other world
+#. * we split the header to make it more readable:
+#. * "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
+#.
+#: src/LYOptions.c:3344
+msgid "CJK mode"
+msgstr "CJK re¾im"
+
+#: src/LYOptions.c:3346
+msgid "Raw 8-bit"
+msgstr "Pøímý 8bitový re¾im"
+
+#. X Display: INPUT
+#: src/LYOptions.c:3354
+msgid "X Display"
+msgstr "X Display"
+
+#.
+#. * Document Appearance
+#.
+#: src/LYOptions.c:3360
+msgid "Document Appearance"
+msgstr ""
+
+#: src/LYOptions.c:3366
+msgid "Show color"
+msgstr "Zobrazovat barvy"
+
+#. Show cursor: ON/OFF
+#: src/LYOptions.c:3390
+msgid "Show cursor"
+msgstr "Zobrazovat kurzor"
+
+#. Select Popups: ON/OFF
+#: src/LYOptions.c:3396
+msgid "Popups for select fields"
+msgstr "Vyskakovací menu pro zvolená pole"
+
+#. HTML error recovery: SELECT
+#: src/LYOptions.c:3403
+msgid "HTML error recovery"
+msgstr "Zotavení po chybách HTML"
+
+#. Show Images: SELECT
+#: src/LYOptions.c:3410
+msgid "Show images"
+msgstr "Zobrazení obrázkù"
+
+#. Verbose Images: ON/OFF
+#: src/LYOptions.c:3424
+msgid "Verbose images"
+msgstr "Doslovné obrázky"
+
+#.
+#. * Headers Transferred to Remote Servers
+#.
+#: src/LYOptions.c:3432
+msgid "Headers Transferred to Remote Servers"
+msgstr "HTTP hlavièky"
+
+#. ***************************************************************
+#. Mail Address: INPUT
+#: src/LYOptions.c:3436
+msgid "Personal mail address"
+msgstr "Osobní adresa elektronické po¹ty"
+
+#. Preferred Document Character Set: INPUT
+#: src/LYOptions.c:3441
+msgid "Preferred document character set"
+msgstr "Upøednostòovaná znaková sada"
+
+#. Preferred Document Language: INPUT
+#: src/LYOptions.c:3446
+msgid "Preferred document language"
+msgstr "Upøednostòovaný jazyk dokumentu"
+
+#: src/LYOptions.c:3452
+msgid "User-Agent header"
+msgstr "Hlavièka 'User-Agent'"
+
+#.
+#. * Listing and Accessing Files
+#.
+#: src/LYOptions.c:3460
+msgid "Listing and Accessing Files"
+msgstr ""
+
+#. ***************************************************************
+#. FTP sort: SELECT
+#: src/LYOptions.c:3464
+msgid "FTP sort criteria"
+msgstr "Øazení FTP adresáøù"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3471
+msgid "Local directory sort criteria"
+msgstr "Øazení lokálních adresáøù"
+
+#: src/LYOptions.c:3479
+msgid "Show dot files"
+msgstr "Zobrazovat teèkové soubory"
+
+#: src/LYOptions.c:3487
+msgid "Execution links"
+msgstr "Spustitelné odkazy"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3507
+msgid "Show transfer rate"
+msgstr "Pøenos dat dokonèen"
+
+#.
+#. * Special Files and Screens
+#.
+#: src/LYOptions.c:3516
+msgid "Special Files and Screens"
+msgstr ""
+
+#: src/LYOptions.c:3521
+msgid "Multi-bookmarks"
+msgstr "Dìlené zálo¾ky"
+
+#: src/LYOptions.c:3529
+msgid "Review/edit Bookmarks files"
+msgstr "Editace podsouborù se zálo¾kami"
+
+#: src/LYOptions.c:3531
+msgid "Goto multi-bookmark menu"
+msgstr "Menu dìlených zálo¾ek"
+
+#: src/LYOptions.c:3533
+msgid "Bookmarks file"
+msgstr "Soubor se zálo¾kami"
+
+#. Visited Pages: SELECT
+#: src/LYOptions.c:3539
+msgid "Visited Pages"
+msgstr "Nav¹tívené odkazy"
+
+#: src/LYPrint.c:959
+msgid " Print job complete.\n"
+msgstr "Nahrávání dokonèeno.\n"
+
+#: src/LYPrint.c:1296
+msgid "Document:"
+msgstr "Dokument:"
+
+#: src/LYPrint.c:1297
+msgid "Number of lines:"
+msgstr "Poèet øádkù:"
+
+#: src/LYPrint.c:1298
+msgid "Number of pages:"
+msgstr "Poèet stran:"
+
+#: src/LYPrint.c:1299
+msgid "pages"
+msgstr "stran(y)"
+
+#: src/LYPrint.c:1299
+msgid "page"
+msgstr "strana"
+
+#: src/LYPrint.c:1300
+msgid "(approximately)"
+msgstr "(pøibli¾nì)"
+
+#: src/LYPrint.c:1305
+msgid "Some print functions have been disabled!"
+msgstr "Nìkteré funkce tisku byly vypnuty!"
+
+#: src/LYPrint.c:1309
+msgid "Standard print options:"
+msgstr "Standardní menu voleb tisku:"
+
+#: src/LYPrint.c:1310
+msgid "Print options:"
+msgstr "Menu voleb tisku:"
+
+#: src/LYPrint.c:1316
+msgid "Save to a local file"
+msgstr "Ulo¾it do místního souboru"
+
+#: src/LYPrint.c:1318
+msgid "Save to disk disabled"
+msgstr "Ukládání na disk je vypnuto"
+
+#: src/LYPrint.c:1324
+msgid "Mail the file"
+msgstr "Poslat soubor po¹tou"
+
+#: src/LYPrint.c:1330
+msgid "Print to the screen"
+msgstr "Vytisknout na obrazovku"
+
+#: src/LYPrint.c:1334
+msgid "Print out on a printer attached to your vt100 terminal"
+msgstr "Vytisknout na tiskárnu pøipojenou k va¹emu vt100 terminálu"
+
+#: src/LYReadCFG.c:340
+msgid ""
+"Syntax Error parsing COLOR in configuration file:\n"
+"The line must be of the form:\n"
+"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
+"\n"
+"Here FOREGROUND and BACKGROUND must be one of:\n"
+"The special strings 'nocolor' or 'default', or\n"
+msgstr ""
+"Byla nalezena syntaktická chyba pøi zpracování direktivy COLOR v konfiguraèním\n"
+"souboru:\n"
+"Øádek musí být ve formátu:\n"
+"COLOR:CELÉ ÈÍSLO:POPØEDÍ:POZADÍ\n"
+
+#: src/LYReadCFG.c:353
+msgid "Offending line:"
+msgstr "kritický øádek:"
+
+#: src/LYReadCFG.c:660
+#, c-format
+msgid "key remapping of %s to %s for %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:667
+#, c-format
+msgid "key remapping of %s to %s failed\n"
+msgstr "pøemapování klávesy\n"
+
+#: src/LYReadCFG.c:688
+#, c-format
+msgid "invalid line-editor selection %s for key %s, selecting all\n"
+msgstr ""
+
+#: src/LYReadCFG.c:715 src/LYReadCFG.c:728
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:733
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) for %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:838
+#, c-format
+msgid "Lynx: cannot start, CERN rules file %s is not available\n"
+msgstr "Lynx: nelze spustit, soubor %s s pravidly CERN není dostupný\n"
+
+#: src/LYReadCFG.c:840
+msgid "(no name)"
+msgstr "(¾ádné jméno)"
+
+#: src/LYReadCFG.c:1658
+#, c-format
+msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
+msgstr "Více ne¾ %d vnoøených vlo¾ení z lynx.cfg -- nejedná se o nekoneènou smyèku?!?\n"
+
+#: src/LYReadCFG.c:1660
+#, c-format
+msgid "Last attempted include was '%s',\n"
+msgstr "Poslední vlo¾ený soubor je '%s'.\n"
+
+#: src/LYReadCFG.c:1661
+#, c-format
+msgid "included from '%s'.\n"
+msgstr "vlo¾ený z '%s'.\n"
+
+#: src/LYReadCFG.c:2116 src/LYReadCFG.c:2129 src/LYReadCFG.c:2165
+msgid "The following is read from your lynx.cfg file."
+msgstr "Následující údaje jsou èteny z va¹eho lynx.cfg."
+
+#: src/LYReadCFG.c:2117 src/LYReadCFG.c:2130
+msgid "Please read the distribution"
+msgstr "Pøeètìte si implicitní dodávaný s distribucí"
+
+#: src/LYReadCFG.c:2123 src/LYReadCFG.c:2133
+msgid "for more comments."
+msgstr "pro více informací."
+
+#: src/LYReadCFG.c:2147
+msgid "RELOAD THE CHANGES"
+msgstr "NAÈÍST ZMÌNY"
+
+#: src/LYReadCFG.c:2156
+msgid "Your primary configuration"
+msgstr "Va¹e primární konfigurace"
+
+#: src/LYShowInfo.c:129
+msgid "Directory that you are currently viewing"
+msgstr "Adresáø, který právì prohlí¾íte"
+
+#: src/LYShowInfo.c:132
+msgid "Name:"
+msgstr "Jméno:"
+
+#: src/LYShowInfo.c:135
+msgid "URL:"
+msgstr "URL:"
+
+#: src/LYShowInfo.c:146
+msgid "Directory that you have currently selected"
+msgstr "Adresáø, který jste právì zvolil"
+
+#: src/LYShowInfo.c:149
+msgid "File that you have currently selected"
+msgstr "Soubor, který jste právì zvolil"
+
+#: src/LYShowInfo.c:153
+msgid "Symbolic link that you have currently selected"
+msgstr "Symbolický odkaz, který jste právì zvolil"
+
+#: src/LYShowInfo.c:157
+msgid "Item that you have currently selected"
+msgstr "Polo¾ka, kterou jste právì zvolil"
+
+#: src/LYShowInfo.c:159
+msgid "Full name:"
+msgstr "Celé jméno:"
+
+#: src/LYShowInfo.c:168
+msgid "Unable to follow link"
+msgstr "Odkaz nelze následovat"
+
+#: src/LYShowInfo.c:170
+msgid "Points to file:"
+msgstr "Odkazuje do souboru:"
+
+#: src/LYShowInfo.c:175
+msgid "Name of owner:"
+msgstr "Jméno vlastníka:"
+
+#: src/LYShowInfo.c:178
+msgid "Group name:"
+msgstr "Jméno skupiny:"
+
+#: src/LYShowInfo.c:181
+msgid "File size:"
+msgstr "Velikost souboru:"
+
+#: src/LYShowInfo.c:187
+msgid "Creation date:"
+msgstr "Datum vytvoøení:"
+
+#: src/LYShowInfo.c:190
+msgid "Last modified:"
+msgstr "Poslední zmìna:"
+
+#: src/LYShowInfo.c:193
+msgid "Last accessed:"
+msgstr "Poslední pøístup:"
+
+#: src/LYShowInfo.c:195
+msgid "Access Permissions"
+msgstr "Pøístupová práva "
+
+#: src/LYShowInfo.c:261
+msgid "File that you are currently viewing"
+msgstr "Soubor, který si právì prohlí¾íte"
+
+#: src/LYShowInfo.c:266 src/LYShowInfo.c:375
+msgid "Linkname:"
+msgstr "Jméno odkazu:"
+
+#: src/LYShowInfo.c:279 src/LYShowInfo.c:291
+msgid "Charset:"
+msgstr "Znaková sada:"
+
+#: src/LYShowInfo.c:297
+msgid "Server:"
+msgstr "Server:"
+
+#: src/LYShowInfo.c:300
+msgid "Date:"
+msgstr "Datum:"
+
+#: src/LYShowInfo.c:303
+msgid "Last Mod:"
+msgstr "Poslední modifikace:"
+
+#: src/LYShowInfo.c:309
+msgid "&nbsp;Expires:"
+msgstr "&nbsp;Expiruje:"
+
+#: src/LYShowInfo.c:313
+msgid "Cache-Control:"
+msgstr "Cache-Control:"
+
+#: src/LYShowInfo.c:317
+msgid "Content-Length:"
+msgstr "Content-Length:"
+
+#: src/LYShowInfo.c:322
+msgid "Language:"
+msgstr "Jazyk:"
+
+#: src/LYShowInfo.c:329
+msgid "Post Data:"
+msgstr "Post Data:"
+
+#: src/LYShowInfo.c:331
+msgid "Post Content Type:"
+msgstr "Post Content Type:"
+
+#: src/LYShowInfo.c:340
+msgid "Owner(s):"
+msgstr "Vlastníci:"
+
+#: src/LYShowInfo.c:343
+msgid "size:"
+msgstr "velikost:"
+
+#: src/LYShowInfo.c:343
+msgid "lines"
+msgstr "øádky"
+
+#: src/LYShowInfo.c:346
+msgid "mode:"
+msgstr "re¾im:"
+
+#: src/LYShowInfo.c:348
+msgid "forms mode"
+msgstr "formuláøový re¾im"
+
+#: src/LYShowInfo.c:350
+msgid "source"
+msgstr "zdroj"
+
+#: src/LYShowInfo.c:350
+msgid "normal"
+msgstr "bì¾ný"
+
+#: src/LYShowInfo.c:351
+msgid ", safe"
+msgstr ", bezpeèný"
+
+#: src/LYShowInfo.c:352
+msgid ", via internal link"
+msgstr ", vnitøní odkaz"
+
+#: src/LYShowInfo.c:358
+msgid ", no-cache"
+msgstr ", no-cache"
+
+#: src/LYShowInfo.c:360
+msgid ", ISMAP script"
+msgstr ", ISMAP skript"
+
+#: src/LYShowInfo.c:362
+msgid ", bookmark file"
+msgstr ", soubor zálo¾ek"
+
+#: src/LYShowInfo.c:371
+msgid "Link that you currently have selected"
+msgstr "Odkaz, který jste právì zvolil"
+
+#: src/LYShowInfo.c:384
+msgid "Method:"
+msgstr "Metoda:"
+
+#: src/LYShowInfo.c:389
+msgid "Enctype:"
+msgstr "Typ kódování"
+
+#: src/LYShowInfo.c:401
+msgid "(Form field)"
+msgstr "(Pole formuláøe)"
+
+#: src/LYShowInfo.c:416
+msgid "No Links on the current page"
+msgstr "Aktuální stránka neobsahuje ¾ádné odkazy"
+
+#: src/LYStyle.c:250
+#, c-format
+msgid ""
+"Syntax Error parsing style in lss file:\n"
+"[%s]\n"
+"The line must be of the form:\n"
+"OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
+"where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+msgstr ""
+"Syntaktická chyba pøi zpracování stylu v lss souboru:\n"
+"[%s]\n"
+"Øádek musí mít formát:\n"
+"OBJEKT:MONO:BARVA (t.j. em:bold:brightblue:white)\n"
+"kde OBJEKT je jedno z EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+
+#: src/LYTraversal.c:107
+msgid "here is a list of the history stack so that you may rebuild"
+msgstr "Zde je výpis historie "
+
+#: src/LYUpload.c:78
+msgid "ERROR! - upload command is misconfigured"
+msgstr "CHYBA! - pøíkaz pro poslání je ¹patnì nakonfigurovaný"
+
+#: src/LYUpload.c:100
+msgid "Illegal redirection \"../\" found! Request ignored."
+msgstr "Pøesmìrování obsahuje \"..\"! Po¾adavek ignorován."
+
+#: src/LYUpload.c:103
+msgid "Illegal character \"/\" found! Request ignored."
+msgstr "Nalezen chybný znak \"/\"! Po¾adavek ignorován."
+
+#: src/LYUpload.c:106
+msgid "Illegal redirection using \"~\" found! Request ignored."
+msgstr "Pøesmìrování obsahuje \"~\"! Po¾adavek ignorován."
+
+#: src/LYUpload.c:163
+msgid "Unable to upload file."
+msgstr "Soubor nelze poslat."
+
+#: src/LYUpload.c:214
+msgid "Upload To:"
+msgstr "Poslat na:"
+
+#: src/LYUpload.c:215
+msgid "Upload options:"
+msgstr "Menu voleb posílání:"
+
+#: src/LYUtils.c:3075
+msgid "Unexpected access protocol for this URL scheme."
+msgstr ""
+
+#: src/LYUtils.c:3915
+msgid "Too many tempfiles"
+msgstr ""
+
+#: src/LYUtils.c:4217
+#, fuzzy
+msgid "unknown restriction"
+msgstr "neznámé pole èi odkaz"
+
+#: src/LYUtils.c:4248
+msgid "No restrictions set.\n"
+msgstr ""
+
+#: src/LYUtils.c:4251
+msgid "Restrictions set:\n"
+msgstr "Popis:\n"
+
+#: src/LYUtils.c:5601
+msgid "Ignoring invalid HOME"
+msgstr "Ignoruji chybnou hodnotu HOME"
+
+#: src/LYrcFile.c:20
+msgid "Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n"
+msgstr ""
+
+#: src/LYrcFile.c:242
+msgid ""
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
+msgstr ""
+"Volba accept_all_cookies øíká Lynxu, aby automaticky pøijímal v¹echna cookie.\n"
+"Implicitní nastavení je \"FALSE\", pøi kterém budete muset potvrdit pøijetí\n"
+"ka¾dého cookie. Pøijetí ka¾dého cookie zapnete nastavením accept_all_cookies\n"
+"na \"TRUE\".\n"
+
+#: src/LYrcFile.c:249
+msgid ""
+"bookmark_file specifies the name and location of the default bookmark\n"
+"file into which the user can paste links for easy access at a later\n"
+"date.\n"
+msgstr ""
+"Volba bookmark_file udává jméno implicitního souboru se zálo¾kami, do kterého\n"
+"si u¾ivatel mù¾e ukládat odkazy pro pozdìj¹í pou¾ití.\n"
+
+#: src/LYrcFile.c:254
+msgid ""
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
+msgstr ""
+"Pokud je volba case_sensitive_searching zapnuta (\"on\") tak, kdy¾ u¾ivatel\n"
+"spustí klávesou 's' èi '/' vyhledávání, bude toto brát ohled na velikost písmen.\n"
+"Tato volba je implicitnì vypnuta (\"off\").\n"
+
+#: src/LYrcFile.c:259
+msgid ""
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
+msgstr ""
+"Volba character_set definuje zpùsob zobrazení 8bitových znakù na va¹em\n"
+"terminálu. Pokud se na va¹í obrazovce 8bitové znaky nezobrazují správnì,\n"
+"mù¾ete zkusit jiné 8bitové kódování, èi pou¾ít 7bitové aproximace.\n"
+"Mo¾né znakové sady:\n"
+
+#: src/LYrcFile.c:266
+msgid ""
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
+msgstr ""
+"cookie_accept_domains a cookie_reject_domains jsou dvojteèkou oddìlený seznam\n"
+"domén, z kterých Lynx automaticky pøijme, èi odmítne jakékoliv cookie. Pokud\n"
+"je doména uvedena v obou seznamech, má cookie_reject_domains pøednost. Volba\n"
+"accept_all_cookies má vy¹¹í prioritu, ne¾ obì tyto volby.\n"
+
+#: src/LYrcFile.c:274
+msgid ""
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
+msgstr ""
+"Volba cookie_file udává soubor, ve kterém se ukládají trvalé cookies.\n"
+"Implicitním nastavením je ~/.lynx_cookies.\n"
+
+#: src/LYrcFile.c:279
+msgid ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
+msgstr ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains a\n"
+"cookie_query_invalid_domains jsou dvojteèkou oddìlený seznam domén, které\n"
+"které by mìly být podrobeny nejrùznìj¹ím stupòùm ovìøování. Pokud je\n"
+"doména nastavena na 'strict' ovìøování, bude postupováno pøesnì dle RFC2109.\n"
+"Doména s 'loose' ovìøováním bude moci nastavovat cookies s chybnou cestou\n"
+"èi doménovým atributem (implicitním nastavením je zeptat se u¾ivatele).\n"
+
+#: src/LYrcFile.c:292
+msgid ""
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
+msgstr ""
+"Volba dir_list_styles udává pou¾itý styl pro výpis adresáøù pod DIRED_SUPPORT\n"
+"(pokud je podporováno). Implicitní nastavení je \"MIXED_STYLE\", které zpùsobí\n"
+"vzájemné promíchání souborù s adresáøi. \"FILES_FIRST\" vypí¹e jako první\n"
+"soubory a \"DIRED_SUPPORT\" adresáøe.\n"
+
+#: src/LYrcFile.c:300
+msgid ""
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
+msgstr ""
+"Pokud je volba emacs_keys nastavena na \"on\", pak jsou bì¾né EMACSOVÉ klávesy pro pohyb:\n"
+" ^N = dolù ^P = nahoru\n"
+" ^B = vlevo ^F = vpravo\n"
+"zapnuty.\n"
+
+#: src/LYrcFile.c:306
+msgid ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+msgstr ""
+"Volba file_editor udává, který editor bude pou¾it k úpravám místních souborù\n"
+"a psaní dopisù. Jestli¾e není specifikován ¾ádný editor, tak, pokud nejsou\n"
+"povoleny z pøíkazové øádky, jsou úpravy souborù zakázány. Pro psaní dopisù\n"
+"bude pou¾it vestavìný editor.\n"
+
+#: src/LYrcFile.c:312
+msgid ""
+"The file_sorting_method specifies which value to sort on when viewing\n"
+"file lists such as FTP directories. The options are:\n"
+" BY_FILENAME -- sorts on the name of the file\n"
+" BY_TYPE -- sorts on the type of the file\n"
+" BY_SIZE -- sorts on the size of the file\n"
+" BY_DATE -- sorts on the date of the file\n"
+msgstr ""
+"Metoda øazení souborù udává klíè, dle kterého budou øazeny seznamy souborù,\n"
+"jako jsou napøíklad FTP adresáøe. Mo¾né volby jsou:\n"
+" BY_FILENAME -- øadí dle jména souboru\n"
+" BY_TYPE -- øadí dle typu souboru\n"
+" BY_SIZE -- øadí dle velikosti souboru\n"
+" BY_DATE -- øadí dle data souboru\n"
+
+#: src/LYrcFile.c:324
+msgid ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+msgstr ""
+"Volba lineedit_mode specifikuje funkce kláves pro øádkový editor. Pokud je tato\n"
+"volba nastavena na \"Default Binding\", pak jsou pro posun kurzoru a mazání\n"
+"textu pou¾ity následující klávesy:\n"
+"\n"
+" Prev Next Enter = Pøijme zadaný text\n"
+" Posun o znak: <- -> ^G = Zru¹í zadávání\n"
+" Posun o slovo: ^P ^N ^U = Sma¾e øádek\n"
+" Sma¾e znak: ^H ^R ^A = Zaèátek øádku\n"
+" Sma¾e slovo: ^B ^F ^E = Konec øádku\n"
+"\n"
+"Mo¾né re¾imy øádkového editoru:\n"
+
+#: src/LYrcFile.c:339
+msgid ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+msgstr ""
+"Zde mù¾ete nastavit jména podsouborù zálo¾ek a jejich popisy. Formát je:\n"
+"multi_bookmark<velké_písmeno>=<jméno souboru>,<popis>. Mù¾e být zadáno a¾ 26\n"
+"podsouborù zálo¾ek (ka¾dý odpovídá jednomu velkému písmeno anglické abecedy).\n"
+"Zaèíná se s \"multi_bookmarkB\", proto¾e 'A' je implicitní (viz vý¹e).\n"
+
+#: src/LYrcFile.c:345
+msgid ""
+"personal_mail_address specifies your personal mail address. The\n"
+"address will be sent during HTTP file transfers for authorization and\n"
+"logging purposes, and for mailed comments.\n"
+"If you do not want this information given out, set the NO_FROM_HEADER\n"
+"to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
+"could leave this field blank, but then you won't have it included in\n"
+"your mailed comments.\n"
+msgstr ""
+"Volba personal_mail_address udává va¹i osobní adresu elektronické po¹ty. Bude\n"
+"pou¾ita pøi HTTP pøenosech souborù pro autorizaci a záznam èinnosti a pøi\n"
+"zasílání komentáøù.\n"
+"Pokud chcete, aby tato informace zùstala dùvìrnou, nastavte v konfiguraèním\n"
+"souboru lynx.cfg volbu NO_FROM_HEADER na TRUE, èi pou¾ijte pøepínaè -nofrom.\n"
+"Té¾ je mo¾né nechat toto pole prázdné, ale pak by nebylo zaèlenìno do vámi\n"
+"odeslaných komentáøù.\n"
+
+#: src/LYrcFile.c:354
+msgid ""
+"preferred_charset specifies the character set in MIME notation (e.g.,\n"
+"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
+"to http servers using an Accept-Charset header. The value should NOT\n"
+"include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
+"by default. May be a comma-separated list.\n"
+"If a file in that character set is available, the server will send it.\n"
+"If no Accept-Charset header is present, the default is that any\n"
+"character set is acceptable. If an Accept-Charset header is present,\n"
+"and if the server cannot send a response which is acceptable\n"
+"according to the Accept-Charset header, then the server SHOULD send\n"
+"an error response, though the sending of an unacceptable response\n"
+"is also allowed.\n"
+msgstr ""
+"Volba preferred_charset udává, ve kterých znakových sadách bude Lynx pøednostnì\n"
+"po¾adovat dokumenty od http serverù. Znaková sada musí být zadána v MIME notaci\n"
+"(ISO-8859-2, ISO-8859-5). ISO-8859-1 a US-ASCII by NEMÌLY být pou¾ity, nebo»\n"
+"tyto znakové sady jsou v¾dy implicitnì pøedpokládány. Znakových sad mù¾e být\n"
+"uvedeno více a musí být oddìleny èárkou.\n"
+"Pokud je dokument v této znakové sadì k dispozici, server jej za¹le. V pøípadì,\n"
+"¾e hlavièka Accept-Charset není pøítomna, se implicitnì pøedpokládá, ¾e bude\n"
+"akceptována jakákoli znaková sada. Jestli¾e je hlavièka Accept-Charset pøítomna\n"
+"a server nemù¾e zaslat dokument v poøadované znakové sadì, MÌL BY zaslat\n"
+"chybovou hlá¹ku. Mù¾e v¹ak také poslat dokument v jiné, ne¾ po¾adované\n"
+"znakové sadì.\n"
+
+#: src/LYrcFile.c:368
+msgid ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+msgstr ""
+"Volba preferred_language udává, v kterých jazycích bude Lynx pøednostnì\n"
+"po¾adovat dokumenty od http serverù. Jazyk musí být zadán v MIME notaci (napø.\n"
+"en, fr; mù¾e jich být zadáno více oddìlených èárkou v sestupném poøadí dle\n"
+"preference). Pokud bude dokument v tomto jazyce k dispozici, server jej za¹le.\n"
+"V opaèném pøípadì jej za¹le ve svém implicitním jazyce.\n"
+
+#: src/LYrcFile.c:377
+msgid ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Pokud je volba run_all_execution_links zapnuta (\"on\"), pak v¹echny programy\n"
+"budou pøi zvolení odkazu na tento program spu¹tìny.\n"
+"\n"
+"VAROVÁNÍ - Tato volba je VELICE nebezpeèná. Jeliko¾ si mù¾ete prohlí¾et\n"
+" informace, které pocházejí z neznámých a nedùvìryhodných zdrojù,\n"
+" existuje mo¾nost, ¾e nìkteré odkazy vedou k programùm typu 'trojský\n"
+" kùò'. Úèelem odkazù na 'trojské konì' mù¾e být smazání souborù èi\n"
+" naru¹ení bezpeènosti systému. Tato volba by mìla být zapnuta pouze\n"
+" tehdy, jestli¾e soubory, které prohlí¾íte, pocházejí z dùvìryhodných\n"
+" zdrojù.\n"
+
+#: src/LYrcFile.c:388
+msgid ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Pokud je volba run_execution_links_on_local_files zapnuta (\"on\"), pak\n"
+"v¹echny místní programy, na které je odkaz v MÍSTNÍCH souborech, budou pøi\n"
+"zvolení tohoto odkazu spu¹tìny. Tato volba se od volby run_all_execution_links\n"
+"odli¹uje v tom, ¾e povoluje spou¹tìní pouze tìch programù, na nì¾ vedou odkazy\n"
+"z MÍSTNÍCH souborù.\n"
+"\n"
+"VAROVÁNÍ - Tato volba je potenciálnì nebezpeèná. Jeliko¾ si mù¾ete prohlí¾et\n"
+" informace, které pocházejí z neznámých a nedùvìryhodných zdrojù,\n"
+" existuje mo¾nost, ¾e nìkteré odkazy vedou k programùm typu 'trojský\n"
+" kùò'. Úèelem odkazù na 'trojské konì' mù¾e být smazání souborù èi\n"
+" naru¹ení bezpeènosti systému. Tato volba by mìla být zapnuta pouze\n"
+" tehdy, jestli¾e soubory, které prohlí¾íte, pocházejí z dùvìryhodných\n"
+" zdrojù.\n"
+
+#: src/LYrcFile.c:403
+msgid ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+msgstr ""
+"Volba select_popups udává, zda volby (OPTION) uvnitø prvku SELECT, který\n"
+"nemá specifikován atribut MULTIPLE, budou zobrazeny jako vertikální seznam\n"
+"pøepínacích tlaèítek èi jako vyskakovací menu. Pokud je atribut MULTIPLE\n"
+"specifikován, pak Lynx v¾dy vytvoøí vertikální seznam za¹krtávacích polí.\n"
+"Nastavení této volby na \"on\" zapne pou¾ívání vyskakovacích menu. Nastavení\n"
+"na \"off\" zapne pou¾ívání pøepínacích tlaèítek. Implicitní nastavení mù¾e být\n"
+"potlaèeno pøepínaèem -popup.\n"
+
+#: src/LYrcFile.c:413
+msgid ""
+"show_color specifies how to set the color mode at startup. A value of\n"
+"\"never\" will force color mode off (treat the terminal as monochrome)\n"
+"at startup even if the terminal appears to be color capable. A value of\n"
+"\"always\" will force color mode on even if the terminal appears to be\n"
+"monochrome, if this is supported by the library used to build lynx.\n"
+"A value of \"default\" will yield the behavior of assuming\n"
+"a monochrome terminal unless color capability is inferred at startup\n"
+"based on the terminal type, or the -color command line switch is used, or\n"
+"the COLORTERM environment variable is set. The default behavior always is\n"
+"used in anonymous accounts or if the \"option_save\" restriction is set.\n"
+"The effect of the saved value can be overridden via\n"
+"the -color and -nocolor command line switches.\n"
+"The mode set at startup can be changed via the \"show color\" option in\n"
+"the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
+"\"off\" \"show color\" settings will be treated as \"default\".\n"
+msgstr ""
+"Volba show_color udává, jak bude nastaven barevný re¾im po spu¹tìní programu.\n"
+"Hodnota \"never\" znamená, ¾e terminál bude chápán jako monochromatický (\n"
+"i kdyby podporoval barvy). Hodnota \"always\" zapne barevný re¾im i kdy¾ se\n"
+"terminál zdá být monochromatickým. Barvy musí být podporovány knihovnou, se\n"
+"kterou byl Lynx pøelo¾en. Hodnota \"default\" znamená, ¾e pokud bude splnìna\n"
+"jedna z následujících podmínek, bude terminál pova¾ován za barevný, jinak za\n"
+"monochromatický: terminál podporuje barvy, byl pou¾it pøepínaè -color èi je\n"
+"nastavena promìnná COLORTERM. Implicitní chování je v¾dy pou¾ito pro anonymní\n"
+"úèty, nebo pokud je nastaveno omezení \"option_save\".\n"
+"Nastavení této volby mù¾e být potlaèeno pøepínaèi -color èi -nocolor.\n"
+"Re¾im nastavený pøi startu mù¾e být zmìnìn pomocí volby \"show color\"\n"
+"v konfiguraèním menu (do nìj vstoupíte klávesou 'o'). Pokud je hodnota volby\n"
+"\"show color\" ulo¾ena, je pova¾ována za implicitní nastavení.\n"
+
+#: src/LYrcFile.c:430
+msgid ""
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
+msgstr ""
+"Volba show_cursor udává, zda 'schovat' kurzor k pravému (a pokud mo¾no\n"
+"i dolnímu) kraji obrazovky, èi zda jej umístit vlevo k aktuálnímu odkazu\n"
+"(v dokumentech) nebo volbì (ve vyskakovacích menu). Zobrazení kurzoru vlevo\n"
+"od aktuálního odkazu je u¾iteèné pro braille terminály a pro terminály, které\n"
+"neumí zvýraznit aktuální odkaz zvýraznìním èi barvou.\n"
+"Nastavení této volby na \"on\" zpùsobí zobrazování kurzoru vlevo od aktuálního\n"
+"odkazu. Nastavení na \"off\" zapne 'schovávání' kurzoru. Implicitní nastavení\n"
+"mù¾e být potlaèeno pøepínaèem -show_cursor.\n"
+
+#: src/LYrcFile.c:441
+msgid ""
+"show_dotfiles specifies that the directory listing should include\n"
+"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
+"honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
+"restricted via a command line switch. If display of hidden files\n"
+"is disabled, creation of such files via Lynx also is disabled.\n"
+msgstr ""
+"Volba show_dotfiles øíká, ¾e výpisy obsahu adresáøù by mìly zahrnovat\n"
+"'skryté' (teèkou zaèínající) soubory/adresáøe. Na zapnutí této volby (nastavení\n"
+"na \"on\"), bude brán zøetel pouze tehdy, jestli¾e je zapnuta také v lynx.cfg\n"
+"a/nebo v userdefs.h a zároveò není vypnuta z pøíkazové øádky. Pokud je\n"
+"zobrazování skrytých souborù vypnuto, nebude je mo¾né z Lynxu ani vytváøet.\n"
+
+#: src/LYrcFile.c:452
+msgid ""
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
+msgstr ""
+"Pokud není volba sub_bookmarks vypnuta (\"off\") a bylo specifikováno více\n"
+"souborù se zálo¾kami (viz ní¾e), pak pøi v¹ech operacích se zálo¾kami bude\n"
+"u¾ivatel nejprve vyzván, aby vybral nìkterý ze souborù. Jestli¾e je nastavena\n"
+"volba bookmark_file, pak bude implicitnì pou¾ita její hodnota.\n"
+"Jestli¾e je sub_bookmarks nastaveno na \"advanced\" a u¾ivatelský re¾im je také\n"
+"\"advanced\", tak pøíkaz pro zobrazení zálo¾ek ('v') vyvolá místo menu\n"
+"prompt. Nastavení této volby na \"standard\" zpùsobí zobrazení menu bez\n"
+"ohledu na u¾ivatelský re¾im.\n"
+
+#: src/LYrcFile.c:464
+msgid ""
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
+msgstr ""
+"Volba user_mode udává úroveò znalostí u¾ivatele o programu Lynx. Implicitní\n"
+"nastavení je \"NOVICE\", které zpùsobí zobrazení 2 øádek s nápovìdou v dolní\n"
+"èásti obrazovky. Nastavení \"INTERMEDIATE\" vypne tuto nápovìdu a nastavení\n"
+"\"ADVANCED\" zpùsobí vypsání URL aktuálního odkazu v dolní èásti obrazovky.\n"
+
+#: src/LYrcFile.c:472
+msgid ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+msgstr ""
+"Pokud je volba verbose_images zapnuta (\"on\"), lynx bude zobrazovat jména\n"
+"souborù s obrázky místo [INLINE], [LINK] èi [IMAGE].\n"
+"Viz té¾ volbu VERBOSE_IMAGES v kynx.cfg.\n"
+
+#: src/LYrcFile.c:477
+msgid ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+msgstr ""
+"Pokud je volba vi_keys nastavena na \"on\", pak jsou bì¾né VI klávesy pro pohyb:\n"
+" j = dolù k = nahoru\n"
+" h = vlevo l = vpravo\n"
+"zapnuty. Fungují pouze malá písmena.\n"
+"Velké 'H', 'J' a 'K zapínají nápovìdu, zkrácená URL a výpis klávesové mapy.\n"
+
+#: src/LYrcFile.c:485
+msgid ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+msgstr ""
+
+#: src/LYrcFile.c:693
+msgid ""
+"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
+"your keypad when the numlock is on will act as arrow keys:\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"and the corresponding keyboard numbers will act as arrow keys,\n"
+"regardless of whether numlock is on.\n"
+msgstr ""
+"Pokud je volba keypad_mode nastavena na \"NUMBERS_AS_ARROWS\", pak se èísla na\n"
+"numerické klávesnici pøi zapnutém numlock budou chovat jako kurzorové klávesy:\n"
+" 8 = Nahoru\n"
+" 4 = Vlevo 6 = Vpravo\n"
+" 2 = Dolù\n"
+"Èísla na hlavní klávesnici se budou chovat jako kurzorové klávesy bez ohledu\n"
+"na stav numlock.\n"
+
+#: src/LYrcFile.c:702
+msgid ""
+"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
+"appear next to each link and numbers are used to select links.\n"
+msgstr ""
+"Pokud je volba keypad_mode nastavena na \"LINKS_ARE_NUMBERED\", pak v¹echny\n"
+"odkazy budou viditelnì oèíslovány a èísla budou pou¾ita ke zvolení pøíslu¹ného\n"
+"odkazu.\n"
+
+#: src/LYrcFile.c:706
+msgid ""
+"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
+"numbers will appear next to each link and visible form input field.\n"
+"Numbers are used to select links, or to move the \"current link\" to a\n"
+"form input field or button. In addition, options in popup menus are\n"
+"indexed so that the user may type an option number to select an option in\n"
+"a popup menu, even if the option isn't visible on the screen. Reference\n"
+"lists and output from the list command also enumerate form inputs.\n"
+msgstr ""
+"Pokud je volba keypad_mode nastavena na \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\",\n"
+"pak v¹echny odkazy a viditelná pole formuláøù budou viditelnì oèíslovány. Èísla\n"
+"budou pou¾ita ke zvolení pøíslu¹ného odkazu èi pøesunu na vstupní pole formuláøe\n"
+"èi tlaèítko. Volby vyskakovacích menu jsou indexovány, tak¾e u¾ivatel mù¾e\n"
+"zvolit polo¾ku napsáním jejího èísla i kdy¾ tato není viditelná na obrazovce.\n"
+"Seznamy odkazù a výstup pøíkazu 'list' jsou také èíslovány.\n"
+
+#: src/LYrcFile.c:715
+msgid ""
+"NOTE: Some fixed format documents may look disfigured when\n"
+"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
+"enabled.\n"
+msgstr ""
+"POZOR: Formát nìkterých dokumentù s pevnou strukturou mù¾e pøi zapnutých volbách\n"
+"\"LINKS_ARE_NUMBERED\" a \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" vypadat jako\n"
+"po¹kozený.\n"
+
+#: src/LYrcFile.c:748
+msgid ""
+"Lynx User Defaults File\n"
+"\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
+msgstr ""
+"Soubor s u¾ivatelskými preferencemi\n"
+"\n"
+"Tento soubor obsahuje preference a nastavení ulo¾ené z Konfiguraèního menu\n"
+"programu Lynx (obvykle klávesou '>'). Tento soubor není tøeba upravovat\n"
+"pøímo, jeliko¾ implicitní nastavení mohou být zmìnìna z Konfiguraèního\n"
+"menu a kdy¾ jsou preference z Konfiguraèního menu ulo¾eny, tento soubor bude\n"
+"celý pøepsán. Byl jste varován...\n"
+"V¹eobecný konfiguraèní soubor, který mo¾ná hledáte se normálnì jmenuje lynx.cfg\n"
+"a má jiný obsah a jiný formát. Není to tento soubor.\n"
diff --git a/gnu/usr.bin/lynx/po/da.po b/gnu/usr.bin/lynx/po/da.po
new file mode 100644
index 00000000000..bddf9002d93
--- /dev/null
+++ b/gnu/usr.bin/lynx/po/da.po
@@ -0,0 +1,5522 @@
+# Dansk po-fil for Lynx Web-browseren
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Morten Bo Johansen <mojo@image.dk>, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lynx 2.8.4.pre2\n"
+"POT-Creation-Date: 2001-06-01 18:55-0400\n"
+"PO-Revision-Date: 2001-07-01 17:46+0200\n"
+"Last-Translator: Morten Bo Johansen <mojo@image.dk>\n"
+"Language-Team: Danish <dansk@klid.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ******************************************************************
+#. * The following definitions are for status line prompts, messages, or
+#. * warnings issued by Lynx during program execution. You can modify
+#. * them to make them more appropriate for your site. We recommend that
+#. * you extend these definitions to other languages using the gettext
+#. * library. There are also scattered uses of 'gettext()' throughout the
+#. * Lynx source, covering all but those messages which (a) are used for
+#. * debugging (CTRACE) or (b) are constants used in interaction with
+#. * other programs.
+#. *
+#. * Links to collections of alternate definitions, developed by the Lynx
+#. * User Community, are maintained in Lynx links:
+#. *
+#. * http://www.trill-home.com/lynx.html
+#. *
+#. * See ABOUT-NLS and po/readme for details and location of contributed
+#. * translations. When no translation is available, the English default is
+#. * used.
+#.
+#: LYMessages.c:29
+#, c-format
+msgid "Alert!: %s"
+msgstr "NB!: %s"
+
+#: LYMessages.c:30
+msgid "Welcome"
+msgstr "Velkommen"
+
+#: LYMessages.c:31 LYMessages.c:32
+msgid "Are you sure you want to quit?"
+msgstr "Er du sikker på du vil afslutte?"
+
+#: LYMessages.c:34 LYMessages.c:35
+msgid "Really exit from Lynx?"
+msgstr "Virkelig forlade Lynx?"
+
+#: LYMessages.c:37
+msgid "Connection interrupted."
+msgstr "Forbindelse afbrudt."
+
+#: LYMessages.c:38
+msgid "Data transfer interrupted."
+msgstr "Dataoverførsel afbrudt."
+
+#: LYMessages.c:39
+msgid "Cancelled!!!"
+msgstr "Afbrudt!"
+
+#: LYMessages.c:40
+msgid "Cancelling!"
+msgstr "Afbryder!"
+
+#: LYMessages.c:41
+msgid "Excellent!!!"
+msgstr "Glimrende!"
+
+#: LYMessages.c:42
+msgid "OK"
+msgstr "O.k."
+
+#: LYMessages.c:43
+msgid "Done!"
+msgstr "Færdig!"
+
+#: LYMessages.c:44
+msgid "Bad request!"
+msgstr "Forkert anmodning!"
+
+#: LYMessages.c:45
+msgid "previous"
+msgstr "forrige"
+
+#: LYMessages.c:46
+msgid "next screen"
+msgstr "næste skærmbillede"
+
+#: LYMessages.c:47
+msgid "HELP!"
+msgstr "HJÆLP!"
+
+#: LYMessages.c:48
+msgid ", help on "
+msgstr ", hjælp til "
+
+#. #define HELP
+#: LYMessages.c:50
+msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
+msgstr "Piletaster navigerer, '?' for hjælp', 'q' afslutter, '<-' går tilbage."
+
+#. #define MOREHELP
+#: LYMessages.c:52
+msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
+msgstr "-- tast mellemrum for mere, piletaster navigerer, '?' for hjælp, 'q' afslutter."
+
+#: LYMessages.c:53
+msgid "-- press space for next page --"
+msgstr "-- tast mellemrum for næste side --"
+
+#: LYMessages.c:54
+msgid "URL too long"
+msgstr "URL for lang"
+
+#. Inactive input fields, messages used with -tna option - kw
+#. #define FORM_LINK_TEXT_MESSAGE_INA
+#: LYMessages.c:60
+msgid "(Text entry field) Inactive. Press <return> to activate."
+msgstr "(Tekstindtastningsfelt) inaktivt. Tast <retur> for at aktivere."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA
+#: LYMessages.c:62
+msgid "(Textarea) Inactive. Press <return> to activate."
+msgstr "(Tekstområde) inaktivt. Tast <retur> for at aktivere."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA_E
+#: LYMessages.c:64
+#, c-format
+msgid "(Textarea) Inactive. Press <return> to activate (%s for editor)."
+msgstr "(Tekstområde) inaktivt. <Retur> aktiverer. (%s for editor)."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA
+#: LYMessages.c:66
+msgid "(Form field) Inactive. Use <return> to edit."
+msgstr "(Formularfelt) inaktivt. Tast <retur> for at aktivere."
+
+#. #define FORM_TEXT_SUBMIT_MESSAGE_INA_X
+#: LYMessages.c:68
+#, c-format
+msgid "(Form field) Inactive. Use <return> to edit (%s to submit with no cache)."
+msgstr "(Formularfelt> inaktivt. <retur> aktiverer (%s for at indsende udenom cache)."
+
+#. #define FORM_TEXT_RESUBMIT_MESSAGE_INA
+#: LYMessages.c:70
+msgid "(Form field) Inactive. Press <return> to edit, press <return> twice to submit."
+msgstr "(Formularfelt) inaktivt. Tast <retur> for at aktivere, to gange <retur> sender."
+
+#. #define FORM_TEXT_SUBMIT_MAILTO_MSG_INA
+#: LYMessages.c:72
+msgid "(mailto form field) Inactive. Press <return> to change."
+msgstr "(mailto-formularfelt) inaktivt. Tast <retur> for at aktivere."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE_INA
+#: LYMessages.c:74
+msgid "(Password entry field) Inactive. Press <return> to activate."
+msgstr "(Indtastningsfelt til adgangskode) inaktivt. Tast <retur> for at aktivere."
+
+#. #define FORM_LINK_FILE_UNM_MSG
+#: LYMessages.c:77
+msgid "UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off."
+msgstr "UKORRIGERBART filindgangsfelt. Brug pil OP/NED for at komme væk."
+
+#. #define FORM_LINK_FILE_MESSAGE
+#: LYMessages.c:79
+msgid "(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off."
+msgstr "(Filindtastningsfelt) Anfør filnavn. Brug pil OP/NED el. TAB for at komme væk."
+
+#. #define FORM_LINK_TEXT_MESSAGE
+#: LYMessages.c:81
+msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Tekstindtastningsfelt) Indtast tekst. Pil OP/NED el. TAB forlader feltet."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE
+#: LYMessages.c:83
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off."
+msgstr "(Tekstområde) Indtast tekst. Pil OP/NED el. TAB forlader området."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_E
+#: LYMessages.c:85
+#, c-format
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor)."
+msgstr "(Tekstområde) Anfør tekst. Pil OP/NED el. TAB går væk (%s for editor)"
+
+#. #define FORM_LINK_TEXT_UNM_MSG
+#: LYMessages.c:87
+msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
+msgstr "UKORRIGERBART formulartekstfelt. Pil OP/NED el. TAB forlader feltet."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE
+#: LYMessages.c:89
+msgid "(Form field) Enter text. Use <return> to submit."
+msgstr "(Formularfelt) indtast tekst. Tast <retur> for at indsende."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_X
+#: LYMessages.c:91
+#, c-format
+msgid "(Form field) Enter text. Use <return> to submit (%s for no cache)."
+msgstr "(Formularfelt) Anfør tekst. <retur> indsender (%s sender udenom cache)"
+
+#. #define FORM_LINK_TEXT_RESUBMIT_MESSAGE
+#: LYMessages.c:93
+msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
+msgstr "(Formularfelt) indtast tekst. <retur> indsender, pile/TAB forlader feltet."
+
+#. #define FORM_LINK_TEXT_SUBMIT_UNM_MSG
+#: LYMessages.c:95
+msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
+msgstr "UKORRIGERBART formularfelt. Brug pil OP/NED el. TAB for at komme væk."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_MSG
+#: LYMessages.c:97
+msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
+msgstr "(mailto-formularfelt) Anfør tekst. <retur> indsender, piletaster forlader felt."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:99
+msgid "(mailto form field) Mail is disallowed so you cannot submit."
+msgstr "(mailto formularfelt) postning er ikke tilladt, så du kan ikke indsende."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE
+#: LYMessages.c:101
+msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Indtastningsfelt til adgangskode) indtast tekst. Pil OP/NED forlader feltet."
+
+#. #define FORM_LINK_PASSWORD_UNM_MSG
+#: LYMessages.c:103
+msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
+msgstr "UKORRIGERBAR adgangskodeformular. Brug pil OP/NED el. TAB for at komme væk."
+
+#. #define FORM_LINK_CHECKBOX_MESSAGE
+#: LYMessages.c:105
+msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
+msgstr "(Afkrydsningsfelt) Højrepil el. <retur> slår til/fra."
+
+#. #define FORM_LINK_CHECKBOX_UNM_MSG
+#: LYMessages.c:107
+msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
+msgstr "UKORRIGERBAR afkrydsningsboks. Brug pil OP/NED el. TAB for at komme væk."
+
+#. #define FORM_LINK_RADIO_MESSAGE
+#: LYMessages.c:109
+msgid "(Radio Button) Use right-arrow or <return> to toggle."
+msgstr "(Radioknap) Brug højrepil eller <retur> for at (de)aktivere."
+
+#. #define FORM_LINK_RADIO_UNM_MSG
+#: LYMessages.c:111
+msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
+msgstr "UKORRIGERBAR formular-radioknap. Brug pil OP/NED el. TAB for at komme væk."
+
+#. #define FORM_LINK_SUBMIT_PREFIX
+#: LYMessages.c:113
+msgid "Submit ('x' for no cache) to "
+msgstr "Indsend ('x' sender udenom cache) til "
+
+#. #define FORM_LINK_RESUBMIT_PREFIX
+#: LYMessages.c:115
+msgid "Submit to "
+msgstr "Indsend til "
+
+#. #define FORM_LINK_SUBMIT_MESSAGE
+#: LYMessages.c:117
+msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
+msgstr "(Formularindsendelsesknap) Højrepil el. <retur> sender ('x' sender u. cache)."
+
+#. #define FORM_LINK_RESUBMIT_MESSAGE
+#: LYMessages.c:119
+msgid "(Form submit button) Use right-arrow or <return> to submit."
+msgstr "(Formularindsendelsesknap) Brug højrepil el. <retur> for at indesende."
+
+#. #define FORM_LINK_SUBMIT_DIS_MSG
+#: LYMessages.c:121
+msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
+msgstr "Ikke muligt at indesende formular. Brug pil OP/NED el. TAB for at komme væk."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_PREFIX
+#: LYMessages.c:123
+msgid "Submit mailto form to "
+msgstr "Indsend mailto-formular til "
+
+#. #define FORM_LINK_SUBMIT_MAILTO_MSG
+#: LYMessages.c:125
+msgid "(mailto form submit button) Use right-arrow or <return> to submit."
+msgstr "(mailto formularindsendelsesknap) Brug højrepil el. <retur> for at indsende."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:127
+msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
+msgstr "(mailto formularindsendelsesknap) Postsystem spærret, så du kan ikke sende."
+
+#. #define FORM_LINK_RESET_MESSAGE
+#: LYMessages.c:129
+msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
+msgstr "(Formularrydningstast) Højrepil el. <retur> nulstiller formularindhold."
+
+#. #define FORM_LINK_RESET_DIS_MSG
+#: LYMessages.c:131
+msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
+msgstr "UVIRKSOM formularrydningsknap. Brug pil OP/NED el. TAB for at komme væk."
+
+#. #define FORM_LINK_OPTION_LIST_MESSAGE
+#: LYMessages.c:133
+msgid "(Option list) Hit return and use arrow keys and return to select option."
+msgstr "(Valgmulighedsliste) Tast <retur> og brug pile for at vælge en indstilling."
+
+#. #define CHOICE_LIST_MESSAGE
+#: LYMessages.c:135
+msgid "(Choice list) Hit return and use arrow keys and return to select option."
+msgstr "(Valgliste) Tast <retur> og brug pile for at vælge en indstilling."
+
+#. #define FORM_LINK_OPTION_LIST_UNM_MSG
+#: LYMessages.c:137
+msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
+msgstr "UKORRIGERBAR valgmulighedsliste. Brug retur el. pile for at gennemse el. forlade."
+
+#. #define CHOICE_LIST_UNM_MSG
+#: LYMessages.c:139
+msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
+msgstr "UKORRIGERBAR Valgliste. Brug retur el. pile for at gennemse eller forlade."
+
+#: LYMessages.c:140
+msgid "Submitting form..."
+msgstr "Indsender formular..."
+
+#: LYMessages.c:141
+msgid "Resetting form..."
+msgstr "Tømmer formular..."
+
+#. #define RELOADING_FORM
+#: LYMessages.c:143
+msgid "Reloading document. Any form entries will be lost!"
+msgstr "Genindlæser dokument. Alle formularens indtastninger går tabt!"
+
+#: LYMessages.c:144
+#, c-format
+msgid "Warning: Cannot transcode form data to charset %s!"
+msgstr "Advarsel: Kan ikke omkode formulardata til tegnsæt %s!"
+
+#. #define NORMAL_LINK_MESSAGE
+#: LYMessages.c:147
+msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
+msgstr "(NORMALT LINK) brug højrepil el. <retur> for at aktivere."
+
+#: LYMessages.c:148
+msgid "The resource requested is not available at this time."
+msgstr "Den facilitet du bad om er ikke tilgængelig i øjeblikket."
+
+#: LYMessages.c:149
+msgid "Enter Lynx keystroke command: "
+msgstr "Indtast Lynx-kommando:"
+
+#: LYMessages.c:150
+msgid "Looking up "
+msgstr "Foretager opslag til "
+
+#: LYMessages.c:151
+#, c-format
+msgid "Getting %s"
+msgstr "Henter %s"
+
+#: LYMessages.c:152
+#, c-format
+msgid "Skipping %s"
+msgstr "Springer over %s"
+
+#: LYMessages.c:153
+#, c-format
+msgid "Using %s"
+msgstr "Bruger %s"
+
+#: LYMessages.c:154
+#, c-format
+msgid "Illegal URL: %s"
+msgstr "Ugyldig URL: %s"
+
+#: LYMessages.c:155
+#, c-format
+msgid "Badly formed address %s"
+msgstr "Forkert udformet adresse %s"
+
+#: LYMessages.c:156
+#, c-format
+msgid "URL: %s"
+msgstr "URL: %s"
+
+#: LYMessages.c:157
+msgid "Unable to access WWW file!!!"
+msgstr "Web-filen er ikke tilgængelig!!!"
+
+#: LYMessages.c:158
+#, c-format
+msgid "This is a searchable index. Use %s to search."
+msgstr "Der kan søges i denne fortegnelse. Brug %s for at søge."
+
+#. #define WWW_INDEX_MORE_MESSAGE
+#: LYMessages.c:160
+#, c-format
+msgid "--More-- This is a searchable index. Use %s to search."
+msgstr "--Mere-- Dette er en søgbar fortegnelse. Brug %s for at søge."
+
+#: LYMessages.c:161
+msgid "You have entered an invalid link number."
+msgstr "Det indtastede linknummer er ugyldigt."
+
+#. #define SOURCE_HELP
+#: LYMessages.c:163
+msgid "Currently viewing document source. Press '\\' to return to rendered version."
+msgstr "Dokumentets kildetekst vises nu. '\\' returnerer til gengivet version."
+
+#. #define NOVICE_LINE_ONE
+#: LYMessages.c:165
+msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
+msgstr "Piletaster: OP/NED navigerer. Højre følger et link; venstre går tilbage.\n"
+
+#. #define NOVICE_LINE_TWO
+#: LYMessages.c:167
+msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
+msgstr "H=hjælp O=opsætning P=udskriv M=startskærm Q=afslut /=søg [backspace]=historik \n"
+
+#. #define NOVICE_LINE_TWO_A
+#: LYMessages.c:169
+msgid " O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)uit \n"
+msgstr "O=øvr. kmd H=hjælp K=taster G=gå til P=print M=st.skærm O=opsætn. Q=afslut\n"
+
+#. #define NOVICE_LINE_TWO_B
+#: LYMessages.c:171
+msgid " O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n"
+msgstr "O=andre kmd B=tilb. E=rediger D=hent ^R=genindl. ^W=ryd skærm søg i dok: / \n"
+
+#. #define NOVICE_LINE_TWO_C
+#: LYMessages.c:173
+msgid "O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)emove \n"
+msgstr "O=øvrige kmd C=kommentar <backspace>=Hist. Bogmærker: V=vis, A=tilføj F=fjern\n"
+
+#. #define FORM_NOVICELINE_ONE
+#: LYMessages.c:175
+msgid " Enter text into the field by typing on the keyboard "
+msgstr " Brug tastaturet til at indtaste tekst i feltet "
+
+#. #define FORM_NOVICELINE_TWO
+#: LYMessages.c:177
+msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U for at slette al tekst i feltet. [Backspace] sletter et tegn "
+
+#. #define FORM_NOVICELINE_TWO_DELBL
+#: LYMessages.c:179
+msgid " Ctrl-U to delete text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U sletter tekst i feltet, [Backspace] sletter et tegn "
+
+#. #define FORM_NOVICELINE_TWO_VAR
+#: LYMessages.c:181
+#, c-format
+msgid " %s to delete all text in field, [Backspace] to delete a character "
+msgstr " %s sletter al tekst i feltet, [Backspace] sletter et tegn "
+
+#. #define FORM_NOVICELINE_TWO_DELBL_VAR
+#: LYMessages.c:183
+#, c-format
+msgid " %s to delete text in field, [Backspace] to delete a character "
+msgstr " %s sletter tekst i feltet, [Backspace] sletter et tegn "
+
+#. mailto
+#: LYMessages.c:186
+msgid "Malformed mailto form submission! Cancelled!"
+msgstr "Formateringsfejl i mailto-formular under afsendelse! Afbryder!"
+
+#: LYMessages.c:187
+msgid "Warning! Control codes in mail address replaced by ?"
+msgstr "Advarsel! kontrolkoder i postadressen erstattet af ?"
+
+#: LYMessages.c:188
+msgid "Mail disallowed! Cannot submit."
+msgstr "Postning er ikke tilladt! Kan ikke sende."
+
+#: LYMessages.c:189
+msgid "Mailto form submission failed!"
+msgstr "Indsendelse af mailto-formular slog fejl."
+
+#: LYMessages.c:190
+msgid "Mailto form submission Cancelled!!!"
+msgstr "Indsendelse af mailto-formular afbrudt!!!"
+
+#: LYMessages.c:191
+msgid "Sending form content..."
+msgstr "Sender formularens indhold..."
+
+#: LYMessages.c:192
+msgid "No email address is present in mailto URL!"
+msgstr "Mailto-url mangler en e-postadresse."
+
+#. #define MAILTO_URL_TEMPOPEN_FAILED
+#: LYMessages.c:194
+msgid "Unable to open temporary file for mailto URL!"
+msgstr "Kan ikke åbne midlertidig fil for mailto-url!"
+
+#. #define INC_ORIG_MSG_PROMPT
+#: LYMessages.c:196
+msgid "Do you wish to include the original message?"
+msgstr "Vil du medsende den oprindelige meddelelse?"
+
+#. #define INC_PREPARSED_MSG_PROMPT
+#: LYMessages.c:198
+msgid "Do you wish to include the preparsed source?"
+msgstr "Vil du medsende den forud analyserede HTML-kode?"
+
+#. #define SPAWNING_EDITOR_FOR_MAIL
+#: LYMessages.c:200
+msgid "Spawning your selected editor to edit mail message"
+msgstr "Åbner din valgte editor for at skrive brev"
+
+#. #define ERROR_SPAWNING_EDITOR
+#: LYMessages.c:202
+msgid "Error spawning editor, check your editor definition in the options menu"
+msgstr "Fejl ved åbning af editor, tjek valg af editor i opsætningsmenuen"
+
+#: LYMessages.c:203
+msgid "Send this comment?"
+msgstr "Send denne kommentar?"
+
+#: LYMessages.c:204
+msgid "Send this message?"
+msgstr "Send dette brev?"
+
+#: LYMessages.c:205
+msgid "Sending your message..."
+msgstr "Sender dit brev..."
+
+#: LYMessages.c:206
+msgid "Sending your comment:"
+msgstr "Sender din kommentar:"
+
+#. textarea
+#: LYMessages.c:209
+msgid "Not in a TEXTAREA; cannot use external editor."
+msgstr "Ikke i et TEKSTOMRÅDE; kan ikke bruge en ekstern editor."
+
+#: LYMessages.c:210
+msgid "Not in a TEXTAREA; cannot use command."
+msgstr "Ikke i et TEKSTOMRÅDE; kan ikke anvende kommando."
+
+#: LYMessages.c:213
+msgid "file: ACTIONs are disallowed!"
+msgstr "fil: 'ACTIONs' er ikke tilladte!"
+
+#. #define FILE_SERVED_LINKS_DISALLOWED
+#: LYMessages.c:215
+msgid "file: URLs via served links are disallowed!"
+msgstr "fil: url'er via betjente links er ikke tilladte!"
+
+#: LYMessages.c:216
+msgid "Access to local files denied."
+msgstr "Adgang til lokale filer nægtet."
+
+#: LYMessages.c:217
+msgid "file: URLs via bookmarks are disallowed!"
+msgstr "fil: url'er via bogmærker er ikke tilladt!"
+
+#. #define SPECIAL_VIA_EXTERNAL_DISALLOWED
+#: LYMessages.c:219
+msgid "This special URL is not allowed in external documents!"
+msgstr "Denne særlige url er ikke tilladt i eksterne dokumenter!"
+
+#: LYMessages.c:220
+msgid "Press <return> to return to Lynx."
+msgstr "Tast <retur> for at komme tilbage til Lynx"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:223
+msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
+msgstr "Åbner DCL-delproces. Brug 'logout' for at returnere til Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:227
+msgid "Type EXIT to return to Lynx.\n"
+msgstr "Tast EXIT for at returnere til Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:230
+msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
+msgstr "Åbner din standardskal. Brug 'exit' for at komme tilbage til Lynx.\n"
+
+#: LYMessages.c:233
+msgid "Spawning is currently disabled."
+msgstr "Åbning af eksterne programmer er ikke tilladt for øjeblikket."
+
+#: LYMessages.c:234
+msgid "The 'd'ownload command is currently disabled."
+msgstr "'d'ownload/hente-kommandoen er aktuelt sat ud af kraft."
+
+#: LYMessages.c:235
+msgid "You cannot download an input field."
+msgstr "Kan ikke hente et indtastningsfelt."
+
+#: LYMessages.c:236
+msgid "Form has a mailto action! Cannot download."
+msgstr "Formular indeholder en 'mailto-action'! Kan ikke hente."
+
+#: LYMessages.c:237
+msgid "You cannot download a mailto: link."
+msgstr "Kan ikke hente et 'mailto:' link ."
+
+#: LYMessages.c:238
+msgid "You cannot download cookies."
+msgstr "Kan ikke hente cookier."
+
+#: LYMessages.c:239
+msgid "You cannot download a printing option."
+msgstr "Kan ikke hente en printervalgmulighed."
+
+#: LYMessages.c:240
+msgid "You cannot download an upload option."
+msgstr "Kan ikke hente en upload-valgmulighed."
+
+#: LYMessages.c:241
+msgid "You cannot download an permit option."
+msgstr "Kan ikke hente en valgmulighed vedr. tilladelser."
+
+#: LYMessages.c:242
+msgid "This special URL cannot be downloaded!"
+msgstr "Denne særlige url kan ikke hentes!"
+
+#: LYMessages.c:243
+msgid "Nothing to download."
+msgstr "Der er intet at hente."
+
+#: LYMessages.c:244
+msgid "Trace ON!"
+msgstr "Sporing slået TIL!"
+
+#: LYMessages.c:245
+msgid "Trace OFF!"
+msgstr "Sporing slået FRA!"
+
+#. #define CLICKABLE_IMAGES_ON
+#: LYMessages.c:247
+msgid "Links will be included for all images! Reloading..."
+msgstr "Links vil blive vist for alle billeder! Genindlæser..."
+
+#. #define CLICKABLE_IMAGES_OFF
+#: LYMessages.c:249
+msgid "Standard image handling restored! Reloading..."
+msgstr "Standard håndtering af billeder genoprettet! Genindlæser..."
+
+#. #define PSEUDO_INLINE_ALTS_ON
+#: LYMessages.c:251
+msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
+msgstr "\"Integrerede billeder uden ALT-tekst tildeles Pseudo_ALTs! Genindlæser.."
+
+#. #define PSEUDO_INLINE_ALTS_OFF
+#: LYMessages.c:253
+msgid "Inlines without an ALT string specified will be ignored! Reloading..."
+msgstr "Integrerede billeder uden ALT-tekst ignoreres! Genindlæser..."
+
+#: LYMessages.c:254
+msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
+msgstr "Rå 8-bit eller CJK-tilstand slået FRA! Genindlæser..."
+
+#: LYMessages.c:255
+msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
+msgstr "Rå 8-bit el. CJK-tilstand slået TIL! Genindlæser..."
+
+#. #define HEAD_D_L_OR_CANCEL
+#: LYMessages.c:257
+msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
+msgstr "Send 'HEAD'-anmodning for D)okument, L)ink eller A)fbryd? (d,l,a): "
+
+#. #define HEAD_D_OR_CANCEL
+#: LYMessages.c:259
+msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
+msgstr "Send 'HEAD'-anmodning for D)okument, eller A)fbryd? (d,a): "
+
+#: LYMessages.c:260
+msgid "Sorry, the document is not an http URL."
+msgstr "Beklager, dokumentet er ikke en http-url."
+
+#: LYMessages.c:261
+msgid "Sorry, the link is not an http URL."
+msgstr "Beklager, linket er ikke en http-url."
+
+#: LYMessages.c:262
+msgid "Sorry, the ACTION for this form is disabled."
+msgstr "Beklager, 'ACTION' for denne formular kan ikke udføres (er slået fra)."
+
+#. #define FORM_ACTION_NOT_HTTP_URL
+#: LYMessages.c:264
+msgid "Sorry, the ACTION for this form is not an http URL."
+msgstr "Beklager, 'ACTION' for denne formular er ikke en http-url."
+
+#: LYMessages.c:265
+msgid "Not an http URL or form ACTION!"
+msgstr "Ikke en http-url eller 'form ACTION'!"
+
+#: LYMessages.c:266
+msgid "This special URL cannot be a form ACTION!"
+msgstr "Denne særlige url kan ikke være en formular-'ACTION'!"
+
+#: LYMessages.c:267
+msgid "URL is not in starting realm!"
+msgstr "Url befinder sig ikke i begyndelsesområde!"
+
+#: LYMessages.c:268
+msgid "News posting is disabled!"
+msgstr "Postning til nyhedsgrupper er sat ud af kraft!"
+
+#: LYMessages.c:269
+msgid "File management support is disabled!"
+msgstr "Filhåndteringsfunktioner er sat ud af kraft!"
+
+#: LYMessages.c:270
+msgid "No jump file is currently available."
+msgstr "Ingen genvejsfil er tilgængelig i øjeblikket."
+
+#: LYMessages.c:271
+msgid "Jump to (use '?' for list): "
+msgstr "Hop til (brug '?' for en liste): "
+
+#: LYMessages.c:272
+msgid "Jumping to a shortcut URL is disallowed!"
+msgstr "Hopning til en genvejs-url er ikke tilladt!"
+
+#: LYMessages.c:273
+msgid "Random URL is disallowed! Use a shortcut."
+msgstr "Tilfældig url er ikke tilladt! Brug en genvej."
+
+#: LYMessages.c:274
+msgid "No random URLs have been used thus far."
+msgstr "Ingen tilfældige url'er er blevet brugt indtil videre."
+
+#: LYMessages.c:275
+msgid "Bookmark features are currently disabled."
+msgstr "Bogmærkefaciliteter er aktuelt slået fra."
+
+#: LYMessages.c:276
+msgid "Execution via bookmarks is disabled."
+msgstr "Programafvikling via bogmærker er slået fra."
+
+#. #define BOOKMARK_FILE_NOT_DEFINED
+#: LYMessages.c:278
+#, c-format
+msgid "Bookmark file is not defined. Use %s to see options."
+msgstr "Bogmærkefil er ikke defineret. Brug %s for at se valgmuligheder."
+
+#. #define NO_TEMP_FOR_HOTLIST
+#: LYMessages.c:280
+msgid "Unable to open tempfile for X Mosaic hotlist conversion."
+msgstr "Kan ikke åbne midlertidig fil for at omdanne X-Mosaic bogmærker."
+
+#: LYMessages.c:281
+msgid "ERROR - unable to open bookmark file."
+msgstr "FEJL - kan ikke åbne fil med bogmærker."
+
+#. #define BOOKMARK_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:283
+msgid "Unable to open bookmark file for deletion of link."
+msgstr "Kan ikke åbne fil med bogmærker for at slette link."
+
+#. #define BOOKSCRA_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:285
+msgid "Unable to open scratch file for deletion of link."
+msgstr "Kan ikke åbne kladdefil for at slette link."
+
+#: LYMessages.c:287
+msgid "Error renaming scratch file."
+msgstr "Fejl ved omdøbelse af kladdefil"
+
+#: LYMessages.c:289
+msgid "Error renaming temporary file."
+msgstr "Fejl ved omdøbelse af midlertidig fil."
+
+#. #define BOOKTEMP_COPY_FAIL
+#: LYMessages.c:291
+msgid "Unable to copy temporary file for deletion of link."
+msgstr "Kan ikke kopiere midlertidig fil for at slette link."
+
+#. #define BOOKTEMP_REOPEN_FAIL_FOR_DEL
+#: LYMessages.c:293
+msgid "Unable to reopen temporary file for deletion of link."
+msgstr "Kan ikke genåbne midlertidig fil for at slette link."
+
+#. #define BOOKMARK_LINK_NOT_ONE_LINE
+#: LYMessages.c:296
+msgid "Link is not by itself all on one line in bookmark file."
+msgstr "Link står ikke for sig selv på en enkelt linje i bogmærkefilen."
+
+#: LYMessages.c:297
+msgid "Bookmark deletion failed."
+msgstr "Kunne ikke slette bogmærke."
+
+#. #define BOOKMARKS_NOT_TRAVERSED
+#: LYMessages.c:299
+msgid "Bookmark files cannot be traversed (only http URLs)."
+msgstr "Bogmærkefiler kan ikke traverseres (kun http-url'er)."
+
+#. #define BOOKMARKS_NOT_OPEN
+#: LYMessages.c:301
+msgid "Unable to open bookmark file, use 'a' to save a link first"
+msgstr "Kan ikke åbne bogmærkefil, brug 'a' for at gemme et link først."
+
+#: LYMessages.c:302
+msgid "There are no links in this bookmark file!"
+msgstr "Der er ingen links i denne bogmærkefil!"
+
+#. #define BOOK_D_L_OR_CANCEL
+#: LYMessages.c:304
+msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
+msgstr "Gem D)okument eller L)ink i bogmærkefil eller A)fbryd? (d,l,a): "
+
+#: LYMessages.c:305
+msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
+msgstr "Gem D)okument i bogmærkefil eller A)fbryd? (d,a): "
+
+#: LYMessages.c:306
+msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
+msgstr "Gem L)ink i bogmærkefil eller A)fbryd? (l,a): "
+
+#. #define NOBOOK_POST_FORM
+#: LYMessages.c:308
+msgid "Documents from forms with POST content cannot be saved as bookmarks."
+msgstr "Formulardokumenter med 'POST'-indhold kan ikke gemmes som bogmærker."
+
+#: LYMessages.c:309
+msgid "Cannot save form fields/links"
+msgstr "Kan ikke gemme formularfelter/-links"
+
+#. #define NOBOOK_HSML
+#: LYMessages.c:311
+msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
+msgstr "Historik, vis-info, menu og listefiler kan ikke gemmes som bogmærker."
+
+#. #define CONFIRM_BOOKMARK_DELETE
+#: LYMessages.c:313
+msgid "Do you really want to delete this link from your bookmark file?"
+msgstr "Skal dette link virkelig slettes fra din bogmærkefil?"
+
+#: LYMessages.c:314
+msgid "Malformed address."
+msgstr "Forkert udformet adresse."
+
+#. #define HISTORICAL_ON_MINIMAL_OFF
+#: LYMessages.c:316
+msgid "Historical comment parsing ON (Minimal is overridden)!"
+msgstr "Analyse af historikkommentar slået TIL (Minimal er tilsidesat)!"
+
+#. #define HISTORICAL_OFF_MINIMAL_ON
+#: LYMessages.c:318
+msgid "Historical comment parsing OFF (Minimal is in effect)!"
+msgstr "Analyse af historikkommentar slået FRA (Minimal er virksom)!"
+
+#. #define HISTORICAL_ON_VALID_OFF
+#: LYMessages.c:320
+msgid "Historical comment parsing ON (Valid is overridden)!"
+msgstr "Analyse af historikkommentar slået TIL (Gyldig er tilsidesat)!"
+
+#. #define HISTORICAL_OFF_VALID_ON
+#: LYMessages.c:322
+msgid "Historical comment parsing OFF (Valid is in effect)!"
+msgstr "Analyse af historikkommentar slået FRA (Gyldig er virksom)!"
+
+#. #define MINIMAL_ON_IN_EFFECT
+#: LYMessages.c:324
+msgid "Minimal comment parsing ON (and in effect)!"
+msgstr "Minimal kommentaranalyse slået TIL (og er virksom)!"
+
+#. #define MINIMAL_OFF_VALID_ON
+#: LYMessages.c:326
+msgid "Minimal comment parsing OFF (Valid is in effect)!"
+msgstr "Minimal kommentaranalyse slået FRA (Gyldig er virksom)!"
+
+#. #define MINIMAL_ON_BUT_HISTORICAL
+#: LYMessages.c:328
+msgid "Minimal comment parsing ON (but Historical is in effect)!"
+msgstr "Minimal kommentaranalyse slået TIL (men historik er virksom)!"
+
+#. #define MINIMAL_OFF_HISTORICAL_ON
+#: LYMessages.c:330
+msgid "Minimal comment parsing OFF (Historical is in effect)!"
+msgstr "Minimal kommentaranalyse slået FRA (Historik er virksom)!"
+
+#: LYMessages.c:331
+msgid "Soft double-quote parsing ON!"
+msgstr "\"Soft double-quote\"-analyse slået TIL!"
+
+#: LYMessages.c:332
+msgid "Soft double-quote parsing OFF!"
+msgstr "\"Soft double-quote\"-analyse slået FRA!"
+
+#: LYMessages.c:333
+msgid "Now using TagSoup parsing of HTML."
+msgstr "Bruger nu \"TagSoup\" til at analysere html."
+
+#: LYMessages.c:334
+msgid "Now using SortaSGML parsing of HTML!"
+msgstr "Bruger nu \"SortaSGML\" til at analysere html!"
+
+#: LYMessages.c:335
+msgid "You are already at the end of this document."
+msgstr "Du er allerede ved enden af dette dokument."
+
+#: LYMessages.c:336
+msgid "You are already at the beginning of this document."
+msgstr "Du er allerede ved begyndelsen af dette dokument."
+
+#: LYMessages.c:337
+#, c-format
+msgid "You are already at page %d of this document."
+msgstr "Du står allerede på side %d af dette dokument."
+
+#: LYMessages.c:338
+#, c-format
+msgid "Link number %d already is current."
+msgstr "Linknummer %d er allerede det aktuelle."
+
+#: LYMessages.c:339
+msgid "You are already at the first document"
+msgstr "Du står allerede på det første dokument"
+
+#: LYMessages.c:340
+msgid "There are no links above this line of the document."
+msgstr "Der er ingen links over denne linje i dokumentet."
+
+#: LYMessages.c:341
+msgid "There are no links below this line of the document."
+msgstr "Der er ingen links under denne linje i dokumentet."
+
+#. #define MAXLEN_REACHED_DEL_OR_MOV
+#: LYMessages.c:343
+msgid "Maximum length reached! Delete text or move off field."
+msgstr "Største længde er nået! Slet tekst eller forlad feltet."
+
+#. #define NOT_ON_SUBMIT_OR_LINK
+#: LYMessages.c:345
+msgid "You are not on a form submission button or normal link."
+msgstr "Du står ikke på en formularindsendelsesknap eller et normalt link."
+
+#. #define NEED_CHECKED_RADIO_BUTTON
+#: LYMessages.c:347
+msgid "One radio button must be checked at all times!"
+msgstr "En radioknap skal altid være markeret!"
+
+#: LYMessages.c:348
+msgid "No submit button for this form, submit single text field?"
+msgstr "Ingen indsendelsesknap til denne formular, indsend et enkelt tekstfelt?"
+
+#: LYMessages.c:349
+msgid "Do you want to go back to the previous document?"
+msgstr "Vil du returnere til det forrige dokument?"
+
+#: LYMessages.c:350
+msgid "Use arrows or tab to move off of field."
+msgstr "Brug pile eller TAB for at forlade feltet."
+
+#. #define ENTER_TEXT_ARROWS_OR_TAB
+#: LYMessages.c:352
+msgid "Enter text. Use arrows or tab to move off of field."
+msgstr "Indtast tekst. Brug pile eller TAB for at forlade feltet."
+
+#: LYMessages.c:353
+msgid "** Bad HTML!! No form action defined. **"
+msgstr "** Dårlig html! Ingen formular-'action' er defineret. **"
+
+#: LYMessages.c:354
+msgid "Bad HTML!! Unable to create popup window!"
+msgstr "Dårlig HTML!! Kan ikke oprette et pop op-vindue!"
+
+#: LYMessages.c:355
+msgid "Unable to create popup window!"
+msgstr "Kan ikke oprette et pop op-vindue!"
+
+#: LYMessages.c:356
+msgid "Goto a random URL is disallowed!"
+msgstr "Det er ikke tilladt et gå til en tilfældig url!"
+
+#: LYMessages.c:357
+msgid "Goto a non-http URL is disallowed!"
+msgstr "Det er ikke tilladt at gå til en ikke-http-url!"
+
+#: LYMessages.c:358
+#, c-format
+msgid "You are not allowed to goto \"%s\" URLs"
+msgstr "Du må ikke tilgå \"%s\" url'er"
+
+#: LYMessages.c:359
+msgid "URL to open: "
+msgstr "Åbn en url: "
+
+#: LYMessages.c:360
+msgid "Edit the current Goto URL: "
+msgstr "Ret den aktuelle 'gå-til'-url : "
+
+#: LYMessages.c:361
+msgid "Edit the previous Goto URL: "
+msgstr "Ret den forrige 'gå-til'-url: "
+
+#: LYMessages.c:362
+msgid "Edit a previous Goto URL: "
+msgstr "Ret en foregående 'gå-til'-url: "
+
+#: LYMessages.c:363
+msgid "Current document has POST data."
+msgstr "Aktuelle dokument har 'POST'-data."
+
+#: LYMessages.c:364
+msgid "Edit this document's URL: "
+msgstr "Ret dette dokuments url: "
+
+#: LYMessages.c:365
+msgid "Edit the current link's URL: "
+msgstr "Ret url på det aktuelle link: "
+
+#: LYMessages.c:366
+msgid "You cannot edit File Management URLs"
+msgstr "Du kan ikke rette i filhåndterings-url'er"
+
+#: LYMessages.c:367
+msgid "Enter a database query: "
+msgstr "Indtast en database-forespørgsel: "
+
+#: LYMessages.c:368
+msgid "Enter a whereis query: "
+msgstr "Søg efter: "
+
+#: LYMessages.c:369
+msgid "Edit the current query: "
+msgstr "Ret i søgemønster: "
+
+#: LYMessages.c:370
+msgid "Edit the previous query: "
+msgstr "Ret forrige søgemønster: "
+
+#: LYMessages.c:371
+msgid "Edit a previous query: "
+msgstr "Ret i et tidligere søgemønster: "
+
+#. #define USE_C_R_TO_RESUB_CUR_QUERY
+#: LYMessages.c:373
+msgid "Use Control-R to resubmit the current query."
+msgstr "Brug Control-R for at genaktivere den aktuelle søgning."
+
+#: LYMessages.c:374
+msgid "Edit the current shortcut: "
+msgstr "Rediger den aktuelle genvej: "
+
+#: LYMessages.c:375
+msgid "Edit the previous shortcut: "
+msgstr "Rediger den foregående genvej: "
+
+#: LYMessages.c:376
+msgid "Edit a previous shortcut: "
+msgstr "Rediger en foregående genvej: "
+
+#: LYMessages.c:377
+#, c-format
+msgid "Key '%c' is not mapped to a jump file!"
+msgstr "Tasten '%c' har ingen tildeling i genvejsfilen!"
+
+#: LYMessages.c:378
+msgid "Cannot locate jump file!"
+msgstr "Kan ikke finde genvejsfilen!"
+
+#: LYMessages.c:379
+msgid "Cannot open jump file!"
+msgstr "Kan ikke åbne genvejsfilen!"
+
+#: LYMessages.c:380
+msgid "Error reading jump file!"
+msgstr "Fejl ved læsning af genvejsfil!"
+
+#: LYMessages.c:381
+msgid "Out of memory reading jump file!"
+msgstr "Ikke nok hukommelse til læsning af genvejsfil!"
+
+#: LYMessages.c:382
+msgid "Out of memory reading jump table!"
+msgstr "Ikke nok hukommelse til læsning af genvejstabel!"
+
+#: LYMessages.c:383
+msgid "No index is currently available."
+msgstr "Ingen fortegnelse er tilgængelig i øjeblikket."
+
+#. #define CONFIRM_MAIN_SCREEN
+#: LYMessages.c:385
+msgid "Do you really want to go to the Main screen?"
+msgstr "Vil du virkelig gå til startskærmen?"
+
+#: LYMessages.c:386
+msgid "You are already at main screen!"
+msgstr "Du står allerede i startskærmen!"
+
+#. #define NOT_ISINDEX
+#: LYMessages.c:388
+msgid "Not a searchable indexed document -- press '/' to search for a text string"
+msgstr "Ikke et søgbart, indekseret dokument -- tast '/' for at søge efter tekst"
+
+#. #define NO_OWNER
+#: LYMessages.c:390
+msgid "No owner is defined for this file so you cannot send a comment"
+msgstr "Denne fil har ingen ejer, så du kan ikke sende en kommentar"
+
+#: LYMessages.c:391
+#, c-format
+msgid "No owner is defined. Use %s?"
+msgstr "Ingen ejer er defineret. Brug %s?"
+
+#: LYMessages.c:392
+msgid "Do you wish to send a comment?"
+msgstr "Vil du gerne sende en kommentar?"
+
+#: LYMessages.c:393
+msgid "Mail is disallowed so you cannot send a comment"
+msgstr "Postsystemet er spærret, så du kan ikke sende en kommentar"
+
+#: LYMessages.c:394
+msgid "The 'e'dit command is currently disabled."
+msgstr "'e'dit-kommandoen er slået fra i øjeblikket."
+
+#: LYMessages.c:395
+msgid "External editing is currently disabled."
+msgstr "Ekstern redigering er slået fra i øjeblikket."
+
+#: LYMessages.c:396
+msgid "System error - failure to get status."
+msgstr "Systemfejl - indhentning af status slog fejl."
+
+#: LYMessages.c:397
+msgid "No editor is defined!"
+msgstr "Ingen editor er defineret!"
+
+#: LYMessages.c:398
+msgid "The 'p'rint command is currently disabled."
+msgstr "'p'rint-kommandoen er slået fra i øjeblikket."
+
+#: LYMessages.c:399
+msgid "Document has no Toolbar links or Banner."
+msgstr "Dokumentet har hverken værktøjsbjælke, links eller banner."
+
+#: LYMessages.c:400
+msgid "Unable to open traversal file."
+msgstr "Kan ikke åbne traverseringsfil."
+
+#: LYMessages.c:401
+msgid "Unable to open traversal found file."
+msgstr "Kan ikke åbne traversering-fundet-fil."
+
+#: LYMessages.c:402
+msgid "Unable to open reject file."
+msgstr "Kan ikke åbne afvisningsfil."
+
+#: LYMessages.c:403
+msgid "Unable to open traversal errors output file"
+msgstr "Kan ikke åbne fil med uddata fra traverseringsfejl"
+
+#: LYMessages.c:404
+msgid "TRAVERSAL WAS INTERRUPTED"
+msgstr "TRAVERSERING BLEV AFBRUDT"
+
+#: LYMessages.c:405
+msgid "Follow link (or goto link or page) number: "
+msgstr "Følg link, eller gå til link-/sidenummer: "
+
+#: LYMessages.c:406
+msgid "Select option (or page) number: "
+msgstr "Vælg valgmuligheds- eller sidenummer:"
+
+#: LYMessages.c:407
+#, c-format
+msgid "Option number %d already is current."
+msgstr "Valgmulighedsnummer %d er allerede aktuelt."
+
+#. #define ALREADY_AT_OPTION_END
+#: LYMessages.c:409
+msgid "You are already at the end of this option list."
+msgstr "Du er allerede ved enden af denne liste over valgmuligheder."
+
+#. #define ALREADY_AT_OPTION_BEGIN
+#: LYMessages.c:411
+msgid "You are already at the beginning of this option list."
+msgstr "Du er allerede ved begyndelsen af denne valgmulighedsliste."
+
+#. #define ALREADY_AT_OPTION_PAGE
+#: LYMessages.c:413
+#, c-format
+msgid "You are already at page %d of this option list."
+msgstr "Du er allerede ved side %d af denne valgmulighedsliste."
+
+#: LYMessages.c:414
+msgid "You have entered an invalid option number."
+msgstr "Du har indtastet et ugyldigt nr. for valgmulighed."
+
+#: LYMessages.c:415
+msgid "** Bad HTML!! Use -trace to diagnose. **"
+msgstr "** Dårlig html!! Brug -sporing for at finde ud af, hvad der er galt. **"
+
+#: LYMessages.c:416
+msgid "Give name of file to save in"
+msgstr "Giv filen, som der skal gemmes i, et navn"
+
+#: LYMessages.c:417
+msgid "Can't save data to file -- please run WWW locally"
+msgstr "Kan ikke gemme data i fil -- kør venligst WWW lokalt"
+
+#: LYMessages.c:418
+msgid "Can't open temporary file!"
+msgstr "Kan ikke åbne midlertidig fil!"
+
+#: LYMessages.c:419
+msgid "Can't open output file! Cancelling!"
+msgstr "Kan ikke åbne uddata-fil! Afbryder!"
+
+#: LYMessages.c:420
+msgid "Execution is disabled."
+msgstr "Eksekvering er slået fra."
+
+#. #define EXECUTION_DISABLED_FOR_FILE
+#: LYMessages.c:422
+#, c-format
+msgid "Execution is not enabled for this file. See the Options menu (use %s)."
+msgstr "Denne fil kan ikke eksekveres. Se opsætningsmenuen (brug %s)."
+
+#. #define EXECUTION_NOT_COMPILED
+#: LYMessages.c:424
+msgid "Execution capabilities are not compiled into this version."
+msgstr "Denne version er ikke oversat, så filer kan eksekveres."
+
+#: LYMessages.c:425
+msgid "This file cannot be displayed on this terminal."
+msgstr "Denne fil kan ikke vises på denne terminal."
+
+#. #define CANNOT_DISPLAY_FILE_D_OR_C
+#: LYMessages.c:427
+msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
+msgstr "Filen kan ikke vises på denne terminal: D=hent, eller C=afbryd"
+
+#: LYMessages.c:428
+#, c-format
+msgid "%s D)ownload, or C)ancel"
+msgstr "%s D=hent, eller C=afbryd"
+
+#: LYMessages.c:429
+msgid "Cancelling file."
+msgstr "Forkaster fil."
+
+#: LYMessages.c:430
+msgid "Retrieving file. - PLEASE WAIT -"
+msgstr "Henter fil. - VENT VENLIGST -"
+
+#: LYMessages.c:431
+msgid "Enter a filename: "
+msgstr "Indtast et filnavn:"
+
+#: LYMessages.c:432
+msgid "Edit the previous filename: "
+msgstr "Ret det foregående filnavn: "
+
+#: LYMessages.c:433
+msgid "Edit a previous filename: "
+msgstr "Ret et foregående filnavn: "
+
+#: LYMessages.c:434
+msgid "Enter a new filename: "
+msgstr "Indtast et nyt filnavn: "
+
+#: LYMessages.c:435
+msgid "File name may not begin with a dot."
+msgstr "Filnavn må ikke begynde med et punktum."
+
+#: LYMessages.c:437
+msgid "File exists. Create higher version?"
+msgstr "Fil eksisterer. Opret en nyere version?"
+
+#: LYMessages.c:439
+msgid "File exists. Overwrite?"
+msgstr "Fil eksisterer. Overskriv?"
+
+#: LYMessages.c:441
+msgid "Cannot write to file."
+msgstr "Kan ikke skrive til fil."
+
+#: LYMessages.c:442
+msgid "ERROR! - download command is misconfigured."
+msgstr "FEJL! - hente-kommando er sat forkert op."
+
+#: LYMessages.c:443
+msgid "Unable to download file."
+msgstr "Kan ikke hente fil."
+
+#: LYMessages.c:444
+msgid "Reading directory..."
+msgstr "Læser filkatalog..."
+
+#: LYMessages.c:445
+msgid "Building directory listing..."
+msgstr "Laver fortegnelse over filer i filkatalog..."
+
+#: LYMessages.c:446
+msgid "Saving..."
+msgstr "Gemmer..."
+
+#: LYMessages.c:447
+#, c-format
+msgid "Could not edit file '%s'."
+msgstr "Kunne ikke redigere fil '%s'."
+
+#: LYMessages.c:448
+msgid "Unable to access document!"
+msgstr "Kan ikke tilgå dokument!"
+
+#: LYMessages.c:449
+msgid "Could not access file."
+msgstr "Kunne ikke tilgå fil."
+
+#: LYMessages.c:450
+msgid "Could not access directory."
+msgstr "Kunne ikke tilgå filkatalog."
+
+#: LYMessages.c:451
+msgid "Could not load data."
+msgstr "Kunne ikke indlæse data."
+
+#. #define CANNOT_EDIT_REMOTE_FILES
+#: LYMessages.c:453
+msgid "Lynx cannot currently (e)dit remote WWW files."
+msgstr "Lynx kan ikke (e)ditere eksterne webfiler for øjeblikket."
+
+#. #define CANNOT_EDIT_FIELD
+#: LYMessages.c:455
+msgid "This field cannot be (e)dited with an external editor."
+msgstr "Dette felt kan ikke (e)diteres med en ekstern editor."
+
+#: LYMessages.c:456
+msgid "Bad rule"
+msgstr "Forkert regel"
+
+#: LYMessages.c:457
+msgid "Insufficient operands:"
+msgstr "Ikke nok operander:"
+
+#: LYMessages.c:458
+msgid "You are not authorized to edit this file."
+msgstr "Du har ikke lov til at redigere denne fil."
+
+#: LYMessages.c:459
+msgid "Title: "
+msgstr "Titel:"
+
+#: LYMessages.c:460
+msgid "Subject: "
+msgstr "Emne:"
+
+#: LYMessages.c:461
+msgid "Username: "
+msgstr "Brugernavn:"
+
+#: LYMessages.c:462
+msgid "Password: "
+msgstr "Adgangskode:"
+
+#: LYMessages.c:463
+msgid "lynx: Username and Password required!!!"
+msgstr "lynx: Brugernavn og adgangskode er påkrævet!"
+
+#: LYMessages.c:464
+msgid "lynx: Password required!!!"
+msgstr "lynx: Adgangskode påkrævet!"
+
+#: LYMessages.c:465
+msgid "Clear all authorization info for this session?"
+msgstr "Slet al autorisationsinfo for denne session?"
+
+#: LYMessages.c:466
+msgid "Authorization info cleared."
+msgstr "Autorisationsinfo slettet."
+
+#: LYMessages.c:467
+msgid "Authorization failed. Retry?"
+msgstr "Autorisation slog fejl. Prøv igen?"
+
+#: LYMessages.c:468
+msgid "cgi support has been disabled."
+msgstr "cgi-understøttelse er slået fra."
+
+#. #define CGI_NOT_COMPILED
+#: LYMessages.c:470
+msgid "Lynxcgi capabilities are not compiled into this version."
+msgstr "Denne version er ikke oversat med lynxcgi."
+
+#: LYMessages.c:471
+#, c-format
+msgid "Sorry, no known way of converting %s to %s."
+msgstr "Beklager, ingen kendt metode til at omdanne %s til %s."
+
+#: LYMessages.c:472
+msgid "Unable to set up connection."
+msgstr "Kan ikke oprette forbindelse."
+
+#: LYMessages.c:473
+msgid "Unable to make connection"
+msgstr "Kan ikke foretage en forbindelse"
+
+#. #define MALFORMED_EXEC_REQUEST
+#: LYMessages.c:475
+msgid "Executable link rejected due to malformed request."
+msgstr "Afviste at udføre link pga. af fejl i underliggende kommando."
+
+#. #define BADCHAR_IN_EXEC_LINK
+#: LYMessages.c:477
+#, c-format
+msgid "Executable link rejected due to `%c' character."
+msgstr "Udførelse af link afvist pga. '%c'-tegn."
+
+#. #define RELPATH_IN_EXEC_LINK
+#: LYMessages.c:479
+msgid "Executable link rejected due to relative path string ('../')."
+msgstr "Udførelse af link afvist, da stien er angivet relativt ('../')"
+
+#. #define BADLOCPATH_IN_EXEC_LINK
+#: LYMessages.c:481
+msgid "Executable link rejected due to location or path."
+msgstr "Udførelse af link afvist pga. placering eller sti."
+
+#: LYMessages.c:482
+msgid "Mail access is disabled!"
+msgstr "Postsystemet er spærret!"
+
+#. #define ACCESS_ONLY_LOCALHOST
+#: LYMessages.c:484
+msgid "Only files and servers on the local host can be accessed."
+msgstr "Kun filer og servere på den lokale værtsmaskine kan tilgås."
+
+#: LYMessages.c:485
+msgid "Telnet access is disabled!"
+msgstr "Adgang til Telnet er slået fra!"
+
+#. #define TELNET_PORT_SPECS_DISABLED
+#: LYMessages.c:487
+msgid "Telnet port specifications are disabled."
+msgstr "Adgang til angivelser af Telnetporte er spærret."
+
+#: LYMessages.c:488
+msgid "USENET news access is disabled!"
+msgstr "Adgang til USENET-nyhedsgrupper er slået fra!"
+
+#: LYMessages.c:489
+msgid "Rlogin access is disabled!"
+msgstr "Rlogin-adgang er slået fra!"
+
+#: LYMessages.c:490
+msgid "Ftp access is disabled!"
+msgstr "Ftp-adgang er slået fra!"
+
+#: LYMessages.c:491
+msgid "There are no references from this document."
+msgstr "Der er ingen links i dette dokument."
+
+#: LYMessages.c:492
+msgid "There are only hidden links from this document."
+msgstr "Der er kun skjulte links i dette dokument."
+
+#: LYMessages.c:494
+msgid "Unable to open command file."
+msgstr "Ude af stand til at åbne kommandofil."
+
+#: LYMessages.c:496
+msgid "News Post Cancelled!!!"
+msgstr "Postning til nyhedsgruppe afbrudt!!!"
+
+#. #define SPAWNING_EDITOR_FOR_NEWS
+#: LYMessages.c:498
+msgid "Spawning your selected editor to edit news message"
+msgstr "Skriver meddelelse til nyhedsgruppe med din valgte editor"
+
+#: LYMessages.c:499
+msgid "Post this message?"
+msgstr "Send denne meddelelse?"
+
+#: LYMessages.c:500
+#, c-format
+msgid "Append '%s'?"
+msgstr "Tilføj '%s'?"
+
+#: LYMessages.c:501
+msgid "Posting to newsgroup(s)..."
+msgstr "Poster til nyhedsgruppe(r)..."
+
+#: LYMessages.c:503
+msgid "*** You have unread mail. ***"
+msgstr "*** Du har ulæst post. ***"
+
+#: LYMessages.c:505
+msgid "*** You have mail. ***"
+msgstr "*** Du har post. *** "
+
+#: LYMessages.c:507
+msgid "*** You have new mail. ***"
+msgstr "*** Du har ny post. ***"
+
+#: LYMessages.c:508
+msgid "File insert cancelled!!!"
+msgstr "Indsætning af fil afbrudt!"
+
+#: LYMessages.c:509
+msgid "Not enough memory for file!"
+msgstr "Ikke nok hukommelse til fil!"
+
+#: LYMessages.c:510
+msgid "Can't open file for reading."
+msgstr "Kan ikke åbne fil for læsning."
+
+#: LYMessages.c:511
+msgid "File does not exist."
+msgstr "Filen eksisterer ikke."
+
+#: LYMessages.c:512
+msgid "File does not exist - reenter or cancel:"
+msgstr "Fil eksisterer ikke - genindtast eller afbryd:"
+
+#: LYMessages.c:513
+msgid "File is not readable."
+msgstr "Filen kan ikke læses."
+
+#: LYMessages.c:514
+msgid "File is not readable - reenter or cancel:"
+msgstr "Fil kan ikke læses - genindtast eller afbryd:"
+
+#: LYMessages.c:515
+msgid "Nothing to insert - file is 0-length."
+msgstr "Intet at indsætte - filens længde er nul."
+
+#: LYMessages.c:516
+msgid "Save request cancelled!!!"
+msgstr "Du ville ikke gemme alligevel!"
+
+#: LYMessages.c:517
+msgid "Mail request cancelled!!!"
+msgstr "Fortrød afsendelse af brev!"
+
+#. #define CONFIRM_MAIL_SOURCE_PREPARSED
+#: LYMessages.c:519
+msgid "Viewing preparsed source. Are you sure you want to mail it?"
+msgstr "Betragter html-kode. Vil du gerne sende koden med post?"
+
+#: LYMessages.c:520
+msgid "Please wait..."
+msgstr "Vent venligst..."
+
+#: LYMessages.c:521
+msgid "Mailing file. Please wait..."
+msgstr "Sender fil. Vent venligst..."
+
+#: LYMessages.c:522
+msgid "ERROR - Unable to mail file"
+msgstr "FEJL - kan ikke sende fil"
+
+#. #define CONFIRM_LONG_SCREEN_PRINT
+#: LYMessages.c:524
+#, c-format
+msgid "File is %d screens long. Are you sure you want to print?"
+msgstr "Filen er %d skærmbilleder lang. Vil du gerne udskrive den?"
+
+#: LYMessages.c:525
+msgid "Print request cancelled!!!"
+msgstr "Fortrød udskrivning!"
+
+#: LYMessages.c:526
+msgid "Press <return> to begin: "
+msgstr "Tast <retur> for at begynde:"
+
+#: LYMessages.c:527
+msgid "Press <return> to finish: "
+msgstr "Tast <retur> for at afslutte:"
+
+#. #define CONFIRM_LONG_PAGE_PRINT
+#: LYMessages.c:529
+#, c-format
+msgid "File is %d pages long. Are you sure you want to print?"
+msgstr "Filen er %d sider lang. Er du sikker på, at du vil udskrive den?"
+
+#. #define CHECK_PRINTER
+#: LYMessages.c:531
+msgid "Be sure your printer is on-line. Press <return> to start printing:"
+msgstr "Sørg for at din printer er tændt. Tast <retur> for at udskrive:"
+
+#: LYMessages.c:532
+msgid "ERROR - Unable to allocate file space!!!"
+msgstr "FEJL - kan ikke tildele plads til fil!!!"
+
+#: LYMessages.c:533
+msgid "Unable to open tempfile"
+msgstr "Kan ikke åbne midlertidig fil"
+
+#: LYMessages.c:534
+msgid "Unable to open print options file"
+msgstr "Kan ikke åbne fil med printerindstillinger"
+
+#: LYMessages.c:535
+msgid "Printing file. Please wait..."
+msgstr "Udskriver fil. Vent venligst..."
+
+#: LYMessages.c:536
+msgid "Please enter a valid internet mail address: "
+msgstr "Indtast venligst en gyldig internet-postadresse:"
+
+#: LYMessages.c:537
+msgid "ERROR! - printer is misconfigured!"
+msgstr "FEJL! - printeren er sat forkert op!"
+
+#: LYMessages.c:538
+msgid "Image map from POST response not available!"
+msgstr "Kortbillede fra 'POST'-svar ikke tilgængeligt!"
+
+#: LYMessages.c:539
+msgid "Misdirected client-side image MAP request!"
+msgstr "Fejldirigering på ønsket kortbillede fra klienten!"
+
+#: LYMessages.c:540
+msgid "Client-side image MAP is not accessible!"
+msgstr "Kortbillede fra klienten er ikke tilgængeligt!"
+
+#: LYMessages.c:541
+msgid "No client-side image MAPs are available!"
+msgstr "Ingen kortbilleder fra klienten er tilgængelige!"
+
+#: LYMessages.c:542
+msgid "Client-side image MAP is not available!"
+msgstr "Kortbillede fra klienten er ikke tilgængeligt!"
+
+#. #define OPTION_SCREEN_NEEDS_24
+#: LYMessages.c:545
+msgid "Screen height must be at least 24 lines for the Options menu!"
+msgstr "Skærmen skal have mindst 24 linjer til opsætningsmenuen!"
+
+#. #define OPTION_SCREEN_NEEDS_23
+#: LYMessages.c:547
+msgid "Screen height must be at least 23 lines for the Options menu!"
+msgstr "Skærmen skal have mindst 23 linjer til opsætningsmenuen!"
+
+#. #define OPTION_SCREEN_NEEDS_22
+#: LYMessages.c:549
+msgid "Screen height must be at least 22 lines for the Options menu!"
+msgstr "Skærmen skal have mindst 22 linjer til opsætningsmenuen!"
+
+#: LYMessages.c:551
+msgid "That key requires Advanced User mode."
+msgstr "Bruger-tilstand skal stå som avanceret for at bruge denne taste."
+
+#: LYMessages.c:552
+#, c-format
+msgid "Content-type: %s"
+msgstr "'Content-type:' %s"
+
+#: LYMessages.c:553
+msgid "Command: "
+msgstr "Kommando: "
+
+#: LYMessages.c:554
+msgid "Unknown or ambiguous command"
+msgstr "Ukendt eller tvetydig kommando"
+
+#: LYMessages.c:555
+msgid " Version "
+msgstr "Version "
+
+#: LYMessages.c:556
+msgid " first"
+msgstr " første"
+
+#: LYMessages.c:557
+msgid ", guessing..."
+msgstr ", gætter..."
+
+#: LYMessages.c:558
+msgid "Permissions for "
+msgstr "Rettigheder for "
+
+#: LYMessages.c:559
+msgid "Select "
+msgstr "Vælg "
+
+#: LYMessages.c:560
+msgid "capital letter"
+msgstr "stort bogstav"
+
+#: LYMessages.c:561
+msgid " of option line,"
+msgstr " på valgmulighedslinje."
+
+#: LYMessages.c:562
+msgid " to save,"
+msgstr " for at gemme,"
+
+#: LYMessages.c:563
+msgid " to "
+msgstr " til "
+
+#: LYMessages.c:564
+msgid " or "
+msgstr " eller "
+
+#: LYMessages.c:565
+msgid " index"
+msgstr " indeks "
+
+#: LYMessages.c:566
+msgid " to return to Lynx."
+msgstr " for at komme tilbage til Lynx."
+
+#: LYMessages.c:567
+msgid "Accept Changes"
+msgstr "Godkend"
+
+#: LYMessages.c:568
+msgid "Reset Changes"
+msgstr "Nulstil"
+
+#: LYMessages.c:569
+msgid "Left Arrow cancels changes"
+msgstr "Venstre pil annullerer ændringer"
+
+#: LYMessages.c:570
+msgid "Save options to disk"
+msgstr "Gem indstillinger på disk"
+
+#: LYMessages.c:571
+msgid "Hit RETURN to accept entered data."
+msgstr "Tast RETUR for at godkende indtastede data."
+
+#. #define ACCEPT_DATA_OR_DEFAULT
+#: LYMessages.c:573
+msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
+msgstr "RETUR godkender indtastninger. Slet data for at genskabe standarder."
+
+#: LYMessages.c:574
+msgid "Value accepted!"
+msgstr "Værdi godkendt!"
+
+#. #define VALUE_ACCEPTED_WARNING_X
+#: LYMessages.c:576
+msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
+msgstr "Værdi godkendt! -- ADVARSEL: Lynx er sat op til X WINDOW!"
+
+#. #define VALUE_ACCEPTED_WARNING_NONX
+#: LYMessages.c:578
+msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
+msgstr "Værdi godkendt! -- ADVARSEL: Lynx er IKKE sat op til X WINDOW!"
+
+#: LYMessages.c:579
+msgid "You are not allowed to change which editor to use!"
+msgstr "Du har ikke lov til vælge en anden editor!"
+
+#: LYMessages.c:580
+msgid "Failed to set DISPLAY variable!"
+msgstr "Det lykkedes ikke at sætte 'DISPLAY'-variablen!"
+
+#: LYMessages.c:581
+msgid "Failed to clear DISPLAY variable!"
+msgstr "Det lykkedes ikke at slette 'DISPLAY'-variablen!"
+
+#. #define BOOKMARK_CHANGE_DISALLOWED
+#: LYMessages.c:583
+msgid "You are not allowed to change the bookmark file!"
+msgstr "Du har ikke lov til at ændre bogmærkefilen!"
+
+#: LYMessages.c:584
+msgid "Terminal does not support color"
+msgstr "Terminal understøtter ikke farve"
+
+#: LYMessages.c:585
+#, c-format
+msgid "Your '%s' terminal does not support color."
+msgstr "Din '%s' terminal understøtter ikke farver."
+
+#: LYMessages.c:586
+msgid "Access to dot files is disabled!"
+msgstr "Adgang til punktumfiler er spærret!"
+
+#. #define UA_NO_LYNX_WARNING
+#: LYMessages.c:588
+msgid "User-Agent string does not contain \"Lynx\" or \"L_y_n_x\""
+msgstr "\"User-Agent\"-streng indeholder ikke \"Lynx\" eller \"L_y_n_x\""
+
+#. #define UA_PLEASE_USE_LYNX
+#: LYMessages.c:590
+msgid "Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional deception!"
+msgstr "Brug \"L_y_n_x\" eller \"Lynx\" i \"User-Agent\" Ellers minder det om bevidst snyd!"
+
+#. #define UA_CHANGE_DISABLED
+#: LYMessages.c:592
+msgid "Changing of the User-Agent string is disabled!"
+msgstr "Mulighed for at ændre værdi af \"User-Agent\" er slået fra!"
+
+#. #define CHANGE_OF_SETTING_DISALLOWED
+#: LYMessages.c:594
+msgid "You are not allowed to change this setting."
+msgstr "Du har ikke lov til at ændre denne indstilling."
+
+#: LYMessages.c:595
+msgid "Saving Options..."
+msgstr "Gemmer indstillinger..."
+
+#: LYMessages.c:596
+msgid "Options saved!"
+msgstr "Indstillinger gemt!"
+
+#: LYMessages.c:597
+msgid "Unable to save Options!"
+msgstr "Kan ikke gemme indstillinger!"
+
+#: LYMessages.c:598
+msgid " 'r' to return to Lynx "
+msgstr "'r' for at returnere til Lynx "
+
+#: LYMessages.c:599
+msgid " '>' to save, or 'r' to return to Lynx "
+msgstr "'>' for at gemme, eller 'r' for at returnere til Lynx "
+
+#. #define ANY_KEY_CHANGE_RET_ACCEPT
+#: LYMessages.c:601
+msgid "Hit any key to change value; RETURN to accept."
+msgstr "Tryk enhver taste for at ændre værdi; RETUR accepterer."
+
+#: LYMessages.c:602
+msgid "Error uncompressing temporary file!"
+msgstr "Fejl ved dekomprimering af midlertidig fil!"
+
+#: LYMessages.c:603
+msgid "Unsupported URL scheme!"
+msgstr "Url-type ikke understøttet!"
+
+#: LYMessages.c:604
+msgid "Unsupported data: URL! Use SHOWINFO, for now."
+msgstr "Data ikke understøttet: Url! Brug 'SHOWINFO' indtil videre."
+
+#: LYMessages.c:605
+msgid "Redirection limit of 10 URL's reached."
+msgstr "Grænse for omdirigering på 10 url'er er nået."
+
+#: LYMessages.c:606
+msgid "Illegal redirection URL received from server!"
+msgstr "Server sendte ugyldig url til omdirigering!"
+
+#. #define SERVER_ASKED_FOR_REDIRECTION
+#: LYMessages.c:608
+#, c-format
+msgid "Server asked for %d redirection of POST content to"
+msgstr "Server spurgte efter %d omdirigering af 'POST'-indholdet til"
+
+#: LYMessages.c:611
+msgid "P)roceed, use G)ET or C)ancel "
+msgstr "P=fortsæt, brug G)et eller C=afbryd "
+
+#: LYMessages.c:612
+msgid "P)roceed, or C)ancel "
+msgstr "P=fortsæt eller C=afbryd "
+
+#. #define ADVANCED_POST_GET_REDIRECT
+#: LYMessages.c:614
+msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
+msgstr "Omdir. af 'POST'-indh. P=forts, se U)rl, brug G)ET el. C=afbryd"
+
+#. #define ADVANCED_POST_REDIRECT
+#: LYMessages.c:616
+msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
+msgstr "Omdir. af 'POST'-indhold. P=fortsæt, se U)rl el. C=afbryd"
+
+#. #define CONFIRM_POST_RESUBMISSION
+#: LYMessages.c:618
+msgid "Document from Form with POST content. Resubmit?"
+msgstr "Dokument fra formular med 'POST'-indhold. Genindsend?"
+
+#. #define CONFIRM_POST_RESUBMISSION_TO
+#: LYMessages.c:620
+#, c-format
+msgid "Resubmit POST content to %s ?"
+msgstr "Genindsend 'POST'-indhold til %s ?"
+
+#. #define CONFIRM_POST_LIST_RELOAD
+#: LYMessages.c:622
+#, c-format
+msgid "List from document with POST data. Reload %s ?"
+msgstr "Liste fra dokument med 'POST'-data. Genindlæs %s ?"
+
+#. #define CONFIRM_POST_DOC_HEAD
+#: LYMessages.c:624
+msgid "Document from POST action, HEAD may not be understood. Proceed?"
+msgstr "Dokument fra 'POST action'. 'HEAD' forstås måske ikke. Fortsæt?"
+
+#. #define CONFIRM_POST_LINK_HEAD
+#: LYMessages.c:626
+msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
+msgstr "Formularindsendelses Action er POST. 'HEAD' forstås evt. ikke. Fortsæt?"
+
+#: LYMessages.c:627
+msgid "Proceed without a username and password?"
+msgstr "Fortsæt uden brugernavn og adgangskode?"
+
+#: LYMessages.c:628
+#, c-format
+msgid "Proceed (%s)?"
+msgstr "Fortsæt (%s)?"
+
+#: LYMessages.c:629
+msgid "Cannot POST to this host."
+msgstr "Kan ikke sende 'POST' til denne vært."
+
+#: LYMessages.c:630
+msgid "POST not supported for this URL - ignoring POST data!"
+msgstr "Denne url understøtter ikke 'POST' - ignorerer 'POST'-data!"
+
+#: LYMessages.c:631
+msgid "Discarding POST data..."
+msgstr "Forkaster 'POST'-data..."
+
+#: LYMessages.c:632
+msgid "Document will not be reloaded!"
+msgstr "Dokumentet vil ikke blive genindlæst!"
+
+#: LYMessages.c:633
+msgid "Location: "
+msgstr "Sted: "
+
+#: LYMessages.c:634
+#, c-format
+msgid "'%s' not found!"
+msgstr "'%s' ikke fundet!"
+
+#: LYMessages.c:635
+msgid "Default Bookmark File"
+msgstr "Standard bogmærkefil"
+
+#: LYMessages.c:636
+msgid "Screen too small! (8x35 min)"
+msgstr "Skærm for lille! (min. 8x35)"
+
+#: LYMessages.c:637
+msgid "Select destination or ^G to Cancel: "
+msgstr "Vælg bogmærkefil eller ^G for at afbryde: "
+
+#. #define MULTIBOOKMARKS_SELECT
+#: LYMessages.c:639
+msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
+msgstr "Vælg underbogmærke, '=' for en menu eller ^G for at afbryde: "
+
+#. #define MULTIBOOKMARKS_SELF
+#: LYMessages.c:641
+msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
+msgstr "Genskab L)ink i denne bogmærkefil eller A)fbryd? (l,a): "
+
+#: LYMessages.c:642
+msgid "Multiple bookmark support is not available."
+msgstr "Mulighed for flere bogmærkefiler er ikke tilgængelig."
+
+#: LYMessages.c:643
+#, c-format
+msgid " Select Bookmark (screen %d of %d)"
+msgstr " Vælg bogmærke (skærm %d af %d)"
+
+#: LYMessages.c:644
+msgid " Select Bookmark"
+msgstr " Vælg Bogmærke"
+
+#. #define MULTIBOOKMARKS_EHEAD_MASK
+#: LYMessages.c:646
+#, c-format
+msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
+msgstr "Redigerer BESKRIVELSE og FILSTI for Bogmærker (%d af 2)"
+
+#. #define MULTIBOOKMARKS_EHEAD
+#: LYMessages.c:648
+msgid " Editing Bookmark DESCRIPTION and FILEPATH"
+msgstr " Redigerer BESKRIVELSE og FILSTI for Bogmærker"
+
+#: LYMessages.c:649
+msgid "Letter: "
+msgstr "Bogstav: "
+
+#. #define USE_PATH_OFF_HOME
+#: LYMessages.c:652
+msgid "Use a filepath off your login directory in SHELL syntax!"
+msgstr "Brug en filsti udenfor dit hjemmekatalog i SKAL-syntaks!"
+
+#: LYMessages.c:654
+msgid "Use a filepath off your home directory!"
+msgstr "Brug en filsti udenfor dit hjemmekatalog!"
+
+#. #define MAXLINKS_REACHED
+#: LYMessages.c:657
+msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
+msgstr "Max. links/side overskredet! Gennemse ½ side el. 2 linjer ad gangen."
+
+#. #define MAXHIST_REACHED
+#: LYMessages.c:659
+msgid "History List maximum reached! Document not pushed."
+msgstr "Kan ikke være flere linjer i historiklisten! Dokument ikke skubbet ud."
+
+#: LYMessages.c:660
+msgid "No previously visited links available!"
+msgstr "Side med tidligere besøgte links er ikke tilgængelig!"
+
+#: LYMessages.c:661
+msgid "Memory exhausted! Program aborted!"
+msgstr "Hukommelse opbrugt! Program afsluttedes!"
+
+#: LYMessages.c:662
+msgid "Memory exhausted! Aborting..."
+msgstr "Hukommelse opbrugt! Afslutter..."
+
+#: LYMessages.c:663
+msgid "Not enough memory!"
+msgstr "Ikke nok hukommelse!"
+
+#: LYMessages.c:664
+msgid "Directory/File Manager not available"
+msgstr "Filkatalog/filmanager er ikke tilgængelig"
+
+#: LYMessages.c:665
+msgid "HREF in BASE tag is not an absolute URL."
+msgstr "HREF i BASE-mærke er ikke en absolut URL."
+
+#: LYMessages.c:666
+msgid "Location URL is not absolute."
+msgstr "\"Location URL\" er ikke absolut."
+
+#: LYMessages.c:667
+msgid "Refresh URL is not absolute."
+msgstr "\"Refresh URL\" er ikke absolut."
+
+#. #define SENDING_MESSAGE_WITH_BODY_TO
+#: LYMessages.c:669
+msgid ""
+"You are sending a message with body to:\n"
+" "
+msgstr ""
+"Du sender en meddelelse med indhold til:\n"
+" "
+
+#: LYMessages.c:670
+msgid ""
+"You are sending a comment to:\n"
+" "
+msgstr ""
+"Du sender en kommentar til:\n"
+" "
+
+#: LYMessages.c:671
+msgid ""
+"\n"
+" With copy to:\n"
+" "
+msgstr ""
+"\n"
+"Med kopi til:\n"
+" "
+
+#: LYMessages.c:672
+msgid ""
+"\n"
+" With copies to:\n"
+" "
+msgstr ""
+"\n"
+"Med kopier til:\n"
+" "
+
+#. #define CTRL_G_TO_CANCEL_SEND
+#: LYMessages.c:674
+msgid ""
+"\n"
+"\n"
+"Use Ctrl-G to cancel if you do not want to send a message\n"
+msgstr ""
+"\n"
+"\n"
+"Brug Ctrl-G for at afbryde, hvis du ikke vil sende meddelelse\n"
+
+#. #define ENTER_NAME_OR_BLANK
+#: LYMessages.c:676
+msgid ""
+"\n"
+" Please enter your name, or leave it blank to remain anonymous\n"
+msgstr ""
+"\n"
+"Indtast venligst dit navn eller undlad dette, hvis du vil være anonym\n"
+
+#. #define ENTER_MAIL_ADDRESS_OR_OTHER
+#: LYMessages.c:678
+msgid ""
+"\n"
+" Please enter a mail address or some other\n"
+msgstr ""
+"\n"
+"Anfør venligst en e-postadresse eller en anden\n"
+
+#. #define MEANS_TO_CONTACT_FOR_RESPONSE
+#: LYMessages.c:680
+msgid " means to contact you, if you desire a response.\n"
+msgstr " måde at kontakte dig på, hvis du ønsker et svar.\n"
+
+#: LYMessages.c:681
+msgid ""
+"\n"
+" Please enter a subject line.\n"
+msgstr ""
+"\n"
+" Anfør venligst en emnelinje.\n"
+
+#. #define ENTER_ADDRESS_FOR_CC
+#: LYMessages.c:683
+msgid ""
+"\n"
+" Enter a mail address for a CC of your message.\n"
+msgstr ""
+"\n"
+" Anfør en e-postadresse for en Cc af dit brev.\n"
+
+#: LYMessages.c:684
+msgid " (Leave blank if you don't want a copy.)\n"
+msgstr " (undlad at udfylde, hvis du ikke vil have kopi.)\n"
+
+#: LYMessages.c:685
+msgid ""
+"\n"
+" Please review the message body:\n"
+"\n"
+msgstr ""
+"\n"
+" Kig venligst brevets indhold igennem:\n"
+
+#: LYMessages.c:686
+msgid ""
+"\n"
+"Press RETURN to continue: "
+msgstr ""
+"\n"
+"Tast RETUR for at fortsætte: "
+
+#: LYMessages.c:687
+msgid ""
+"\n"
+"Press RETURN to clean up: "
+msgstr ""
+"\n"
+"Tast RETUR for at rydde op: "
+
+#: LYMessages.c:688
+msgid " Use Control-U to erase the default.\n"
+msgstr " Brug Control-U for at slette standarden.\n"
+
+#: LYMessages.c:689
+msgid ""
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+"Skriv venligst dit brev nedenfor."
+
+#. #define ENTER_PERIOD_WHEN_DONE_A
+#: LYMessages.c:691 src/LYNews.c:380
+msgid ""
+"\n"
+" When you are done, press enter and put a single period (.)"
+msgstr ""
+"\n"
+"Når du er færdig, så tast <retur> og sæt et enkelt punktum (.)"
+
+#. #define ENTER_PERIOD_WHEN_DONE_B
+#: LYMessages.c:693 src/LYNews.c:381
+msgid ""
+"\n"
+" on a line and press enter again."
+msgstr ""
+"\n"
+" på en linje og tast <retur> igen."
+
+#. Cookies messages
+#. #define ADVANCED_COOKIE_CONFIRMATION
+#: LYMessages.c:697
+#, c-format
+msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
+msgstr "%s cookie: %.*s=%.*s Tillad? (Y=ja/N=nej/A=Altid/V=aldrig)"
+
+#. #define INVALID_COOKIE_DOMAIN_CONFIRMATION
+#: LYMessages.c:699
+#, c-format
+msgid "Accept invalid cookie domain=%s for '%s'?"
+msgstr "Godkend ugyldigt cookiedomæne=%s for '%s'?"
+
+#. #define INVALID_COOKIE_PATH_CONFIRMATION
+#: LYMessages.c:701
+#, c-format
+msgid "Accept invalid cookie path=%s as a prefix of '%s'?"
+msgstr "Godkend ugyldig cookiesti=%s som et præfiks for '%s'?"
+
+#: LYMessages.c:702
+msgid "Allowing this cookie."
+msgstr "Tillader denne cookie."
+
+#: LYMessages.c:703
+msgid "Rejecting this cookie."
+msgstr "Afviser denne cookie."
+
+#: LYMessages.c:704
+msgid "The Cookie Jar is empty."
+msgstr "Cookiekrukken er tom."
+
+#. #define ACTIVATE_TO_GOBBLE
+#: LYMessages.c:706
+msgid "Activate links to gobble up cookies or entire domains,"
+msgstr "Aktiver links for at slette cookier eller hele domæner,"
+
+#: LYMessages.c:707
+msgid "or to change a domain's 'allow' setting."
+msgstr "eller for at ændre værdien for accept/afvisning af cookier fra et domæne."
+
+#: LYMessages.c:708
+msgid "(Cookies never allowed.)"
+msgstr "(Cookier aldrig tilladt.)"
+
+#: LYMessages.c:709
+msgid "(Cookies always allowed.)"
+msgstr "(Cookier altid tilladt.)"
+
+#: LYMessages.c:710
+msgid "(Cookies allowed via prompt.)"
+msgstr "(Cookier tilladt via prompt.)"
+
+#: LYMessages.c:711
+msgid "(Persistent Cookies.)"
+msgstr "(Vedvarende cookier.)"
+
+#: LYMessages.c:712
+msgid "(No title.)"
+msgstr "(Ingen titel.)"
+
+#: LYMessages.c:713
+msgid "(No name.)"
+msgstr "(Ingen navn.)"
+
+#: LYMessages.c:714
+msgid "(No value.)"
+msgstr "(Ingen værdi.)"
+
+#: LYMessages.c:715
+msgid "None"
+msgstr "Ingen"
+
+#: LYMessages.c:716
+msgid "(End of session.)"
+msgstr "(Slut på session.)"
+
+#: LYMessages.c:717
+msgid "Delete this cookie?"
+msgstr "Slet denne cookie?"
+
+#: LYMessages.c:718
+msgid "The cookie has been eaten!"
+msgstr "Cookier er blevet slettet!"
+
+#: LYMessages.c:719
+msgid "Delete this empty domain?"
+msgstr "Slet dette tomme domæne?"
+
+#: LYMessages.c:720
+msgid "The domain has been eaten!"
+msgstr "Domænet er blevet slettet!"
+
+#. #define DELETE_COOKIES_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:722
+msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D=slet domænes cookier, sæt tillad: A=altid/P=spørg/V=aldrig el. C=afbryd? "
+
+#. #define DELETE_DOMAIN_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:724
+msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D=slet domæne, sæt tillad: A=altid/P=spørg/V=aldrig el. C=afbryd? "
+
+#: LYMessages.c:725
+msgid "All cookies in the domain have been eaten!"
+msgstr "Alle cookier i domænet er blevet slettet!"
+
+#: LYMessages.c:726
+#, c-format
+msgid "'A'lways allowing from domain '%s'."
+msgstr "Tillader 'A'ltid fra domæne '%s'."
+
+#: LYMessages.c:727
+#, c-format
+msgid "ne'V'er allowing from domain '%s'."
+msgstr "Tillader aldrig(V) fra domæne '%s'."
+
+#: LYMessages.c:728
+#, c-format
+msgid "'P'rompting to allow from domain '%s'."
+msgstr "'Spørger(P) om tilladelse fra domæne '%s'."
+
+#: LYMessages.c:729
+msgid "Delete all cookies in this domain?"
+msgstr "Slet alle cookier under dette domæne?"
+
+#: LYMessages.c:730
+msgid "All of the cookies in the jar have been eaten!"
+msgstr "Alle cookier i krukken er blevet slettet!"
+
+#: LYMessages.c:732
+msgid "Port 19 not permitted in URLs."
+msgstr "Port 19 er ikke tilladt i url'er."
+
+#: LYMessages.c:733
+msgid "Port 25 not permitted in URLs."
+msgstr "Port 25 er ikke tilladt i url'er."
+
+#: LYMessages.c:734
+#, c-format
+msgid "Port %lu not permitted in URLs."
+msgstr "Port %lu er ikke tilladt i url'er."
+
+#: LYMessages.c:735
+msgid "URL has a bad port field."
+msgstr "Url har et forkert portfelt."
+
+#: LYMessages.c:736
+msgid "Maximum nesting of HTML elements exceeded."
+msgstr "Øvre grænse for indlejring af html-elementer er overskredet."
+
+#: LYMessages.c:737
+msgid "Bad partial reference! Stripping lead dots."
+msgstr "Forkert partiel reference! Fjerner forreste punktummer."
+
+#: LYMessages.c:738
+msgid "Trace Log open failed. Trace off!"
+msgstr "Åbning af sporingslogfil mislykkedes. Sporing slået fra!"
+
+#: LYMessages.c:739
+msgid "Lynx Trace Log"
+msgstr "Lynx sporingslog"
+
+#: LYMessages.c:740
+msgid "No trace log has been started for this session."
+msgstr "Ingen sporingslog er åbnet for denne session."
+
+#. #define MAX_TEMPCOUNT_REACHED
+#: LYMessages.c:742
+msgid "The maximum temporary file count has been reached!"
+msgstr "Det maksimale antal midlertidige filer er nået!"
+
+#. #define FORM_VALUE_TOO_LONG
+#: LYMessages.c:744
+msgid "Form field value exceeds buffer length! Trim the tail."
+msgstr "Formularfeltets værdi overstiger bufferlængde! Gør den kortere. "
+
+#. #define FORM_TAIL_COMBINED_WITH_HEAD
+#: LYMessages.c:746
+msgid "Modified tail combined with head of form field value."
+msgstr "Ændret \"hale\" kombineret med \"hoved\" i værdi for formularfelt."
+
+#. HTFile.c
+#: LYMessages.c:749
+msgid "Directory"
+msgstr "Filkatalog"
+
+#: LYMessages.c:750
+msgid "Directory browsing is not allowed."
+msgstr "Gennemsyn af filkatalog er ikke tilladt."
+
+#: LYMessages.c:751
+msgid "Selective access is not enabled for this directory"
+msgstr "Selektiv adgang til dette filkatalog er ikke muliggjort"
+
+#: LYMessages.c:752
+msgid "Multiformat: directory scan failed."
+msgstr "Multiformat: Skanning af filkatalog mislykkedes."
+
+#: LYMessages.c:753
+msgid "This directory is not readable."
+msgstr "Dette filkatalog er ikke læsbart."
+
+#: LYMessages.c:754
+msgid "Can't access requested file."
+msgstr "Kan ikke tilgå den ønskede fil."
+
+#: LYMessages.c:755
+msgid "Could not find suitable representation for transmission."
+msgstr "Kunne ikke finde en passende repræsentation for overførsel."
+
+#: LYMessages.c:756
+msgid "Could not open file for decompression!"
+msgstr "Kunne ikke åbne fil for dekomprimering!"
+
+#: LYMessages.c:757
+msgid "Files:"
+msgstr "Filer:"
+
+#: LYMessages.c:758
+msgid "Subdirectories:"
+msgstr "Underkataloger:"
+
+#: LYMessages.c:759
+msgid " directory"
+msgstr " filkatalog"
+
+#: LYMessages.c:760
+msgid "Up to "
+msgstr "Op til "
+
+#: LYMessages.c:761
+msgid "Current directory is "
+msgstr "Aktuelle filkatalog er "
+
+#. HTGopher.c
+#: LYMessages.c:764
+msgid "No response from server!"
+msgstr "Serveren svarede ikke!"
+
+#: LYMessages.c:765
+msgid "CSO index"
+msgstr "CSO-indeks"
+
+#: LYMessages.c:766
+msgid ""
+"\n"
+"This is a searchable index of a CSO database.\n"
+msgstr ""
+"\n"
+"Dette er et søgbart indeks i en CSO-database.\n"
+
+#: LYMessages.c:767
+msgid "CSO Search Results"
+msgstr "CSO søgeresultater"
+
+#: LYMessages.c:768
+#, c-format
+msgid "Seek fail on %s\n"
+msgstr "Søgning mislykkedes for %s\n"
+
+#: LYMessages.c:769
+msgid ""
+"\n"
+"Press the 's' key and enter search keywords.\n"
+msgstr ""
+"\n"
+"Tryk på 's'-tasten og indtast nøgleord for søgning.\n"
+
+#: LYMessages.c:770
+msgid ""
+"\n"
+"This is a searchable Gopher index.\n"
+msgstr ""
+"\n"
+"Dette er et søgbart Gopher-indeks.\n"
+
+#: LYMessages.c:771
+msgid "Gopher index"
+msgstr "Gopher-indeks"
+
+#: LYMessages.c:772
+msgid "Gopher Menu"
+msgstr "Gopher-menu"
+
+#: LYMessages.c:773
+msgid " Search Results"
+msgstr " Resultater af søgning"
+
+#: LYMessages.c:774
+msgid "Sending CSO/PH request."
+msgstr "Sender CSO/PH-anmodning."
+
+#: LYMessages.c:775
+msgid "Sending Gopher request."
+msgstr "Sender Gopher-anmodning."
+
+#: LYMessages.c:776
+msgid "CSO/PH request sent; waiting for response."
+msgstr "CSO/PH-anmodning sendt; venter på svar."
+
+#: LYMessages.c:777
+msgid "Gopher request sent; waiting for response."
+msgstr "Gopher-anmodning sendt; venter på svar."
+
+#: LYMessages.c:778
+msgid ""
+"\n"
+"Please enter search keywords.\n"
+msgstr ""
+"\n"
+"Indtast venligst nøgleord for søgning.\n"
+
+#: LYMessages.c:779
+msgid ""
+"\n"
+"The keywords that you enter will allow you to search on a"
+msgstr ""
+"\n"
+"De indtastede nøgleord vil lade dig søge på et"
+
+#: LYMessages.c:780
+msgid " person's name in the database.\n"
+msgstr " personnavn i databasen.\n"
+
+#. HTNews.c
+#: LYMessages.c:783
+msgid "Connection closed ???"
+msgstr "Forbindelsen lukket ???"
+
+#: LYMessages.c:784
+msgid "Cannot open temporary file for news POST."
+msgstr "Kan ikke åbne midlertidig fil for postning til nyhedsgruppe."
+
+#: LYMessages.c:785
+msgid "This client does not contain support for posting to news with SSL."
+msgstr "Postning til nyhedsgrupper med SSL kan ikke benyttes med denne klient."
+
+#. HTStyle.c
+#: LYMessages.c:788
+#, c-format
+msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
+msgstr "Stil %d '%s' SGML:%s. Font %s %.1f punkt.\n"
+
+#: LYMessages.c:789
+#, c-format
+msgid "\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
+msgstr "Indryk: først=%.0f andre=%.0f, Højde=%.1f Beskr=%.1f\n"
+
+#: LYMessages.c:790
+#, c-format
+msgid "\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
+msgstr "Juster=%d, %d tabs. (%.0f foran, %.0f efter)\n"
+
+#: LYMessages.c:791
+#, c-format
+msgid "\t\tTab kind=%d at %.0f\n"
+msgstr "Tab type=%d ved %.0f\n"
+
+#. HTTP.c
+#: LYMessages.c:794
+msgid "Can't proceed without a username and password."
+msgstr "Kan ikke fortsætte uden et brugernavn og en adgangskode."
+
+#: LYMessages.c:795
+msgid "Can't retry with authorization! Contact the server's WebMaster."
+msgstr "Kan ikke prøve igen med autorisation! Kontakt serverens WebMaster."
+
+#: LYMessages.c:796
+msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
+msgstr "Kan ikke prøve igen m. proxy-autorisation! Kontakt serverens WebMaster."
+
+#: LYMessages.c:797
+msgid "Retrying with proxy authorization information."
+msgstr "Prøver igen med proxy-godkendelsesinformation."
+
+#. HTWAIS.c
+#: LYMessages.c:800
+msgid "HTWAIS: Return message too large."
+msgstr "HTWAIS: Retur-meddelelse er for stor."
+
+#: LYMessages.c:801
+msgid "Enter WAIS query: "
+msgstr "Indtast WAIS-forespørgsel."
+
+#. Miscellaneous status
+#: LYMessages.c:804
+msgid "Retrying as HTTP0 request."
+msgstr "Prøver igen med HTTP0 som anmodning."
+
+#: LYMessages.c:805
+#, c-format
+msgid "Transferred %d bytes"
+msgstr "Overført %d bytes"
+
+#: LYMessages.c:806
+msgid "Data transfer complete"
+msgstr "Dataoverførsel fuldført"
+
+#: LYMessages.c:807
+#, c-format
+msgid "Error processing line %d of %s\n"
+msgstr "Fejl ved behandling af linje %d af %s\n"
+
+#. Lynx internal page titles
+#: LYMessages.c:810
+msgid "Address List Page"
+msgstr "Adresseliste"
+
+#: LYMessages.c:811
+msgid "Bookmark file"
+msgstr "Bogmærkefil"
+
+#: LYMessages.c:812
+msgid "Configuration Definitions"
+msgstr "Opsætningsdefinitioner"
+
+#: LYMessages.c:813
+msgid "Cookie Jar"
+msgstr "Cookie-krukke"
+
+#: LYMessages.c:814
+msgid "Current Key Map"
+msgstr "Aktuelle tastebindinger"
+
+#: LYMessages.c:815
+msgid "File Management Options"
+msgstr "Valgmuligheder for filhåndtering"
+
+#: LYMessages.c:816
+msgid "Download Options"
+msgstr "Valgmuligheder for hentning af filer"
+
+#: LYMessages.c:817
+msgid "History Page"
+msgstr "Historikside"
+
+#: LYMessages.c:818
+msgid "List Page"
+msgstr "Oversigtsside"
+
+#: LYMessages.c:819
+msgid "Lynx.cfg Information"
+msgstr "Lynx.cfg information"
+
+#: LYMessages.c:820
+msgid "Converted Mosaic Hotlist"
+msgstr "Omdannet Mosaic-bogmærkefil"
+
+#: LYMessages.c:821
+msgid "Options Menu"
+msgstr "Opsætningsmenu"
+
+#: LYMessages.c:822
+msgid "File Permission Options"
+msgstr "Valgmuligheder for filrettigheder"
+
+#: LYMessages.c:823
+msgid "Printing Options"
+msgstr "Valgmuligheder for udskrivning"
+
+#: LYMessages.c:824
+msgid "Information about the current document"
+msgstr "Oplysninger om det aktuelle dokument"
+
+#: LYMessages.c:825
+msgid "Your recent statusline messages"
+msgstr "De seneste meddelelser fra statuslinjen"
+
+#: LYMessages.c:826
+msgid "Upload Options"
+msgstr "Valgmuligheder for uploads"
+
+#: LYMessages.c:827
+msgid "Visited Links Page"
+msgstr "Oversigt over besøgte links"
+
+#. CONFIG_DEF_TITLE subtitles
+#: LYMessages.c:830
+msgid "See also"
+msgstr "Se også"
+
+#: LYMessages.c:831
+msgid "your"
+msgstr "din"
+
+#: LYMessages.c:832
+msgid "for runtime options"
+msgstr "Valgmuligheder ved opstart"
+
+#: LYMessages.c:833
+msgid "compile time options"
+msgstr "Valgmuligheder ved oversættelse (compile)"
+
+#: LYMessages.c:834
+msgid "latest release"
+msgstr "seneste udgave"
+
+#: LYMessages.c:835
+msgid "pre-release version"
+msgstr "pre-release version"
+
+#: LYMessages.c:836
+msgid "development version"
+msgstr "udviklingsudgave"
+
+#. #define AUTOCONF_CONFIG_CACHE
+#: LYMessages.c:838
+msgid ""
+"The following data were derived during the automatic configuration/build\n"
+"process of this copy of Lynx. When reporting a bug, please include a copy\n"
+"of this page."
+msgstr ""
+"Følgende data blev indhentet under den automatiske konfigureringsproces\n"
+"af denne kopi af Lynx. Ved indrapportering af en programfejl, medsend da\n"
+"venligst en kopi af denne side."
+
+#. #define AUTOCONF_LYNXCFG_H
+#: LYMessages.c:842
+msgid ""
+"The following data were used as automatically-configured compile-time\n"
+"definitions when this copy of Lynx was built."
+msgstr ""
+"Følgende data blev brugt som automatisk indstillede oversættelsesdefinitioner,\n"
+"da denne kopi af Lynx blev lavet."
+
+#. #define DIRED_NOVICELINE
+#: LYMessages.c:847
+msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
+msgstr "C=Opret D=Hent E=rediger F=fuld menu M=ret R=slet T=marker U=upload \n"
+
+#: LYMessages.c:848
+msgid "Failed to obtain status of current link!"
+msgstr "Kunne ikke fremskaffe status på aktuelle link!"
+
+#. #define INVALID_PERMIT_URL
+#: LYMessages.c:851
+msgid "Special URL only valid from current File Permission menu!"
+msgstr "Særlig url er kun gyldig fra menu over aktuelle filrettigheder!"
+
+#: LYMessages.c:855
+msgid "External support is currently disabled."
+msgstr "Ekstern understøttelse er slået fra i øjeblikket."
+
+#. new with 2.8.4dev.21
+#: LYMessages.c:859
+msgid "Changing working-directory is currently disabled."
+msgstr "Ændring af arbejdskatalog er sat ud af kraft i øjeblikket."
+
+#: LYMessages.c:860
+msgid "Linewrap OFF!"
+msgstr "Linjeombrydning slået FRA!"
+
+#: LYMessages.c:861
+msgid "Linewrap ON!"
+msgstr "Linjeombrydning slået TIL!"
+
+#: LYMessages.c:862
+msgid "Parsing nested-tables toggled OFF! Reloading..."
+msgstr "Indlejrede tabeller fortolkes IKKE! Genindlæser..."
+
+#: LYMessages.c:863
+msgid "Parsing nested-tables toggled ON! Reloading..."
+msgstr "Indlejrede tabeller fortolkes! Genindlæser..."
+
+#: LYMessages.c:864
+msgid "Shifting is disabled while line-wrap is in effect"
+msgstr "Panorering er slået fra, når linjeombrydning er virksom."
+
+#: LYMessages.c:865
+msgid "Trace not supported"
+msgstr "Sporing ikke understøttet"
+
+#: WWW/Library/Implementation/HTAABrow.c:648
+#, c-format
+msgid "Username for '%s' at %s '%s%s':"
+msgstr "Brugernavn for '%s' på %s '%s%s':"
+
+#: WWW/Library/Implementation/HTAABrow.c:914
+msgid "This client doesn't know how to compose proxy authorization information for scheme"
+msgstr "Denne klient ved ikke, hvordan proxy-autorisationsinfo for protokol skal dannes"
+
+#: WWW/Library/Implementation/HTAABrow.c:989
+msgid "This client doesn't know how to compose authorization information for scheme"
+msgstr "Denne klient ved ikke, hvordan godkendelsesinfo for protokol skal dannes"
+
+#: WWW/Library/Implementation/HTAABrow.c:1097
+#, c-format
+msgid "Invalid header '%s%s%s%s%s'"
+msgstr "Ugyldigt hoved '%s%s%s%s%s'"
+
+#: WWW/Library/Implementation/HTAABrow.c:1201
+msgid "Proxy authorization required -- retrying"
+msgstr "Proxy-godkendelse påkrævet - forsøger igen"
+
+#: WWW/Library/Implementation/HTAABrow.c:1260
+msgid "Access without authorization denied -- retrying"
+msgstr "Adgang uden godkendelse nægtet - forsøger igen"
+
+#: WWW/Library/Implementation/HTAccess.c:683
+msgid "Access forbidden by rule"
+msgstr "Adgang forbudt ved regel"
+
+#: WWW/Library/Implementation/HTAccess.c:785
+msgid "Document with POST content not found in cache. Resubmit?"
+msgstr "Dokument med POST-indhold ikke fundet i cache. Indsend igen?"
+
+#: WWW/Library/Implementation/HTAccess.c:1026 src/GridText.c:8039
+msgid "Loading incomplete."
+msgstr "Indlæsning ikke fuldført."
+
+#: WWW/Library/Implementation/HTAccess.c:1056
+msgid "**** HTAccess: socket or file number returned by obsolete load routine!\n"
+msgstr "**** HTAccess: 'Socket-' el. filnr. returneret af forældet indlæsningsmetode!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1058
+msgid "**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"
+msgstr "**** HTAccess: Intern softwarefejl. Rapporter venligst til lynx-dev@sig.net!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1059
+#, c-format
+msgid "**** HTAccess: Status returned was: %d\n"
+msgstr "**** HTAccess: Statustilbagemelding var: %d\n"
+
+#.
+#. * hack: if we fail in HTAccess.c
+#. * avoid duplicating URL, oh.
+#.
+#: WWW/Library/Implementation/HTAccess.c:1065 src/LYMainLoop.c:7834
+msgid "Can't Access"
+msgstr "Har ikke adgang til"
+
+#: WWW/Library/Implementation/HTAccess.c:1073
+msgid "Unable to access document."
+msgstr "Kan ikke tilgå dokument."
+
+#: WWW/Library/Implementation/HTFTP.c:756
+#, c-format
+msgid "Enter password for user %s@%s:"
+msgstr "Indtast adgangskode for bruger %s@%s:"
+
+#: WWW/Library/Implementation/HTFTP.c:784
+msgid "Unable to connect to FTP host."
+msgstr "Kan ikke forbinde til FTP-vært."
+
+#: WWW/Library/Implementation/HTFTP.c:1054
+msgid "close master socket"
+msgstr "luk hoved-\"socket\""
+
+#: WWW/Library/Implementation/HTFTP.c:1116
+msgid "socket for master socket"
+msgstr "\"socket\" for hoved-\"socket\""
+
+#.
+#. ** It's a symbolic link, does the user care about
+#. ** knowing if it is symbolic? I think so since
+#. ** it might be a directory.
+#.
+#: WWW/Library/Implementation/HTFTP.c:1630 WWW/Library/Implementation/HTFTP.c:2251
+msgid "Symbolic Link"
+msgstr "Symbolsk link"
+
+#: WWW/Library/Implementation/HTFTP.c:2612
+msgid "Receiving FTP directory."
+msgstr "FTP-filkatalog indlæses."
+
+#: WWW/Library/Implementation/HTFTP.c:2755
+#, c-format
+msgid "Transferred %d bytes (%5d)"
+msgstr "Overført %d bytes (%5d)"
+
+#: WWW/Library/Implementation/HTFTP.c:3090
+msgid "connect for data"
+msgstr "dataforbindelse åben"
+
+#: WWW/Library/Implementation/HTFTP.c:3690
+msgid "Receiving FTP file."
+msgstr "Modtager FTP-fil."
+
+#: WWW/Library/Implementation/HTFinger.c:275
+msgid "Could not set up finger connection."
+msgstr "Kunne ikke sætte en finger-forbindelse op."
+
+#: WWW/Library/Implementation/HTFinger.c:320
+msgid "Could not load data (no sitename in finger URL)"
+msgstr "Kunne ikke indlæse data (intet sitenavn i finger-url)"
+
+#: WWW/Library/Implementation/HTFinger.c:328
+msgid "Invalid port number - will only use port 79!"
+msgstr "Ugyldigt portnummer - vil kun bruge port 79!"
+
+#: WWW/Library/Implementation/HTFinger.c:396
+msgid "Could not access finger host."
+msgstr "Kunne ikke få adgang til finger-vært."
+
+#: WWW/Library/Implementation/HTFinger.c:407
+msgid "No response from finger server."
+msgstr "Intet svar fra finger-server."
+
+#: WWW/Library/Implementation/HTNews.c:372
+#, c-format
+msgid "Username for news host '%s':"
+msgstr "Brugernavn for nyhedsvært '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:425
+msgid "Change username?"
+msgstr "Skift brugernavn?"
+
+#: WWW/Library/Implementation/HTNews.c:429
+msgid "Username:"
+msgstr "Brugernavn:"
+
+#: WWW/Library/Implementation/HTNews.c:453
+#, c-format
+msgid "Password for news host '%s':"
+msgstr "Adgangskode for news-vært '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:536
+msgid "Change password?"
+msgstr "Skift adgangskode?"
+
+#: WWW/Library/Implementation/HTNews.c:1691
+#, c-format
+msgid "No matches for: %s"
+msgstr "Ingen resultater for: %s"
+
+#: WWW/Library/Implementation/HTNews.c:1744
+msgid ""
+"\n"
+"No articles in this group.\n"
+msgstr ""
+"\n"
+"Ingen artikler i denne gruppe.\n"
+
+#: WWW/Library/Implementation/HTNews.c:1757
+msgid ""
+"\n"
+"No articles in this range.\n"
+msgstr ""
+"\n"
+"Ingen artikler i dette interval.\n"
+
+#.
+#. ** Set window title.
+#.
+#: WWW/Library/Implementation/HTNews.c:1770
+#, c-format
+msgid "%s, Articles %d-%d"
+msgstr "%s, Artikler %d-%d"
+
+#: WWW/Library/Implementation/HTNews.c:1792
+msgid "Earlier articles"
+msgstr "Tidligere artikler"
+
+#: WWW/Library/Implementation/HTNews.c:1805
+#, c-format
+msgid ""
+"\n"
+"There are about %d articles currently available in %s, IDs as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"Der er i øjeblikket ca. %d artikler i %s, ID'er som følger:\n"
+
+#: WWW/Library/Implementation/HTNews.c:1865
+msgid "All available articles in "
+msgstr "Alle tilgængelige artikler i "
+
+#: WWW/Library/Implementation/HTNews.c:2081
+msgid "Later articles"
+msgstr "Nyere artikler"
+
+#: WWW/Library/Implementation/HTNews.c:2105
+msgid "Post to "
+msgstr "Post til "
+
+#: WWW/Library/Implementation/HTNews.c:2323
+msgid "This client does not contain support for SNEWS URLs."
+msgstr "Denne klient kan ikke håndtere SNEWS url'er."
+
+#: WWW/Library/Implementation/HTNews.c:2531
+msgid "No target for raw text!"
+msgstr "Intet mål for rå tekst!"
+
+#: WWW/Library/Implementation/HTNews.c:2561
+msgid "Connecting to NewsHost ..."
+msgstr "Forbinder til nyhedsvært ..."
+
+#: WWW/Library/Implementation/HTNews.c:2612
+#, c-format
+msgid "Could not access %s."
+msgstr "Kunne ikke tilgå %s."
+
+#: WWW/Library/Implementation/HTNews.c:2712
+#, c-format
+msgid "Can't read news info. News host %.20s responded: %.200s"
+msgstr "Kan ikke læse nyhedsinfo. Nyhedsvært %.20s svarede: %.200s"
+
+#: WWW/Library/Implementation/HTNews.c:2716
+#, c-format
+msgid "Can't read news info, empty response from host %s"
+msgstr "Kan ikke læse nyhedsinfo, tomt svar fra vært %s"
+
+#.
+#. ** List available newsgroups. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2920
+msgid "Reading list of available newsgroups."
+msgstr "Læser liste over tilgængelige nyhedsgrupper."
+
+#: WWW/Library/Implementation/HTNews.c:2942
+msgid "Reading list of articles in newsgroup."
+msgstr "Læser liste over artikler i nyhedsgruppe."
+
+#.
+#. ** Get an article from a news group. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2948
+msgid "Reading news article."
+msgstr "Læser nyhedsartikel."
+
+#: WWW/Library/Implementation/HTNews.c:2978
+msgid "Sorry, could not load requested news."
+msgstr "Beklager, kunne ikke indlæse artikler."
+
+#: WWW/Library/Implementation/HTTCP.c:1233
+msgid "Address has invalid port"
+msgstr "Adresse har en ugyldig port"
+
+#: WWW/Library/Implementation/HTTCP.c:1336
+msgid "Address length looks invalid"
+msgstr "Adresselængde forekommer ugyldig"
+
+#: WWW/Library/Implementation/HTTCP.c:1574 WWW/Library/Implementation/HTTCP.c:1592
+#, c-format
+msgid "Unable to locate remote host %s."
+msgstr "Ude af stand til at finde fremmed vært %s."
+
+#. Not HTProgress, so warning won't be overwritten
+#. * immediately; but not HTAlert, because typically
+#. * there will be other alerts from the callers. - kw
+#.
+#: WWW/Library/Implementation/HTTCP.c:1589 WWW/Library/Implementation/HTTelnet.c:103
+#, c-format
+msgid "Invalid hostname %s"
+msgstr "Ugyldigt værtsnavn %s"
+
+#: WWW/Library/Implementation/HTTCP.c:1603
+#, c-format
+msgid "Making %s connection to %s"
+msgstr "Foretager %s-forbindelse til %s"
+
+#: WWW/Library/Implementation/HTTCP.c:1619
+#, c-format
+msgid "socket failed: family %d addr %s port %s."
+msgstr "'socket' fejlede: familie %d adr. %s port %s."
+
+#: WWW/Library/Implementation/HTTCP.c:1628
+msgid "socket failed."
+msgstr "'socket' fejlede."
+
+#: WWW/Library/Implementation/HTTCP.c:1648
+msgid "Could not make connection non-blocking."
+msgstr "Kunne ikke oprette en ikke-blokerende forbindelse."
+
+#: WWW/Library/Implementation/HTTCP.c:1717
+msgid "Connection failed (too many retries)."
+msgstr "Forbindelse opgivet (for mange forsøg)."
+
+#: WWW/Library/Implementation/HTTCP.c:1910
+msgid "Could not restore socket to blocking."
+msgstr "Kunne ikke genformå \"socket\" til at blokere."
+
+#: WWW/Library/Implementation/HTTCP.c:1976
+msgid "Socket read failed for 180,000 tries."
+msgstr "'Socket'-læsning slog fejl for 180.000 forsøg."
+
+#: WWW/Library/Implementation/HTTP.c:466
+msgid "This client does not contain support for HTTPS URLs."
+msgstr "Denne klient kan ikke håndtere HTTPS-url'er."
+
+#: WWW/Library/Implementation/HTTP.c:491
+msgid "Unable to connect to remote host."
+msgstr "Kan ikke forbinde til fremmed vært."
+
+#: WWW/Library/Implementation/HTTP.c:1005
+msgid "Sending HTTP request."
+msgstr "Sender HTTP-anmodning."
+
+#: WWW/Library/Implementation/HTTP.c:1039
+msgid "Unexpected network write error; connection aborted."
+msgstr "Uventet skrivningsfejl i netværk; forbindelse afbrudt."
+
+#: WWW/Library/Implementation/HTTP.c:1045
+msgid "HTTP request sent; waiting for response."
+msgstr "HTTP-anmodning sendt; venter på svar."
+
+#: WWW/Library/Implementation/HTTP.c:1109
+msgid "Unexpected network read error; connection aborted."
+msgstr "Uventet læsningsfejl i netværk; forbindelse afbrudt"
+
+#.
+#. ** HTTP/1.1 Informational statuses.
+#. ** 100 Continue.
+#. ** 101 Switching Protocols.
+#. ** > 101 is unknown.
+#. ** We should never get these, and they have only
+#. ** the status line and possibly other headers,
+#. ** so we'll deal with them by showing the full
+#. ** header to the user as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1305
+msgid "Got unexpected Informational Status."
+msgstr "Modtog uventet \"Informational Status\"."
+
+#.
+#. * Reset Content. The server has fulfilled the
+#. * request but nothing is returned and we should
+#. * reset any form content. We'll instruct the
+#. * user to do that, and restore the current
+#. * document. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1340
+msgid "Request fulfilled. Reset Content."
+msgstr "Anmodning imødekommet. Nulstil indhold."
+
+#. Not Modified
+#.
+#. * We didn't send an "If-Modified-Since" header,
+#. * so this status is inappropriate. We'll deal
+#. * with it by showing the full header to the user
+#. * as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1459
+msgid "Got unexpected 304 Not Modified status."
+msgstr "Modtog uventet 304 \"Not Modified status\"."
+
+#: WWW/Library/Implementation/HTTP.c:1526
+msgid "Redirection of POST content requires user approval."
+msgstr "Omdirigering af 'POST'-indhold kræver brugers godkendelse."
+
+#: WWW/Library/Implementation/HTTP.c:1541
+msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
+msgstr "Har 'POST'-indhold. Behandler perm. omdirigering som midlertidig.\n"
+
+#: WWW/Library/Implementation/HTTP.c:1586
+msgid "Retrying with access authorization information."
+msgstr "Prøver igen med oplysning om adgangstilladelse."
+
+#: WWW/Library/Implementation/HTTP.c:1598
+msgid "Show the 401 message body?"
+msgstr "Vis indhold af 401-meddelelse?"
+
+#: WWW/Library/Implementation/HTTP.c:1643
+msgid "Show the 407 message body?"
+msgstr "Vis indhold af 407-meddelelse?"
+
+#.
+#. ** Bad or unknown server_status number.
+#. ** Take a chance and hope there is
+#. ** something to display. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1748
+msgid "Unknown status reply from server!"
+msgstr "Ukendt statussvar fra server!"
+
+#: WWW/Library/Implementation/HTTelnet.c:101
+#, c-format
+msgid "remote %s session:"
+msgstr "fremmed %s session:"
+
+#: WWW/Library/Implementation/HTWAIS.c:161
+msgid "Could not connect to WAIS server."
+msgstr "Kunne ikke forbinde til WAIS-server."
+
+#: WWW/Library/Implementation/HTWAIS.c:170
+msgid "Could not open WAIS connection for reading."
+msgstr "Kunne ikke åbne WAIS-forbindelse for læsning."
+
+#: WWW/Library/Implementation/HTWAIS.c:194
+msgid "Diagnostic code is "
+msgstr "Diagnosticeringskode er "
+
+#: WWW/Library/Implementation/HTWAIS.c:463
+msgid "Index "
+msgstr "Indeks "
+
+#: WWW/Library/Implementation/HTWAIS.c:467
+#, c-format
+msgid " contains the following %d item%s relevant to \""
+msgstr " indeholder flg. %d enhed%s med relevans for \""
+
+#: WWW/Library/Implementation/HTWAIS.c:475
+msgid "The first figure after each entry is its relative score, "
+msgstr "Det første tal efter hver listning er dens relative score."
+
+#: WWW/Library/Implementation/HTWAIS.c:476
+msgid "the second is the number of lines in the item."
+msgstr "det andet er antal linjer i enheden."
+
+#: WWW/Library/Implementation/HTWAIS.c:517
+msgid " (bad file name)"
+msgstr " (forkert filnavn)"
+
+#: WWW/Library/Implementation/HTWAIS.c:542
+msgid "(bad doc id)"
+msgstr "(forkert dok id)"
+
+#: WWW/Library/Implementation/HTWAIS.c:558
+msgid "(Short Header record, can't display)"
+msgstr "(Kort 'header'-post, kan ikke vise)"
+
+#: WWW/Library/Implementation/HTWAIS.c:565
+msgid ""
+"\n"
+"Long Header record, can't display\n"
+msgstr ""
+"\n"
+"Lang 'header'-post, kan ikke vise\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:572
+msgid ""
+"\n"
+"Text record\n"
+msgstr ""
+"\n"
+"Tekstpost\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:581
+msgid ""
+"\n"
+"Headline record, can't display\n"
+msgstr ""
+"\n"
+"Hovedlinje-post, kan ikke vise\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:589
+msgid ""
+"\n"
+"Code record, can't display\n"
+msgstr ""
+"\n"
+"Kodepost, kan ikke vise\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:691
+msgid "Syntax error in WAIS URL"
+msgstr "Syntaksfejl i WAIS-URL"
+
+#: WWW/Library/Implementation/HTWAIS.c:761
+msgid " (WAIS Index)"
+msgstr " (WAIS-indeks)"
+
+#: WWW/Library/Implementation/HTWAIS.c:768
+msgid "WAIS Index: "
+msgstr "WAIS-indeks: "
+
+#: WWW/Library/Implementation/HTWAIS.c:774
+msgid "This is a link for searching the "
+msgstr "Dette er et link til søgning af "
+
+#: WWW/Library/Implementation/HTWAIS.c:778
+msgid " WAIS Index.\n"
+msgstr " WAIS-indekset.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:805
+msgid ""
+"\n"
+"Enter the 's'earch command and then specify search words.\n"
+msgstr ""
+"\n"
+"Indtast 's'øgekommando og anfør så søgeordene.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:827
+msgid " (in "
+msgstr " (i "
+
+#: WWW/Library/Implementation/HTWAIS.c:836
+msgid "WAIS Search of \""
+msgstr "WAIS-søgning efter \""
+
+#: WWW/Library/Implementation/HTWAIS.c:840
+msgid "\" in: "
+msgstr "\" i: "
+
+#: WWW/Library/Implementation/HTWAIS.c:855
+msgid "HTWAIS: Request too large."
+msgstr "HTWAIS: Anmodning fylder for meget."
+
+#: WWW/Library/Implementation/HTWAIS.c:864
+msgid "Searching WAIS database..."
+msgstr "Søger i WAIS-database..."
+
+#: WWW/Library/Implementation/HTWAIS.c:874
+msgid "Search interrupted."
+msgstr "Søgning afbrudt."
+
+#: WWW/Library/Implementation/HTWAIS.c:924
+msgid "Can't convert format of WAIS document"
+msgstr "Kan ikke omdanne WAIS-dokumentets format"
+
+#: WWW/Library/Implementation/HTWAIS.c:968
+msgid "HTWAIS: Request too long."
+msgstr "HTWAIS: Anmodning for lang."
+
+#.
+#. ** Actually do the transaction given by request_message.
+#.
+#: WWW/Library/Implementation/HTWAIS.c:982
+msgid "Fetching WAIS document..."
+msgstr "Henter WAIS-dokument..."
+
+#. display_search_response(target, retrieval_response,
+#. wais_database, keywords);
+#: WWW/Library/Implementation/HTWAIS.c:1021
+msgid "No text was returned!\n"
+msgstr "Ingen tekst blev returneret!\n"
+
+#: WWW/Library/Implementation/HTWSRC.c:287
+msgid " NOT GIVEN in source file; "
+msgstr " IKKE GIVET i kildefil; "
+
+#: WWW/Library/Implementation/HTWSRC.c:311
+msgid " WAIS source file"
+msgstr "WAIS kildefil"
+
+#: WWW/Library/Implementation/HTWSRC.c:318
+msgid " description"
+msgstr " beskrivelse"
+
+#: WWW/Library/Implementation/HTWSRC.c:328
+msgid "Access links"
+msgstr "Adgangslinks"
+
+#: WWW/Library/Implementation/HTWSRC.c:345
+msgid "Direct access"
+msgstr "Direkte adgang"
+
+#. * Proxy will be used if defined, so let user know that - FM *
+#: WWW/Library/Implementation/HTWSRC.c:348
+msgid " (or via proxy server, if defined)"
+msgstr " (eller via proxy-server, hvis fastsat)"
+
+#: WWW/Library/Implementation/HTWSRC.c:363
+msgid "Maintainer"
+msgstr "Vedligeholder"
+
+#: WWW/Library/Implementation/HTWSRC.c:371
+msgid "Host"
+msgstr "Vært"
+
+#: src/GridText.c:607
+msgid "Memory exhausted, display interrupted!"
+msgstr "Hukommelse opbrugt, visning afbrudt!"
+
+#: src/GridText.c:612
+msgid "Memory exhausted, will interrupt transfer!"
+msgstr "Hukommelse opbrugt, vil afbryde overførsel!"
+
+#: src/GridText.c:3395
+msgid " *** MEMORY EXHAUSTED ***"
+msgstr "*** HUKOMMELSE OPBRUGT ***"
+
+#: src/GridText.c:5733 src/GridText.c:5740 src/LYList.c:258
+msgid "unknown field or link"
+msgstr "ukendt felt eller link"
+
+#: src/GridText.c:5749
+msgid "text entry field"
+msgstr "tekstindtastningsfelt"
+
+#: src/GridText.c:5752
+msgid "password entry field"
+msgstr "adgangskode-indtastningsfelt"
+
+#: src/GridText.c:5755
+msgid "checkbox"
+msgstr "afkrydsningsboks"
+
+#: src/GridText.c:5758
+msgid "radio button"
+msgstr "radioknap"
+
+#: src/GridText.c:5761
+msgid "submit button"
+msgstr "indsendelsesknap"
+
+#: src/GridText.c:5764
+msgid "reset button"
+msgstr "nulstillingsknap"
+
+#: src/GridText.c:5767
+msgid "popup menu"
+msgstr "pop up-menu"
+
+#: src/GridText.c:5770
+msgid "hidden form field"
+msgstr "skjult formularfelt"
+
+#: src/GridText.c:5773
+msgid "text entry area"
+msgstr "tekstindtastningsområde"
+
+#: src/GridText.c:5776
+msgid "range entry field"
+msgstr "interval-indtastningsfelt"
+
+#: src/GridText.c:5779
+msgid "file entry field"
+msgstr "filindtastningsfelt"
+
+#: src/GridText.c:5782
+msgid "text-submit field"
+msgstr "tekstindsendelsesfelt"
+
+#: src/GridText.c:5785
+msgid "image-submit button"
+msgstr "Billedindsendelsesknap"
+
+#: src/GridText.c:5788
+msgid "keygen field"
+msgstr "nøglegen-felt"
+
+#: src/GridText.c:5791
+msgid "unknown form field"
+msgstr "ukendt formularfelt"
+
+#. We can't open the file, what do we do?
+#: src/GridText.c:10348
+msgid "Can't open file for uploading"
+msgstr "Kan ikke åbne fil for uploadning"
+
+#. We got an error reading the file, what do we do?
+#: src/GridText.c:10359
+msgid "Short read from file, problem?"
+msgstr "Kort læsning fra fil, problem?"
+
+#: src/GridText.c:10721
+#, c-format
+msgid "Submitting %s"
+msgstr "Indsender %s"
+
+#. ugliness has happened; inform user and do the best we can
+#: src/GridText.c:11887
+msgid "Hang Detect: TextAnchor struct corrupted - suggest aborting!"
+msgstr "Program hænger: TextAnchor-struktur ødelagt - det er bedst at afbryde!"
+
+#. don't show previous state
+#: src/GridText.c:12092
+msgid "Wrap lines to fit displayed area?"
+msgstr "ombryd linjer for tilpasning til det viste område?"
+
+#: src/GridText.c:12144
+msgid "Very long lines have been wrapped!"
+msgstr "Meget lange linjer er blevet ombrudt!"
+
+#: src/GridText.c:12591
+msgid "Very long lines have been truncated!"
+msgstr "Meget lange linjer er blevet afkortet!"
+
+#: src/HTAlert.c:155 src/LYShowInfo.c:318
+msgid "bytes"
+msgstr "bytes"
+
+#: src/HTAlert.c:156
+msgid "KB"
+msgstr "Kb "
+
+#: src/HTAlert.c:255
+#, c-format
+msgid "Read %s of %s of data"
+msgstr "Læst %s af %s af data"
+
+#: src/HTAlert.c:257
+#, c-format
+msgid "Read %s of data"
+msgstr "Læst %s af data"
+
+#: src/HTAlert.c:262
+#, c-format
+msgid ", %s/sec"
+msgstr ", %s/sek"
+
+#: src/HTAlert.c:269
+#, c-format
+msgid " (stalled for %ld sec)"
+msgstr " (gået i stå i %ld sek)"
+
+#: src/HTAlert.c:271
+#, c-format
+msgid ", ETA %ld sec"
+msgstr ", ETA %ld sek"
+
+#: src/HTAlert.c:277
+msgid " (Press 'z' to abort)"
+msgstr " (Tast 'z' for at afbryde)"
+
+#. Meta-note: don't move the following note from its place right
+#. in front of the first gettext(). As it is now, it should
+#. automatically appear in generated lynx.pot files. - kw
+#.
+#. NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+#. * will take the first byte of the translation as a positive response
+#. * to Yes/No questions. If you provide a translation for "no", lynx
+#. * will take the first byte of the translation as a negative response
+#. * to Yes/No questions. For both, lynx will also try to show the
+#. * first byte in the prompt as a character, instead of (y) or (n),
+#. * respectively. This will not work right for multibyte charsets!
+#. * Don't translate "yes" and "no" for CJK character sets (or translate
+#. * them to "yes" and "no"). For a translation using UTF-8, don't
+#. * translate if the translation would begin with anything but a 7-bit
+#. * (US_ASCII) character. That also means do not translate if the
+#. * translation would begin with anything but a 7-bit character, if
+#. * you use a single-byte character encoding (a charset like ISO-8859-n)
+#. * but anticipate that the message catalog may be used re-encoded in
+#. * UTF-8 form.
+#. * For translations using other character sets, you may also wish to
+#. * leave "yes" and "no" untranslated, if using (y) and (n) is the
+#. * preferred behavior.
+#. * Lynx will also accept y Y n N as responses unless there is a conflict
+#. * with the first letter of the "yes" or "no" translation.
+#.
+#: src/HTAlert.c:334
+msgid "yes"
+msgstr "ja"
+
+#: src/HTAlert.c:335
+msgid "no"
+msgstr "nej"
+
+#: src/HTML.c:6342
+msgid "Description:"
+msgstr "Beskrivelse:"
+
+#: src/HTML.c:6347
+msgid "(none)"
+msgstr "(ingen)"
+
+#: src/HTML.c:6351
+msgid "Filepath:"
+msgstr "Filsti:"
+
+#: src/HTML.c:6356
+msgid "(unknown)"
+msgstr "(ukendt)"
+
+#: src/HTML.c:7804
+msgid "Document has only hidden links. Use the 'l'ist command."
+msgstr "Dokument har kun skjulte links. Brug 'l'istnings-kommandoen."
+
+#: src/HTML.c:8328
+msgid "Source cache error - disk full?"
+msgstr "Cache-fejl - diskplads opbrugt?"
+
+#: src/HTML.c:8341
+msgid "Source cache error - not enough memory!"
+msgstr "Cache-fejl - ikke nok hukommelse!"
+
+#: src/LYBookmark.c:166
+msgid ""
+" This file is an HTML representation of the X Mosaic hotlist file.\n"
+" Outdated or invalid links may be removed by using the\n"
+" remove bookmark command, it is usually the 'R' key but may have\n"
+" been remapped by you or your system administrator."
+msgstr ""
+" Denne fil er en html-udgave af X Mosaics bogmærkefil.\n"
+" Gamle eller ugyldige links kan fjernes ved brug af\n"
+" fjern-bogmærke-kommandoen, det er normalt 'R'-tasten, men kan have\n"
+" fået en anden tildeling af din systemadministrator."
+
+#: src/LYBookmark.c:382
+msgid ""
+" You can delete links by the 'R' key<br>\n"
+"<ol>\n"
+msgstr ""
+" Du kan slette links med 'R'-tasten<br>\n"
+"<ol>\n"
+
+#: src/LYBookmark.c:385
+msgid ""
+" You can delete links using the remove bookmark command. It is usually\n"
+" the 'R' key but may have been remapped by you or your system\n"
+" administrator."
+msgstr ""
+" Du kan slette links ved brug af fjern-bogmærke-kommandoen. Det er normalt\n"
+" 'R'-tasten, men kan have fået en anden tildeling af din systemadministrator"
+
+#: src/LYBookmark.c:389
+msgid ""
+" This file also may be edited with a standard text editor to delete\n"
+" outdated or invalid links, or to change their order."
+msgstr ""
+" Denne fil kan også redigeres med et standard tekstredigeringsværktøj for\n"
+" at slette gamle eller ugyldige links, eller for at ændre deres rækkefølge."
+
+#: src/LYBookmark.c:392
+msgid ""
+"Note: if you edit this file manually\n"
+" you should not change the format within the lines\n"
+" or add other HTML markup.\n"
+" Make sure any bookmark link is saved as a single line."
+msgstr ""
+"Bemærk: Hvis du redigerer denne fil manuelt,\n"
+" bør du ikke ændre linjeformatet\n"
+" eller tilføje anden html-kode.\n"
+" Sørg for, at ethvert bogmærke er gemt på en enkelt linje."
+
+#: src/LYBookmark.c:683
+#, c-format
+msgid "File may be recoverable from %s during this session"
+msgstr "Fil kan måske genskabes fra %s under denne session"
+
+#.
+#. * Neither the path as given nor any components examined by
+#. * backing up were stat()able. - kw
+#.
+#: src/LYCgi.c:232
+msgid "Unable to access cgi script"
+msgstr "Kan ikke få adgang til cgi-script"
+
+#: src/LYCgi.c:651 src/LYCgi.c:654
+msgid "Good Advice"
+msgstr "Godt råd"
+
+#: src/LYCgi.c:657
+msgid "An excellent http server for VMS is available via"
+msgstr "En fortrinlig http-server for VMS kan findes via"
+
+#: src/LYCgi.c:664
+msgid "this link"
+msgstr "dette link"
+
+#: src/LYCgi.c:668
+msgid "It provides state of the art CGI script support.\n"
+msgstr "Den tilbyder upåklagelig understøttelse af CGI-scripts\n"
+
+#: src/LYClean.c:108
+msgid "Exiting via interrupt:"
+msgstr "Afslutter via \"interrupt\":"
+
+#: src/LYCookie.c:2659
+msgid "(from a previous session)"
+msgstr "(fra en foregående session)"
+
+#: src/LYCookie.c:2719
+msgid "Maximum Gobble Date:"
+msgstr "Udløbsdato for cookie:"
+
+#: src/LYCookie.c:2764
+msgid "Internal"
+msgstr "Intern"
+
+#: src/LYCookie.c:2765
+msgid "cookie_domain_flag_set error, aborting program"
+msgstr "'cookie_domain_set_flag'-fejl, afbryder program"
+
+#: src/LYCurses.c:936
+msgid "Terminal initialisation failed - unknown terminal type?"
+msgstr "Klargøring af terminal slog fejl - ukendt terminaltype?"
+
+#: src/LYCurses.c:1328
+msgid "Terminal ="
+msgstr "Terminal ="
+
+#: src/LYCurses.c:1332
+msgid "You must use a vt100, 200, etc. terminal with this program."
+msgstr "Du skal bruge en vt100, 200, etc. terminal med dette program."
+
+#: src/LYCurses.c:1384
+msgid "Your Terminal type is unknown!"
+msgstr "Din terminaltype er ukendt!"
+
+#: src/LYCurses.c:1385
+msgid "Enter a terminal type:"
+msgstr "Anfør en terminaltype:"
+
+#: src/LYCurses.c:1398
+msgid "TERMINAL TYPE IS SET TO"
+msgstr "TERMINAL-TYPE SAT TIL"
+
+#: src/LYCurses.c:1749
+#, c-format
+msgid ""
+"\n"
+"A Fatal error has occurred in %s Ver. %s\n"
+msgstr ""
+"\n"
+"En kritisk fejl opstod i %s Ver. %s\n"
+
+#: src/LYCurses.c:1751
+msgid ""
+"\n"
+"Please notify your system administrator to confirm a bug, and if\n"
+"confirmed, to notify the lynx-dev list. Bug reports should have concise\n"
+"descriptions of the command and/or URL which causes the problem, the\n"
+"operating system name with version number, the TCPIP implementation, the\n"
+"TRACEBACK if it can be captured, and any other relevant information.\n"
+msgstr ""
+"\n"
+"Underret venligst din systemadministrator for at få bekræftet en programfejl, \n"
+"og hvis den bekræftes, underret da lynx-dev-listen. Rapporter om programfejl\n"
+"bør indeholde en koncis beskrivelse af den kommando og/eller URL som forårsagede\n"
+"problemet, styresystemets navn og versionsnummer, TCP/IP-implementeringen, en\n"
+"\"TRACEBACK\", hvis den kan fanges og enhver anden relevant information.\n"
+
+#: src/LYEdit.c:264
+msgid "Editor killed by signal"
+msgstr "Editor dræbt ved signal"
+
+#: src/LYEdit.c:266
+#, c-format
+msgid "Editor returned with error status, %s"
+msgstr "Editor vendte tilbage med fejlstatus, %s"
+
+#: src/LYEdit.c:267
+msgid "reason unknown."
+msgstr "ukendt årsag."
+
+#: src/LYDownload.c:520
+msgid "Downloaded link:"
+msgstr "hentet link:"
+
+#: src/LYDownload.c:525
+msgid "Suggested file name:"
+msgstr "Foreslået filnavn:"
+
+#: src/LYDownload.c:530
+msgid "Standard download options:"
+msgstr "Standard valgmuligheder ved hentning af filer:"
+
+#: src/LYDownload.c:531
+msgid "Download options:"
+msgstr "Valgmuligheder for hentning af filer:"
+
+#: src/LYDownload.c:545
+msgid "Save to disk"
+msgstr "Gem på disk"
+
+#: src/LYDownload.c:547
+msgid "Save to disk disabled."
+msgstr "Gemning på disk slået fra."
+
+#: src/LYDownload.c:551 src/LYPrint.c:1338
+msgid "Local additions:"
+msgstr "Egne tilføjelser:"
+
+#: src/LYDownload.c:560 src/LYUpload.c:224
+msgid "No Name Given"
+msgstr "Intet navn givet"
+
+#: src/LYHistory.c:633
+msgid "You selected:"
+msgstr "Du valgte:"
+
+#: src/LYHistory.c:657 src/LYHistory.c:905
+msgid "(no address)"
+msgstr "(ingen adresse)"
+
+#: src/LYHistory.c:661
+msgid " (internal)"
+msgstr "(intern)"
+
+#: src/LYHistory.c:663
+msgid " (was internal)"
+msgstr " (var intern)"
+
+#: src/LYHistory.c:761
+msgid " (From History)"
+msgstr " (Fra historik)"
+
+#: src/LYHistory.c:825
+msgid "You visited (POSTs, bookmark, menu and list files excluded):"
+msgstr "Du besøgte ('POSTs', bogmærker, menu og listefiler undtaget):"
+
+#: src/LYHistory.c:1124
+msgid "(No messages yet)"
+msgstr "(Ingen meddelelser endnu)"
+
+#: src/LYLeaks.c:78
+msgid "Invalid pointer detected."
+msgstr "Ugyldig peger opdaget."
+
+#: src/LYLeaks.c:80 src/LYLeaks.c:117
+msgid "Pointer:"
+msgstr "Peger:"
+
+#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:136
+msgid "FileName:"
+msgstr "FilNavn:"
+
+#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:139 src/LYLeaks.c:150
+msgid "LineCount:"
+msgstr "LinjeAntal:"
+
+#: src/LYLeaks.c:115
+msgid "Memory leak detected."
+msgstr "Hukommelsesudsivning opdaget."
+
+#: src/LYLeaks.c:120
+msgid "Contains:"
+msgstr "Indeholder:"
+
+#: src/LYLeaks.c:133
+msgid "ByteSize:"
+msgstr "ByteStr.:"
+
+#: src/LYLeaks.c:147
+msgid "realloced:"
+msgstr "gentildelt:"
+
+#: src/LYLeaks.c:170
+msgid "Total memory leakage this run:"
+msgstr "Total hukommelsesudsivning denne gang:"
+
+#: src/LYList.c:91
+msgid "References in "
+msgstr "Referencer i "
+
+#: src/LYList.c:92
+msgid "this document:"
+msgstr "dette dokument:"
+
+#: src/LYList.c:98
+msgid "Visible links:"
+msgstr "Synlige links:"
+
+#: src/LYList.c:199 src/LYList.c:319
+msgid "Hidden links:"
+msgstr "Skjulte links:"
+
+#: src/LYList.c:267
+msgid "References"
+msgstr "Henvisninger"
+
+#: src/LYList.c:269
+msgid "Visible links"
+msgstr "Synlige links"
+
+#: src/LYLocal.c:267
+#, c-format
+msgid "Unable to get status of '%s'."
+msgstr "Ude af stand til af skaffe status på '%s'."
+
+#: src/LYLocal.c:301
+msgid "The selected item is not a file or a directory! Request ignored."
+msgstr "Valgte enhed er ikke en fil eller et filkatalog! Anmodning ignoreret."
+
+#: src/LYLocal.c:383
+#, c-format
+msgid "Unable to %s due to system error!"
+msgstr "Kan ikke %s pga. systemfejl!"
+
+#. error return
+#: src/LYLocal.c:415
+#, c-format
+msgid "Probable failure to %s due to system error!"
+msgstr "Sandsynlig fejl for %s skyldes en systemfejl!"
+
+#: src/LYLocal.c:453
+#, c-format
+msgid "move %s to %s"
+msgstr "flyt %s til %s"
+
+#: src/LYLocal.c:475
+msgid "There is already a directory with that name! Request ignored."
+msgstr "Der er allerede et filkatalog med dette navn! Anmodning ignoreret."
+
+#: src/LYLocal.c:477
+msgid "There is already a file with that name! Request ignored."
+msgstr "Der er allerede en fil med dette navn! Anmodning ignoreret."
+
+#: src/LYLocal.c:479
+msgid "The specified name is already in use! Request ignored."
+msgstr "Det anførte navn er allerede i brug! Anmodning ignoreret."
+
+#: src/LYLocal.c:490
+msgid "Destination has different owner! Request denied."
+msgstr "Destination har en anden ejer! Anmodning nægtet."
+
+#: src/LYLocal.c:493
+msgid "Destination is not a valid directory! Request denied."
+msgstr "Destination er ikke et gyldigt filkatalog! Anmodning afslået."
+
+#: src/LYLocal.c:516
+msgid "Remove all tagged files and directories?"
+msgstr "Fjern alle markerede filer og filkataloger?"
+
+#: src/LYLocal.c:537
+#, c-format
+msgid "remove %s"
+msgstr "fjern %s"
+
+#: src/LYLocal.c:580
+msgid "Enter new location for tagged items: "
+msgstr "Anfør et nyt bestemmelsessted for de markerede enheder: "
+
+#: src/LYLocal.c:649
+msgid "Path too long"
+msgstr "Sti for lang"
+
+#: src/LYLocal.c:680
+msgid "Source and destination are the same location - request ignored!"
+msgstr "Kilde og mål er på samme sted - anmodning ignoreret!"
+
+#: src/LYLocal.c:738
+msgid "Enter new name for directory: "
+msgstr "Indtast nyt navn på filkatalog: "
+
+#: src/LYLocal.c:740
+msgid "Enter new name for file: "
+msgstr "Indtast et nyt navn på fil: "
+
+#: src/LYLocal.c:751
+msgid "Illegal character (path-separator) found! Request ignored."
+msgstr "Ugyldigt tegn (sti-adskillelsestegn) fundet! Anmodning ignoreret."
+
+#: src/LYLocal.c:800
+msgid "Enter new location for directory: "
+msgstr "Anfør et nyt opbevaringssted for filkatalog: "
+
+#: src/LYLocal.c:802
+msgid "Enter new location for file: "
+msgstr "Anfør et nyt opbevaringssted for fil: "
+
+#: src/LYLocal.c:827
+msgid "Unexpected failure - unable to find trailing path separator"
+msgstr "Uventet fejl - ude af stand til at finde sti-adskillelsestegn"
+
+#: src/LYLocal.c:847
+msgid "Source and destination are the same location! Request ignored!"
+msgstr "Kilde og mål er på samme sted! Anmodning ignoreret!"
+
+#: src/LYLocal.c:894
+msgid "Modify name, location, or permission (n, l, or p): "
+msgstr "Ret n=navn, l=sted eller p=tilladelse: "
+
+#: src/LYLocal.c:896
+msgid "Modify name or location (n or l): "
+msgstr "Ret n=navn eller l=sted: "
+
+#.
+#. * Code for changing ownership needed here.
+#.
+#: src/LYLocal.c:925
+msgid "This feature not yet implemented!"
+msgstr "Denne funktionalitet er endnu ikke indarbejdet!"
+
+#: src/LYLocal.c:943
+msgid "Enter name of file to create: "
+msgstr "Anfør navn på den fil som skal oprettes: "
+
+#: src/LYLocal.c:951 src/LYLocal.c:999
+msgid "Illegal redirection \"//\" found! Request ignored."
+msgstr "Ugyldig omdirigering \"//\" fundet! Anmodning ignoreret."
+
+#: src/LYLocal.c:966
+#, c-format
+msgid "create %s"
+msgstr "opret %s"
+
+#: src/LYLocal.c:991
+msgid "Enter name for new directory: "
+msgstr "Anfør navn på nyt filkatalog: "
+
+#: src/LYLocal.c:1042
+msgid "Create file or directory (f or d): "
+msgstr "Opret f=fil eller d=filkatalog: "
+
+#: src/LYLocal.c:1083
+#, c-format
+msgid "Remove '%s' and all of its contents?"
+msgstr "Fjern '%s' og hele dets indhold?"
+
+#: src/LYLocal.c:1086
+msgid "Remove directory and all of its contents?"
+msgstr "Fjern filkatalog og hele dets indhold?"
+
+#: src/LYLocal.c:1090
+#, c-format
+msgid "Remove file '%s'?"
+msgstr "Fjern fil '%s'?"
+
+#: src/LYLocal.c:1092
+msgid "Remove file?"
+msgstr "Fjern fil?"
+
+#: src/LYLocal.c:1097
+#, c-format
+msgid "Remove symbolic link '%s'?"
+msgstr "Fjern symbolsk link '%s'?"
+
+#: src/LYLocal.c:1099
+msgid "Remove symbolic link?"
+msgstr "Fjern symbolsk link"
+
+#: src/LYLocal.c:1190
+msgid "Sorry, don't know how to permit non-UNIX files yet."
+msgstr "Beklager, kan endnu ikke tillade ikke-UNIX-filer."
+
+#: src/LYLocal.c:1220
+msgid "Unable to open permit options file"
+msgstr "Ude af stand til at åbne fil med indstillinger for tilladelser."
+
+#: src/LYLocal.c:1247
+msgid "Specify permissions below:"
+msgstr "Anfør tilladelser nedenfor:"
+
+#: src/LYLocal.c:1248 src/LYShowInfo.c:196
+msgid "Owner:"
+msgstr "Ejer:"
+
+#: src/LYLocal.c:1264
+msgid "Group"
+msgstr "Gruppe"
+
+#: src/LYLocal.c:1280
+msgid "Others:"
+msgstr "Andre:"
+
+#: src/LYLocal.c:1298
+msgid "form to permit"
+msgstr "formular som skal tillades"
+
+#: src/LYLocal.c:1396
+msgid "Invalid mode format."
+msgstr "Ugyldigt tilstandsformat."
+
+#: src/LYLocal.c:1400
+msgid "Invalid syntax format."
+msgstr "Ugyldigt syntaksformat."
+
+#: src/LYLocal.c:1575
+msgid "NULL URL pointer"
+msgstr "NULL url-peger"
+
+#: src/LYLocal.c:1670
+msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
+msgstr "Advarsel! UUDecodet fil lægges i filkatalog, hvor du startede Lynx."
+
+#: src/LYLocal.c:1782
+#, c-format
+msgid "Executing %s "
+msgstr "Udfører %s "
+
+#: src/LYLocal.c:1785
+msgid "Executing system command. This might take a while."
+msgstr "Udfører systemkommando. Dette kan tage et øjeblik."
+
+#: src/LYLocal.c:1831
+msgid "Unable to open file management menu file."
+msgstr "Ude af stand til at åbne filhåndterings-menufil."
+
+#: src/LYLocal.c:1862
+msgid "Current directory:"
+msgstr "Aktuelle filkatalog:"
+
+#: src/LYLocal.c:1865 src/LYLocal.c:1883
+msgid "Current selection:"
+msgstr "Aktuelle valg:"
+
+#: src/LYLocal.c:1869
+msgid "Nothing currently selected."
+msgstr "Intet er aktuelt udvalgt."
+
+#: src/LYLocal.c:1884
+msgid "tagged item:"
+msgstr "markeret enhed:"
+
+#: src/LYLocal.c:1884
+msgid "tagged items:"
+msgstr "markerede enheder:"
+
+#: src/LYLocal.c:1983 src/LYLocal.c:1994
+msgid "Illegal filename; request ignored."
+msgstr "Ugyldigt filnavn: Anmodning ignoreret."
+
+#: src/LYLocal.c:2137
+msgid "The selected item is not a directory! Request ignored."
+msgstr "Den markerede enhed er ikke et filkatalog! Anmodning ignoreret."
+
+#. directory not writable
+#: src/LYLocal.c:2141
+msgid "Install in the selected directory not permitted."
+msgstr "Installering i det valgte filkatalog er ikke tilladt."
+
+#: src/LYLocal.c:2146
+msgid "Just a moment, ..."
+msgstr "Lige et øjeblik, ..."
+
+#: src/LYLocal.c:2163
+msgid "Error buiding install args"
+msgstr "Kunne ikke lave installeringsparametre"
+
+#: src/LYLocal.c:2178 src/LYLocal.c:2210
+#, c-format
+msgid "Source and target are the same: %s"
+msgstr "Kilde og mål er det samme: %s"
+
+#: src/LYLocal.c:2188 src/LYLocal.c:2220
+#, c-format
+msgid "Already in target directory: %s"
+msgstr "Står allerede i mål-kataloget: %s"
+
+#: src/LYLocal.c:2238
+msgid "Installation complete"
+msgstr "Installering fuldført"
+
+#: src/LYLocal.c:2427
+msgid "Temporary URL or list would be too long."
+msgstr "Midlertidig url eller listen ville blive for lang."
+
+#: src/LYMail.c:503
+msgid "Sending"
+msgstr "Sender"
+
+#: src/LYMail.c:989
+#, c-format
+msgid "The link %s :?: %s \n"
+msgstr "Linket %s :?: %s \n"
+
+#: src/LYMail.c:991
+#, c-format
+msgid "called \"%s\"\n"
+msgstr "ved navn \"%s\"\n"
+
+#: src/LYMail.c:992
+#, c-format
+msgid "in the file \"%s\" called \"%s\"\n"
+msgstr "i filen \"%s\" ved navn \"%s\"\n"
+
+#: src/LYMail.c:993
+msgid "was requested but was not available."
+msgstr "blev der anmodet om, men den var ikke tilgængelig."
+
+#: src/LYMail.c:994
+msgid "Thought you might want to know."
+msgstr "Du ville sikkert gerne vide dette."
+
+#: src/LYMail.c:996
+msgid "This message was automatically generated by"
+msgstr "Denne meddelelse blev automatisk skabt af"
+
+#: src/LYMain.c:897
+msgid "No Winsock found, sorry."
+msgstr "Ingen \"Winsocket\" fundet, beklager."
+
+#: src/LYMain.c:1103
+msgid "You MUST define a valid TMP or TEMP area!\n"
+msgstr "Du SKAL definere et gyldigt TMP eller TEMP-område!\n"
+
+#: src/LYMain.c:1156 src/LYMainLoop.c:5117
+msgid "No such directory"
+msgstr "Intet sådant filkatalog"
+
+#: src/LYMain.c:1378
+#, c-format
+msgid ""
+"\n"
+"Configuration file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Opsætningsfil %s er ikke tilgængelig.\n"
+
+#: src/LYMain.c:1388
+msgid ""
+"\n"
+"Lynx character sets not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx tegnsæt er ikke angivet.\n"
+
+#: src/LYMain.c:1417
+msgid ""
+"\n"
+"Lynx edit map not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx \"edit map\" er ikke angivet.\n"
+
+#: src/LYMain.c:1446
+#, c-format
+msgid ""
+"\n"
+"Lynx file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx-fil %s er ikke tilgængelig.\n"
+
+#: src/LYMain.c:1704
+msgid "Warning:"
+msgstr "Advarsel:"
+
+#: src/LYMain.c:2247
+msgid "persistent cookies state will be changed in next session only."
+msgstr "Ændring for vedvarende cookier vil kun gælde næste session. "
+
+#: src/LYMain.c:2477 src/LYMain.c:2525
+#, c-format
+msgid "Lynx: ignoring unrecognized charset=%s\n"
+msgstr "Lynx: Ignorerer ikke-anerkendt tegnsæt=%s\n"
+
+#: src/LYMain.c:3047
+#, c-format
+msgid "%s Version %s (%s)\n"
+msgstr "%s Version %s (%s)\n"
+
+#: src/LYMain.c:3072
+#, c-format
+msgid "Built on %s %s %s\n"
+msgstr "Bygget på %s %s %s\n"
+
+#: src/LYMain.c:3077
+msgid "Copyrights held by the University of Kansas, CERN, and other contributors.\n"
+msgstr "Ophavsret indehaves af University of Kansas, CERN og andre bidragydere.\n"
+
+#: src/LYMain.c:3079
+msgid "Distributed under the GNU General Public License.\n"
+msgstr "Distribueret under GNU General Public License.\n"
+
+#: src/LYMain.c:3081
+msgid ""
+"See http://lynx.browser.org/ and the online help for more information.\n"
+"\n"
+msgstr ""
+"Se http://lynx.browser.org/ og online-hjælpen for flere oplysninger.\n"
+"\n"
+
+#: src/LYMain.c:3800
+#, c-format
+msgid "USAGE: %s [options] [file]\n"
+msgstr "BRUG: %s [valgmuligheder] [fil]\n"
+
+#: src/LYMain.c:3801
+msgid "Options are:\n"
+msgstr "Valgmuligheder er:\n"
+
+#: src/LYMain.c:4060
+#, c-format
+msgid "%s: Invalid Option: %s\n"
+msgstr "%s: Ugyldig indstilling: %s\n"
+
+#: src/LYMainLoop.c:512
+#, c-format
+msgid "Internal error: Invalid mouse link %d!"
+msgstr "Intern fejl: Ugyldigt muse-link %d!"
+
+#.
+#. * Make a name for this new URL.
+#.
+#: src/LYMainLoop.c:625 src/LYMainLoop.c:5139
+msgid "A URL specified by the user"
+msgstr "En URL angivet af brugeren"
+
+#: src/LYMainLoop.c:1114
+msgid "Enctype multipart/form-data not yet supported! Cannot submit."
+msgstr "Indkodn. \"multipart/form-data\" virker endnu ikke! Kan ikke indsende."
+
+#.
+#. * Make a name for this help file.
+#.
+#: src/LYMainLoop.c:3097
+msgid "Help Screen"
+msgstr "Hjælpeskærm"
+
+#: src/LYMainLoop.c:3231
+msgid "System Index"
+msgstr "Systemfortegnelse"
+
+#: src/LYMainLoop.c:3611 src/LYMainLoop.c:5347
+msgid "Entry into main screen"
+msgstr "Indgang til hovedskærm"
+
+#: src/LYMainLoop.c:3897
+msgid "No next document present"
+msgstr "Intet \"næste dokument\" indlæst"
+
+#: src/LYMainLoop.c:4206
+msgid "charset for this document specified explicitly, sorry..."
+msgstr "dette dokuments tegnsæt er udtrykkeligt angivet, beklager..."
+
+#: src/LYMainLoop.c:5093
+msgid "cd to:"
+msgstr "cd til:"
+
+#: src/LYMainLoop.c:5120
+msgid "A component of path is not a directory"
+msgstr "En del af stien er ikke et filkatalog"
+
+#: src/LYMainLoop.c:5123
+msgid "failed to change directory"
+msgstr "Kunne ikke skifte filkatalog."
+
+#: src/LYMainLoop.c:6291
+msgid "Reparsing document under current settings..."
+msgstr "Genanalyserer dokument under aktuelle indstillinger..."
+
+#: src/LYMainLoop.c:6579 src/LYMainLoop.c:6583
+#, c-format
+msgid "Fatal error - could not open output file %s\n"
+msgstr "Kritisk fejl - kunne ikke åbne uddata-fil %s\n"
+
+#: src/LYMainLoop.c:7719 src/LYMainLoop.c:7892
+msgid "-index-"
+msgstr "-indeks-"
+
+#: src/LYMainLoop.c:7829
+msgid "lynx: Can't access startfile"
+msgstr "lynx: Kan ikke få adgang til startfil"
+
+#: src/LYMainLoop.c:7842
+msgid "lynx: Start file could not be found or is not text/html or text/plain"
+msgstr "lynx: startfil forefandtes ikke el. er ikke i format text/html el. text/plain"
+
+#: src/LYMainLoop.c:7843
+msgid " Exiting..."
+msgstr " Afslutter..."
+
+#: src/LYMainLoop.c:7886
+msgid "-more-"
+msgstr "-mere-"
+
+#. Enable scrolling.
+#: src/LYNews.c:203
+msgid "You will be posting to:"
+msgstr "Du vil poste til:"
+
+#.
+#. * Get the mail address for the From header,
+#. * offering personal_mail_address as default.
+#.
+#: src/LYNews.c:212
+msgid ""
+"\n"
+"\n"
+" Please provide your mail address for the From: header\n"
+msgstr ""
+"\n"
+"\n"
+" Giv venligst din postadresse fra From: header'en\n"
+
+#.
+#. * Get the Subject header, offering the current
+#. * document's title as the default if this is a
+#. * followup rather than a new post. - FM
+#.
+#: src/LYNews.c:230
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Subject: header\n"
+msgstr ""
+"\n"
+"\n"
+" Indtast eller ret venligst emnelinjen\n"
+
+#: src/LYNews.c:322
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Organization: header\n"
+msgstr ""
+"\n"
+"\n"
+"Indtast eller ret venligst Organization:-linjen\n"
+
+#.
+#. * Use the built in line editior.
+#.
+#: src/LYNews.c:379
+msgid ""
+"\n"
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+"\n"
+"Skriv dit brev nedenfor."
+
+#: src/LYNews.c:425
+msgid "Message has no original text!"
+msgstr "Brev har ingen oprindelig tekst!"
+
+#: src/LYOptions.c:743
+msgid "review/edit B)ookmarks files"
+msgstr "gennemse/rediger B)ogmærkefiler"
+
+#: src/LYOptions.c:745
+msgid "B)ookmark file: "
+msgstr "B)ogmærke-fil: "
+
+#: src/LYOptions.c:2507 src/LYOptions.c:2531
+#, c-format
+msgid "Use %s to invoke the Options menu!"
+msgstr "Brug %s for at aktivere menu over valgmuligheder!"
+
+#: src/LYOptions.c:3208
+msgid "General Preferences"
+msgstr "Generelle indstillinger"
+
+#. ***************************************************************
+#. User Mode: SELECT
+#: src/LYOptions.c:3212
+msgid "User mode"
+msgstr "Bruger-tilstand"
+
+#. Editor: INPUT
+#: src/LYOptions.c:3218
+msgid "Editor"
+msgstr "Editor"
+
+#. Search Type: SELECT
+#: src/LYOptions.c:3223
+msgid "Type of Search"
+msgstr "Søgningstype"
+
+#. Cookies: SELECT
+#: src/LYOptions.c:3229
+msgid "Cookies"
+msgstr "Cookier"
+
+#: src/LYOptions.c:3243
+msgid "Keyboard Input"
+msgstr "Tastaturindstillinger"
+
+#. ***************************************************************
+#. Keypad Mode: SELECT
+#: src/LYOptions.c:3247
+msgid "Keypad mode"
+msgstr "Numerisk tastatur-modus"
+
+#. Emacs keys: ON/OFF
+#: src/LYOptions.c:3253
+msgid "Emacs keys"
+msgstr "Emacs-taster"
+
+#. VI Keys: ON/OFF
+#: src/LYOptions.c:3259
+msgid "VI keys"
+msgstr "VI-taster"
+
+#. Line edit style: SELECT
+#. well, at least 2 line edit styles available
+#: src/LYOptions.c:3266
+msgid "Line edit style"
+msgstr "Linjeredigeringsstil"
+
+#. Keyboard layout: SELECT
+#: src/LYOptions.c:3278
+msgid "Keyboard layout"
+msgstr "Tastatur-layout"
+
+#.
+#. * Display and Character Set
+#.
+#: src/LYOptions.c:3291
+msgid "Display and Character Set"
+msgstr "Skærm og tegnsæt"
+
+#. ***************************************************************
+#. Display Character Set: SELECT
+#: src/LYOptions.c:3295
+msgid "Display character set"
+msgstr "Skærm-tegnsæt"
+
+#: src/LYOptions.c:3324
+msgid "Assumed document character set"
+msgstr "Formodet dokument-tegnsæt"
+
+#.
+#. * Since CJK people hardly mixed with other world
+#. * we split the header to make it more readable:
+#. * "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
+#.
+#: src/LYOptions.c:3344
+msgid "CJK mode"
+msgstr "CJK-tilstand"
+
+#: src/LYOptions.c:3346
+msgid "Raw 8-bit"
+msgstr "Rå 8-bit"
+
+#. X Display: INPUT
+#: src/LYOptions.c:3354
+msgid "X Display"
+msgstr "X-skærm"
+
+#.
+#. * Document Appearance
+#.
+#: src/LYOptions.c:3360
+msgid "Document Appearance"
+msgstr "Dokument-udseende"
+
+#: src/LYOptions.c:3366
+msgid "Show color"
+msgstr "Vis farver"
+
+#. Show cursor: ON/OFF
+#: src/LYOptions.c:3390
+msgid "Show cursor"
+msgstr "Vis markør"
+
+#. Select Popups: ON/OFF
+#: src/LYOptions.c:3396
+msgid "Popups for select fields"
+msgstr "Pop op-vinduer for valgte felter"
+
+#. HTML error recovery: SELECT
+#: src/LYOptions.c:3403
+msgid "HTML error recovery"
+msgstr "HTML fejlgenopretning"
+
+#. Show Images: SELECT
+#: src/LYOptions.c:3410
+msgid "Show images"
+msgstr "Vis billeder"
+
+#. Verbose Images: ON/OFF
+#: src/LYOptions.c:3424
+msgid "Verbose images"
+msgstr "Billedtekst"
+
+#.
+#. * Headers Transferred to Remote Servers
+#.
+#: src/LYOptions.c:3432
+msgid "Headers Transferred to Remote Servers"
+msgstr "Information til fremmede servere"
+
+#. ***************************************************************
+#. Mail Address: INPUT
+#: src/LYOptions.c:3436
+msgid "Personal mail address"
+msgstr "Personlig postadresse"
+
+#. Preferred Document Character Set: INPUT
+#: src/LYOptions.c:3441
+msgid "Preferred document character set"
+msgstr "Foretrukket dokument-tegnsæt"
+
+#. Preferred Document Language: INPUT
+#: src/LYOptions.c:3446
+msgid "Preferred document language"
+msgstr "Foretrukket dokumentsprog"
+
+#: src/LYOptions.c:3452
+msgid "User-Agent header"
+msgstr "'User-Agent'-linje"
+
+#.
+#. * Listing and Accessing Files
+#.
+#: src/LYOptions.c:3460
+msgid "Listing and Accessing Files"
+msgstr "Filoversigt og Filadgang"
+
+#. ***************************************************************
+#. FTP sort: SELECT
+#: src/LYOptions.c:3464
+msgid "FTP sort criteria"
+msgstr "FTP sorteringskriterie"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3471
+msgid "Local directory sort criteria"
+msgstr "Sortering af lokale filkataloger"
+
+#: src/LYOptions.c:3479
+msgid "Show dot files"
+msgstr "Vis punktumfiler"
+
+#: src/LYOptions.c:3487
+msgid "Execution links"
+msgstr "(program-)udførelseslinks"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3507
+msgid "Show transfer rate"
+msgstr "Vis overførselshastighed"
+
+#.
+#. * Special Files and Screens
+#.
+#: src/LYOptions.c:3516
+msgid "Special Files and Screens"
+msgstr "Særlige filer og skærme"
+
+#: src/LYOptions.c:3521
+msgid "Multi-bookmarks"
+msgstr "Multi-bogmærker"
+
+#: src/LYOptions.c:3529
+msgid "Review/edit Bookmarks files"
+msgstr "Gennemse/ret bogmærkefiler"
+
+#: src/LYOptions.c:3531
+msgid "Goto multi-bookmark menu"
+msgstr "Gå til multi-bogmærkemenu"
+
+#: src/LYOptions.c:3533
+msgid "Bookmarks file"
+msgstr "Bogmærkefil"
+
+#. Visited Pages: SELECT
+#: src/LYOptions.c:3539
+msgid "Visited Pages"
+msgstr "Besøgte sider"
+
+#: src/LYPrint.c:959
+msgid " Print job complete.\n"
+msgstr "Udskrivningsjob fuldført.\n"
+
+#: src/LYPrint.c:1296
+msgid "Document:"
+msgstr "Dokument:"
+
+#: src/LYPrint.c:1297
+msgid "Number of lines:"
+msgstr "Antal linjer:"
+
+#: src/LYPrint.c:1298
+msgid "Number of pages:"
+msgstr "Antal sider:"
+
+#: src/LYPrint.c:1299
+msgid "pages"
+msgstr "sider"
+
+#: src/LYPrint.c:1299
+msgid "page"
+msgstr "side"
+
+#: src/LYPrint.c:1300
+msgid "(approximately)"
+msgstr "(cirka)"
+
+#: src/LYPrint.c:1305
+msgid "Some print functions have been disabled!"
+msgstr "Visse udskrivningsfunktioner er slået fra!"
+
+#: src/LYPrint.c:1309
+msgid "Standard print options:"
+msgstr "Standard valgmuligheder for udskrivning:"
+
+#: src/LYPrint.c:1310
+msgid "Print options:"
+msgstr "Valgmuligheder for udskrivning:"
+
+#: src/LYPrint.c:1316
+msgid "Save to a local file"
+msgstr "Gem i lokal fil"
+
+#: src/LYPrint.c:1318
+msgid "Save to disk disabled"
+msgstr "Gemning på disk er slået fra"
+
+#: src/LYPrint.c:1324
+msgid "Mail the file"
+msgstr "Send fil med post"
+
+#: src/LYPrint.c:1330
+msgid "Print to the screen"
+msgstr "Udskriv til skærm"
+
+#: src/LYPrint.c:1334
+msgid "Print out on a printer attached to your vt100 terminal"
+msgstr "Udskriv på printer tilknyttet en vt100-terminal"
+
+#: src/LYReadCFG.c:340
+msgid ""
+"Syntax Error parsing COLOR in configuration file:\n"
+"The line must be of the form:\n"
+"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
+"\n"
+"Here FOREGROUND and BACKGROUND must be one of:\n"
+"The special strings 'nocolor' or 'default', or\n"
+msgstr ""
+"Syntaksfejl ved læsning af FARVE i opsætningsfil:\n"
+"Linjen skal have formen:\n"
+"FARVE:HELTAL:FORGRUND:BAGGRUND\n"
+"\n"
+"Her skal FORGRUND og BAGGRUND være en af:\n"
+"de særlige strenge 'nocolor' el. 'default', el.\n"
+
+#: src/LYReadCFG.c:353
+msgid "Offending line:"
+msgstr "Problemskabende linje:"
+
+#: src/LYReadCFG.c:660
+#, c-format
+msgid "key remapping of %s to %s for %s failed\n"
+msgstr "taste-gentildeling af %s til %s for %s slog fejl\n"
+
+#: src/LYReadCFG.c:667
+#, c-format
+msgid "key remapping of %s to %s failed\n"
+msgstr "taste-gentildeling af %s til %s slog fejl\n"
+
+#: src/LYReadCFG.c:688
+#, c-format
+msgid "invalid line-editor selection %s for key %s, selecting all\n"
+msgstr "ugyldigt linje-editor-valg %s for taste %s, vælger alt\n"
+
+#: src/LYReadCFG.c:715 src/LYReadCFG.c:728
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"
+msgstr "tildeling af taste %s (0x%x) til 0x%x for %s i linje-editor slog fejl\n"
+
+#: src/LYReadCFG.c:733
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) for %s failed\n"
+msgstr "tildeling af taste %s (0x%x) for %s i linje-editor slog fejl\n"
+
+#: src/LYReadCFG.c:838
+#, c-format
+msgid "Lynx: cannot start, CERN rules file %s is not available\n"
+msgstr "Lynx: Kan ikke starte, CERN regel-fil %s er ikke tilgængelig\n"
+
+#: src/LYReadCFG.c:840
+msgid "(no name)"
+msgstr "(intet navn)"
+
+#: src/LYReadCFG.c:1658
+#, c-format
+msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
+msgstr "Flere end %d indlejrede lynx.cfg-inkluderinger -- måske er der en sløjfe?1?\n"
+
+#: src/LYReadCFG.c:1660
+#, c-format
+msgid "Last attempted include was '%s',\n"
+msgstr "Sidst forsøgte inkludering var '%s',\n"
+
+#: src/LYReadCFG.c:1661
+#, c-format
+msgid "included from '%s'.\n"
+msgstr "inkluderet fra '%s'.\n"
+
+#: src/LYReadCFG.c:2116 src/LYReadCFG.c:2129 src/LYReadCFG.c:2165
+msgid "The following is read from your lynx.cfg file."
+msgstr "Følgende er læst fra din lynx.cfg-fil."
+
+#: src/LYReadCFG.c:2117 src/LYReadCFG.c:2130
+msgid "Please read the distribution"
+msgstr "Læs venligst distributionen"
+
+#: src/LYReadCFG.c:2123 src/LYReadCFG.c:2133
+msgid "for more comments."
+msgstr "for flere kommentarer."
+
+#: src/LYReadCFG.c:2147
+msgid "RELOAD THE CHANGES"
+msgstr "GENINDLÆS ÆNDRINGERNE"
+
+#: src/LYReadCFG.c:2156
+msgid "Your primary configuration"
+msgstr "Din primære opsætning"
+
+#: src/LYShowInfo.c:129
+msgid "Directory that you are currently viewing"
+msgstr "Filkatalog som du kigger på i øjeblikket"
+
+#: src/LYShowInfo.c:132
+msgid "Name:"
+msgstr "Navn:"
+
+#: src/LYShowInfo.c:135
+msgid "URL:"
+msgstr "URL:"
+
+#: src/LYShowInfo.c:146
+msgid "Directory that you have currently selected"
+msgstr "Aktuelt valgte filkatalog"
+
+#: src/LYShowInfo.c:149
+msgid "File that you have currently selected"
+msgstr "Aktuelt valgte fil"
+
+#: src/LYShowInfo.c:153
+msgid "Symbolic link that you have currently selected"
+msgstr "Aktuelt valgte symbolske link"
+
+#: src/LYShowInfo.c:157
+msgid "Item that you have currently selected"
+msgstr "Aktuelt valgte enhed"
+
+#: src/LYShowInfo.c:159
+msgid "Full name:"
+msgstr "Fulde navn:"
+
+#: src/LYShowInfo.c:168
+msgid "Unable to follow link"
+msgstr "Ude af stand til at følge link"
+
+#: src/LYShowInfo.c:170
+msgid "Points to file:"
+msgstr "Peger til fil:"
+
+#: src/LYShowInfo.c:175
+msgid "Name of owner:"
+msgstr "Ejers navn:"
+
+#: src/LYShowInfo.c:178
+msgid "Group name:"
+msgstr "Gruppes navn:"
+
+#: src/LYShowInfo.c:181
+msgid "File size:"
+msgstr "Filstr.: "
+
+#: src/LYShowInfo.c:187
+msgid "Creation date:"
+msgstr "Oprettelsesdato:"
+
+#: src/LYShowInfo.c:190
+msgid "Last modified:"
+msgstr "Sidst rettet:"
+
+#: src/LYShowInfo.c:193
+msgid "Last accessed:"
+msgstr "Sidst tilgået:"
+
+#: src/LYShowInfo.c:195
+msgid "Access Permissions"
+msgstr "Adgangstilladelser"
+
+#: src/LYShowInfo.c:261
+msgid "File that you are currently viewing"
+msgstr "Oplysninger om det aktuelle dokument:"
+
+#: src/LYShowInfo.c:266 src/LYShowInfo.c:375
+msgid "Linkname:"
+msgstr "Linknavn:"
+
+#: src/LYShowInfo.c:279 src/LYShowInfo.c:291
+msgid "Charset:"
+msgstr "Tegnsæt:"
+
+#: src/LYShowInfo.c:297
+msgid "Server:"
+msgstr "Server:"
+
+#: src/LYShowInfo.c:300
+msgid "Date:"
+msgstr "Dato:"
+
+#: src/LYShowInfo.c:303
+msgid "Last Mod:"
+msgstr "Sidst ret:"
+
+#: src/LYShowInfo.c:309
+msgid "&nbsp;Expires:"
+msgstr "&nbsp;udløber:"
+
+#: src/LYShowInfo.c:313
+msgid "Cache-Control:"
+msgstr "Cache-styring:"
+
+#: src/LYShowInfo.c:317
+msgid "Content-Length:"
+msgstr "Filstr.:"
+
+#: src/LYShowInfo.c:322
+msgid "Language:"
+msgstr "Sprog:"
+
+#: src/LYShowInfo.c:329
+msgid "Post Data:"
+msgstr "'Post Data:'"
+
+#: src/LYShowInfo.c:331
+msgid "Post Content Type:"
+msgstr "'Post Content Type:'"
+
+#: src/LYShowInfo.c:340
+msgid "Owner(s):"
+msgstr "Ejer(e):"
+
+#: src/LYShowInfo.c:343
+msgid "size:"
+msgstr "Str:"
+
+#: src/LYShowInfo.c:343
+msgid "lines"
+msgstr "linjer"
+
+#: src/LYShowInfo.c:346
+msgid "mode:"
+msgstr "Tilstand:"
+
+#: src/LYShowInfo.c:348
+msgid "forms mode"
+msgstr "formular-tilstand"
+
+#: src/LYShowInfo.c:350
+msgid "source"
+msgstr "kilde"
+
+#: src/LYShowInfo.c:350
+msgid "normal"
+msgstr "normal"
+
+#: src/LYShowInfo.c:351
+msgid ", safe"
+msgstr ", sikker"
+
+#: src/LYShowInfo.c:352
+msgid ", via internal link"
+msgstr ", via internt link"
+
+#: src/LYShowInfo.c:358
+msgid ", no-cache"
+msgstr ", no-cache"
+
+#: src/LYShowInfo.c:360
+msgid ", ISMAP script"
+msgstr ", ISMAP-script"
+
+#: src/LYShowInfo.c:362
+msgid ", bookmark file"
+msgstr ", bogmærkefil"
+
+#: src/LYShowInfo.c:371
+msgid "Link that you currently have selected"
+msgstr "Aktuelt valgte link"
+
+#: src/LYShowInfo.c:384
+msgid "Method:"
+msgstr "Metode:"
+
+#: src/LYShowInfo.c:389
+msgid "Enctype:"
+msgstr "Inktype:"
+
+#: src/LYShowInfo.c:401
+msgid "(Form field)"
+msgstr "(Formularfelt)"
+
+#: src/LYShowInfo.c:416
+msgid "No Links on the current page"
+msgstr "Ingen links på denne side"
+
+#: src/LYStyle.c:250
+#, c-format
+msgid ""
+"Syntax Error parsing style in lss file:\n"
+"[%s]\n"
+"The line must be of the form:\n"
+"OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
+"where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+msgstr ""
+"Syntaksfejl ved analyse af stilen i lss-fil:\n"
+"[%s]\n"
+"Linjen skal være på formen:\n"
+"OBJECT:MONO:COLOR (ie em:bold:brightblue:white),\n"
+"hvor OBJECT er en af EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+
+#: src/LYTraversal.c:107
+msgid "here is a list of the history stack so that you may rebuild"
+msgstr "her er en liste over historik-stack'en, så du kan genopbygge"
+
+#: src/LYUpload.c:78
+msgid "ERROR! - upload command is misconfigured"
+msgstr "FEJL! - upload-kommandoen er sat forkert op"
+
+#: src/LYUpload.c:100
+msgid "Illegal redirection \"../\" found! Request ignored."
+msgstr "Ulovlig omdirigering \"../\" fundet! Anmodning ignoreret."
+
+#: src/LYUpload.c:103
+msgid "Illegal character \"/\" found! Request ignored."
+msgstr "Ulovligt tegn \"/\" fundet! Anmodning ignoreret."
+
+#: src/LYUpload.c:106
+msgid "Illegal redirection using \"~\" found! Request ignored."
+msgstr "Ulovlig omdirigering som bruger \"~\" fundet! Anmodning ignoreret."
+
+#: src/LYUpload.c:163
+msgid "Unable to upload file."
+msgstr "Ude af stand til at uploade fil."
+
+#: src/LYUpload.c:214
+msgid "Upload To:"
+msgstr "Upload til:"
+
+#: src/LYUpload.c:215
+msgid "Upload options:"
+msgstr "Valgmuligheder for uploads:"
+
+#: src/LYUtils.c:3075
+msgid "Unexpected access protocol for this URL scheme."
+msgstr "Uventet adgangsprotokol for denne URL-type."
+
+#: src/LYUtils.c:3915
+msgid "Too many tempfiles"
+msgstr "For mange tempfiler"
+
+#: src/LYUtils.c:4217
+msgid "unknown restriction"
+msgstr "ukendt begrænsning"
+
+#: src/LYUtils.c:4248
+msgid "No restrictions set.\n"
+msgstr "Ingen begrænsninger sat.\n"
+
+#: src/LYUtils.c:4251
+msgid "Restrictions set:\n"
+msgstr "Begrænsninger sat:\n"
+
+#: src/LYUtils.c:5601
+msgid "Ignoring invalid HOME"
+msgstr "Ignorerer ugyldig HOME"
+
+#: src/LYrcFile.c:20
+msgid "Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n"
+msgstr ""
+
+#: src/LYrcFile.c:242
+msgid ""
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
+msgstr ""
+"\"accept_all_cookies\" gør, at Lynx automatisk vil acceptere alle cookier,\n"
+"hvis dette ønskes. Standarden er \"FALSE\", hvilket vil lade hver cookie\n"
+"blive ledsaget af et spørgsmål, om den skal accepteres eller ej. Sæt\n"
+"\"accept_all_cookies\" til \"TRUE\" for at acceptere alle cookier.\n"
+
+#: src/LYrcFile.c:249
+msgid ""
+"bookmark_file specifies the name and location of the default bookmark\n"
+"file into which the user can paste links for easy access at a later\n"
+"date.\n"
+msgstr ""
+"\"bookmark_file\" angiver navn og placering på standard bogmærkefilen\n"
+"som brugeren kan indsætte de links i, som han ønsker let adgang til\n"
+"på et senere tidspunkt.\n"
+
+#: src/LYrcFile.c:254
+msgid ""
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
+msgstr ""
+"Hvis \"case_sensitive_searching\" er sat til \"on\", vil der blive skelnet\n"
+"mellem store og små bogstaver ved søgninger afgivet med 's' og '/'\n"
+"tasterne. Det normale er \"off\".\n"
+
+#: src/LYrcFile.c:259
+msgid ""
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
+msgstr ""
+"\"character_set\" definitionen styrer, hvordan 8-bit tegn vises\n"
+"på din terminal. Hvis 8-bit tegn ikke vises korrekt på din skærm,\n"
+"kan du forsøge at skifte til et andet 8-bit tegnsæt eller bruge\n"
+"7-bit tegntilnærmelser.\n"
+"Aktuelt gyldige tegnsæt er:\n"
+
+#: src/LYrcFile.c:266
+msgid ""
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
+msgstr ""
+"\"cookie_accept_domains\" og \"cookie_reject_domains\" er en kommasepareret\n"
+"liste over domæner, hvorfra Lynx automatisk skal godkende eller afvise\n"
+"alle cookier. Hvis et domæne er anført i begge indstillinger, vil afvisningen\n"
+"have forrang. \"accept_all_cookies\" parameteren vil tilsidesætte begge\n"
+"disse indstillinger.\n"
+
+#: src/LYrcFile.c:274
+msgid ""
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
+msgstr ""
+"\"cookie_file\" angiver den fil som vedholdende cookier skal læses fra.\n"
+"Standarden er ~/.lynx_cookies.\n"
+
+#: src/LYrcFile.c:279
+msgid ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
+msgstr ""
+"\"cookie_loose_invalid_domains\", \"cookie_strict_invalid_domains\", og\"\n"
+"\"cookie_query_invalid_domains\" er en kommasepareret liste over, hvilke\n"
+"domæner der skal underkastes varierende grader af gyldighedstjek. If et\n"
+"domæne er sat til strengt tjek, vil en streng overholdelse af RFC2109\n"
+"blive krævet. Et domæne med et afslappet tjek vil blive tilladt at at\n"
+"sende cookier med en ugyldig sti eller domæneattribut. Alle domæner vil\n"
+"som standard spørge brugeren om en ugyldig sti eller domæne.\n"
+
+#: src/LYrcFile.c:292
+msgid ""
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
+msgstr ""
+"\"dir_list_styles\" angiver stilen for visning af filkataloger under \n"
+"\"DIRED_SUPPORT\" (hvis indarbejdet). Standarden er \"MIXED_STYLE\", \n"
+"hvilket sorterer såvel filer som kataloger sammen. \"FILES_FIRST\"\n"
+"oplister filer først og \"DIRECTORIES_FIRST\" oplister filkataloger\n"
+"først.\n"
+
+#: src/LYrcFile.c:300
+msgid ""
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
+msgstr ""
+"Hvis \"emac_keys\" er sat til \"til\", vil de normale EMACS bevægelsestaster:\n"
+" ^N = ned ^P = op\n"
+" ^B = venstre ^F = højre\n"
+"være slået til.\n"
+
+#: src/LYrcFile.c:306
+msgid ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+msgstr ""
+"\"file_editor\" angiver den editor der skal bruges ved redigering af lokale filer\n"
+"eller ved afsendelse af post. Hvis ingen editor er angivet, er filredigering \n"
+"slået fra, medmindre den er aktiveret fra kommandolinjen, og den indbyggede\n"
+"linje-editor vil blive brugt ved afsendelse af post.\n"
+
+#: src/LYrcFile.c:312
+msgid ""
+"The file_sorting_method specifies which value to sort on when viewing\n"
+"file lists such as FTP directories. The options are:\n"
+" BY_FILENAME -- sorts on the name of the file\n"
+" BY_TYPE -- sorts on the type of the file\n"
+" BY_SIZE -- sorts on the size of the file\n"
+" BY_DATE -- sorts on the date of the file\n"
+msgstr ""
+"\"file_sorting_method\" angiver hvilken værdi, der sorteres efter ved\n"
+"oversigter over fillister som f.eks FTP-filkataloger. Mulighederne er:\n"
+" BY_FILENAME -- sorterer efter filnavn\n"
+" BY_TYPE -- sorterer efter filtype\n"
+" BY_SIZE -- sorterer efter filstørrelse\n"
+" BY_DATE -- sorterer efter fildato\n"
+
+#: src/LYrcFile.c:324
+msgid ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+msgstr ""
+"\"lineedit_mode\" angiver de tastebindinger, der bruges for at indtaste\n"
+"tekststrenge ved prompter og i formularer. Hvis \"lineedit_mode\" er sat \n"
+"til \"Default Binding\", vil flg. kontroltegn blive brugt for flytning\n"
+"og sletning:\n"
+"\n"
+" Forr. Næste Retur = Godkend indtastning\n"
+" Flyt tegn: <- -> ^G = Afbryd indtastning\n"
+" Flyt ord: ^P ^N ^U = Slet linje\n"
+" Slet tegn: ^H ^R ^A = Begyndelse af linje\n"
+" Slet ord: ^B ^F ^E = Slutning af linje\n"
+"\n"
+"Aktuelle tilstande ved linjeredigering er:\n"
+
+#: src/LYrcFile.c:339
+msgid ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+msgstr ""
+"Følgende giver dig mulighed for at definere sekundære bogmærkefiler med \n"
+"tilhørende beskrivelser. Formatet er \"multi_bookmark\"<stort bogstav>=\n"
+"<filnavn>,<beskrivelse>. Indtil 26 bogmærkefiler (bogstaverne A-Z) er\n"
+"tilladt. Vi begynder med \"multi_bookmarkB\", idet \"A\" er standard \n"
+"(se ovenfor).\n"
+
+#: src/LYrcFile.c:345
+msgid ""
+"personal_mail_address specifies your personal mail address. The\n"
+"address will be sent during HTTP file transfers for authorization and\n"
+"logging purposes, and for mailed comments.\n"
+"If you do not want this information given out, set the NO_FROM_HEADER\n"
+"to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
+"could leave this field blank, but then you won't have it included in\n"
+"your mailed comments.\n"
+msgstr ""
+"\"personal_mail_address\" angiver din personlige postadresse. Denne\n"
+"adresse vil blive afsendt under HTTP-filoverførsler med henblik på\n"
+"autorisation og logning samt for afsendelse af kommentarer pr. post.\n"
+"Sæt NO_FROM_HEADER til TRUE i lynx.cfg, eller brug -nofrom kommando-\n"
+"linje parameteren, hvis du ikke ønsker denne oplysning viderebragt.\n"
+"Du kan også lade dette felt stå tomt, men så vil din postadresse ikke\n"
+"blive medtaget i dine kommentarer sendt pr. post.\n"
+
+#: src/LYrcFile.c:354
+msgid ""
+"preferred_charset specifies the character set in MIME notation (e.g.,\n"
+"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
+"to http servers using an Accept-Charset header. The value should NOT\n"
+"include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
+"by default. May be a comma-separated list.\n"
+"If a file in that character set is available, the server will send it.\n"
+"If no Accept-Charset header is present, the default is that any\n"
+"character set is acceptable. If an Accept-Charset header is present,\n"
+"and if the server cannot send a response which is acceptable\n"
+"according to the Accept-Charset header, then the server SHOULD send\n"
+"an error response, though the sending of an unacceptable response\n"
+"is also allowed.\n"
+msgstr ""
+"\"preferred_charset\" angiver det tegnsæt i MIME-notation (f.eks.\n"
+"ISO-8859-2, ISO-8859-5), som Lynx vil tilkendegive er dit foretrukne,\n"
+"i forespørgsler til http-servere og ved brug af en \"Accept-Charset header\".\n"
+"Værdien bør IKKE indbefatte ISO-8859-1 eller US-ASCII, idet disse altid er\n"
+"underforståede som standard. Værdierne kan anføres på en kommasepareret liste.\n"
+"Hvis en fil i dette tegnsæt er tilgængelig, vil serveren sende den.\n"
+"Hvis ingen \"Accept-Charset\" header er til stede, er standarden at ethvert\n"
+"tegnsæt er acceptabelt. Hvis en \"Accept-Charset\" header er til stede,\n"
+"og hvis serveren ikke kan sende et acceptabelt svar i henhold til denne\n"
+"header, da BØR serveren sende en fejlmeddelelse, omend afgivelse af et\n"
+"ikke-acceptabelt svar også er tilladt.\n"
+
+#: src/LYrcFile.c:368
+msgid ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+msgstr ""
+"\"preferred_language\" angiver det sprog i MIME-notation (f.eks. en,\n"
+"fr, - kan være en komma-separeret liste af faldende præference)\n"
+"som Lynx vil tilkendegive er dit foretrukne i sine forespørgsler \n"
+"til http-servere. Hvis en fil på dette sprog er tilgængelig, vil\n"
+"serveren sende den. I modsat fald vil den sende filen på sit\n"
+"standardsprog.\n"
+
+#: src/LYrcFile.c:377
+msgid ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Hvis \"run_all_execution_links\" er slået \"til\" vil alle lokale\n"
+"programafviklingslinks blive udført, når disse er valgt.\n"
+"\n"
+"ADVARSEL - Dette er potentielt MEGET farligt, eftersom du kan betragte\n"
+" information, som er skrevet af ukendte og upålidelige kilder.\n"
+" Der er mulighed for at links med \"trojanske heste\" kan skrives\n"
+" med det formål at slette filer eller kompromittere sikkerheden.\n"
+" Denne indstilling skal kun sættes til \"til\", hvis du betragter\n"
+" information du kan stole på.\n"
+
+#: src/LYrcFile.c:388
+msgid ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Hvis \"run_execution_links_on_local_files\" er slået \"til\", vil alle lokale\n"
+"programafviklingslinks, som forefindes i lokale filer blive udført, når\n"
+"disse vælges. Dette er anderledes end \"run_all_execution_links\" i den\n"
+"forstand, at alene filer som ligger på det lokale system vil tilladelse\n"
+"til at blive eksekveret.\n"
+"\n"
+"ADVARSEL - Dette er potentielt MEGET farligt, eftersom du kan betragte\n"
+" information, som er skrevet af ukendte og upålidelige kilder.\n"
+" Der er mulighed for at links med \"trojanske heste\" kan skrives\n"
+" med det formål at slette filer eller kompromittere sikkerheden.\n"
+" Denne indstilling skal kun slås \"til\", hvis du betragter\n"
+" information du kan stole på.\n"
+
+#: src/LYrcFile.c:403
+msgid ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+msgstr ""
+"\"select_popups\" angiver om VALGMULIGHEDER i en \"SELECT\"-blok, som mangler en\n"
+"\"MULTIPLE\"-attribut bliver præsenteret som en lodret liste af radioknapper\n"
+"eller via en \"popup\"-menu. Bemærk, at hvis \"MULTIPLE\"-attributten er til\n"
+"stede i \"SELECT start tag\", vil Lynx altid oprette en ledret liste af\n"
+"afkrydsningsbokse for VALGMULIGHEDERNE. En værdi af \"til\" vil sætte \n"
+"\"popup\"-menuer som standard, medens en værdi af \"fra\" vil sætte brugen\n"
+"af radiobokse. En standard kan tilsidesættes via \"-popup\" kommandolinje-\n"
+"parameteren.\n"
+
+#: src/LYrcFile.c:413
+msgid ""
+"show_color specifies how to set the color mode at startup. A value of\n"
+"\"never\" will force color mode off (treat the terminal as monochrome)\n"
+"at startup even if the terminal appears to be color capable. A value of\n"
+"\"always\" will force color mode on even if the terminal appears to be\n"
+"monochrome, if this is supported by the library used to build lynx.\n"
+"A value of \"default\" will yield the behavior of assuming\n"
+"a monochrome terminal unless color capability is inferred at startup\n"
+"based on the terminal type, or the -color command line switch is used, or\n"
+"the COLORTERM environment variable is set. The default behavior always is\n"
+"used in anonymous accounts or if the \"option_save\" restriction is set.\n"
+"The effect of the saved value can be overridden via\n"
+"the -color and -nocolor command line switches.\n"
+"The mode set at startup can be changed via the \"show color\" option in\n"
+"the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
+"\"off\" \"show color\" settings will be treated as \"default\".\n"
+msgstr ""
+"\"show_color\" angiver, hvorledes farveindstillingen skal være ved opstart.\n"
+"En værdi på \"aldrig\" vil slå farver fra (som på en monokrom skærm) ved opstart,\n"
+"selvom der er tale om en farveskærm. En værdi på \"altid\" vil slå farver til,\n"
+"selvom der er tale om en monokrom skærm, såfremt dette er understøttet af det\n"
+"terminalbibliotek, som Lynx er baseret på. En værdi på \"standard\" vil medføre,\n"
+"at en monokrom skærm antages, medmindre farveegenskaber antydes ved opstart,\n"
+"enten ud fra skærmtypen, eller ved brug af \"-color\" kommandolinje-parameteren,\n"
+"eller hvis COLORTERM miljøvariablen er sat. \"Standard\"-indstilingen bruges\n"
+"altid i anonyme konti, eller hvis \"option_save\" begrænsningen er sat.\n"
+"Virkningen af den gemte værdi kan tilsidesættes via \"-color\" og \"-nocolor\"\n"
+"kommandolinje-parametrene. Startindstillingen kan ændres via \"vis farve\"\n"
+"valgmuligheden i 'o'psætningsmenuen. Hvis indstillingerne er gemt, vil \n"
+"farveindstilingerne blive opfattet som \"standard\".\n"
+
+#: src/LYrcFile.c:430
+msgid ""
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
+msgstr ""
+"\"show_cursor\" angiver om markøren skal gemmes væk i skærmen højre side \n"
+"(og hvis muligt også skærmens bund), eller om den skal placeres til\n"
+"venstre for det aktuelle link i dokumenter hhv. ved aktuelle valgmulighed\n"
+"i udvælgelses-\"popup\"-vinduer. Placering af markør til venstre for det\n"
+"aktuelle link eller valgmulighed er hensigtsmæssigt for tale- eller Braille-\n"
+"brugerflader, og hvor skærmen er af en type som ikke kan skelne det\n"
+"aktuelle link på baggrund af lysmarkering eller farve. En værdi af \"til\"\n"
+"vil sætte placeringen til venstre som standard, medens en værdi af \"fra\"\n"
+"vil skjule markøren.\n"
+"Standarden kan tilsidesættes vil \"-show-cursur\" kommandolinje-parameteren.\n"
+
+#: src/LYrcFile.c:441
+msgid ""
+"show_dotfiles specifies that the directory listing should include\n"
+"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
+"honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
+"restricted via a command line switch. If display of hidden files\n"
+"is disabled, creation of such files via Lynx also is disabled.\n"
+msgstr ""
+"\"show_dotfiles\" angiver, at \"skjulte\" punktumfiler/-kataloger vises i\n"
+"filoversigterne. Hvis slået \"til\" vil det kun blive respekteret, \n"
+"såfremt det er gjort virksomt via userdefs.h og/eller lynx.cfg\n"
+"og ikke begrænset via en kommandolinje-parameter. Hvis visning af\n"
+"skjulte filer er slået fra, vil mulighed for oprettelse af sådanne \n"
+"via Lynx ligeledes være slået fra<.\n"
+
+#: src/LYrcFile.c:452
+msgid ""
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
+msgstr ""
+"Hvis \"sub_bookmarks\" ikke er sat til \"off\", og multi-bogmærker er\n"
+"defineret (se nedenfor), så vil brugeren, i forbindelse med alle\n"
+"bogmærke-operationer, først blive bedt om at vælge en aktiv sekundær \n"
+"bogmærkefil. Hvis den gængse \"Lynx bookmark_file\" er defineret \n"
+"(se ovenfor), vil denne blive brugt som første valg. Når denne\n"
+"valgmulighed er sat til \"advanced\" og brugermodus er avanceret, vil\n"
+"'v'is bogmærke-kommandoen præsentere en statuslinjeprompt i stedet\n"
+"for den menu som fremkommer i begynder og viderekommende \n"
+"brugertilstande. Når denne valgmulighed er sat til \"standard\",\n"
+"vil menuen fremkomme, uanset brugermodus.\n"
+
+#: src/LYrcFile.c:464
+msgid ""
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
+msgstr ""
+"\"user_mode\" angiver en brugers kompetanceniveau i Lynx. Standarden er\n"
+"\"NOVICE\", hvilket betyder at to ekstra linjer med hjælpetekst bliver\n"
+"vist i bunden af skærmen for at hjælpe brugeren med at lære de basale\n"
+"Lynx-kommandoer. Set \"user_mode\" til \"INTERMEDIATE\" for at slå disse \n"
+"ekstra oplysninger fra, Brug \"ADVANCED\" for at se URL'en på det aktuelt\n"
+"valgte link i bunden af skærmen.\n"
+
+#: src/LYrcFile.c:472
+msgid ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+msgstr ""
+"Hvis \"verbose_images\" er slået \"til\", vil Lynx printe navnet på\n"
+"et billedlinks kildefil i stedet for [INLINE], [LINK] eller [IMAGE]\n"
+"Se også \"VERBOSE_IMAGES\" i lynx.cfg\n"
+
+#: src/LYrcFile.c:477
+msgid ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+msgstr ""
+"Hvis \"vi_keys\" er sat til \"til\", vil de normale VI bevægelsestaster:\n"
+" J = ned K = op\n"
+" h = venstre I = højre\n"
+"være slået til. Disse taster virker kun som små bogstaver.\n"
+"Stort 'H', 'J' og 'K' vil stadig aktivere henholdsvis hjælp, \n"
+"hop-genveje og oversigt over tastebindinger.\n"
+
+#: src/LYrcFile.c:485
+msgid ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+msgstr ""
+"\"visited_links\" indstillingen styrer, hvorledes Lynx organiserer oplysningerne\n"
+"i siden over besøgte links.\n"
+
+#: src/LYrcFile.c:693
+msgid ""
+"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
+"your keypad when the numlock is on will act as arrow keys:\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"and the corresponding keyboard numbers will act as arrow keys,\n"
+"regardless of whether numlock is on.\n"
+msgstr ""
+"Hvis \"keypad_mode\" er sat til \"NUMBERS_AS_ARROWS\" vil tasterne på det\n"
+"numeriske tastatur, med numlock slået til, virke som piletaster:\n"
+" 8 = pil op\n"
+" 4 = venstre pil 6 = højre pil\n"
+" 2 = pil ned\n"
+"og de tilsvarende numeriske taster på tastaturet vil virke som piletaster,\n"
+"uanset om numlock er slået til eller ej\n"
+
+#: src/LYrcFile.c:702
+msgid ""
+"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
+"appear next to each link and numbers are used to select links.\n"
+msgstr ""
+"Hvis \"keypad_mode\" er sat til \"LINKS_ARE_NUMBERED\", vil hvert link\n"
+"være ledsaget af et nummer, og disse bruges til at vælge linkene.\n"
+
+#: src/LYrcFile.c:706
+msgid ""
+"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
+"numbers will appear next to each link and visible form input field.\n"
+"Numbers are used to select links, or to move the \"current link\" to a\n"
+"form input field or button. In addition, options in popup menus are\n"
+"indexed so that the user may type an option number to select an option in\n"
+"a popup menu, even if the option isn't visible on the screen. Reference\n"
+"lists and output from the list command also enumerate form inputs.\n"
+msgstr ""
+"Hvis \"keypad_mode\" er sat til \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", vil\n"
+"der komme til at stå et tal ved siden af hvert link og synligt formular-\n"
+"indtastningsfelt. Tallene bruges til at vælge linkene, eller for at flytte\n"
+"det \"aktuelle link\" til et formularindtastningsfelt eller -knap. I tilgift\n"
+"er valgmulighed i \"popup\"-menuer indekserede, således at brugeren kan indtaste\n"
+"et tal for at vælge en indstillingsmulighed i \"popup\"-menuen, selvom denne\n"
+"ikke er synlig på skærmen. Henvisningsoversigter og uddata fra \n"
+"\"list\"-kommandoen opregner også formularindtastninger.\n"
+
+#: src/LYrcFile.c:715
+msgid ""
+"NOTE: Some fixed format documents may look disfigured when\n"
+"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
+"enabled.\n"
+msgstr ""
+"NB: Visse fastformatterede dokumenter kan se fejlformatterede ud, når\n"
+"\"LINKS_ARE_NUMBERED\" eller \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" er\n"
+"slået til.\n"
+
+#: src/LYrcFile.c:748
+msgid ""
+"Lynx User Defaults File\n"
+"\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
+msgstr ""
+"Lynxfil for brugers standardindstilinger\n"
+"\n"
+"Denne fil indeholder de indstillinger, som er gemt fra Lynx' opsætningsmenu \n"
+"(normalt gemt med \">\"-tasten). Der er normalt ingen grund til at redigere \n"
+"denne fil manuelt. eftersom standarderne heri kan styres fra opsætningsmenuen,\n"
+"og næste gang indstillingerne er gemt fra opsætningsmenuen vil denne fil blive\n"
+"fuldstændig omskrevet. Du er blevet advaret...\n"
+"Hvis du er ude efter en almen opsætningsfil - den hedder sædvanligvis lynx.cfg,\n"
+"og har et andet indhold og format - så er det ikke denne fil.\n"
diff --git a/gnu/usr.bin/lynx/po/de.po b/gnu/usr.bin/lynx/po/de.po
index be47a1c8b22..1a3b46a9024 100644
--- a/gnu/usr.bin/lynx/po/de.po
+++ b/gnu/usr.bin/lynx/po/de.po
@@ -1,31 +1,5629 @@
+# German translations for the `lynx' program.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Erwin Dieterich <bamse@gmx.de>, 2000.
#
-# Sat Aug 22 18:47:32 EDT 1998
+# The TRANSLATIONS in this file are in the public domain.
+# This does not apply to the included original strings, which were
+# extracted from the Lynx source code by the xgettext program.
#
+# Most translations by:
+# Klaus Weide <kweide@enteract.com>, 1999.
+#
+# Maintainer since July 1999:
+# Erwin Dieterich <bamse@gmx.de>, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lynx 2.8.4\n"
+"POT-Creation-Date: 2001-06-01 18:55-0400\n"
+"PO-Revision-Date: 2000-05-03 02:59-05:00\n"
+"Last-Translator: Erwin Dieterich <bamse@gmx.de>\n"
+"Language-Team: German <de@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ******************************************************************
+#. * The following definitions are for status line prompts, messages, or
+#. * warnings issued by Lynx during program execution. You can modify
+#. * them to make them more appropriate for your site. We recommend that
+#. * you extend these definitions to other languages using the gettext
+#. * library. There are also scattered uses of 'gettext()' throughout the
+#. * Lynx source, covering all but those messages which (a) are used for
+#. * debugging (CTRACE) or (b) are constants used in interaction with
+#. * other programs.
+#. *
+#. * Links to collections of alternate definitions, developed by the Lynx
+#. * User Community, are maintained in Lynx links:
+#. *
+#. * http://www.trill-home.com/lynx.html
+#. *
+#. * See ABOUT-NLS and po/readme for details and location of contributed
+#. * translations. When no translation is available, the English default is
+#. * used.
+#.
+#: LYMessages.c:29
+#, c-format
+msgid "Alert!: %s"
+msgstr "Obacht: %s"
+
+#: LYMessages.c:30
+msgid "Welcome"
+msgstr "Willkommen"
+
+#: LYMessages.c:31 LYMessages.c:32
+msgid "Are you sure you want to quit?"
+msgstr "Programm wirklich beenden?"
+
+#: LYMessages.c:34 LYMessages.c:35
+msgid "Really exit from Lynx?"
+msgstr "Willst du wirklich raus?"
+
+#: LYMessages.c:37
+msgid "Connection interrupted."
+msgstr "Verbindung abgebrochen."
+
+#: LYMessages.c:38
+msgid "Data transfer interrupted."
+msgstr "Datentransfer abgebrochen."
+
+#: LYMessages.c:39
+msgid "Cancelled!!!"
+msgstr "Abgebrochen!!!"
+
+#: LYMessages.c:40
+msgid "Cancelling!"
+msgstr "Abgebrochen!"
+
+#: LYMessages.c:41
+msgid "Excellent!!!"
+msgstr "Prima!"
+
+# This message is kinda stupid... - kw
+#: LYMessages.c:42
+msgid "OK"
+msgstr "OK"
+
+#: LYMessages.c:43
+msgid "Done!"
+msgstr "Fertig!"
+
+#: LYMessages.c:44
+msgid "Bad request!"
+msgstr "Fehlerhafter Request!"
+
+#: LYMessages.c:45
+msgid "previous"
+msgstr "vorhergehender"
+
+#: LYMessages.c:46
+msgid "next screen"
+msgstr "nächste Seite"
+
+#: LYMessages.c:47
+msgid "HELP!"
+msgstr "HILFE!"
+
+#: LYMessages.c:48
+msgid ", help on "
+msgstr ", Hilfe über "
+
+#. #define HELP
+#: LYMessages.c:50
+msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
+msgstr "Pfeiltasten zum Bewegen, '?': Hilfe, 'q': Programmende, '<-': zurück"
+
+#. #define MOREHELP
+#: LYMessages.c:52
+msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
+msgstr "-- Leertaste für mehr, Pfeiltasten zum Bewegen, '?': Hilfe, 'q': Programmende"
+
+#: LYMessages.c:53
+msgid "-- press space for next page --"
+msgstr "-- Leertaste für nächste Seite --"
+
+#: LYMessages.c:54
+msgid "URL too long"
+msgstr "URL zu lang"
+
+#. Inactive input fields, messages used with -tna option - kw
+#. #define FORM_LINK_TEXT_MESSAGE_INA
+#: LYMessages.c:60
+msgid "(Text entry field) Inactive. Press <return> to activate."
+msgstr "(Texteingabefeld) nicht aktiviert. Zum Aktivieren <Return> eingeben."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA
+#: LYMessages.c:62
+msgid "(Textarea) Inactive. Press <return> to activate."
+msgstr "(Textbereich) nicht aktiviert. Zum Aktivieren <Return> eingeben."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA_E
+#: LYMessages.c:64
+#, c-format
+msgid "(Textarea) Inactive. Press <return> to activate (%s for editor)."
+msgstr "(Textregion) nicht aktiv. Zum Aktivieren <Return> drücken (%s für Editor)."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA
+#: LYMessages.c:66
+msgid "(Form field) Inactive. Use <return> to edit."
+msgstr "(Formfeld) inaktiv. <Return> zum Editieren."
+
+#. #define FORM_TEXT_SUBMIT_MESSAGE_INA_X
+#: LYMessages.c:68
+#, c-format
+msgid "(Form field) Inactive. Use <return> to edit (%s to submit with no cache)."
+msgstr "(Formfeld) inaktiv. <Return> zum Editieren (%s zum Abschicken ohne Zwischenspeicher (Cache))."
+
+#. #define FORM_TEXT_RESUBMIT_MESSAGE_INA
+#: LYMessages.c:70
+msgid "(Form field) Inactive. Press <return> to edit, press <return> twice to submit."
+msgstr "(Formfeld) nicht aktiviert. Eingabetaste zum Editieren, Zweimal Eingabetaste zm Abschicken"
+
+#. #define FORM_TEXT_SUBMIT_MAILTO_MSG_INA
+#: LYMessages.c:72
+msgid "(mailto form field) Inactive. Press <return> to change."
+msgstr "(Mailto-Formfeld) nicht aktiv. Zum Ändern Eingabetaste dücken."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE_INA
+#: LYMessages.c:74
+msgid "(Password entry field) Inactive. Press <return> to activate."
+msgstr "(Passwort-Eingabefeld) nicht aktiv. Zum Aktivieren Eingabetaste dücken."
+
+#. #define FORM_LINK_FILE_UNM_MSG
+#: LYMessages.c:77
+msgid "UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off."
+msgstr "NICHTVERÄNDERBARES Formfeld. Verlassen mit Rauf- oder Runter-Pfeiltaste oder TAB."
+
+#. #define FORM_LINK_FILE_MESSAGE
+#: LYMessages.c:79
+msgid "(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off."
+msgstr "(Texteingabefeld) Text eingeben. Verlassen mit Rauf- oder Runter-Pfeiltaste oder TAB."
+
+#. #define FORM_LINK_TEXT_MESSAGE
+#: LYMessages.c:81
+msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Texteingabefeld) Text eingeben. Verlassen mit Rauf- und Runter-Pfeiltasten."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE
+#: LYMessages.c:83
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off."
+msgstr "(Textregion) Text eingeben. Mit AUF/AB-Pfeiltasten verlassen."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_E
+#: LYMessages.c:85
+#, c-format
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor)."
+msgstr "(Textregion) Text eingeben. Verlassen mit Pfeiltasten oder TAB (%s für Editor)."
+
+#. #define FORM_LINK_TEXT_UNM_MSG
+#: LYMessages.c:87
+msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
+msgstr "NICHTVERÄNDERBARES Form-Textfeld. Verlassen mit Rauf- und Runter-Pfeiltasten."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE
+#: LYMessages.c:89
+msgid "(Form field) Enter text. Use <return> to submit."
+msgstr "(Formfeld) Text eingeben. Eingabetaste zum Losschicken."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_X
+#: LYMessages.c:91
+#, c-format
+msgid "(Form field) Enter text. Use <return> to submit (%s for no cache)."
+msgstr "(Formfeld) Text eingeben. Eingabetaste zum Losschicken (%s: Cache umgehen)."
+
+#. #define FORM_LINK_TEXT_RESUBMIT_MESSAGE
+#: LYMessages.c:93
+msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
+msgstr "(Formfeld) Text Eingeben. Eingabetaste zum Losschicken, Pfeile/Tab.: Verlassen"
+
+#. #define FORM_LINK_TEXT_SUBMIT_UNM_MSG
+#: LYMessages.c:95
+msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
+msgstr "NICHTVERÄNDERBARES Formfeld. Verlassen mit Rauf- und Runter-Pfeiltasten."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_MSG
+#: LYMessages.c:97
+msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
+msgstr "(Mailto-Formfeld) Text Eingeben. Eingabetaste: Losschicken, Pfeile: Verlassen"
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:99
+msgid "(mailto form field) Mail is disallowed so you cannot submit."
+msgstr "(Mailto-Formfeld) Schicken nicht möglich, da Mail nicht erlaubt ist."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE
+#: LYMessages.c:101
+msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Passwort-Eingabefeld) Text Eingeben. Rauf- und Runter-Pfeiltasten: Verlassen"
+
+#. #define FORM_LINK_PASSWORD_UNM_MSG
+#: LYMessages.c:103
+msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
+msgstr "NICHTVERÄNDERBARES Form-Passwort. Rauf- und Runter-Pfeiltasten zum Verlassen."
+
+#. #define FORM_LINK_CHECKBOX_MESSAGE
+#: LYMessages.c:105
+msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
+msgstr "(Checkbox-Feld) Ein-/Ausschalten mit rechter Pfeiltaste oder Eingabetaste."
+
+#. #define FORM_LINK_CHECKBOX_UNM_MSG
+#: LYMessages.c:107
+msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
+msgstr "NICHTVERÄNDERBARE Form-Checkbox. Rauf- und Runter-Pfeiltasten zum Verlassen."
+
+#. #define FORM_LINK_RADIO_MESSAGE
+#: LYMessages.c:109
+msgid "(Radio Button) Use right-arrow or <return> to toggle."
+msgstr "(Radiotaste) Ein-/Ausschalten mit rechter Pfeiltaste oder Eingabetaste."
+
+#. #define FORM_LINK_RADIO_UNM_MSG
+#: LYMessages.c:111
+msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
+msgstr "NICHTVERÄNDERBARE Form-Radiotaste. Rauf- und Runter-Pfeiltasten zum Verlassen."
+
+#. #define FORM_LINK_SUBMIT_PREFIX
+#: LYMessages.c:113
+msgid "Submit ('x' for no cache) to "
+msgstr "Eingabe: Schicken ('x': ohne Cache) zu "
+
+#. #define FORM_LINK_RESUBMIT_PREFIX
+#: LYMessages.c:115
+msgid "Submit to "
+msgstr "Eingabe: Schicken zu "
+
+#. #define FORM_LINK_SUBMIT_MESSAGE
+#: LYMessages.c:117
+msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
+msgstr "(Form-Submit-Button) Rechter Pfeil / Eingabetaste: Schicken ('x': ohne Cache)"
+
+#. #define FORM_LINK_RESUBMIT_MESSAGE
+#: LYMessages.c:119
+msgid "(Form submit button) Use right-arrow or <return> to submit."
+msgstr "(Form-Submit-Button) Rechter Pfeil oder Eingabetaste zum Losschicken"
+
+#. #define FORM_LINK_SUBMIT_DIS_MSG
+#: LYMessages.c:121
+msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
+msgstr "AUSGESCHALTETER Form-Submit-Button. Rechter Pfeil / Eingabetaste zum Verlassen."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_PREFIX
+#: LYMessages.c:123
+msgid "Submit mailto form to "
+msgstr "Eingabe: Mailto-Form schicken an "
+
+#. #define FORM_LINK_SUBMIT_MAILTO_MSG
+#: LYMessages.c:125
+msgid "(mailto form submit button) Use right-arrow or <return> to submit."
+msgstr "(Mailto-Form-Submit-Button) Rechte Pfeiltaste oder Eingabetaste: Losschicken."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:127
+msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
+msgstr "(Mailto-Form-Submit-Button) Schicken nicht möglich, da Mail nicht erlaubt ist."
+
+#. #define FORM_LINK_RESET_MESSAGE
+#: LYMessages.c:129
+msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
+msgstr "(Form-Resetbutton) Rechter Pfeil/Eingabetaste: zu Ausgangszustand zurücksetzen."
+
+#. #define FORM_LINK_RESET_DIS_MSG
+#: LYMessages.c:131
+msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
+msgstr "AUSGESCHALTETER Form-Resetbutton. Rauf- und Runter-Pfeiltasten zum Verlassen."
+
+#. #define FORM_LINK_OPTION_LIST_MESSAGE
+#: LYMessages.c:133
+msgid "(Option list) Hit return and use arrow keys and return to select option."
+msgstr "(Optionsliste) Eingabetaste drücken und Pfeiltasten zur Optionswahl werwenden."
+
+#. #define CHOICE_LIST_MESSAGE
+#: LYMessages.c:135
+msgid "(Choice list) Hit return and use arrow keys and return to select option."
+msgstr "(Auswahlliste) Eingabetaste drücken und Pfeiltasten zur Optionswahl werwenden."
+
+#. #define FORM_LINK_OPTION_LIST_UNM_MSG
+#: LYMessages.c:137
+msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
+msgstr "NICHTVERÄNDERBARE Optionsliste. Eingabetaste / Pfeile zum Ansehen / Verlassen."
+
+#. #define CHOICE_LIST_UNM_MSG
+#: LYMessages.c:139
+msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
+msgstr "NICHTVERÄNDERBARE Auswahlliste. Eingabetaste / Pfeile zum Ansehen / Verlassen."
+
+#: LYMessages.c:140
+msgid "Submitting form..."
+msgstr "Form wird geschickt..."
+
+#: LYMessages.c:141
+msgid "Resetting form..."
+msgstr "Form wird zurückgesetzt..."
+
+#. #define RELOADING_FORM
+#: LYMessages.c:143
+msgid "Reloading document. Any form entries will be lost!"
+msgstr "Dokument wird nachgeladen. Alle Formeingaben gehen verloren!"
+
+#: LYMessages.c:144
+#, c-format
+msgid "Warning: Cannot transcode form data to charset %s!"
+msgstr "Warnung: Formdaten können nicht in Zeichensatz %s übersetzt werden!"
+
+#. #define NORMAL_LINK_MESSAGE
+#: LYMessages.c:147
+msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
+msgstr "(NORMALER LINK) Rechte Pfeiltaste oder Eingabetaste zum Aktivieren verwenden."
+
+#: LYMessages.c:148
+msgid "The resource requested is not available at this time."
+msgstr "Angeforderte Resource ist zur Zeit nicht verfügbar."
+
+#: LYMessages.c:149
+msgid "Enter Lynx keystroke command: "
+msgstr "Lynx-Tastenbefehl eingeben: "
+
+#: LYMessages.c:150
+msgid "Looking up "
+msgstr "Suche nach "
+
+#: LYMessages.c:151
+#, c-format
+msgid "Getting %s"
+msgstr "%s wird geholt..."
+
+#: LYMessages.c:152
+#, c-format
+msgid "Skipping %s"
+msgstr "%s wird übergangen."
+
+#: LYMessages.c:153
+#, c-format
+msgid "Using %s"
+msgstr "Umgeleitet nach %s"
+
+#: LYMessages.c:154
+#, c-format
+msgid "Illegal URL: %s"
+msgstr "Ungültiger URL: %s"
+
+#: LYMessages.c:155
+#, c-format
+msgid "Badly formed address %s"
+msgstr "Fehlgestaltete Adresse %s"
+
+#: LYMessages.c:156
+#, c-format
+msgid "URL: %s"
+msgstr "URL: %s"
+
+#: LYMessages.c:157
+msgid "Unable to access WWW file!!!"
+msgstr "WWW-Datei ist nicht zugänglich!!!"
+
+#: LYMessages.c:158
+#, c-format
+msgid "This is a searchable index. Use %s to search."
+msgstr "Abfragbarer Index. Suchbegriff kann mit %s eingegeben werden."
+
+#. #define WWW_INDEX_MORE_MESSAGE
+#: LYMessages.c:160
+#, c-format
+msgid "--More-- This is a searchable index. Use %s to search."
+msgstr "--Mehr -- Abfragbarer Index. Suchbegriff kann mit %s eingegeben werden."
+
+#: LYMessages.c:161
+msgid "You have entered an invalid link number."
+msgstr "Ungültige Link-Nummer."
+
+#. #define SOURCE_HELP
+#: LYMessages.c:163
+msgid "Currently viewing document source. Press '\\' to return to rendered version."
+msgstr "Quelltext des Dokuments wird gezeigt. Rückkehr zur Normaldarstellung mit '\\'."
+
+#. #define NOVICE_LINE_ONE
+#: LYMessages.c:165
+msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
+msgstr "Pfeile: Auf/Ab: andere Seite im Text. Rechts: Verweis folgen; Links: zurück.\n"
+
+# Used if lynx.cfg does NOT contain KEYMAP for TOGGLE_HELP, default.
+#. #define NOVICE_LINE_TWO
+#: LYMessages.c:167
+msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
+msgstr "H)ilfe O)ptionen P) Druck G)ehe zu M) Hauptseite Q) Beenden /=Suche <-=History\n"
+
+# Only used if lynx.cfg contains KEYMAP for TOGGLE_HELP.
+#. #define NOVICE_LINE_TWO_A
+#: LYMessages.c:169
+msgid " O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)uit \n"
+msgstr ""
+"O: andere Befehle H: Hilfe K: Tastenbelegung G: Gehe zu \n"
+"P: Drucken M: Hauptseite o: Optionen Q: Beenden\n"
+
+# Only used if lynx.cfg contains KEYMAP for TOGGLE_HELP.
+#. #define NOVICE_LINE_TWO_B
+#: LYMessages.c:171
+msgid " O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n"
+msgstr ""
+"O: Andere Befehle B: Zurück E: Editieren D: Download \n"
+"^R: Neu laden ^W: Auffrischen /: Suche im Text\n"
+
+# Only used if lynx.cfg contains KEYMAP for TOGGLE_HELP.
+#. #define NOVICE_LINE_TWO_C
+#: LYMessages.c:173
+msgid "O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)emove \n"
+msgstr ""
+"O: Andere Befehle C: Kommentar Entfernen: History\n"
+"Lesezeichen: V: Ansehen A: Hinzufügen R) Löschen\n"
+
+#. #define FORM_NOVICELINE_ONE
+#: LYMessages.c:175
+msgid " Enter text into the field by typing on the keyboard "
+msgstr " Normale Tasten für Texteingabe verwenden. "
+
+#. #define FORM_NOVICELINE_TWO
+#: LYMessages.c:177
+msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U zum Löschen des ganzen Texts in einem Feld, [Entf] um einen Buchstaben zu löschen "
+
+#. #define FORM_NOVICELINE_TWO_DELBL
+#: LYMessages.c:179
+msgid " Ctrl-U to delete text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U zum Löschen von Text in einem Feld, [Entf] um einen Buchstaben zu löschen "
+
+#. #define FORM_NOVICELINE_TWO_VAR
+#: LYMessages.c:181
+#, c-format
+msgid " %s to delete all text in field, [Backspace] to delete a character "
+msgstr " %s zum Löschen des Textes in einem Feld, [Entf] um einen Buchstaben zu löschen "
+
+#. #define FORM_NOVICELINE_TWO_DELBL_VAR
+#: LYMessages.c:183
+#, c-format
+msgid " %s to delete text in field, [Backspace] to delete a character "
+msgstr " %s zum Löschen des Textes in einem Feld, [Entf] um einen Buchstaben zu löschen "
+
+#. mailto
+#: LYMessages.c:186
+msgid "Malformed mailto form submission! Cancelled!"
+msgstr "Fehlerhafte mailto-Form, kann nicht gesandt werden!"
+
+#: LYMessages.c:187
+msgid "Warning! Control codes in mail address replaced by ?"
+msgstr "Warnung! Kontrollzeichen in Mailadresse durch ? ersetzt"
+
+#: LYMessages.c:188
+msgid "Mail disallowed! Cannot submit."
+msgstr "Mail is nicht erlaubt! Kann nicht gesandt werden."
+
+#: LYMessages.c:189
+msgid "Mailto form submission failed!"
+msgstr "Senden der mailto-Formdaten fehlgeschlagen!"
+
+#: LYMessages.c:190
+msgid "Mailto form submission Cancelled!!!"
+msgstr "Senden der mailto-Form abgebrochen!!!"
+
+#: LYMessages.c:191
+msgid "Sending form content..."
+msgstr "Formdaten werden gesandt..."
+
+#: LYMessages.c:192
+msgid "No email address is present in mailto URL!"
+msgstr "mailto-URL hat keine Mailadresse!"
+
+#. #define MAILTO_URL_TEMPOPEN_FAILED
+#: LYMessages.c:194
+msgid "Unable to open temporary file for mailto URL!"
+msgstr "Temporäre Datei für Mailto-URL konnte nicht geöffnet werden!"
+
+#. #define INC_ORIG_MSG_PROMPT
+#: LYMessages.c:196
+msgid "Do you wish to include the original message?"
+msgstr "Soll der Originaltext eingefügt werden?"
+
+#. #define INC_PREPARSED_MSG_PROMPT
+#: LYMessages.c:198
+msgid "Do you wish to include the preparsed source?"
+msgstr "Soll der vorverarbeitete Quelltext eingefügt werden?"
+
+#. #define SPAWNING_EDITOR_FOR_MAIL
+#: LYMessages.c:200
+msgid "Spawning your selected editor to edit mail message"
+msgstr "Der ausgewählte Editor wird zur Erstellen der Mail-Botschaft gestartet."
+
+#. #define ERROR_SPAWNING_EDITOR
+#: LYMessages.c:202
+msgid "Error spawning editor, check your editor definition in the options menu"
+msgstr "Editor nicht gestartet, bitte Einstellung im Optionsmenü überprüfen!"
+
+#: LYMessages.c:203
+msgid "Send this comment?"
+msgstr "Kommentar abschicken?"
+
+#: LYMessages.c:204
+msgid "Send this message?"
+msgstr "Mail abschicken?"
+
+#: LYMessages.c:205
+msgid "Sending your message..."
+msgstr "Mail wird gesandt..."
+
+#: LYMessages.c:206
+msgid "Sending your comment:"
+msgstr "Nachricht wird gesandt:"
+
+#. textarea
+#: LYMessages.c:209
+msgid "Not in a TEXTAREA; cannot use external editor."
+msgstr "Nicht in einem TEXTAREA-Bereich; externer Editor ist hier nicht möglich."
+
+#: LYMessages.c:210
+msgid "Not in a TEXTAREA; cannot use command."
+msgstr "Nicht in einem TEXTAREA-Bereich; Befehl ist hier nicht anwendbar."
+
+#: LYMessages.c:213
+msgid "file: ACTIONs are disallowed!"
+msgstr "\"file\"-URLs sind nicht als Form-ACTION erlaubt!"
+
+#. #define FILE_SERVED_LINKS_DISALLOWED
+#: LYMessages.c:215
+msgid "file: URLs via served links are disallowed!"
+msgstr "Aktivierung von \"file\"-URLs von externen Links aus ist nicht erlaubt!"
+
+#: LYMessages.c:216
+msgid "Access to local files denied."
+msgstr "Zugang zu lokalen Dateien nicht gestatted."
+
+#: LYMessages.c:217
+msgid "file: URLs via bookmarks are disallowed!"
+msgstr "\"file\"-URLs sind von Lesezeichen aus nicht erlaubt!"
+
+#. #define SPECIAL_VIA_EXTERNAL_DISALLOWED
+#: LYMessages.c:219
+msgid "This special URL is not allowed in external documents!"
+msgstr "Dieser spezielle URLs ist von externen Dokumenten aus nicht erlaubt!"
+
+#: LYMessages.c:220
+msgid "Press <return> to return to Lynx."
+msgstr "Zurück zu Lynx mit Eingabetaste."
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:223
+msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
+msgstr "DCL-Unterprozeß wird gestartet. Rückkehr zu Lynx mit 'logout'.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:227
+msgid "Type EXIT to return to Lynx.\n"
+msgstr "Für Rückkehr zu Lynx EXIT eingeben.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:230
+msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
+msgstr "Default Shell wird gestartet, für Rückkehr zu Lynx 'exit' eingeben.\n"
+
+#: LYMessages.c:233
+msgid "Spawning is currently disabled."
+msgstr "Starten von Unterprozessen zur Zeit nicht ermöglicht."
+
+#: LYMessages.c:234
+msgid "The 'd'ownload command is currently disabled."
+msgstr "Das Kommando 'd'ownload is zur Zeit nicht gestattet."
+
+#: LYMessages.c:235
+msgid "You cannot download an input field."
+msgstr "Download von Eingabefeldern is nicht möglich."
+
+#: LYMessages.c:236
+msgid "Form has a mailto action! Cannot download."
+msgstr "Diese Form verlangt eine mailto-Aktion! Download unmöglich."
+
+#: LYMessages.c:237
+msgid "You cannot download a mailto: link."
+msgstr "Download unmöglich für mailto-Link."
+
+#: LYMessages.c:238
+msgid "You cannot download cookies."
+msgstr "Download unmöglich für Kekse."
+
+#: LYMessages.c:239
+msgid "You cannot download a printing option."
+msgstr "Download unmöglich für Druckoption."
+
+#: LYMessages.c:240
+msgid "You cannot download an upload option."
+msgstr "Download unmöglich für Upload-Option."
+
+#: LYMessages.c:241
+msgid "You cannot download an permit option."
+msgstr "Download unmöglich für Berechtigungsoption."
+
+#: LYMessages.c:242
+msgid "This special URL cannot be downloaded!"
+msgstr "Download unmöglich für diesen speziellen URL!"
+
+#: LYMessages.c:243
+msgid "Nothing to download."
+msgstr "Nichts runterzuladen."
+
+#: LYMessages.c:244
+msgid "Trace ON!"
+msgstr "Trace EIN!"
+
+#: LYMessages.c:245
+msgid "Trace OFF!"
+msgstr "Trace AUS!"
+
+#. #define CLICKABLE_IMAGES_ON
+#: LYMessages.c:247
+msgid "Links will be included for all images! Reloading..."
+msgstr "Links für alle Bilder werden eingefügt! Neuladen..."
+
+#. #define CLICKABLE_IMAGES_OFF
+#: LYMessages.c:249
+msgid "Standard image handling restored! Reloading..."
+msgstr "Wiederaufnahme der normalen Bildbehandlung! Neuladen..."
+
+#. #define PSEUDO_INLINE_ALTS_ON
+#: LYMessages.c:251
+msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
+msgstr "Pseudo-ALTs werden für alle Inlinebilder one ALT-Attrbut eingefügt! Neuladen..."
+
+#. #define PSEUDO_INLINE_ALTS_OFF
+#: LYMessages.c:253
+msgid "Inlines without an ALT string specified will be ignored! Reloading..."
+msgstr "Inlinebilder ohne ALT-Attribut werden jetzt ignoriert! Neuladen..."
+
+#: LYMessages.c:254
+msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
+msgstr "Raw 8-bit or CJK mode eingeschaltet! Reloading..."
+
+#: LYMessages.c:255
+msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
+msgstr "Raw 8-bit or CJK mode ausgeschaltet! Reloading..."
+
+#. #define HEAD_D_L_OR_CANCEL
+#: LYMessages.c:257
+msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
+msgstr "HEAD-Anforderung für D)okument oder L)link senden, oder Abbre(C)hen? (d,l,c): "
+
+#. #define HEAD_D_OR_CANCEL
+#: LYMessages.c:259
+msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
+msgstr "HEAD-Anforderung für D)okument senden, oder Abbre(C)hen? (d,c): "
+
+#: LYMessages.c:260
+msgid "Sorry, the document is not an http URL."
+msgstr "Sorry, das Dokument ist kein http-URL."
+
+#: LYMessages.c:261
+msgid "Sorry, the link is not an http URL."
+msgstr "Sorry, der Link ist kein http-URL."
+
+#: LYMessages.c:262
+msgid "Sorry, the ACTION for this form is disabled."
+msgstr "Sorry, die ACTION für diese Form ist \"disabled\"."
+
+#. #define FORM_ACTION_NOT_HTTP_URL
+#: LYMessages.c:264
+msgid "Sorry, the ACTION for this form is not an http URL."
+msgstr "Sorry, die ACTION für diese Form ist kein HTTP-URL."
+
+#: LYMessages.c:265
+msgid "Not an http URL or form ACTION!"
+msgstr "Dies ist weder ein http-URL noch eine Form-ACTION!"
+
+#: LYMessages.c:266
+msgid "This special URL cannot be a form ACTION!"
+msgstr "Dieser spezielle URL ist nicht möglich als Form-ACTION!"
+
+#: LYMessages.c:267
+msgid "URL is not in starting realm!"
+msgstr "URL ist nicht im erlaubten Start-Bereich!"
+
+#: LYMessages.c:268
+msgid "News posting is disabled!"
+msgstr "News-Posting nicht erlaubt."
+
+#: LYMessages.c:269
+msgid "File management support is disabled!"
+msgstr "Dired-Unterstützung für Dateimanagement is ausgeschaltet!"
+
+#: LYMessages.c:270
+msgid "No jump file is currently available."
+msgstr "Eine Sprungdatei (jump file) ist zur Zeit nicht erhältlich."
+
+#: LYMessages.c:271
+msgid "Jump to (use '?' for list): "
+msgstr "Sprung zu URL ('?' für Auswahlliste): "
+
+#: LYMessages.c:272
+msgid "Jumping to a shortcut URL is disallowed!"
+msgstr "Abgekürzter URL-Sprung ist nicht erlaubt!"
+
+#: LYMessages.c:273
+msgid "Random URL is disallowed! Use a shortcut."
+msgstr "Eingabe von beliebigen URLs nicht erlaubt! Bitte URL-Sprung benutzen."
+
+#: LYMessages.c:274
+msgid "No random URLs have been used thus far."
+msgstr "\"Go\"-URLs noch nicht benutzt."
+
+#: LYMessages.c:275
+msgid "Bookmark features are currently disabled."
+msgstr "Lesezeichen zur Zeit ausgeschaltet."
+
+#: LYMessages.c:276
+msgid "Execution via bookmarks is disabled."
+msgstr "Ausführen von Befehlen ist hier nicht erlaubt."
+
+#. #define BOOKMARK_FILE_NOT_DEFINED
+#: LYMessages.c:278
+#, c-format
+msgid "Bookmark file is not defined. Use %s to see options."
+msgstr "Lesezeichendatei nicht definiert. Siehe Opttionseinstellungen (Taste %s)."
+
+#. #define NO_TEMP_FOR_HOTLIST
+#: LYMessages.c:280
+msgid "Unable to open tempfile for X Mosaic hotlist conversion."
+msgstr "Temporärdatei für Mosaic-Hotlistenumwandlung kann nicht geöffnet werden."
+
+#: LYMessages.c:281
+msgid "ERROR - unable to open bookmark file."
+msgstr "FEHLER - Lesemarken-Datei kann nicht geöffnet werden."
+
+#. #define BOOKMARK_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:283
+msgid "Unable to open bookmark file for deletion of link."
+msgstr "Lesezeichendatei kann nicht zum Linkentfernen geöffnet werden."
+
+#. #define BOOKSCRA_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:285
+msgid "Unable to open scratch file for deletion of link."
+msgstr "Scratchdatei kann nicht zum Linkentfernen geöffnet werden."
+
+#: LYMessages.c:287
+msgid "Error renaming scratch file."
+msgstr "Umbenennung einer Scratchdatei fehlgeschlagen."
+
+#: LYMessages.c:289
+msgid "Error renaming temporary file."
+msgstr "Umbenennung einer temporären Datei fehlgeschlagen."
+
+#. #define BOOKTEMP_COPY_FAIL
+#: LYMessages.c:291
+msgid "Unable to copy temporary file for deletion of link."
+msgstr "Temporäre Datei für das Linkentfernen kann nicht geöffnet werden."
+
+#. #define BOOKTEMP_REOPEN_FAIL_FOR_DEL
+#: LYMessages.c:293
+msgid "Unable to reopen temporary file for deletion of link."
+msgstr "Temporäre Datei für das Linkentfernen kann nicht wiedergeöffnet werden."
+
+#. #define BOOKMARK_LINK_NOT_ONE_LINE
+#: LYMessages.c:296
+msgid "Link is not by itself all on one line in bookmark file."
+msgstr "Link steht nicht allein in einer Zeile in der Lesezeichendatei."
+
+#: LYMessages.c:297
+msgid "Bookmark deletion failed."
+msgstr "Löschen des Lesezeicheneintrags fehlgeschlagen."
+
+#. #define BOOKMARKS_NOT_TRAVERSED
+#: LYMessages.c:299
+msgid "Bookmark files cannot be traversed (only http URLs)."
+msgstr "Traversal ist für Lesezeichendateien nicht erlaubt, nur für HTTP-URLs."
+
+#. #define BOOKMARKS_NOT_OPEN
+#: LYMessages.c:301
+msgid "Unable to open bookmark file, use 'a' to save a link first"
+msgstr "Lesezeichendatei kann nicht gelesen werden, erst mit 'a' einen Link speichern."
+
+#: LYMessages.c:302
+msgid "There are no links in this bookmark file!"
+msgstr "Diese Lesezeichendatei hat keine Einträge!"
+
+#. #define BOOK_D_L_OR_CANCEL
+#: LYMessages.c:304
+msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
+msgstr "Aktuelles Dokument speichern (D,d), Lesezeichen erstellen (L,l) oder abbrechen (C,c): "
+
+#: LYMessages.c:305
+msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
+msgstr "Gegenwärtiges D)okument als Lesezeichen speichern oder abbre(C)hen? (d,c): "
+
+#: LYMessages.c:306
+msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
+msgstr "L)ink als Lesezeichen speichern oder abbre(C)hen? (l,c): "
+
+#. #define NOBOOK_POST_FORM
+#: LYMessages.c:308
+msgid "Documents from forms with POST content cannot be saved as bookmarks."
+msgstr "Anlegen von Lesezeichen für Dokumente mit POST-Formdaten nicht möglich."
+
+#: LYMessages.c:309
+msgid "Cannot save form fields/links"
+msgstr "Form-Eingabefelder können nicht gespeichert werden"
+
+#. #define NOBOOK_HSML
+#: LYMessages.c:311
+msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
+msgstr "Lesezeichen für History-, Info-, Menü- und Listendateien nicht möglich."
+
+#. #define CONFIRM_BOOKMARK_DELETE
+#: LYMessages.c:313
+msgid "Do you really want to delete this link from your bookmark file?"
+msgstr "Diesen Link wirklich aus Lesezeichendatei entfernen?"
+
+#: LYMessages.c:314
+msgid "Malformed address."
+msgstr "Fehlgeformte Adresse."
+
+#. #define HISTORICAL_ON_MINIMAL_OFF
+#: LYMessages.c:316
+msgid "Historical comment parsing ON (Minimal is overridden)!"
+msgstr "Historische Kommentarerkennung EIN (Minimalmodus AUS)!"
+
+#. #define HISTORICAL_OFF_MINIMAL_ON
+#: LYMessages.c:318
+msgid "Historical comment parsing OFF (Minimal is in effect)!"
+msgstr "Historische Kommentarerkennung AUS (Minimalmodus EIN)!"
+
+#. #define HISTORICAL_ON_VALID_OFF
+#: LYMessages.c:320
+msgid "Historical comment parsing ON (Valid is overridden)!"
+msgstr "Historisches Kommentarparsing EIN (richtige Methode AUS)!"
+
+#. #define HISTORICAL_OFF_VALID_ON
+#: LYMessages.c:322
+msgid "Historical comment parsing OFF (Valid is in effect)!"
+msgstr "Historisches Kommentarparsing AUS (richtige Methode EIN)!"
+
+#. #define MINIMAL_ON_IN_EFFECT
+#: LYMessages.c:324
+msgid "Minimal comment parsing ON (and in effect)!"
+msgstr "Minimale Kommentarerkennung EIN (und in Effekt)!"
+
+#. #define MINIMAL_OFF_VALID_ON
+#: LYMessages.c:326
+msgid "Minimal comment parsing OFF (Valid is in effect)!"
+msgstr "Minimale Kommentarerkennung AUS (richtige Methode ist in Effekt)!"
+
+#. #define MINIMAL_ON_BUT_HISTORICAL
+#: LYMessages.c:328
+msgid "Minimal comment parsing ON (but Historical is in effect)!"
+msgstr "Minimale Kommentarerkennung EIN (aber geändert durch \"historisch\")!"
+
+#. #define MINIMAL_OFF_HISTORICAL_ON
+#: LYMessages.c:330
+msgid "Minimal comment parsing OFF (Historical is in effect)!"
+msgstr "Minimale Kommentarerkennung AUS (historische Methode ist in Effekt)!"
+
+#: LYMessages.c:331
+msgid "Soft double-quote parsing ON!"
+msgstr "Soft double-quote parsing EIN!"
+
+#: LYMessages.c:332
+msgid "Soft double-quote parsing OFF!"
+msgstr "Soft double-quote parsing AUS!"
+
+#: LYMessages.c:333
+msgid "Now using TagSoup parsing of HTML."
+msgstr "Von nun an \"TagSoup\" parsing für HTML."
+
+#: LYMessages.c:334
+msgid "Now using SortaSGML parsing of HTML!"
+msgstr "Von nun an \"SortaSGML\" parsing für HTML!"
+
+#: LYMessages.c:335
+msgid "You are already at the end of this document."
+msgstr "Schon am Ende."
+
+#: LYMessages.c:336
+msgid "You are already at the beginning of this document."
+msgstr "Schon am Anfang."
+
+#: LYMessages.c:337
+#, c-format
+msgid "You are already at page %d of this document."
+msgstr "Schon auf Seite %d in diesem Dokument."
+
+#: LYMessages.c:338
+#, c-format
+msgid "Link number %d already is current."
+msgstr "Schon auf Link Nummer %d."
+
+#: LYMessages.c:339
+msgid "You are already at the first document"
+msgstr "Schon im ersten Dokument"
+
+#: LYMessages.c:340
+msgid "There are no links above this line of the document."
+msgstr "Keine Links mehr vor dieser Zeile."
+
+#: LYMessages.c:341
+msgid "There are no links below this line of the document."
+msgstr "Keine Links mehr nach dieser Zeile."
+
+#. #define MAXLEN_REACHED_DEL_OR_MOV
+#: LYMessages.c:343
+msgid "Maximum length reached! Delete text or move off field."
+msgstr "Maximale Länge erreicht! Text löschen oder Feld verlassen."
+
+#. #define NOT_ON_SUBMIT_OR_LINK
+#: LYMessages.c:345
+msgid "You are not on a form submission button or normal link."
+msgstr "Kein Formaktivierungsbutton oder normaler Link gewählt."
+
+#. #define NEED_CHECKED_RADIO_BUTTON
+#: LYMessages.c:347
+msgid "One radio button must be checked at all times!"
+msgstr "Eine von den Radiotasten muß immer markiert sein!"
+
+#: LYMessages.c:348
+msgid "No submit button for this form, submit single text field?"
+msgstr "Kein Abschicken-Knopf für dieses Formular, einzelnes Textfeld abschicken?"
+
+#: LYMessages.c:349
+msgid "Do you want to go back to the previous document?"
+msgstr "Zurück zum vorherigen Dokument?"
+
+#: LYMessages.c:350
+msgid "Use arrows or tab to move off of field."
+msgstr "Form-Eingabefelder können mit Pfeil- or Tabulatortasten verlassen werden."
+
+#. #define ENTER_TEXT_ARROWS_OR_TAB
+#: LYMessages.c:352
+msgid "Enter text. Use arrows or tab to move off of field."
+msgstr "Text Eingeben, Feld kann mit Pfeil- or Tabulatortasten verlassen werden."
+
+#: LYMessages.c:353
+msgid "** Bad HTML!! No form action defined. **"
+msgstr "** Bad HTML!! Keine Form-Aktion definiert. **"
+
+#: LYMessages.c:354
+msgid "Bad HTML!! Unable to create popup window!"
+msgstr "Bad HTML!! Popup-Fenster kann nicht erzeugt werden!"
+
+#: LYMessages.c:355
+msgid "Unable to create popup window!"
+msgstr "Popup-Fenster kann nicht erzeugt werden!"
+
+#: LYMessages.c:356
+msgid "Goto a random URL is disallowed!"
+msgstr "Das Gehen zu beliebigen URLs ist nicht erlaubt!"
+
+#: LYMessages.c:357
+msgid "Goto a non-http URL is disallowed!"
+msgstr "Das Gehen zu anderen als http-URLs ist nicht erlaubt!"
+
+#: LYMessages.c:358
+#, c-format
+msgid "You are not allowed to goto \"%s\" URLs"
+msgstr "Das Gehen zu \"%s\"-URLs ist nicht erlaubt"
+
+#: LYMessages.c:359
+msgid "URL to open: "
+msgstr "Neuer URL: "
+
+#: LYMessages.c:360
+msgid "Edit the current Goto URL: "
+msgstr "Jetziger URL: "
+
+#: LYMessages.c:361
+msgid "Edit the previous Goto URL: "
+msgstr "Letzter URL: "
+
+#: LYMessages.c:362
+msgid "Edit a previous Goto URL: "
+msgstr "Früherer URL: "
+
+#: LYMessages.c:363
+msgid "Current document has POST data."
+msgstr "Das aktuelle Dokument ist mit POST-Daten verbunden."
+
+#: LYMessages.c:364
+msgid "Edit this document's URL: "
+msgstr "URL des gegenwärtigen Dokuments: "
+
+#: LYMessages.c:365
+msgid "Edit the current link's URL: "
+msgstr "URL dieses Links: "
+
+#: LYMessages.c:366
+msgid "You cannot edit File Management URLs"
+msgstr "Editieren von Dateimanagement-URLs (Dired-URLs) ist nicht möglich"
+
+#: LYMessages.c:367
+msgid "Enter a database query: "
+msgstr "Datenbankabfrage eingeben: "
+
+#: LYMessages.c:368
+msgid "Enter a whereis query: "
+msgstr "Suche in gegenwärtigen Dokument: "
+
+#: LYMessages.c:369
+msgid "Edit the current query: "
+msgstr "Suche ändern: "
+
+#: LYMessages.c:370
+msgid "Edit the previous query: "
+msgstr "Letzte Suche ändern: "
+
+#: LYMessages.c:371
+msgid "Edit a previous query: "
+msgstr "Vorherige Suche ändern: "
+
+#. #define USE_C_R_TO_RESUB_CUR_QUERY
+#: LYMessages.c:373
+msgid "Use Control-R to resubmit the current query."
+msgstr "Wiederholung der gegenwärtigen Abfrage kann mit ^R erzwungen werden."
+
+#: LYMessages.c:374
+msgid "Edit the current shortcut: "
+msgstr "Abgekürzter Sprung (Jump): "
+
+#: LYMessages.c:375
+msgid "Edit the previous shortcut: "
+msgstr "Letzter abgekürzter Sprung (Jump): "
+
+#: LYMessages.c:376
+msgid "Edit a previous shortcut: "
+msgstr "Vorheriger abgekürzter Sprung (Jump): "
+
+#: LYMessages.c:377
+#, c-format
+msgid "Key '%c' is not mapped to a jump file!"
+msgstr "Die Taste '%c' entspricht keiner Sprungdatei!"
+
+#: LYMessages.c:378
+msgid "Cannot locate jump file!"
+msgstr "Sprungdatei nicht gefunden!"
+
+#: LYMessages.c:379
+msgid "Cannot open jump file!"
+msgstr "Fehler beim Öffnen der Sprungdatei!"
+
+#: LYMessages.c:380
+msgid "Error reading jump file!"
+msgstr "Fehler beim Lesen der Sprungdatei!"
+
+#: LYMessages.c:381
+msgid "Out of memory reading jump file!"
+msgstr "Nicht genug Memory um Sprungdatei zu lesen!"
+
+#: LYMessages.c:382
+msgid "Out of memory reading jump table!"
+msgstr "Nicht genug Memory um Sprungtabelle zu lesen!"
+
+#: LYMessages.c:383
+msgid "No index is currently available."
+msgstr "Index zur Zeit nicht verfügbar."
+
+#. #define CONFIRM_MAIN_SCREEN
+#: LYMessages.c:385
+msgid "Do you really want to go to the Main screen?"
+msgstr "Wirklich zur Hauptseite gehen?"
+
+#: LYMessages.c:386
+msgid "You are already at main screen!"
+msgstr "Schon auf der Hauptseite!"
+
+#. #define NOT_ISINDEX
+#: LYMessages.c:388
+msgid "Not a searchable indexed document -- press '/' to search for a text string"
+msgstr "Dies ist kein abfragbares ISINDEX-Dokument -- für Textsuche '/' drücken."
+
+#. #define NO_OWNER
+#: LYMessages.c:390
+msgid "No owner is defined for this file so you cannot send a comment"
+msgstr "Besizter oder Autor unbekannt, Kommentar daher nicht möglich"
+
+#: LYMessages.c:391
+#, c-format
+msgid "No owner is defined. Use %s?"
+msgstr "Besitzeradresse nicht definiert. %s benutzen?"
+
+#: LYMessages.c:392
+msgid "Do you wish to send a comment?"
+msgstr "Kommentar schicken?"
+
+#: LYMessages.c:393
+msgid "Mail is disallowed so you cannot send a comment"
+msgstr "Mail ist nicht erlaubt, Kommentar daher nicht möglich"
+
+#: LYMessages.c:394
+msgid "The 'e'dit command is currently disabled."
+msgstr "Der Befehl 'E'dit ist zur Zeit nicht erlaubt."
+
+#: LYMessages.c:395
+msgid "External editing is currently disabled."
+msgstr "Benutzung eines externen Editors ist zur Zeit nicht erlaubt."
+
+#: LYMessages.c:396
+msgid "System error - failure to get status."
+msgstr "Systemfehler - Status konnte nicht bestimmt werden."
+
+#: LYMessages.c:397
+msgid "No editor is defined!"
+msgstr "Kein Editor ist definiert!"
+
+#: LYMessages.c:398
+msgid "The 'p'rint command is currently disabled."
+msgstr "Der Befehl 'P'rint ist zur Zeit nicht erlaubt."
+
+#: LYMessages.c:399
+msgid "Document has no Toolbar links or Banner."
+msgstr "Dokument hat keine Toolbar-Links oder \"Banner\"."
+
+#: LYMessages.c:400
+msgid "Unable to open traversal file."
+msgstr "Traversal-Datei konnte nicht geöffnet werden."
+
+#: LYMessages.c:401
+msgid "Unable to open traversal found file."
+msgstr "Traversal-Gefunden-Datei konnte nicht geöffnet werden."
+
+#: LYMessages.c:402
+msgid "Unable to open reject file."
+msgstr "Reject-Datei konnte nicht geöffnet werden."
+
+#: LYMessages.c:403
+msgid "Unable to open traversal errors output file"
+msgstr "Traversal-Fehlerdatei konnte nicht geöffnet werden."
+
+#: LYMessages.c:404
+msgid "TRAVERSAL WAS INTERRUPTED"
+msgstr "TRAVERSAL UNTERBROCHEN"
+
+#: LYMessages.c:405
+msgid "Follow link (or goto link or page) number: "
+msgstr "Folge Link Nummer (oder gehe zu Link oder Seite): "
+
+#: LYMessages.c:406
+msgid "Select option (or page) number: "
+msgstr "Optionsnummer (oder Seitennummer) wählen: "
+
+#: LYMessages.c:407
+#, c-format
+msgid "Option number %d already is current."
+msgstr "Aktuelle Option ist schon Nummer %d."
+
+#. #define ALREADY_AT_OPTION_END
+#: LYMessages.c:409
+msgid "You are already at the end of this option list."
+msgstr "Schon am Ende der Optionsliste."
+
+#. #define ALREADY_AT_OPTION_BEGIN
+#: LYMessages.c:411
+msgid "You are already at the beginning of this option list."
+msgstr "Schon am Anfang der Optionsliste."
+
+#. #define ALREADY_AT_OPTION_PAGE
+#: LYMessages.c:413
+#, c-format
+msgid "You are already at page %d of this option list."
+msgstr "Schon auf Seite %d der Optionsliste."
+
+#: LYMessages.c:414
+msgid "You have entered an invalid option number."
+msgstr "Ungültige Optionsnummer eingegeben."
+
+#: LYMessages.c:415
+msgid "** Bad HTML!! Use -trace to diagnose. **"
+msgstr "** Bad HTML!! Benutze ^T oder -trace um zu sehen was los ist. **"
+
+#: LYMessages.c:416
+msgid "Give name of file to save in"
+msgstr "Dateiname zum Speichern eingeben"
+
+#: LYMessages.c:417
+msgid "Can't save data to file -- please run WWW locally"
+msgstr "Speichern in Datei ist hier nicht möglich - Bitte localen Client benutzen."
+
+#: LYMessages.c:418
+msgid "Can't open temporary file!"
+msgstr "Temporäre Datei kann nicht geöffnet werden!"
+
+#: LYMessages.c:419
+msgid "Can't open output file! Cancelling!"
+msgstr "Ausgabedatei kann nicht geöffnet werden! Abgebrochen!"
+
+#: LYMessages.c:420
+msgid "Execution is disabled."
+msgstr "Befehlsausführung nicht erlaubt."
+
+#. #define EXECUTION_DISABLED_FOR_FILE
+#: LYMessages.c:422
+#, c-format
+msgid "Execution is not enabled for this file. See the Options menu (use %s)."
+msgstr "Ausführung für diese Datei nicht ermöglicht. Siehe Optionsmenü (Taste %s)."
+
+#. #define EXECUTION_NOT_COMPILED
+#: LYMessages.c:424
+msgid "Execution capabilities are not compiled into this version."
+msgstr "Diese Version wurde ohne die Fähigkeit zur Programmausführung kompiliert."
+
+#: LYMessages.c:425
+msgid "This file cannot be displayed on this terminal."
+msgstr "Diese Datei kann auf diesem Terminal nicht gezeigt werden."
+
+#. #define CANNOT_DISPLAY_FILE_D_OR_C
+#: LYMessages.c:427
+msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
+msgstr "Kann an diesem Terminal nicht gezeigt werden: D)ownload oder abbre(C)hen"
+
+#: LYMessages.c:428
+#, c-format
+msgid "%s D)ownload, or C)ancel"
+msgstr "%s D)ownload oder Abbru(c)h/(C)ancel"
+
+#: LYMessages.c:429
+msgid "Cancelling file."
+msgstr "Datei abgebrochen."
+
+#: LYMessages.c:430
+msgid "Retrieving file. - PLEASE WAIT -"
+msgstr "Datei wird geholt. - BITTE WARTEN -"
+
+#: LYMessages.c:431
+msgid "Enter a filename: "
+msgstr "Dateiname eingeben: "
+
+#: LYMessages.c:432
+msgid "Edit the previous filename: "
+msgstr "Letzter Dateiname: "
+
+#: LYMessages.c:433
+msgid "Edit a previous filename: "
+msgstr "Früherer Dateiname: "
+
+#: LYMessages.c:434
+msgid "Enter a new filename: "
+msgstr "Neuer Dateiname: "
+
+#: LYMessages.c:435
+msgid "File name may not begin with a dot."
+msgstr "Dateiname darf nicht mit einem Punkt beginnen."
+
+#: LYMessages.c:437
+msgid "File exists. Create higher version?"
+msgstr "Datei existiert schon. Höhere Versionsnummer erzeugen?"
+
+#: LYMessages.c:439
+msgid "File exists. Overwrite?"
+msgstr "Datei existiert schon. Überschreiben?"
+
+#: LYMessages.c:441
+msgid "Cannot write to file."
+msgstr "Speichern in Datei nicht möglich."
+
+#: LYMessages.c:442
+msgid "ERROR! - download command is misconfigured."
+msgstr "FEHLER! - Der Befehl \"Download\" ist falsch konfiguriert."
+
+#: LYMessages.c:443
+msgid "Unable to download file."
+msgstr "Download der Datei nicht möglich."
+
+#: LYMessages.c:444
+msgid "Reading directory..."
+msgstr "Verzeichnis wird gelesen..."
+
+#: LYMessages.c:445
+msgid "Building directory listing..."
+msgstr "Verzeichnisliste wird erzeugt..."
+
+#: LYMessages.c:446
+msgid "Saving..."
+msgstr "Speichern..."
+
+# This seems unused - kw
+#: LYMessages.c:447
+#, c-format
+msgid "Could not edit file '%s'."
+msgstr "Datei '%s' konnte nicht editiert werden."
+
+#: LYMessages.c:448
+msgid "Unable to access document!"
+msgstr "Zugriff auf Dokument nicht möglich!"
+
+#: LYMessages.c:449
+msgid "Could not access file."
+msgstr "Zugriff auf Datei fehlgeschlagen."
+
+#: LYMessages.c:450
+msgid "Could not access directory."
+msgstr "Zugriff auf Verzeichnis fehlgeschlagen."
+
+#: LYMessages.c:451
+msgid "Could not load data."
+msgstr "Daten konnten nicht geladen werden."
+
+#. #define CANNOT_EDIT_REMOTE_FILES
+#: LYMessages.c:453
+msgid "Lynx cannot currently (e)dit remote WWW files."
+msgstr "Lynx hat noch keine Unterstützung fürs (E)ditieren externer WWW-Dateien."
+
+#. #define CANNOT_EDIT_FIELD
+#: LYMessages.c:455
+msgid "This field cannot be (e)dited with an external editor."
+msgstr "Externer Editor ist für dieses Feld nicht anwendbar."
+
+#: LYMessages.c:456
+msgid "Bad rule"
+msgstr "Schlechte Regel in Konfiguration."
+
+#: LYMessages.c:457
+msgid "Insufficient operands:"
+msgstr "Nicht genug Operanden:"
+
+#: LYMessages.c:458
+msgid "You are not authorized to edit this file."
+msgstr "Erlaubnis zum Editieren dieser Datei verweigert."
+
+#: LYMessages.c:459
+msgid "Title: "
+msgstr "Titel: "
+
+#: LYMessages.c:460
+msgid "Subject: "
+msgstr "Betreff/Subject: "
+
+#: LYMessages.c:461
+msgid "Username: "
+msgstr "Benutzer: "
+
+#: LYMessages.c:462
+msgid "Password: "
+msgstr "Passwort: "
+
+#: LYMessages.c:463
+msgid "lynx: Username and Password required!!!"
+msgstr "lynx: Username und Password notwendig!!!"
+
+#: LYMessages.c:464
+msgid "lynx: Password required!!!"
+msgstr "lynx: Password notwendig!!!"
+
+#: LYMessages.c:465
+msgid "Clear all authorization info for this session?"
+msgstr "Alle Authorisationsdaten dieser Sitzung vergessen?"
+
+#: LYMessages.c:466
+msgid "Authorization info cleared."
+msgstr "Authorisationsdaten gelöscht."
+
+#: LYMessages.c:467
+msgid "Authorization failed. Retry?"
+msgstr "Noch nicht authorisiert. Noch mal versuchen?"
+
+#: LYMessages.c:468
+msgid "cgi support has been disabled."
+msgstr "Unterstützung für cgi ist ausgeschaltet."
+
+#. #define CGI_NOT_COMPILED
+#: LYMessages.c:470
+msgid "Lynxcgi capabilities are not compiled into this version."
+msgstr "LYNXCGI-Fähigkeit nicht eingebaut."
+
+#: LYMessages.c:471
+#, c-format
+msgid "Sorry, no known way of converting %s to %s."
+msgstr "Sorry, keine Methode bekannt um %s in %s umzuwandeln."
+
+#: LYMessages.c:472
+msgid "Unable to set up connection."
+msgstr "Vorbereitung der Verbindung fehlgeschlagen."
+
+#: LYMessages.c:473
+msgid "Unable to make connection"
+msgstr "Verbindung kann nicht hergestellt werden"
+
+#. #define MALFORMED_EXEC_REQUEST
+#: LYMessages.c:475
+msgid "Executable link rejected due to malformed request."
+msgstr "Fehlerhafte Anforderung, Ausführbarer Link wird zurückgewiesen."
+
+#. #define BADCHAR_IN_EXEC_LINK
+#: LYMessages.c:477
+#, c-format
+msgid "Executable link rejected due to `%c' character."
+msgstr "Ausführbarer Link wird zurückgewiesen, weil das Zeichen `%c' vorkommt."
+
+#. #define RELPATH_IN_EXEC_LINK
+#: LYMessages.c:479
+msgid "Executable link rejected due to relative path string ('../')."
+msgstr "Ausführbarer Link wird wegen der Zeichenfolge '../' zurückgewiesen."
+
+#. #define BADLOCPATH_IN_EXEC_LINK
+#: LYMessages.c:481
+msgid "Executable link rejected due to location or path."
+msgstr "Ausführbarer Link aufgrund des Ortes oder Dateipfades zurückgewiesen."
+
+#: LYMessages.c:482
+msgid "Mail access is disabled!"
+msgstr "Zugang zu Mail ist ausgeschaltet!"
+
+#. #define ACCESS_ONLY_LOCALHOST
+#: LYMessages.c:484
+msgid "Only files and servers on the local host can be accessed."
+msgstr "Zugang ist nur zu Dateien und Diensten der lokalen Machine gestattet."
+
+#: LYMessages.c:485
+msgid "Telnet access is disabled!"
+msgstr "Zugang zu Telnet ist ausgeschaltet!"
+
+#. #define TELNET_PORT_SPECS_DISABLED
+#: LYMessages.c:487
+msgid "Telnet port specifications are disabled."
+msgstr "Erlaubnis zur Angabe eines Ports für Telnet ist nicht eingeschaltet."
+
+#: LYMessages.c:488
+msgid "USENET news access is disabled!"
+msgstr "Zugang zu USENET news ist ausgeschaltet!"
+
+#: LYMessages.c:489
+msgid "Rlogin access is disabled!"
+msgstr "Zugang zu Rlogin ist ausgeschaltet!"
+
+#: LYMessages.c:490
+msgid "Ftp access is disabled!"
+msgstr "Zugang zu Ftp ist ausgeschaltet!"
+
+#: LYMessages.c:491
+msgid "There are no references from this document."
+msgstr "Dieses Dokument hat keine Links."
+
+#: LYMessages.c:492
+msgid "There are only hidden links from this document."
+msgstr "Dieses Dokument hat nur versteckte Links."
+
+# Seems unused now.
+#: LYMessages.c:494
+msgid "Unable to open command file."
+msgstr "Kann die Befehlsdatei nicht öffnen"
+
+#: LYMessages.c:496
+msgid "News Post Cancelled!!!"
+msgstr "News-Posting abgebrochen!"
+
+#. #define SPAWNING_EDITOR_FOR_NEWS
+#: LYMessages.c:498
+msgid "Spawning your selected editor to edit news message"
+msgstr "Ausgewählter Editor wird zum Erstellen der Nachricht gestartet."
+
+#: LYMessages.c:499
+msgid "Post this message?"
+msgstr "Message schicken?"
+
+#: LYMessages.c:500
+#, c-format
+msgid "Append '%s'?"
+msgstr "'%s' anhängen?"
+
+#: LYMessages.c:501
+msgid "Posting to newsgroup(s)..."
+msgstr "Posting zu Newsgroup(s)..."
+
+#: LYMessages.c:503
+msgid "*** You have unread mail. ***"
+msgstr "*** Du hast ungelesene Mail. ***"
+
+#: LYMessages.c:505
+msgid "*** You have mail. ***"
+msgstr "*** Du hast Mail. ***"
+
+#: LYMessages.c:507
+msgid "*** You have new mail. ***"
+msgstr "*** Du hast neue Mail. ***"
+
+#: LYMessages.c:508
+msgid "File insert cancelled!!!"
+msgstr "Dateieinfügung abgebrochen!!!"
+
+#: LYMessages.c:509
+msgid "Not enough memory for file!"
+msgstr "Nicht genug Memory für Datei!"
+
+#: LYMessages.c:510
+msgid "Can't open file for reading."
+msgstr "Datei konnte nicht zum Lesen geöffnet werden!"
+
+#: LYMessages.c:511
+msgid "File does not exist."
+msgstr "Datei nicht gefunden."
+
+#: LYMessages.c:512
+msgid "File does not exist - reenter or cancel:"
+msgstr "Datei nicht gefunden - Neueingabe oder Abbruch:"
+
+#: LYMessages.c:513
+msgid "File is not readable."
+msgstr "Datei nicht lesbar."
+
+#: LYMessages.c:514
+msgid "File is not readable - reenter or cancel:"
+msgstr "Datei nicht lesbar - Neueingabe oder Abbruch:"
+
+#: LYMessages.c:515
+msgid "Nothing to insert - file is 0-length."
+msgstr "Kein einfügbarer Text vorhanden - die Datei ist leer."
+
+#: LYMessages.c:516
+msgid "Save request cancelled!!!"
+msgstr "Wunsch zu speichern abgebrochen!!!"
+
+#: LYMessages.c:517
+msgid "Mail request cancelled!!!"
+msgstr "Wunsch Mail zu schicken abgebrochen!!!"
+
+#. #define CONFIRM_MAIL_SOURCE_PREPARSED
+#: LYMessages.c:519
+msgid "Viewing preparsed source. Are you sure you want to mail it?"
+msgstr "Quelltext ist vorverarbeitet. Wirklich schicken?"
+
+#: LYMessages.c:520
+msgid "Please wait..."
+msgstr "Bitte warten..."
+
+#: LYMessages.c:521
+msgid "Mailing file. Please wait..."
+msgstr "Datei wird als Mail geschickt. Bitte warten..."
+
+#: LYMessages.c:522
+msgid "ERROR - Unable to mail file"
+msgstr "FEHLER - Datei konnte nicht als Mail geschickt werden"
+
+#. #define CONFIRM_LONG_SCREEN_PRINT
+#: LYMessages.c:524
+#, c-format
+msgid "File is %d screens long. Are you sure you want to print?"
+msgstr "Datei ist %d Bildschirme lang. Wirklich drucken?"
+
+#: LYMessages.c:525
+msgid "Print request cancelled!!!"
+msgstr "Wunsch zu durcken abgebrochen!!!"
+
+#: LYMessages.c:526
+msgid "Press <return> to begin: "
+msgstr "Eingabetaste drücken um zu beginnen: "
+
+#: LYMessages.c:527
+msgid "Press <return> to finish: "
+msgstr "Eingabetaste drücken: "
+
+#. #define CONFIRM_LONG_PAGE_PRINT
+#: LYMessages.c:529
+#, c-format
+msgid "File is %d pages long. Are you sure you want to print?"
+msgstr "Datei ist %d Seiten lang. Wirklich drucken?"
+
+#. #define CHECK_PRINTER
+#: LYMessages.c:531
+msgid "Be sure your printer is on-line. Press <return> to start printing:"
+msgstr "Ist der Drucker auch on-line? Eingabetaste betätigen für Druckbeginn:"
+
+#: LYMessages.c:532
+msgid "ERROR - Unable to allocate file space!!!"
+msgstr "FEHLER - Nicht genug Speicherplatz für Datei!!!"
+
+#: LYMessages.c:533
+msgid "Unable to open tempfile"
+msgstr "Temporäre Datei konnte nicht geöffnet werden"
+
+#: LYMessages.c:534
+msgid "Unable to open print options file"
+msgstr "Temporäre Datei für Druckeroptionen konnte nicht geöffnet werden"
+
+#: LYMessages.c:535
+msgid "Printing file. Please wait..."
+msgstr "Datei wird gedruckt. Bitte warten..."
+
+#: LYMessages.c:536
+msgid "Please enter a valid internet mail address: "
+msgstr "Bitte gültige Internet-Mailadresse eingeben: "
+
+#: LYMessages.c:537
+msgid "ERROR! - printer is misconfigured!"
+msgstr "FEHLER! - Drucker ist falsch konfiguriert!"
+
+#: LYMessages.c:538
+msgid "Image map from POST response not available!"
+msgstr "Imagemap aus POST-Antwort nicht vorhanden!"
+
+#: LYMessages.c:539
+msgid "Misdirected client-side image MAP request!"
+msgstr "Fehlgeleitete Anforderung einer client-side Image-MAP!"
+
+#: LYMessages.c:540
+msgid "Client-side image MAP is not accessible!"
+msgstr "Client-side Image-MAP ist nicht zugänglich!"
+
+#: LYMessages.c:541
+msgid "No client-side image MAPs are available!"
+msgstr "Keinerlei client-side Image-MAPs verfügbar!"
+
+#: LYMessages.c:542
+msgid "Client-side image MAP is not available!"
+msgstr "Client-side Image-MAP ist nicht verfügbar!"
+
+#. #define OPTION_SCREEN_NEEDS_24
+#: LYMessages.c:545
+msgid "Screen height must be at least 24 lines for the Options menu!"
+msgstr "Das Optionsmenü braucht mindestens 24 Bildschirmzeilen!"
+
+#. #define OPTION_SCREEN_NEEDS_23
+#: LYMessages.c:547
+msgid "Screen height must be at least 23 lines for the Options menu!"
+msgstr "Das Optionsmenü braucht mindestens 23 Bildschirmzeilen!"
+
+#. #define OPTION_SCREEN_NEEDS_22
+#: LYMessages.c:549
+msgid "Screen height must be at least 22 lines for the Options menu!"
+msgstr "Das Optionsmenü braucht mindestens 22 Bildschirmzeilen!"
+
+#: LYMessages.c:551
+msgid "That key requires Advanced User mode."
+msgstr "Die Taste funktioniert nur im \"fortgeschrittenen\" Benutzermodus."
+
+#: LYMessages.c:552
+#, c-format
+msgid "Content-type: %s"
+msgstr "Content-Type: %s"
+
+#: LYMessages.c:553
+msgid "Command: "
+msgstr "Kommando: "
+
+#: LYMessages.c:554
+msgid "Unknown or ambiguous command"
+msgstr ""
+
+#: LYMessages.c:555
+msgid " Version "
+msgstr " Version "
+
+#: LYMessages.c:556
+msgid " first"
+msgstr "erster"
+
+#: LYMessages.c:557
+msgid ", guessing..."
+msgstr " (Versuch zu raten...)"
+
+#: LYMessages.c:558
+msgid "Permissions for "
+msgstr "Zugriffsberechtigung für "
+
+#: LYMessages.c:559
+msgid "Select "
+msgstr "Wähle "
+
+#: LYMessages.c:560
+msgid "capital letter"
+msgstr "Großbuchstaben"
+
+#: LYMessages.c:561
+msgid " of option line,"
+msgstr " der Optionszeile,"
+
+#: LYMessages.c:562
+msgid " to save,"
+msgstr " um zu speichern,"
+
+#: LYMessages.c:563
+msgid " to "
+msgstr " um zu "
+
+#: LYMessages.c:564
+msgid " or "
+msgstr " oder "
+
+#: LYMessages.c:565
+msgid " index"
+msgstr "-Index"
+
+#: LYMessages.c:566
+msgid " to return to Lynx."
+msgstr " für Rückkehr zu Lynx."
+
+#: LYMessages.c:567
+msgid "Accept Changes"
+msgstr "Änderungen akzeptieren"
+
+#: LYMessages.c:568
+msgid "Reset Changes"
+msgstr "Änderungen zurücknehmen"
+
+#: LYMessages.c:569
+msgid "Left Arrow cancels changes"
+msgstr "Linke Pfeiltaste nimmt zurück"
+
+#: LYMessages.c:570
+msgid "Save options to disk"
+msgstr "Optionen permanent speichern"
+
+#: LYMessages.c:571
+msgid "Hit RETURN to accept entered data."
+msgstr "RETURN (Eingabetaste) für Bestätigung."
+
+#. #define ACCEPT_DATA_OR_DEFAULT
+#: LYMessages.c:573
+msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
+msgstr "RETURN (Eingabetaste) für Bestätigung, oder Feld leermachen für Vorgabewert."
+
+#: LYMessages.c:574
+msgid "Value accepted!"
+msgstr "Wert akzeptiert!"
+
+#. #define VALUE_ACCEPTED_WARNING_X
+#: LYMessages.c:576
+msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
+msgstr "Wert akzeptiert! -- WARNUNG: Lynx ist für X Window System konfiguriert!"
+
+#. #define VALUE_ACCEPTED_WARNING_NONX
+#: LYMessages.c:578
+msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
+msgstr "Wert akzeptiert! -- WARNUNG: Lynx ist NICHT für X Window System konfiguriert!"
+
+#: LYMessages.c:579
+msgid "You are not allowed to change which editor to use!"
+msgstr "Es ist nicht erlaubt, die Auswahl des Editors zu ändern!"
+
+#: LYMessages.c:580
+msgid "Failed to set DISPLAY variable!"
+msgstr "DISPLAY-Variable konnte nicht gesetzt werden!"
+
+#: LYMessages.c:581
+msgid "Failed to clear DISPLAY variable!"
+msgstr "DISPLAY-Variable konnte nicht gelöscht werden!"
+
+#. #define BOOKMARK_CHANGE_DISALLOWED
+#: LYMessages.c:583
+msgid "You are not allowed to change the bookmark file!"
+msgstr "Änderung der Lesezeichendatei ist nicht erlaubt!"
+
+#: LYMessages.c:584
+msgid "Terminal does not support color"
+msgstr "Terminal hat keine Unterstützung für Farbe"
+
+#: LYMessages.c:585
+#, c-format
+msgid "Your '%s' terminal does not support color."
+msgstr "Das Terminal vom Typ '%s' hat keine Unterstützung für Farbe."
+
+#: LYMessages.c:586
+msgid "Access to dot files is disabled!"
+msgstr "Zugang zu Dateien, die mit Punkt beginnen, ist nicht erlaubt!"
+
+#. #define UA_NO_LYNX_WARNING
+#: LYMessages.c:588
+msgid "User-Agent string does not contain \"Lynx\" or \"L_y_n_x\""
+msgstr "Die Kennung des Benutzer-Agenten enthält weder \\\"Lynx\\\" noch \\\"L_y_n_x\\\""
+
+#. #define UA_PLEASE_USE_LYNX
+#: LYMessages.c:590
+msgid "Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional deception!"
+msgstr "Benutze \\\"L_y_n_x\\\" oder \\\"Lynx\\\" im Benutzer-Agenten. Anderenfalls sieht es nach bewusster Täuschung aus."
+
+#. #define UA_CHANGE_DISABLED
+#: LYMessages.c:592
+msgid "Changing of the User-Agent string is disabled!"
+msgstr "Ändern der Kennung des Benutzer-Agenten ist außer Betrieb!"
+
+#. #define CHANGE_OF_SETTING_DISALLOWED
+#: LYMessages.c:594
+msgid "You are not allowed to change this setting."
+msgstr "Das Ändern dieser Einstellung ist nicht erlaubt."
+
+#: LYMessages.c:595
+msgid "Saving Options..."
+msgstr "Optionen speichern..."
+
+#: LYMessages.c:596
+msgid "Options saved!"
+msgstr "Optionen gespeichert!"
+
+#: LYMessages.c:597
+msgid "Unable to save Options!"
+msgstr "Optionen konnten nicht gespeichert werten!"
+
+#: LYMessages.c:598
+msgid " 'r' to return to Lynx "
+msgstr " 'r' für Rückkehr zu Lynx "
+
+#: LYMessages.c:599
+msgid " '>' to save, or 'r' to return to Lynx "
+msgstr " '>' um zu speichern, oder 'r' für Rückkehr zu Lynx "
+
+#. #define ANY_KEY_CHANGE_RET_ACCEPT
+#: LYMessages.c:601
+msgid "Hit any key to change value; RETURN to accept."
+msgstr "Beliebige Taste drücken um Wert zu verändern; Eingabetaste zum Akzeptieren."
+
+#: LYMessages.c:602
+msgid "Error uncompressing temporary file!"
+msgstr "Temporäre Datei konnte nicht dekomprimiert werden!"
+
+#: LYMessages.c:603
+msgid "Unsupported URL scheme!"
+msgstr "Ununterstütztes URL-Schema!"
+
+#: LYMessages.c:604
+msgid "Unsupported data: URL! Use SHOWINFO, for now."
+msgstr "Der URL-Typ \"data:\" ist nicht unterstützt. Probier die '=' Taste."
+
+#: LYMessages.c:605
+msgid "Redirection limit of 10 URL's reached."
+msgstr "Redirection-Limit von 10 URLs erreicht."
+
+#: LYMessages.c:606
+msgid "Illegal redirection URL received from server!"
+msgstr "Der Server hat einen ungültigen Redirection-URL geschickt!"
+
+#. #define SERVER_ASKED_FOR_REDIRECTION
+#: LYMessages.c:608
+#, c-format
+msgid "Server asked for %d redirection of POST content to"
+msgstr "Server verlangte mit Status %d Umleitung von POST-Daten zu"
+
+#: LYMessages.c:611
+msgid "P)roceed, use G)ET or C)ancel "
+msgstr "P)OST, in G)ET umwandeln oder Abbru(c)h/(C)ancel "
+
+#: LYMessages.c:612
+msgid "P)roceed, or C)ancel "
+msgstr "Weitermachen/(P)roceed oder Abbruch/(C)ancel "
+
+#. #define ADVANCED_POST_GET_REDIRECT
+#: LYMessages.c:614
+msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
+msgstr "Umleitung von POST-Daten. P)OST, U)RL zeigen, G)ET, oder Abbre(C)hen"
+
+#. #define ADVANCED_POST_REDIRECT
+#: LYMessages.c:616
+msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
+msgstr "Umleitung von POST-Daten. Weiter/(P)roceed, U)RL zeigen oder Abbre(C)en"
+
+#. #define CONFIRM_POST_RESUBMISSION
+#: LYMessages.c:618
+msgid "Document from Form with POST content. Resubmit?"
+msgstr "Dokument hat POST-Daten, d.h. bereits gesandten Forminhalt. POST wiederholen?"
+
+#. #define CONFIRM_POST_RESUBMISSION_TO
+#: LYMessages.c:620
+#, c-format
+msgid "Resubmit POST content to %s ?"
+msgstr "POST-Daten neu senden zu %s ?"
+
+#. #define CONFIRM_POST_LIST_RELOAD
+#: LYMessages.c:622
+#, c-format
+msgid "List from document with POST data. Reload %s ?"
+msgstr "Liste für Dokuments mit Formdaten. %s neu laden?"
+
+#. #define CONFIRM_POST_DOC_HEAD
+#: LYMessages.c:624
+msgid "Document from POST action, HEAD may not be understood. Proceed?"
+msgstr "Dokument is Ergebnis einer POST-Aktion, HEAD vielleicht unanwendbar. Weiter?"
+
+#. #define CONFIRM_POST_LINK_HEAD
+#: LYMessages.c:626
+msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
+msgstr "Formzugriffsmethode ist POST, HEAD vielleicht unanwendbar. Weiter?"
+
+#: LYMessages.c:627
+msgid "Proceed without a username and password?"
+msgstr "Weitermachen ohne Username und Password?"
+
+#: LYMessages.c:628
+#, c-format
+msgid "Proceed (%s)?"
+msgstr "Weiter (%s)?"
+
+#: LYMessages.c:629
+msgid "Cannot POST to this host."
+msgstr "POST nicht möglich für diesen Host."
+
+#: LYMessages.c:630
+msgid "POST not supported for this URL - ignoring POST data!"
+msgstr "POST nicht möglich für diesen URL - POST-Daten werden ignoriert!"
+
+#: LYMessages.c:631
+msgid "Discarding POST data..."
+msgstr "POST-Daten weggeworfen..."
+
+#: LYMessages.c:632
+msgid "Document will not be reloaded!"
+msgstr "Dokument wird nicht zwangsgeladen!"
+
+#: LYMessages.c:633
+msgid "Location: "
+msgstr "Location: "
+
+#: LYMessages.c:634
+#, c-format
+msgid "'%s' not found!"
+msgstr "'%s' nicht gefunden!"
+
+#: LYMessages.c:635
+msgid "Default Bookmark File"
+msgstr "Lesezeichendatei wenn nicht angegeben"
+
+#: LYMessages.c:636
+msgid "Screen too small! (8x35 min)"
+msgstr "Fenster zu klein, 8x35 nötig"
+
+#: LYMessages.c:637
+msgid "Select destination or ^G to Cancel: "
+msgstr "Ziel eingeben, oder ^G für Abbruch: "
+
+#. #define MULTIBOOKMARKS_SELECT
+#: LYMessages.c:639
+msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
+msgstr "Unterlesezeichendatein wählen, '=' für Menü oder ^G für Abbruch:"
+
+#. #define MULTIBOOKMARKS_SELF
+#: LYMessages.c:641
+msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
+msgstr "L)ink in dieser Lesezeichendatei duplizieren oder abbre(C)hen? (l,c): "
+
+#: LYMessages.c:642
+msgid "Multiple bookmark support is not available."
+msgstr "Multi-Datei-Lesezeichen nicht verfügbar."
+
+#: LYMessages.c:643
+#, c-format
+msgid " Select Bookmark (screen %d of %d)"
+msgstr " Wähle Lesezeichensammlung (Seite %d von %d)"
+
+#: LYMessages.c:644
+msgid " Select Bookmark"
+msgstr " Wähle Lesezeichensammlung"
+
+#. #define MULTIBOOKMARKS_EHEAD_MASK
+#: LYMessages.c:646
+#, c-format
+msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
+msgstr "BESCHREIBUNG und DATEIPFAD für Lesezeichen ändern (%d von 2)"
+
+#. #define MULTIBOOKMARKS_EHEAD
+#: LYMessages.c:648
+msgid " Editing Bookmark DESCRIPTION and FILEPATH"
+msgstr " BESCHREIBUNG und DATEIPFAD für Lesezeichen ändern"
+
+#: LYMessages.c:649
+msgid "Letter: "
+msgstr "Buchstabe: "
+
+#. #define USE_PATH_OFF_HOME
+#: LYMessages.c:652
+msgid "Use a filepath off your login directory in SHELL syntax!"
+msgstr "Dateipfad relativ zum Home-Verzeichnis in SHELL-Syntax angeben!"
+
+#: LYMessages.c:654
+msgid "Use a filepath off your home directory!"
+msgstr "Dateipfad relativ zum Home-Verzeichnis angeben!"
+
+#. #define MAXLINKS_REACHED
+#: LYMessages.c:657
+msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
+msgstr "Max. Links/Bildschirm erreicht! Probier Halbseiten- oder Zweizeilenbewegung."
+
+#. #define MAXHIST_REACHED
+#: LYMessages.c:659
+msgid "History List maximum reached! Document not pushed."
+msgstr "Maximum für History-Liste erreicht! Dokument nicht auf Stapel abgelegt."
+
+#: LYMessages.c:660
+msgid "No previously visited links available!"
+msgstr "Noch keine schon besuchten Links!"
+
+#: LYMessages.c:661
+msgid "Memory exhausted! Program aborted!"
+msgstr "Zu wenig Speicherplatz! Programm abgebrochen!"
+
+#: LYMessages.c:662
+msgid "Memory exhausted! Aborting..."
+msgstr "Zu wenig Speicherplatz! Programm bricht ab..."
+
+#: LYMessages.c:663
+msgid "Not enough memory!"
+msgstr "Nicht genug Speicher!"
+
+#: LYMessages.c:664
+msgid "Directory/File Manager not available"
+msgstr "Verzeichnis- und Dateimanager (Dired) nicht verfügbar"
+
+#: LYMessages.c:665
+msgid "HREF in BASE tag is not an absolute URL."
+msgstr "HREF in BASE-Tag ist kein absoluter URL."
+
+#: LYMessages.c:666
+msgid "Location URL is not absolute."
+msgstr "Location-URL ist nicht absolut."
+
+#: LYMessages.c:667
+msgid "Refresh URL is not absolute."
+msgstr "Refresh-URL ist nicht absolut."
+
+#. #define SENDING_MESSAGE_WITH_BODY_TO
+#: LYMessages.c:669
+msgid ""
+"You are sending a message with body to:\n"
+" "
+msgstr ""
+"Nachricht mit vergegebenem Inhalt wird geschickt an:\n"
+" "
+
+#: LYMessages.c:670
+msgid ""
+"You are sending a comment to:\n"
+" "
+msgstr ""
+"Kommentar wird geschickt an:\n"
+" "
+
+#: LYMessages.c:671
+msgid ""
+"\n"
+" With copy to:\n"
+" "
+msgstr ""
+"\n"
+" Mit Kopie an:\n"
+" "
+
+#: LYMessages.c:672
+msgid ""
+"\n"
+" With copies to:\n"
+" "
+msgstr ""
+"\n"
+" Mit Kopien an:\n"
+" "
+
+#. #define CTRL_G_TO_CANCEL_SEND
+#: LYMessages.c:674
+msgid ""
+"\n"
+"\n"
+"Use Ctrl-G to cancel if you do not want to send a message\n"
+msgstr ""
+"\n"
+"\n"
+"Ctrl-G zum Abbrechen verwenden, falls keine Nachricht geschickt werden soll.\n"
+
+#. #define ENTER_NAME_OR_BLANK
+#: LYMessages.c:676
+msgid ""
+"\n"
+" Please enter your name, or leave it blank to remain anonymous\n"
+msgstr ""
+"\n"
+" Bitte eigenen Namen eingeben, oder für Anonymität leerlassen\n"
+
+#. #define ENTER_MAIL_ADDRESS_OR_OTHER
+#: LYMessages.c:678
+msgid ""
+"\n"
+" Please enter a mail address or some other\n"
+msgstr ""
+"\n"
+"\n"
+" Bitte eigene Mailadresse oder ander Kontaktadresse\n"
+
+#. #define MEANS_TO_CONTACT_FOR_RESPONSE
+#: LYMessages.c:680
+msgid " means to contact you, if you desire a response.\n"
+msgstr " eingeben, fall eine Antwort gewünscht wird.\n"
+
+#: LYMessages.c:681
+msgid ""
+"\n"
+" Please enter a subject line.\n"
+msgstr ""
+"\n"
+" Bitte eine Zeile eingeben für Betreff/Subject.\n"
+
+#. #define ENTER_ADDRESS_FOR_CC
+#: LYMessages.c:683
+msgid ""
+"\n"
+" Enter a mail address for a CC of your message.\n"
+msgstr ""
+"\n"
+" Mailadresse für zusätztliche Kopie (CC) eingeben.\n"
+
+#: LYMessages.c:684
+msgid " (Leave blank if you don't want a copy.)\n"
+msgstr " (Kann leergelassen werden, falls keine Kopie erwünscht ist.)\n"
+
+#: LYMessages.c:685
+msgid ""
+"\n"
+" Please review the message body:\n"
+"\n"
+msgstr ""
+"\n"
+" Bitte den Inhalt der Nachricht überprüfen:\n"
+"\n"
+
+#: LYMessages.c:686
+msgid ""
+"\n"
+"Press RETURN to continue: "
+msgstr ""
+"\n"
+"RETURN (Eingabetaste) um weiterzumachen: "
+
+#: LYMessages.c:687
+msgid ""
+"\n"
+"Press RETURN to clean up: "
+msgstr ""
+"\n"
+"RETURN (Eingabetaste) um aufzuräumen: "
+
+#: LYMessages.c:688
+msgid " Use Control-U to erase the default.\n"
+msgstr " Die Vorgaben können mit ^U gelöscht werden.\n"
+
+#: LYMessages.c:689
+msgid ""
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+" Bitte Nachricht unten eingeben."
+
+#. #define ENTER_PERIOD_WHEN_DONE_A
+#: LYMessages.c:691 src/LYNews.c:380
+msgid ""
+"\n"
+" When you are done, press enter and put a single period (.)"
+msgstr ""
+"\n"
+" Wenn du fertig bist, Eingabetaste drücken und einen einzelnen Punkt (.)"
+
+#. #define ENTER_PERIOD_WHEN_DONE_B
+#: LYMessages.c:693 src/LYNews.c:381
+msgid ""
+"\n"
+" on a line and press enter again."
+msgstr ""
+"\n"
+" in neue Zeile schreiben, dann noch einmal Eingabetaste."
+
+#. Cookies messages
+#. #define ADVANCED_COOKIE_CONFIRMATION
+#: LYMessages.c:697
+#, c-format
+msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
+msgstr "Keks von %s: %.*s=%.*s ?diesen(Y/N)/immer(Akz./Verw.)"
+
+#. #define INVALID_COOKIE_DOMAIN_CONFIRMATION
+#: LYMessages.c:699
+#, c-format
+msgid "Accept invalid cookie domain=%s for '%s'?"
+msgstr "Schlechten Keks domain=%s von '%s' nehmen?"
+
+#. #define INVALID_COOKIE_PATH_CONFIRMATION
+#: LYMessages.c:701
+#, c-format
+msgid "Accept invalid cookie path=%s as a prefix of '%s'?"
+msgstr "Keks: path=%s als Präfix von '%s' akzeptieren?"
+
+#: LYMessages.c:702
+msgid "Allowing this cookie."
+msgstr "Dieser Keks wird erlaubt."
+
+#: LYMessages.c:703
+msgid "Rejecting this cookie."
+msgstr "Dieser Keks wird zurückgewiesen."
+
+#: LYMessages.c:704
+msgid "The Cookie Jar is empty."
+msgstr "Der Keksbeutel ist leer."
+
+#. #define ACTIVATE_TO_GOBBLE
+#: LYMessages.c:706
+msgid "Activate links to gobble up cookies or entire domains,"
+msgstr "Links aktivieren um einzelne Kekse oder ganze Domains zu vernichten,"
+
+#: LYMessages.c:707
+msgid "or to change a domain's 'allow' setting."
+msgstr "oder um den 'erlaubt'-Zustand für eine Domain zu ändern."
+
+#: LYMessages.c:708
+msgid "(Cookies never allowed.)"
+msgstr "(Kekse nie erlaubt.)"
+
+#: LYMessages.c:709
+msgid "(Cookies always allowed.)"
+msgstr "(Kekse immer gern gesehen.)"
+
+#: LYMessages.c:710
+msgid "(Cookies allowed via prompt.)"
+msgstr "(Kekse erlaubt nach Bestätigung.)"
+
+# Not used any more in latest cookie code.
+#: LYMessages.c:711
+msgid "(Persistent Cookies.)"
+msgstr "(Beständige Kekse.)"
+
+#: LYMessages.c:712
+msgid "(No title.)"
+msgstr "(ohne Titel)"
+
+#: LYMessages.c:713
+msgid "(No name.)"
+msgstr "(kein Name.)"
+
+#: LYMessages.c:714
+msgid "(No value.)"
+msgstr "(kein Wert.)"
+
+#: LYMessages.c:715
+msgid "None"
+msgstr "keine"
+
+#: LYMessages.c:716
+msgid "(End of session.)"
+msgstr "(Ende der Session.)"
+
+#: LYMessages.c:717
+msgid "Delete this cookie?"
+msgstr "Diesen Keks wegschmeißen?"
+
+#: LYMessages.c:718
+msgid "The cookie has been eaten!"
+msgstr "Der Keks is wechgehaun!"
+
+#: LYMessages.c:719
+msgid "Delete this empty domain?"
+msgstr "Leere Domain entfernen?"
+
+#: LYMessages.c:720
+msgid "The domain has been eaten!"
+msgstr "Fort ist sie!"
+
+#. #define DELETE_COOKIES_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:722
+msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D)iese Kekse weg, (immer)(A)kzept/ (P)rompt/ (immer)(V)erweig, oder Abbru(C)h? "
+
+#. #define DELETE_DOMAIN_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:724
+msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D)omain weg, (immer) (A)kzept. / (P)rompt / (immer)(V)erweig., oder Abbru(C)h? "
+
+#: LYMessages.c:725
+msgid "All cookies in the domain have been eaten!"
+msgstr "Keine Kekse mehr da!"
+
+#: LYMessages.c:726
+#, c-format
+msgid "'A'lways allowing from domain '%s'."
+msgstr "'A'lle Kekse für Domain '%s' erlaubt."
+
+#: LYMessages.c:727
+#, c-format
+msgid "ne'V'er allowing from domain '%s'."
+msgstr "Kekse 'V'erboten für Domain '%s'."
+
+#: LYMessages.c:728
+#, c-format
+msgid "'P'rompting to allow from domain '%s'."
+msgstr "'P'rompte Frage wenn Kekse kommen für Domain '%s'."
+
+#: LYMessages.c:729
+msgid "Delete all cookies in this domain?"
+msgstr "Alle Kekse für diese Domain wegwerfen?"
+
+#: LYMessages.c:730
+msgid "All of the cookies in the jar have been eaten!"
+msgstr "Der Keksbeutel ist total leer!"
+
+#: LYMessages.c:732
+msgid "Port 19 not permitted in URLs."
+msgstr "Port 19 nicht erlaubt in URLs."
+
+#: LYMessages.c:733
+msgid "Port 25 not permitted in URLs."
+msgstr "Port 25 nicht erlaubt in URLs."
+
+#: LYMessages.c:734
+#, c-format
+msgid "Port %lu not permitted in URLs."
+msgstr "Port %lu nicht erlaubt in URLs."
+
+#: LYMessages.c:735
+msgid "URL has a bad port field."
+msgstr "URL hat ungültigen Port."
+
+#: LYMessages.c:736
+msgid "Maximum nesting of HTML elements exceeded."
+msgstr "Maximale Schachtelungstiefe für HTML-Elemente überschritten."
+
+#: LYMessages.c:737
+msgid "Bad partial reference! Stripping lead dots."
+msgstr "Link mit schlechter partieller URL-Reference! '../' wird entfernt."
+
+#: LYMessages.c:738
+msgid "Trace Log open failed. Trace off!"
+msgstr "Fehler beim Öffnen der Trace-Logdatei. Trace AUS!"
+
+#: LYMessages.c:739
+msgid "Lynx Trace Log"
+msgstr "Lynx Trace Log"
+
+#: LYMessages.c:740
+msgid "No trace log has been started for this session."
+msgstr "Trace Log in dieser Session bislang nicht gestartet."
+
+#. #define MAX_TEMPCOUNT_REACHED
+#: LYMessages.c:742
+msgid "The maximum temporary file count has been reached!"
+msgstr "Die maximale Anzahl temporärer Dateien ist erreicht!"
+
+#. #define FORM_VALUE_TOO_LONG
+#: LYMessages.c:744
+msgid "Form field value exceeds buffer length! Trim the tail."
+msgstr "Wert des Formfeldes länger as Pufferspeicher! Schwanz ab."
+
+#. #define FORM_TAIL_COMBINED_WITH_HEAD
+#: LYMessages.c:746
+msgid "Modified tail combined with head of form field value."
+msgstr "Modifizierter Schwanz mit dem Kopf des Formfeldwertes kombiniert."
+
+#. HTFile.c
+#: LYMessages.c:749
+msgid "Directory"
+msgstr "Verzeichnis"
+
+#: LYMessages.c:750
+msgid "Directory browsing is not allowed."
+msgstr "Das Durchstöbern von Dateiverzeichnissen ist untersagt."
+
+#: LYMessages.c:751
+msgid "Selective access is not enabled for this directory"
+msgstr "Selektiver Zugriff ist für dieses Verzeichnis nicht möglich"
+
+#: LYMessages.c:752
+msgid "Multiformat: directory scan failed."
+msgstr "Multiformat: Suche im Verzeichnis fehlgeschlagen."
+
+#: LYMessages.c:753
+msgid "This directory is not readable."
+msgstr "Dieses Verzeichnis kann nicht gelesen werden."
+
+#: LYMessages.c:754
+msgid "Can't access requested file."
+msgstr "Die gewünschte Datei ist nicht zugänglich."
+
+#: LYMessages.c:755
+msgid "Could not find suitable representation for transmission."
+msgstr "Keine passende Datei von akzeptablem Typ gefunden."
+
+#: LYMessages.c:756
+msgid "Could not open file for decompression!"
+msgstr "Datei konnte nicht für Dekompression geöffnet werden!"
+
+#: LYMessages.c:757
+msgid "Files:"
+msgstr "Dateien:"
+
+#: LYMessages.c:758
+msgid "Subdirectories:"
+msgstr "Unterverzeichnisse:"
+
+#: LYMessages.c:759
+msgid " directory"
+msgstr " Verzeichnis"
+
+#: LYMessages.c:760
+msgid "Up to "
+msgstr "Rauf nach "
+
+#: LYMessages.c:761
+msgid "Current directory is "
+msgstr "Dies Verzeichnis ist "
+
+#. HTGopher.c
+#: LYMessages.c:764
+msgid "No response from server!"
+msgstr "Keine Antwort vom Server!"
+
+#: LYMessages.c:765
+msgid "CSO index"
+msgstr "CSO index"
+
+#: LYMessages.c:766
+msgid ""
+"\n"
+"This is a searchable index of a CSO database.\n"
+msgstr ""
+"\n"
+"Dies is ein abfragbarer Index einer CSO-Datenbank.\n"
+
+#: LYMessages.c:767
+msgid "CSO Search Results"
+msgstr "CSO Suchresultate"
+
+#: LYMessages.c:768
+#, c-format
+msgid "Seek fail on %s\n"
+msgstr "Suchfehler auf %s\n"
+
+#: LYMessages.c:769
+msgid ""
+"\n"
+"Press the 's' key and enter search keywords.\n"
+msgstr ""
+"\n"
+"Drück die Taste 's' und dann gib Schbegriffe ein.\n"
+
+#: LYMessages.c:770
+msgid ""
+"\n"
+"This is a searchable Gopher index.\n"
+msgstr ""
+"\n"
+"Dies ist ein abfragbarer Gopher-Index.\n"
+
+#: LYMessages.c:771
+msgid "Gopher index"
+msgstr "Gopher-Index"
+
+#: LYMessages.c:772
+msgid "Gopher Menu"
+msgstr "Gophermenü"
+
+#: LYMessages.c:773
+msgid " Search Results"
+msgstr " Suchergebnisse"
+
+#: LYMessages.c:774
+msgid "Sending CSO/PH request."
+msgstr "CSO/PH-Request wird geschickt."
+
+#: LYMessages.c:775
+msgid "Sending Gopher request."
+msgstr "Gopher-Request wird geschickt."
+
+#: LYMessages.c:776
+msgid "CSO/PH request sent; waiting for response."
+msgstr "CSO/PH-Request geschickt; warten auf Antwort."
+
+#: LYMessages.c:777
+msgid "Gopher request sent; waiting for response."
+msgstr "Gopher-Request geschickt; warten auf Godot."
+
+#: LYMessages.c:778
+msgid ""
+"\n"
+"Please enter search keywords.\n"
+msgstr ""
+"\n"
+"Bitte Suchwörter eingeben.\n"
+
+#: LYMessages.c:779
+msgid ""
+"\n"
+"The keywords that you enter will allow you to search on a"
+msgstr ""
+"\n"
+"Die einzugebenden Wörter erlauben die Suche nach einem"
+
+#: LYMessages.c:780
+msgid " person's name in the database.\n"
+msgstr " Personennamen in der Datenbank.\n"
+
+#. HTNews.c
+#: LYMessages.c:783
+msgid "Connection closed ???"
+msgstr "Verbindung zugemacht ???"
+
+#: LYMessages.c:784
+msgid "Cannot open temporary file for news POST."
+msgstr "Temporäre Datei für das Posten der News-Message kann nicht geöffnet werden."
+
+#: LYMessages.c:785
+msgid "This client does not contain support for posting to news with SSL."
+msgstr "Dieses Clientprogramm hat keine Unterstützung für das News-Posten mit SSL."
+
+# These functions are never being called.
+#. HTStyle.c
+#: LYMessages.c:788
+#, c-format
+msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
+msgstr "Stil %d `%s' SGML:%s. Schrift %s %.1f point.\n"
+
+# These functions are never being called.
+#: LYMessages.c:789
+#, c-format
+msgid "\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
+msgstr "\tEinrückungen: Erste=%.0f, Andere=%.0f, Höhe=%.1f, Nachklapp=%.1f\n"
+
+# These functions are never being called.
+#: LYMessages.c:790
+#, c-format
+msgid "\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
+msgstr "\tAusrichten=%d, %d tabs. (%.0f vor, %.0f danach)\n"
+
+# These functions are never being called.
+#: LYMessages.c:791
+#, c-format
+msgid "\t\tTab kind=%d at %.0f\n"
+msgstr "\t\tTabulator-Art=%d bei %.0f\n"
+
+#. HTTP.c
+#: LYMessages.c:794
+msgid "Can't proceed without a username and password."
+msgstr "Weitermachen ohne Username und Password nicht möglich."
+
+#: LYMessages.c:795
+msgid "Can't retry with authorization! Contact the server's WebMaster."
+msgstr "Authorisierungversuche fehlgeschlagen! Webmaster kontaktieren."
+
+#: LYMessages.c:796
+msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
+msgstr "Proxy-Authorisierungversuche fehlgeschlagen! Frag den Cachemaster oder so..."
+
+#: LYMessages.c:797
+msgid "Retrying with proxy authorization information."
+msgstr "Wir versuchen's noch einmal, mit Proxy-Authorisierungsinfo."
+
+#. HTWAIS.c
+#: LYMessages.c:800
+msgid "HTWAIS: Return message too large."
+msgstr "HTWAIS: Message zu lang."
+
+#: LYMessages.c:801
+msgid "Enter WAIS query: "
+msgstr "Gib WAIS-Frage ein: "
+
+#. Miscellaneous status
+#: LYMessages.c:804
+msgid "Retrying as HTTP0 request."
+msgstr "Wir versuchen's noch einmal, als HTTP0-Request."
+
+#: LYMessages.c:805
+#, c-format
+msgid "Transferred %d bytes"
+msgstr "%d bytes übertragen"
+
+#: LYMessages.c:806
+msgid "Data transfer complete"
+msgstr "Übertragung komplett."
+
+#: LYMessages.c:807
+#, c-format
+msgid "Error processing line %d of %s\n"
+msgstr "Fehler beim Verarbeiten von Zeile %d von %s\n"
+
+#. Lynx internal page titles
+#: LYMessages.c:810
+msgid "Address List Page"
+msgstr "Linkadressenliste"
+
+#: LYMessages.c:811
+msgid "Bookmark file"
+msgstr "Lesezeichendatei"
+
+#: LYMessages.c:812
+msgid "Configuration Definitions"
+msgstr "Konfiguration"
+
+#: LYMessages.c:813
+msgid "Cookie Jar"
+msgstr "Keksbeutel (Cookie Jar)"
+
+#: LYMessages.c:814
+msgid "Current Key Map"
+msgstr "Aktuelle Tastaturbelegung"
+
+#: LYMessages.c:815
+msgid "File Management Options"
+msgstr "Dateimanagement-Menü"
+
+#: LYMessages.c:816
+msgid "Download Options"
+msgstr "Download-Menü"
+
+#: LYMessages.c:817
+msgid "History Page"
+msgstr "History- oder Geschichtsseite"
+
+#: LYMessages.c:818
+msgid "List Page"
+msgstr "Linkliste"
+
+#: LYMessages.c:819
+msgid "Lynx.cfg Information"
+msgstr "Informationen über lynx.cfg"
+
+#: LYMessages.c:820
+msgid "Converted Mosaic Hotlist"
+msgstr "Konvertierte Mosaic-Hotlist"
+
+#: LYMessages.c:821
+msgid "Options Menu"
+msgstr "Menü der persönlichen Konfigurationsoptionen"
+
+#: LYMessages.c:822
+msgid "File Permission Options"
+msgstr "Dateizugriffserlaubnis Ändern"
+
+#: LYMessages.c:823
+msgid "Printing Options"
+msgstr "Druckeroptionen"
+
+#: LYMessages.c:824
+msgid "Information about the current document"
+msgstr "Informationen über das aktuelle Dokument"
+
+#: LYMessages.c:825
+msgid "Your recent statusline messages"
+msgstr "Letzte Meldungen von der Statuszeile"
+
+#: LYMessages.c:826
+msgid "Upload Options"
+msgstr "Upload-Optionen"
+
+#: LYMessages.c:827
+msgid "Visited Links Page"
+msgstr "Seite der besuchten Links"
+
+#. CONFIG_DEF_TITLE subtitles
+#: LYMessages.c:830
+msgid "See also"
+msgstr "Siehe auch"
+
+#: LYMessages.c:831
+msgid "your"
+msgstr "dein"
+
+#: LYMessages.c:832
+msgid "for runtime options"
+msgstr "für Runtime-Optionen"
+
+#: LYMessages.c:833
+msgid "compile time options"
+msgstr "Einkompilierte Optionen"
+
+#: LYMessages.c:834
+msgid "latest release"
+msgstr "letzte Fassung"
+
+#: LYMessages.c:835
+msgid "pre-release version"
+msgstr "Development-Version"
+
+#: LYMessages.c:836
+msgid "development version"
+msgstr "Development-Version"
+
+#. #define AUTOCONF_CONFIG_CACHE
+#: LYMessages.c:838
+msgid ""
+"The following data were derived during the automatic configuration/build\n"
+"process of this copy of Lynx. When reporting a bug, please include a copy\n"
+"of this page."
+msgstr ""
+"Die folgenden Informationen wurden beim Konfigurieren/Zusammenbau dieser\n"
+"Kopie von Lynx automatisch hergeleitet. Beim Melden eines Bugs bitte eine\n"
+"Kopie dieser Seite beifügen."
+
+#. #define AUTOCONF_LYNXCFG_H
+#: LYMessages.c:842
+msgid ""
+"The following data were used as automatically-configured compile-time\n"
+"definitions when this copy of Lynx was built."
+msgstr ""
+"Die folgenden automatisch erzeugten Daten wurden beim Bau\n"
+"dieser Programmkopie als Definitionen verwendet."
+
+#. #define DIRED_NOVICELINE
+#: LYMessages.c:847
+msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
+msgstr "C) Erzeugen D)ownload E)dit F) Menü M) Ändern R) Löschen T) Markieren U)pload\n"
+
+#: LYMessages.c:848
+msgid "Failed to obtain status of current link!"
+msgstr "Der Status des aktuellen Links konnte nicht bestimmt werden!"
+
+#. #define INVALID_PERMIT_URL
+#: LYMessages.c:851
+msgid "Special URL only valid from current File Permission menu!"
+msgstr "Dieser spezielle URL ist nur vom aktiven Zugriffsrechtemenü aus verwendbar!"
+
+#: LYMessages.c:855
+msgid "External support is currently disabled."
+msgstr "Unterstützung für EXTERNAL ist zur Zeit ausgeschaltet."
+
+#. new with 2.8.4dev.21
+#: LYMessages.c:859
+#, fuzzy
+msgid "Changing working-directory is currently disabled."
+msgstr "Starten von Unterprozessen zur Zeit nicht ermöglicht."
+
+#: LYMessages.c:860
+#, fuzzy
+msgid "Linewrap OFF!"
+msgstr "Trace AUS!"
+
+#: LYMessages.c:861
+msgid "Linewrap ON!"
+msgstr ""
+
+#: LYMessages.c:862
+#, fuzzy
+msgid "Parsing nested-tables toggled OFF! Reloading..."
+msgstr "Raw 8-bit or CJK mode eingeschaltet! Reloading..."
+
+#: LYMessages.c:863
+#, fuzzy
+msgid "Parsing nested-tables toggled ON! Reloading..."
+msgstr "Raw 8-bit or CJK mode ausgeschaltet! Reloading..."
+
+#: LYMessages.c:864
+msgid "Shifting is disabled while line-wrap is in effect"
+msgstr ""
+
+#: LYMessages.c:865
+#, fuzzy
+msgid "Trace not supported"
+msgstr "Terminal hat keine Unterstützung für Farbe"
+
+#: WWW/Library/Implementation/HTAABrow.c:648
+#, c-format
+msgid "Username for '%s' at %s '%s%s':"
+msgstr "Username für '%s' auf %s '%s%s':"
+
+#: WWW/Library/Implementation/HTAABrow.c:914
+msgid "This client doesn't know how to compose proxy authorization information for scheme"
+msgstr "Dieses Programm kann nichts anfangen mit dem Schema für Proxy-Authorisierung"
+
+#: WWW/Library/Implementation/HTAABrow.c:989
+msgid "This client doesn't know how to compose authorization information for scheme"
+msgstr "Dieses Programm weiß nichts anzufangen mit dem Authorisierungsschema"
+
+#: WWW/Library/Implementation/HTAABrow.c:1097
+#, c-format
+msgid "Invalid header '%s%s%s%s%s'"
+msgstr "Ungültiger Header '%s%s%s%s%s'"
+
+#: WWW/Library/Implementation/HTAABrow.c:1201
+msgid "Proxy authorization required -- retrying"
+msgstr "Proxy-Authorisierung verlangt -- wiederholter Versuch"
+
+#: WWW/Library/Implementation/HTAABrow.c:1260
+msgid "Access without authorization denied -- retrying"
+msgstr "Zugang ohne Authorisierung verweigert -- wiederholter Versuch"
+
+#: WWW/Library/Implementation/HTAccess.c:683
+msgid "Access forbidden by rule"
+msgstr "Zugang durch Konfigurationsregel verboten"
+
+#: WWW/Library/Implementation/HTAccess.c:785
+msgid "Document with POST content not found in cache. Resubmit?"
+msgstr "Dokument mit POST-Daten nicht im Seitencache gefunden. POST wiederholen?"
+
+#: WWW/Library/Implementation/HTAccess.c:1026 src/GridText.c:8039
+msgid "Loading incomplete."
+msgstr "Unvollständig geladen."
+
+#: WWW/Library/Implementation/HTAccess.c:1056
+msgid "**** HTAccess: socket or file number returned by obsolete load routine!\n"
+msgstr "**** HTAccess: Alte Laderoutine hat Socket- oder Dateinummer zurückgegeben!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1058
+msgid "**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"
+msgstr "**** HTAccess: Interner Softwarefehler. Bitte lynx-dev@sig.net benachrichtigen!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1059
+#, c-format
+msgid "**** HTAccess: Status returned was: %d\n"
+msgstr "**** HTAccess: Der empfangene Statuscode war %d\n"
+
+#.
+#. * hack: if we fail in HTAccess.c
+#. * avoid duplicating URL, oh.
+#.
+#: WWW/Library/Implementation/HTAccess.c:1065 src/LYMainLoop.c:7834
+msgid "Can't Access"
+msgstr "Zugriff fehlgeschlagen:"
+
+#: WWW/Library/Implementation/HTAccess.c:1073
+msgid "Unable to access document."
+msgstr "Zugriff auf Dokument nicht möglich."
+
+#: WWW/Library/Implementation/HTFTP.c:756
+#, c-format
+msgid "Enter password for user %s@%s:"
+msgstr "Password eingeben für User %s@%s:"
+
+#: WWW/Library/Implementation/HTFTP.c:784
+msgid "Unable to connect to FTP host."
+msgstr "Verbindung zum FTP-Host konnte nicht hergestellt werden."
+
+#: WWW/Library/Implementation/HTFTP.c:1054
+msgid "close master socket"
+msgstr "close master socket"
+
+#: WWW/Library/Implementation/HTFTP.c:1116
+msgid "socket for master socket"
+msgstr "socket for master socket"
+
+# This appears in FTP directory listings. "Symbolischer Link"
+# does not fit in the (default?) format. - kw
+#.
+#. ** It's a symbolic link, does the user care about
+#. ** knowing if it is symbolic? I think so since
+#. ** it might be a directory.
+#.
+#: WWW/Library/Implementation/HTFTP.c:1630 WWW/Library/Implementation/HTFTP.c:2251
+msgid "Symbolic Link"
+msgstr "Symbolic Link"
+
+#: WWW/Library/Implementation/HTFTP.c:2612
+msgid "Receiving FTP directory."
+msgstr "FTP-Verzeichnis wird empfangen."
+
+#: WWW/Library/Implementation/HTFTP.c:2755
+#, c-format
+msgid "Transferred %d bytes (%5d)"
+msgstr "%d bytes übertragen (%5d)"
+
+#: WWW/Library/Implementation/HTFTP.c:3090
+msgid "connect for data"
+msgstr "connect for data"
+
+#: WWW/Library/Implementation/HTFTP.c:3690
+msgid "Receiving FTP file."
+msgstr "FTP-Datei wird empfangen."
+
+#: WWW/Library/Implementation/HTFinger.c:275
+msgid "Could not set up finger connection."
+msgstr "\"Finger\"-Verbindung konnte nicht nicht hergestellt werden."
+
+#: WWW/Library/Implementation/HTFinger.c:320
+msgid "Could not load data (no sitename in finger URL)"
+msgstr "Nichts geladen (kein Site-Name im \"finger\"-URL)"
+
+#: WWW/Library/Implementation/HTFinger.c:328
+msgid "Invalid port number - will only use port 79!"
+msgstr "Ungültige Portnummer - Nur Port 79 kann benutzt werden!"
+
+#: WWW/Library/Implementation/HTFinger.c:396
+msgid "Could not access finger host."
+msgstr "Der \"finger\"-Host konnte nicht erreicht werden."
+
+#: WWW/Library/Implementation/HTFinger.c:407
+msgid "No response from finger server."
+msgstr "Keine Antwort vom \"finger\"-Server."
+
+#: WWW/Library/Implementation/HTNews.c:372
+#, c-format
+msgid "Username for news host '%s':"
+msgstr "Username für den News-Host '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:425
+msgid "Change username?"
+msgstr "Username ändern?"
+
+#: WWW/Library/Implementation/HTNews.c:429
+msgid "Username:"
+msgstr "Username:"
+
+#: WWW/Library/Implementation/HTNews.c:453
+#, c-format
+msgid "Password for news host '%s':"
+msgstr "Password für den News-Host '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:536
+msgid "Change password?"
+msgstr "Password ändern?"
+
+#: WWW/Library/Implementation/HTNews.c:1691
+#, c-format
+msgid "No matches for: %s"
+msgstr "Keine passenden Newsgroups für: %s"
+
+#: WWW/Library/Implementation/HTNews.c:1744
+msgid ""
+"\n"
+"No articles in this group.\n"
+msgstr ""
+"\n"
+"Keine Messages in dieser Newsgroup.\n"
+
+#: WWW/Library/Implementation/HTNews.c:1757
+msgid ""
+"\n"
+"No articles in this range.\n"
+msgstr ""
+"\n"
+"Keine Messages in diesem Bereich.\n"
+
+#.
+#. ** Set window title.
+#.
+#: WWW/Library/Implementation/HTNews.c:1770
+#, c-format
+msgid "%s, Articles %d-%d"
+msgstr "%s, Messages %d-%d"
+
+#: WWW/Library/Implementation/HTNews.c:1792
+msgid "Earlier articles"
+msgstr "Frühere Messsages"
+
+#: WWW/Library/Implementation/HTNews.c:1805
+#, c-format
+msgid ""
+"\n"
+"There are about %d articles currently available in %s, IDs as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"Ungefähr %d Messages zur Zeit vorhanden in %s, IDs wie folgt:\n"
+"\n"
+
+#: WWW/Library/Implementation/HTNews.c:1865
+msgid "All available articles in "
+msgstr "Alle zugänglichen Messages in "
+
+#: WWW/Library/Implementation/HTNews.c:2081
+msgid "Later articles"
+msgstr "Spätere Messages"
+
+#: WWW/Library/Implementation/HTNews.c:2105
+msgid "Post to "
+msgstr "Message hinterlassen (Post) in "
+
+#: WWW/Library/Implementation/HTNews.c:2323
+msgid "This client does not contain support for SNEWS URLs."
+msgstr "Dieses Programm hat keine Unterstützung für SNEWS URLs."
+
+#: WWW/Library/Implementation/HTNews.c:2531
+msgid "No target for raw text!"
+msgstr "Kein target für rohen Text!"
+
+#: WWW/Library/Implementation/HTNews.c:2561
+msgid "Connecting to NewsHost ..."
+msgstr "Verbindungserstellung zum News-Host ..."
+
+#: WWW/Library/Implementation/HTNews.c:2612
+#, c-format
+msgid "Could not access %s."
+msgstr "Kein Zugang zu %s."
+
+#: WWW/Library/Implementation/HTNews.c:2712
+#, c-format
+msgid "Can't read news info. News host %.20s responded: %.200s"
+msgstr "News-Info kann nicht gelesen werden. Server %.20s antwortet: %.200s"
+
+#: WWW/Library/Implementation/HTNews.c:2716
+#, c-format
+msgid "Can't read news info, empty response from host %s"
+msgstr "News-Info kann nicht gelesen werden. Leere Antwort von Server %s"
+
+#.
+#. ** List available newsgroups. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2920
+msgid "Reading list of available newsgroups."
+msgstr "Liste vorhandener Newsgroups wird geladen."
+
+#: WWW/Library/Implementation/HTNews.c:2942
+msgid "Reading list of articles in newsgroup."
+msgstr "Liste der vorhandenen Messages wird geladen."
+
+#.
+#. ** Get an article from a news group. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2948
+msgid "Reading news article."
+msgstr "News-Message wird geladen."
+
+#: WWW/Library/Implementation/HTNews.c:2978
+msgid "Sorry, could not load requested news."
+msgstr "Entschuldigung: konnte die angeforderten News nich laden."
+
+#: WWW/Library/Implementation/HTTCP.c:1233
+msgid "Address has invalid port"
+msgstr "Adresslänge hat einen ungültigen port"
+
+#: WWW/Library/Implementation/HTTCP.c:1336
+msgid "Address length looks invalid"
+msgstr "Adresslänge scheint ungültig zu sein"
+
+#: WWW/Library/Implementation/HTTCP.c:1574 WWW/Library/Implementation/HTTCP.c:1592
+#, c-format
+msgid "Unable to locate remote host %s."
+msgstr "Remote Host %s nicht gefunden."
+
+#. Not HTProgress, so warning won't be overwritten
+#. * immediately; but not HTAlert, because typically
+#. * there will be other alerts from the callers. - kw
+#.
+#: WWW/Library/Implementation/HTTCP.c:1589 WWW/Library/Implementation/HTTelnet.c:103
+#, c-format
+msgid "Invalid hostname %s"
+msgstr "Hostname ist ungültig: %s"
+
+#: WWW/Library/Implementation/HTTCP.c:1603
+#, c-format
+msgid "Making %s connection to %s"
+msgstr "%s-Verbindung zu %s wird aufgebaut."
+
+#: WWW/Library/Implementation/HTTCP.c:1619
+#, c-format
+msgid "socket failed: family %d addr %s port %s."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1628
+msgid "socket failed."
+msgstr "Socket-Fehler."
+
+#: WWW/Library/Implementation/HTTCP.c:1648
+msgid "Could not make connection non-blocking."
+msgstr "Veerbindung konnte nicht non-blocking gemacht werden."
+
+#: WWW/Library/Implementation/HTTCP.c:1717
+msgid "Connection failed (too many retries)."
+msgstr "Verbindungsfehler (zu viele Versuche)."
+
+#: WWW/Library/Implementation/HTTCP.c:1910
+msgid "Could not restore socket to blocking."
+msgstr "Socket konnte nicht wieder blocking gemacht werden."
+
+#: WWW/Library/Implementation/HTTCP.c:1976
+msgid "Socket read failed for 180,000 tries."
+msgstr "Lesefehler nach 180000 Versuchen."
+
+#: WWW/Library/Implementation/HTTP.c:466
+msgid "This client does not contain support for HTTPS URLs."
+msgstr "Dieses Programm hat keine Unterstützung für HTTPS-URLs."
+
+#: WWW/Library/Implementation/HTTP.c:491
+msgid "Unable to connect to remote host."
+msgstr "Verbindung zum remote Host konnte nicht hergestellt werden."
+
+#: WWW/Library/Implementation/HTTP.c:1005
+msgid "Sending HTTP request."
+msgstr "HTTP Request wird geschickt."
+
+#: WWW/Library/Implementation/HTTP.c:1039
+msgid "Unexpected network write error; connection aborted."
+msgstr "Unerwarteter Netzschreibfehler; Verbindung abgebrochen."
+
+#: WWW/Library/Implementation/HTTP.c:1045
+msgid "HTTP request sent; waiting for response."
+msgstr "HTTP Request geschickt; warten auf Antwort."
+
+#: WWW/Library/Implementation/HTTP.c:1109
+msgid "Unexpected network read error; connection aborted."
+msgstr "Unerwarteter Netzlesefehler; Verbindung abgebrochen."
+
+#.
+#. ** HTTP/1.1 Informational statuses.
+#. ** 100 Continue.
+#. ** 101 Switching Protocols.
+#. ** > 101 is unknown.
+#. ** We should never get these, and they have only
+#. ** the status line and possibly other headers,
+#. ** so we'll deal with them by showing the full
+#. ** header to the user as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1305
+msgid "Got unexpected Informational Status."
+msgstr "Unerwarteter Informations-Statuscode empfangen."
+
+#.
+#. * Reset Content. The server has fulfilled the
+#. * request but nothing is returned and we should
+#. * reset any form content. We'll instruct the
+#. * user to do that, and restore the current
+#. * document. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1340
+msgid "Request fulfilled. Reset Content."
+msgstr "Request ausgeführt. Seiteninhalt zurücksetzen."
+
+#. Not Modified
+#.
+#. * We didn't send an "If-Modified-Since" header,
+#. * so this status is inappropriate. We'll deal
+#. * with it by showing the full header to the user
+#. * as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1459
+msgid "Got unexpected 304 Not Modified status."
+msgstr "Unerwarteter Status 304 \"Not Modified\"."
+
+#: WWW/Library/Implementation/HTTP.c:1526
+msgid "Redirection of POST content requires user approval."
+msgstr "Bestätigung ist erforderlich für Umleitung von POST-Daten."
+
+#: WWW/Library/Implementation/HTTP.c:1541
+msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
+msgstr "POST-Request. Permanente Umleitung wird als temporär behandelt.\n"
+
+#: WWW/Library/Implementation/HTTP.c:1586
+msgid "Retrying with access authorization information."
+msgstr "Wir versuchen's noch einmal mit Authorisierungsinfo."
+
+#: WWW/Library/Implementation/HTTP.c:1598
+msgid "Show the 401 message body?"
+msgstr "Inhalt der 401-Antwort zeigen?"
+
+#: WWW/Library/Implementation/HTTP.c:1643
+msgid "Show the 407 message body?"
+msgstr "Inhalt der 407-Antwort zeigen?"
+
+#.
+#. ** Bad or unknown server_status number.
+#. ** Take a chance and hope there is
+#. ** something to display. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1748
+msgid "Unknown status reply from server!"
+msgstr "Unbekannter Statuscode in Antwort vom Server!"
+
+#: WWW/Library/Implementation/HTTelnet.c:101
+#, c-format
+msgid "remote %s session:"
+msgstr "Entfernte %s Sitzung:"
+
+#: WWW/Library/Implementation/HTWAIS.c:161
+msgid "Could not connect to WAIS server."
+msgstr "Verbindungsaufnahme zum WAIS-Server fehlgeschlagen."
+
+#: WWW/Library/Implementation/HTWAIS.c:170
+msgid "Could not open WAIS connection for reading."
+msgstr "Verbindung zum WAIS Server konnte nicht fürs Lesen geöffnet werden."
+
+#: WWW/Library/Implementation/HTWAIS.c:194
+msgid "Diagnostic code is "
+msgstr "Codenummer für Dignose ist "
+
+#: WWW/Library/Implementation/HTWAIS.c:463
+msgid "Index "
+msgstr "Index"
+
+#: WWW/Library/Implementation/HTWAIS.c:467
+#, c-format
+msgid " contains the following %d item%s relevant to \""
+msgstr " enthält folgenden %d relevanten Item%s für \""
+
+#: WWW/Library/Implementation/HTWAIS.c:475
+msgid "The first figure after each entry is its relative score, "
+msgstr "Die erste Zahl nach jedem Eintrag ist die relative Bewertung, "
+
+#: WWW/Library/Implementation/HTWAIS.c:476
+msgid "the second is the number of lines in the item."
+msgstr "die zweite ist die Länge des Items in Zeilen."
+
+#: WWW/Library/Implementation/HTWAIS.c:517
+msgid " (bad file name)"
+msgstr "(schlechter Dateiname)"
+
+#: WWW/Library/Implementation/HTWAIS.c:542
+msgid "(bad doc id)"
+msgstr "(schlechte Dokument-Identifizierungsnummer)"
+
+#: WWW/Library/Implementation/HTWAIS.c:558
+msgid "(Short Header record, can't display)"
+msgstr "(Kurzer Kopfeintrag, Anzeige nicht möglich)"
+
+#: WWW/Library/Implementation/HTWAIS.c:565
+msgid ""
+"\n"
+"Long Header record, can't display\n"
+msgstr ""
+"\n"
+"Langer Kopfeintrag, Anzeige nicht möglich\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:572
+msgid ""
+"\n"
+"Text record\n"
+msgstr ""
+"\n"
+"Texteintrag\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:581
+msgid ""
+"\n"
+"Headline record, can't display\n"
+msgstr ""
+"\n"
+"Überschriftseintrag, Anzeige nicht möglich\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:589
+msgid ""
+"\n"
+"Code record, can't display\n"
+msgstr ""
+"\n"
+"Codeeintrag, Anzeige nicht möglich\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:691
+msgid "Syntax error in WAIS URL"
+msgstr "Syntaxfehler in WAIS-URL"
+
+#: WWW/Library/Implementation/HTWAIS.c:761
+msgid " (WAIS Index)"
+msgstr " (WAIS-Index)"
+
+#: WWW/Library/Implementation/HTWAIS.c:768
+msgid "WAIS Index: "
+msgstr "WAIS-Index: "
+
+#: WWW/Library/Implementation/HTWAIS.c:774
+msgid "This is a link for searching the "
+msgstr "Dies ist ein Link zum Abfragen des "
+
+#: WWW/Library/Implementation/HTWAIS.c:778
+msgid " WAIS Index.\n"
+msgstr " WAIS-Index.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:805
+msgid ""
+"\n"
+"Enter the 's'earch command and then specify search words.\n"
+msgstr ""
+"\n"
+" Tastenkommando 's' für Suche, dann Suchwörter eingeben.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:827
+msgid " (in "
+msgstr " (in "
+
+#: WWW/Library/Implementation/HTWAIS.c:836
+msgid "WAIS Search of \""
+msgstr "WAIS-Suche von \""
+
+#: WWW/Library/Implementation/HTWAIS.c:840
+msgid "\" in: "
+msgstr "\" in: "
+
+#: WWW/Library/Implementation/HTWAIS.c:855
+msgid "HTWAIS: Request too large."
+msgstr "HTWAIS: Request zu lang."
+
+#: WWW/Library/Implementation/HTWAIS.c:864
+msgid "Searching WAIS database..."
+msgstr "WAIS-Datenbang wird abgefragt..."
+
+#: WWW/Library/Implementation/HTWAIS.c:874
+msgid "Search interrupted."
+msgstr "Suche unterbrochen."
+
+#: WWW/Library/Implementation/HTWAIS.c:924
+msgid "Can't convert format of WAIS document"
+msgstr "Format des WAIS-Dokuments kann nicht konvertiert werden"
+
+#: WWW/Library/Implementation/HTWAIS.c:968
+msgid "HTWAIS: Request too long."
+msgstr "HTWAIS: Request zu lang."
+
+#.
+#. ** Actually do the transaction given by request_message.
+#.
+#: WWW/Library/Implementation/HTWAIS.c:982
+msgid "Fetching WAIS document..."
+msgstr "WAIS-Dokument wird geholt..."
+
+#. display_search_response(target, retrieval_response,
+#. wais_database, keywords);
+#: WWW/Library/Implementation/HTWAIS.c:1021
+msgid "No text was returned!\n"
+msgstr "Kein Text in Antwort!\n"
+
+#: WWW/Library/Implementation/HTWSRC.c:287
+msgid " NOT GIVEN in source file; "
+msgstr " NICHT VORHANDEN in Quelldatei; "
+
+#: WWW/Library/Implementation/HTWSRC.c:311
+msgid " WAIS source file"
+msgstr " WAIS-Quelldatei"
+
+#: WWW/Library/Implementation/HTWSRC.c:318
+msgid " description"
+msgstr " Beschreibungs"
+
+#: WWW/Library/Implementation/HTWSRC.c:328
+msgid "Access links"
+msgstr "Zugriffslinks"
+
+#: WWW/Library/Implementation/HTWSRC.c:345
+msgid "Direct access"
+msgstr "direkter Zugang"
+
+#. * Proxy will be used if defined, so let user know that - FM *
+#: WWW/Library/Implementation/HTWSRC.c:348
+msgid " (or via proxy server, if defined)"
+msgstr " (oder durch Proxyserver, falls definiert)"
+
+#: WWW/Library/Implementation/HTWSRC.c:363
+msgid "Maintainer"
+msgstr "Instandhalter"
+
+#: WWW/Library/Implementation/HTWSRC.c:371
+msgid "Host"
+msgstr "Host"
+
+#: src/GridText.c:607
+msgid "Memory exhausted, display interrupted!"
+msgstr "zu wenig Hauptspeicher, Anzeige abgebrochen!"
+
+#: src/GridText.c:612
+msgid "Memory exhausted, will interrupt transfer!"
+msgstr "zu wenig Hauptspeicher, Übertragung wird abgebrochen!"
+
+#: src/GridText.c:3395
+msgid " *** MEMORY EXHAUSTED ***"
+msgstr " *** MEMORY ERSCHÖPFT ***"
+
+#: src/GridText.c:5733 src/GridText.c:5740 src/LYList.c:258
+msgid "unknown field or link"
+msgstr "unbekanntes Feld oder Link"
+
+#: src/GridText.c:5749
+msgid "text entry field"
+msgstr "Texteingabefeld"
+
+#: src/GridText.c:5752
+msgid "password entry field"
+msgstr "Password-Eingabefeld"
+
+#: src/GridText.c:5755
+msgid "checkbox"
+msgstr "Checkbox"
+
+#: src/GridText.c:5758
+msgid "radio button"
+msgstr "Radiobutton"
+
+#: src/GridText.c:5761
+msgid "submit button"
+msgstr "Submit-Button"
+
+#: src/GridText.c:5764
+msgid "reset button"
+msgstr "Reset-Button"
+
+#: src/GridText.c:5767
+msgid "popup menu"
+msgstr "Popup-Menü"
+
+#: src/GridText.c:5770
+msgid "hidden form field"
+msgstr "verstecktes Formfeld"
+
+#: src/GridText.c:5773
+msgid "text entry area"
+msgstr "Texteingaberegion"
+
+#: src/GridText.c:5776
+msgid "range entry field"
+msgstr "Bereichseingabefeld"
+
+#: src/GridText.c:5779
+msgid "file entry field"
+msgstr "Dateieingabefeld"
+
+#: src/GridText.c:5782
+msgid "text-submit field"
+msgstr "Textsendefeld"
+
+#: src/GridText.c:5785
+msgid "image-submit button"
+msgstr "Image-Sendefeld"
+
+#: src/GridText.c:5788
+msgid "keygen field"
+msgstr "\"Keygen\"-Feld"
+
+#: src/GridText.c:5791
+msgid "unknown form field"
+msgstr "unbekanntes Formfeld"
+
+#. We can't open the file, what do we do?
+#: src/GridText.c:10348
+#, fuzzy
+msgid "Can't open file for uploading"
+msgstr "Datei konnte nicht zum Lesen geöffnet werden!"
+
+#. We got an error reading the file, what do we do?
+#: src/GridText.c:10359
+msgid "Short read from file, problem?"
+msgstr ""
+
+#: src/GridText.c:10721
+#, c-format
+msgid "Submitting %s"
+msgstr "%s wird gesandt"
+
+#. ugliness has happened; inform user and do the best we can
+#: src/GridText.c:11887
+msgid "Hang Detect: TextAnchor struct corrupted - suggest aborting!"
+msgstr ""
+
+#. don't show previous state
+#: src/GridText.c:12092
+msgid "Wrap lines to fit displayed area?"
+msgstr "Zeilen umbrechen, um an den sichtbaren Bereich anzupassen?"
+
+#: src/GridText.c:12144
+msgid "Very long lines have been wrapped!"
+msgstr "Sehr lange Zeilen wurden umgebrochen!"
+
+#: src/GridText.c:12591
+msgid "Very long lines have been truncated!"
+msgstr "Sehr lange Zeilen wurden gekürzt!"
+
+#: src/HTAlert.c:155 src/LYShowInfo.c:318
+msgid "bytes"
+msgstr "bytes"
+
+#: src/HTAlert.c:156
+msgid "KB"
+msgstr "KB"
+
+#: src/HTAlert.c:255
+#, c-format
+msgid "Read %s of %s of data"
+msgstr "%s von %s der Daten gelesen"
+
+#: src/HTAlert.c:257
+#, c-format
+msgid "Read %s of data"
+msgstr "%s der Daten gelesen"
+
+#: src/HTAlert.c:262
+#, c-format
+msgid ", %s/sec"
+msgstr ", %s/sec"
+
+#: src/HTAlert.c:269
+#, c-format
+msgid " (stalled for %ld sec)"
+msgstr " (unterbrochen für %ld Sekunden)"
+
+#: src/HTAlert.c:271
+#, c-format
+msgid ", ETA %ld sec"
+msgstr ", ETA %ld sec"
+
+#: src/HTAlert.c:277
+msgid " (Press 'z' to abort)"
+msgstr " ('z' für Abbruch)"
+
+#. Meta-note: don't move the following note from its place right
+#. in front of the first gettext(). As it is now, it should
+#. automatically appear in generated lynx.pot files. - kw
+#.
+#. NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+#. * will take the first byte of the translation as a positive response
+#. * to Yes/No questions. If you provide a translation for "no", lynx
+#. * will take the first byte of the translation as a negative response
+#. * to Yes/No questions. For both, lynx will also try to show the
+#. * first byte in the prompt as a character, instead of (y) or (n),
+#. * respectively. This will not work right for multibyte charsets!
+#. * Don't translate "yes" and "no" for CJK character sets (or translate
+#. * them to "yes" and "no"). For a translation using UTF-8, don't
+#. * translate if the translation would begin with anything but a 7-bit
+#. * (US_ASCII) character. That also means do not translate if the
+#. * translation would begin with anything but a 7-bit character, if
+#. * you use a single-byte character encoding (a charset like ISO-8859-n)
+#. * but anticipate that the message catalog may be used re-encoded in
+#. * UTF-8 form.
+#. * For translations using other character sets, you may also wish to
+#. * leave "yes" and "no" untranslated, if using (y) and (n) is the
+#. * preferred behavior.
+#. * Lynx will also accept y Y n N as responses unless there is a conflict
+#. * with the first letter of the "yes" or "no" translation.
+#.
+#: src/HTAlert.c:334
+msgid "yes"
+msgstr "ja"
+
+#: src/HTAlert.c:335
+msgid "no"
+msgstr "nein"
+
+#: src/HTML.c:6342
+msgid "Description:"
+msgstr "Beschreibung:"
+
+#: src/HTML.c:6347
+msgid "(none)"
+msgstr "(keine)"
+
+#: src/HTML.c:6351
+msgid "Filepath:"
+msgstr "Dateipfad:"
+
+#: src/HTML.c:6356
+msgid "(unknown)"
+msgstr "(unbekannt)"
+
+#: src/HTML.c:7804
+msgid "Document has only hidden links. Use the 'l'ist command."
+msgstr "Dokument hat nur versteckte Links. Tastenbefehl 'L' für Liste."
+
+#: src/HTML.c:8328
+msgid "Source cache error - disk full?"
+msgstr "Source Cache Fehler - Festplatte voll?"
+
+#: src/HTML.c:8341
+msgid "Source cache error - not enough memory!"
+msgstr "Source Cache Fehler - nicht genug Speicher!"
+
+#: src/LYBookmark.c:166
+msgid ""
+" This file is an HTML representation of the X Mosaic hotlist file.\n"
+" Outdated or invalid links may be removed by using the\n"
+" remove bookmark command, it is usually the 'R' key but may have\n"
+" been remapped by you or your system administrator."
+msgstr ""
+" Diese Datei ist eine HTML-Repräsentation der X-Mosaic-Hotlistdatei.\n"
+" Alte oder ungültige Links können mit dem Tastenbefehl für\n"
+" \"remove bookmark\" entfernt werden, das ist normalerweise der\n"
+" Buchstabe 'R', außer wenn die Tastenbelegung geändert worden ist."
+
+#: src/LYBookmark.c:382
+msgid ""
+" You can delete links by the 'R' key<br>\n"
+"<ol>\n"
+msgstr ""
+" Sie können Links mit der Taste 'R' löschen<br>\n"
+"<ol>\n"
+
+#: src/LYBookmark.c:385
+msgid ""
+" You can delete links using the remove bookmark command. It is usually\n"
+" the 'R' key but may have been remapped by you or your system\n"
+" administrator."
+msgstr ""
+" Links können mit dem Tastenbefehl für \"remove bookmark\" entfernt werden.\n"
+" Das ist normalerweise der Buchstabe 'R', außer wenn die Tastenbelegung\n"
+" geändert worden ist."
+
+#: src/LYBookmark.c:389
+msgid ""
+" This file also may be edited with a standard text editor to delete\n"
+" outdated or invalid links, or to change their order."
+msgstr ""
+" Diese Datei kann auch mit einem Standard-Texteditor geändert werden,\n"
+" um alte oder ungültige Links zu entfernen, or um die Reihenfolge der\n"
+" Links zu modifizieren."
+
+#: src/LYBookmark.c:392
+msgid ""
+"Note: if you edit this file manually\n"
+" you should not change the format within the lines\n"
+" or add other HTML markup.\n"
+" Make sure any bookmark link is saved as a single line."
+msgstr ""
+"Achtung: Beim manuellen Editieren dieser Datei sollte\n"
+" das Format innerhalb der Zeilen nicht verändert\n"
+" werden. Zusätzliches HTML-Markup sollte nicht\n"
+" verwendet werden. Jeder einzelne Link muß vollständig\n"
+" in einer einzigen Zeile enthalten sein."
+
+#: src/LYBookmark.c:683
+#, c-format
+msgid "File may be recoverable from %s during this session"
+msgstr "Datei kann möglicherweise während dieser Session mit %s wieder rekonstruiert werden"
+
+#.
+#. * Neither the path as given nor any components examined by
+#. * backing up were stat()able. - kw
+#.
+#: src/LYCgi.c:232
+msgid "Unable to access cgi script"
+msgstr "Zugang zu CGI-Script nicht möglich"
+
+#: src/LYCgi.c:651 src/LYCgi.c:654
+msgid "Good Advice"
+msgstr "Guter Rat"
+
+#: src/LYCgi.c:657
+msgid "An excellent http server for VMS is available via"
+msgstr "Ein exzellenter HTTP-Server für VMS is durch"
+
+#: src/LYCgi.c:664
+msgid "this link"
+msgstr "diesen Link erhältlich"
+
+#: src/LYCgi.c:668
+msgid "It provides state of the art CGI script support.\n"
+msgstr "Er hat state of the art CGI-Unterstützung.\n"
+
+#: src/LYClean.c:108
+msgid "Exiting via interrupt:"
+msgstr "Programmende durch Interrupt:"
+
+#: src/LYCookie.c:2659
+msgid "(from a previous session)"
+msgstr "(von vorheriger Session)"
+
+#: src/LYCookie.c:2719
+msgid "Maximum Gobble Date:"
+msgstr "Verfallsdatum:"
+
+#: src/LYCookie.c:2764
+msgid "Internal"
+msgstr "Intern"
+
+#: src/LYCookie.c:2765
+msgid "cookie_domain_flag_set error, aborting program"
+msgstr "cookie_domain_flag_set-Fehler, beende das Programm"
+
+#: src/LYCurses.c:936
+msgid "Terminal initialisation failed - unknown terminal type?"
+msgstr "Terminalinitialisierung fehlgeschlagen - unbekannter Terminaltyp?"
+
+#: src/LYCurses.c:1328
+msgid "Terminal ="
+msgstr "Terminal ="
+
+#: src/LYCurses.c:1332
+msgid "You must use a vt100, 200, etc. terminal with this program."
+msgstr "Ein Textterminal wie VT100, VT200 usw. ist für dieses Programm notwendig."
+
+#: src/LYCurses.c:1384
+msgid "Your Terminal type is unknown!"
+msgstr "Terminaltyp ist unbekannt!"
+
+#: src/LYCurses.c:1385
+msgid "Enter a terminal type:"
+msgstr "Terminaltyp eingeben:"
+
+#: src/LYCurses.c:1398
+msgid "TERMINAL TYPE IS SET TO"
+msgstr "TERMINAL TYPE IS SET TO"
+
+#: src/LYCurses.c:1749
+#, c-format
+msgid ""
+"\n"
+"A Fatal error has occurred in %s Ver. %s\n"
+msgstr ""
+"\n"
+" Ein fataler Fehler passierte in %s Ver. %s\n"
+
+# Yes, this is incomplete... - kw
+#: src/LYCurses.c:1751
+msgid ""
+"\n"
+"Please notify your system administrator to confirm a bug, and if\n"
+"confirmed, to notify the lynx-dev list. Bug reports should have concise\n"
+"descriptions of the command and/or URL which causes the problem, the\n"
+"operating system name with version number, the TCPIP implementation, the\n"
+"TRACEBACK if it can be captured, and any other relevant information.\n"
+msgstr ""
+"\n"
+" Bitte Systemverwalter benachrichtigen, um einen Bug zu bestätigen, und\n"
+"bei Bestätigung die lynx-dev Mailingliste benachrichtigen. Fehlermeldungen\n"
+"sollten eine knappe Beschreibung des Befehls oder der URL enthalten, die\n"
+"den Fehler verursacht haben, das Betriebssystem mit Versionsnummer,\n"
+"die TCPIP-Implementierung, den TRACEBACK (wenn er gewinnen werden\n"
+"konnte und andere relevante Information.\n"
+
+#: src/LYEdit.c:264
+msgid "Editor killed by signal"
+msgstr "Editor von Signal abgeschossen"
+
+#: src/LYEdit.c:266
+#, c-format
+msgid "Editor returned with error status, %s"
+msgstr "Editor mit Fehler-Status beendet, %s"
+
+#: src/LYEdit.c:267
+msgid "reason unknown."
+msgstr "Grund nicht bekannt."
+
+#: src/LYDownload.c:520
+msgid "Downloaded link:"
+msgstr "Geladener Link:"
+
+#: src/LYDownload.c:525
+msgid "Suggested file name:"
+msgstr "Vorgeschlagener Dateiname:"
+
+#: src/LYDownload.c:530
+msgid "Standard download options:"
+msgstr "Normale Download-Optionen:"
+
+#: src/LYDownload.c:531
+msgid "Download options:"
+msgstr "Download-Optionen:"
+
+#: src/LYDownload.c:545
+msgid "Save to disk"
+msgstr "Speichern auf Disk"
+
+#: src/LYDownload.c:547
+msgid "Save to disk disabled."
+msgstr "Speichern auf Disk nicht ermöglicht."
+
+#: src/LYDownload.c:551 src/LYPrint.c:1338
+msgid "Local additions:"
+msgstr "Lokale Zusätze:"
+
+#: src/LYDownload.c:560 src/LYUpload.c:224
+msgid "No Name Given"
+msgstr "Kein Name gegeben"
+
+#: src/LYHistory.c:633
+msgid "You selected:"
+msgstr "Abfolge der gewählten Links:"
+
+#: src/LYHistory.c:657 src/LYHistory.c:905
+msgid "(no address)"
+msgstr "(keine Adresse)"
+
+#: src/LYHistory.c:661
+msgid " (internal)"
+msgstr " (intern)"
+
+#: src/LYHistory.c:663
+msgid " (was internal)"
+msgstr " (ehemals intern)"
+
+#: src/LYHistory.c:761
+msgid " (From History)"
+msgstr " (Von History)"
+
+#: src/LYHistory.c:825
+msgid "You visited (POSTs, bookmark, menu and list files excluded):"
+msgstr "Besuchte Links (mit Ausnahme von POST, Lesezeichen, Menüs and Listen):"
+
+#: src/LYHistory.c:1124
+msgid "(No messages yet)"
+msgstr "(Bisher keine Nachrichten)"
+
+# The stuff in LYLeaks.c appears in a Lynx.leaks file, which is only
+# written if compiled with LY_FIND_LEAKS defined (--enable-find-leaks).
+# It's fairly technical, might have been better to leave these strings
+# untranslated. As it is, the spaces in some of the strings are
+# necessary so that things line up (formatting uses TAB chars). - kw
+#: src/LYLeaks.c:78
+msgid "Invalid pointer detected."
+msgstr "Ungültiger Zeiger gefunden."
+
+#: src/LYLeaks.c:80 src/LYLeaks.c:117
+msgid "Pointer:"
+msgstr "Zeiger: "
+
+#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:136
+msgid "FileName:"
+msgstr "Quelle: "
+
+#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:139 src/LYLeaks.c:150
+msgid "LineCount:"
+msgstr "Zeile: "
+
+#: src/LYLeaks.c:115
+msgid "Memory leak detected."
+msgstr "Speicherleck gefunden."
+
+#: src/LYLeaks.c:120
+msgid "Contains:"
+msgstr "Inhalt: "
+
+#: src/LYLeaks.c:133
+msgid "ByteSize:"
+msgstr "Länge: "
+
+#: src/LYLeaks.c:147
+msgid "realloced:"
+msgstr "realloziert:"
+
+#: src/LYLeaks.c:170
+msgid "Total memory leakage this run:"
+msgstr "Summe der Speicherlecks in diesem Programmlauf:"
+
+#: src/LYList.c:91
+msgid "References in "
+msgstr "Verweise in "
+
+#: src/LYList.c:92
+msgid "this document:"
+msgstr "diesem Document:"
+
+#: src/LYList.c:98
+msgid "Visible links:"
+msgstr "Sichtbare Links:"
+
+#: src/LYList.c:199 src/LYList.c:319
+msgid "Hidden links:"
+msgstr "Versteckte Links:"
+
+#: src/LYList.c:267
+msgid "References"
+msgstr "Verweise"
+
+#: src/LYList.c:269
+msgid "Visible links"
+msgstr "Sichtbare Links"
+
+#: src/LYLocal.c:267
+#, c-format
+msgid "Unable to get status of '%s'."
+msgstr "Status von '%s' nicht zugänglich."
+
+#: src/LYLocal.c:301
+msgid "The selected item is not a file or a directory! Request ignored."
+msgstr "Das Ausgewählte ist weder eine Datei noch ein Verzeichnis! Befehl ignoriert."
+
+#: src/LYLocal.c:383
+#, c-format
+msgid "Unable to %s due to system error!"
+msgstr "%s unmöglich wegen eines Fehlers vom System!"
+
+#. error return
+#: src/LYLocal.c:415
+#, c-format
+msgid "Probable failure to %s due to system error!"
+msgstr "%s wahrscheinlich fehlgeschlagen, Fehler vom System!"
+
+#: src/LYLocal.c:453
+#, c-format
+msgid "move %s to %s"
+msgstr "Bewegen von %s nach %s"
+
+#: src/LYLocal.c:475
+msgid "There is already a directory with that name! Request ignored."
+msgstr "Es gibt schon ein Verzeichnis mit demselben Namen! Befehl ignoriert."
+
+#: src/LYLocal.c:477
+msgid "There is already a file with that name! Request ignored."
+msgstr "Es gibt schon eine Datei mit demselben Namen! Befehl ignoriert."
+
+#: src/LYLocal.c:479
+msgid "The specified name is already in use! Request ignored."
+msgstr "Der angegebene Name ist schon in Benutzung! Befehl ignoriert."
+
+#: src/LYLocal.c:490
+msgid "Destination has different owner! Request denied."
+msgstr "Ziel gehört jemand anders! Befehl verweigert."
+
+#: src/LYLocal.c:493
+msgid "Destination is not a valid directory! Request denied."
+msgstr "Ziel is kein gültiges Verzeichnis! Befehl verweigert."
+
+#: src/LYLocal.c:516
+msgid "Remove all tagged files and directories?"
+msgstr "Alle markierten Dateien und Verzeichnisse entfernen?"
+
+#: src/LYLocal.c:537
+#, c-format
+msgid "remove %s"
+msgstr "Löschen von %s"
+
+#: src/LYLocal.c:580
+msgid "Enter new location for tagged items: "
+msgstr "Neuer Ort for markierte Objekte: "
+
+#: src/LYLocal.c:649
+msgid "Path too long"
+msgstr "Pfad zu lang"
+
+#: src/LYLocal.c:680
+msgid "Source and destination are the same location - request ignored!"
+msgstr "Quelle und Ziel sind derselbe Ort - Befehl ignoriert!"
+
+#: src/LYLocal.c:738
+msgid "Enter new name for directory: "
+msgstr "Neuer Name für Verzeichnis: "
+
+#: src/LYLocal.c:740
+msgid "Enter new name for file: "
+msgstr "Neuer Name für Datei: "
+
+#: src/LYLocal.c:751
+msgid "Illegal character (path-separator) found! Request ignored."
+msgstr "Ungültiges Zeichen (path-separator) gefunden! Befehl ignoriert."
+
+#: src/LYLocal.c:800
+msgid "Enter new location for directory: "
+msgstr "Neuer Ort für Verzeichnis: "
+
+#: src/LYLocal.c:802
+msgid "Enter new location for file: "
+msgstr "Neuer Ort für Datei: "
+
+#: src/LYLocal.c:827
+msgid "Unexpected failure - unable to find trailing path separator"
+msgstr "Unerwarteter Fehler - kann den Pfadsperator am Ende nicht finden"
+
+#: src/LYLocal.c:847
+msgid "Source and destination are the same location! Request ignored!"
+msgstr "Quelle und Ziel sind derselbe Ort! Befehl ignoriert!"
+
+#: src/LYLocal.c:894
+msgid "Modify name, location, or permission (n, l, or p): "
+msgstr "Name(n), Ort(l) oder Zugriffsrechte(p) modifizieren? [nlp] "
+
+#: src/LYLocal.c:896
+msgid "Modify name or location (n or l): "
+msgstr "Name(n) oder Ort(l) modifizieren? [nl] "
+
+#.
+#. * Code for changing ownership needed here.
+#.
+#: src/LYLocal.c:925
+msgid "This feature not yet implemented!"
+msgstr "Noch nicht implementiert!"
+
+#: src/LYLocal.c:943
+msgid "Enter name of file to create: "
+msgstr "Name der Datei, die erzeugt werden soll: "
+
+#: src/LYLocal.c:951 src/LYLocal.c:999
+msgid "Illegal redirection \"//\" found! Request ignored."
+msgstr "Unerlaubte Umleitung \"//\" gefunden! Befehl ignoriert."
+
+#: src/LYLocal.c:966
+#, c-format
+msgid "create %s"
+msgstr "Erzeugen von %s"
+
+#: src/LYLocal.c:991
+msgid "Enter name for new directory: "
+msgstr "Name für neues Verzeichnis: "
+
+#: src/LYLocal.c:1042
+msgid "Create file or directory (f or d): "
+msgstr "Datei(f) oder Verzeichnis(d) erzeugen? [fd] "
+
+#: src/LYLocal.c:1083
+#, c-format
+msgid "Remove '%s' and all of its contents?"
+msgstr "'%s' mit gesamtem Inhalt entfernen?"
+
+#: src/LYLocal.c:1086
+msgid "Remove directory and all of its contents?"
+msgstr "Verzeichnis und gesamten Inhalt löschen?"
+
+#: src/LYLocal.c:1090
+#, c-format
+msgid "Remove file '%s'?"
+msgstr "Datei '%s' entfernen? "
+
+#: src/LYLocal.c:1092
+msgid "Remove file?"
+msgstr "Datei entfernen?"
+
+#: src/LYLocal.c:1097
+#, c-format
+msgid "Remove symbolic link '%s'?"
+msgstr "Symbolischen Link '%s' entfernen?"
+
+#: src/LYLocal.c:1099
+msgid "Remove symbolic link?"
+msgstr "Symbolischen Link entfernen?"
+
+#: src/LYLocal.c:1190
+msgid "Sorry, don't know how to permit non-UNIX files yet."
+msgstr "Sorry, Dateizugriffsrechte für Systeme außer UNIX können nicht geändert werden."
+
+#: src/LYLocal.c:1220
+msgid "Unable to open permit options file"
+msgstr "Zugriffsrechte-Optionsdatei kann nicht geöffnet werden"
+
+#: src/LYLocal.c:1247
+msgid "Specify permissions below:"
+msgstr "Zugriffsrechte angeben:"
+
+#: src/LYLocal.c:1248 src/LYShowInfo.c:196
+msgid "Owner:"
+msgstr "Besitzer:"
+
+#: src/LYLocal.c:1264
+msgid "Group"
+msgstr "Gruppe"
+
+#: src/LYLocal.c:1280
+msgid "Others:"
+msgstr "Andere:"
+
+#: src/LYLocal.c:1298
+msgid "form to permit"
+msgstr "Form für Zugriffsrechte"
+
+#: src/LYLocal.c:1396
+msgid "Invalid mode format."
+msgstr "Ungültiges Format für mode."
+
+#: src/LYLocal.c:1400
+msgid "Invalid syntax format."
+msgstr "Ungültiges Format für Syntax."
+
+#: src/LYLocal.c:1575
+msgid "NULL URL pointer"
+msgstr "Null-URL-Zeiger"
+
+#: src/LYLocal.c:1670
+msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
+msgstr "Warnung! UUDekodierte Dateien werden im Startverzeichnis abgelegt."
+
+#: src/LYLocal.c:1782
+#, c-format
+msgid "Executing %s "
+msgstr "Ausgeführt wird %s "
+
+#: src/LYLocal.c:1785
+msgid "Executing system command. This might take a while."
+msgstr "Systembefehl wird ausgeführt. Das kann eine Weile dauern."
+
+#: src/LYLocal.c:1831
+msgid "Unable to open file management menu file."
+msgstr "Dateimanagement-Menüdatei kann nicht geöffnet werden."
+
+#: src/LYLocal.c:1862
+msgid "Current directory:"
+msgstr "Aktuelles Verzeichnis:"
+
+#: src/LYLocal.c:1865 src/LYLocal.c:1883
+msgid "Current selection:"
+msgstr "Aktuelle Auswahl:"
+
+#: src/LYLocal.c:1869
+msgid "Nothing currently selected."
+msgstr "Zur Zeit nichts ausgewählt."
+
+#: src/LYLocal.c:1884
+msgid "tagged item:"
+msgstr "Markiertes Objekt:"
+
+#: src/LYLocal.c:1884
+msgid "tagged items:"
+msgstr "Markierte Objekte:"
+
+#: src/LYLocal.c:1983 src/LYLocal.c:1994
+msgid "Illegal filename; request ignored."
+msgstr "Ungültiger Dateiname; Befehl ignoriert."
+
+#: src/LYLocal.c:2137
+msgid "The selected item is not a directory! Request ignored."
+msgstr "Das ausgewählte Objekt ist kein Verzeichnis! Befehl ignoriert."
+
+#. directory not writable
+#: src/LYLocal.c:2141
+msgid "Install in the selected directory not permitted."
+msgstr "Installieren im ausgewählten Verzeichnis nicht gestattet."
+
+#: src/LYLocal.c:2146
+msgid "Just a moment, ..."
+msgstr "Nur ein Weilchen, ..."
+
+#: src/LYLocal.c:2163
+msgid "Error buiding install args"
+msgstr "Fehler beim Aufbau der Installations-Argumente"
+
+#: src/LYLocal.c:2178 src/LYLocal.c:2210
+#, c-format
+msgid "Source and target are the same: %s"
+msgstr "Quelle und Ziel sind gleich: %s"
+
+#: src/LYLocal.c:2188 src/LYLocal.c:2220
+#, c-format
+msgid "Already in target directory: %s"
+msgstr "Bereits im Zielverzeichis: %s"
+
+#: src/LYLocal.c:2238
+msgid "Installation complete"
+msgstr "Installation fertig"
+
+#: src/LYLocal.c:2427
+msgid "Temporary URL or list would be too long."
+msgstr "Temporarärer URL oder Liste wäre zu lang."
+
+#: src/LYMail.c:503
+msgid "Sending"
+msgstr "Mail wird gesandt:"
+
+#: src/LYMail.c:989
+#, c-format
+msgid "The link %s :?: %s \n"
+msgstr "Der Link %s :?: %s \n"
+
+#: src/LYMail.c:991
+#, c-format
+msgid "called \"%s\"\n"
+msgstr "mit Namen \"%s\"\n"
+
+#: src/LYMail.c:992
+#, c-format
+msgid "in the file \"%s\" called \"%s\"\n"
+msgstr "in der Datei \"%s\", genannt \"%s\",\n"
+
+#: src/LYMail.c:993
+msgid "was requested but was not available."
+msgstr "wurde angefordert, und war nicht verfügbar."
+
+#: src/LYMail.c:994
+msgid "Thought you might want to know."
+msgstr "Vielleicht wollten Sie das ja gerne wissen."
+
+#: src/LYMail.c:996
+msgid "This message was automatically generated by"
+msgstr "Diese Nachricht wurde automatisch generiert von"
+
+#: src/LYMain.c:897
+msgid "No Winsock found, sorry."
+msgstr "Kein Winsock gefunden, sorry."
+
+#: src/LYMain.c:1103
+msgid "You MUST define a valid TMP or TEMP area!\n"
+msgstr "Ein gültiger Bereich MUSS definiert sein für TMP oder TEMP!\n"
+
+#: src/LYMain.c:1156 src/LYMainLoop.c:5117
+msgid "No such directory"
+msgstr " Verzeichnis"
+
+#: src/LYMain.c:1378
+#, c-format
msgid ""
+"\n"
+"Configuration file %s is not available.\n"
+"\n"
msgstr ""
-"Date: 1998-08-22 16:12:20-0400\n"
-"From: Webmaster Jim <jspath@bcpl.net>\n"
-"Content-Type: text/plain; charset=\n"
-"Files: src/LYMain.c\n"
+"\n"
+"Konfigurationsdatei %s ist nicht zugänglich.\n"
+"\n"
-#: src/LYMain.c:2507
+#: src/LYMain.c:1388
+msgid ""
+"\n"
+"Lynx character sets not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx-Zeichensätze nicht deklariert.\n"
+"\n"
+
+#: src/LYMain.c:1417
+msgid ""
+"\n"
+"Lynx edit map not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx \"edit map\" nicht deklariert.\n"
+"\n"
+
+#: src/LYMain.c:1446
#, c-format
-msgid "%s Version %s %s"
-msgstr "%s Programmversion %s %s"
+msgid ""
+"\n"
+"Lynx file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx-Datei %s ist nicht verfügbar.\n"
+"\n"
+
+#: src/LYMain.c:1704
+msgid "Warning:"
+msgstr "Warnung:"
+
+# No idea what this means. Seems highly experimental anyway. - kw
+#: src/LYMain.c:2247
+msgid "persistent cookies state will be changed in next session only."
+msgstr "Beständige Kekse werden erst beim nächsten Programmaufruf geändert."
-#: src/LYMain.c:2509
+#: src/LYMain.c:2477 src/LYMain.c:2525
#, c-format
+msgid "Lynx: ignoring unrecognized charset=%s\n"
+msgstr "Lynx: ignoriere unbekannte Codierung (charset)=%s\n"
+
+#: src/LYMain.c:3047
+#, c-format
+msgid "%s Version %s (%s)\n"
+msgstr "%s Programmversion %s (%s)\n"
+
+#: src/LYMain.c:3072
+#, c-format
+msgid "Built on %s %s %s\n"
+msgstr "Kompiliert auf %s, %s %s\n"
+
+#: src/LYMain.c:3077
msgid "Copyrights held by the University of Kansas, CERN, and other contributors.\n"
-msgstr "Copyright hielt durch die Universität von Kansas, von CERN und von anderen Mitwirkenden an.\n"
+msgstr "Copyrights - University of Kansas, CERN, Autoren individueller Beiträge.\n"
-#: src/LYMain.c:2511
+#: src/LYMain.c:3079
msgid "Distributed under the GNU General Public License.\n"
-msgstr "Verteilt unter die GNU-Öffentlichkeit Lizenz\n"
+msgstr "Verbreitet unter den Bedingungen der GNU General Public License.\n"
-#: src/LYMain.c:2508
+#: src/LYMain.c:3081
msgid ""
"See http://lynx.browser.org/ and the online help for more information.\n"
"\n"
-msgstr "Sehen Sie http://lynx.browser.org / und die On-line Hilfe zu mehr Information.\n"
+msgstr ""
+"Weitere Informationen: siehe http://lynx.browser.org/ und die Online-Hilfe.\n"
+"\n"
+
+#: src/LYMain.c:3800
+#, c-format
+msgid "USAGE: %s [options] [file]\n"
+msgstr "AUFRUF: %s [optionen] [datei oder URL]\n"
+
+#: src/LYMain.c:3801
+msgid "Options are:\n"
+msgstr "Optionen sind:\n"
+
+#: src/LYMain.c:4060
+#, c-format
+msgid "%s: Invalid Option: %s\n"
+msgstr "%s: Ungültige Option: %s\n"
+
+#: src/LYMainLoop.c:512
+#, c-format
+msgid "Internal error: Invalid mouse link %d!"
+msgstr "Interner Fehler: %d is ungültig für mouse_link!"
+
+#.
+#. * Make a name for this new URL.
+#.
+#: src/LYMainLoop.c:625 src/LYMainLoop.c:5139
+msgid "A URL specified by the user"
+msgstr "Ein vom Benutzer eingegegener URL"
+
+#: src/LYMainLoop.c:1114
+msgid "Enctype multipart/form-data not yet supported! Cannot submit."
+msgstr "Enctype multipart/form-data noch nicht unterstützt! Submission unmöglich."
+
+#.
+#. * Make a name for this help file.
+#.
+#: src/LYMainLoop.c:3097
+msgid "Help Screen"
+msgstr "Hilfe-Seite"
+
+#: src/LYMainLoop.c:3231
+msgid "System Index"
+msgstr "Systemindex"
+
+#: src/LYMainLoop.c:3611 src/LYMainLoop.c:5347
+msgid "Entry into main screen"
+msgstr "Eingang zur Hauptseite"
+
+#: src/LYMainLoop.c:3897
+msgid "No next document present"
+msgstr ""
+
+#: src/LYMainLoop.c:4206
+msgid "charset for this document specified explicitly, sorry..."
+msgstr "'Tschuldigung: Charset für diesen Text ist schon explizit angegeben..."
+
+#: src/LYMainLoop.c:5093
+msgid "cd to:"
+msgstr " um zu "
+
+#: src/LYMainLoop.c:5120
+msgid "A component of path is not a directory"
+msgstr ""
+
+#: src/LYMainLoop.c:5123
+msgid "failed to change directory"
+msgstr "Zugriff auf Verzeichnis fehlgeschlagen."
+
+# How does one translate reparsing anyway? - kw
+#: src/LYMainLoop.c:6291
+msgid "Reparsing document under current settings..."
+msgstr "Document wird mit jetzigen Einstellungen reinterpretiert..."
+
+#: src/LYMainLoop.c:6579 src/LYMainLoop.c:6583
+#, c-format
+msgid "Fatal error - could not open output file %s\n"
+msgstr "Fataler Fehler - Ausgabedatei %s konnte nicht geöffnet werden\n"
+
+#: src/LYMainLoop.c:7719 src/LYMainLoop.c:7892
+msgid "-index-"
+msgstr "-Index"
+
+#: src/LYMainLoop.c:7829
+msgid "lynx: Can't access startfile"
+msgstr "lynx: Unzugängliche Startdatei"
+
+#: src/LYMainLoop.c:7842
+msgid "lynx: Start file could not be found or is not text/html or text/plain"
+msgstr "lynx: Startdatei nicht gefunden oder nicht text/html oder text/plain"
+
+#: src/LYMainLoop.c:7843
+msgid " Exiting..."
+msgstr " Ende..."
+
+#: src/LYMainLoop.c:7886
+msgid "-more-"
+msgstr "-mehr-"
+
+#. Enable scrolling.
+#: src/LYNews.c:203
+msgid "You will be posting to:"
+msgstr "Message wird hinterlegt werden in:"
+
+#.
+#. * Get the mail address for the From header,
+#. * offering personal_mail_address as default.
+#.
+#: src/LYNews.c:212
+msgid ""
+"\n"
+"\n"
+" Please provide your mail address for the From: header\n"
+msgstr ""
+"\n"
+"\n"
+" Bitte eigene Mailadresse für den From-Header angeben\n"
+
+#.
+#. * Get the Subject header, offering the current
+#. * document's title as the default if this is a
+#. * followup rather than a new post. - FM
+#.
+#: src/LYNews.c:230
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Subject: header\n"
+msgstr ""
+"\n"
+"\n"
+" Bitte Betreff angeben oder ändern für den Subject-Header\n"
+
+#: src/LYNews.c:322
+msgid ""
+"\n"
"\n"
+" Please provide or edit the Organization: header\n"
+msgstr ""
+"\n"
+"\n"
+" Bitte Inhalt angeben oder ändern für den Organization-Header\n"
+
+#.
+#. * Use the built in line editior.
+#.
+#: src/LYNews.c:379
+msgid ""
+"\n"
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+"\n"
+" Bitte Nachricht unten eingeben."
+
+#: src/LYNews.c:425
+msgid "Message has no original text!"
+msgstr "Die Message hat keinen neuen Text!"
+
+#: src/LYOptions.c:743
+msgid "review/edit B)ookmarks files"
+msgstr "Lesezeichendateien ((B)ookmark files) ansehen/ändern"
+
+#: src/LYOptions.c:745
+msgid "B)ookmark file: "
+msgstr "Lesezeichendatei/(B)ookmark file: "
+
+#: src/LYOptions.c:2507 src/LYOptions.c:2531
+#, c-format
+msgid "Use %s to invoke the Options menu!"
+msgstr "Benutze %s um das Options-Menu aufzurufen"
+
+#: src/LYOptions.c:3208
+msgid "General Preferences"
+msgstr "Allgmeine Präferenzen"
+
+#. ***************************************************************
+#. User Mode: SELECT
+#: src/LYOptions.c:3212
+msgid "User mode"
+msgstr "User mode"
+
+#. Editor: INPUT
+#: src/LYOptions.c:3218
+msgid "Editor"
+msgstr "Editor"
+
+#. Search Type: SELECT
+#: src/LYOptions.c:3223
+msgid "Type of Search"
+msgstr "Art der Suche"
+
+#. Cookies: SELECT
+#: src/LYOptions.c:3229
+msgid "Cookies"
+msgstr "Kekse (Cookies)"
+
+#: src/LYOptions.c:3243
+msgid "Keyboard Input"
+msgstr "Tastatureingabe"
+
+#. ***************************************************************
+#. Keypad Mode: SELECT
+#: src/LYOptions.c:3247
+msgid "Keypad mode"
+msgstr "Tastaturmodus/Keypad mode"
+
+#. Emacs keys: ON/OFF
+#: src/LYOptions.c:3253
+msgid "Emacs keys"
+msgstr "Emacstasten"
+
+#. VI Keys: ON/OFF
+#: src/LYOptions.c:3259
+msgid "VI keys"
+msgstr "VI-Tasten"
+
+#. Line edit style: SELECT
+#. well, at least 2 line edit styles available
+#: src/LYOptions.c:3266
+msgid "Line edit style"
+msgstr ""
+
+#. Keyboard layout: SELECT
+#: src/LYOptions.c:3278
+#, fuzzy
+msgid "Keyboard layout"
+msgstr "Tastatureingabe"
+
+#.
+#. * Display and Character Set
+#.
+#: src/LYOptions.c:3291
+msgid "Display and Character Set"
+msgstr "Display und Zeichensatz"
+
+#. ***************************************************************
+#. Display Character Set: SELECT
+#: src/LYOptions.c:3295
+msgid "Display character set"
+msgstr "Zeichensatz des Displays"
+
+#: src/LYOptions.c:3324
+msgid "Assumed document character set"
+msgstr "Angenommene Zeichensatzkodierung"
+
+#.
+#. * Since CJK people hardly mixed with other world
+#. * we split the header to make it more readable:
+#. * "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
+#.
+#: src/LYOptions.c:3344
+msgid "CJK mode"
+msgstr "CJK-Modus"
+
+#: src/LYOptions.c:3346
+msgid "Raw 8-bit"
+msgstr "Unkonvertiert (Raw 8-bit)"
+
+#. X Display: INPUT
+#: src/LYOptions.c:3354
+msgid "X Display"
+msgstr "X DISPLAY"
+
+#.
+#. * Document Appearance
+#.
+#: src/LYOptions.c:3360
+msgid "Document Appearance"
+msgstr "Aussehen des Dokuments"
+
+#: src/LYOptions.c:3366
+msgid "Show color"
+msgstr "Farbe zeigen/Show color"
+
+#. Show cursor: ON/OFF
+#: src/LYOptions.c:3390
+msgid "Show cursor"
+msgstr "Positionsmarke zeigen/Show cursor"
+
+#. Select Popups: ON/OFF
+#: src/LYOptions.c:3396
+msgid "Popups for select fields"
+msgstr "Popups für Select-Felder"
+
+#. HTML error recovery: SELECT
+#: src/LYOptions.c:3403
+msgid "HTML error recovery"
+msgstr "HTML-Fehlerbehandlung"
+
+#. Show Images: SELECT
+#: src/LYOptions.c:3410
+msgid "Show images"
+msgstr "Bilder zeigen"
+
+#. Verbose Images: ON/OFF
+#: src/LYOptions.c:3424
+msgid "Verbose images"
+msgstr "Detaillierte Bildinformation"
+
+#.
+#. * Headers Transferred to Remote Servers
+#.
+#: src/LYOptions.c:3432
+msgid "Headers Transferred to Remote Servers"
+msgstr "Einige Headers für Requests zu Remote Servern verschickt"
+
+#. ***************************************************************
+#. Mail Address: INPUT
+#: src/LYOptions.c:3436
+msgid "Personal mail address"
+msgstr "Persönliche Mailadresse"
+
+#. Preferred Document Character Set: INPUT
+#: src/LYOptions.c:3441
+msgid "Preferred document character set"
+msgstr "Erwünschter Zeichensatz (Accept-Charset)"
+
+#. Preferred Document Language: INPUT
+#: src/LYOptions.c:3446
+msgid "Preferred document language"
+msgstr "Erwünschte Dokumentsprache (Accept-Language)"
+
+#: src/LYOptions.c:3452
+msgid "User-Agent header"
+msgstr "Browseridentifizierung (User-Agent)"
+
+#.
+#. * Listing and Accessing Files
+#.
+#: src/LYOptions.c:3460
+msgid "Listing and Accessing Files"
+msgstr "Dateiverzeichnisse anlegen und auf Dateien zugreifen"
+
+#. ***************************************************************
+#. FTP sort: SELECT
+#: src/LYOptions.c:3464
+msgid "FTP sort criteria"
+msgstr "Sortierung für FTP-Verzeichnisse"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3471
+msgid "Local directory sort criteria"
+msgstr "Sortierung für lokale Verzeichnisse"
+
+#: src/LYOptions.c:3479
+msgid "Show dot files"
+msgstr "Dateien mit Punkt am Anfang sichtbar"
+
+#: src/LYOptions.c:3487
+msgid "Execution links"
+msgstr "Ausführbare Links/Execution links"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3507
+msgid "Show transfer rate"
+msgstr "Übertragung komplett."
+
+#.
+#. * Special Files and Screens
+#.
+#: src/LYOptions.c:3516
+msgid "Special Files and Screens"
+msgstr "Besondere Dateien und Bildschirme"
+
+#: src/LYOptions.c:3521
+msgid "Multi-bookmarks"
+msgstr "Multi-Datein-Lesezeichen"
+
+#: src/LYOptions.c:3529
+msgid "Review/edit Bookmarks files"
+msgstr "Lesezeichendateien ansehen/ändern"
+
+#: src/LYOptions.c:3531
+msgid "Goto multi-bookmark menu"
+msgstr "Zum Multi-Lesezeichenmenü"
+
+#: src/LYOptions.c:3533
+msgid "Bookmarks file"
+msgstr "Lesezeichendatei"
+
+#. Visited Pages: SELECT
+#: src/LYOptions.c:3539
+msgid "Visited Pages"
+msgstr "Besuchte Seiten"
+
+#: src/LYPrint.c:959
+msgid " Print job complete.\n"
+msgstr "Druckauftrag abgearbeitet.\n"
+
+#: src/LYPrint.c:1296
+msgid "Document:"
+msgstr "Dokument:"
+
+#: src/LYPrint.c:1297
+msgid "Number of lines:"
+msgstr "Anzahl Zeilen:"
+
+#: src/LYPrint.c:1298
+msgid "Number of pages:"
+msgstr "Seiten:"
+
+#: src/LYPrint.c:1299
+msgid "pages"
+msgstr "Seiten"
+
+#: src/LYPrint.c:1299
+msgid "page"
+msgstr "Seite"
+
+#: src/LYPrint.c:1300
+msgid "(approximately)"
+msgstr "(geschätzt)"
+
+#: src/LYPrint.c:1305
+msgid "Some print functions have been disabled!"
+msgstr "Einige Druckfunktionen sind ausgeschaltet!"
+
+#: src/LYPrint.c:1309
+msgid "Standard print options:"
+msgstr "Normale Druckoptionen:"
+
+#: src/LYPrint.c:1310
+msgid "Print options:"
+msgstr "Druckoptionen:"
+
+#: src/LYPrint.c:1316
+msgid "Save to a local file"
+msgstr "In lokale Datei speichern"
+
+#: src/LYPrint.c:1318
+msgid "Save to disk disabled"
+msgstr "Speichern auf Disk nicht erlaubt"
+
+#: src/LYPrint.c:1324
+msgid "Mail the file"
+msgstr "Datei als Mail schicken"
+
+#: src/LYPrint.c:1330
+msgid "Print to the screen"
+msgstr "Druckausgabe auf Bildschirm"
+
+#: src/LYPrint.c:1334
+msgid "Print out on a printer attached to your vt100 terminal"
+msgstr "Ausgabe auf Drucker verbunden mit VT100-Terminal"
+
+#: src/LYReadCFG.c:340
+msgid ""
+"Syntax Error parsing COLOR in configuration file:\n"
+"The line must be of the form:\n"
+"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
+"\n"
+"Here FOREGROUND and BACKGROUND must be one of:\n"
+"The special strings 'nocolor' or 'default', or\n"
+msgstr ""
+"Syntaxfehler beim Parsen von COLOR in Konfigurationsdatei:\n"
+"Die Zeile muß die folgende Form haben:\n"
+"COLOR:NUMMER:VORDERGRUND:HINTERGRUND\n"
+"\n"
+"Dabei müssen VORDERGRUND und HINTERGRUND eins der folgenden sein:\n"
+"Die speziellen Wörter 'nocolor' oder 'default', oder\n"
+
+#: src/LYReadCFG.c:353
+msgid "Offending line:"
+msgstr "Zeile mit Fehler:"
+
+#: src/LYReadCFG.c:660
+#, c-format
+msgid "key remapping of %s to %s for %s failed\n"
+msgstr "Remapping der Taste von %s zu %s für %s fehlgeschlagen\n"
+
+#: src/LYReadCFG.c:667
+#, c-format
+msgid "key remapping of %s to %s failed\n"
+msgstr "Remapping der Taste von %s zu %s fehlgeschlagen\n"
+
+#: src/LYReadCFG.c:688
+#, c-format
+msgid "invalid line-editor selection %s for key %s, selecting all\n"
+msgstr "ungültige Zeilen-Editor-Auswahl %s für Taste %s, wähle alle aus\n"
+
+#: src/LYReadCFG.c:715 src/LYReadCFG.c:728
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"
+msgstr "Zeileneditor-Bindung der Taste %s (0x%x) an Wert 0x%x für %s ungültig\n"
+
+#: src/LYReadCFG.c:733
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) for %s failed\n"
+msgstr "Zeileneditor-Bindung der Taste %s (0x%x) für %s ungültig\n"
+
+#: src/LYReadCFG.c:838
+#, c-format
+msgid "Lynx: cannot start, CERN rules file %s is not available\n"
+msgstr "Lynx: Programmstart verweigert, Regeldatei %s (CERN rules file) nicht verfügbar\n"
+
+#: src/LYReadCFG.c:840
+msgid "(no name)"
+msgstr "(ohne Namen)"
+
+#: src/LYReadCFG.c:1658
+#, c-format
+msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
+msgstr "Mehr als %d geschachtelte lynx.cfg-Includes -- Vielleicht eine Schleife?!?\n"
+#: src/LYReadCFG.c:1660
+#, c-format
+msgid "Last attempted include was '%s',\n"
+msgstr "letztes INCLUDE war für '%s',\n"
+
+#: src/LYReadCFG.c:1661
+#, c-format
+msgid "included from '%s'.\n"
+msgstr "enthalten in '%s'.\n"
+
+#: src/LYReadCFG.c:2116 src/LYReadCFG.c:2129 src/LYReadCFG.c:2165
+msgid "The following is read from your lynx.cfg file."
+msgstr "Folgendes is der aktuellen Konfigurationsdatei entnommen."
+
+#: src/LYReadCFG.c:2117 src/LYReadCFG.c:2130
+msgid "Please read the distribution"
+msgstr "Bitte die installierte Konfigurationsdatei"
+
+#: src/LYReadCFG.c:2123 src/LYReadCFG.c:2133
+msgid "for more comments."
+msgstr ""
+" \n"
+"für weitere Erläuterungen ansehen."
+
+# Looks dangerous to me, so I sneak in a warning. - kw
+#: src/LYReadCFG.c:2147
+msgid "RELOAD THE CHANGES"
+msgstr "NEULADEN NACH ÄNDERUNG, AUF EIGENE GEFAHR!"
+
+#: src/LYReadCFG.c:2156
+msgid "Your primary configuration"
+msgstr ""
+" Deine primäre Konfigurationsdatei:\n"
+" #"
+
+#: src/LYShowInfo.c:129
+msgid "Directory that you are currently viewing"
+msgstr "Zur Zeit angeschautes Verzeichnis"
+
+#: src/LYShowInfo.c:132
+msgid "Name:"
+msgstr "Name:"
+
+#: src/LYShowInfo.c:135
+msgid "URL:"
+msgstr " URL:"
+
+#: src/LYShowInfo.c:146
+msgid "Directory that you have currently selected"
+msgstr "Zur Zeit ausgewähltes Verzeichnis"
+
+#: src/LYShowInfo.c:149
+msgid "File that you have currently selected"
+msgstr "Zur Zeit ausgewählte Datei"
+
+#: src/LYShowInfo.c:153
+msgid "Symbolic link that you have currently selected"
+msgstr "Zur Zeit ausgewählter symbolischer Link"
+
+#: src/LYShowInfo.c:157
+msgid "Item that you have currently selected"
+msgstr "Zur Zeit ausgewähltes Objekt"
+
+#: src/LYShowInfo.c:159
+msgid "Full name:"
+msgstr " Pfadname:"
+
+#: src/LYShowInfo.c:168
+msgid "Unable to follow link"
+msgstr "Kann dem Link nicht folgen"
+
+#: src/LYShowInfo.c:170
+msgid "Points to file:"
+msgstr " Zeigt auf:"
+
+#: src/LYShowInfo.c:175
+msgid "Name of owner:"
+msgstr "Name des Besitzers:"
+
+#: src/LYShowInfo.c:178
+msgid "Group name:"
+msgstr "Gruppenname:"
+
+#: src/LYShowInfo.c:181
+msgid "File size:"
+msgstr "Dateilänge:"
+
+#: src/LYShowInfo.c:187
+msgid "Creation date:"
+msgstr "Erzeugungsdatum:"
+
+#: src/LYShowInfo.c:190
+msgid "Last modified:"
+msgstr "Letzte Änderung:"
+
+#: src/LYShowInfo.c:193
+msgid "Last accessed:"
+msgstr "Letzter Zugriff:"
+
+#: src/LYShowInfo.c:195
+msgid "Access Permissions"
+msgstr "Zugriffsrechte"
+
+#: src/LYShowInfo.c:261
+msgid "File that you are currently viewing"
+msgstr "Zur Zeit angeschautes Dokument"
+
+#: src/LYShowInfo.c:266 src/LYShowInfo.c:375
+msgid "Linkname:"
+msgstr "Linkname:"
+
+# Some of the following stuff is highly technical, so leave as English
+# (or whatever the language of protocol elements is...) - kw
+#: src/LYShowInfo.c:279 src/LYShowInfo.c:291
+msgid "Charset:"
+msgstr "Charset:"
+
+#: src/LYShowInfo.c:297
+msgid "Server:"
+msgstr "Server:"
+
+#: src/LYShowInfo.c:300
+msgid "Date:"
+msgstr "Date:"
+
+#: src/LYShowInfo.c:303
+msgid "Last Mod:"
+msgstr "Geändert:"
+
+#: src/LYShowInfo.c:309
+msgid "&nbsp;Expires:"
+msgstr "&nbsp;Expires:"
+
+#: src/LYShowInfo.c:313
+msgid "Cache-Control:"
+msgstr "Cache-Control:"
+
+#: src/LYShowInfo.c:317
+msgid "Content-Length:"
+msgstr "Content-Length:"
+
+#: src/LYShowInfo.c:322
+msgid "Language:"
+msgstr "Language:"
+
+#: src/LYShowInfo.c:329
+msgid "Post Data:"
+msgstr "POST-Daten:"
+
+#: src/LYShowInfo.c:331
+msgid "Post Content Type:"
+msgstr "POST-Content-Type:"
+
+#: src/LYShowInfo.c:340
+msgid "Owner(s):"
+msgstr "Besitzer:"
+
+#: src/LYShowInfo.c:343
+msgid "size:"
+msgstr "Länge:"
+
+#: src/LYShowInfo.c:343
+msgid "lines"
+msgstr "Zeilen"
+
+#: src/LYShowInfo.c:346
+msgid "mode:"
+msgstr "Modus:"
+
+#: src/LYShowInfo.c:348
+msgid "forms mode"
+msgstr "Formmodus"
+
+#: src/LYShowInfo.c:350
+msgid "source"
+msgstr "Quelltext"
+
+#: src/LYShowInfo.c:350
+msgid "normal"
+msgstr "normal"
+
+#: src/LYShowInfo.c:351
+msgid ", safe"
+msgstr ", safe"
+
+#: src/LYShowInfo.c:352
+msgid ", via internal link"
+msgstr ", durch internen Link"
+
+#: src/LYShowInfo.c:358
+msgid ", no-cache"
+msgstr ", no-cache"
+
+#: src/LYShowInfo.c:360
+msgid ", ISMAP script"
+msgstr ", ISMAP-Script"
+
+#: src/LYShowInfo.c:362
+msgid ", bookmark file"
+msgstr ", Lesezeichendatei"
+
+#: src/LYShowInfo.c:371
+msgid "Link that you currently have selected"
+msgstr "Zur Zeit ausgewählter Link"
+
+#: src/LYShowInfo.c:384
+msgid "Method:"
+msgstr "Methode:"
+
+#: src/LYShowInfo.c:389
+msgid "Enctype:"
+msgstr "Enctype:"
+
+#: src/LYShowInfo.c:401
+msgid "(Form field)"
+msgstr "(Formfeld)"
+
+#: src/LYShowInfo.c:416
+msgid "No Links on the current page"
+msgstr "Keine Links auf dieser Seite"
+
+#: src/LYStyle.c:250
+#, c-format
+msgid ""
+"Syntax Error parsing style in lss file:\n"
+"[%s]\n"
+"The line must be of the form:\n"
+"OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
+"where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+msgstr ""
+"Syntaxfehler beim Parsen eines style's in lss-Datei:\n"
+"[%s]\n"
+"Die Zeile muß die folgende Form haben:\n"
+"OBJECT:MONO:COLOR (z.B. em:bold:brightblue:white)\n"
+"wobei OBJECT eins von EM,STRONG,B,I,U,BLINK usw. ist.\n"
+"\n"
+
+#: src/LYTraversal.c:107
+msgid "here is a list of the history stack so that you may rebuild"
+msgstr "hier ist eine Auflistung des History-Stacks zur Rekonstruktion"
+
+#: src/LYUpload.c:78
+msgid "ERROR! - upload command is misconfigured"
+msgstr "FEHLER! - Upload-Befehl ist falsch konfiguriert"
+
+#: src/LYUpload.c:100
+msgid "Illegal redirection \"../\" found! Request ignored."
+msgstr "Unerlaubte Umleitung \"../\" gefunden! Befehl ignoriert."
+
+#: src/LYUpload.c:103
+msgid "Illegal character \"/\" found! Request ignored."
+msgstr "Ungültiges Zeichen \"/\" gefunden! Befehl ignoriert."
+
+#: src/LYUpload.c:106
+msgid "Illegal redirection using \"~\" found! Request ignored."
+msgstr "Unerlaubte Umleitung mit \"~\" gefunden! Befehl ignoriert."
+
+#: src/LYUpload.c:163
+msgid "Unable to upload file."
+msgstr "Upload für Datei nicht möglich."
+
+#: src/LYUpload.c:214
+msgid "Upload To:"
+msgstr "Upload - wohin:"
+
+#: src/LYUpload.c:215
+msgid "Upload options:"
+msgstr "Upload-Optionen:"
+
+#: src/LYUtils.c:3075
+msgid "Unexpected access protocol for this URL scheme."
+msgstr "Unerwartetes Zugangsprotokoll für dieses URL-Schema."
+
+#: src/LYUtils.c:3915
+msgid "Too many tempfiles"
+msgstr ""
+
+#: src/LYUtils.c:4217
+#, fuzzy
+msgid "unknown restriction"
+msgstr "Keine Beschränkungen gesetzt.\n"
+
+#: src/LYUtils.c:4248
+msgid "No restrictions set.\n"
+msgstr "Keine Beschränkungen gesetzt.\n"
+
+#: src/LYUtils.c:4251
+msgid "Restrictions set:\n"
+msgstr "Die folgenden Beschränkungen sind in kraft:\n"
+
+#: src/LYUtils.c:5601
+msgid "Ignoring invalid HOME"
+msgstr "Ungültiger Wert für HOME wird ignoriert"
+
+#: src/LYrcFile.c:20
+msgid "Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n"
+msgstr ""
+
+#: src/LYrcFile.c:242
+msgid ""
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
+msgstr ""
+"accept_all_cookies erlaubt es, Lynx zu sagen, daß alle Kekse (Cookies)\n"
+"akzeptiert werden sollen, falls dies Verhalten erwünscht ist.\n"
+"Die Normaleinstellung ist \"FALSE\", so daß normalerweise bei jedem Keks\n"
+"gefragt wird. Auf \"TRUE\" setzen, um alle Kekse zu akzeptieren.\n"
+
+#: src/LYrcFile.c:249
+msgid ""
+"bookmark_file specifies the name and location of the default bookmark\n"
+"file into which the user can paste links for easy access at a later\n"
+"date.\n"
+msgstr ""
+"bookmark_file gibt Name und Ort der normalen Lesezeichendatei (default\n"
+"bookmark file) an. Der Benutzer kann die URLs von Links an die\n"
+"Lesezeichendatei anfügen, so daß Dokumente später leicht wiedergefunden\n"
+"werden können.\n"
+
+#: src/LYrcFile.c:254
+msgid ""
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
+msgstr ""
+"Wenn case_sensitive_searching auf \"on\" gesetzt ist, dann werden mit\n"
+"den Tasten 's' oder '/' gestartete Suchen mit Vergleichsoperationen\n"
+"durchgeführt, die groß-/kleinschreibungsempfindlich sind, statt\n"
+"Kapitalisierung zu ignorieren. Die übliche Einstellung ist \"off\".\n"
+
+#: src/LYrcFile.c:259
+msgid ""
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
+msgstr ""
+"Die Definition von character_set bestimmt die Darstellung von 8-Bit-\n"
+"Zeichen auf dem Bildschirm. Falls 8-Bit-Zeichen nicht korrekt gezeigt\n"
+"werden, können Sie versuchen, zu einem anderen 8-Bit-Zeichensatz zu\n"
+"wechseln oder die \"7 bit approximations (US-ASCII)\" mit näherungs-\n"
+"weisen Ersatzdarstellungen zu verwenden.\n"
+"Zur Zeit gültige Werte sind:\n"
+
+#: src/LYrcFile.c:266
+msgid ""
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
+msgstr ""
+"cookie_accept_domains und cookie_reject_domains sind kommaseparierte\n"
+"Listen von Domains (mit führendem '.'), von denen alle Kekse automatisch\n"
+"akzeptiert oder verweigert werden sollen. Der Parameter accept_all_cookies\n"
+"parameter hat jedoch Vorrang über jedwede Einstellungen, die durch diese\n"
+"Listen gemacht werden. Wenn dieselbe Domain in cookie_accept_domains und\n"
+"in cookie_reject_domains erscheint, hat die Verweigerung vorrang.\n"
+
+#: src/LYrcFile.c:274
+msgid ""
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
+msgstr ""
+"cookie_file gibt die Datei an, von der langlebige Kekse gelesen werden.\n"
+"Standardeinstellung ist ~/.lynx_cookies.\n"
+
+#: src/LYrcFile.c:279
+msgid ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
+msgstr ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains und\n"
+"cookie_query_invalid_domains sind durch Kommas getrennte Listen von\n"
+"Internet-Domänen, die unterschiedlich strikten Gültigkeitstests\n"
+"unterzogen werden sollten. Wenn eine Domäne auf genaue Gültigkeit\n"
+"gesetzt ist, wird auf strikte Erfüllung von RFC2109 untersucht. Eine\n"
+"Domäne mit schwacher Gültigkeit kann Kekse mit einem ungültigen\n"
+"Pfad oder einem ungültigen Domänen-Attribut ablegen. Alle Domänen\n"
+"fragen grundsätzlich den Benutzer bei ungültigen Pfaden oder Domänen\n"
+
+#: src/LYrcFile.c:292
+msgid ""
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
+msgstr ""
+"dir_list_styles bestimmt den Stil von Verzeichnislisten unter DIRED_SUPPORT\n"
+"(falls eingebaut). Die Normaleinstellung ist \"MIXED_STYLE\", d.h. sowohl\n"
+"Dateien als auch Verzeichnisse werden gemeinsam sortiert.\n"
+"Mit \"FILES_FIRST\" werde normale Dateien zuerst aufgelistet, und mit\n"
+"\"DIRECTORIES_FIRST\" kommen Verzeichnisse zuerst.\n"
+
+#: src/LYrcFile.c:300
+msgid ""
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
+msgstr ""
+"Wenn emacs_keys auf \"on\" gesetzt ist, werden die im Editor EMACS\n"
+"üblichen Bewegungstasten aktiviert:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+
+#: src/LYrcFile.c:306
+msgid ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+msgstr ""
+"file_editor gibt das Programm an, das als Editor benutzt wird, wenn lokale\n"
+"Dateien geändert werden sollen oder wenn Mail geschickt werden soll.\n"
+"Wenn kein Editor angegeben ist, ist Editieren nicht möglich außer wenn es\n"
+"von der Befehlszeile aus aktiviert wird, und der eingebaute Zeileneditor\n"
+"wird für das Schicken von Mail benutzt.\n"
+
+#: src/LYrcFile.c:312
+msgid ""
+"The file_sorting_method specifies which value to sort on when viewing\n"
+"file lists such as FTP directories. The options are:\n"
+" BY_FILENAME -- sorts on the name of the file\n"
+" BY_TYPE -- sorts on the type of the file\n"
+" BY_SIZE -- sorts on the size of the file\n"
+" BY_DATE -- sorts on the date of the file\n"
+msgstr ""
+"file_sorting_method gibt an, nach welchem Feld Dateilisten\n"
+"wie z.B. FTP-Verzeichnisse sortiert werden sollen.\n"
+"Die möglichen Optionen sind:\n"
+" BY_FILENAME -- sortiert nach Dateinamen\n"
+" BY_TYPE -- sortiert nach Dateityp\n"
+" BY_SIZE -- sortiert nach Dateilänge\n"
+" BY_DATE -- sortiert nach Änderungsdatum\n"
+
+#: src/LYrcFile.c:324
+msgid ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+msgstr ""
+"lineedit_mode gibt an, welche Tastaturbindungen für die Zeicheneingabe\n"
+"in Prompts un Formfeldern verwendet werden. Wenn lineedit_mode auf\n"
+"\"Default Binding\" gesetzt ist, werden die folgenden Kontrollzeichen\n"
+"zum Bewegen und Löschen benutzt:\n"
+"\n"
+" rückwärts/vorwärts Enter = Eingabe = Accept input\n"
+"Einzelzeichen: <- -> ^G = Abbruch (Cancel input)\n"
+" ganzes Wort: ^P ^N ^U = Zeile Löschen (Erase line)\n"
+"Lösch Zeichen: ^H ^R ^A = Zeilenanfang (Beginning of line)\n"
+" Lösche Wort: ^B ^F ^E = Zeilenende (End of line)\n"
+"\n"
+"Zur Zeit verfügbare Bindungen sind:\n"
+
+#: src/LYrcFile.c:339
+msgid ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+msgstr ""
+"Im folgenden können Unterlesezeichendateien (sub-bookmark files)\n"
+"un ihre Beschreibungen definiert werden. Das Format ist\n"
+"multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Bis zu 26 Lesezeichendateien (für die im Englischen verwendeten\n"
+"Großbuchstaben) sind erlaubt.\n"
+"Wir beginnen mit \"multi_bookmarkB\", da 'A' schon für normale\n"
+"Lesezeichen (siehe oben) benutzt wird.\n"
+
+#: src/LYrcFile.c:345
+msgid ""
+"personal_mail_address specifies your personal mail address. The\n"
+"address will be sent during HTTP file transfers for authorization and\n"
+"logging purposes, and for mailed comments.\n"
+"If you do not want this information given out, set the NO_FROM_HEADER\n"
+"to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
+"could leave this field blank, but then you won't have it included in\n"
+"your mailed comments.\n"
+msgstr ""
+"personal_mail_address gibt die persönliche Mailadresse des Benutzers an.\n"
+"Die Adresse wird für das Schicken von Kommentaren als Mail benutzt,\n"
+"und kann auch bei Zugriff zu einem HTTP-Server für Authorisierungs-\n"
+"und Logging-Zwecke in einem Header gesandt werden. Letztere Nutzung\n"
+"ist normalerweise ausgeschaltet um personenbezogene Daten zu schützen,\n"
+"kann aber durch Setzen von NO_FROM_HEADER in lynx.cfg oder durch den\n"
+"Switch -from in der Befehlszeile aktiviert werden.\n"
+"Dieses Feld könnte hier auch leergelassen werden, aber dann wird die\n"
+"Absenderadresse in Mail-Kommentaren fehlen.\n"
+
+#: src/LYrcFile.c:354
+msgid ""
+"preferred_charset specifies the character set in MIME notation (e.g.,\n"
+"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
+"to http servers using an Accept-Charset header. The value should NOT\n"
+"include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
+"by default. May be a comma-separated list.\n"
+"If a file in that character set is available, the server will send it.\n"
+"If no Accept-Charset header is present, the default is that any\n"
+"character set is acceptable. If an Accept-Charset header is present,\n"
+"and if the server cannot send a response which is acceptable\n"
+"according to the Accept-Charset header, then the server SHOULD send\n"
+"an error response, though the sending of an unacceptable response\n"
+"is also allowed.\n"
+msgstr ""
+"preferred_charset gibt Zeichensatz und -kodierung (charset) in MIME-\n"
+"Notation an (z.B. ISO-8859-2, ISO-8859-5), Lynx benutzt diese Einstellung\n"
+"um einem HTTP-Server im Accept-Charset-Header mitzuteilen, welches der\n"
+"vorgezogene charset ist. Eine kommaseparierte Liste is auch möglich.\n"
+"Die Werte ISO-8859-1 oder US-ASCII sollten NICHT explizit angegeben\n"
+"werden, da diese bereits als default vorausgesetzt werden.\n"
+"Falls eine Datei mit verlangtem charset vorhanden ist, sollte der Server\n"
+"sie dann schicken. (Bei Abwesenheit eines Accept-Charset-Headers im\n"
+"Request gilt jeder beliebige charset als akzeptabel.) Wenn der\n"
+"Accept-Charset-Header geschickt wird, der Server aber keine dem-\n"
+"entsprechend akzeptable Antwort schicken kann, dann sollte der Server\n"
+"mit einer Fehlermeldung antworten, das Senden einer Antwort mit\n"
+"nichtpassendem charset ist allerdings auch erlaubt.\n"
+
+#: src/LYrcFile.c:368
+msgid ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+msgstr ""
+"preferred_language gibt eine Sprache oder mehrere Sprachen in MIME-\n"
+"Notation an (z.B. en oder fr, kann auch eine kommaseparierte, nach\n"
+"abnehmender Präferenz geordnete Liste sein).\n"
+"Lynx übermittelt die angegebene Sprachpräferenz in Requests zum\n"
+"HTTP-Server. Der Server sollte dann eine Datei in der vorgezogenen\n"
+"Sprache zurückschicken, falls vorhanden; andernfalls antwortet der\n"
+"Server in der für den Server (und die Datei) üblichen Sprache.\n"
+
+#: src/LYrcFile.c:377
+msgid ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Wenn run_all_execution_links auf \"on\" gesetzt ist, werden alle \"local\n"
+"execution links\" ausgeführt, wenn sie aktiviert (ausgewählt) werden.\n"
+"\n"
+"WARNUNG - Dies ist potentiell SEHR gefährlich. Da Sie Dokumente ansehen\n"
+" können, die von unbekannten oder verdächtigen Quellen stammen,\n"
+" besteht die Möglichkeit, daß jemand Ihnen einen Link unterschiebt,\n"
+" der wie ein trojanisches Pferd unerwünschten Zugang gestattet.\n"
+" Solche trojanischen links könnten so geschrieben sein, daß sie\n"
+" Dateien löschen oder die Sicherheit kompromittieren.\n"
+" Die Einstellung sollte nur dann auf \"on\" gesetzt werden, wenn\n"
+" die angeschauten Dokumente von einer vertrauenswürdigen Quelle\n"
+" kommen.\n"
+
+#: src/LYrcFile.c:388
+msgid ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Wenn run_execution_links_on_local_files auf \"on\" gesetzt ist, dann werden\n"
+"alle \"local execution links\", die in LOKALEN Dateien gefunden wurden,\n"
+"ausgeführt, wenn sie aktiviert (ausgewählt) werden.\n"
+"Dies underscheidet sich von run_all_execution_links, insofern als nur\n"
+"für Dateien, die sich auf dem lokalen System befinden, Erlaubnis zur\n"
+"Ausführung gegeben wird.\n"
+"\n"
+"WARNUNG - Dies ist potentiell gefährlich. Da Sie Dokumente ansehen\n"
+" können, die von unbekannten oder verdächtigen Quellen stammen,\n"
+" besteht die Möglichkeit, daß jemand Ihnen einen Link unterschiebt,\n"
+" der wie ein trojanisches Pferd unerwünschten Zugang gestattet.\n"
+" Solche trojanischen links könnten so geschrieben sein, daß sie\n"
+" Dateien löschen oder die Sicherheit kompromittieren.\n"
+" Die Einstellung sollte nur dann auf \"on\" gesetzt werden, wenn\n"
+" die angeschauten Dokumente von einer vertrauenswürdigen Quelle\n"
+" kommen.\n"
+
+#: src/LYrcFile.c:403
+msgid ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+msgstr ""
+"select_popups bestimmt, ob OPTIONs in einem SELECT-Block ohne das\n"
+"Attribute MULTIPLE als eine vertikale Liste von Radio-Buttons oder\n"
+"als Popup-Menü präsentiert werden. Es sei bemerkt, daß Lynx immer eine\n"
+"vertikale Liste von Checkboxes erzeugt, wenn das Attribut MULTIPLE im\n"
+"Start-Tag SELECT vorhanden ist. Der Wert \"on\" macht Popup-Menüs zum\n"
+"Normalverhalten, während der Wert \"off\" die Benutzung von Radio-Buttons\n"
+"zum Normalverhalten macht. Die normale Einstellung kann durch den\n"
+"Toggle-Switch -popup in der Befehlszeile verändert werden.\n"
+
+#: src/LYrcFile.c:413
+msgid ""
+"show_color specifies how to set the color mode at startup. A value of\n"
+"\"never\" will force color mode off (treat the terminal as monochrome)\n"
+"at startup even if the terminal appears to be color capable. A value of\n"
+"\"always\" will force color mode on even if the terminal appears to be\n"
+"monochrome, if this is supported by the library used to build lynx.\n"
+"A value of \"default\" will yield the behavior of assuming\n"
+"a monochrome terminal unless color capability is inferred at startup\n"
+"based on the terminal type, or the -color command line switch is used, or\n"
+"the COLORTERM environment variable is set. The default behavior always is\n"
+"used in anonymous accounts or if the \"option_save\" restriction is set.\n"
+"The effect of the saved value can be overridden via\n"
+"the -color and -nocolor command line switches.\n"
+"The mode set at startup can be changed via the \"show color\" option in\n"
+"the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
+"\"off\" \"show color\" settings will be treated as \"default\".\n"
+msgstr ""
+"show_color gibt den Farbmodus bei Programmstart an. Die Einstellung\n"
+"\"never\" schaltet Farbunterstützung in Lynx aus (so daß das Terminal\n"
+"als Schwarzweißbildschirm behandelt wird), sogar wenn es scheint daß\n"
+"das Terminal farbfähig ist. Die Einstellung \"always\" erzwingt die\n"
+"Aktivierung des Farbmodus in Lynx, sogar wenn der Terminaltyp nicht\n"
+"farbfähig zu sein scheint, falls die Programmbibliothek, mit der Lynx\n"
+"kompiliert und gelinkt wurde, dies zuläßt.\n"
+"Wenn die Einstellung als \"default\" gespeichert ist, ist das Verhalten\n"
+"wie folgt: Farbunterstützung im Terminal wird angenommen falls beim\n"
+"Programmstart die Beschreibung des Terminaltyps Farbfähigkeit anzeigt\n"
+"oder der Switch -color in der Befehlszeile verwendet wird oder die\n"
+"Umgebungsvariable COLORTERM gesetzt ist. Dieses \"default\"-Verhalten\n"
+"trifft außerdem für anomyme Acounts immer zu, und wenn die \"option_save\"\n"
+"Restriction gesetzt ist.\n"
+"Der Effekt der gespeicherten Einstellung kann durch -color oder -nocolor\n"
+"in der Befehlszeile aufgehoben werden.\n"
+"Der beim Programmstart gesetzte Modus kann mittels der Option \"show color\"\n"
+"im 'O'ptionsmenü geändert werden. Wenn die Optionseinstellungen gespei-\n"
+"chert werden, werden die Werte \"on\" und \"off\" für \"show color\" als\n"
+"\"default\" behandelt.\n"
+
+#: src/LYrcFile.c:430
+msgid ""
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
+msgstr ""
+"show_cursor gibt an ob der Cursor (Schreibmarke) am rechten Bildschirmrand\n"
+"(und wennmöglich in der underen Ecke) 'versteckt' werden sollte, oder ob\n"
+"er links vom aktuellen Link oder der ausgewählten Option in Popup-Fenstern\n"
+"erscheinen soll. Die Plazierung links von ausgewähltem Link oder Option\n"
+"ist nützlich für Sprach- und Brailleschnittstellen, und wenn das Terminal\n"
+"eines ist, welches nicht durch Hervorhebung oder Farbe die Unterscheidung \n"
+"des ausgewählten Links zuläßt. Der Wert \"on\" bewirkt daß der Cursor links\n"
+"von Links erscheint, der Wert \"off\" bewirkt 'Verstecken' des Cursors.\n"
+"Die gewählte Einstellung kann durch den Toggle-Switch -show_cursor in\n"
+"der Befehlszeile geändert werden.\n"
+
+#: src/LYrcFile.c:441
+msgid ""
+"show_dotfiles specifies that the directory listing should include\n"
+"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
+"honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
+"restricted via a command line switch. If display of hidden files\n"
+"is disabled, creation of such files via Lynx also is disabled.\n"
+msgstr ""
+"show_dotfiles gibt an daß in der Auflistung von Verzeichnissen\n"
+"\"versteckte\" (dot-)Dateien und Verzeichnisse enthalten sein sollten.\n"
+"Die Einstellung \"on\" wird nur honoriert, wenn die durch userdefs.h\n"
+"und/oder lynx.cfg gegebenen Einstellungen dies erlauben und keine\n"
+"Restriktion von der Befehlszeile in kraft ist. Wenn die Anzeige\n"
+"von versteckten Dateien ausgeschaltet ist, ist auch die Erzeugung\n"
+"solcher Dateien von Lynx aus nicht erlaubt.\n"
+
+#: src/LYrcFile.c:452
+msgid ""
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
+msgstr ""
+"Wenn sub_bookmarks nicht \"off\" ist und Multi-Datei-Lesezeichen (multiple\n"
+"bookmarks) definiert sind (siehe unten), dann werden alle Lesezeichen-\n"
+"operationen als ersten den Benutzer bitten, eine aktive Unterlesezeichen-\n"
+"datei auszuwählen. Das normale bookmark_file wird als Vorgabe vorge-\n"
+"schlagen, fall es definiert is (siehe oben). Wenn diese Option auf\n"
+"\"advanced\" (= fortgeschritten) gesetzt ist und der Benutzermodus (user\n"
+"mode) auch advanced ist, dann führt der Tastenbefehl 'v'iew bookmark\n"
+"zu einer Statuszeilenfrage statt zu dem Menü, welches erscheint wenn\n"
+"der Benutzermodus novice oder intermediate ist. Wenn diese Option auf\n"
+"\"standard\" gesetzt ist, dann erscheint das letzgenannt Menü immer,\n"
+"unabhängig vom Benutzermodus.\n"
+
+#: src/LYrcFile.c:464
+msgid ""
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
+msgstr ""
+"user_mode bestimmt den Benutzermodus, das Kenntnisniveau des Benutzers\n"
+"im Umgang mit Lynx. Wenn nicht anders angegeben, wird die Einstellung\n"
+"\"NOVICE\" verwendet. In diesem Modus werden zwei zusätzliche Zeilen mit\n"
+"Hilfsinformationen am unteren Bildschirmrand gezeigt, um dem Benutzer zu\n"
+"helfen, die grundlegenden Tastaturbefehle für Lynx zu lernen.\n"
+"Wenn user_mode auf \"INTERMEDIATE\" gesetzt wird, werden die Extrazeilen\n"
+"ausgeschaltet. Im Modus \"ADVANCED\" wird außerdem der URL des gerade\n"
+"ausgewählten Links am unteren Bildschirmrand angezeigt.\n"
+
+#: src/LYrcFile.c:472
+msgid ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+msgstr ""
+"Wenn verbose_images auf \"on\" gesetzt ist, zeigt Lynx den Dateinamen\n"
+"der Bildquelle anstelle von [INLINE], [LINK] or [IMAGE] an.\n"
+"Siehe auch VERBOSE_IMAGES in lynx.cfg.\n"
+
+#: src/LYrcFile.c:477
+msgid ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+msgstr ""
+"Wenn vi_keys auf \"on\" gesetzt ist, werden die im Editor VI üblichen\n"
+"Bewegungstasten aktiviert:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"Diese Einstellung wirkt sich nur auf die Kleinbuchstaben aus.\n"
+"Die Wirkung der Großbuchstaben 'H', 'J' and 'K' bleibt unverändert,\n"
+"diese können daher zur gleichen Zeit immer noch verwendet werden um\n"
+"die normalen Aktionen (activate help, jump shortcuts, keymap display)\n"
+"auszulösen.\n"
+
+#: src/LYrcFile.c:485
+msgid ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+msgstr ""
+"Die visited_links Einrichtung legt fest, wie Lynx die Informationen\n"
+"auf der Seite für besuchte Links organisiert.\n"
+
+#: src/LYrcFile.c:693
+msgid ""
+"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
+"your keypad when the numlock is on will act as arrow keys:\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"and the corresponding keyboard numbers will act as arrow keys,\n"
+"regardless of whether numlock is on.\n"
+msgstr ""
+"Wenn keypad_mode auf \"NUMBERS_AS_ARROWS\" gesetzt ist, dann werden die\n"
+"meisten Ziffern als entsprechende Bewegungstasten vom Ziffernblock\n"
+"der üblichen Tastatur behandelt. Dadurch können diese Tasten als\n"
+"Pfeiltasten verwendet werden, wenn \"Numlock\" aktiv ist.\n"
+"\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"Die über den Buchstaben gelegenen Zifferntasten haben dann natürlich\n"
+"denselben Effekt, unabhängig vom \"Numlock\"-Zustand.\n"
+
+#: src/LYrcFile.c:702
+msgid ""
+"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
+"appear next to each link and numbers are used to select links.\n"
+msgstr ""
+"Wenn keypad_mode auf \"LINKS_ARE_NUMBERED\" gesetzt ist, dann werden\n"
+"Links mit einer sichtbaren Numerierung versehen, und Zifferntasten\n"
+"können zur Auswahl von Links benutzt werden.\n"
+
+#: src/LYrcFile.c:706
+msgid ""
+"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
+"numbers will appear next to each link and visible form input field.\n"
+"Numbers are used to select links, or to move the \"current link\" to a\n"
+"form input field or button. In addition, options in popup menus are\n"
+"indexed so that the user may type an option number to select an option in\n"
+"a popup menu, even if the option isn't visible on the screen. Reference\n"
+"lists and output from the list command also enumerate form inputs.\n"
+msgstr ""
+"Wenn keypad_mode auf \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" gesetzt ist,\n"
+"dann werden Links und sichtbare Formfelder mit nebenstehend erscheinender\n"
+"Numerierung versehen, und Zifferntasten können zur Auswahl von Links oder\n"
+"für Positionierung auf Formeingabefelder und -buttons verwendet werden. \n"
+"Zusätzlich werden auch Optionen in Popup-Menüs durchnumeriert, so daß\n"
+"eine Option durch Eingabe der entsprechenden Nummer ausgewählt werden\n"
+"kann (sogar wenn die gewünschte Option nicht im gerade auf dem Bildschirm\n"
+"sichtbaren Bereich des Popup-Menüs liegt). Außerdem werden Formfelder\n"
+"auch in Verweislisten und im Ergebnis des Tastenbefehls 'L'ist numeriert\n"
+"aufgelistet.\n"
+
+#: src/LYrcFile.c:715
+msgid ""
+"NOTE: Some fixed format documents may look disfigured when\n"
+"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
+"enabled.\n"
+msgstr ""
+"Warnung: Einige Dokumente mit fixem Format können unschön aussehen,\n"
+"wenn \"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\"\n"
+"eingeschaltet ist.\n"
+
+#: src/LYrcFile.c:748
+msgid ""
+"Lynx User Defaults File\n"
+"\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
+msgstr ""
+"Lynx User Defaults File\n"
+"\n"
+"Diese Datei enthält Optionen, die vom Lynx Options Screen gespeichert\n"
+"worden sind (üblicherweise mit der Taste '>'). Normalerweise braucht\n"
+"diese Datei nicht manuell editiert zu werden, da die Einstellungen\n"
+"hier vom der Optionsseite kontrolliert werden können. Außerdem wird\n"
+"diese Datei das nächstemal, wenn Optionen von der Optionsseite gespeichert\n"
+"werden, komplett überschrieben. Sie sind gewarnt worden...\n"
+"Wenn Sie nach der generellen Konfigurationsdatei suchen - da sind sie\n"
+"hier am falschen Ort. Die generelle Konfigurationsdatei wird üblicherweise\n"
+"lynx.cfg genannt, und ihr Inhalt und Format ist verschieden.\n"
diff --git a/gnu/usr.bin/lynx/po/fr.po b/gnu/usr.bin/lynx/po/fr.po
index 6b6b950be7f..3bf5e37354b 100644
--- a/gnu/usr.bin/lynx/po/fr.po
+++ b/gnu/usr.bin/lynx/po/fr.po
@@ -1,18 +1,9 @@
-msgid "Prompt"
-msgstr "Confirmer"
-
-msgid "Unable to open temporary file for deletion of link."
-msgstr "Impossible d'ouvrir le fichier temporaire pour supprimer un lien"
-
-msgid "change permissions of your files on Community Net"
-msgstr "TR=change permissions of your files on Community Net"
-
-msgid "NeXT character set "
-msgstr "Jeu de car. NeXT "
-
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Free Software Foundation, Inc.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# Lynx French translation text messages
+# Copyright (C) 1999 James E. Spath
+# You may freely copy this file and add messages and translations
+# as long no comments are removed.
+# FIRST AUTHOR:
+# * * * * * * * * * *
# The French translations for Lynx were created by the
# Chebucto Project.
# Contributors include:
@@ -22,2189 +13,2097 @@ msgstr "Jeu de car. NeXT "
# * * * * * * * * * *
# J.E. Spath <jspath @ bcpl . net> wedged this into Lynx
# started: Wed Sep 2 20:22:45 EDT 1998
+# * * * * * * * * * *
+# changes: Sat Jun 5 10:44:45 EDT 1999 : /jes
+# : deleted strings from garagan, sean, etc. that are missing
+# : from Lynx-2.8.2. Other excess strings remain (those
+# : with no line numbers are presumed to be leftovers).
#
-# , fuzzy
-# MUST GO AND FIND NdT= to address problems.
-msgid "yes"
-msgstr "oui"
+# Thu Dec 21 19:37:32 EST 2000, TD resync'd with msgmerge, removed
+# unused messages.
+# Fri Feb 9 19:01:15 EST 2001, TD merged changes by
+# Pierre Amadio <pierre.amadio@libertysurf.fr>
+#
+# * * * * * * * * * *
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: lynx 2.8.2\n"
+"POT-Creation-Date: 2001-06-01 18:55-0400\n"
+"PO-Revision-Date: 1999-06-05 15:18-0400\n"
+"Last-Translator: Jim Spath <jspath@bcpl.net>\n"
+"Language-Team: (none yet, address for now:) French <lynx-dev@sig.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ******************************************************************
+#. * The following definitions are for status line prompts, messages, or
+#. * warnings issued by Lynx during program execution. You can modify
+#. * them to make them more appropriate for your site. We recommend that
+#. * you extend these definitions to other languages using the gettext
+#. * library. There are also scattered uses of 'gettext()' throughout the
+#. * Lynx source, covering all but those messages which (a) are used for
+#. * debugging (CTRACE) or (b) are constants used in interaction with
+#. * other programs.
+#. *
+#. * Links to collections of alternate definitions, developed by the Lynx
+#. * User Community, are maintained in Lynx links:
+#. *
+#. * http://www.trill-home.com/lynx.html
+#. *
+#. * See ABOUT-NLS and po/readme for details and location of contributed
+#. * translations. When no translation is available, the English default is
+#. * used.
+#.
+#: LYMessages.c:29
+#, c-format
+msgid "Alert!: %s"
+msgstr "Alerte! : %s"
-msgid "no"
-msgstr "non"
+# END of the file browser/F)ull menu
+# Following are from the File browser
+#: LYMessages.c:30
+msgid "Welcome"
+msgstr "Bienvenue"
-msgid " (p %d of %d)"
-msgstr " (p %d de %d)"
+#: LYMessages.c:31 LYMessages.c:32
+msgid "Are you sure you want to quit?"
+msgstr "Désirez-vous vraiment quitter?"
-# WWW/Library/Implementation/HTFormat.c
-msgid "Read %d KB of data. %s"
-msgstr "Lecture de %d kilooctets de données. %s"
+#: LYMessages.c:34 LYMessages.c:35
+msgid "Really exit from Lynx?"
+msgstr "Vous voulez vraiment quitter Lynx?"
-msgid "(Press 'z' if you want to abort loading.)"
-msgstr "(Appuyer sur 'z' pour interrompre le chargement.)"
+#: LYMessages.c:37
+msgid "Connection interrupted."
+msgstr "Connexion interrompue."
-msgid "<h1>You have reached the Visited Links Page</h1>\n"
-msgstr "<h1>Vous avez accédé à la Page des liens activés</h1>\n"
+#: LYMessages.c:38
+msgid "Data transfer interrupted."
+msgstr "Transfert de données interrompu"
-msgid "list the references (links) in the current document"
-msgstr "afficher la liste des références du document ouvert"
+#: LYMessages.c:39
+msgid "Cancelled!!!"
+msgstr "Annulé!"
-msgid "Unable to get status of '%s' "
-msgstr "Impossible d'obtenir l'état de '%s' "
+#: LYMessages.c:40
+msgid "Cancelling!"
+msgstr "Annulation!"
-msgid "Unable to determine status of '%s'. "
-msgstr "Impossible de déterminer l'état de '%s'. "
+#: LYMessages.c:41
+msgid "Excellent!!!"
+msgstr "Excellent!"
-msgid "Unable to get status of '%s'. "
-msgstr "Impossible d'obtenir l'état de '%s'. "
+#: LYMessages.c:42
+msgid "OK"
+msgstr ""
-msgid "Executing %s "
-msgstr "Exécution de la commande %s "
+#: LYMessages.c:43
+msgid "Done!"
+msgstr "Terminé!"
-msgid "Current directory is %s<br>\n"
-msgstr "Le répertoire courant est %s<br>\n"
+#: LYMessages.c:44
+msgid "Bad request!"
+msgstr "Demande erronée!"
-msgid "Current selection is %s<p>\n"
-msgstr "La sélection courante est %s<p>\n"
+#: LYMessages.c:45
+msgid "previous"
+msgstr "écran précédent"
-msgid "Nothing currently selected.<p>\n"
-msgstr "Il n'y a rien de sélectionné.<p>\n"
+#: LYMessages.c:46
+msgid "next screen"
+msgstr "écran suivant"
-# msgid "Current selection is %d tagged item%s"
-# msgstr "La sélection courante est %d article(s) marqué(s):"
-msgid "Current selection is %d tagged items"
-msgstr "La sélection courante est %d articles marqués"
+#: LYMessages.c:47
+msgid "HELP!"
+msgstr "Aide!"
-# Following added for Blue Skies Modifications.
-msgid " -exit=EXITPROG program to exec on exit\n"
-msgstr " -exit=EXITPROG programme à exécuter en quittant\n"
+#: LYMessages.c:48
+msgid ", help on "
+msgstr ", aide activée "
-msgid " (HEAD)"
-msgstr " (HEAD)"
+#. #define HELP
+#: LYMessages.c:50
+msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
+msgstr "Touches fléchées: se déplacer, '?': aide, 'q': quitter, '<-': retour"
-# Now, here they changed the text a bit.
-# Lines 7,8 added ("# and the corr...)
-# Lines 11-18 ("# If keypad mode.... Enumerate Form Inputs")
-# Lines 20,21 replace the last line in the old version
-msgid ""
-"# If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
-"# your keypad when the numlock is on will act as arrow keys:\n"
-"# 8 = Up Arrow\n"
-"# 4 = Left Arrow 6 = Right Arrow\n"
-"# 2 = Down Arrow\n"
-"# and the corresponding keyboard numbers will act as arrow keys,\n"
-"# regardless of whether numlock is on.\n"
-"# If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
-"# appear next to each link and numbers are used to select links.\n"
-"# If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
-"# numbers will appear next to each link and visible form input field.\n"
-"# Numbers are used to select links, or to move the \"current link\" to a\n"
-"# form input field or button. In addition, options in popup menus are\n"
-"# indexed so that the user may type an option number to select an option in\n"
-"# a popup menu, even if the option isn't visible on the screen. Reference\n"
-"# lists and output from the list command also enumerate form inputs.\n"
-"# NOTE: Some fixed format documents may look disfigured when\n"
-"# \"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
-"# enabled.\n"
-msgstr ""
-"# TR = If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
-"# your keypad when the numlock is on will act as arrow keys:\n"
-"# 8 = Up Arrow\n"
-"# 4 = Left Arrow 6 = Right Arrow\n"
-"# 2 = Down Arrow\n"
-"# and the corresponding keyboard numbers will act as arrow keys,\n"
-"# regardless of whether numlock is on.\n"
-"# If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
-"# appear next to each link and numbers are used to select links.\n"
-"# If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
-"# numbers will appear next to each link and visible form input field.\n"
-"# Numbers are used to select links, or to move the \"current link\" to a\n"
-"# form input field or button. In addition, options in popup menus are\n"
-"# indexed so that the user may type an option number to select an option in\n"
-"# a popup menu, even if the option isn't visible on the screen. Reference\n"
-"# lists and output from the list command also enumerate form inputs.\n"
-"# NOTE: Some fixed format documents may look disfigured when\n"
-"# \"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
-"# enabled.\n"
-
-msgid "Really exit from Lynx? [N] "
-msgstr "Vous voulez vraiment quitter Lynx? [N]"
-
-msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off. "
+#. #define MOREHELP
+#: LYMessages.c:52
+msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
+msgstr "touche d'espac.: page suiv., flèches: se déplacer, '?': aide, 'q': quitter"
+
+#: LYMessages.c:53
+msgid "-- press space for next page --"
+msgstr "- appuyez sur la touche d'espacement pour aller à la page suivante -"
+
+#: LYMessages.c:54
+msgid "URL too long"
+msgstr "URL à ouvrir"
+
+#. Inactive input fields, messages used with -tna option - kw
+#. #define FORM_LINK_TEXT_MESSAGE_INA
+#: LYMessages.c:60
+msgid "(Text entry field) Inactive. Press <return> to activate."
+msgstr "(Champ texte) inactif. Appuyez sur <entrée> pour l'activer."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA
+#: LYMessages.c:62
+msgid "(Textarea) Inactive. Press <return> to activate."
+msgstr "(Aire de texte) inactive. Appuyez sur <entrée> pour l'activer."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA_E
+#: LYMessages.c:64
+#, c-format
+msgid "(Textarea) Inactive. Press <return> to activate (%s for editor)."
+msgstr "(Aire de texte) Inactive. Appuyez sur <entrée> pour l'activer (%s pour éditer)."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA
+#: LYMessages.c:66
+msgid "(Form field) Inactive. Use <return> to edit."
+msgstr "Entrez le texte. <Entr> pour confirmer («x» : nouvelle instance)."
+
+#. #define FORM_TEXT_SUBMIT_MESSAGE_INA_X
+#: LYMessages.c:68
+#, c-format
+msgid "(Form field) Inactive. Use <return> to edit (%s to submit with no cache)."
+msgstr "Entrez le texte. <Entr> pour confirmer (%s : nouvelle instance)."
+
+#. #define FORM_TEXT_RESUBMIT_MESSAGE_INA
+#: LYMessages.c:70
+msgid "(Form field) Inactive. Press <return> to edit, press <return> twice to submit."
+msgstr "Entrez le texte. <Entr> pour confirmer; flèches ou tabulateur pour se déplacer."
+
+#. #define FORM_TEXT_SUBMIT_MAILTO_MSG_INA
+#: LYMessages.c:72
+msgid "(mailto form field) Inactive. Press <return> to change."
+msgstr "Entrez le texte. <Entr> pour confirmer; touches fléchées pour vous déplacer."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE_INA
+#: LYMessages.c:74
+msgid "(Password entry field) Inactive. Press <return> to activate."
+msgstr "Entrez le texte. Touches HAUT/BAS ou tabulateur pour vous déplacer."
+
+#. #define FORM_LINK_FILE_UNM_MSG
+#: LYMessages.c:77
+msgid "UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off."
+msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer."
+
+#. #define FORM_LINK_FILE_MESSAGE
+#: LYMessages.c:79
+msgid "(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off."
+msgstr "Entrez le texte. Touches HAUT/BAS ou tabulateur pour se déplacer."
+
+#. #define FORM_LINK_TEXT_MESSAGE
+#: LYMessages.c:81
+msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "Entrez le texte. Touches HAUT/BAS ou tabulateur pour se déplacer"
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE
+#: LYMessages.c:83
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off."
+msgstr "Entrez le texte. Touches HAUT/BAS ou tabulateur pour se déplacer."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_E
+#: LYMessages.c:85
+#, c-format
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor)."
+msgstr "Entrez le texte. Touches HAUT/BAS ou tabulateur pour se déplacer (%s pour éditeur)"
+
+#. #define FORM_LINK_TEXT_UNM_MSG
+#: LYMessages.c:87
+msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
+msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE
+#: LYMessages.c:89
+msgid "(Form field) Enter text. Use <return> to submit."
+msgstr "Entrez le texte. <Entr> pour confirmer."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_X
+#: LYMessages.c:91
+#, c-format
+msgid "(Form field) Enter text. Use <return> to submit (%s for no cache)."
+msgstr "Entrez le texte. <Entr> pour confirmer (%s : nouvelle instance)."
+
+#. #define FORM_LINK_TEXT_RESUBMIT_MESSAGE
+#: LYMessages.c:93
+msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
+msgstr "Entrez le texte. <Entr> pour confirmer; flèches ou tabulateur pour se déplacer"
+
+#. #define FORM_LINK_TEXT_SUBMIT_UNM_MSG
+#: LYMessages.c:95
+msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
-msgstr "Touche DROITE ou <Entr> pour confirmer («x» : nouvelle instance)"
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_MSG
+#: LYMessages.c:97
+msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
+msgstr "Entrez le texte. <Entr> pour confirmer; touches fléchées pour vous déplacer"
-msgid "The resource requested is not available at this time."
-msgstr "La ressource demandée n'est pas disponible en ce moment."
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:99
+msgid "(mailto form field) Mail is disallowed so you cannot submit."
+msgstr "Fonction de courrier invalidée; impossible de soumettre l'envoi"
-msgid "URL: %s"
-msgstr "l'URL : %s"
+#. #define FORM_LINK_PASSWORD_MESSAGE
+#: LYMessages.c:101
+msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "Entrez le texte. Touches HAUT/BAS ou tabulateur pour vous déplacer"
-msgid "Unable to access WWW file!!!"
-msgstr "Impossible d'accéder au fichier W3!"
+#. #define FORM_LINK_PASSWORD_UNM_MSG
+#: LYMessages.c:103
+msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
+msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-msgid "Currently viewing document source. Press '\\' to return to rendered version."
-msgstr "Vous visualisez le code source. Faites '\\' pour la version hypertexte"
+#. #define FORM_LINK_CHECKBOX_MESSAGE
+#: LYMessages.c:105
+msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
+msgstr "Touche DROITE ou <Entr> pour changer d'option"
-msgid "H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
-msgstr "H) Accueil S) Paramètres P) Imprimer G) Aller M)Départ Q)uitter /=chercher [Y]=Historique\n"
+#. #define FORM_LINK_CHECKBOX_UNM_MSG
+#: LYMessages.c:107
+msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
+msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-# NOVICE_LINE_TWO_A
-msgid " O)ther cmds G)o to P)rint B)ack H)ome page C)omment ^L)Refresh Q)uit\n"
-msgstr " O) Commandes G) Aller B) PagePréc H) Accueil C)ommenter ^L) Rafraîchir Q)uitter\n"
+#. #define FORM_LINK_RADIO_MESSAGE
+#: LYMessages.c:109
+msgid "(Radio Button) Use right-arrow or <return> to toggle."
+msgstr "Touche DROITE ou <Entr> pour changer d'option"
-# NOVICE_LINE_TWO_B
-# msgid " O)ther cmds E)dit S)ettings W)hereis N)ext D)ownload U)pload \n"
-# msgid " O)ther cmds E)dit S)ettings W)hereis N)ext D)ownload U)pload L)ist \n"
-msgid " O)ther cmds E)dit S)ettings W)hereis N)ext D)ownload U)pload \n"
-msgstr " O) Commandes S) Paramètres W) Recherche N) Suivant D) Décharger U) Charger\n"
+#. #define FORM_LINK_RADIO_UNM_MSG
+#: LYMessages.c:111
+msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
+msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-# NOVICE_LINE_TWO_C
-msgid " O)ther cmds K)eymap ^R)eload histor(Y) Bookmarks: v)iew, A)dd, R)emove\n"
-msgstr " O) Commandes K) Clavier ^R) Recharger Signets: v)oir A)jouter R) Suppr\n"
+#. #define FORM_LINK_SUBMIT_PREFIX
+#: LYMessages.c:113
+msgid "Submit ('x' for no cache) to "
+msgstr "Soumettre ('x' pour annuler le cache) à"
-# NOVICE_LINE_TWO_D
-# msgid " O)ther cmds I)P list V)isited links Z)ap transfer \n"
-# msgid " O)ther cmds E)dit I)P list L)ist links V)isited links Z)ap transfer \n"
-msgid " O)ther cmds I)P list V)isited links L)ist links Z)ap transfer \n"
-msgstr " O) Commandes E) Éditer Y) Historique P) Imprimer L) Références \n"
+#. #define FORM_LINK_RESUBMIT_PREFIX
+#: LYMessages.c:115
+msgid "Submit to "
+msgstr "Soumettre à"
-# NOVICE_LINE_TWO_E
-msgid " O)ther cmds k)eymap \n"
-msgstr " O) Commandes I) Liste IP V) Liens activés \n"
+#. #define FORM_LINK_SUBMIT_MESSAGE
+#: LYMessages.c:117
+msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
+msgstr "Touche DROITE ou <Entr> pour confirmer («x» : nouvelle instance)"
-msgid "Mailto form submission Cancelled!!!"
-msgstr "Envoi du formulaire mailto annulé!"
+#. #define FORM_LINK_RESUBMIT_MESSAGE
+#: LYMessages.c:119
+msgid "(Form submit button) Use right-arrow or <return> to submit."
+msgstr "Utilisez la touche DROITE ou <Entr> pour confirmer"
-msgid "You cannot download a input field."
-msgstr "Impossible de décharger une zone de saisie"
+#. #define FORM_LINK_SUBMIT_DIS_MSG
+#: LYMessages.c:121
+msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
+msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-msgid "You cannot download an permit option."
-msgstr "Impossible de télédécharger une option de permission."
+#. #define FORM_LINK_SUBMIT_MAILTO_PREFIX
+#: LYMessages.c:123
+msgid "Submit mailto form to "
+msgstr "Soumettre le formulaire via mail à"
-msgid "No random URLs have been used thus far."
-msgstr "Aucun URL arbitraire n'a encore été utilisé."
+#. #define FORM_LINK_SUBMIT_MAILTO_MSG
+#: LYMessages.c:125
+msgid "(mailto form submit button) Use right-arrow or <return> to submit."
+msgstr "Utilisez la touche DROITE ou <Entr> pour confirmer"
-# !!! becomes
-msgid ""
-"# preferred_charset specifies the character set in MIME notation (e.g.,\n"
-"# ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
-"# to http servers using an Accept-Charset header. The value should NOT\n"
-"!# include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
-"!# by default. May be a comma-separated list.\n"
-"!# If a file in that character set is available, the server will send it.\n"
-"!# If no Accept-Charset header is present, the default is that any\n"
-"!# character set is acceptable. If an Accept-Charset header is present,\n"
-"!# and if the server cannot send a response which is acceptable\n"
-"!# according to the Accept-Charset header, then the server SHOULD send\n"
-"!# an error response, though the sending of an unacceptable response\n"
-"!# is also allowed.\n"
-msgstr ""
-"# preferred_charset specifies the character set in MIME notation (e.g.,\n"
-"# ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
-"# to http servers using an Accept-Charset header. The value should NOT\n"
-"# include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
-"# by default. May be a comma-separated list.\n"
-"# If a file in that character set is available, the server will send it.\n"
-"# If no Accept-Charset header is present, the default is that any\n"
-"# character set is acceptable. If an Accept-Charset header is present,\n"
-"# and if the server cannot send a response which is acceptable\n"
-"# according to the Accept-Charset header, then the server SHOULD send\n"
-"# an error response, though the sending of an unacceptable response\n"
-"# is also allowed.\n"
-
-# ! ! ! Becomes
-msgid ""
-"Syntax Error parsing COLOR in configuration file:\n"
-"The line must be of the form:\n"
-"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
-"\n"
-"!Here FOREGROUND and BACKGROUND must be one of:\n"
-"!The special strings 'nocolor' or 'default', or\n"
-msgstr ""
-"Syntax Error parsing COLOR in configuration file:\n"
-"The line must be of the form:\n"
-"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
-"\n"
-"!Here FOREGROUND and BACKGROUND must be one of:\n"
-"!The special strings 'nocolor' or 'default', or\n"
+#. #define FORM_LINK_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:127
+msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
+msgstr "Fonction de courrier invalidée; envoi impossible"
-msgid "Unable to open bookmark file for deletion of link."
-msgstr "Impossible d'ouvrir le fichier de signets pour supprimer un lien"
+#. #define FORM_LINK_RESET_MESSAGE
+#: LYMessages.c:129
+msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
+msgstr "Utilisez la touche DROITE ou <Entr> pour réinitialiser le formulaire"
-msgid "Zip and download all tagged files."
-msgstr "Compresser et décharger tous les fichiers marqués."
+#. #define FORM_LINK_RESET_DIS_MSG
+#: LYMessages.c:131
+msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
+msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-msgid "display and manipulate your files on Community Net"
-msgstr "TR=display and manipulate your files on Community Net"
+#. #define FORM_LINK_OPTION_LIST_MESSAGE
+#: LYMessages.c:133
+msgid "(Option list) Hit return and use arrow keys and return to select option."
+msgstr "Faites <Entr> et touches fléchées, puis <Entr> pour choisir une option"
-msgid "(of selected file)"
-msgstr "(de la sélection courante)"
+# /maxwell/lynx2.7.1/LYMessages_en.h
+#. #define CHOICE_LIST_MESSAGE
+#: LYMessages.c:135
+msgid "(Choice list) Hit return and use arrow keys and return to select option."
+msgstr "(Liste de choix) Entr, puis touches fléchées et Entr pour faire votre choix"
-# ---------------------- 97-Dec-29
-msgid "File is not in a publically accessable area."
-msgstr "TR=File is not in a publically accessable area."
+#. #define FORM_LINK_OPTION_LIST_UNM_MSG
+#: LYMessages.c:137
+msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
+msgstr "Faites <Entr> ou touches fléchées pour revoir les options et quitter"
-msgid "Cancel"
-msgstr "Annul"
+#. #define CHOICE_LIST_UNM_MSG
+#: LYMessages.c:139
+msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
+msgstr "Liste de choix NON MODIFIABLE. Entr ou touches fléchées pour revoir ou quitter"
-msgid "Always"
-msgstr "Toujours"
+#: LYMessages.c:140
+msgid "Submitting form..."
+msgstr "Envoi du formulaire... "
-msgid "neVer"
-msgstr "Jamais"
+#: LYMessages.c:141
+msgid "Resetting form..."
+msgstr "Réinitialisation du formulaire..."
-# NOTE: I will have to get you an example text.
-#
-# Example:
-# csuite.chebucto.ns.ca cookie: Status=Active+Requests Allow? (Y/N/Always/neVer
-# ie <host> cookie: <key>=<value> Allow?
-# Ndt: Yes! The word order might be different...
-# NdT: Can you make the system accept the O, N, T, J commands?
-msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
-msgstr "cookie de %s : %.*s=%.*s Accepter? (O/N/Toujours/Jamais)"
+#. #define RELOADING_FORM
+#: LYMessages.c:143
+msgid "Reloading document. Any form entries will be lost!"
+msgstr "Rechargement du document. Toutes les entrées seront effacées!"
-msgid ""
-" USAGE: lynx -restrictions=[option][,option][,option]\n"
-" List of Options:\n"
-" all restricts all options.\n"
-" bookmark disallow changing the location of the bookmark file.\n"
-" bookmark_exec disallow execution links via the bookmark file\n"
-" change_exec_perms disallow changing the eXecute permission on files\n"
-" (but still allow it for directories) when local file\n"
-" management is enabled.\n"
-" default same as commandline option -anonymous. Disables\n"
-" default services for anonymous users. Currently set to,\n"
-" all restricted except for: inside_telnet, outside_telnet,\n"
-" inside_news, inside_ftp, outside_ftp, inside_rlogin,\n"
-" outside_rlogin, goto, jump and mail. Defaults\n"
-" are settable within userdefs.h\n"
-" dired_support disallow local file management\n"
-" disk_save disallow saving to disk in the download and print menus\n"
-" dotfiles disallow access to, or creation of, hidden (dot) files\n"
-" download disallow downloaders in the download menu\n"
-" editor disallow editing\n"
-" exec disable execution scripts\n"
-" exec_frozen disallow the user from changing the execution link\n"
-" externals disable passing URLs to external programs\n"
-" file_url disallow using G)oto, served links or bookmarks for\n"
-" file: URL's\n"
-" goto disable the 'g' (goto) command\n"
-" inside_ftp disallow ftps for people coming from inside your\n"
-" domain (utmp required for selectivity)\n"
-" inside_news disallow USENET news posting for people coming from\n"
-" inside your domain (utmp required for selectivity)\n"
-" inside_rlogin disallow rlogins for people coming from inside your\n"
-" domain (utmp required for selectivity)\n"
-" inside_telnet disallow telnets for people coming from inside your\n"
-" domain (utmp required for selectivity)\n"
-" inside_ftp disallow ftps for people coming from inside your domain\n"
-" inside_news disallow USENET news posting for people coming from inside\n"
-" 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"
-" 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"
-" outside_ftp disallow ftps for people coming from outside your\n"
-" domain (utmp required for selectivity)\n"
-" outside_news disallow USENET news posting for people coming from\n"
-" outside your domain (utmp required for selectivity)\n"
-" outside_rlogin disallow rlogins for people coming from outside your\n"
-" domain (utmp required for selectivity)\n"
-" outside_telnet disallow telnets for people coming from outside your\n"
-" domain (utmp required for selectivity)\n"
-" outside_ftp disallow ftps for people coming from outside your domain\n"
-" outside_news disallow USENET news posting for people coming from outside\n"
-" 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"
-" print disallow most print options\n"
-" shell disallow shell escapes, and lynxexec, lynxprog or lynxcgi\n"
-" G)oto's\n"
-" suspend disallow Control-Z suspends with escape to shell\n"
-" telnet_port disallow specifying a port in telnet G)oto's\n"
-" useragent disallow modifications of the User-Agent header\n"
-msgstr ""
-" USAGE: lynx -restrictions=[option][,option][,option]\n"
-" List of Options:\n"
-" all restricts all options.\n"
-" bookmark disallow changing the location of the bookmark file.\n"
-" bookmark_exec disallow execution links via the bookmark file\n"
-" change_exec_perms disallow changing the eXecute permission on files\n"
-" (but still allow it for directories) when local file\n"
-" management is enabled.\n"
-" default same as commandline option -anonymous. Disables\n"
-" default services for anonymous users. Currently set to,\n"
-" all restricted except for: inside_telnet, outside_telnet,\n"
-" inside_news, inside_ftp, outside_ftp, inside_rlogin,\n"
-" outside_rlogin, goto, jump and mail. Defaults\n"
-" are settable within userdefs.h\n"
-" dired_support disallow local file management\n"
-" disk_save disallow saving to disk in the download and print menus\n"
-" dotfiles disallow access to, or creation of, hidden (dot) files\n"
-" download disallow downloaders in the download menu\n"
-" editor disallow editing\n"
-" exec disable execution scripts\n"
-" exec_frozen disallow the user from changing the execution link\n"
-" externals disable passing URLs to external programs\n"
-" file_url disallow using G)oto, served links or bookmarks for\n"
-" file: URL's\n"
-" goto disable the 'g' (goto) command\n"
-" inside_ftp disallow ftps for people coming from inside your\n"
-" domain (utmp required for selectivity)\n"
-" inside_news disallow USENET news posting for people coming from\n"
-" inside your domain (utmp required for selectivity)\n"
-" inside_rlogin disallow rlogins for people coming from inside your\n"
-" domain (utmp required for selectivity)\n"
-" inside_telnet disallow telnets for people coming from inside your\n"
-" domain (utmp required for selectivity)\n"
-" inside_ftp disallow ftps for people coming from inside your domain\n"
-" inside_news disallow USENET news posting for people coming from inside\n"
-" 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"
-" 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"
-" outside_ftp disallow ftps for people coming from outside your\n"
-" domain (utmp required for selectivity)\n"
-" outside_news disallow USENET news posting for people coming from\n"
-" outside your domain (utmp required for selectivity)\n"
-" outside_rlogin disallow rlogins for people coming from outside your\n"
-" domain (utmp required for selectivity)\n"
-" outside_telnet disallow telnets for people coming from outside your\n"
-" domain (utmp required for selectivity)\n"
-" outside_ftp disallow ftps for people coming from outside your domain\n"
-" outside_news disallow USENET news posting for people coming from outside\n"
-" 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"
-" print disallow most print options\n"
-" shell disallow shell escapes, and lynxexec, lynxprog or lynxcgi\n"
-" G)oto's\n"
-" suspend disallow Control-Z suspends with escape to shell\n"
-" telnet_port disallow specifying a port in telnet G)oto's\n"
-" useragent disallow modifications of the User-Agent header\n"
-
-# ------------------------------------------------------------------------------
-# Following Added for completeness, but will never appear on CSuite
-# as they only appear on the command line. Will get done "when there is time."
-#
-msgid ""
-"Copyrights held by the University of Kansas, CERN, and other contributors.\n"
-"Distributed under the GNU General Public License.\n"
-"See http://lynx.browser.org/ and the online help for more information.\n"
-"\n"
-msgstr ""
-"Copyrights held by the University of Kansas, CERN, and other contributors.\n"
-"Distributed under the GNU General Public License.\n"
-"See http://lynx.browser.org/ and the online help for more information.\n"
-"\n"
+#: LYMessages.c:144
+#, c-format
+msgid "Warning: Cannot transcode form data to charset %s!"
+msgstr "Transcodage impossible des données au jeu de caractères %s!"
-msgid "(*) Additional options are available in Advanced User Mode"
-msgstr "(*) Options supplémentaires disponibles en mode utilisateur avancé"
+#. #define NORMAL_LINK_MESSAGE
+#: LYMessages.c:147
+msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
+msgstr "Utilisez la touche DROITE ou <Entr> pour activer le lien"
-msgid "Help"
-msgstr "Aide"
+#: LYMessages.c:148
+msgid "The resource requested is not available at this time."
+msgstr "La ressource demandée n'est pas disponible en ce moment."
-# src/LYOptions.c: David Potter's Mods
-msgid "User Options"
-msgstr "Options utilisateur"
+#: LYMessages.c:149
+msgid "Enter Lynx keystroke command: "
+msgstr "Entrer la commande Lynx au clavier : "
-msgid "Color config line too long"
-msgstr "Ligne de configuration des couleurs trop longue"
+#: LYMessages.c:150
+msgid "Looking up "
+msgstr "Recherche "
-# src/LYPrint.c
-msgid " Ok..."
-msgstr " Ok..."
+#: LYMessages.c:151
+#, c-format
+msgid "Getting %s"
+msgstr "Accès à %s"
-msgid "Show cursor: "
-msgstr "Afficher le curseur : "
+#: LYMessages.c:152
+#, c-format
+msgid "Skipping %s"
+msgstr "Ignoré : %s"
-msgid "You are already at main screen!"
-msgstr "Vous êtes déjà à l'écran principal."
+#: LYMessages.c:153
+#, c-format
+msgid "Using %s"
+msgstr "Utilisation de %s"
-msgid "Show color: "
-msgstr "Afficher les couleurs : "
+#: LYMessages.c:154
+#, c-format
+msgid "Illegal URL: %s"
+msgstr "URL illégal : %s"
-msgid "Follow link number: "
-msgstr "Activer le lien numéro : "
+#: LYMessages.c:155
+#, c-format
+msgid "Badly formed address %s"
+msgstr "Adresse mal formée %s"
-# LYOptions.c/h
-msgid "Assume charset if unknown :"
-msgstr "Lynx assume que le jeu de caractère est inconnu :"
+#: LYMessages.c:156
+#, c-format
+msgid "URL: %s"
+msgstr "l'URL : %s"
-msgid ""
-"\n"
-"\n"
-" Please enter your message below.\n"
-" When you are done, press enter and put a single period (.)\n"
-" on a line and press enter again."
-msgstr ""
-"\n"
-"\n"
-" Veuillez entrer votre message ci-après.\n"
-" Une fois terminé, faites Entr et tapez un simple point (.)\n"
-" sur une ligne, puis faites Entr de nouveau."
+#: LYMessages.c:157
+msgid "Unable to access WWW file!!!"
+msgstr "Impossible d'accéder au fichier W3!"
-msgid "Change File Access Menu Not Available\n"
-msgstr "Menu de changement de permission d'accès non disponible\n"
+#: LYMessages.c:158
+#, c-format
+msgid "This is a searchable index. Use %s to search."
+msgstr "Ceci est un index consultable. Utilisez %s pour la recherche."
-msgid "-index- %s"
-msgstr "-index- %s"
+#. #define WWW_INDEX_MORE_MESSAGE
+#: LYMessages.c:160
+#, c-format
+msgid "--More-- This is a searchable index. Use %s to search."
+msgstr "-Suite- Ceci est un index consultable. Utilisez %s pour la recherche."
-msgid "-more- %s"
-msgstr "-suite- %s"
+#: LYMessages.c:161
+msgid "You have entered an invalid link number."
+msgstr "Vous avez entré un numéro de lien invalide."
-msgid ""
-"\n"
-"%s Version %s (1997)\n"
-msgstr ""
-"\n"
-"%s version %s (1997)\n"
+#. #define SOURCE_HELP
+#: LYMessages.c:163
+msgid "Currently viewing document source. Press '\\' to return to rendered version."
+msgstr "Vous visualisez le code source. Faites '\\' pour la version hypertexte"
-msgid "(internal) "
-msgstr "(interne) "
+#. #define NOVICE_LINE_ONE
+#: LYMessages.c:165
+msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
+msgstr "HAUT/BAS: se déplacer; DROITE: activer le lien; GAUCHE: document précédent\n"
-msgid "in "
-msgstr "dans "
+# Is the AIDE command correct? There is no online Help in Lynx.
+#. #define NOVICE_LINE_TWO
+#: LYMessages.c:167
+msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
+msgstr "H) Accueil S) Paramètres P) Imprimer G) Aller M) Départ Q)uitter /=chercher [Y]=Historique\n"
-msgid "Used an invalid Shell Character: (&, `, |, ;)"
-msgstr "TR=Used an invalid Shell Character: (&, `, |, ;)"
+#. #define NOVICE_LINE_TWO_A
+#: LYMessages.c:169
+msgid " O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)uit \n"
+msgstr " O) Commandes G) Aller B) PagePréc H) Accueil C)ommenter ^L) Rafraîchir Q)uitter\n"
-msgid "Japanese (SJIS) "
-msgstr "Japonais (SJIS) "
+#. #define NOVICE_LINE_TWO_B
+#: LYMessages.c:171
+msgid " O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n"
+msgstr " O) Commandes S) Paramètres W) Recherche N) Suivant D) Décharger U) Charger\n"
-msgid "<DD>Comment: %s\n"
-msgstr "<DD>Commentaire : %s\n"
+# NOVICE_LINE_TWO_C
+#. #define NOVICE_LINE_TWO_C
+#: LYMessages.c:173
+msgid "O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)emove \n"
+msgstr " O) Commandes K) Clavier ^R) Recharger Signets: v)oir A)jouter R) Suppr\n"
-# _("<DD>CommentURL: <A href=\"%s\">%s</A>\n"),
-# Address,
-# Title)
-msgid "<DD>CommentURL: <A href=\"%s\">%s</A>\n"
-msgstr "<DD>CommenterURL : <A href=\"%s\">%s</A>\n"
+# Z)ap Transfer missing from line, since it does nothing
+#. #define FORM_NOVICELINE_ONE
+#: LYMessages.c:175
+msgid " Enter text into the field by typing on the keyboard "
+msgstr "Entrez le texte dans la zone à partir du clavier "
-msgid "<DD>PortList=\"%s\"\n"
-msgstr "<DD>Liste de ports=\"%s\"\n"
+#. #define FORM_NOVICELINE_TWO
+#: LYMessages.c:177
+msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
+msgstr "Ctrl-U pour supprimer tout le texte, [rapp. arrière] pour effacer caractère"
-msgid "[IMAGE]-Submit"
-msgstr "[IMAGE]-Envoyer"
+#. #define FORM_NOVICELINE_TWO_DELBL
+#: LYMessages.c:179
+msgid " Ctrl-U to delete text in field, [Backspace] to delete a character "
+msgstr "Ctrl-U pour supprimer tout le texte, [rapp. arrière] pour effacer caractère"
-msgid "Submit"
-msgstr "Envoyer"
+#. #define FORM_NOVICELINE_TWO_VAR
+#: LYMessages.c:181
+#, c-format
+msgid " %s to delete all text in field, [Backspace] to delete a character "
+msgstr "%s pour supprimer tout le texte, [rapp. arrière] pour effacer caractère"
-# If Submit and [IMAGE]-Submit buttons appear, see GridText.c:6635, and HTML.c:4882
-msgid "Reset:"
-msgstr "Effacer :"
+#. #define FORM_NOVICELINE_TWO_DELBL_VAR
+#: LYMessages.c:183
+#, c-format
+msgid " %s to delete text in field, [Backspace] to delete a character "
+msgstr "%s pour supprimer tout le texte, [rapp. arrière] pour effacer caractère"
-msgid ""
-"\n"
-"\n"
-"Error drawing page!\n"
-"Bad HText structure!\n"
-msgstr ""
-"\n"
-"\n"
-"Impossible de générer la page.\n"
-"Structure HText erronée.\n"
+#. mailto
+#: LYMessages.c:186
+msgid "Malformed mailto form submission! Cancelled!"
+msgstr "Envoi de formulaire mailto incorrect. Demande annulée!"
-msgid ""
-"\n"
-"\n"
-"Error accessing document.\n"
-"No data available.\n"
-msgstr ""
-"\n"
-"\n"
-"Erreur d'accès au document.\n"
-"Aucune donnée disponible.\n"
+#: LYMessages.c:187
+msgid "Warning! Control codes in mail address replaced by ?"
+msgstr "Attention! Les codes de controles de l'adresse ont étés remplacés par ?"
-msgid "Memory exhausted, will interrupt transfer"
-msgstr "Mémoire insuffisante; le transfert sera interrompu"
+#: LYMessages.c:188
+msgid "Mail disallowed! Cannot submit."
+msgstr "La fonction de courrier est invalidée. Impossible de soumettre l'envoi!"
-msgid ""
-"HTTP: Proxy authorization required.\n"
-" Use the -pauth=id:pw parameter.\n"
-msgstr ""
-"HTTP : autorisation du mandataire requise.\n"
-" Utiliser le paramètre -pauth=id:pw.\n"
+#: LYMessages.c:189
+msgid "Mailto form submission failed!"
+msgstr "Impossible d'envoyer le formulaire mailto!"
-msgid "Title: "
-msgstr "Titre : "
+#: LYMessages.c:190
+msgid "Mailto form submission Cancelled!!!"
+msgstr "Envoi du formulaire mailto annulé!"
-msgid "Got redirection to a proxy from the proxy!"
-msgstr "Réacheminement vers un mandataire depuis le mandataire!"
+#: LYMessages.c:191
+msgid "Sending form content..."
+msgstr "Envoi du contenu du formulaire..."
-msgid "Read %d uncompressed KB of data. %s(Press 'z' to abort.)"
-msgstr "Lecture de %d Ko de données décompressées. %s(Appuyer sur 'z' pour annuler.)"
+#: LYMessages.c:192
+msgid "No email address is present in mailto URL!"
+msgstr "Aucune adresse de courrier ne figure dans l'URL mailto!"
-# WWW/Library/Implementation/HTFormat.c
-msgid "Read %d uncompressed bytes of data."
-msgstr "Lecture de %d octets de données décompressées."
+#. #define MAILTO_URL_TEMPOPEN_FAILED
+#: LYMessages.c:194
+msgid "Unable to open temporary file for mailto URL!"
+msgstr "Impossible d'ouvrir de fichier temporaire pour l'URL mailto!"
-# WWW/Libary/Implementation/HTFile.c
-msgid "Could not open file for decompression!"
-msgstr "Impossible d'ouvrir le fichier pour décompression."
+#. #define INC_ORIG_MSG_PROMPT
+#: LYMessages.c:196
+msgid "Do you wish to include the original message?"
+msgstr "Voulez-vous inclure le message d'origine?"
-msgid "This client doesn't know how to compose proxyauthorization information for scheme"
-msgstr "Ce client ne sait pas comment composer l'informationd'autorisation du mandataire pour le schème d'adressage"
+#. #define INC_PREPARSED_MSG_PROMPT
+#: LYMessages.c:198
+msgid "Do you wish to include the preparsed source?"
+msgstr "Voulez-vous inclure la source pré-analysée?"
-# replaces:
-msgid "Enter username for %s at %s:"
-msgstr "Nom d'utilisateur pour %s à %s : "
+#. #define SPAWNING_EDITOR_FOR_MAIL
+#: LYMessages.c:200
+msgid "Spawning your selected editor to edit mail message"
+msgstr "Lancement de votre éditeur de choix pour l'édition du message"
-msgid "Convert DOS file"
-msgstr "Conversion de fichier DOS"
+#. #define ERROR_SPAWNING_EDITOR
+#: LYMessages.c:202
+msgid "Error spawning editor, check your editor definition in the options menu"
+msgstr "Erreur de lancement; vérifier les données sur l'éditeur dans les paramètres"
-msgid "Convert Mac file"
-msgstr "Conversion de fichier Mac"
+#: LYMessages.c:203
+msgid "Send this comment?"
+msgstr "Envoyer ce commentaire? "
-msgid "HTML check"
-msgstr "Vérificateur HTML"
+#: LYMessages.c:204
+msgid "Send this message?"
+msgstr "Envoyer ce message? "
-msgid "Spell check"
-msgstr "Vérificateur d'orthographe"
+#: LYMessages.c:205
+msgid "Sending your message..."
+msgstr "Envoi de votre message..."
-msgid "Remove File"
-msgstr "Supprimer le fichier"
+#: LYMessages.c:206
+msgid "Sending your comment:"
+msgstr "Envoi de votre commentaire:"
-msgid "Ftp access is disabled!"
-msgstr "L'accès FTP est désactivé."
+#. textarea
+#: LYMessages.c:209
+msgid "Not in a TEXTAREA; cannot use external editor."
+msgstr "Vous n'êtes pas dans une zone de texte, impossible d'utiliser l'éditeur éxterne."
-msgid "Unable to open command file."
-msgstr "Impossible d'ouvrir le fichier de commande."
+#: LYMessages.c:210
+msgid "Not in a TEXTAREA; cannot use command."
+msgstr "Vous n'êtes pas dans une zone de texte, impossible d'utiliser cette commande."
-# following are from F)ull menu
-msgid "Modify File Name"
-msgstr "Modifier le nom du fichier"
+#: LYMessages.c:213
+msgid "file: ACTIONs are disallowed!"
+msgstr "L'attribut ACTION n'est pas permis avec l'URL 'file:'"
-msgid ", execute"
-msgstr ", exécuter"
+#. #define FILE_SERVED_LINKS_DISALLOWED
+#: LYMessages.c:215
+msgid "file: URLs via served links are disallowed!"
+msgstr "L'URL 'file:' n'est pas permis dans les liens du serveur"
-msgid ", search"
-msgstr ", rechercher"
+#: LYMessages.c:216
+msgid "Access to local files denied."
+msgstr "L'accès aux fichiers cachés est désactivé!"
-msgid "Mailing file. Please wait..."
-msgstr "Envoi du fichier. Veuillez attendre..."
+#: LYMessages.c:217
+msgid "file: URLs via bookmarks are disallowed!"
+msgstr "L'URL 'file:' n'est pas permis dans les signets"
-msgid ", write"
-msgstr ", écrire"
+#. #define SPECIAL_VIA_EXTERNAL_DISALLOWED
+#: LYMessages.c:219
+msgid "This special URL is not allowed in external documents!"
+msgstr "Cet URL spécial n'est pas permis dans les documents externes!"
-msgid "File is %d pages long. Are you sure you want to print? [y]"
-msgstr "Le fichier représente %d pages. Vous voulez l'inmprimer? [o]"
+#: LYMessages.c:220
+msgid "Press <return> to return to Lynx."
+msgstr "Appuyez sur <Entr> pour retourner à Lynx "
-msgid "Please enter a valid internet mail address: "
-msgstr "Veuillez entrer une adresse de courrier Internet valide : "
+#. #define SPAWNING_MSG
+#: LYMessages.c:223
+msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
+msgstr "Lancement du sous-processus DCL; «logout» pour retourner à Lynx.\n"
-msgid "Hit return to accept entered data."
-msgstr "Faites <Entr> pour confirmer."
+#. #define SPAWNING_MSG
+#: LYMessages.c:227
+msgid "Type EXIT to return to Lynx.\n"
+msgstr "Pressez ECHAP pour retourner à lynx.\n"
-msgid "Hit return to accept entered data. Delete data to invoke the default."
-msgstr "<Entr> pour confirmer; <Suppr> pour revenir à la valeur par défaut."
+#. #define SPAWNING_MSG
+#: LYMessages.c:230
+msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
+msgstr "Lancement du shell implicite. Entrez «exit» pour retourner à Lynx.\n"
-msgid "Hit any key to change value; RETURN to accept: "
-msgstr "N'importe quelle touche pour changer la valeur; <Entr> pour accepter."
+#: LYMessages.c:233
+msgid "Spawning is currently disabled."
+msgstr "Le lancement est présentement désactivé."
-# I would need contect I guess here
-# It can be lire, lisez, even lecture... depending the context
-msgid ", read"
-msgstr ", lecture"
+#: LYMessages.c:234
+msgid "The 'd'ownload command is currently disabled."
+msgstr "La commande «d» (décharger) est présentement désactivée."
-msgid " <em>World:</em> "
-msgstr " <em>Global :</em> "
+#: LYMessages.c:235
+msgid "You cannot download an input field."
+msgstr "Vous ne pouvez pas télécharger un champ de formulaire."
-msgid " <em>Group:</em> "
-msgstr " <em>Groupe :</em> "
+#: LYMessages.c:236
+msgid "Form has a mailto action! Cannot download."
+msgstr "Le formulaire contient une entité 'mailto:'. Téléchargement impossible."
-msgid "Write"
-msgstr "Écriture"
+#: LYMessages.c:237
+msgid "You cannot download a mailto: link."
+msgstr "Vous ne pouvez pas télécharger un lien mailto."
-# following refer to file permissions
-msgid "Read"
-msgstr "Lecture"
+#: LYMessages.c:238
+msgid "You cannot download cookies."
+msgstr "Vous ne pouvez télécharger les cookies."
-msgid "IP or Interest group (? for list): "
-msgstr "IP ou groupe d'intérêt (? pour la liste) : "
+#: LYMessages.c:239
+msgid "You cannot download a printing option."
+msgstr "Impossible de télédécharger une option d'impression"
-msgid "Using Zmodem"
-msgstr "Utiliser Zmodem"
+#: LYMessages.c:240
+msgid "You cannot download an upload option."
+msgstr "Impossible de télédécharger une option de chargement."
-msgid "Using Kermit"
-msgstr "Utiliser Kermit"
+#: LYMessages.c:241
+msgid "You cannot download an permit option."
+msgstr "Impossible de télédécharger une option de permission."
-msgid "ADVANCED"
-msgstr "AVANCÉ"
+#: LYMessages.c:242
+msgid "This special URL cannot be downloaded!"
+msgstr "Cet URL spécial ne peut être déchargé!"
-msgid "ALWAYS OFF "
-msgstr "TOUJOURS DÉSACTIVÉ "
+#: LYMessages.c:243
+msgid "Nothing to download."
+msgstr "Il n'y a rien à télédécharger."
-msgid "ALWAYS ON "
-msgstr "TOUJOURS ACTIVÉ "
+#: LYMessages.c:244
+msgid "Trace ON!"
+msgstr "Traçage ACTIVÉ"
-msgid "Advanced "
-msgstr "Avancé "
+#: LYMessages.c:245
+msgid "Trace OFF!"
+msgstr "Traçage DÉSACTIVÉ"
-msgid "By Date "
-msgstr "Date "
+#. #define CLICKABLE_IMAGES_ON
+#: LYMessages.c:247
+msgid "Links will be included for all images! Reloading..."
+msgstr "Les liens seront inclus pour toutes les images! Chargement..."
-# msgid "By Filename"
-# msgstr "Nom de fichier"
-msgid "By Size "
-msgstr "Volume "
+#. #define CLICKABLE_IMAGES_OFF
+#: LYMessages.c:249
+msgid "Standard image handling restored! Reloading..."
+msgstr "Traitement d'image standard restauré. Chargement... "
-msgid "By Type "
-msgstr "Type "
+#. #define PSEUDO_INLINE_ALTS_ON
+#: LYMessages.c:251
+msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
+msgstr "'pseudo-ALT' sera assigné aux images incluses sans l'attribut ALT! Chargement..."
-msgid "CASE INSENSITIVE "
-msgstr "AUCUNE DISTINCT. MAJ/MIN"
+#. #define PSEUDO_INLINE_ALTS_OFF
+#: LYMessages.c:253
+msgid "Inlines without an ALT string specified will be ignored! Reloading..."
+msgstr "Les images incluses sans l'attribut ALT seront ignorées! Chargement..."
-msgid "CASE SENSITIVE "
-msgstr "DISTINCTION MAJ/MIN "
+#: LYMessages.c:254
+msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
+msgstr "Le mode 8-bits ou CJK est réglé à DÉSACTIVÉ! Chargement..."
-msgid "Directories first"
-msgstr "Répertoires d'abord"
+#: LYMessages.c:255
+msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
+msgstr "Le mode 8-bits ou CJK est réglé à ACTIVÉ! Chargement..."
-# msgid "FOR LOCAL FILES ONLY"
-# msgstr "POUR FICHIERS LOCAUX UNIQUEMENT"
-msgid "Files first "
-msgstr "Fichiers d'abord "
+#. #define HEAD_D_L_OR_CANCEL
+#: LYMessages.c:257
+msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
+msgstr "Envoyer requête HEAD pour D)ocument, L)ien ou C) Annuler? (d,l,c) : "
-# msgid "Intermediate"
-# msgstr "Intermédiaire"
-msgid "Links are numbered "
-msgstr "Les liens sont numérotés "
+#. #define HEAD_D_OR_CANCEL
+#: LYMessages.c:259
+msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
+msgstr "Envoyer requête HEAD pour D)ocument ou C) Annuler? (d,c) :"
-msgid "Mixed style "
-msgstr "Style mixte "
+#: LYMessages.c:260
+msgid "Sorry, the document is not an http URL."
+msgstr "Désolé, le document n'est pas un URL http."
-msgid "NONE"
-msgstr "AUCUN(E)"
+#: LYMessages.c:261
+msgid "Sorry, the link is not an http URL."
+msgstr "Désolé, le document n'est pas un URL http."
-msgid "Novice "
-msgstr "Novice "
+#: LYMessages.c:262
+msgid "Sorry, the ACTION for this form is disabled."
+msgstr "Désolé, l'attribut ACTION est invalidé pour ce formulaire."
-msgid "Numbers act as arrows"
-msgstr "Chiffres comme touches fléchées"
+#. #define FORM_ACTION_NOT_HTTP_URL
+#: LYMessages.c:264
+msgid "Sorry, the ACTION for this form is not an http URL."
+msgstr "Désolé, l'attribut ACTION pour ce formulaire n'est pas un URL http."
-msgid "OFF "
-msgstr "DÉSACTIVÉ "
+#: LYMessages.c:265
+msgid "Not an http URL or form ACTION!"
+msgstr "L'élément n'est ni un URL http ni un attribut ACTION!"
-msgid "OFF"
-msgstr "DÉSACTIVÉ"
+#: LYMessages.c:266
+msgid "This special URL cannot be a form ACTION!"
+msgstr "Cet URL spécial ne peut être un attribut ACTION"
-msgid "ON "
-msgstr "ACTIVÉ "
+#: LYMessages.c:267
+msgid "URL is not in starting realm!"
+msgstr "L'URL n'est pas dans la partition de départ spécifiée"
-msgid "STANDARD"
-msgstr "STANDARD"
+#: LYMessages.c:268
+msgid "News posting is disabled!"
+msgstr "L'envoi d'articles Usenet est désactivé"
-msgid "Remove Directory"
-msgstr "Supprimer le répertoire"
+#: LYMessages.c:269
+msgid "File management support is disabled!"
+msgstr "Le soutien de gestion de fichier est désactivé."
-# msgid "<h1>You have reached the Visited Links Page</h1>\n"
-# msgstr "<h1>Vous avez accédé à la Page des liens activés</h1>\n"
-# msgid "Lynx Visited Links Page"
-# msgstr "Lynx - Page des liens activés"
-# msgid "You are sending a comment to:\n "
-# msgstr "Vous envoyez maintenant un commentaire à : "
-# msgid "The Cookie Jar is empty."
-# msgstr "Le fichier des «cookies» est vide"
-# msgid "Lynx Cookie Jar"
-# msgstr "Lynx - Page des «cookies»"
-# msgid "You have reached the Lynx Cookie Jar Page"
-# msgstr "Vous avez accédé à la Page des «cookies»"
-msgid "Modify Directory Name"
-msgstr "Modifier le nom du répertoire"
+#: LYMessages.c:270
+msgid "No jump file is currently available."
+msgstr "Aucun fichier-raccourci n'est présentement disponible."
-msgid "<dt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em>URL:</em> %s\n"
-msgstr "<dt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em>URL :</em> %s\n"
+#: LYMessages.c:271
+msgid "Jump to (use '?' for list): "
+msgstr "Accès à (entrez '?' pour la liste des raccourcis) : "
-msgid "Resubmit POST content to %s ?"
-msgstr "Ré-envoyer le contenu POST vers %s ?"
+#: LYMessages.c:272
+msgid "Jumping to a shortcut URL is disallowed!"
+msgstr "L'accès à un URL par raccourci est invalidé!"
-msgid "mode:"
-msgstr "Mode :"
+#: LYMessages.c:273
+msgid "Random URL is disallowed! Use a shortcut."
+msgstr "L'accès arbitraire à un URL est invalidé. Utilisez un raccourci."
-msgid "<dt>&nbsp;&nbsp;&nbsp;&nbsp;<em>mode:</em> %s\n"
-msgstr "<dt>&nbsp;&nbsp;&nbsp;&nbsp;<em>Mode :</em> %s\n"
+#: LYMessages.c:274
+msgid "No random URLs have been used thus far."
+msgstr "Aucun URL arbitraire n'a encore été utilisé."
-# msgid "Failed to obtain status of current link!"
-# msgstr "Impossible d'obtenir l'état du lien actif!"
-msgid "Shortcut (? for list) or URL: "
-msgstr "Raccourci (? pour la liste) ou URL : "
+#: LYMessages.c:275
+msgid "Bookmark features are currently disabled."
+msgstr "Les fonctions de signets sont présentement désactivées."
-msgid "Current directory is "
-msgstr "Le répertoire courant est "
+#: LYMessages.c:276
+msgid "Execution via bookmarks is disabled."
+msgstr "L'exécution à partir des signets est désactivée."
-msgid " directory"
-msgstr " répertoire"
+#. #define BOOKMARK_FILE_NOT_DEFINED
+#: LYMessages.c:278
+#, c-format
+msgid "Bookmark file is not defined. Use %s to see options."
+msgstr "Le fichier de signets n'est pas défini. Utilisez %s pour voir les options."
-msgid "forms mode"
-msgstr "mode formulaires"
+#. #define NO_TEMP_FOR_HOTLIST
+#: LYMessages.c:280
+msgid "Unable to open tempfile for X Mosaic hotlist conversion."
+msgstr "Impossible d'ouvrir le fichier temp. pour convertir les signets X Mosaic"
-msgid "normal"
-msgstr "normal"
+#: LYMessages.c:281
+msgid "ERROR - unable to open bookmark file."
+msgstr "ERREUR - impossible d'ouvrir le fichier de signets."
-# Whatever it means! Could not figure what what it
-# was safe to do.
-msgid ", safe"
-msgstr ", sécuritaire"
+#. #define BOOKMARK_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:283
+msgid "Unable to open bookmark file for deletion of link."
+msgstr "Impossible d'ouvrir le fichier de signets pour supprimer un lien"
-msgid ", internal link"
-msgstr ", lien interne"
+#. #define BOOKSCRA_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:285
+msgid "Unable to open scratch file for deletion of link."
+msgstr "Impossible d'ouvrir le fichier de travail pour supprimer un lien"
-msgid "(email)"
-msgstr "(courriel)"
+#: LYMessages.c:287
+msgid "Error renaming scratch file."
+msgstr "Erreur de renommage du fichier de travail."
-msgid "<dt>&nbsp;&nbsp;<em>Action:</em> %s\n"
-msgstr "<dt>&nbsp;&nbsp;<em>Action :</em> %s\n"
+#: LYMessages.c:289
+msgid "Error renaming temporary file."
+msgstr "Erreur de renommage du fichier temporaire."
-# msgid "<dt><em>Filename:</em> %s\n"
-# msgstr "<dt><em>Nom de fichier :</em> %s\n"
-# END of INFO page
-# Following are from the file browser/F)ull menu
-msgid "(in current directory)"
-msgstr "(dans le répertoire courant)"
+#. #define BOOKTEMP_COPY_FAIL
+#: LYMessages.c:291
+msgid "Unable to copy temporary file for deletion of link."
+msgstr "Impossible de copier le fichier temporaire (pour l'effacement du lien)."
-msgid "(of current selection)"
-msgstr "(sélection courante)"
+#. #define BOOKTEMP_REOPEN_FAIL_FOR_DEL
+#: LYMessages.c:293
+msgid "Unable to reopen temporary file for deletion of link."
+msgstr "Impossible de réouvrir le fichier temporaire pour supprimer un lien"
-# msgstr "(la sélection courante)"
-# RC/CM 97-Dec-07 for File Browser Options: "Installer (la selection)..."
-# msgstr "(de la sélection courante)"
-msgid "(current selection)"
-msgstr "(sélection courante)"
+#. #define BOOKMARK_LINK_NOT_ONE_LINE
+#: LYMessages.c:296
+msgid "Link is not by itself all on one line in bookmark file."
+msgstr "Le lien ne tient pas sur une seule ligne dans le fichier de signets"
-msgid "(using zip)"
-msgstr "(zip)"
+#: LYMessages.c:297
+msgid "Bookmark deletion failed."
+msgstr "Impossible de supprimer le signet."
-msgid "(using Unix compress)"
-msgstr "(compression Unix)"
+#. #define BOOKMARKS_NOT_TRAVERSED
+#: LYMessages.c:299
+msgid "Bookmark files cannot be traversed (only http URLs)."
+msgstr "Les fichiers de signets ne peuvent être parcourus (seuls les URL http)"
-msgid "(using GNU gzip)"
-msgstr "(gzip)"
+#. #define BOOKMARKS_NOT_OPEN
+#: LYMessages.c:301
+msgid "Unable to open bookmark file, use 'a' to save a link first"
+msgstr "Impossible d'ouvrir le fichier; tapez 'a' pour enreg. un lien d'abord"
-msgid "(using gzip)"
-msgstr "(gzip)"
+#: LYMessages.c:302
+msgid "There are no links in this bookmark file!"
+msgstr "Il n'y a aucun lien dans ce fichier!"
-# END of the file browser/F)ull menu
-# Following are from the File browser
-msgid "Welcome"
-msgstr "Bienvenue"
+#. #define BOOK_D_L_OR_CANCEL
+#: LYMessages.c:304
+msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
+msgstr "D) Enreg. le document, L) Enreg. le lien ou C) Annuler? (d,l,c) : "
-msgid "Up to "
-msgstr "jusqu'à "
+#: LYMessages.c:305
+msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
+msgstr "D) Enreg. le Document sous fichier de signets ou C) Annuler? (d,c) : "
-msgid "Access is not permitted for this path."
-msgstr "L'accès n'est pas permis pour ce chemin."
+#: LYMessages.c:306
+msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
+msgstr "L) Enreg. le Lien sous fichier de signets ou C) Annuler? (l,c) : "
-msgid "Directory browsing is not allowed."
-msgstr "La lecture du répertoire n'est pas permise."
+#. #define NOBOOK_POST_FORM
+#: LYMessages.c:308
+msgid "Documents from forms with POST content cannot be saved as bookmarks."
+msgstr "Les documents ayant un contenu POST ne peuvent être marqués d'un signet"
-msgid "Selective access is not enabled for this directory"
-msgstr "L'accès sélectif n'est pas activé pour ce répertoire."
+#: LYMessages.c:309
+msgid "Cannot save form fields/links"
+msgstr "Impossible d'enregistrer les zones ou les liens d'un formulaire."
-# msgid "Directory browsing is not allowed."
-# msgstr "La lecture du répertoire n'est pas permise."
-# msgid "Selective access is not enabled for this directory"
-# msgstr "L'accès sélectif n'est pas activé pour ce répertoire."
-msgid "This directory is not readable."
-msgstr "Ce répertoire ne peut être lu."
+#. #define NOBOOK_HSML
+#: LYMessages.c:311
+msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
+msgstr "Historique, Information, Menu et Références ne peuvent être des signets"
-msgid "Directories:"
-msgstr "Répertoires :"
+#. #define CONFIRM_BOOKMARK_DELETE
+#: LYMessages.c:313
+msgid "Do you really want to delete this link from your bookmark file?"
+msgstr "Voulez-vous vraiment supprimer ce lien de vos signets?"
-msgid "Subdirectories:"
-msgstr "Sous-répertoires :"
+#: LYMessages.c:314
+msgid "Malformed address."
+msgstr "Adresse incorrecte."
-msgid "Files"
-msgstr "Fichiers"
+#. #define HISTORICAL_ON_MINIMAL_OFF
+#: LYMessages.c:316
+msgid "Historical comment parsing ON (Minimal is overridden)!"
+msgstr "Analyse historique ACTIVÉE (analyse minimale annulée)"
-# msgid "Files:"
-# msgstr "Fichiers :"
-msgid "Empty Directory"
-msgstr "Répertoire vide"
+#. #define HISTORICAL_OFF_MINIMAL_ON
+#: LYMessages.c:318
+msgid "Historical comment parsing OFF (Minimal is in effect)!"
+msgstr "Analyse historique DÉSACTIVÉE (analyse minimale en cours)"
-msgid "Can't access requested file."
-msgstr "Impossible d'accéder au fichier requis."
+#. #define HISTORICAL_ON_VALID_OFF
+#: LYMessages.c:320
+msgid "Historical comment parsing ON (Valid is overridden)!"
+msgstr "Analyse historique ACTIVÉE (analyse de validation annulée)"
-# END of the File browser
-# Following are from the K)eymap
-msgid "Up Arrow"
-msgstr "Haut"
+#. #define HISTORICAL_OFF_VALID_ON
+#: LYMessages.c:322
+msgid "Historical comment parsing OFF (Valid is in effect)!"
+msgstr "Analyse historique DÉSACTIVÉE (analyse de validation en cours)"
-msgid "Down Arrow"
-msgstr "Bas"
+#. #define MINIMAL_ON_IN_EFFECT
+#: LYMessages.c:324
+msgid "Minimal comment parsing ON (and in effect)!"
+msgstr "Analyse minimale ACTIVÉE (et en cours)"
-msgid "Right Arrow"
-msgstr "Droite"
+#. #define MINIMAL_OFF_VALID_ON
+#: LYMessages.c:326
+msgid "Minimal comment parsing OFF (Valid is in effect)!"
+msgstr "Analyse minimale DÉSACTIVÉE (analyse de validation en cours)"
-msgid "Left Arrow"
-msgstr "Gauche"
+#. #define MINIMAL_ON_BUT_HISTORICAL
+#: LYMessages.c:328
+msgid "Minimal comment parsing ON (but Historical is in effect)!"
+msgstr "Analyse minimale ACTIVÉE (mais l'analyse historique est en cours)"
-msgid "Page Down"
-msgstr "DéfilBas"
+#. #define MINIMAL_OFF_HISTORICAL_ON
+#: LYMessages.c:330
+msgid "Minimal comment parsing OFF (Historical is in effect)!"
+msgstr "Analyse minimale DÉSACTIVÉE (l'analyse historique est en cours)"
-msgid "Page Up"
-msgstr "DéfilHaut"
+#: LYMessages.c:331
+msgid "Soft double-quote parsing ON!"
+msgstr "Analyse à tolérance de fautes (soft double-quote) ACTIVÉE"
-msgid "Home"
-msgstr "Début"
+#: LYMessages.c:332
+msgid "Soft double-quote parsing OFF!"
+msgstr "Analyse à tolérance de fautes (soft double-quote) DÉSACTIVÉE"
-msgid "End"
-msgstr "Fin"
+#: LYMessages.c:333
+msgid "Now using TagSoup parsing of HTML."
+msgstr "Analyse du HTML à l'aide de TagSoup."
-msgid "Do key"
-msgstr "«Do»"
+#: LYMessages.c:334
+msgid "Now using SortaSGML parsing of HTML!"
+msgstr "Analyse du HTML à l'aide de SortaSGML."
-msgid "Find key"
-msgstr "«Find»"
+#: LYMessages.c:335
+msgid "You are already at the end of this document."
+msgstr "Vous êtes déjà à la fin du document."
-msgid "Select key"
-msgstr "«Select»"
+#: LYMessages.c:336
+msgid "You are already at the beginning of this document."
+msgstr "Vous êtes déjà au début du document."
-msgid "Insert key"
-msgstr "Inser"
+#: LYMessages.c:337
+#, c-format
+msgid "You are already at page %d of this document."
+msgstr "Vous êtes déjà à la page %d du document."
-msgid "Remove key"
-msgstr "Suppr"
+# Needs context for LINK_ALREADY_CURRENT
+# Prints "Enter link number to follow: "
+# User enters 5
+# Their cursor was on the 5th link, so it says:
+# "Link number 5 already is current."
+#: LYMessages.c:338
+#, c-format
+msgid "Link number %d already is current."
+msgstr "Le lien %d est déjà le lien actif."
-msgid "&lt;tab&gt; "
-msgstr "&lt;Tab&gt; "
+#: LYMessages.c:339
+msgid "You are already at the first document"
+msgstr "Vous êtes déjà au premier document."
-msgid "&lt;Enter&gt; "
-msgstr "&lt;Entr&gt; "
+#: LYMessages.c:340
+msgid "There are no links above this line of the document."
+msgstr "Il n'y a pas de lien au-delà de cette ligne dans le document"
-msgid "&lt;space&gt; "
-msgstr "&lt;Esp&gt; "
+#: LYMessages.c:341
+msgid "There are no links below this line of the document."
+msgstr "Il n'y a pas de lien en deçà de cette ligne dans le document"
-msgid "&lt;delete&gt; "
-msgstr "&lt;Suppr&gt; "
+#. #define MAXLEN_REACHED_DEL_OR_MOV
+#: LYMessages.c:343
+msgid "Maximum length reached! Delete text or move off field."
+msgstr "Vous avez le maximum permis; supprimez du texte ou quittez le champ"
-# msgid "Sorry, no known way of converting %s to %s."
-# msgstr "Désolé, impossible de convertir %s à %s"
-msgid "Unknown target '%s'"
-msgstr "Cible inconnue «%s»"
+#. #define NOT_ON_SUBMIT_OR_LINK
+#: LYMessages.c:345
+msgid "You are not on a form submission button or normal link."
+msgstr "Vous n'êtes pas à un bouton Envoyer ou un lien normal."
-# Only "Read" should be translated
-msgid "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IRUSR\" %s> Read<Br>\n"
-msgstr "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IRUSR\" %s> Lecture<Br>\n"
+#. #define NEED_CHECKED_RADIO_BUTTON
+#: LYMessages.c:347
+msgid "One radio button must be checked at all times!"
+msgstr "Un seul bouton d'option peut être coché à la fois."
-# Only "Write" should be translated
-msgid "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IWUSR\" %s> Write<Br>\n"
-msgstr "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IWUSR\" %s> Écriture<Br>\n"
+#: LYMessages.c:348
+msgid "No submit button for this form, submit single text field?"
+msgstr "Pas de bouton soumettre pour ce formulaire: ne soumettre que ce champ texte ?"
-# The X permission on directories allows traversal or search of that directory
-msgid "Search"
-msgstr "Recherche"
+#: LYMessages.c:349
+msgid "Do you want to go back to the previous document?"
+msgstr "Voulez-vous retourner au document précédent?"
-# the X permission on a file allows that file to be executed as a program
-msgid "Execute"
-msgstr "Exécution"
+#: LYMessages.c:350
+msgid "Use arrows or tab to move off of field."
+msgstr "Touches fléchées ou tabulateur pour se déplacer hors du champ"
-# Only "Read" should be translated
-msgid "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IRGRP\" %s> Read<Br>\n"
-msgstr "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IRGRP\" %s> Lecture<Br>\n"
+#. #define ENTER_TEXT_ARROWS_OR_TAB
+#: LYMessages.c:352
+msgid "Enter text. Use arrows or tab to move off of field."
+msgstr "Entrez le texte. Touches HAUT/BAS ou tabulateur pour vous déplacer."
-# Only "Write" should be translated
-msgid "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IWGRP\" %s> Write<Br>\n"
-msgstr "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IWGRP\" %s> Écriture<Br>\n"
+#: LYMessages.c:353
+msgid "** Bad HTML!! No form action defined. **"
+msgstr "** Erreur de code HTML! Aucune action définie pour le formulaire. **"
-# Only "Read" should be translated
-msgid "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IROTH\" %s> Read<Br>\n"
-msgstr "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IROTH\" %s> Lecture<Br>\n"
+#: LYMessages.c:354
+msgid "Bad HTML!! Unable to create popup window!"
+msgstr "Erreur de code HTML! Impossible de créer de fenêtre flash."
-# Only "Write" should be translated
-msgid "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IWOTH\" %s> Write<Br>\n"
-msgstr "<Input Type=\"checkbox\" Name=\"mode\" Value=\"IWOTH\" %s> Écriture<Br>\n"
+#: LYMessages.c:355
+msgid "Unable to create popup window!"
+msgstr "Impossible de créer de fenêtre flash."
-msgid "directory"
-msgstr "répertoire"
+#: LYMessages.c:356
+msgid "Goto a random URL is disallowed!"
+msgstr "Accès à un URL arbitraire invalidé."
-msgid "Directory: "
-msgstr "Répertoire : "
+#: LYMessages.c:357
+msgid "Goto a non-http URL is disallowed!"
+msgstr "Accès à un URL non http invalidé."
-msgid "file"
-msgstr "fichier"
+#: LYMessages.c:358
+#, c-format
+msgid "You are not allowed to goto \"%s\" URLs"
+msgstr "Vous ne pouvez accéder aux URL «%s:»"
-# msgid "Read %d bytes of data."
-# msgstr "Lecture de %d octets de données"
-msgid "Read %d of %d bytes of data."
-msgstr "Lecture de %d de %d octets de données"
+#: LYMessages.c:359
+msgid "URL to open: "
+msgstr "URL à ouvrir: "
-# Strings from LYOptions.h - modified for form for settings page
-msgid "Editor: "
-msgstr "Éditeur : "
+#: LYMessages.c:360
+msgid "Edit the current Goto URL: "
+msgstr "Éditer la commande Goto URL en cours :"
-msgid "Display Variable: "
-msgstr "Variable d'affichage : "
+#: LYMessages.c:361
+msgid "Edit the previous Goto URL: "
+msgstr "Éditer la commande Goto URL précédente :"
-msgid "Bookmark file: "
-msgstr "Fichier de signets : "
+#: LYMessages.c:362
+msgid "Edit a previous Goto URL: "
+msgstr "Éditer une commande Goto URL précédente :"
-msgid "Personal mail address: "
-msgstr "Adresse de courriel : "
+#: LYMessages.c:363
+msgid "Current document has POST data."
+msgstr "Le document en cours contient des données POST."
-msgid "Line edit style: "
-msgstr "Style d'édition de ligne : "
+#: LYMessages.c:364
+msgid "Edit this document's URL: "
+msgstr "Éditer l'URL de ce document :"
-msgid "User mode: "
-msgstr "Mode utilisateur : "
+#: LYMessages.c:365
+msgid "Edit the current link's URL: "
+msgstr "Editer l'url relative au lien courant: "
-msgid "User agent: "
-msgstr "Agent utilisateur : "
+#: LYMessages.c:366
+msgid "You cannot edit File Management URLs"
+msgstr "Vous ne pouvez pas éditer les url de gestion de fichier."
-msgid "Raw 8-bit or CJK mode: "
-msgstr "Mode 8-bit ou CJK : "
+#: LYMessages.c:367
+msgid "Enter a database query: "
+msgstr "Entrez une recherche dans la base de données : "
-msgid "Preferred document language: "
-msgstr "Langue préférée : "
+#: LYMessages.c:368
+msgid "Enter a whereis query: "
+msgstr "Entrez le mot à rechercher : "
-msgid "Preferred document charset: "
-msgstr "Jeu de caractères préféré : "
+#: LYMessages.c:369
+msgid "Edit the current query: "
+msgstr "Éditer la recherche en cours :"
-msgid "Multiple Bookmarks: "
-msgstr "Signets multiples : "
+#: LYMessages.c:370
+msgid "Edit the previous query: "
+msgstr "Éditer la recherche précédente :"
-msgid "FTP sort criteria: "
-msgstr "Critères de tri FTP : "
+#: LYMessages.c:371
+msgid "Edit a previous query: "
+msgstr "Éditer une recherche précédente :"
-msgid "Search type: "
-msgstr "Type de recherche : "
+#. #define USE_C_R_TO_RESUB_CUR_QUERY
+#: LYMessages.c:373
+msgid "Use Control-R to resubmit the current query."
+msgstr "Faites Ctrl-R pour lancer de nouveau la recherche en cours"
-msgid "Character set: "
-msgstr "Jeu de caractères : "
+#: LYMessages.c:374
+msgid "Edit the current shortcut: "
+msgstr "Éditer le raccourci courant :"
-msgid "Popups for selected field: "
-msgstr "Menus-éclair pour sélections : "
+#: LYMessages.c:375
+msgid "Edit the previous shortcut: "
+msgstr "Éditer le raccourci précédent :"
-msgid "Keypad Mode: "
-msgstr "Bloc numérique : "
+#: LYMessages.c:376
+msgid "Edit a previous shortcut: "
+msgstr "Éditer un raccourci précédent :"
-msgid "Vi keys: "
-msgstr "Touches vi : "
+#: LYMessages.c:377
+#, c-format
+msgid "Key '%c' is not mapped to a jump file!"
+msgstr "Touche '%c' non configurée pour correspondre à un fichier-raccourci"
-msgid "Emacs keys: "
-msgstr "Touches emacs"
+#: LYMessages.c:378
+msgid "Cannot locate jump file!"
+msgstr "Impossible de localiser le fichier-raccourci."
-msgid "Show dot files: "
-msgstr "Montrer les fichiers cachés : "
-
-msgid "[Review bookmarks]"
-msgstr "[Revoir les signets]"
-
-# msgid "ADVANCED"
-# msgstr "AVANCÉ"
-# msgid "STANDARD"
-# msgstr "STANDARD"
-# msgid "By Filename"
-# msgstr "Nom de fichier"
-# msgid "By Size "
-# msgstr "Taille "
-# msgid "By Type "
-# msgstr "Type "
-# msgid "By Date "
-# msgstr "Date "
-# msgid "OFF"
-# msgstr "ACTIVÉ "
-# msgid "ON "
-# msgstr "DÉSACTIVÉ"
-msgid "CASE SENSITIVE "
-msgstr "DISTINCTION MAJ/MIN "
-
-msgid "CASE INSENSITIVE"
-msgstr "AUCUNE DISTINCT. MAJ/MIN"
-
-# msgid "Numbers act as arrows"
-# msgstr "Les chiffres servent de touches fléchées"
-# msgid "Numbers act as arrows "
-# msgstr "Les chiffres servent de touches fléchées"
-# msgid "Links are numbered "
-# msgstr "Les liens sont numérotés "
-# msgid "Links are numbered "
-# msgstr "Les liens sont numérotés "
-msgid "Links and form fields are numbered"
-msgstr "Les liens et les champs des formulaires sont numérotés"
-
-msgid "List directory style: "
-msgstr "Liste de répertoires : "
-
-# msgid "Files first "
-# msgstr "Fichiers d'abord "
-# msgid "Mixed style "
-# msgstr "Style mixte "
-# msgid "Directories first "
-# msgstr "Répertoires d'abord "
-msgid "NOVICE "
-msgstr "NOVICE "
-
-msgid "INTERMEDIATE"
-msgstr "INTERMÉDIAIRE"
-
-msgid "Local execution links: "
-msgstr "Liens exécutables locaux : "
-
-# msgid "ALWAYS ON "
-# msgstr "TOUJOURS ACTIVÉ "
-# msgid "FOR LOCAL FILES ONLY"
-# msgstr "FICHIERS LOCAUX SEULEMENT"
-# msgid "ALWAYS OFF "
-# msgstr "TOUJOURS DÉSACTIVÉ "
-msgid "ALWAYS "
-msgstr "TOUJOURS "
-
-msgid "Always Try"
-msgstr "Toujours essayer"
-
-msgid "NEVER "
-msgstr "JAMAIS "
-
-msgid "[Reset to last saved values]"
-msgstr "[Remettre les dernières valeurs enregistrées]"
-
-msgid "[Return to lynx with displayed values]"
-msgstr "[Retourner à Lynx avec les valeurs affichées]"
-
-# msgid "[Return to lynx with displayed values]"
-# msgstr "[Retourner à Lynx avec les valeurs affichées]"
-msgid "[Save Settings]"
-msgstr "[Enregistrer les paramètres]"
-
-# msgid "(of selected directory)"
-# msgstr "(des répertoires choisis)"
-msgid "list links visited during the current Lynx session"
-msgstr "lister les liens activés durant la session courante"
-
-msgid "display stack of currently-suspended documents"
-msgstr "afficher la pile de documents en suspens"
-
-msgid "Examine the Cookie Jar"
-msgstr "examiner les «cookies»"
-
-# msgid " directory"
-# msgstr " répertoire"
-msgid "Default Binding "
-msgstr "Clavier implicite "
-
-msgid "Current directory is"
-msgstr "Le répertoire courant est"
-
-msgid "You have reached the Lynx Cookie Jar Page"
-msgstr "Vous avez accédé à la Page des «cookies»"
-
-msgid "Accept: %s%s"
-msgstr "Accepter : %s%s"
-
-msgid "Accept: "
-msgstr "Accepter :"
-
-# 98-Feb-07 -CM
-# Charsets from src/charsets/*.tbl
-# Collate and a submit for translation in 1.1
-# "WinLatin2 (cp1250) "
-# "WinCyrillic (cp1251)"
-# "WinLatin1 (cp1252) "
-# "WinGreek (cp1253) "
-# "WinHebrew (cp1255) "
-# "WinArabic (cp1256) "
-# "IBM PC character set"
-# "DosGreek (cp737) "
-# "IBM PC codepage 850 "
-# "PC Latin2 CP 852 "
-# "DosHebrew (cp862) "
-# "DosArabic (cp864) "
-# "DosCyrillic (cp866) "
-# "DosGreek2 (cp869) "
-# "us-ascii "
-# "DEC Multinational "
-# "ISO Latin 1 "
-# "ISO Latin 2 "
-# "ISO Latin 3 "
-# "ISO Latin 4 "
-# "ISO 8859-5 Cyrillic "
-# "ISO 8859-6 Arabic "
-# "ISO 8859-7 Greek "
-# "ISO 8859-8 Hebrew "
-# "ISO 8859-9 (Latin 5)"
-# "ISO 8859-10 "
-# "KOI8-R Cyrillic "
-# "Macintosh (8 bit) "
-# "RFC1345 Mnem "
-# "RFC 1345 Mnemonic "
-# "NeXT character set "
-# "RFC 1345 w/o Intro "
-# "UNICODE UTF 8 "
-# "Vietnamese (VISCII) "
-msgid "Transparent "
-msgstr "Transparent "
-
-msgid "7 bit approximations"
-msgstr "Approximations 7-bit"
-
-msgid "DosArabic (cp864)"
-msgstr "DosArabique (cp864)"
+#: LYMessages.c:379
+msgid "Cannot open jump file!"
+msgstr "Impossible d'ouvrir le fichier-raccourci."
-msgid "The maximum temporary file count has been reached!"
-msgstr "Le nombre maximum de fichiers temporaires a été atteint."
+#: LYMessages.c:380
+msgid "Error reading jump file!"
+msgstr "Erreur de lecture du fichier-raccourci."
-msgid "DosCyrillic (cp866)"
-msgstr "DosCyrilique (cp866)"
+#: LYMessages.c:381
+msgid "Out of memory reading jump file!"
+msgstr "Mémoire insuffisante pour lire le fichier-raccourci."
-msgid "Vietnamese (VISCII) "
-msgstr "Vietnamien (VISCII) "
+#: LYMessages.c:382
+msgid "Out of memory reading jump table!"
+msgstr "Mémoire insuffisante pour lire les tables de raccourcis"
-msgid "Taipei (Big5) "
-msgstr "Taipei (Big5) "
+#: LYMessages.c:383
+msgid "No index is currently available."
+msgstr "Aucun index n'est présentement disponible."
-# ------ end LYMessages_en.h
-msgid "Use vt100 print sequence to print to your attached printer"
-msgstr "Utiliser la séquence vt100 pour imprimer à votre imprimante"
+#. #define CONFIRM_MAIN_SCREEN
+#: LYMessages.c:385
+msgid "Do you really want to go to the Main screen?"
+msgstr "Voulez-vous vraiment aller à l'écran principal?"
-msgid "Korean "
-msgstr "Coréen "
+#: LYMessages.c:386
+msgid "You are already at main screen!"
+msgstr "Vous êtes déjà à l'écran principal."
-msgid "Use Kermit to send to your computer"
-msgstr "Utiliser Kermit pour envoyer à votre ordinateur"
+#. #define NOT_ISINDEX
+#: LYMessages.c:388
+msgid "Not a searchable indexed document -- press '/' to search for a text string"
+msgstr "Document non indexé - faites '/' pour chercher une séquence de texte."
-msgid "Use Zmodem to send to your computer"
-msgstr "Utiliser Zmodem pour envoyer à votre ordinateur"
+#. #define NO_OWNER
+#: LYMessages.c:390
+msgid "No owner is defined for this file so you cannot send a comment"
+msgstr "Aucun propriétaire pour ce fichier; impossible d'envoyer un commentaire"
-# Character Sets from LYCharSets.c
-msgid "ISO Latin 1 "
-msgstr "ISO Latin 1 "
+#: LYMessages.c:391
+#, c-format
+msgid "No owner is defined. Use %s?"
+msgstr "Aucun propriétaire n'est défini. Utiliser %s?"
-msgid "ISO Latin 2 "
-msgstr "ISO Latin 2 "
+#: LYMessages.c:392
+msgid "Do you wish to send a comment?"
+msgstr "Voulez-vous envoyer un commentaire?"
-msgid "Other ISO Latin "
-msgstr "Autre ISO Latin "
+#: LYMessages.c:393
+msgid "Mail is disallowed so you cannot send a comment"
+msgstr "Fonction de courrier invalidée; impossible d'envoyer un commentaire"
-msgid "DEC Multinational "
-msgstr "DEC multinational "
+#: LYMessages.c:394
+msgid "The 'e'dit command is currently disabled."
+msgstr "La commande 'e' (Éditer) est présentement désactivée."
-msgid "IBM PC character set"
-msgstr "Jeu de car. IBM PC "
+#: LYMessages.c:395
+msgid "External editing is currently disabled."
+msgstr "Le soutien externe est présentement inactivé."
-msgid "IBM PC codepage 850 "
-msgstr "Code de page 850 IBM"
+#: LYMessages.c:396
+msgid "System error - failure to get status."
+msgstr "Erreur système - impossible d'obtenir l'état."
-msgid "Macintosh (8 bit) "
-msgstr "Macintosh (8 bit) "
+#: LYMessages.c:397
+msgid "No editor is defined!"
+msgstr "Aucun éditeur n'est défini."
-msgid "KOI8-R character set"
-msgstr "Jeu de car. KO18-R "
+#: LYMessages.c:398
+msgid "The 'p'rint command is currently disabled."
+msgstr "La commande 'p' (Imprimer) est présentement désactivée."
-msgid "KOI8-R Cyrillic"
-msgstr "KOI8-R Cyrillique"
+#: LYMessages.c:399
+msgid "Document has no Toolbar links or Banner."
+msgstr "Aucun lien vers une barre d'outil ou une bannière"
-msgid "Chinese "
-msgstr "Chinois "
+#: LYMessages.c:400
+msgid "Unable to open traversal file."
+msgstr "Impossible d'ouvrir le fichier de parcours."
-msgid "Japanese (EUC) "
-msgstr "Japonais (EUC) "
+#: LYMessages.c:401
+msgid "Unable to open traversal found file."
+msgstr "Impossible d'ouvrir le fichier de parcours trouvé."
-#: /extra/garagan/gettext/lynx2-6/src/GridText.c:661
-msgid ""
-"\n"
-"\n"
-"Error accessing document\n"
-"No data available\n"
-msgstr ""
-"\n"
-"\n"
-"Erreur d'accès au document\n"
-"Aucune donnée disponible\n"
+#: LYMessages.c:402
+msgid "Unable to open reject file."
+msgstr "Impossible d'ouvrir le fichier rejeté."
-#: /extra/garagan/gettext/lynx2-6/src/GridText.c:931
-msgid ""
-"\n"
-" Document is empty"
-msgstr ""
-"\n"
-" Le document est vide"
+#: LYMessages.c:403
+msgid "Unable to open traversal errors output file"
+msgstr "Impossible d'ouvrir le fichier sortie d'erreurs de parcours"
-#: /extra/garagan/gettext/lynx2-6/src/GridText.c:4377 src/GridText.c:7852 src/GridText.c:7855
-msgid "Submitting %s"
-msgstr "Envoi de %s"
+#: LYMessages.c:404
+msgid "TRAVERSAL WAS INTERRUPTED"
+msgstr "PARCOURS INTERROMPU"
-#: /extra/garagan/gettext/lynx2-6/src/HTAlert.c:31 /extra/garagan/gettext/lynx2-6/src/HTAlert.c:33 /extra/garagan/gettext/lynx2-6/src/HTAlert.c:37
-msgid ""
-"\n"
-"Alert!: %s"
-msgstr ""
-"\n"
-"Alerte! : %s"
+#: LYMessages.c:405
+msgid "Follow link (or goto link or page) number: "
+msgstr "Accéder au lien (commande G) Aller) numéro : "
-#: /extra/garagan/gettext/lynx2-6/src/HTAlert.c:220
-msgid "Server asked for redirection of POST content to"
-msgstr "Le serveur demande le réacheminement du contenu POST vers"
+#: LYMessages.c:406
+msgid "Select option (or page) number: "
+msgstr "Choisir le numéro d'option (ou de page) : "
-#: /extra/garagan/gettext/lynx2-6/src/HTAlert.c:221 src/HTAlert.c:583 src/HTAlert.c:598
-msgid "P)roceed, use G)ET or C)ancel "
-msgstr "P) Continuer, utiliser G)ET ou C) Annuler "
+#: LYMessages.c:407
+#, c-format
+msgid "Option number %d already is current."
+msgstr "L'option %d est déjà l'option en cours."
-#: /extra/garagan/gettext/lynx2-6/src/HTAlert.c:223 src/HTAlert.c:592 src/HTAlert.c:607
-msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
-msgstr "Réacheminement du contenu POST. P)Continuer, U)RL, G)ET ou C) Annuler"
+#. #define ALREADY_AT_OPTION_END
+#: LYMessages.c:409
+msgid "You are already at the end of this option list."
+msgstr "Vous êtes déjà à la fin de cette liste d'options."
-#: /extra/garagan/gettext/lynx2-6/src/HTAlert.c:224 src/HTAlert.c:594 src/HTAlert.c:609
-msgid "Location: "
-msgstr "Emplacement : "
+#. #define ALREADY_AT_OPTION_BEGIN
+#: LYMessages.c:411
+msgid "You are already at the beginning of this option list."
+msgstr "Vous êtes déjà au début de cette liste d'options."
-#: /extra/garagan/gettext/lynx2-6/src/HTML.c:1339 /extra/garagan/gettext/lynx2-6/src/HTML.c:1343 src/GridText.c:4568 src/GridText.c:4569 src/HTML.c:1212 src/HTML.c:1213 src/HTML.c:1214 src/HTML.c:1216 src/HTML.c:1217 src/HTML.c:1218
-msgid "Enter a database query: "
-msgstr "Entrez une recherche dans la base de données : "
+#. #define ALREADY_AT_OPTION_PAGE
+#: LYMessages.c:413
+#, c-format
+msgid "You are already at page %d of this option list."
+msgstr "Vous êtes déjà à la page %d de cette liste d'options."
-#: /extra/garagan/gettext/lynx2-6/src/HTML.c:1492
-msgid "HTML: ****** Maximum nesting of %d divisions exceeded!\n"
-msgstr "HTML : Imbrication maximale de %d divisions dépassée!\n"
+#: LYMessages.c:414
+msgid "You have entered an invalid option number."
+msgstr "Vous avez entré un numéro d'option non valide."
-#: /extra/garagan/gettext/lynx2-6/src/HTML.c:1748
-msgid "HTML: TAB tag has no attributes. Ignored.\n"
-msgstr "HTML : le codet TAB n'a pas d'attributs et n'est pas reconnu\n"
+#: LYMessages.c:415
+msgid "** Bad HTML!! Use -trace to diagnose. **"
+msgstr "** Erreur de code HTML! Utiliser -trace pour le diagnostic. **"
-#: /extra/garagan/gettext/lynx2-6/src/HTML.c:1763
-msgid "HTML: ALIGN not 'left'. Using space instead of TAB.\n"
-msgstr "HTML : code ALIGN mal défini; interprété comme espace au lieu de TAB\n"
+#: LYMessages.c:416
+msgid "Give name of file to save in"
+msgstr "Donnez le nom du fichier à sauvegarder."
-#: /extra/garagan/gettext/lynx2-6/src/HTML.c:1776
-msgid "HTML: Not HT_LEFT. Using space instead of TAB.\n"
-msgstr "Élément mal défini; interprété comme un espace au lieu de TAB\n"
+#: LYMessages.c:417
+msgid "Can't save data to file -- please run WWW locally"
+msgstr "Impossible d'enregistrer les données dans le fichier -- Merci d'utiliser www localement."
-#: /extra/garagan/gettext/lynx2-6/src/HTML.c:1816
-msgid "HTML: Column out of bounds. Using space instead of TAB.\n"
-msgstr "HTML : colonnes hors limites; interprété comme espace au lieu de TAB\n"
+#: LYMessages.c:418
+msgid "Can't open temporary file!"
+msgstr "Impossible d'ouvrir le fichier temporaire!"
-#: /extra/garagan/gettext/lynx2-6/src/LYBookmark.c:173 src/LYBookmark.c:147 src/LYBookmark.c:153
-msgid ""
-" This file is an HTML representation of the X Mosaic hotlist file.\n"
-" Outdated or invalid links may be removed by using the\n"
-" remove bookmark command, it is usually the 'R' key but may have\n"
-" been remapped by you or your system administrator.\n"
-"\n"
-"<p>\n"
-"<ol>\n"
-msgstr ""
-" Ce fichier est une représentation HTML du fichier de signets de X Mosaic.\n"
-" Les liens désuets ou non valides peuvent être supprimés au moyen de la\n"
-" commande de suppression de signet, habituellement la touche 'R' mais les\n"
-" touches peuvent avoir été reconfigurées par vous ou l'administrateur système.\n"
-"\n"
-"<p>\n"
-"<ol>\n"
+#: LYMessages.c:419
+msgid "Can't open output file! Cancelling!"
+msgstr "Impossible d'ouvrir le fichier de sortie! Demande annulée."
-#: /extra/garagan/gettext/lynx2-6/src/LYBookmark.c:339
-msgid ""
-" You can delete links using the remove bookmark command. It\n"
-" is usually the 'R' key but may have been remapped by you or\n"
-" your system administrator.<br>\n"
-" This file may also be edited with a standard text editor.\n"
-" Outdated or invalid links may be removed by simply deleting\n"
-" the line the link appears on in this file.\n"
-" Please refer to the Lynx documentation or help files\n"
-" for the HTML link syntax.\n"
-"\n"
-"<p>\n"
-"<ol>\n"
-msgstr ""
-" Vous pouvez supprimer des liens avec la commande de suppression de signet,\n"
-" habituellement la touche 'R' mais les touches peuvent avoir été\n"
-" reconfigurées par vous ou par votre administrateur système.<br>\n"
-" Le fichier peut aussi être édité au moyen d'un éditeur de texte standard.\n"
-" Les liens désuets ou non valides peuvent être supprimés en effaçant\n"
-" simplement la ligne où ce lien apparaît dans le fichier.\n"
-" Voir la documentation Lynx ou les fichiers d'aide\n"
-" pour la syntaxe des liens HTML.\n"
-"\n"
-"<p>\n"
-"<ol>\n"
+#: LYMessages.c:420
+msgid "Execution is disabled."
+msgstr "L'exécution est désactivée."
-#: /extra/garagan/gettext/lynx2-6/src/LYBookmark.h:17 src/LYBookmark.c:325 src/LYBookmark.c:333
-msgid "Bookmark file"
-msgstr "Fichier de signets"
+#. #define EXECUTION_DISABLED_FOR_FILE
+#: LYMessages.c:422
+#, c-format
+msgid "Execution is not enabled for this file. See the Options menu (use %s)."
+msgstr "Exécution non activée pour ce fichier. Voir les paramètres (use %s)."
-#: /extra/garagan/gettext/lynx2-6/src/LYBookmark.h:18 src/LYBookmark.c:146 src/LYBookmark.c:152
-msgid "Converted Mosaic Hotlist"
-msgstr "Liste de signets Mosaic convertie"
+#. #define EXECUTION_NOT_COMPILED
+#: LYMessages.c:424
+msgid "Execution capabilities are not compiled into this version."
+msgstr "Capacités d'exécution non compilées dans cette version."
-#: /extra/garagan/gettext/lynx2-6/src/LYCgi.c:274
-msgid "Read %d bytes of data."
-msgstr "Lecture de %d octets de données"
+#: LYMessages.c:425
+msgid "This file cannot be displayed on this terminal."
+msgstr "Ce fichier ne peut être affiché sur votre terminal."
-#: /extra/garagan/gettext/lynx2-6/src/LYCgi.c:410 src/LYCgi.c:593 src/LYCgi.c:594
-msgid ""
-"<head>\n"
-"<title>Good Advice</title>\n"
-"</head>\n"
-"<body>\n"
-msgstr ""
-"<head>\n"
-"<title>Avis</title>\n"
-"</head>\n"
-"<body>\n"
+#. #define CANNOT_DISPLAY_FILE_D_OR_C
+#: LYMessages.c:427
+msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
+msgstr "Ne peut être affiché sur votre terminal: D) Décharger ou C) Annuler "
-#: /extra/garagan/gettext/lynx2-6/src/LYCgi.c:413 src/LYCgi.c:596 src/LYCgi.c:597
-msgid "<h1>Good Advice</h1>\n"
-msgstr "<h1>Avis</h1>\n"
+#: LYMessages.c:428
+#, c-format
+msgid "%s D)ownload, or C)ancel"
+msgstr "%s D) Décharger ou C) Annuler"
-#: /extra/garagan/gettext/lynx2-6/src/LYCgi.c:416 src/LYCgi.c:599 src/LYCgi.c:600
-msgid "An excellent http server for VMS is available via <a\n"
-msgstr "Un excellent serveur http pour VMS est disponible via <a\n"
+#: LYMessages.c:429
+msgid "Cancelling file."
+msgstr "Annulation!"
-#: /extra/garagan/gettext/lynx2-6/src/LYCgi.c:423 src/LYCgi.c:606 src/LYCgi.c:607
-msgid ">this link</a>.\n"
-msgstr ">ce lien</a>.\n"
+#: LYMessages.c:430
+msgid "Retrieving file. - PLEASE WAIT -"
+msgstr "Récupération du fichier. - VEUILLEZ ATTENDRE -"
-#: /extra/garagan/gettext/lynx2-6/src/LYCgi.c:427 src/LYCgi.c:610 src/LYCgi.c:611
-msgid "<p>It provides <b>state of the art</b> CGI script support.\n"
-msgstr "<p>Il offre un soutien <b>hors pair</b> pour le script CGI.\n"
+#: LYMessages.c:431
+msgid "Enter a filename: "
+msgstr "Entrez un nom de fichier : "
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:197 src/LYCurses.c:751 src/LYCurses.c:753
-msgid "Terminal initialisation failed - unknown terminal type?\n"
-msgstr "Défaut d'initialisation au terminal; type de terminal inconnu?\n"
+#: LYMessages.c:432
+msgid "Edit the previous filename: "
+msgstr "Éditez le nom de fichier précédent : "
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:309 src/LYCurses.c:973 src/LYCurses.c:977 src/LYCurses.c:987
-msgid "Terminal = %s\n"
-msgstr "Terminal = %s\n"
+#: LYMessages.c:433
+msgid "Edit a previous filename: "
+msgstr "Éditez un nom de fichier précédent : "
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:314 src/LYCurses.c:978 src/LYCurses.c:982 src/LYCurses.c:992
-msgid "You must use a vt100, 200, etc. terminal with this program.\n"
-msgstr "Il faut utiliser un terminal vt100, 200, etc. avec ce programme.\n"
+#: LYMessages.c:434
+msgid "Enter a new filename: "
+msgstr "Entrez un nouveau nom de fichier : "
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:315 src/LYCurses.c:979 src/LYCurses.c:983 src/LYCurses.c:993
-msgid "Proceed (n/y)? "
-msgstr "Continuer (n/o)? "
+#: LYMessages.c:435
+msgid "File name may not begin with a dot."
+msgstr "Le nom de fichier ne peut commencer avec un point."
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:359 src/LYCurses.c:1056 src/LYCurses.c:1060 src/LYCurses.c:1070
-msgid ""
-"\n"
-"\n"
-" Your Terminal type is unknown!\n"
-"\n"
-msgstr ""
-"\n"
-"\n"
-" Votre type de terminal n'est pas reconnu.\n"
-"\n"
+#: LYMessages.c:437
+msgid "File exists. Create higher version?"
+msgstr "Ce fichier existe déjà. Créer une nouvelle version?"
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:360 src/LYCurses.c:1057 src/LYCurses.c:1061 src/LYCurses.c:1071
-msgid " Enter a terminal type: [vt100] "
-msgstr " Entrez un type de terminal : [vt100] "
+#: LYMessages.c:439
+msgid "File exists. Overwrite?"
+msgstr "Ce fichier existe déjà. Remplacer?"
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:371 src/LYCurses.c:1068 src/LYCurses.c:1072 src/LYCurses.c:1082
-msgid ""
-"\n"
-"TERMINAL TYPE IS SET TO %s\n"
-msgstr ""
-"\n"
-"TYPE DE TERMINAL RÉGLÉ À %s\n"
+#: LYMessages.c:441
+msgid "Cannot write to file."
+msgstr "Écriture non autorisée."
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:525
-msgid ""
-"\n"
-"A Fatal error has occured in %s Ver. %s\n"
-msgstr ""
-"\n"
-"Une erreur fatale s'est produite dans %s Ver. %s\n"
+#: LYMessages.c:442
+msgid "ERROR! - download command is misconfigured."
+msgstr "ERREUR - la commande de déchargement est mal configurée."
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:527 src/LYCurses.c:1302 src/LYCurses.c:1306 src/LYCurses.c:1316
-msgid ""
-"\n"
-"Please notify your system administrator to confirm a bug, and if\n"
-msgstr ""
-"\n"
-"Demandez à l'administrateur système de confirmer un défaut, et en\n"
+#: LYMessages.c:443
+msgid "Unable to download file."
+msgstr "Impossible de télédécharger le fichier."
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:529
-msgid "confirmed, to notify the lynx-dev list. Bug reports should have concise\n"
-msgstr "cas de défaut, d'informer la liste lynx-dev. Le rapport doit comprendre: \n"
+#: LYMessages.c:444
+msgid "Reading directory..."
+msgstr "Lecture du répertoire..."
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:531
-msgid "descriptions of the command and/or URL which causes the problem, the\n"
-msgstr "description concise de la commande et/ou l'URL fautive, nom et\n"
+#: LYMessages.c:445
+msgid "Building directory listing..."
+msgstr "Création des listes de répertoire..."
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:533
-msgid "operating system name with version number, the TCPIP implementation, the\n"
-msgstr "version du système d'exploitation, configuration TCPIP, contenu\n"
+#: LYMessages.c:446
+msgid "Saving..."
+msgstr "Enregistrement..."
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:535
-msgid "TRACEBACK if it can be captured, and any other relevant information.\n"
-msgstr "de TRACEBACK si possible, et toute autre information pertinente.\n"
+#: LYMessages.c:447
+#, c-format
+msgid "Could not edit file '%s'."
+msgstr "Impossible d'éditer le fichier '%s'."
-#: /extra/garagan/gettext/lynx2-6/src/LYCurses.c:538 src/LYCurses.c:1309 src/LYCurses.c:1313 src/LYCurses.c:1323
-msgid ""
-"\n"
-"Press RETURN to clean up: "
-msgstr ""
-"\n"
-"Appuyez sur ENTRÉE pour restaurer : "
+#: LYMessages.c:448
+msgid "Unable to access document!"
+msgstr "Impossible d'acceder au document !"
-#: /extra/garagan/gettext/lynx2-6/src/LYDownload.c:546
-msgid "<h1>Download Options (%s Version %s)</h1>\n"
-msgstr "<h1>Options de déchargement de fichier (%s Version %s)</h1>\n"
+#: LYMessages.c:449
+msgid "Could not access file."
+msgstr "Impossible d'accéder au fichier."
-#: /extra/garagan/gettext/lynx2-6/src/LYDownload.c:550
-msgid "You have the following download choices.<br>\n"
-msgstr "Vous avez les options de déchargement suivantes :<br>\n"
+#: LYMessages.c:450
+msgid "Could not access directory."
+msgstr "Impossible d'acceder au répertoire."
-#: /extra/garagan/gettext/lynx2-6/src/LYDownload.c:551 /home/sean/lynx/lynx2-6/src/LYPrint.c:915 /home/sean/lynx/lynx2-6/src/LYUpload.c:272
-msgid ""
-"Please select one:<br>\n"
-"<pre>\n"
-msgstr ""
-"Veuillez faire votre choix :<br>\n"
-"<pre>\n"
+#: LYMessages.c:451
+msgid "Could not load data."
+msgstr "Impossible de charger les données."
-#: /extra/garagan/gettext/lynx2-6/src/LYDownload.c:565
-msgid " Save to disk disabled.\n"
-msgstr " Enregistrement sur disque désactivé\n"
+#. #define CANNOT_EDIT_REMOTE_FILES
+#: LYMessages.c:453
+msgid "Lynx cannot currently (e)dit remote WWW files."
+msgstr "Lynx ne peut (E) Éditer de fichiers W3 distants."
-#: /extra/garagan/gettext/lynx2-6/src/LYDownload.c:578 /home/sean/lynx/lynx2-6/src/LYUpload.c:283 src/LYDownload.c:645 src/LYDownload.c:652 src/LYUpload.c:250 src/LYUpload.c:253
-msgid "No Name Given"
-msgstr "Aucun nom donné"
+#. #define CANNOT_EDIT_FIELD
+#: LYMessages.c:455
+msgid "This field cannot be (e)dited with an external editor."
+msgstr "Ce champ ne peut être (e)dité par un éditeur externe."
-#: /extra/garagan/gettext/lynx2-6/src/LYDownload.c:583
-msgid ""
-"\n"
-" \\\n"
-"No other download methods have been defined yet. You may define\n"
-" \\\n"
-"an unlimited number of download methods using the lynx.cfg file.\n"
-msgstr ""
-"\n"
-" \\\n"
-"Aucune autre méthode de déchargement de fichier n'a encore été définie.\n"
-" \\\n"
-"Vous pouvez définir de nombreuses méthodes à l'aide du fichier lynx.cfg.\n"
+#: LYMessages.c:456
+msgid "Bad rule"
+msgstr "Mauvaise regle."
-#: /extra/garagan/gettext/lynx2-6/src/LYDownload.h:12 src/LYDownload.c:605 src/LYDownload.c:617 src/LYHistory.c:71 src/LYHistory.c:73 src/LYHistory.c:126 src/LYHistory.c:130 src/LYMainLoop.c:2940 src/LYMainLoop.c:2964 src/LYMainLoop.c:4633 src/LYMainLoop.c:4664 src/LYMainLoop.c:4665 src/LYMainLoop.c:4851 src/LYMainLoop.c:4882 src/LYMainLoop.c:4883
-msgid "Lynx Download Options"
-msgstr "Options de déchargement de fichier - Lynx"
+#: LYMessages.c:457
+msgid "Insufficient operands:"
+msgstr "Nombre d'opérandes insuffisant."
-#: /extra/garagan/gettext/lynx2-6/src/LYHistory.c:219
-msgid "<h1>You have reached the History Page</h1>\n"
-msgstr "<h1>Vous avez accédé à l'Historique</h1>\n"
+#: LYMessages.c:458
+msgid "You are not authorized to edit this file."
+msgstr "Vous n'êtes pas autorisé à éditer ce fichier."
-#: /extra/garagan/gettext/lynx2-6/src/LYHistory.c:220
-msgid ""
-"<h2>%s Version %s</h2>\n"
-"<pre>"
-msgstr ""
-"<h2>%s Version %s</h2>\n"
-"<pre>"
+#: LYMessages.c:459
+msgid "Title: "
+msgstr "Titre : "
-#: /extra/garagan/gettext/lynx2-6/src/LYHistory.c:221 src/LYHistory.c:389 src/LYHistory.c:414
-msgid "<em>You selected:</em>\n"
-msgstr "<em>Vous avez choisi :</em>\n"
+#: LYMessages.c:460
+msgid "Subject: "
+msgstr "Objet : "
-#: /extra/garagan/gettext/lynx2-6/src/LYHistory.c:241 src/LYHistory.c:409 src/LYHistory.c:434 src/LYHistory.c:567 src/LYHistory.c:594
-msgid "(no address)"
-msgstr "(aucune addresse)"
+#: LYMessages.c:461
+msgid "Username: "
+msgstr "Nom d'utilisateur : "
-#: /extra/garagan/gettext/lynx2-6/src/LYHistory.c:293 src/LYHistory.c:485 src/LYHistory.c:510 src/LYMainLoop.c:1989 src/LYMainLoop.c:2017 src/LYMainLoop.c:2875 src/LYMainLoop.c:2899 src/LYMainLoop.c:4927 src/LYMainLoop.c:4958 src/LYMainLoop.c:4959 src/LYMainLoop.c:5481 src/LYMainLoop.c:5506 src/LYMainLoop.c:5507 src/LYMainLoop.c:5542 src/LYMainLoop.c:5567 src/LYMainLoop.c:5568
-msgid "Document from Form with POST content. Resubmit?"
-msgstr "Document FORM avec contenu POST. Envoyer de nouveau?"
+#: LYMessages.c:462
+msgid "Password: "
+msgstr "Mot de passe : "
-#: /extra/garagan/gettext/lynx2-6/src/LYHistory.c:303 src/LYHistory.c:498 src/LYHistory.c:523
-msgid " (From History)"
-msgstr " (de l'Historique)"
+#: LYMessages.c:463
+msgid "lynx: Username and Password required!!!"
+msgstr "lynx : nom d'utilisateur et mot de passe requis!"
-#: /extra/garagan/gettext/lynx2-6/src/LYHistory.h:15 src/LYHistory.c:69 src/LYHistory.c:71 src/LYHistory.c:124 src/LYHistory.c:128 src/LYHistory.c:386 src/LYHistory.c:411 src/LYMainLoop.c:2556 src/LYMainLoop.c:2580 src/LYMainLoop.c:2604 src/LYMainLoop.c:2944 src/LYMainLoop.c:2968 src/LYMainLoop.c:4616 src/LYMainLoop.c:4647 src/LYMainLoop.c:4648 src/LYMainLoop.c:4922 src/LYMainLoop.c:4953 src/LYMainLoop.c:4954
-msgid "Lynx History Page"
-msgstr "Historique - Lynx"
+#: LYMessages.c:464
+msgid "lynx: Password required!!!"
+msgstr "lynx : mot de passe requis!"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:399
-msgid "toggle source/presentation for current document"
-msgstr "permuter code source/affichage hypertexte du document"
+# LYMessages_en.h
+#: LYMessages.c:465
+msgid "Clear all authorization info for this session?"
+msgstr "Effacer toute l'information d'autorisation pour cette session?"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:400
-msgid "reload the current document"
-msgstr "recharger le document ouvert"
+#: LYMessages.c:466
+msgid "Authorization info cleared."
+msgstr "Information d'autorisation effacée."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:401
-msgid "pipe the current document to an external command"
-msgstr "acheminer le document ouvert vers une commande externe"
+#: LYMessages.c:467
+msgid "Authorization failed. Retry?"
+msgstr "L'auhorisation a échouée. Ré-essayer ?"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:402
-msgid "quit the browser"
-msgstr "quitter le navigateur"
+#: LYMessages.c:468
+msgid "cgi support has been disabled."
+msgstr "l'administrateur système a désactivé le soutien cgi."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:403
-msgid "quit the browser unconditionally"
-msgstr "quitter le navigateur sans condition"
+#. #define CGI_NOT_COMPILED
+#: LYMessages.c:470
+msgid "Lynxcgi capabilities are not compiled into this version."
+msgstr "Fonctionnalités Lynxcgi non compilées dans cette version"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:404
-msgid "view the next page of the document"
-msgstr "visualiser la prochaine page du document"
+#: LYMessages.c:471
+#, c-format
+msgid "Sorry, no known way of converting %s to %s."
+msgstr "Désolé. Aucun moyen connu de convertir %s to %s. "
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:405
-msgid "view the previous page of the document"
-msgstr "visualiser la page précédente du document"
+#: LYMessages.c:472
+msgid "Unable to set up connection."
+msgstr "Impossible de finaliser la connexion."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:406
-msgid "go back two lines in the document"
-msgstr "reculer de deux lignes dans le document"
+#: LYMessages.c:473
+msgid "Unable to make connection"
+msgstr "Impossible d'établir la connexion."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:407
-msgid "go forward two lines in the document"
-msgstr "avancer de deux lignes dans le document"
+#. #define MALFORMED_EXEC_REQUEST
+#: LYMessages.c:475
+msgid "Executable link rejected due to malformed request."
+msgstr "Lien exécutable rejeté dû à une demande erronée."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:408
-msgid "go back half a page in the document"
-msgstr "reculer d'une demi-page dans le document"
+#. #define BADCHAR_IN_EXEC_LINK
+#: LYMessages.c:477
+#, c-format
+msgid "Executable link rejected due to `%c' character."
+msgstr "Lien exécutable rejeté dû au caractère `%c'."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:409
-msgid "go forward half a page in the document"
-msgstr "avancer d'une demi-page dans le document"
+#. #define RELPATH_IN_EXEC_LINK
+#: LYMessages.c:479
+msgid "Executable link rejected due to relative path string ('../')."
+msgstr "Lien exécutable rejeté dû à un chemin relatif ('../')"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:410
-msgid "refresh the screen to clear garbled text"
-msgstr "rafraîchir l'écran pour effacer le texte brouillé"
+#. #define BADLOCPATH_IN_EXEC_LINK
+#: LYMessages.c:481
+msgid "Executable link rejected due to location or path."
+msgstr "Lien exécutable rejeté dû à l'emplacement ou au chemin d'accès"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:411
-msgid "go to the beginning of the current document"
-msgstr "aller au début du document ouvert"
+#: LYMessages.c:482
+msgid "Mail access is disabled!"
+msgstr "L'accès au courrier est désactivé."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:412
-msgid "go to the end of the current document"
-msgstr "aller à la fin du document ouvert"
+#. #define ACCESS_ONLY_LOCALHOST
+#: LYMessages.c:484
+msgid "Only files and servers on the local host can be accessed."
+msgstr "Seuls les fichiers/serveurs logés sur l'hôte local sont accessibles"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:413
-msgid "make the previous link current"
-msgstr "activer le lien précédent"
+#: LYMessages.c:485
+msgid "Telnet access is disabled!"
+msgstr "L'accès Telnet est désactivé."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:414
-msgid "make the next link current"
-msgstr "activer le lien suivant"
+#. #define TELNET_PORT_SPECS_DISABLED
+#: LYMessages.c:487
+msgid "Telnet port specifications are disabled."
+msgstr "Les spécifications de port Telnet sont désactivées."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:415
-msgid "move up the page to a previous link"
-msgstr "remonter vers un lien précédent"
+#: LYMessages.c:488
+msgid "USENET news access is disabled!"
+msgstr "L'accès aux articles USENET est désactivé."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:416
-msgid "move down the page to another link"
-msgstr "avancer vers un autre lien"
+#: LYMessages.c:489
+msgid "Rlogin access is disabled!"
+msgstr "L'accès Rlogin est désactivé."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:417
-msgid "move right to another link"
-msgstr "défiler à droite vers un autre lien"
+#: LYMessages.c:490
+msgid "Ftp access is disabled!"
+msgstr "L'accès FTP est désactivé."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:418
-msgid "move left to a previous link"
-msgstr "défiler à gauche vers un autre lien"
+#: LYMessages.c:491
+msgid "There are no references from this document."
+msgstr "Il n'y a aucune référence dans ce document."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:419
-msgid "display a list of previously viewed documents"
-msgstr "afficher une liste de documents déjà consultés"
+#: LYMessages.c:492
+msgid "There are only hidden links from this document."
+msgstr "Ce document ne renvoie qu'à des liens cachés."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:420
-msgid "go back to the previous document"
-msgstr "retourner au document précédent"
+#: LYMessages.c:494
+msgid "Unable to open command file."
+msgstr "Impossible d'ouvrir le fichier de commande."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:421
-msgid "go to the document given by the current link"
-msgstr "aller au document vers lequel pointe le lien actif"
+#: LYMessages.c:496
+msgid "News Post Cancelled!!!"
+msgstr "Envoi des nouvelles annulé!"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:422
-msgid "go to a document given as a URL"
-msgstr "aller à un document correspondant à un URL"
+#. #define SPAWNING_EDITOR_FOR_NEWS
+#: LYMessages.c:498
+msgid "Spawning your selected editor to edit news message"
+msgstr "Lancement de votre éditeur pour éditer un message"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:423
-msgid "display help on using the browser"
-msgstr "afficher l'aide sur l'utilisation du navigateur"
+#: LYMessages.c:499
+msgid "Post this message?"
+msgstr "Envoyer ce message?"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:424
-msgid "display an index of potentially useful documents"
-msgstr "afficher un index de documents potentiellement utiles"
+#: LYMessages.c:500
+#, c-format
+msgid "Append '%s'?"
+msgstr "Adjoindre '%s'?"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:425
-msgid "force submission of form or link with no-cache"
-msgstr "envoyer nouvelle instance du fichier ou formulaire"
+#: LYMessages.c:501
+msgid "Posting to newsgroup(s)..."
+msgstr "Envoi du message..."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:426
-msgid "interrupt network transmission"
-msgstr "interrompre la transmission réseau"
+#: LYMessages.c:503
+msgid "*** You have unread mail. ***"
+msgstr "*** Vous avez du courrier non ouvert. ***"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:427
-msgid "return to the first screen (home page)"
-msgstr "retourner à la première page (page d'accueil)"
+#: LYMessages.c:505
+msgid "*** You have mail. ***"
+msgstr "*** Vous avez du courrier. ***"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:428
-msgid "display and change option settings"
-msgstr "afficher et modifier les paramètres"
+#: LYMessages.c:507
+msgid "*** You have new mail. ***"
+msgstr "*** Vous avez du nouveau courrier. ***"
+
+#: LYMessages.c:508
+msgid "File insert cancelled!!!"
+msgstr "Insertion de fichier annulée!!"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:429
-msgid "allow searching of an index"
-msgstr "effectuer une recherche dans un index"
+#: LYMessages.c:509
+msgid "Not enough memory for file!"
+msgstr "Mémoire insuffisante pour lire le fichier-raccourci."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:430
-msgid "search within the current document"
-msgstr "rechercher dans le document ouvert"
+# WWW/Libary/Implementation/HTFile.c
+#: LYMessages.c:510
+msgid "Can't open file for reading."
+msgstr "Impossible d'ouvrir le fichier pour décompression."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:431
-msgid "search for the next occurence"
-msgstr "rechercher la prochaine occurrence"
+#: LYMessages.c:511
+msgid "File does not exist."
+msgstr "Le fichier n'éxiste pas."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:432
-msgid "send a comment to the author of the current document"
-msgstr "envoyer un commentaire à l'auteur du document ouvert"
+#: LYMessages.c:512
+msgid "File does not exist - reenter or cancel:"
+msgstr "LE fichier n'éxiste pas - ré-essayer ou annuler:"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:433
-msgid "edit the current document"
-msgstr "éditer le document ouvert"
+#: LYMessages.c:513
+msgid "File is not readable."
+msgstr "Le fichier n'est pas lisible."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:434
-msgid "display information on the current document and link"
-msgstr "afficher info. sur le document et le lien actifs"
+#: LYMessages.c:514
+msgid "File is not readable - reenter or cancel:"
+msgstr "Le fichier n'est pas lisible - ré-essayer ou annuler:"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:435
-msgid "display choices for printing the current document"
-msgstr "afficher les options d'impression du document ouvert"
+#: LYMessages.c:515
+msgid "Nothing to insert - file is 0-length."
+msgstr "Rien n'a insérer - le fichier est vide."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:436
-msgid "add to your personal bookmark list"
-msgstr "ajouter à votre liste personnelle de signets"
+#: LYMessages.c:516
+msgid "Save request cancelled!!!"
+msgstr "Demande d'enregistrement annulée!"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:437
-msgid "delete from your personal bookmark list"
-msgstr "supprimer de votre liste personnelle de signets"
+#: LYMessages.c:517
+msgid "Mail request cancelled!!!"
+msgstr "Demande de courrier annulée!"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:438
-msgid "view your personal bookmark list"
-msgstr "voir votre liste personnelle de signets"
+#. #define CONFIRM_MAIL_SOURCE_PREPARSED
+#: LYMessages.c:519
+msgid "Viewing preparsed source. Are you sure you want to mail it?"
+msgstr "Lecture de la source pré-analysée. Veuillez confirmer l'envoi?"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:439
-msgid "escape from the browser to the system"
-msgstr "quitter le navigateur et revenir au système"
+#: LYMessages.c:520
+msgid "Please wait..."
+msgstr "Veuillez attendre..."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:440
-msgid "download the current link to your computer"
-msgstr "décharger le lien actif vers votre ordinateur"
+#: LYMessages.c:521
+msgid "Mailing file. Please wait..."
+msgstr "Envoi du fichier. Veuillez attendre..."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:441
-msgid "toggle tracing of browser operations"
-msgstr "activ/dés le traçage des opérations du navigateur"
+#: LYMessages.c:522
+msgid "ERROR - Unable to mail file"
+msgstr "ERREUR - impossible d'envoyer le fichier."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:442
-msgid "toggle handling of all images as links"
-msgstr "créer des liens pour toutes les images"
+#. #define CONFIRM_LONG_SCREEN_PRINT
+#: LYMessages.c:524
+#, c-format
+msgid "File is %d screens long. Are you sure you want to print?"
+msgstr "Le fichier représente %d écrans. Vous voulez l'imprimer?"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:443
-msgid "toggle pseudo-ALTs for inlines with no ALT string"
-msgstr "pseudo-ALTs pour images insérées sans ALT"
+#: LYMessages.c:525
+msgid "Print request cancelled!!!"
+msgstr "Demande d'impression annulée!"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:444
-msgid "send a HEAD request for the current document or link"
-msgstr "envoyer une demande HEAD pour document ou lien actif"
+#: LYMessages.c:526
+msgid "Press <return> to begin: "
+msgstr "Appuyez sur <Entr> pour commencer : "
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:446
-msgid "show other commands in the novice help menu"
-msgstr "afficher autres commandes dans l'aide du novice"
+#: LYMessages.c:527
+msgid "Press <return> to finish: "
+msgstr "Appuyez sur <Entr> pour terminer : "
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:447
-msgid "go directly to a target document or action"
-msgstr "aller directement à un document ou une action cible"
+#. #define CONFIRM_LONG_PAGE_PRINT
+#: LYMessages.c:529
+#, c-format
+msgid "File is %d pages long. Are you sure you want to print?"
+msgstr "Le fichier représente %d pages. Vous voulez l'inmprimer?"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:448
-msgid "display the current key map"
-msgstr "afficher la configuration des touches en cours"
+#. #define CHECK_PRINTER
+#: LYMessages.c:531
+msgid "Be sure your printer is on-line. Press <return> to start printing:"
+msgstr "Assurez vous que votre imprimante est allumée. Appuyez sur <Entr> pour démarrer l'impression."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:450
-msgid "go to Toolbar or Banner in the current document"
-msgstr "barre d'outil ou bannière du document ouvert"
+#: LYMessages.c:532
+msgid "ERROR - Unable to allocate file space!!!"
+msgstr "ERREUR - impossible d'allouer de l'espace pour le fichier!"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:451
-msgid "toggle historical vs. valid/minimal comment parsing"
-msgstr "activer ou non la valeur 'historical' pour l'analyse"
+#: LYMessages.c:533
+msgid "Unable to open tempfile"
+msgstr "Impossible d'ouvrir le fichier temporaire."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:452
-msgid "toggle minimal vs. valid comment parsing"
-msgstr "activer ou non la valeur 'minimal' pour l'analyse"
+#: LYMessages.c:534
+msgid "Unable to open print options file"
+msgstr "Impossible d'ouvrir le fichier d'options d'impression."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:453
-msgid "toggle valid vs. soft double-quote parsing"
-msgstr "activ/dés la valeur 'soft_dquotes' pour l'analyse"
+#: LYMessages.c:535
+msgid "Printing file. Please wait..."
+msgstr "Impression du fichier. Veuillez attendre."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:454
-msgid "toggle raw 8-bit translations or CJK mode ON or OFF"
-msgstr "activer ou non la traduction en mode 8 bits ou CJK"
+#: LYMessages.c:536
+msgid "Please enter a valid internet mail address: "
+msgstr "Veuillez entrer une adresse de courrier Internet valide : "
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:456
-msgid "create a new file or directory"
-msgstr "créer un nouveau fichier ou répertoire"
+#: LYMessages.c:537
+msgid "ERROR! - printer is misconfigured!"
+msgstr "ERREUR - l'imprimante est mal configurée."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:457
-msgid "remove a file or directory"
-msgstr "supprimer un fichier ou un répertoire"
+# src/LYMap.c
+#: LYMessages.c:538
+msgid "Image map from POST response not available!"
+msgstr "Image référencée de la réponse POST non disponible"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:458
-msgid "modify the name or location of a file or directory"
-msgstr "modifier nom ou emplacement de fichier ou répertoire"
+#: LYMessages.c:539
+msgid "Misdirected client-side image MAP request!"
+msgstr "Erreur de demande d'image référencée client."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:459
-msgid "tag a file or directory for later action"
-msgstr "marquer fichier ou répertoire pour action ultérieure"
+#: LYMessages.c:540
+msgid "Client-side image MAP is not accessible!"
+msgstr "L'image référencée client n'est pas accessible."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:460
-msgid "display a full menu of file operations"
-msgstr "afficher un menu complet de traitement de fichier"
+#: LYMessages.c:541
+msgid "No client-side image MAPs are available!"
+msgstr "Aucune image référencée client n'est disponible."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:461
-msgid "upload from your computer to the current directory"
-msgstr "charger de l'ordinateur vers le répertoire courant"
+#: LYMessages.c:542
+msgid "Client-side image MAP is not available!"
+msgstr "L'image référencée client n'est pas disponible."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:462
-msgid "install file or tagged files into a system area"
-msgstr "installer le fichier ou les fichiers marqué(s)"
+#. #define OPTION_SCREEN_NEEDS_24
+#: LYMessages.c:545
+msgid "Screen height must be at least 24 lines for the Options menu!"
+msgstr "La hauteur d'écran doit être au moins 24 lignes pour ce menu!"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:465
-msgid "report version of lynx"
-msgstr "rapporter la version de lynx"
+#. #define OPTION_SCREEN_NEEDS_23
+#: LYMessages.c:547
+msgid "Screen height must be at least 23 lines for the Options menu!"
+msgstr "Hauteur d'écran : au moins 23 lignes pour le menu des paramètres"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:466 /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:467
-msgid "toggle a checkbox"
-msgstr "activer ou désactiver une case d'option"
+#. #define OPTION_SCREEN_NEEDS_22
+#: LYMessages.c:549
+msgid "Screen height must be at least 22 lines for the Options menu!"
+msgstr "La hauteur d'écran doit être au moins 22 lignes pour ce menu!"
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:516 src/LYHistory.c:78 src/LYHistory.c:82 src/LYKeymap.c:709 src/LYKeymap.c:713 src/LYMainLoop.c:5322 src/LYMainLoop.c:5347 src/LYMainLoop.c:5348
-msgid "Current Key Map"
-msgstr "Configuration des touches"
+#: LYMessages.c:551
+msgid "That key requires Advanced User mode."
+msgstr "Cette touche n'est active qu'en mode utilisateur avancé."
-#: /extra/garagan/gettext/lynx2-6/src/LYKeymap.c:562
-msgid ""
-"<h1>%s (%s Version %s)</h1>\n"
-"<pre>"
-msgstr ""
-"<h1>%s (%s Version %s)</h1>\n"
-"<pre>"
+#: LYMessages.c:552
+#, c-format
+msgid "Content-type: %s"
+msgstr "Type de contenu: %s"
-#: /extra/garagan/gettext/lynx2-6/src/LYList.c:84
-msgid "<h1>You have reached the List Page</h1>\n"
-msgstr "Vous avez accédé à la Page de références\n"
+#: LYMessages.c:553
+msgid "Command: "
+msgstr "Commande :"
-#: /extra/garagan/gettext/lynx2-6/src/LYList.c:85 /home/sean/lynx/lynx2-6/src/LYShowInfo.c:98
-msgid "<h2>%s Version %s</h2>\n"
-msgstr "<h2>%s Version %s</h2>\n"
+#: LYMessages.c:554
+msgid "Unknown or ambiguous command"
+msgstr "Commande inconnue ou ambigue."
-#: /extra/garagan/gettext/lynx2-6/src/LYList.c:87
-msgid " References in this document:<p>\n"
-msgstr "Références dans ce document :<p>\n"
+#: LYMessages.c:555
+msgid " Version "
+msgstr " Version "
-#: /extra/garagan/gettext/lynx2-6/src/LYList.c:144 src/LYList.c:256
-msgid "References"
-msgstr "Références"
+#: LYMessages.c:556
+msgid " first"
+msgstr " premier"
-#: /extra/garagan/gettext/lynx2-6/src/LYList.h:8 src/LYHistory.c:79 src/LYHistory.c:83 src/LYList.c:84 src/LYMainLoop.c:4382 src/LYMainLoop.c:4395 src/LYMainLoop.c:4413 src/LYMainLoop.c:4414 src/LYMainLoop.c:4426 src/LYMainLoop.c:4427 src/LYMainLoop.c:4656 src/LYMainLoop.c:4687 src/LYMainLoop.c:4688 src/LYUtils.c:5839 src/LYUtils.c:5872 src/LYUtils.c:5890
-msgid "Lynx List Page"
-msgstr "Page de références - Lynx"
+#: LYMessages.c:557
+msgid ", guessing..."
+msgstr ", analyse en cours..."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:73
-msgid "New File"
-msgstr "Nouveau fichier"
+#: LYMessages.c:558
+msgid "Permissions for "
+msgstr "Permissions d'accès pour "
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:76
-msgid "New Directory"
-msgstr "Nouveau répertoire"
+#: LYMessages.c:559
+msgid "Select "
+msgstr "Choisir "
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:79
-msgid "Install"
-msgstr "Installer"
+#: LYMessages.c:560
+msgid "capital letter"
+msgstr "majuscule"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:82
-msgid "Modify Name"
-msgstr "Modifier le nom"
+#: LYMessages.c:561
+msgid " of option line,"
+msgstr " de la ligne d'option,"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:86
-msgid "Permit Name"
-msgstr "Modifier le permis d'accès"
+#: LYMessages.c:562
+msgid " to save,"
+msgstr " pour enregistrer,"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:90
-msgid "Change Location"
-msgstr "Modifier l'emplacement"
+#: LYMessages.c:563
+msgid " to "
+msgstr " à "
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:93
-msgid "Remove"
-msgstr "Supprimer"
+#: LYMessages.c:564
+msgid " or "
+msgstr " ou "
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:97
-msgid "UUDecode"
-msgstr "UUDecode"
+#: LYMessages.c:565
+msgid " index"
+msgstr " index"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:102 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:107
-msgid "Expand"
-msgstr "Développer"
+#: LYMessages.c:566
+msgid " to return to Lynx."
+msgstr " pour retourner à Lynx"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:117 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:122
-msgid "Uncompress"
-msgstr "Décompresser"
+#: LYMessages.c:567
+msgid "Accept Changes"
+msgstr "Accepter les changements"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:127
-msgid "UnTar"
-msgstr "Extraire avec Tar"
+#: LYMessages.c:568
+msgid "Reset Changes"
+msgstr "Annuler les changements"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:142
-msgid "Package and compress"
-msgstr "Regrouper et compresser"
+#: LYMessages.c:569
+msgid "Left Arrow cancels changes"
+msgstr "Fleche gauche pour annuler les changements"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:146 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:150 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:155
-msgid "Compress"
-msgstr "Compresser"
+#: LYMessages.c:570
+msgid "Save options to disk"
+msgstr "Enregistrer les options sur disque"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:159
-msgid "Move all tagged items to another location."
-msgstr "Déplacer articles marqués vers autre emplacement"
+#: LYMessages.c:571
+msgid "Hit RETURN to accept entered data."
+msgstr "Appuyer sur ENTR pour accepter les données entrées."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:162 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:188
-msgid "Remove all tagged files and directories."
-msgstr "Supprimer fichiers/répertoires marqués"
+#. #define ACCEPT_DATA_OR_DEFAULT
+#: LYMessages.c:573
+msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
+msgstr "ENTR pour accepter les données; SUPPR pour récupérer les valeurs implicites"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:165
-msgid "Untag all tagged files and directories."
-msgstr "Annuler marquage sur fichiers/répertoires"
+#: LYMessages.c:574
+msgid "Value accepted!"
+msgstr "Valeur acceptée!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:209
-msgid "System error - failed to get status of %s "
-msgstr "Erreur système; impossible d'obtenir l'état de %s "
+#. #define VALUE_ACCEPTED_WARNING_X
+#: LYMessages.c:576
+msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
+msgstr "Valeur acceptée! NOTA : Lynx est configuré pour XWINDOWS!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:257
-msgid "Enter new location for tagged items: "
-msgstr "Entrer un nouvel emplacement pour articles marqués : "
+#. #define VALUE_ACCEPTED_WARNING_NONX
+#: LYMessages.c:578
+msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
+msgstr "Valeur acceptée! NOTA : Lynx n'est PAS configuré pour XWINDOWS!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:301 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:346 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:430 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:517 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:569 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1127 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1784 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1791 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1807
-msgid "Unable to get status of %s "
-msgstr "Impossible d'obtenir l'état de %s "
+#: LYMessages.c:579
+msgid "You are not allowed to change which editor to use!"
+msgstr "Vous ne pouvez pas choisir un autre éditeur!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:357 src/LYLocal.c:429 src/LYLocal.c:470
-msgid "Source and destination are the same location - request ignored!"
-msgstr "Source et destination identiques; demande non traitée"
+#: LYMessages.c:580
+msgid "Failed to set DISPLAY variable!"
+msgstr "Impossible de régler la variable AFFICHAGE."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:397 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:599
-msgid "Destination has different owner! Request denied. "
-msgstr "Destination associée à autre utilisateur; demande non traitée"
+#: LYMessages.c:581
+msgid "Failed to clear DISPLAY variable!"
+msgstr "Impossible d'effacer la variable AFFICHAGE."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:404
-msgid "Destination is not a valid directory! Request denied. "
-msgstr "Destination non valide; demande non traitée"
+#. #define BOOKMARK_CHANGE_DISALLOWED
+#: LYMessages.c:583
+msgid "You are not allowed to change the bookmark file!"
+msgstr "Changement du fichier de signets non autorisé!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:438
-msgid "Enter new name for directory: "
-msgstr "Entrer un nouveau nom pour le répertoire : "
+#: LYMessages.c:584
+msgid "Terminal does not support color"
+msgstr "Le terminal ne permet pas l'affichage couleur"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:440
-msgid "Enter new name for file: "
-msgstr "Entrer un nouveau nom pour le fichier : "
+#: LYMessages.c:585
+#, c-format
+msgid "Your '%s' terminal does not support color."
+msgstr "Votre terminal '%s' ne permet pas l'affichage couleur."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:443
-msgid "The selected item is not a file or a directory! Request ignored. "
-msgstr "L'article n'est pas un fichier/répertoire; demande non traitée"
+#: LYMessages.c:586
+msgid "Access to dot files is disabled!"
+msgstr "L'accès aux fichiers cachés est désactivé!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:453
-msgid "Illegal character \"/\" found! Request ignored. "
-msgstr "Caractère non autorisé \"/\" détecté; demande non traitée"
+#. #define UA_NO_LYNX_WARNING
+#: LYMessages.c:588
+msgid "User-Agent string does not contain \"Lynx\" or \"L_y_n_x\""
+msgstr "La chaine de caractere 'User-Agent' ne contient ni \"Lynx\" ni \"L_y_n_x\""
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:465 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:718 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:781
-msgid "Unable to determine status of %s "
-msgstr "Impossible de déterminer l'état de %s "
+#. #define UA_PLEASE_USE_LYNX
+#: LYMessages.c:590
+msgid "Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional deception!"
+msgstr "Utilisez \"L_y_n_x\" ou \"Lynx\" dans le champs 'User-Agent' ou cela apparaitra comme uneerreur volontaire"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:480 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:732 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:795
-msgid "There is already a directory with that name! Request ignored. "
-msgstr "Un répertoire de ce nom existe déjà; demande non traitée"
+#. #define UA_CHANGE_DISABLED
+#: LYMessages.c:592
+msgid "Changing of the User-Agent string is disabled!"
+msgstr "La modification du champ 'User-Agent' n'est pas activée"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:484 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:736 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:799
-msgid "There is already a file with that name! Request ignored. "
-msgstr "Un fichier de ce nom existe déjà; demande non traitée"
+#. #define CHANGE_OF_SETTING_DISALLOWED
+#: LYMessages.c:594
+msgid "You are not allowed to change this setting."
+msgstr "Vous n'êtes pas autorisé à changer ce paramètre."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:488 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:740 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:803
-msgid "The specified name is already in use! Request ignored. "
-msgstr "Nom spécifié déjà utilisé; demande non traitée"
+#: LYMessages.c:595
+msgid "Saving Options..."
+msgstr "Enregistrement des options..."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:526 src/LYLocal.c:596 src/LYLocal.c:628
-msgid "Enter new location for directory: "
-msgstr "Entrez nouvel emplacement pour répertoire : "
+#: LYMessages.c:596
+msgid "Options saved!"
+msgstr "Options enregistrées"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:528
-msgid "Enter new location for the file: "
-msgstr "Entrez nouvel emplacement pour fichier : "
+#: LYMessages.c:597
+msgid "Unable to save Options!"
+msgstr "Impossible d'enregistrer les options!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:531 src/LYLocal.c:600 src/LYLocal.c:632
-msgid "The specified item is not a file or a directory - request ignored."
-msgstr "L'article n'est pas un fichier/répertoire; demande non traitée"
+#: LYMessages.c:598
+msgid " 'r' to return to Lynx "
+msgstr " Entrez « r » pour retourner à Lynx. "
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:554 src/LYLocal.c:622 src/LYLocal.c:655
-msgid "Unexpected failure - unable to find trailing \"/\""
-msgstr "Impossible de trouver la marque de fin de fichier \"/\""
+#: LYMessages.c:599
+msgid " '>' to save, or 'r' to return to Lynx "
+msgstr " Entrez « > » pour enregistrer; « r » pour retourner à Lynx."
-# Duplicate
-# msgid "Destination is not a valid directory! Request denied. "
-# msgstr "La destination n'est pas valide; demande refusée"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:576 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:585 src/LYLocal.c:650 src/LYLocal.c:681
-msgid "Source and destination are the same location! Request ignored!"
-msgstr "Source et destination identiques; demande non traitée"
+#. #define ANY_KEY_CHANGE_RET_ACCEPT
+#: LYMessages.c:601
+msgid "Hit any key to change value; RETURN to accept."
+msgstr "N'importe quelle touche pour changer la valeur; ENTR pour accepter"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:639
-msgid "Modify name, location, or permission (n, l, or p): "
-msgstr "Modifier nom, emplacement ou permission (n, l ou p) : "
+#: LYMessages.c:602
+msgid "Error uncompressing temporary file!"
+msgstr "Erreur de décompression du fichier temporaire!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:641
-msgid "Modify name, or location (n or l): "
-msgstr "Modifier le nom ou l'emplacement (n ou l) : "
+#: LYMessages.c:603
+msgid "Unsupported URL scheme!"
+msgstr "Schème de URL non reconnu!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:676
-msgid "This feature not yet implemented! "
-msgstr "Cette fonction n'est pas encore offerte. "
+#: LYMessages.c:604
+msgid "Unsupported data: URL! Use SHOWINFO, for now."
+msgstr "Données non reconnues; consultez la page d'informations pour le moment"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:694
-msgid "Enter name of file to create: "
-msgstr "Entrez le nom du fichier : "
+#: LYMessages.c:605
+msgid "Redirection limit of 10 URL's reached."
+msgstr "Réacheminement : limite de 10 URL atteinte."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:703 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:767 src/LYLocal.c:772 src/LYLocal.c:794 src/LYLocal.c:832 src/LYLocal.c:854
-msgid "Illegal redirection \"//\" found! Request ignored."
-msgstr "Réacheminement \"//\" non autorisé; demande non traitée"
+#: LYMessages.c:606
+msgid "Illegal redirection URL received from server!"
+msgstr "URL de réacheminement illégal reçu du serveur!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:758 src/LYLocal.c:822 src/LYLocal.c:844
-msgid "Enter name for new directory: "
-msgstr "Entrer le nom du nouveau répertoire : "
+#. #define SERVER_ASKED_FOR_REDIRECTION
+#: LYMessages.c:608
+#, c-format
+msgid "Server asked for %d redirection of POST content to"
+msgstr "Le serveur a demandé %d réacheminement du contenu POST vers"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:819 src/LYLocal.c:877 src/LYLocal.c:899
-msgid "Create file or directory (f or d): "
-msgstr "Créer un fichier ou un répertoire (f ou r) :"
+#: LYMessages.c:611
+msgid "P)roceed, use G)ET or C)ancel "
+msgstr "P) Continuer, utiliser G)ET ou C) Annuler "
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:853
-msgid "System error - failed to get status of %s. "
-msgstr "Erreur système - impossible d'obtenir l'état de %s. "
+#: LYMessages.c:612
+msgid "P)roceed, or C)ancel "
+msgstr "P) Continuer ou C) Annuler "
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:868
-msgid "Remove %s and all of its contents (y or n): "
-msgstr "Supprimer %s et tout son contenu (o ou n) : "
+#. #define ADVANCED_POST_GET_REDIRECT
+#: LYMessages.c:614
+msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
+msgstr "Réacheminement du contenu POST. P)Continuer, U)RL, G)ET ou C) Annuler"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:870 src/LYLocal.c:938 src/LYLocal.c:948
-msgid "Remove directory and all of its contents (y or n): "
-msgstr "Supprimer le répertoire et tout son contenu (o ou n) : "
+#. #define ADVANCED_POST_REDIRECT
+#: LYMessages.c:616
+msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
+msgstr "Réacheminement du contenu POST. P)Continuer, U)RL ou C) Annuler"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:873
-msgid "Remove file %s (y or n): "
-msgstr "Supprimer le fichier %s (o ou n) : "
+#. #define CONFIRM_POST_RESUBMISSION
+#: LYMessages.c:618
+msgid "Document from Form with POST content. Resubmit?"
+msgstr "Document FORM avec contenu POST. Envoyer de nouveau?"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:875 src/LYLocal.c:944 src/LYLocal.c:954
-msgid "Remove file (y or n): "
-msgstr "Supprimer le fichier (o ou n) : "
+#. #define CONFIRM_POST_RESUBMISSION_TO
+#: LYMessages.c:620
+#, c-format
+msgid "Resubmit POST content to %s ?"
+msgstr "Ré-envoyer le contenu POST vers %s ?"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:878
-msgid "Remove symbolic link %s (y or n): "
-msgstr "Supprimer le lien symbolique %s (o ou n) : "
+#. #define CONFIRM_POST_LIST_RELOAD
+#: LYMessages.c:622
+#, c-format
+msgid "List from document with POST data. Reload %s ?"
+msgstr "Liste d'un document avec données POST. Recharger %s ?"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:880 src/LYLocal.c:951 src/LYLocal.c:961
-msgid "Remove symbolic link (y or n): "
-msgstr "Supprimer le lien symbolique (o ou n) : "
+#. #define CONFIRM_POST_DOC_HEAD
+#: LYMessages.c:624
+msgid "Document from POST action, HEAD may not be understood. Proceed?"
+msgstr "Document de type POST; l'élément HEAD peut être inconnu. Procéder?"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:882
-msgid "Unable to determine status of %s. "
-msgstr "Impossible de déterminer l'état de %s. "
+#. #define CONFIRM_POST_LINK_HEAD
+#: LYMessages.c:626
+msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
+msgstr "Envoi par méthode POST; l'élément HEAD peut être inconnu. Procéder?"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:998
-msgid "Unable to get status of %s. "
-msgstr "Impossible d'obtenir l'état de %s. "
+#: LYMessages.c:627
+msgid "Proceed without a username and password?"
+msgstr "Procéder sans id-utilisateur et mot de passe?"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1005 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1134 src/LYLocal.c:1088 src/LYLocal.c:1250
-msgid "The specified item is not a file nor a directory - request ignored."
-msgstr "L'article n'est ni un fichier ni un répertoire; demande non traitée"
+#: LYMessages.c:628
+#, c-format
+msgid "Proceed (%s)?"
+msgstr "Continuer (%s)?"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1022 src/LYLocal.c:1090 src/LYLocal.c:1100
-msgid "Unable to open permit options file"
-msgstr "Impossible d'ouvrir le fichier demandé"
+#: LYMessages.c:629
+msgid "Cannot POST to this host."
+msgstr "Impossible d'envoyer des articles vers cet hôte."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1041 src/LYLocal.c:1113 src/LYLocal.c:1124
-msgid "<H1>Permissions for %s</H1>\n"
-msgstr "<H1>Permissions d'accès pour %s</H1>\n"
+# src/LYGetFile.c
+#: LYMessages.c:630
+msgid "POST not supported for this URL - ignoring POST data!"
+msgstr "Méthode POST non fonctionnelle pour cet URL; données POST ignorées"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1049 src/LYLocal.c:1123 src/LYLocal.c:1134
-msgid "<Ol><Li>Specify permissions below:<Br><Br>\n"
-msgstr "<OL><LI>Spécifier les permissions d'accès ci-après :<Br><Br>\n"
+#: LYMessages.c:631
+msgid "Discarding POST data..."
+msgstr "Suppression de données POST..."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1166 src/LYLocal.c:1272 src/LYLocal.c:1283
-msgid "Invalid mode format."
-msgstr "Format de mode non valide"
+#: LYMessages.c:632
+msgid "Document will not be reloaded!"
+msgstr "Le document ne sera pas rechargé!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1171 src/LYLocal.c:1276 src/LYLocal.c:1287
-msgid "Invalid syntax format."
-msgstr "Format de syntaxe non valide"
+#: LYMessages.c:633
+msgid "Location: "
+msgstr "Emplacement : "
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1363 src/LYLocal.c:1459 src/LYLocal.c:1470
-msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
-msgstr "Le fichier UUDecoded sera dans le répertoire où vous avez lancé Lynx"
+#: LYMessages.c:634
+#, c-format
+msgid "'%s' not found!"
+msgstr "'%s' non trouvé!"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1469 src/LYLocal.c:1569 src/LYLocal.c:1580
-msgid "Executing system command. This might take a while."
-msgstr "Exécution de la commande système. Veuillez patienter."
+#: LYMessages.c:635
+msgid "Default Bookmark File"
+msgstr "fichier signets implicite"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1519
-msgid "Unable to open file management menu file"
-msgstr "Impossible d'ouvrir le menu de gestion de fichier."
+#: LYMessages.c:636
+msgid "Screen too small! (8x35 min)"
+msgstr "L'écran est trop petit! (8x35 min)"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1579
-msgid ""
-"\n"
-"<h1>File Management Options (%s Version %s)</h1>"
-msgstr ""
-"\n"
-"<h1>Options de gestion de fichier (%s Version %s)</h1>"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1582
-msgid "Current directory is %s <br>\n"
-msgstr "Le répertoire courant est %s <br>\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1586
-msgid "Current selection is %s <p>\n"
-msgstr "La sélection courante est %s <p>\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1588
-msgid "Nothing currently selected. <p>\n"
-msgstr "Il n'y a rien de sélectionné. <p>\n"
-
-# msgid "Current selection is %d tagged item%s"
-# msgstr "La sélection courante est %d articles marqués%s"
-# Followed by ( n == 1) ? ":" : "s:" (like PINE. ick, ick.)
-# Works fine for French. But.....
-# FIXME!
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1596
-msgid "Current selection is %d tagged item%s"
-msgstr "La sélection courante est %d article(s) marqué%s"
-
-# msgid "Current selection is %d tagged item"
-# msgstr "La sélection courante est %d article marqué"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1648
-msgid "<p>Upload to current directory:<p>\n"
-msgstr "<p>Charger vers le répertoire courant :<p>\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1687
-msgid "Unable to %s due to system error!"
-msgstr "Opération impossible dû à une erreur système!"
+#: LYMessages.c:637
+msgid "Select destination or ^G to Cancel: "
+msgstr "Choisissez une destination ou entrez ^G pour annuler : "
-# msgstr "Erreur système - impossible de %s "
-# src/LYLocal.c
-# I need to see the variable in context!
-#
-# sprintf(tmpbuf, _("remove %s"), testpath);
-# if (LYExecv(RM_PATH, args, tmpbuf) <= 0) {
-#
-#
-# LYExecv (path, argv, msg) {
-# if (fork () == -1)
-# sprintf(tmpbuf, _("Unable to %s due to system error!"), msg);
-# }
-# if (WEXITSTATUS(wstatus) != 0 || {
-# WTERMSIG(wstatus) > 0) { /* error return */
-# sprintf(tmpbuf, _("Probable failure to %s due to system error!"),
-# msg);
-# rc = 0;
-# Execute a command and if it fails, print out what you were trying to do as part
-# of the error message. eg LYExecv ("/csuite/bin/lynx", new_url, "Spawn new browser with URL" [msg]);
-#
-# msgid "Unable to %s due to system error!"
-# msgstr "Impossible de %s dû à une erreur système."
-# , msg);
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1702 src/LYLocal.c:2085 src/LYLocal.c:2145
-msgid "Probable failure to %s due to system error!"
-msgstr "Défaut de %s dû probablement à une erreur système"
+#. #define MULTIBOOKMARKS_SELECT
+#: LYMessages.c:639
+msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
+msgstr "Choisir classeur de signets, '=' pour le menu ou ^G pour annuler : "
-# NdT= Any string with variables should be documented!
-# msgid "Probable failure to %s due to system error!"
-# msgstr "Échec probable de %s dû a une erreur système."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1742 /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1754 src/LYLocal.c:1761 src/LYLocal.c:1772 src/LYLocal.c:1800 src/LYLocal.c:1811
-msgid "Illegal filename; request ignored."
-msgstr "Nom de fichier invalide; demande non traitée"
+#. #define MULTIBOOKMARKS_SELF
+#: LYMessages.c:641
+msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
+msgstr "Copier le L)ien dans ce fichier de signets ou C) Annuler? (l,c) : "
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1813
-msgid "The selected item is not a directory! Request ignored. "
-msgstr "L'article n'est pas un répertoire; demande non traitée."
+#: LYMessages.c:642
+msgid "Multiple bookmark support is not available."
+msgstr "Le soutien des fichiers multiples n'est pas disponible."
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1817 src/LYLocal.c:1816 src/LYLocal.c:1870
-msgid "Install in the selected directory not permitted."
-msgstr "Installation dans le répertoire choisi non permise."
+#: LYMessages.c:643
+#, c-format
+msgid " Select Bookmark (screen %d of %d)"
+msgstr "Sélection de signets (écran %d de %d)"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1822
-msgid "Just a moment, ..."
-msgstr "Attendez un moment, ..."
+#: LYMessages.c:644
+msgid " Select Bookmark"
+msgstr "Sélection de signets"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:1847
-msgid "Installation complete"
-msgstr "Installation terminée"
+#. #define MULTIBOOKMARKS_EHEAD_MASK
+#: LYMessages.c:646
+#, c-format
+msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
+msgstr "Édition de la description et du chemin de fichier (%d de 2)"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.c:2014 src/LYLocal.c:2017 src/LYLocal.c:2084
-msgid "Temporary URL or list would be too long."
-msgstr "L'URL ou la liste temporaires seraient trop longs."
+# UNSURE
+#. #define MULTIBOOKMARKS_EHEAD
+#: LYMessages.c:648
+msgid " Editing Bookmark DESCRIPTION and FILEPATH"
+msgstr " Édition de la description et du chemin de fichier"
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.h:62 src/LYHistory.c:74 src/LYHistory.c:78 src/LYHistory.c:128 src/LYHistory.c:132 src/LYLocal.c:1642 src/LYLocal.c:1682 src/LYMainLoop.c:2929 src/LYMainLoop.c:2953 src/LYMainLoop.c:3163 src/LYMainLoop.c:3187 src/LYMainLoop.c:3245 src/LYMainLoop.c:3269 src/LYMainLoop.c:4588 src/LYMainLoop.c:4619 src/LYMainLoop.c:4620 src/LYMainLoop.c:4624 src/LYMainLoop.c:4655 src/LYMainLoop.c:4656
-msgid "File Management Options"
-msgstr "Options de gestion de fichier"
+# UNSURE
+#: LYMessages.c:649
+msgid "Letter: "
+msgstr "Lettre : "
-#: /extra/garagan/gettext/lynx2-6/src/LYLocal.h:63 src/LYHistory.c:76 src/LYHistory.c:80 src/LYHistory.c:130 src/LYHistory.c:134 src/LYLocal.c:1112 src/LYLocal.c:1123 src/LYMainLoop.c:2803 src/LYMainLoop.c:2827 src/LYMainLoop.c:2932 src/LYMainLoop.c:2956 src/LYMainLoop.c:3166 src/LYMainLoop.c:3190 src/LYMainLoop.c:3248 src/LYMainLoop.c:3272 src/LYMainLoop.c:4627 src/LYMainLoop.c:4658 src/LYMainLoop.c:4659 src/LYMainLoop.c:4901 src/LYMainLoop.c:4932 src/LYMainLoop.c:4933
-msgid "File Permission Options"
-msgstr "Options de permission d'accès"
+#. #define USE_PATH_OFF_HOME
+#: LYMessages.c:652
+msgid "Use a filepath off your login directory in SHELL syntax!"
+msgstr "Utilisez un chemin de fichier à partir de votre répertoire de connexion"
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:216 src/LYMail.c:554 src/LYMail.c:568
-msgid ""
-"Sending form content:\n"
-"\n"
-"$ %s\n"
-"\n"
-"Please wait..."
-msgstr ""
-"Envoi du contenu du formulaire :\n"
-"\n"
-"$ %s\n"
-"\n"
-"Veuillez attendre ..."
+#: LYMessages.c:654
+msgid "Use a filepath off your home directory!"
+msgstr "Utilisez un chemin de fichier à partir de votre répertoire personnel"
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:299 src/LYMail.c:732
-msgid "The link %s :?: %s \n"
-msgstr "Le lien %s :?: %s \n"
+#. #define MAXLINKS_REACHED
+#: LYMessages.c:657
+msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
+msgstr "Nombre maximum dépassé. Utilisez le défilement demi-page ou double lignes"
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:301 src/LYMail.c:734
-msgid "called \"%s\"\n"
-msgstr "appelé «%s»\n"
+#. #define MAXHIST_REACHED
+#: LYMessages.c:659
+msgid "History List maximum reached! Document not pushed."
+msgstr "Vous avez atteint le maximum de l'Historique. Accès impossible"
+
+#: LYMessages.c:660
+msgid "No previously visited links available!"
+msgstr "Aucun lien déjà activé n'est disponible"
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:302 src/LYMail.c:735
-msgid "in the file \"%s\" called \"%s\""
-msgstr "dans le fichier «%s» appelé «%s»"
+#: LYMessages.c:661
+msgid "Memory exhausted! Program aborted!"
+msgstr "Mémoire insuffisante! Abandon!"
+
+#: LYMessages.c:662
+msgid "Memory exhausted! Aborting..."
+msgstr "Mémoire insuffisante! Abandon!"
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:304 src/LYMail.c:737
+#: LYMessages.c:663
+msgid "Not enough memory!"
+msgstr "Mémoire insuffisante"
+
+#: LYMessages.c:664
+msgid "Directory/File Manager not available"
+msgstr "Gestionnaire de fichier/répertoire non disponible"
+
+#: LYMessages.c:665
+msgid "HREF in BASE tag is not an absolute URL."
+msgstr "L'attribut HREF de l'élément BASE n'est pas un URL absolu"
+
+#: LYMessages.c:666
+msgid "Location URL is not absolute."
+msgstr "Il ne s'agit pas d'un URL absolu"
+
+#: LYMessages.c:667
+msgid "Refresh URL is not absolute."
+msgstr "Il ne s'agit pas d'un URL absolu"
+
+# NdT: This one is not clear...
+#. #define SENDING_MESSAGE_WITH_BODY_TO
+#: LYMessages.c:669
msgid ""
-"\n"
-"was requested but was not available."
+"You are sending a message with body to:\n"
+" "
msgstr ""
-"\n"
-"a été demandé mais n'est pas disponible."
+"Vous envoyez un message à :\n"
+" "
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:305 src/LYMail.c:738
+#: LYMessages.c:670
+msgid ""
+"You are sending a comment to:\n"
+" "
+msgstr "Vous envoyez maintenant un commentaire à : "
+
+#: LYMessages.c:671
msgid ""
"\n"
-"\n"
-"Thought you might want to know."
+" With copy to:\n"
+" "
msgstr ""
"\n"
-"\n"
-"Pour votre information."
+" En copie à:\n"
+" "
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:307 src/LYMail.c:740
+#: LYMessages.c:672
msgid ""
"\n"
-"\n"
-"This message was automatically generated by\n"
+" With copies to:\n"
+" "
msgstr ""
"\n"
-"\n"
-"Ce message est généré automatiquement par\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:308 src/LYMail.c:741
-msgid "Lynx ver. %s"
-msgstr "Lynx ver. %s"
+" En copies à:\n"
+" "
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:513 src/LYMail.c:1328 src/LYMail.c:1330
+#. #define CTRL_G_TO_CANCEL_SEND
+#: LYMessages.c:674
msgid ""
"\n"
"\n"
@@ -2214,39 +2113,18 @@ msgstr ""
"\n"
"Faites Ctrl-G pour annuler l'envoi du message\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:519
-msgid ""
-"\n"
-" Please enter your name, "
-msgstr ""
-"\n"
-" Veuillez entrer votre nom, "
-
-# <------------- Already translated.
-# msgid "\n Please enter your name, "
-# msgstr "\n Veuillez entrer votre nom, "
-# msgid "or leave it blank if you wish to remain anonymous\n"
-# msgstr "ou laissez un blanc si vous désirez rester anonyme\n"
-# <--------------- End already....
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:519 /extra/garagan/gettext/lynx2-6/src/LYMail.c:520 src/LYMail.c:1600 src/LYMail.c:1602
+# The following two messages have been put together to make:
+#. #define ENTER_NAME_OR_BLANK
+#: LYMessages.c:676
msgid ""
"\n"
-" Please review the message body:\n"
-"\n"
+" Please enter your name, or leave it blank to remain anonymous\n"
msgstr ""
"\n"
-" Veuillez revoir le corps du message :\n"
-"\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:520
-msgid "or leave it blank if you wish to remain anonymous\n"
-msgstr "ou laissez un blanc si vous désirez rester anonyme\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:524 /extra/garagan/gettext/lynx2-6/src/LYMail.c:560 /extra/garagan/gettext/lynx2-6/src/LYMail.c:595 src/LYMail.c:1341 src/LYMail.c:1343 src/LYMail.c:1382 src/LYMail.c:1384 src/LYMail.c:1429 src/LYMail.c:1431 src/LYMail.c:1466 src/LYMail.c:1468
-msgid " Use Control-U to erase the default.\n"
-msgstr "Faites Ctrl-U pour effacer la valeur par défaut.\n"
+" Entrez votre nom (ou laissez un blanc pour rester anonyme)\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:557 src/LYMail.c:1379 src/LYMail.c:1381
+#. #define ENTER_MAIL_ADDRESS_OR_OTHER
+#: LYMessages.c:678
msgid ""
"\n"
" Please enter a mail address or some other\n"
@@ -2254,11 +2132,12 @@ msgstr ""
"\n"
" Entrez une adresse de courriel ou un autre moyen\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:558 src/LYMail.c:1380 src/LYMail.c:1382
+#. #define MEANS_TO_CONTACT_FOR_RESPONSE
+#: LYMessages.c:680
msgid " means to contact you, if you desire a response.\n"
msgstr " de vous joindre si vous désirez une réponse.\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:594 src/LYMail.c:1428 src/LYMail.c:1430
+#: LYMessages.c:681
msgid ""
"\n"
" Please enter a subject line.\n"
@@ -2266,7 +2145,8 @@ msgstr ""
"\n"
" Veuillez entrer le sujet du message.\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:629 src/LYMail.c:1464 src/LYMail.c:1466
+#. #define ENTER_ADDRESS_FOR_CC
+#: LYMessages.c:683
msgid ""
"\n"
" Enter a mail address for a CC of your message.\n"
@@ -2274,3748 +2154,2073 @@ msgstr ""
"\n"
" Entrez une adresse de courriel pour la copie conforme.\n"
-# msgid " Use Control-U to erase the default.\n"
-# msgstr "Faites Ctrl-U pour effacer la valeur par défaut.\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:631 /extra/garagan/gettext/lynx2-6/src/LYMail.c:707 src/LYMail.c:1638 src/LYMail.c:1640
-msgid ""
-"\n"
-" Please enter your message below."
-msgstr ""
-"\n"
-" Veuillez entrer votre message ci-après."
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:632 src/LYMail.c:1467 src/LYMail.c:1469
+#: LYMessages.c:684
msgid " (Leave blank if you don't want a copy.)\n"
msgstr " (Laissez en blanc si vous ne voulez pas de copie.)\n"
-# msgid "\n When you are done, press enter and put a single period (.)"
-# msgstr "\n Une fois terminé, faitez <Entr> et tapez un point (.)"
-# msgid "\n on a line and press enter again."
-# msgstr "\n sur une ligne, puis faites <Entr> de nouveau."
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:708 /extra/garagan/gettext/lynx2-6/src/LYMail.c:709 src/LYUtils.c:1971 src/LYUtils.c:1972 src/LYUtils.c:1973
-msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
-msgstr "C)réer D)écharger E)diter F) Menu M)odifier R) Supprimer T) Marquer U) Charger\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMail.c:796 src/LYMail.c:1825 src/LYMail.c:1827 src/LYMail.c:1867 src/LYMail.c:1869
+#: LYMessages.c:685
msgid ""
-"Sending your comment:\n"
"\n"
-"$ %s\n"
+" Please review the message body:\n"
"\n"
-"Please wait..."
msgstr ""
-"Envoi de votre commentaire :\n"
"\n"
-"$ %s\n"
+" Veuillez revoir le corps du message :\n"
"\n"
-"Veuillez attendre..."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:691 src/LYMain.c:1128 src/LYMain.c:1145 src/LYMain.c:1148
+#: LYMessages.c:686
msgid ""
"\n"
-"Configuration file %s is not available.\n"
-"\n"
+"Press RETURN to continue: "
msgstr ""
"\n"
-"Le fichier de configuration %s n'est pas disponible.\n"
-"\n"
+"Faites ENTR pour continuer :"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:701 src/LYMain.c:1217 src/LYMain.c:1220 src/LYMain.c:1234
+#: LYMessages.c:687
msgid ""
"\n"
-"Lynx edit map not declared.\n"
-"\n"
+"Press RETURN to clean up: "
msgstr ""
"\n"
-"Relevé de liens Lynx non déclaré.\n"
-"\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:835
-msgid "Session start: %s"
-msgstr "Début de session : %s"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:837
-msgid "Session start"
-msgstr "Début de session"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1107 src/LYMain.c:1604 src/LYMain.c:1607
-msgid ""
-"The '-head' switch is for http HEAD requests and cannot be used for\n"
-"'%s'.\n"
-msgstr ""
-"L'option '-head' est pour les demandes HEAD et ne peut servir pour\n"
-"'%s'.\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1126 src/LYMain.c:1625 src/LYMain.c:1628
-msgid ""
-"The '-mime_header' switch is for http URLs and cannot be used for\n"
-"'%s'.\n"
-msgstr ""
-"L'option '-mime_header' est pour les URL http et ne peut servir pour\n"
-"'%s'.\n"
+"Appuyez sur ENTRÉE pour restaurer : "
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1145 src/LYMain.c:1646 src/LYMain.c:1649
-msgid ""
-"The '-traversal' switch is for http URLs and cannot be used for\n"
-"'%s'.\n"
-msgstr ""
-"L'option '-traversal' est pour les URL http et ne peut servir pour\n"
-"'%s'.\n"
+#: LYMessages.c:688
+msgid " Use Control-U to erase the default.\n"
+msgstr "Faites Ctrl-U pour effacer la valeur par défaut.\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1296
+#: LYMessages.c:689
msgid ""
"\n"
-" USAGE: lynx -restrictions=[option][,option][,option]\n"
-" List of Options:\n"
-" all restricts all options.\n"
+" Please enter your message below."
msgstr ""
"\n"
-" USAGE: lynx -restrictions=[option][,option][,option]\n"
-" Liste d'options:\n"
-" all invalide toutes les options.\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1300
-msgid ""
-" bookmark disallow changing the location of the bookmark file.\n"
-" bookmark_exec disallow execution links via the bookmark file\n"
-msgstr ""
-" bookmark invalide changement emplacement du fichier signets\n"
-" bookmark_exec invalide liens exécutables depuis fichier de signets\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1304
-msgid ""
-" change_exec_perms disallow changing the eXecute permission on files\n"
-" (but still allow it for directories) when local file\n"
-"\t\t management is enabled.\n"
-msgstr ""
-" change_exec_perms invalide modification de l'accès à 'eXecute' pour fichiers\n"
-" (mais l'autorise pour les répertoires) lorsque la gestion des\n"
-"\t\t fichiers locaux est activée.\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1309
-msgid ""
-" default same as commandline option -anonymous. Disables\n"
-" default services for anonymous users. Currently set to,\n"
-" all restricted except for: inside_telnet, outside_telnet,\n"
-" inside_news, inside_ftp, outside_ftp, inside_rlogin,\n"
-"\t\t outside_rlogin, goto, jump and mail. Defaults\n"
-" are settable within userdefs.h\n"
-msgstr ""
-" default semblable à l'option -anonymous. Désactive\n"
-" services par défaut pour utilisateurs anonymes. Réglé à\n"
-" restriction générale sauf: inside_telnet, outside_telnet,\n"
-" inside_news, inside_ftp, outside_ftp, inside_rlogin,\n"
-"\t\t outside_rlogin, goto, jump et mail. Valeurs par défaut\n"
-" paramétrables dans 'userdefs.h'\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1317
-msgid " dired_support disallow local file management\n"
-msgstr " dired_support invalide la gestion de fichier local\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1320
-msgid ""
-" disk_save disallow saving binary files to disk in the download menu\n"
-" dotfiles disallow access to, or creation of, hidden (dot) files\n"
-" download disallow downloaders in the download menu\n"
-" editor disallow editing\n"
-" exec disable execution scripts\n"
-" exec_frozen disallow the user from changing the execution link\n"
-" file_url disallow using G)oto, served links or bookmarks for\n"
-" file: URL's\n"
-" goto disable the 'g' (goto) command\n"
-msgstr ""
-" disk_save invalide enreg. de fichiers binaires dans menu de déchargement\n"
-" dotfiles invalide l'accès aux fichiers cachés (point) ou leur création\n"
-" download invalide le programme de déchargement dans menu de déchargement\n"
-" editor invalide l'édition\n"
-" exec invalide les scripts exécutables\n"
-" exec_frozen invalide la modification du lien exécutable\n"
-" file_url invalide l'utilisation de G)oto, des liens ou des signets\n"
-" pour les URL du fichier : \n"
-" goto désactive la commande «g» (goto)\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1331
-msgid ""
-" inside_ftp disallow ftps for people coming from inside your\n"
-" domain (utmp required for selectivity)\n"
-" inside_news disallow USENET news posting for people coming from\n"
-" inside your domain (utmp required for selectivity)\n"
-" inside_rlogin disallow rlogins for people coming from inside your\n"
-" domain (utmp required for selectivity)\n"
-" inside_telnet disallow telnets for people coming from inside your\n"
-" domain (utmp required for selectivity)\n"
-msgstr ""
-" inside_ftp invalide ftp pour ceux qui accèdent depuis votre\n"
-" domaine (utmp requis pour la sélectivité)\n"
-" inside_news invalide l'envoi USENET pour ceux qui accèdent depuis\n"
-" votre domaine (utmp requis pour la sélectivité)\n"
-" inside_rlogin invalide rlogin pour ceux qui accèdent depuis\n"
-" votre domaine (utmp requis pour la sélectivité)\n"
-" inside_telnet invalide telnet pour ceux qui accèdent depuis\n"
-" votre domaine (utmp requis pour la sélectivité)\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1341
-msgid ""
-" inside_ftp disallow ftps for people coming from inside your domain\n"
-" inside_news disallow USENET news posting for people coming from inside\n"
-" 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"
-msgstr ""
-" inside_ftp invalide ftp pour ceux qui accèdent depuis votre domaine\n"
-" inside_news invalide l'envoi USENET pour ceux qui accèdent depuis\n"
-" votre domaine\n"
-" inside_rlogin invalide rlogin pour ceux qui accèdent depuis votre domaine\n"
-" inside_telnet invalide telnet pour ceux qui accèdent depuis votre domaine\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1348
-msgid ""
-" jump disable the 'j' (jump) command\n"
-" mail disallow mail\n"
-" multibook disallow multiple bookmark files\n"
-" news_post disallow USENET News posting setting in the O)ptions menu\n"
-" option_save disallow saving options in .lynxrc\n"
-msgstr ""
-" jump désactive la commande 'j' (jump)\n"
-" mail invalide le courrier\n"
-" multibook invalide les fichiers de signets multiples\n"
-" news_post invalide paramètres d'envoi USENET dans menu O)ptions\n"
-" option_save invalide les options d'enregistrement dans .lynxrc\n"
+" Veuillez entrer votre message ci-après."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1355
+#. #define ENTER_PERIOD_WHEN_DONE_A
+#: LYMessages.c:691 src/LYNews.c:380
msgid ""
-" outside_ftp disallow ftps for people coming from outside your\n"
-" domain (utmp required for selectivity)\n"
-" outside_news disallow USENET news posting for people coming from\n"
-" outside your domain (utmp required for selectivity)\n"
-" outside_rlogin disallow rlogins for people coming from outside your\n"
-" domain (utmp required for selectivity)\n"
-" outside_telnet disallow telnets for people coming from outside your\n"
-" domain (utmp required for selectivity)\n"
-msgstr ""
-" outside_ftp invalide ftp pour ceux qui accèdent hors de\n"
-" votre domaine (utmp requis pour la sélectivité)\n"
-" outside_news invalide l'envoi USENET pour ceux qui accèdent hors de\n"
-" votre domaine (utmp requis pour la sélectivité)\n"
-" outside_rlogin invalide rlogin pour ceux qui accèdent hors de\n"
-" votre domaine (utmp requis pour la sélectivité)\n"
-" outside_telnet invalide les sessions telnet pour ceux qui accèdent hors de\n"
-" votre domaine (utmp requis pour la sélectivité)\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1365
-msgid ""
-" outside_ftp disallow ftps for people coming from outside your domain\n"
-" outside_news disallow USENET news posting for people coming from outside\n"
-" 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"
+"\n"
+" When you are done, press enter and put a single period (.)"
msgstr ""
-" outside_ftp invalide ftp pour ceux qui accèdent hors de votre domaine\n"
-" outside_news invalide l'envoi USENET pour ceux qui accèdent hors de\n"
-" votre domaine\n"
-" outside_rlogin invalide rlogin pour ceux qui accèdent hors de votre domaine\n"
-" outside_telnet invalide telnet pour ceux qui accèdent hors de votre domaine\n"
+"\n"
+" Une fois terminé, faites <Entr> et tapez un point (.)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1372
+#. #define ENTER_PERIOD_WHEN_DONE_B
+#: LYMessages.c:693 src/LYNews.c:381
msgid ""
-" print disallow most print options\n"
-" shell disallow shell escapes, and lynxexec, lynxprog or lynxcgi\n"
-" G)oto's\n"
-" suspend disallow Control-Z suspends with escape to shell\n"
-" telnet_port disallow specifying a port in telnet G)oto's\n"
-" useragent disallow modifications of the User-Agent header\n"
+"\n"
+" on a line and press enter again."
msgstr ""
-" print invalide la plupart des options d'impression\n"
-" shell invalide Échap vers shell et G)oto' slynxexec, lynxprog\n"
-" ou lynxcgi\n"
-" suspend invalide la séquence Control-Z/Échappement vers shell\n"
-" telnet_port invalide spécification d'un port dans G)oto' telnet\n"
-" useragent invalide modification de l'en-tête agent-utilisateur\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1761
-msgid " LYNX: Invalid Option: %s\n"
-msgstr "LYNX : Option non valide : %s\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1762
-msgid "USAGE: lynx [options] [file]\n"
-msgstr "USAGE : lynx [options] [fichier]\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1764 src/LYMain.c:3153 src/LYMain.c:3180 src/LYMain.c:3202
-msgid "%s: Invalid Option: %s\n"
-msgstr "%s : Option non valide : %s\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1765 src/LYMain.c:2974 src/LYMain.c:3001 src/LYMain.c:3023
-msgid "USAGE: %s [options] [file]\n"
-msgstr "USAGE : %s [options] [fichier]\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1767 src/LYMain.c:2975 src/LYMain.c:3002 src/LYMain.c:3024
-msgid "Options are:\n"
-msgstr "Les options sont :\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1768
-msgid " - receive the arguments from stdin (enclose\n"
-msgstr " - réception des arguments de stdin (inclusion\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1769
-msgid " in double-quotes (\"-\") on VMS)\n"
-msgstr " entre guillements («-») sur VMS)\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1770
-msgid " -anonymous used to specify the anonymous account\n"
-msgstr " -anonymous spécifier le compte anonyme\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1771
-msgid " -auth=id:pw authentication information for protected forms\n"
-msgstr " -auth=id:pw authentification pour les formulaires protégés\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1772
-msgid " -book use the bookmark page as the startfile\n"
-msgstr " -book page de signets comme fichier de départ\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1773
-msgid " -buried_news toggles scanning of news articles for buried references\n"
-msgstr " -buried_news balayage des nouvelles pour repérer des références\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1774
-msgid " -cache=NUMBER NUMBER of documents cached in memory (default is %d)\n"
-msgstr " -cache=NUMBER NOMBRE de documents dans mémoire cache (défaut: %d)\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1775
-msgid " -case enable case sensitive user searching\n"
-msgstr " -case active la recherche avec distinction maj./min.\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1776
-msgid " -cfg=FILENAME specifies a lynx.cfg file other than the default\n"
-msgstr " -cfg=FILENAME spécifie fichier lynx.cfg autre que l'implicite\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1777
-msgid " -child exit on left-arrow in startfile, and disable save to disk\n"
-msgstr " -child flèche GAUCHE pour aller dans fichier départ sans enreg.\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1779
-msgid " -color force color mode on with standard bg colors\n"
-msgstr " -color mode couleur avec couleur de fond standard\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1780
-msgid " -blink force color mode on with high intensity bg colors\n"
-msgstr " -blink mode couleur avec couleur de fond intense\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1782
-msgid " -crawl with -traversal, output each page to a file\n"
-msgstr " -crawl avec -traversal, envoie chaque page dans un fichier\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1783
-msgid " with -dump, format output as with -traversal, but to stdout\n"
-msgstr " avec -dump, formate sortie comme avec -traversal, vers stdout\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1784
-msgid " -display=DISPLAY set the display variable for X execed programs\n"
-msgstr " -display=DISPLAY règle la variable pour programmes XWindows\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1785
-msgid " -dump dump the first file to stdout and exit\n"
-msgstr " -dump copie le premier fichier dans stdout et quitte\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1786
-msgid " -editor=EDITOR enable edit mode with specified editor\n"
-msgstr " -editor=EDITOR mode d'édition avec éditeur spécifié\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1787
-msgid " -emacskeys enable emacs-like key movement\n"
-msgstr " -emacskeys mouvement de touche compatible emacs\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1788
-msgid " -enable_scrollback toggle compatibility with comm programs' scrollback\n"
-msgstr " -enable_scrollback active les touches de défil. arrière du programme\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1789
-msgid " keys (may be incompatible with some curses packages)\n"
-msgstr " de communication (incompatibilité possible)\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1790
-msgid " -error_file=FILE write the HTTP status code here\n"
-msgstr " -error_file=FILE écrit le code d'état HTTP ici\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1793
-msgid " -exec enable local program execution\n"
-msgstr " -exec autorise l'exécution du programme local\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1795
-msgid " -locexec enable local program execution from local files only\n"
-msgstr " -locexec exécution du programme local depuis fichiers locaux\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1796
-msgid " -noexec disable local program execution (DEFAULT)\n"
-msgstr " -noexec invalide exécution du programme local (DÉFAUT)\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1798
-msgid " -fileversions include all versions of files in local VMS directory\n"
-msgstr " -fileversions toutes versions fichiers dans répertoire VMS local\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1799
-msgid " listings\n"
-msgstr " listes\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1800
-msgid " -force_html forces the first document to be interpreted as HTML\n"
-msgstr " -force_html le premier document est interprété comme HTML\n"
+"\n"
+" sur une ligne, puis faites <Entr> de nouveau."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1801
-msgid " -ftp disable ftp access\n"
-msgstr " -ftp désactive l'accès ftp\n"
+# NOTE: I will have to get you an example text.
+#
+# Example:
+# csuite.chebucto.ns.ca cookie: Status=Active+Requests Allow? (Y/N/Always/neVer
+# ie <host> cookie: <key>=<value> Allow?
+# Ndt: Yes! The word order might be different...
+# NdT: Can you make the system accept the O, N, T, J commands?
+#. Cookies messages
+#. #define ADVANCED_COOKIE_CONFIRMATION
+#: LYMessages.c:697
+#, c-format
+msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
+msgstr "cookie de %s : %.*s=%.*s Accepter? (O/N/Toujours/Jamais)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1802
-msgid " -get_data user data for get forms, read from stdin,\n"
-msgstr " -get_data données util. pour form. GET lues dans stdin,\n"
+#. #define INVALID_COOKIE_DOMAIN_CONFIRMATION
+#: LYMessages.c:699
+#, c-format
+msgid "Accept invalid cookie domain=%s for '%s'?"
+msgstr "Accepter un cookie au domaine non valide=%s pour '%s'?"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1803 /extra/garagan/gettext/lynx2-6/src/LYMain.c:1832
-msgid " terminated by '---' on a line\n"
-msgstr " terminé par '---' sur une ligne\n"
+#. #define INVALID_COOKIE_PATH_CONFIRMATION
+#: LYMessages.c:701
+#, c-format
+msgid "Accept invalid cookie path=%s as a prefix of '%s'?"
+msgstr "Accepter un chemin de cookie invalide=%s comme préfixe de '%s'?"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1804
-msgid " -head send a HEAD request\n"
-msgstr " -head envoi d'une demande HEAD\n"
+#: LYMessages.c:702
+msgid "Allowing this cookie."
+msgstr "Acceptation du cookie"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1805
-msgid " -help print this usage message\n"
-msgstr " -help imprime ce message d'usage\n"
+#: LYMessages.c:703
+msgid "Rejecting this cookie."
+msgstr "Rejet du cookie"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1806
-msgid " -historical toggles use of '>' or '-->' as a terminator for comments\n"
-msgstr " -historical active '>' ou '-->' comme code de fin de commentaire\n"
+#: LYMessages.c:704
+msgid "The Cookie Jar is empty."
+msgstr "Le fichier des «cookies» est vide"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1807
-msgid " -homepage=URL set homepage separate from start page\n"
-msgstr " -homepage=URL distinction page d'accueil vs page de départ\n"
+# --------
+# Missed strings 97-12-07
+# LYMessages_en.h (LYCookie.c)
+# NdT: What do they mean by "gobble up an entire domain"?
+#. #define ACTIVATE_TO_GOBBLE
+#: LYMessages.c:706
+msgid "Activate links to gobble up cookies or entire domains,"
+msgstr "Activer les liens pour supprimer les cookies ou les domaines,"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1808
-msgid " -image_links toggles inclusion of links for all images\n"
-msgstr " -image_links inclusion de liens pour toutes les images\n"
+#: LYMessages.c:707
+msgid "or to change a domain's 'allow' setting."
+msgstr "ou pour changer les paramètres de permission pour un domaine."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1809
-msgid " -index=URL set the default index file to URL\n"
-msgstr " -index=URL règle le fichier index par défaut à l'URL\n"
+#: LYMessages.c:708
+msgid "(Cookies never allowed.)"
+msgstr "(Cookies jamais acceptés)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1810
-msgid " -link=NUMBER starting count for lnk#.dat files produced by -crawl\n"
-msgstr " -link=NUMBER lance compteur pour fichiers lnk#.dat créés par -crawl\n"
+#: LYMessages.c:709
+msgid "(Cookies always allowed.)"
+msgstr "(Cookies toujours acceptés)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1811
-msgid " -localhost disable URLs that point to remote hosts\n"
-msgstr " -localhost désactive pointeurs vers hôtes distants\n"
+#: LYMessages.c:710
+msgid "(Cookies allowed via prompt.)"
+msgstr "(Cookies acceptés à l'invite)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1812
-msgid " -mime_header include mime headers and force source dump\n"
-msgstr " -mime_header inclut en-têtes MIME et induit vidage source\n"
+#: LYMessages.c:711
+msgid "(Persistent Cookies.)"
+msgstr "(Cokkies persistants.)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1813
-msgid " -minimal toggles minimal versus valid comment parsing\n"
-msgstr " -minimal analyse réglée à 'minimal' versus 'valid'\n"
+#: LYMessages.c:712
+msgid "(No title.)"
+msgstr "(Pas de titre.)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1814
-msgid " -newschunksize=NUMBER number of articles in chunked news listings\n"
-msgstr " -newschunksize=NUMBER articles dans listes de nouvelles par bloc\n"
+#: LYMessages.c:713
+msgid "(No name.)"
+msgstr "(Aucun nom)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1815
-msgid " -newsmaxchunk=NUMBER maximum news articles in listings before chunking\n"
-msgstr " -newsmaxchunk=NUMBER maximum d'articles avant compilation par bloc\n"
+#: LYMessages.c:714
+msgid "(No value.)"
+msgstr "(Aucune valeur)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1816
-msgid " -nobrowse disable directory browsing\n"
-msgstr " -nobrowse désactive navigation dans répertoires\n"
+#: LYMessages.c:715
+msgid "None"
+msgstr "Aucun(e)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1817
-msgid " -nofilereferer disable transmissions of Referer headers for file URLs\n"
-msgstr " -nofilereferer désactive transmission d'en-têtes 'Referer' pour URL\n"
+#: LYMessages.c:716
+msgid "(End of session.)"
+msgstr "(Fin de session)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1818
-msgid " -nofrom disable transmissions of From headers\n"
-msgstr " -nofrom désactive transmission d'en-têtes 'From'\n"
+#: LYMessages.c:717
+msgid "Delete this cookie?"
+msgstr "Supprimer ce cookie?"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1819
-msgid " -nolist disable the link list feature in dumps\n"
-msgstr " -nolist désactive liste de liens dans vidages\n"
+#: LYMessages.c:718
+msgid "The cookie has been eaten!"
+msgstr "Le cookie a été supprimé!"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1820
-msgid " -nolog disable mailing of error messages to document owners\n"
-msgstr " -nolog désactive messages d'erreur aux propriétaires\n"
+#: LYMessages.c:719
+msgid "Delete this empty domain?"
+msgstr "Supprimer ce domaine vide?"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1821
-msgid " -noprint disable print functions\n"
-msgstr " -noprint désactive les fonctions d'impression\n"
+#: LYMessages.c:720
+msgid "The domain has been eaten!"
+msgstr "Le domaine a été supprimé!"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1822
-msgid " -noredir don't follow Location: redirection\n"
-msgstr " -noredir ignorer l'emplacement : réacheminement\n"
+# NdT: Does P)rompt trigger a confirmation screen?
+# NOTE: Option letters come from the capitalised letter in the option,
+# so if introducing a new option make sure it has a translation.
+#. #define DELETE_COOKIES_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:722
+msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D)Supprimer cookies; régler permission: T)oujours C)onfirmer J)amais A)nnul? "
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1823
-msgid " -noreferer disable transmissions of Referer headers\n"
-msgstr " -noreferer désactive la transmission de 'Referer'\n"
+#. #define DELETE_DOMAIN_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:724
+msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D)Supprimer domaine; régler permission: T)oujours C)onfirmer J)amais A)nnul? "
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1827
-msgid " -nostatus disable the miscellaneous information messages\n"
-msgstr " -nostatus désactive les messages d'information divers\n"
+#: LYMessages.c:725
+msgid "All cookies in the domain have been eaten!"
+msgstr "Tous les cookies du domaine ont été supprimés!"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1828
-msgid " -number_links force numbering of links\n"
-msgstr " -number_links induit le numérotage des liens\n"
+#: LYMessages.c:726
+#, c-format
+msgid "'A'lways allowing from domain '%s'."
+msgstr "Toujours accepter les cookies du domaine '%s'."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1829
-msgid " -popup toggles handling of single-choice SELECT options via\n"
-msgstr " -popup active ou non le traitement des options au moyen de\n"
+#: LYMessages.c:727
+#, c-format
+msgid "ne'V'er allowing from domain '%s'."
+msgstr "Ne jamais accepter les cookies du domaine '%s'."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1830
-msgid " popup windows or as lists of radio buttons\n"
-msgstr " fenêtres flash ou de boutons d'option\n"
+# NdT: What does happen exatly when you chose P)rompt?
+#: LYMessages.c:728
+#, c-format
+msgid "'P'rompting to allow from domain '%s'."
+msgstr "Confirmer avant d'accepter les cookies du domaine '%s'."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1831
-msgid " -post_data user data for post forms, read from stdin,\n"
-msgstr " -post_data données util. pour form. POST lues dans stdin,\n"
+#: LYMessages.c:729
+msgid "Delete all cookies in this domain?"
+msgstr "Supprimer tous les cookies de ce domaine?"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1833
-msgid " -print enable print functions (DEFAULT)\n"
-msgstr " -print active fonctions d'impression (DÉFAUT)\n"
+#: LYMessages.c:730
+msgid "All of the cookies in the jar have been eaten!"
+msgstr "Tous les cookies ont été supprimés!"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1834
-msgid " -pseudo_inlines toggles pseudo-ALTs for inlines with no ALT string\n"
-msgstr " -pseudo_inlines crée 'pseudo-ALT' pour images sans attribut ALT\n"
+#: LYMessages.c:732
+msgid "Port 19 not permitted in URLs."
+msgstr "Le port 19 n'est pas permis"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1835
-msgid " -raw toggles default setting of 8-bit character translations\n"
-msgstr " -raw paramètre par défaut de traduction en caractères 8-bits\n"
+#: LYMessages.c:733
+msgid "Port 25 not permitted in URLs."
+msgstr "Le port 25 n'est pas permis"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1836
-msgid " or CJK mode for the startup character set\n"
-msgstr " ou mode CJK pour jeu de caractères de départ\n"
+#: LYMessages.c:734
+#, c-format
+msgid "Port %lu not permitted in URLs."
+msgstr "Le port %lu n'est pas permis dans les URL."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1837
-msgid " -realm restricts access to URLs in the starting realm\n"
-msgstr " -realm accès restreint aux URL dans partition de départ\n"
+#: LYMessages.c:735
+msgid "URL has a bad port field."
+msgstr "Champ de port d'URL erroné."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1838
-msgid " -reload flushes the cache on a proxy server\n"
-msgstr " -reload évacue le cache sur un serveur proxy\n"
+#: LYMessages.c:736
+msgid "Maximum nesting of HTML elements exceeded."
+msgstr "Imbrication maximale d'éléments HTML dépassée."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1839
-msgid " (only the first document affected)\n"
-msgstr " (seul le premier document est touché)\n"
+#: LYMessages.c:737
+msgid "Bad partial reference! Stripping lead dots."
+msgstr "Référence partielle eronnée! Suppression des points (../)."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1840
-msgid " -restrictions=[options] use -restrictions to see list\n"
-msgstr " -restrictions=[options] -restrictions pour voir la liste\n"
+#: LYMessages.c:738
+msgid "Trace Log open failed. Trace off!"
+msgstr "Échec d'ouverture du journal de parcours. Annuler la commande!"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1841
-msgid " -resubmit_posts toggles forced resubmissions (no-cache) of forms with\n"
-msgstr " -resubmit_posts envoi d'une nouvelle instance du formulaire avec la\n"
+#: LYMessages.c:739
+msgid "Lynx Trace Log"
+msgstr "Journal de parcours Lynx"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1842
-msgid " method POST when the documents they returned are sought\n"
-msgstr " méthode POST quand les documents retournés sont cherchés\n"
+#: LYMessages.c:740
+msgid "No trace log has been started for this session."
+msgstr "Aucun journal de parcours n'a été lancé pour cette session."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1843
-msgid " with the PREV_DOC command or from the History List\n"
-msgstr " avec la commande PREV_DOC ou depuis l'Historique\n"
+#. #define MAX_TEMPCOUNT_REACHED
+#: LYMessages.c:742
+msgid "The maximum temporary file count has been reached!"
+msgstr "Le nombre maximum de fichiers temporaires a été atteint."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1844
-msgid " -rlogin disable rlogins\n"
-msgstr " -rlogin désactive les sessions rlogin\n"
+#. #define FORM_VALUE_TOO_LONG
+#: LYMessages.c:744
+msgid "Form field value exceeds buffer length! Trim the tail."
+msgstr "La valeur excède la zone tampon; Élaguer les lignes finales (tail)."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1845
-msgid " -selective require .www_browsable files to browse directories\n"
-msgstr " -selective fichiers .www_browsable requis pour la navigation\n"
+#. #define FORM_TAIL_COMBINED_WITH_HEAD
+#: LYMessages.c:746
+msgid "Modified tail combined with head of form field value."
+msgstr "Lignes finales modifiés combinées avec en-tête (champ de formulaire)"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1846
-msgid " -show_cursor don't hide the curser in the lower right corner\n"
-msgstr " -show_cursor le curseur reste visible à l'écran\n"
+#. HTFile.c
+#: LYMessages.c:749
+msgid "Directory"
+msgstr "Répertoire"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1847
-msgid " -soft_dquotes toggles emulation of the old Netscape and Mosaic bug which\n"
-msgstr " -soft_dquotes émulation des anciennnes versions Netscape et Mosaic qui\n"
+#: LYMessages.c:750
+msgid "Directory browsing is not allowed."
+msgstr "La lecture du répertoire n'est pas permise."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1848
-msgid " treated '>' as a co-terminator for double-quotes and tags\n"
-msgstr " traitaient '>' comme fermeture des guillemets et des codets\n"
+#: LYMessages.c:751
+msgid "Selective access is not enabled for this directory"
+msgstr "L'accès sélectif n'est pas activé pour ce répertoire."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1849
-msgid " -source dump the source of the first file to stdout and exit\n"
-msgstr " -source envoie source du premier fichier vers stdout et quitte\n"
+#: LYMessages.c:752
+msgid "Multiformat: directory scan failed."
+msgstr "Multiformat: l'analyse du répertoire a échouée."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1850
-msgid " -startfile_ok allow non-http startfile and homepage with -validate\n"
-msgstr " -startfile_ok avec -validate, permet fichiers/pages de départ non-http\n"
+#: LYMessages.c:753
+msgid "This directory is not readable."
+msgstr "Ce répertoire ne peut être lu."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1853
-msgid " -syslog=text information for syslog call\n"
-msgstr " -syslog=text information pour appels syslog\n"
+#: LYMessages.c:754
+msgid "Can't access requested file."
+msgstr "Impossible d'accéder au fichier requis."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1856
-msgid " -telnet disable telnets\n"
-msgstr " -telnet désactive les sessions telnet\n"
+#: LYMessages.c:755
+msgid "Could not find suitable representation for transmission."
+msgstr "Impossible de trouver une représentation correcte pour la transmission."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1857
-msgid " -term=TERM set terminal type to TERM\n"
-msgstr " -term=TERM règle le type de terminal à TERM\n"
+# WWW/Libary/Implementation/HTFile.c
+#: LYMessages.c:756
+msgid "Could not open file for decompression!"
+msgstr "Impossible d'ouvrir le fichier pour décompression."
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1858
-msgid " -trace turns on WWW trace mode\n"
-msgstr " -trace active le mode de traçage W3\n"
+#: LYMessages.c:757
+msgid "Files:"
+msgstr "Fichiers:"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1859
-msgid " -traversal traverse all http links derived from startfile\n"
-msgstr " -traversal parcourt liens http dérivés du fichier de départ\n"
+#: LYMessages.c:758
+msgid "Subdirectories:"
+msgstr "Sous-répertoires :"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1860
-msgid " -underscore toggles use of _underline_ format in dumps\n"
-msgstr " -underscore utilisation du format _underline_ dans les vidages\n"
+#: LYMessages.c:759
+msgid " directory"
+msgstr " répertoire"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1861
-msgid " -validate accept only http URLs (for validation)\n"
-msgstr " -validate n'accepte que les URL http (pour validation)\n"
+#: LYMessages.c:760
+msgid "Up to "
+msgstr "jusqu'à "
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1862
-msgid " -version print Lynx version information\n"
-msgstr " -version imprime information sur version de Lynx\n"
+#: LYMessages.c:761
+msgid "Current directory is "
+msgstr "Le répertoire courant est "
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1863
-msgid " -vikeys enable vi-like key movement\n"
-msgstr " -vikeys active mouvement de touche compatible vi\n"
+#. HTGopher.c
+#: LYMessages.c:764
+msgid "No response from server!"
+msgstr "Pas de réponses du serveur !"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1876
-msgid ""
-"\\r\n"
-"A Fatal error has occurred in %s Ver. %s\\r\n"
-msgstr ""
-"\\r\n"
-"Un erreur fatale s'est produite dans %s Ver. %s\\r\n"
+#: LYMessages.c:765
+msgid "CSO index"
+msgstr "index CSO"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1879
-msgid ""
-"\\r\n"
-"Please notify your system administrator to confirm a bug, and\\r\n"
-"if confirmed, to notify the lynx-dev list. Bug reports should\\r\n"
-"have concise descriptions of the command and/or URL which causes\\r\n"
-"the problem, the operating system name with version number, the\\r\n"
-"TCPIP implementation, and any other relevant information.\\r\n"
-msgstr ""
-"\\r\n"
-"Demandez à l'administrateur système de confirmer un défaut, et en cas\\r\n"
-"de défaut, d' informer la liste lynx-dev. Le rapport doit comprendre:\\r\n"
-"description concise de la commande et/ou l'URL fautive, nom du\\r\n"
-"système d'exploitation et numéro de version, configuration TCPIP\\r\n"
-"et toute autre information pertinente.\\r\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1886
+#: LYMessages.c:766
msgid ""
-"\\r\n"
-"Do NOT mail the core file if one was generated.\\r\n"
+"\n"
+"This is a searchable index of a CSO database.\n"
msgstr ""
-"\\r\n"
-"Ne PAS poster le fichier de mémoire si ce fichier a été généré\\r\n"
+"\n"
+"Ceci est un index cherchable provenant d'une base de donnée CSO.\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYMain.c:1889
-msgid ""
-"\\r\n"
-"Lynx now exiting with signal: %d\\r\n"
-"\\r\n"
-msgstr ""
-"\\r\n"
-"Lynx quitte maintenant avec le signal: %d\\r\n"
-"\\r\n"
+#: LYMessages.c:767
+msgid "CSO Search Results"
+msgstr "Résultat de la recherche CSO"
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:180 /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:1049 /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:1087 /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:2294 src/LYMainLoop.c:275 src/LYMainLoop.c:282 src/LYMainLoop.c:3699 src/LYMainLoop.c:3723
-msgid "Entry into main screen"
-msgstr "Entrée dans l'écran principal"
+#: LYMessages.c:768
+#, c-format
+msgid "Seek fail on %s\n"
+msgstr "La recherche a échouée sur %s\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:369
+#: LYMessages.c:769
msgid ""
"\n"
-"lynx: Can't access start file %s\n"
+"Press the 's' key and enter search keywords.\n"
msgstr ""
"\n"
-"lynx : accès impossible au fichier de départ %s\n"
+"Appuyez sur la touche 's' et entrez un mot clef de recherche.\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:446 src/LYMainLoop.c:743 src/LYMainLoop.c:754
+#: LYMessages.c:770
msgid ""
"\n"
-"lynx: Start file could not be found or is not text/html or text/plain\n"
+"This is a searchable Gopher index.\n"
msgstr ""
"\n"
-"lynx : fichier de départ introuvable ou son mode n'est pas reconnu\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:447
-msgid " Exiting...\n"
-msgstr " Sortie ...\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:927
-msgid "Fatal error - could not open output file %s\n"
-msgstr "Erreur fatale - impossible d'ouvrir le fichier de sortie %s\n"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:2122 src/LYMainLoop.c:3584 src/LYMainLoop.c:3608
-msgid "A URL specified by the user"
-msgstr "Un URL spécifié par l'utilisateur"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:2232 src/LYMainLoop.c:3634 src/LYMainLoop.c:3658
-msgid "System Index"
-msgstr "Index système"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:2259
-msgid "'X' can only toggle a form link"
-msgstr "'X' peut seulement activer un lien de formulaire"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:2262
-msgid "'X' only toggles in forms mode"
-msgstr "'X' peut seulement activer en mode formulaires"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:2276
-msgid "'Z' can only toggle a form link"
-msgstr "'Z' peut seulement activer un lien de formulaire"
+"Ceci est un index Gopher chercheable.\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:2279
-msgid "'Z' only toggles in forms mode"
-msgstr "'Z' peut seulement activer en mode formulaires"
+#: LYMessages.c:771
+msgid "Gopher index"
+msgstr "Index Gopher"
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:2389 src/HTFWriter.c:269 src/HTFWriter.c:285 src/LYGetFile.c:766 src/LYGetFile.c:790
-msgid "Using %s"
-msgstr "Utilisation de %s"
+#: LYMessages.c:772
+msgid "Gopher Menu"
+msgstr "Menu Gopher"
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:2394
-msgid "A URL specified by redirection"
-msgstr "Un URL spécifié par réacheminement"
+#: LYMessages.c:773
+msgid " Search Results"
+msgstr " Résultats de la recherche:"
-#: /extra/garagan/gettext/lynx2-6/src/LYMainLoop.c:3414
-msgid "*** %s Version %s ***"
-msgstr "*** %s Version %s ***"
+#: LYMessages.c:774
+msgid "Sending CSO/PH request."
+msgstr "Envoi de la requête CSO/PH."
-#: /extra/garagan/gettext/lynx2-6/src/LYNews.c:84 src/LYNews.c:110 src/LYNews.c:111
-msgid "You will be posting to:"
-msgstr "Vous postez à : "
+#: LYMessages.c:775
+msgid "Sending Gopher request."
+msgstr "Envoi de la requête Gopher."
-#: /extra/garagan/gettext/lynx2-6/src/LYNews.c:95
-msgid ""
-"\n"
-"\n"
-" Please enter your mail address\n"
-msgstr ""
-"\n"
-"\n"
-" Veuillez entrer votre adresse de courriel\n"
+#: LYMessages.c:776
+msgid "CSO/PH request sent; waiting for response."
+msgstr "Requête CSO/PH envoyée, attente de réponse."
-#: /extra/garagan/gettext/lynx2-6/src/LYNews.c:121
-msgid ""
-"\n"
-"\n"
-" Please enter a subject line\n"
-msgstr ""
-"\n"
-"\n"
-" Veuillez entrer l'objet du message\n"
+#: LYMessages.c:777
+msgid "Gopher request sent; waiting for response."
+msgstr "Requête Gopher envoyée; attente de réponse."
-#: /extra/garagan/gettext/lynx2-6/src/LYNews.c:205 src/LYNews.c:255 src/LYNews.c:256
+#: LYMessages.c:778
msgid ""
"\n"
-"\n"
-" Please enter your message below."
-msgstr ""
-"\n"
-"\n"
-"Veuillez entrer votre message ci-après :"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYNews.c:206 src/LYMail.c:1639 src/LYMail.c:1641 src/LYNews.c:256 src/LYNews.c:257
-msgid ""
-"\n"
-" When you are done, press enter and put a single period (.)"
-msgstr ""
-"\n"
-" Une fois terminé, faites <Entr> et tapez un point (.)"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYNews.c:207 src/LYMail.c:1640 src/LYMail.c:1642 src/LYNews.c:257 src/LYNews.c:258
-msgid ""
-"\n"
-" on a line and press enter again."
+"Please enter search keywords.\n"
msgstr ""
"\n"
-" sur une ligne, puis faites <Entr> de nouveau."
+"Merci d'entrer un mot clef pour la recherche.\n"
-#: /extra/garagan/gettext/lynx2-6/src/LYNews.c:260
+#: LYMessages.c:779
msgid ""
-"Posting your message:\n"
"\n"
-"%s\n"
-"\n"
-"Please wait..."
+"The keywords that you enter will allow you to search on a"
msgstr ""
-"Envoi de votre message:\n"
-"\n"
-"%s\n"
"\n"
-"Veuillez attendre..."
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:92 src/LYOptions.c:90 src/LYOptions.c:98 src/LYOptions.c:151 src/LYOptions.c:159
-msgid "Screen height must be at least 23 lines for the Options menu!"
-msgstr "Hauteur d'écran : au moins 23 lignes pour le menu des paramètres"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:116
-msgid " Options Menu ("
-msgstr " Menu des paramètres ("
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:118
-msgid " Version "
-msgstr " Version "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:124
-msgid "E)ditor : "
-msgstr "E) Éditeur : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:128
-msgid "D)ISPLAY variable : "
-msgstr "D) Affichage : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:132
-msgid "mu(L)ti-bookmarks: "
-msgstr "L) Signets multiples: "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:139 /extra/garagan/gettext/lynx2-6/src/LYOptions.c:431 src/LYOptions.c:558 src/LYOptions.c:619
-msgid "review/edit B)ookmarks files"
-msgstr "B) Éditer fichiers signets "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:141 /extra/garagan/gettext/lynx2-6/src/LYOptions.c:433 src/LYOptions.c:560 src/LYOptions.c:621
-msgid "B)ookmark file: "
-msgstr "B) Fichier de signets : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:146
-msgid "F)TP sort criteria : "
-msgstr "F) Critères de tri FTP : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:147
-msgid "By Filename"
-msgstr "Nom de fichier"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:148
-msgid "By Size"
-msgstr "Volume "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:149
-msgid "By Type"
-msgstr "Type"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:150
-msgid "By Date"
-msgstr "Date"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:153
-msgid "P)ersonal mail address : "
-msgstr "P)Adresse de courriel : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:158
-msgid "S)earching type : "
-msgstr "S) Type de recherche : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:162
-msgid "display (C)haracter set : "
-msgstr "C) Jeu de caractères : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:166
-msgid "Raw 8-bit or CJK m(O)de : "
-msgstr "O) Mode 8-bit ou CJK : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:170
-msgid "preferred document lan(G)uage: "
-msgstr "G) Langue préférée : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:174
-msgid "preferred document c(H)arset: "
-msgstr "H) Jeu de caractères préféré :"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:178
-msgid "V)I keys: "
-msgstr "V) Touches VI : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:182
-msgid "e(M)acs keys: "
-msgstr "M) Touches emacs : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:186
-msgid "sho(W) dot files: "
-msgstr "W) Montrer fichiers cachés : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:190
-msgid "popups for selec(T) fields : "
-msgstr "T) Menus-éclair pour sélections :"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:194
-msgid "K)eypad mode : "
-msgstr "K) Bloc numérique : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:196
-msgid "Links are numbered"
-msgstr "Liens numérotés"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:199
-msgid "li(N)e edit style : "
-msgstr "N) Édition de ligne : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:204
-msgid "l(I)st directory style : "
-msgstr "I) Liste de répertoires"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:205
-msgid "Files first "
-msgstr "Fichiers d'abord "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:206
-msgid "Mixed style "
-msgstr "Style mixte "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:207
-msgid "Directories first "
-msgstr "Répertoires d'abord "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:211
-msgid "U)ser mode : "
-msgstr "U) Mode utilisateur : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:212
-msgid "Novice"
-msgstr "Novice"
+"Le mot clef que vous entrez vous permettra de faire une recherche sur un"
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:213
-msgid "Intermediate"
-msgstr "Intermédiaire"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:214
-msgid "Advanced"
-msgstr "Avancé"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:217
-msgid "user (A)gent : "
-msgstr "A) Agent utilisateur : "
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:222
-msgid "local e(X)ecution links : "
-msgstr "X) Liens exécutables en local"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:224
-msgid "ALWAYS ON"
-msgstr "TOUJOURS ACTIVÉ"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:225 /extra/garagan/gettext/lynx2-6/src/LYOptions.c:228
-msgid "FOR LOCAL FILES ONLY"
-msgstr "FICHIER LOCAUX UNIQUEMENT"
-
-#: /extra/garagan/gettext/lynx2-6/src/LYOptions.c:226 /extra/garagan/gettext/lynx2-6/src/LYOptions.c:229
-msgid "ALWAYS OFF"
-msgstr "TOUJOURS DÉSACTIVÉ"
-
-#: /home/sean/lynx/lynx2-6/src/LYLocal.c:132
-msgid "Tar"
-msgstr "Tar"
-
-#: /home/sean/lynx/lynx2-6/src/LYLocal.c:137
-msgid "Tar and compress"
-msgstr "Tar et compression"
-
-#: /home/sean/lynx/lynx2-6/src/LYLocal.c:974 src/LYLocal.c:1056 src/LYLocal.c:1059
-msgid "Sorry, don't know how to permit non-UNIX files yet."
-msgstr "Désolé, impossible d'accepter les fichier non UNIX pour le moment"
-
-#: /home/sean/lynx/lynx2-6/src/LYPrint.c:902
-msgid "<h1>Printing Options (%s Version %s)</h1>\n"
-msgstr "<h1>Options d'impression (%s Version %s)</h1>\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYPrint.c:907
-msgid "There are %d lines, or approximately %d page%s, to print.<br>\n"
-msgstr "Il y a %d lignes, ou environ %d page%s à imprimer.<br>\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYPrint.c:912
-msgid "Some print functions have been disabled!!!<br>\n"
-msgstr "Certaines fonctions d'impression ont été désactivées.<br>\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYPrint.c:914
-msgid "You have the following print choices.<br>\n"
-msgstr "Vous avez les options d'impression suivantes.<br>\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYPrint.c:919 src/LYPrint.c:1290 src/LYPrint.c:1294 src/LYPrint.c:1322
-msgid " <a href=\"LYNXPRINT://LOCAL_FILE/lines=%d\">Save to a local file</a>\n"
-msgstr " <a href=\"LYNXPRINT://LOCAL_FILE/lines=%d\">Enregistrer dans un fichier local</a>\n"
+#: LYMessages.c:780
+msgid " person's name in the database.\n"
+msgstr " nom de personne dans la base de donnée.\n"
-#: /home/sean/lynx/lynx2-6/src/LYPrint.c:923 src/LYPrint.c:1296 src/LYPrint.c:1300 src/LYPrint.c:1328
-msgid " <a href=\"LYNXPRINT://MAIL_FILE/lines=%d\">Mail the file</a>\n"
-msgstr " <a href=\"LYNXPRINT://MAIL_FILE/lines=%d\">Envoyer le fichier par courriel</a>\n"
+#. HTNews.c
+#: LYMessages.c:783
+msgid "Connection closed ???"
+msgstr "Connexion terminée ???"
-#: /home/sean/lynx/lynx2-6/src/LYPrint.c:926 src/LYPrint.c:1301 src/LYPrint.c:1305 src/LYPrint.c:1333
-msgid " <a href=\"LYNXPRINT://TO_SCREEN/lines=%d\">Print to the screen</a>\n"
-msgstr " <a href=\"LYNXPRINT://TO_SCREEN/lines=%d\">Imprimer à l'écran</a>\n"
+#: LYMessages.c:784
+msgid "Cannot open temporary file for news POST."
+msgstr "Impossible d'ouvrir un fichier temporaire pour les articles de forums."
-#: /home/sean/lynx/lynx2-6/src/LYPrint.h:12 src/LYHistory.c:70 src/LYHistory.c:72 src/LYHistory.c:125 src/LYHistory.c:129 src/LYMainLoop.c:2949 src/LYMainLoop.c:2973 src/LYMainLoop.c:4359 src/LYMainLoop.c:4364 src/LYMainLoop.c:4391 src/LYMainLoop.c:4395 src/LYMainLoop.c:4396 src/LYMainLoop.c:4620 src/LYMainLoop.c:4651 src/LYMainLoop.c:4652 src/LYMainLoop.c:4884 src/LYMainLoop.c:4915 src/LYMainLoop.c:4916 src/LYPrint.c:1272 src/LYPrint.c:1299
-msgid "Lynx Printing Options"
-msgstr "Options d'impression Lynx"
+#: LYMessages.c:785
+msgid "This client does not contain support for posting to news with SSL."
+msgstr "Ce client ne permet pas l'envoi de news avec SSL"
+
+#. HTStyle.c
+#: LYMessages.c:788
+#, c-format
+msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
+msgstr "Style %d '%s' SGML:%s. Police %s %.1f point.\n"
+
+#: LYMessages.c:789
+#, c-format
+msgid "\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
+msgstr "\tIndentations: premiere=%.0f autres=%.0f, Hauteur=%.1f Desc=%.1f\n"
+
+#: LYMessages.c:790
+#, c-format
+msgid "\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
+msgstr "\tAlign=%d, %d tabs. (%.0f avant, %.0f apres)\n"
+
+#: LYMessages.c:791
+#, c-format
+msgid "\t\tTab kind=%d at %.0f\n"
+msgstr "\t\tTab sorte=%d à %.0f\n"
-# -----------------------
-# 1998 March 7. Text Changed from 0.98 to 0.102
-#: /home/sean/lynx/lynx2-6/src/LYReadCFG.c:317
-msgid ""
-"Syntax Error parsing COLOR in configuration file:\n"
-"The line must be of the form:\n"
-"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
-"\n"
-"Here FOREGROUND and BACKGROUND must be one of:\n"
-msgstr ""
-"Erreur de syntaxe pour COLOR dans le fichier de configuration :\n"
-"La séquence doit être la suivante :\n"
-"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
-"\n"
-"FOREGROUND et BACKGROUND doivent être :\n"
+#. HTTP.c
+#: LYMessages.c:794
+msgid "Can't proceed without a username and password."
+msgstr "Impossible de procéder sans id-utilisateur et mot de passe."
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:97
-msgid "<h1>You have reached the Information Page</h1>\n"
-msgstr "<h1>Vous avez accédé à la Page d'information</h1>\n"
+#: LYMessages.c:795
+msgid "Can't retry with authorization! Contact the server's WebMaster."
+msgstr "Impossible de ré-essayer sans authorisation! Contactez le Webmestre du serveur."
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:103
-msgid ""
-"<h2>Directory that you are currently viewing</h2>\n"
-"<pre>"
-msgstr ""
-"<h2>Répertoire que vous visualisez présentement</h2>\n"
-"<pre>"
+#: LYMessages.c:796
+msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
+msgstr "Impossible sans autorisation du mandataire; contacter le webmestre."
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:130 src/LYShowInfo.c:160 src/LYShowInfo.c:177
-msgid ""
-"\n"
-"Directory that you have currently selected\n"
-"\n"
-msgstr ""
-"\n"
-"Répertoire que vous avez sélectionné\n"
-"\n"
+#: LYMessages.c:797
+msgid "Retrying with proxy authorization information."
+msgstr "Nouvelle tentative avec info d'autorisation du mandataire"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:133 src/LYShowInfo.c:163 src/LYShowInfo.c:180
-msgid ""
-"\n"
-"File that you have currently selected\n"
-"\n"
-msgstr ""
-"\n"
-"Fichier que vous avez sélectionné\n"
-"\n"
+#. HTWAIS.c
+#: LYMessages.c:800
+msgid "HTWAIS: Return message too large."
+msgstr "HTWAIS: Message de retour trop grand."
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:136 src/LYShowInfo.c:167 src/LYShowInfo.c:184
-msgid ""
-"\n"
-"Symbolic link that you have currently selected\n"
-"\n"
-msgstr ""
-"\n"
-"Lien symbolique que vous avez sélectionné\n"
-"\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:139 src/LYShowInfo.c:171 src/LYShowInfo.c:188
-msgid ""
-"\n"
-"Item that you have currently selected\n"
-"\n"
-msgstr ""
-"\n"
-"Article que vous avez sélectionné\n"
-"\n"
+#: LYMessages.c:801
+msgid "Enter WAIS query: "
+msgstr "Entrez votre requête WAIS:"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:149 src/LYShowInfo.c:182 src/LYShowInfo.c:199
-msgid "Unable to follow link"
-msgstr "Impossible d'activer le lien"
+#. Miscellaneous status
+#: LYMessages.c:804
+msgid "Retrying as HTTP0 request."
+msgstr "Nouvel essai de requête HTTP0"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:151 src/LYShowInfo.c:184 src/LYShowInfo.c:201
-msgid " <em>Points to file:</em> %s\n"
-msgstr "<em>Pointe vers le fichier :</em> %s\n"
+#: LYMessages.c:805
+#, c-format
+msgid "Transferred %d bytes"
+msgstr "%d bytes transférés"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:155 src/LYShowInfo.c:189 src/LYShowInfo.c:206
-msgid " <em>Name of owner:</em> %s\n"
-msgstr " <em>Nom du propriétaire :</em> %s\n"
+#: LYMessages.c:806
+msgid "Data transfer complete"
+msgstr "Transfert de données terminé"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:158 src/LYShowInfo.c:192 src/LYShowInfo.c:209
-msgid " <em>Group name:</em> %s\n"
-msgstr " <em>Nom du groupe :</em> %s\n"
+#: LYMessages.c:807
+#, c-format
+msgid "Error processing line %d of %s\n"
+msgstr "Erreur à la ligne %d de %s\n"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:160 src/LYShowInfo.c:194 src/LYShowInfo.c:211
-msgid " <em>File size:</em> %ld (bytes)\n"
-msgstr " <em>Volume du fichier :</em> %ld (octets)\n"
+#. Lynx internal page titles
+#: LYMessages.c:810
+msgid "Address List Page"
+msgstr "Page de liste d'adresse"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:168 src/LYShowInfo.c:202 src/LYShowInfo.c:219
-msgid " <em>Creation date:</em> %s"
-msgstr " <em>Date de création :</em> %s"
+#: LYMessages.c:811
+msgid "Bookmark file"
+msgstr "Fichier de signets"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:171 src/LYShowInfo.c:205 src/LYShowInfo.c:222
-msgid " <em>Last modified:</em> %s"
-msgstr " <em>Dernière mise à jour :</em> %s"
+#: LYMessages.c:812
+msgid "Configuration Definitions"
+msgstr "Définition de la configuration"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:174 src/LYShowInfo.c:208 src/LYShowInfo.c:225
-msgid " <em>Last accessed:</em> %s\n"
-msgstr " <em>Dernier accès :</em> %s\n"
+#: LYMessages.c:813
+msgid "Cookie Jar"
+msgstr "\"Le fichier des «cookies»"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:176
-msgid " <em>Access Permissions</em>\n"
-msgstr " <em>Permissions d'accès</em>\n"
+#: LYMessages.c:814
+msgid "Current Key Map"
+msgstr "Configuration des touches"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:177 src/LYShowInfo.c:211 src/LYShowInfo.c:228
-msgid " <em>Owner:</em> "
-msgstr " <em>Propriétaire :</em> "
+#: LYMessages.c:815
+msgid "File Management Options"
+msgstr "Options de gestion de fichier"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:239 src/LYShowInfo.c:275 src/LYShowInfo.c:292
-msgid ""
-"<h2>File that you are currently viewing</h2>\n"
-"<dl compact>"
-msgstr ""
-"<h2>Fichier que vous visualisez présentement</h2>\n"
-"<dl compact>"
+#: LYMessages.c:816
+msgid "Download Options"
+msgstr "Options de déchargement de fichier"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:243 /home/sean/lynx/lynx2-6/src/LYShowInfo.c:288 src/LYShowInfo.c:345 src/LYShowInfo.c:362
-msgid "<dt><em>Linkname:</em> %s\n"
-msgstr "<dt><em>Nom du lien :</em> %s\n"
+#: LYMessages.c:817
+msgid "History Page"
+msgstr "Historique"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:257 src/LYShowInfo.c:311 src/LYShowInfo.c:328
-msgid "<dt><em>Last Mod:</em> %s\n"
-msgstr "<dt><em>Dernière modification :</em> %s\n"
+#: LYMessages.c:818
+msgid "List Page"
+msgstr "la Page de références"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:262 src/LYShowInfo.c:315 src/LYShowInfo.c:332
-msgid "<dt><em>Post Data:</em> <xmp>%s</xmp>\n"
-msgstr "<dt><em>Données POST :</em> <xmp>%s</xmp>\n"
+#: LYMessages.c:819
+msgid "Lynx.cfg Information"
+msgstr "Information sur Lynx.cfg"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:264 src/LYShowInfo.c:317 src/LYShowInfo.c:334
-msgid "<dt><em>Post Content Type:</em> %s\n"
-msgstr "<dt><em>Type de contenu POST :</em> %s\n"
+#: LYMessages.c:820
+msgid "Converted Mosaic Hotlist"
+msgstr "Liste de signets Mosaic convertie"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:285 src/LYShowInfo.c:342 src/LYShowInfo.c:359
-msgid ""
-"<h2>Link that you currently have selected</h2>\n"
-"<dl compact>"
-msgstr ""
-"<h2>Lien que vous avez sélectionné</h2>\n"
-"<dl compact>"
+#: LYMessages.c:821
+msgid "Options Menu"
+msgstr "Menu des paramètres"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:320
-msgid "<dt><em>Filename:</em> %s\n"
-msgstr "<dt><em>Nom du fichier :</em> %s\n"
+#: LYMessages.c:822
+msgid "File Permission Options"
+msgstr "Options de permission d'accès"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.c:325 src/LYShowInfo.c:383 src/LYShowInfo.c:400
-msgid "<h2>No Links on the current page</h2>"
-msgstr "<h2>Aucun lien dans la page courante</h2>"
+#: LYMessages.c:823
+msgid "Printing Options"
+msgstr "Options d'impression"
-#: /home/sean/lynx/lynx2-6/src/LYShowInfo.h:12 src/LYHistory.c:80 src/LYHistory.c:84 src/LYMainLoop.c:4323 src/LYMainLoop.c:4327 src/LYMainLoop.c:4355 src/LYMainLoop.c:4359 src/LYMainLoop.c:4618 src/LYMainLoop.c:4649 src/LYMainLoop.c:4650 src/LYShowInfo.c:116 src/LYShowInfo.c:132
+#: LYMessages.c:824
msgid "Information about the current document"
msgstr "Information sur le document courant"
-#: /home/sean/lynx/lynx2-6/src/LYTraversal.c:117 src/LYTraversal.c:117
-msgid ""
-"\n"
-"\n"
-"TRAVERSAL WAS INTERUPTED\n"
-"\n"
-"\t here is a list of the history stack so that you may rebuild\n"
-"\n"
-msgstr ""
-"\n"
-"\n"
-"PARCOURS INTERROMPU \n"
-"\n"
-"\t voici une liste de l'Historique que vous pouvez reconstituer\n"
-"\n"
+#: LYMessages.c:825
+msgid "Your recent statusline messages"
+msgstr "Votre ligne d'état récente"
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:82 src/LYUpload.c:84 src/LYUpload.c:85
-msgid "ERROR! - upload command is misconfigured"
-msgstr "ERREUR - commande de chargement mal configurée"
+#: LYMessages.c:826
+msgid "Upload Options"
+msgstr "Options de chargement de fichier "
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:94 /home/sean/lynx/lynx2-6/src/LYUpload.c:157 src/LYDownload.c:126 src/LYDownload.c:130 src/LYDownload.c:156 src/LYDownload.c:160 src/LYDownload.c:189 src/LYDownload.c:193 src/LYDownload.c:398 src/LYDownload.c:410 src/LYDownload.c:428 src/LYDownload.c:440 src/LYDownload.c:461 src/LYDownload.c:473 src/LYPrint.c:246 src/LYPrint.c:251 src/LYPrint.c:289 src/LYPrint.c:294 src/LYPrint.c:322 src/LYPrint.c:327 src/LYPrint.c:1006 src/LYPrint.c:1026 src/LYPrint.c:1044 src/LYPrint.c:1064 src/LYPrint.c:1078 src/LYPrint.c:1098 src/LYUpload.c:96 src/LYUpload.c:97 src/LYUpload.c:151 src/LYUpload.c:152
-msgid "Enter a filename: "
-msgstr "Entrez un nom de fichier : "
+#: LYMessages.c:827
+msgid "Visited Links Page"
+msgstr "la Page des liens activés"
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:105
-msgid "Illegal redirection \"../\" found! Request ignored. "
-msgstr "Réacheminement «../» non autorisé; demande non traitée"
+#. CONFIG_DEF_TITLE subtitles
+#: LYMessages.c:830
+msgid "See also"
+msgstr "Voir aussi"
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:109
-msgid "Illegal character \"/\" found! Request ignored. "
-msgstr "Caractère «/» non autorisé; demande non traitée"
+#: LYMessages.c:831
+msgid "your"
+msgstr "votre"
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:114
-msgid "Illegal redirection using \"~\" found! Request ignored. "
-msgstr "Réacheminement avec «~» non autorisé; demande non traitée"
+#: LYMessages.c:832
+msgid "for runtime options"
+msgstr "pour les options d'éxécution"
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:128
-msgid "File name may not begin with dot. Enter a new filename: "
-msgstr "Nom de fichier ne peut commencer par un point. Entrez un nouveau nom: "
+#: LYMessages.c:833
+msgid "compile time options"
+msgstr "options de compilation"
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:138 src/LYDownload.c:282 src/LYDownload.c:298 src/LYPrint.c:416 src/LYPrint.c:437 src/LYUpload.c:132 src/LYUpload.c:133
-msgid "File exists. Create higher version? (y/n)"
-msgstr "Ce fichier existe déjà. Créer une nouvelle version? (o/n)"
-
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:140 src/LYDownload.c:284 src/LYDownload.c:300 src/LYPrint.c:418 src/LYPrint.c:439 src/LYUpload.c:134 src/LYUpload.c:135
-msgid "File exists. Overwrite? (y/n)"
-msgstr "Ce fichier existe déjà. Remplacer? (o/n)"
-
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:168 src/LYUpload.c:163 src/LYUpload.c:164
-msgid "Cannot write to file. Enter a new filename: "
-msgstr "Écriture non autorisée. Entrez un nouveau nom de fichier : "
-
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:198 src/LYUpload.c:193 src/LYUpload.c:194
-msgid "Unable to upload file."
-msgstr "Impossible de charger le fichier."
-
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:204 src/LYUpload.c:197 src/LYUpload.c:198
-msgid "Cancelling."
-msgstr "Annulation."
+#: LYMessages.c:834
+msgid "latest release"
+msgstr "dernière version"
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:268
-msgid "<h1>Upload Options (%s Version %s)</h1>\n"
-msgstr "<h1>Options de chargement de fichier (%s Version %s)</h1>\n"
+#: LYMessages.c:835
+msgid "pre-release version"
+msgstr "version pré finale"
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:271
-msgid "You have the following upload choices.<br>\n"
-msgstr "Vous avez les options de chargement suivantes.<br>\n"
+#: LYMessages.c:836
+msgid "development version"
+msgstr "version de développement"
-#: /home/sean/lynx/lynx2-6/src/LYUpload.c:287
+#. #define AUTOCONF_CONFIG_CACHE
+#: LYMessages.c:838
msgid ""
-"\n"
-" \\\n"
-"No other upload methods have been defined yet. You may define\n"
-" \\\n"
-"an unlimited number of upload methods using the lynx.cfg file.\n"
+"The following data were derived during the automatic configuration/build\n"
+"process of this copy of Lynx. When reporting a bug, please include a copy\n"
+"of this page."
msgstr ""
-"\n"
-" \\\n"
-"Aucune autre méthode de chargement de fichier encore définie. Vous\n"
-" \\\n"
-"pouvez définir de nombreuses méthodes au moyen du fichier lynx.cfg.\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYUpload.h:12 src/LYHistory.c:75 src/LYHistory.c:79 src/LYHistory.c:129 src/LYHistory.c:133 src/LYMainLoop.c:2935 src/LYMainLoop.c:2959 src/LYMainLoop.c:3169 src/LYMainLoop.c:3193 src/LYMainLoop.c:3251 src/LYMainLoop.c:3275 src/LYMainLoop.c:4630 src/LYMainLoop.c:4661 src/LYMainLoop.c:4662 src/LYMainLoop.c:4893 src/LYMainLoop.c:4924 src/LYMainLoop.c:4925 src/LYMainLoop.c:5045 src/LYMainLoop.c:5051 src/LYMainLoop.c:5064 src/LYMainLoop.c:5065 src/LYMainLoop.c:5070 src/LYMainLoop.c:5071 src/LYUpload.c:237 src/LYUpload.c:240
-msgid "Lynx Upload Options"
-msgstr "Options de chargement de fichier - Lynx"
+"Les données suivantes ont étées déduites lors de la configuration automatique\n"
+"de cette copie de lynx. Lorsque vous nous informer d'un bug, merci \n"
+"d'inclure une copie de cette page."
-#: /home/sean/lynx/lynx2-6/src/LYUtils.c:437 /home/sean/lynx/lynx2-6/src/LYUtils.c:446 src/LYUtils.c:1982 src/LYUtils.c:1983 src/LYUtils.c:1984 src/LYUtils.c:1991 src/LYUtils.c:1992 src/LYUtils.c:1993
-msgid "This is a searchable index. Use "
-msgstr "Il s'agit d'un index consultable. Utilisez "
-
-#: /home/sean/lynx/lynx2-6/src/LYUtils.c:439 /home/sean/lynx/lynx2-6/src/LYUtils.c:448 src/LYUtils.c:1984 src/LYUtils.c:1985 src/LYUtils.c:1986 src/LYUtils.c:1993 src/LYUtils.c:1994 src/LYUtils.c:1995
-msgid " to search:"
-msgstr " pour la recherche :"
-
-#: /home/sean/lynx/lynx2-6/src/LYUtils.c:443 src/LYUtils.c:1988 src/LYUtils.c:1989 src/LYUtils.c:1990
-msgid "space for more"
-msgstr "Touche d'espacement pour continuer"
-
-#: /home/sean/lynx/lynx2-6/src/LYUtils.c:450 src/LYUtils.c:1995 src/LYUtils.c:1996 src/LYUtils.c:1997
-msgid "Type a command or ? for help:"
-msgstr "Tapez une commande ou ? pour obtenir de l'aide :"
-
-#: /home/sean/lynx/lynx2-6/src/LYUtils.c:456 src/LYUtils.c:2001 src/LYUtils.c:2002 src/LYUtils.c:2003
-msgid "Press space for next page"
-msgstr "Appuyez sur la touche d'espacement pour aller à la page suivante "
-
-#: /home/sean/lynx/lynx2-6/src/LYUtils.c:2216 src/LYUtils.c:4223 src/LYUtils.c:4224 src/LYUtils.c:4225
-msgid "Looking up '%s' first.\n"
-msgstr "Recherche de '%s' d'abord.\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYUtils.c:2276 src/LYUtils.c:4218 src/LYUtils.c:4219 src/LYUtils.c:4220 src/LYUtils.c:4335 src/LYUtils.c:4341 src/LYUtils.c:4342
-msgid "Looking up "
-msgstr "Recherche "
-
-#: /home/sean/lynx/lynx2-6/src/LYUtils.c:2278 src/LYUtils.c:4337 src/LYUtils.c:4343 src/LYUtils.c:4344
-msgid ", guessing..."
-msgstr ", analyse en cours..."
-
-#: /home/sean/lynx/lynx2-6/src/LYUtils.c:2281 src/LYUtils.c:4340 src/LYUtils.c:4346 src/LYUtils.c:4347
-msgid "Looking up '%s', guessing...\n"
-msgstr "Recherche '%s', analyse en cours...\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:490
+#. #define AUTOCONF_LYNXCFG_H
+#: LYMessages.c:842
msgid ""
-"# Lynx User Defaults File\n"
-"\n"
+"The following data were used as automatically-configured compile-time\n"
+"definitions when this copy of Lynx was built."
msgstr ""
-"# Valeurs implicites utilisateur - Lynx\n"
-"\n"
+"Les données suivantes ont étées utilisées comme des options de compilations\n"
+"configurées automatiquement lors de la compilation de cette version de Lynx."
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:495 src/LYrcFile.c:586 src/LYrcFile.c:597
-msgid ""
-"# file_editor specifies the editor to be invoked when editing local files\n"
-"# or sending mail. If no editor is specified, then file editing is disabled\n"
-"# unless it is activated from the command line, and the built-in line editor\n"
-"# will be used for sending mail.\n"
-msgstr ""
-"# file_editor spécifie l'éditeur pour l'édition de fichiers locaux\n"
-"# ou l'envoi de courrier. Si aucun n'est précisé, l'édition de fichier est désactivée,\n"
-"# à moins qu'elle soit activée de la ligne de commande, auquel cas l'éditeur de lignes\n"
-"# sera utilisé pour l'envoi de courrier.\n"
+#. #define DIRED_NOVICELINE
+#: LYMessages.c:847
+msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
+msgstr "C)réer D)écharger E)diter F) Menu M)odifier R) Supprimer T) Marquer U) Charger\n"
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:505 src/LYrcFile.c:596 src/LYrcFile.c:607
-msgid ""
-"# bookmark_file specifies the name and location of the default bookmark\n"
-"# file into which the user can paste links for easy access at a later\n"
-"# date.\n"
-msgstr ""
-"# bookmark_file spécifie le nom et l'emplacement du fichier de signets par défaut\n"
-"# dans lequel l'utilisateur peut copier des liens pour un accès rapide\n"
-"# ultérieurement.\n"
+#: LYMessages.c:848
+msgid "Failed to obtain status of current link!"
+msgstr "Impossible d'obtenir l'état du lien actif!"
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:514
-msgid ""
-"# if sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
-"# been defined (see below), then all bookmark operations will first\n"
-"# prompt the user to select an active sub-bookmark file. If the default\n"
-"# Lynx bookmark_file is defined (see above), it will be used as the\n"
-"# default selection. When this option is set to \"advanced\", and the\n"
-"# user mode is advanced, the 'v'iew bookmark command will invoke a\n"
-"# statusline prompt instead of the menu seen in novice and intermediate\n"
-"# user modes. When this option is set to \"standard\", the menu will be\n"
-"# presented regardless of user mode.\n"
-msgstr ""
-"# Si sub_bookmarks n'est pas réglé à «désactivé» et que des signets multiples\n"
-"# ont été définis (voir ci-après), le système demande d'abord\n"
-"# à l'utilisateur de choisir une sous-catégorie de signets actif. Si le fichier\n"
-"# bookmark_file implicite est défini (voir ci-après), il sera utilisé comme\n"
-"# sélection par défaut. Lorsque cette option n'est pas réglée à «avancé» et que le\n"
-"# mode utilisateur est Avancé, la commande 'v' (visualiser les signets) appelle une\n"
-"# invite de ligne d'état au lieu du menu propre aux modes utilisateur\n"
-"# Novice et Intermédiaire. Lorsque l'option est réglée à «standard», le menu \n"
-"# est présenté peu importe le mode utilisateur.\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:532 src/LYrcFile.c:623 src/LYrcFile.c:634
-msgid ""
-"# The following allow you to define sub-bookmark files and descriptions.\n"
-"# The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
-"# Up to 26 bookmark files (for the English capital letters) are allowed.\n"
-"# We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
-msgstr ""
-"# Vous pouvez définir des sous-catégories de signets et de descriptions.\n"
-"# Le format est multi_bookmark<lettre_majuscule>=<nom_de_fichier>,<description>\n"
-"# vous pouvez définir jusque 26 fichiers de signets (l'alphabet anglais).\n"
-"# commencez avec «multi_bookmarkB» puisque 'A' est le fichier implicite (voir ci-après.\n"
+#. #define INVALID_PERMIT_URL
+#: LYMessages.c:851
+msgid "Special URL only valid from current File Permission menu!"
+msgstr "URL spécial valide uniquement depuis le menu de permission d'accès actif"
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:551 src/LYrcFile.c:642 src/LYrcFile.c:653
-msgid ""
-"# The file_sorting_method specifies which value to sort on when viewing\n"
-"# file lists such as FTP directories. The options are:\n"
-"# BY_FILENAME -- sorts on the name of the file\n"
-"# BY_TYPE -- sorts on the type of the file\n"
-"# BY_SIZE -- sorts on the size of the file\n"
-"# BY_DATE -- sorts on the date of the file\n"
-msgstr ""
-"# file_sorting_method spécifie le mode de tri à utiliser pour consulter\n"
-"# des listes de fichiers tels que des répertoires FTP. Les options sont:\n"
-"# MOM -- tri selon le nom de fichier\n"
-"# TYPE -- tri selon le type de fichier\n"
-"# VOLUME -- tri selon le volume du fichier\n"
-"# DATE -- tri selon la date du fichier\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:569
-msgid ""
-"# personal_mail_address specifies your personal mail address. The\n"
-"# address will be sent during HTTP file transfers for authorization and\n"
-"# logging purposes, and for mailed comments.\n"
-"# If you do not want this information given out, set the NO_FROM_HEADER\n"
-"# to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
-"# could leave this field blank, but then you won't have if it included in\n"
-"# your mailed comments.\n"
-msgstr ""
-"# personal_mail_address spécifie votre adresse de courrier personnel.\n"
-"# L'adresse est envoyée durant le transfert HTTP aux fins d'autorisation et\n"
-"# de connexion, et pour l'envoi de commentaires. Pour ne pas que cette\n"
-"# information soit connue, réglez le paramètre NO_FROM_HEADER à TRUE\n"
-"# dans lynx.cfg, ou utilisez l'option -nofrom (ligne de commande). Vous pouvez\n"
-"# laisser ce champ vierge, auquel cas cette ligne ne sera pas incluse dans\n"
-"# les commentaires que vous envoyez.\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:583 src/LYrcFile.c:674 src/LYrcFile.c:685
-msgid ""
-"# If case_sensitive_searching is \"on\" then when the user invokes a search\n"
-"# using the 's' or '/' keys, the search performed will be case sensitive\n"
-"# instead of case INsensitive. The default is usually \"off\".\n"
-msgstr ""
-"# Si case_sensitive_searching est réglé à «ACTIVÉ», lors d'une recherche au\n"
-"# moyen des touches 's' ou '/', la recherche tient compte des maj./min. au lieu\n"
-"# de reconnaître tous les caractères. La valeur par défaut est «DÉSACTIVÉ».\n"
+#: LYMessages.c:855
+msgid "External support is currently disabled."
+msgstr "Le soutien externe est présentement inactivé."
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:593 src/LYrcFile.c:684 src/LYrcFile.c:695
-msgid ""
-"# The character_set definition controls the representation of 8 bit\n"
-"# characters for your terminal. If 8 bit characters do not show up\n"
-"# correctly on your screen you may try changing to a different 8 bit\n"
-"# set or using the 7 bit character approximations.\n"
-"# Current valid characters sets are:\n"
-msgstr ""
-"# Le paramètre character_set définit la représentation des caractères\n"
-"# 8 bits pour votre terminal. Si un tel caractère ne s'affiche pas correctement\n"
-"# à votre écran, vous pouvez essayer de changer pour un jeu de caractères 8 bits\n"
-"# différent ou utiliser les caractères approximatifs 7 bits.\n"
-"# Les jeux de caractères valides courants sont :\n"
-
-# msgid ""
-# "# preferred_language specifies the language in MIME notation (e.g., en,\n"
-# "# fr) which Lynx will indicate you prefer in requests to http servers.\n"
-# "# If a file in that language is available, the server will send it.\n"
-# "# Otherwise, the server will send the file in it's default language.\n"
-# msgstr ""
-# "# preferred_language spécifie la langue selon le code MIME (ex., en,\n"
-# "# fr). Lynx tient compte des préférences lors des requêtes aux serveurs http.\n"
-# "# Si un fichier est disponible dans la langue précisée, le serveur l'envoie.\n"
-# "# Sinon, le serveur envoie le fichier dans la langue par défaut.\n"
-# !!!
-# becomes
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:607
-msgid ""
-"# preferred_language specifies the language in MIME notation (e.g., en,\n"
-"!# fr, may be a comma-separated list in decreasing preference)\n"
-"!# which Lynx will indicate you prefer in requests to http servers.\n"
-"# If a file in that language is available, the server will send it.\n"
-"# Otherwise, the server will send the file in it's default language.\n"
-msgstr ""
-"# preferred_language specifies the language in MIME notation (e.g., en,\n"
-"# fr, may be a comma-separated list in decreasing preference)\n"
-"# which Lynx will indicate you prefer in requests to http servers.\n"
-"# If a file in that language is available, the server will send it.\n"
-"# Otherwise, the server will send the file in it's default language.\n"
+#. new with 2.8.4dev.21
+#: LYMessages.c:859
+#, fuzzy
+msgid "Changing working-directory is currently disabled."
+msgstr "Le lancement est présentement désactivé."
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:607
-msgid ""
-"# preferred_language specifies the language in MIME notation (e.g., en,\n"
-"# fr) which Lynx will indicate you prefer in requests to http servers.\n"
-"# If a file in that language is available, the server will send it.\n"
-"# Otherwise, the server will send the file in it's default language.\n"
-msgstr ""
-"# preferred_language spécifie la langue selon le code MIME (ex., en,\n"
-"# fr). Lynx tient compte des préférences lors des requêtes aux serveurs http.\n"
-"# Si un fichier est disponible dans la langue précisée, le serveur l'envoie.\n"
-"# Sinon, le serveur envoie le fichier dans la langue par défaut.\n"
+#: LYMessages.c:860
+#, fuzzy
+msgid "Linewrap OFF!"
+msgstr "Traçage DÉSACTIVÉ"
-# And
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:617
-msgid ""
-"# preferred_charset specifies the character set in MIME notation (e.g.,\n"
-"# ISO-8859-2, ISO-8859-5), which Lynx will indicate you prefer in requests\n"
-"# to http servers using an Accept-Charset header. The value should NOT\n"
-"# include ISO-8859-1 or US-ASCII, since those values are always assumed by\n"
-"# default. If a file in that character set is available, the server will\n"
-"# send it. Otherwise, the server will send the file in ISO-8859-1 or\n"
-"# US-ASCII.\n"
+#: LYMessages.c:861
+msgid "Linewrap ON!"
msgstr ""
-"# preferred_charset spécifie le jeu de caractères selon le code MIME (ex.,\n"
-"# ISO-8859-2, ISO-8859-5). Lynx tient compte des préférences lors des requêtes aux\n"
-"# serveurs http et utilise une en-tête Accept-Charset. Ne PAS inclure les valeurs\n"
-"# ISO-8859-1 ou US-ASCII puisqu'elles sont toujours prises en compte par défaut.\n"
-"# Si un fichier est disponible dans ce jeu de caractères, le serveur l'envoie.\n"
-"# Sinon, le serveur envoie le fichier en ISO-8859-1 ou en US-ASCII.\n"
-
-# Then we will be having to put these on the screen.
-# NdT= What about \"default\", \"on\" and \"off\" ?
-# msgid "default"
-# msgstr "implicite"
-# msgid "on"
-# msgstr "oui"
-# msgid "off"
-# msgstr "non"
-# Then there is the little matter of when to show colours
-# Oh! Except that the rc file is commented in FR, but the options
-# are english. Now I get it. Ofcourse, it would not have worked anyway,
-# since I did not gettext the never/always.
-# msgid "never"
-# msgstr "jamais"
-# msgid "always"
-# msgstr "toujours"
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:631 src/LYrcFile.c:754 src/LYrcFile.c:765
-msgid ""
-"# If vi_keys is set to \"on\", then the normal VI movement keys:\n"
-"# j = down k = up\n"
-"# h = left l = right\n"
-"# will be enabled. These keys are only lower case.\n"
-"# Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
-"# and the keymap display, respectively.\n"
-msgstr ""
-"# Si vi_keys est réglé à «ACTIVÉ», le mouvement de touches VI normal :\n"
-"# j = bas k = haut\n"
-"# h = gauche l = droite\n"
-"# est activé. Ces touches sont en minuscule uniquement.\n"
-"# Les majuscules 'H', 'J' et 'K' activent l'aide, les touches de raccourci\n"
-"# et la configuration des touches respectivement.\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:643 src/LYrcFile.c:766 src/LYrcFile.c:777
-msgid ""
-"# If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
-"# ^N = down ^P = up\n"
-"# ^B = left ^F = right\n"
-"# will be enabled.\n"
-msgstr ""
-"# Si emacs_keys est réglé à «ACTIVÉ», le mouvement de touche EMACS normal :\n"
-"# ^N = bas ^P = haut\n"
-"# ^B = gauche ^F = droite\n"
-"# est activé.\n"
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:653 src/LYrcFile.c:776 src/LYrcFile.c:787
-msgid ""
-"# show_dotfiles specifies that the directory listing should include\n"
-"# \"hidden\" (dot) files/directories. If set \"on\", this will be\n"
-"# honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
-"# restricted via a command line switch. If display of hidden files\n"
-"# is disabled, creation of such files via Lynx also is disabled.\n"
-msgstr ""
-"# Le paramètre show_dotfiles spécifie que la liste des répertoires doit inclure\n"
-"# les fichiers et répertoires «cachés». S'il est réglé à «ACTIVÉ», il n'est\n"
-"# pris en compte que s'il est activé dans userdefs.h et/ou lynx.cfg et s'il n'est pas\n"
-"# restreint par une option de la ligne de commande. Si l'affichage des fichiers cachés\n"
-"# est désactivé, la création de tels fichiers dans Lynx est aussi désactivée.\n"
+#: LYMessages.c:862
+#, fuzzy
+msgid "Parsing nested-tables toggled OFF! Reloading..."
+msgstr "Le mode 8-bits ou CJK est réglé à DÉSACTIVÉ! Chargement..."
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:664
-msgid ""
-"# select_popups spécifie sicifies whether the OPTIONs in a SELECT block which\n"
-"# lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
-"# buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
-"# present in the SELECT start tag, Lynx always will create a vertical list\n"
-"# of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
-"# as the default while a value of \"off\" will set use of radio boxes.\n"
-"# The default can be overridden via the -popup command line toggle.\n"
-msgstr ""
-"# select_popups spécifie si les OPTIONs dans un bloc SELECT dépourvu d'un attribut\n"
-"# MULTIPLE sont présentés comme des listes ou des boutons d'option verticaux ou comme\n"
-"# un menu-éclair. Si l'attribut MULTIPLE est présent dans le codet de départ SELECT,\n"
-"# Lynx crée toujours une liste verticale de cases à cocher pour les OPTIONs.\n"
-"# La valeur «activé» règle le défaut à menus-éclairs alors que la valeur\n"
-"# «désactivé» règle le défaut à cases d'option. La valeur par défaut peut être\n"
-"# substitué au moyen de la bascule de ligne de commande -popup.\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:677
-msgid ""
-"# If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
-"# your keypad when the numlock is on will act as arrow keys:\n"
-"# 8 = Up Arrow\n"
-"# 4 = Left Arrow 6 = Right Arrow\n"
-"# 2 = Down Arrow\n"
-"# If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
-"# appear next to each link and numbers are used to select links.\n"
-"# NOTE: Some fixed format documents may look disfigured when\n"
-"# \"LINKS_ARE_NUMBERED\" is enabled.\n"
-msgstr ""
-"# Lorsque keypad_mode est réglé à «NUMBERS_AS_ARROWS», si le verrouillage numérique\n"
-"# est activé, les chiffres de votre bloc numérique tiennent lieu de touches fléchées:\n"
-"# 8 = Flèche Haut\n"
-"# 4 = Flèche Gauche 6 = Flèche Droite\n"
-"# 2 = Flèche Bas\n"
-"# Si le paramètre keypad_mode est réglé à «LINKS_ARE_NUMBERED», les chiffres\n"
-"# sont affichés en regard de chaque lien et ils servent à choisir les liens.\n"
-"# NOTA - Certains document de format fixe peuvent être affectés lorsque\n"
-"# «LINKS_ARE_NUMBERED» est activé.\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:694
-msgid ""
-"# linedit_mode specifies the key binding used for inputting strings in\n"
-"# prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
-"# the following control characters are used for moving and deleting:\n"
-"#\n"
-"# Prev Next Enter = Accept input\n"
-"# Move char: <- -> ^G = Cancel input\n"
-"# Move word: ^P ^N ^U = Erase line\n"
-"# Delete char: ^H ^R ^A = Beginning of line\n"
-"# Delete word: ^B ^F ^E = End of line\n"
-"#\n"
-"# Current lineedit modes are:\n"
-msgstr ""
-"# linedit_mode spécifie le jeu de touches utilisé pour entrer des chaînes de caractères\n"
-"# aux invites et dans les formulaires. S'il est réglé à «Clavier implicite», alors\n"
-"# les caractères de commande suivants servent à se déplacer et à supprimer :\n"
-"#\n"
-"# Préc. Suiv. Entr = Accepter l'entrée\n"
-"# Dépl. car. : <- -> ^G = Annuler l'entrée\n"
-"# Dépl. mot : ^P ^N ^U = Effacer la ligne\n"
-"# Suppr. car. : ^H ^R ^A = Début de la ligne\n"
-"# Suppr. mot : ^B ^F ^E = Fin de la ligne\n"
-"#\n"
-"# Les modes d'édition de ligne courants sont :\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:719 src/LYrcFile.c:871 src/LYrcFile.c:895
-msgid ""
-"# dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
-"# (if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
-"# files and directories together. \"FILES_FIRST\" lists files first and\n"
-"# \"DIRECTORIES_FIRST\" lists directories first.\n"
-msgstr ""
-"# Le paramètre dir_list_styles spécifie le style de liste de répertoires sous DIRED_SUPPORT\n"
-"# (si l'option est offerte). La valeur «MIXED_STYLE» (défaut) permet de trier fichiers\n"
-"# et répertoires ensemble. La valeur «FILES_FIRST» permet de lister les fichiers d'abord\n"
-"# tandis que «DIRECTORIES_FIRST» permet de lister les répertoires d'abord.\n"
+#: LYMessages.c:863
+#, fuzzy
+msgid "Parsing nested-tables toggled ON! Reloading..."
+msgstr "Le mode 8-bits ou CJK est réglé à ACTIVÉ! Chargement..."
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:734 src/LYrcFile.c:886 src/LYrcFile.c:910
-msgid ""
-"# user_mode specifies the users level of knowledge with Lynx. The\n"
-"# default is \"NOVICE\" which displays two extra lines of help at the\n"
-"# bottom of the screen to aid the user in learning the basic Lynx\n"
-"# commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
-"# Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
-"# bottom of the screen.\n"
-msgstr ""
-"# Le paramètre user_mode spécifie le niveau de connaissance de Lynx par l'utilisateur. La\n"
-"# valeur «NOVICE» (défaut) commande l'affichage de deux lignes supplémentaires d'aide\n"
-"# au bas de l'écran pour aider l'utilisateur à apprendre les commandes Lynx\n"
-"# de base. Réglez le paramètre user_mode à «INTERMEDIATE» pour éliminer ces lignes.\n"
-"# Utilisez l'option «ADVANCED» pour afficher l'URL du lien sélectionné au bas\n"
-"# de l'écran.\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:750 src/LYrcFile.c:940
-msgid ""
-"# If run_all_execution_links is set \"on\" then all local exection links\n"
-"# will be executed when they are selected.\n"
-"#\n"
-"# WARNING - This is potentially VERY dangerous. Since you may view\n"
-"# information that is written by unknown and untrusted sources\n"
-"# there exists the possibility that Trojan horse links could be\n"
-"# written. Trojan horse links could be written to erase files\n"
-"# or compromise security. This should only be set to \"on\" if\n"
-"# you are viewing trusted source information.\n"
-msgstr ""
-"# Si 'run_all_execution_links' est réglé à «activé», tous les liens exécutables\n"
-"# locaux sont exécutés lorsqu'ils sont choisis.\n"
-"#\n"
-"# AVIS - Cette option est potentiellement très dangereuse car elle permet de\n"
-"# voir de l'information écrite par des sources inconnues ou non fiables.\n"
-"# Il existe un danger que des fichiers Cheval de Troie soient inclus.\n"
-"# Les fichiers troyens peuvent provoquer l'effacement de fichiers ou\n"
-"# compromettre la sécurité. Cette fonction devrait être réglée à\n"
-"# «activé» uniquement si vous consultez de l'information fiable.\n"
-
-#: /home/sean/lynx/lynx2-6/src/LYrcFile.c:766 src/LYrcFile.c:956 src/LYrcFile.c:980
-msgid ""
-"# If run_execution_links_on_local_files is set \"on\" then all local\n"
-"# execution links that are found in LOCAL files will be executed when they\n"
-"# are selected. This is different from run_all_execution_links in that\n"
-"# only files that reside on the local system will have execution link\n"
-"# permissions.\n"
-"#\n"
-"# WARNING - This is potentially dangerous. Since you may view\n"
-"# information that is written by unknown and untrusted sources\n"
-"# there exists the possibility that Trojan horse links could be\n"
-"# written. Trojan horse links could be written to erase files\n"
-"# or compromise security. This should only be set to \"on\" if\n"
-"# you are viewing trusted source information.\n"
+#: LYMessages.c:864
+msgid "Shifting is disabled while line-wrap is in effect"
msgstr ""
-"# Si 'run_execution_links_on_local_files' est réglé à «activé», tous les liens\n"
-"# exécutables qui se trouvent dans des fichiers LOCAUX seront exécutés lorsque\n"
-"# choisis. Cette option est différente de 'run_all_execution_links' en ce que\n"
-"# les permissions d'accès sont accordées uniquement pour les fichiers hébergés\n"
-"# sur le serveur local.\n"
-"#\n"
-"# AVIS - Cette option est potentiellement très dangereuse car elle permet de\n"
-"# voir de l'information écrite par des sources inconnues ou non fiables.\n"
-"# Il existe un danger que des fichiers Cheval de Troie soient inclus.\n"
-"# Les fichiers troyens peuvent provoquer l'effacement de fichiers ou\n"
-"# compromettre la sécurité. Cette fonction devrait être réglée à\n"
-"# «activé» uniquement si vous consultez de l'information fiable.\n"
-
-#: LYMainLoop.c:1079
-msgid "-more- -index- %s"
-msgstr "-suite- -index- %s"
-
-# msgid "Directory browsing is not allowed."
-# msgstr "Cette fonction n'est pas autorisée."
-# msgid "This directory is not readable."
-# msgstr "Ce répertoire ne peut être consulté."
-# ## ------------ Below this point all strings need translation ------
-# sprintf(msg, _("Username for '%s' at %s '%s%s':"),
-# realm->realmname,
-# (IsProxy ? "proxy" : "server"),
-# (theHost ? theHost : "??"),
-# (thePort ? thePort : ""));
-#: WWW/Library/Implementation/HTAABrow.c:652
+
+#: LYMessages.c:865
+#, fuzzy
+msgid "Trace not supported"
+msgstr "Le terminal ne permet pas l'affichage couleur"
+
+#: WWW/Library/Implementation/HTAABrow.c:648
+#, c-format
msgid "Username for '%s' at %s '%s%s':"
msgstr "TR-Username for '%s' at %s '%s%s':"
-#: WWW/Library/Implementation/HTAABrow.c:917
+#: WWW/Library/Implementation/HTAABrow.c:914
msgid "This client doesn't know how to compose proxy authorization information for scheme"
-msgstr ""
+msgstr "Ce client ne sait pas comment composer l'informationd'autorisation du mandataire pour le schème d'adressage"
-#: WWW/Library/Implementation/HTAABrow.c:991
+#: WWW/Library/Implementation/HTAABrow.c:989
msgid "This client doesn't know how to compose authorization information for scheme"
-msgstr ""
+msgstr "Ce client ne sait pas comment composer des informations d'autorisation pour un scheme"
-#: WWW/Library/Implementation/HTAABrow.c:1101
+#: WWW/Library/Implementation/HTAABrow.c:1097
+#, c-format
msgid "Invalid header '%s%s%s%s%s'"
-msgstr ""
-
-#: WWW/Library/Implementation/HTAABrow.c:1172
-msgid "Authorization failed. Retry?"
-msgstr ""
+msgstr "Header invalide '%s%s%s%s%s'"
# WWW/Libary/Implementation/HTAABrow.c
-#: WWW/Library/Implementation/HTAABrow.c:1205
+#: WWW/Library/Implementation/HTAABrow.c:1201
msgid "Proxy authorization required -- retrying"
msgstr "Autorisation du mandataire requise - nouvelle tentative"
-#: WWW/Library/Implementation/HTAABrow.c:1264
+#: WWW/Library/Implementation/HTAABrow.c:1260
msgid "Access without authorization denied -- retrying"
msgstr "Accès non autorisé refusé - nouvelle tentative"
-#: WWW/Library/Implementation/HTAAProt.c:327
-msgid "Mask group syntax error"
-msgstr ""
-
-#: WWW/Library/Implementation/HTAccess.c:678 WWW/Library/Implementation/HTAccess.c:687 WWW/Library/Implementation/HTAccess.c:722 WWW/Library/Implementation/HTAccess.c:731
-msgid "Redirection limit of 10 URL's reached."
-msgstr "Réacheminement : limite de 10 URL atteinte."
+#: WWW/Library/Implementation/HTAccess.c:683
+msgid "Access forbidden by rule"
+msgstr "Accès interdit par une règle"
# WWW/Libary/Implementation/HTAccess.c
-#: WWW/Library/Implementation/HTAccess.c:697 WWW/Library/Implementation/HTAccess.c:706
+#: WWW/Library/Implementation/HTAccess.c:785
msgid "Document with POST content not found in cache. Resubmit?"
msgstr "Document avec contenu POST non trouvé dans l'antémémoire. Recommencer?"
-#: WWW/Library/Implementation/HTAccess.c:937 WWW/Library/Implementation/HTAccess.c:946
+#: WWW/Library/Implementation/HTAccess.c:1026 src/GridText.c:8039
msgid "Loading incomplete."
msgstr "Chargement incomplet."
-#: WWW/Library/Implementation/HTAccess.c:967 WWW/Library/Implementation/HTAccess.c:976
+#: WWW/Library/Implementation/HTAccess.c:1056
msgid "**** HTAccess: socket or file number returned by obsolete load routine!\n"
-msgstr ""
+msgstr "**** HTAccess: socket ou numéro de fichier renvoyé par une routine de chargement obsolète!\n"
-#: WWW/Library/Implementation/HTAccess.c:969 WWW/Library/Implementation/HTAccess.c:978
-msgid "**** HTAccess: Internal software error. Please mail lynx_dev@sig.net!\n"
-msgstr ""
+#: WWW/Library/Implementation/HTAccess.c:1058
+msgid "**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"
+msgstr "**** HTAccess: Erreur interne. Merci de contacter lynx-dev@sig.net !\n"
-#: WWW/Library/Implementation/HTAccess.c:970 WWW/Library/Implementation/HTAccess.c:979
+#: WWW/Library/Implementation/HTAccess.c:1059
+#, c-format
msgid "**** HTAccess: Status returned was: %d\n"
-msgstr ""
+msgstr "**** HTAccess: L'état retourné était: %d\n"
-#: WWW/Library/Implementation/HTAccess.c:983 WWW/Library/Implementation/HTAccess.c:992
+#.
+#. * hack: if we fail in HTAccess.c
+#. * avoid duplicating URL, oh.
+#.
+#: WWW/Library/Implementation/HTAccess.c:1065 src/LYMainLoop.c:7834
+msgid "Can't Access"
+msgstr "Acces impossible"
+
+#: WWW/Library/Implementation/HTAccess.c:1073
msgid "Unable to access document."
msgstr "Impossible d'accéder au document."
-#: WWW/Library/Implementation/HTFTP.c:681
+#: WWW/Library/Implementation/HTFTP.c:756
+#, c-format
msgid "Enter password for user %s@%s:"
-msgstr ""
+msgstr "Mot de passe pour l'utilisateur %s@%s:"
-#: WWW/Library/Implementation/HTFTP.c:705 WWW/Library/Implementation/HTFTP.c:737 WWW/Library/Implementation/HTFTP.c:775 WWW/Library/Implementation/HTFTP.c:839 WWW/Library/Implementation/HTFTP.c:853 WWW/Library/Implementation/HTFTP.c:2596 WWW/Library/Implementation/HTFinger.c:186 WWW/Library/Implementation/HTFinger.c:187 WWW/Library/Implementation/HTFinger.c:388 WWW/Library/Implementation/HTFinger.c:389 WWW/Library/Implementation/HTNews.c:361 WWW/Library/Implementation/HTNews.c:362 WWW/Library/Implementation/HTNews.c:445 WWW/Library/Implementation/HTNews.c:446 WWW/Library/Implementation/HTNews.c:2340 WWW/Library/Implementation/HTNews.c:2344 WWW/Library/Implementation/HTNews.c:2388 WWW/Library/Implementation/HTNews.c:2402 WWW/Library/Implementation/HTNews.c:2478 WWW/Library/Implementation/HTNews.c:2493 WWW/Library/Implementation/HTNews.c:2501 WWW/Library/Implementation/HTNews.c:2507 WWW/Library/Implementation/HTNews.c:2522 WWW/Library/Implementation/HTNews.c:2530
-#: WWW/Library/Implementation/HTNews.c:2635 WWW/Library/Implementation/HTNews.c:2669 WWW/Library/Implementation/HTTP.c:177 WWW/Library/Implementation/HTTP.c:187 WWW/Library/Implementation/HTTP.c:652 WWW/Library/Implementation/HTTP.c:662 WWW/Library/Implementation/HTTP.c:1075 WWW/Library/Implementation/HTTP.c:1085
-msgid "Connection interrupted."
-msgstr "Connexion interrompue."
-
-#: WWW/Library/Implementation/HTFTP.c:708
+#: WWW/Library/Implementation/HTFTP.c:784
msgid "Unable to connect to FTP host."
msgstr "Impossible d'établir une connexion à l'hôte FTP"
-#: WWW/Library/Implementation/HTFTP.c:2302
-msgid "Receiving FTP directory."
-msgstr ""
+#: WWW/Library/Implementation/HTFTP.c:1054
+msgid "close master socket"
+msgstr "fermer le socket maitre"
-#: WWW/Library/Implementation/HTFTP.c:2425 WWW/Library/Implementation/HTGopher.c:273 WWW/Library/Implementation/HTGopher.c:274
-msgid "Transferred %d bytes"
-msgstr ""
+#: WWW/Library/Implementation/HTFTP.c:1116
+msgid "socket for master socket"
+msgstr "socket pour le socket maitre"
-#: WWW/Library/Implementation/HTFTP.c:2533 WWW/Library/Implementation/HTFTP.c:3233 WWW/Library/Implementation/HTFormat.c:547 WWW/Library/Implementation/HTFormat.c:561 WWW/Library/Implementation/HTFormat.c:562 WWW/Library/Implementation/HTFormat.c:563 WWW/Library/Implementation/HTFormat.c:565 WWW/Library/Implementation/HTFormat.c:576 WWW/Library/Implementation/HTFormat.c:578 WWW/Library/Implementation/HTFormat.c:580 WWW/Library/Implementation/HTFormat.c:666 WWW/Library/Implementation/HTFormat.c:680 WWW/Library/Implementation/HTFormat.c:682 WWW/Library/Implementation/HTFormat.c:684 WWW/Library/Implementation/HTFormat.c:733 WWW/Library/Implementation/HTFormat.c:747 WWW/Library/Implementation/HTFormat.c:749 WWW/Library/Implementation/HTFormat.c:751
-msgid "Data transfer interrupted."
-msgstr "Transfert de données interrompu"
+#.
+#. ** It's a symbolic link, does the user care about
+#. ** knowing if it is symbolic? I think so since
+#. ** it might be a directory.
+#.
+#: WWW/Library/Implementation/HTFTP.c:1630 WWW/Library/Implementation/HTFTP.c:2251
+msgid "Symbolic Link"
+msgstr "Lien symbolique"
-#: WWW/Library/Implementation/HTFTP.c:2650
-msgid "connect for data"
-msgstr ""
-
-#: WWW/Library/Implementation/HTFTP.c:3229
-msgid "Receiving FTP file."
-msgstr ""
+#: WWW/Library/Implementation/HTFTP.c:2612
+msgid "Receiving FTP directory."
+msgstr "Récepion du répertoire FTP."
-#: WWW/Library/Implementation/HTFWriter.c:241 WWW/Library/Implementation/HTFWriter.c:242
-msgid "Can't save data to file -- please run WWW locally"
-msgstr ""
+#: WWW/Library/Implementation/HTFTP.c:2755
+#, c-format
+msgid "Transferred %d bytes (%5d)"
+msgstr "%d bytes téléchargées (%5d)"
-#: WWW/Library/Implementation/HTFWriter.c:259 WWW/Library/Implementation/HTFWriter.c:260 src/HTFWriter.c:548 src/HTFWriter.c:564 src/HTFWriter.c:986 src/HTFWriter.c:1002 src/HTInit.c:537 src/HTInit.c:543 src/LYDownload.c:594 src/LYDownload.c:605 src/LYHistory.c:377 src/LYHistory.c:401 src/LYHistory.c:522 src/LYHistory.c:548 src/LYList.c:74 src/LYNews.c:71 src/LYNews.c:72 src/LYNews.c:83 src/LYNews.c:84 src/LYReadCFG.c:1249 src/LYShowInfo.c:45 src/LYShowInfo.c:90 src/LYShowInfo.c:106 src/LYUpload.c:220 src/LYUpload.c:221 src/LYUtils.c:5871
-msgid "Can't open temporary file!"
-msgstr "Impossible d'ouvrir le fichier temporaire!"
+#: WWW/Library/Implementation/HTFTP.c:3090
+msgid "connect for data"
+msgstr "connection pour données"
-#: WWW/Library/Implementation/HTFinger.c:265 WWW/Library/Implementation/HTFinger.c:266 WWW/Library/Implementation/HTFinger.c:295 WWW/Library/Implementation/HTFinger.c:296 WWW/Library/Implementation/HTFinger.c:303 WWW/Library/Implementation/HTFinger.c:304
-msgid "Could not load data."
-msgstr ""
+#: WWW/Library/Implementation/HTFTP.c:3690
+msgid "Receiving FTP file."
+msgstr "Reception du fichier FTP"
-#: WWW/Library/Implementation/HTFinger.c:272 WWW/Library/Implementation/HTFinger.c:273
+#: WWW/Library/Implementation/HTFinger.c:275
msgid "Could not set up finger connection."
-msgstr ""
+msgstr "Impossible d'établir une connection finger"
-#: WWW/Library/Implementation/HTFinger.c:317 WWW/Library/Implementation/HTFinger.c:318
+#: WWW/Library/Implementation/HTFinger.c:320
msgid "Could not load data (no sitename in finger URL)"
-msgstr ""
+msgstr "Impossible de lire les données (pas de nom de site pour l'url)"
-#: WWW/Library/Implementation/HTFinger.c:325 WWW/Library/Implementation/HTFinger.c:326
+#: WWW/Library/Implementation/HTFinger.c:328
msgid "Invalid port number - will only use port 79!"
-msgstr ""
+msgstr "Numéro de port invalde - seul le port 79 sera utilisé"
-#: WWW/Library/Implementation/HTFinger.c:397 WWW/Library/Implementation/HTFinger.c:398
+#: WWW/Library/Implementation/HTFinger.c:396
msgid "Could not access finger host."
-msgstr ""
+msgstr "Impossible d'atteindre l'hote"
-#: WWW/Library/Implementation/HTFinger.c:408 WWW/Library/Implementation/HTFinger.c:409
+#: WWW/Library/Implementation/HTFinger.c:407
msgid "No response from finger server."
-msgstr ""
-
-#: WWW/Library/Implementation/HTFormat.c:612 WWW/Library/Implementation/HTFormat.c:626 WWW/Library/Implementation/HTFormat.c:628 WWW/Library/Implementation/HTFormat.c:630
-msgid "Data transfer complete"
-msgstr "Transfert de données terminé"
-
-#: WWW/Library/Implementation/HTFormat.c:813 WWW/Library/Implementation/HTFormat.c:827 WWW/Library/Implementation/HTFormat.c:829 WWW/Library/Implementation/HTFormat.c:831 WWW/Library/Implementation/HTFormat.c:861 WWW/Library/Implementation/HTFormat.c:875 WWW/Library/Implementation/HTFormat.c:877 WWW/Library/Implementation/HTFormat.c:879 WWW/Library/Implementation/HTFormat.c:929 WWW/Library/Implementation/HTFormat.c:943 WWW/Library/Implementation/HTFormat.c:945 WWW/Library/Implementation/HTFormat.c:947
-msgid "Sorry, can't convert from %s to %s."
-msgstr "Désolé, impossible de convertir de %s à %s"
-
-#: WWW/Library/Implementation/HTGopher.c:237 WWW/Library/Implementation/HTGopher.c:238 WWW/Library/Implementation/HTGopher.c:249 WWW/Library/Implementation/HTGopher.c:250
-msgid "Gopher Menu"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:476 WWW/Library/Implementation/HTGopher.c:477
-msgid "CSO Search Results"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:486 WWW/Library/Implementation/HTGopher.c:487
-msgid " Search Results"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:619 WWW/Library/Implementation/HTGopher.c:620
-msgid "CSO index"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:634 WWW/Library/Implementation/HTGopher.c:635
-msgid ""
-"\n"
-"This is a searchable index of a CSO database.\n"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:636 WWW/Library/Implementation/HTGopher.c:637
-msgid ""
-"\n"
-"Press the 's' key and enter search keywords.\n"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:638 WWW/Library/Implementation/HTGopher.c:639
-msgid ""
-"\n"
-"The keywords that you enter will allow you to search on a"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:639 WWW/Library/Implementation/HTGopher.c:640
-msgid " person's name in the database.\n"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:664 WWW/Library/Implementation/HTGopher.c:665
-msgid "Gopher index"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:676 WWW/Library/Implementation/HTGopher.c:677
-msgid " index"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:679 WWW/Library/Implementation/HTGopher.c:680
-msgid ""
-"\n"
-"This is a searchable Gopher index.\n"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:681 WWW/Library/Implementation/HTGopher.c:682
-msgid ""
-"\n"
-"Please enter search keywords.\n"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:1192 WWW/Library/Implementation/HTGopher.c:1193
-msgid "Seek fail on %s\n"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:1532 WWW/Library/Implementation/HTGopher.c:1533
-msgid "No response from server!"
-msgstr ""
-
-#: WWW/Library/Implementation/HTGopher.c:1544 WWW/Library/Implementation/HTGopher.c:1545 WWW/Library/Implementation/HTTP.c:1667 WWW/Library/Implementation/HTTP.c:1677 src/LYCgi.c:315 src/LYCgi.c:316 src/LYCookie.c:2261 src/LYCookie.c:2278 src/LYCookie.c:2332 src/LYKeymap.c:701 src/LYMap.c:520 src/LYMap.c:522
-msgid "Sorry, no known way of converting %s to %s."
-msgstr "Désolé. Aucun moyen connu de convertir %s to %s. "
-
-#: WWW/Library/Implementation/HTMIME.c:2105 WWW/Library/Implementation/HTMIME.c:2112 WWW/Library/Implementation/HTMIME.c:2142
-msgid "%s: cannot open %s\n"
-msgstr "%s: Impossible d'ouvrir %s\n"
+msgstr "Pas de réponses du serveur finger"
-# msgid "Sorry, can't convert from %s to %s."
-# msgstr "Désolé, impossible de convertir de %s à %s."
-#: WWW/Library/Implementation/HTNews.c:350 WWW/Library/Implementation/HTNews.c:351 csuite/bin/lynx/WWW/Library/Implementation/HTFormat.c:1000
+#: WWW/Library/Implementation/HTNews.c:372
+#, c-format
msgid "Username for news host '%s':"
msgstr "Nom d'utilisateur pour l'hôte de forums '%s' :"
-#: WWW/Library/Implementation/HTNews.c:363 WWW/Library/Implementation/HTNews.c:364 WWW/Library/Implementation/HTNews.c:447 WWW/Library/Implementation/HTNews.c:448
-msgid "Connection closed ???"
-msgstr "Connexion terminée ???"
-
-#: WWW/Library/Implementation/HTNews.c:403 WWW/Library/Implementation/HTNews.c:404
+#: WWW/Library/Implementation/HTNews.c:425
msgid "Change username?"
msgstr "Modifier le nom d'utilisateur?"
-#: WWW/Library/Implementation/HTNews.c:434 WWW/Library/Implementation/HTNews.c:435
+#: WWW/Library/Implementation/HTNews.c:429
+msgid "Username:"
+msgstr "Nom d'utilisateur:"
+
+#: WWW/Library/Implementation/HTNews.c:453
+#, c-format
msgid "Password for news host '%s':"
msgstr "Mot de passe pour l'hôte de forums '%s' :"
-#: WWW/Library/Implementation/HTNews.c:517 WWW/Library/Implementation/HTNews.c:518
+#: WWW/Library/Implementation/HTNews.c:536
msgid "Change password?"
msgstr "Changer le mot de passe?"
-#: WWW/Library/Implementation/HTNews.c:826 WWW/Library/Implementation/HTNews.c:827
-msgid "Cannot open temporary file for news POST."
-msgstr "Impossible d'ouvrir un fichier temporaire pour les articles de forums."
-
-#: WWW/Library/Implementation/HTNews.c:1540 WWW/Library/Implementation/HTNews.c:1544
+#: WWW/Library/Implementation/HTNews.c:1691
+#, c-format
msgid "No matches for: %s"
-msgstr ""
+msgstr "Pas de correspondances pour: %s"
-#: WWW/Library/Implementation/HTNews.c:1591 WWW/Library/Implementation/HTNews.c:1595
+#: WWW/Library/Implementation/HTNews.c:1744
msgid ""
"\n"
"No articles in this group.\n"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:1604 WWW/Library/Implementation/HTNews.c:1608
+#: WWW/Library/Implementation/HTNews.c:1757
msgid ""
"\n"
"No articles in this range.\n"
msgstr ""
+"\n"
+"Pas d'articles dans cet intervale.\n"
-#: WWW/Library/Implementation/HTNews.c:1617 WWW/Library/Implementation/HTNews.c:1621
+#.
+#. ** Set window title.
+#.
+#: WWW/Library/Implementation/HTNews.c:1770
+#, c-format
msgid "%s, Articles %d-%d"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:1638 WWW/Library/Implementation/HTNews.c:1642
+#: WWW/Library/Implementation/HTNews.c:1792
msgid "Earlier articles"
-msgstr ""
+msgstr "Articles plus récents"
-#: WWW/Library/Implementation/HTNews.c:1651 WWW/Library/Implementation/HTNews.c:1655
+#: WWW/Library/Implementation/HTNews.c:1805
+#, c-format
msgid ""
"\n"
"There are about %d articles currently available in %s, IDs as follows:\n"
"\n"
msgstr ""
+"\n"
+"Il y a à jusqu'à %d articles accessibles dans %s, les ID suivent:\n"
+"\n"
-#: WWW/Library/Implementation/HTNews.c:1709 WWW/Library/Implementation/HTNews.c:1713
+#: WWW/Library/Implementation/HTNews.c:1865
msgid "All available articles in "
-msgstr ""
+msgstr "Tout les articles accessibles dans "
-#: WWW/Library/Implementation/HTNews.c:1919 WWW/Library/Implementation/HTNews.c:1923
+#: WWW/Library/Implementation/HTNews.c:2081
msgid "Later articles"
-msgstr ""
+msgstr "Articles anciens"
-#: WWW/Library/Implementation/HTNews.c:1943 WWW/Library/Implementation/HTNews.c:1947
+#: WWW/Library/Implementation/HTNews.c:2105
msgid "Post to "
-msgstr ""
-
-#: WWW/Library/Implementation/HTNews.c:2031 WWW/Library/Implementation/HTNews.c:2035
-msgid "This client does not contain support for posting to news with SSL."
-msgstr ""
+msgstr "Postez vers"
-#: WWW/Library/Implementation/HTNews.c:2044 WWW/Library/Implementation/HTNews.c:2048
-msgid "Invalid URL!"
-msgstr "URL invalide!"
-
-#: WWW/Library/Implementation/HTNews.c:2121 WWW/Library/Implementation/HTNews.c:2125
+#: WWW/Library/Implementation/HTNews.c:2323
msgid "This client does not contain support for SNEWS URLs."
-msgstr ""
+msgstr "Ce client ne supporte pas les Urls SNEWS"
-#: WWW/Library/Implementation/HTNews.c:2302 WWW/Library/Implementation/HTNews.c:2306
+#: WWW/Library/Implementation/HTNews.c:2531
msgid "No target for raw text!"
msgstr "Aucune cible pour le texte brut!"
-#: WWW/Library/Implementation/HTNews.c:2332 WWW/Library/Implementation/HTNews.c:2336
+#: WWW/Library/Implementation/HTNews.c:2561
msgid "Connecting to NewsHost ..."
-msgstr ""
+msgstr "Connection à l'hote de news ...."
-#: WWW/Library/Implementation/HTNews.c:2363 WWW/Library/Implementation/HTNews.c:2372
+#: WWW/Library/Implementation/HTNews.c:2612
+#, c-format
msgid "Could not access %s."
-msgstr ""
-
-#: WWW/Library/Implementation/HTNews.c:2407 WWW/Library/Implementation/HTNews.c:2426
-msgid "Can't read news info. News host %.20s responded: %.200s"
-msgstr ""
-
-#: WWW/Library/Implementation/HTNews.c:2417 WWW/Library/Implementation/HTNews.c:2436 WWW/Library/Implementation/HTNews.c:2438 WWW/Library/Implementation/HTNews.c:2462 WWW/Library/Implementation/HTNews.c:2590 WWW/Library/Implementation/HTNews.c:2619
-msgid "Cannot POST to this host."
-msgstr "Impossible d'envoyer des articles vers cet hôte."
-
-#: WWW/Library/Implementation/HTNews.c:2456 WWW/Library/Implementation/HTNews.c:2485
-msgid "Cancelled!"
-msgstr "Annulé!"
-
-#: WWW/Library/Implementation/HTNews.c:2603 WWW/Library/Implementation/HTNews.c:2637
+msgstr "Impossible d'accéder à %s."
+
+#: WWW/Library/Implementation/HTNews.c:2712
+#, c-format
+msgid "Can't read news info. News host %.20s responded: %.200s"
+msgstr "Impossible de lire les informations. Le serveur de news %.20s à répondut: %.200s"
+
+#: WWW/Library/Implementation/HTNews.c:2716
+#, c-format
+msgid "Can't read news info, empty response from host %s"
+msgstr "Impossible de lire les informations, réponse vide de l'hote %s"
+
+#.
+#. ** List available newsgroups. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2920
msgid "Reading list of available newsgroups."
msgstr "Lecture de la liste des forums disponibles."
-#: WWW/Library/Implementation/HTNews.c:2625 WWW/Library/Implementation/HTNews.c:2659
+#: WWW/Library/Implementation/HTNews.c:2942
msgid "Reading list of articles in newsgroup."
msgstr "Lecture de la liste des articles du forum."
-#: WWW/Library/Implementation/HTNews.c:2631 WWW/Library/Implementation/HTNews.c:2665
+#.
+#. ** Get an article from a news group. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2948
msgid "Reading news article."
msgstr "Lecture d'articles de forums."
-#: WWW/Library/Implementation/HTRules.c:334
-msgid "HTRule: Insufficient operands: %s\n"
-msgstr ""
-
-#: WWW/Library/Implementation/HTRules.c:372
-msgid "HTRule: Bad rule `%s'\n"
-msgstr ""
-
-#: WWW/Library/Implementation/HTStyle.c:145
-msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
-msgstr ""
+#: WWW/Library/Implementation/HTNews.c:2978
+msgid "Sorry, could not load requested news."
+msgstr "Désolé, impossible de charger la news demandée."
-#: WWW/Library/Implementation/HTStyle.c:153
-msgid ""
-"\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
-"\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
-msgstr ""
+#: WWW/Library/Implementation/HTTCP.c:1233
+msgid "Address has invalid port"
+msgstr "L'adresse a un numéro de port invalide"
-#: WWW/Library/Implementation/HTStyle.c:165
-msgid "\t\tTab kind=%d at %.0f\n"
-msgstr ""
-
-# %s will be a hostname
-#: WWW/Library/Implementation/HTTCP.c:747 WWW/Library/Implementation/HTTCP.c:748 WWW/Library/Implementation/HTTCP.c:786 WWW/Library/Implementation/HTTCP.c:846
-msgid "Looking up %s."
-msgstr "Recherche de %s"
+#: WWW/Library/Implementation/HTTCP.c:1336
+msgid "Address length looks invalid"
+msgstr "La longueur de l'adresse semble invalide"
-#: WWW/Library/Implementation/HTTCP.c:752 WWW/Library/Implementation/HTTCP.c:753 WWW/Library/Implementation/HTTCP.c:791 WWW/Library/Implementation/HTTCP.c:851
+#: WWW/Library/Implementation/HTTCP.c:1574 WWW/Library/Implementation/HTTCP.c:1592
+#, c-format
msgid "Unable to locate remote host %s."
msgstr "Impossible de localiser l'hôte distant %s"
+#. Not HTProgress, so warning won't be overwritten
+#. * immediately; but not HTAlert, because typically
+#. * there will be other alerts from the callers. - kw
+#.
+#: WWW/Library/Implementation/HTTCP.c:1589 WWW/Library/Implementation/HTTelnet.c:103
+#, c-format
+msgid "Invalid hostname %s"
+msgstr "Nom d'hote invalide: %s"
+
# First %s will be FTP, HTTP or other protocol and second %s will be hostname
-#: WWW/Library/Implementation/HTTCP.c:761 WWW/Library/Implementation/HTTCP.c:762 WWW/Library/Implementation/HTTCP.c:800 WWW/Library/Implementation/HTTCP.c:860
-msgid "Making %s connection to %s."
+#: WWW/Library/Implementation/HTTCP.c:1603
+#, c-format
+msgid "Making %s connection to %s"
msgstr "Connexion %s à %s "
-#: WWW/Library/Implementation/HTTCP.c:770 WWW/Library/Implementation/HTTCP.c:771 WWW/Library/Implementation/HTTCP.c:809 WWW/Library/Implementation/HTTCP.c:869
+#: WWW/Library/Implementation/HTTCP.c:1619
+#, c-format
+msgid "socket failed: family %d addr %s port %s."
+msgstr "La socket a échouée: famille %d addresse %s port %s."
+
+#: WWW/Library/Implementation/HTTCP.c:1628
msgid "socket failed."
-msgstr ""
+msgstr "la socket a échouée"
-#: WWW/Library/Implementation/HTTCP.c:790 WWW/Library/Implementation/HTTCP.c:791 WWW/Library/Implementation/HTTCP.c:829 WWW/Library/Implementation/HTTCP.c:889
+#: WWW/Library/Implementation/HTTCP.c:1648
msgid "Could not make connection non-blocking."
-msgstr ""
+msgstr "Impossible d'établir une connection non bloquante"
-#: WWW/Library/Implementation/HTTCP.c:844 WWW/Library/Implementation/HTTCP.c:845 WWW/Library/Implementation/HTTCP.c:883 WWW/Library/Implementation/HTTCP.c:943
-msgid "Connection failed for 180,000 tries."
-msgstr ""
+#: WWW/Library/Implementation/HTTCP.c:1717
+msgid "Connection failed (too many retries)."
+msgstr "Connection impossible (trop d'éssais successifs)"
-#: WWW/Library/Implementation/HTTCP.c:979 WWW/Library/Implementation/HTTCP.c:980 WWW/Library/Implementation/HTTCP.c:1018 WWW/Library/Implementation/HTTCP.c:1078
+#: WWW/Library/Implementation/HTTCP.c:1910
msgid "Could not restore socket to blocking."
-msgstr ""
+msgstr "Impossible de rétablir le blocage sur la socket"
-#: WWW/Library/Implementation/HTTCP.c:1022 WWW/Library/Implementation/HTTCP.c:1023 WWW/Library/Implementation/HTTCP.c:1061 WWW/Library/Implementation/HTTCP.c:1121
+#: WWW/Library/Implementation/HTTCP.c:1976
msgid "Socket read failed for 180,000 tries."
-msgstr ""
-
-# END of the K)eymap
-# Following are from the WWW library and are mostly progress messages
-#: WWW/Library/Implementation/HTTP.c:134 WWW/Library/Implementation/HTTP.c:139 WWW/Library/Implementation/HTTP.c:144 WWW/Library/Implementation/HTTP.c:149
-msgid "Bad request."
-msgstr "Demande erronée"
+msgstr "La lecture de la socket a échouée pour 180,000 essais"
-#: WWW/Library/Implementation/HTTP.c:167 WWW/Library/Implementation/HTTP.c:177
+#: WWW/Library/Implementation/HTTP.c:466
msgid "This client does not contain support for HTTPS URLs."
msgstr "Ce client n'est pas conçu pour traiter les URL HTTPS"
-#: WWW/Library/Implementation/HTTP.c:184 WWW/Library/Implementation/HTTP.c:194
+#: WWW/Library/Implementation/HTTP.c:491
msgid "Unable to connect to remote host."
msgstr "Impossible d'établir une connexion à l'hôte distant"
-#: WWW/Library/Implementation/HTTP.c:435 WWW/Library/Implementation/HTTP.c:445 WWW/Library/Implementation/HTTP.c:530 WWW/Library/Implementation/HTTP.c:540
-msgid "Proceed without a username and password?"
-msgstr "Procéder sans id-utilisateur et mot de passe?"
-
-#: WWW/Library/Implementation/HTTP.c:440 WWW/Library/Implementation/HTTP.c:450 WWW/Library/Implementation/HTTP.c:538 WWW/Library/Implementation/HTTP.c:548
-msgid "Can't proceed without a username and password."
-msgstr "Impossible de procéder sans id-utilisateur et mot de passe."
-
-#: WWW/Library/Implementation/HTTP.c:586 WWW/Library/Implementation/HTTP.c:596
+#: WWW/Library/Implementation/HTTP.c:1005
msgid "Sending HTTP request."
msgstr "Envoi de la requête HTTP"
-#: WWW/Library/Implementation/HTTP.c:603 WWW/Library/Implementation/HTTP.c:613 WWW/Library/Implementation/HTTP.c:671 WWW/Library/Implementation/HTTP.c:681 WWW/Library/Implementation/HTTP.c:747 WWW/Library/Implementation/HTTP.c:757 WWW/Library/Implementation/HTTP.c:1709 WWW/Library/Implementation/HTTP.c:1719
-msgid "Retrying as HTTP0 request."
-msgstr "Nouvel essai de requête HTTP0"
-
-#: WWW/Library/Implementation/HTTP.c:612 WWW/Library/Implementation/HTTP.c:622
+#: WWW/Library/Implementation/HTTP.c:1039
msgid "Unexpected network write error; connection aborted."
-msgstr ""
+msgstr "Erreur d'écriture réseau inattendue: connection annulée."
-#: WWW/Library/Implementation/HTTP.c:618 WWW/Library/Implementation/HTTP.c:628
+#: WWW/Library/Implementation/HTTP.c:1045
msgid "HTTP request sent; waiting for response."
msgstr "Demande acheminée au serveur. Veuillez attendre"
# END of Permit FORM
# More progress strings follow
-#: WWW/Library/Implementation/HTTP.c:676 WWW/Library/Implementation/HTTP.c:686
+#: WWW/Library/Implementation/HTTP.c:1109
msgid "Unexpected network read error; connection aborted."
msgstr "Erreur de lecture inattendue; connexion interrompue"
-#: WWW/Library/Implementation/HTTP.c:860 WWW/Library/Implementation/HTTP.c:870
+#.
+#. ** HTTP/1.1 Informational statuses.
+#. ** 100 Continue.
+#. ** 101 Switching Protocols.
+#. ** > 101 is unknown.
+#. ** We should never get these, and they have only
+#. ** the status line and possibly other headers,
+#. ** so we'll deal with them by showing the full
+#. ** header to the user as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1305
msgid "Got unexpected Informational Status."
-msgstr ""
-
-#: WWW/Library/Implementation/HTTP.c:894 WWW/Library/Implementation/HTTP.c:904 WWW/Library/Implementation/HTTP.c:937
+msgstr "Réception d'information de statut inattendue"
+
+#.
+#. * Reset Content. The server has fulfilled the
+#. * request but nothing is returned and we should
+#. * reset any form content. We'll instruct the
+#. * user to do that, and restore the current
+#. * document. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1340
msgid "Request fulfilled. Reset Content."
msgstr "Requête fructueuse. Restauration du contenu."
-#: WWW/Library/Implementation/HTTP.c:984 WWW/Library/Implementation/HTTP.c:994
+#. Not Modified
+#.
+#. * We didn't send an "If-Modified-Since" header,
+#. * so this status is inappropriate. We'll deal
+#. * with it by showing the full header to the user
+#. * as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1459
msgid "Got unexpected 304 Not Modified status."
-msgstr ""
+msgstr "Réception inattendue d'un état non modifié 304"
-#: WWW/Library/Implementation/HTTP.c:1053 WWW/Library/Implementation/HTTP.c:1063
+#: WWW/Library/Implementation/HTTP.c:1526
msgid "Redirection of POST content requires user approval."
-msgstr ""
+msgstr "La redirection d'un contenu post nécessite l'accord de l'utilisateur"
-#: WWW/Library/Implementation/HTTP.c:1089 WWW/Library/Implementation/HTTP.c:1099 csuite/bin/lynx/WWW/Library/Implementation/HTTP.c:976
-msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
-msgstr "Contenu POST; réacheminement permanent traité comme temporaire.\n"
+#: WWW/Library/Implementation/HTTP.c:1541
+msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
+msgstr "Contnu POST. La redirection permanente est traitée comme temporaire.\n"
-#: WWW/Library/Implementation/HTTP.c:1313 WWW/Library/Implementation/HTTP.c:1323
-msgid "Got redirection with a bad Location header."
-msgstr "Réacheminement assorti d'un en-tête d'emplacement incorrect."
-
-#: WWW/Library/Implementation/HTTP.c:1412 WWW/Library/Implementation/HTTP.c:1422
-msgid "Got redirection with no Location header."
-msgstr ""
-
-# msgid "Connection interrupted."
-# msgstr "Connexion interrompue"
-#: WWW/Library/Implementation/HTTP.c:1467 WWW/Library/Implementation/HTTP.c:1477
+#: WWW/Library/Implementation/HTTP.c:1586
msgid "Retrying with access authorization information."
msgstr "Nouvel essai avec information d'autorisation d'accès"
-#: WWW/Library/Implementation/HTTP.c:1472 WWW/Library/Implementation/HTTP.c:1482
+#: WWW/Library/Implementation/HTTP.c:1598
msgid "Show the 401 message body?"
-msgstr ""
-
-#: WWW/Library/Implementation/HTTP.c:1477 WWW/Library/Implementation/HTTP.c:1487
-msgid "Can't retry with authorization! Contact the server's WebMaster."
-msgstr ""
+msgstr "Visualiser le corps du message 401 ?"
-#: WWW/Library/Implementation/HTTP.c:1514 WWW/Library/Implementation/HTTP.c:1524
-msgid "Retrying with proxy authorization information."
-msgstr "Nouvelle tentative avec info d'autorisation du mandataire"
-
-#: WWW/Library/Implementation/HTTP.c:1519 WWW/Library/Implementation/HTTP.c:1529
+#: WWW/Library/Implementation/HTTP.c:1643
msgid "Show the 407 message body?"
msgstr "Afficher le corps du message 407?"
-#: WWW/Library/Implementation/HTTP.c:1533 WWW/Library/Implementation/HTTP.c:1543
-msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
-msgstr "Impossible sans autorisation du mandataire; contacter le webmestre."
-
-#: WWW/Library/Implementation/HTTP.c:1625 WWW/Library/Implementation/HTTP.c:1635
+#.
+#. ** Bad or unknown server_status number.
+#. ** Take a chance and hope there is
+#. ** something to display. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1748
msgid "Unknown status reply from server!"
-msgstr ""
+msgstr "Réponse d'état inconnue recue du serveur"
-#: WWW/Library/Implementation/HTVMSUtils.c:914 WWW/Library/Implementation/HTVMSUtils.c:915
-msgid "Building directory listing..."
-msgstr "Création des listes de répertoire..."
+#: WWW/Library/Implementation/HTTelnet.c:101
+#, c-format
+msgid "remote %s session:"
+msgstr "session distante %s"
+
+#: WWW/Library/Implementation/HTWAIS.c:161
+msgid "Could not connect to WAIS server."
+msgstr "Connection au serveur WAIS impossible"
-#: WWW/Library/Implementation/HTWAIS.c:198
+#: WWW/Library/Implementation/HTWAIS.c:170
+msgid "Could not open WAIS connection for reading."
+msgstr "Impossible d'ouvrir une connection WAIS en lecture"
+
+#: WWW/Library/Implementation/HTWAIS.c:194
msgid "Diagnostic code is "
-msgstr ""
+msgstr "Le code de diagnostique est "
-#: WWW/Library/Implementation/HTWAIS.c:470
+#: WWW/Library/Implementation/HTWAIS.c:463
msgid "Index "
-msgstr ""
+msgstr "Index "
-#: WWW/Library/Implementation/HTWAIS.c:474
+#: WWW/Library/Implementation/HTWAIS.c:467
+#, c-format
msgid " contains the following %d item%s relevant to \""
-msgstr ""
+msgstr " contient les %d éléments suivants %s relatifs à \""
-#: WWW/Library/Implementation/HTWAIS.c:482
+#: WWW/Library/Implementation/HTWAIS.c:475
msgid "The first figure after each entry is its relative score, "
-msgstr ""
+msgstr "La premiere illustration après chaque entrée est sont score relatif"
-#: WWW/Library/Implementation/HTWAIS.c:483
+#: WWW/Library/Implementation/HTWAIS.c:476
msgid "the second is the number of lines in the item."
-msgstr ""
+msgstr "Le second est le nombre de ligne dans l'élément."
-#: WWW/Library/Implementation/HTWAIS.c:524
+#: WWW/Library/Implementation/HTWAIS.c:517
msgid " (bad file name)"
-msgstr ""
+msgstr "(mauvais nom de fichier)"
-#: WWW/Library/Implementation/HTWAIS.c:546
+#: WWW/Library/Implementation/HTWAIS.c:542
msgid "(bad doc id)"
-msgstr ""
+msgstr "(mauvais id de doc)"
-#: WWW/Library/Implementation/HTWAIS.c:562
+#: WWW/Library/Implementation/HTWAIS.c:558
msgid "(Short Header record, can't display)"
-msgstr ""
+msgstr "(Court enregistrement de Heade, impossible d'afficher)"
-#: WWW/Library/Implementation/HTWAIS.c:569
+#: WWW/Library/Implementation/HTWAIS.c:565
msgid ""
"\n"
"Long Header record, can't display\n"
msgstr ""
+"\n"
+"Long enregistrement de Header, impossible d'afficher\n"
-#: WWW/Library/Implementation/HTWAIS.c:576
+#: WWW/Library/Implementation/HTWAIS.c:572
msgid ""
"\n"
"Text record\n"
msgstr ""
+"\n"
+"Enregistrement de texte\n"
-#: WWW/Library/Implementation/HTWAIS.c:585
+#: WWW/Library/Implementation/HTWAIS.c:581
msgid ""
"\n"
"Headline record, can't display\n"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:593
+#: WWW/Library/Implementation/HTWAIS.c:589
msgid ""
"\n"
"Code record, can't display\n"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:763 WWW/Library/Implementation/HTWAIS.c:829
-msgid "Enter WAIS query: "
-msgstr ""
+#: WWW/Library/Implementation/HTWAIS.c:691
+msgid "Syntax error in WAIS URL"
+msgstr "Erreur de syntaxe dans l'url WAIS"
-#: WWW/Library/Implementation/HTWAIS.c:769
+#: WWW/Library/Implementation/HTWAIS.c:761
msgid " (WAIS Index)"
-msgstr ""
+msgstr " (Index WAIS) "
-#: WWW/Library/Implementation/HTWAIS.c:776
+#: WWW/Library/Implementation/HTWAIS.c:768
msgid "WAIS Index: "
-msgstr ""
+msgstr "Index WAIS: "
-#: WWW/Library/Implementation/HTWAIS.c:782
+#: WWW/Library/Implementation/HTWAIS.c:774
msgid "This is a link for searching the "
-msgstr ""
+msgstr "Ceci est un lien pour chercher le "
-#: WWW/Library/Implementation/HTWAIS.c:786
+#: WWW/Library/Implementation/HTWAIS.c:778
msgid " WAIS Index.\n"
-msgstr ""
+msgstr "Index WAIS.\n"
-#: WWW/Library/Implementation/HTWAIS.c:812
+#: WWW/Library/Implementation/HTWAIS.c:805
msgid ""
"\n"
"Enter the 's'earch command and then specify search words.\n"
msgstr ""
+"\n"
+"Entrez la commande de recherche (s) puis les mots cléfs.\n"
-#: WWW/Library/Implementation/HTWAIS.c:833
+#: WWW/Library/Implementation/HTWAIS.c:827
msgid " (in "
-msgstr ""
+msgstr " (dans "
-#: WWW/Library/Implementation/HTWAIS.c:842
+#: WWW/Library/Implementation/HTWAIS.c:836
msgid "WAIS Search of \""
-msgstr ""
+msgstr "Recherche WAIS de \""
-#: WWW/Library/Implementation/HTWAIS.c:846
+#: WWW/Library/Implementation/HTWAIS.c:840
msgid "\" in: "
-msgstr ""
-
-#: WWW/Library/Implementation/HTWAIS.c:1027
+msgstr "\" dans: "
+
+#: WWW/Library/Implementation/HTWAIS.c:855
+msgid "HTWAIS: Request too large."
+msgstr "HTWAIS: requête trop grande."
+
+#: WWW/Library/Implementation/HTWAIS.c:864
+msgid "Searching WAIS database..."
+msgstr "Recherche dans la base de donnée WAIS..."
+
+#: WWW/Library/Implementation/HTWAIS.c:874
+msgid "Search interrupted."
+msgstr "Recherche interrompue."
+
+#: WWW/Library/Implementation/HTWAIS.c:924
+msgid "Can't convert format of WAIS document"
+msgstr "Impossible de convertir le format du document WAIS"
+
+#: WWW/Library/Implementation/HTWAIS.c:968
+msgid "HTWAIS: Request too long."
+msgstr "HTWAIS: requête trop longue."
+
+#.
+#. ** Actually do the transaction given by request_message.
+#.
+#: WWW/Library/Implementation/HTWAIS.c:982
+msgid "Fetching WAIS document..."
+msgstr "Rapatriement du document WAIS...."
+
+#. display_search_response(target, retrieval_response,
+#. wais_database, keywords);
+#: WWW/Library/Implementation/HTWAIS.c:1021
msgid "No text was returned!\n"
-msgstr ""
+msgstr "Aucun texte n'a été retourné!\n"
-#: WWW/Library/Implementation/HTWSRC.c:286
+#: WWW/Library/Implementation/HTWSRC.c:287
msgid " NOT GIVEN in source file; "
-msgstr ""
+msgstr "PAS DONNE dans le fichier source;"
-#: WWW/Library/Implementation/HTWSRC.c:327
+#: WWW/Library/Implementation/HTWSRC.c:311
+msgid " WAIS source file"
+msgstr "fichier source WAIS"
+
+#: WWW/Library/Implementation/HTWSRC.c:318
+msgid " description"
+msgstr " description"
+
+#: WWW/Library/Implementation/HTWSRC.c:328
msgid "Access links"
-msgstr ""
+msgstr "Acces aux liens"
-#: WWW/Library/Implementation/HTWSRC.c:344
+#: WWW/Library/Implementation/HTWSRC.c:345
msgid "Direct access"
-msgstr ""
+msgstr "Acces direct"
-#: WWW/Library/Implementation/HTWSRC.c:347
+#. * Proxy will be used if defined, so let user know that - FM *
+#: WWW/Library/Implementation/HTWSRC.c:348
msgid " (or via proxy server, if defined)"
-msgstr ""
+msgstr " (ou via un serveur de proxy, si défini)"
-#: WWW/Library/Implementation/HTWSRC.c:361
+#: WWW/Library/Implementation/HTWSRC.c:363
msgid "Maintainer"
-msgstr ""
+msgstr "Mainteneur"
-#: WWW/Library/Implementation/HTWSRC.c:369
+#: WWW/Library/Implementation/HTWSRC.c:371
msgid "Host"
-msgstr ""
+msgstr "Hote"
# src/GridText.c
-#: src/GridText.c:335
+#: src/GridText.c:607
msgid "Memory exhausted, display interrupted!"
msgstr "Mémoire insuffisante; interruption de l'affichage."
-#: src/GridText.c:340
+#: src/GridText.c:612
msgid "Memory exhausted, will interrupt transfer!"
-msgstr ""
+msgstr "Mémoire saturée, interruption du transfert !"
-#: src/GridText.c:1511
-msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
-msgstr "Nombre maximum dépassé. Utilisez le défilement demi-page ou double lignes"
-
-# msgid "\n\nError drawing page!\nBad HText structure!\n"
-# msgstr "\n\nImpossible de générer la page.\nStructure HText erronée.\n"
-# msgid "\n Document is empty"
-# msgstr "\n Le document est vide"
-#: src/GridText.c:2110
+#: src/GridText.c:3395
msgid " *** MEMORY EXHAUSTED ***"
msgstr " *** MÉMOIRE INSUFFISANTE ***"
-#: src/GridText.c:3484 src/GridText.c:3485 src/GridText.c:3488 src/GridText.c:3491 src/GridText.c:3492 src/GridText.c:3495 src/LYList.c:247
+#: src/GridText.c:5733 src/GridText.c:5740 src/LYList.c:258
msgid "unknown field or link"
msgstr "champ ou lien inconnu"
-#: src/GridText.c:3500 src/GridText.c:3501 src/GridText.c:3504
+#: src/GridText.c:5749
msgid "text entry field"
msgstr "champ de saisie de texte"
-#: src/GridText.c:3503 src/GridText.c:3504 src/GridText.c:3507
+#: src/GridText.c:5752
msgid "password entry field"
msgstr "champ d'entrée du mot de passe"
-#: src/GridText.c:3506 src/GridText.c:3507 src/GridText.c:3510
+#: src/GridText.c:5755
msgid "checkbox"
msgstr "case d'option"
-#: src/GridText.c:3509 src/GridText.c:3510 src/GridText.c:3513
+#: src/GridText.c:5758
msgid "radio button"
msgstr "bouton d'option"
-#: src/GridText.c:3512 src/GridText.c:3513 src/GridText.c:3516
+#: src/GridText.c:5761
msgid "submit button"
msgstr "bouton Envoyer"
-#: src/GridText.c:3515 src/GridText.c:3516 src/GridText.c:3519
+#: src/GridText.c:5764
msgid "reset button"
msgstr "bouton Effacer"
-#: src/GridText.c:3518 src/GridText.c:3519 src/GridText.c:3522
+#: src/GridText.c:5767
msgid "popup menu"
msgstr "menu éclair"
-#: src/GridText.c:3521 src/GridText.c:3522 src/GridText.c:3525
+#: src/GridText.c:5770
msgid "hidden form field"
msgstr "champ de formulaire caché"
-#: src/GridText.c:3524 src/GridText.c:3525 src/GridText.c:3528
+#: src/GridText.c:5773
msgid "text entry area"
msgstr "zone d'entrée de texte"
-#: src/GridText.c:3527 src/GridText.c:3528 src/GridText.c:3531
+#: src/GridText.c:5776
msgid "range entry field"
msgstr "champ de saisie (range)"
-#: src/GridText.c:3530 src/GridText.c:3531 src/GridText.c:3534
+#: src/GridText.c:5779
msgid "file entry field"
msgstr "champ de saisie (file)"
-#: src/GridText.c:3533 src/GridText.c:3534 src/GridText.c:3537
+#: src/GridText.c:5782
msgid "text-submit field"
msgstr "champ d'envoi (texte)"
-#: src/GridText.c:3536 src/GridText.c:3537 src/GridText.c:3540
+#: src/GridText.c:5785
msgid "image-submit button"
msgstr "bouton d'envoi (image)"
-#: src/GridText.c:3539 src/GridText.c:3540 src/GridText.c:3543
+#: src/GridText.c:5788
msgid "keygen field"
msgstr "champ «keygen»"
-#: src/GridText.c:3542 src/GridText.c:3543 src/GridText.c:3546
+#: src/GridText.c:5791
msgid "unknown form field"
msgstr "champ de formulaire inconnu"
-#: src/GridText.c:4570 src/GridText.c:4571 src/GridText.c:4601 src/GridText.c:4602 src/GridText.c:4632 src/GridText.c:4633 src/LYForms.c:1293 src/LYForms.c:1347 src/LYOptions.c:2880 src/LYOptions.c:2884 src/LYOptions.c:2940 src/LYSearch.c:270 src/LYSearch.c:322
-msgid "Edit the current query: "
-msgstr "Éditer la recherche en cours :"
-
-#: src/GridText.c:4604 src/GridText.c:4605 src/GridText.c:4635 src/GridText.c:4636 src/LYForms.c:1297 src/LYForms.c:1352 src/LYOptions.c:2884 src/LYOptions.c:2888 src/LYOptions.c:2939 src/LYOptions.c:2943 src/LYOptions.c:2944 src/LYOptions.c:2999 src/LYSearch.c:273 src/LYSearch.c:325
-msgid "Edit the previous query: "
-msgstr "Éditer la recherche précédente :"
-
-#: src/GridText.c:4606 src/GridText.c:4607 src/GridText.c:4637 src/GridText.c:4638 src/LYForms.c:1299 src/LYForms.c:1354 src/LYOptions.c:2886 src/LYOptions.c:2890 src/LYOptions.c:2941 src/LYOptions.c:2945 src/LYOptions.c:2946 src/LYOptions.c:3001 src/LYSearch.c:275 src/LYSearch.c:327
-msgid "Edit a previous query: "
-msgstr "Éditer une recherche précédente :"
-
-#: src/GridText.c:4646 src/GridText.c:4647 src/GridText.c:4655 src/GridText.c:4656 src/LYCookie.c:2146 src/LYCookie.c:2163 src/LYCookie.c:2217 src/LYForms.c:505 src/LYForms.c:1242 src/LYForms.c:1253 src/LYForms.c:1306 src/LYForms.c:1362 src/LYGetFile.c:943 src/LYGetFile.c:967 src/LYHistory.c:492 src/LYHistory.c:517 src/LYJump.c:229 src/LYJump.c:245 src/LYJump.c:302 src/LYJump.c:342 src/LYMail.c:1611 src/LYMail.c:1613 src/LYMainLoop.c:1826 src/LYMainLoop.c:1854 src/LYMainLoop.c:1966 src/LYMainLoop.c:1990 src/LYMainLoop.c:1994 src/LYMainLoop.c:2018 src/LYMainLoop.c:2659 src/LYMainLoop.c:2683 src/LYMainLoop.c:2876 src/LYMainLoop.c:2900 src/LYMainLoop.c:3032 src/LYMainLoop.c:3056 src/LYMainLoop.c:3226 src/LYMainLoop.c:3250 src/LYMainLoop.c:3310 src/LYMainLoop.c:3334 src/LYMainLoop.c:3351 src/LYMainLoop.c:3375 src/LYMainLoop.c:3378 src/LYMainLoop.c:3402 src/LYMainLoop.c:3420 src/LYMainLoop.c:3444 src/LYMainLoop.c:3464 src/LYMainLoop.c:3488 src/LYMainLoop.c:4928 src/LYMainLoop.c:4959
-#: src/LYMainLoop.c:4960 src/LYMainLoop.c:5211 src/LYMainLoop.c:5236 src/LYMainLoop.c:5237 src/LYMainLoop.c:5248 src/LYMainLoop.c:5267 src/LYMainLoop.c:5273 src/LYMainLoop.c:5274 src/LYMainLoop.c:5292 src/LYMainLoop.c:5293 src/LYMainLoop.c:5438 src/LYMainLoop.c:5463 src/LYMainLoop.c:5464 src/LYOptions.c:414 src/LYOptions.c:454 src/LYOptions.c:475 src/LYOptions.c:515 src/LYOptions.c:630 src/LYOptions.c:691 src/LYOptions.c:718 src/LYOptions.c:779 src/LYOptions.c:926 src/LYOptions.c:927 src/LYOptions.c:962 src/LYOptions.c:963 src/LYOptions.c:986 src/LYOptions.c:1022 src/LYOptions.c:1452 src/LYOptions.c:1453 src/LYOptions.c:1512 src/LYOptions.c:1728 src/LYOptions.c:1729 src/LYOptions.c:1788 src/LYOptions.c:2071 src/LYOptions.c:2072 src/LYOptions.c:2131 src/LYOptions.c:2829 src/LYOptions.c:2833 src/LYOptions.c:2840 src/LYOptions.c:2844 src/LYOptions.c:2889 src/LYOptions.c:2893 src/LYOptions.c:2897 src/LYOptions.c:2900 src/LYOptions.c:2949 src/LYOptions.c:2953 src/LYOptions.c:3009
-#: src/LYOptions.c:3068 src/LYOptions.c:3072 src/LYOptions.c:3128 src/LYSearch.c:219 src/LYSearch.c:233 src/LYSearch.c:284 src/LYSearch.c:336
-msgid "Cancelled!!!"
-msgstr "Annulé!"
-
-#: src/GridText.c:4664 src/GridText.c:4665
-msgid "Use Control-R to resubmit the current query."
-msgstr "Faites Ctrl-R pour lancer de nouveau la recherche en cours"
-
-#: src/GridText.c:4682 src/GridText.c:4683 src/LYGetFile.c:624 src/LYGetFile.c:646
-msgid "Getting %s"
-msgstr "Accès à %s"
-
-# msgid "Server asked for redirection of POST content to"
-# msgstr "Le serveur requiert le réacheminement du contenu POST vers"
-# msgid "P)roceed, use G)ET or C)ancel "
-# msgstr "P) Continuer, utiliser G)ET ou C) Annuler "
-# msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
-# msgstr "Réacheminement du contenu POST. P) Continuer, voir U)RL, G)ET ou C) Annuler"
-# msgid "Location: "
-# msgstr "Emplacement : "
-#: src/GridText.c:5290 src/GridText.c:5291 src/GridText.c:5292 src/LYForms.c:1408 src/LYForms.c:1446 src/LYOptions.c:2999 src/LYOptions.c:3003 src/LYOptions.c:3041 src/LYOptions.c:3045 src/LYOptions.c:3059 src/LYOptions.c:3101
-msgid "'%s' not found!"
-msgstr "'%s' non trouvé!"
-
-#: src/GridText.c:6971 src/GridText.c:6975 src/GridText.c:6977 src/LYMail.c:86 src/LYMail.c:255
-msgid "Malformed mailto form submission! Cancelled!"
-msgstr "Envoi de formulaire mailto incorrect. Demande annulée!"
-
-#: src/GridText.c:7250 src/GridText.c:7253 src/GridText.c:7373 src/GridText.c:7376 src/GridText.c:7475 src/GridText.c:7478
-msgid "Warning: Cannot transcode form data to charset %s!"
-msgstr "Transcodage impossible des données au jeu de caractères %s!"
-
-#: src/GridText.c:7874 src/GridText.c:7877
-msgid "Submitting form..."
-msgstr "Envoi du formulaire... "
-
-#: src/GridText.c:7926 src/GridText.c:7929
-msgid "Resetting form..."
-msgstr "Réinitialisation du formulaire..."
-
-#: src/HTAlert.c:120
-msgid "Read %ld of %ld %s of data."
-msgstr ""
-
-#: src/HTAlert.c:121
-msgid "bytes"
-msgstr ""
-
-#: src/HTAlert.c:122
-msgid "Read %ld %s of data."
-msgstr ""
-
-#: src/HTAlert.c:124
-msgid " %ld kb/sec."
-msgstr ""
-
-#: src/HTAlert.c:125
-msgid "KB"
-msgstr ""
-
-#: src/HTAlert.c:127 src/HTAlert.c:142
-msgid " (Press 'z' to abort)"
-msgstr ""
-
-#: src/HTAlert.c:132
-msgid "Read %ld of %ld %s of data"
-msgstr ""
+# WWW/Libary/Implementation/HTFile.c
+#. We can't open the file, what do we do?
+#: src/GridText.c:10348
+#, fuzzy
+msgid "Can't open file for uploading"
+msgstr "Impossible d'ouvrir le fichier pour décompression."
-#: src/HTAlert.c:134
-msgid "Read %ld %s of data"
+#. We got an error reading the file, what do we do?
+#: src/GridText.c:10359
+msgid "Short read from file, problem?"
msgstr ""
-#: src/HTAlert.c:137
-msgid ", %ld %s/sec."
-msgstr ""
+#: src/GridText.c:10721
+#, c-format
+msgid "Submitting %s"
+msgstr "Envoi de %s"
-#: src/HTAlert.c:160 src/HTAlert.c:175
-msgid "%s (y/n) "
+#. ugliness has happened; inform user and do the best we can
+#: src/GridText.c:11887
+msgid "Hang Detect: TextAnchor struct corrupted - suggest aborting!"
msgstr ""
-#: src/HTAlert.c:218 src/HTAlert.c:233
-msgid "Password: "
-msgstr "Mot de passe : "
-
-#: src/HTAlert.c:222 src/HTAlert.c:237
-msgid "lynx: Password required!!!"
-msgstr "lynx : mot de passe requis!"
+#. don't show previous state
+#: src/GridText.c:12092
+msgid "Wrap lines to fit displayed area?"
+msgstr "Raccourcir les lignes pour correspondre à l'aire d'affichage ?"
-#: src/HTAlert.c:322 src/HTAlert.c:337
-msgid "lynx: Username and Password required!!!"
-msgstr "lynx : nom d'utilisateur et mot de passe requis!"
+#: src/GridText.c:12144
+msgid "Very long lines have been wrapped!"
+msgstr "Les tres longues lignes ont étées tassées"
-#: src/HTAlert.c:350 src/HTAlert.c:365
-msgid "Username: "
-msgstr "Nom d'utilisateur : "
+#: src/GridText.c:12591
+msgid "Very long lines have been truncated!"
+msgstr "Les tres longues lignes ont étées tronquées"
-#: src/HTAlert.c:486 src/HTAlert.c:501 src/LYCookie.c:2136 src/LYCookie.c:2153 src/LYCookie.c:2207
-msgid "'A'lways allowing from domain '%s'."
-msgstr "Toujours accepter les cookies du domaine '%s'."
-
-#: src/HTAlert.c:495 src/HTAlert.c:510
-msgid "Rejecting this cookie."
-msgstr "Rejet du cookie"
-
-#: src/HTAlert.c:510 src/HTAlert.c:525
-msgid "Allowing this cookie."
-msgstr "Acceptation du cookie"
-
-# msgid "Value accepted!"
-# msgstr "Valeur acceptée!"
-# msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
-# msgstr "Valeur acceptée! NOTA : Lynx est configuré pour XWINDOWS."
-# msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
-# msgstr "Valeur acceptée! NOTA : Lynx n'est pas configuré pour XWINDOWS."
-# msgid "You are not allowed to change which editor to use!"
-# msgstr "Vous ne pouvez pas choisir un autre éditeur!"
-# msgid "Failed to set DISPLAY variable!"
-# msgstr "Impossible de régler la variable AFFICHAGE."
-# msgid "Failed to clear DISPLAY variable!"
-# msgstr "Impossible d'effacer la variable AFFICHAGE."
-# msgid "You are not allowed to change the bookmark file!"
-# msgstr "Changement du fichier de signets non autorisé!"
-# msgid "Access to dot files is disabled!"
-# msgstr "L'accès aux fichiers cachés est désactivé!"
-# msgid "WARNING: Misrepresentation of the User-Agent may be a copyright violation!"
-# msgstr "Substituer l'agent-utilisateur peut être une violation du droit d'auteur"
-# msgid "You are not allowed to change this setting."
-# msgstr "Vous n'êtes pas autorisé à changer ce paramètre."
-# msgid "Saving Options..."
-# msgstr "Enregistrement des options..."
-# msgid "Options saved!"
-# msgstr "Options enregistrées!"
-# msgid "Unable to save Options!"
-# msgstr "Impossible d'enregistrer les options!"
-# msgid " 'r' to return to Lynx "
-# msgstr " Entrez « r » pour retourner à Lynx."
-# msgid " '>' to save, or 'r' to return to Lynx "
-# msgstr " Entrez « > » pour enreg. ou « r » pour retourner à Lynx."
-# msgid "Hit any key to change value; RETURN to accept: "
-# msgstr "N'importe quelle touche pour changer la valeur; <Entr> pour accepter"
-# msgid "Error uncompressing temporary file!"
-# msgstr "Erreur de décompression du fichier temporaire!"
-# msgid "Unsupported URL scheme!"
-# msgstr "Schème de URL non reconnu!"
-# msgid "Unsupported data: URL! Use SHOWINFO, for now."
-# msgstr "Données non reconnues; consultez la page d'informations."
-# msgid "Server asked for redirection of POST content to"
-# msgstr "Le serveur requiert le réacheminement du contenu POST vers"
-# NdT= I need an explicit context for variable (an actual example of message)
-#: src/HTAlert.c:574 src/HTAlert.c:589
-msgid "Server asked for %d redirection of POST content to"
-msgstr "Le serveur a demandé %d réacheminement du contenu POST vers"
-
-# msgid "P)roceed, use G)ET or C)ancel "
-# msgstr "P) Continuer, utiliser G)ET ou C) Annuler "
-# msgid "P)roceed, use G)ET or C)ancel "
-# msgstr "P) Continuer, utiliser G)ET ou C) Annuler "
-#: src/HTAlert.c:585 src/HTAlert.c:600
-msgid "P)roceed, or C)ancel "
-msgstr "P) Continuer ou C) Annuler "
-
-# msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
-# msgstr "Réacheminement du contenu POST. P)Continuer, voir U)RL, G)ET ou C)Annuler"
-# msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
-# msgstr "Réacheminement du contenu POST. P) Continuer, U)RL, G)ET ou C) Annuler"
-#: src/HTAlert.c:593 src/HTAlert.c:608
-msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
-msgstr "Réacheminement du contenu POST. P) Continuer, voir U)RL ou C) Annuler"
-
-#: src/HTFWriter.c:201 src/HTFWriter.c:207
-msgid "Error uncompressing temporary file!"
-msgstr "Erreur de décompression du fichier temporaire!"
-
-#: src/HTFWriter.c:505 src/HTFWriter.c:521 src/LYGetFile.c:409 src/LYGetFile.c:422
-msgid "Execution is not enabled for this file. See the Options menu (use %s)."
-msgstr "Exécution non activée pour ce fichier. Voir les paramètres (use %s). "
-
-#: src/HTFWriter.c:632 src/HTFWriter.c:648
-msgid "This file cannot be displayed on this terminal."
-msgstr "Ce fichier ne peut être affiché sur votre terminal."
-
-#: src/HTFWriter.c:643 src/HTFWriter.c:645 src/HTFWriter.c:659 src/HTFWriter.c:661
-msgid "%s D)ownload, or C)ancel"
-msgstr "%s D) Décharger ou C) Annuler"
-
-#: src/HTFWriter.c:647 src/HTFWriter.c:663
-msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
-msgstr "Ne peut être affiché sur votre terminal: D) Décharger ou C) Annuler "
-
-# msgid "%s D)ownload, or C)ancel"
-# msgstr "%s D) Décharger ou C) Annuler"
-#: src/HTFWriter.c:668 src/HTFWriter.c:684
-msgid "Cancelling file."
-msgstr "Annulation!"
-
-#: src/HTFWriter.c:701 src/HTFWriter.c:717
-msgid "Can't open output file! Cancelling!"
-msgstr "Impossible d'ouvrir le fichier de sortie! Demande annulée."
-
-#: src/HTFWriter.c:760 src/HTFWriter.c:776
-msgid "Retrieving file. - PLEASE WAIT -"
-msgstr "Récupération du fichier. - VEUILLEZ ATTENDRE -"
+#: src/HTAlert.c:155 src/LYShowInfo.c:318
+msgid "bytes"
+msgstr "bytes"
-#: src/HTFWriter.c:795 src/HTFWriter.c:811
-msgid "<!-- Date: %s -->\n"
-msgstr ""
+#: src/HTAlert.c:156
+msgid "KB"
+msgstr "KB"
-#: src/HTInit.c:237 src/HTInit.c:243 src/HTInit.c:282 src/HTInit.c:285 src/HTInit.c:288 src/HTInit.c:291 src/HTInit.c:299 src/HTInit.c:305 src/HTInit.c:346 src/HTInit.c:352 src/HTInit.c:541 src/HTInit.c:547
-msgid "Out of memory"
-msgstr ""
+#: src/HTAlert.c:255
+#, c-format
+msgid "Read %s of %s of data"
+msgstr "Lecture de %s de %s octets de données"
-#: src/HTML.c:745 src/HTML.c:746
-msgid "HREF in BASE tag is not an absolute URL."
-msgstr "L'attribut HREF de l'élément BASE n'est pas un URL absolu"
+# WWW/Library/Implementation/HTFormat.c
+#: src/HTAlert.c:257
+#, c-format
+msgid "Read %s of data"
+msgstr "Lecture de %s kilooctets de données"
+
+#: src/HTAlert.c:262
+#, c-format
+msgid ", %s/sec"
+msgstr ", %s/sec"
+
+#: src/HTAlert.c:269
+#, c-format
+msgid " (stalled for %ld sec)"
+msgstr " (bloqué pour %ld sec)"
+
+#: src/HTAlert.c:271
+#, c-format
+msgid ", ETA %ld sec"
+msgstr ", temps éstimé: %ld sec"
+
+#: src/HTAlert.c:277
+msgid " (Press 'z' to abort)"
+msgstr " (Appuyer sur 'z' pour annuler.)"
-#: src/HTML.c:4078 src/HTML.c:4080 src/HTML.c:4081 src/HTML.c:4324 src/HTML.c:4326 src/HTML.c:4327 src/HTML.c:4343 src/HTML.c:4345 src/HTML.c:4346 src/HTML.c:4703 src/HTML.c:4705 src/HTML.c:4706 src/HTML.c:4793 src/HTML.c:4795 src/HTML.c:4796 src/HTML.c:4826 src/HTML.c:4828 src/HTML.c:4829 src/HTML.c:5415 src/HTML.c:5417 src/HTML.c:5418 src/HTML.c:5440 src/HTML.c:5442 src/HTML.c:5443 src/HTML.c:5542 src/HTML.c:5544 src/HTML.c:5545 src/HTML.c:5904 src/HTML.c:5906 src/HTML.c:5907 src/HTML.c:5976 src/HTML.c:5978 src/HTML.c:5979 src/HTML.c:6174 src/HTML.c:6176 src/HTML.c:6177 src/HTML.c:6195 src/HTML.c:6197 src/HTML.c:6198 src/HTML.c:6252 src/HTML.c:6254 src/HTML.c:6255 src/HTML.c:6431 src/HTML.c:6433 src/HTML.c:6434 src/HTML.c:6455 src/HTML.c:6457 src/HTML.c:6458 src/HTML.c:6752 src/HTML.c:6754 src/HTML.c:6755 src/HTML.c:6775 src/HTML.c:6777 src/HTML.c:6778 src/HTML.c:6821 src/HTML.c:6823 src/HTML.c:6824 src/HTML.c:6841 src/HTML.c:6843 src/HTML.c:6844 src/LYCharUtils.c:3194
-#: src/LYCharUtils.c:3198 src/LYCharUtils.c:3216 src/LYCharUtils.c:3220 src/LYCharUtils.c:3238 src/LYCharUtils.c:3260 src/LYCharUtils.c:3300 src/LYCharUtils.c:3304 src/LYCharUtils.c:3344
-msgid "** Bad HTML!! Use -trace to diagnose. **"
-msgstr "** Erreur de code HTML! Utiliser -trace pour le diagnostic. **"
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# The French translations for Lynx were created by the
+# Chebucto Project.
+# Contributors include:
+# Chris Maxwell (CM)
+# David Potter
+# David Trueman (NdT)
+# * * * * * * * * * *
+# J.E. Spath <jspath @ bcpl . net> wedged this into Lynx
+# started: Wed Sep 2 20:22:45 EDT 1998
+#
+# , fuzzy
+# MUST GO AND FIND NdT= to address problems.
+#. Meta-note: don't move the following note from its place right
+#. in front of the first gettext(). As it is now, it should
+#. automatically appear in generated lynx.pot files. - kw
+#.
+#. NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+#. * will take the first byte of the translation as a positive response
+#. * to Yes/No questions. If you provide a translation for "no", lynx
+#. * will take the first byte of the translation as a negative response
+#. * to Yes/No questions. For both, lynx will also try to show the
+#. * first byte in the prompt as a character, instead of (y) or (n),
+#. * respectively. This will not work right for multibyte charsets!
+#. * Don't translate "yes" and "no" for CJK character sets (or translate
+#. * them to "yes" and "no"). For a translation using UTF-8, don't
+#. * translate if the translation would begin with anything but a 7-bit
+#. * (US_ASCII) character. That also means do not translate if the
+#. * translation would begin with anything but a 7-bit character, if
+#. * you use a single-byte character encoding (a charset like ISO-8859-n)
+#. * but anticipate that the message catalog may be used re-encoded in
+#. * UTF-8 form.
+#. * For translations using other character sets, you may also wish to
+#. * leave "yes" and "no" untranslated, if using (y) and (n) is the
+#. * preferred behavior.
+#. * Lynx will also accept y Y n N as responses unless there is a conflict
+#. * with the first letter of the "yes" or "no" translation.
+#.
+#: src/HTAlert.c:334
+msgid "yes"
+msgstr "oui"
-#: src/HTML.c:5224 src/HTML.c:5226 src/HTML.c:5227
-msgid "Maximum nesting of HTML elements exceeded."
-msgstr "Imbrication maximale d'éléments HTML dépassée."
+#: src/HTAlert.c:335
+msgid "no"
+msgstr "non"
-# -------------------- 98-Jan-10
-# There are character strings, in preferred charsets, the names have to
-# get fully translated, some are.
-# ----
-# HTML.c
-#: src/HTML.c:5485 src/HTML.c:5487 src/HTML.c:5488
-msgid "<H2><EM>Description:</EM> "
-msgstr "<H2><EM>Description :</EM> "
+#: src/HTML.c:6342
+msgid "Description:"
+msgstr "Description :"
-#: src/HTML.c:5489 src/HTML.c:5491 src/HTML.c:5492
+#: src/HTML.c:6347
msgid "(none)"
msgstr "(aucun(e))"
-#: src/HTML.c:5493 src/HTML.c:5495 src/HTML.c:5496
-msgid "<BR><EM>&nbsp;&nbsp;&nbsp;Filepath:</EM> "
-msgstr "<BR><EM>&nbsp;&nbsp;&nbsp;Chemin de fichier :</EM> "
+#: src/HTML.c:6351
+msgid "Filepath:"
+msgstr "Chemin de fichier :"
-#: src/HTML.c:5497 src/HTML.c:5499 src/HTML.c:5500
+#: src/HTML.c:6356
msgid "(unknown)"
msgstr "(inconnu)"
-# src/HTML.c
-#: src/HTML.c:6800 src/HTML.c:6802 src/HTML.c:6803
-msgid "Document has only hidden links. Use the 'l'ist command."
+#: src/HTML.c:7804
+msgid "Document has only hidden links. Use the 'l'ist command."
msgstr "Le document ne contient que des liens cachés. Utiliser L) Références."
-#: src/LYBookmark.c:61 src/LYBookmark.c:66 src/LYBookmark.c:703 src/LYBookmark.c:726
-msgid "Bookmark file is not defined. Use %s to see options."
-msgstr "Le fichier de signets n'est pas défini. Utilisez %s pour voir les options."
-
-#: src/LYBookmark.c:138 src/LYBookmark.c:144
-msgid "Unable to open tempfile for X Mosaic hotlist conversion."
-msgstr "Impossible d'ouvrir le fichier temp. pour convertir les signets X Mosaic"
-
-#: src/LYBookmark.c:206 src/LYBookmark.c:212
-msgid "Malformed address."
-msgstr "Adresse incorrecte."
+#: src/HTML.c:8328
+msgid "Source cache error - disk full?"
+msgstr "Erreur de cache - disque pleins ?"
-#: src/LYBookmark.c:252 src/LYBookmark.c:258 src/LYMainLoop.c:4685 src/LYMainLoop.c:4716 src/LYMainLoop.c:4717
-msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
-msgstr "Copier le L)ien dans ce fichier de signets ou C) Annuler? (l,c) : "
+#: src/HTML.c:8341
+msgid "Source cache error - not enough memory!"
+msgstr "Erreur de cache - pas assez de mémoire"
-#: src/LYBookmark.c:306 src/LYBookmark.c:314
-msgid "ERROR - unable to open bookmark file."
-msgstr "ERREUR - impossible d'ouvrir le fichier de signets."
+#: src/LYBookmark.c:166
+msgid ""
+" This file is an HTML representation of the X Mosaic hotlist file.\n"
+" Outdated or invalid links may be removed by using the\n"
+" remove bookmark command, it is usually the 'R' key but may have\n"
+" been remapped by you or your system administrator."
+msgstr ""
+" Ce fichier est une représentation HTML du fichier de signets de X Mosaic.\n"
+" Les liens désuets ou non valides peuvent être supprimés au moyen de la\n"
+" commande de suppression de signet, habituellement la touche 'R' mais les\n"
+" touches peuvent avoir été reconfigurées par vous ou l'administrateur système."
-#: src/LYBookmark.c:326 src/LYBookmark.c:334
+#: src/LYBookmark.c:382
msgid ""
-" You can delete links using the remove bookmark command. It is usually\n"
-" the 'R' key but may have been remapped by you or your system\n"
-" administrator.<br>\n"
-" This file also may be edited with a standard text editor to delete\n"
-" outdated or invalid links, or to change their order.\n"
-"\n"
-"<!--\n"
-"Note: if you edit this file manually\n"
-" you should not change the format within the lines\n"
-" or add other HTML markup.\n"
-" Make sure any bookmark link saved as a single line\n"
-"-->\n"
-"\n"
-" <p>\n"
+" You can delete links by the 'R' key<br>\n"
"<ol>\n"
msgstr ""
+" Vous pouvez effacer des lines par la touche 'R'<br>\n"
+"<ol>\n"
-# Needs retranslation from the next text.
-#: src/LYBookmark.c:350
+#: src/LYBookmark.c:385
msgid ""
" You can delete links using the remove bookmark command. It is usually\n"
" the 'R' key but may have been remapped by you or your system\n"
-" administrator.<br>\n"
-" This file also may be edited with a standard text editor to delete\n"
-" outdated or invalid links, or to change their order, but you should\n"
-" not change the format within the lines or add other HTML markup.\n"
-"\n"
-" <p>\n"
-"<ol>\n"
+" administrator."
msgstr ""
" Vous pouvez supprimer des liens avec la commande de suppression de signet,\n"
" habituellement la touche 'R' mais les touches peuvent avoir été\n"
-" reconfigurées par vous ou par votre administrateur système.<br>\n"
+" reconfigurées par vous ou par votre administrateur système."
+
+#: src/LYBookmark.c:389
+msgid ""
+" This file also may be edited with a standard text editor to delete\n"
+" outdated or invalid links, or to change their order."
+msgstr ""
" Le fichier peut aussi être édité au moyen d'un éditeur de texte standard.\n"
" Vous pouvez supprimer les liens désuets ou non valides ou en modifier\n"
-" l'ordre, mais vous ne devez pas changer le format à l'intérieur des lignes\n"
-" ni ajouter d'autres balises HTML.\n"
-"\n"
-" <p>\n"
-"<ol>\n"
+" l'ordre."
-#: src/LYBookmark.c:389 src/LYBookmark.c:399
-msgid "Done!"
-msgstr "Terminé!"
-
-#: src/LYBookmark.c:428 src/LYBookmark.c:435 src/LYBookmark.c:438 src/LYBookmark.c:445
-msgid "Unable to open scratch file for deletion of link."
-msgstr "Impossible d'ouvrir le fichier de travail pour supprimer un lien"
-
-#: src/LYBookmark.c:448 src/LYBookmark.c:458
-msgid "Unable to reopen temporary file for deletion of link."
-msgstr "Impossible de réouvrir le fichier temporaire pour supprimer un lien"
-
-#: src/LYBookmark.c:480 src/LYBookmark.c:490
-msgid "Link is not by itself all on one line in bookmark file."
-msgstr "Le lien ne tient pas sur une seule ligne dans le fichier de signets"
-
-#: src/LYBookmark.c:519 src/LYBookmark.c:529
-msgid "Unable to copy temporary file for deletion of link."
+#: src/LYBookmark.c:392
+msgid ""
+"Note: if you edit this file manually\n"
+" you should not change the format within the lines\n"
+" or add other HTML markup.\n"
+" Make sure any bookmark link is saved as a single line."
msgstr ""
+" Mais vous ne devez pas changer le format à l'intérieur des lignes\n"
+" ni ajouter d'autres balises HTML."
-#: src/LYBookmark.c:549 src/LYBookmark.c:572
-msgid "Error renaming scratch file."
-msgstr "Erreur de renommage du fichier de travail."
-
-#: src/LYBookmark.c:551 src/LYBookmark.c:574
-msgid "Error renaming temporary file."
-msgstr "Erreur de renommage du fichier temporaire."
-
-#: src/LYBookmark.c:559 src/LYBookmark.c:582
-msgid "Bookmark deletion failed."
-msgstr "Impossible de supprimer le signet."
-
-#: src/LYBookmark.c:589 src/LYBookmark.c:612
-msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
-msgstr "Choisir classeur de signets, '=' pour le menu ou ^G pour annuler : "
-
-#: src/LYBookmark.c:696 src/LYBookmark.c:719
-msgid "Screen too small! (8x35 min)"
-msgstr "L'écran est trop petit! (8x35 min)"
-
-# msgid "Location: "
-# msgstr "Emplacement : "
-# msgid "'%s' not found!"
-# msgstr "'%s' non trouvé!"
-# msgid "Default Bookmark File"
-# msgstr "fichier de signets par défaut"
-# msgid "Screen too small! (8x35 min)"
-# msgstr "L'écran est trop petit! (8x35 min) "
-# msgid "Select destination or ^G to Cancel: "
-# msgstr "Choisissez une destination ou entrez ^G pour annuler : "
-# msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
-# msgstr "Choisissez classeur de signets, '=' pour le menu, ^G pour annuler : "
-# msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
-# msgstr "Copier le L)ien dans ce fichier de signets ou C) Annuler? (l,c) : "
-# msgid "Multiple bookmark support is not available."
-# msgstr "Le soutien des fichiers multiples n'est pas disponible."
-#: src/LYBookmark.c:731 src/LYBookmark.c:754
-msgid " Select Bookmark (screen %d of %d)"
-msgstr "Sélection de signets (écran %d de %d)"
-
-#: src/LYBookmark.c:734 src/LYBookmark.c:757
-msgid " Select Bookmark"
-msgstr "Sélection de signets"
-
-#: src/LYBookmark.c:764 src/LYBookmark.c:787 src/LYOptions.c:1843 src/LYOptions.c:1844 src/LYOptions.c:1903
-msgid "previous"
-msgstr "écran précédent"
-
-#: src/LYBookmark.c:770 src/LYBookmark.c:793 src/LYOptions.c:1849 src/LYOptions.c:1850 src/LYOptions.c:1909
-msgid "next screen"
-msgstr "écran suivant"
-
-#: src/LYBookmark.c:773 src/LYBookmark.c:796
-msgid "Select destination or ^G to Cancel: "
-msgstr "Choisissez une destination ou entrez ^G pour annuler : "
+#: src/LYBookmark.c:683
+#, c-format
+msgid "File may be recoverable from %s during this session"
+msgstr "Le fichier pourrait etre récupérable de %s lors de cette session"
-#: src/LYCgi.c:141
-msgid "Bad request!"
-msgstr "Demande erronée!"
-
-# src/LYCgi.c
-#: src/LYCgi.c:206
+#.
+#. * Neither the path as given nor any components examined by
+#. * backing up were stat()able. - kw
+#.
+#: src/LYCgi.c:232
msgid "Unable to access cgi script"
msgstr "Impossible d'accéder au script cgi"
-#: src/LYCgi.c:256 src/LYCgi.c:257
-msgid "cgi support has been disabled by system administrator."
-msgstr "l'administrateur système a désactivé le soutien cgi."
+#: src/LYCgi.c:651 src/LYCgi.c:654
+msgid "Good Advice"
+msgstr "Bons conseils"
-#: src/LYCgi.c:271 src/LYCgi.c:272 src/LYGetFile.c:347 src/LYGetFile.c:352
-msgid "Execution via bookmarks is disabled."
-msgstr "L'exécution à partir des signets est désactivée."
+#: src/LYCgi.c:657
+msgid "An excellent http server for VMS is available via"
+msgstr "Un excellent serveur http pour VMS est disponible via"
-#: src/LYCgi.c:321 src/LYCgi.c:322 src/LYCgi.c:328 src/LYCgi.c:329
-msgid "Unable to set up connection."
-msgstr "Impossible de finaliser la connexion."
+#: src/LYCgi.c:664
+msgid "this link"
+msgstr "ce lien"
-#: src/LYCgi.c:565 src/LYCgi.c:566
-msgid "Unable to make connection"
-msgstr "Impossible d'établir la connexion."
+#: src/LYCgi.c:668
+msgid "It provides state of the art CGI script support.\n"
+msgstr "Il offre un soutien <b>hors pair</b> pour le script CGI.\n"
-#: src/LYCgi.c:621 src/LYCgi.c:622
-msgid "Lynxcgi capabilities are not compiled into this version."
-msgstr "Fonctionnalités Lynxcgi non compilées dans cette version"
+#: src/LYClean.c:108
+msgid "Exiting via interrupt:"
+msgstr "Sortie par interruption"
-#: src/LYCharUtils.c:2892 src/LYCharUtils.c:2896 src/LYCharUtils.c:2936
-msgid "Refresh URL is not absolute."
-msgstr "Il ne s'agit pas d'un URL absolu"
+#: src/LYCookie.c:2659
+msgid "(from a previous session)"
+msgstr "(a partir d'une session précédente)"
-#: src/LYCharUtils.c:3503 src/LYCharUtils.c:3507 src/LYCharUtils.c:3547
-msgid "Bad partial reference! Stripping lead dots."
-msgstr "Référence partielle eronnée! Suppression des points (../)."
+#: src/LYCookie.c:2719
+msgid "Maximum Gobble Date:"
+msgstr "Date d'expiration maximale :"
-#: src/LYClean.c:60 src/LYClean.c:61
-msgid "Really exit from Lynx? [Y] "
-msgstr "Vous voulez vraiment quitter Lynx? [O] "
+#: src/LYCookie.c:2764
+msgid "Internal"
+msgstr "Interne"
-#: src/LYClean.c:62 src/LYClean.c:63 src/LYMainLoop.c:2188 src/LYMainLoop.c:2205 src/LYMainLoop.c:2206 src/LYMainLoop.c:2212
-msgid "Are you sure you want to quit? [N] "
-msgstr "Désirez-vous vraiment quitter? [N]"
+#: src/LYCookie.c:2765
+msgid "cookie_domain_flag_set error, aborting program"
+msgstr "erreur de mise en place de flag de domaine de cookie, fermeture du programme"
-#: src/LYClean.c:108 src/LYClean.c:109
-msgid ""
-"\n"
-"\n"
-"Exiting via interrupt: %d\n"
-"\n"
-msgstr ""
+#: src/LYCurses.c:936
+msgid "Terminal initialisation failed - unknown terminal type?"
+msgstr "Défaut d'initialisation au terminal; type de terminal inconnu?"
-#: src/LYCookie.c:353 src/LYCookie.c:356 src/LYCookie.c:359 src/LYCookie.c:363
-msgid "Accept invalid cookie domain=%s for '%s'?"
-msgstr ""
+#: src/LYCurses.c:1328
+msgid "Terminal ="
+msgstr "Terminal ="
-#: src/LYCookie.c:2023 src/LYCookie.c:2040 src/LYCookie.c:2094
-msgid "The Cookie Jar is empty."
-msgstr "Le fichier des «cookies» est vide"
+#: src/LYCurses.c:1332
+msgid "You must use a vt100, 200, etc. terminal with this program."
+msgstr "Il faut utiliser un terminal vt100, 200, etc. avec ce programme."
-#: src/LYCookie.c:2081 src/LYCookie.c:2098 src/LYCookie.c:2152
-msgid "Delete this cookie?"
-msgstr "Supprimer ce cookie?"
-
-#: src/LYCookie.c:2089 src/LYCookie.c:2106 src/LYCookie.c:2160 src/LYCookie.c:2194 src/LYCookie.c:2211 src/LYCookie.c:2265
-msgid "Delete this empty domain?"
-msgstr "Supprimer ce domaine vide?"
-
-#: src/LYCookie.c:2101 src/LYCookie.c:2118 src/LYCookie.c:2160 src/LYCookie.c:2172 src/LYCookie.c:2177 src/LYCookie.c:2231
-msgid "The domain has been eaten!"
-msgstr "Le domaine a été supprimé!"
-
-#: src/LYCookie.c:2103 src/LYCookie.c:2120 src/LYCookie.c:2174
-msgid "The cookie has been eaten!"
-msgstr "Le cookie a été supprimé!"
-
-#: src/LYCookie.c:2117 src/LYCookie.c:2134 src/LYCookie.c:2188
-msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
-msgstr "D)Supprimer domaine; régler permission: T)oujours C)onfirmer J)amais A)nnul? "
-
-# NdT: Does P)rompt trigger a confirmation screen?
-# NOTE: Option letters come from the capitalised letter in the option,
-# so if introducing a new option make sure it has a translation.
-#: src/LYCookie.c:2119 src/LYCookie.c:2136 src/LYCookie.c:2190
-msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
-msgstr "D)Supprimer cookies; régler permission: T)oujours C)onfirmer J)amais A)nnul? "
-
-#: src/LYCookie.c:2181 src/LYCookie.c:2198 src/LYCookie.c:2252
-msgid "All cookies in the domain have been eaten!"
-msgstr "Tous les cookies du domaine ont été supprimés!"
-
-# NdT: What does happen exatly when you chose P)rompt?
-#: src/LYCookie.c:2211 src/LYCookie.c:2228 src/LYCookie.c:2282
-msgid "'P'rompting to allow from domain '%s'."
-msgstr "Confirmer avant d'accepter les cookies du domaine '%s'."
-
-#: src/LYCookie.c:2221 src/LYCookie.c:2238 src/LYCookie.c:2292
-msgid "ne'V'er allowing from domain '%s'."
-msgstr "Ne jamais accepter les cookies du domaine '%s'."
-
-#: src/LYCookie.c:2224 src/LYCookie.c:2241 src/LYCookie.c:2295
-msgid "Delete all cookies in this domain?"
-msgstr "Supprimer tous les cookies de ce domaine?"
-
-#: src/LYCookie.c:2244 src/LYCookie.c:2261 src/LYCookie.c:2315
-msgid "All of the cookies in the jar have been eaten!"
-msgstr "Tous les cookies ont été supprimés!"
-
-#: src/LYCookie.c:2274 src/LYCookie.c:2291 src/LYCookie.c:2345 src/LYKeymap.c:711
-msgid "<h1>%s (%s), help on <a href=\"%s%s\">%s</a></h1>\n"
-msgstr ""
-
-# --------
-# Missed strings 97-12-07
-# LYMessages_en.h (LYCookie.c)
-# NdT: What do they mean by "gobble up an entire domain"?
-#: src/LYCookie.c:2279 src/LYCookie.c:2296 src/LYCookie.c:2350
-msgid "Activate links to gobble up cookies or entire domains,"
-msgstr "Activer les liens pour supprimer les cookies ou les domaines,"
-
-#: src/LYCookie.c:2281 src/LYCookie.c:2298 src/LYCookie.c:2352
-msgid "or to change a domain's 'allow' setting."
-msgstr "ou pour changer les paramètres de permission pour un domaine."
-
-#: src/LYCookie.c:2302 src/LYCookie.c:2319 src/LYCookie.c:2373
-msgid "(Cookies always allowed.)"
-msgstr "(Cookies toujours acceptés)"
-
-#: src/LYCookie.c:2305 src/LYCookie.c:2322 src/LYCookie.c:2376
-msgid "(Cookies never allowed.)"
-msgstr "(Cookies jamais acceptés)"
-
-#: src/LYCookie.c:2308 src/LYCookie.c:2325 src/LYCookie.c:2379
-msgid "(Cookies allowed via prompt.)"
-msgstr "(Cookies acceptés à l'invite)"
-
-#: src/LYCookie.c:2311 src/LYCookie.c:2328 src/LYCookie.c:2382
-msgid "(Persistent Cookies.)"
-msgstr ""
-
-#: src/LYCookie.c:2335 src/LYCookie.c:2352 src/LYCookie.c:2406
-msgid "(No name.)"
-msgstr "(Aucun nom)"
+#: src/LYCurses.c:1384
+msgid "Your Terminal type is unknown!"
+msgstr "Votre type de terminal n'est pas reconnu."
-#: src/LYCookie.c:2341 src/LYCookie.c:2358 src/LYCookie.c:2412
-msgid "(No value.)"
-msgstr "(Aucune valeur)"
+#: src/LYCurses.c:1385
+msgid "Enter a terminal type:"
+msgstr "Entrez un type de terminal"
-# src/LYCookie.c
-#: src/LYCookie.c:2404 src/LYCookie.c:2421 src/LYCookie.c:2475
-msgid "<DD><EM>Maximum Gobble Date:</EM> %s%s"
-msgstr "<DD><EM>Date d'expiration maximale :</EM> %s%s"
+#: src/LYCurses.c:1398
+msgid "TERMINAL TYPE IS SET TO"
+msgstr "TYPE DE TERMINAL RÉGLÉ À"
-#: src/LYCookie.c:2408 src/LYCookie.c:2425 src/LYCookie.c:2479
-msgid "(End of session.)"
-msgstr "(Fin de session)"
-
-#: src/LYCurses.c:1299 src/LYCurses.c:1303 src/LYCurses.c:1313
+#: src/LYCurses.c:1749
+#, c-format
msgid ""
"\n"
"A Fatal error has occurred in %s Ver. %s\n"
msgstr ""
-
-#: src/LYCurses.c:1313 src/LYCurses.c:1317 src/LYCurses.c:1318 src/LYCurses.c:1322 src/LYCurses.c:1327 src/LYCurses.c:1332 src/LYMain.c:3228 src/LYMain.c:3255 src/LYMain.c:3277
-msgid "Memory exhausted! Program aborted!"
-msgstr ""
-
-# msgid "Enter a filename: "
-# msgstr "Entrez un nom de fichier :"
-#: src/LYDownload.c:163 src/LYDownload.c:167 src/LYDownload.c:196 src/LYDownload.c:200 src/LYDownload.c:435 src/LYDownload.c:447 src/LYDownload.c:468 src/LYDownload.c:480 src/LYPrint.c:296 src/LYPrint.c:301 src/LYPrint.c:329 src/LYPrint.c:334 src/LYPrint.c:1051 src/LYPrint.c:1071 src/LYPrint.c:1085 src/LYPrint.c:1105
-msgid "Edit the previous filename: "
-msgstr "Éditez le nom de fichier précédent : "
-
-#: src/LYDownload.c:165 src/LYDownload.c:169 src/LYDownload.c:198 src/LYDownload.c:202 src/LYDownload.c:437 src/LYDownload.c:449 src/LYDownload.c:470 src/LYDownload.c:482 src/LYPrint.c:298 src/LYPrint.c:303 src/LYPrint.c:331 src/LYPrint.c:336 src/LYPrint.c:1053 src/LYPrint.c:1073 src/LYPrint.c:1087 src/LYPrint.c:1107
-msgid "Edit a previous filename: "
-msgstr "Éditez un nom de fichier précédent : "
-
-#: src/LYDownload.c:212 src/LYDownload.c:216 src/LYDownload.c:484 src/LYDownload.c:496 src/LYPrint.c:346 src/LYPrint.c:351 src/LYPrint.c:1102 src/LYPrint.c:1122 src/LYUpload.c:119 src/LYUpload.c:120
-msgid "File name may not begin with a dot."
-msgstr "Le nom de fichier ne peut commencer avec un point."
-
-#: src/LYDownload.c:213 src/LYDownload.c:217 src/LYDownload.c:302 src/LYDownload.c:318 src/LYDownload.c:319 src/LYDownload.c:335 src/LYDownload.c:485 src/LYDownload.c:497 src/LYPrint.c:347 src/LYPrint.c:352 src/LYPrint.c:436 src/LYPrint.c:445 src/LYPrint.c:457 src/LYPrint.c:466 src/LYPrint.c:1103 src/LYPrint.c:1123 src/LYUpload.c:120 src/LYUpload.c:121
-msgid "Enter a new filename: "
-msgstr "Entrez un nouveau nom de fichier : "
-
-#: src/LYDownload.c:326 src/LYDownload.c:342
-msgid "Saving..."
-msgstr "Enregistrement..."
-
-#: src/LYDownload.c:528 src/LYDownload.c:540
-msgid "ERROR! - download command is misconfigured."
-msgstr "ERREUR - la commande de déchargement est mal configurée."
-
-#: src/LYDownload.c:558 src/LYDownload.c:570
-msgid "Unable to download file."
-msgstr "Impossible de télédécharger le fichier."
-
-#: src/LYDownload.c:563 src/LYDownload.c:575
-msgid "Cancelling!"
-msgstr "Annulation!"
-
-#: src/LYDownload.c:608
-msgid " <em>Downloaded link:</em> %s\n"
-msgstr ""
-
-#: src/LYDownload.c:612
-msgid " <em>Suggested file name:</em> %s\n"
-msgstr ""
-
-#: src/LYDownload.c:616 src/LYPrint.c:1317
-msgid ""
-"\n"
-"%s options:\n"
-msgstr ""
-
-#: src/LYDownload.c:617
-msgid "Download"
-msgstr ""
-
-#: src/LYDownload.c:617
-msgid "Standard download"
-msgstr ""
-
-#: src/LYDownload.c:620
-msgid ""
-" <em>You download the link:</em> %s\n"
-" <em>Suggested file name:</em> %s%s\n"
-msgstr ""
-
-#: src/LYDownload.c:624
-msgid ""
-"\n"
-"Standard download options:\n"
-msgstr ""
-
-#: src/LYDownload.c:627 src/LYDownload.c:633
-msgid " <a href=\"LYNXDOWNLOAD://Method=-1/File=%s/SugFile=%s%s\">Save to disk</a>\n"
-msgstr " <a href=\"LYNXDOWNLOAD://Method=-1/File=%s/SugFile=%s%s\">Enregistrer</a>\n"
-
-#: src/LYDownload.c:631 src/LYDownload.c:640 src/LYPrint.c:1293 src/LYPrint.c:1297 src/LYPrint.c:1325
-msgid " <em>Save to disk disabled.</em>\n"
-msgstr " <em>Enregistrement sur disque d<E9>sactiv<E9><em>\n"
-
-#: src/LYDownload.c:635 src/LYDownload.c:642 src/LYPrint.c:1308 src/LYPrint.c:1312 src/LYPrint.c:1341
-msgid ""
-"\n"
-"Local additions:\n"
-msgstr ""
-
-#: src/LYDownload.c:641 src/LYDownload.c:648
-msgid " <a href=\"LYNXDOWNLOAD://Method=%d/File=%s/SugFile=%s\">"
-msgstr ""
-
-#: src/LYDownload.c:657
-msgid ""
-" &lt;NONE&gt;\n"
"\n"
-" <!-- You may define an unlimited number of download methods.\n"
-" Please refer to the <a href=\"%s\">lynx.cfg</a> file, sections 'DOWNLOAD' and 'INCLUDE'. --> \n"
-msgstr ""
-
-#: src/LYEdit.c:40 src/LYEdit.c:44
-msgid "Lynx cannot currently (E)dit remote WWW files"
-msgstr "Lynx ne peut (E) Éditer de fichiers W3 distants."
-
-#: src/LYEdit.c:71 src/LYEdit.c:83
-msgid "Could not access file."
-msgstr "Impossible d'accéder au fichier."
-
-#: src/LYEdit.c:86 src/LYEdit.c:106
-msgid "You are not authorized to edit this file."
-msgstr "Vous n'êtes pas autorisé à éditer ce fichier."
-
-#: src/LYExtern.c:46 src/LYExtern.c:49
-msgid "External support is currently disabled."
-msgstr "Le soutien externe est présentement inactivé."
-
-#: src/LYForms.c:75
-msgid "Bad HTML!! Unable to create popup window!"
-msgstr "Erreur de code HTML! Impossible de créer de fenêtre flash."
-
-#: src/LYForms.c:141
-msgid "One radio button must be checked at all times!"
-msgstr "Un seul bouton d'option peut être coché à la fois."
-
-#: src/LYForms.c:202 src/LYMainLoop.c:2753 src/LYMainLoop.c:2777
-msgid "** Bad HTML!! No form action defined. **"
-msgstr "** Erreur de code HTML! Aucune action définie pour le formulaire. **"
-
-#: src/LYForms.c:206 src/LYMainLoop.c:2765 src/LYMainLoop.c:2789
-msgid "Mail disallowed! Cannot submit."
-msgstr "La fonction de courrier est invalidée. Impossible de soumettre l'envoi!"
-
-#: src/LYForms.c:303
-msgid "Form field value exceeds buffer length! Trim the tail."
-msgstr "La valeur excède la zone tampon; Élaguer les lignes finales (tail)."
-
-#: src/LYForms.c:306 src/LYMainLoop.c:1357 src/LYMainLoop.c:1385
-msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
-msgstr "Entrez le texte. Touches HAUT/BAS ou tabulateur pour vous déplacer"
-
-#: src/LYForms.c:310 src/LYMainLoop.c:1402 src/LYMainLoop.c:1430
-msgid "(mailto form submit button) Use right-arrow or <return> to submit."
-msgstr "Utilisez la touche DROITE ou <Entr> pour confirmer"
-
-#: src/LYForms.c:312 src/LYMainLoop.c:1388 src/LYMainLoop.c:1416
-msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
-msgstr "Entrez le texte. <Entr> pour confirmer; flèches ou tabulateur pour se déplacer"
-
-#: src/LYForms.c:314 src/LYMainLoop.c:1390 src/LYMainLoop.c:1418
-msgid "(Form field) Enter text. Use <return> to submit ('x' for no cache)."
-msgstr "Entrez le texte. <Entr> pour confirmer («x» : nouvelle instance)"
-
-#: src/LYForms.c:319 src/LYMainLoop.c:1421 src/LYMainLoop.c:1449
-msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
-msgstr "Entrez le texte. Touches HAUT/BAS ou tabulateur pour se déplacer"
-
-#: src/LYForms.c:357
-msgid "Enter Lynx keystroke command: "
-msgstr "Entrer la commande Lynx au clavier : "
-
-#: src/LYForms.c:400
-msgid "Do you want to go back to the previous document? [N]"
-msgstr "Voulez-vous retourner au document précédent? [N]"
-
-#: src/LYForms.c:407
-msgid "Use arrows or tab to move off of field."
-msgstr "Touches fléchées ou tabulateur pour se déplacer hors du champ"
-
-#: src/LYForms.c:409 src/LYForms.c:426
-msgid "Enter text. Use arrows or tab to move off of field."
-msgstr "Entrez le texte. Flèches ou tabulateur pour se déplacer hors du champ"
-
-#: src/LYForms.c:453
-msgid "Modified tail combined with head of form field value."
-msgstr "Lignes finales modifiés combinées avec en-tête (champ de formulaire)"
-
-#: src/LYForms.c:499
-msgid "Select option (or page) number: "
-msgstr "Choisir le numéro d'option (ou de page) : "
-
-#: src/LYForms.c:696 src/LYOptions.c:2248 src/LYOptions.c:2249 src/LYOptions.c:2308
-msgid "Unable to create popup window!"
-msgstr "Impossible de créer de fenêtre flash."
-
-#: src/LYForms.c:868
-msgid "You are already at the beginning of this option list."
-msgstr "Vous êtes déjà au début de cette liste d'options."
-
-#: src/LYForms.c:870 src/LYForms.c:879 src/LYForms.c:894 src/LYForms.c:907 src/LYForms.c:971 src/LYForms.c:997 src/LYForms.c:1015 src/LYForms.c:1454 src/LYMainLoop.c:1361 src/LYMainLoop.c:1389
-msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
-msgstr "Faites <Entr> ou touches fléchées pour revoir les options et quitter"
-
-#: src/LYForms.c:872 src/LYForms.c:881 src/LYForms.c:896 src/LYForms.c:909 src/LYForms.c:923 src/LYForms.c:931 src/LYForms.c:973 src/LYForms.c:999 src/LYForms.c:1017 src/LYForms.c:1456 src/LYMainLoop.c:1363 src/LYMainLoop.c:1391
-msgid "(Option list) Hit return and use arrow keys and return to select option."
-msgstr "Faites <Entr> et touches fléchées, puis <Entr> pour choisir une option"
-
-#: src/LYForms.c:892
-msgid "You are already at the end of this option list."
-msgstr "Vous êtes déjà à la fin de cette liste d'options."
-
-#: src/LYForms.c:918
-msgid "You are already at page %d of this option list."
-msgstr "Vous êtes déjà à la page %d de cette liste d'options."
-
-# /maxwell/lynx2.7.1/LYMessages_en.h
-#: src/LYForms.c:921 src/LYOptions.c:2273 src/LYOptions.c:2274 src/LYOptions.c:2333 src/LYOptions.c:2449 src/LYOptions.c:2453 src/LYOptions.c:2509 src/LYOptions.c:2559 src/LYOptions.c:2563 src/LYOptions.c:2585 src/LYOptions.c:2589 src/LYOptions.c:2619 src/LYOptions.c:2645 src/LYOptions.c:3051 src/LYOptions.c:3055 src/LYOptions.c:3111
-msgid "(Choice list) Hit return and use arrow keys and return to select option."
-msgstr "(Liste de choix) Entr, puis touches fléchées et Entr pour faire votre choix"
-
-#: src/LYForms.c:929 src/LYOptions.c:2271 src/LYOptions.c:2272 src/LYOptions.c:2331 src/LYOptions.c:2447 src/LYOptions.c:2451 src/LYOptions.c:2488 src/LYOptions.c:2492 src/LYOptions.c:2507 src/LYOptions.c:2548 src/LYOptions.c:2557 src/LYOptions.c:2561 src/LYOptions.c:2583 src/LYOptions.c:2587 src/LYOptions.c:2601 src/LYOptions.c:2605 src/LYOptions.c:2617 src/LYOptions.c:2643 src/LYOptions.c:2661 src/LYOptions.c:3049 src/LYOptions.c:3053 src/LYOptions.c:3109
-msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
-msgstr "Liste de choix NON MODIFIABLE. Entr ou touches fléchées pour revoir ou quitter"
-
-#: src/LYForms.c:968
-msgid "Option number %d already is current."
-msgstr "L'option %d est déjà l'option en cours."
-
-#: src/LYForms.c:1007
-msgid "You have entered an invalid option number."
-msgstr "Vous avez entré un numéro d'option non valide."
-
-# msgid "Enter a database query: "
-# msgstr "Entrez une recherche dans la base de données : "
-#: src/LYForms.c:1235 src/LYOptions.c:2822 src/LYOptions.c:2826 src/LYOptions.c:2882 src/LYSearch.c:210
-msgid "Enter a whereis query: "
-msgstr "Entrez le mot à rechercher : "
-
-#: src/LYGetFile.c:110 src/LYGetFile.c:116
-msgid "Port 19 not permitted in URLs."
-msgstr "Le port 19 n'est pas permis"
-
-#: src/LYGetFile.c:115 src/LYGetFile.c:121
-msgid "Port 25 not permitted in URLs."
-msgstr "Le port 25 n'est pas permis"
-
-#: src/LYGetFile.c:121 src/LYGetFile.c:127
-msgid "Port %lu not permitted in URLs."
-msgstr "Le port %lu n'est pas permis dans les URL."
-
-#: src/LYGetFile.c:127 src/LYGetFile.c:133
-msgid "URL has a bad port field."
-msgstr "Champ de port d'URL erroné."
-
-#: src/LYGetFile.c:161 src/LYGetFile.c:167
-msgid "Not an http URL or form ACTION!"
-msgstr "L'élément n'est ni un URL http ni un attribut ACTION!"
-
-#: src/LYGetFile.c:201 src/LYGetFile.c:207
-msgid "URL is not in starting realm!"
-msgstr "L'URL n'est pas dans la partition de départ spécifiée"
-
-# src/LYGetFile.c
-#: src/LYGetFile.c:219 src/LYGetFile.c:225
-msgid "POST not supported for this URL - ignoring POST data!"
-msgstr "Méthode POST non fonctionnelle pour cet URL; données POST ignorées"
-
-#: src/LYGetFile.c:233 src/LYGetFile.c:239
-msgid "Unsupported URL scheme!"
-msgstr "Schème de URL non reconnu!"
-
-#: src/LYGetFile.c:237 src/LYGetFile.c:243 src/LYMainLoop.c:4959 src/LYMainLoop.c:4991 src/LYMainLoop.c:4992
-msgid "Unsupported data: URL! Use SHOWINFO, for now."
-msgstr "Données non reconnues; consultez la page d'informations pour le moment"
-
-#: src/LYGetFile.c:255 src/LYGetFile.c:260
-msgid "News posting is disabled!"
-msgstr "L'envoi d'articles Usenet est désactivé"
-
-#: src/LYGetFile.c:283 src/LYGetFile.c:288 src/LYGetFile.c:299 src/LYGetFile.c:304
-msgid "File management support is disabled!"
-msgstr "Le soutien de gestion de fichier est désactivé."
-
-#: src/LYGetFile.c:344 src/LYGetFile.c:349
-msgid "Execution is disabled."
-msgstr "L'exécution est désactivée."
-
-#: src/LYGetFile.c:392
-msgid "Press <return> to return to Lynx."
-msgstr "Appuyez sur <Entr> pour retourner à Lynx "
+"Une erreur fatale s'est produite dans %s Ver. %s\n"
-#: src/LYGetFile.c:405
+#: src/LYCurses.c:1751
msgid ""
"\n"
-"%s"
-msgstr ""
-
-#: src/LYGetFile.c:414 src/LYGetFile.c:427
-msgid "Execution capabilities are not compiled into this version."
-msgstr "Capacités d'exécution non compilées dans cette version."
-
-#: src/LYGetFile.c:420 src/LYGetFile.c:433
-msgid "Mail access is disabled!"
-msgstr "L'accès au courrier est désactivé."
-
-#: src/LYGetFile.c:454 src/LYGetFile.c:467 src/LYMainLoop.c:4994
-msgid "Only files and servers on the local host can be accessed."
-msgstr "Seuls les fichiers/serveurs logés sur l'hôte local sont accessibles"
-
-#: src/LYGetFile.c:464 src/LYGetFile.c:477
-msgid "Telnet access is disabled!"
-msgstr "L'accès Telnet est désactivé."
-
-#: src/LYGetFile.c:466 src/LYGetFile.c:479
-msgid "Telnet port specifications are disabled."
-msgstr "Les spécifications de port Telnet sont désactivées."
-
-#: src/LYGetFile.c:480 src/LYGetFile.c:493
-msgid "USENET news access is disabled!"
-msgstr "L'accès aux articles USENET est désactivé."
-
-#: src/LYGetFile.c:485 src/LYGetFile.c:498
-msgid "Rlogin access is disabled!"
-msgstr "L'accès Rlogin est désactivé."
-
-#: src/LYGetFile.c:676 src/LYGetFile.c:698
-msgid "Location URL is not absolute."
-msgstr "Il ne s'agit pas d'un URL absolu"
+"Please notify your system administrator to confirm a bug, and if\n"
+"confirmed, to notify the lynx-dev list. Bug reports should have concise\n"
+"descriptions of the command and/or URL which causes the problem, the\n"
+"operating system name with version number, the TCPIP implementation, the\n"
+"TRACEBACK if it can be captured, and any other relevant information.\n"
+msgstr ""
+"\n"
+"Merci de prévenir votre administrateur système pour confirmer un bug.\n"
+"Si le bug est confirmé, merci de prévenir la liste de diffusion lynx-dev.\n"
+"Les rapports de bugs devraient être des déscriptions concises du problème \n"
+"associés à la commande ou à l'url qui en a été la cause. Ils devraient aussi\n"
+"contenir les informations relatives à l'os utilisé, sa version, l'implémentation\n"
+"TCP/IP, le TRACEBACK si il a put être capturé ainsi que toute information pouvant\n"
+"s'avérer utile\n"
+
+#: src/LYEdit.c:264
+msgid "Editor killed by signal"
+msgstr "Editeur tué par signal"
+
+#: src/LYEdit.c:266
+#, c-format
+msgid "Editor returned with error status, %s"
+msgstr "L'éditeur à retourné un code d'erreur %s"
+
+#: src/LYEdit.c:267
+msgid "reason unknown."
+msgstr "raison inconnue"
+
+#: src/LYDownload.c:520
+msgid "Downloaded link:"
+msgstr "Lien téléchargé:"
+
+#: src/LYDownload.c:525
+msgid "Suggested file name:"
+msgstr "Nom de fichier suggéré"
+
+#: src/LYDownload.c:530
+msgid "Standard download options:"
+msgstr "Options standard de téléchargement:"
+
+#: src/LYDownload.c:531
+msgid "Download options:"
+msgstr "Options de déchargement de fichier :"
+
+#: src/LYDownload.c:545
+msgid "Save to disk"
+msgstr "Enregistrement sur disque"
+
+#: src/LYDownload.c:547
+msgid "Save to disk disabled."
+msgstr "Enregistrement sur disque d<E9>sactiv<E9>"
+
+#: src/LYDownload.c:551 src/LYPrint.c:1338
+msgid "Local additions:"
+msgstr "Ajout local:"
+
+#: src/LYDownload.c:560 src/LYUpload.c:224
+msgid "No Name Given"
+msgstr "Aucun nom donné"
-#: src/LYGetFile.c:736 src/LYGetFile.c:760
-msgid "Illegal redirection URL received from server!"
-msgstr "URL de réacheminement illégal reçu du serveur!"
+#: src/LYHistory.c:633
+msgid "You selected:"
+msgstr "Vous avez choisi :"
-# msgid "Using %s"
-# msgstr "Utilisation de %s"
-#: src/LYGetFile.c:738 src/LYGetFile.c:762
-msgid "Illegal URL: %s"
-msgstr "URL illégal : %s"
+#: src/LYHistory.c:657 src/LYHistory.c:905
+msgid "(no address)"
+msgstr "(aucune addresse)"
-#: src/LYGetFile.c:743 src/LYGetFile.c:767
-msgid "Illegal Redirection URL: %s"
-msgstr "URL de réacheminement illégal : %s"
+#: src/LYHistory.c:661
+msgid " (internal)"
+msgstr " (interne)"
-#: src/LYGetFile.c:903 src/LYGetFile.c:927
-msgid "Badly formed address %s"
-msgstr "Adresse mal formée %s"
+#: src/LYHistory.c:663
+msgid " (was internal)"
+msgstr " (était interne)"
-# This one actually changed from "Follow link number: "
-#: src/LYGetFile.c:938 src/LYGetFile.c:962
-msgid "Follow link (or goto link or page) number: "
-msgstr "Accéder au lien (commande G) Aller) numéro : "
+#: src/LYHistory.c:761
+msgid " (From History)"
+msgstr " (de l'Historique)"
-#: src/LYGetFile.c:1154 src/LYGetFile.c:1178
-msgid "Executable link rejected due to malformed request."
-msgstr "Lien exécutable rejeté dû à une demande erronée."
+#: src/LYHistory.c:825
+msgid "You visited (POSTs, bookmark, menu and list files excluded):"
+msgstr "Vous avez consulté (fichiers POST, références et signets exclus):"
-#: src/LYGetFile.c:1170 src/LYGetFile.c:1180 src/LYGetFile.c:1194 src/LYGetFile.c:1204
-msgid "Executable link rejected due to relative path string ('../')."
-msgstr "Lien exécutable rejeté dû à un chemin relatif ('../')"
+#: src/LYHistory.c:1124
+msgid "(No messages yet)"
+msgstr "(Pas encore de message)"
-#: src/LYGetFile.c:1197 src/LYGetFile.c:1221
-msgid "Executable link rejected due to `%c' character."
-msgstr "Lien exécutable rejeté dû au caractère `%c'."
+#: src/LYLeaks.c:78
+msgid "Invalid pointer detected."
+msgstr "Détection de pointeur non valide"
-#: src/LYGetFile.c:1231 src/LYGetFile.c:1255
-msgid "Executable link rejected due to location or path."
-msgstr "Lien exécutable rejeté dû à l'emplacement ou au chemin d'accès"
+#: src/LYLeaks.c:80 src/LYLeaks.c:117
+msgid "Pointer:"
+msgstr "Pointeur:"
-#: src/LYHistory.c:72 src/LYHistory.c:75
-msgid "Lynx Options Page"
-msgstr ""
+#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:136
+msgid "FileName:"
+msgstr "Nom de fichier :"
-#: src/LYHistory.c:81 src/LYHistory.c:85 src/LYMainLoop.c:2534 src/LYMainLoop.c:2558 src/LYMainLoop.c:2923 src/LYMainLoop.c:2947 src/LYMainLoop.c:4635 src/LYMainLoop.c:4666 src/LYMainLoop.c:4667 src/LYMainLoop.c:4877 src/LYMainLoop.c:4908 src/LYMainLoop.c:4909
-msgid "Lynx Cookie Jar"
-msgstr "Lynx - Page des «cookies»"
+#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:139 src/LYLeaks.c:150
+msgid "LineCount:"
+msgstr "Nombre de lignes:"
-#: src/LYHistory.c:82 src/LYHistory.c:86 src/LYHistory.c:531 src/LYHistory.c:558 src/LYMainLoop.c:4412 src/LYMainLoop.c:4427 src/LYMainLoop.c:4443 src/LYMainLoop.c:4444 src/LYMainLoop.c:4458 src/LYMainLoop.c:4459 src/LYMainLoop.c:4658 src/LYMainLoop.c:4689 src/LYMainLoop.c:4690
-msgid "Lynx Visited Links Page"
-msgstr "Lynx - Page des liens activés"
+#: src/LYLeaks.c:115
+msgid "Memory leak detected."
+msgstr "Fuite de mémoire détectée"
-#: src/LYHistory.c:83 src/LYHistory.c:87 src/LYMain.c:1057 src/LYMain.c:1074 src/LYMain.c:1077 src/LYMainLoop.c:464 src/LYMainLoop.c:471 src/LYMainLoop.c:5098 src/LYMainLoop.c:5118 src/LYMainLoop.c:5119 src/LYMainLoop.c:5137 src/LYMainLoop.c:5139 src/LYMainLoop.c:5140 src/LYMainLoop.c:5162 src/LYMainLoop.c:5163
-msgid "Lynx Trace Log"
-msgstr "Journal de parcours Lynx"
+#: src/LYLeaks.c:120
+msgid "Contains:"
+msgstr "Contient:"
-#: src/LYHistory.c:90 src/LYHistory.c:94 src/LYHistory.c:399 src/LYHistory.c:424 src/LYHistory.c:547 src/LYHistory.c:574
-msgid "(no title)"
-msgstr ""
+#: src/LYLeaks.c:133
+msgid "ByteSize:"
+msgstr "Taille de byte"
-#: src/LYHistory.c:296 src/LYHistory.c:329
-msgid "History List maximum reached! Document not pushed."
-msgstr "Vous avez atteint le maximum de l'Historique. Accès impossible"
+#: src/LYLeaks.c:147
+msgid "realloced:"
+msgstr "réallouée:"
-# src/LYGlobalDefs.h
-# msgid "Bookmark file"
-# msgstr "Fichier de signets"
-# msgid "Converted Mosaic Hotlist"
-# msgstr "Liste de signets Mosaic convertie"
-# src/LYHistory.c
-#: src/LYHistory.c:413 src/LYHistory.c:438
-msgid " (internal)"
-msgstr " (interne)"
+#: src/LYLeaks.c:170
+msgid "Total memory leakage this run:"
+msgstr "Total de fuite de mémoire pour cette éxécution:"
-#: src/LYHistory.c:415 src/LYHistory.c:440
-msgid " (was internal)"
-msgstr " (était interne)"
+#: src/LYList.c:91
+msgid "References in "
+msgstr "Références dans"
-#: src/LYHistory.c:535 src/LYHistory.c:562
-msgid "<em>You visited (POSTs, bookmark, menu and list files excluded):</em>\n"
-msgstr "<em>Vous avez consulté (fichiers POST, références et signets exclus):</em>\n"
+#: src/LYList.c:92
+msgid "this document:"
+msgstr "ce document"
-#: src/LYJump.c:91
-msgid "Out of memory in LYJumpInit"
-msgstr ""
+#: src/LYList.c:98
+msgid "Visible links:"
+msgstr "Liens visibles :"
-#: src/LYJump.c:196
-msgid "Key '%c' is not mapped to a jump file!"
-msgstr "Touche '%c' non configurée pour correspondre à un fichier-raccourci"
+#: src/LYList.c:199 src/LYList.c:319
+msgid "Hidden links:"
+msgstr "Liens cachés :"
-#: src/LYJump.c:256
-msgid "Random URL is disallowed! Use a shortcut."
-msgstr "L'accès arbitraire à un URL est invalidé. Utilisez un raccourci."
+#: src/LYList.c:267
+msgid "References"
+msgstr "Références"
-#: src/LYJump.c:290 src/LYJump.c:330
-msgid "Edit the current shortcut: "
-msgstr "Éditer le raccourci courant :"
+#: src/LYList.c:269
+msgid "Visible links"
+msgstr "Liens visibles"
-#: src/LYJump.c:293 src/LYJump.c:333
-msgid "Edit the previous shortcut: "
-msgstr "Éditer le raccourci précédent :"
+#: src/LYLocal.c:267
+#, c-format
+msgid "Unable to get status of '%s'."
+msgstr "Impossible d'obtenir l'état de '%s'."
-#: src/LYJump.c:295 src/LYJump.c:335
-msgid "Edit a previous shortcut: "
-msgstr "Éditer un raccourci précédent :"
+#: src/LYLocal.c:301
+msgid "The selected item is not a file or a directory! Request ignored."
+msgstr "L'élément sélectioné n'est ni un fichier ni un répertoire. Requête ignorée."
-#: src/LYJump.c:378
-msgid "Cannot locate jump file!"
-msgstr "Impossible de localiser le fichier-raccourci."
+#: src/LYLocal.c:383
+#, c-format
+msgid "Unable to %s due to system error!"
+msgstr "Opération (%s) impossible dû à une erreur système!"
-#: src/LYJump.c:384
-msgid "Out of memory reading jump file!"
-msgstr "Mémoire insuffisante pour lire le fichier-raccourci."
+#. error return
+#: src/LYLocal.c:415
+#, c-format
+msgid "Probable failure to %s due to system error!"
+msgstr "Défaut de %s dû probablement à une erreur système"
-#: src/LYJump.c:393 src/LYJump.c:403
-msgid "Cannot open jump file!"
-msgstr "Impossible d'ouvrir le fichier-raccourci."
+#: src/LYLocal.c:453
+#, c-format
+msgid "move %s to %s"
+msgstr "déplacement de %s vers %s"
-#: src/LYJump.c:413 src/LYJump.c:423
-msgid "Error reading jump file!"
-msgstr "Erreur de lecture du fichier-raccourci."
+#: src/LYLocal.c:475
+msgid "There is already a directory with that name! Request ignored."
+msgstr "Le répertoire éxiste déja. Requête ignorée."
-#: src/LYJump.c:442
-msgid "Out of memory reading jump table!"
-msgstr "Mémoire insuffisante pour lire les tables de raccourcis"
+#: src/LYLocal.c:477
+msgid "There is already a file with that name! Request ignored."
+msgstr "Ce fichier éxiste déja. Requête ignorée."
-#
-# ------------------- End Extra Strings -----------------------------------
-# Not sure if the CFG file is in francais or english, but if it is
-# en francais, then we have trouble, because the parsing routines
-# are reading english. Just noting this somewhere someone can find it. :-)
-# ------ No translation, like with the LYMain.c --------------------------
-# src/LYStyle.c
-# msgid ""
-# "Syntax Error parsing style in lss file:\n"
-# "[%s]\n"
-# "The line must be of the form:\n"
-# "OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
-# "where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n\n"
-# msgstr ""
-# "Syntax Error parsing style in lss file:\n"
-# "[%s]\n"
-# "The line must be of the form:\n"
-# "OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
-# "where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n\n"
-# ------------ End No translation ---------------------
-# --------- 97/12/01 New Strings from 0.96 ---------------
-#: src/LYKeymap.c:475
-msgid "clear all authorization info for this session"
-msgstr "efface toute l'info d'autorisation pour cette session"
-
-#: src/LYLeaks.c:79
-msgid "Invalid pointer detected.\n"
-msgstr ""
+#: src/LYLocal.c:479
+msgid "The specified name is already in use! Request ignored."
+msgstr "Ce nom est déja utilisé. Requête ignorée."
-#: src/LYLeaks.c:81 src/LYLeaks.c:111
-msgid "Pointer:\t%p\n"
-msgstr ""
+#: src/LYLocal.c:490
+msgid "Destination has different owner! Request denied."
+msgstr "La déstination possede un autre propriétaire. Requête ignorée."
-#: src/LYLeaks.c:91 src/LYLeaks.c:96 src/LYLeaks.c:128
-msgid "FileName:\t%s\n"
-msgstr ""
+#: src/LYLocal.c:493
+msgid "Destination is not a valid directory! Request denied."
+msgstr "La déstination n'est pas un répertoire valide. Requête ignorée."
-#: src/LYLeaks.c:93 src/LYLeaks.c:98 src/LYLeaks.c:130 src/LYLeaks.c:139
-msgid "LineCount:\t%d\n"
-msgstr ""
+#: src/LYLocal.c:516
+msgid "Remove all tagged files and directories?"
+msgstr "Détruire tout les répertoires et fichiers marqués ?"
-#: src/LYLeaks.c:110
-msgid "Memory leak detected.\n"
-msgstr ""
+#: src/LYLocal.c:537
+#, c-format
+msgid "remove %s"
+msgstr "déstruction de %s"
-#: src/LYLeaks.c:112
-msgid "Contains:\t"
-msgstr ""
+#: src/LYLocal.c:580
+msgid "Enter new location for tagged items: "
+msgstr "Entrer un nouvel emplacement pour articles marqués : "
-#: src/LYLeaks.c:126
-msgid "ByteSize:\t%d\n"
-msgstr ""
+#: src/LYLocal.c:649
+msgid "Path too long"
+msgstr "Chemin trop long"
-#: src/LYLeaks.c:137
-msgid "realloced:\t%s\n"
-msgstr ""
+#: src/LYLocal.c:680
+msgid "Source and destination are the same location - request ignored!"
+msgstr "Source et destination identiques; demande non traitée"
-#: src/LYLeaks.c:156
-msgid ""
-"\n"
-"Total memory leakage this run:\t%u\n"
-msgstr ""
+#: src/LYLocal.c:738
+msgid "Enter new name for directory: "
+msgstr "Entrer un nouveau nom pour le répertoire : "
-#: src/LYList.c:64
-msgid "There are only hidden links from this document."
-msgstr "Ce document ne renvoie qu'à des liens cachés."
+#: src/LYLocal.c:740
+msgid "Enter new name for file: "
+msgstr "Entrer un nouveau nom pour le fichier : "
-#: src/LYList.c:68
-msgid "There are no references from this document."
-msgstr "Il n'y a aucune référence dans ce document."
+#: src/LYLocal.c:751
+msgid "Illegal character (path-separator) found! Request ignored."
+msgstr "Caractère «/» non autorisé; demande non traitée."
-#: src/LYList.c:88
-msgid "References in %s<p>\n"
-msgstr ""
+#: src/LYLocal.c:800
+msgid "Enter new location for directory: "
+msgstr "Entrez nouvel emplacement pour répertoire : "
-#: src/LYList.c:89
-msgid "this document:"
-msgstr ""
+#: src/LYLocal.c:802
+msgid "Enter new location for file: "
+msgstr "Entrez une nouvelle localisation pour le fichier:"
-# msgid "<h1>You have reached the Visited Links Page</h1>\n"
-# msgstr "<h1>Vous avez accédé à la Page des liens activés</h1>\n"
-# msgstr "<h1>Vous avez accédé à la Page des liens consultés</h1>\n"
-# src/LYList.c
-# msgid "unknown field or link"
-# msgstr "champ ou lien inconnu"
-#: src/LYList.c:95
-msgid "<lh><em>Visible links:</em>\n"
-msgstr "<lh><em>Liens visibles :</em>\n"
-
-#: src/LYList.c:185
-msgid "<lh><em>Hidden links:</em>\n"
-msgstr "<lh><em>Liens cachés :</em>\n"
-
-#: src/LYList.c:256
-msgid ""
-"\n"
-"%s\n"
-"\n"
-msgstr ""
+#: src/LYLocal.c:827
+msgid "Unexpected failure - unable to find trailing path separator"
+msgstr "Impossible de trouver la marque de fin de fichier \"/\""
-#: src/LYList.c:258
-msgid " Visible links:\n"
-msgstr ""
+#: src/LYLocal.c:847
+msgid "Source and destination are the same location! Request ignored!"
+msgstr "La source et la déstination sont similaires. Requête ignorée."
-#: src/LYList.c:308
-msgid "%s Hidden links:\n"
-msgstr ""
+#: src/LYLocal.c:894
+msgid "Modify name, location, or permission (n, l, or p): "
+msgstr "Modifier nom, emplacement ou permission (n, l ou p) : "
-#: src/LYLocal.c:257 src/LYLocal.c:312
-msgid "Remove all tagged files and directories (y or n): "
-msgstr ""
+#: src/LYLocal.c:896
+msgid "Modify name or location (n or l): "
+msgstr "Modifier le nom ou l'emplacement (n ou l) : "
-#: src/LYLocal.c:280 src/LYLocal.c:917
-msgid "System error - failed to get status of '%s'."
-msgstr ""
+#.
+#. * Code for changing ownership needed here.
+#.
+#: src/LYLocal.c:925
+msgid "This feature not yet implemented!"
+msgstr "Option non encore disponible"
-#: src/LYLocal.c:289 src/LYLocal.c:336
-msgid "remove %s"
-msgstr ""
+#: src/LYLocal.c:943
+msgid "Enter name of file to create: "
+msgstr "Entrez le nom du fichier : "
-#: src/LYLocal.c:373 src/LYLocal.c:419 src/LYLocal.c:505 src/LYLocal.c:587 src/LYLocal.c:637 src/LYLocal.c:1083 src/LYLocal.c:1245 src/LYLocal.c:1667 src/LYLocal.c:1843 src/LYLocal.c:1863
-msgid "Unable to get status of '%s'."
-msgstr ""
+#: src/LYLocal.c:951 src/LYLocal.c:999
+msgid "Illegal redirection \"//\" found! Request ignored."
+msgstr "Réacheminement \"//\" non autorisé; demande non traitée"
-#: src/LYLocal.c:395 src/LYLocal.c:438
-msgid "Path too long"
-msgstr ""
+#: src/LYLocal.c:966
+#, c-format
+msgid "create %s"
+msgstr "création de %s"
-#: src/LYLocal.c:455 src/LYLocal.c:492 src/LYLocal.c:543 src/LYLocal.c:577 src/LYLocal.c:654 src/LYLocal.c:685
-msgid "move %s to %s"
-msgstr ""
+#: src/LYLocal.c:991
+msgid "Enter name for new directory: "
+msgstr "Entrer le nom du nouveau répertoire : "
-#: src/LYLocal.c:472 src/LYLocal.c:509 src/LYLocal.c:663 src/LYLocal.c:694
-msgid "Destination has different owner! Request denied."
-msgstr ""
+#: src/LYLocal.c:1042
+msgid "Create file or directory (f or d): "
+msgstr "Créer un fichier ou un répertoire (f ou r) :"
-#: src/LYLocal.c:478 src/LYLocal.c:515 src/LYLocal.c:642 src/LYLocal.c:673
-msgid "Destination is not a valid directory! Request denied."
-msgstr ""
+#: src/LYLocal.c:1083
+#, c-format
+msgid "Remove '%s' and all of its contents?"
+msgstr "Supprimer '%s' et tout son contenu"
-#: src/LYLocal.c:516 src/LYLocal.c:550 src/LYLocal.c:1848
-msgid "The selected item is not a file or a directory! Request ignored."
-msgstr ""
+#: src/LYLocal.c:1086
+msgid "Remove directory and all of its contents?"
+msgstr "Supprimer le répertoire et tout son contenu"
-#: src/LYLocal.c:526 src/LYLocal.c:560 src/LYUpload.c:109 src/LYUpload.c:110
-msgid "Illegal character \"/\" found! Request ignored."
-msgstr "Caractère «/» non autorisé; demande non traitée"
+#: src/LYLocal.c:1090
+#, c-format
+msgid "Remove file '%s'?"
+msgstr "Supprimer le fichier '%s'"
-#: src/LYLocal.c:540 src/LYLocal.c:574 src/LYLocal.c:788 src/LYLocal.c:810 src/LYLocal.c:845 src/LYLocal.c:867 src/LYLocal.c:955 src/LYLocal.c:965
-msgid "Unable to determine status of '%s'."
-msgstr ""
+#: src/LYLocal.c:1092
+msgid "Remove file?"
+msgstr "Supprimer le fichier"
-#: src/LYLocal.c:553 src/LYLocal.c:587 src/LYLocal.c:800 src/LYLocal.c:822 src/LYLocal.c:857 src/LYLocal.c:879
-msgid "There is already a directory with that name! Request ignored."
-msgstr ""
+#: src/LYLocal.c:1097
+#, c-format
+msgid "Remove symbolic link '%s'?"
+msgstr "Supprimer le lien symbolique '%s'"
-#: src/LYLocal.c:555 src/LYLocal.c:589 src/LYLocal.c:802 src/LYLocal.c:824 src/LYLocal.c:859 src/LYLocal.c:881
-msgid "There is already a file with that name! Request ignored."
-msgstr ""
+#: src/LYLocal.c:1099
+msgid "Remove symbolic link?"
+msgstr "Supprimer le lien symbolique"
-#: src/LYLocal.c:557 src/LYLocal.c:591 src/LYLocal.c:804 src/LYLocal.c:826 src/LYLocal.c:861 src/LYLocal.c:883
-msgid "The specified name is already in use! Request ignored."
-msgstr ""
+#: src/LYLocal.c:1190
+msgid "Sorry, don't know how to permit non-UNIX files yet."
+msgstr "Désolé, impossible d'accepter les fichier non UNIX pour le moment"
-#: src/LYLocal.c:598 src/LYLocal.c:630
-msgid "Enter new location for file: "
-msgstr ""
+#: src/LYLocal.c:1220
+msgid "Unable to open permit options file"
+msgstr "Impossible d'ouvrir le fichier demandé"
-#: src/LYLocal.c:744 src/LYLocal.c:766
-msgid "This feature not yet implemented!"
-msgstr ""
+#: src/LYLocal.c:1247
+msgid "Specify permissions below:"
+msgstr "Spécifier les permissions d'accès ci-après :"
-#: src/LYLocal.c:792 src/LYLocal.c:814
-msgid "create %s"
-msgstr ""
+#: src/LYLocal.c:1248 src/LYShowInfo.c:196
+msgid "Owner:"
+msgstr "Propriétaire :"
-#: src/LYLocal.c:935 src/LYLocal.c:945
-msgid "Remove '%s' and all of its contents (y or n): "
-msgstr "Supprimer '%s' et tout son contenu (o ou n) : "
+#: src/LYLocal.c:1264
+msgid "Group"
+msgstr "Groupe"
-#: src/LYLocal.c:942 src/LYLocal.c:952
-msgid "Remove file '%s' (y or n): "
-msgstr "Supprimer le fichier '%s' (o ou n) : "
+#: src/LYLocal.c:1280
+msgid "Others:"
+msgstr "Autres :"
-#: src/LYLocal.c:949 src/LYLocal.c:959
-msgid "Remove symbolic link '%s' (y or n): "
-msgstr "Supprimer le lien symbolique '%s' (o ou n) : "
+#: src/LYLocal.c:1298
+msgid "form to permit"
+msgstr "formulaire pour permission"
-# Following strings are from the modify/permissions form
-#: src/LYLocal.c:1124 src/LYLocal.c:1135
-msgid "Owner:<Br>\n"
-msgstr "Propriétaire :<Br>\n"
+#: src/LYLocal.c:1396
+msgid "Invalid mode format."
+msgstr "Format de mode non valide"
-#: src/LYLocal.c:1140 src/LYLocal.c:1151
-msgid "Group %s:<Br>\n"
-msgstr "Groupe %s :<Br>\n"
+#: src/LYLocal.c:1400
+msgid "Invalid syntax format."
+msgstr "Format de syntaxe non valide"
-#: src/LYLocal.c:1156 src/LYLocal.c:1167
-msgid "Others:<Br>\n"
-msgstr "Autres :<Br>\n"
+#: src/LYLocal.c:1575
+msgid "NULL URL pointer"
+msgstr "pointeur vers une URL nulle"
-# Translate second "Submit" and "form to permit"; %s is the filename
-# This one will have to be tested in context; I am ensure
-#: src/LYLocal.c:1173 src/LYLocal.c:1184
-msgid ""
-"<Br>\n"
-"<Li><Input Type=\"submit\" Value=\"Submit\"> form to permit %s %s.\n"
-"</Ol>\n"
-"</Form>\n"
-msgstr ""
-"<Br>\n"
-"<Li><Input Type=\"submit\" Value=\"Envoyer\"> la permission pour %s %s.\n"
-"</Ol>\n"
-"</Form>\n"
+#: src/LYLocal.c:1670
+msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
+msgstr "Le fichier UUDecoded sera dans le répertoire où vous avez lancé Lynx"
-#: src/LYLocal.c:1195 src/LYLocal.c:1197 src/LYLocal.c:1206 src/LYLocal.c:1208 src/LYLocal.c:1226 src/LYLocal.c:1228 src/LYLocal.c:1232 src/LYLocal.c:1234
-msgid "Special URL only valid from current File Permission menu!"
-msgstr "URL spécial valide uniquement depuis le menu de permission d'accès actif"
+#: src/LYLocal.c:1782
+#, c-format
+msgid "Executing %s "
+msgstr "Exécution de la commande %s "
-#: src/LYLocal.c:1377 src/LYLocal.c:1388
-msgid "NULL URL pointer"
-msgstr ""
+#: src/LYLocal.c:1785
+msgid "Executing system command. This might take a while."
+msgstr "Exécution de la commande système. Veuillez patienter."
-#: src/LYLocal.c:1611 src/LYLocal.c:1628
+#: src/LYLocal.c:1831
msgid "Unable to open file management menu file."
msgstr "Impossible d'ouvrir le menu de gestion de fichier."
-#: src/LYLocal.c:1644 src/LYLocal.c:1684
-msgid "<em>Current directory:</em> %s<br>\n"
-msgstr ""
-
-#: src/LYLocal.c:1648 src/LYLocal.c:1688
-msgid "<em>Current selection:</em> %s<p>\n"
-msgstr ""
+#: src/LYLocal.c:1862
+msgid "Current directory:"
+msgstr "Le répertoire courant:"
-#: src/LYLocal.c:1650 src/LYLocal.c:1690
-msgid "<em>Current selection:</em> Nothing currently selected.<p>\n"
-msgstr ""
+#: src/LYLocal.c:1865 src/LYLocal.c:1883
+msgid "Current selection:"
+msgstr "La sélection courante:"
-#: src/LYLocal.c:1663 src/LYLocal.c:1703
-msgid "<em>Current selection:</em> %d tagged item%s"
-msgstr ""
+#: src/LYLocal.c:1869
+msgid "Nothing currently selected."
+msgstr "Il n'y a rien de sélectionné."
-#: src/LYLocal.c:1813 src/LYLocal.c:1867
-msgid "The selected item is not a directory! Request ignored."
-msgstr ""
+#: src/LYLocal.c:1884
+msgid "tagged item:"
+msgstr "élément marqué"
-#: src/LYMail.c:49
-msgid "Warning! Control codes in mail address replaced by ?"
-msgstr ""
+#: src/LYLocal.c:1884
+msgid "tagged items:"
+msgstr "éléménts marqués"
-#: src/LYMail.c:295
-msgid "Subject: "
-msgstr "Objet : "
+#: src/LYLocal.c:1983 src/LYLocal.c:1994
+msgid "Illegal filename; request ignored."
+msgstr "Nom de fichier invalide; demande non traitée"
-#: src/LYMail.c:300 src/LYMail.c:320
-msgid "Mailto form submission cancelled!!!"
-msgstr "Envoi du formulaire mailto annul<E9>!"
+#: src/LYLocal.c:2137
+msgid "The selected item is not a directory! Request ignored."
+msgstr "L'élément sélectionné n'est pas un répertoire valide. Requête ignorée."
-#: src/LYMail.c:337 src/LYMail.c:345 src/LYMail.c:385
-msgid "Mailto form submission failed!"
-msgstr "Impossible d'envoyer le formulaire mailto!"
+#. directory not writable
+#: src/LYLocal.c:2141
+msgid "Install in the selected directory not permitted."
+msgstr "Installation dans le répertoire choisi non permise."
-#: src/LYMail.c:404
-msgid "Sending form content..."
-msgstr "Envoi du contenu du formulaire..."
+#: src/LYLocal.c:2146
+msgid "Just a moment, ..."
+msgstr "Un instant svp..."
-#: src/LYMail.c:835 src/LYMainLoop.c:605 src/LYMainLoop.c:610
-msgid "Unable to open traversal errors output file"
-msgstr "Impossible d'ouvrir le fichier sortie d'erreurs de parcours"
+#: src/LYLocal.c:2163
+msgid "Error buiding install args"
+msgstr "Erreur lors de la mise en place des arguments d'installation"
-#: src/LYMail.c:915 src/LYMail.c:917 src/LYMail.c:1164 src/LYMail.c:1166
-msgid "No email address is present in mailto URL!"
-msgstr "Aucune adresse de courrier ne figure dans l'URL mailto!"
+#: src/LYLocal.c:2178 src/LYLocal.c:2210
+#, c-format
+msgid "Source and target are the same: %s"
+msgstr "Source et destination identiques; demande non traitée: %s"
-#: src/LYMail.c:920 src/LYMail.c:922 src/LYMail.c:926 src/LYMail.c:928 src/LYMail.c:1839 src/LYMail.c:1841
-msgid "Unable to open temporary file for mailto URL!"
-msgstr "Impossible d'ouvrir de fichier temporaire pour l'URL mailto!"
+#: src/LYLocal.c:2188 src/LYLocal.c:2220
+#, c-format
+msgid "Already in target directory: %s"
+msgstr "Le répertoire courant est: %s"
-# NdT: This one is not clear...
-#: src/LYMail.c:1283 src/LYMail.c:1285
-msgid ""
-"You are sending a message with body to:\n"
-" "
-msgstr ""
-"Vous envoyez un message à :\n"
-" "
+#: src/LYLocal.c:2238
+msgid "Installation complete"
+msgstr "Installation terminée"
-#: src/LYMail.c:1285 src/LYMail.c:1287
-msgid ""
-"You are sending a comment to:\n"
-" "
-msgstr "Vous envoyez maintenant un commentaire à : "
+#: src/LYLocal.c:2427
+msgid "Temporary URL or list would be too long."
+msgstr "L'URL ou la liste temporaires seraient trop longs."
-#: src/LYMail.c:1309 src/LYMail.c:1311
-msgid ""
-"\n"
-" With copies to:\n"
-" "
-msgstr ""
+#: src/LYMail.c:503
+msgid "Sending"
+msgstr "Envoi"
-#: src/LYMail.c:1311 src/LYMail.c:1313
-msgid ""
-"\n"
-" With copy to:\n"
-" "
-msgstr ""
+#: src/LYMail.c:989
+#, c-format
+msgid "The link %s :?: %s \n"
+msgstr "Le lien %s :?: %s \n"
-# The following two messages have been put together to make:
-#: src/LYMail.c:1337 src/LYMail.c:1339
-msgid ""
-"\n"
-" Please enter your name, or leave it blank to remain anonymous\n"
-msgstr ""
-"\n"
-" Entrez votre nom (ou laissez un blanc pour rester anonyme)\n"
+#: src/LYMail.c:991
+#, c-format
+msgid "called \"%s\"\n"
+msgstr "appelé «%s»\n"
-#: src/LYMail.c:1346 src/LYMail.c:1348
-msgid "Personal_name: "
-msgstr ""
+#: src/LYMail.c:992
+#, c-format
+msgid "in the file \"%s\" called \"%s\"\n"
+msgstr "dans le fichier «%s» appelé «%s»\n"
-#: src/LYMail.c:1351 src/LYMail.c:1353
-msgid "Personal Name: "
-msgstr "Nom: "
+#: src/LYMail.c:993
+msgid "was requested but was not available."
+msgstr "a été demandé mais n'est pas disponible."
-#: src/LYMail.c:1356 src/LYMail.c:1358 src/LYMail.c:1398 src/LYMail.c:1400 src/LYMail.c:1444 src/LYMail.c:1446 src/LYMail.c:1477 src/LYMail.c:1479 src/LYMail.c:1646 src/LYMail.c:1648 src/LYMail.c:1659 src/LYMail.c:1661 src/LYMail.c:1846 src/LYMail.c:1848 src/LYMail.c:1852 src/LYMail.c:1854
-msgid "Comment request cancelled!!!"
-msgstr "Demande de commentaire annulée!"
+#: src/LYMail.c:994
+msgid "Thought you might want to know."
+msgstr "Pour votre information."
-#: src/LYMail.c:1555 src/LYMail.c:1557
-msgid "Do you wish to include the preparsed source? (y/n) "
-msgstr "Voulez-vous inclure la source pré-analysée? (o/n) "
+#: src/LYMail.c:996
+msgid "This message was automatically generated by"
+msgstr "Ce message est généré automatiquement par"
-#: src/LYMail.c:1557 src/LYMail.c:1559 src/LYNews.c:216 src/LYNews.c:217
-msgid "Do you wish to include the original message? (y/n) "
-msgstr "Voulez-vous inclure le message d'origine? (o/n) "
+#: src/LYMain.c:897
+msgid "No Winsock found, sorry."
+msgstr "Pas de Winsock trouvée, désolé."
-#: src/LYMail.c:1585 src/LYMail.c:1587
-msgid "Spawning your selected editor to edit mail message"
-msgstr "Lancement de votre éditeur de choix pour l'édition du message"
+#: src/LYMain.c:1103
+msgid "You MUST define a valid TMP or TEMP area!\n"
+msgstr "vous DEVEZ définire une aire TMP ou TEMP valide ! \n"
-#: src/LYMail.c:1589 src/LYMail.c:1591 src/LYNews.c:247 src/LYNews.c:248
-msgid "Error spawning editor, check your editor definition in the options menu"
-msgstr "Erreur de lancement; vérifier les données sur l'éditeur dans les paramètres"
+#: src/LYMain.c:1156 src/LYMainLoop.c:5117
+msgid "No such directory"
+msgstr "Pas de tel répertoire"
-#: src/LYMail.c:1606 src/LYMail.c:1608
+#: src/LYMain.c:1378
+#, c-format
msgid ""
"\n"
-"Press RETURN to continue: "
-msgstr ""
+"Configuration file %s is not available.\n"
"\n"
-"Faites ENTR pour continuer :"
-
-# ==========================
-# More missed strings 97-Dec-9 -CM (from LYMessages_en.h)
-#: src/LYMail.c:1679 src/LYMail.c:1681
-msgid "Send this message? (y/n) "
-msgstr "Envoyer ce message? (o/n)"
-
-#: src/LYMail.c:1681 src/LYMail.c:1683
-msgid "Send this comment? (y/n) "
-msgstr "Envoyer ce commentaire? (o/n) "
-
-# Must find context of APPEND_SIG_FILE assume
-# printf (APPEND_SIG_FILE, sig_filename);
-# ie "Append '~/.signature'? (y/n) "
-#: src/LYMail.c:1694 src/LYMail.c:1696 src/LYNews.c:305 src/LYNews.c:306
-msgid "Append '%s'? (y/n) "
-msgstr "Adjoindre '%s'? (o/n) "
-
-#: src/LYMail.c:1835 src/LYMail.c:1837
-msgid "Sending your message..."
-msgstr "Envoi de votre message..."
-
-#: src/LYMain.c:536 src/LYMain.c:539 src/LYMain.c:564
-msgid "No Winsock found, sorry."
-msgstr ""
-
-#: src/LYMain.c:687 src/LYMain.c:690 src/LYMain.c:722
-msgid "You MUST define a valid TMP or TEMP area!\n"
msgstr ""
+"\n"
+"Le fichier de configuration %s n'est pas disponible.\n"
+"\n"
-#: src/LYMain.c:1038 src/LYMain.c:1051 src/LYMain.c:1058 src/LYMain.c:1060 src/LYMain.c:1068 src/LYMain.c:1071 src/LYMainLoop.c:142 src/LYMainLoop.c:145
-msgid "Trace Log open failed. Trace off!."
-msgstr "Échec d'ouverture du journal de parcours. Annuler la commande!"
-
-#: src/LYMain.c:1071 src/LYMain.c:1088 src/LYMain.c:1091
-msgid "Jump to (use '?' for list): "
-msgstr "Accès à (entrez '?' pour la liste des raccourcis) : "
-
-# src/LYList.h
-# msgid "Lynx List Page"
-# msgstr "Page de références Lynx"
# src/LYMain.c
-#: src/LYMain.c:1144 src/LYMain.c:1161 src/LYMain.c:1163
+#: src/LYMain.c:1388
msgid ""
"\n"
"Lynx character sets not declared.\n"
@@ -6025,724 +4230,170 @@ msgstr ""
"Jeux de caractères Lynx non précisés.\n"
"\n"
-#: src/LYMain.c:1203 src/LYMain.c:1220
+#: src/LYMain.c:1417
msgid ""
"\n"
-"Lynx file %s is not available.\n"
+"Lynx edit map not declared.\n"
"\n"
msgstr ""
+"\n"
+"Relevé de liens Lynx non déclaré.\n"
+"\n"
-#: src/LYMain.c:1206
+#: src/LYMain.c:1446
+#, c-format
msgid ""
"\n"
-"Lynxile file %s is not available.\n"
+"Lynx file %s is not available.\n"
"\n"
msgstr ""
"\n"
-"Le fichier Lynxile %s n'est pas disponible.\n"
+"Le fichier Lynx %s n'est pas disponible.\n"
"\n"
-# msgid "Default Bookmark File"
-# msgstr "fichier de signets par défaut"
-# msgid "Default Bookmark File"
-# msgstr "fichier de signets implicite"
-#: src/LYMain.c:1652 src/LYMain.c:1684 src/LYMain.c:1687 src/LYrcFile.c:102
-msgid "Default Bookmark File"
-msgstr "fichier signets implicite"
+#: src/LYMain.c:1704
+msgid "Warning:"
+msgstr "Attention:"
-#: src/LYMain.c:2444
-msgid ""
-"\n"
-"%s Version %s (%.*s)\n"
-msgstr ""
+#: src/LYMain.c:2247
+msgid "persistent cookies state will be changed in next session only."
+msgstr "L'état des cookies persistant ne seront changés qu'au cours de la prochaine session."
+
+#: src/LYMain.c:2477 src/LYMain.c:2525
+#, c-format
+msgid "Lynx: ignoring unrecognized charset=%s\n"
+msgstr "Lynx: ignorer le charset=%s inconnu\n"
-#: src/LYMain.c:2451 src/LYMain.c:2489 src/LYMain.c:2510 src/LYMain.c:2511
+#: src/LYMain.c:3047
+#, c-format
+msgid "%s Version %s (%s)\n"
+msgstr "%s Version %s (%s)\n"
+
+#: src/LYMain.c:3072
+#, c-format
+msgid "Built on %s %s %s\n"
+msgstr "Compilé le %s %s %s\n"
+
+#: src/LYMain.c:3077
msgid "Copyrights held by the University of Kansas, CERN, and other contributors.\n"
-msgstr "Copyright s'est tenu par l'université du Kansas, du CERN, et d'autres contribuants\n"
+msgstr "Copyright tenu par l'université du Kansas, du CERN, et d'autres contribuants\n"
-#: src/LYMain.c:2453 src/LYMain.c:2491 src/LYMain.c:2512 src/LYMain.c:2513
+#: src/LYMain.c:3079
msgid "Distributed under the GNU General Public License.\n"
msgstr "Distribué sous le permis de grand public de GNU\n"
-#: src/LYMain.c:2455 src/LYMain.c:2493 src/LYMain.c:2514 src/LYMain.c:2515
+#: src/LYMain.c:3081
msgid ""
"See http://lynx.browser.org/ and the online help for more information.\n"
"\n"
-msgstr "Voyez http://lynx.browser.org / et d'aide en ligne pour plus d'information.\n"
-
-#: src/LYMain.c:2486 src/LYMain.c:2507 src/LYMain.c:2508
-msgid "%s Version %s %s"
-msgstr "%s Version %s %s"
-
-#: src/LYMainLoop.c:300 src/LYMainLoop.c:307 src/LYMainLoop.c:896 src/LYMainLoop.c:915 src/LYMainLoop.c:4610 src/LYMainLoop.c:4641 src/LYMainLoop.c:4642 src/LYMainLoop.c:4774 src/LYMainLoop.c:4805 src/LYMainLoop.c:4806
-msgid "Bookmark features are currently disabled."
-msgstr "Les fonctions de signets sont présentement désactivées."
-
-#: src/LYMainLoop.c:304 src/LYMainLoop.c:311
-msgid "Bookmark files cannot be traversed (only http URLs)."
-msgstr "Les fichiers de signets ne peuvent être parcourus (seuls les URL http)"
-
-#: src/LYMainLoop.c:316 src/LYMainLoop.c:323 src/LYMainLoop.c:846 src/LYMainLoop.c:857 src/LYMainLoop.c:911 src/LYMainLoop.c:939
-msgid "Lynx Bookmarks"
-msgstr ""
-
-#: src/LYMainLoop.c:325 src/LYMainLoop.c:332 src/LYMainLoop.c:4801 src/LYMainLoop.c:4832 src/LYMainLoop.c:4833
-msgid "Unable to open bookmark file, use 'a' to save a link first"
-msgstr "Impossible d'ouvrir le fichier; tapez 'a' pour enreg. un lien d'abord"
-
-#: src/LYMainLoop.c:640 src/LYMainLoop.c:645 src/LYMainLoop.c:647 src/LYMainLoop.c:652
-msgid ""
-"\n"
-"lynx: Can't access startfile %s\n"
msgstr ""
+"Voyez http://lynx.browser.org / et d'aide en ligne pour plus d'information.\n"
"\n"
-"lynx : accès impossible au fichier de départ %s\n"
-
-#: src/LYMainLoop.c:1127 src/LYMainLoop.c:1155 src/LYMainLoop.c:1181 src/LYMainLoop.c:1188 src/LYMainLoop.c:1209 src/LYMainLoop.c:1216 src/LYShowInfo.c:324 src/LYShowInfo.c:341 src/ShowInfo.c:285
-msgid "None"
-msgstr "Aucun(e)"
-
-#: src/LYMainLoop.c:1337 src/LYMainLoop.c:1365
-msgid "Currently viewing document source. Press '' to return to rendered version."
-msgstr ""
-
-#: src/LYMainLoop.c:1355 src/LYMainLoop.c:1383
-msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
-msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-
-#: src/LYMainLoop.c:1367 src/LYMainLoop.c:1395
-msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
-msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-
-#: src/LYMainLoop.c:1369 src/LYMainLoop.c:1397
-msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
-msgstr "Touche DROITE ou <Entr> pour changer d'option"
-
-#: src/LYMainLoop.c:1373 src/LYMainLoop.c:1401
-msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
-msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-
-#: src/LYMainLoop.c:1375 src/LYMainLoop.c:1403
-msgid "(Radio Button) Use right-arrow or <return> to toggle."
-msgstr "Touche DROITE ou <Entr> pour changer d'option"
-
-#: src/LYMainLoop.c:1379 src/LYMainLoop.c:1407
-msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
-msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-
-#: src/LYMainLoop.c:1384 src/LYMainLoop.c:1412
-msgid "(mailto form field) Mail is disallowed so you cannot submit."
-msgstr "Fonction de courrier invalidée; impossible de soumettre l'envoi"
-
-#: src/LYMainLoop.c:1386 src/LYMainLoop.c:1414
-msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
-msgstr "Entrez le texte. <Entr> pour confirmer; touches fléchées pour vous déplacer"
-
-#: src/LYMainLoop.c:1396 src/LYMainLoop.c:1424
-msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
-msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-
-#: src/LYMainLoop.c:1400 src/LYMainLoop.c:1428
-msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
-msgstr "Fonction de courrier invalidée; envoi impossible"
-
-#: src/LYMainLoop.c:1405 src/LYMainLoop.c:1433
-msgid "(Form submit button) Use right-arrow or <return> to submit."
-msgstr "Utilisez la touche DROITE ou <Entr> pour confirmer"
-
-#: src/LYMainLoop.c:1407 src/LYMainLoop.c:1435
-msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache). "
-msgstr ""
-
-#: src/LYMainLoop.c:1412 src/LYMainLoop.c:1440
-msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
-msgstr "Utilisez les touches HAUT/BAS ou le tabulateur pour vous déplacer"
-
-#: src/LYMainLoop.c:1414 src/LYMainLoop.c:1442
-msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
-msgstr "Utilisez la touche DROITE ou <Entr> pour réinitialiser le formulaire"
-
-#: src/LYMainLoop.c:1419 src/LYMainLoop.c:1447
-msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
-msgstr ""
-
-#: src/LYMainLoop.c:1425 src/LYMainLoop.c:1453
-msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
-msgstr "Utilisez la touche DROITE ou <Entr> pour activer le lien"
-
-#: src/LYMainLoop.c:1464 src/LYMainLoop.c:1492
-msgid "--More-- This is a searchable index. Use %s to search."
-msgstr "-Suite- Ceci est un index consultable. Utilisez %s pour la recherche."
-
-#: src/LYMainLoop.c:1469 src/LYMainLoop.c:1497
-msgid "This is a searchable index. Use %s to search."
-msgstr "Ceci est un index consultable. Utilisez %s pour la recherche."
-
-#: src/LYMainLoop.c:1473 src/LYMainLoop.c:1501
-msgid "-- press space for next page --"
-msgstr "- appuyez sur la touche d'espacement pour aller à la page suivante -"
-
-#: src/LYMainLoop.c:1475 src/LYMainLoop.c:1503 src/LYMainLoop.c:1724 src/LYMainLoop.c:1752
-msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
-msgstr "touche d'espac.: page suiv., flèches: se déplacer, '?': aide, 'q': quitter"
-
-#: src/LYMainLoop.c:1477 src/LYMainLoop.c:1505 src/LYMainLoop.c:1726 src/LYMainLoop.c:1754
-msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
-msgstr "Touches fléchées: se déplacer, '?': aide, 'q': quitter, '<-': retour"
-
-# Z)ap Transfer missing from line, since it does nothing
-#: src/LYMainLoop.c:1551 src/LYMainLoop.c:1579
-msgid " Enter text into the field by typing on the keyboard "
-msgstr "Entrez le texte dans la zone à partir du clavier "
-
-#: src/LYMainLoop.c:1553 src/LYMainLoop.c:1581
-msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
-msgstr "Ctrl-U pour supprimer tout le texte, [rapp. arrière] pour effacer caractère"
-
-#: src/LYMainLoop.c:1844 src/LYMainLoop.c:1872 src/LYMainLoop.c:3050 src/LYMainLoop.c:3074
-msgid "Discarding POST data..."
-msgstr "Suppression de données POST..."
-
-# Needs context for LINK_ALREADY_CURRENT
-# Prints "Enter link number to follow: "
-# User enters 5
-# Their cursor was on the 5th link, so it says:
-# "Link number 5 already is current."
-#: src/LYMainLoop.c:1902 src/LYMainLoop.c:1930
-msgid "Link number %d already is current."
-msgstr "Le lien %d est déjà le lien actif."
-
-#: src/LYMainLoop.c:1935 src/LYMainLoop.c:1963 src/LYMainLoop.c:2228 src/LYMainLoop.c:2247 src/LYMainLoop.c:2252 src/LYMainLoop.c:2271 src/LYMainLoop.c:2284 src/LYMainLoop.c:2308 src/LYMainLoop.c:2365 src/LYMainLoop.c:2389 src/LYMainLoop.c:2466 src/LYMainLoop.c:2490
-msgid "You are already at the beginning of this document."
-msgstr "Vous êtes déjà au début du document."
-
-#: src/LYMainLoop.c:1937 src/LYMainLoop.c:1965 src/LYMainLoop.c:2216 src/LYMainLoop.c:2240 src/LYMainLoop.c:2262 src/LYMainLoop.c:2286 src/LYMainLoop.c:2299 src/LYMainLoop.c:2323 src/LYMainLoop.c:2407 src/LYMainLoop.c:2431 src/LYMainLoop.c:2509 src/LYMainLoop.c:2533
-msgid "You are already at the end of this document."
-msgstr "Vous êtes déjà à la fin du document."
-
-#: src/LYMainLoop.c:1941 src/LYMainLoop.c:1969
-msgid "You are already at page %d of this document."
-msgstr "Vous êtes déjà à la page %d du document."
-
-#: src/LYMainLoop.c:1951 src/LYMainLoop.c:1979
-msgid "You have entered an invalid link number."
-msgstr "Vous avez entré un numéro de lien invalide."
-
-#: src/LYMainLoop.c:2021 src/LYMainLoop.c:2049 src/LYMainLoop.c:3792 src/LYMainLoop.c:3816
-msgid "Reloading document. Any form entries will be lost!"
-msgstr "Rechargement du document. Toutes les entrées seront effacées!"
-
-#: src/LYMainLoop.c:2052 src/LYMainLoop.c:2082 src/LYMainLoop.c:2086 src/LYMainLoop.c:2114 src/LYMainLoop.c:2120 src/LYMainLoop.c:2146 src/LYMainLoop.c:2147 src/LYMainLoop.c:2171 src/LYMainLoop.c:3767 src/LYMainLoop.c:3791
-msgid "Document will not be reloaded!"
-msgstr "Le document ne sera pas rechargé!"
-
-#: src/LYMainLoop.c:2066 src/LYMainLoop.c:2094
-msgid "Historical comment parsing ON (Minimal is overridden)!"
-msgstr "Analyse historique ACTIVÉE (analyse minimale annulée)"
-#: src/LYMainLoop.c:2067 src/LYMainLoop.c:2095
-msgid "Historical comment parsing OFF (Minimal is in effect)!"
-msgstr "Analyse historique DÉSACTIVÉE (analyse minimale en cours)"
-
-#: src/LYMainLoop.c:2070 src/LYMainLoop.c:2098
-msgid "Historical comment parsing ON (Valid is overridden)!"
-msgstr "Analyse historique ACTIVÉE (analyse de validation annulée)"
-
-#: src/LYMainLoop.c:2071 src/LYMainLoop.c:2099
-msgid "Historical comment parsing OFF (Valid is in effect)!"
-msgstr "Analyse historique DÉSACTIVÉE (analyse de validation en cours)"
-
-#: src/LYMainLoop.c:2101 src/LYMainLoop.c:2127
-msgid "Minimal comment parsing ON (and in effect)!"
-msgstr "Analyse minimale ACTIVÉE (et en cours)"
-
-#: src/LYMainLoop.c:2102 src/LYMainLoop.c:2128
-msgid "Minimal comment parsing OFF (Valid is in effect)!"
-msgstr "Analyse minimale DÉSACTIVÉE (analyse de validation en cours)"
-
-#: src/LYMainLoop.c:2105 src/LYMainLoop.c:2131
-msgid "Minimal comment parsing ON (but Historical is in effect)!"
-msgstr "Analyse minimale ACTIVÉE (mais l'analyse historique est en cours)"
-
-#: src/LYMainLoop.c:2106 src/LYMainLoop.c:2132
-msgid "Minimal comment parsing OFF (Historical is in effect)!"
-msgstr "Analyse minimale DÉSACTIVÉE (l'analyse historique est en cours)"
-
-#: src/LYMainLoop.c:2133 src/LYMainLoop.c:2157
-msgid "Soft double-quote parsing ON!"
-msgstr "Analyse à tolérance de fautes (soft double-quote) ACTIVÉE"
-
-#: src/LYMainLoop.c:2134 src/LYMainLoop.c:2158
-msgid "Soft double-quote parsing OFF!"
-msgstr "Analyse à tolérance de fautes (soft double-quote) DÉSACTIVÉE"
-
-#: src/LYMainLoop.c:2174 src/LYMainLoop.c:2198
-msgid "Now using SortaSGML parsing of HTML!"
-msgstr "Analyse du HTML à l'aide de SortaSGML."
-
-#: src/LYMainLoop.c:2175 src/LYMainLoop.c:2199
-msgid "Now using TagSoup parsing of HTML."
-msgstr "Analyse du HTML à l'aide de TagSoup."
-
-# BEGINNING of second set
-#: src/LYMainLoop.c:2186 src/LYMainLoop.c:2203 src/LYMainLoop.c:2204 src/LYMainLoop.c:2210
-msgid "Are you sure you want to quit? [Y] "
-msgstr "Désirez-vous vraiment quitter? [O]"
-
-#: src/LYMainLoop.c:2196 src/LYMainLoop.c:2201 src/LYMainLoop.c:2213 src/LYMainLoop.c:2214 src/LYMainLoop.c:2218 src/LYMainLoop.c:2219 src/LYMainLoop.c:2220 src/LYMainLoop.c:2225
-msgid "Excellent!!!"
-msgstr "Excellent!"
-
-# msgid "You are already at the beginning of this document."
-# msgstr "Vous êtes déjà au début du document."
-# msgid "You are already at the beginning of this document."
-# msgstr "Vous êtes déjà au début du document."
-#: src/LYMainLoop.c:2436 src/LYMainLoop.c:2460
-msgid "There are no links above this line of the document."
-msgstr "Il n'y a pas de lien au-delà de cette ligne dans le document"
-
-#: src/LYMainLoop.c:2492 src/LYMainLoop.c:2516
-msgid "There are no links below this line of the document."
-msgstr "Il n'y a pas de lien en deçà de cette ligne dans le document"
+#: src/LYMain.c:3800
+#, c-format
+msgid "USAGE: %s [options] [file]\n"
+msgstr "USAGE : %s [options] [fichier]\n"
-#: src/LYMainLoop.c:2664 src/LYMainLoop.c:2688
-msgid "Skipping %s"
-msgstr "Ignoré : %s"
+#: src/LYMain.c:3801
+msgid "Options are:\n"
+msgstr "Les options sont :\n"
-#: src/LYMainLoop.c:2702 src/LYMainLoop.c:2726
-msgid "You are already at the first document"
-msgstr "Vous êtes déjà au premier document."
+#: src/LYMain.c:4060
+#, c-format
+msgid "%s: Invalid Option: %s\n"
+msgstr "%s : Option non valide : %s\n"
-#: src/LYMainLoop.c:2714 src/LYMainLoop.c:2738 src/LYMainLoop.c:3142 src/LYMainLoop.c:3166
-msgid "You are not on a form submission button or normal link."
-msgstr "Vous n'êtes pas à un bouton Envoyer ou un lien normal."
+#: src/LYMainLoop.c:512
+#, c-format
+msgid "Internal error: Invalid mouse link %d!"
+msgstr "Erreur interne: lien pour la souris %d invalide"
-#: src/LYMainLoop.c:2779 src/LYMainLoop.c:2803
-msgid "file: ACTIONs are disallowed!"
-msgstr "L'attribut ACTION n'est pas permis avec l'URL 'file:'"
-
-#: src/LYMainLoop.c:2831 src/LYMainLoop.c:2855
-msgid "This special URL cannot be a form ACTION!"
-msgstr "Cet URL spécial ne peut être un attribut ACTION"
+#.
+#. * Make a name for this new URL.
+#.
+#: src/LYMainLoop.c:625 src/LYMainLoop.c:5139
+msgid "A URL specified by the user"
+msgstr "Un URL spécifié par l'utilisateur"
-#: src/LYMainLoop.c:2849 src/LYMainLoop.c:2873
+#: src/LYMainLoop.c:1114
msgid "Enctype multipart/form-data not yet supported! Cannot submit."
msgstr "«Enctype multipart/form-data» non fonctionnel. Envoi impossible."
-#: src/LYMainLoop.c:2906 src/LYMainLoop.c:2930
-msgid "file: URLs via served links are disallowed!"
-msgstr "L'URL 'file:' n'est pas permis dans les liens du serveur"
-
-#: src/LYMainLoop.c:2910 src/LYMainLoop.c:2934
-msgid "file: URLs via bookmarks are disallowed!"
-msgstr "L'URL 'file:' n'est pas permis dans les signets"
-
-#: src/LYMainLoop.c:2950 src/LYMainLoop.c:2974
-msgid "This special URL is not allowed in external documents!"
-msgstr "Cet URL spécial n'est pas permis dans les documents externes!"
-
-#: src/LYMainLoop.c:3127 src/LYMainLoop.c:3151 src/LYMainLoop.c:3238 src/LYMainLoop.c:3262 src/LYMainLoop.c:3319 src/LYMainLoop.c:3343
-msgid "Goto a random URL is disallowed!"
-msgstr "Accès à un URL arbitraire invalidé."
-
-#: src/LYMainLoop.c:3175 src/LYMainLoop.c:3199 src/LYMainLoop.c:3257 src/LYMainLoop.c:3281
-msgid "You cannot edit File Management URLs"
-msgstr ""
-
-#: src/LYMainLoop.c:3195 src/LYMainLoop.c:3219
-msgid "Edit the current link's URL: "
-msgstr ""
-
-#: src/LYMainLoop.c:3277 src/LYMainLoop.c:3301
-msgid "Current document has POST data."
-msgstr "Le document en cours contient des données POST."
-
-#: src/LYMainLoop.c:3282 src/LYMainLoop.c:3306
-msgid "Edit this document's URL: "
-msgstr "Éditer l'URL de ce document :"
-
-#: src/LYMainLoop.c:3342 src/LYMainLoop.c:3366
-msgid "URL to open: "
-msgstr "URL à ouvrir: "
-
-#: src/LYMainLoop.c:3404 src/LYMainLoop.c:3428 src/LYMainLoop.c:3448 src/LYMainLoop.c:3472
-msgid "Edit the current Goto URL: "
-msgstr "Éditer la commande Goto URL en cours :"
-
-#: src/LYMainLoop.c:3407 src/LYMainLoop.c:3431 src/LYMainLoop.c:3451 src/LYMainLoop.c:3475
-msgid "Edit the previous Goto URL: "
-msgstr "Éditer la commande Goto URL précédente :"
-
-#: src/LYMainLoop.c:3409 src/LYMainLoop.c:3433 src/LYMainLoop.c:3453 src/LYMainLoop.c:3477
-msgid "Edit a previous Goto URL: "
-msgstr "Éditer une commande Goto URL précédente :"
-
-#: src/LYMainLoop.c:3483 src/LYMainLoop.c:3507
-msgid "You are not allowed to goto \"file:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «file:»"
-
-#: src/LYMainLoop.c:3491 src/LYMainLoop.c:3515
-msgid "You are not allowed to goto \"lynxexec:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «lynxexec:»"
-
-#: src/LYMainLoop.c:3499 src/LYMainLoop.c:3523
-msgid "You are not allowed to goto \"lynxprog:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «lynxprog:»"
-
-#: src/LYMainLoop.c:3503 src/LYMainLoop.c:3527
-msgid "You are not allowed to goto \"lynxcgi:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «lynxcgi:»"
-
-#: src/LYMainLoop.c:3508 src/LYMainLoop.c:3532
-msgid "Goto a non-http URL is disallowed!"
-msgstr "Accès à un URL non http invalidé."
-
-#: src/LYMainLoop.c:3512 src/LYMainLoop.c:3536
-msgid "You are not allowed to goto \"cso:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «cso:»"
-
-#: src/LYMainLoop.c:3516 src/LYMainLoop.c:3540
-msgid "You are not allowed to goto \"finger:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «finger:»"
-
-#: src/LYMainLoop.c:3520 src/LYMainLoop.c:3544
-msgid "You are not allowed to goto \"ftp:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «ftp:»"
-
-#: src/LYMainLoop.c:3524 src/LYMainLoop.c:3548
-msgid "You are not allowed to goto \"gopher:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «gopher:»"
-
-#: src/LYMainLoop.c:3528 src/LYMainLoop.c:3552
-msgid "You are not allowed to goto \"http:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «http:»"
-
-#: src/LYMainLoop.c:3532 src/LYMainLoop.c:3556
-msgid "You are not allowed to goto \"https:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «https:»"
-
-#: src/LYMainLoop.c:3536 src/LYMainLoop.c:3560
-msgid "You are not allowed to goto \"mailto:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «mailto:»"
-
-#: src/LYMainLoop.c:3540 src/LYMainLoop.c:3564
-msgid "You are not allowed to goto \"news:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «news:»"
-
-#: src/LYMainLoop.c:3544 src/LYMainLoop.c:3568
-msgid "You are not allowed to goto \"nntp:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «nntp:»"
-
-#: src/LYMainLoop.c:3548 src/LYMainLoop.c:3572
-msgid "You are not allowed to goto \"rlogin:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «rlogin:»"
-
-#: src/LYMainLoop.c:3552 src/LYMainLoop.c:3576
-msgid "You are not allowed to goto \"snews:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «snews:»"
-
-#: src/LYMainLoop.c:3556 src/LYMainLoop.c:3580
-msgid "You are not allowed to goto \"telnet:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «telnet:»"
-
-#: src/LYMainLoop.c:3560 src/LYMainLoop.c:3584
-msgid "You are not allowed to goto \"tn3270:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «tn3270:»"
-
-#: src/LYMainLoop.c:3564 src/LYMainLoop.c:3588
-msgid "You are not allowed to goto \"wais:\" URLs"
-msgstr "Vous ne pouvez accéder aux URL «wais:»"
-
-#: src/LYMainLoop.c:3571 src/LYMainLoop.c:3595
-msgid "This special URL is not allowed as a goto!"
-msgstr "Cet URL spécial n'est pas accessible par la commande G) Aller"
-
-#: src/LYMainLoop.c:3610 src/LYMainLoop.c:3634
+#.
+#. * Make a name for this help file.
+#.
+#: src/LYMainLoop.c:3097
msgid "Help Screen"
-msgstr ""
-
-#: src/LYMainLoop.c:3629 src/LYMainLoop.c:3653
-msgid "No index is currently available."
-msgstr "Aucun index n'est présentement disponible."
+msgstr "L'écran de Aide"
-#: src/LYMainLoop.c:3695 src/LYMainLoop.c:3719
-msgid "Do you really want to go to the Main screen? (y/n) [n] "
-msgstr "Voulez-vous vraiment aller à l'écran principal? (o/n) [n] "
-
-#: src/LYMainLoop.c:3839 src/LYMainLoop.c:3843 src/LYOptions.c:3787
-msgid "Options Menu"
-msgstr ""
-
-#: src/LYMainLoop.c:3936 src/LYMainLoop.c:3960
-msgid "Not a searchable indexed document -- press '/' to search for a text string"
-msgstr "Document non indexé - faites '/' pour chercher une séquence de texte."
-
-#: src/LYMainLoop.c:4013 src/LYMainLoop.c:4037
-msgid "No owner is defined for this file so you cannot send a comment"
-msgstr "Aucun propriétaire pour ce fichier; impossible d'envoyer un commentaire"
-
-#: src/LYMainLoop.c:4018 src/LYMainLoop.c:4042
-msgid "Mail is disallowed so you cannot send a comment"
-msgstr "Fonction de courrier invalidée; impossible d'envoyer un commentaire"
-
-#: src/LYMainLoop.c:4021 src/LYMainLoop.c:4045
-msgid "Do you wish to send a comment? [N]"
-msgstr "Voulez-vous envoyer un commentaire? [N]"
-
-#: src/LYMainLoop.c:4054 src/LYMainLoop.c:4078
-msgid "No owner is defined. Use %s? [N] "
-msgstr "Aucun propriétaire n'est défini. Utiliser %s? [N] "
-
-#: src/LYMainLoop.c:4187 src/LYMainLoop.c:4211 src/LYOptions.c:384 src/LYOptions.c:445
-msgid "The 'e'dit command is currently disabled."
-msgstr "La commande 'e' (Éditer) est présentement désactivée."
-
-#: src/LYMainLoop.c:4209 src/LYMainLoop.c:4238
-msgid "System error - failure to get status."
-msgstr "Erreur système - impossible d'obtenir l'état."
-
-#: src/LYMainLoop.c:4266 src/LYMainLoop.c:4298
-msgid "No editor is defined!"
-msgstr "Aucun éditeur n'est défini."
-
-#: src/LYMainLoop.c:4281 src/LYMainLoop.c:4313
-msgid "Do you really want to delete this link from your bookmark file? (y/n)"
-msgstr "Voulez-vous vraiment supprimer ce lien de vos signets? (o/n)"
-
-#: src/LYMainLoop.c:4350 src/LYMainLoop.c:4382
-msgid "The 'p'rint command is currently disabled."
-msgstr "La commande 'p' (Imprimer) est présentement désactivée."
-
-#: src/LYMainLoop.c:4424 src/LYMainLoop.c:4455 src/LYMainLoop.c:4456
-msgid "No previously visited links available!"
-msgstr "Aucun lien déjà activé n'est disponible"
-
-#: src/LYMainLoop.c:4445 src/LYMainLoop.c:4476 src/LYMainLoop.c:4477
-msgid "Document has no Toolbar links or Banner."
-msgstr "Aucun lien vers une barre d'outil ou une bannière"
-
-# msgid "Memory exhausted! Program aborted!"
-# msgstr "Mémoire insuffisante. Abandon!"
-#: src/LYMainLoop.c:4482 src/LYMainLoop.c:4513 src/LYMainLoop.c:4514
-msgid "Directory/File Manager not available"
-msgstr "Gestionnaire de fichier/répertoire non disponible"
-
-#: src/LYMainLoop.c:4617 src/LYMainLoop.c:4619 src/LYMainLoop.c:4623 src/LYMainLoop.c:4626 src/LYMainLoop.c:4632 src/LYMainLoop.c:4634
-msgid ""
-msgstr ""
-"Date: 1998-11-02 00:47:46-0500\n"
-"From: jim <jim@netman2.bcpl.net>\n"
-"Content-Type: text/plain; charset=\n"
-"Xgettext-Options: -f /j/NetBSD/src/lynx/lynx-translations/files.t -F -j -p po -d fr\n"
-"Files: src/GridText.c src/HTAlert.c src/HTFWriter.c src/HTInit.c src/HTML.c src/LYBookmark.c src/LYCgi.c src/LYCharUtils.c src/LYClean.c src/LYCookie.c src/LYCurses.c src/LYDownload.c src/LYEdit.c src/LYExtern.c src/LYForms.c src/LYGetFile.c src/LYHistory.c src/LYJump.c src/LYKeymap.c src/LYLeaks.c src/LYList.c src/LYLocal.c src/LYMail.c src/LYMain.c src/LYMainLoop.c src/LYMap.c src/LYNews.c src/LYOptions.c src/LYPrint.c src/LYReadCFG.c src/LYSearch.c src/LYShowInfo.c src/LYStrings.c src/LYStyle.c src/LYTraversal.c src/LYUpload.c src/LYUtils.c src/LYexit.c src/LYrcFile.c WWW/Library/Implementation/HTAABrow.c WWW/Library/Implementation/HTAAProt.c WWW/Library/Implementation/HTAccess.c WWW/Library/Implementation/HTFTP.c WWW/Library/Implementation/HTFWriter.c WWW/Library/Implementation/HTFinger.c WWW/Library/Implementation/HTFormat.c WWW/Library/Implementation/HTGopher.c WWW/Library/Implementation/HTMIME.c WWW/Library/Implementation/HTNews.c WWW/Library/Implementation/HTRules.c "
-"WWW/Library/Implementation/HTStyle.c WWW/Library/Implementation/HTTCP.c WWW/Library/Implementation/HTTP.c WWW/Library/Implementation/HTVMSUtils.c WWW/Library/Implementation/HTWAIS.c WWW/Library/Implementation/HTWSRC.c\n"
-
-#: src/LYMainLoop.c:4617 src/LYMainLoop.c:4619 src/LYMainLoop.c:4623 src/LYMainLoop.c:4626 src/LYMainLoop.c:4632 src/LYMainLoop.c:4634 src/LYMainLoop.c:4648 src/LYMainLoop.c:4650 src/LYMainLoop.c:4654 src/LYMainLoop.c:4657 src/LYMainLoop.c:4663 src/LYMainLoop.c:4665 src/LYMainLoop.c:4696 src/LYMainLoop.c:4697
-msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
-msgstr "D) Enreg. le document, L) Enreg. le lien ou C) Annuler? (d,l,c) : "
-
-#: src/LYMainLoop.c:4649 src/LYMainLoop.c:4651 src/LYMainLoop.c:4655 src/LYMainLoop.c:4658 src/LYMainLoop.c:4664 src/LYMainLoop.c:4666 src/LYMainLoop.c:4691 src/LYMainLoop.c:4710 src/LYMainLoop.c:4722 src/LYMainLoop.c:4723 src/LYMainLoop.c:4731 src/LYMainLoop.c:4741 src/LYMainLoop.c:4742 src/LYMainLoop.c:4762 src/LYMainLoop.c:4763
-msgid "Documents from forms with POST content cannot be saved as bookmarks."
-msgstr "Les documents ayant un contenu POST ne peuvent être marqués d'un signet"
-
-#: src/LYMainLoop.c:4700 src/LYMainLoop.c:4731 src/LYMainLoop.c:4732
-msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
-msgstr "L) Enreg. le Lien sous fichier de signets ou C) Annuler? (l,c) : "
-
-#: src/LYMainLoop.c:4721 src/LYMainLoop.c:4752 src/LYMainLoop.c:4753
-msgid "Cannot save form fields/links"
-msgstr "Impossible d'enregistrer les zones ou les liens d'un formulaire."
-
-#: src/LYMainLoop.c:4738 src/LYMainLoop.c:4769 src/LYMainLoop.c:4770
-msgid "There are no links in this bookmark file!"
-msgstr "Il n'y a aucun lien dans ce fichier!"
-
-#: src/LYMainLoop.c:4741 src/LYMainLoop.c:4772 src/LYMainLoop.c:4773
-msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
-msgstr "D) Enreg. le Document sous fichier de signets ou C) Annuler? (d,c) : "
-
-#: src/LYMainLoop.c:4765 src/LYMainLoop.c:4796 src/LYMainLoop.c:4797
-msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
-msgstr "Historique, Information, Menu et Références ne peuvent être des signets"
-
-#: src/LYMainLoop.c:4791 src/LYMainLoop.c:4822 src/LYMainLoop.c:4823
-msgid "Lynx bookmark file"
-msgstr ""
-
-#: src/LYMainLoop.c:4815 src/LYMainLoop.c:4846 src/LYMainLoop.c:4847
-msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
-msgstr "Lancement du sous-processus DCL; «logout» pour retourner à Lynx.\n"
-
-#: src/LYMainLoop.c:4818 src/LYMainLoop.c:4849 src/LYMainLoop.c:4850
-msgid "Type EXIT to return to Lynx.\n"
-msgstr ""
-
-#: src/LYMainLoop.c:4820 src/LYMainLoop.c:4851 src/LYMainLoop.c:4852
-msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
-msgstr "Lancement du shell implicite. Entrez «exit» pour retourner à Lynx.\n"
-
-#: src/LYMainLoop.c:4829 src/LYMainLoop.c:4860 src/LYMainLoop.c:4861
-msgid "Spawning is currently disabled."
-msgstr "Le lancement est présentement désactivé."
-
-#: src/LYMainLoop.c:4842 src/LYMainLoop.c:4873 src/LYMainLoop.c:4874
-msgid "The 'd'ownload command is currently disabled."
-msgstr "La commande «d» (décharger) est présentement désactivée."
-
-#: src/LYMainLoop.c:4862 src/LYMainLoop.c:4893 src/LYMainLoop.c:4894
-msgid "Form has a mailto action! Cannot download."
-msgstr "Le formulaire contient une entité 'mailto:'. Déchargement impossible."
-
-#: src/LYMainLoop.c:4873 src/LYMainLoop.c:4904 src/LYMainLoop.c:4905
-msgid "You cannot download an input field."
-msgstr ""
-
-#: src/LYMainLoop.c:4880 src/LYMainLoop.c:4911 src/LYMainLoop.c:4912
-msgid "You cannot download cookies."
-msgstr "Vous ne pouvez télécharger les cookies."
-
-#: src/LYMainLoop.c:4887 src/LYMainLoop.c:4918 src/LYMainLoop.c:4919
-msgid "You cannot download a printing option."
-msgstr "Impossible de télédécharger une option d'impression"
-
-#: src/LYMainLoop.c:4896 src/LYMainLoop.c:4927 src/LYMainLoop.c:4928
-msgid "You cannot download an upload option."
-msgstr "Impossible de télédécharger une option de chargement."
+#: src/LYMainLoop.c:3231
+msgid "System Index"
+msgstr "Index système"
-#: src/LYMainLoop.c:4976 src/LYMainLoop.c:5008 src/LYMainLoop.c:5009
-msgid "This special URL cannot be downloaded!"
-msgstr "Cet URL spécial ne peut être déchargé!"
+#: src/LYMainLoop.c:3611 src/LYMainLoop.c:5347
+msgid "Entry into main screen"
+msgstr "Entrée dans l'écran principal"
-#: src/LYMainLoop.c:4980 src/LYMainLoop.c:5012 src/LYMainLoop.c:5013
-msgid "You cannot download a mailto: link."
+#: src/LYMainLoop.c:3897
+msgid "No next document present"
msgstr ""
-#: src/LYMainLoop.c:5034 src/LYMainLoop.c:5053 src/LYMainLoop.c:5054
-msgid "Nothing to download."
-msgstr "Il n'y a rien à télédécharger."
-
-#: src/LYMainLoop.c:5101 src/LYMainLoop.c:5121 src/LYMainLoop.c:5122
-msgid "Trace ON!"
-msgstr "Traçage ACTIVÉ"
-
-#: src/LYMainLoop.c:5102 src/LYMainLoop.c:5122 src/LYMainLoop.c:5123
-msgid "Trace OFF!"
-msgstr "Traçage DÉSACTIVÉ"
-
-#: src/LYMainLoop.c:5111 src/LYMainLoop.c:5131 src/LYMainLoop.c:5132
-msgid "No trace log has been started for this session."
-msgstr "Aucun journal de parcours n'a été lancé pour cette session."
-
-#: src/LYMainLoop.c:5157 src/LYMainLoop.c:5182 src/LYMainLoop.c:5183
-msgid "Links will be included for all images! Reloading..."
-msgstr "Les liens seront inclus pour toutes les images! Chargement..."
-
-#: src/LYMainLoop.c:5158 src/LYMainLoop.c:5183 src/LYMainLoop.c:5184
-msgid "Standard image handling restored! Reloading..."
-msgstr "Traitement d'image standard restauré. Chargement... "
-
-#: src/LYMainLoop.c:5169 src/LYMainLoop.c:5194 src/LYMainLoop.c:5195
-msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
-msgstr "'pseudo-ALT' sera assigné aux images incluses sans l'attribut ALT! Chargement..."
-
-#: src/LYMainLoop.c:5170 src/LYMainLoop.c:5195 src/LYMainLoop.c:5196
-msgid "Inlines without an ALT string specified will be ignored! Reloading..."
-msgstr "Les images incluses sans l'attribut ALT seront ignorées! Chargement..."
-
-#: src/LYMainLoop.c:5179 src/LYMainLoop.c:5204 src/LYMainLoop.c:5205
-msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
-msgstr "Le mode 8-bits ou CJK est réglé à DÉSACTIVÉ! Chargement..."
-
-#: src/LYMainLoop.c:5180 src/LYMainLoop.c:5205 src/LYMainLoop.c:5206
-msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
-msgstr "Le mode 8-bits ou CJK est réglé à ACTIVÉ! Chargement..."
-
-#: src/LYMainLoop.c:5195 src/LYMainLoop.c:5220 src/LYMainLoop.c:5221
-msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
-msgstr "Envoyer requête HEAD pour D)ocument, L)ien ou C) Annuler? (d,l,c) : "
-
-#: src/LYMainLoop.c:5201 src/LYMainLoop.c:5226 src/LYMainLoop.c:5227 src/LYMainLoop.c:5295 src/LYMainLoop.c:5320 src/LYMainLoop.c:5321
-msgid "Sorry, the document is not an http URL."
-msgstr "Désolé, le document n'est pas un URL http."
-
-#: src/LYMainLoop.c:5210 src/LYMainLoop.c:5235 src/LYMainLoop.c:5236 src/LYMainLoop.c:5266 src/LYMainLoop.c:5291 src/LYMainLoop.c:5292
-msgid "Document from POST action, HEAD may not be understood. Proceed?"
-msgstr "Document de type POST; l'élément HEAD peut être inconnu. Procéder?"
-
-#: src/LYMainLoop.c:5234 src/LYMainLoop.c:5259 src/LYMainLoop.c:5260
-msgid "Sorry, the link is not an http URL."
-msgstr "Désolé, le document n'est pas un URL http."
+#: src/LYMainLoop.c:4206
+msgid "charset for this document specified explicitly, sorry..."
+msgstr "charset pour ce document spécifié éxplicitement, désolé..."
-#: src/LYMainLoop.c:5237 src/LYMainLoop.c:5262 src/LYMainLoop.c:5263
-msgid "Sorry, the ACTION for this form is disabled."
-msgstr "Désolé, l'attribut ACTION est invalidé pour ce formulaire."
-
-#: src/LYMainLoop.c:5243 src/LYMainLoop.c:5268 src/LYMainLoop.c:5269
-msgid "Sorry, the ACTION for this form is not an http URL."
-msgstr "Désolé, l'attribut ACTION pour ce formulaire n'est pas un URL http."
+#: src/LYMainLoop.c:5093
+msgid "cd to:"
+msgstr "changer de répertoire vers:"
-#: src/LYMainLoop.c:5247 src/LYMainLoop.c:5272 src/LYMainLoop.c:5273
-msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
-msgstr "Envoi par méthode POST; l'élément HEAD peut être inconnu. Procéder?"
+#: src/LYMainLoop.c:5120
+msgid "A component of path is not a directory"
+msgstr "Une partie du chemin n'est pas un répertoire."
-#: src/LYMainLoop.c:5276 src/LYMainLoop.c:5301 src/LYMainLoop.c:5302
-msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
-msgstr "Envoyer requête HEAD pour D)ocument ou C) Annuler? (d,c) :"
+#: src/LYMainLoop.c:5123
+msgid "failed to change directory"
+msgstr "Changement de répertoire impossible"
-#: src/LYMainLoop.c:5360 src/LYMainLoop.c:5385 src/LYMainLoop.c:5386
-msgid "Jumping to a shortcut URL is disallowed!"
-msgstr "L'accès à un URL par raccourci est invalidé!"
-
-#: src/LYMainLoop.c:5362 src/LYMainLoop.c:5387 src/LYMainLoop.c:5388
-msgid "No jump file is currently available."
-msgstr "Aucun fichier-raccourci n'est présentement disponible."
-
-# LYMessages_en.h
-#: src/LYMainLoop.c:5428 src/LYMainLoop.c:5453 src/LYMainLoop.c:5454
-msgid "Clear all authorization info for this session?"
-msgstr "Effacer toute l'information d'autorisation pour cette session?"
-
-#: src/LYMainLoop.c:5436 src/LYMainLoop.c:5461 src/LYMainLoop.c:5462
-msgid "Authorization info cleared."
-msgstr "Information d'autorisation effacée."
-
-#: src/LYMainLoop.c:5494 src/LYMainLoop.c:5501 src/LYMainLoop.c:5519 src/LYMainLoop.c:5520 src/LYMainLoop.c:5526 src/LYMainLoop.c:5527
-msgid "List from document with POST data. Reload %s ?"
-msgstr "Liste d'un document avec données POST. Recharger %s ?"
+#: src/LYMainLoop.c:6291
+msgid "Reparsing document under current settings..."
+msgstr "Relecture du document avec les parametres actuels."
-#: src/LYMap.c:194 src/LYMap.c:196
-msgid "Out of memory in LYAddImageMap"
-msgstr ""
+#: src/LYMainLoop.c:6579 src/LYMainLoop.c:6583
+#, c-format
+msgid "Fatal error - could not open output file %s\n"
+msgstr "Erreur fatale - impossible d'ouvrir le fichier de sortie %s\n"
-#: src/LYMap.c:423 src/LYMap.c:425
-msgid "Misdirected client-side image MAP request!"
-msgstr "Erreur de demande d'image référencée client."
+#: src/LYMainLoop.c:7719 src/LYMainLoop.c:7892
+msgid "-index-"
+msgstr "-index-"
-#: src/LYMap.c:436 src/LYMap.c:438 src/LYMap.c:477 src/LYMap.c:479
-msgid "LYNXIMGMAP: Document from Form with POST content. Resubmit?"
-msgstr ""
+#: src/LYMainLoop.c:7829
+msgid "lynx: Can't access startfile"
+msgstr "lynx : accès impossible au fichier de départ"
-# src/LYMap.c
-#: src/LYMap.c:439 src/LYMap.c:441 src/LYMap.c:480 src/LYMap.c:482
-msgid "Image map from POST response not available!"
-msgstr "Image référencée de la réponse POST non disponible"
+#: src/LYMainLoop.c:7842
+msgid "lynx: Start file could not be found or is not text/html or text/plain"
+msgstr "lynx : fichier de départ introuvable ou son mode n'est pas reconnu"
-#: src/LYMap.c:451 src/LYMap.c:453 src/LYMap.c:492 src/LYMap.c:494
-msgid "Client-side image MAP is not accessible!"
-msgstr "L'image référencée client n'est pas accessible."
+#: src/LYMainLoop.c:7843
+msgid " Exiting..."
+msgstr "Sortie"
-#: src/LYMap.c:462 src/LYMap.c:464
-msgid "No client-side image MAPs are available!"
-msgstr "Aucune image référencée client n'est disponible."
+#: src/LYMainLoop.c:7886
+msgid "-more-"
+msgstr "-suite-"
-#: src/LYMap.c:506 src/LYMap.c:508
-msgid "Client-side image MAP is not available!"
-msgstr "L'image référencée client n'est pas disponible."
+#. Enable scrolling.
+#: src/LYNews.c:203
+msgid "You will be posting to:"
+msgstr "Vous postez à : "
-# src/LYNews.c
-# msgid "You will be posting to:"
-# msgstr "Vous envoyez un message à :"
-#: src/LYNews.c:119 src/LYNews.c:120
+#.
+#. * Get the mail address for the From header,
+#. * offering personal_mail_address as default.
+#.
+#: src/LYNews.c:212
msgid ""
"\n"
"\n"
@@ -6752,11 +4403,12 @@ msgstr ""
"\n"
" Veuillez fournir ou éditer l'en-tête Exp. :\n"
-#: src/LYNews.c:126 src/LYNews.c:127 src/LYNews.c:155 src/LYNews.c:156 src/LYNews.c:190 src/LYNews.c:191 src/LYNews.c:264 src/LYNews.c:265 src/LYNews.c:275 src/LYNews.c:276
-msgid "News Post Cancelled!!!"
-msgstr "Envoi des nouvelles annulé!"
-
-#: src/LYNews.c:138 src/LYNews.c:139
+#.
+#. * Get the Subject header, offering the current
+#. * document's title as the default if this is a
+#. * followup rather than a new post. - FM
+#.
+#: src/LYNews.c:230
msgid ""
"\n"
"\n"
@@ -6766,7 +4418,7 @@ msgstr ""
"\n"
" Veuillez fournir ou éditer l'en-tête Objet :\n"
-#: src/LYNews.c:186 src/LYNews.c:187
+#: src/LYNews.c:322
msgid ""
"\n"
"\n"
@@ -6776,706 +4428,585 @@ msgstr ""
"\n"
" Veuillez fournir ou éditer l'en-tête Organisme :\n"
-#: src/LYNews.c:243 src/LYNews.c:244
-msgid "Spawning your selected editor to edit news message"
-msgstr "Lancement de votre éditeur pour éditer un message"
-
-#: src/LYNews.c:292 src/LYNews.c:293
-msgid "Post this message? (y/n) "
-msgstr "Envoyer ce message? (o/n) "
-
-#: src/LYNews.c:363 src/LYNews.c:364
-msgid "Posting to newsgroup(s)..."
-msgstr "Envoi du message..."
-
-#: src/LYOptions.c:85 src/LYOptions.c:146
-msgid "Screen height must be at least 24 lines for the Options menu!"
-msgstr "La hauteur d'écran doit être au moins 24 lignes pour ce menu!"
-
-# msgid "Screen height must be at least 23 lines for the Options menu!"
-# msgstr "La hauteur d'écran doit être au moins 23 lignes pour ce menu!"
-#: src/LYOptions.c:103 src/LYOptions.c:164
-msgid "Screen height must be at least 22 lines for the Options menu!"
-msgstr "La hauteur d'écran doit être au moins 22 lignes pour ce menu!"
-
-#: src/LYOptions.c:338 src/LYOptions.c:399
-msgid "Select "
-msgstr "Choisir "
-
-#: src/LYOptions.c:340 src/LYOptions.c:401
-msgid "capital letter"
-msgstr "majuscule"
-
-#: src/LYOptions.c:342 src/LYOptions.c:403
-msgid " of option line,"
-msgstr " de la ligne d'option,"
-
-#: src/LYOptions.c:349 src/LYOptions.c:410 src/LYOptions.c:1859 src/LYOptions.c:1860 src/LYOptions.c:1919
-msgid " to save,"
-msgstr " pour enregistrer,"
-
-#: src/LYOptions.c:351 src/LYOptions.c:412 src/LYOptions.c:1861 src/LYOptions.c:1862 src/LYOptions.c:1921
-msgid " or "
-msgstr " ou "
-
-#: src/LYOptions.c:357 src/LYOptions.c:418 src/LYOptions.c:1867 src/LYOptions.c:1868 src/LYOptions.c:1927
-msgid " to return to Lynx."
-msgstr " pour retourner à Lynx"
-
-#: src/LYOptions.c:364 src/LYOptions.c:417 src/LYOptions.c:425 src/LYOptions.c:457 src/LYOptions.c:470 src/LYOptions.c:478 src/LYOptions.c:497 src/LYOptions.c:518 src/LYOptions.c:531 src/LYOptions.c:558 src/LYOptions.c:633 src/LYOptions.c:694 src/LYOptions.c:929 src/LYOptions.c:930 src/LYOptions.c:965 src/LYOptions.c:966 src/LYOptions.c:989 src/LYOptions.c:1025 src/LYOptions.c:1459 src/LYOptions.c:1460 src/LYOptions.c:1519 src/LYOptions.c:1731 src/LYOptions.c:1732 src/LYOptions.c:1791 src/LYOptions.c:3084 src/LYOptions.c:3088 src/LYOptions.c:3144
-msgid "Value accepted!"
-msgstr "Valeur acceptée!"
-
-#: src/LYOptions.c:369 src/LYOptions.c:430
-msgid "Command: "
-msgstr "Commande :"
-
-# msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
-# msgstr "Valeur acceptée! NOTA : Lynx est configuré pour XWINDOWS."
-# msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
-# msgstr "Valeur acceptée! NOTA : Lynx n'est pas configuré pour XWINDOWS."
-#: src/LYOptions.c:386 src/LYOptions.c:447
-msgid "You are not allowed to change which editor to use!"
-msgstr "Vous ne pouvez pas choisir un autre éditeur!"
-
-#: src/LYOptions.c:395 src/LYOptions.c:432 src/LYOptions.c:456 src/LYOptions.c:493 src/LYOptions.c:599 src/LYOptions.c:660 src/LYOptions.c:698 src/LYOptions.c:721 src/LYOptions.c:759 src/LYOptions.c:782 src/LYOptions.c:907 src/LYOptions.c:908 src/LYOptions.c:943 src/LYOptions.c:944 src/LYOptions.c:967 src/LYOptions.c:1003 src/LYOptions.c:1959 src/LYOptions.c:1960 src/LYOptions.c:2019
-msgid "Hit RETURN to accept entered data."
-msgstr "Appuyer sur ENTR pour accepter les données entrées."
-
-#: src/LYOptions.c:492 src/LYOptions.c:553
-msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
-msgstr "Valeur acceptée! NOTA : Lynx est configuré pour XWINDOWS!"
-
-#: src/LYOptions.c:495 src/LYOptions.c:556
-msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
-msgstr "Valeur acceptée! NOTA : Lynx n'est PAS configuré pour XWINDOWS!"
-
-#: src/LYOptions.c:501 src/LYOptions.c:562
-msgid "Failed to set DISPLAY variable!"
-msgstr "Impossible de régler la variable AFFICHAGE."
-
-#: src/LYOptions.c:503 src/LYOptions.c:564
-msgid "Failed to clear DISPLAY variable!"
-msgstr "Impossible d'effacer la variable AFFICHAGE."
-
-#: src/LYOptions.c:512 src/LYOptions.c:573
-msgid "Multiple bookmark support is not available."
-msgstr "Le soutien des fichiers multiples n'est pas disponible."
-
-#: src/LYOptions.c:616 src/LYOptions.c:677 src/LYOptions.c:2017 src/LYOptions.c:2018 src/LYOptions.c:2077
-msgid "Use a filepath off your login directory in SHELL syntax!"
-msgstr "Utilisez un chemin de fichier à partir de votre répertoire de connexion"
-
-#: src/LYOptions.c:618 src/LYOptions.c:679 src/LYOptions.c:2019 src/LYOptions.c:2020 src/LYOptions.c:2079
-msgid "Use a filepath off your home directory!"
-msgstr "Utilisez un chemin de fichier à partir de votre répertoire personnel"
-
-#: src/LYOptions.c:636 src/LYOptions.c:697
-msgid "You are not allowed to change the bookmark file!"
-msgstr "Changement du fichier de signets non autorisé!"
-
-#: src/LYOptions.c:818 src/LYOptions.c:878
-msgid "That key requires Advanced User mode."
-msgstr "Cette touche n'est active qu'en mode utilisateur avancé."
-
-#: src/LYOptions.c:1019 src/LYOptions.c:1020 src/LYOptions.c:1079
-msgid "Access to dot files is disabled!"
-msgstr "L'accès aux fichiers cachés est désactivé!"
-
-#: src/LYOptions.c:1066 src/LYOptions.c:1067 src/LYOptions.c:1126 src/LYOptions.c:1127 src/LYOptions.c:1128 src/LYOptions.c:1187
-msgid "Your '%s' terminal does not support color."
-msgstr "Votre terminal '%s' ne permet pas l'affichage couleur."
-
-#: src/LYOptions.c:1069 src/LYOptions.c:1070 src/LYOptions.c:1129 src/LYOptions.c:1130 src/LYOptions.c:1131 src/LYOptions.c:1190
-msgid "Terminal does not support color"
-msgstr "Le terminal ne permet pas l'affichage couleur"
-
-#: src/LYOptions.c:1430 src/LYOptions.c:1431 src/LYOptions.c:1490
-msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
-msgstr "ENTR pour accepter les données; SUPPR pour récupérer les valeurs implicites"
-
-#: src/LYOptions.c:1457 src/LYOptions.c:1458 src/LYOptions.c:1462 src/LYOptions.c:1463 src/LYOptions.c:1517 src/LYOptions.c:1522 src/LYOptions.c:3685
-msgid "WARNING: Misrepresentation of the User-Agent may be a copyright violation!"
-msgstr "Substituer l'agent-utilisateur peut être une violation du droit d'auteur!"
-
-#: src/LYOptions.c:1471 src/LYOptions.c:1472 src/LYOptions.c:1531
-msgid "You are not allowed to change this setting."
-msgstr "Vous n'êtes pas autorisé à changer ce paramètre."
-
-#: src/LYOptions.c:1555 src/LYOptions.c:1556 src/LYOptions.c:1615 src/LYOptions.c:1896 src/LYOptions.c:1897 src/LYOptions.c:1956 src/LYOptions.c:3658 src/LYOptions.c:3660 src/LYOptions.c:3728
-msgid "Saving Options..."
-msgstr "Enregistrement des options..."
-
-#: src/LYOptions.c:1558 src/LYOptions.c:1559 src/LYOptions.c:1618 src/LYOptions.c:1898 src/LYOptions.c:1899 src/LYOptions.c:1958 src/LYOptions.c:3660 src/LYOptions.c:3662 src/LYOptions.c:3730
-msgid "Options saved!"
-msgstr "Options enregistrées"
-
-#: src/LYOptions.c:1560 src/LYOptions.c:1561 src/LYOptions.c:1620 src/LYOptions.c:1900 src/LYOptions.c:1901 src/LYOptions.c:1960 src/LYOptions.c:3662 src/LYOptions.c:3664 src/LYOptions.c:3732
-msgid "Unable to save Options!"
-msgstr "Impossible d'enregistrer les options!"
-
-#: src/LYOptions.c:1563 src/LYOptions.c:1564 src/LYOptions.c:1580 src/LYOptions.c:1581 src/LYOptions.c:1623 src/LYOptions.c:1640 src/LYOptions.c:1902 src/LYOptions.c:1903 src/LYOptions.c:1962
-msgid " 'r' to return to Lynx "
-msgstr " Entrez « r » pour retourner à Lynx. "
+#.
+#. * Use the built in line editior.
+#.
+#: src/LYNews.c:379
+msgid ""
+"\n"
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+"\n"
+"Veuillez entrer votre message ci-après :"
-#: src/LYOptions.c:1578 src/LYOptions.c:1579 src/LYOptions.c:1638
-msgid " '>' to save, or 'r' to return to Lynx "
-msgstr " Entrez « > » pour enregistrer; « r » pour retourner à Lynx."
+#: src/LYNews.c:425
+msgid "Message has no original text!"
+msgstr "Le message n'a pas de texte original !"
-#: src/LYOptions.c:1620 src/LYOptions.c:1621 src/LYOptions.c:1680
-msgid "Hit any key to change value; RETURN to accept."
-msgstr "N'importe quelle touche pour changer la valeur; ENTR pour accepter"
+#: src/LYOptions.c:743
+msgid "review/edit B)ookmarks files"
+msgstr "B) Éditer fichiers signets "
-#: src/LYOptions.c:1797 src/LYOptions.c:1798 src/LYOptions.c:1857
-msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
-msgstr "Édition de la description et du chemin de fichier (%d de 2)"
+#: src/LYOptions.c:745
+msgid "B)ookmark file: "
+msgstr "B) Fichier de signets : "
-# UNSURE
-#: src/LYOptions.c:1800 src/LYOptions.c:1801 src/LYOptions.c:1860
-msgid " Editing Bookmark DESCRIPTION and FILEPATH"
-msgstr " Édition de la description et du chemin de fichier"
+#: src/LYOptions.c:2507 src/LYOptions.c:2531
+#, c-format
+msgid "Use %s to invoke the Options menu!"
+msgstr "Utilisez %s pour invoquer le menu des Options."
-# UNSURE
-#: src/LYOptions.c:1876 src/LYOptions.c:1877 src/LYOptions.c:1936
-msgid "Letter: "
-msgstr "Lettre : "
+#: src/LYOptions.c:3208
+msgid "General Preferences"
+msgstr "Références"
-#: src/LYOptions.c:2064 src/LYOptions.c:2065 src/LYOptions.c:2124
-msgid "Option choice (or page) number: "
-msgstr "Numéro d'option (ou de page) : "
+#. ***************************************************************
+#. User Mode: SELECT
+#: src/LYOptions.c:3212
+msgid "User mode"
+msgstr "Mode utilisateur"
-#: src/LYOptions.c:2445 src/LYOptions.c:2449 src/LYOptions.c:2505
-msgid "You are already at the beginning of this choice list."
-msgstr "Vous êtes déjà au début de cette liste de choix."
+#. Editor: INPUT
+#: src/LYOptions.c:3218
+msgid "Editor"
+msgstr "Éditeur"
-#: src/LYOptions.c:2456 src/LYOptions.c:2460 src/LYOptions.c:2516
-msgid "UNMODIFIABLE choice list. "
-msgstr ""
+#. Search Type: SELECT
+#: src/LYOptions.c:3223
+msgid "Type of Search"
+msgstr " pour la recherche"
-#: src/LYOptions.c:2459 src/LYOptions.c:2463 src/LYOptions.c:2476 src/LYOptions.c:2480 src/LYOptions.c:2490 src/LYOptions.c:2494 src/LYOptions.c:2506 src/LYOptions.c:2510 src/LYOptions.c:2516 src/LYOptions.c:2519 src/LYOptions.c:2520 src/LYOptions.c:2536 src/LYOptions.c:2550 src/LYOptions.c:2566 src/LYOptions.c:2576 src/LYOptions.c:2603 src/LYOptions.c:2607 src/LYOptions.c:2663
-msgid "(Choice list) Hit return an"
-msgstr ""
+#. Cookies: SELECT
+#: src/LYOptions.c:3229
+msgid "Cookies"
+msgstr "Cookies"
-#: src/LYOptions.c:2471 src/LYOptions.c:2475 src/LYOptions.c:2531
-msgid "You are already at the end of this choice list."
-msgstr "Vous êtes déjà à la fin de cette liste de choix."
+#: src/LYOptions.c:3243
+msgid "Keyboard Input"
+msgstr "Entrée du clavier"
-#: src/LYOptions.c:2473 src/LYOptions.c:2477 src/LYOptions.c:2533
-msgid "UNMODIFIABLE choice list."
-msgstr ""
+#. ***************************************************************
+#. Keypad Mode: SELECT
+#: src/LYOptions.c:3247
+msgid "Keypad mode"
+msgstr "Pavé numérique"
-#: src/LYOptions.c:2500 src/LYOptions.c:2504 src/LYOptions.c:2560
-msgid "You are already at page %d of this choice list."
-msgstr "Vous êtes déjà à la page %d de cette liste de choix."
+#. Emacs keys: ON/OFF
+#: src/LYOptions.c:3253
+msgid "Emacs keys"
+msgstr "Touches emacs"
-#: src/LYOptions.c:2503 src/LYOptions.c:2507 src/LYOptions.c:2563
-msgid "UNMODIFIABLE choice list. Use "
-msgstr ""
+#. VI Keys: ON/OFF
+#: src/LYOptions.c:3259
+msgid "VI keys"
+msgstr "Touches vi"
+
+#. Line edit style: SELECT
+#. well, at least 2 line edit styles available
+#: src/LYOptions.c:3266
+msgid "Line edit style"
+msgstr ""
+
+#. Keyboard layout: SELECT
+#: src/LYOptions.c:3278
+#, fuzzy
+msgid "Keyboard layout"
+msgstr "Entrée du clavier"
+
+#.
+#. * Display and Character Set
+#.
+#: src/LYOptions.c:3291
+msgid "Display and Character Set"
+msgstr "Variable d'affichage"
+
+#. ***************************************************************
+#. Display Character Set: SELECT
+#: src/LYOptions.c:3295
+msgid "Display character set"
+msgstr "Afficher le charset"
-#: src/LYOptions.c:2513 src/LYOptions.c:2517 src/LYOptions.c:2573
-msgid "UNMODIFIABLE choice list. Use"
+#: src/LYOptions.c:3324
+msgid "Assumed document character set"
+msgstr "charset présumé du document:"
+
+#.
+#. * Since CJK people hardly mixed with other world
+#. * we split the header to make it more readable:
+#. * "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
+#.
+#: src/LYOptions.c:3344
+msgid "CJK mode"
msgstr ""
-#: src/LYOptions.c:2554 src/LYOptions.c:2558 src/LYOptions.c:2614
-msgid "Choice number %d already is current."
-msgstr "Le choix %d est déjà le choix en cours."
-
-#: src/LYOptions.c:2593 src/LYOptions.c:2597 src/LYOptions.c:2653
-msgid "You have entered an invalid choice number."
-msgstr "Vous avez entré un numéro de choix non valide."
-
-#: src/LYOptions.c:3698 src/LYOptions.c:3710 src/LYOptions.c:3779 src/LYPrint.c:600 src/LYPrint.c:606 src/LYPrint.c:618 src/LYPrint.c:624
-msgid "Unable to open tempfile"
-msgstr "Impossible d'ouvrir le fichier temporaire."
+#: src/LYOptions.c:3346
+msgid "Raw 8-bit"
+msgstr "Mode 8-bit"
-#: src/LYOptions.c:3729 src/LYOptions.c:3739 src/LYOptions.c:3807
-msgid "<input type=\"submit\" value=\"Accept Changes\"> - \n"
-msgstr ""
+#. X Display: INPUT
+#: src/LYOptions.c:3354
+msgid "X Display"
+msgstr "X Display"
-#: src/LYOptions.c:3730 src/LYOptions.c:3740 src/LYOptions.c:3808 src/LYOptions.c:4037 src/LYOptions.c:4047 src/LYOptions.c:4119
-msgid "<input type=\"reset\" value=\"Reset Changes\">\n"
-msgstr ""
+#.
+#. * Document Appearance
+#.
+#: src/LYOptions.c:3360
+msgid "Document Appearance"
+msgstr "Apparence du document"
-#: src/LYOptions.c:3731 src/LYOptions.c:3741 src/LYOptions.c:3809 src/LYOptions.c:4038 src/LYOptions.c:4048 src/LYOptions.c:4120
-msgid "Left Arrow cancels changes\n"
-msgstr ""
+#: src/LYOptions.c:3366
+msgid "Show color"
+msgstr "Afficher les couleurs"
-#: src/LYOptions.c:3732 src/LYOptions.c:3742 src/LYOptions.c:3810
-msgid "<a href=\"%s%s\">HELP!</a>\n"
-msgstr ""
+#. Show cursor: ON/OFF
+#: src/LYOptions.c:3390
+msgid "Show cursor"
+msgstr "Afficher le curseur"
-#: src/LYOptions.c:3737 src/LYOptions.c:3747 src/LYOptions.c:3815
-msgid "<p align=center>Save options to disk: "
-msgstr ""
+#. Select Popups: ON/OFF
+#: src/LYOptions.c:3396
+msgid "Popups for select fields"
+msgstr "Fenêtre popup pour les champs sélectionnés."
+
+#. HTML error recovery: SELECT
+#: src/LYOptions.c:3403
+msgid "HTML error recovery"
+msgstr "Reprise d'une erreur HTML"
+
+#. Show Images: SELECT
+#: src/LYOptions.c:3410
+msgid "Show images"
+msgstr "Montrer les images"
+
+#. Verbose Images: ON/OFF
+#: src/LYOptions.c:3424
+msgid "Verbose images"
+msgstr "Images verbeuses"
+
+#.
+#. * Headers Transferred to Remote Servers
+#.
+#: src/LYOptions.c:3432
+msgid "Headers Transferred to Remote Servers"
+msgstr "Les headers sont transférés aux serveurs distants"
+
+#. ***************************************************************
+#. Mail Address: INPUT
+#: src/LYOptions.c:3436
+msgid "Personal mail address"
+msgstr "Adresse email personnelle"
-#: src/LYOptions.c:3746 src/LYOptions.c:3756
-msgid ""
-"\n"
-"<em>Personal Preferences</em>\n"
-msgstr ""
+#. Preferred Document Character Set: INPUT
+#: src/LYOptions.c:3441
+msgid "Preferred document character set"
+msgstr "Jeu de caractères préféré"
-#: src/LYOptions.c:3749 src/LYOptions.c:3759 src/LYOptions.c:3827
-msgid "Cookies"
-msgstr ""
+#. Preferred Document Language: INPUT
+#: src/LYOptions.c:3446
+msgid "Preferred document language"
+msgstr "Langue préférée"
-#: src/LYOptions.c:3763
-msgid "Display"
-msgstr ""
+#: src/LYOptions.c:3452
+msgid "User-Agent header"
+msgstr "Header 'User-Agent'"
+
+#.
+#. * Listing and Accessing Files
+#.
+#: src/LYOptions.c:3460
+msgid "Listing and Accessing Files"
+msgstr "Listes et acces aux fichiers"
+
+#. ***************************************************************
+#. FTP sort: SELECT
+#: src/LYOptions.c:3464
+msgid "FTP sort criteria"
+msgstr "Critères de tri FTP"
-#: src/LYOptions.c:3767 src/LYOptions.c:3773 src/LYOptions.c:3841
-msgid "Editor"
-msgstr ""
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3471
+msgid "Local directory sort criteria"
+msgstr "Critère de tri des répertoires locaux."
-#: src/LYOptions.c:3772 src/LYOptions.c:3778 src/LYOptions.c:3846
-msgid "Emacs keys"
-msgstr ""
+#: src/LYOptions.c:3479
+msgid "Show dot files"
+msgstr "Montrer les fichiers cachés"
-#: src/LYOptions.c:3779 src/LYOptions.c:3785 src/LYOptions.c:3853
+#: src/LYOptions.c:3487
msgid "Execution links"
-msgstr ""
+msgstr "Liens à éxécuter"
-#: src/LYOptions.c:3798 src/LYOptions.c:3804 src/LYOptions.c:3872
-msgid "Keypad mode"
-msgstr ""
-
-#: src/LYOptions.c:3804 src/LYOptions.c:3810 src/LYOptions.c:3878
-msgid "Personal mail address"
-msgstr ""
-
-#: src/LYOptions.c:3809 src/LYOptions.c:3815 src/LYOptions.c:3883
-msgid "Popups for select fields"
-msgstr ""
-
-#: src/LYOptions.c:3815 src/LYOptions.c:3821 src/LYOptions.c:3889
-msgid "Searching type"
-msgstr ""
-
-#: src/LYOptions.c:3824
-msgid ""
-"\n"
-" <em>Personal Preferences</em>\n"
-msgstr ""
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3507
+msgid "Show transfer rate"
+msgstr "Transfert de données terminé"
-#: src/LYOptions.c:3826 src/LYOptions.c:3832 src/LYOptions.c:3900
-msgid "Show color"
-msgstr ""
+#.
+#. * Special Files and Screens
+#.
+#: src/LYOptions.c:3516
+msgid "Special Files and Screens"
+msgstr "Fichiers et écrans spéciaux."
-#: src/LYOptions.c:3892 src/LYOptions.c:3902
-msgid ""
-"\n"
-"<em>Bookmark Options</em>\n"
-msgstr ""
+#: src/LYOptions.c:3521
+msgid "Multi-bookmarks"
+msgstr "Bookmarks multiples"
-#: src/LYOptions.c:3913 src/LYOptions.c:3923 src/LYOptions.c:3991
+#: src/LYOptions.c:3529
msgid "Review/edit Bookmarks files"
-msgstr ""
+msgstr "Revoir/Editer les fichiers Bookmarks"
-#: src/LYOptions.c:3915 src/LYOptions.c:3925 src/LYOptions.c:3993
-msgid "<a href=\"LYNXOPTIONS://MBM_MENU\">Goto multi-bookmark menu</a>\n"
-msgstr ""
+#: src/LYOptions.c:3531
+msgid "Goto multi-bookmark menu"
+msgstr "Aller au menu multi-bookmarks"
-#: src/LYOptions.c:3918 src/LYOptions.c:3928 src/LYOptions.c:3996
+#: src/LYOptions.c:3533
msgid "Bookmarks file"
-msgstr ""
+msgstr "Fichier de Bookmarks"
-#: src/LYOptions.c:3926 src/LYOptions.c:3936
-msgid ""
-"\n"
-"<em>Character Set Options</em>\n"
-msgstr ""
+#. Visited Pages: SELECT
+#: src/LYOptions.c:3539
+msgid "Visited Pages"
+msgstr "la Page des liens activés"
-#: src/LYOptions.c:3945 src/LYOptions.c:3955 src/LYOptions.c:4021
-msgid "Assumed document character set"
-msgstr ""
+#: src/LYPrint.c:959
+msgid " Print job complete.\n"
+msgstr "Chargement incomplet.\n"
-#: src/LYOptions.c:3956 src/LYOptions.c:3966 src/LYOptions.c:4032
-msgid "Display character set"
-msgstr ""
+#: src/LYPrint.c:1296
+msgid "Document:"
+msgstr "Document:"
-#: src/LYOptions.c:3970
-msgid ""
-"\n"
-" <em>Bookmark Options</em>\n"
-msgstr ""
+#: src/LYPrint.c:1297
+msgid "Number of lines:"
+msgstr "Nombre de lignes:"
-#: src/LYOptions.c:3975 src/LYOptions.c:3985 src/LYOptions.c:4051
-msgid "CJK mode"
-msgstr ""
+#: src/LYPrint.c:1298
+msgid "Number of pages:"
+msgstr "Nombre de pages:"
-#: src/LYOptions.c:3977 src/LYOptions.c:3987 src/LYOptions.c:4053
-msgid "Raw 8-bit"
-msgstr ""
+#: src/LYPrint.c:1299
+msgid "pages"
+msgstr "pages"
-#: src/LYOptions.c:3986 src/LYOptions.c:3996
-msgid ""
-"\n"
-"<em>File Management Options</em>\n"
-msgstr ""
+#: src/LYPrint.c:1299
+msgid "page"
+msgstr "page"
-#: src/LYOptions.c:3989 src/LYOptions.c:3999 src/LYOptions.c:4065
-msgid "FTP sort criteria"
-msgstr ""
+#: src/LYPrint.c:1300
+msgid "(approximately)"
+msgstr "(approximativement)"
-#: src/LYOptions.c:3996 src/LYOptions.c:4006 src/LYOptions.c:4072
-msgid "Local directory sort criteria"
-msgstr ""
+#: src/LYPrint.c:1305
+msgid "Some print functions have been disabled!"
+msgstr "Certaines fonctions d'impression ont <E9>t<E9> d<E9>sactiv<E9>es."
-#: src/LYOptions.c:4004
-msgid ""
-"\n"
-" <em>Character Set Options</em>\n"
-msgstr ""
+#: src/LYPrint.c:1309
+msgid "Standard print options:"
+msgstr "Option d'impression standard."
-#: src/LYOptions.c:4004 src/LYOptions.c:4014 src/LYOptions.c:4080
-msgid "Show dot files"
-msgstr ""
+#: src/LYPrint.c:1310
+msgid "Print options:"
+msgstr "Option d'impression."
-#: src/LYOptions.c:4013 src/LYOptions.c:4023
-msgid ""
-"\n"
-"<em>Headers transferred to remote server</em>\n"
-msgstr ""
+#: src/LYPrint.c:1316
+msgid "Save to a local file"
+msgstr "Enregistrer dans un fichier"
-#: src/LYOptions.c:4016 src/LYOptions.c:4026 src/LYOptions.c:4092
-msgid "Preferred document character set"
-msgstr ""
+#: src/LYPrint.c:1318
+msgid "Save to disk disabled"
+msgstr "Enregistrement sur disque d<E9>sactiv<E9>"
-#: src/LYOptions.c:4021 src/LYOptions.c:4031 src/LYOptions.c:4097
-msgid "Preferred document language"
-msgstr ""
+#: src/LYPrint.c:1324
+msgid "Mail the file"
+msgstr "Envoyer le fichier par courriel"
-#: src/LYOptions.c:4027 src/LYOptions.c:4037 src/LYOptions.c:4103
-msgid "User-Agent header"
-msgstr ""
+#: src/LYPrint.c:1330
+msgid "Print to the screen"
+msgstr "Imprimer à l'écran"
-#: src/LYOptions.c:4036 src/LYOptions.c:4046 src/LYOptions.c:4118
-msgid ""
-"<input type=\"submit\" value=\"Accept Changes\">\n"
-" - "
-msgstr ""
+#: src/LYPrint.c:1334
+msgid "Print out on a printer attached to your vt100 terminal"
+msgstr "Utiliser la séquence vt100 pour imprimer à votre imprimante"
-#: src/LYOptions.c:4062
+#: src/LYReadCFG.c:340
msgid ""
+"Syntax Error parsing COLOR in configuration file:\n"
+"The line must be of the form:\n"
+"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
"\n"
-" <em>File Management Options</em>\n"
+"Here FOREGROUND and BACKGROUND must be one of:\n"
+"The special strings 'nocolor' or 'default', or\n"
msgstr ""
-
-#: src/LYOptions.c:4089
-msgid ""
+"Erreur de syntaxe lors du parsage de COLOR dans le fichier de configuration\n"
+"La ligne doit être du type:\n"
+"COULEUR:ENTIER:PREMIERPLAN:ARIERREPLAN\n"
"\n"
-" <em>Headers transferred to remote server</em>\n"
-msgstr ""
+"Ici, PREMIERPLAN et ARIERREPLAN doivent être soit\n"
+"les chaines de carctère spéciales 'nocolor' ou 'default', ou\n"
-#: src/LYPrint.c:340 src/LYPrint.c:345 src/LYPrint.c:364 src/LYPrint.c:369 src/LYPrint.c:427 src/LYPrint.c:432 src/LYPrint.c:448 src/LYPrint.c:453
-msgid "Save request cancelled!!!"
-msgstr "Demande d'enregistrement annulée!"
+#: src/LYReadCFG.c:353
+msgid "Offending line:"
+msgstr "Ligne fautive :"
-# msgid "File exists. Create higher version? (y/n)"
-# msgstr "Ce fichier existe déjà. Créer une nouvelle version? (o/n)"
-# msgid "File exists. Overwrite? (y/n)"
-# msgstr "Ce fichier existe déjà. Superposer? (o/n)"
-#: src/LYPrint.c:444 src/LYPrint.c:465
-msgid "Cannot write to file."
-msgstr "Écriture non autorisée."
+#: src/LYReadCFG.c:660
+#, c-format
+msgid "key remapping of %s to %s for %s failed\n"
+msgstr "Le changement de touche de %s vers %s pour %s a échoué\n"
-#: src/LYPrint.c:525 src/LYPrint.c:549
-msgid "Viewing preparsed source. Are you sure you want to mail it? [y]"
-msgstr "Lecture de la source pré-analysée. Veuillez confirmer l'envoi? [o]"
+#: src/LYReadCFG.c:667
+#, c-format
+msgid "key remapping of %s to %s failed\n"
+msgstr "Le changement de touche de %s vers %s a échoué\n"
+
+#: src/LYReadCFG.c:688
+#, c-format
+msgid "invalid line-editor selection %s for key %s, selecting all\n"
+msgstr "Sélection d'édition de ligne de %s pour la touche %s invalide. Selection de tous.\n"
+
+#: src/LYReadCFG.c:715 src/LYReadCFG.c:728
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"
+msgstr "La définition du lien d'éditeur de ligne pour la touche %s (0x%x) vers 0x%x pour %s a échoué.\n"
+
+#: src/LYReadCFG.c:733
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) for %s failed\n"
+msgstr "La définition de lien d'éditeur de ligne pour la touche %s (0x%x) pour %s a échoué.\n"
+
+#: src/LYReadCFG.c:838
+#, c-format
+msgid "Lynx: cannot start, CERN rules file %s is not available\n"
+msgstr "Lynx: impossible de démarrer. Le fichier de règles CERN %s n'est pas accessible.\n"
+
+#: src/LYReadCFG.c:840
+msgid "(no name)"
+msgstr "(pas de nom)"
+
+#: src/LYReadCFG.c:1658
+#, c-format
+msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
+msgstr "Plus de %d inclusions de lynx.cfg imbriquées. Peut être y a t'il une boucle ?\n"
-#: src/LYPrint.c:533 src/LYPrint.c:542 src/LYPrint.c:553 src/LYPrint.c:557 src/LYPrint.c:566 src/LYPrint.c:577
-msgid "Mail request cancelled!!!"
-msgstr "Demande de courrier annulée!"
+#: src/LYReadCFG.c:1660
+#, c-format
+msgid "Last attempted include was '%s',\n"
+msgstr "Le dernier include tenté était: '%s',\n"
-#: src/LYPrint.c:547 src/LYPrint.c:571
-msgid "Please enter a valid Internet mail address: "
-msgstr "Veuillez entrer une adresse de courrier Internet valide : "
+#: src/LYReadCFG.c:1661
+#, c-format
+msgid "included from '%s'.\n"
+msgstr "included de '%s'.\n"
-#: src/LYPrint.c:724 src/LYPrint.c:742
-msgid "ERROR - Unable to mail file"
-msgstr "ERREUR - impossible d'envoyer le fichier."
+#: src/LYReadCFG.c:2116 src/LYReadCFG.c:2129 src/LYReadCFG.c:2165
+msgid "The following is read from your lynx.cfg file."
+msgstr "Les données suivantes sont lues à partie de votre fichier lynx.cfg."
-#: src/LYPrint.c:834 src/LYPrint.c:854
-msgid ""
-"Sending \n"
-"\n"
-"$ %s\n"
-"\n"
-"Please wait..."
-msgstr ""
+#: src/LYReadCFG.c:2117 src/LYReadCFG.c:2130
+msgid "Please read the distribution"
+msgstr "Merci de lire la distribution"
-#: src/LYPrint.c:851 src/LYPrint.c:871 src/LYPrint.c:936 src/LYPrint.c:956
-msgid "File is %d screens long. Are you sure you want to print? [y]"
-msgstr "Le fichier représente %d écrans. Vous voulez l'imprimer? [o]"
+#: src/LYReadCFG.c:2123 src/LYReadCFG.c:2133
+msgid "for more comments."
+msgstr "pour plus de commentaires."
-#: src/LYPrint.c:857 src/LYPrint.c:865 src/LYPrint.c:877 src/LYPrint.c:878 src/LYPrint.c:885 src/LYPrint.c:898 src/LYPrint.c:942 src/LYPrint.c:950 src/LYPrint.c:962 src/LYPrint.c:970 src/LYPrint.c:1096 src/LYPrint.c:1116 src/LYPrint.c:1120 src/LYPrint.c:1140
-msgid "Print request cancelled!!!"
-msgstr "Demande d'impression annulée!"
+#: src/LYReadCFG.c:2147
+msgid "RELOAD THE CHANGES"
+msgstr "RECHARGER LES MODIFICATIONS"
-#: src/LYPrint.c:871 src/LYPrint.c:891
-msgid "Be sure your printer is on-line. Press <return> to start printing:"
-msgstr ""
+#: src/LYReadCFG.c:2156
+msgid "Your primary configuration"
+msgstr "Votre configuration principale"
-#: src/LYPrint.c:873 src/LYPrint.c:893
-msgid "Press <return> to begin: "
-msgstr "Appuyez sur <Entr> pour commencer : "
+#: src/LYShowInfo.c:129
+msgid "Directory that you are currently viewing"
+msgstr "Répertoire courant:"
-#: src/LYPrint.c:920 src/LYPrint.c:940
-msgid "Press <return> to finish: "
-msgstr "Appuyez sur <Entr> pour terminer : "
+#: src/LYShowInfo.c:132
+msgid "Name:"
+msgstr "Nom :"
-#: src/LYPrint.c:962 src/LYPrint.c:982
-msgid "ERROR - Unable to allocate file space!!!"
-msgstr "ERREUR - impossible d'allouer de l'espace pour le fichier!"
+#: src/LYShowInfo.c:135
+msgid "URL:"
+msgstr "URL :"
-#: src/LYPrint.c:1140 src/LYPrint.c:1160
-msgid "ERROR! - printer is misconfigured!"
-msgstr "ERREUR - l'imprimante est mal configurée."
+#: src/LYShowInfo.c:146
+msgid "Directory that you have currently selected"
+msgstr "Répertoire que vous avez sélectionné"
-#: src/LYPrint.c:1153 src/LYPrint.c:1173
-msgid "Printing file. Please wait..."
-msgstr "Impression du fichier. Veuillez attendre."
+#: src/LYShowInfo.c:149
+msgid "File that you have currently selected"
+msgstr "Fichier que vous avez sélectionné"
-#: src/LYPrint.c:1264 src/LYPrint.c:1293
-msgid "Unable to open print options file"
-msgstr "Impossible d'ouvrir le fichier d'options d'impression."
+#: src/LYShowInfo.c:153
+msgid "Symbolic link that you have currently selected"
+msgstr "Lien symbolique que vous avez sélectionné"
-#: src/LYPrint.c:1276
-msgid ""
-" <em>You print the document:</em> %s\n"
-" <em>Number of lines:</em> %d\n"
-" <em>Number of pages:</em> %d page%s (approximately)\n"
-msgstr ""
+#: src/LYShowInfo.c:157
+msgid "Item that you have currently selected"
+msgstr "Article que vous avez sélectionné"
-#: src/LYPrint.c:1278 src/LYPrint.c:1305
-msgid ""
-" <em>Document:</em> %s\n"
-" <em>Number of lines:</em> %d\n"
-" <em>Number of pages:</em> %d page%s (approximately)\n"
-msgstr ""
+#: src/LYShowInfo.c:159
+msgid "Full name:"
+msgstr "Nom complet:"
-#: src/LYPrint.c:1284 src/LYPrint.c:1288 src/LYPrint.c:1315
-msgid " <em>Some print functions have been disabled!</em>\n"
-msgstr " <em>Certaines fonctions d'impression ont <E9>t<E9> d<E9>sactiv<E9>es.<em>\n"
+#: src/LYShowInfo.c:168
+msgid "Unable to follow link"
+msgstr "Impossible d'activer le lien"
-#: src/LYPrint.c:1286 src/LYPrint.c:1290
-msgid ""
-"\n"
-"Standard print options:\n"
-msgstr ""
+#: src/LYShowInfo.c:170
+msgid "Points to file:"
+msgstr "Pointe vers le fichier :"
-#: src/LYPrint.c:1304 src/LYPrint.c:1308 src/LYPrint.c:1336
-msgid " <a href=\"LYNXPRINT://LPANSI/lines=%d\">Print out on a printer attached to your vt100 terminal</a>\n"
-msgstr ""
+#: src/LYShowInfo.c:175
+msgid "Name of owner:"
+msgstr " <em>Nom du propriétaire :"
-#: src/LYPrint.c:1318
-msgid "Print"
-msgstr ""
+#: src/LYShowInfo.c:178
+msgid "Group name:"
+msgstr "Nom du groupe :"
-#: src/LYPrint.c:1318
-msgid "Standard print"
-msgstr ""
+#: src/LYShowInfo.c:181
+msgid "File size:"
+msgstr "Volume du fichier :"
-#: src/LYReadCFG.c:361 src/LYReadCFG.c:369
-msgid ""
-"Syntax Error parsing COLOR in configuration file:\n"
-"The line must be of the form:\n"
-"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
-"\n"
-"Here FOREGROUND and BACKGROUND must be one of:\n"
-"The special strings 'nocolor' or 'default', or\n"
-msgstr ""
+#: src/LYShowInfo.c:187
+msgid "Creation date:"
+msgstr "Date de création :"
-# src/LYReadCFG.c
-# NdT= I have translated by "faulty line". I am not sure what they mean by "offending".
-#: src/LYReadCFG.c:374 src/LYReadCFG.c:382
-msgid ""
-"Offending line:\n"
-"%s\n"
-msgstr ""
-"Ligne fautive :\n"
-"%s\n"
+#: src/LYShowInfo.c:190
+msgid "Last modified:"
+msgstr "Dernière mise à jour :"
-#: src/LYReadCFG.c:624 src/LYReadCFG.c:638
-msgid "key remapping of %s to %s failed\n"
-msgstr ""
+#: src/LYShowInfo.c:193
+msgid "Last accessed:"
+msgstr "Dernier accès :"
-#: src/LYReadCFG.c:994 src/LYReadCFG.c:1020
-msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
-msgstr ""
+#: src/LYShowInfo.c:195
+msgid "Access Permissions"
+msgstr "Permissions d'accès"
-#: src/LYReadCFG.c:996 src/LYReadCFG.c:1022
-msgid "Last attempted include was '%s',\n"
-msgstr ""
+#: src/LYShowInfo.c:261
+msgid "File that you are currently viewing"
+msgstr "Fichier que vous visualisez présentement"
-#: src/LYReadCFG.c:997 src/LYReadCFG.c:1023
-msgid "included from '%s'.\n"
-msgstr ""
+#: src/LYShowInfo.c:266 src/LYShowInfo.c:375
+msgid "Linkname:"
+msgstr "Nom du lien :"
-#: src/LYReadCFG.c:1256
-msgid "Lynx.cfg Information"
-msgstr ""
+#: src/LYShowInfo.c:279 src/LYShowInfo.c:291
+msgid "Charset:"
+msgstr "Jeu de caractères :"
-#: src/LYReadCFG.c:1260
-msgid "<em>This is read from your lynx.cfg file,\n"
-msgstr ""
+#: src/LYShowInfo.c:297
+msgid "Server:"
+msgstr "Serveur :"
-#: src/LYReadCFG.c:1267
-msgid "please \"read\" distribution's <a href=\"%s\">lynx.cfg"
-msgstr ""
+#: src/LYShowInfo.c:300
+msgid "Date:"
+msgstr "Date :"
-#: src/LYReadCFG.c:1269
-msgid ""
-"</a> for more comments.</em>\n"
-"\n"
-msgstr ""
+#: src/LYShowInfo.c:303
+msgid "Last Mod:"
+msgstr "Dernière modification :"
-#: src/LYReadCFG.c:1271
-msgid " #<em>Your primary configuration %s</em>\n"
-msgstr ""
+#: src/LYShowInfo.c:309
+msgid "&nbsp;Expires:"
+msgstr "&nbsp;Expire:"
-#: src/LYReadCFG.c:1274
-msgid ""
-"<em>This is read from your lynx.cfg file:</em>\n"
-"\n"
-msgstr ""
+#: src/LYShowInfo.c:313
+msgid "Cache-Control:"
+msgstr "Controle du cache"
-#: src/LYShowInfo.c:49
-msgid "Configuration Definitions"
-msgstr ""
+#: src/LYShowInfo.c:317
+msgid "Content-Length:"
+msgstr "Longueur du contenu:"
-#: src/LYShowInfo.c:52
-msgid ""
-"See also <a href=\"%s\">your lynx.cfg</a> for run-time options\n"
-"\n"
-msgstr ""
+#: src/LYShowInfo.c:322
+msgid "Language:"
+msgstr "Langage:"
-#: src/LYShowInfo.c:55
-msgid ""
-"The following data were derived during the automatic configuration/build\n"
-"process of this copy of Lynx. When reporting a bug, please include a copy\n"
-"of this page."
-msgstr ""
+#: src/LYShowInfo.c:329
+msgid "Post Data:"
+msgstr "Données POST :"
-#: src/LYShowInfo.c:63
-msgid ""
-"The following data were used as automatically-configured compile-time\n"
-"definitions when this copy of Lynx was built."
-msgstr ""
+#: src/LYShowInfo.c:331
+msgid "Post Content Type:"
+msgstr "Type de contenu POST :"
-#: src/LYShowInfo.c:134 src/LYShowInfo.c:157
-msgid ""
-"\n"
-"Directory that you are currently viewing\n"
-"\n"
-msgstr ""
+#: src/LYShowInfo.c:340
+msgid "Owner(s):"
+msgstr "Propriétaire(s) :"
-#: src/LYShowInfo.c:139
-msgid "development version"
-msgstr ""
+#: src/LYShowInfo.c:343
+msgid "size:"
+msgstr "Taille :"
-#: src/LYShowInfo.c:139
-msgid "latest release"
-msgstr ""
-
-#: src/LYShowInfo.c:142
-msgid " - <a href=\"%s\">compile time settings</a>\n"
-msgstr ""
-
-msgid "Name:"
-msgstr "Nom :"
-
-msgid "URL:"
-msgstr "URL :"
-
-#: src/LYShowInfo.c:144 src/LYShowInfo.c:163
-msgid " <em>Name:</em> %s\n"
-msgstr " <em>Nom :</em> %s\n"
-
-#: src/LYShowInfo.c:145 src/LYShowInfo.c:164
-msgid " <em> URL:</em> %s\n"
-msgstr " <em> URL :</em> %s\n"
-
-#: src/LYShowInfo.c:145
-msgid " - <a href=\"%s\">your lynx.cfg</a>\n"
-msgstr ""
+#: src/LYShowInfo.c:343
+msgid "lines"
+msgstr "Lignes"
-#: src/LYShowInfo.c:155 src/LYShowInfo.c:172
-msgid "Failed to obtain status of current link!"
-msgstr "Impossible d'obtenir l'état du lien actif!"
-
-#: src/LYShowInfo.c:173 src/LYShowInfo.c:190
-msgid " <em>Full name:</em> %s\n"
-msgstr ""
-
-#: src/LYShowInfo.c:210 src/LYShowInfo.c:227
-msgid " Access Permissions\n"
-msgstr ""
-
-#: src/LYShowInfo.c:279 src/LYShowInfo.c:296
-msgid "<dt><em>Linkname:</em> %s%s\n"
-msgstr "<dt><em>Nom du lien :</em> %s%s\n"
+#: src/LYShowInfo.c:346
+msgid "mode:"
+msgstr "Mode :"
-#: src/LYShowInfo.c:288 src/LYShowInfo.c:305
-msgid "<dt><em>&nbsp;Charset:</em> %s\n"
-msgstr ""
+#: src/LYShowInfo.c:348
+msgid "forms mode"
+msgstr "mode formulaires"
-# LYShowInfo.c
-#: src/LYShowInfo.c:299 src/LYShowInfo.c:316
-msgid "<dt><em>&nbsp;Charset:</em> %s (assumed)\n"
-msgstr "<dt><em>&nbsp;Jeu de caractères :</em> %s (présumé)\n"
+#: src/LYShowInfo.c:350
+msgid "source"
+msgstr "source"
-#: src/LYShowInfo.c:305 src/LYShowInfo.c:322
-msgid "<dt><em>&nbsp;&nbsp;Server:</em> %s\n"
-msgstr "<dt><em>&nbsp;&nbsp;Serveur :</em> %s\n"
+#: src/LYShowInfo.c:350
+msgid "normal"
+msgstr "normal"
-#: src/LYShowInfo.c:308 src/LYShowInfo.c:325
-msgid "<dt><em>&nbsp;&nbsp;&nbsp;&nbsp;Date:</em> %s\n"
-msgstr "<dt><em>&nbsp;&nbsp;&nbsp;&nbsp;Date :</em> %s\n"
+#: src/LYShowInfo.c:351
+msgid ", safe"
+msgstr ", sécuritaire"
-# Following are from the INFO page
-#: src/LYShowInfo.c:326 src/LYShowInfo.c:343
-msgid "<dt><em>Owner(s):</em> %s\n"
-msgstr "<dt><em>Propriétaire(s) :</em> %s\n"
+#: src/LYShowInfo.c:352
+msgid ", via internal link"
+msgstr ", lien interne"
-#: src/LYShowInfo.c:329 src/LYShowInfo.c:346
-msgid "<dt>&nbsp;&nbsp;&nbsp;&nbsp;<em>size:</em> %d lines\n"
-msgstr "<dt>&nbsp;&nbsp;<em>Taille :</em> %d lignes\n"
+#: src/LYShowInfo.c:358
+msgid ", no-cache"
+msgstr ", pas de cache"
-#: src/LYShowInfo.c:331 src/LYShowInfo.c:348
-msgid "<dt>&nbsp;&nbsp;&nbsp;&nbsp;<em>mode:</em> %s%s%s\n"
-msgstr ""
+#: src/LYShowInfo.c:360
+msgid ", ISMAP script"
+msgstr ", script ISMAP"
-#: src/LYShowInfo.c:352 src/LYShowInfo.c:369
-msgid "<dt>&nbsp;&nbsp;<em>Method:</em> %s\n"
-msgstr "<dt>&nbsp;&nbsp;<em>Méthode :</em> %s\n"
+#: src/LYShowInfo.c:362
+msgid ", bookmark file"
+msgstr ", fichier de bookmark"
-# msgid "<dt>&nbsp;&nbsp;&nbsp;&nbsp;<em>mode:</em> %s\n"
-# msgstr "<dt>&nbsp;&nbsp;&nbsp;&nbsp;<em>Mode :</em> %s\n"
-#: src/LYShowInfo.c:356 src/LYShowInfo.c:373
-msgid "<dt>&nbsp;<em>Enctype:</em> %s\n"
-msgstr "<dt>&nbsp;<em>Encodage :</em> %s\n"
+#: src/LYShowInfo.c:371
+msgid "Link that you currently have selected"
+msgstr "Lien que vous avez sélectionné"
-#: src/LYShowInfo.c:368 src/LYShowInfo.c:385
-msgid "<dt>&nbsp;(Form field)\n"
-msgstr "<dt>&nbsp;(champ de formulaire)\n"
+#: src/LYShowInfo.c:384
+msgid "Method:"
+msgstr "Méthode :"
-#: src/LYStrings.c:392
-msgid "Keysym %s is unknown\n"
-msgstr ""
+#: src/LYShowInfo.c:389
+msgid "Enctype:"
+msgstr "Encodage :"
-#: src/LYStrings.c:489 src/LYStrings.c:717
-msgid "Error processing line %d of %s\n"
-msgstr ""
+#: src/LYShowInfo.c:401
+msgid "(Form field)"
+msgstr "(champ de formulaire)"
-#: src/LYStrings.c:1200 src/LYStrings.c:1447
-msgid "Maximum length reached! Delete text or move off field."
-msgstr "Vous avez le maximum permis; supprimez du texte ou quittez le champ"
+#: src/LYShowInfo.c:416
+msgid "No Links on the current page"
+msgstr "Aucun lien dans la page courante"
-# msgid "%s: Invalid Option: %s\n"
-# msgstr "%s: Invalid Option: %s\n"
-# msgid "USAGE: %s [options] [file]\n"
-# msgstr "USAGE: %s [options] [file]\n"
-#: src/LYStyle.c:123
+#: src/LYStyle.c:250
+#, c-format
msgid ""
"Syntax Error parsing style in lss file:\n"
"[%s]\n"
@@ -7484,344 +5015,588 @@ msgid ""
"where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n"
"\n"
msgstr ""
-"Syntax Error parsing style in lss file:\n"
+"Erreur de syntaxe lors du parsage du style dans le fichier lss:\n"
"[%s]\n"
-"The line must be of the form:\n"
-"OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
-"where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n"
+"La ligne doit etre du type :\n"
+"OBJET:MONO:COLOR (cad em:gras:bleubrillant:blanc)\n"
+"Où OBJET est un élément parmi EM,STRONG,B,I,U,BLINK etc.\n"
"\n"
-#: src/LYTraversal.c:20
-msgid "unable to open or create a traversal file"
-msgstr ""
-
-#: src/LYTraversal.c:58 src/LYTraversal.c:113
-msgid "unable to open traversal file"
-msgstr ""
+#: src/LYTraversal.c:107
+msgid "here is a list of the history stack so that you may rebuild"
+msgstr "voici une liste de l'Historique que vous pouvez reconstituer"
-#: src/LYTraversal.c:133
-msgid "unable to open reject file"
-msgstr ""
+#: src/LYUpload.c:78
+msgid "ERROR! - upload command is misconfigured"
+msgstr "ERREUR - commande de chargement mal configurée"
-#: src/LYUpload.c:106 src/LYUpload.c:107
+#: src/LYUpload.c:100
msgid "Illegal redirection \"../\" found! Request ignored."
msgstr "Réacheminement «../» non autorisé; demande non traitée"
-#: src/LYUpload.c:112 src/LYUpload.c:113
+#: src/LYUpload.c:103
+msgid "Illegal character \"/\" found! Request ignored."
+msgstr "Caractère «/» non autorisé; demande non traitée"
+
+#: src/LYUpload.c:106
msgid "Illegal redirection using \"~\" found! Request ignored."
msgstr "Réacheminement avec «~» non autorisé; demande non traitée"
-#: src/LYUpload.c:240 src/LYUpload.c:243
-msgid " <em>Upload To:</em> %s\n"
-msgstr ""
-
-#: src/LYUpload.c:241 src/LYUpload.c:244
-msgid ""
-"\n"
-"Upload options:\n"
-msgstr ""
-
-#: src/LYUpload.c:257
-msgid ""
-" &lt;NONE&gt;\n"
-"\n"
-" You may define an unlimited number of upload methods.\n"
-" Please refer to the <a href=\"%s\">lynx.cfg</a> file, sections 'UPLOAD' and 'INCLUDE'.\n"
-msgstr ""
-
-#: src/LYUtils.c:1966 src/LYUtils.c:1967 src/LYUtils.c:1968
-msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
-msgstr "HAUT/BAS: se déplacer; DROITE: activer le lien; GAUCHE: document précédent\n"
-
-# Is the AIDE command correct? There is no online Help in Lynx.
-#: src/LYUtils.c:1976 src/LYUtils.c:1977 src/LYUtils.c:1978
-msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
-msgstr "H) Accueil S) Paramètres P) Imprimer G) Aller M) Départ Q)uitter /=chercher [Y]=Historique\n"
-
-#: src/LYUtils.c:3570 src/LYUtils.c:3571 src/LYUtils.c:3578
-msgid "*** You have unread mail. ***"
-msgstr "*** Vous avez du courrier non ouvert. ***"
-
-#: src/LYUtils.c:3573 src/LYUtils.c:3574 src/LYUtils.c:3581 src/LYUtils.c:3614 src/LYUtils.c:3615 src/LYUtils.c:3622
-msgid "*** You have new mail. ***"
-msgstr "*** Vous avez du nouveau courrier. ***"
-
-#: src/LYUtils.c:3616 src/LYUtils.c:3617 src/LYUtils.c:3624
-msgid "*** You have mail. ***"
-msgstr "*** Vous avez du courrier. ***"
-
-#: src/LYUtils.c:4220 src/LYUtils.c:4221 src/LYUtils.c:4222
-msgid " first."
-msgstr ""
-
-#: src/LYUtils.c:5862 src/LYUtils.c:5863 src/LYUtils.c:5896 src/LYUtils.c:5914
-msgid "<h1>%s (%s Version %s)</h1>\n"
-msgstr ""
+#: src/LYUpload.c:163
+msgid "Unable to upload file."
+msgstr "Impossible de charger le fichier."
-#: src/LYUtils.c:5892 src/LYUtils.c:5910
-msgid "<h1>%s (%s Version %s), <a href=\"%s%s\">help</a></h1>\n"
-msgstr ""
+#: src/LYUpload.c:214
+msgid "Upload To:"
+msgstr "Téléchargement vers:"
-#: src/LYexit.c:112
-msgid ""
-"\n"
-"Memory exhausted! Program aborted!\n"
-"\n"
-msgstr ""
-"\n"
-"Mémoire insuffisante. Abandon!\n"
+#: src/LYUpload.c:215
+msgid "Upload options:"
+msgstr "Options de chargement de fichier :"
-#: src/LYexit.c:176
-msgid ""
-"\n"
-"\n"
-"\n"
-"%s %s: out of memory. Aborting...\n"
-msgstr ""
+#: src/LYUtils.c:3075
+msgid "Unexpected access protocol for this URL scheme."
+msgstr "Protocole d'acces inattendu pour ce scheme d'url"
-# So, ya, then they replaced the previous string with the following
-#: src/LYrcFile.c:573 src/LYrcFile.c:584
-msgid ""
-"# Lynx User Defaults File\n"
-"#\n"
-"# This file contains options saved from the Lynx Options Screen (normally\n"
-"# with the '>' key). There is normally no need to edit this file manually,\n"
-"# since the defaults here can be controlled from the Options Screen, and the\n"
-"# next time options are saved from the Options Screen this file will be\n"
-"# completely rewritten. You have been warned...\n"
-"# If you are looking for the general configuration file - it is normally\n"
-"# called lynx.cfg, and it has different content and a different format.\n"
-"# It is not this file.\n"
-"\n"
+#: src/LYUtils.c:3915
+msgid "Too many tempfiles"
msgstr ""
-"# Valeurs implicites utilisateur - Lynx\n"
-"#\n"
-"# Ce fichier contient des options enregistrées à partir du menu Paramètres (normalement\n"
-"# à l'aide de la touche '>'). Il n'est pas nécessaire d'éditer ce fichier manuellement\n"
-"# puisque les valeurs implicites peuvent être modifiées à partir du menu Paramètres; la\n"
-"# prochaine fois que vous enregistrez les nouvelles valeurs dans ce ce menu, le fichier\n"
-"# est complètement renouvelé. Vous êtes prévenus...\n"
-"# Si vous cherchez le fichier de configuration générale il s'appelle normalement\n"
-"# lynx.cfg et il a un contenu et un format différents.\n"
-"# Ce n'est pas ce fichier.\n"
-"\n"
-#: src/LYrcFile.c:605 src/LYrcFile.c:616
-msgid ""
-"# If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
-"# been defined (see below), then all bookmark operations will first\n"
-"# prompt the user to select an active sub-bookmark file. If the default\n"
-"# Lynx bookmark_file is defined (see above), it will be used as the\n"
-"# default selection. When this option is set to \"advanced\", and the\n"
-"# user mode is advanced, the 'v'iew bookmark command will invoke a\n"
-"# statusline prompt instead of the menu seen in novice and intermediate\n"
-"# user modes. When this option is set to \"standard\", the menu will be\n"
-"# presented regardless of user mode.\n"
-msgstr ""
+#: src/LYUtils.c:4217
+#, fuzzy
+msgid "unknown restriction"
+msgstr "Pas de réstriction définies.\n"
-#: src/LYrcFile.c:660 src/LYrcFile.c:671
-msgid ""
-"# personal_mail_address specifies your personal mail address. The\n"
-"# address will be sent during HTTP file transfers for authorization and\n"
-"# logging purposes, and for mailed comments.\n"
-"# If you do not want this information given out, set the NO_FROM_HEADER\n"
-"# to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
-"# could leave this field blank, but then you won't have it included in\n"
-"# your mailed comments.\n"
-msgstr ""
+#: src/LYUtils.c:4248
+msgid "No restrictions set.\n"
+msgstr "Pas de réstriction définies.\n"
-# Let's Talk about Colours!
-#: src/LYrcFile.c:685 src/LYrcFile.c:729 src/LYrcFile.c:740
-msgid ""
-"# show_color specifies how to set the color mode at startup. A value of\n"
-"# \"never\" will force color mode off (treat the terminal as monochrome)\n"
-"# at startup even if the terminal appears to be color capable. A value of\n"
-"# \"always\" will force color mode on even if the terminal appears to be\n"
-"# monochrome, if this is supported by the library used to build lynx.\n"
-"# A value of \"default\" will yield the behavior of assuming\n"
-"# a monochrome terminal unless color capability is inferred at startup\n"
-"# based on the terminal type, or the -color command line switch is used, or\n"
-"# the COLORTERM environment variable is set. The default behavior always is\n"
-"# used in anonymous accounts or if the \"option_save\" restriction is set.\n"
-"# The effect of the saved value can be overridden via\n"
-"# the -color and -nocolor command line switches.\n"
-"# The mode set at startup can be changed via the \"show color\" option in\n"
-"# the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
-"# \"off\" \"show color\" settings will be treated as \"default\".\n"
-msgstr ""
-"# show_color permet de paramétrer le mode couleur à l'initialisation. La valeur\n"
-"# «jamais» désactive le mode couleur (ce qui équivaut à un terminal monochrome)\n"
-"# même si le terminal est capable d'afficher les couleurs. La valeur «toujours»\n"
-"# active le mode couleur même si le terminal est monochrome, en autant que cette valeur\n"
-"# soit incluse dans la librairie utilisée pour créer Lynx. La valeur «implicite» suppose\n"
-"# par défaut un terminal monochrome à moins que la capacité d'afficher les couleurs soit\n"
-"# déterminée à l'initialisation en fonction du type de terminal, ou que l'option\n"
-"# -color soit entrée à la ligne de commande, ou que la variable d'environnement\n"
-"# soit réglée à COLORTERM. La valeur implicite est toujours utilisée dans le cas des\n"
-"# connexions anonymes ou si la restriction «option_save» est activée. L'effet de la\n"
-"# valeur enregistrée peut être annulé en permutant les options -color et -nocolor sur\n"
-"# la ligne de commande. Le mode attribué à l'initialisation peut être modifié au\n"
-"# moyen de l'option «afficher les couleurs» dans le menu Paramètres. Si les paramètres\n"
-"# sont enregistrés, les attributs «oui» et «non» de l'option «afficher les couleurs»\n"
-"# sont interprétés comme étant la valeur «implicite».\n"
-
-#: src/LYrcFile.c:698 src/LYrcFile.c:709
-msgid ""
-"# preferred_language specifies the language in MIME notation (e.g., en,\n"
-"# fr, may be a comma-separated list in decreasing preference)\n"
-"# which Lynx will indicate you prefer in requests to http servers.\n"
-"# If a file in that language is available, the server will send it.\n"
-"# Otherwise, the server will send the file in it's default language.\n"
-msgstr ""
+#: src/LYUtils.c:4251
+msgid "Restrictions set:\n"
+msgstr "Définition de réstriction:\n"
-#: src/LYrcFile.c:709 src/LYrcFile.c:720
-msgid ""
-"# preferred_charset specifies the character set in MIME notation (e.g.,\n"
-"# ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
-"# to http servers using an Accept-Charset header. The value should NOT\n"
-"# include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
-"# by default. May be a comma-separated list.\n"
-"# If a file in that character set is available, the server will send it.\n"
-"# If no Accept-Charset header is present, the default is that any\n"
-"# character set is acceptable. If an Accept-Charset header is present,\n"
-"# and if the server cannot send a response which is acceptable\n"
-"# according to the Accept-Charset header, then the server SHOULD send\n"
-"# an error response, though the sending of an unacceptable response\n"
-"# is also allowed.\n"
-msgstr ""
+#: src/LYUtils.c:5601
+msgid "Ignoring invalid HOME"
+msgstr "Non prise en compte d'un HOME invalide"
-# And what about showing cursors?
-#: src/LYrcFile.c:757 src/LYrcFile.c:800
-msgid ""
-"# show_cursor specifies whether to 'hide' the cursor to the right (and\n"
-"# bottom, if possible) of the screen, or to place it to the left of the\n"
-"# current link in documents, or current option in select popup windows.\n"
-"# Positioning the cursor to the left of the current link or option is\n"
-"# helpful for speech or braille interfaces, and when the terminal is\n"
-"# one which does not distingish the current link based on highlighting\n"
-"# or color. A value of \"on\" will set positioning to the left as the\n"
-"# default while a value of \"off\" will set 'hiding' of the cursor.\n"
-"# The default can be overridden via the -show_cursor command line toggle.\n"
-msgstr ""
-"# show_cursor permet d'indiquer si le curseur doit être 'caché' à la droite\n"
-"# (et au bas, si possible) de l'écran, ou s'il doit être placé à la gauche du\n"
-"# lien actif dans les documents, ou de l'option active dans les fenêtres flash.\n"
-"# Le placement du curseur à la gauche de l'option ou du lien actif est utile dans\n"
-"# le cas des interfaces de reconnaissance de la parole ou de braille, et quand le\n"
-"# terminal est incapable de distinguer le lien actif au moyen de la surbrillance\n"
-"# ou de la couleur. La valeur «oui» règle le placement du curseur à la gauche par\n"
-"# défaut, tandis que la valeur «non» équivaut à 'cacher' le curseur de l'écran.\n"
-"# La valeur implicite peut être annulée à la ligne de commande au moyen de l'option\n"
-"# -show_cursor.\n"
-
-#: src/LYrcFile.c:787 src/LYrcFile.c:798
-msgid ""
-"# select_popups specifies whether the OPTIONs in a SELECT block which\n"
-"# lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
-"# buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
-"# present in the SELECT start tag, Lynx always will create a vertical list\n"
-"# of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
-"# as the default while a value of \"off\" will set use of radio boxes.\n"
-"# The default can be overridden via the -popup command line toggle.\n"
+#: src/LYrcFile.c:20
+msgid "Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n"
msgstr ""
-#: src/LYrcFile.c:811
+#: src/LYrcFile.c:242
msgid ""
-"# show_cursor specifies whether to 'hide' the cursor to the right (and\n"
-"# bottom, if possible) of the screen, or to place it to the left of the\n"
-"# current link in documents, or current option in select popup windows.\n"
-"# Positioning the cursor to the left of the current link or option is\n"
-"# helpful for speech or braille interfaces, and when the terminal is\n"
-"# one which does not distinguish the current link based on highlighting\n"
-"# or color. A value of \"on\" will set positioning to the left as the\n"
-"# default while a value of \"off\" will set 'hiding' of the cursor.\n"
-"# The default can be overridden via the -show_cursor command line toggle.\n"
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
msgstr ""
-#: src/LYrcFile.c:815 src/LYrcFile.c:826
+#: src/LYrcFile.c:249
msgid ""
-"# If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
-"# your keypad when the numlock is on will act as arrow keys:\n"
-"# 8 = Up Arrow\n"
-"# 4 = Left Arrow 6 = Right Arrow\n"
-"# 2 = Down Arrow\n"
-"# and the corresponding keyboard numbers will act as arrow keys,\n"
-"# regardless of whether numlock is on.\n"
+"bookmark_file specifies the name and location of the default bookmark\n"
+"file into which the user can paste links for easy access at a later\n"
+"date.\n"
msgstr ""
+"bookmark_file spécifie le nom et l'emplacement du fichier de signets par défaut\n"
+"dans lequel l'utilisateur peut copier des liens pour un accès rapide\n"
+"ultérieurement.\n"
-#: src/LYrcFile.c:826 src/LYrcFile.c:837
+#: src/LYrcFile.c:254
msgid ""
-"# If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
-"# numbers will appear next to each link and visible form input field.\n"
-"# Numbers are used to select links, or to move the \"current link\" to a\n"
-"# form input field or button. In addition, options in popup menus are\n"
-"# indexed so that the user may type an option number to select an option in\n"
-"# a popup menu, even if the option isn't visible on the screen. Reference\n"
-"# lists and output from the list command also enumerate form inputs.\n"
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
msgstr ""
+"Si case_sensitive_searching est réglé à «ACTIVÉ», lors d'une recherche au\n"
+"moyen des touches 's' ou '/', la recherche tient compte des maj./min. au lieu\n"
+"de reconnaître tous les caractères. La valeur par défaut est «DÉSACTIVÉ».\n"
-#: src/LYrcFile.c:834 src/LYrcFile.c:845
+#: src/LYrcFile.c:259
msgid ""
-"# NOTE: Some fixed format documents may look disfigured when\n"
-"# \"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
-"# enabled.\n"
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
msgstr ""
+"Le paramètre character_set définit la représentation des caractères 8 bits\n"
+"pour votre terminal. Si un tel caractère ne s'affiche pas correctement à\n"
+"votre écran, vous pouvez essayer de changer pour un jeu de caractères 8\n"
+"bits différent ou utiliser les caractères approximatifs 7 bits. Les jeux\n"
+"de caractères valides courants sont :\n"
-#: src/LYrcFile.c:846 src/LYrcFile.c:870
+#: src/LYrcFile.c:266
msgid ""
-"# lineedit_mode specifies the key binding used for inputting strings in\n"
-"# prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
-"# the following control characters are used for moving and deleting:\n"
-"#\n"
-"# Prev Next Enter = Accept input\n"
-"# Move char: <- -> ^G = Cancel input\n"
-"# Move word: ^P ^N ^U = Erase line\n"
-"# Delete char: ^H ^R ^A = Beginning of line\n"
-"# Delete word: ^B ^F ^E = End of line\n"
-"#\n"
-"# Current lineedit modes are:\n"
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
msgstr ""
-#: src/LYrcFile.c:901 src/LYrcFile.c:925
+#: src/LYrcFile.c:274
msgid ""
-"# accept_all_cookies allows the user to tell Lynx to automatically\n"
-"# accept all cookies if desired. The default is \"FALSE\" which will\n"
-"# prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
-"# all cookies.\n"
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
msgstr ""
+"cookie_file spécifie le fichier à partir duquel lire les cookies\n"
+"persistants. Le défaut est ~/.lynx_cookies.\n"
-#: src/LYrcFile.c:909 src/LYrcFile.c:933
+#: src/LYrcFile.c:279
msgid ""
-"# cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
-"# lists of domains (with a leading '.') to automatically accept or\n"
-"# reject all cookies from. The accept_all_cookies parameter will\n"
-"# override any settings made here. If a single domain is specified in\n"
-"# both cookie_accept_domains and in cookie_reject_domains, the rejection\n"
-"# will take precedence.\n"
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
msgstr ""
-#: src/LYrcFile.c:929 src/LYrcFile.c:953
+#: src/LYrcFile.c:292
msgid ""
-"# cookie_file specifies the file in which to store persistent cookies.\n"
-"# The default is ~/.lynx_cookies.\n"
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
msgstr ""
+"Le paramètre dir_list_styles spécifie le style de liste de répertoires sous\n"
+"DIRED_SUPPORT (si l'option est offerte). La valeur «MIXED_STYLE» (défaut)\n"
+"permet de trier fichiers et répertoires ensemble. La valeur «FILES_FIRST»\n"
+"permet de lister les fichiers d'abord tandis que «DIRECTORIES_FIRST» permet\n"
+"de lister les répertoires d'abord.\n"
-#: src/LYrcFile.c:964
+#: src/LYrcFile.c:300
msgid ""
-"# If run_all_execution_links is set \"on\" then all local execution links\n"
-"# will be executed when they are selected.\n"
-"#\n"
-"# WARNING - This is potentially VERY dangerous. Since you may view\n"
-"# information that is written by unknown and untrusted sources\n"
-"# there exists the possibility that Trojan horse links could be\n"
-"# written. Trojan horse links could be written to erase files\n"
-"# or compromise security. This should only be set to \"on\" if\n"
-"# you are viewing trusted source information.\n"
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
msgstr ""
+"Si emacs_keys est réglé à «ACTIVÉ», le mouvement de touche EMACS normal :\n"
+" ^N = bas ^P = haut\n"
+" ^B = gauche ^F = droite\n"
+"est activé.\n"
-#: src/LYrcFile.c:973 src/LYrcFile.c:997
+#: src/LYrcFile.c:306
msgid ""
-"# If verbose_images is \"on\", lynx will print the name of the image\n"
-"# source file in place of [INLINE], [LINK] or [IMAGE]\n"
-"# See also VERBOSE_IMAGES in lynx.cfg\n"
-msgstr ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+msgstr ""
+"file_editor spécifie l'éditeur pour l'édition de fichiers locaux ou l'envoi\n"
+"de courrier. Si aucun n'est précisé, l'édition de fichier est désactivée,\n"
+"à moins qu'elle soit activée de la ligne de commande, auquel cas l'éditeur\n"
+"de lignes sera utilisé pour l'envoi de courrier.\n"
+
+#: src/LYrcFile.c:312
+msgid ""
+"The file_sorting_method specifies which value to sort on when viewing\n"
+"file lists such as FTP directories. The options are:\n"
+" BY_FILENAME -- sorts on the name of the file\n"
+" BY_TYPE -- sorts on the type of the file\n"
+" BY_SIZE -- sorts on the size of the file\n"
+" BY_DATE -- sorts on the date of the file\n"
+msgstr ""
+"file_sorting_method spécifie le mode de tri à utiliser pour consulter\n"
+"des listes de fichiers tels que des répertoires FTP. Les options sont:\n"
+" MOM -- tri selon le nom de fichier\n"
+" TYPE -- tri selon le type de fichier\n"
+" VOLUME -- tri selon le volume du fichier\n"
+" DATE -- tri selon la date du fichier\n"
+
+#: src/LYrcFile.c:324
+msgid ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+msgstr ""
+"lineedit_mode spécifie l'association de touche utilisée pour \n"
+"entrer des chaines de carctère dans les formulaires et les prompts.\n"
+"Si lineedit_mode est égal à \"Default Binding\" alors les caractères\n"
+"de controle suivant seront utilisés pour se déplacer et effacer du \n"
+"texte:\n"
+"\n"
+" Precedent Suivant Entrée = Accepter les données\n"
+"Deplacement char <- -> ^G = Annuler les données\n"
+"Deplacement mot ^P ^N ^U = Effacer la ligne.\n"
+"Effacer char ^H ^R ^A = Début de ligne.\n"
+"Effacer mot ^B ^F ^E = Fin de ligne.\n"
+"\n"
+"Les modes d'édition de ligne courants sont:\n"
+
+#: src/LYrcFile.c:339
+msgid ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+msgstr ""
+"Vous pouvez définir des sous-catégories de signets et de descriptions.\n"
+"Le format est multi_bookmark<lettre_majuscule>=<nom_de_fichier>,<description>\n"
+"vous pouvez définir jusque 26 fichiers de signets (l'alphabet anglais).\n"
+"commencez avec «multi_bookmarkB» puisque 'A' est le fichier implicite (voir ci-après.\n"
+
+#: src/LYrcFile.c:345
+msgid ""
+"personal_mail_address specifies your personal mail address. The\n"
+"address will be sent during HTTP file transfers for authorization and\n"
+"logging purposes, and for mailed comments.\n"
+"If you do not want this information given out, set the NO_FROM_HEADER\n"
+"to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
+"could leave this field blank, but then you won't have it included in\n"
+"your mailed comments.\n"
+msgstr ""
+"personal_mail_address spécifie votre adresse email personelle. \n"
+"Cette adresse sera envoyée lors des transfert de fichiers HTTP comme\n"
+"moyen d'authorisation,de logs et pour les commentaires postés par mail.\n"
+"Si vous ne voulez pas que cette information soit communiquée, définissez\n"
+"la variable NO_FROM_HEADER comme étant vraie (TRUE) dans lynx.cfg, ou \n"
+"utilisez l'option -nofrom en ligne de commande. Vous pouvez aussi laisser\n"
+"ce champ vide, mais alors il n'apparaitra pas dans vos commentaires postés.\n"
+
+#: src/LYrcFile.c:354
+msgid ""
+"preferred_charset specifies the character set in MIME notation (e.g.,\n"
+"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
+"to http servers using an Accept-Charset header. The value should NOT\n"
+"include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
+"by default. May be a comma-separated list.\n"
+"If a file in that character set is available, the server will send it.\n"
+"If no Accept-Charset header is present, the default is that any\n"
+"character set is acceptable. If an Accept-Charset header is present,\n"
+"and if the server cannot send a response which is acceptable\n"
+"according to the Accept-Charset header, then the server SHOULD send\n"
+"an error response, though the sending of an unacceptable response\n"
+"is also allowed.\n"
+msgstr ""
+"preferred_charset spécifie la jeu de caractère en notation MIME (cad \n"
+"ISO-8859-2, ISO-8859-5) que lynx indiquera comme jeu de caractère préféré\n"
+"lors des requètes http en utilisant le header Accept-Charset. Cette valeur\n"
+"ne dois PAS inclure ISO-8859-1 ou US-ASCII car ces valeurs sont toujours\n"
+"prises par défaut. La liste de choix peut être composé d'élément séparés par\n"
+"des virgules. Si un fichier dans ce jeu de caractère est disponible, \n"
+"le serveur vous l'enverra. Si il n'y a pas de header Accept-Charset, le \n"
+"comportement par défaut est d'accepter n'importe quel type de jeu de caractère.\n"
+"Si il éxiste un header Accept-Charset mais que le serveur ne peut renvoyer une\n"
+"réponse acceptable relativement à votre choix, le serveur DEVRAIT renvoyer un \n"
+"message d'erreur bien que le renvoi d'une réponse inacceptable soit permi.\n"
+
+#: src/LYrcFile.c:368
+msgid ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+msgstr ""
+"preferred_language spécifie la langue selon le code MIME (ex., en,\n"
+"fr). Lynx tient compte des préférences lors des requêtes aux serveurs http.\n"
+"Si un fichier est disponible dans la langue précisée, le serveur l'envoie.\n"
+"Sinon, le serveur envoie le fichier dans la langue par défaut.\n"
+
+#: src/LYrcFile.c:377
+msgid ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Si 'run_all_execution_links' est réglé à «activé», tous les liens exécutables locaux sont exécutés lorsqu'ils sont choisis.\n"
+"\n"
+"AVIS - Cette option est potentiellement très dangereuse car elle permet\n"
+" de voir de l'information écrite par des sources inconnues ou non\n"
+" fiables. Il existe un danger que des fichiers Cheval de Troie\n"
+" soient inclus. Les fichiers troyens peuvent provoquer\n"
+" l'effacement de fichiers ou compromettre la sécurité. Cette\n"
+" fonction devrait être réglée à «activé» uniquement si vous\n"
+" consultez de l'information fiable.\n"
+
+#: src/LYrcFile.c:388
+msgid ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Si 'run_execution_links_on_local_files' est réglé à «activé», tous les liens\n"
+"exécutables qui se trouvent dans des fichiers LOCAUX seront exécutés lorsque\n"
+"choisis. Cette option est différente de 'run_all_execution_links' en ce que\n"
+"les permissions d'accès sont accordées uniquement pour les fichiers hébergés\n"
+"sur le serveur local.\n"
+"\n"
+"AVIS - Cette option est potentiellement très dangereuse car elle permet de\n"
+" voir de l'information écrite par des sources inconnues ou non fiables.\n"
+" Il existe un danger que des fichiers Cheval de Troie soient inclus.\n"
+" Les fichiers troyens peuvent provoquer l'effacement de fichiers ou\n"
+" compromettre la sécurité. Cette fonction devrait être réglée à\n"
+" «activé» uniquement si vous consultez de l'information fiable.\n"
+
+#: src/LYrcFile.c:403
+msgid ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+msgstr ""
+"select_popups spécifie si les OPTIONs d'un bloc SELECT qui ne \n"
+"contient pas l'attribut MULTIPLE doivent être présentés comme une liste\n"
+"verticale de boutons radio ou comme un menu popup.Notez que si l'attribut\n"
+"MuLTIPLE est défini dans le tag SELECT, lynx créera toujours une liste \n"
+"verticale de cases à cocher pour chaque OPTION. Une valeur à \"on\" \n"
+"sélectionnera les menus popup par défaut alors qu'une valeur à \"off\" \n"
+"sélectionnera les boutons radio par défaut. Cette option peut être surchargée\n"
+"par l'option -popup en ligne de commande.\n"
+
+#: src/LYrcFile.c:413
+msgid ""
+"show_color specifies how to set the color mode at startup. A value of\n"
+"\"never\" will force color mode off (treat the terminal as monochrome)\n"
+"at startup even if the terminal appears to be color capable. A value of\n"
+"\"always\" will force color mode on even if the terminal appears to be\n"
+"monochrome, if this is supported by the library used to build lynx.\n"
+"A value of \"default\" will yield the behavior of assuming\n"
+"a monochrome terminal unless color capability is inferred at startup\n"
+"based on the terminal type, or the -color command line switch is used, or\n"
+"the COLORTERM environment variable is set. The default behavior always is\n"
+"used in anonymous accounts or if the \"option_save\" restriction is set.\n"
+"The effect of the saved value can be overridden via\n"
+"the -color and -nocolor command line switches.\n"
+"The mode set at startup can be changed via the \"show color\" option in\n"
+"the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
+"\"off\" \"show color\" settings will be treated as \"default\".\n"
+msgstr ""
+"show_color permet de paramétrer le mode couleur à l'initialisation. La\n"
+"valeur «jamais» désactive le mode couleur (ce qui équivaut à un terminal\n"
+"monochrome) même si le terminal est capable d'afficher les couleurs. La\n"
+"valeur «toujours» active le mode couleur même si le terminal est\n"
+"monochrome, en autant que cette valeur soit incluse dans la librairie\n"
+"utilisée pour créer Lynx. La valeur «implicite» suppose par défaut un\n"
+"terminal monochrome à moins que la capacité d'afficher les couleurs soit\n"
+"déterminée à l'initialisation en fonction du type de terminal, ou que\n"
+"l'option -color soit entrée à la ligne de commande, ou que la variable\n"
+"d'environnement soit réglée à COLORTERM. La valeur implicite est toujours\n"
+"utilisée dans le cas des connexions anonymes ou si la restriction\n"
+"«option_save» est activée. L'effet de la valeur enregistrée peut être\n"
+"annulé en permutant les options -color et -nocolor sur la ligne de\n"
+"commande. Le mode attribué à l'initialisation peut être modifié au moyen\n"
+"de l'option «afficher les couleurs» dans le menu Paramètres. Si les\n"
+"paramètres sont enregistrés, les attributs «oui» et «non» de l'option\n"
+"«afficher les couleurs» sont interprétés comme étant la valeur «implicite».\n"
+
+#: src/LYrcFile.c:430
+msgid ""
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
+msgstr ""
+"show_cursor permet d'indiquer si le curseur doit être 'caché' à la droite\n"
+"(et au bas, si possible) de l'écran, ou s'il doit être placé à la gauche du\n"
+"lien actif dans les documents, ou de l'option active dans les fenêtres\n"
+"flash. Le placement du curseur à la gauche de l'option ou du lien actif\n"
+"est utile dans le cas des interfaces de reconnaissance de la parole ou de\n"
+"braille, et quand le terminal est incapable de distinguer le lien actif au\n"
+"moyen de la surbrillance ou de la couleur. La valeur «oui» règle le\n"
+"placement du curseur à la gauche par défaut, tandis que la valeur «non»\n"
+"équivaut à 'cacher' le curseur de l'écran. La valeur implicite peut être\n"
+"annulée à la ligne de commande au moyen de l'option -show_cursor.\n"
+
+#: src/LYrcFile.c:441
+msgid ""
+"show_dotfiles specifies that the directory listing should include\n"
+"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
+"honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
+"restricted via a command line switch. If display of hidden files\n"
+"is disabled, creation of such files via Lynx also is disabled.\n"
+msgstr ""
+"Le paramètre show_dotfiles spécifie que la liste des répertoires doit\n"
+"inclure les fichiers et répertoires «cachés». S'il est réglé à «ACTIVÉ»,\n"
+"il n'est pris en compte que s'il est activé dans userdefs.h et/ou lynx.cfg\n"
+"et s'il n'est pas restreint par une option de la ligne de commande. Si\n"
+"l'affichage des fichiers cachés est désactivé, la création de tels fichiers\n"
+"dans Lynx est aussi désactivée.\n"
+
+#: src/LYrcFile.c:452
+msgid ""
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
+msgstr ""
+"Si le sub_bookmark n'est pas désactivé (\"off\") et que les bookmarks\n"
+"multiples (cf plus bas) ont étés définis, alors toutes les opéations\n"
+"relatives aux bookmarks déclencheront un prompt utilisateur afin q'il\n"
+"puisse sélectionner un fichier de sous bookmark actif. Si le fichier \n"
+"de bookmark par défaut est défini (cf plus haut), il sera utilisé comme\n"
+"la sélection par défaut. Lorsque cette option est définie comme \"avancée\"\n"
+"et que le mode d'utilisation est avancé, la commande 'v'oire les bookmarks\n"
+"invoquera un prompt sur la ligne d'état au lieu du menu qui apparait dans les\n"
+"modes novices et intérmédiaires. Lorsque cette option est définie comme \n"
+"\"standard\", le menu apparaitra quelquesoit le mode d'utilisation.\n"
+
+#: src/LYrcFile.c:464
+msgid ""
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
+msgstr ""
+"Le paramètre user_mode spécifie le niveau de connaissance de Lynx par\n"
+"l'utilisateur. La valeur «NOVICE» (défaut) commande l'affichage de deux\n"
+"lignes supplémentaires d'aide au bas de l'écran pour aider l'utilisateur à\n"
+"apprendre les commandes Lynx de base. Réglez le paramètre user_mode à\n"
+"«INTERMEDIATE» pour éliminer ces lignes. Utilisez l'option «ADVANCED» pour\n"
+"afficher l'URL du lien sélectionné au bas de l'écran.\n"
+
+#: src/LYrcFile.c:472
+msgid ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+msgstr ""
+"Si verbose_images est à \"on\", lynx affichera les noms des fichier d'images\n"
+"sources au lieu de [INLINE],[LINK] ou [IMAGE]\n"
+
+#: src/LYrcFile.c:477
+msgid ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+msgstr ""
+"Si vi_keys est réglé à «ACTIVÉ», le mouvement de touches VI normal :\n"
+" j = bas k = haut\n"
+" h = gauche l = droite\n"
+"est activé. Ces touches sont en minuscule uniquement.\n"
+"Les majuscules 'H', 'J' et 'K' activent l'aide, les touches de raccourci\n"
+"et la configuration des touches respectivement.\n"
+
+#: src/LYrcFile.c:485
+msgid ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+msgstr ""
+"L'option visited_links controle la façon dont Lynx organise les informations\n"
+"sur la page Liens visités.\n"
+
+#: src/LYrcFile.c:693
+msgid ""
+"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
+"your keypad when the numlock is on will act as arrow keys:\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"and the corresponding keyboard numbers will act as arrow keys,\n"
+"regardless of whether numlock is on.\n"
+msgstr ""
+"Si keypad_mode est définit comme \"NUMBERS_AS_ARROWS\", alors les \n"
+"chiffres de votre pavé numérique se comporterons comme des flèches\n"
+"lorsque numlock est à on:\n"
+" 8 = haut \n"
+" 4 = gauche 6 = droite \n"
+" 2 = bas \n"
+"et les chiffres correspondants de votre clavier se comporterons\n"
+"comme des flèches, quelquesoit l'état du numlock.\n"
+
+#: src/LYrcFile.c:702
+msgid ""
+"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
+"appear next to each link and numbers are used to select links.\n"
+msgstr ""
+"Si keypad_mode est défini comme \"LINKS_ARE_NUMBERED\"; alors des \n"
+"chifres apparaitrons à cotés des liens afin de pouvoir sélectionner\n"
+"ces liens\n"
+
+#: src/LYrcFile.c:706
+msgid ""
+"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
+"numbers will appear next to each link and visible form input field.\n"
+"Numbers are used to select links, or to move the \"current link\" to a\n"
+"form input field or button. In addition, options in popup menus are\n"
+"indexed so that the user may type an option number to select an option in\n"
+"a popup menu, even if the option isn't visible on the screen. Reference\n"
+"lists and output from the list command also enumerate form inputs.\n"
+msgstr ""
+"Si keypad_mode est défini comme \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\",\n"
+"alors des nombres apparaitrons à coté de chaque liens et des champs\n"
+"de formulaires. Ces nombres seront utilisés pour sélectionner un lien, \n"
+"ou pour déplacer le \"lien courant\" vers un champ de formulaire ou \n"
+"un bouton. En plus, les options des menus popup seront indexés afin que \n"
+"l'utilisateur puisse tapper un chiffre pour sélectionner une option de l'un\n"
+"de ces menus,même si cette option n'est pas visible à l'écran. Les listes\n"
+"de référence et les sorties de ces listes de commandes enumèrent aussi les\n"
+"champs de formulaires.\n"
+
+#: src/LYrcFile.c:715
+msgid ""
+"NOTE: Some fixed format documents may look disfigured when\n"
+"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
+"enabled.\n"
+msgstr ""
+"NOTE: certain format de document peuvent apparaitre défigurés\n"
+"lorsque \"LINKS_ARE_NUMBERED\" ou \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" \n"
+"sont sélectionnés.\n"
+
+#: src/LYrcFile.c:748
+msgid ""
+"Lynx User Defaults File\n"
+"\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
+msgstr ""
+"Valeurs implicites utilisateur - Lynx\n"
+"\n"
+"Ce fichier contient des options enregistrées à partir du menu Paramètres\n"
+"(normalement à l'aide de la touche '>'). Il n'est pas nécessaire d'éditer\n"
+"ce fichier manuellement puisque les valeurs implicites peuvent être\n"
+"modifiées à partir du menu Paramètres; la prochaine fois que vous\n"
+"enregistrez les nouvelles valeurs dans ce ce menu, le fichier est\n"
+"complètement renouvelé. Vous êtes prévenus... Si vous cherchez le fichier\n"
+"de configuration générale il s'appelle normalement lynx.cfg et il a un\n"
+"contenu et un format différents. Ce n'est pas ce fichier.\n"
diff --git a/gnu/usr.bin/lynx/po/ja.po b/gnu/usr.bin/lynx/po/ja.po
new file mode 100644
index 00000000000..15c41724ae0
--- /dev/null
+++ b/gnu/usr.bin/lynx/po/ja.po
@@ -0,0 +1,5531 @@
+# Japanese PO file for Lynx.
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Masayuki Hatta <mhatta@po.airs.net>, 2000, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lynx 2.8.4.rel1\n"
+"POT-Creation-Date: 2001-06-01 18:55-0400\n"
+"PO-Revision-Date: 2001-05-22 16:47+09:00\n"
+"Last-Translator: Masayuki Hatta <mhatta@po.airs.net>\n"
+"Language-Team: Japanese <ja@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=euc-jp\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#. ******************************************************************
+#. * The following definitions are for status line prompts, messages, or
+#. * warnings issued by Lynx during program execution. You can modify
+#. * them to make them more appropriate for your site. We recommend that
+#. * you extend these definitions to other languages using the gettext
+#. * library. There are also scattered uses of 'gettext()' throughout the
+#. * Lynx source, covering all but those messages which (a) are used for
+#. * debugging (CTRACE) or (b) are constants used in interaction with
+#. * other programs.
+#. *
+#. * Links to collections of alternate definitions, developed by the Lynx
+#. * User Community, are maintained in Lynx links:
+#. *
+#. * http://www.trill-home.com/lynx.html
+#. *
+#. * See ABOUT-NLS and po/readme for details and location of contributed
+#. * translations. When no translation is available, the English default is
+#. * used.
+#.
+#: LYMessages.c:29
+#, c-format
+msgid "Alert!: %s"
+msgstr "·Ù¹ð!: %s"
+
+#: LYMessages.c:30
+msgid "Welcome"
+msgstr "¤è¤¦¤³¤½"
+
+#: LYMessages.c:31 LYMessages.c:32
+msgid "Are you sure you want to quit?"
+msgstr "ËÜÅö¤Ë½ªÎ»¤·¤Æ¤â¤è¤í¤·¤¤¤Ç¤¹¤«?"
+
+#: LYMessages.c:34 LYMessages.c:35
+msgid "Really exit from Lynx?"
+msgstr "ËÜÅö¤Ë Lynx ¤ò½ªÎ»¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:37
+msgid "Connection interrupted."
+msgstr "Àܳ¤¬ÃæÃǤµ¤ì¤Þ¤·¤¿¡£"
+
+#: LYMessages.c:38
+msgid "Data transfer interrupted."
+msgstr "¥Ç¡¼¥¿Å¾Á÷¤¬ÃæÃǤµ¤ì¤Þ¤·¤¿¡£"
+
+#: LYMessages.c:39
+msgid "Cancelled!!!"
+msgstr "¥­¥ã¥ó¥»¥ë¤µ¤ì¤Þ¤·¤¿!!!"
+
+#: LYMessages.c:40
+msgid "Cancelling!"
+msgstr "¥­¥ã¥ó¥»¥ë¤·¤Þ¤¹!"
+
+#: LYMessages.c:41
+msgid "Excellent!!!"
+msgstr "¤½¤¦Íè¤Ê¤¯¤Ã¤Á¤ã!!!"
+
+#: LYMessages.c:42
+msgid "OK"
+msgstr "OK"
+
+#: LYMessages.c:43
+msgid "Done!"
+msgstr "´°Î»!"
+
+#: LYMessages.c:44
+msgid "Bad request!"
+msgstr "̵¸ú¤Ê¥ê¥¯¥¨¥¹¥È¤Ç¤¹!"
+
+#: LYMessages.c:45
+msgid "previous"
+msgstr "Á°¤Î²èÌÌ"
+
+#: LYMessages.c:46
+msgid "next screen"
+msgstr "¼¡¤Î²èÌÌ"
+
+#: LYMessages.c:47
+msgid "HELP!"
+msgstr "¥Ø¥ë¥×!"
+
+#: LYMessages.c:48
+msgid ", help on "
+msgstr ", ¥Ø¥ë¥×¢ª"
+
+#. #define HELP
+#: LYMessages.c:50
+msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
+msgstr "¥³¥Þ¥ó¥É: [Ìð°õ¥­¡¼] °Üư¡¢[?] ¥Ø¥ë¥×¡¢[q] ½ªÎ»¡¢[¢«] Ìá¤ë"
+
+#. #define MOREHELP
+#: LYMessages.c:52
+msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
+msgstr "-- [¥¹¥Ú¡¼¥¹¥­¡¼] ¼¡¥Ú¡¼¥¸¤Ø [Ìð°õ¥­¡¼] °Üư [?] ¥Ø¥ë¥× [q] ½ªÎ»"
+
+#: LYMessages.c:53
+msgid "-- press space for next page --"
+msgstr "-- ¥¹¥Ú¡¼¥¹¥­¡¼¤Ç¼¡¤Î¥Ú¡¼¥¸ --"
+
+#: LYMessages.c:54
+msgid "URL too long"
+msgstr "URL ¤¬Ä¹¤¹¤®¤Þ¤¹"
+
+#. Inactive input fields, messages used with -tna option - kw
+#. #define FORM_LINK_TEXT_MESSAGE_INA
+#: LYMessages.c:60
+msgid "(Text entry field) Inactive. Press <return> to activate."
+msgstr "(¥Æ¥­¥¹¥ÈÆþÎÏ¥Õ¥£¡¼¥ë¥É) ¸½ºß̤ÁªÂò ¥ê¥¿¡¼¥ó¥­¡¼¤ÇÆþÎϳ«»Ï"
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA
+#: LYMessages.c:62
+msgid "(Textarea) Inactive. Press <return> to activate."
+msgstr "(¥Æ¥­¥¹¥È¥¨¥ê¥¢) ¸½ºß̤ÁªÂò ¥ê¥¿¡¼¥ó¥­¡¼¤ÇÆþÎϳ«»Ï"
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA_E
+#: LYMessages.c:64
+#, c-format
+msgid "(Textarea) Inactive. Press <return> to activate (%s for editor)."
+msgstr "(¥Æ¥­¥¹¥È¥¨¥ê¥¢) ̤ÁªÂò ¥ê¥¿¡¼¥ó¤ÇÆþÎϳ«»Ï (%s ¤Ç¥¨¥Ç¥£¥¿µ¯Æ°)"
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA
+#: LYMessages.c:66
+msgid "(Form field) Inactive. Use <return> to edit."
+msgstr "(¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É) ¸½ºß̤ÁªÂò ¥ê¥¿¡¼¥ó¥­¡¼¤ÇÊÔ½¸³«»Ï"
+
+#. #define FORM_TEXT_SUBMIT_MESSAGE_INA_X
+#: LYMessages.c:68
+#, c-format
+msgid "(Form field) Inactive. Use <return> to edit (%s to submit with no cache)."
+msgstr "(¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É) ¸½ºß̤ÁªÂò ¥ê¥¿¡¼¥ó¤ÇÊÔ½¸³«»Ï (%s ¤Ï¥­¥ã¥Ã¥·¥å̵¸ú¤ÇÁ÷¿®)"
+
+#. #define FORM_TEXT_RESUBMIT_MESSAGE_INA
+#: LYMessages.c:70
+msgid "(Form field) Inactive. Press <return> to edit, press <return> twice to submit."
+msgstr "(¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É) ¸½ºß̤ÁªÂò ¥ê¥¿¡¼¥ó¤ÇÊÔ½¸¡¢¥ê¥¿¡¼¥ó2²ó¤ÇÁ÷¿®"
+
+#. #define FORM_TEXT_SUBMIT_MAILTO_MSG_INA
+#: LYMessages.c:72
+msgid "(mailto form field) Inactive. Press <return> to change."
+msgstr "(mailto ¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É) ¸½ºß̤ÁªÂò ¥ê¥¿¡¼¥ó¤ÇÊѹ¹"
+
+#. #define FORM_LINK_PASSWORD_MESSAGE_INA
+#: LYMessages.c:74
+msgid "(Password entry field) Inactive. Press <return> to activate."
+msgstr "(¥Ñ¥¹¥ï¡¼¥ÉÆþÎÏ¥Õ¥£¡¼¥ë¥É) ¸½ºß̤ÁªÂò ¥ê¥¿¡¼¥ó¥­¡¼¤ÇÆþÎϳ«»Ï"
+
+#. #define FORM_LINK_FILE_UNM_MSG
+#: LYMessages.c:77
+msgid "UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off."
+msgstr "Êѹ¹¤Ç¤­¤Ê¤¤¥Õ¥¡¥¤¥ëÆþÎÏ¥Õ¥£¡¼¥ë¥É [¢¬][¢­]¤«¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_FILE_MESSAGE
+#: LYMessages.c:79
+msgid "(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off."
+msgstr "(¥Õ¥¡¥¤¥ëÆþÎÏ¥Õ¥£¡¼¥ë¥É) ¥Õ¥¡¥¤¥ë̾¤òÆþÎÏ [¢¬][¢­]¤«¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_TEXT_MESSAGE
+#: LYMessages.c:81
+msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(¥Æ¥­¥¹¥ÈÆþÎÏ¥Õ¥£¡¼¥ë¥É) ¥Æ¥­¥¹¥È¤òÆþÎÏ [¢¬][¢­] ¤È¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE
+#: LYMessages.c:83
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off."
+msgstr "(¥Æ¥­¥¹¥È¥¨¥ê¥¢) ¥Æ¥­¥¹¥È¤òÆþÎÏ [¢¬][¢­] ¤È¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_E
+#: LYMessages.c:85
+#, c-format
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor)."
+msgstr "(¥Æ¥­¥¹¥È¥¨¥ê¥¢) ¥Æ¥­¥¹¥È¤òÆþÎÏ [¢¬][¢­] ¤È¥¿¥Ö¤Ç°Üư (%s ¤Ç¥¨¥Ç¥£¥¿µ¯Æ°)"
+
+#. #define FORM_LINK_TEXT_UNM_MSG
+#: LYMessages.c:87
+msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
+msgstr "Êѹ¹¤Ç¤­¤Ê¤¤¥Õ¥©¡¼¥à¥Æ¥­¥¹¥È¥Õ¥£¡¼¥ë¥É [¢¬][¢­]¤«¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE
+#: LYMessages.c:89
+msgid "(Form field) Enter text. Use <return> to submit."
+msgstr "(¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É) ¥Æ¥­¥¹¥È¤òÆþÎÏ ¥ê¥¿¡¼¥ó¥­¡¼¤ÇÁ÷¿®"
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_X
+#: LYMessages.c:91
+#, c-format
+msgid "(Form field) Enter text. Use <return> to submit (%s for no cache)."
+msgstr "(¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É) ¥Æ¥­¥¹¥È¤òÆþÎÏ ¥ê¥¿¡¼¥ó¥­¡¼¤ÇÁ÷¿® (%s ¤Ç¥­¥ã¥Ã¥·¥å̵¸ú)"
+
+#. #define FORM_LINK_TEXT_RESUBMIT_MESSAGE
+#: LYMessages.c:93
+msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
+msgstr "(¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É) ¥Æ¥­¥¹¥È¤òÆþÎÏ ¥ê¥¿¡¼¥ó¥­¡¼¤ÇÁ÷¿®¡¢Ìð°õ¥­¡¼¤«¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_TEXT_SUBMIT_UNM_MSG
+#: LYMessages.c:95
+msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
+msgstr "Êѹ¹¤Ç¤­¤Ê¤¤¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É [¢¬][¢­]¤«¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_MSG
+#: LYMessages.c:97
+msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
+msgstr "(mailto ¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É) ¥Æ¥­¥¹¥È¤òÆþÎÏ ¥ê¥¿¡¼¥ó¤ÇÁ÷¿®¡¢Ìð°õ¥­¡¼¤Ç°Üư"
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:99
+msgid "(mailto form field) Mail is disallowed so you cannot submit."
+msgstr "(mailto ¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É) ¥á¡¼¥ë¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤ÇÁ÷¿®¤Ç¤­¤Þ¤»¤ó¡£"
+
+#. #define FORM_LINK_PASSWORD_MESSAGE
+#: LYMessages.c:101
+msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(¥Ñ¥¹¥ï¡¼¥ÉÆþÎÏ¥Õ¥£¡¼¥ë¥É) ¥Æ¥­¥¹¥È¤òÆþÎÏ [¢¬][¢­]¤«¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_PASSWORD_UNM_MSG
+#: LYMessages.c:103
+msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
+msgstr "Êѹ¹¤Ç¤­¤Ê¤¤¥Ñ¥¹¥ï¡¼¥É¥Õ¥©¡¼¥à [¢¬][¢­]¤«¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_CHECKBOX_MESSAGE
+#: LYMessages.c:105
+msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
+msgstr "(¥Á¥§¥Ã¥¯¥Ü¥Ã¥¯¥¹) [¢ª] ¤«¥ê¥¿¡¼¥ó¥­¡¼¤Ç¥È¥°¥ëÊѹ¹"
+
+#. #define FORM_LINK_CHECKBOX_UNM_MSG
+#: LYMessages.c:107
+msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
+msgstr "Êѹ¹¤Ç¤­¤Ê¤¤¥Õ¥©¡¼¥à¥Á¥§¥Ã¥¯¥Ü¥Ã¥¯¥¹ [¢¬][¢­]¤«¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_RADIO_MESSAGE
+#: LYMessages.c:109
+msgid "(Radio Button) Use right-arrow or <return> to toggle."
+msgstr "(¥é¥¸¥ª¥Ü¥¿¥ó) [¢ª] ¤«¥ê¥¿¡¼¥ó¥­¡¼¤Ç¥È¥°¥ëÁªÂò"
+
+#. #define FORM_LINK_RADIO_UNM_MSG
+#: LYMessages.c:111
+msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
+msgstr "Êѹ¹¤Ç¤­¤Ê¤¤¥Õ¥©¡¼¥à¥é¥¸¥ª¥Ü¥¿¥ó [¢¬][¢­]¤«¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_SUBMIT_PREFIX
+#: LYMessages.c:113
+msgid "Submit ('x' for no cache) to "
+msgstr "Á÷¿®([x] ¤Ç¥­¥ã¥Ã¥·¥å̵¸ú): "
+
+#. #define FORM_LINK_RESUBMIT_PREFIX
+#: LYMessages.c:115
+msgid "Submit to "
+msgstr "Á÷¿®ÂоÝ: "
+
+#. #define FORM_LINK_SUBMIT_MESSAGE
+#: LYMessages.c:117
+msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
+msgstr "(¥Õ¥©¡¼¥àÁ÷¿®¥Ü¥¿¥ó) [¢ª] ¤«¥ê¥¿¡¼¥ó¥­¡¼¤ÇÁ÷¿® ([x] ¤Ç¥­¥ã¥Ã¥·¥å̵¸ú)"
+
+#. #define FORM_LINK_RESUBMIT_MESSAGE
+#: LYMessages.c:119
+msgid "(Form submit button) Use right-arrow or <return> to submit."
+msgstr "(¥Õ¥©¡¼¥àÁ÷¿®¥Ü¥¿¥ó) [¢ª] ¤«¥ê¥¿¡¼¥ó¥­¡¼¤ÇÁ÷¿®"
+
+#. #define FORM_LINK_SUBMIT_DIS_MSG
+#: LYMessages.c:121
+msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
+msgstr "̵¸ú¤Ë¤µ¤ì¤¿Á÷¿®¥Ü¥¿¥ó [¢¬][¢­]¤«¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_SUBMIT_MAILTO_PREFIX
+#: LYMessages.c:123
+msgid "Submit mailto form to "
+msgstr "mailto ¥Õ¥©¡¼¥à¤ò°Ê²¼¤ËÁ÷¿®: "
+
+#. #define FORM_LINK_SUBMIT_MAILTO_MSG
+#: LYMessages.c:125
+msgid "(mailto form submit button) Use right-arrow or <return> to submit."
+msgstr "(mailto ¥Õ¥©¡¼¥àÁ÷¿®¥Ü¥¿¥ó) [¢ª]¤«¥ê¥¿¡¼¥ó¤ÇÁ÷¿®"
+
+#. #define FORM_LINK_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:127
+msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
+msgstr "(mailto ¥Õ¥©¡¼¥àÁ÷¿®¥Ü¥¿¥ó) ¥á¡¼¥ë¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤ÇÁ÷¿®¤Ç¤­¤Þ¤»¤ó"
+
+#. #define FORM_LINK_RESET_MESSAGE
+#: LYMessages.c:129
+msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
+msgstr "(¥Õ¥©¡¼¥à¥ê¥»¥Ã¥È¥Ü¥¿¥ó) [¢ª] ¤«¥ê¥¿¡¼¥ó¥­¡¼¤Ç¥Õ¥©¡¼¥àÆâÍÆ¤ò¥ê¥»¥Ã¥È"
+
+#. #define FORM_LINK_RESET_DIS_MSG
+#: LYMessages.c:131
+msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
+msgstr "̵¸ú¤Ë¤µ¤ì¤¿¥Õ¥©¡¼¥à¥ê¥»¥Ã¥È¥Ü¥¿¥ó [¢¬][¢­]¤«¥¿¥Ö¤Ç°Üư"
+
+#. #define FORM_LINK_OPTION_LIST_MESSAGE
+#: LYMessages.c:133
+msgid "(Option list) Hit return and use arrow keys and return to select option."
+msgstr "(¥ª¥×¥·¥ç¥ó¥ê¥¹¥È) ¥ê¥¿¡¼¥ó¥­¡¼¤ò²¡¤·¡¢Ìð°õ¥­¡¼¤È¥ê¥¿¡¼¥ó¥­¡¼¤Ç°ìÍ÷¤«¤éÁªÂò"
+
+#. #define CHOICE_LIST_MESSAGE
+#: LYMessages.c:135
+msgid "(Choice list) Hit return and use arrow keys and return to select option."
+msgstr "(¥Á¥ç¥¤¥¹¥ê¥¹¥È) ¥ê¥¿¡¼¥ó¥­¡¼¤ò²¡¤·¡¢Ìð°õ¥­¡¼¤È¥ê¥¿¡¼¥ó¥­¡¼¤Ç°ìÍ÷¤«¤éÁªÂò"
+
+#. #define FORM_LINK_OPTION_LIST_UNM_MSG
+#: LYMessages.c:137
+msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
+msgstr "Êѹ¹¤Ç¤­¤Ê¤¤¥ª¥×¥·¥ç¥ó¥ê¥¹¥È¤Ç¤¹¡£¥ê¥¿¡¼¥ó¤«Ìð°õ¥­¡¼¤Ç±ÜÍ÷¤Þ¤¿¤Ï°Üư"
+
+#. #define CHOICE_LIST_UNM_MSG
+#: LYMessages.c:139
+msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
+msgstr "Êѹ¹¤Ç¤­¤Ê¤¤ÁªÂò¥ê¥¹¥È¤Ç¤¹¡£¥ê¥¿¡¼¥ó¥­¡¼¤«Ìð°õ¥­¡¼¤Ç±ÜÍ÷¤Þ¤¿¤Ï°Üư"
+
+#: LYMessages.c:140
+msgid "Submitting form..."
+msgstr "¥Õ¥©¡¼¥à¤òÁ÷¿®¤·¤Æ¤¤¤Þ¤¹..."
+
+#: LYMessages.c:141
+msgid "Resetting form..."
+msgstr "¥Õ¥©¡¼¥à¤ò¥ê¥»¥Ã¥È¤·¤Æ¤¤¤Þ¤¹..."
+
+#. #define RELOADING_FORM
+#: LYMessages.c:143
+msgid "Reloading document. Any form entries will be lost!"
+msgstr "ʸ½ñ¤ÎºÆÆÉ¤ß¹þ¤ßÃæ¡£¥Õ¥©¡¼¥àÆâÍÆ¤ÏÁ´¤Æ¼º¤ï¤ì¤Þ¤¹!"
+
+#: LYMessages.c:144
+#, c-format
+msgid "Warning: Cannot transcode form data to charset %s!"
+msgstr "Ãí°Õ: ¥Õ¥©¡¼¥à¥Ç¡¼¥¿¤ò¥­¥ã¥é¥¯¥¿¥»¥Ã¥È %s ¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó!"
+
+#. #define NORMAL_LINK_MESSAGE
+#: LYMessages.c:147
+msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
+msgstr "(Ä̾ï¥ê¥ó¥¯) [¢ª] ¤«¥ê¥¿¡¼¥ó¥­¡¼¤ÇÁªÂò"
+
+#: LYMessages.c:148
+msgid "The resource requested is not available at this time."
+msgstr "¸½ºßÍ׵ᤵ¤ì¤¿¥ê¥½¡¼¥¹¤ÏÍøÍѤǤ­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:149
+msgid "Enter Lynx keystroke command: "
+msgstr "Lynx ¤Î¥³¥Þ¥ó¥É¥­¡¼¤òÆþÎÏ: "
+
+#: LYMessages.c:150
+msgid "Looking up "
+msgstr "õº÷Ãæ: "
+
+#: LYMessages.c:151
+#, c-format
+msgid "Getting %s"
+msgstr "%s ¤ò¼èÆÀÃæ"
+
+#: LYMessages.c:152
+#, c-format
+msgid "Skipping %s"
+msgstr "%s ¤òÈô¤Ð¤·¤Þ¤¹"
+
+#: LYMessages.c:153
+#, c-format
+msgid "Using %s"
+msgstr "%s ¤ò»È¤¤¤Þ¤¹"
+
+#: LYMessages.c:154
+#, c-format
+msgid "Illegal URL: %s"
+msgstr "ÉÔÀµ¤Ê URL ¤Ç¤¹: %s"
+
+#: LYMessages.c:155
+#, c-format
+msgid "Badly formed address %s"
+msgstr "%s ¤Ï¥¢¥É¥ì¥¹¤È¤·¤ÆÌµ¸ú¤Ç¤¹"
+
+#: LYMessages.c:156
+#, c-format
+msgid "URL: %s"
+msgstr "URL: %s"
+
+#: LYMessages.c:157
+msgid "Unable to access WWW file!!!"
+msgstr "WWW ¥Õ¥¡¥¤¥ë¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó!!!"
+
+#: LYMessages.c:158
+#, c-format
+msgid "This is a searchable index. Use %s to search."
+msgstr "¤³¤ì¤Ï¸¡º÷²Äǽ¤Ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ç¤¹¡£%s ¤Ç¸¡º÷¤Ç¤­¤Þ¤¹¡£"
+
+#. #define WWW_INDEX_MORE_MESSAGE
+#: LYMessages.c:160
+#, c-format
+msgid "--More-- This is a searchable index. Use %s to search."
+msgstr "--³¤­¤¢¤ê-- ¤³¤ì¤Ï¸¡º÷²Äǽ¤Ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ç¤¹¡£%s ¤Ç¸¡º÷¤Ç¤­¤Þ¤¹¡£"
+
+#: LYMessages.c:161
+msgid "You have entered an invalid link number."
+msgstr "ÉÔÀµ¤Ê¥ê¥ó¥¯Èֹ椬ÆþÎϤµ¤ì¤Þ¤·¤¿¡£"
+
+#. #define SOURCE_HELP
+#: LYMessages.c:163
+msgid "Currently viewing document source. Press '\\' to return to rendered version."
+msgstr "¸½ºßʸ½ñ¤Î¥½¡¼¥¹¤ò±ÜÍ÷Ãæ¤Ç¤¹¡£[\\] ¤ÇÄ̾ï²èÌ̤ËÌá¤ê¤Þ¤¹¡£"
+
+#. #define NOVICE_LINE_ONE
+#: LYMessages.c:165
+msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
+msgstr " Ìð°õ¥­¡¼: [¢¬][¢­]¤Ç°Üư [¢ª]¤Ç¥ê¥ó¥¯¤òé¤ë [¢«]¤Ç°ì¤ÄÌá¤ë \n"
+
+#. #define NOVICE_LINE_TWO
+#: LYMessages.c:167
+msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
+msgstr " [h]¥Ø¥ë¥×[o]ÀßÄê[p]°õºþ[g]°Üư[m]¥á¥¤¥ó²èÌÌ[q]½ªÎ» /=¸¡º÷ [Delete]=ÍúÎò \n"
+
+#. #define NOVICE_LINE_TWO_A
+#: LYMessages.c:169
+msgid " O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)uit \n"
+msgstr " [o]¤½¤Î¾[h]¥Ø¥ë¥×[k]¥­¡¼ÇÛÃÖ[g]°Üư[p]°õºþ[m]¥á¥¤¥ó [o]¥ª¥×¥·¥ç¥ó [q]½ªÎ» \n"
+
+#. #define NOVICE_LINE_TWO_B
+#: LYMessages.c:171
+msgid " O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n"
+msgstr " [o]¤½¤Î¾[b]Ìá¤ë[e]ÊÔ½¸[d]¥À¥¦¥ó¥í¡¼¥É [^R]ºÆÆÉ¹þ[^W]¥¯¥ê¥¢ ʸ½ñ¸¡º÷: / \n"
+
+#. #define NOVICE_LINE_TWO_C
+#: LYMessages.c:173
+msgid "O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)emove \n"
+msgstr "[o]¤½¤Î¾[c]¥³¥á¥ó¥È ÍúÎò: [Backspace] ¥Ö¥Ã¥¯¥Þ¡¼¥¯: [v]±ÜÍ÷[a]ÄɲÃ[r]ºï½ü \n"
+
+#. #define FORM_NOVICELINE_ONE
+#: LYMessages.c:175
+msgid " Enter text into the field by typing on the keyboard "
+msgstr " ¥­¡¼¥Ü¡¼¥É¤ò¥¿¥¤¥×¤¹¤ë¤³¤È¤Ç¥Æ¥­¥¹¥È¤ò¥Õ¥£¡¼¥ë¥ÉÆâ¤ËÆþÎÏ"
+
+#. #define FORM_NOVICELINE_TWO
+#: LYMessages.c:177
+msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U ¤Ç¥Õ¥£¡¼¥ë¥ÉÆâ¤ÎÁ´¥Æ¥­¥¹¥È¤òºï½ü¡¢[Backspace] ¤Ç°ìʸ»úºï½ü "
+
+#. #define FORM_NOVICELINE_TWO_DELBL
+#: LYMessages.c:179
+msgid " Ctrl-U to delete text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U ¤Ç¥Õ¥£¡¼¥ë¥ÉÆâ¤Î¥Æ¥­¥¹¥È¤òºï½ü¡¢[Backspace] ¤Ç°ìʸ»úºï½ü "
+
+#. #define FORM_NOVICELINE_TWO_VAR
+#: LYMessages.c:181
+#, c-format
+msgid " %s to delete all text in field, [Backspace] to delete a character "
+msgstr " %s ¤Ç¥Õ¥£¡¼¥ë¥ÉÆâ¤ÎÁ´¥Æ¥­¥¹¥È¤òºï½ü¡¢[Backspace] ¤Ç°ìʸ»úºï½ü "
+
+#. #define FORM_NOVICELINE_TWO_DELBL_VAR
+#: LYMessages.c:183
+#, c-format
+msgid " %s to delete text in field, [Backspace] to delete a character "
+msgstr " %s ¤Ç¥Õ¥£¡¼¥ë¥ÉÆâ¤Î¥Æ¥­¥¹¥È¤òºï½ü¡¢[Backspace] ¤Ç°ìʸ»úºï½ü "
+
+#. mailto
+#: LYMessages.c:186
+msgid "Malformed mailto form submission! Cancelled!"
+msgstr "ÉÔÀµ¤Ê mailto ¥Õ¥©¡¼¥àÁ÷¿®¤Ç¤¹! ¥­¥ã¥ó¥»¥ë¤µ¤ì¤Þ¤·¤¿!"
+
+#: LYMessages.c:187
+msgid "Warning! Control codes in mail address replaced by ?"
+msgstr "Ãí°Õ! ¥á¡¼¥ë¥¢¥É¥ì¥¹Ãæ¤Î¥³¥ó¥È¥í¡¼¥ë¥³¡¼¥É¤Ï ? ¤ÇÃÖ´¹¤µ¤ì¤Þ¤¹"
+
+#: LYMessages.c:188
+msgid "Mail disallowed! Cannot submit."
+msgstr "¥á¡¼¥ë¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹! Á÷¿®¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:189
+msgid "Mailto form submission failed!"
+msgstr "Mailto ¥Õ¥©¡¼¥à¤ÎÁ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿!"
+
+#: LYMessages.c:190
+msgid "Mailto form submission Cancelled!!!"
+msgstr "Mailto ¥Õ¥©¡¼¥à¤ÎÁ÷¿®¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¤Þ¤·¤¿!!!"
+
+#: LYMessages.c:191
+msgid "Sending form content..."
+msgstr "¥Õ¥©¡¼¥à¤ÎÆâÍÆ¤òÁ÷¿®Ãæ..."
+
+#: LYMessages.c:192
+msgid "No email address is present in mailto URL!"
+msgstr "mailto URL ¤ËÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#. #define MAILTO_URL_TEMPOPEN_FAILED
+#: LYMessages.c:194
+msgid "Unable to open temporary file for mailto URL!"
+msgstr "mailto URL ¤Î¤¿¤á¤Î°ì¼¡¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó!"
+
+#. #define INC_ORIG_MSG_PROMPT
+#: LYMessages.c:196
+msgid "Do you wish to include the original message?"
+msgstr "¸µ¤Î¥á¥Ã¥»¡¼¥¸¤ò´Þ¤á¤Þ¤¹¤«?"
+
+#. #define INC_PREPARSED_MSG_PROMPT
+#: LYMessages.c:198
+msgid "Do you wish to include the preparsed source?"
+msgstr "²òÀϺѤߤΥ½¡¼¥¹¤ò´Þ¤á¤Þ¤¹¤«?"
+
+#. #define SPAWNING_EDITOR_FOR_MAIL
+#: LYMessages.c:200
+msgid "Spawning your selected editor to edit mail message"
+msgstr "¥á¡¼¥ëËÜʸ¤òÊÔ½¸¤¹¤ë¤¿¤á»ØÄê¤Î¥¨¥Ç¥£¥¿¤òµ¯Æ°¤·¤Æ¤¤¤Þ¤¹"
+
+#. #define ERROR_SPAWNING_EDITOR
+#: LYMessages.c:202
+msgid "Error spawning editor, check your editor definition in the options menu"
+msgstr "¥¨¥Ç¥£¥¿¤Îµ¯Æ°¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£ÀßÄê¥á¥Ë¥å¡¼¤Î¥¨¥Ç¥£¥¿¤ÎÀßÄê¤ò³Î¤«¤á¤Æ²¼¤µ¤¤¡£"
+
+#: LYMessages.c:203
+msgid "Send this comment?"
+msgstr "¤³¤Î¥³¥á¥ó¥È¤òÁ÷¤ê¤Þ¤¹¤«?"
+
+#: LYMessages.c:204
+msgid "Send this message?"
+msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ê¤Þ¤¹¤«?"
+
+#: LYMessages.c:205
+msgid "Sending your message..."
+msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¤Ã¤Æ¤¤¤Þ¤¹..."
+
+#: LYMessages.c:206
+msgid "Sending your comment:"
+msgstr "¥³¥á¥ó¥ÈÁ÷ÉÕÀè:"
+
+#. textarea
+#: LYMessages.c:209
+msgid "Not in a TEXTAREA; cannot use external editor."
+msgstr "¥Æ¥­¥¹¥È¥¨¥ê¥¢¤Ç¤Ï¤Ê¤¤¤Î¤Ç³°Éô¥¨¥Ç¥£¥¿¤Ï»È¤¨¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:210
+msgid "Not in a TEXTAREA; cannot use command."
+msgstr "¥Æ¥­¥¹¥È¥¨¥ê¥¢¤Ç¤Ï¤Ê¤¤¤Î¤Ç¥³¥Þ¥ó¥É¤Ï»È¤¨¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:213
+msgid "file: ACTIONs are disallowed!"
+msgstr "file: ACTION ¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#. #define FILE_SERVED_LINKS_DISALLOWED
+#: LYMessages.c:215
+msgid "file: URLs via served links are disallowed!"
+msgstr "file: Ä󶡤µ¤ì¤¿¥ê¥ó¥¯·Ðͳ¤Î URL ¤Ïǧ¤á¤é¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#: LYMessages.c:216
+msgid "Access to local files denied."
+msgstr "¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¤Ø¤Î¥¢¥¯¥»¥¹¤ÏµñÈݤµ¤ì¤Þ¤·¤¿¡£"
+
+#: LYMessages.c:217
+msgid "file: URLs via bookmarks are disallowed!"
+msgstr "file: ¥Ö¥Ã¥¯¥Þ¡¼¥¯·Ðͳ¤Î URL ¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#. #define SPECIAL_VIA_EXTERNAL_DISALLOWED
+#: LYMessages.c:219
+msgid "This special URL is not allowed in external documents!"
+msgstr "¤³¤ÎÆÃÊÌ¤Ê URL ¤Ï³°Éôʸ½ñÃæ¤Ç¤Ïǧ¤á¤é¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#: LYMessages.c:220
+msgid "Press <return> to return to Lynx."
+msgstr "¥ê¥¿¡¼¥ó¥­¡¼¤Ç Lynx ¤ËÌá¤ê¤Þ¤¹¡£"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:223
+msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
+msgstr "DCL ¥µ¥Ö¥×¥í¥»¥¹¤òµ¯Æ°¤·¤Æ¤¤¤Þ¤¹¡£'logout' ¤Ç Lynx ¤ËÌá¤ê¤Þ¤¹¡£\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:227
+msgid "Type EXIT to return to Lynx.\n"
+msgstr "EXIT ¤È¥¿¥¤¥×¤¹¤ë¤È Lynx ¤ËÌá¤ê¤Þ¤¹¡£\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:230
+msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
+msgstr "¥Ç¥Õ¥©¥ë¥È¥·¥§¥ë¤òµ¯Æ°¤·¤Þ¤·¤¿¡£'exit' ¤Ç Lynx ¤ËÌá¤ê¤Þ¤¹¡£\n"
+
+#: LYMessages.c:233
+msgid "Spawning is currently disabled."
+msgstr "³°Éô¥³¥Þ¥ó¥Éµ¯Æ°¤Ï¸½ºß¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:234
+msgid "The 'd'ownload command is currently disabled."
+msgstr "¥À¥¦¥ó¥í¡¼¥É¥³¥Þ¥ó¥É [d] ¤Ï¸½ºßÍøÍѤǤ­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:235
+msgid "You cannot download an input field."
+msgstr "ÆþÎÏ¥Õ¥£¡¼¥ë¥É¤ò¥À¥¦¥ó¥í¡¼¥É¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:236
+msgid "Form has a mailto action! Cannot download."
+msgstr "¥Õ¥©¡¼¥à¤Ë¤Ï mailto ¥¢¥¯¥·¥ç¥ó¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹! ¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:237
+msgid "You cannot download a mailto: link."
+msgstr "mailto: ¥ê¥ó¥¯¤Ï¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:238
+msgid "You cannot download cookies."
+msgstr "¥¯¥Ã¥­¡¼¤ò¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:239
+msgid "You cannot download a printing option."
+msgstr "°õºþ¥ª¥×¥·¥ç¥ó¤ò¥À¥¦¥ó¥í¡¼¥É¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:240
+msgid "You cannot download an upload option."
+msgstr "¥¢¥Ã¥×¥í¡¼¥É¥ª¥×¥·¥ç¥ó¤ò¥À¥¦¥ó¥í¡¼¥É¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:241
+msgid "You cannot download an permit option."
+msgstr "µö²Ä¥ª¥×¥·¥ç¥ó¤ò¥À¥¦¥ó¥í¡¼¥É¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:242
+msgid "This special URL cannot be downloaded!"
+msgstr "¤³¤ÎÆÃ¼ì¤Ê URL ¤Ï¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó!"
+
+#: LYMessages.c:243
+msgid "Nothing to download."
+msgstr "¥À¥¦¥ó¥í¡¼¥É¤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:244
+msgid "Trace ON!"
+msgstr "ÄÉÀ׳«»Ï!"
+
+#: LYMessages.c:245
+msgid "Trace OFF!"
+msgstr "ÄÉÀ×½ªÎ»!"
+
+#. #define CLICKABLE_IMAGES_ON
+#: LYMessages.c:247
+msgid "Links will be included for all images! Reloading..."
+msgstr "²èÁü¤¹¤Ù¤Æ¤Ø¤Î¥ê¥ó¥¯¤òɽ¼¨¤·¤Þ¤¹! ºÆÆÉ¤ß¹þ¤ßÃæ..."
+
+#. #define CLICKABLE_IMAGES_OFF
+#: LYMessages.c:249
+msgid "Standard image handling restored! Reloading..."
+msgstr "ɸ½àŪ¤Ê²èÁü¤Î¼è¤ê°·¤¤¤ËÌᤷ¤Þ¤¹! ºÆÆÉ¤ß¹þ¤ßÃæ..."
+
+#. #define PSEUDO_INLINE_ALTS_ON
+#: LYMessages.c:251
+msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
+msgstr "ALT »ØÄê¤Î̵¤¤¥¤¥ó¥é¥¤¥ó¤Ëµ¿»÷Ū ALT ¤òÁÞÆþ¤·¤Þ¤¹¡£ºÆÆÉ¤ß¹þ¤ßÃæ..."
+
+#. #define PSEUDO_INLINE_ALTS_OFF
+#: LYMessages.c:253
+msgid "Inlines without an ALT string specified will be ignored! Reloading..."
+msgstr "ALT »ØÄê¤Î̵¤¤¥¤¥ó¥é¥¤¥ó¤Ï̵»ë¤µ¤ì¤Þ¤¹! ºÆÆÉ¤ß¹þ¤ßÃæ..."
+
+#: LYMessages.c:254
+msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
+msgstr "À¸ 8 ¥Ó¥Ã¥È / CJK ¥â¡¼¥É ¥È¥°¥ë¥ª¥Õ! ºÆÆÉ¤ß¹þ¤ßÃæ..."
+
+#: LYMessages.c:255
+msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
+msgstr "À¸ 8 ¥Ó¥Ã¥È / CJK ¥â¡¼¥É ¥È¥°¥ë¥ª¥ó! ºÆÆÉ¤ß¹þ¤ßÃæ..."
+
+#. #define HEAD_D_L_OR_CANCEL
+#: LYMessages.c:257
+msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
+msgstr "[d]ʸ½ñ ¤« [l]¥ê¥ó¥¯¤Ë HEAD ¥ê¥¯¥¨¥¹¥È¤òÁ÷¤ê¤Þ¤¹¤«? ([c]¥­¥ã¥ó¥»¥ë): "
+
+#. #define HEAD_D_OR_CANCEL
+#: LYMessages.c:259
+msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
+msgstr "[d]ʸ½ñ ¤Ë HEAD ¥ê¥¯¥¨¥¹¥È¤òÁ÷¤ê¤Þ¤¹¤«? ([c]¥­¥ã¥ó¥»¥ë): "
+
+#: LYMessages.c:260
+msgid "Sorry, the document is not an http URL."
+msgstr "¤³¤Îʸ½ñ¤Ï http URL ¤Ç¤Ï¤Ê¤¤¤è¤¦¤Ç¤¹¡£"
+
+#: LYMessages.c:261
+msgid "Sorry, the link is not an http URL."
+msgstr "¤³¤Î¥ê¥ó¥¯¤Ï http URL ¤Ç¤Ï¤Ê¤¤¤è¤¦¤Ç¤¹¡£"
+
+#: LYMessages.c:262
+msgid "Sorry, the ACTION for this form is disabled."
+msgstr "¤³¤Î¥Õ¥©¡¼¥à¤Ø¤Î ACTION ¤Ï¤Ç¤­¤Þ¤»¤ó¡£"
+
+#. #define FORM_ACTION_NOT_HTTP_URL
+#: LYMessages.c:264
+msgid "Sorry, the ACTION for this form is not an http URL."
+msgstr "¤³¤Î¥Õ¥©¡¼¥à¤Ø¤Î ACTION ¤Ï http URL ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:265
+msgid "Not an http URL or form ACTION!"
+msgstr "http URL ¤Ç¤â¥Õ¥©¡¼¥à ACTION ¤Ç¤â¤¢¤ê¤Þ¤»¤ó!"
+
+#: LYMessages.c:266
+msgid "This special URL cannot be a form ACTION!"
+msgstr "¤³¤ÎÆÃÊÌ¤Ê URL ¤Ï¥Õ¥©¡¼¥à ACTION ¤Ë¤Ï¤Ê¤êÆÀ¤Þ¤»¤ó!"
+
+#: LYMessages.c:267
+msgid "URL is not in starting realm!"
+msgstr "URL ¤¬³«»ÏÎΰè¤Ë¤¢¤ê¤Þ¤»¤ó!"
+
+#: LYMessages.c:268
+msgid "News posting is disabled!"
+msgstr "¥Ë¥å¡¼¥¹Åê¹Æ¤Ï¤Ç¤­¤Þ¤»¤ó!"
+
+#: LYMessages.c:269
+msgid "File management support is disabled!"
+msgstr "¥Õ¥¡¥¤¥ë´ÉÍý¥µ¥Ý¡¼¥È¤ÏÍøÍѤǤ­¤Þ¤»¤ó!"
+
+#: LYMessages.c:270
+msgid "No jump file is currently available."
+msgstr "¸½ºßÍøÍѲÄǽ¤Ê¥¸¥ã¥ó¥×¥Õ¥¡¥¤¥ë¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:271
+msgid "Jump to (use '?' for list): "
+msgstr "¥¸¥ã¥ó¥×Àè ([?] ¤Ç°ìÍ÷): "
+
+#: LYMessages.c:272
+msgid "Jumping to a shortcut URL is disallowed!"
+msgstr "¥·¥ç¡¼¥È¥«¥Ã¥È URL ¤Ø¤Î¥¸¥ã¥ó¥×¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#: LYMessages.c:273
+msgid "Random URL is disallowed! Use a shortcut."
+msgstr "¥é¥ó¥À¥à URL ¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó! ¥·¥ç¡¼¥È¥«¥Ã¥È¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: LYMessages.c:274
+msgid "No random URLs have been used thus far."
+msgstr "º£¤Þ¤Ç¤Î¤È¤³¤í¥é¥ó¥À¥à URL ¤Ï°ì¤Ä¤â»È¤ï¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:275
+msgid "Bookmark features are currently disabled."
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯µ¡Ç½¤Ï¸½ºßÍøÍѤǤ­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:276
+msgid "Execution via bookmarks is disabled."
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¤«¤é¤Î¼Â¹Ô¤Ï¤Ç¤­¤Þ¤»¤ó¡£"
+
+#. #define BOOKMARK_FILE_NOT_DEFINED
+#: LYMessages.c:278
+#, c-format
+msgid "Bookmark file is not defined. Use %s to see options."
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£%s ¤Ç¥ª¥×¥·¥ç¥ó¤¬¸«¤é¤ì¤Þ¤¹¡£"
+
+#. #define NO_TEMP_FOR_HOTLIST
+#: LYMessages.c:280
+msgid "Unable to open tempfile for X Mosaic hotlist conversion."
+msgstr "X Mosaic ¥Û¥Ã¥È¥ê¥¹¥ÈÊÑ´¹ÍѤΰì»þ¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:281
+msgid "ERROR - unable to open bookmark file."
+msgstr "¥¨¥é¡¼ - ¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó¡£"
+
+#. #define BOOKMARK_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:283
+msgid "Unable to open bookmark file for deletion of link."
+msgstr "¥ê¥ó¥¯¤òºï½ü¤¹¤ë¤Î¤Ë¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£"
+
+#. #define BOOKSCRA_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:285
+msgid "Unable to open scratch file for deletion of link."
+msgstr "¥ê¥ó¥¯¤òºï½ü¤¹¤ë¤Î¤Ë¥¹¥¯¥é¥Ã¥Á¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:287
+msgid "Error renaming scratch file."
+msgstr "¥¹¥¯¥é¥Ã¥Á¥Õ¥¡¥¤¥ë¤Î²þ̾»þ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£"
+
+#: LYMessages.c:289
+msgid "Error renaming temporary file."
+msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤Î²þ̾»þ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£"
+
+#. #define BOOKTEMP_COPY_FAIL
+#: LYMessages.c:291
+msgid "Unable to copy temporary file for deletion of link."
+msgstr "¥ê¥ó¥¯ºï½ü¤Î¤¿¤á¤Ë¡¢°ì»þ¥Õ¥¡¥¤¥ë¤ò¥³¥Ô¡¼¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£"
+
+#. #define BOOKTEMP_REOPEN_FAIL_FOR_DEL
+#: LYMessages.c:293
+msgid "Unable to reopen temporary file for deletion of link."
+msgstr "¥ê¥ó¥¯ºï½ü¤Î¤¿¤á¤Ë¡¢°ì»þ¥Õ¥¡¥¤¥ë¤òºÆ¥ª¡¼¥×¥ó¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£"
+
+#. #define BOOKMARK_LINK_NOT_ONE_LINE
+#: LYMessages.c:296
+msgid "Link is not by itself all on one line in bookmark file."
+msgstr "¥ê¥ó¥¯¤¬¡¢¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤Ë¤ª¤¤¤Æ¤½¤ì¤À¤±¤Ç°ì¹Ô¤Ë¤Þ¤È¤Þ¤Ã¤Æ¤¤¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:297
+msgid "Bookmark deletion failed."
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯ºï½ü¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£"
+
+#. #define BOOKMARKS_NOT_TRAVERSED
+#: LYMessages.c:299
+msgid "Bookmark files cannot be traversed (only http URLs)."
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤Ï¥È¥é¥Ð¡¼¥¹¤Ç¤­¤Þ¤»¤ó (http URL ¤Î¤ß)¡£"
+
+#. #define BOOKMARKS_NOT_OPEN
+#: LYMessages.c:301
+msgid "Unable to open bookmark file, use 'a' to save a link first"
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ò³«¤±¤Þ¤»¤ó¡£ºÇ½é¤Ë [a] ¤Ç¥ê¥ó¥¯¤òÊݸ¤·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: LYMessages.c:302
+msgid "There are no links in this bookmark file!"
+msgstr "¤³¤Î¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤Ë¤Ï°ì¤Ä¤â¥ê¥ó¥¯¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#. #define BOOK_D_L_OR_CANCEL
+#: LYMessages.c:304
+msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
+msgstr "[d]ʸ½ñ [l]¥ê¥ó¥¯ ¤ò¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÊݸ¤·¤Þ¤¹ ([c]¥­¥ã¥ó¥»¥ë): "
+
+#: LYMessages.c:305
+msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
+msgstr "[d]¤Çʸ½ñ¤ò¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ËÊݸ ([c]¥­¥ã¥ó¥»¥ë): "
+
+#: LYMessages.c:306
+msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
+msgstr "[l]¤Ç¥ê¥ó¥¯¤ò¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ËÊݸ ([c]¥­¥ã¥ó¥»¥ë): "
+
+#. #define NOBOOK_POST_FORM
+#: LYMessages.c:308
+msgid "Documents from forms with POST content cannot be saved as bookmarks."
+msgstr "POST ¥³¥ó¥Æ¥ó¥È¤Î¥Õ¥©¡¼¥à¤«¤é¤Î¥É¥­¥å¥á¥ó¥È¤Ï¥Ö¥Ã¥¯¥Þ¡¼¥¯¤È¤·¤ÆÊݸ¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:309
+msgid "Cannot save form fields/links"
+msgstr "¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É/¥ê¥ó¥¯¤ÏÊݸ¤Ç¤­¤Þ¤»¤ó"
+
+#. #define NOBOOK_HSML
+#: LYMessages.c:311
+msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
+msgstr "ÍúÎò¤ä¾ðÊóɽ¼¨¡¢¥á¥Ë¥å¡¼¡¢¥Õ¥¡¥¤¥ë°ìÍ÷¤Ï¥Ö¥Ã¥¯¥Þ¡¼¥¯¤È¤·¤ÆÊݸ¤Ç¤­¤Þ¤»¤ó¡£"
+
+#. #define CONFIRM_BOOKMARK_DELETE
+#: LYMessages.c:313
+msgid "Do you really want to delete this link from your bookmark file?"
+msgstr "ËÜÅö¤Ë¤³¤Î¥ê¥ó¥¯¤ò¥Ö¥Ã¥¯¥Þ¡¼¥¯¤«¤éºï½ü¤·¤Æ¤è¤í¤·¤¤¤Ç¤¹¤«?"
+
+#: LYMessages.c:314
+msgid "Malformed address."
+msgstr "ÉÔÀµ¤Ê¥¢¥É¥ì¥¹¤Ç¤¹¡£"
+
+#. #define HISTORICAL_ON_MINIMAL_OFF
+#: LYMessages.c:316
+msgid "Historical comment parsing ON (Minimal is overridden)!"
+msgstr "ÀΤʤ¬¤é¤Î¥³¥á¥ó¥È²òÀÏ¥ª¥ó(ºÇ¾®¸Â¤Î²òÀϤè¤êÍ¥Àè)!"
+
+#. #define HISTORICAL_OFF_MINIMAL_ON
+#: LYMessages.c:318
+msgid "Historical comment parsing OFF (Minimal is in effect)!"
+msgstr "ÀΤʤ¬¤é¤Î¥³¥á¥ó¥È²òÀÏ¥ª¥Õ(ºÇ¾®¸Â¤Î²òÀϤ¬Í­¸ú)!"
+
+#. #define HISTORICAL_ON_VALID_OFF
+#: LYMessages.c:320
+msgid "Historical comment parsing ON (Valid is overridden)!"
+msgstr "ÀΤʤ¬¤é¤Î¥³¥á¥ó¥È²òÀÏ¥ª¥ó(¸·Ì©¤Ê²òÀϤè¤êÍ¥Àè)!"
+
+#. #define HISTORICAL_OFF_VALID_ON
+#: LYMessages.c:322
+msgid "Historical comment parsing OFF (Valid is in effect)!"
+msgstr "ÀΤʤ¬¤é¤Î¥³¥á¥ó¥È²òÀÏ¥ª¥Õ(¸·Ì©¤Ê²òÀϤ¬Í­¸ú)!"
+
+#. #define MINIMAL_ON_IN_EFFECT
+#: LYMessages.c:324
+msgid "Minimal comment parsing ON (and in effect)!"
+msgstr "ºÇ¾®¸Â¤Î¥³¥á¥ó¥È²òÀÏ¥ª¥ó(¤«¤ÄÍ­¸ú)!"
+
+#. #define MINIMAL_OFF_VALID_ON
+#: LYMessages.c:326
+msgid "Minimal comment parsing OFF (Valid is in effect)!"
+msgstr "ºÇ¾®¸Â¤Î¥³¥á¥ó¥È²òÀÏ¥ª¥Õ(¸·Ì©¤Ê²òÀϤ¬Í­¸ú)!"
+
+#. #define MINIMAL_ON_BUT_HISTORICAL
+#: LYMessages.c:328
+msgid "Minimal comment parsing ON (but Historical is in effect)!"
+msgstr "ºÇ¾®¸Â¤Î¥³¥á¥ó¥È²òÀÏ¥ª¥ó(¤Ç¤âÀΤʤ¬¤é¤Î²òÀϤ¬Í­¸ú)!"
+
+#. #define MINIMAL_OFF_HISTORICAL_ON
+#: LYMessages.c:330
+msgid "Minimal comment parsing OFF (Historical is in effect)!"
+msgstr "ºÇ¾®¸Â¤Î¥³¥á¥ó¥È²òÀÏ¥ª¥Õ(ÀΤʤ¬¤é¤Î²òÀϤ¬Í­¸ú)!"
+
+#: LYMessages.c:331
+msgid "Soft double-quote parsing ON!"
+msgstr "´Ë¤ä¤«¤Ê¥À¥Ö¥ë¥¯¥©¡¼¥È²òÀÏ¥ª¥ó!"
+
+#: LYMessages.c:332
+msgid "Soft double-quote parsing OFF!"
+msgstr "´Ë¤ä¤«¤Ê¥À¥Ö¥ë¥¯¥©¡¼¥È²òÀÏ¥ª¥Õ!"
+
+#: LYMessages.c:333
+msgid "Now using TagSoup parsing of HTML."
+msgstr "HTML ¤ò¡Ö¥¿¥°¤Î¤´¤Ã¤¿¼Ñ¡×É÷Ì£¤Ç²òÀϤ·¤Þ¤¹¡£"
+
+#: LYMessages.c:334
+msgid "Now using SortaSGML parsing of HTML!"
+msgstr "HTML ¤ò¡Ö¤½¤³¤½¤³¸·Ì© SGML¡×É÷Ì£¤Ç²òÀϤ·¤Þ¤¹!"
+
+#: LYMessages.c:335
+msgid "You are already at the end of this document."
+msgstr "¤¹¤Ç¤Ë¤³¤Îʸ½ñ¤ÎËöÈø¤Ë¤¤¤Þ¤¹¡£"
+
+#: LYMessages.c:336
+msgid "You are already at the beginning of this document."
+msgstr "¤¹¤Ç¤Ë¤³¤Îʸ½ñ¤ÎÀèÆ¬¤Ë¤¤¤Þ¤¹¡£"
+
+#: LYMessages.c:337
+#, c-format
+msgid "You are already at page %d of this document."
+msgstr "¤¹¤Ç¤Ë¤³¤Îʸ½ñ¤Î %d ¥Ú¡¼¥¸Ìܤˤ¤¤Þ¤¹¡£"
+
+#: LYMessages.c:338
+#, c-format
+msgid "Link number %d already is current."
+msgstr "¤¹¤Ç¤Ë¥ê¥ó¥¯ÈÖ¹æ %d ¤òÁªÂò¤·¤Æ¤¤¤Þ¤¹¡£"
+
+#: LYMessages.c:339
+msgid "You are already at the first document"
+msgstr "¤³¤ì°Ê¾åÌá¤ì¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:340
+msgid "There are no links above this line of the document."
+msgstr "Åöʸ½ñ¤Î¤³¤Î¹Ô¤è¤ê¾å¤Ë¥ê¥ó¥¯¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:341
+msgid "There are no links below this line of the document."
+msgstr "Åöʸ½ñ¤Î¤³¤Î¹Ô¤è¤ê²¼¤Ë¥ê¥ó¥¯¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#. #define MAXLEN_REACHED_DEL_OR_MOV
+#: LYMessages.c:343
+msgid "Maximum length reached! Delete text or move off field."
+msgstr "Ťµ¤Î¸Â³¦¤Ç¤¹! ¥Æ¥­¥¹¥È¤òºï½ü¤¹¤ë¤«¥Õ¥£¡¼¥ë¥É¤ò°Üư¤·¤Æ¤¯¤À¤µ¤¤"
+
+#. #define NOT_ON_SUBMIT_OR_LINK
+#: LYMessages.c:345
+msgid "You are not on a form submission button or normal link."
+msgstr "¸½ºß¥Õ¥©¡¼¥àÁ÷¿®¥Ü¥¿¥ó¤Þ¤¿¤ÏÄ̾ï¤Î¥ê¥ó¥¯¤Î¾å¤Ë¤¤¤Þ¤»¤ó"
+
+#. #define NEED_CHECKED_RADIO_BUTTON
+#: LYMessages.c:347
+msgid "One radio button must be checked at all times!"
+msgstr "¥é¥¸¥ª¥Ü¥¿¥ó¤ÏºÇÄã°ì¤Ä¤Ï»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó!"
+
+#: LYMessages.c:348
+msgid "No submit button for this form, submit single text field?"
+msgstr "¥Õ¥©¡¼¥à¤Ë¤ÏÁ÷¿®¥Ü¥¿¥ó¤¬¤¢¤ê¤Þ¤»¤ó¡£Ã±°ì¤Î¥Æ¥­¥¹¥È¥Õ¥£¡¼¥ë¥É¤òÁ÷¿®¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:349
+msgid "Do you want to go back to the previous document?"
+msgstr "°ì¤ÄÁ°¤Îʸ½ñ¤ËÌá¤ê¤Þ¤¹¤«?"
+
+#: LYMessages.c:350
+msgid "Use arrows or tab to move off of field."
+msgstr "Ìð°õ¥­¡¼¤«¥¿¥Ö¤Ç¥Õ¥£¡¼¥ë¥É¤ò°Üư"
+
+#. #define ENTER_TEXT_ARROWS_OR_TAB
+#: LYMessages.c:352
+msgid "Enter text. Use arrows or tab to move off of field."
+msgstr "¥Æ¥­¥¹¥È¤òÆþÎÏ Ìð°õ¥­¡¼¤«¥¿¥Ö¤Ç¥Õ¥£¡¼¥ë¥É¤ò°Üư"
+
+#: LYMessages.c:353
+msgid "** Bad HTML!! No form action defined. **"
+msgstr "ÉÔÀµ¤Ê HTML ¤Ç¤¹!! ¥Õ¥©¡¼¥à¥¢¥¯¥·¥ç¥ó¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó **"
+
+#: LYMessages.c:354
+msgid "Bad HTML!! Unable to create popup window!"
+msgstr "ÉÔÀµ¤Ê HTML ¤Ç¤¹!! ¥Ý¥Ã¥×¥¢¥Ã¥×¥¦¥£¥ó¥É¥¦¤¬ºî¤ì¤Þ¤»¤ó **"
+
+#: LYMessages.c:355
+msgid "Unable to create popup window!"
+msgstr "¥Ý¥Ã¥×¥¢¥Ã¥×¥¦¥£¥ó¥É¥¦¤¬ºî¤ì¤Þ¤»¤ó!"
+
+#: LYMessages.c:356
+msgid "Goto a random URL is disallowed!"
+msgstr "¥é¥ó¥À¥à URL ¤Ø¤Î Goto ¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#: LYMessages.c:357
+msgid "Goto a non-http URL is disallowed!"
+msgstr "Èó http URL ¤Ø¤Î Goto ¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#: LYMessages.c:358
+#, c-format
+msgid "You are not allowed to goto \"%s\" URLs"
+msgstr "Goto ¤Ç \"%s\" URL ¤ò»ØÄꤹ¤ë¤Î¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#: LYMessages.c:359
+msgid "URL to open: "
+msgstr "³«¤­¤¿¤¤ URL: "
+
+#: LYMessages.c:360
+msgid "Edit the current Goto URL: "
+msgstr "¸½ºß¤Î Goto URL ¤òÊÔ½¸: "
+
+#: LYMessages.c:361
+msgid "Edit the previous Goto URL: "
+msgstr "Á°¤Î Goto URL: ¤òÊÔ½¸: "
+
+#: LYMessages.c:362
+msgid "Edit a previous Goto URL: "
+msgstr "°ÊÁ°¤Î Goto URL: ¤òÊÔ½¸: "
+
+#: LYMessages.c:363
+msgid "Current document has POST data."
+msgstr "¸½ºß¤Îʸ½ñ¤Ï POST ¥Ç¡¼¥¿¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¡£"
+
+#: LYMessages.c:364
+msgid "Edit this document's URL: "
+msgstr "¤³¤Îʸ½ñ¤Î URL ¤òÊÔ½¸: "
+
+#: LYMessages.c:365
+msgid "Edit the current link's URL: "
+msgstr "¸½ºß¤Î URL ¥ê¥ó¥¯Àè¤òÊÔ½¸: "
+
+#: LYMessages.c:366
+msgid "You cannot edit File Management URLs"
+msgstr "¥Õ¥¡¥¤¥ë´ÉÍý URL ¤ÏÊÔ½¸¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:367
+msgid "Enter a database query: "
+msgstr "¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ç¸¡º÷¤¹¤ëʸ»úÎó¤òÆþÎÏ: "
+
+#: LYMessages.c:368
+msgid "Enter a whereis query: "
+msgstr "¸¡º÷¤¹¤ëʸ»úÎó: "
+
+#: LYMessages.c:369
+msgid "Edit the current query: "
+msgstr "¸½ºß¤Î¸¡º÷ʸ»úÎó¤òÊÔ½¸: "
+
+#: LYMessages.c:370
+msgid "Edit the previous query: "
+msgstr "°ì¤ÄÁ°¤Î¸¡º÷ʸ»úÎó¤òÊÔ½¸: "
+
+#: LYMessages.c:371
+msgid "Edit a previous query: "
+msgstr "°ÊÁ°¤Î¸¡º÷ʸ»úÎó¤òÊÔ½¸: "
+
+#. #define USE_C_R_TO_RESUB_CUR_QUERY
+#: LYMessages.c:373
+msgid "Use Control-R to resubmit the current query."
+msgstr "Ctrl-R ¤Ç¸½ºß¤Î¸¡º÷ʸ»úÎó¤òºÆÁ÷¿®"
+
+#: LYMessages.c:374
+msgid "Edit the current shortcut: "
+msgstr "¸½ºß¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¤òÊÔ½¸: "
+
+#: LYMessages.c:375
+msgid "Edit the previous shortcut: "
+msgstr "°ì¤ÄÁ°¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¤òÊÔ½¸: "
+
+#: LYMessages.c:376
+msgid "Edit a previous shortcut: "
+msgstr "°ÊÁ°¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¤òÊÔ½¸: "
+
+#: LYMessages.c:377
+#, c-format
+msgid "Key '%c' is not mapped to a jump file!"
+msgstr "¥­¡¼ '%c' ¤Ï¥¸¥ã¥ó¥×¥Õ¥¡¥¤¥ë¤Ë³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#: LYMessages.c:378
+msgid "Cannot locate jump file!"
+msgstr "¥¸¥ã¥ó¥×¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó!"
+
+#: LYMessages.c:379
+msgid "Cannot open jump file!"
+msgstr "¥¸¥ã¥ó¥×¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó!"
+
+#: LYMessages.c:380
+msgid "Error reading jump file!"
+msgstr "¥¸¥ã¥ó¥×¥Õ¥¡¥¤¥ë¤ÎÆÉ¤ß¹þ¤ß¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿!"
+
+#: LYMessages.c:381
+msgid "Out of memory reading jump file!"
+msgstr "¥¸¥ã¥ó¥×¥Õ¥¡¥¤¥ë¤ÎÆÉ¤ß¹þ¤ß¤Ç¥á¥â¥ê¤¬Â­¤ê¤Ê¤¯¤Ê¤ê¤Þ¤·¤¿!"
+
+#: LYMessages.c:382
+msgid "Out of memory reading jump table!"
+msgstr "¥¸¥ã¥ó¥×¥Æ¡¼¥Ö¥ë¤ÎÆÉ¤ß¹þ¤ß¤Ç¥á¥â¥ê¤¬Â­¤ê¤Ê¤¯¤Ê¤ê¤Þ¤·¤¿!"
+
+#: LYMessages.c:383
+msgid "No index is currently available."
+msgstr "¸½ºßÍøÍѲÄǽ¤Ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#. #define CONFIRM_MAIN_SCREEN
+#: LYMessages.c:385
+msgid "Do you really want to go to the Main screen?"
+msgstr "ËÜÅö¤Ë¥á¥¤¥ó²èÌ̤˹Ԥ­¤Þ¤¹¤«?"
+
+#: LYMessages.c:386
+msgid "You are already at main screen!"
+msgstr "¤¹¤Ç¤Ë¥á¥¤¥ó²èÌ̤ˤ¤¤Þ¤¹!"
+
+#. #define NOT_ISINDEX
+#: LYMessages.c:388
+msgid "Not a searchable indexed document -- press '/' to search for a text string"
+msgstr "¸¡º÷²Äǽ¤Êº÷°úÉÕ¤­Ê¸½ñ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó -- [/] ¤Çʸ»úÎó¤ò¸¡º÷"
+
+#. #define NO_OWNER
+#: LYMessages.c:390
+msgid "No owner is defined for this file so you cannot send a comment"
+msgstr "¥Õ¥¡¥¤¥ë¤Î½êÍ­¼Ô¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¥³¥á¥ó¥È¤ÏÁ÷¤ì¤Þ¤»¤ó"
+
+#: LYMessages.c:391
+#, c-format
+msgid "No owner is defined. Use %s?"
+msgstr "½êÍ­¼Ô¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£%s ¤ò»È¤¤¤Þ¤¹¤«?"
+
+#: LYMessages.c:392
+msgid "Do you wish to send a comment?"
+msgstr "¥³¥á¥ó¥È¤òÁ÷¤ê¤Þ¤¹¤«?"
+
+#: LYMessages.c:393
+msgid "Mail is disallowed so you cannot send a comment"
+msgstr "¥á¡¼¥ë¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¥³¥á¥ó¥È¤ÏÁ÷¤ì¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:394
+msgid "The 'e'dit command is currently disabled."
+msgstr "ÊÔ½¸ [e] ¥³¥Þ¥ó¥É¤Ï¸½ºßÍøÍѤǤ­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:395
+msgid "External editing is currently disabled."
+msgstr "³°ÉôÊÔ½¸µ¡Ç½¤Ï¸½ºßÍøÍѤǤ­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:396
+msgid "System error - failure to get status."
+msgstr "¥·¥¹¥Æ¥à¥¨¥é¡¼ - ¥¹¥Æ¡¼¥¿¥¹¤òÆÀ¤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£"
+
+#: LYMessages.c:397
+msgid "No editor is defined!"
+msgstr "¥¨¥Ç¥£¥¿¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#: LYMessages.c:398
+msgid "The 'p'rint command is currently disabled."
+msgstr "°õºþ¥³¥Þ¥ó¥É [p] ¤Ï¸½ºßÍøÍѤǤ­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:399
+msgid "Document has no Toolbar links or Banner."
+msgstr "¤³¤Îʸ½ñ¤Ë¤Ï¥Ä¡¼¥ë¥Ð¡¼¥ê¥ó¥¯¤â¥Ð¥Ê¡¼¤â´Þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:400
+msgid "Unable to open traversal file."
+msgstr "¥È¥é¥Ð¡¼¥µ¥ë¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:401
+msgid "Unable to open traversal found file."
+msgstr "¥È¥é¥Ð¡¼¥µ¥ëȯ¸«¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:402
+msgid "Unable to open reject file."
+msgstr "¥ê¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:403
+msgid "Unable to open traversal errors output file"
+msgstr "¥È¥é¥Ð¡¼¥µ¥ë¥¨¥é¡¼½ÐÎÏ¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó"
+
+#: LYMessages.c:404
+msgid "TRAVERSAL WAS INTERRUPTED"
+msgstr "¥È¥é¥Ð¡¼¥µ¥ë¤¬ÃæÃǤµ¤ì¤Þ¤·¤¿"
+
+#: LYMessages.c:405
+msgid "Follow link (or goto link or page) number: "
+msgstr "é¤ë¥ê¥ó¥¯(¤â¤·¤¯¤Ï goto ¥ê¥ó¥¯¤«¥Ú¡¼¥¸)¤ÎÈÖ¹æ: "
+
+#: LYMessages.c:406
+msgid "Select option (or page) number: "
+msgstr "¥ª¥×¥·¥ç¥ó(¤Þ¤¿¤Ï¥Ú¡¼¥¸)ÈÖ¹æ¤òÁªÂò: "
+
+#: LYMessages.c:407
+#, c-format
+msgid "Option number %d already is current."
+msgstr "¥ª¥×¥·¥ç¥óÈÖ¹æ %d ¤Ï¤¹¤Ç¤ËÁªÂò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£"
+
+#. #define ALREADY_AT_OPTION_END
+#: LYMessages.c:409
+msgid "You are already at the end of this option list."
+msgstr "¤¹¤Ç¤Ë¤³¤Î¥ª¥×¥·¥ç¥ó¥ê¥¹¥È¤Î½ªÃ¼¤Ë¤¤¤Þ¤¹¡£"
+
+#. #define ALREADY_AT_OPTION_BEGIN
+#: LYMessages.c:411
+msgid "You are already at the beginning of this option list."
+msgstr "¤¹¤Ç¤Ë¤³¤Î¥ª¥×¥·¥ç¥ó¥ê¥¹¥È¤ÎÀèÆ¬¤Ë¤¤¤Þ¤¹¡£"
+
+#. #define ALREADY_AT_OPTION_PAGE
+#: LYMessages.c:413
+#, c-format
+msgid "You are already at page %d of this option list."
+msgstr "¤¹¤Ç¤Ë¤³¤Î¥ª¥×¥·¥ç¥ó¥ê¥¹¥È¤Î¥Ú¡¼¥¸ %d ¤Ë¤¤¤Þ¤¹¡£"
+
+#: LYMessages.c:414
+msgid "You have entered an invalid option number."
+msgstr "ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥óÈֹ椬ÆþÎϤµ¤ì¤Þ¤·¤¿¡£"
+
+#: LYMessages.c:415
+msgid "** Bad HTML!! Use -trace to diagnose. **"
+msgstr "** ÉÔÀµ¤Ê HTML ¤Ç¤¹!! -trace ¤Ç¸¶°ø¤òÄ´¤Ù¤é¤ì¤Þ¤¹ **"
+
+#: LYMessages.c:416
+msgid "Give name of file to save in"
+msgstr "Êݸ¤¹¤ë¥Õ¥¡¥¤¥ë¤Î̾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤"
+
+#: LYMessages.c:417
+msgid "Can't save data to file -- please run WWW locally"
+msgstr "¥Ç¡¼¥¿¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ¤Ç¤­¤Þ¤»¤ó -- WWW ¤ò¥í¡¼¥«¥ë¤Ç¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤"
+
+#: LYMessages.c:418
+msgid "Can't open temporary file!"
+msgstr "°ì»þŪ¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó!"
+
+#: LYMessages.c:419
+msgid "Can't open output file! Cancelling!"
+msgstr "½ÐÎÏ¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó! ¥­¥ã¥ó¥»¥ë¤·¤Þ¤¹!"
+
+#: LYMessages.c:420
+msgid "Execution is disabled."
+msgstr "¼Â¹Ôµ¡Ç½¤ÏÍøÍѤǤ­¤Þ¤»¤ó¡£"
+
+#. #define EXECUTION_DISABLED_FOR_FILE
+#: LYMessages.c:422
+#, c-format
+msgid "Execution is not enabled for this file. See the Options menu (use %s)."
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¥ª¥×¥·¥ç¥ó¥á¥Ë¥å¡¼¤ò»²¾È(%s¤ò»È¤¦)¤·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#. #define EXECUTION_NOT_COMPILED
+#: LYMessages.c:424
+msgid "Execution capabilities are not compiled into this version."
+msgstr "¼Â¹Ôµ¡Ç½¤Ï¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¥³¥ó¥Ñ¥¤¥ë»þ¤ËÁȤ߹þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:425
+msgid "This file cannot be displayed on this terminal."
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤Ï¸½ºß¤ÎüËö¤Ç¤Ïɽ¼¨¤Ç¤­¤Þ¤»¤ó¡£"
+
+#. #define CANNOT_DISPLAY_FILE_D_OR_C
+#: LYMessages.c:427
+msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤Ï¸½ºß¤ÎüËö¤Ç¤Ïɽ¼¨¤Ç¤­¤Þ¤»¤ó¡£[d]¥À¥¦¥ó¥í¡¼¥É [c]¥­¥ã¥ó¥»¥ë"
+
+#: LYMessages.c:428
+#, c-format
+msgid "%s D)ownload, or C)ancel"
+msgstr "%s [d]¥À¥¦¥ó¥í¡¼¥É ¤Þ¤¿¤Ï [c]¥­¥ã¥ó¥»¥ë"
+
+#: LYMessages.c:429
+msgid "Cancelling file."
+msgstr "¥Õ¥¡¥¤¥ë¤ò¥­¥ã¥ó¥»¥ë¤·¤Þ¤¹¡£"
+
+#: LYMessages.c:430
+msgid "Retrieving file. - PLEASE WAIT -"
+msgstr "¥Õ¥¡¥¤¥ë¤ò¼õ¿®Ãæ - ¤ªÂÔ¤Á¤¯¤À¤µ¤¤"
+
+#: LYMessages.c:431
+msgid "Enter a filename: "
+msgstr "¥Õ¥¡¥¤¥ë̾¤òÆþÎÏ: "
+
+#: LYMessages.c:432
+msgid "Edit the previous filename: "
+msgstr "°ì¤ÄÁ°¤Î¥Õ¥¡¥¤¥ë̾¤òÊÔ½¸: "
+
+#: LYMessages.c:433
+msgid "Edit a previous filename: "
+msgstr "°ÊÁ°¤Î¥Õ¥¡¥¤¥ë̾¤òÊÔ½¸: "
+
+#: LYMessages.c:434
+msgid "Enter a new filename: "
+msgstr "¿·¤·¤¤¥Õ¥¡¥¤¥ë̾¤òÆþÎÏ: "
+
+#: LYMessages.c:435
+msgid "File name may not begin with a dot."
+msgstr "¥Õ¥¡¥¤¥ë̾¤Ï¥É¥Ã¥È¤Ç»Ï¤Þ¤Ã¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:437
+msgid "File exists. Create higher version?"
+msgstr "¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤¹¡£¤è¤ê¹â¤¤¥Ð¡¼¥¸¥ç¥ó¤òºîÀ®¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:439
+msgid "File exists. Overwrite?"
+msgstr "¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤¹¡£¾å½ñ¤­¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:441
+msgid "Cannot write to file."
+msgstr "¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:442
+msgid "ERROR! - download command is misconfigured."
+msgstr "¥¨¥é¡¼! - ¥À¥¦¥ó¥í¡¼¥É¥³¥Þ¥ó¥É¤ÎÀßÄ꤬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹¡£"
+
+#: LYMessages.c:443
+msgid "Unable to download file."
+msgstr "¥Õ¥¡¥¤¥ë¤ò¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:444
+msgid "Reading directory..."
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤òÆÉ¤ß¹þ¤ßÃæ..."
+
+#: LYMessages.c:445
+msgid "Building directory listing..."
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê°ìÍ÷¤òºîÀ®Ãæ..."
+
+#: LYMessages.c:446
+msgid "Saving..."
+msgstr "Êݸ¤·¤Æ¤¤¤Þ¤¹..."
+
+#: LYMessages.c:447
+#, c-format
+msgid "Could not edit file '%s'."
+msgstr "¥Õ¥¡¥¤¥ë '%s' ¤òÊÔ½¸¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:448
+msgid "Unable to access document!"
+msgstr "ʸ½ñ¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó!"
+
+#: LYMessages.c:449
+msgid "Could not access file."
+msgstr "¥Õ¥¡¥¤¥ë¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:450
+msgid "Could not access directory."
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:451
+msgid "Could not load data."
+msgstr "¥Ç¡¼¥¿¤òÆÉ¤ß¹þ¤á¤Þ¤»¤ó¡£"
+
+#. #define CANNOT_EDIT_REMOTE_FILES
+#: LYMessages.c:453
+msgid "Lynx cannot currently (e)dit remote WWW files."
+msgstr "¸½ºß Lynx ¤Ï¥ê¥â¡¼¥È WWW ¥Õ¥¡¥¤¥ë¤ò [e] ÊÔ½¸¤Ç¤­¤Þ¤»¤ó¡£"
+
+#. #define CANNOT_EDIT_FIELD
+#: LYMessages.c:455
+msgid "This field cannot be (e)dited with an external editor."
+msgstr "¤³¤Î¥Õ¥£¡¼¥ë¥É¤Ï³°Éô¥¨¥Ç¥£¥¿¤ÇÊÔ½¸ [e] ¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:456
+msgid "Bad rule"
+msgstr "ÉÔÀµ¤Ê¥ë¡¼¥ë¤Ç¤¹¡£"
+
+#: LYMessages.c:457
+msgid "Insufficient operands:"
+msgstr "¥ª¥Ú¥é¥ó¥É¤¬Â­¤ê¤Þ¤»¤ó:"
+
+#: LYMessages.c:458
+msgid "You are not authorized to edit this file."
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤òÊÔ½¸¤¹¤ë¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:459
+msgid "Title: "
+msgstr "Âê̾: "
+
+#: LYMessages.c:460
+msgid "Subject: "
+msgstr "¥µ¥Ö¥¸¥§¥¯¥È: "
+
+#: LYMessages.c:461
+msgid "Username: "
+msgstr "¥æ¡¼¥¶Ì¾: "
+
+#: LYMessages.c:462
+msgid "Password: "
+msgstr "¥Ñ¥¹¥ï¡¼¥É: "
+
+#: LYMessages.c:463
+msgid "lynx: Username and Password required!!!"
+msgstr "lynx: ¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤¬É¬ÍפǤ¹!!!"
+
+#: LYMessages.c:464
+msgid "lynx: Password required!!!"
+msgstr "lynx: ¥Ñ¥¹¥ï¡¼¥É¤¬É¬ÍפǤ¹!!!"
+
+#: LYMessages.c:465
+msgid "Clear all authorization info for this session?"
+msgstr "¤³¤Î¥»¥Ã¥·¥ç¥ó¤Î¤¹¤Ù¤Æ¤Îǧ¾Ú¾ðÊó¤ò¥¯¥ê¥¢¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:466
+msgid "Authorization info cleared."
+msgstr "ǧ¾Ú¾ðÊó¤ò¥¯¥ê¥¢¤·¤Þ¤·¤¿¡£"
+
+#: LYMessages.c:467
+msgid "Authorization failed. Retry?"
+msgstr "ǧ¾Ú¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£ºÆ»î¹Ô¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:468
+msgid "cgi support has been disabled."
+msgstr "cgi ¥µ¥Ý¡¼¥È¤ÏÍøÍѤǤ­¤Þ¤»¤ó¡£"
+
+#. #define CGI_NOT_COMPILED
+#: LYMessages.c:470
+msgid "Lynxcgi capabilities are not compiled into this version."
+msgstr "Lynxcgi µ¡Ç½¤Ï¤³¤Î¥Ð¡¼¥¸¥ç¥ó¤Ë¤ÏÁȤ߹þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:471
+#, c-format
+msgid "Sorry, no known way of converting %s to %s."
+msgstr "%s ¤ò %s ¤ËÊÑ´¹¤¹¤ë¼êÃʤϤ¢¤ê¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:472
+msgid "Unable to set up connection."
+msgstr "Àܳ¤ò½àÈ÷¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:473
+msgid "Unable to make connection"
+msgstr "Àܳ¤ò³ÎΩ¤Ç¤­¤Þ¤»¤ó¡£"
+
+#. #define MALFORMED_EXEC_REQUEST
+#: LYMessages.c:475
+msgid "Executable link rejected due to malformed request."
+msgstr "ÉÔÀµ¤Ê¥ê¥¯¥¨¥¹¥È¤Î¤¿¤á¡¢¼Â¹Ô²Äǽ¤Ê¥ê¥ó¥¯¤ÏµñÈݤµ¤ì¤Þ¤·¤¿¡£"
+
+#. #define BADCHAR_IN_EXEC_LINK
+#: LYMessages.c:477
+#, c-format
+msgid "Executable link rejected due to `%c' character."
+msgstr "¥­¥ã¥é¥¯¥¿ '%c' ¤Î¤¿¤á¡¢¼Â¹Ô²Äǽ¤Ê¥ê¥ó¥¯¤ÏµñÈݤµ¤ì¤Þ¤·¤¿¡£"
+
+#. #define RELPATH_IN_EXEC_LINK
+#: LYMessages.c:479
+msgid "Executable link rejected due to relative path string ('../')."
+msgstr "ÁêÂХѥ¹Ê¸»úÎó('../')¤Î¤¿¤á¡¢¼Â¹Ô²Äǽ¤Ê¥ê¥ó¥¯¤ÏµñÈݤµ¤ì¤Þ¤·¤¿¡£"
+
+#. #define BADLOCPATH_IN_EXEC_LINK
+#: LYMessages.c:481
+msgid "Executable link rejected due to location or path."
+msgstr "¾ì½ê¤Þ¤¿¤Ï¥Ñ¥¹¤Î¤¿¤á¡¢¼Â¹Ô²Äǽ¤Ê¥ê¥ó¥¯¤ÏµñÈݤµ¤ì¤Þ¤·¤¿¡£"
+
+#: LYMessages.c:482
+msgid "Mail access is disabled!"
+msgstr "¥á¡¼¥ë¥¢¥¯¥»¥¹¤ÏÍøÍѤǤ­¤Þ¤»¤ó!"
+
+#. #define ACCESS_ONLY_LOCALHOST
+#: LYMessages.c:484
+msgid "Only files and servers on the local host can be accessed."
+msgstr "¥í¡¼¥«¥ë¥Û¥¹¥È¾å¤Î¥Õ¥¡¥¤¥ë¤È¥µ¡¼¥Ð¤Î¤ß¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤¹¡£"
+
+#: LYMessages.c:485
+msgid "Telnet access is disabled!"
+msgstr "Telnet ¥¢¥¯¥»¥¹¤ÏÍøÍѤǤ­¤Þ¤»¤ó!"
+
+#. #define TELNET_PORT_SPECS_DISABLED
+#: LYMessages.c:487
+msgid "Telnet port specifications are disabled."
+msgstr "Telnet ¥Ý¡¼¥È»ØÄê¤ÏÍøÍѤǤ­¤Þ¤»¤ó!"
+
+#: LYMessages.c:488
+msgid "USENET news access is disabled!"
+msgstr "USENET ¥Ë¥å¡¼¥¹¥¢¥¯¥»¥¹¤ÏÍøÍѤǤ­¤Þ¤»¤ó!"
+
+#: LYMessages.c:489
+msgid "Rlogin access is disabled!"
+msgstr "Rlogin ¥¢¥¯¥»¥¹¤ÏÍøÍѤǤ­¤Þ¤»¤ó!"
+
+#: LYMessages.c:490
+msgid "Ftp access is disabled!"
+msgstr "Ftp ¥¢¥¯¥»¥¹¤ÏÍøÍѤǤ­¤Þ¤»¤ó!"
+
+#: LYMessages.c:491
+msgid "There are no references from this document."
+msgstr "¤³¤Îʸ½ñ¤«¤é¤Î»²¾È¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:492
+msgid "There are only hidden links from this document."
+msgstr "¤³¤Îʸ½ñ¤Ë¤Ï±£¤·¥ê¥ó¥¯¤·¤«¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:494
+msgid "Unable to open command file."
+msgstr "¥³¥Þ¥ó¥É¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:496
+msgid "News Post Cancelled!!!"
+msgstr "¥Ë¥å¡¼¥¹¤ÎÅê¹Æ¤Ï¥­¥ã¥ó¥»¥ë¤µ¤ì¤Þ¤·¤¿!!!"
+
+#. #define SPAWNING_EDITOR_FOR_NEWS
+#: LYMessages.c:498
+msgid "Spawning your selected editor to edit news message"
+msgstr "»ØÄê¤Î¥¨¥Ç¥£¥¿¤òµ¯Æ°¤·¤Æ¥Ë¥å¡¼¥¹¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸¤·¤Þ¤¹"
+
+#: LYMessages.c:499
+msgid "Post this message?"
+msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤òÅê¹Æ¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:500
+#, c-format
+msgid "Append '%s'?"
+msgstr "'%s' ¤òÄɲä·¤Þ¤¹¤«?"
+
+#: LYMessages.c:501
+msgid "Posting to newsgroup(s)..."
+msgstr "¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤ËÅê¹ÆÃæ..."
+
+#: LYMessages.c:503
+msgid "*** You have unread mail. ***"
+msgstr "*** ¤Þ¤ÀÆÉ¤ó¤Ç¤¤¤Ê¤¤¥á¡¼¥ë¤¬¤¢¤ê¤Þ¤¹ ***"
+
+#: LYMessages.c:505
+msgid "*** You have mail. ***"
+msgstr "*** ¥á¡¼¥ë¤¬Íè¤Æ¤¤¤Þ¤¹ ***"
+
+#: LYMessages.c:507
+msgid "*** You have new mail. ***"
+msgstr "*** ¿·Ãå¥á¡¼¥ë¤¬¤¢¤ê¤Þ¤¹ ***"
+
+#: LYMessages.c:508
+msgid "File insert cancelled!!!"
+msgstr "¥Õ¥¡¥¤¥ëÁÞÆþ¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¤Þ¤·¤¿!!!"
+
+#: LYMessages.c:509
+msgid "Not enough memory for file!"
+msgstr "¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤à¥á¥â¥ê¤¬Â­¤ê¤Þ¤»¤ó"
+
+#: LYMessages.c:510
+msgid "Can't open file for reading."
+msgstr "ÆÉ¤ß¹þ¤à¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:511
+msgid "File does not exist."
+msgstr "¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:512
+msgid "File does not exist - reenter or cancel:"
+msgstr "¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó - ºÆÆþÎϤ«¥­¥ã¥ó¥»¥ë:"
+
+#: LYMessages.c:513
+msgid "File is not readable."
+msgstr "¥Õ¥¡¥¤¥ë¤ÏÆÉ¤ß¹þ¤ßÉԲĤǤ¹¡£"
+
+#: LYMessages.c:514
+msgid "File is not readable - reenter or cancel:"
+msgstr "¥Õ¥¡¥¤¥ë¤¬ÆÉ¤á¤Þ¤»¤ó - ºÆÆþÎϤ«¥­¥ã¥ó¥»¥ë:"
+
+#: LYMessages.c:515
+msgid "Nothing to insert - file is 0-length."
+msgstr "ÁÞÆþ¤¹¤ëÆâÍÆ¤¬¤¢¤ê¤Þ¤»¤ó - ¥Õ¥¡¥¤¥ë¤ÎŤµ¤¬ 0 ¤Ç¤¹¡£"
+
+#: LYMessages.c:516
+msgid "Save request cancelled!!!"
+msgstr "Êݸ¥ê¥¯¥¨¥¹¥È¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¤Þ¤·¤¿!!!"
+
+#: LYMessages.c:517
+msgid "Mail request cancelled!!!"
+msgstr "¥á¡¼¥ë¥ê¥¯¥¨¥¹¥È¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¤Þ¤·¤¿!!!"
+
+#. #define CONFIRM_MAIL_SOURCE_PREPARSED
+#: LYMessages.c:519
+msgid "Viewing preparsed source. Are you sure you want to mail it?"
+msgstr "²òÀϺѤߥ½¡¼¥¹¤ò±ÜÍ÷Ãæ¤Ç¤¹¡£ËÜÅö¤Ë¤³¤ì¤ò¥á¡¼¥ë¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:520
+msgid "Please wait..."
+msgstr "¤ªÂÔ¤Á¤¯¤À¤µ¤¤..."
+
+#: LYMessages.c:521
+msgid "Mailing file. Please wait..."
+msgstr "¥Õ¥¡¥¤¥ë¤ò¥á¡¼¥ë¤ÇÁ÷¿®Ãæ¡£¤ªÂÔ¤Á¤¯¤À¤µ¤¤..."
+
+#: LYMessages.c:522
+msgid "ERROR - Unable to mail file"
+msgstr "¥¨¥é¡¼ - ¥Õ¥¡¥¤¥ë¤ò¥á¡¼¥ë¤ÇÁ÷¿®¤Ç¤­¤Þ¤»¤ó¡£"
+
+#. #define CONFIRM_LONG_SCREEN_PRINT
+#: LYMessages.c:524
+#, c-format
+msgid "File is %d screens long. Are you sure you want to print?"
+msgstr "¥Õ¥¡¥¤¥ë¤Ï %d ²èÌÌʬ¤ÎŤµ¤Ç¤¹¡£ËÜÅö¤Ë°õºþ¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:525
+msgid "Print request cancelled!!!"
+msgstr "°õºþ¥ê¥¯¥¨¥¹¥È¤Ï¥­¥ã¥ó¥»¥ë¤µ¤ì¤Þ¤·¤¿!!!"
+
+#: LYMessages.c:526
+msgid "Press <return> to begin: "
+msgstr "¥ê¥¿¡¼¥ó¥­¡¼¤Ç³«»Ï: "
+
+#: LYMessages.c:527
+msgid "Press <return> to finish: "
+msgstr "¥ê¥¿¡¼¥ó¥­¡¼¤Ç½ªÎ»"
+
+#. #define CONFIRM_LONG_PAGE_PRINT
+#: LYMessages.c:529
+#, c-format
+msgid "File is %d pages long. Are you sure you want to print?"
+msgstr "¥Õ¥¡¥¤¥ë¤Ï %d ¥Ú¡¼¥¸Ê¬¤ÎŤµ¤Ç¤¹¡£ËÜÅö¤Ë°õºþ¤·¤Þ¤¹¤«?"
+
+#. #define CHECK_PRINTER
+#: LYMessages.c:531
+msgid "Be sure your printer is on-line. Press <return> to start printing:"
+msgstr "¥×¥ê¥ó¥¿¤¬¥ª¥ó¥é¥¤¥ó¤«³Î¤«¤á¤Æ¤¯¤À¤µ¤¤¡£¥ê¥¿¡¼¥ó¥­¡¼¤Ç°õºþ³«»Ï:"
+
+#: LYMessages.c:532
+msgid "ERROR - Unable to allocate file space!!!"
+msgstr "¥¨¥é¡¼ - ¥Õ¥¡¥¤¥ëÎΰ褬³ÎÊݤǤ­¤Þ¤»¤ó!!!"
+
+#: LYMessages.c:533
+msgid "Unable to open tempfile"
+msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó"
+
+#: LYMessages.c:534
+msgid "Unable to open print options file"
+msgstr "°õºþ¥ª¥×¥·¥ç¥ó¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó"
+
+#: LYMessages.c:535
+msgid "Printing file. Please wait..."
+msgstr "¥Õ¥¡¥¤¥ë¤ò°õºþ¤·¤Æ¤¤¤Þ¤¹¡£¤ªÂÔ¤Á¤¯¤À¤µ¤¤..."
+
+#: LYMessages.c:536
+msgid "Please enter a valid internet mail address: "
+msgstr "Àµ¤·¤¤¥¤¥ó¥¿¡¼¥Í¥Ã¥È¥á¡¼¥ë¥¢¥É¥ì¥¹¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤: "
+
+#: LYMessages.c:537
+msgid "ERROR! - printer is misconfigured!"
+msgstr "¥¨¥é¡¼! - ¥×¥ê¥ó¥¿¤ÎÀßÄ꤬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+#: LYMessages.c:538
+msgid "Image map from POST response not available!"
+msgstr "POST ¥ì¥¹¥Ý¥ó¥¹¤«¤é¤Î¥¤¥á¡¼¥¸¥Þ¥Ã¥×¤¬ÍøÍѤǤ­¤Þ¤»¤ó!"
+
+#: LYMessages.c:539
+msgid "Misdirected client-side image MAP request!"
+msgstr "¥¯¥é¥¤¥¢¥ó¥È¥µ¥¤¥É¥¤¥á¡¼¥¸ MAP ¥ê¥¯¥¨¥¹¥È¤Î¥Ç¥£¥ì¥¯¥·¥ç¥ó¤¬ÉÔÀµ¤Ç¤¹!"
+
+#: LYMessages.c:540
+msgid "Client-side image MAP is not accessible!"
+msgstr "¥¯¥é¥¤¥¢¥ó¥È¥µ¥¤¥É¥¤¥á¡¼¥¸ MAP ¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó!"
+
+#: LYMessages.c:541
+msgid "No client-side image MAPs are available!"
+msgstr "ÍøÍѤǤ­¤ë¥¯¥é¥¤¥¢¥ó¥È¥µ¥¤¥É¥¤¥á¡¼¥¸ MAP ¤¬¤¢¤ê¤Þ¤»¤ó!"
+
+#: LYMessages.c:542
+msgid "Client-side image MAP is not available!"
+msgstr "¥¯¥é¥¤¥¢¥ó¥È¥µ¥¤¥É¥¤¥á¡¼¥¸ MAP ¤ÏÍøÍѤǤ­¤Þ¤»¤ó!"
+
+#. #define OPTION_SCREEN_NEEDS_24
+#: LYMessages.c:545
+msgid "Screen height must be at least 24 lines for the Options menu!"
+msgstr "¥ª¥×¥·¥ç¥ó¥á¥Ë¥å¡¼¤òɽ¼¨¤¹¤ë¤Ë¤Ï¥¹¥¯¥ê¡¼¥ó¤Î¹â¤µ¤¬ºÇÄã 24 ¹ÔʬɬÍפǤ¹!"
+
+#. #define OPTION_SCREEN_NEEDS_23
+#: LYMessages.c:547
+msgid "Screen height must be at least 23 lines for the Options menu!"
+msgstr "¥ª¥×¥·¥ç¥ó¥á¥Ë¥å¡¼¤òɽ¼¨¤¹¤ë¤Ë¤Ï¥¹¥¯¥ê¡¼¥ó¤Î¹â¤µ¤¬ºÇÄã 23 ¹ÔʬɬÍפǤ¹!"
+
+#. #define OPTION_SCREEN_NEEDS_22
+#: LYMessages.c:549
+msgid "Screen height must be at least 22 lines for the Options menu!"
+msgstr "¥ª¥×¥·¥ç¥ó¥á¥Ë¥å¡¼¤òɽ¼¨¤¹¤ë¤Ë¤Ï¥¹¥¯¥ê¡¼¥ó¤Î¹â¤µ¤¬ºÇÄã 22 ¹ÔʬɬÍפǤ¹!"
+
+#: LYMessages.c:551
+msgid "That key requires Advanced User mode."
+msgstr "¤½¤Î¥­¡¼¤ò»È¤¦¤Ë¤Ï¹âÅ٥桼¥¶¥â¡¼¥É¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:552
+#, c-format
+msgid "Content-type: %s"
+msgstr "Content-type: %s"
+
+#: LYMessages.c:553
+msgid "Command: "
+msgstr "¥³¥Þ¥ó¥É: "
+
+#: LYMessages.c:554
+msgid "Unknown or ambiguous command"
+msgstr "ÉÔÌÀ¤Þ¤¿¤Ï¤¢¤¤¤Þ¤¤¤Ê¥³¥Þ¥ó¥É¤Ç¤¹"
+
+#: LYMessages.c:555
+msgid " Version "
+msgstr " ¥Ð¡¼¥¸¥ç¥ó "
+
+#: LYMessages.c:556
+msgid " first"
+msgstr " ¤òºÇ½é¤Ëõ¤·¤Þ¤¹"
+
+#: LYMessages.c:557
+msgid ", guessing..."
+msgstr "¡¢¿äÂ¬Ãæ..."
+
+#: LYMessages.c:558
+msgid "Permissions for "
+msgstr "¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó: "
+
+#: LYMessages.c:559
+msgid "Select "
+msgstr "ÁªÂò "
+
+#: LYMessages.c:560
+msgid "capital letter"
+msgstr "Âçʸ»ú"
+
+#: LYMessages.c:561
+msgid " of option line,"
+msgstr " ¤Î¥ª¥×¥·¥ç¥ó¥é¥¤¥ó¡¢"
+
+#: LYMessages.c:562
+msgid " to save,"
+msgstr " ¤ÇÊݸ¡¢"
+
+#: LYMessages.c:563
+msgid " to "
+msgstr " ¤Ø "
+
+#: LYMessages.c:564
+msgid " or "
+msgstr " ¤Þ¤¿¤Ï "
+
+#: LYMessages.c:565
+msgid " index"
+msgstr " º÷°ú"
+
+#: LYMessages.c:566
+msgid " to return to Lynx."
+msgstr " ¤Ç Lynx ¤ËÌá¤ë¡£"
+
+#: LYMessages.c:567
+msgid "Accept Changes"
+msgstr "Êѹ¹¤òÍ­¸ú¤Ë¤¹¤ë"
+
+#: LYMessages.c:568
+msgid "Reset Changes"
+msgstr "Êѹ¹¤ò¥ê¥»¥Ã¥È"
+
+#: LYMessages.c:569
+msgid "Left Arrow cancels changes"
+msgstr "[¢«] ¥­¥ã¥ó¥»¥ë"
+
+#: LYMessages.c:570
+msgid "Save options to disk"
+msgstr "Êѹ¹¤ò¥Ç¥£¥¹¥¯¤ËÊݸ"
+
+#: LYMessages.c:571
+msgid "Hit RETURN to accept entered data."
+msgstr "¥ê¥¿¡¼¥ó¥­¡¼¤ÇÆþÎϤ·¤¿¥Ç¡¼¥¿¤òÅÐÏ¿"
+
+#. #define ACCEPT_DATA_OR_DEFAULT
+#: LYMessages.c:573
+msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
+msgstr "¥ê¥¿¡¼¥ó¤ÇÆþÎϤ·¤¿¥Ç¡¼¥¿¤ò¼õ¤±ÉÕ¤±¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤ËÌ᤹¤Ë¤Ï¥Ç¡¼¥¿¤òºï½ü"
+
+#: LYMessages.c:574
+msgid "Value accepted!"
+msgstr "Ãͤò¼õ¤±Æþ¤ì¤Þ¤·¤¿!"
+
+#. #define VALUE_ACCEPTED_WARNING_X
+#: LYMessages.c:576
+msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
+msgstr "Ãͤò¼õ¤±Æþ¤ì¤Þ¤·¤¿! -- Ãí°Õ: Lynx ¤Ï XWINDOWS ¸þ¤±¤ËÀßÄꤵ¤ì¤Þ¤·¤¿!"
+
+#. #define VALUE_ACCEPTED_WARNING_NONX
+#: LYMessages.c:578
+msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
+msgstr "Ãͤò¼õ¤±Æþ¤ì¤Þ¤·¤¿! -- Ãí°Õ: Lynx ¤Ï XWINDOWS ¸þ¤±¤ËÀßÄꤵ¤ì¤Æ*¤¤¤Þ¤»¤ó*"
+
+#: LYMessages.c:579
+msgid "You are not allowed to change which editor to use!"
+msgstr "»ÈÍѤ¹¤ë¥¨¥Ç¥£¥¿¤ÎÊѹ¹¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#: LYMessages.c:580
+msgid "Failed to set DISPLAY variable!"
+msgstr "´Ä¶­ÊÑ¿ô DISPLAY ¤ÎÀßÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿!"
+
+#: LYMessages.c:581
+msgid "Failed to clear DISPLAY variable!"
+msgstr "´Ä¶­ÊÑ¿ô DISPLAY ¤Î¥¯¥ê¥¢¤Ë¼ºÇÔ¤·¤Þ¤·¤¿!"
+
+#. #define BOOKMARK_CHANGE_DISALLOWED
+#: LYMessages.c:583
+msgid "You are not allowed to change the bookmark file!"
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ÎÊѹ¹¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#: LYMessages.c:584
+msgid "Terminal does not support color"
+msgstr "üËö¤¬¥«¥é¡¼É½¼¨¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:585
+#, c-format
+msgid "Your '%s' terminal does not support color."
+msgstr "¤¢¤Ê¤¿¤ÎüËö '%s' ¤Ï¥«¥é¡¼É½¼¨¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:586
+msgid "Access to dot files is disabled!"
+msgstr "¥É¥Ã¥È¥Õ¥¡¥¤¥ë¤Ø¤Î¥¢¥¯¥»¥¹¤Ï¤Ç¤­¤Þ¤»¤ó!"
+
+#. #define UA_NO_LYNX_WARNING
+#: LYMessages.c:588
+msgid "User-Agent string does not contain \"Lynx\" or \"L_y_n_x\""
+msgstr "User-Agent ¤Ë \"Lynx\" ¤¢¤ë¤¤¤Ï \"L_y_n_x\" ¤È¤¤¤¦Ê¸»úÎó¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#. #define UA_PLEASE_USE_LYNX
+#: LYMessages.c:590
+msgid "Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional deception!"
+msgstr "User-Agent ¤Ë \"L_y_n_x\" ¤Ê¤¤¤· \"Lynx\" ¤È¤¤¤¦Ê¸»úÎó¤ò´Þ¤á¤Æ¤¯¤À¤µ¤¤¡£¤µ¤â¤Ê¤¤¤È°Õ¿ÞŪ¤Êµ½â֤ȸ«¤Ê¤·¤Þ¤¹!"
+
+#. #define UA_CHANGE_DISABLED
+#: LYMessages.c:592
+msgid "Changing of the User-Agent string is disabled!"
+msgstr "User-Agent ʸ»úÎó¤ÎÊѹ¹¤Ï¤Ç¤­¤Þ¤»¤ó!"
+
+#. #define CHANGE_OF_SETTING_DISALLOWED
+#: LYMessages.c:594
+msgid "You are not allowed to change this setting."
+msgstr "¤³¤ÎÀßÄê¤ÎÊѹ¹¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:595
+msgid "Saving Options..."
+msgstr "ÀßÄê¤òÊÝÂ¸Ãæ..."
+
+#: LYMessages.c:596
+msgid "Options saved!"
+msgstr "ÀßÄê¤òÊݸ¤·¤Þ¤·¤¿!"
+
+#: LYMessages.c:597
+msgid "Unable to save Options!"
+msgstr "ÀßÄê¤òÊݸ¤Ç¤­¤Þ¤»¤ó!"
+
+#: LYMessages.c:598
+msgid " 'r' to return to Lynx "
+msgstr "[r]¤Ç Lynx ¤ËÌá¤ê¤Þ¤¹ "
+
+#: LYMessages.c:599
+msgid " '>' to save, or 'r' to return to Lynx "
+msgstr " [>] ¤ÇÊݸ¡¢[r] ¤Ç Lynx ¤ËÌá¤ê¤Þ¤¹ "
+
+#. #define ANY_KEY_CHANGE_RET_ACCEPT
+#: LYMessages.c:601
+msgid "Hit any key to change value; RETURN to accept."
+msgstr "²¿¤«¥­¡¼¤ò²¡¤·¤ÆÃͤòÊѤ¨¤Æ¤¯¤À¤µ¤¤¡£¥ê¥¿¡¼¥ó¤ÇÅÐÏ¿"
+
+#: LYMessages.c:602
+msgid "Error uncompressing temporary file!"
+msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤ÎŸ³«¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿!"
+
+#: LYMessages.c:603
+msgid "Unsupported URL scheme!"
+msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤ URL ¥¹¥­¡¼¥à¤Ç¤¹!"
+
+#: LYMessages.c:604
+msgid "Unsupported data: URL! Use SHOWINFO, for now."
+msgstr "¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ç¡¼¥¿: URL! ¤È¤ê¤¢¤¨¤º SHOWINFO ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: LYMessages.c:605
+msgid "Redirection limit of 10 URL's reached."
+msgstr "¥ê¥À¥¤¥ì¥¯¥·¥ç¥óÀ©¸Â (10 URL) ¤ËÅþ㤷¤Þ¤·¤¿¡£"
+
+#: LYMessages.c:606
+msgid "Illegal redirection URL received from server!"
+msgstr "¥µ¡¼¥Ð¤«¤éÉÔÀµ¤Ê¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó URL ¤ò¼õ¿®¤·¤Þ¤·¤¿!"
+
+#. #define SERVER_ASKED_FOR_REDIRECTION
+#: LYMessages.c:608
+#, c-format
+msgid "Server asked for %d redirection of POST content to"
+msgstr "¥µ¡¼¥Ð¤Ï POST ¥³¥ó¥Æ¥ó¥È¤Î°Ê²¼¤Ø¤Î %d ¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¤òÍ׵ᤷ¤Þ¤·¤¿: "
+
+#: LYMessages.c:611
+msgid "P)roceed, use G)ET or C)ancel "
+msgstr "[p]¤Ç³¹Ô¡¢[g]GET¤ò»È¤¦¡¢[c]¥­¥ã¥ó¥»¥ë"
+
+#: LYMessages.c:612
+msgid "P)roceed, or C)ancel "
+msgstr "[p]¤Ç³¹Ô¡¢¤Þ¤¿¤Ï [c]¥­¥ã¥ó¥»¥ë"
+
+#. #define ADVANCED_POST_GET_REDIRECT
+#: LYMessages.c:614
+msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
+msgstr "POST ¥³¥ó¥Æ¥ó¥È¤Î¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó [p]³¹Ô [u]URL¤ò¸«¤ë [g]GET¤ò»È¤¦ [c]¥­¥ã¥ó¥»¥ë"
+
+#. #define ADVANCED_POST_REDIRECT
+#: LYMessages.c:616
+msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
+msgstr "POST ¥³¥ó¥Æ¥ó¥È¤Î¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó [p]³¹Ô [u]URL¤ò¸«¤ë [c]¥­¥ã¥ó¥»¥ë"
+
+#. #define CONFIRM_POST_RESUBMISSION
+#: LYMessages.c:618
+msgid "Document from Form with POST content. Resubmit?"
+msgstr "POST ¥³¥ó¥Æ¥ó¥È¤ò»ý¤Ä¥Õ¥©¡¼¥à¤«¤é¤Î¥É¥­¥å¥á¥ó¥È¤Ç¤¹¡£ºÆÁ÷¿®¤·¤Þ¤¹¤«?"
+
+#. #define CONFIRM_POST_RESUBMISSION_TO
+#: LYMessages.c:620
+#, c-format
+msgid "Resubmit POST content to %s ?"
+msgstr "POST ¥³¥ó¥Æ¥ó¥È¤ò %s ¤ËºÆÁ÷¿®¤·¤Þ¤¹¤«?"
+
+#. #define CONFIRM_POST_LIST_RELOAD
+#: LYMessages.c:622
+#, c-format
+msgid "List from document with POST data. Reload %s ?"
+msgstr "POST ¥Ç¡¼¥¿¤ò»ý¤Ä¥É¥­¥å¥á¥ó¥È¤«¤é¤Î¥ê¥¹¥È¤Ç¤¹¡£%s ¤òºÆÆÉ¤ß¹þ¤ß¤·¤Þ¤¹¤«?"
+
+#. #define CONFIRM_POST_DOC_HEAD
+#: LYMessages.c:624
+msgid "Document from POST action, HEAD may not be understood. Proceed?"
+msgstr "POST ¥¢¥¯¥·¥ç¥ó¤«¤é¤Îʸ½ñ¤Ç¤¹¤¬¡¢HEAD ¤ÏÍý²ò¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£Â³¹Ô¤·¤Þ¤¹¤«?"
+
+#. #define CONFIRM_POST_LINK_HEAD
+#: LYMessages.c:626
+msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
+msgstr "¥Õ¥©¡¼¥àÁ÷¿®¥¢¥¯¥·¥ç¥ó¤Ï POST ¤Ç¤¹¤¬¡¢HEAD ¤ÏÍý²ò¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£Â³¹Ô¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:627
+msgid "Proceed without a username and password?"
+msgstr "¥æ¡¼¥¶Ì¾¤â¥Ñ¥¹¥ï¡¼¥É¤â̵¤·¤Ç³¹Ô¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:628
+#, c-format
+msgid "Proceed (%s)?"
+msgstr "³¹Ô¤·¤Þ¤¹¤« (%s)?"
+
+#: LYMessages.c:629
+msgid "Cannot POST to this host."
+msgstr "¤³¤Î¥Û¥¹¥È¤Ë¤Ï POST ¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:630
+msgid "POST not supported for this URL - ignoring POST data!"
+msgstr "¤³¤Î URL ¤Î¤¿¤á¤Î POST ¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£POST ¥Ç¡¼¥¿¤Ï̵»ë¤µ¤ì¤Þ¤¹!"
+
+#: LYMessages.c:631
+msgid "Discarding POST data..."
+msgstr "POST ¥Ç¡¼¥¿¤òÇÑ´þ¤·¤Æ¤¤¤Þ¤¹..."
+
+#: LYMessages.c:632
+msgid "Document will not be reloaded!"
+msgstr "ʸ½ñ¤ÏºÆÆÉ¤ß¹þ¤ß¤µ¤ì¤Þ¤»¤ó!"
+
+#: LYMessages.c:633
+msgid "Location: "
+msgstr "¾ì½ê: "
+
+#: LYMessages.c:634
+#, c-format
+msgid "'%s' not found!"
+msgstr "'%s' ¤Ï¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿!"
+
+#: LYMessages.c:635
+msgid "Default Bookmark File"
+msgstr "¥Ç¥Õ¥©¥ë¥È¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë"
+
+#: LYMessages.c:636
+msgid "Screen too small! (8x35 min)"
+msgstr "¥¹¥¯¥ê¡¼¥ó¤¬¾®¤µ¤¹¤®¤Þ¤¹!!! (ºÇÄã 8x35 ɬÍפǤ¹)"
+
+#: LYMessages.c:637
+msgid "Select destination or ^G to Cancel: "
+msgstr "¥Õ¥¡¥¤¥ë¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤ (^G ¤Ç¥­¥ã¥ó¥»¥ë): "
+
+#. #define MULTIBOOKMARKS_SELECT
+#: LYMessages.c:639
+msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¤òÁªÂò [=] ¥á¥Ë¥å¡¼ [^g] ¥­¥ã¥ó¥»¥ë: "
+
+#. #define MULTIBOOKMARKS_SELF
+#: LYMessages.c:641
+msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
+msgstr "[l]¤³¤Î¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ëÆâ¤Ç¥ê¥ó¥¯¤òºÆÀ½ ([c]¥­¥ã¥ó¥»¥ë): "
+
+#: LYMessages.c:642
+msgid "Multiple bookmark support is not available."
+msgstr "¥Þ¥ë¥Á¥Ö¥Ã¥¯¥Þ¡¼¥¯¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:643
+#, c-format
+msgid " Select Bookmark (screen %d of %d)"
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¤òÁªÂò (¥Ú¡¼¥¸ %d¡¢Á´ %d ¥Ú¡¼¥¸)"
+
+#: LYMessages.c:644
+msgid " Select Bookmark"
+msgstr " ¥Ö¥Ã¥¯¥Þ¡¼¥¯¤òÁªÂò"
+
+#. #define MULTIBOOKMARKS_EHEAD_MASK
+#: LYMessages.c:646
+#, c-format
+msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ÎÀâÌÀ¤È¥Õ¥¡¥¤¥ë¤Ø¤Î¥Ñ¥¹¤òÊÔ½¸ (2 ¤Î %d) "
+
+#. #define MULTIBOOKMARKS_EHEAD
+#: LYMessages.c:648
+msgid " Editing Bookmark DESCRIPTION and FILEPATH"
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ÎÀâÌÀ¤È¥Õ¥¡¥¤¥ë̾¤òÊÔ½¸"
+
+#: LYMessages.c:649
+msgid "Letter: "
+msgstr "ʸ»ú¤òÆþÎÏ: "
+
+#. #define USE_PATH_OFF_HOME
+#: LYMessages.c:652
+msgid "Use a filepath off your login directory in SHELL syntax!"
+msgstr "SHELL ¹½Ê¸¤Ç¤Ï¤¢¤Ê¤¿¤Î¥í¥°¥¤¥ó¥Ç¥£¥ì¥¯¥È¥ê¤ò½ü¤¤¤¿¥Õ¥¡¥¤¥ë¥Ñ¥¹¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤!"
+
+#: LYMessages.c:654
+msgid "Use a filepath off your home directory!"
+msgstr "¤¢¤Ê¤¿¤Î¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤ò½ü¤¤¤¿¥Õ¥¡¥¤¥ë¥Ñ¥¹¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤!"
+
+#. #define MAXLINKS_REACHED
+#: LYMessages.c:657
+msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
+msgstr "°ì¥Ú¡¼¥¸¤¢¤¿¤ê¤Î¥ê¥ó¥¯¤ÎºÇÂç¿ô¤òͤ¨¤Þ¤·¤¿! Ⱦ¥Ú¡¼¥¸¤Ê¤¤¤·Æó¹Ôñ°Ì¤Î¥¹¥¯¥í¡¼¥ë¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£"
+
+#. #define MAXHIST_REACHED
+#: LYMessages.c:659
+msgid "History List maximum reached! Document not pushed."
+msgstr "ÍúÎò¥ê¥¹¥È¤¬ºÇÂç¿ô¤òͤ¨¤Þ¤·¤¿! ¥É¥­¥å¥á¥ó¥È¤Ï¥×¥Ã¥·¥å¤µ¤ì¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:660
+msgid "No previously visited links available!"
+msgstr "°ÊÁ°¤Ëˬ¤Í¤¿¥ê¥ó¥¯¤Ï°ì¤Ä¤â¤¢¤ê¤Þ¤»¤ó!"
+
+#: LYMessages.c:661
+msgid "Memory exhausted! Program aborted!"
+msgstr "¥á¥â¥ê¤ò»È¤¤¤­¤ê¤Þ¤·¤¿! ¥×¥í¥°¥é¥à¤¬ÃæÃǤµ¤ì¤Þ¤·¤¿!"
+
+#: LYMessages.c:662
+msgid "Memory exhausted! Aborting..."
+msgstr "¥á¥â¥ê¤ò»È¤¤¤­¤ê¤Þ¤·¤¿! ½ªÎ»¤·¤Þ¤¹..."
+
+#: LYMessages.c:663
+msgid "Not enough memory!"
+msgstr "¥á¥â¥ê¤¬Â­¤ê¤Þ¤»¤ó!"
+
+#: LYMessages.c:664
+msgid "Directory/File Manager not available"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê/¥Õ¥¡¥¤¥ë¥Þ¥Í¡¼¥¸¥ã¤ÏÍøÍѤǤ­¤Þ¤»¤ó"
+
+#: LYMessages.c:665
+msgid "HREF in BASE tag is not an absolute URL."
+msgstr "BASE ¥¿¥°Ãæ¤Î HREF ¤ÏÀäÂÐ URL ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:666
+msgid "Location URL is not absolute."
+msgstr "¥í¥±¡¼¥·¥ç¥ó URL ¤ÏÀäÂÐŪ¤Ê¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:667
+msgid "Refresh URL is not absolute."
+msgstr "¥ê¥Õ¥ì¥Ã¥·¥å URL ¤ÏÀäÂÐŪ¤Ê¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#. #define SENDING_MESSAGE_WITH_BODY_TO
+#: LYMessages.c:669
+msgid ""
+"You are sending a message with body to:\n"
+" "
+msgstr ""
+"ËÜʸ¤ò´Þ¤à¥á¥Ã¥»¡¼¥¸¤ò°Ê²¼¤ØÁ÷¤í¤¦¤È¤·¤Æ¤¤¤Þ¤¹:\n"
+" "
+
+#: LYMessages.c:670
+msgid ""
+"You are sending a comment to:\n"
+" "
+msgstr ""
+"°Ê²¼¤Î¥¢¥É¥ì¥¹¤Ë¥³¥á¥ó¥È¤òÁ÷¤ê¤Þ¤¹:\n"
+" "
+
+#: LYMessages.c:671
+msgid ""
+"\n"
+" With copy to:\n"
+" "
+msgstr ""
+"\n"
+" °Ê²¼¤Ø¤â¥³¥Ô¡¼¤òÁ÷¤ê¤Þ¤¹:\n"
+" "
+
+#: LYMessages.c:672
+msgid ""
+"\n"
+" With copies to:\n"
+" "
+msgstr ""
+"\n"
+" °Ê²¼¤Ø¤â¥³¥Ô¡¼¤òÁ÷¤ê¤Þ¤¹:\n"
+" "
+
+#. #define CTRL_G_TO_CANCEL_SEND
+#: LYMessages.c:674
+msgid ""
+"\n"
+"\n"
+"Use Ctrl-G to cancel if you do not want to send a message\n"
+msgstr ""
+"\n"
+"\n"
+"Ctrl-G ¤Ç¥á¥Ã¥»¡¼¥¸Á÷¿®¤òÃæ»ß¤·¤Þ¤¹\n"
+
+#. #define ENTER_NAME_OR_BLANK
+#: LYMessages.c:676
+msgid ""
+"\n"
+" Please enter your name, or leave it blank to remain anonymous\n"
+msgstr ""
+"\n"
+"¤¢¤Ê¤¿¤Î¤ªÌ¾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£¶õÇò¤Î¤Þ¤Þ¤À¤Èƿ̾¤Ë¤Ê¤ê¤Þ¤¹\n"
+
+#. #define ENTER_MAIL_ADDRESS_OR_OTHER
+#: LYMessages.c:678
+msgid ""
+"\n"
+" Please enter a mail address or some other\n"
+msgstr ""
+"\n"
+" ÊÖ»ö¤ò´õ˾¤¹¤ë¾ì¹ç¤Ï¡¢¥á¡¼¥ë¥¢¥É¥ì¥¹¤«¡¢¤½¤Î¾¤Î\n"
+
+#. #define MEANS_TO_CONTACT_FOR_RESPONSE
+#: LYMessages.c:680
+msgid " means to contact you, if you desire a response.\n"
+msgstr " Ï¢Íí¼êÃʤò¤³¤³¤Ç»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: LYMessages.c:681
+msgid ""
+"\n"
+" Please enter a subject line.\n"
+msgstr ""
+"\n"
+" ¥µ¥Ö¥¸¥§¥¯¥È¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#. #define ENTER_ADDRESS_FOR_CC
+#: LYMessages.c:683
+msgid ""
+"\n"
+" Enter a mail address for a CC of your message.\n"
+msgstr ""
+"\n"
+" ¤¢¤Ê¤¿¤Î¥á¥Ã¥»¡¼¥¸¤ò CC ¤¹¤ë¥á¡¼¥ë¥¢¥É¥ì¥¹¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: LYMessages.c:684
+msgid " (Leave blank if you don't want a copy.)\n"
+msgstr " (¤â¤·¥³¥Ô¡¼¤·¤¿¤¯¤Ê¤±¤ì¤Ð¶õÇò¤Î¤Þ¤Þ¤Ë¤·¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤)\n"
+
+#: LYMessages.c:685
+msgid ""
+"\n"
+" Please review the message body:\n"
+"\n"
+msgstr ""
+"\n"
+" ¥á¥Ã¥»¡¼¥¸ËÜʸ¤ò³Îǧ¤·¤Æ²¼¤µ¤¤:\n"
+"\n"
+
+#: LYMessages.c:686
+msgid ""
+"\n"
+"Press RETURN to continue: "
+msgstr ""
+"\n"
+"³¤±¤ë¤Ë¤Ï¥ê¥¿¡¼¥ó¥­¡¼¤ò²¡¤·¤Æ²¼¤µ¤¤: "
+
+#: LYMessages.c:687
+msgid ""
+"\n"
+"Press RETURN to clean up: "
+msgstr ""
+"\n"
+"Á´¤Æºï½ü¤¹¤ë¤Ë¤Ï¥ê¥¿¡¼¥ó¥­¡¼¤ò²¡¤·¤Æ²¼¤µ¤¤: "
+
+#: LYMessages.c:688
+msgid " Use Control-U to erase the default.\n"
+msgstr "Ctrl-U ¤Ç¥Ç¥Õ¥©¥ë¥ÈÃͤòºï½ü¤·¤Þ¤¹¡£\n"
+
+#: LYMessages.c:689
+msgid ""
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+" ¤¢¤Ê¤¿¤Î¥á¥Ã¥»¡¼¥¸¤ò°Ê²¼¤ËÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#. #define ENTER_PERIOD_WHEN_DONE_A
+#: LYMessages.c:691 src/LYNews.c:380
+msgid ""
+"\n"
+" When you are done, press enter and put a single period (.)"
+msgstr ""
+"\n"
+" ½ª¤ï¤Ã¤¿¤é¡¢²þ¹Ô¥­¡¼¤ò²¡¤·¤Æ¤½¤Î¹Ô¤Ë¥Ô¥ê¥ª¥É (.) ¤ò°ì¤Ä"
+
+#. #define ENTER_PERIOD_WHEN_DONE_B
+#: LYMessages.c:693 src/LYNews.c:381
+msgid ""
+"\n"
+" on a line and press enter again."
+msgstr ""
+"\n"
+" ÆþÎϤ·¡¢¤â¤¦°ìÅÙ²þ¹Ô¥­¡¼¤ò²¡¤·¤Æ²¼¤µ¤¤¡£"
+
+#. Cookies messages
+#. #define ADVANCED_COOKIE_CONFIRMATION
+#: LYMessages.c:697
+#, c-format
+msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
+msgstr "%s ¤«¤é¤Î¥¯¥Ã¥­¡¼: %.*s=%.*s ¼õ¤±ÉÕ¤±¤Þ¤¹¤«? (Y/N/Always/neVer)"
+
+#. #define INVALID_COOKIE_DOMAIN_CONFIRMATION
+#: LYMessages.c:699
+#, c-format
+msgid "Accept invalid cookie domain=%s for '%s'?"
+msgstr "ÉÔÀµ¤Ê¥¯¥Ã¥­¡¼¥É¥á¥¤¥ó= %s ¤ò %s ¤È¤·¤Æ¼õ¤±ÉÕ¤±¤Þ¤¹¤«?"
+
+#. #define INVALID_COOKIE_PATH_CONFIRMATION
+#: LYMessages.c:701
+#, c-format
+msgid "Accept invalid cookie path=%s as a prefix of '%s'?"
+msgstr "ÉÔÀµ¤Ê¥¯¥Ã¥­¡¼¥Ñ¥¹ = %s ¤ò %s ¤Î¥×¥ê¥Õ¥£¥Ã¥¯¥¹¤È¤·¤Æ¼õ¤±ÉÕ¤±¤Þ¤¹¤«? "
+
+#: LYMessages.c:702
+msgid "Allowing this cookie."
+msgstr "¤³¤Î¥¯¥Ã¥­¡¼¤ò¼õ¤±ÉÕ¤±¤Þ¤¹¡£"
+
+#: LYMessages.c:703
+msgid "Rejecting this cookie."
+msgstr "¤³¤Î¥¯¥Ã¥­¡¼¤òµñÈݤ·¤Þ¤¹¡£"
+
+#: LYMessages.c:704
+msgid "The Cookie Jar is empty."
+msgstr "¥¯¥Ã¥­¡¼È¢¤Ï¶õ¤Ã¤Ý¤Ç¤¹¡£"
+
+#. #define ACTIVATE_TO_GOBBLE
+#: LYMessages.c:706
+msgid "Activate links to gobble up cookies or entire domains,"
+msgstr "¥ê¥ó¥¯¤òé¤ë¤È¡¢¥¯¥Ã¥­¡¼¤ä¥É¥á¥¤¥óÁ´ÂΤò¡Ö¿©¤Ù¡×¤¿¤ê¡¢"
+
+#: LYMessages.c:707
+msgid "or to change a domain's 'allow' setting."
+msgstr "¥É¥á¥¤¥ó¤´¤È¤Î¥¯¥Ã¥­¡¼¼õ¤±ÉÕ¤±ÀßÄê¤òÊѤ¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£"
+
+#: LYMessages.c:708
+msgid "(Cookies never allowed.)"
+msgstr "(¥¯¥Ã¥­¡¼¤ò¾ï¤ËµñÈݤ·¤Þ¤¹)"
+
+#: LYMessages.c:709
+msgid "(Cookies always allowed.)"
+msgstr "(¥¯¥Ã¥­¡¼¤ò¾ï¤Ë¼õ¤±ÉÕ¤±¤Þ¤¹)"
+
+#: LYMessages.c:710
+msgid "(Cookies allowed via prompt.)"
+msgstr "(¥¯¥Ã¥­¡¼¼õ¤±ÉÕ¤±¤Ï¤½¤Î¤Ä¤ÉȽÃǤ·¤Þ¤¹)"
+
+#: LYMessages.c:711
+msgid "(Persistent Cookies.)"
+msgstr "(±Ê³Ū¤Ê¥¯¥Ã¥­¡¼)"
+
+#: LYMessages.c:712
+msgid "(No title.)"
+msgstr "(¥¿¥¤¥È¥ë¤Ê¤·)"
+
+#: LYMessages.c:713
+msgid "(No name.)"
+msgstr "(̾Á°¤Ê¤·)"
+
+#: LYMessages.c:714
+msgid "(No value.)"
+msgstr "(Ãͤʤ·)"
+
+#: LYMessages.c:715
+msgid "None"
+msgstr "¤Ê¤·"
+
+#: LYMessages.c:716
+msgid "(End of session.)"
+msgstr "(¥»¥Ã¥·¥ç¥ó¤Î½ª¤ï¤ê)"
+
+#: LYMessages.c:717
+msgid "Delete this cookie?"
+msgstr "¤³¤Î¥¯¥Ã¥­¡¼¤òºï½ü¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:718
+msgid "The cookie has been eaten!"
+msgstr "¥¯¥Ã¥­¡¼¤Ï¿©¤Ù¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤·¤¿!"
+
+#: LYMessages.c:719
+msgid "Delete this empty domain?"
+msgstr "¤³¤Î¶õ¤Ë¤Ê¤Ã¤¿¥É¥á¥¤¥ó¤òºï½ü¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:720
+msgid "The domain has been eaten!"
+msgstr "¥É¥á¥¤¥ó¤Ï¿©¤Ù¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤·¤¿!"
+
+#. #define DELETE_COOKIES_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:722
+msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "¥É¥á¥¤¥ó¤Î¥¯¥Ã¥­¡¼¤ò[d]ºï½ü¡¢¾ï¤Ë[a]¼õÉÕ[v]µñÈÝ¡¢[p]ȽÃÇ ([c]¥­¥ã¥ó¥»¥ë)? "
+
+#. #define DELETE_DOMAIN_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:724
+msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "¥É¥á¥¤¥ó¤ò[d]ºï½ü¡¢¾ï¤Ë[a]¼õÉÕ[v]µñÈÝ¡¢[p]ȽÃÇ ([c]¥­¥ã¥ó¥»¥ë)? "
+
+#: LYMessages.c:725
+msgid "All cookies in the domain have been eaten!"
+msgstr "¥É¥á¥¤¥ó¤Î¥¯¥Ã¥­¡¼¤Ï¤¹¤Ù¤Æ¿©¤Ù¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤·¤¿!"
+
+#: LYMessages.c:726
+#, c-format
+msgid "'A'lways allowing from domain '%s'."
+msgstr "¥É¥á¥¤¥ó %s ¤«¤é¤Ï¾ï¤Ë¼õ¤±ÉÕ¤±¤Þ¤¹¡£"
+
+#: LYMessages.c:727
+#, c-format
+msgid "ne'V'er allowing from domain '%s'."
+msgstr "¥É¥á¥¤¥ó %s ¤«¤é¤ÏÁ´¤ÆµñÈݤ·¤Þ¤¹¡£"
+
+#: LYMessages.c:728
+#, c-format
+msgid "'P'rompting to allow from domain '%s'."
+msgstr "¥É¥á¥¤¥ó %s ¤«¤é¤Ï¤½¤Î¤Ä¤ÉȽÃǤ·¤Þ¤¹¡£"
+
+#: LYMessages.c:729
+msgid "Delete all cookies in this domain?"
+msgstr "¤³¤Î¥É¥á¥¤¥ó¤Î¥¯¥Ã¥­¡¼¤ò¤¹¤Ù¤Æºï½ü¤·¤Þ¤¹¤«?"
+
+#: LYMessages.c:730
+msgid "All of the cookies in the jar have been eaten!"
+msgstr "¥¯¥Ã¥­¡¼È¢¤Î¥¯¥Ã¥­¡¼¤Ï¤ß¤ó¤Ê¿©¤Ù¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤·¤¿!"
+
+#: LYMessages.c:732
+msgid "Port 19 not permitted in URLs."
+msgstr "¥Ý¡¼¥È 19 ¤ò URL ¤Ç»ØÄꤹ¤ë¤³¤È¤Ïǧ¤á¤é¤ì¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:733
+msgid "Port 25 not permitted in URLs."
+msgstr "¥Ý¡¼¥È 25 ¤ò URL ¤Ç»ØÄꤹ¤ë¤³¤È¤Ïǧ¤á¤é¤ì¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:734
+#, c-format
+msgid "Port %lu not permitted in URLs."
+msgstr "¥Ý¡¼¥È %lu ¤ò URL ¤Ç»ØÄꤹ¤ë¤³¤È¤Ïǧ¤á¤é¤ì¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:735
+msgid "URL has a bad port field."
+msgstr "URL ¤ËÉÔÀµ¤Ê¥Ý¡¼¥È¥Õ¥£¡¼¥ë¥É¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£"
+
+#: LYMessages.c:736
+msgid "Maximum nesting of HTML elements exceeded."
+msgstr "HTML ¥¨¥ì¥á¥ó¥È¤Î¥Í¥¹¥Æ¥£¥ó¥°¤¬¸Â³¦¤òͤ¨¤Þ¤·¤¿¡£"
+
+#: LYMessages.c:737
+msgid "Bad partial reference! Stripping lead dots."
+msgstr "ÉÔÀµ¤ÊÉôʬŪ»²¾È¤Ç¤¹! ÀèÆ¬¥É¥Ã¥È¤òºï¤ê¤Þ¤¹¡£"
+
+#: LYMessages.c:738
+msgid "Trace Log open failed. Trace off!"
+msgstr "ÄÉÀ×¥í¥°¤ò³«¤¯¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£ÄÉÀ×½ªÎ»!"
+
+#: LYMessages.c:739
+msgid "Lynx Trace Log"
+msgstr "Lynx ÄÉÀ×¥í¥°"
+
+#: LYMessages.c:740
+msgid "No trace log has been started for this session."
+msgstr "¤³¤Î¥»¥Ã¥·¥ç¥ó¤Ç³«»Ï¤µ¤ì¤¿ÄÉÀ×¥í¥°¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
+
+#. #define MAX_TEMPCOUNT_REACHED
+#: LYMessages.c:742
+msgid "The maximum temporary file count has been reached!"
+msgstr "°ì»þŪ¥Õ¥¡¥¤¥ë¿ô¤¬¸Â³¦¤ò±Û¤¨¤Þ¤·¤¿!"
+
+#. #define FORM_VALUE_TOO_LONG
+#: LYMessages.c:744
+msgid "Form field value exceeds buffer length! Trim the tail."
+msgstr "¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É¤ÎÃͤ¬¥Ð¥Ã¥Õ¥¡¤ÎŤµ¤ò±Û¤¨¤Þ¤·¤¿¡£½ªÃ¼¤òÀÚ¤ê¤Þ¤¹¡£"
+
+#. #define FORM_TAIL_COMBINED_WITH_HEAD
+#: LYMessages.c:746
+msgid "Modified tail combined with head of form field value."
+msgstr "½ªÃ¼¤ò¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É¤ÎÃͤÎÀèÆ¬¤È·ë¹ç¤¹¤ë¤è¤¦Êѹ¹¤·¤Þ¤·¤¿¡£"
+
+#. HTFile.c
+#: LYMessages.c:749
+msgid "Directory"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê"
+
+#: LYMessages.c:750
+msgid "Directory browsing is not allowed."
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê±ÜÍ÷¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:751
+msgid "Selective access is not enabled for this directory"
+msgstr "ÁªÂòŪ¥¢¥¯¥»¥¹¤Ï¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï»È¤¨¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:752
+msgid "Multiformat: directory scan failed."
+msgstr "¥Þ¥ë¥Á¥Õ¥©¡¼¥Þ¥Ã¥È: ¥Ç¥£¥ì¥¯¥È¥ê¤Î¥¹¥­¥ã¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£"
+
+#: LYMessages.c:753
+msgid "This directory is not readable."
+msgstr "¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ÏÆÉ¤á¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:754
+msgid "Can't access requested file."
+msgstr "Í׵ᤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:755
+msgid "Could not find suitable representation for transmission."
+msgstr "ÅÁ㤹¤ëŬÅö¤Êɽ¸½¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó¤Ç¤·¤¿¡£"
+
+#: LYMessages.c:756
+msgid "Could not open file for decompression!"
+msgstr "Ÿ³«¤¹¤ë¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó!"
+
+#: LYMessages.c:757
+msgid "Files:"
+msgstr "¥Õ¥¡¥¤¥ë:"
+
+#: LYMessages.c:758
+msgid "Subdirectories:"
+msgstr "¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê:"
+
+#: LYMessages.c:759
+msgid " directory"
+msgstr " ¥Ç¥£¥ì¥¯¥È¥ê"
+
+#: LYMessages.c:760
+msgid "Up to "
+msgstr "°Ê²¼¤Þ¤Ç: "
+
+#: LYMessages.c:761
+msgid "Current directory is "
+msgstr "¸½ºß¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ï "
+
+#. HTGopher.c
+#: LYMessages.c:764
+msgid "No response from server!"
+msgstr "¥µ¡¼¥Ð¤«¤é±þÅú¤¬¤¢¤ê¤Þ¤»¤ó!"
+
+#: LYMessages.c:765
+msgid "CSO index"
+msgstr "CSO ¥¤¥ó¥Ç¥Ã¥¯¥¹"
+
+#: LYMessages.c:766
+msgid ""
+"\n"
+"This is a searchable index of a CSO database.\n"
+msgstr ""
+"\n"
+"¤³¤ì¤ÏCSO¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¸¡º÷²Äǽ¤Ê¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ç¤¹¡£\n"
+
+#: LYMessages.c:767
+msgid "CSO Search Results"
+msgstr "CSO ¸¡º÷·ë²Ì"
+
+#: LYMessages.c:768
+#, c-format
+msgid "Seek fail on %s\n"
+msgstr "%s ¤Ç¸¡º÷¤Ë¼ºÇÔ\n"
+
+#: LYMessages.c:769
+msgid ""
+"\n"
+"Press the 's' key and enter search keywords.\n"
+msgstr ""
+"\n"
+" 's' ¥­¡¼¤ò²¡¤·¤Æ¸¡º÷¤¹¤ë¥­¡¼¥ï¡¼¥É¤òÆþÎϤ·¤Æ²¼¤µ¤¤¡£\n"
+
+#: LYMessages.c:770
+msgid ""
+"\n"
+"This is a searchable Gopher index.\n"
+msgstr ""
+"\n"
+"¤³¤ì¤Ï¸¡º÷²Äǽ¤Ê Gopher ¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ç¤¹¡£\n"
+
+#: LYMessages.c:771
+msgid "Gopher index"
+msgstr "Gopher ¥¤¥ó¥Ç¥Ã¥¯¥¹"
+
+#: LYMessages.c:772
+msgid "Gopher Menu"
+msgstr "Gopher ¥á¥Ë¥å¡¼"
+
+#: LYMessages.c:773
+msgid " Search Results"
+msgstr " ¸¡º÷·ë²Ì"
+
+#: LYMessages.c:774
+msgid "Sending CSO/PH request."
+msgstr "CSO/PH ¥ê¥¯¥¨¥¹¥È¤òÁ÷¿®Ãæ¡£"
+
+#: LYMessages.c:775
+msgid "Sending Gopher request."
+msgstr "Gopher ¥ê¥¯¥¨¥¹¥È¤òÁ÷¿®Ãæ¡£"
+
+#: LYMessages.c:776
+msgid "CSO/PH request sent; waiting for response."
+msgstr "CSO/PH ¥ê¥¯¥¨¥¹¥È¤òÁ÷¿®¤·¤Þ¤·¤¿¡£±þÅú¤òÂԤäƤ¤¤Þ¤¹¡£"
+
+#: LYMessages.c:777
+msgid "Gopher request sent; waiting for response."
+msgstr "Gopher ¥ê¥¯¥¨¥¹¥È¤òÁ÷¿®¤·¤Þ¤·¤¿¡£±þÅú¤òÂԤäƤ¤¤Þ¤¹¡£"
+
+#: LYMessages.c:778
+msgid ""
+"\n"
+"Please enter search keywords.\n"
+msgstr ""
+"\n"
+"¸¡º÷¤¹¤ë¥­¡¼¥ï¡¼¥É¤òÆþÎϤ·¤Æ²¼¤µ¤¤¡£\n"
+
+#: LYMessages.c:779
+msgid ""
+"\n"
+"The keywords that you enter will allow you to search on a"
+msgstr ""
+"\n"
+"ÆþÎϤ·¤¿¥­¡¼¥ï¡¼¥É¤Ë¤è¤ê¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹Æâ¤Î¸Ä¿Í»á̾¤ò"
+
+#: LYMessages.c:780
+msgid " person's name in the database.\n"
+msgstr "¸¡º÷¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£\n"
+
+#. HTNews.c
+#: LYMessages.c:783
+msgid "Connection closed ???"
+msgstr "Àܳ¤¬ÊĤ¸¤é¤ì¤¿¤Î¤«¤â ???"
+
+#: LYMessages.c:784
+msgid "Cannot open temporary file for news POST."
+msgstr "¥Ë¥å¡¼¥¹ POST ¤Î¤¿¤á¤Î°ì»þ¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:785
+msgid "This client does not contain support for posting to news with SSL."
+msgstr "¤³¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ç¤Ï¥Ë¥å¡¼¥¹¤ò SSL ·Ðͳ¤Ç¥Ý¥¹¥È¤¹¤ëµ¡Ç½¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#. HTStyle.c
+#: LYMessages.c:788
+#, c-format
+msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
+msgstr "¥¹¥¿¥¤¥ë %d `%s'¡¢SGML:%s¡£ ¥Õ¥©¥ó¥È %s %.1f ¥Ý¥¤¥ó¥È¡£\n"
+
+#: LYMessages.c:789
+#, c-format
+msgid "\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
+msgstr "\t¥¤¥ó¥Ç¥ó¥È: ºÇ½é=%.0f ¤½¤Î¾=%.0f¡¢¹â¤µ=%.1f Desc=%.1f\n"
+
+#: LYMessages.c:790
+#, c-format
+msgid "\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
+msgstr "\tÄ´À°=%d¡¢%d ¥¿¥Ö¡£(Á°¤Ë %.0f¡¢¸å¤Ë %.0f)\n"
+
+#: LYMessages.c:791
+#, c-format
+msgid "\t\tTab kind=%d at %.0f\n"
+msgstr "\t\t¥¿¥Ö ¼ïÎà=%d (%.0f ¤Ë¤ª¤±¤ë)\n"
+
+#. HTTP.c
+#: LYMessages.c:794
+msgid "Can't proceed without a username and password."
+msgstr "¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É̵¤·¤Ç¤Ï³¹Ô¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:795
+msgid "Can't retry with authorization! Contact the server's WebMaster."
+msgstr "ǧ¾ÚÉÕ¤­¤ÇºÆ»î¹Ô¤Ç¤­¤Þ¤»¤ó! ¥µ¡¼¥Ð¤Î¥¦¥§¥Ö¥Þ¥¹¥¿¤ËÏ¢Íí¤·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: LYMessages.c:796
+msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
+msgstr "¥×¥í¥­¥·Ç§¾ÚÉÕ¤­¤ÇºÆ»î¹Ô¤Ç¤­¤Þ¤»¤ó! ¥µ¡¼¥Ð¤Î¥¦¥§¥Ö¥Þ¥¹¥¿¤ËÏ¢Íí¤·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: LYMessages.c:797
+msgid "Retrying with proxy authorization information."
+msgstr "¥×¥í¥­¥·Ç§¾Ú¾ðÊóÉÕ¤­¤ÇºÆ»î¹Ô¤·¤Æ¤¤¤Þ¤¹¡£"
+
+#. HTWAIS.c
+#: LYMessages.c:800
+msgid "HTWAIS: Return message too large."
+msgstr "HTWAIS: ¥ê¥¿¡¼¥ó¥á¥Ã¥»¡¼¥¸¤¬Â礭¤¹¤®¤Þ¤¹¡£"
+
+#: LYMessages.c:801
+msgid "Enter WAIS query: "
+msgstr "WAIS ¸¡º÷ʸ»úÎó¤òÆþÎÏ: "
+
+#. Miscellaneous status
+#: LYMessages.c:804
+msgid "Retrying as HTTP0 request."
+msgstr "HTTP0 ¥ê¥¯¥¨¥¹¥È¤È¤·¤ÆºÆÁ÷¿®¤·¤Æ¤¤¤Þ¤¹¡£"
+
+#: LYMessages.c:805
+#, c-format
+msgid "Transferred %d bytes"
+msgstr "%d ¥Ð¥¤¥ÈžÁ÷ºÑ"
+
+#: LYMessages.c:806
+msgid "Data transfer complete"
+msgstr "¥Ç¡¼¥¿Å¾Á÷´°Î»"
+
+#: LYMessages.c:807
+#, c-format
+msgid "Error processing line %d of %s\n"
+msgstr "%d ¹ÔÌÜ(%s Ãæ)¤Î½èÍý¤Ç¥¨¥é¡¼\n"
+
+#. Lynx internal page titles
+#: LYMessages.c:810
+msgid "Address List Page"
+msgstr "¥¢¥É¥ì¥¹¥ê¥¹¥È¥Ú¡¼¥¸"
+
+#: LYMessages.c:811
+msgid "Bookmark file"
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë"
+
+#: LYMessages.c:812
+msgid "Configuration Definitions"
+msgstr "¥³¥ó¥Ñ¥¤¥ë»þ¤ËÄêµÁ¤µ¤ì¤¿ÀßÄê"
+
+#: LYMessages.c:813
+msgid "Cookie Jar"
+msgstr "¥¯¥Ã¥­¡¼È¢"
+
+#: LYMessages.c:814
+msgid "Current Key Map"
+msgstr "¸½ºß¤Î¥­¡¼¥Þ¥Ã¥×"
+
+#: LYMessages.c:815
+msgid "File Management Options"
+msgstr "¥Õ¥¡¥¤¥ë´ÉÍý¥ª¥×¥·¥ç¥ó"
+
+#: LYMessages.c:816
+msgid "Download Options"
+msgstr "¥À¥¦¥ó¥í¡¼¥ÉÀè¤òÁªÂò"
+
+#: LYMessages.c:817
+msgid "History Page"
+msgstr "ÍúÎò¥Ú¡¼¥¸"
+
+#: LYMessages.c:818
+msgid "List Page"
+msgstr "¥ê¥¹¥È¥Ú¡¼¥¸"
+
+#: LYMessages.c:819
+msgid "Lynx.cfg Information"
+msgstr "Lynx.cfg ¤Î¾ðÊó"
+
+#: LYMessages.c:820
+msgid "Converted Mosaic Hotlist"
+msgstr "ÊÑ´¹¤µ¤ì¤¿ Mosaic ¤Î Hotlist"
+
+#: LYMessages.c:821
+msgid "Options Menu"
+msgstr "ÀßÄê¥á¥Ë¥å¡¼"
+
+#: LYMessages.c:822
+msgid "File Permission Options"
+msgstr "¥Õ¥¡¥¤¥ë¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤ÎÀßÄê"
+
+#: LYMessages.c:823
+msgid "Printing Options"
+msgstr "°õºþ¤ÎÀßÄê"
+
+#: LYMessages.c:824
+msgid "Information about the current document"
+msgstr "¸½ºß¤Îʸ½ñ¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó"
+
+#: LYMessages.c:825
+msgid "Your recent statusline messages"
+msgstr "ºÇ¶á¤Î¥¹¥Æ¡¼¥¿¥¹¥é¥¤¥ó¥á¥Ã¥»¡¼¥¸"
+
+#: LYMessages.c:826
+msgid "Upload Options"
+msgstr "¥¢¥Ã¥×¥í¡¼¥É¤ÎÀßÄê"
+
+#: LYMessages.c:827
+msgid "Visited Links Page"
+msgstr "ˬ¤ì¤¿¥ê¥ó¥¯°ìÍ÷"
+
+#. CONFIG_DEF_TITLE subtitles
+#: LYMessages.c:830
+msgid "See also"
+msgstr "¤³¤Á¤é¤â»²¾È:"
+
+#: LYMessages.c:831
+msgid "your"
+msgstr "¤¢¤Ê¤¿¤Î"
+
+#: LYMessages.c:832
+msgid "for runtime options"
+msgstr "¥é¥ó¥¿¥¤¥à¥ª¥×¥·¥ç¥ó¸þ¤±"
+
+#: LYMessages.c:833
+msgid "compile time options"
+msgstr "¥³¥ó¥Ñ¥¤¥ë»þ¤Î¥ª¥×¥·¥ç¥ó"
+
+#: LYMessages.c:834
+msgid "latest release"
+msgstr "ºÇ¿·ÈÇ"
+
+#: LYMessages.c:835
+msgid "pre-release version"
+msgstr "¥×¥ì¥ê¥ê¡¼¥¹ÈÇ"
+
+#: LYMessages.c:836
+msgid "development version"
+msgstr "³«È¯ÈÇ"
+
+#. #define AUTOCONF_CONFIG_CACHE
+#: LYMessages.c:838
+msgid ""
+"The following data were derived during the automatic configuration/build\n"
+"process of this copy of Lynx. When reporting a bug, please include a copy\n"
+"of this page."
+msgstr ""
+"°Ê²¼¤Î¥Ç¡¼¥¿¤Ï¤³¤Î Lynx ¤Î¥³¥Ô¡¼¤¬¼«Æ°Åª¤ËÀßÄê/¹½ÃÛ¤µ¤ì¤ë²áÄø¤Ç\n"
+"ÆÀ¤é¤ì¤¿¤â¤Î¤Ç¤¹¡£¥Ð¥°¤òÊó¹ð¤¹¤ëºÝ¤Ë¤Ï¡¢¤³¤Î¥Ú¡¼¥¸¤Î¥³¥Ô¡¼¤ò\n"
+"´Þ¤á¤Æ¤¯¤À¤µ¤¤¡£"
+
+#. #define AUTOCONF_LYNXCFG_H
+#: LYMessages.c:842
+msgid ""
+"The following data were used as automatically-configured compile-time\n"
+"definitions when this copy of Lynx was built."
+msgstr ""
+"°Ê²¼¤Î¥Ç¡¼¥¿¤Ï¡¢¤³¤Î Lynx ¤Î¥³¥Ô¡¼¤¬¥Ó¥ë¥É¤µ¤ì¤¿ºÝ¤Ë¡¢¼«Æ°Åª¤ËÀßÄꤵ¤ì¤¿\n"
+"¥³¥ó¥Ñ¥¤¥ë»þÄêµÁ¤È¤·¤Æ»È¤ï¤ì¤¿¤â¤Î¤Ç¤¹¡£"
+
+#. #define DIRED_NOVICELINE
+#: LYMessages.c:847
+msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
+msgstr " [c]ºîÀ® [d]¥À¥¦¥ó¥í¡¼¥É [e]ÊÔ½¸ [f]¥Õ¥ë¥á¥Ë¥å¡¼ [m]Êѹ¹ [r]ºï½ü [t]¥¿¥° [u]¥¢¥Ã¥×¥í¡¼¥É \n"
+
+#: LYMessages.c:848
+msgid "Failed to obtain status of current link!"
+msgstr "¸½ºß¤Î¥ê¥ó¥¯¤Î¥¹¥Æ¡¼¥¿¥¹¤ÎÆþ¼ê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿!"
+
+#. #define INVALID_PERMIT_URL
+#: LYMessages.c:851
+msgid "Special URL only valid from current File Permission menu!"
+msgstr "ÆÃÊÌ URL ¤Ï¸½ºß¤Î¥Õ¥¡¥¤¥ëµö²Ä¥á¥Ë¥å¡¼¤«¤é¤Î¤ßÍ­¸ú¤Ç¤¹!"
+
+#: LYMessages.c:855
+msgid "External support is currently disabled."
+msgstr "³°Éô¥µ¥Ý¡¼¥È¤Ï¸½ºß̵¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£"
+
+#. new with 2.8.4dev.21
+#: LYMessages.c:859
+#, fuzzy
+msgid "Changing working-directory is currently disabled."
+msgstr "³°Éô¥³¥Þ¥ó¥Éµ¯Æ°¤Ï¸½ºß¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: LYMessages.c:860
+#, fuzzy
+msgid "Linewrap OFF!"
+msgstr "ÄÉÀ×½ªÎ»!"
+
+#: LYMessages.c:861
+msgid "Linewrap ON!"
+msgstr ""
+
+#: LYMessages.c:862
+#, fuzzy
+msgid "Parsing nested-tables toggled OFF! Reloading..."
+msgstr "À¸ 8 ¥Ó¥Ã¥È / CJK ¥â¡¼¥É ¥È¥°¥ë¥ª¥Õ! ºÆÆÉ¤ß¹þ¤ßÃæ..."
+
+#: LYMessages.c:863
+#, fuzzy
+msgid "Parsing nested-tables toggled ON! Reloading..."
+msgstr "À¸ 8 ¥Ó¥Ã¥È / CJK ¥â¡¼¥É ¥È¥°¥ë¥ª¥ó! ºÆÆÉ¤ß¹þ¤ßÃæ..."
+
+#: LYMessages.c:864
+msgid "Shifting is disabled while line-wrap is in effect"
+msgstr ""
+
+#: LYMessages.c:865
+#, fuzzy
+msgid "Trace not supported"
+msgstr "üËö¤¬¥«¥é¡¼É½¼¨¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTAABrow.c:648
+#, c-format
+msgid "Username for '%s' at %s '%s%s':"
+msgstr "'%s' ¤Î¤¿¤á¤Î %s '%s%s' ¤Ë¤ª¤±¤ë¥æ¡¼¥¶Ì¾:"
+
+#: WWW/Library/Implementation/HTAABrow.c:914
+msgid "This client doesn't know how to compose proxy authorization information for scheme"
+msgstr "¤³¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ï¤³¤Î¥¹¥­¡¼¥à¸þ¤±¤Ë¥×¥í¥­¥·Ç§¾Ú¾ðÊó¤ò¹½À®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+#: WWW/Library/Implementation/HTAABrow.c:989
+msgid "This client doesn't know how to compose authorization information for scheme"
+msgstr "¤³¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ï¤³¤Î¥¹¥­¡¼¥à¸þ¤±¤Ëǧ¾Ú¾ðÊó¤ò¹½À®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+#: WWW/Library/Implementation/HTAABrow.c:1097
+#, c-format
+msgid "Invalid header '%s%s%s%s%s'"
+msgstr "ÉÔÀµ¤Ê¥Ø¥Ã¥À '%s%s%s%s%s' ¤Ç¤¹"
+
+#: WWW/Library/Implementation/HTAABrow.c:1201
+msgid "Proxy authorization required -- retrying"
+msgstr "¥×¥í¥­¥·Ç§¾Ú¤¬É¬ÍפǤ¹ -- ºÆ»î¹Ô¤·¤Æ¤¤¤Þ¤¹"
+
+#: WWW/Library/Implementation/HTAABrow.c:1260
+msgid "Access without authorization denied -- retrying"
+msgstr "ǧ¾Ú̵¤·¤Î¥¢¥¯¥»¥¹¤ÏµñÈݤµ¤ì¤Þ¤·¤¿ -- ºÆ»î¹Ô¤·¤Æ¤¤¤Þ¤¹"
+
+#: WWW/Library/Implementation/HTAccess.c:683
+msgid "Access forbidden by rule"
+msgstr "µ¬Â§¤Ë¤è¤ê¥¢¥¯¥»¥¹¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£"
+
+#: WWW/Library/Implementation/HTAccess.c:785
+msgid "Document with POST content not found in cache. Resubmit?"
+msgstr "POST ¥³¥ó¥Æ¥ó¥Ä¤ò´Þ¤à¥É¥­¥å¥á¥ó¥È¤Ï¥­¥ã¥Ã¥·¥å¤ÎÃæ¤Ë¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£ºÆÁ÷¿®¤·¤Þ¤¹¤«?"
+
+#: WWW/Library/Implementation/HTAccess.c:1026 src/GridText.c:8039
+msgid "Loading incomplete."
+msgstr "ÆÉ¤ß¹þ¤ß¤¬ÃæÃǤµ¤ì¤Þ¤·¤¿¡£"
+
+#: WWW/Library/Implementation/HTAccess.c:1056
+msgid "**** HTAccess: socket or file number returned by obsolete load routine!\n"
+msgstr "*** HTAccess: ¥½¥±¥Ã¥È¤«¥Õ¥¡¥¤¥ë¤ÎÈֹ椬¡¢µì¼°¤ÎÆÉ¤ß¹þ¤ß¥ë¡¼¥Á¥ó¤«¤éÊÖ¤µ¤ì¤Æ¤¤¤Þ¤¹!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1058
+msgid "**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"
+msgstr "**** HTAccess: ¥½¥Õ¥È¥¦¥§¥¢ÆâÉô¤Î¥¨¥é¡¼¤Ç¤¹¡£lynx-dev@sig.net ¤Ë¥á¡¼¥ë¤ÇÊó¹ð¤·¤Æ¤¯¤À¤µ¤¤!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1059
+#, c-format
+msgid "**** HTAccess: Status returned was: %d\n"
+msgstr "**** HTAccess: Ê֤äƤ­¤¿¥¹¥Æ¡¼¥¿¥¹¤Ï: %d\n"
+
+#.
+#. * hack: if we fail in HTAccess.c
+#. * avoid duplicating URL, oh.
+#.
+#: WWW/Library/Implementation/HTAccess.c:1065 src/LYMainLoop.c:7834
+msgid "Can't Access"
+msgstr "¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTAccess.c:1073
+msgid "Unable to access document."
+msgstr "ʸ½ñ¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTFTP.c:756
+#, c-format
+msgid "Enter password for user %s@%s:"
+msgstr "¥æ¡¼¥¶ %s@%s ¤Î¥Ñ¥¹¥ï¡¼¥É¤òÆþÎÏ:"
+
+#: WWW/Library/Implementation/HTFTP.c:784
+msgid "Unable to connect to FTP host."
+msgstr "FTP ¥Û¥¹¥È¤ËÀܳ¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTFTP.c:1054
+msgid "close master socket"
+msgstr "¥Þ¥¹¥¿¡¼¥½¥±¥Ã¥È¤¬ÊĤ¸¤Þ¤¹"
+
+#: WWW/Library/Implementation/HTFTP.c:1116
+msgid "socket for master socket"
+msgstr "¥Þ¥¹¥¿¡¼¥½¥±¥Ã¥ÈÍÑ¥½¥±¥Ã¥È"
+
+#.
+#. ** It's a symbolic link, does the user care about
+#. ** knowing if it is symbolic? I think so since
+#. ** it might be a directory.
+#.
+#: WWW/Library/Implementation/HTFTP.c:1630 WWW/Library/Implementation/HTFTP.c:2251
+msgid "Symbolic Link"
+msgstr "¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯"
+
+#: WWW/Library/Implementation/HTFTP.c:2612
+msgid "Receiving FTP directory."
+msgstr "FTP ¥Ç¥£¥ì¥¯¥È¥ê¤ò¼õ¿®Ãæ"
+
+#: WWW/Library/Implementation/HTFTP.c:2755
+#, c-format
+msgid "Transferred %d bytes (%5d)"
+msgstr "%d ¥Ð¥¤¥ÈžÁ÷ºÑ (%5d)"
+
+#: WWW/Library/Implementation/HTFTP.c:3090
+msgid "connect for data"
+msgstr "¥Ç¡¼¥¿¤ËÀܳ"
+
+#: WWW/Library/Implementation/HTFTP.c:3690
+msgid "Receiving FTP file."
+msgstr "FTP ¥Õ¥¡¥¤¥ë¤ò¼õ¿®Ãæ"
+
+#: WWW/Library/Implementation/HTFinger.c:275
+msgid "Could not set up finger connection."
+msgstr "finger Àܳ¤òÍѰդǤ­¤Þ¤»¤ó¤Ç¤·¤¿¡£"
+
+#: WWW/Library/Implementation/HTFinger.c:320
+msgid "Could not load data (no sitename in finger URL)"
+msgstr "¥Ç¡¼¥¿¤¬ÆÉ¤ß¹þ¤á¤Þ¤»¤ó¤Ç¤·¤¿(finger URL ¤Ë¥µ¥¤¥È̾¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó)"
+
+#: WWW/Library/Implementation/HTFinger.c:328
+msgid "Invalid port number - will only use port 79!"
+msgstr "ÉÔÀµ¤Ê¥Ý¡¼¥ÈÈÖ¹æ¤Ç¤¹ - ¥Ý¡¼¥È 79 ¤Î¤ß¤ò»È¤¤¤Þ¤¹!"
+
+#: WWW/Library/Implementation/HTFinger.c:396
+msgid "Could not access finger host."
+msgstr "finger ¥Û¥¹¥È¤ËÀܳ¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTFinger.c:407
+msgid "No response from finger server."
+msgstr "finger ¥µ¡¼¥Ð¤¬±þÅú¤·¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTNews.c:372
+#, c-format
+msgid "Username for news host '%s':"
+msgstr "¥Ë¥å¡¼¥¹¥Û¥¹¥È '%s' ¤Ç¤Î¥æ¡¼¥¶Ì¾:"
+
+#: WWW/Library/Implementation/HTNews.c:425
+msgid "Change username?"
+msgstr "¥æ¡¼¥¶Ì¾¤òÊѹ¹¤·¤Þ¤¹¤«?"
+
+#: WWW/Library/Implementation/HTNews.c:429
+msgid "Username:"
+msgstr "¥æ¡¼¥¶Ì¾:"
+
+#: WWW/Library/Implementation/HTNews.c:453
+#, c-format
+msgid "Password for news host '%s':"
+msgstr "¥Ë¥å¡¼¥¹¥Û¥¹¥È '%s' ¤Î¥Ñ¥¹¥ï¡¼¥É:"
+
+#: WWW/Library/Implementation/HTNews.c:536
+msgid "Change password?"
+msgstr "¥Ñ¥¹¥ï¡¼¥É¤òÊѹ¹¤·¤Þ¤¹¤«?"
+
+#: WWW/Library/Implementation/HTNews.c:1691
+#, c-format
+msgid "No matches for: %s"
+msgstr "³ºÅö¤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+
+#: WWW/Library/Implementation/HTNews.c:1744
+msgid ""
+"\n"
+"No articles in this group.\n"
+msgstr ""
+"\n"
+"¤³¤Î¥°¥ë¡¼¥×Æâ¤Ë¤Ïµ­»ö¤¬¤¢¤ê¤Þ¤»¤ó¡£\n"
+
+#: WWW/Library/Implementation/HTNews.c:1757
+msgid ""
+"\n"
+"No articles in this range.\n"
+msgstr ""
+"\n"
+"¤³¤ÎÈϰϤˤϵ­»ö¤¬¤¢¤ê¤Þ¤»¤ó¡£\n"
+
+#.
+#. ** Set window title.
+#.
+#: WWW/Library/Implementation/HTNews.c:1770
+#, c-format
+msgid "%s, Articles %d-%d"
+msgstr "%s¡¢µ­»ö %d-%d"
+
+#: WWW/Library/Implementation/HTNews.c:1792
+msgid "Earlier articles"
+msgstr "°ÊÁ°¤Îµ­»ö"
+
+#: WWW/Library/Implementation/HTNews.c:1805
+#, c-format
+msgid ""
+"\n"
+"There are about %d articles currently available in %s, IDs as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"¸½ºß %d Ä̤ۤɤε­»ö¤ò %s ¤ÇÆÉ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ID ¤Ï°Ê²¼¤ÎÄ̤ê:\n"
+"\n"
+
+#: WWW/Library/Implementation/HTNews.c:1865
+msgid "All available articles in "
+msgstr "°Ê²¼¤ÇÆÉ¤á¤ëÁ´µ­»ö: "
+
+#: WWW/Library/Implementation/HTNews.c:2081
+msgid "Later articles"
+msgstr "¤½¤Î¸å¤Îµ­»ö"
+
+#: WWW/Library/Implementation/HTNews.c:2105
+msgid "Post to "
+msgstr "°Ê²¼¤Ø¥Ý¥¹¥È: "
+
+#: WWW/Library/Implementation/HTNews.c:2323
+msgid "This client does not contain support for SNEWS URLs."
+msgstr "¤³¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ë¤Ï SNEWS URL ¤Î¥µ¥Ý¡¼¥È¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTNews.c:2531
+msgid "No target for raw text!"
+msgstr "À¸¥Æ¥­¥¹¥È¸þ¤±¤Î¥¿¡¼¥²¥Ã¥È¤¬¤¢¤ê¤Þ¤»¤ó!"
+
+#: WWW/Library/Implementation/HTNews.c:2561
+msgid "Connecting to NewsHost ..."
+msgstr "¥Ë¥å¡¼¥¹¥Û¥¹¥È¤ËÀÜÂ³Ãæ ..."
+
+#: WWW/Library/Implementation/HTNews.c:2612
+#, c-format
+msgid "Could not access %s."
+msgstr "%s ¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTNews.c:2712
+#, c-format
+msgid "Can't read news info. News host %.20s responded: %.200s"
+msgstr "¥Ë¥å¡¼¥¹¾ðÊ󤬯ɤá¤Þ¤»¤ó¡£¥Ë¥å¡¼¥¹¥Û¥¹¥È %.20s ¤Î±þÅú: %.200s"
+
+#: WWW/Library/Implementation/HTNews.c:2716
+#, c-format
+msgid "Can't read news info, empty response from host %s"
+msgstr "¥Ë¥å¡¼¥¹¾ðÊ󤬯ɤá¤Þ¤»¤ó¡£¥Û¥¹¥È %s ¤«¤é¤Î±þÅú¤Ï¶õ¤Ç¤¹"
+
+#.
+#. ** List available newsgroups. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2920
+msgid "Reading list of available newsgroups."
+msgstr "ÍøÍѲÄǽ¤Ê¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¥ê¥¹¥È¤òÆÉ¤ß¹þ¤ßÃæ¡£"
+
+#: WWW/Library/Implementation/HTNews.c:2942
+msgid "Reading list of articles in newsgroup."
+msgstr "¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×Æâ¤Îµ­»ö¤Î¥ê¥¹¥È¤òÆÉ¤ß¹þ¤ßÃæ¡£"
+
+#.
+#. ** Get an article from a news group. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2948
+msgid "Reading news article."
+msgstr "¥Ë¥å¡¼¥¹µ­»ö¤òÆÉ¤ß¹þ¤ßÃæ¡£"
+
+#: WWW/Library/Implementation/HTNews.c:2978
+msgid "Sorry, could not load requested news."
+msgstr "¤¦¤¦¤à¡¢Í׵ᤵ¤ì¤¿¥Ë¥å¡¼¥¹¤òÆÉ¤ß¹þ¤á¤Þ¤»¤ó¤Ç¤·¤¿¡£"
+
+#: WWW/Library/Implementation/HTTCP.c:1233
+msgid "Address has invalid port"
+msgstr "¥¢¥É¥ì¥¹¤ËÉÔÀµ¤Ê¥Ý¡¼¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹"
+
+#: WWW/Library/Implementation/HTTCP.c:1336
+msgid "Address length looks invalid"
+msgstr "¥¢¥É¥ì¥¹Ä¹¤¬ÉÔÀµ¤Î¤è¤¦¤Ç¤¹"
+
+#: WWW/Library/Implementation/HTTCP.c:1574 WWW/Library/Implementation/HTTCP.c:1592
+#, c-format
+msgid "Unable to locate remote host %s."
+msgstr "¥ê¥â¡¼¥È¥Û¥¹¥È %s ¤Î°ÌÃÖ¤òÆÃÄê¤Ç¤­¤Þ¤»¤ó¡£"
+
+#. Not HTProgress, so warning won't be overwritten
+#. * immediately; but not HTAlert, because typically
+#. * there will be other alerts from the callers. - kw
+#.
+#: WWW/Library/Implementation/HTTCP.c:1589 WWW/Library/Implementation/HTTelnet.c:103
+#, c-format
+msgid "Invalid hostname %s"
+msgstr "%s ¤ÏÉÔÀµ¤Ê¥Û¥¹¥È̾¤Ç¤¹"
+
+#: WWW/Library/Implementation/HTTCP.c:1603
+#, c-format
+msgid "Making %s connection to %s"
+msgstr "%s ¤Ç %s ¤ËÀÜÂ³Ãæ"
+
+#: WWW/Library/Implementation/HTTCP.c:1619
+#, c-format
+msgid "socket failed: family %d addr %s port %s."
+msgstr "¥½¥±¥Ã¥È¤¬¼ºÇÔ¤·¤Þ¤·¤¿: ¥Õ¥¡¥ß¥ê %d ¥¢¥É¥ì¥¹ %s ¥Ý¡¼¥È %s¡£"
+
+#: WWW/Library/Implementation/HTTCP.c:1628
+msgid "socket failed."
+msgstr "¥½¥±¥Ã¥È¤¬¼ºÇÔ¤·¤Þ¤·¤¿¡£"
+
+#: WWW/Library/Implementation/HTTCP.c:1648
+msgid "Could not make connection non-blocking."
+msgstr "Àܳ¤òÈó¥Ö¥í¥Ã¥­¥ó¥°¤Ë¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£"
+
+#: WWW/Library/Implementation/HTTCP.c:1717
+msgid "Connection failed (too many retries)."
+msgstr "Àܳ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿ (ºÆ»î¹Ô¤¬Â¿¤¹¤®¤Þ¤¹)"
+
+#: WWW/Library/Implementation/HTTCP.c:1910
+msgid "Could not restore socket to blocking."
+msgstr "¥Ö¥í¥Ã¥­¥ó¥°¤Î¤¿¤á¤Î¥½¥±¥Ã¥È¤òÉüµì¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡£"
+
+#: WWW/Library/Implementation/HTTCP.c:1976
+msgid "Socket read failed for 180,000 tries."
+msgstr "180,000 ²ó»î¹Ô¤·¤Þ¤·¤¿¤¬¥½¥±¥Ã¥È¤ÎÆÉ¤ß¹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£"
+
+#: WWW/Library/Implementation/HTTP.c:466
+msgid "This client does not contain support for HTTPS URLs."
+msgstr "¤³¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ï HTTPS URL ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTTP.c:491
+msgid "Unable to connect to remote host."
+msgstr "¥ê¥â¡¼¥È¥Û¥¹¥È¤ËÀܳ¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTTP.c:1005
+msgid "Sending HTTP request."
+msgstr "HTTP ¥ê¥¯¥¨¥¹¥È¤òÁ÷¿®Ãæ"
+
+#: WWW/Library/Implementation/HTTP.c:1039
+msgid "Unexpected network write error; connection aborted."
+msgstr "ÆÍÁ³¤Î¥Í¥Ã¥È¥ï¡¼¥¯½ñ¤­¹þ¤ß¥¨¥é¡¼: Àܳ¤¬ÃæÃǤµ¤ì¤Þ¤·¤¿¡£"
+
+#: WWW/Library/Implementation/HTTP.c:1045
+msgid "HTTP request sent; waiting for response."
+msgstr "HTTP ¥ê¥¯¥¨¥¹¥È¤òÁ÷¿®¤·¤Þ¤·¤¿: ±þÅú¤òÂԤäƤ¤¤Þ¤¹"
+
+#: WWW/Library/Implementation/HTTP.c:1109
+msgid "Unexpected network read error; connection aborted."
+msgstr "ÆÍÁ³¤Î¥Í¥Ã¥È¥ï¡¼¥¯ÆÉ¤ß¹þ¤ß¥¨¥é¡¼: Àܳ¤¬ÃæÃǤµ¤ì¤Þ¤·¤¿¡£"
+
+#.
+#. ** HTTP/1.1 Informational statuses.
+#. ** 100 Continue.
+#. ** 101 Switching Protocols.
+#. ** > 101 is unknown.
+#. ** We should never get these, and they have only
+#. ** the status line and possibly other headers,
+#. ** so we'll deal with them by showing the full
+#. ** header to the user as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1305
+msgid "Got unexpected Informational Status."
+msgstr "ͽ´ü¤·¤Ê¤¤ Informational Status ¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿¡£"
+
+#.
+#. * Reset Content. The server has fulfilled the
+#. * request but nothing is returned and we should
+#. * reset any form content. We'll instruct the
+#. * user to do that, and restore the current
+#. * document. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1340
+msgid "Request fulfilled. Reset Content."
+msgstr "¥ê¥¯¥¨¥¹¥È¤¬¼Â¹Ô¤µ¤ì¤Þ¤·¤¿¡£¥³¥ó¥Æ¥ó¥È¤ò¥ê¥»¥Ã¥È¤·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#. Not Modified
+#.
+#. * We didn't send an "If-Modified-Since" header,
+#. * so this status is inappropriate. We'll deal
+#. * with it by showing the full header to the user
+#. * as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1459
+msgid "Got unexpected 304 Not Modified status."
+msgstr "ͽ´ü¤»¤Ì 304 Not Modified ¥¹¥Æ¡¼¥¿¥¹¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿¡£"
+
+#: WWW/Library/Implementation/HTTP.c:1526
+msgid "Redirection of POST content requires user approval."
+msgstr "POST ¥³¥ó¥Æ¥ó¥È¤Î¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¤Ë¤Ï¥æ¡¼¥¶¤Î¾µÇ§¤¬É¬ÍפǤ¹¡£"
+
+#: WWW/Library/Implementation/HTTP.c:1541
+msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
+msgstr "POST ¥³¥ó¥Æ¥ó¥È¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¡£±Ê³Ū¤Ê¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó¤ò°ì»þŪ¤Ê¤â¤Î¤È¤·¤Æ°·¤¤¤Þ¤¹¡£\n"
+
+#: WWW/Library/Implementation/HTTP.c:1586
+msgid "Retrying with access authorization information."
+msgstr "¥¢¥¯¥»¥¹Ç§¾Ú¾ðÊóÉÕ¤­¤ÇºÆ»î¹Ô¤·¤Æ¤¤¤Þ¤¹¡£"
+
+#: WWW/Library/Implementation/HTTP.c:1598
+msgid "Show the 401 message body?"
+msgstr "401 ¥á¥Ã¥»¡¼¥¸ËÜÂΤò¸«¤Þ¤¹¤«?"
+
+#: WWW/Library/Implementation/HTTP.c:1643
+msgid "Show the 407 message body?"
+msgstr "407 ¥á¥Ã¥»¡¼¥¸ËÜÂΤò¸«¤Þ¤¹¤«?"
+
+#.
+#. ** Bad or unknown server_status number.
+#. ** Take a chance and hope there is
+#. ** something to display. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1748
+msgid "Unknown status reply from server!"
+msgstr "¥µ¡¼¥Ð¤«¤é¤ÎÉÔÌÀ¤Ê¥¹¥Æ¡¼¥¿¥¹¥ê¥×¥é¥¤¤Ç¤¹!"
+
+#: WWW/Library/Implementation/HTTelnet.c:101
+#, c-format
+msgid "remote %s session:"
+msgstr "¥ê¥â¡¼¥È %s ¥»¥Ã¥·¥ç¥ó:"
+
+#: WWW/Library/Implementation/HTWAIS.c:161
+msgid "Could not connect to WAIS server."
+msgstr "WAIS ¥µ¡¼¥Ð¤ËÀܳ¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTWAIS.c:170
+msgid "Could not open WAIS connection for reading."
+msgstr "ÆÉ¤ß¹þ¤ß¤Î¤¿¤á¤Î WAIS Àܳ¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿¡£"
+
+#: WWW/Library/Implementation/HTWAIS.c:194
+msgid "Diagnostic code is "
+msgstr "¿ÇÃÇ¥³¡¼¥É¤Ï "
+
+#: WWW/Library/Implementation/HTWAIS.c:463
+msgid "Index "
+msgstr "¥¤¥ó¥Ç¥Ã¥¯¥¹ "
+
+#: WWW/Library/Implementation/HTWAIS.c:467
+#, c-format
+msgid " contains the following %d item%s relevant to \""
+msgstr " ¤Ï°Ê²¼¤Î %d ¥¢¥¤¥Æ¥à%s¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¡£¤³¤ì¤¬´ØÏ¢¤¹¤ë¤Î¤Ï\""
+
+#: WWW/Library/Implementation/HTWAIS.c:475
+msgid "The first figure after each entry is its relative score, "
+msgstr "³Æ¥¨¥ó¥È¥ê¤Î¸å¤ÎºÇ½é¤Î¿ô»ú¤Ï¤½¤ÎÁêÂÐ¥¹¥³¥¢¤Ç¤¢¤ë "
+
+#: WWW/Library/Implementation/HTWAIS.c:476
+msgid "the second is the number of lines in the item."
+msgstr "ÂèÆó¤Î¿ô»ú¤Ï¥¢¥¤¥Æ¥àÆâ¤Ë¤ª¤±¤ë¹ÔÈÖ¹æ¤Ç¤¹¡£"
+
+#: WWW/Library/Implementation/HTWAIS.c:517
+msgid " (bad file name)"
+msgstr " (ÉÔÀµ¤Ê¥Õ¥¡¥¤¥ë̾)"
+
+#: WWW/Library/Implementation/HTWAIS.c:542
+msgid "(bad doc id)"
+msgstr "(ÉÔÀµ¤Ê¥É¥­¥å¥á¥ó¥È ID)"
+
+#: WWW/Library/Implementation/HTWAIS.c:558
+msgid "(Short Header record, can't display)"
+msgstr "(û¤¤¥Ø¥Ã¥À¥ì¥³¡¼¥É¡¢É½¼¨ÉÔǽ)"
+
+#: WWW/Library/Implementation/HTWAIS.c:565
+msgid ""
+"\n"
+"Long Header record, can't display\n"
+msgstr ""
+"\n"
+"Ť¤¥Ø¥Ã¥À¥ì¥³¡¼¥É¡¢É½¼¨ÉÔǽ\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:572
+msgid ""
+"\n"
+"Text record\n"
+msgstr ""
+"\n"
+"¥Æ¥­¥¹¥È¥ì¥³¡¼¥É\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:581
+msgid ""
+"\n"
+"Headline record, can't display\n"
+msgstr ""
+"\n"
+"¥Ø¥Ã¥É¥é¥¤¥ó¥ì¥³¡¼¥É¡¢É½¼¨ÉÔǽ\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:589
+msgid ""
+"\n"
+"Code record, can't display\n"
+msgstr ""
+"\n"
+"¥³¡¼¥É¥ì¥³¡¼¥É¡¢É½¼¨ÉÔǽ\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:691
+msgid "Syntax error in WAIS URL"
+msgstr "WAIS URL ¤Î¹½Ê¸¥¨¥é¡¼¤Ç¤¹¡£"
+
+#: WWW/Library/Implementation/HTWAIS.c:761
+msgid " (WAIS Index)"
+msgstr "(WAIS ¥¤¥ó¥Ç¥Ã¥¯¥¹)"
+
+#: WWW/Library/Implementation/HTWAIS.c:768
+msgid "WAIS Index: "
+msgstr "WAIS ¥¤¥ó¥Ç¥Ã¥¯¥¹: "
+
+#: WWW/Library/Implementation/HTWAIS.c:774
+msgid "This is a link for searching the "
+msgstr "¤³¤ì¤Ï°Ê²¼¤ò¸¡º÷¤¹¤ë¤¿¤á¤Î¥ê¥ó¥¯¤Ç¤¹: "
+
+#: WWW/Library/Implementation/HTWAIS.c:778
+msgid " WAIS Index.\n"
+msgstr " WAIS ¥¤¥ó¥Ç¥Ã¥¯¥¹¡£\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:805
+msgid ""
+"\n"
+"Enter the 's'earch command and then specify search words.\n"
+msgstr ""
+"\n"
+"¸¡º÷¥³¥Þ¥ó¥É 's' ¤òÆþÎϤ·¡¢¸¡º÷¤¹¤ë¸ÀÍÕ¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:827
+msgid " (in "
+msgstr " (´Þ¤Þ¤ì¤Æ¤¤¤ë¤Î¤Ï "
+
+#: WWW/Library/Implementation/HTWAIS.c:836
+msgid "WAIS Search of \""
+msgstr "WAIS ¥µ¡¼¥Á ÂоÝ: \""
+
+#: WWW/Library/Implementation/HTWAIS.c:840
+msgid "\" in: "
+msgstr "\" ´Þ¤Þ¤ì¤ë¤Î¤Ï: "
+
+#: WWW/Library/Implementation/HTWAIS.c:855
+msgid "HTWAIS: Request too large."
+msgstr "HTWAIS: ¥ê¥¯¥¨¥¹¥È¤¬Â礭¤¹¤®¤Þ¤¹¡£"
+
+#: WWW/Library/Implementation/HTWAIS.c:864
+msgid "Searching WAIS database..."
+msgstr "WAIS ¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò¸¡º÷¤·¤Æ¤¤¤Þ¤¹..."
+
+#: WWW/Library/Implementation/HTWAIS.c:874
+msgid "Search interrupted."
+msgstr "¸¡º÷¤¬ÃæÃǤµ¤ì¤Þ¤·¤¿¡£"
+
+#: WWW/Library/Implementation/HTWAIS.c:924
+msgid "Can't convert format of WAIS document"
+msgstr "WAIS ¥É¥­¥å¥á¥ó¥È¤Î·Á¼°¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: WWW/Library/Implementation/HTWAIS.c:968
+msgid "HTWAIS: Request too long."
+msgstr "HTWAIS: ¥ê¥¯¥¨¥¹¥È¤¬Ä¹¤¹¤®¤Þ¤¹¡£"
+
+#.
+#. ** Actually do the transaction given by request_message.
+#.
+#: WWW/Library/Implementation/HTWAIS.c:982
+msgid "Fetching WAIS document..."
+msgstr "WAIS ¥É¥­¥å¥á¥ó¥È¤ò¼èÆÀÃæ..."
+
+#. display_search_response(target, retrieval_response,
+#. wais_database, keywords);
+#: WWW/Library/Implementation/HTWAIS.c:1021
+msgid "No text was returned!\n"
+msgstr "Ê֤äƤ­¤¿¥Æ¥­¥¹¥È¤Ï¤¢¤ê¤Þ¤»¤ó!\n"
+
+#: WWW/Library/Implementation/HTWSRC.c:287
+msgid " NOT GIVEN in source file; "
+msgstr " °Ê²¼¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤Ç»ØÄꤵ¤ì¤Æ*¤¤¤Þ¤»¤ó*: "
+
+#: WWW/Library/Implementation/HTWSRC.c:311
+msgid " WAIS source file"
+msgstr " WAIS ¥½¡¼¥¹¥Õ¥¡¥¤¥ë"
+
+#: WWW/Library/Implementation/HTWSRC.c:318
+msgid " description"
+msgstr " ÀâÌÀ"
+
+#: WWW/Library/Implementation/HTWSRC.c:328
+msgid "Access links"
+msgstr "¥ê¥ó¥¯¤Ë¥¢¥¯¥»¥¹"
+
+#: WWW/Library/Implementation/HTWSRC.c:345
+msgid "Direct access"
+msgstr "ľÀÜ¥¢¥¯¥»¥¹"
+
+#. * Proxy will be used if defined, so let user know that - FM *
+#: WWW/Library/Implementation/HTWSRC.c:348
+msgid " (or via proxy server, if defined)"
+msgstr "(¤¢¤ë¤¤¤Ï¥×¥í¥­¥·¥µ¡¼¥Ð·Ðͳ¤Ç¡¢¤â¤·ÄêµÁ¤µ¤ì¤Æ¤¤¤ì¤Ð)"
+
+#: WWW/Library/Implementation/HTWSRC.c:363
+msgid "Maintainer"
+msgstr "¥á¥ó¥Æ¥Ê"
+
+#: WWW/Library/Implementation/HTWSRC.c:371
+msgid "Host"
+msgstr "¥Û¥¹¥È"
+
+#: src/GridText.c:607
+msgid "Memory exhausted, display interrupted!"
+msgstr "¥á¥â¥ê¤ò»È¤¤¤­¤ê¤Þ¤·¤¿¡£É½¼¨¤òÃæÃǤ·¤Þ¤¹!"
+
+#: src/GridText.c:612
+msgid "Memory exhausted, will interrupt transfer!"
+msgstr "¥á¥â¥ê¤ò»È¤¤¤­¤ê¤Þ¤·¤¿¡£Å¾Á÷¤òÃæÃǤ·¤Þ¤¹!"
+
+#: src/GridText.c:3395
+msgid " *** MEMORY EXHAUSTED ***"
+msgstr "*** ¥á¥â¥ê¤ò»È¤¤¤­¤ê¤Þ¤·¤¿ ***"
+
+#: src/GridText.c:5733 src/GridText.c:5740 src/LYList.c:258
+msgid "unknown field or link"
+msgstr "̤ÃΤΥե£¡¼¥ë¥É¤Þ¤¿¤Ï¥ê¥ó¥¯¤Ç¤¹"
+
+#: src/GridText.c:5749
+msgid "text entry field"
+msgstr "¥Æ¥­¥¹¥ÈÆþÎÏ¥Õ¥£¡¼¥ë¥É"
+
+#: src/GridText.c:5752
+msgid "password entry field"
+msgstr "¥Ñ¥¹¥ï¡¼¥ÉÆþÎÏ¥Õ¥£¡¼¥ë¥É"
+
+#: src/GridText.c:5755
+msgid "checkbox"
+msgstr "¥Á¥§¥Ã¥¯¥Ü¥Ã¥¯¥¹"
+
+#: src/GridText.c:5758
+msgid "radio button"
+msgstr "¥é¥¸¥ª¥Ü¥¿¥ó"
+
+#: src/GridText.c:5761
+msgid "submit button"
+msgstr "Á÷¿®¥Ü¥¿¥ó"
+
+#: src/GridText.c:5764
+msgid "reset button"
+msgstr "¥ê¥»¥Ã¥È¥Ü¥¿¥ó"
+
+#: src/GridText.c:5767
+msgid "popup menu"
+msgstr "¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼"
+
+#: src/GridText.c:5770
+msgid "hidden form field"
+msgstr "±£¤µ¤ì¤¿¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É"
+
+#: src/GridText.c:5773
+msgid "text entry area"
+msgstr "¥Æ¥­¥¹¥ÈÆþÎÏ¥¨¥ê¥¢"
+
+#: src/GridText.c:5776
+msgid "range entry field"
+msgstr "ÈÏ°ÏÆþÎÏ¥Õ¥£¡¼¥ë¥É"
+
+#: src/GridText.c:5779
+msgid "file entry field"
+msgstr "¥Õ¥¡¥¤¥ëÆþÎÏ¥Õ¥£¡¼¥ë¥É"
+
+#: src/GridText.c:5782
+msgid "text-submit field"
+msgstr "¥Æ¥­¥¹¥ÈÁ÷¿®¥Õ¥£¡¼¥ë¥É"
+
+#: src/GridText.c:5785
+msgid "image-submit button"
+msgstr "²èÁüÁ÷¿®¥Ü¥¿¥ó"
+
+#: src/GridText.c:5788
+msgid "keygen field"
+msgstr "keygen ¥Õ¥£¡¼¥ë¥É"
+
+#: src/GridText.c:5791
+msgid "unknown form field"
+msgstr "̤ÃΤΥե©¡¼¥à¥Õ¥£¡¼¥ë¥É"
+
+#. We can't open the file, what do we do?
+#: src/GridText.c:10348
+#, fuzzy
+msgid "Can't open file for uploading"
+msgstr "ÆÉ¤ß¹þ¤à¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£"
+
+#. We got an error reading the file, what do we do?
+#: src/GridText.c:10359
+msgid "Short read from file, problem?"
+msgstr ""
+
+#: src/GridText.c:10721
+#, c-format
+msgid "Submitting %s"
+msgstr "%s ¤òÁ÷¿®Ãæ"
+
+#. ugliness has happened; inform user and do the best we can
+#: src/GridText.c:11887
+msgid "Hang Detect: TextAnchor struct corrupted - suggest aborting!"
+msgstr ""
+
+#. don't show previous state
+#: src/GridText.c:12092
+msgid "Wrap lines to fit displayed area?"
+msgstr "ɽ¼¨Îΰè¤Ë¼ý¤Þ¤ë¤è¤¦¹Ô¤òÀÞ¤êÊÖ¤·¤Þ¤¹¤«?"
+
+#: src/GridText.c:12144
+msgid "Very long lines have been wrapped!"
+msgstr "Ť¹¤®¤ë¹Ô¤ÏÀÞ¤êÊÖ¤µ¤ì¤Þ¤¹!"
+
+#: src/GridText.c:12591
+msgid "Very long lines have been truncated!"
+msgstr "Ť¹¤®¤ë¹Ô¤ÏÀÚ¤êµÍ¤á¤é¤ì¤Þ¤¹!"
+
+#: src/HTAlert.c:155 src/LYShowInfo.c:318
+msgid "bytes"
+msgstr "¥Ð¥¤¥È"
+
+#: src/HTAlert.c:156
+msgid "KB"
+msgstr "KB"
+
+#: src/HTAlert.c:255
+#, c-format
+msgid "Read %s of %s of data"
+msgstr "%s (%s Ãæ) ÆÉ¤ß¹þ¤ßºÑ"
+
+#: src/HTAlert.c:257
+#, c-format
+msgid "Read %s of data"
+msgstr "%s ÆÉ¤ß¹þ¤ßºÑ"
+
+#: src/HTAlert.c:262
+#, c-format
+msgid ", %s/sec"
+msgstr "¡¢%s/ÉÃ"
+
+#: src/HTAlert.c:269
+#, c-format
+msgid " (stalled for %ld sec)"
+msgstr " (%ld ÉÃÄä»ßÃæ)"
+
+#: src/HTAlert.c:271
+#, c-format
+msgid ", ETA %ld sec"
+msgstr "¡¢ ETA %ld ÉÃ"
+
+#: src/HTAlert.c:277
+msgid " (Press 'z' to abort)"
+msgstr " ([z] ¤ÇÃæ»ß)"
+
+#. Meta-note: don't move the following note from its place right
+#. in front of the first gettext(). As it is now, it should
+#. automatically appear in generated lynx.pot files. - kw
+#.
+#. NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+#. * will take the first byte of the translation as a positive response
+#. * to Yes/No questions. If you provide a translation for "no", lynx
+#. * will take the first byte of the translation as a negative response
+#. * to Yes/No questions. For both, lynx will also try to show the
+#. * first byte in the prompt as a character, instead of (y) or (n),
+#. * respectively. This will not work right for multibyte charsets!
+#. * Don't translate "yes" and "no" for CJK character sets (or translate
+#. * them to "yes" and "no"). For a translation using UTF-8, don't
+#. * translate if the translation would begin with anything but a 7-bit
+#. * (US_ASCII) character. That also means do not translate if the
+#. * translation would begin with anything but a 7-bit character, if
+#. * you use a single-byte character encoding (a charset like ISO-8859-n)
+#. * but anticipate that the message catalog may be used re-encoded in
+#. * UTF-8 form.
+#. * For translations using other character sets, you may also wish to
+#. * leave "yes" and "no" untranslated, if using (y) and (n) is the
+#. * preferred behavior.
+#. * Lynx will also accept y Y n N as responses unless there is a conflict
+#. * with the first letter of the "yes" or "no" translation.
+#.
+#: src/HTAlert.c:334
+msgid "yes"
+msgstr "yes"
+
+#: src/HTAlert.c:335
+msgid "no"
+msgstr "no"
+
+#: src/HTML.c:6342
+msgid "Description:"
+msgstr "ÀâÌÀ:"
+
+#: src/HTML.c:6347
+msgid "(none)"
+msgstr "(¤Ê¤·)"
+
+#: src/HTML.c:6351
+msgid "Filepath:"
+msgstr "¥Õ¥¡¥¤¥ë¤Ø¤Î¥Ñ¥¹:"
+
+#: src/HTML.c:6356
+msgid "(unknown)"
+msgstr "(ÉÔÌÀ)"
+
+#: src/HTML.c:7804
+msgid "Document has only hidden links. Use the 'l'ist command."
+msgstr "ʸ½ñ¤Ë¤Ï±£¤·¥ê¥ó¥¯¤·¤«¤¢¤ê¤Þ¤»¤ó¡£[l]¤«¤éé¤Ã¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: src/HTML.c:8328
+msgid "Source cache error - disk full?"
+msgstr "¥½¡¼¥¹¥­¥ã¥Ã¥·¥å¥¨¥é¡¼¤Ç¤¹ - ¥Ç¥£¥¹¥¯¤¬°ìÇÕ¤«¤â?"
+
+#: src/HTML.c:8341
+msgid "Source cache error - not enough memory!"
+msgstr "¥½¡¼¥¹¥­¥ã¥Ã¥·¥å¥¨¥é¡¼¤Ç¤¹ - ¥á¥â¥ê¤¬Â­¤ê¤Þ¤»¤ó!"
+
+#: src/LYBookmark.c:166
+msgid ""
+" This file is an HTML representation of the X Mosaic hotlist file.\n"
+" Outdated or invalid links may be removed by using the\n"
+" remove bookmark command, it is usually the 'R' key but may have\n"
+" been remapped by you or your system administrator."
+msgstr ""
+" ¤³¤Î¥Õ¥¡¥¤¥ë¤Ï X Moasaic ¥Û¥Ã¥È¥ê¥¹¥È¥Õ¥¡¥¤¥ë¤ò HTML ¤Ë¤·¤¿¤â¤Î¤Ç¤¹¡£\n"
+" µì¼°¤Ê¤¤¤·ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ï¡¢¥Ö¥Ã¥¯¥Þ¡¼¥¯ºï½ü¥³¥Þ¥ó¥É¤Çºï½ü¤Ç¤­¤Þ¤¹¡£\n"
+" ¤³¤Î¥³¥Þ¥ó¥É¤ÏÄ̾ï [r] ¥­¡¼¤Ë³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¤¢¤Ê¤¿¤«¥·¥¹¥Æ¥à\n"
+" ´ÉÍý¼Ô¤Ë¤è¤Ã¤ÆÊѹ¹¤µ¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£"
+
+#: src/LYBookmark.c:382
+msgid ""
+" You can delete links by the 'R' key<br>\n"
+"<ol>\n"
+msgstr ""
+" [r] ¥­¡¼¤Ç¥ê¥ó¥¯¤òºï½ü¤Ç¤­¤Þ¤¹<br>\n"
+"<ol>\n"
+
+#: src/LYBookmark.c:385
+msgid ""
+" You can delete links using the remove bookmark command. It is usually\n"
+" the 'R' key but may have been remapped by you or your system\n"
+" administrator."
+msgstr ""
+" ¥ê¥ó¥¯¤Ï¥Ö¥Ã¥¯¥Þ¡¼¥¯ºï½ü¥³¥Þ¥ó¥É¤Çºï½ü¤Ç¤­¤Þ¤¹¡£¤³¤Î¥³¥Þ¥ó¥É¤Ï\n"
+" Ä̾ï [r] ¥­¡¼¤Ë³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¤¢¤Ê¤¿¤«¥·¥¹¥Æ¥à´ÉÍý¼Ô¤Ë¤è¤Ã¤Æ\n"
+" Êѹ¹¤µ¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£"
+
+#: src/LYBookmark.c:389
+msgid ""
+" This file also may be edited with a standard text editor to delete\n"
+" outdated or invalid links, or to change their order."
+msgstr ""
+" ¤Þ¤¿¡¢É¸½àŪ¤Ê¥Æ¥­¥¹¥È¥¨¥Ç¥£¥¿¤ò»È¤Ã¤Æ¤³¤Î¥Õ¥¡¥¤¥ë¤òÊÔ½¸¤·¡¢\n"
+" ¸Å¤«¤Ã¤¿¤ê´Ö°ã¤Ã¤¿¤ê¤·¤Æ¤¤¤ë¥ê¥ó¥¯¤òºï½ü¤·¤¿¤ê¡¢\n"
+" ½çÈÖ¤òÊѤ¨¤¿¤ê¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£"
+
+#: src/LYBookmark.c:392
+msgid ""
+"Note: if you edit this file manually\n"
+" you should not change the format within the lines\n"
+" or add other HTML markup.\n"
+" Make sure any bookmark link is saved as a single line."
+msgstr ""
+"Ãí°Õ: ¤³¤Î¥Õ¥¡¥¤¥ë¤ò¼ê¤ÇÊÔ½¸¤¹¤ëºÝ¤Ë¤Ï¡¢³Æ¹Ô¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò\n"
+" Êѹ¹¤·¤¿¤ê¡¢Â¾¤Î HTML ¥Þ¡¼¥¯¥¢¥Ã¥×¤ò²Ã¤¨¤¿¤ê¤·¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£\n"
+" ¥Ö¥Ã¥¯¥Þ¡¼¥¯¤Î¥ê¥ó¥¯¤Ï°ì¹Ô¤Ë¼ý¤Þ¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: src/LYBookmark.c:683
+#, c-format
+msgid "File may be recoverable from %s during this session"
+msgstr "¤³¤Î¥»¥Ã¥·¥ç¥ó¤Î´Ö¤Ï %s ¤«¤é¥Õ¥¡¥¤¥ë¤òÉüµì¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤«¤â¤·¤ì¤Þ¤»¤ó"
+
+#.
+#. * Neither the path as given nor any components examined by
+#. * backing up were stat()able. - kw
+#.
+#: src/LYCgi.c:232
+msgid "Unable to access cgi script"
+msgstr "cgi ¥¹¥¯¥ê¥×¥È¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó"
+
+#: src/LYCgi.c:651 src/LYCgi.c:654
+msgid "Good Advice"
+msgstr "Îɤ¤¥¢¥É¥Ð¥¤¥¹"
+
+#: src/LYCgi.c:657
+msgid "An excellent http server for VMS is available via"
+msgstr "VMS ¤Ë¤·¤Æ¤Ï¤Ê¤«¤Ê¤«Í¥¤ì¤¿ http ¥µ¡¼¥Ð¤¬°Ê²¼¤«¤éÍøÍѲÄǽ¤Ç¤¹: "
+
+#: src/LYCgi.c:664
+msgid "this link"
+msgstr "¤³¤Î¥ê¥ó¥¯"
+
+#: src/LYCgi.c:668
+msgid "It provides state of the art CGI script support.\n"
+msgstr "¸½ºß˾¤ß¤¦¤ëºÇ¹â¿å½à¤Î CGI ¥¹¥¯¥ê¥×¥È¥µ¥Ý¡¼¥È¤òÈ÷¤¨¤Æ¤¤¤Þ¤¹¡£\n"
+
+#: src/LYClean.c:108
+msgid "Exiting via interrupt:"
+msgstr "½ªÎ»¤·¤Þ¤¹ ¸¶°ø: ³ä¤ê¹þ¤ß"
+
+#: src/LYCookie.c:2659
+msgid "(from a previous session)"
+msgstr "(°ÊÁ°¤Î¥»¥Ã¥·¥ç¥ó¤«¤é)"
+
+#: src/LYCookie.c:2719
+msgid "Maximum Gobble Date:"
+msgstr "¾ÞÌ£´ü¸Â:"
+
+#: src/LYCookie.c:2764
+msgid "Internal"
+msgstr "ÆâÉô"
+
+#: src/LYCookie.c:2765
+msgid "cookie_domain_flag_set error, aborting program"
+msgstr "cookie_domain_flag_set ¥¨¥é¡¼¡¢¥×¥í¥°¥é¥à¤ò½ªÎ»¤·¤Þ¤¹"
+
+#: src/LYCurses.c:936
+msgid "Terminal initialisation failed - unknown terminal type?"
+msgstr "üËö¤Î½é´ü²½¤Ë¼ºÇÔ¤·¤Þ¤·¤¿ - üËö¤Î¥¿¥¤¥×¤¬ÉÔÌÀ?"
+
+#: src/LYCurses.c:1328
+msgid "Terminal ="
+msgstr "üËö ="
+
+#: src/LYCurses.c:1332
+msgid "You must use a vt100, 200, etc. terminal with this program."
+msgstr "¤³¤Î¥×¥í¥°¥é¥à¤Ï vt100¡¢200 ¤Ê¤É¤ÎüËö¾å¤Ç¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: src/LYCurses.c:1384
+msgid "Your Terminal type is unknown!"
+msgstr "¤ª»È¤¤¤ÎüËö¥¿¥¤¥×¤¬Ê¬¤«¤ê¤Þ¤»¤ó!"
+
+#: src/LYCurses.c:1385
+msgid "Enter a terminal type:"
+msgstr "üËö¥¿¥¤¥×¤òÆþÎÏ:"
+
+#: src/LYCurses.c:1398
+msgid "TERMINAL TYPE IS SET TO"
+msgstr "ÀßÄꤵ¤ì¤ëüËö¥¿¥¤¥×¤Ï"
+
+#: src/LYCurses.c:1749
+#, c-format
+msgid ""
+"\n"
+"A Fatal error has occurred in %s Ver. %s\n"
+msgstr ""
+"\n"
+"Ã×̿Ū¤Ê¥¨¥é¡¼¤¬ %s ¥Ð¡¼¥¸¥ç¥ó %s ¤ÇȯÀ¸¤·¤Þ¤·¤¿\n"
+
+#: src/LYCurses.c:1751
+msgid ""
+"\n"
+"Please notify your system administrator to confirm a bug, and if\n"
+"confirmed, to notify the lynx-dev list. Bug reports should have concise\n"
+"descriptions of the command and/or URL which causes the problem, the\n"
+"operating system name with version number, the TCPIP implementation, the\n"
+"TRACEBACK if it can be captured, and any other relevant information.\n"
+msgstr ""
+"\n"
+"¥Ð¥°¤ò³Îǧ¤¹¤ë¤¿¤á¥·¥¹¥Æ¥à´ÉÍý¼Ô¤ËÏ¢Íí¤·¡¢¤â¤·³Îǧ¤µ¤ì¤¿¤Ê¤é¤Ð lynx-dev \n"
+"¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤ËÏ¢Íí¤·¤Æ¤¯¤À¤µ¤¤¡£¥Ð¥°Êó¹ð¤Ë¤Ï¡¢ÌäÂê¤òµ¯¤³¤·¤¿¥³¥Þ¥ó¥É¤«\n"
+"URL ¤ÎÀµ³Î¤ÊÀâÌÀ¤È¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à̾(¥Ð¡¼¥¸¥ç¥óÈÖ¹æ´Þ¤à)¡¢TCPIP \n"
+"¼ÂÁõ¡¢¤â¤·Ê᪤Ǥ­¤¿¤Ê¤é¤Ð TRACEBACK¡¢¤½¤Î¾¤ÎŬÀڤʾðÊó¤ò´Þ¤á¤Æ¤¯¤À¤µ¤¤¡£\n"
+
+#: src/LYEdit.c:264
+msgid "Editor killed by signal"
+msgstr "¥¨¥Ç¥£¥¿¤¬°Û¾ï½ªÎ»¤·¤Þ¤·¤¿ ¥·¥°¥Ê¥ë:"
+
+#: src/LYEdit.c:266
+#, c-format
+msgid "Editor returned with error status, %s"
+msgstr "¥¨¥Ç¥£¥¿¤Ï¥¨¥é¡¼¥¹¥Æ¡¼¥¿¥¹ %s ¤òÊÖ¤·¤Þ¤·¤¿"
+
+#: src/LYEdit.c:267
+msgid "reason unknown."
+msgstr "(ÉÔÌÀ)"
+
+#: src/LYDownload.c:520
+msgid "Downloaded link:"
+msgstr "¥À¥¦¥ó¥í¡¼¥É¤·¤¿¥ê¥ó¥¯:"
+
+#: src/LYDownload.c:525
+msgid "Suggested file name:"
+msgstr "¿ä¾©¤¹¤ë¥Õ¥¡¥¤¥ë̾:"
+
+#: src/LYDownload.c:530
+msgid "Standard download options:"
+msgstr "ɸ½à¤Î¥À¥¦¥ó¥í¡¼¥ÉÀè:"
+
+#: src/LYDownload.c:531
+msgid "Download options:"
+msgstr "¥À¥¦¥ó¥í¡¼¥ÉÀè"
+
+#: src/LYDownload.c:545
+msgid "Save to disk"
+msgstr "¥Ç¥£¥¹¥¯¤ËÊݸ"
+
+#: src/LYDownload.c:547
+msgid "Save to disk disabled."
+msgstr "¥Ç¥£¥¹¥¯¤ËÊݸ¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: src/LYDownload.c:551 src/LYPrint.c:1338
+msgid "Local additions:"
+msgstr "¥í¡¼¥«¥ë¤Ç¤ÎÄɲÃ:"
+
+#: src/LYDownload.c:560 src/LYUpload.c:224
+msgid "No Name Given"
+msgstr "̾Á°¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#: src/LYHistory.c:633
+msgid "You selected:"
+msgstr "ÁªÂò¤·¤¿¥Ú¡¼¥¸: "
+
+#: src/LYHistory.c:657 src/LYHistory.c:905
+msgid "(no address)"
+msgstr "(¥¢¥É¥ì¥¹¤Ê¤·)"
+
+#: src/LYHistory.c:661
+msgid " (internal)"
+msgstr " (ÆâÉô)"
+
+#: src/LYHistory.c:663
+msgid " (was internal)"
+msgstr "(¤«¤Ä¤ÆÆâÉô)"
+
+#: src/LYHistory.c:761
+msgid " (From History)"
+msgstr " (ÍúÎò¤è¤ê)"
+
+#: src/LYHistory.c:825
+msgid "You visited (POSTs, bookmark, menu and list files excluded):"
+msgstr "¤¢¤Ê¤¿¤¬Ë¬¤ì¤¿¥ê¥ó¥¯(POST¡¢¥Ö¥Ã¥¯¥Þ¡¼¥¯¡¢¥á¥Ë¥å¡¼¡¢¥ê¥¹¥È¥Õ¥¡¥¤¥ë¤Ï½ü¤¯):"
+
+#: src/LYHistory.c:1124
+msgid "(No messages yet)"
+msgstr "(¤Þ¤À¥á¥Ã¥»¡¼¥¸¤Ï̵¤¤)"
+
+#: src/LYLeaks.c:78
+msgid "Invalid pointer detected."
+msgstr "ÉÔÀµ¤Ê¥Ý¥¤¥ó¥¿¤¬¸¡½Ð¤µ¤ì¤Þ¤·¤¿¡£"
+
+#: src/LYLeaks.c:80 src/LYLeaks.c:117
+msgid "Pointer:"
+msgstr "¥Ý¥¤¥ó¥¿:"
+
+#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:136
+msgid "FileName:"
+msgstr "¥Õ¥¡¥¤¥ë̾:"
+
+#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:139 src/LYLeaks.c:150
+msgid "LineCount:"
+msgstr "¹Ô¿ô:"
+
+#: src/LYLeaks.c:115
+msgid "Memory leak detected."
+msgstr "¥á¥â¥ê¥ê¡¼¥¯¤¬¸¡½Ð¤µ¤ì¤Þ¤·¤¿¡£"
+
+#: src/LYLeaks.c:120
+msgid "Contains:"
+msgstr "´Þ¤à:"
+
+#: src/LYLeaks.c:133
+msgid "ByteSize:"
+msgstr "¥Ð¥¤¥È¥µ¥¤¥º:"
+
+#: src/LYLeaks.c:147
+msgid "realloced:"
+msgstr "ºÆ³ä¤êÅö¤Æ:"
+
+#: src/LYLeaks.c:170
+msgid "Total memory leakage this run:"
+msgstr "º£²ó¤Î¼Â¹Ô¤Ç¤Î¥á¥â¥ê¥ê¡¼¥¯ÁíÎÌ"
+
+#: src/LYList.c:91
+msgid "References in "
+msgstr "±¦¤«¤é¤Î»²¾È: "
+
+#: src/LYList.c:92
+msgid "this document:"
+msgstr "¤³¤Îʸ½ñ:"
+
+#: src/LYList.c:98
+msgid "Visible links:"
+msgstr "¸«¤¨¤ë¥ê¥ó¥¯:"
+
+#: src/LYList.c:199 src/LYList.c:319
+msgid "Hidden links:"
+msgstr "±£¤µ¤ì¤¿¥ê¥ó¥¯:"
+
+#: src/LYList.c:267
+msgid "References"
+msgstr "»²¾È"
+
+#: src/LYList.c:269
+msgid "Visible links"
+msgstr "¸«¤¨¤ë¥ê¥ó¥¯"
+
+#: src/LYLocal.c:267
+#, c-format
+msgid "Unable to get status of '%s'."
+msgstr "'%s' ¤Î¥¹¥Æ¡¼¥¿¥¹¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: src/LYLocal.c:301
+msgid "The selected item is not a file or a directory! Request ignored."
+msgstr "ÁªÂò¤µ¤ì¤¿¥¢¥¤¥Æ¥à¤Ï¥Õ¥¡¥¤¥ë¤Ç¤â¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤â¤¢¤ê¤Þ¤»¤ó¡£¥ê¥¯¥¨¥¹¥È¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£"
+
+#: src/LYLocal.c:383
+#, c-format
+msgid "Unable to %s due to system error!"
+msgstr "¥·¥¹¥Æ¥à¥¨¥é¡¼¤Ë¤è¤ê %s ¤Ç¤­¤Þ¤»¤ó!"
+
+#. error return
+#: src/LYLocal.c:415
+#, c-format
+msgid "Probable failure to %s due to system error!"
+msgstr "¥·¥¹¥Æ¥à¥¨¥é¡¼¤Ë¤è¤ê %s ¤¬¼ºÇÔ¤·¤¿¤è¤¦¤Ç¤¹!"
+
+#: src/LYLocal.c:453
+#, c-format
+msgid "move %s to %s"
+msgstr "%s ¤ò %s ¤Ë°Üư¤·¤Þ¤¹"
+
+#: src/LYLocal.c:475
+msgid "There is already a directory with that name! Request ignored."
+msgstr "»ØÄê¤Î̾Á°¤ò»ý¤Ä¥Ç¥£¥ì¥¯¥È¥ê¤¬¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹! ¥ê¥¯¥¨¥¹¥È¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡£"
+
+#: src/LYLocal.c:477
+msgid "There is already a file with that name! Request ignored."
+msgstr "»ØÄê¤Î̾Á°¤ò»ý¤Ä¥Õ¥¡¥¤¥ë¤¬¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹! ¥ê¥¯¥¨¥¹¥È¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡£"
+
+#: src/LYLocal.c:479
+msgid "The specified name is already in use! Request ignored."
+msgstr "»ØÄê¤Î̾Á°¤Ï¤¹¤Ç¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤¹! ¥ê¥¯¥¨¥¹¥È¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡£"
+
+#: src/LYLocal.c:490
+msgid "Destination has different owner! Request denied."
+msgstr "ÌÜŪÃϤϽêÍ­¼Ô¤¬°Û¤Ê¤ê¤Þ¤¹! ¥ê¥¯¥¨¥¹¥È¤ÏµñÈݤµ¤ì¤Þ¤·¤¿¡£"
+
+#: src/LYLocal.c:493
+msgid "Destination is not a valid directory! Request denied."
+msgstr "ÌÜŪÃϤÏÀµ¤·¤¤¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó! Í×µá¤ÏµñÈݤµ¤ì¤Þ¤·¤¿¡£"
+
+#: src/LYLocal.c:516
+msgid "Remove all tagged files and directories?"
+msgstr "ÁªÂò¤·¤¿Á´¤Æ¤Î¥Õ¥¡¥¤¥ë¤È¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü¤·¤Þ¤¹¤«?"
+
+#: src/LYLocal.c:537
+#, c-format
+msgid "remove %s"
+msgstr "%s ¤òºï½ü¤·¤Þ¤¹"
+
+#: src/LYLocal.c:580
+msgid "Enter new location for tagged items: "
+msgstr "ÁªÂò¤·¤¿¥¢¥¤¥Æ¥à¤Î¿·¤·¤¤¾ì½ê¤òÆþÎÏ: "
+
+#: src/LYLocal.c:649
+msgid "Path too long"
+msgstr "¥Ñ¥¹¤¬Ä¹¤¹¤®¤Þ¤¹"
+
+#: src/LYLocal.c:680
+msgid "Source and destination are the same location - request ignored!"
+msgstr "¥½¡¼¥¹¤ÈÌÜŪÃϤ¬Æ±¤¸¾ì½ê¤Ç¤¹ - Í×µá¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿!"
+
+#: src/LYLocal.c:738
+msgid "Enter new name for directory: "
+msgstr "¿·¤·¤¤¥Ç¥£¥ì¥¯¥È¥ê̾¤òÆþÎÏ"
+
+#: src/LYLocal.c:740
+msgid "Enter new name for file: "
+msgstr "¿·¤·¤¤¥Õ¥¡¥¤¥ë̾¤òÆþÎÏ: "
+
+#: src/LYLocal.c:751
+msgid "Illegal character (path-separator) found! Request ignored."
+msgstr "ÉÔÀµ¤Ê¥­¥ã¥é¥¯¥¿(¥Ñ¥¹¥»¥Ñ¥ì¡¼¥¿)¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿! ¥ê¥¯¥¨¥¹¥È¤Ï̵»ë¤µ¤ì¤Þ¤·¤¿¡£"
+
+#: src/LYLocal.c:800
+msgid "Enter new location for directory: "
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤Î¿·¤·¤¤¾ì½ê¤òÆþÎÏ: "
+
+#: src/LYLocal.c:802
+msgid "Enter new location for file: "
+msgstr "¥Õ¥¡¥¤¥ë¤Î¿·¤·¤¤¾ì½ê¤òÆþÎÏ: "
+
+#: src/LYLocal.c:827
+msgid "Unexpected failure - unable to find trailing path separator"
+msgstr "ͽ´ü¤»¤Ì¼ºÇÔ - Äɤ¦¥Ñ¥¹¥»¥Ñ¥ì¡¼¥¿¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+
+#: src/LYLocal.c:847
+msgid "Source and destination are the same location! Request ignored!"
+msgstr "¥½¡¼¥¹¤ÈÌÜŪÃϤ¬Æ±¤¸¾ì½ê¤Ç¤¹! ¥ê¥¯¥¨¥¹¥È¤Ï̵»ë¤µ¤ì¤Þ¤¹!"
+
+#: src/LYLocal.c:894
+msgid "Modify name, location, or permission (n, l, or p): "
+msgstr "[n]̾Á°¡¢[l]¾ì½ê¡¢¤¢¤ë¤¤¤Ï [p]¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤òÊѹ¹: "
+
+#: src/LYLocal.c:896
+msgid "Modify name or location (n or l): "
+msgstr "[n]̾Á° ¤¢¤ë¤¤¤Ï [l]¾ì½ê¤òÊѹ¹: "
+
+#.
+#. * Code for changing ownership needed here.
+#.
+#: src/LYLocal.c:925
+msgid "This feature not yet implemented!"
+msgstr "¤³¤Îµ¡Ç½¤Ï¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#: src/LYLocal.c:943
+msgid "Enter name of file to create: "
+msgstr "ºîÀ®¤¹¤ë¥Õ¥¡¥¤¥ë̾¤òÆþÎÏ: "
+
+#: src/LYLocal.c:951 src/LYLocal.c:999
+msgid "Illegal redirection \"//\" found! Request ignored."
+msgstr "ÉÔÀµ¤Ê¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó \"//\" ¤ò¸¡½Ð¤·¤Þ¤·¤¿! Í×µá¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£"
+
+#: src/LYLocal.c:966
+#, c-format
+msgid "create %s"
+msgstr "%s ¤òºîÀ®¤·¤Þ¤¹"
+
+#: src/LYLocal.c:991
+msgid "Enter name for new directory: "
+msgstr "¿·¤·¤¤¥Ç¥£¥ì¥¯¥È¥ê̾¤òÆþÎÏ: "
+
+#: src/LYLocal.c:1042
+msgid "Create file or directory (f or d): "
+msgstr "¥Õ¥¡¥¤¥ë [f] ¤Þ¤¿¤Ï ¥Ç¥£¥ì¥¯¥È¥ê [d] ¤òºîÀ®: "
+
+#: src/LYLocal.c:1083
+#, c-format
+msgid "Remove '%s' and all of its contents?"
+msgstr "'%s' ¤È¤½¤ÎÁ´¤Æ¤ÎÆâÍÆ¤òºï½ü¤·¤Þ¤¹¤«?"
+
+#: src/LYLocal.c:1086
+msgid "Remove directory and all of its contents?"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤È¤½¤ÎÁ´¤Æ¤ÎÆâÍÆ¤òºï½ü¤·¤Þ¤¹¤«?"
+
+#: src/LYLocal.c:1090
+#, c-format
+msgid "Remove file '%s'?"
+msgstr "¥Õ¥¡¥¤¥ë '%s' ¤òºï½ü¤·¤Þ¤¹¤«?"
+
+#: src/LYLocal.c:1092
+msgid "Remove file?"
+msgstr "¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Þ¤¹¤«?"
+
+#: src/LYLocal.c:1097
+#, c-format
+msgid "Remove symbolic link '%s'?"
+msgstr "¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯ '%s' ¤òºï½ü¤·¤Þ¤¹¤«?"
+
+#: src/LYLocal.c:1099
+msgid "Remove symbolic link?"
+msgstr "¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤òºï½ü¤·¤Þ¤¹¤«?"
+
+#: src/LYLocal.c:1190
+msgid "Sorry, don't know how to permit non-UNIX files yet."
+msgstr "Èó UNIX ¥Õ¥¡¥¤¥ë¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤Ï¤Þ¤À°·¤¨¤Þ¤»¤ó¡£"
+
+#: src/LYLocal.c:1220
+msgid "Unable to open permit options file"
+msgstr "¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¥ª¥×¥·¥ç¥ó¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó"
+
+#: src/LYLocal.c:1247
+msgid "Specify permissions below:"
+msgstr "°Ê²¼¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤ò»ØÄê:"
+
+#: src/LYLocal.c:1248 src/LYShowInfo.c:196
+msgid "Owner:"
+msgstr "½êÍ­¼Ô:"
+
+#: src/LYLocal.c:1264
+msgid "Group"
+msgstr "¥°¥ë¡¼¥×"
+
+#: src/LYLocal.c:1280
+msgid "Others:"
+msgstr "¤½¤Î¾:"
+
+#: src/LYLocal.c:1298
+msgid "form to permit"
+msgstr "µö²Ä¤¹¤ë¥Õ¥©¡¼¥à"
+
+#: src/LYLocal.c:1396
+msgid "Invalid mode format."
+msgstr "ÉÔÀµ¤Ê¥â¡¼¥É¥Õ¥©¡¼¥Þ¥Ã¥È"
+
+#: src/LYLocal.c:1400
+msgid "Invalid syntax format."
+msgstr "ÉÔÀµ¤Ê¹½Ê¸¥Õ¥©¡¼¥Þ¥Ã¥È"
+
+#: src/LYLocal.c:1575
+msgid "NULL URL pointer"
+msgstr "¥Ì¥ë URL ¥Ý¥¤¥ó¥¿"
+
+#: src/LYLocal.c:1670
+msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
+msgstr "Ãí°Õ! UUDecode ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ï¤¢¤Ê¤¿¤¬ Lynx ¤òµ¯Æ°¤·¤¿¥Ç¥£¥ì¥¯¥È¥êÆâ¤ËÃÖ¤«¤ì¤Þ¤¹¡£"
+
+#: src/LYLocal.c:1782
+#, c-format
+msgid "Executing %s "
+msgstr "%s ¤ò¼Â¹ÔÃæ "
+
+#: src/LYLocal.c:1785
+msgid "Executing system command. This might take a while."
+msgstr "¥·¥¹¥Æ¥à¥³¥Þ¥ó¥É¤ò¼Â¹ÔÃæ¤Ç¤¹¡£¤·¤Ð¤é¤¯¤«¤«¤ê¤Þ¤¹¡£"
+
+#: src/LYLocal.c:1831
+msgid "Unable to open file management menu file."
+msgstr "¥Õ¥¡¥¤¥ë´ÉÍý¥á¥Ë¥å¡¼¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó¡£"
+
+#: src/LYLocal.c:1862
+msgid "Current directory:"
+msgstr "¸½ºß¤Î¥Ç¥£¥ì¥¯¥È¥ê:"
+
+#: src/LYLocal.c:1865 src/LYLocal.c:1883
+msgid "Current selection:"
+msgstr "¸½ºßÁªÂò:"
+
+#: src/LYLocal.c:1869
+msgid "Nothing currently selected."
+msgstr "¸½ºß²¿¤âÁªÂò¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: src/LYLocal.c:1884
+msgid "tagged item:"
+msgstr "ÁªÂò¤µ¤ì¤¿¥¢¥¤¥Æ¥à:"
+
+#: src/LYLocal.c:1884
+msgid "tagged items:"
+msgstr "ÁªÂò¤µ¤ì¤¿¥¢¥¤¥Æ¥à:"
+
+#: src/LYLocal.c:1983 src/LYLocal.c:1994
+msgid "Illegal filename; request ignored."
+msgstr "ÉÔÀµ¤Ê¥Õ¥¡¥¤¥ë̾¤Ç¤¹: Í×µá¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£"
+
+#: src/LYLocal.c:2137
+msgid "The selected item is not a directory! Request ignored."
+msgstr "ÁªÂò¤µ¤ì¤¿¥¢¥¤¥Æ¥à¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó! Í×µá¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£"
+
+#. directory not writable
+#: src/LYLocal.c:2141
+msgid "Install in the selected directory not permitted."
+msgstr "ÁªÂò¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ø¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
+
+#: src/LYLocal.c:2146
+msgid "Just a moment, ..."
+msgstr "¤ªÂÔ¤Á¤¯¤À¤µ¤¤ ..."
+
+#: src/LYLocal.c:2163
+msgid "Error buiding install args"
+msgstr "¥¤¥ó¥¹¥È¡¼¥ë°ú¿ô¤òÀ¸À®¤¹¤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#: src/LYLocal.c:2178 src/LYLocal.c:2210
+#, c-format
+msgid "Source and target are the same: %s"
+msgstr "¥½¡¼¥¹¤È¥¿¡¼¥²¥Ã¥È¤¬Æ±¤¸¤Ç¤¹: %s"
+
+#: src/LYLocal.c:2188 src/LYLocal.c:2220
+#, c-format
+msgid "Already in target directory: %s"
+msgstr "¤¹¤Ç¤Ë¥¿¡¼¥²¥Ã¥È¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¤¤Þ¤¹: %s"
+
+#: src/LYLocal.c:2238
+msgid "Installation complete"
+msgstr "¥¤¥ó¥¹¥È¡¼¥ë´°Î»"
+
+#: src/LYLocal.c:2427
+msgid "Temporary URL or list would be too long."
+msgstr "°ì»þŪ URL ¤¢¤ë¤¤¤Ï¥ê¥¹¥È¤¬Ä¹¤¹¤®¤ë¤è¤¦¤Ç¤¹¡£"
+
+#: src/LYMail.c:503
+msgid "Sending"
+msgstr "Á÷¿®Ãæ"
+
+#: src/LYMail.c:989
+#, c-format
+msgid "The link %s :?: %s \n"
+msgstr "¥ê¥ó¥¯ %s :?: %s \n"
+
+#: src/LYMail.c:991
+#, c-format
+msgid "called \"%s\"\n"
+msgstr "\"%s\"¤È¤·¤Æ¸Æ¤Ð¤ì¤ë\n"
+
+#: src/LYMail.c:992
+#, c-format
+msgid "in the file \"%s\" called \"%s\"\n"
+msgstr "¥Õ¥¡¥¤¥ë \"%s\" ¤Ç \"%s\" ¤È¸Æ¤Ð¤ì¤ë\n"
+
+#: src/LYMail.c:993
+msgid "was requested but was not available."
+msgstr "¤¬Í׵ᤵ¤ì¤Þ¤·¤¿¤¬ÍøÍѤǤ­¤Þ¤»¤ó¤Ç¤·¤¿¡£"
+
+#: src/LYMail.c:994
+msgid "Thought you might want to know."
+msgstr "¤¢¤Ê¤¿¤¬ÃΤꤿ¤¤¤«¤â¤·¤ì¤Ê¤¤¤È»×¤¤¤Þ¤·¤¿¡£"
+
+#: src/LYMail.c:996
+msgid "This message was automatically generated by"
+msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤Ï°Ê²¼¤Ë¤è¤Ã¤Æ¼«Æ°Åª¤ËÀ¸À®¤µ¤ì¤Þ¤·¤¿: "
+
+#: src/LYMain.c:897
+msgid "No Winsock found, sorry."
+msgstr "Winsock ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£"
+
+#: src/LYMain.c:1103
+msgid "You MUST define a valid TMP or TEMP area!\n"
+msgstr "TMP ¤Ê¤¤¤· TEMP Îΰè¤òÀµ¤·¤¯ÄêµÁ¤·¤Ê¤±¤ì¤Ð*¤Ê¤ê¤Þ¤»¤ó*!\n"
+
+#: src/LYMain.c:1156 src/LYMainLoop.c:5117
+msgid "No such directory"
+msgstr "¤½¤ó¤Ê¥Ç¥£¥ì¥¯¥È¥ê¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: src/LYMain.c:1378
+#, c-format
+msgid ""
+"\n"
+"Configuration file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"ÄêµÁ¥Õ¥¡¥¤¥ë %s ¤¬ÍøÍѤǤ­¤Þ¤»¤ó¡£\n"
+"\n"
+
+#: src/LYMain.c:1388
+msgid ""
+"\n"
+"Lynx character sets not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx ¥­¥ã¥é¥¯¥¿¥»¥Ã¥È¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n"
+"\n"
+
+#: src/LYMain.c:1417
+msgid ""
+"\n"
+"Lynx edit map not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx ÊÔ½¸¥Þ¥Ã¥×¤¬Àë¸À¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n"
+"\n"
+
+#: src/LYMain.c:1446
+#, c-format
+msgid ""
+"\n"
+"Lynx file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx ¥Õ¥¡¥¤¥ë %s ¤ÏÍøÍѤǤ­¤Þ¤»¤ó¡£\n"
+"\n"
+
+#: src/LYMain.c:1704
+msgid "Warning:"
+msgstr "Ãí°Õ: "
+
+#: src/LYMain.c:2247
+msgid "persistent cookies state will be changed in next session only."
+msgstr "±Ê³Ū¥¯¥Ã¥­¡¼¤Î¾õÂ֤ϼ¡¤Î¥»¥Ã¥·¥ç¥ó¤Ë¤Ê¤é¤Ê¤¤¤ÈÊѹ¹¤µ¤ì¤Þ¤»¤ó¡£"
+
+#: src/LYMain.c:2477 src/LYMain.c:2525
+#, c-format
+msgid "Lynx: ignoring unrecognized charset=%s\n"
+msgstr "Lynx: ÉÔÌÀ¤Ê¥­¥ã¥é¥¯¥¿¥»¥Ã¥È %s ¤ò̵»ë¤·¤Þ¤¹¡£\n"
+
+#: src/LYMain.c:3047
+#, c-format
+msgid "%s Version %s (%s)\n"
+msgstr "%s ¥Ð¡¼¥¸¥ç¥ó %s (%s)\n"
+
+#: src/LYMain.c:3072
+#, c-format
+msgid "Built on %s %s %s\n"
+msgstr "%s ¾å¤Ç %s %s ¤Ë¥Ó¥ë¥É¤µ¤ì¤Þ¤·¤¿¡£\n"
+
+#: src/LYMain.c:3077
+msgid "Copyrights held by the University of Kansas, CERN, and other contributors.\n"
+msgstr "¥«¥ó¥¶¥¹Âç³Ø¡¢CERN ¤È¤½¤Î¾¤Î¹×¸¥¼Ô¤¬Ãøºî¸¢¤òÊÝÍ­¤·¡¢\n"
+
+#: src/LYMain.c:3079
+msgid "Distributed under the GNU General Public License.\n"
+msgstr "GNU °ìÈ̸øÍ­»ÈÍѵöÂú·ÀÌó½ñ¤Î²¼¤ÇÇÛÉÛ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n"
+
+#: src/LYMain.c:3081
+msgid ""
+"See http://lynx.browser.org/ and the online help for more information.\n"
+"\n"
+msgstr ""
+"¾Ü¤·¤¯¤Ï http://lynx.browser.org/ ¤È¥ª¥ó¥é¥¤¥ó¥Ø¥ë¥×¤ò¤´Í÷¤¯¤À¤µ¤¤¡£\n"
+"\n"
+
+#: src/LYMain.c:3800
+#, c-format
+msgid "USAGE: %s [options] [file]\n"
+msgstr "»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó] [¥Õ¥¡¥¤¥ë]\n"
+
+#: src/LYMain.c:3801
+msgid "Options are:\n"
+msgstr "¥ª¥×¥·¥ç¥ó:\n"
+
+#: src/LYMain.c:4060
+#, c-format
+msgid "%s: Invalid Option: %s\n"
+msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó¤Ç¤¹: %s\n"
+
+#: src/LYMainLoop.c:512
+#, c-format
+msgid "Internal error: Invalid mouse link %d!"
+msgstr "ÆâÉô¥¨¥é¡¼: %d ¤ÏÉÔÀµ¤Ê¥Þ¥¦¥¹¥ê¥ó¥¯¤Ç¤¹!"
+
+#.
+#. * Make a name for this new URL.
+#.
+#: src/LYMainLoop.c:625 src/LYMainLoop.c:5139
+msgid "A URL specified by the user"
+msgstr "¥æ¡¼¥¶¤Ë¤è¤Ã¤Æ»ØÄꤵ¤ì¤¿ URL"
+
+#: src/LYMainLoop.c:1114
+msgid "Enctype multipart/form-data not yet supported! Cannot submit."
+msgstr "Enctype multipart/form-data ¤Ï¤Þ¤À¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó! Á÷¿®¤Ç¤­¤Þ¤»¤ó¡£"
+
+#.
+#. * Make a name for this help file.
+#.
+#: src/LYMainLoop.c:3097
+msgid "Help Screen"
+msgstr "¥Ø¥ë¥×²èÌÌ"
+
+#: src/LYMainLoop.c:3231
+msgid "System Index"
+msgstr "¥·¥¹¥Æ¥à¥¤¥ó¥Ç¥Ã¥¯¥¹"
+
+#: src/LYMainLoop.c:3611 src/LYMainLoop.c:5347
+msgid "Entry into main screen"
+msgstr "¥á¥¤¥ó²èÌÌ¤Ø¤ÎÆþÎÏ"
+
+#: src/LYMainLoop.c:3897
+msgid "No next document present"
+msgstr ""
+
+#: src/LYMainLoop.c:4206
+msgid "charset for this document specified explicitly, sorry..."
+msgstr "¤³¤Îʸ½ñ¤Î¥­¥ã¥é¥¯¥¿¥»¥Ã¥È¤ÏÌÀ¼¨Åª¤Ë»ØÄꤵ¤ì¤Æ¤¤¤Þ¤¹..."
+
+#: src/LYMainLoop.c:5093
+msgid "cd to:"
+msgstr "°Ê²¼¤Ø°Üư:"
+
+#: src/LYMainLoop.c:5120
+msgid "A component of path is not a directory"
+msgstr "¥Ñ¥¹¤Î°ìÉô¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: src/LYMainLoop.c:5123
+msgid "failed to change directory"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+
+#: src/LYMainLoop.c:6291
+msgid "Reparsing document under current settings..."
+msgstr "¸½ºß¤ÎÀßÄê¤Î²¼¤Çʸ½ñ¤òºÆ²ò¼áÃæ..."
+
+#: src/LYMainLoop.c:6579 src/LYMainLoop.c:6583
+#, c-format
+msgid "Fatal error - could not open output file %s\n"
+msgstr "Ã×̿Ū¥¨¥é¡¼ - ½ÐÎÏ¥Õ¥¡¥¤¥ë %s ¤¬³«¤±¤Þ¤»¤ó\n"
+
+#: src/LYMainLoop.c:7719 src/LYMainLoop.c:7892
+msgid "-index-"
+msgstr "-¥¤¥ó¥Ç¥Ã¥¯¥¹-"
+
+#: src/LYMainLoop.c:7829
+msgid "lynx: Can't access startfile"
+msgstr "lynx: ¥¹¥¿¡¼¥È¥Õ¥¡¥¤¥ë¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó"
+
+#: src/LYMainLoop.c:7842
+msgid "lynx: Start file could not be found or is not text/html or text/plain"
+msgstr "lynx: ¥¹¥¿¡¼¥È¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤é¤Ê¤¤¤«¡¢text/html ¤Ê¤¤¤· text/plain ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: src/LYMainLoop.c:7843
+msgid " Exiting..."
+msgstr " ½ªÎ»¤·¤Þ¤¹..."
+
+#: src/LYMainLoop.c:7886
+msgid "-more-"
+msgstr "-³¤­¤¢¤ê-"
+
+#. Enable scrolling.
+#: src/LYNews.c:203
+msgid "You will be posting to:"
+msgstr "Åê¹ÆÀè: "
+
+#.
+#. * Get the mail address for the From header,
+#. * offering personal_mail_address as default.
+#.
+#: src/LYNews.c:212
+msgid ""
+"\n"
+"\n"
+" Please provide your mail address for the From: header\n"
+msgstr ""
+"\n"
+"\n"
+" From: ¥Ø¥Ã¥ÀÍѤˤ¢¤Ê¤¿¤Î¥á¡¼¥ë¥¢¥É¥ì¥¹¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤\n"
+
+#.
+#. * Get the Subject header, offering the current
+#. * document's title as the default if this is a
+#. * followup rather than a new post. - FM
+#.
+#: src/LYNews.c:230
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Subject: header\n"
+msgstr ""
+"\n"
+"\n"
+" Subject: ¥Ø¥Ã¥À¤òÊÔ½¸¤·¤ÆÍѰդ·¤Æ¤¯¤À¤µ¤¤\n"
+
+#: src/LYNews.c:322
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Organization: header\n"
+msgstr ""
+"\n"
+"\n"
+"Organization: ¥Ø¥Ã¥À¤òÊÔ½¸¤·¤ÆÍѰդ·¤Æ¤¯¤À¤µ¤¤\n"
+
+#.
+#. * Use the built in line editior.
+#.
+#: src/LYNews.c:379
+msgid ""
+"\n"
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+"\n"
+" °Ê²¼¤Ë¤¢¤Ê¤¿¤Î¥á¥Ã¥»¡¼¥¸¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: src/LYNews.c:425
+msgid "Message has no original text!"
+msgstr "¥á¥Ã¥»¡¼¥¸¤Ë¤Ï¸µ¤Î¥Æ¥­¥¹¥È¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó!"
+
+#: src/LYOptions.c:743
+msgid "review/edit B)ookmarks files"
+msgstr "[b]¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ò±ÜÍ÷/ÊÔ½¸"
+
+#: src/LYOptions.c:745
+msgid "B)ookmark file: "
+msgstr "[b]¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë"
+
+#: src/LYOptions.c:2507 src/LYOptions.c:2531
+#, c-format
+msgid "Use %s to invoke the Options menu!"
+msgstr "%s ¤ÇÀßÄê¥á¥Ë¥å¡¼¤òµ¯Æ°¤·¤Þ¤¹!"
+
+#: src/LYOptions.c:3208
+msgid "General Preferences"
+msgstr "Á´ÈÌŪ¤ÊÀßÄê"
+
+#. ***************************************************************
+#. User Mode: SELECT
+#: src/LYOptions.c:3212
+msgid "User mode"
+msgstr "¥æ¡¼¥¶¥â¡¼¥É"
+
+#. Editor: INPUT
+#: src/LYOptions.c:3218
+msgid "Editor"
+msgstr "»ÈÍѤ¹¤ë¥¨¥Ç¥£¥¿"
+
+#. Search Type: SELECT
+#: src/LYOptions.c:3223
+msgid "Type of Search"
+msgstr "¸¡º÷¥¿¥¤¥×"
+
+#. Cookies: SELECT
+#: src/LYOptions.c:3229
+msgid "Cookies"
+msgstr "¥¯¥Ã¥­¡¼"
+
+#: src/LYOptions.c:3243
+msgid "Keyboard Input"
+msgstr "¥­¡¼¥Ü¡¼¥ÉÆþÎÏ"
+
+#. ***************************************************************
+#. Keypad Mode: SELECT
+#: src/LYOptions.c:3247
+msgid "Keypad mode"
+msgstr "¥­¡¼¥Ñ¥Ã¥É¤Î¥â¡¼¥É"
+
+#. Emacs keys: ON/OFF
+#: src/LYOptions.c:3253
+msgid "Emacs keys"
+msgstr "Emacs É÷¥­¡¼ÇÛÎó"
+
+#. VI Keys: ON/OFF
+#: src/LYOptions.c:3259
+msgid "VI keys"
+msgstr "VI É÷¥­¡¼ÇÛÎó"
+
+#. Line edit style: SELECT
+#. well, at least 2 line edit styles available
+#: src/LYOptions.c:3266
+msgid "Line edit style"
+msgstr ""
+
+#. Keyboard layout: SELECT
+#: src/LYOptions.c:3278
+#, fuzzy
+msgid "Keyboard layout"
+msgstr "¥­¡¼¥Ü¡¼¥ÉÆþÎÏ"
+
+#.
+#. * Display and Character Set
+#.
+#: src/LYOptions.c:3291
+msgid "Display and Character Set"
+msgstr "ɽ¼¨¤È¥­¥ã¥é¥¯¥¿¥»¥Ã¥È"
+
+#. ***************************************************************
+#. Display Character Set: SELECT
+#: src/LYOptions.c:3295
+msgid "Display character set"
+msgstr "ɽ¼¨¤¹¤ë¥­¥ã¥é¥¯¥¿¥»¥Ã¥È"
+
+#: src/LYOptions.c:3324
+msgid "Assumed document character set"
+msgstr "²¾Äꤹ¤ë¥­¥ã¥é¥¯¥¿¥»¥Ã¥È"
+
+#.
+#. * Since CJK people hardly mixed with other world
+#. * we split the header to make it more readable:
+#. * "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
+#.
+#: src/LYOptions.c:3344
+msgid "CJK mode"
+msgstr "CJK ¥â¡¼¥É"
+
+#: src/LYOptions.c:3346
+msgid "Raw 8-bit"
+msgstr "À¸ 8 ¥Ó¥Ã¥È"
+
+#. X Display: INPUT
+#: src/LYOptions.c:3354
+msgid "X Display"
+msgstr "X ¥Ç¥£¥¹¥×¥ì¥¤"
+
+#.
+#. * Document Appearance
+#.
+#: src/LYOptions.c:3360
+msgid "Document Appearance"
+msgstr "ʸ½ñ¤Î³°¸«"
+
+#: src/LYOptions.c:3366
+msgid "Show color"
+msgstr "¿§¤òÉÕ¤±¤ë"
+
+#. Show cursor: ON/OFF
+#: src/LYOptions.c:3390
+msgid "Show cursor"
+msgstr "¥«¡¼¥½¥ë¤ò¸«¤»¤ë"
+
+#. Select Popups: ON/OFF
+#: src/LYOptions.c:3396
+msgid "Popups for select fields"
+msgstr "¥Õ¥£¡¼¥ë¥ÉÁªÂò»þ¤Ë¥Ý¥Ã¥×¥¢¥Ã¥×"
+
+#. HTML error recovery: SELECT
+#: src/LYOptions.c:3403
+msgid "HTML error recovery"
+msgstr "HTML ¥¨¥é¡¼¤«¤é¤Î²óÉü"
+
+#. Show Images: SELECT
+#: src/LYOptions.c:3410
+msgid "Show images"
+msgstr "²èÁü¤Îɽ¼¨"
+
+#. Verbose Images: ON/OFF
+#: src/LYOptions.c:3424
+msgid "Verbose images"
+msgstr "¾éĹ¤Ê²èÁüɽ¼¨"
+
+#.
+#. * Headers Transferred to Remote Servers
+#.
+#: src/LYOptions.c:3432
+msgid "Headers Transferred to Remote Servers"
+msgstr "¥ê¥â¡¼¥È¥µ¡¼¥Ð¤ËžÁ÷¤µ¤ì¤ë¥Ø¥Ã¥À"
+
+#. ***************************************************************
+#. Mail Address: INPUT
+#: src/LYOptions.c:3436
+msgid "Personal mail address"
+msgstr "¸Ä¿Í¤Î¥á¡¼¥ë¥¢¥É¥ì¥¹"
+
+#. Preferred Document Character Set: INPUT
+#: src/LYOptions.c:3441
+msgid "Preferred document character set"
+msgstr "ɽ¼¨¤·¤¿¤¤¥­¥ã¥é¥¯¥¿¡¼¥»¥Ã¥È"
+
+#. Preferred Document Language: INPUT
+#: src/LYOptions.c:3446
+msgid "Preferred document language"
+msgstr "ɽ¼¨¤·¤¿¤¤¸À¸ì"
+
+#: src/LYOptions.c:3452
+msgid "User-Agent header"
+msgstr "User-Agent ¥Ø¥Ã¥À"
+
+#.
+#. * Listing and Accessing Files
+#.
+#: src/LYOptions.c:3460
+msgid "Listing and Accessing Files"
+msgstr "¥ê¥¹¥Èɽ¼¨¤È¥Õ¥¡¥¤¥ë¤Ø¤Î¥¢¥¯¥»¥¹"
+
+#. ***************************************************************
+#. FTP sort: SELECT
+#: src/LYOptions.c:3464
+msgid "FTP sort criteria"
+msgstr "FTP ¥Ç¥£¥ì¥¯¥È¥ê¤Î¥½¡¼¥È´ð½à"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3471
+msgid "Local directory sort criteria"
+msgstr "¥í¡¼¥«¥ë¥Ç¥£¥ì¥¯¥È¥ê¤Î¥½¡¼¥È´ð½à"
+
+#: src/LYOptions.c:3479
+msgid "Show dot files"
+msgstr "¥É¥Ã¥È¥Õ¥¡¥¤¥ë¤òɽ¼¨"
+
+#: src/LYOptions.c:3487
+msgid "Execution links"
+msgstr "¥ê¥ó¥¯¤ò¼Â¹Ô"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3507
+msgid "Show transfer rate"
+msgstr "žÁ÷¥ì¡¼¥È¤òɽ¼¨"
+
+#.
+#. * Special Files and Screens
+#.
+#: src/LYOptions.c:3516
+msgid "Special Files and Screens"
+msgstr "ÆÃÊÌ¥Õ¥¡¥¤¥ë¤È²èÌÌ"
+
+#: src/LYOptions.c:3521
+msgid "Multi-bookmarks"
+msgstr "¥Þ¥ë¥Á¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ò»È¤¦"
+
+#: src/LYOptions.c:3529
+msgid "Review/edit Bookmarks files"
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤Î±ÜÍ÷/ÊÔ½¸"
+
+#: src/LYOptions.c:3531
+msgid "Goto multi-bookmark menu"
+msgstr "¥Þ¥ë¥Á¥Ö¥Ã¥¯¥Þ¡¼¥¯¥á¥Ë¥å¡¼¤Ø"
+
+#: src/LYOptions.c:3533
+msgid "Bookmarks file"
+msgstr "¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë"
+
+#. Visited Pages: SELECT
+#: src/LYOptions.c:3539
+msgid "Visited Pages"
+msgstr "ˬ¤ì¤¿¥Ú¡¼¥¸"
+
+#: src/LYPrint.c:959
+msgid " Print job complete.\n"
+msgstr "°õºþ¥¸¥ç¥Ö¤¬´°Î»¤·¤Þ¤·¤¿¡£\n"
+
+#: src/LYPrint.c:1296
+msgid "Document:"
+msgstr "ʸ½ñ:"
+
+#: src/LYPrint.c:1297
+msgid "Number of lines:"
+msgstr "¹Ô¿ô:"
+
+#: src/LYPrint.c:1298
+msgid "Number of pages:"
+msgstr "¥Ú¡¼¥¸¿ô:"
+
+#: src/LYPrint.c:1299
+msgid "pages"
+msgstr "¥Ú¡¼¥¸"
+
+#: src/LYPrint.c:1299
+msgid "page"
+msgstr "¥Ú¡¼¥¸"
+
+#: src/LYPrint.c:1300
+msgid "(approximately)"
+msgstr "(³µ»»)"
+
+#: src/LYPrint.c:1305
+msgid "Some print functions have been disabled!"
+msgstr "°õºþµ¡Ç½¤Î°ìÉô¤Ï»È¤¨¤Þ¤»¤ó!"
+
+#: src/LYPrint.c:1309
+msgid "Standard print options:"
+msgstr "ɸ½à¤Î°õºþÀè"
+
+#: src/LYPrint.c:1310
+msgid "Print options:"
+msgstr "°õºþÀè¤òÁªÂò:"
+
+#: src/LYPrint.c:1316
+msgid "Save to a local file"
+msgstr "¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¤ËÊݸ"
+
+#: src/LYPrint.c:1318
+msgid "Save to disk disabled"
+msgstr "¥Ç¥£¥¹¥¯¤Ø¤ÎÊݸ¤Ï¤Ç¤­¤Þ¤»¤ó"
+
+#: src/LYPrint.c:1324
+msgid "Mail the file"
+msgstr "¥Õ¥¡¥¤¥ë¤ò¥á¡¼¥ë¤ÇÁ÷¿®"
+
+#: src/LYPrint.c:1330
+msgid "Print to the screen"
+msgstr "²èÌ̤Ëɽ¼¨"
+
+#: src/LYPrint.c:1334
+msgid "Print out on a printer attached to your vt100 terminal"
+msgstr "¤¢¤Ê¤¿¤Î vt100 üËö¤ËÀܳ¤µ¤ì¤¿¥×¥ê¥ó¥¿¤Ë°õºþ"
+
+#: src/LYReadCFG.c:340
+msgid ""
+"Syntax Error parsing COLOR in configuration file:\n"
+"The line must be of the form:\n"
+"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
+"\n"
+"Here FOREGROUND and BACKGROUND must be one of:\n"
+"The special strings 'nocolor' or 'default', or\n"
+msgstr ""
+"ÀßÄê¥Õ¥¡¥¤¥ë¤Î COLOR ¤ò²òÀÏÃæ¤Ë¥·¥ó¥¿¥Ã¥¯¥¹¥¨¥é¡¼¤ò¸¡½Ð¤·¤Þ¤·¤¿:\n"
+"¤³¤Î¹Ô¤Ï°Ê²¼¤Î·Á¼°¤ò¼è¤é¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó:\n"
+"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
+"\n"
+"FOREGROUND ¤È BACKGROUND ¤Ï°Ê²¼¤Î¤¦¤Á°ì¤Ä¤ò¼è¤ê¤Þ¤¹:\n"
+"ÆÃÊÌʸ»úÎó¤Î¡Önocolor¡×¡¢¡Ödefault¡×¡¢¤¢¤ë¤¤¤Ï\n"
+
+#: src/LYReadCFG.c:353
+msgid "Offending line:"
+msgstr "ÌäÂê¤Î¹Ô:"
+
+#: src/LYReadCFG.c:660
+#, c-format
+msgid "key remapping of %s to %s for %s failed\n"
+msgstr "¥­¡¼ %s ¤ò %s ¤Ø (ưºî¤Ï %s) ºÆÄêµÁ¤¹¤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿\n"
+
+#: src/LYReadCFG.c:667
+#, c-format
+msgid "key remapping of %s to %s failed\n"
+msgstr "¥­¡¼ %s ¤ò %s ¤ØºÆÄêµÁ¤¹¤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿\n"
+
+#: src/LYReadCFG.c:688
+#, c-format
+msgid "invalid line-editor selection %s for key %s, selecting all\n"
+msgstr "¥­¡¼ %s ¤Î¹Ô¥¨¥Ç¥£¥¿ÁªÂò %s ¤¬ÉÔÀµ¤Ç¤¹¡¢Á´ÂΤòÁªÂò¤·¤Þ¤¹\n"
+
+#: src/LYReadCFG.c:715 src/LYReadCFG.c:728
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"
+msgstr "¹Ô¥¨¥Ç¥£¥¿¥Ð¥¤¥ó¥Ç¥£¥ó¥°¤Ç¥­¡¼ %s (0x%x) ¤ò 0x%x (ưºî ¤Ï %s)¤ËÀßÄꤹ¤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿\n"
+
+#: src/LYReadCFG.c:733
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) for %s failed\n"
+msgstr "¹Ô¥¨¥Ç¥£¥¿¥Ð¥¤¥ó¥Ç¥£¥ó¥°¤Ç¥­¡¼ %s (0x%x) ¤òưºî %s¤ËÀßÄꤹ¤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿\n"
+
+#: src/LYReadCFG.c:838
+#, c-format
+msgid "Lynx: cannot start, CERN rules file %s is not available\n"
+msgstr "Lynx: ³«»Ï¤Ç¤­¤Þ¤»¤ó¡£CERN ¥ë¡¼¥ë¥Õ¥¡¥¤¥ë %s ¤¬ÍøÍѤǤ­¤Þ¤»¤ó\n"
+
+#: src/LYReadCFG.c:840
+msgid "(no name)"
+msgstr "(̾Á°Ìµ¤·)"
+
+#: src/LYReadCFG.c:1658
+#, c-format
+msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
+msgstr "lynx.cfg ¥¤¥ó¥¯¥ë¡¼¥É¤¬ %d ²ó°Ê¾å¤ÎÆþ¤ì»Ò¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹ -- ¤ª¤½¤é¤¯¥ë¡¼¥×¤¬¤¢¤ë¤Î¤Ç¤Ï!?\n"
+
+#: src/LYReadCFG.c:1660
+#, c-format
+msgid "Last attempted include was '%s',\n"
+msgstr "ºÇ¸å¤Ë»î¤ß¤¿¥¤¥ó¥¯¥ë¡¼¥É¤Ï '%s' ¤Ç¡¢\n"
+
+#: src/LYReadCFG.c:1661
+#, c-format
+msgid "included from '%s'.\n"
+msgstr "'%s' ¤«¤é¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n"
+
+#: src/LYReadCFG.c:2116 src/LYReadCFG.c:2129 src/LYReadCFG.c:2165
+msgid "The following is read from your lynx.cfg file."
+msgstr "°Ê²¼¤Ï¤¢¤Ê¤¿¤Î lynx.cfg ¥Õ¥¡¥¤¥ë¤«¤éÆÉ¤ß¹þ¤Þ¤ì¤¿¾ðÊó¤Ç¤¹¡£"
+
+#: src/LYReadCFG.c:2117 src/LYReadCFG.c:2130
+msgid "Please read the distribution"
+msgstr "ÇÛÉÛ¤Î"
+
+#: src/LYReadCFG.c:2123 src/LYReadCFG.c:2133
+msgid "for more comments."
+msgstr "¤Ë¤Ï¾ÜºÙ¤ÊÃí¤¬ÉÕ¤¤¤Æ¤¤¤Þ¤¹¤Î¤Ç»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£"
+
+#: src/LYReadCFG.c:2147
+msgid "RELOAD THE CHANGES"
+msgstr "Êѹ¹¤òºÆÆÉ¤ß¹þ¤ß"
+
+#: src/LYReadCFG.c:2156
+msgid "Your primary configuration"
+msgstr "ºÇ½é¤Ë»²¾È¤µ¤ì¤ëÀßÄê¥Õ¥¡¥¤¥ë¤Ï"
+
+#: src/LYShowInfo.c:129
+msgid "Directory that you are currently viewing"
+msgstr "¸½ºß¸«¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê"
+
+#: src/LYShowInfo.c:132
+msgid "Name:"
+msgstr "̾Á°:"
+
+#: src/LYShowInfo.c:135
+msgid "URL:"
+msgstr "URL:"
+
+#: src/LYShowInfo.c:146
+msgid "Directory that you have currently selected"
+msgstr "¸½ºßÁªÂò¤·¤Æ¤¤¤ë¥Ç¥£¥ì¥¯¥È¥ê"
+
+#: src/LYShowInfo.c:149
+msgid "File that you have currently selected"
+msgstr "¸½ºßÁªÂò¤·¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë"
+
+#: src/LYShowInfo.c:153
+msgid "Symbolic link that you have currently selected"
+msgstr "¸½ºßÁªÂò¤·¤Æ¤¤¤ë¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯"
+
+#: src/LYShowInfo.c:157
+msgid "Item that you have currently selected"
+msgstr "¸½ºßÁªÂò¤·¤Æ¤¤¤ë¥¢¥¤¥Æ¥à"
+
+#: src/LYShowInfo.c:159
+msgid "Full name:"
+msgstr "¥Õ¥ë¥Í¡¼¥à:"
+
+#: src/LYShowInfo.c:168
+msgid "Unable to follow link"
+msgstr "¥ê¥ó¥¯¤òé¤ì¤Þ¤»¤ó"
+
+#: src/LYShowInfo.c:170
+msgid "Points to file:"
+msgstr "¥Õ¥¡¥¤¥ë¤Ø¤Î¥Ý¥¤¥ó¥È:"
+
+#: src/LYShowInfo.c:175
+msgid "Name of owner:"
+msgstr "½êÍ­¼Ô¤Î̾Á°:"
+
+#: src/LYShowInfo.c:178
+msgid "Group name:"
+msgstr "¥°¥ë¡¼¥×¤Î̾Á°:"
+
+#: src/LYShowInfo.c:181
+msgid "File size:"
+msgstr "¥Õ¥¡¥¤¥ë¥µ¥¤¥º:"
+
+#: src/LYShowInfo.c:187
+msgid "Creation date:"
+msgstr "ºîÀ®Æü»þ:"
+
+#: src/LYShowInfo.c:190
+msgid "Last modified:"
+msgstr "ºÇ½ªÊѹ¹Æü»þ:"
+
+#: src/LYShowInfo.c:193
+msgid "Last accessed:"
+msgstr "ºÇ¸å¤Ë¥¢¥¯¥»¥¹¤µ¤ì¤¿Æü»þ:"
+
+#: src/LYShowInfo.c:195
+msgid "Access Permissions"
+msgstr "¥¢¥¯¥»¥¹µö²Ä"
+
+#: src/LYShowInfo.c:261
+msgid "File that you are currently viewing"
+msgstr "¸½ºß¤¢¤Ê¤¿¤¬¸«¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë"
+
+#: src/LYShowInfo.c:266 src/LYShowInfo.c:375
+msgid "Linkname:"
+msgstr "¥ê¥ó¥¯Ì¾"
+
+#: src/LYShowInfo.c:279 src/LYShowInfo.c:291
+msgid "Charset:"
+msgstr "¥­¥ã¥é¥¯¥¿¥»¥Ã¥È:"
+
+#: src/LYShowInfo.c:297
+msgid "Server:"
+msgstr "¥µ¡¼¥Ð:"
+
+#: src/LYShowInfo.c:300
+msgid "Date:"
+msgstr "Æü»þ:"
+
+#: src/LYShowInfo.c:303
+msgid "Last Mod:"
+msgstr "ºÇ½ª¹¹¿·:"
+
+#: src/LYShowInfo.c:309
+msgid "&nbsp;Expires:"
+msgstr "&nbsp;Í­¸ú´ü¸Â:"
+
+#: src/LYShowInfo.c:313
+msgid "Cache-Control:"
+msgstr "Cache-Control:"
+
+#: src/LYShowInfo.c:317
+msgid "Content-Length:"
+msgstr "Content-Length:"
+
+#: src/LYShowInfo.c:322
+msgid "Language:"
+msgstr "¸À¸ì:"
+
+#: src/LYShowInfo.c:329
+msgid "Post Data:"
+msgstr "Post ¥Ç¡¼¥¿:"
+
+#: src/LYShowInfo.c:331
+msgid "Post Content Type:"
+msgstr "Post ¥³¥ó¥Æ¥ó¥È¥¿¥¤¥×:"
+
+#: src/LYShowInfo.c:340
+msgid "Owner(s):"
+msgstr "½êÍ­¼Ô:"
+
+#: src/LYShowInfo.c:343
+msgid "size:"
+msgstr "¥µ¥¤¥º:"
+
+#: src/LYShowInfo.c:343
+msgid "lines"
+msgstr "¹Ô"
+
+#: src/LYShowInfo.c:346
+msgid "mode:"
+msgstr "¥â¡¼¥É:"
+
+#: src/LYShowInfo.c:348
+msgid "forms mode"
+msgstr "Ê£¿ô¥Õ¥©¡¼¥à¥â¡¼¥É"
+
+#: src/LYShowInfo.c:350
+msgid "source"
+msgstr "¥½¡¼¥¹"
+
+#: src/LYShowInfo.c:350
+msgid "normal"
+msgstr "Ä̾ï"
+
+#: src/LYShowInfo.c:351
+msgid ", safe"
+msgstr "¡¢°ÂÁ´"
+
+#: src/LYShowInfo.c:352
+msgid ", via internal link"
+msgstr "¡¢ÆâÉô¥ê¥ó¥¯·Ðͳ"
+
+#: src/LYShowInfo.c:358
+msgid ", no-cache"
+msgstr "¡¢¥­¥ã¥Ã¥·¥å̵¤·"
+
+#: src/LYShowInfo.c:360
+msgid ", ISMAP script"
+msgstr "¡¢ISMAP ¥¹¥¯¥ê¥×¥È"
+
+#: src/LYShowInfo.c:362
+msgid ", bookmark file"
+msgstr "¡¢¥Ö¥Ã¥¯¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë"
+
+#: src/LYShowInfo.c:371
+msgid "Link that you currently have selected"
+msgstr "¸½ºßÁªÂò¤·¤Æ¤¤¤ë¥ê¥ó¥¯"
+
+#: src/LYShowInfo.c:384
+msgid "Method:"
+msgstr "¥á¥½¥Ã¥É:"
+
+#: src/LYShowInfo.c:389
+msgid "Enctype:"
+msgstr "Enctype:"
+
+#: src/LYShowInfo.c:401
+msgid "(Form field)"
+msgstr "(¥Õ¥©¡¼¥à¥Õ¥£¡¼¥ë¥É)"
+
+#: src/LYShowInfo.c:416
+msgid "No Links on the current page"
+msgstr "¸½ºß¤Î¥Ú¡¼¥¸¤Ë¤Ï¥ê¥ó¥¯¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#: src/LYStyle.c:250
+#, c-format
+msgid ""
+"Syntax Error parsing style in lss file:\n"
+"[%s]\n"
+"The line must be of the form:\n"
+"OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
+"where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+msgstr ""
+"lss ¥Õ¥¡¥¤¥ë¤Î¥¹¥¿¥¤¥ë¤ò²òÀÏÃæ¤Ë¥·¥ó¥¿¥Ã¥¯¥¹¥¨¥é¡¼¤ò¸¡½Ð¤·¤Þ¤·¤¿:\n"
+"[%s]\n"
+"¤³¤Î¹Ô¤Ï°Ê²¼¤Î·Á¼°¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó:\n"
+"OBJECT:MONO:COLOR (em:bold:brightblue:white ¤«¤éÁª¤Ö)\n"
+"OBJECT ¤Ï EM¡¢STRONG¡¢B¡¢I¡¢U¡¢BLINK ¤Ê¤É¤«¤é°ì¤ÄÁª¤Ó¤Þ¤¹¡£\n"
+"\n"
+
+#: src/LYTraversal.c:107
+msgid "here is a list of the history stack so that you may rebuild"
+msgstr "°Ê²¼¤ÏºÆ¹½ÃۤΤ¿¤á¤ÎÍúÎò¥¹¥¿¥Ã¥¯¤Î¥ê¥¹¥È¤Ç¤¹¡£"
+
+#: src/LYUpload.c:78
+msgid "ERROR! - upload command is misconfigured"
+msgstr "¥¨¥é¡¼! - ¥¢¥Ã¥×¥í¡¼¥É¥³¥Þ¥ó¥É¤ÎÀßÄ꤬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹¡£"
+
+#: src/LYUpload.c:100
+msgid "Illegal redirection \"../\" found! Request ignored."
+msgstr "ÉÔÀµ¤Ê¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó \"../\" ¤òȯ¸«! ¥ê¥¯¥¨¥¹¥È¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£"
+
+#: src/LYUpload.c:103
+msgid "Illegal character \"/\" found! Request ignored."
+msgstr "ÉÔÀµ¤Ê¥­¥ã¥é¥¯¥¿ \"/\" ȯ¸«! ¥ê¥¯¥¨¥¹¥È¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£"
+
+#: src/LYUpload.c:106
+msgid "Illegal redirection using \"~\" found! Request ignored."
+msgstr "ÉÔÀµ¤Ê¥ê¥À¥¤¥ì¥¯¥·¥ç¥ó \"~\" ȯ¸«! ¥ê¥¯¥¨¥¹¥È¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£"
+
+#: src/LYUpload.c:163
+msgid "Unable to upload file."
+msgstr "¥Õ¥¡¥¤¥ë¤ò¥¢¥Ã¥×¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¡£"
+
+#: src/LYUpload.c:214
+msgid "Upload To:"
+msgstr "°Ê²¼¤Ë¥¢¥Ã¥×¥í¡¼¥É:"
+
+#: src/LYUpload.c:215
+msgid "Upload options:"
+msgstr "¥¢¥Ã¥×¥í¡¼¥É¥ª¥×¥·¥ç¥ó:"
+
+#: src/LYUtils.c:3075
+msgid "Unexpected access protocol for this URL scheme."
+msgstr "¤³¤Î URL ¥¹¥­¡¼¥à¤Ç¤ÏÁÛÄꤵ¤ì¤Æ¤¤¤Ê¤¤¥¢¥¯¥»¥¹¥×¥í¥È¥³¥ë¤Ç¤¹¡£"
+
+#: src/LYUtils.c:3915
+msgid "Too many tempfiles"
+msgstr ""
+
+#: src/LYUtils.c:4217
+#, fuzzy
+msgid "unknown restriction"
+msgstr "À©¸Â¤ÏÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n"
+
+#: src/LYUtils.c:4248
+msgid "No restrictions set.\n"
+msgstr "À©¸Â¤ÏÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n"
+
+#: src/LYUtils.c:4251
+msgid "Restrictions set:\n"
+msgstr "À©¸Â¤ò°Ê²¼¤ËÀßÄê:\n"
+
+#: src/LYUtils.c:5601
+msgid "Ignoring invalid HOME"
+msgstr "ÉÔÀµ¤Ê HOME ¤ò̵»ë¤·¤Þ¤¹"
+
+#: src/LYrcFile.c:20
+msgid "Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n"
+msgstr ""
+
+#: src/LYrcFile.c:242
+msgid ""
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
+msgstr ""
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
+
+#: src/LYrcFile.c:249
+msgid ""
+"bookmark_file specifies the name and location of the default bookmark\n"
+"file into which the user can paste links for easy access at a later\n"
+"date.\n"
+msgstr ""
+"bookmark_file specifies the name and location of the default bookmark\n"
+"file into which the user can paste links for easy access at a later\n"
+"date.\n"
+
+#: src/LYrcFile.c:254
+msgid ""
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
+msgstr ""
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
+
+#: src/LYrcFile.c:259
+msgid ""
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
+msgstr ""
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
+
+#: src/LYrcFile.c:266
+msgid ""
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
+msgstr ""
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
+
+#: src/LYrcFile.c:274
+msgid ""
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
+msgstr ""
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
+
+#: src/LYrcFile.c:279
+msgid ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
+msgstr ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
+
+#: src/LYrcFile.c:292
+msgid ""
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
+msgstr ""
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
+
+#: src/LYrcFile.c:300
+msgid ""
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
+msgstr ""
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
+
+#: src/LYrcFile.c:306
+msgid ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+msgstr ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+
+#: src/LYrcFile.c:312
+msgid ""
+"The file_sorting_method specifies which value to sort on when viewing\n"
+"file lists such as FTP directories. The options are:\n"
+" BY_FILENAME -- sorts on the name of the file\n"
+" BY_TYPE -- sorts on the type of the file\n"
+" BY_SIZE -- sorts on the size of the file\n"
+" BY_DATE -- sorts on the date of the file\n"
+msgstr ""
+"The file_sorting_method specifies which value to sort on when viewing\n"
+"file lists such as FTP directories. The options are:\n"
+" BY_FILENAME -- sorts on the name of the file\n"
+" BY_TYPE -- sorts on the type of the file\n"
+" BY_SIZE -- sorts on the size of the file\n"
+" BY_DATE -- sorts on the date of the file\n"
+
+#: src/LYrcFile.c:324
+msgid ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+msgstr ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+
+#: src/LYrcFile.c:339
+msgid ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+msgstr ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+
+#: src/LYrcFile.c:345
+msgid ""
+"personal_mail_address specifies your personal mail address. The\n"
+"address will be sent during HTTP file transfers for authorization and\n"
+"logging purposes, and for mailed comments.\n"
+"If you do not want this information given out, set the NO_FROM_HEADER\n"
+"to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
+"could leave this field blank, but then you won't have it included in\n"
+"your mailed comments.\n"
+msgstr ""
+"personal_mail_address specifies your personal mail address. The\n"
+"address will be sent during HTTP file transfers for authorization and\n"
+"logging purposes, and for mailed comments.\n"
+"If you do not want this information given out, set the NO_FROM_HEADER\n"
+"to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
+"could leave this field blank, but then you won't have it included in\n"
+"your mailed comments.\n"
+
+#: src/LYrcFile.c:354
+msgid ""
+"preferred_charset specifies the character set in MIME notation (e.g.,\n"
+"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
+"to http servers using an Accept-Charset header. The value should NOT\n"
+"include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
+"by default. May be a comma-separated list.\n"
+"If a file in that character set is available, the server will send it.\n"
+"If no Accept-Charset header is present, the default is that any\n"
+"character set is acceptable. If an Accept-Charset header is present,\n"
+"and if the server cannot send a response which is acceptable\n"
+"according to the Accept-Charset header, then the server SHOULD send\n"
+"an error response, though the sending of an unacceptable response\n"
+"is also allowed.\n"
+msgstr ""
+"preferred_charset specifies the character set in MIME notation (e.g.,\n"
+"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
+"to http servers using an Accept-Charset header. The value should NOT\n"
+"include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
+"by default. May be a comma-separated list.\n"
+"If a file in that character set is available, the server will send it.\n"
+"If no Accept-Charset header is present, the default is that any\n"
+"character set is acceptable. If an Accept-Charset header is present,\n"
+"and if the server cannot send a response which is acceptable\n"
+"according to the Accept-Charset header, then the server SHOULD send\n"
+"an error response, though the sending of an unacceptable response\n"
+"is also allowed.\n"
+
+#: src/LYrcFile.c:368
+msgid ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+msgstr ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+
+#: src/LYrcFile.c:377
+msgid ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+
+#: src/LYrcFile.c:388
+msgid ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+
+#: src/LYrcFile.c:403
+msgid ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+msgstr ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+
+#: src/LYrcFile.c:413
+msgid ""
+"show_color specifies how to set the color mode at startup. A value of\n"
+"\"never\" will force color mode off (treat the terminal as monochrome)\n"
+"at startup even if the terminal appears to be color capable. A value of\n"
+"\"always\" will force color mode on even if the terminal appears to be\n"
+"monochrome, if this is supported by the library used to build lynx.\n"
+"A value of \"default\" will yield the behavior of assuming\n"
+"a monochrome terminal unless color capability is inferred at startup\n"
+"based on the terminal type, or the -color command line switch is used, or\n"
+"the COLORTERM environment variable is set. The default behavior always is\n"
+"used in anonymous accounts or if the \"option_save\" restriction is set.\n"
+"The effect of the saved value can be overridden via\n"
+"the -color and -nocolor command line switches.\n"
+"The mode set at startup can be changed via the \"show color\" option in\n"
+"the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
+"\"off\" \"show color\" settings will be treated as \"default\".\n"
+msgstr ""
+"show_color specifies how to set the color mode at startup. A value of\n"
+"\"never\" will force color mode off (treat the terminal as monochrome)\n"
+"at startup even if the terminal appears to be color capable. A value of\n"
+"\"always\" will force color mode on even if the terminal appears to be\n"
+"monochrome, if this is supported by the library used to build lynx.\n"
+"A value of \"default\" will yield the behavior of assuming\n"
+"a monochrome terminal unless color capability is inferred at startup\n"
+"based on the terminal type, or the -color command line switch is used, or\n"
+"the COLORTERM environment variable is set. The default behavior always is\n"
+"used in anonymous accounts or if the \"option_save\" restriction is set.\n"
+"The effect of the saved value can be overridden via\n"
+"the -color and -nocolor command line switches.\n"
+"The mode set at startup can be changed via the \"show color\" option in\n"
+"the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
+"\"off\" \"show color\" settings will be treated as \"default\".\n"
+
+#: src/LYrcFile.c:430
+msgid ""
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
+msgstr ""
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
+
+#: src/LYrcFile.c:441
+msgid ""
+"show_dotfiles specifies that the directory listing should include\n"
+"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
+"honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
+"restricted via a command line switch. If display of hidden files\n"
+"is disabled, creation of such files via Lynx also is disabled.\n"
+msgstr ""
+"show_dotfiles specifies that the directory listing should include\n"
+"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
+"honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
+"restricted via a command line switch. If display of hidden files\n"
+"is disabled, creation of such files via Lynx also is disabled.\n"
+
+#: src/LYrcFile.c:452
+msgid ""
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
+msgstr ""
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
+
+#: src/LYrcFile.c:464
+msgid ""
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
+msgstr ""
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
+
+#: src/LYrcFile.c:472
+msgid ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+msgstr ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+
+#: src/LYrcFile.c:477
+msgid ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+msgstr ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+
+#: src/LYrcFile.c:485
+msgid ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+msgstr ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+
+#: src/LYrcFile.c:693
+msgid ""
+"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
+"your keypad when the numlock is on will act as arrow keys:\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"and the corresponding keyboard numbers will act as arrow keys,\n"
+"regardless of whether numlock is on.\n"
+msgstr ""
+"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
+"your keypad when the numlock is on will act as arrow keys:\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"and the corresponding keyboard numbers will act as arrow keys,\n"
+"regardless of whether numlock is on.\n"
+
+#: src/LYrcFile.c:702
+msgid ""
+"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
+"appear next to each link and numbers are used to select links.\n"
+msgstr ""
+"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
+"appear next to each link and numbers are used to select links.\n"
+
+#: src/LYrcFile.c:706
+msgid ""
+"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
+"numbers will appear next to each link and visible form input field.\n"
+"Numbers are used to select links, or to move the \"current link\" to a\n"
+"form input field or button. In addition, options in popup menus are\n"
+"indexed so that the user may type an option number to select an option in\n"
+"a popup menu, even if the option isn't visible on the screen. Reference\n"
+"lists and output from the list command also enumerate form inputs.\n"
+msgstr ""
+"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
+"numbers will appear next to each link and visible form input field.\n"
+"Numbers are used to select links, or to move the \"current link\" to a\n"
+"form input field or button. In addition, options in popup menus are\n"
+"indexed so that the user may type an option number to select an option in\n"
+"a popup menu, even if the option isn't visible on the screen. Reference\n"
+"lists and output from the list command also enumerate form inputs.\n"
+
+#: src/LYrcFile.c:715
+msgid ""
+"NOTE: Some fixed format documents may look disfigured when\n"
+"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
+"enabled.\n"
+msgstr ""
+"NOTE: Some fixed format documents may look disfigured when\n"
+"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
+"enabled.\n"
+
+#: src/LYrcFile.c:748
+msgid ""
+"Lynx User Defaults File\n"
+"\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
+msgstr ""
+"Lynx User Defaults File\n"
+"\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
diff --git a/gnu/usr.bin/lynx/po/lynx.pot b/gnu/usr.bin/lynx/po/lynx.pot
index cdd31be81b9..70d0f9ecf4c 100644
--- a/gnu/usr.bin/lynx/po/lynx.pot
+++ b/gnu/usr.bin/lynx/po/lynx.pot
@@ -1,48 +1,79 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
msgid ""
msgstr ""
-"Date: 1999-05-25 07:12:28-0400\n"
-"From: Thomas Dickey,,, <tom@dickey-ppp>\n"
-"Content-Type: text/plain; charset=\n"
-"Xgettext-Options: --default-domain=lynx --directory=.. --add-comments --keyword=_ --keyword=N_ --files-from=./POTFILES.in\n"
-"Files: LYMessages.c WWW/Library/Implementation/HTAABrow.c WWW/Library/Implementation/HTAccess.c WWW/Library/Implementation/HTFTP.c WWW/Library/Implementation/HTFile.c WWW/Library/Implementation/HTFinger.c WWW/Library/Implementation/HTGopher.c WWW/Library/Implementation/HTNews.c WWW/Library/Implementation/HTTCP.c WWW/Library/Implementation/HTTP.c WWW/Library/Implementation/HTTelnet.c WWW/Library/Implementation/HTWAIS.c WWW/Library/Implementation/HTWSRC.c src/GridText.c src/HTAlert.c src/HTML.c src/LYBookmark.c src/LYCgi.c src/LYClean.c src/LYCookie.c src/LYCurses.c src/LYDownload.c src/LYHistory.c src/LYLeaks.c src/LYList.c src/LYLocal.c src/LYMail.c src/LYMain.c src/LYMainLoop.c src/LYNews.c src/LYOptions.c src/LYPrint.c src/LYReadCFG.c src/LYShowInfo.c src/LYStyle.c src/LYTraversal.c src/LYUpload.c src/LYUtils.c src/LYrcFile.c\n"
-
-#: LYMessages.c:30
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2001-06-01 18:55-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. ******************************************************************
+#. * The following definitions are for status line prompts, messages, or
+#. * warnings issued by Lynx during program execution. You can modify
+#. * them to make them more appropriate for your site. We recommend that
+#. * you extend these definitions to other languages using the gettext
+#. * library. There are also scattered uses of 'gettext()' throughout the
+#. * Lynx source, covering all but those messages which (a) are used for
+#. * debugging (CTRACE) or (b) are constants used in interaction with
+#. * other programs.
+#. *
+#. * Links to collections of alternate definitions, developed by the Lynx
+#. * User Community, are maintained in Lynx links:
+#. *
+#. * http://www.trill-home.com/lynx.html
+#. *
+#. * See ABOUT-NLS and po/readme for details and location of contributed
+#. * translations. When no translation is available, the English default is
+#. * used.
+#.
+#: LYMessages.c:29
+#, c-format
msgid "Alert!: %s"
msgstr ""
-#: LYMessages.c:31
+#: LYMessages.c:30
msgid "Welcome"
msgstr ""
-#: LYMessages.c:32 LYMessages.c:33
+#: LYMessages.c:31 LYMessages.c:32
msgid "Are you sure you want to quit?"
msgstr ""
-#: LYMessages.c:35 LYMessages.c:36
+#: LYMessages.c:34 LYMessages.c:35
msgid "Really exit from Lynx?"
msgstr ""
-#. VMS
-#: LYMessages.c:38
+#: LYMessages.c:37
msgid "Connection interrupted."
msgstr ""
-#: LYMessages.c:39
+#: LYMessages.c:38
msgid "Data transfer interrupted."
msgstr ""
-#: LYMessages.c:40
+#: LYMessages.c:39
msgid "Cancelled!!!"
msgstr ""
-#: LYMessages.c:41
+#: LYMessages.c:40
msgid "Cancelling!"
msgstr ""
-#: LYMessages.c:42
+#: LYMessages.c:41
msgid "Excellent!!!"
msgstr ""
+#: LYMessages.c:42
+msgid "OK"
+msgstr ""
+
#: LYMessages.c:43
msgid "Done!"
msgstr ""
@@ -69,1895 +100,1991 @@ msgstr ""
#. #define HELP
#: LYMessages.c:50
-msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
+msgid ""
+"Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
msgstr ""
#. #define MOREHELP
#: LYMessages.c:52
-msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
+msgid ""
+"-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
msgstr ""
#: LYMessages.c:53
msgid "-- press space for next page --"
msgstr ""
-#. Forms messages
+#: LYMessages.c:54
+msgid "URL too long"
+msgstr ""
+
+#. Inactive input fields, messages used with -tna option - kw
+#. #define FORM_LINK_TEXT_MESSAGE_INA
+#: LYMessages.c:60
+msgid "(Text entry field) Inactive. Press <return> to activate."
+msgstr ""
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA
+#: LYMessages.c:62
+msgid "(Textarea) Inactive. Press <return> to activate."
+msgstr ""
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA_E
+#: LYMessages.c:64
+#, c-format
+msgid "(Textarea) Inactive. Press <return> to activate (%s for editor)."
+msgstr ""
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA
+#: LYMessages.c:66
+msgid "(Form field) Inactive. Use <return> to edit."
+msgstr ""
+
+#. #define FORM_TEXT_SUBMIT_MESSAGE_INA_X
+#: LYMessages.c:68
+#, c-format
+msgid ""
+"(Form field) Inactive. Use <return> to edit (%s to submit with no cache)."
+msgstr ""
+
+#. #define FORM_TEXT_RESUBMIT_MESSAGE_INA
+#: LYMessages.c:70
+msgid ""
+"(Form field) Inactive. Press <return> to edit, press <return> twice to "
+"submit."
+msgstr ""
+
+#. #define FORM_TEXT_SUBMIT_MAILTO_MSG_INA
+#: LYMessages.c:72
+msgid "(mailto form field) Inactive. Press <return> to change."
+msgstr ""
+
+#. #define FORM_LINK_PASSWORD_MESSAGE_INA
+#: LYMessages.c:74
+msgid "(Password entry field) Inactive. Press <return> to activate."
+msgstr ""
+
+#. #define FORM_LINK_FILE_UNM_MSG
+#: LYMessages.c:77
+msgid ""
+"UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off."
+msgstr ""
+
+#. #define FORM_LINK_FILE_MESSAGE
+#: LYMessages.c:79
+msgid ""
+"(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off."
+msgstr ""
+
#. #define FORM_LINK_TEXT_MESSAGE
-#: LYMessages.c:57
-msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+#: LYMessages.c:81
+msgid ""
+"(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
msgstr ""
#. #define FORM_LINK_TEXTAREA_MESSAGE
-#: LYMessages.c:59
-msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (^Ve for editor)."
+#: LYMessages.c:83
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off."
+msgstr ""
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_E
+#: LYMessages.c:85
+#, c-format
+msgid ""
+"(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor)."
msgstr ""
#. #define FORM_LINK_TEXT_UNM_MSG
-#: LYMessages.c:61
-msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
+#: LYMessages.c:87
+msgid ""
+"UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
msgstr ""
#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE
-#: LYMessages.c:63
-msgid "(Form field) Enter text. Use <return> to submit ('x' for no cache)."
+#: LYMessages.c:89
+msgid "(Form field) Enter text. Use <return> to submit."
+msgstr ""
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_X
+#: LYMessages.c:91
+#, c-format
+msgid "(Form field) Enter text. Use <return> to submit (%s for no cache)."
msgstr ""
#. #define FORM_LINK_TEXT_RESUBMIT_MESSAGE
-#: LYMessages.c:65
-msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
+#: LYMessages.c:93
+msgid ""
+"(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
msgstr ""
#. #define FORM_LINK_TEXT_SUBMIT_UNM_MSG
-#: LYMessages.c:67
+#: LYMessages.c:95
msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
msgstr ""
#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_MSG
-#: LYMessages.c:69
-msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
+#: LYMessages.c:97
+msgid ""
+"(mailto form field) Enter text. Use <return> to submit, arrows to move off."
msgstr ""
#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG
-#: LYMessages.c:71
+#: LYMessages.c:99
msgid "(mailto form field) Mail is disallowed so you cannot submit."
msgstr ""
#. #define FORM_LINK_PASSWORD_MESSAGE
-#: LYMessages.c:73
-msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+#: LYMessages.c:101
+msgid ""
+"(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
msgstr ""
#. #define FORM_LINK_PASSWORD_UNM_MSG
-#: LYMessages.c:75
+#: LYMessages.c:103
msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
msgstr ""
#. #define FORM_LINK_CHECKBOX_MESSAGE
-#: LYMessages.c:77
+#: LYMessages.c:105
msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
msgstr ""
#. #define FORM_LINK_CHECKBOX_UNM_MSG
-#: LYMessages.c:79
+#: LYMessages.c:107
msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
msgstr ""
#. #define FORM_LINK_RADIO_MESSAGE
-#: LYMessages.c:81
+#: LYMessages.c:109
msgid "(Radio Button) Use right-arrow or <return> to toggle."
msgstr ""
#. #define FORM_LINK_RADIO_UNM_MSG
-#: LYMessages.c:83
-msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
+#: LYMessages.c:111
+msgid ""
+"UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
msgstr ""
#. #define FORM_LINK_SUBMIT_PREFIX
-#: LYMessages.c:85
+#: LYMessages.c:113
msgid "Submit ('x' for no cache) to "
msgstr ""
#. #define FORM_LINK_RESUBMIT_PREFIX
-#: LYMessages.c:87
+#: LYMessages.c:115
msgid "Submit to "
msgstr ""
#. #define FORM_LINK_SUBMIT_MESSAGE
-#: LYMessages.c:89
-msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
+#: LYMessages.c:117
+msgid ""
+"(Form submit button) Use right-arrow or <return> to submit ('x' for no "
+"cache)."
msgstr ""
#. #define FORM_LINK_RESUBMIT_MESSAGE
-#: LYMessages.c:91
+#: LYMessages.c:119
msgid "(Form submit button) Use right-arrow or <return> to submit."
msgstr ""
#. #define FORM_LINK_SUBMIT_DIS_MSG
-#: LYMessages.c:93
+#: LYMessages.c:121
msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
msgstr ""
#. #define FORM_LINK_SUBMIT_MAILTO_PREFIX
-#: LYMessages.c:95
+#: LYMessages.c:123
msgid "Submit mailto form to "
msgstr ""
#. #define FORM_LINK_SUBMIT_MAILTO_MSG
-#: LYMessages.c:97
+#: LYMessages.c:125
msgid "(mailto form submit button) Use right-arrow or <return> to submit."
msgstr ""
#. #define FORM_LINK_SUBMIT_MAILTO_DIS_MSG
-#: LYMessages.c:99
+#: LYMessages.c:127
msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
msgstr ""
#. #define FORM_LINK_RESET_MESSAGE
-#: LYMessages.c:101
-msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
+#: LYMessages.c:129
+msgid ""
+"(Form reset button) Use right-arrow or <return> to reset form to defaults."
msgstr ""
#. #define FORM_LINK_RESET_DIS_MSG
-#: LYMessages.c:103
+#: LYMessages.c:131
msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
msgstr ""
#. #define FORM_LINK_OPTION_LIST_MESSAGE
-#: LYMessages.c:105
-msgid "(Option list) Hit return and use arrow keys and return to select option."
+#: LYMessages.c:133
+msgid ""
+"(Option list) Hit return and use arrow keys and return to select option."
msgstr ""
#. #define CHOICE_LIST_MESSAGE
-#: LYMessages.c:107
-msgid "(Choice list) Hit return and use arrow keys and return to select option."
+#: LYMessages.c:135
+msgid ""
+"(Choice list) Hit return and use arrow keys and return to select option."
msgstr ""
#. #define FORM_LINK_OPTION_LIST_UNM_MSG
-#: LYMessages.c:109
+#: LYMessages.c:137
msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
msgstr ""
#. #define CHOICE_LIST_UNM_MSG
-#: LYMessages.c:111
+#: LYMessages.c:139
msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
msgstr ""
-#: LYMessages.c:112
+#: LYMessages.c:140
msgid "Submitting form..."
msgstr ""
-#: LYMessages.c:113
+#: LYMessages.c:141
msgid "Resetting form..."
msgstr ""
#. #define RELOADING_FORM
-#: LYMessages.c:115
+#: LYMessages.c:143
msgid "Reloading document. Any form entries will be lost!"
msgstr ""
-#: LYMessages.c:116
+#: LYMessages.c:144
+#, c-format
msgid "Warning: Cannot transcode form data to charset %s!"
msgstr ""
#. #define NORMAL_LINK_MESSAGE
-#: LYMessages.c:119
+#: LYMessages.c:147
msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
msgstr ""
-#: LYMessages.c:120
+#: LYMessages.c:148
msgid "The resource requested is not available at this time."
msgstr ""
-#: LYMessages.c:121
+#: LYMessages.c:149
msgid "Enter Lynx keystroke command: "
msgstr ""
-#: LYMessages.c:122
+#: LYMessages.c:150
msgid "Looking up "
msgstr ""
-#: LYMessages.c:123
+#: LYMessages.c:151
+#, c-format
msgid "Getting %s"
msgstr ""
-#: LYMessages.c:124
+#: LYMessages.c:152
+#, c-format
msgid "Skipping %s"
msgstr ""
-#: LYMessages.c:125
+#: LYMessages.c:153
+#, c-format
msgid "Using %s"
msgstr ""
-#: LYMessages.c:126
+#: LYMessages.c:154
+#, c-format
msgid "Illegal URL: %s"
msgstr ""
-#: LYMessages.c:127
+#: LYMessages.c:155
+#, c-format
msgid "Badly formed address %s"
msgstr ""
-#: LYMessages.c:128
+#: LYMessages.c:156
+#, c-format
msgid "URL: %s"
msgstr ""
-#: LYMessages.c:129
+#: LYMessages.c:157
msgid "Unable to access WWW file!!!"
msgstr ""
-#: LYMessages.c:130
+#: LYMessages.c:158
+#, c-format
msgid "This is a searchable index. Use %s to search."
msgstr ""
#. #define WWW_INDEX_MORE_MESSAGE
-#: LYMessages.c:132
+#: LYMessages.c:160
+#, c-format
msgid "--More-- This is a searchable index. Use %s to search."
msgstr ""
-#: LYMessages.c:133
+#: LYMessages.c:161
msgid "You have entered an invalid link number."
msgstr ""
#. #define SOURCE_HELP
-#: LYMessages.c:135
-msgid "Currently viewing document source. Press '\\' to return to rendered version."
+#: LYMessages.c:163
+msgid ""
+"Currently viewing document source. Press '\\' to return to rendered version."
msgstr ""
#. #define NOVICE_LINE_ONE
-#: LYMessages.c:137
-msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
+#: LYMessages.c:165
+msgid ""
+" Arrow keys: Up and Down to move. Right to follow a link; Left to go "
+"back. \n"
msgstr ""
#. #define NOVICE_LINE_TWO
-#: LYMessages.c:139
-msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
+#: LYMessages.c:167
+msgid ""
+" H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history "
+"list \n"
msgstr ""
#. #define NOVICE_LINE_TWO_A
-#: LYMessages.c:141
-msgid " O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)uit \n"
+#: LYMessages.c:169
+msgid ""
+" O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)"
+"uit \n"
msgstr ""
#. #define NOVICE_LINE_TWO_B
-#: LYMessages.c:143
-msgid " O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n"
+#: LYMessages.c:171
+msgid ""
+" O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search "
+"doc: / \n"
msgstr ""
#. #define NOVICE_LINE_TWO_C
-#: LYMessages.c:145
-msgid " O)ther cmds C)omment History: <delete> Bookmarks: V)iew, A)dd, R)emove \n"
+#: LYMessages.c:173
+msgid ""
+"O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)"
+"emove \n"
msgstr ""
#. #define FORM_NOVICELINE_ONE
-#: LYMessages.c:147
-msgid " Enter text into the field by typing on the keyboard "
+#: LYMessages.c:175
+msgid ""
+" Enter text into the field by typing on the keyboard "
msgstr ""
#. #define FORM_NOVICELINE_TWO
-#: LYMessages.c:149
-msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
+#: LYMessages.c:177
+msgid ""
+" Ctrl-U to delete all text in field, [Backspace] to delete a character "
+msgstr ""
+
+#. #define FORM_NOVICELINE_TWO_DELBL
+#: LYMessages.c:179
+msgid ""
+" Ctrl-U to delete text in field, [Backspace] to delete a character "
+msgstr ""
+
+#. #define FORM_NOVICELINE_TWO_VAR
+#: LYMessages.c:181
+#, c-format
+msgid ""
+" %s to delete all text in field, [Backspace] to delete a character "
+msgstr ""
+
+#. #define FORM_NOVICELINE_TWO_DELBL_VAR
+#: LYMessages.c:183
+#, c-format
+msgid " %s to delete text in field, [Backspace] to delete a character "
msgstr ""
#. mailto
-#: LYMessages.c:152
+#: LYMessages.c:186
msgid "Malformed mailto form submission! Cancelled!"
msgstr ""
-#: LYMessages.c:153
+#: LYMessages.c:187
msgid "Warning! Control codes in mail address replaced by ?"
msgstr ""
-#: LYMessages.c:154
+#: LYMessages.c:188
msgid "Mail disallowed! Cannot submit."
msgstr ""
-#: LYMessages.c:155
+#: LYMessages.c:189
msgid "Mailto form submission failed!"
msgstr ""
-#: LYMessages.c:156
+#: LYMessages.c:190
msgid "Mailto form submission Cancelled!!!"
msgstr ""
-#: LYMessages.c:157
+#: LYMessages.c:191
msgid "Sending form content..."
msgstr ""
-#: LYMessages.c:158
+#: LYMessages.c:192
msgid "No email address is present in mailto URL!"
msgstr ""
#. #define MAILTO_URL_TEMPOPEN_FAILED
-#: LYMessages.c:160
+#: LYMessages.c:194
msgid "Unable to open temporary file for mailto URL!"
msgstr ""
-#: LYMessages.c:161
-msgid "Comment request cancelled!!!"
-msgstr ""
-
#. #define INC_ORIG_MSG_PROMPT
-#: LYMessages.c:163
+#: LYMessages.c:196
msgid "Do you wish to include the original message?"
msgstr ""
#. #define INC_PREPARSED_MSG_PROMPT
-#: LYMessages.c:165
+#: LYMessages.c:198
msgid "Do you wish to include the preparsed source?"
msgstr ""
#. #define SPAWNING_EDITOR_FOR_MAIL
-#: LYMessages.c:167
+#: LYMessages.c:200
msgid "Spawning your selected editor to edit mail message"
msgstr ""
#. #define ERROR_SPAWNING_EDITOR
-#: LYMessages.c:169
+#: LYMessages.c:202
msgid "Error spawning editor, check your editor definition in the options menu"
msgstr ""
-#: LYMessages.c:170
+#: LYMessages.c:203
msgid "Send this comment?"
msgstr ""
-#: LYMessages.c:171
+#: LYMessages.c:204
msgid "Send this message?"
msgstr ""
-#: LYMessages.c:172
+#: LYMessages.c:205
msgid "Sending your message..."
msgstr ""
-#: LYMessages.c:173
+#: LYMessages.c:206
msgid "Sending your comment:"
msgstr ""
#. textarea
-#: LYMessages.c:176
+#: LYMessages.c:209
msgid "Not in a TEXTAREA; cannot use external editor."
msgstr ""
-#: LYMessages.c:179
+#: LYMessages.c:210
+msgid "Not in a TEXTAREA; cannot use command."
+msgstr ""
+
+#: LYMessages.c:213
msgid "file: ACTIONs are disallowed!"
msgstr ""
#. #define FILE_SERVED_LINKS_DISALLOWED
-#: LYMessages.c:181
+#: LYMessages.c:215
msgid "file: URLs via served links are disallowed!"
msgstr ""
-#: LYMessages.c:182
+#: LYMessages.c:216
+msgid "Access to local files denied."
+msgstr ""
+
+#: LYMessages.c:217
msgid "file: URLs via bookmarks are disallowed!"
msgstr ""
#. #define SPECIAL_VIA_EXTERNAL_DISALLOWED
-#: LYMessages.c:184
+#: LYMessages.c:219
msgid "This special URL is not allowed in external documents!"
msgstr ""
-#: LYMessages.c:185
+#: LYMessages.c:220
msgid "Press <return> to return to Lynx."
msgstr ""
#. #define SPAWNING_MSG
-#: LYMessages.c:188
+#: LYMessages.c:223
msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
msgstr ""
#. #define SPAWNING_MSG
-#: LYMessages.c:192
+#: LYMessages.c:227
msgid "Type EXIT to return to Lynx.\n"
msgstr ""
-#. UNIX
#. #define SPAWNING_MSG
-#: LYMessages.c:195
+#: LYMessages.c:230
msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
msgstr ""
-#. VMS
-#: LYMessages.c:198
+#: LYMessages.c:233
msgid "Spawning is currently disabled."
msgstr ""
-#: LYMessages.c:199
+#: LYMessages.c:234
msgid "The 'd'ownload command is currently disabled."
msgstr ""
-#: LYMessages.c:200
+#: LYMessages.c:235
msgid "You cannot download an input field."
msgstr ""
-#: LYMessages.c:201
+#: LYMessages.c:236
msgid "Form has a mailto action! Cannot download."
msgstr ""
-#: LYMessages.c:202
+#: LYMessages.c:237
msgid "You cannot download a mailto: link."
msgstr ""
-#: LYMessages.c:203
+#: LYMessages.c:238
msgid "You cannot download cookies."
msgstr ""
-#: LYMessages.c:204
+#: LYMessages.c:239
msgid "You cannot download a printing option."
msgstr ""
-#: LYMessages.c:205
+#: LYMessages.c:240
msgid "You cannot download an upload option."
msgstr ""
-#: LYMessages.c:206
+#: LYMessages.c:241
msgid "You cannot download an permit option."
msgstr ""
-#: LYMessages.c:207
+#: LYMessages.c:242
msgid "This special URL cannot be downloaded!"
msgstr ""
-#: LYMessages.c:208
+#: LYMessages.c:243
msgid "Nothing to download."
msgstr ""
-#: LYMessages.c:209
+#: LYMessages.c:244
msgid "Trace ON!"
msgstr ""
-#: LYMessages.c:210
+#: LYMessages.c:245
msgid "Trace OFF!"
msgstr ""
#. #define CLICKABLE_IMAGES_ON
-#: LYMessages.c:212
+#: LYMessages.c:247
msgid "Links will be included for all images! Reloading..."
msgstr ""
#. #define CLICKABLE_IMAGES_OFF
-#: LYMessages.c:214
+#: LYMessages.c:249
msgid "Standard image handling restored! Reloading..."
msgstr ""
#. #define PSEUDO_INLINE_ALTS_ON
-#: LYMessages.c:216
-msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
+#: LYMessages.c:251
+msgid ""
+"Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
msgstr ""
#. #define PSEUDO_INLINE_ALTS_OFF
-#: LYMessages.c:218
+#: LYMessages.c:253
msgid "Inlines without an ALT string specified will be ignored! Reloading..."
msgstr ""
-#: LYMessages.c:219
+#: LYMessages.c:254
msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
msgstr ""
-#: LYMessages.c:220
+#: LYMessages.c:255
msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
msgstr ""
#. #define HEAD_D_L_OR_CANCEL
-#: LYMessages.c:222
+#: LYMessages.c:257
msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
msgstr ""
#. #define HEAD_D_OR_CANCEL
-#: LYMessages.c:224
+#: LYMessages.c:259
msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
msgstr ""
-#: LYMessages.c:225
+#: LYMessages.c:260
msgid "Sorry, the document is not an http URL."
msgstr ""
-#: LYMessages.c:226
+#: LYMessages.c:261
msgid "Sorry, the link is not an http URL."
msgstr ""
-#: LYMessages.c:227
+#: LYMessages.c:262
msgid "Sorry, the ACTION for this form is disabled."
msgstr ""
#. #define FORM_ACTION_NOT_HTTP_URL
-#: LYMessages.c:229
+#: LYMessages.c:264
msgid "Sorry, the ACTION for this form is not an http URL."
msgstr ""
-#: LYMessages.c:230
+#: LYMessages.c:265
msgid "Not an http URL or form ACTION!"
msgstr ""
-#: LYMessages.c:231
+#: LYMessages.c:266
msgid "This special URL cannot be a form ACTION!"
msgstr ""
-#: LYMessages.c:232
+#: LYMessages.c:267
msgid "URL is not in starting realm!"
msgstr ""
-#: LYMessages.c:233
+#: LYMessages.c:268
msgid "News posting is disabled!"
msgstr ""
-#: LYMessages.c:234
+#: LYMessages.c:269
msgid "File management support is disabled!"
msgstr ""
-#: LYMessages.c:235
+#: LYMessages.c:270
msgid "No jump file is currently available."
msgstr ""
-#: LYMessages.c:236
+#: LYMessages.c:271
msgid "Jump to (use '?' for list): "
msgstr ""
-#: LYMessages.c:237
+#: LYMessages.c:272
msgid "Jumping to a shortcut URL is disallowed!"
msgstr ""
-#: LYMessages.c:238
+#: LYMessages.c:273
msgid "Random URL is disallowed! Use a shortcut."
msgstr ""
-#: LYMessages.c:239
+#: LYMessages.c:274
msgid "No random URLs have been used thus far."
msgstr ""
-#: LYMessages.c:240
+#: LYMessages.c:275
msgid "Bookmark features are currently disabled."
msgstr ""
-#: LYMessages.c:241
+#: LYMessages.c:276
msgid "Execution via bookmarks is disabled."
msgstr ""
#. #define BOOKMARK_FILE_NOT_DEFINED
-#: LYMessages.c:243
+#: LYMessages.c:278
+#, c-format
msgid "Bookmark file is not defined. Use %s to see options."
msgstr ""
#. #define NO_TEMP_FOR_HOTLIST
-#: LYMessages.c:245
+#: LYMessages.c:280
msgid "Unable to open tempfile for X Mosaic hotlist conversion."
msgstr ""
-#: LYMessages.c:246
+#: LYMessages.c:281
msgid "ERROR - unable to open bookmark file."
msgstr ""
#. #define BOOKMARK_OPEN_FAILED_FOR_DEL
-#: LYMessages.c:248
+#: LYMessages.c:283
msgid "Unable to open bookmark file for deletion of link."
msgstr ""
#. #define BOOKSCRA_OPEN_FAILED_FOR_DEL
-#: LYMessages.c:250
+#: LYMessages.c:285
msgid "Unable to open scratch file for deletion of link."
msgstr ""
-#: LYMessages.c:252
+#: LYMessages.c:287
msgid "Error renaming scratch file."
msgstr ""
-#: LYMessages.c:254
+#: LYMessages.c:289
msgid "Error renaming temporary file."
msgstr ""
#. #define BOOKTEMP_COPY_FAIL
-#: LYMessages.c:256
+#: LYMessages.c:291
msgid "Unable to copy temporary file for deletion of link."
msgstr ""
#. #define BOOKTEMP_REOPEN_FAIL_FOR_DEL
-#: LYMessages.c:258
+#: LYMessages.c:293
msgid "Unable to reopen temporary file for deletion of link."
msgstr ""
-#. VMS
#. #define BOOKMARK_LINK_NOT_ONE_LINE
-#: LYMessages.c:261
+#: LYMessages.c:296
msgid "Link is not by itself all on one line in bookmark file."
msgstr ""
-#: LYMessages.c:262
+#: LYMessages.c:297
msgid "Bookmark deletion failed."
msgstr ""
#. #define BOOKMARKS_NOT_TRAVERSED
-#: LYMessages.c:264
+#: LYMessages.c:299
msgid "Bookmark files cannot be traversed (only http URLs)."
msgstr ""
#. #define BOOKMARKS_NOT_OPEN
-#: LYMessages.c:266
+#: LYMessages.c:301
msgid "Unable to open bookmark file, use 'a' to save a link first"
msgstr ""
-#: LYMessages.c:267
+#: LYMessages.c:302
msgid "There are no links in this bookmark file!"
msgstr ""
#. #define BOOK_D_L_OR_CANCEL
-#: LYMessages.c:269
+#: LYMessages.c:304
msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
msgstr ""
-#: LYMessages.c:270
+#: LYMessages.c:305
msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
msgstr ""
-#: LYMessages.c:271
+#: LYMessages.c:306
msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
msgstr ""
#. #define NOBOOK_POST_FORM
-#: LYMessages.c:273
+#: LYMessages.c:308
msgid "Documents from forms with POST content cannot be saved as bookmarks."
msgstr ""
-#: LYMessages.c:274
+#: LYMessages.c:309
msgid "Cannot save form fields/links"
msgstr ""
#. #define NOBOOK_HSML
-#: LYMessages.c:276
+#: LYMessages.c:311
msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
msgstr ""
#. #define CONFIRM_BOOKMARK_DELETE
-#: LYMessages.c:278
+#: LYMessages.c:313
msgid "Do you really want to delete this link from your bookmark file?"
msgstr ""
-#: LYMessages.c:279
+#: LYMessages.c:314
msgid "Malformed address."
msgstr ""
#. #define HISTORICAL_ON_MINIMAL_OFF
-#: LYMessages.c:281
+#: LYMessages.c:316
msgid "Historical comment parsing ON (Minimal is overridden)!"
msgstr ""
#. #define HISTORICAL_OFF_MINIMAL_ON
-#: LYMessages.c:283
+#: LYMessages.c:318
msgid "Historical comment parsing OFF (Minimal is in effect)!"
msgstr ""
#. #define HISTORICAL_ON_VALID_OFF
-#: LYMessages.c:285
+#: LYMessages.c:320
msgid "Historical comment parsing ON (Valid is overridden)!"
msgstr ""
#. #define HISTORICAL_OFF_VALID_ON
-#: LYMessages.c:287
+#: LYMessages.c:322
msgid "Historical comment parsing OFF (Valid is in effect)!"
msgstr ""
#. #define MINIMAL_ON_IN_EFFECT
-#: LYMessages.c:289
+#: LYMessages.c:324
msgid "Minimal comment parsing ON (and in effect)!"
msgstr ""
#. #define MINIMAL_OFF_VALID_ON
-#: LYMessages.c:291
+#: LYMessages.c:326
msgid "Minimal comment parsing OFF (Valid is in effect)!"
msgstr ""
#. #define MINIMAL_ON_BUT_HISTORICAL
-#: LYMessages.c:293
+#: LYMessages.c:328
msgid "Minimal comment parsing ON (but Historical is in effect)!"
msgstr ""
#. #define MINIMAL_OFF_HISTORICAL_ON
-#: LYMessages.c:295
+#: LYMessages.c:330
msgid "Minimal comment parsing OFF (Historical is in effect)!"
msgstr ""
-#: LYMessages.c:296
+#: LYMessages.c:331
msgid "Soft double-quote parsing ON!"
msgstr ""
-#: LYMessages.c:297
+#: LYMessages.c:332
msgid "Soft double-quote parsing OFF!"
msgstr ""
-#: LYMessages.c:298
+#: LYMessages.c:333
msgid "Now using TagSoup parsing of HTML."
msgstr ""
-#: LYMessages.c:299
+#: LYMessages.c:334
msgid "Now using SortaSGML parsing of HTML!"
msgstr ""
-#: LYMessages.c:300
+#: LYMessages.c:335
msgid "You are already at the end of this document."
msgstr ""
-#: LYMessages.c:301
+#: LYMessages.c:336
msgid "You are already at the beginning of this document."
msgstr ""
-#: LYMessages.c:302
+#: LYMessages.c:337
+#, c-format
msgid "You are already at page %d of this document."
msgstr ""
-#: LYMessages.c:303
+#: LYMessages.c:338
+#, c-format
msgid "Link number %d already is current."
msgstr ""
-#: LYMessages.c:304
+#: LYMessages.c:339
msgid "You are already at the first document"
msgstr ""
-#: LYMessages.c:305
+#: LYMessages.c:340
msgid "There are no links above this line of the document."
msgstr ""
-#: LYMessages.c:306
+#: LYMessages.c:341
msgid "There are no links below this line of the document."
msgstr ""
#. #define MAXLEN_REACHED_DEL_OR_MOV
-#: LYMessages.c:308
+#: LYMessages.c:343
msgid "Maximum length reached! Delete text or move off field."
msgstr ""
#. #define NOT_ON_SUBMIT_OR_LINK
-#: LYMessages.c:310
+#: LYMessages.c:345
msgid "You are not on a form submission button or normal link."
msgstr ""
#. #define NEED_CHECKED_RADIO_BUTTON
-#: LYMessages.c:312
+#: LYMessages.c:347
msgid "One radio button must be checked at all times!"
msgstr ""
-#: LYMessages.c:313
+#: LYMessages.c:348
+msgid "No submit button for this form, submit single text field?"
+msgstr ""
+
+#: LYMessages.c:349
msgid "Do you want to go back to the previous document?"
msgstr ""
-#: LYMessages.c:314
+#: LYMessages.c:350
msgid "Use arrows or tab to move off of field."
msgstr ""
#. #define ENTER_TEXT_ARROWS_OR_TAB
-#: LYMessages.c:316
+#: LYMessages.c:352
msgid "Enter text. Use arrows or tab to move off of field."
msgstr ""
-#: LYMessages.c:317
+#: LYMessages.c:353
msgid "** Bad HTML!! No form action defined. **"
msgstr ""
-#: LYMessages.c:318
+#: LYMessages.c:354
msgid "Bad HTML!! Unable to create popup window!"
msgstr ""
-#: LYMessages.c:319
+#: LYMessages.c:355
msgid "Unable to create popup window!"
msgstr ""
-#: LYMessages.c:320
+#: LYMessages.c:356
msgid "Goto a random URL is disallowed!"
msgstr ""
-#: LYMessages.c:321
+#: LYMessages.c:357
msgid "Goto a non-http URL is disallowed!"
msgstr ""
-#: LYMessages.c:322
-msgid "You are not allowed to goto \"cso:\" URLs"
-msgstr ""
-
-#: LYMessages.c:323
-msgid "You are not allowed to goto \"file:\" URLs"
-msgstr ""
-
-#: LYMessages.c:324
-msgid "You are not allowed to goto \"finger:\" URLs"
-msgstr ""
-
-#: LYMessages.c:325
-msgid "You are not allowed to goto \"ftp:\" URLs"
-msgstr ""
-
-#: LYMessages.c:326
-msgid "You are not allowed to goto \"gopher:\" URLs"
-msgstr ""
-
-#: LYMessages.c:327
-msgid "You are not allowed to goto \"http:\" URLs"
-msgstr ""
-
-#: LYMessages.c:328
-msgid "You are not allowed to goto \"https:\" URLs"
-msgstr ""
-
-#: LYMessages.c:329
-msgid "You are not allowed to goto \"lynxcgi:\" URLs"
-msgstr ""
-
-#: LYMessages.c:330
-msgid "You are not allowed to goto \"lynxexec:\" URLs"
-msgstr ""
-
-#: LYMessages.c:331
-msgid "You are not allowed to goto \"lynxprog:\" URLs"
-msgstr ""
-
-#: LYMessages.c:332
-msgid "You are not allowed to goto \"mailto:\" URLs"
-msgstr ""
-
-#: LYMessages.c:333
-msgid "You are not allowed to goto \"news:\" URLs"
-msgstr ""
-
-#: LYMessages.c:334
-msgid "You are not allowed to goto \"nntp:\" URLs"
-msgstr ""
-
-#: LYMessages.c:335
-msgid "You are not allowed to goto \"rlogin:\" URLs"
-msgstr ""
-
-#: LYMessages.c:336
-msgid "You are not allowed to goto \"snews:\" URLs"
-msgstr ""
-
-#: LYMessages.c:337
-msgid "You are not allowed to goto \"telnet:\" URLs"
-msgstr ""
-
-#: LYMessages.c:338
-msgid "You are not allowed to goto \"tn3270:\" URLs"
-msgstr ""
-
-#: LYMessages.c:339
-msgid "You are not allowed to goto \"wais:\" URLs"
-msgstr ""
-
-#: LYMessages.c:340
-msgid "This special URL is not allowed as a goto!"
+#: LYMessages.c:358
+#, c-format
+msgid "You are not allowed to goto \"%s\" URLs"
msgstr ""
-#: LYMessages.c:341
+#: LYMessages.c:359
msgid "URL to open: "
msgstr ""
-#: LYMessages.c:342
+#: LYMessages.c:360
msgid "Edit the current Goto URL: "
msgstr ""
-#: LYMessages.c:343
+#: LYMessages.c:361
msgid "Edit the previous Goto URL: "
msgstr ""
-#: LYMessages.c:344
+#: LYMessages.c:362
msgid "Edit a previous Goto URL: "
msgstr ""
-#: LYMessages.c:345
+#: LYMessages.c:363
msgid "Current document has POST data."
msgstr ""
-#: LYMessages.c:346
+#: LYMessages.c:364
msgid "Edit this document's URL: "
msgstr ""
-#: LYMessages.c:347
+#: LYMessages.c:365
msgid "Edit the current link's URL: "
msgstr ""
-#: LYMessages.c:348
+#: LYMessages.c:366
msgid "You cannot edit File Management URLs"
msgstr ""
-#: LYMessages.c:349
+#: LYMessages.c:367
msgid "Enter a database query: "
msgstr ""
-#: LYMessages.c:350
+#: LYMessages.c:368
msgid "Enter a whereis query: "
msgstr ""
-#: LYMessages.c:351
+#: LYMessages.c:369
msgid "Edit the current query: "
msgstr ""
-#: LYMessages.c:352
+#: LYMessages.c:370
msgid "Edit the previous query: "
msgstr ""
-#: LYMessages.c:353
+#: LYMessages.c:371
msgid "Edit a previous query: "
msgstr ""
#. #define USE_C_R_TO_RESUB_CUR_QUERY
-#: LYMessages.c:355
+#: LYMessages.c:373
msgid "Use Control-R to resubmit the current query."
msgstr ""
-#: LYMessages.c:356
+#: LYMessages.c:374
msgid "Edit the current shortcut: "
msgstr ""
-#: LYMessages.c:357
+#: LYMessages.c:375
msgid "Edit the previous shortcut: "
msgstr ""
-#: LYMessages.c:358
+#: LYMessages.c:376
msgid "Edit a previous shortcut: "
msgstr ""
-#: LYMessages.c:359
+#: LYMessages.c:377
+#, c-format
msgid "Key '%c' is not mapped to a jump file!"
msgstr ""
-#: LYMessages.c:360
+#: LYMessages.c:378
msgid "Cannot locate jump file!"
msgstr ""
-#: LYMessages.c:361
+#: LYMessages.c:379
msgid "Cannot open jump file!"
msgstr ""
-#: LYMessages.c:362
+#: LYMessages.c:380
msgid "Error reading jump file!"
msgstr ""
-#: LYMessages.c:363
+#: LYMessages.c:381
msgid "Out of memory reading jump file!"
msgstr ""
-#: LYMessages.c:364
+#: LYMessages.c:382
msgid "Out of memory reading jump table!"
msgstr ""
-#: LYMessages.c:365
+#: LYMessages.c:383
msgid "No index is currently available."
msgstr ""
#. #define CONFIRM_MAIN_SCREEN
-#: LYMessages.c:367
+#: LYMessages.c:385
msgid "Do you really want to go to the Main screen?"
msgstr ""
-#: LYMessages.c:368
+#: LYMessages.c:386
msgid "You are already at main screen!"
msgstr ""
#. #define NOT_ISINDEX
-#: LYMessages.c:370
-msgid "Not a searchable indexed document -- press '/' to search for a text string"
+#: LYMessages.c:388
+msgid ""
+"Not a searchable indexed document -- press '/' to search for a text string"
msgstr ""
#. #define NO_OWNER
-#: LYMessages.c:372
+#: LYMessages.c:390
msgid "No owner is defined for this file so you cannot send a comment"
msgstr ""
-#: LYMessages.c:373
+#: LYMessages.c:391
+#, c-format
msgid "No owner is defined. Use %s?"
msgstr ""
-#: LYMessages.c:374
+#: LYMessages.c:392
msgid "Do you wish to send a comment?"
msgstr ""
-#: LYMessages.c:375
+#: LYMessages.c:393
msgid "Mail is disallowed so you cannot send a comment"
msgstr ""
-#: LYMessages.c:376
+#: LYMessages.c:394
msgid "The 'e'dit command is currently disabled."
msgstr ""
-#: LYMessages.c:377
+#: LYMessages.c:395
+msgid "External editing is currently disabled."
+msgstr ""
+
+#: LYMessages.c:396
msgid "System error - failure to get status."
msgstr ""
-#: LYMessages.c:378
+#: LYMessages.c:397
msgid "No editor is defined!"
msgstr ""
-#: LYMessages.c:379
+#: LYMessages.c:398
msgid "The 'p'rint command is currently disabled."
msgstr ""
-#: LYMessages.c:380
+#: LYMessages.c:399
msgid "Document has no Toolbar links or Banner."
msgstr ""
-#: LYMessages.c:381
+#: LYMessages.c:400
msgid "Unable to open traversal file."
msgstr ""
-#: LYMessages.c:382
+#: LYMessages.c:401
msgid "Unable to open traversal found file."
msgstr ""
-#: LYMessages.c:383
+#: LYMessages.c:402
msgid "Unable to open reject file."
msgstr ""
-#: LYMessages.c:384
+#: LYMessages.c:403
msgid "Unable to open traversal errors output file"
msgstr ""
-#: LYMessages.c:385
+#: LYMessages.c:404
msgid "TRAVERSAL WAS INTERRUPTED"
msgstr ""
-#: LYMessages.c:386
+#: LYMessages.c:405
msgid "Follow link (or goto link or page) number: "
msgstr ""
-#: LYMessages.c:387
+#: LYMessages.c:406
msgid "Select option (or page) number: "
msgstr ""
-#: LYMessages.c:388
-msgid "Option choice (or page) number: "
-msgstr ""
-
-#: LYMessages.c:389
+#: LYMessages.c:407
+#, c-format
msgid "Option number %d already is current."
msgstr ""
-#: LYMessages.c:390
-msgid "Choice number %d already is current."
-msgstr ""
-
#. #define ALREADY_AT_OPTION_END
-#: LYMessages.c:392
+#: LYMessages.c:409
msgid "You are already at the end of this option list."
msgstr ""
-#. #define ALREADY_AT_CHOICE_END
-#: LYMessages.c:394
-msgid "You are already at the end of this choice list."
-msgstr ""
-
#. #define ALREADY_AT_OPTION_BEGIN
-#: LYMessages.c:396
+#: LYMessages.c:411
msgid "You are already at the beginning of this option list."
msgstr ""
-#. #define ALREADY_AT_CHOICE_BEGIN
-#: LYMessages.c:398
-msgid "You are already at the beginning of this choice list."
-msgstr ""
-
#. #define ALREADY_AT_OPTION_PAGE
-#: LYMessages.c:400
+#: LYMessages.c:413
+#, c-format
msgid "You are already at page %d of this option list."
msgstr ""
-#. #define ALREADY_AT_CHOICE_PAGE
-#: LYMessages.c:402
-msgid "You are already at page %d of this choice list."
-msgstr ""
-
-#: LYMessages.c:403
+#: LYMessages.c:414
msgid "You have entered an invalid option number."
msgstr ""
-#: LYMessages.c:404
-msgid "You have entered an invalid choice number."
-msgstr ""
-
-#: LYMessages.c:405
+#: LYMessages.c:415
msgid "** Bad HTML!! Use -trace to diagnose. **"
msgstr ""
-#: LYMessages.c:406
+#: LYMessages.c:416
msgid "Give name of file to save in"
msgstr ""
-#: LYMessages.c:407
+#: LYMessages.c:417
msgid "Can't save data to file -- please run WWW locally"
msgstr ""
-#: LYMessages.c:408
+#: LYMessages.c:418
msgid "Can't open temporary file!"
msgstr ""
-#: LYMessages.c:409
+#: LYMessages.c:419
msgid "Can't open output file! Cancelling!"
msgstr ""
-#: LYMessages.c:410
+#: LYMessages.c:420
msgid "Execution is disabled."
msgstr ""
#. #define EXECUTION_DISABLED_FOR_FILE
-#: LYMessages.c:412
+#: LYMessages.c:422
+#, c-format
msgid "Execution is not enabled for this file. See the Options menu (use %s)."
msgstr ""
#. #define EXECUTION_NOT_COMPILED
-#: LYMessages.c:414
+#: LYMessages.c:424
msgid "Execution capabilities are not compiled into this version."
msgstr ""
-#: LYMessages.c:415
+#: LYMessages.c:425
msgid "This file cannot be displayed on this terminal."
msgstr ""
#. #define CANNOT_DISPLAY_FILE_D_OR_C
-#: LYMessages.c:417
+#: LYMessages.c:427
msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
msgstr ""
-#: LYMessages.c:418
+#: LYMessages.c:428
+#, c-format
msgid "%s D)ownload, or C)ancel"
msgstr ""
-#: LYMessages.c:419
+#: LYMessages.c:429
msgid "Cancelling file."
msgstr ""
-#: LYMessages.c:420
+#: LYMessages.c:430
msgid "Retrieving file. - PLEASE WAIT -"
msgstr ""
-#: LYMessages.c:421
+#: LYMessages.c:431
msgid "Enter a filename: "
msgstr ""
-#: LYMessages.c:422
+#: LYMessages.c:432
msgid "Edit the previous filename: "
msgstr ""
-#: LYMessages.c:423
+#: LYMessages.c:433
msgid "Edit a previous filename: "
msgstr ""
-#: LYMessages.c:424
+#: LYMessages.c:434
msgid "Enter a new filename: "
msgstr ""
-#: LYMessages.c:425
+#: LYMessages.c:435
msgid "File name may not begin with a dot."
msgstr ""
-#: LYMessages.c:427
+#: LYMessages.c:437
msgid "File exists. Create higher version?"
msgstr ""
-#: LYMessages.c:429
+#: LYMessages.c:439
msgid "File exists. Overwrite?"
msgstr ""
-#. VMS
-#: LYMessages.c:431
+#: LYMessages.c:441
msgid "Cannot write to file."
msgstr ""
-#: LYMessages.c:432
+#: LYMessages.c:442
msgid "ERROR! - download command is misconfigured."
msgstr ""
-#: LYMessages.c:433
+#: LYMessages.c:443
msgid "Unable to download file."
msgstr ""
-#: LYMessages.c:434
+#: LYMessages.c:444
+msgid "Reading directory..."
+msgstr ""
+
+#: LYMessages.c:445
msgid "Building directory listing..."
msgstr ""
-#: LYMessages.c:435
+#: LYMessages.c:446
msgid "Saving..."
msgstr ""
-#: LYMessages.c:436
+#: LYMessages.c:447
+#, c-format
msgid "Could not edit file '%s'."
msgstr ""
-#: LYMessages.c:437
+#: LYMessages.c:448
+msgid "Unable to access document!"
+msgstr ""
+
+#: LYMessages.c:449
msgid "Could not access file."
msgstr ""
-#: LYMessages.c:438
+#: LYMessages.c:450
msgid "Could not access directory."
msgstr ""
-#: LYMessages.c:439
+#: LYMessages.c:451
msgid "Could not load data."
msgstr ""
#. #define CANNOT_EDIT_REMOTE_FILES
-#: LYMessages.c:441
+#: LYMessages.c:453
msgid "Lynx cannot currently (e)dit remote WWW files."
msgstr ""
#. #define CANNOT_EDIT_FIELD
-#: LYMessages.c:443
+#: LYMessages.c:455
msgid "This field cannot be (e)dited with an external editor."
msgstr ""
-#: LYMessages.c:444
+#: LYMessages.c:456
msgid "Bad rule"
msgstr ""
-#: LYMessages.c:445
+#: LYMessages.c:457
msgid "Insufficient operands:"
msgstr ""
-#: LYMessages.c:446
+#: LYMessages.c:458
msgid "You are not authorized to edit this file."
msgstr ""
-#: LYMessages.c:447
+#: LYMessages.c:459
msgid "Title: "
msgstr ""
-#: LYMessages.c:448
+#: LYMessages.c:460
msgid "Subject: "
msgstr ""
-#: LYMessages.c:449
+#: LYMessages.c:461
msgid "Username: "
msgstr ""
-#: LYMessages.c:450
+#: LYMessages.c:462
msgid "Password: "
msgstr ""
-#: LYMessages.c:451
+#: LYMessages.c:463
msgid "lynx: Username and Password required!!!"
msgstr ""
-#: LYMessages.c:452
+#: LYMessages.c:464
msgid "lynx: Password required!!!"
msgstr ""
-#: LYMessages.c:453
+#: LYMessages.c:465
msgid "Clear all authorization info for this session?"
msgstr ""
-#: LYMessages.c:454
+#: LYMessages.c:466
msgid "Authorization info cleared."
msgstr ""
-#: LYMessages.c:455
+#: LYMessages.c:467
msgid "Authorization failed. Retry?"
msgstr ""
-#: LYMessages.c:456
-msgid "cgi support has been disabled by system administrator."
+#: LYMessages.c:468
+msgid "cgi support has been disabled."
msgstr ""
#. #define CGI_NOT_COMPILED
-#: LYMessages.c:458
+#: LYMessages.c:470
msgid "Lynxcgi capabilities are not compiled into this version."
msgstr ""
-#: LYMessages.c:459
+#: LYMessages.c:471
+#, c-format
msgid "Sorry, no known way of converting %s to %s."
msgstr ""
-#: LYMessages.c:460
+#: LYMessages.c:472
msgid "Unable to set up connection."
msgstr ""
-#: LYMessages.c:461
+#: LYMessages.c:473
msgid "Unable to make connection"
msgstr ""
#. #define MALFORMED_EXEC_REQUEST
-#: LYMessages.c:463
+#: LYMessages.c:475
msgid "Executable link rejected due to malformed request."
msgstr ""
#. #define BADCHAR_IN_EXEC_LINK
-#: LYMessages.c:465
+#: LYMessages.c:477
+#, c-format
msgid "Executable link rejected due to `%c' character."
msgstr ""
#. #define RELPATH_IN_EXEC_LINK
-#: LYMessages.c:467
+#: LYMessages.c:479
msgid "Executable link rejected due to relative path string ('../')."
msgstr ""
#. #define BADLOCPATH_IN_EXEC_LINK
-#: LYMessages.c:469
+#: LYMessages.c:481
msgid "Executable link rejected due to location or path."
msgstr ""
-#: LYMessages.c:470
+#: LYMessages.c:482
msgid "Mail access is disabled!"
msgstr ""
#. #define ACCESS_ONLY_LOCALHOST
-#: LYMessages.c:472
+#: LYMessages.c:484
msgid "Only files and servers on the local host can be accessed."
msgstr ""
-#: LYMessages.c:473
+#: LYMessages.c:485
msgid "Telnet access is disabled!"
msgstr ""
#. #define TELNET_PORT_SPECS_DISABLED
-#: LYMessages.c:475
+#: LYMessages.c:487
msgid "Telnet port specifications are disabled."
msgstr ""
-#: LYMessages.c:476
+#: LYMessages.c:488
msgid "USENET news access is disabled!"
msgstr ""
-#: LYMessages.c:477
+#: LYMessages.c:489
msgid "Rlogin access is disabled!"
msgstr ""
-#: LYMessages.c:478
+#: LYMessages.c:490
msgid "Ftp access is disabled!"
msgstr ""
-#: LYMessages.c:479
+#: LYMessages.c:491
msgid "There are no references from this document."
msgstr ""
-#: LYMessages.c:480
+#: LYMessages.c:492
msgid "There are only hidden links from this document."
msgstr ""
-#: LYMessages.c:482
+#: LYMessages.c:494
msgid "Unable to open command file."
msgstr ""
-#. VMS
-#: LYMessages.c:484
+#: LYMessages.c:496
msgid "News Post Cancelled!!!"
msgstr ""
#. #define SPAWNING_EDITOR_FOR_NEWS
-#: LYMessages.c:486
+#: LYMessages.c:498
msgid "Spawning your selected editor to edit news message"
msgstr ""
-#: LYMessages.c:487
+#: LYMessages.c:499
msgid "Post this message?"
msgstr ""
-#: LYMessages.c:488
+#: LYMessages.c:500
+#, c-format
msgid "Append '%s'?"
msgstr ""
-#: LYMessages.c:489
+#: LYMessages.c:501
msgid "Posting to newsgroup(s)..."
msgstr ""
-#: LYMessages.c:491
+#: LYMessages.c:503
msgid "*** You have unread mail. ***"
msgstr ""
-#: LYMessages.c:493
+#: LYMessages.c:505
msgid "*** You have mail. ***"
msgstr ""
-#. VMS
-#: LYMessages.c:495
+#: LYMessages.c:507
msgid "*** You have new mail. ***"
msgstr ""
-#: LYMessages.c:496
+#: LYMessages.c:508
msgid "File insert cancelled!!!"
msgstr ""
-#: LYMessages.c:497
+#: LYMessages.c:509
+msgid "Not enough memory for file!"
+msgstr ""
+
+#: LYMessages.c:510
+msgid "Can't open file for reading."
+msgstr ""
+
+#: LYMessages.c:511
msgid "File does not exist."
msgstr ""
-#: LYMessages.c:498
+#: LYMessages.c:512
msgid "File does not exist - reenter or cancel:"
msgstr ""
-#: LYMessages.c:499
+#: LYMessages.c:513
msgid "File is not readable."
msgstr ""
-#: LYMessages.c:500
+#: LYMessages.c:514
msgid "File is not readable - reenter or cancel:"
msgstr ""
-#: LYMessages.c:501
+#: LYMessages.c:515
msgid "Nothing to insert - file is 0-length."
msgstr ""
-#: LYMessages.c:502
+#: LYMessages.c:516
msgid "Save request cancelled!!!"
msgstr ""
-#: LYMessages.c:503
+#: LYMessages.c:517
msgid "Mail request cancelled!!!"
msgstr ""
#. #define CONFIRM_MAIL_SOURCE_PREPARSED
-#: LYMessages.c:505
+#: LYMessages.c:519
msgid "Viewing preparsed source. Are you sure you want to mail it?"
msgstr ""
-#: LYMessages.c:506
+#: LYMessages.c:520
msgid "Please wait..."
msgstr ""
-#: LYMessages.c:507
+#: LYMessages.c:521
msgid "Mailing file. Please wait..."
msgstr ""
-#: LYMessages.c:508
+#: LYMessages.c:522
msgid "ERROR - Unable to mail file"
msgstr ""
#. #define CONFIRM_LONG_SCREEN_PRINT
-#: LYMessages.c:510
+#: LYMessages.c:524
+#, c-format
msgid "File is %d screens long. Are you sure you want to print?"
msgstr ""
-#: LYMessages.c:511
+#: LYMessages.c:525
msgid "Print request cancelled!!!"
msgstr ""
-#: LYMessages.c:512
+#: LYMessages.c:526
msgid "Press <return> to begin: "
msgstr ""
-#: LYMessages.c:513
+#: LYMessages.c:527
msgid "Press <return> to finish: "
msgstr ""
#. #define CONFIRM_LONG_PAGE_PRINT
-#: LYMessages.c:515
+#: LYMessages.c:529
+#, c-format
msgid "File is %d pages long. Are you sure you want to print?"
msgstr ""
#. #define CHECK_PRINTER
-#: LYMessages.c:517
+#: LYMessages.c:531
msgid "Be sure your printer is on-line. Press <return> to start printing:"
msgstr ""
-#: LYMessages.c:518
+#: LYMessages.c:532
msgid "ERROR - Unable to allocate file space!!!"
msgstr ""
-#: LYMessages.c:519
+#: LYMessages.c:533
msgid "Unable to open tempfile"
msgstr ""
-#: LYMessages.c:520
+#: LYMessages.c:534
msgid "Unable to open print options file"
msgstr ""
-#: LYMessages.c:521
+#: LYMessages.c:535
msgid "Printing file. Please wait..."
msgstr ""
-#: LYMessages.c:522
+#: LYMessages.c:536
msgid "Please enter a valid internet mail address: "
msgstr ""
-#: LYMessages.c:523
+#: LYMessages.c:537
msgid "ERROR! - printer is misconfigured!"
msgstr ""
-#: LYMessages.c:524
+#: LYMessages.c:538
msgid "Image map from POST response not available!"
msgstr ""
-#: LYMessages.c:525
+#: LYMessages.c:539
msgid "Misdirected client-side image MAP request!"
msgstr ""
-#: LYMessages.c:526
+#: LYMessages.c:540
msgid "Client-side image MAP is not accessible!"
msgstr ""
-#: LYMessages.c:527
+#: LYMessages.c:541
msgid "No client-side image MAPs are available!"
msgstr ""
-#: LYMessages.c:528
+#: LYMessages.c:542
msgid "Client-side image MAP is not available!"
msgstr ""
#. #define OPTION_SCREEN_NEEDS_24
-#: LYMessages.c:531
+#: LYMessages.c:545
msgid "Screen height must be at least 24 lines for the Options menu!"
msgstr ""
#. #define OPTION_SCREEN_NEEDS_23
-#: LYMessages.c:533
+#: LYMessages.c:547
msgid "Screen height must be at least 23 lines for the Options menu!"
msgstr ""
#. #define OPTION_SCREEN_NEEDS_22
-#: LYMessages.c:535
+#: LYMessages.c:549
msgid "Screen height must be at least 22 lines for the Options menu!"
msgstr ""
-#. !NO_OPTION_MENU
-#: LYMessages.c:537
+#: LYMessages.c:551
msgid "That key requires Advanced User mode."
msgstr ""
-#: LYMessages.c:538
+#: LYMessages.c:552
+#, c-format
msgid "Content-type: %s"
msgstr ""
-#: LYMessages.c:539
+#: LYMessages.c:553
msgid "Command: "
msgstr ""
-#: LYMessages.c:540
+#: LYMessages.c:554
+msgid "Unknown or ambiguous command"
+msgstr ""
+
+#: LYMessages.c:555
msgid " Version "
msgstr ""
-#: LYMessages.c:541
-msgid " first."
+#: LYMessages.c:556
+msgid " first"
msgstr ""
-#: LYMessages.c:542
+#: LYMessages.c:557
msgid ", guessing..."
msgstr ""
-#: LYMessages.c:543
+#: LYMessages.c:558
msgid "Permissions for "
msgstr ""
-#: LYMessages.c:544
+#: LYMessages.c:559
msgid "Select "
msgstr ""
-#: LYMessages.c:545
+#: LYMessages.c:560
msgid "capital letter"
msgstr ""
-#: LYMessages.c:546
+#: LYMessages.c:561
msgid " of option line,"
msgstr ""
-#: LYMessages.c:547
+#: LYMessages.c:562
msgid " to save,"
msgstr ""
-#: LYMessages.c:548
+#: LYMessages.c:563
msgid " to "
msgstr ""
-#: LYMessages.c:549
+#: LYMessages.c:564
msgid " or "
msgstr ""
-#: LYMessages.c:550
+#: LYMessages.c:565
msgid " index"
msgstr ""
-#: LYMessages.c:551
+#: LYMessages.c:566
msgid " to return to Lynx."
msgstr ""
-#: LYMessages.c:552
+#: LYMessages.c:567
msgid "Accept Changes"
msgstr ""
-#: LYMessages.c:553
+#: LYMessages.c:568
msgid "Reset Changes"
msgstr ""
-#: LYMessages.c:554
+#: LYMessages.c:569
msgid "Left Arrow cancels changes"
msgstr ""
-#: LYMessages.c:555
+#: LYMessages.c:570
msgid "Save options to disk"
msgstr ""
-#: LYMessages.c:556
+#: LYMessages.c:571
msgid "Hit RETURN to accept entered data."
msgstr ""
#. #define ACCEPT_DATA_OR_DEFAULT
-#: LYMessages.c:558
+#: LYMessages.c:573
msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
msgstr ""
-#: LYMessages.c:559
+#: LYMessages.c:574
msgid "Value accepted!"
msgstr ""
#. #define VALUE_ACCEPTED_WARNING_X
-#: LYMessages.c:561
+#: LYMessages.c:576
msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
msgstr ""
#. #define VALUE_ACCEPTED_WARNING_NONX
-#: LYMessages.c:563
+#: LYMessages.c:578
msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
msgstr ""
-#: LYMessages.c:564
+#: LYMessages.c:579
msgid "You are not allowed to change which editor to use!"
msgstr ""
-#: LYMessages.c:565
+#: LYMessages.c:580
msgid "Failed to set DISPLAY variable!"
msgstr ""
-#: LYMessages.c:566
+#: LYMessages.c:581
msgid "Failed to clear DISPLAY variable!"
msgstr ""
#. #define BOOKMARK_CHANGE_DISALLOWED
-#: LYMessages.c:568
+#: LYMessages.c:583
msgid "You are not allowed to change the bookmark file!"
msgstr ""
-#: LYMessages.c:569
+#: LYMessages.c:584
msgid "Terminal does not support color"
msgstr ""
-#: LYMessages.c:570
+#: LYMessages.c:585
+#, c-format
msgid "Your '%s' terminal does not support color."
msgstr ""
-#: LYMessages.c:571
+#: LYMessages.c:586
msgid "Access to dot files is disabled!"
msgstr ""
-#. #define UA_COPYRIGHT_WARNING
-#: LYMessages.c:573
-msgid "WARNING: Misrepresentation of the User-Agent may be a copyright violation!"
+#. #define UA_NO_LYNX_WARNING
+#: LYMessages.c:588
+msgid "User-Agent string does not contain \"Lynx\" or \"L_y_n_x\""
+msgstr ""
+
+#. #define UA_PLEASE_USE_LYNX
+#: LYMessages.c:590
+msgid ""
+"Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional "
+"deception!"
+msgstr ""
+
+#. #define UA_CHANGE_DISABLED
+#: LYMessages.c:592
+msgid "Changing of the User-Agent string is disabled!"
msgstr ""
#. #define CHANGE_OF_SETTING_DISALLOWED
-#: LYMessages.c:575
+#: LYMessages.c:594
msgid "You are not allowed to change this setting."
msgstr ""
-#: LYMessages.c:576
+#: LYMessages.c:595
msgid "Saving Options..."
msgstr ""
-#: LYMessages.c:577
+#: LYMessages.c:596
msgid "Options saved!"
msgstr ""
-#: LYMessages.c:578
+#: LYMessages.c:597
msgid "Unable to save Options!"
msgstr ""
-#: LYMessages.c:579
+#: LYMessages.c:598
msgid " 'r' to return to Lynx "
msgstr ""
-#: LYMessages.c:580
+#: LYMessages.c:599
msgid " '>' to save, or 'r' to return to Lynx "
msgstr ""
#. #define ANY_KEY_CHANGE_RET_ACCEPT
-#: LYMessages.c:582
+#: LYMessages.c:601
msgid "Hit any key to change value; RETURN to accept."
msgstr ""
-#: LYMessages.c:583
+#: LYMessages.c:602
msgid "Error uncompressing temporary file!"
msgstr ""
-#: LYMessages.c:584
+#: LYMessages.c:603
msgid "Unsupported URL scheme!"
msgstr ""
-#: LYMessages.c:585
+#: LYMessages.c:604
msgid "Unsupported data: URL! Use SHOWINFO, for now."
msgstr ""
-#: LYMessages.c:586
+#: LYMessages.c:605
msgid "Redirection limit of 10 URL's reached."
msgstr ""
-#: LYMessages.c:587
+#: LYMessages.c:606
msgid "Illegal redirection URL received from server!"
msgstr ""
#. #define SERVER_ASKED_FOR_REDIRECTION
-#: LYMessages.c:589
+#: LYMessages.c:608
+#, c-format
msgid "Server asked for %d redirection of POST content to"
msgstr ""
-#: LYMessages.c:590
+#: LYMessages.c:611
msgid "P)roceed, use G)ET or C)ancel "
msgstr ""
-#: LYMessages.c:591
+#: LYMessages.c:612
msgid "P)roceed, or C)ancel "
msgstr ""
#. #define ADVANCED_POST_GET_REDIRECT
-#: LYMessages.c:593
+#: LYMessages.c:614
msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
msgstr ""
#. #define ADVANCED_POST_REDIRECT
-#: LYMessages.c:595
+#: LYMessages.c:616
msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
msgstr ""
#. #define CONFIRM_POST_RESUBMISSION
-#: LYMessages.c:597
+#: LYMessages.c:618
msgid "Document from Form with POST content. Resubmit?"
msgstr ""
#. #define CONFIRM_POST_RESUBMISSION_TO
-#: LYMessages.c:599
+#: LYMessages.c:620
+#, c-format
msgid "Resubmit POST content to %s ?"
msgstr ""
#. #define CONFIRM_POST_LIST_RELOAD
-#: LYMessages.c:601
+#: LYMessages.c:622
+#, c-format
msgid "List from document with POST data. Reload %s ?"
msgstr ""
#. #define CONFIRM_POST_DOC_HEAD
-#: LYMessages.c:603
+#: LYMessages.c:624
msgid "Document from POST action, HEAD may not be understood. Proceed?"
msgstr ""
#. #define CONFIRM_POST_LINK_HEAD
-#: LYMessages.c:605
+#: LYMessages.c:626
msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
msgstr ""
-#: LYMessages.c:606
+#: LYMessages.c:627
msgid "Proceed without a username and password?"
msgstr ""
-#: LYMessages.c:607
+#: LYMessages.c:628
+#, c-format
msgid "Proceed (%s)?"
msgstr ""
-#: LYMessages.c:608
+#: LYMessages.c:629
msgid "Cannot POST to this host."
msgstr ""
-#: LYMessages.c:609
+#: LYMessages.c:630
msgid "POST not supported for this URL - ignoring POST data!"
msgstr ""
-#: LYMessages.c:610
+#: LYMessages.c:631
msgid "Discarding POST data..."
msgstr ""
-#: LYMessages.c:611
+#: LYMessages.c:632
msgid "Document will not be reloaded!"
msgstr ""
-#: LYMessages.c:612
+#: LYMessages.c:633
msgid "Location: "
msgstr ""
-#: LYMessages.c:613
+#: LYMessages.c:634
+#, c-format
msgid "'%s' not found!"
msgstr ""
-#: LYMessages.c:614
+#: LYMessages.c:635
msgid "Default Bookmark File"
msgstr ""
-#: LYMessages.c:615
+#: LYMessages.c:636
msgid "Screen too small! (8x35 min)"
msgstr ""
-#: LYMessages.c:616
+#: LYMessages.c:637
msgid "Select destination or ^G to Cancel: "
msgstr ""
#. #define MULTIBOOKMARKS_SELECT
-#: LYMessages.c:618
+#: LYMessages.c:639
msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
msgstr ""
#. #define MULTIBOOKMARKS_SELF
-#: LYMessages.c:620
+#: LYMessages.c:641
msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
msgstr ""
-#: LYMessages.c:621
+#: LYMessages.c:642
msgid "Multiple bookmark support is not available."
msgstr ""
-#: LYMessages.c:622
+#: LYMessages.c:643
+#, c-format
msgid " Select Bookmark (screen %d of %d)"
msgstr ""
-#: LYMessages.c:623
+#: LYMessages.c:644
msgid " Select Bookmark"
msgstr ""
#. #define MULTIBOOKMARKS_EHEAD_MASK
-#: LYMessages.c:625
+#: LYMessages.c:646
+#, c-format
msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
msgstr ""
#. #define MULTIBOOKMARKS_EHEAD
-#: LYMessages.c:627
+#: LYMessages.c:648
msgid " Editing Bookmark DESCRIPTION and FILEPATH"
msgstr ""
-#: LYMessages.c:628
+#: LYMessages.c:649
msgid "Letter: "
msgstr ""
#. #define USE_PATH_OFF_HOME
-#: LYMessages.c:631
+#: LYMessages.c:652
msgid "Use a filepath off your login directory in SHELL syntax!"
msgstr ""
-#: LYMessages.c:633
+#: LYMessages.c:654
msgid "Use a filepath off your home directory!"
msgstr ""
-#. VMS
#. #define MAXLINKS_REACHED
-#: LYMessages.c:636
+#: LYMessages.c:657
msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
msgstr ""
#. #define MAXHIST_REACHED
-#: LYMessages.c:638
+#: LYMessages.c:659
msgid "History List maximum reached! Document not pushed."
msgstr ""
-#: LYMessages.c:639
+#: LYMessages.c:660
msgid "No previously visited links available!"
msgstr ""
-#: LYMessages.c:640
+#: LYMessages.c:661
msgid "Memory exhausted! Program aborted!"
msgstr ""
-#: LYMessages.c:641
+#: LYMessages.c:662
msgid "Memory exhausted! Aborting..."
msgstr ""
-#: LYMessages.c:642
+#: LYMessages.c:663
+msgid "Not enough memory!"
+msgstr ""
+
+#: LYMessages.c:664
msgid "Directory/File Manager not available"
msgstr ""
-#: LYMessages.c:643
+#: LYMessages.c:665
msgid "HREF in BASE tag is not an absolute URL."
msgstr ""
-#: LYMessages.c:644
+#: LYMessages.c:666
msgid "Location URL is not absolute."
msgstr ""
-#: LYMessages.c:645
+#: LYMessages.c:667
msgid "Refresh URL is not absolute."
msgstr ""
#. #define SENDING_MESSAGE_WITH_BODY_TO
-#: LYMessages.c:647
+#: LYMessages.c:669
msgid ""
"You are sending a message with body to:\n"
" "
msgstr ""
-#: LYMessages.c:648
+#: LYMessages.c:670
msgid ""
"You are sending a comment to:\n"
" "
msgstr ""
-#: LYMessages.c:649
+#: LYMessages.c:671
msgid ""
"\n"
" With copy to:\n"
" "
msgstr ""
-#: LYMessages.c:650
+#: LYMessages.c:672
msgid ""
"\n"
" With copies to:\n"
@@ -1965,7 +2092,7 @@ msgid ""
msgstr ""
#. #define CTRL_G_TO_CANCEL_SEND
-#: LYMessages.c:652
+#: LYMessages.c:674
msgid ""
"\n"
"\n"
@@ -1973,561 +2100,582 @@ msgid ""
msgstr ""
#. #define ENTER_NAME_OR_BLANK
-#: LYMessages.c:654
+#: LYMessages.c:676
msgid ""
"\n"
" Please enter your name, or leave it blank to remain anonymous\n"
msgstr ""
#. #define ENTER_MAIL_ADDRESS_OR_OTHER
-#: LYMessages.c:656
+#: LYMessages.c:678
msgid ""
"\n"
" Please enter a mail address or some other\n"
msgstr ""
#. #define MEANS_TO_CONTACT_FOR_RESPONSE
-#: LYMessages.c:658
+#: LYMessages.c:680
msgid " means to contact you, if you desire a response.\n"
msgstr ""
-#: LYMessages.c:659
+#: LYMessages.c:681
msgid ""
"\n"
" Please enter a subject line.\n"
msgstr ""
#. #define ENTER_ADDRESS_FOR_CC
-#: LYMessages.c:661
+#: LYMessages.c:683
msgid ""
"\n"
" Enter a mail address for a CC of your message.\n"
msgstr ""
-#: LYMessages.c:662
+#: LYMessages.c:684
msgid " (Leave blank if you don't want a copy.)\n"
msgstr ""
-#: LYMessages.c:663
+#: LYMessages.c:685
msgid ""
"\n"
" Please review the message body:\n"
"\n"
msgstr ""
-#: LYMessages.c:664
+#: LYMessages.c:686
msgid ""
"\n"
"Press RETURN to continue: "
msgstr ""
-#: LYMessages.c:665
+#: LYMessages.c:687
msgid ""
"\n"
"Press RETURN to clean up: "
msgstr ""
-#: LYMessages.c:666
+#: LYMessages.c:688
msgid " Use Control-U to erase the default.\n"
msgstr ""
-#: LYMessages.c:667
+#: LYMessages.c:689
msgid ""
"\n"
" Please enter your message below."
msgstr ""
#. #define ENTER_PERIOD_WHEN_DONE_A
-#: LYMessages.c:669 src/LYNews.c:331
+#: LYMessages.c:691 src/LYNews.c:380
msgid ""
"\n"
" When you are done, press enter and put a single period (.)"
msgstr ""
#. #define ENTER_PERIOD_WHEN_DONE_B
-#: LYMessages.c:671 src/LYNews.c:332
+#: LYMessages.c:693 src/LYNews.c:381
msgid ""
"\n"
" on a line and press enter again."
msgstr ""
+#. Cookies messages
#. #define ADVANCED_COOKIE_CONFIRMATION
-#: LYMessages.c:675
+#: LYMessages.c:697
+#, c-format
msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
msgstr ""
#. #define INVALID_COOKIE_DOMAIN_CONFIRMATION
-#: LYMessages.c:677
+#: LYMessages.c:699
+#, c-format
msgid "Accept invalid cookie domain=%s for '%s'?"
msgstr ""
#. #define INVALID_COOKIE_PATH_CONFIRMATION
-#: LYMessages.c:679
+#: LYMessages.c:701
+#, c-format
msgid "Accept invalid cookie path=%s as a prefix of '%s'?"
msgstr ""
-#: LYMessages.c:680
+#: LYMessages.c:702
msgid "Allowing this cookie."
msgstr ""
-#: LYMessages.c:681
+#: LYMessages.c:703
msgid "Rejecting this cookie."
msgstr ""
-#: LYMessages.c:682
+#: LYMessages.c:704
msgid "The Cookie Jar is empty."
msgstr ""
#. #define ACTIVATE_TO_GOBBLE
-#: LYMessages.c:684
+#: LYMessages.c:706
msgid "Activate links to gobble up cookies or entire domains,"
msgstr ""
-#: LYMessages.c:685
+#: LYMessages.c:707
msgid "or to change a domain's 'allow' setting."
msgstr ""
-#: LYMessages.c:686
+#: LYMessages.c:708
msgid "(Cookies never allowed.)"
msgstr ""
-#: LYMessages.c:687
+#: LYMessages.c:709
msgid "(Cookies always allowed.)"
msgstr ""
-#: LYMessages.c:688
+#: LYMessages.c:710
msgid "(Cookies allowed via prompt.)"
msgstr ""
-#: LYMessages.c:689
+#: LYMessages.c:711
msgid "(Persistent Cookies.)"
msgstr ""
-#: LYMessages.c:690
+#: LYMessages.c:712
msgid "(No title.)"
msgstr ""
-#: LYMessages.c:691
+#: LYMessages.c:713
msgid "(No name.)"
msgstr ""
-#: LYMessages.c:692
+#: LYMessages.c:714
msgid "(No value.)"
msgstr ""
-#: LYMessages.c:693
+#: LYMessages.c:715
msgid "None"
msgstr ""
-#: LYMessages.c:694
+#: LYMessages.c:716
msgid "(End of session.)"
msgstr ""
-#: LYMessages.c:695
+#: LYMessages.c:717
msgid "Delete this cookie?"
msgstr ""
-#: LYMessages.c:696
+#: LYMessages.c:718
msgid "The cookie has been eaten!"
msgstr ""
-#: LYMessages.c:697
+#: LYMessages.c:719
msgid "Delete this empty domain?"
msgstr ""
-#: LYMessages.c:698
+#: LYMessages.c:720
msgid "The domain has been eaten!"
msgstr ""
#. #define DELETE_COOKIES_SET_ALLOW_OR_CANCEL
-#: LYMessages.c:700
-msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+#: LYMessages.c:722
+msgid ""
+"D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
msgstr ""
#. #define DELETE_DOMAIN_SET_ALLOW_OR_CANCEL
-#: LYMessages.c:702
+#: LYMessages.c:724
msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
msgstr ""
-#: LYMessages.c:703
+#: LYMessages.c:725
msgid "All cookies in the domain have been eaten!"
msgstr ""
-#: LYMessages.c:704
+#: LYMessages.c:726
+#, c-format
msgid "'A'lways allowing from domain '%s'."
msgstr ""
-#: LYMessages.c:705
+#: LYMessages.c:727
+#, c-format
msgid "ne'V'er allowing from domain '%s'."
msgstr ""
-#: LYMessages.c:706
+#: LYMessages.c:728
+#, c-format
msgid "'P'rompting to allow from domain '%s'."
msgstr ""
-#: LYMessages.c:707
+#: LYMessages.c:729
msgid "Delete all cookies in this domain?"
msgstr ""
-#: LYMessages.c:708
+#: LYMessages.c:730
msgid "All of the cookies in the jar have been eaten!"
msgstr ""
-#: LYMessages.c:710
+#: LYMessages.c:732
msgid "Port 19 not permitted in URLs."
msgstr ""
-#: LYMessages.c:711
+#: LYMessages.c:733
msgid "Port 25 not permitted in URLs."
msgstr ""
-#: LYMessages.c:712
+#: LYMessages.c:734
+#, c-format
msgid "Port %lu not permitted in URLs."
msgstr ""
-#: LYMessages.c:713
+#: LYMessages.c:735
msgid "URL has a bad port field."
msgstr ""
-#: LYMessages.c:714
+#: LYMessages.c:736
msgid "Maximum nesting of HTML elements exceeded."
msgstr ""
-#: LYMessages.c:715
+#: LYMessages.c:737
msgid "Bad partial reference! Stripping lead dots."
msgstr ""
-#: LYMessages.c:716
-msgid "Trace Log open failed. Trace off!."
+#: LYMessages.c:738
+msgid "Trace Log open failed. Trace off!"
msgstr ""
-#: LYMessages.c:717
+#: LYMessages.c:739
msgid "Lynx Trace Log"
msgstr ""
-#: LYMessages.c:718
+#: LYMessages.c:740
msgid "No trace log has been started for this session."
msgstr ""
#. #define MAX_TEMPCOUNT_REACHED
-#: LYMessages.c:720
+#: LYMessages.c:742
msgid "The maximum temporary file count has been reached!"
msgstr ""
#. #define FORM_VALUE_TOO_LONG
-#: LYMessages.c:722
+#: LYMessages.c:744
msgid "Form field value exceeds buffer length! Trim the tail."
msgstr ""
#. #define FORM_TAIL_COMBINED_WITH_HEAD
-#: LYMessages.c:724
+#: LYMessages.c:746
msgid "Modified tail combined with head of form field value."
msgstr ""
#. HTFile.c
-#: LYMessages.c:727
+#: LYMessages.c:749
msgid "Directory"
msgstr ""
-#: LYMessages.c:728
+#: LYMessages.c:750
msgid "Directory browsing is not allowed."
msgstr ""
-#: LYMessages.c:729
+#: LYMessages.c:751
msgid "Selective access is not enabled for this directory"
msgstr ""
-#: LYMessages.c:730
+#: LYMessages.c:752
msgid "Multiformat: directory scan failed."
msgstr ""
-#: LYMessages.c:731
+#: LYMessages.c:753
msgid "This directory is not readable."
msgstr ""
-#: LYMessages.c:732
+#: LYMessages.c:754
msgid "Can't access requested file."
msgstr ""
-#: LYMessages.c:733
+#: LYMessages.c:755
msgid "Could not find suitable representation for transmission."
msgstr ""
-#: LYMessages.c:734
+#: LYMessages.c:756
msgid "Could not open file for decompression!"
msgstr ""
-#: LYMessages.c:735
+#: LYMessages.c:757
msgid "Files:"
msgstr ""
-#: LYMessages.c:736
+#: LYMessages.c:758
msgid "Subdirectories:"
msgstr ""
-#: LYMessages.c:737
+#: LYMessages.c:759
msgid " directory"
msgstr ""
-#: LYMessages.c:738
+#: LYMessages.c:760
msgid "Up to "
msgstr ""
-#: LYMessages.c:739
+#: LYMessages.c:761
msgid "Current directory is "
msgstr ""
#. HTGopher.c
-#: LYMessages.c:742
+#: LYMessages.c:764
msgid "No response from server!"
msgstr ""
-#: LYMessages.c:743
+#: LYMessages.c:765
msgid "CSO index"
msgstr ""
-#: LYMessages.c:744
+#: LYMessages.c:766
msgid ""
"\n"
"This is a searchable index of a CSO database.\n"
msgstr ""
-#: LYMessages.c:745
+#: LYMessages.c:767
msgid "CSO Search Results"
msgstr ""
-#: LYMessages.c:746
+#: LYMessages.c:768
+#, c-format
msgid "Seek fail on %s\n"
msgstr ""
-#: LYMessages.c:747
+#: LYMessages.c:769
msgid ""
"\n"
"Press the 's' key and enter search keywords.\n"
msgstr ""
-#: LYMessages.c:748
+#: LYMessages.c:770
msgid ""
"\n"
"This is a searchable Gopher index.\n"
msgstr ""
-#: LYMessages.c:749
+#: LYMessages.c:771
msgid "Gopher index"
msgstr ""
-#: LYMessages.c:750
+#: LYMessages.c:772
msgid "Gopher Menu"
msgstr ""
-#: LYMessages.c:751
+#: LYMessages.c:773
msgid " Search Results"
msgstr ""
-#: LYMessages.c:752
+#: LYMessages.c:774
msgid "Sending CSO/PH request."
msgstr ""
-#: LYMessages.c:753
+#: LYMessages.c:775
msgid "Sending Gopher request."
msgstr ""
-#: LYMessages.c:754
+#: LYMessages.c:776
msgid "CSO/PH request sent; waiting for response."
msgstr ""
-#: LYMessages.c:755
+#: LYMessages.c:777
msgid "Gopher request sent; waiting for response."
msgstr ""
-#: LYMessages.c:756
+#: LYMessages.c:778
msgid ""
"\n"
"Please enter search keywords.\n"
msgstr ""
-#: LYMessages.c:757
+#: LYMessages.c:779
msgid ""
"\n"
"The keywords that you enter will allow you to search on a"
msgstr ""
-#: LYMessages.c:758
+#: LYMessages.c:780
msgid " person's name in the database.\n"
msgstr ""
-#: LYMessages.c:761
+#. HTNews.c
+#: LYMessages.c:783
msgid "Connection closed ???"
msgstr ""
-#: LYMessages.c:762
+#: LYMessages.c:784
msgid "Cannot open temporary file for news POST."
msgstr ""
-#: LYMessages.c:763
+#: LYMessages.c:785
msgid "This client does not contain support for posting to news with SSL."
msgstr ""
#. HTStyle.c
-#: LYMessages.c:766
+#: LYMessages.c:788
+#, c-format
msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
msgstr ""
-#: LYMessages.c:767
+#: LYMessages.c:789
+#, c-format
msgid "\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
msgstr ""
-#: LYMessages.c:768
+#: LYMessages.c:790
+#, c-format
msgid "\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
msgstr ""
-#: LYMessages.c:769
+#: LYMessages.c:791
+#, c-format
msgid "\t\tTab kind=%d at %.0f\n"
msgstr ""
#. HTTP.c
-#: LYMessages.c:772
+#: LYMessages.c:794
msgid "Can't proceed without a username and password."
msgstr ""
-#: LYMessages.c:773
+#: LYMessages.c:795
msgid "Can't retry with authorization! Contact the server's WebMaster."
msgstr ""
-#: LYMessages.c:774
+#: LYMessages.c:796
msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
msgstr ""
-#: LYMessages.c:775
+#: LYMessages.c:797
msgid "Retrying with proxy authorization information."
msgstr ""
#. HTWAIS.c
-#: LYMessages.c:778
+#: LYMessages.c:800
msgid "HTWAIS: Return message too large."
msgstr ""
-#: LYMessages.c:779
+#: LYMessages.c:801
msgid "Enter WAIS query: "
msgstr ""
#. Miscellaneous status
-#: LYMessages.c:782
+#: LYMessages.c:804
msgid "Retrying as HTTP0 request."
msgstr ""
-#: LYMessages.c:783
+#: LYMessages.c:805
+#, c-format
msgid "Transferred %d bytes"
msgstr ""
-#: LYMessages.c:784
+#: LYMessages.c:806
msgid "Data transfer complete"
msgstr ""
-#: LYMessages.c:785
+#: LYMessages.c:807
+#, c-format
msgid "Error processing line %d of %s\n"
msgstr ""
#. Lynx internal page titles
-#: LYMessages.c:788
+#: LYMessages.c:810
msgid "Address List Page"
msgstr ""
-#: LYMessages.c:789
+#: LYMessages.c:811
msgid "Bookmark file"
msgstr ""
-#: LYMessages.c:790
+#: LYMessages.c:812
msgid "Configuration Definitions"
msgstr ""
-#: LYMessages.c:791
+#: LYMessages.c:813
msgid "Cookie Jar"
msgstr ""
-#: LYMessages.c:792
+#: LYMessages.c:814
msgid "Current Key Map"
msgstr ""
-#: LYMessages.c:793
+#: LYMessages.c:815
msgid "File Management Options"
msgstr ""
-#: LYMessages.c:794
+#: LYMessages.c:816
msgid "Download Options"
msgstr ""
-#: LYMessages.c:795
+#: LYMessages.c:817
msgid "History Page"
msgstr ""
-#: LYMessages.c:796
+#: LYMessages.c:818
msgid "List Page"
msgstr ""
-#: LYMessages.c:797
+#: LYMessages.c:819
msgid "Lynx.cfg Information"
msgstr ""
-#: LYMessages.c:798
+#: LYMessages.c:820
msgid "Converted Mosaic Hotlist"
msgstr ""
-#: LYMessages.c:799
+#: LYMessages.c:821
msgid "Options Menu"
msgstr ""
-#: LYMessages.c:800
+#: LYMessages.c:822
msgid "File Permission Options"
msgstr ""
-#: LYMessages.c:801
+#: LYMessages.c:823
msgid "Printing Options"
msgstr ""
-#: LYMessages.c:802
+#: LYMessages.c:824
msgid "Information about the current document"
msgstr ""
-#: LYMessages.c:803
+#: LYMessages.c:825
msgid "Your recent statusline messages"
msgstr ""
-#: LYMessages.c:804
+#: LYMessages.c:826
msgid "Upload Options"
msgstr ""
-#: LYMessages.c:805
+#: LYMessages.c:827
msgid "Visited Links Page"
msgstr ""
#. CONFIG_DEF_TITLE subtitles
-#: LYMessages.c:808
+#: LYMessages.c:830
msgid "See also"
msgstr ""
-#: LYMessages.c:809
+#: LYMessages.c:831
msgid "your"
msgstr ""
-#: LYMessages.c:810
+#: LYMessages.c:832
msgid "for runtime options"
msgstr ""
-#: LYMessages.c:811
+#: LYMessages.c:833
msgid "compile time options"
msgstr ""
-#: LYMessages.c:812
+#: LYMessages.c:834
msgid "latest release"
msgstr ""
-#: LYMessages.c:813
+#: LYMessages.c:835
+msgid "pre-release version"
+msgstr ""
+
+#: LYMessages.c:836
msgid "development version"
msgstr ""
#. #define AUTOCONF_CONFIG_CACHE
-#: LYMessages.c:815
+#: LYMessages.c:838
msgid ""
"The following data were derived during the automatic configuration/build\n"
"process of this copy of Lynx. When reporting a bug, please include a copy\n"
@@ -2535,43 +2683,79 @@ msgid ""
msgstr ""
#. #define AUTOCONF_LYNXCFG_H
-#: LYMessages.c:819
+#: LYMessages.c:842
msgid ""
"The following data were used as automatically-configured compile-time\n"
"definitions when this copy of Lynx was built."
msgstr ""
#. #define DIRED_NOVICELINE
-#: LYMessages.c:824
-msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
+#: LYMessages.c:847
+msgid ""
+" C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)"
+"pload \n"
msgstr ""
-#: LYMessages.c:825
+#: LYMessages.c:848
msgid "Failed to obtain status of current link!"
msgstr ""
#. #define INVALID_PERMIT_URL
-#: LYMessages.c:828
+#: LYMessages.c:851
msgid "Special URL only valid from current File Permission menu!"
msgstr ""
-#: LYMessages.c:832
+#: LYMessages.c:855
msgid "External support is currently disabled."
msgstr ""
-#: WWW/Library/Implementation/HTAABrow.c:647
+#. new with 2.8.4dev.21
+#: LYMessages.c:859
+msgid "Changing working-directory is currently disabled."
+msgstr ""
+
+#: LYMessages.c:860
+msgid "Linewrap OFF!"
+msgstr ""
+
+#: LYMessages.c:861
+msgid "Linewrap ON!"
+msgstr ""
+
+#: LYMessages.c:862
+msgid "Parsing nested-tables toggled OFF! Reloading..."
+msgstr ""
+
+#: LYMessages.c:863
+msgid "Parsing nested-tables toggled ON! Reloading..."
+msgstr ""
+
+#: LYMessages.c:864
+msgid "Shifting is disabled while line-wrap is in effect"
+msgstr ""
+
+#: LYMessages.c:865
+msgid "Trace not supported"
+msgstr ""
+
+#: WWW/Library/Implementation/HTAABrow.c:648
+#, c-format
msgid "Username for '%s' at %s '%s%s':"
msgstr ""
#: WWW/Library/Implementation/HTAABrow.c:914
-msgid "This client doesn't know how to compose proxy authorization information for scheme"
+msgid ""
+"This client doesn't know how to compose proxy authorization information for "
+"scheme"
msgstr ""
#: WWW/Library/Implementation/HTAABrow.c:989
-msgid "This client doesn't know how to compose authorization information for scheme"
+msgid ""
+"This client doesn't know how to compose authorization information for scheme"
msgstr ""
#: WWW/Library/Implementation/HTAABrow.c:1097
+#, c-format
msgid "Invalid header '%s%s%s%s%s'"
msgstr ""
@@ -2583,51 +2767,59 @@ msgstr ""
msgid "Access without authorization denied -- retrying"
msgstr ""
-#: WWW/Library/Implementation/HTAccess.c:644
+#: WWW/Library/Implementation/HTAccess.c:683
msgid "Access forbidden by rule"
msgstr ""
-#: WWW/Library/Implementation/HTAccess.c:741
+#: WWW/Library/Implementation/HTAccess.c:785
msgid "Document with POST content not found in cache. Resubmit?"
msgstr ""
-#: WWW/Library/Implementation/HTAccess.c:975
+#: WWW/Library/Implementation/HTAccess.c:1026 src/GridText.c:8039
msgid "Loading incomplete."
msgstr ""
-#: WWW/Library/Implementation/HTAccess.c:1005
-msgid "**** HTAccess: socket or file number returned by obsolete load routine!\n"
+#: WWW/Library/Implementation/HTAccess.c:1056
+msgid ""
+"**** HTAccess: socket or file number returned by obsolete load routine!\n"
msgstr ""
-#: WWW/Library/Implementation/HTAccess.c:1007
-msgid "**** HTAccess: Internal software error. Please mail lynx_dev@sig.net!\n"
+#: WWW/Library/Implementation/HTAccess.c:1058
+msgid ""
+"**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"
msgstr ""
-#: WWW/Library/Implementation/HTAccess.c:1008
+#: WWW/Library/Implementation/HTAccess.c:1059
+#, c-format
msgid "**** HTAccess: Status returned was: %d\n"
msgstr ""
-#: WWW/Library/Implementation/HTAccess.c:1014 src/LYMainLoop.c:6233
+#.
+#. * hack: if we fail in HTAccess.c
+#. * avoid duplicating URL, oh.
+#.
+#: WWW/Library/Implementation/HTAccess.c:1065 src/LYMainLoop.c:7834
msgid "Can't Access"
msgstr ""
-#: WWW/Library/Implementation/HTAccess.c:1022
+#: WWW/Library/Implementation/HTAccess.c:1073
msgid "Unable to access document."
msgstr ""
-#: WWW/Library/Implementation/HTFTP.c:707
+#: WWW/Library/Implementation/HTFTP.c:756
+#, c-format
msgid "Enter password for user %s@%s:"
msgstr ""
-#: WWW/Library/Implementation/HTFTP.c:735
+#: WWW/Library/Implementation/HTFTP.c:784
msgid "Unable to connect to FTP host."
msgstr ""
-#: WWW/Library/Implementation/HTFTP.c:994
+#: WWW/Library/Implementation/HTFTP.c:1054
msgid "close master socket"
msgstr ""
-#: WWW/Library/Implementation/HTFTP.c:1034
+#: WWW/Library/Implementation/HTFTP.c:1116
msgid "socket for master socket"
msgstr ""
@@ -2636,28 +2828,26 @@ msgstr ""
#. ** knowing if it is symbolic? I think so since
#. ** it might be a directory.
#.
-#: WWW/Library/Implementation/HTFTP.c:1963
+#: WWW/Library/Implementation/HTFTP.c:1630
+#: WWW/Library/Implementation/HTFTP.c:2251
msgid "Symbolic Link"
msgstr ""
-#: WWW/Library/Implementation/HTFTP.c:2316
+#: WWW/Library/Implementation/HTFTP.c:2612
msgid "Receiving FTP directory."
msgstr ""
-#: WWW/Library/Implementation/HTFTP.c:2664
-msgid "connect for data"
+#: WWW/Library/Implementation/HTFTP.c:2755
+#, c-format
+msgid "Transferred %d bytes (%5d)"
msgstr ""
-#: WWW/Library/Implementation/HTFTP.c:3243
-msgid "Receiving FTP file."
-msgstr ""
-
-#: WWW/Library/Implementation/HTFile.c:1562
-msgid "Reading directory..."
+#: WWW/Library/Implementation/HTFTP.c:3090
+msgid "connect for data"
msgstr ""
-#: WWW/Library/Implementation/HTFile.c:1644
-msgid "OK"
+#: WWW/Library/Implementation/HTFTP.c:3690
+msgid "Receiving FTP file."
msgstr ""
#: WWW/Library/Implementation/HTFinger.c:275
@@ -2680,42 +2870,40 @@ msgstr ""
msgid "No response from finger server."
msgstr ""
-#. finger is disabled
-#: WWW/Library/Implementation/HTGopher.c:1727
-msgid "Unable to access document!"
-msgstr ""
-
-#: WWW/Library/Implementation/HTNews.c:364
+#: WWW/Library/Implementation/HTNews.c:372
+#, c-format
msgid "Username for news host '%s':"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:417
+#: WWW/Library/Implementation/HTNews.c:425
msgid "Change username?"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:421
+#: WWW/Library/Implementation/HTNews.c:429
msgid "Username:"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:448
+#: WWW/Library/Implementation/HTNews.c:453
+#, c-format
msgid "Password for news host '%s':"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:531
+#: WWW/Library/Implementation/HTNews.c:536
msgid "Change password?"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:1634
+#: WWW/Library/Implementation/HTNews.c:1691
+#, c-format
msgid "No matches for: %s"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:1685
+#: WWW/Library/Implementation/HTNews.c:1744
msgid ""
"\n"
"No articles in this group.\n"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:1698
+#: WWW/Library/Implementation/HTNews.c:1757
msgid ""
"\n"
"No articles in this range.\n"
@@ -2724,131 +2912,159 @@ msgstr ""
#.
#. ** Set window title.
#.
-#: WWW/Library/Implementation/HTNews.c:1711
+#: WWW/Library/Implementation/HTNews.c:1770
+#, c-format
msgid "%s, Articles %d-%d"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:1732
+#: WWW/Library/Implementation/HTNews.c:1792
msgid "Earlier articles"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:1745
+#: WWW/Library/Implementation/HTNews.c:1805
+#, c-format
msgid ""
"\n"
"There are about %d articles currently available in %s, IDs as follows:\n"
"\n"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:1804
+#: WWW/Library/Implementation/HTNews.c:1865
msgid "All available articles in "
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:2015
+#: WWW/Library/Implementation/HTNews.c:2081
msgid "Later articles"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:2039
+#: WWW/Library/Implementation/HTNews.c:2105
msgid "Post to "
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:2216
+#: WWW/Library/Implementation/HTNews.c:2323
msgid "This client does not contain support for SNEWS URLs."
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:2397
+#: WWW/Library/Implementation/HTNews.c:2531
msgid "No target for raw text!"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:2427
+#: WWW/Library/Implementation/HTNews.c:2561
msgid "Connecting to NewsHost ..."
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:2461
+#: WWW/Library/Implementation/HTNews.c:2612
+#, c-format
msgid "Could not access %s."
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:2508
+#: WWW/Library/Implementation/HTNews.c:2712
+#, c-format
msgid "Can't read news info. News host %.20s responded: %.200s"
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:2704
+#: WWW/Library/Implementation/HTNews.c:2716
+#, c-format
+msgid "Can't read news info, empty response from host %s"
+msgstr ""
+
+#.
+#. ** List available newsgroups. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2920
msgid "Reading list of available newsgroups."
msgstr ""
-#: WWW/Library/Implementation/HTNews.c:2726
+#: WWW/Library/Implementation/HTNews.c:2942
msgid "Reading list of articles in newsgroup."
msgstr ""
#.
#. ** Get an article from a news group. - FM
#.
-#: WWW/Library/Implementation/HTNews.c:2732
+#: WWW/Library/Implementation/HTNews.c:2948
msgid "Reading news article."
msgstr ""
-#: WWW/Library/Implementation/HTTCP.c:1201
+#: WWW/Library/Implementation/HTNews.c:2978
+msgid "Sorry, could not load requested news."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1233
+msgid "Address has invalid port"
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1336
msgid "Address length looks invalid"
msgstr ""
-#: WWW/Library/Implementation/HTTCP.c:1354
-msgid "Looking up %s."
+#: WWW/Library/Implementation/HTTCP.c:1574
+#: WWW/Library/Implementation/HTTCP.c:1592
+#, c-format
+msgid "Unable to locate remote host %s."
msgstr ""
-#: WWW/Library/Implementation/HTTCP.c:1364 WWW/Library/Implementation/HTTelnet.c:99
+#. Not HTProgress, so warning won't be overwritten
+#. * immediately; but not HTAlert, because typically
+#. * there will be other alerts from the callers. - kw
+#.
+#: WWW/Library/Implementation/HTTCP.c:1589
+#: WWW/Library/Implementation/HTTelnet.c:103
+#, c-format
msgid "Invalid hostname %s"
msgstr ""
-#: WWW/Library/Implementation/HTTCP.c:1367
-msgid "Unable to locate remote host %s."
+#: WWW/Library/Implementation/HTTCP.c:1603
+#, c-format
+msgid "Making %s connection to %s"
msgstr ""
-#: WWW/Library/Implementation/HTTCP.c:1377
-msgid "Making %s connection to %s."
+#: WWW/Library/Implementation/HTTCP.c:1619
+#, c-format
+msgid "socket failed: family %d addr %s port %s."
msgstr ""
-#: WWW/Library/Implementation/HTTCP.c:1387
+#: WWW/Library/Implementation/HTTCP.c:1628
msgid "socket failed."
msgstr ""
-#. USE_FCNTL
-#: WWW/Library/Implementation/HTTCP.c:1406
+#: WWW/Library/Implementation/HTTCP.c:1648
msgid "Could not make connection non-blocking."
msgstr ""
-#: WWW/Library/Implementation/HTTCP.c:1460
-msgid "Connection failed for 180,000 tries."
+#: WWW/Library/Implementation/HTTCP.c:1717
+msgid "Connection failed (too many retries)."
msgstr ""
-#. USE_FCNTL
-#: WWW/Library/Implementation/HTTCP.c:1594
+#: WWW/Library/Implementation/HTTCP.c:1910
msgid "Could not restore socket to blocking."
msgstr ""
-#: WWW/Library/Implementation/HTTCP.c:1648
+#: WWW/Library/Implementation/HTTCP.c:1976
msgid "Socket read failed for 180,000 tries."
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:166
+#: WWW/Library/Implementation/HTTP.c:466
msgid "This client does not contain support for HTTPS URLs."
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:183
+#: WWW/Library/Implementation/HTTP.c:491
msgid "Unable to connect to remote host."
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:603
+#: WWW/Library/Implementation/HTTP.c:1005
msgid "Sending HTTP request."
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:636
+#: WWW/Library/Implementation/HTTP.c:1039
msgid "Unexpected network write error; connection aborted."
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:642
+#: WWW/Library/Implementation/HTTP.c:1045
msgid "HTTP request sent; waiting for response."
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:704
+#: WWW/Library/Implementation/HTTP.c:1109
msgid "Unexpected network read error; connection aborted."
msgstr ""
@@ -2862,7 +3078,7 @@ msgstr ""
#. ** so we'll deal with them by showing the full
#. ** header to the user as text/plain. - FM
#.
-#: WWW/Library/Implementation/HTTP.c:898
+#: WWW/Library/Implementation/HTTP.c:1305
msgid "Got unexpected Informational Status."
msgstr ""
@@ -2873,39 +3089,38 @@ msgstr ""
#. * user to do that, and restore the current
#. * document. - FM
#.
-#: WWW/Library/Implementation/HTTP.c:932
+#: WWW/Library/Implementation/HTTP.c:1340
msgid "Request fulfilled. Reset Content."
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:1022
+#. Not Modified
+#.
+#. * We didn't send an "If-Modified-Since" header,
+#. * so this status is inappropriate. We'll deal
+#. * with it by showing the full header to the user
+#. * as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1459
msgid "Got unexpected 304 Not Modified status."
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:1091
+#: WWW/Library/Implementation/HTTP.c:1526
msgid "Redirection of POST content requires user approval."
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:1134
+#: WWW/Library/Implementation/HTTP.c:1541
msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:1358
-msgid "Got redirection with a bad Location header."
-msgstr ""
-
-#: WWW/Library/Implementation/HTTP.c:1457
-msgid "Got redirection with no Location header."
-msgstr ""
-
-#: WWW/Library/Implementation/HTTP.c:1512
+#: WWW/Library/Implementation/HTTP.c:1586
msgid "Retrying with access authorization information."
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:1517
+#: WWW/Library/Implementation/HTTP.c:1598
msgid "Show the 401 message body?"
msgstr ""
-#: WWW/Library/Implementation/HTTP.c:1562
+#: WWW/Library/Implementation/HTTP.c:1643
msgid "Show the 407 message body?"
msgstr ""
@@ -2914,309 +3129,392 @@ msgstr ""
#. ** Take a chance and hope there is
#. ** something to display. - FM
#.
-#: WWW/Library/Implementation/HTTP.c:1667
+#: WWW/Library/Implementation/HTTP.c:1748
msgid "Unknown status reply from server!"
msgstr ""
-#: WWW/Library/Implementation/HTTelnet.c:97
+#: WWW/Library/Implementation/HTTelnet.c:101
+#, c-format
msgid "remote %s session:"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:164
+#: WWW/Library/Implementation/HTWAIS.c:161
msgid "Could not connect to WAIS server."
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:173
+#: WWW/Library/Implementation/HTWAIS.c:170
msgid "Could not open WAIS connection for reading."
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:197
+#: WWW/Library/Implementation/HTWAIS.c:194
msgid "Diagnostic code is "
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:469
+#: WWW/Library/Implementation/HTWAIS.c:463
msgid "Index "
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:473
+#: WWW/Library/Implementation/HTWAIS.c:467
+#, c-format
msgid " contains the following %d item%s relevant to \""
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:481
+#: WWW/Library/Implementation/HTWAIS.c:475
msgid "The first figure after each entry is its relative score, "
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:482
+#: WWW/Library/Implementation/HTWAIS.c:476
msgid "the second is the number of lines in the item."
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:523
+#: WWW/Library/Implementation/HTWAIS.c:517
msgid " (bad file name)"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:545
+#: WWW/Library/Implementation/HTWAIS.c:542
msgid "(bad doc id)"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:561
+#: WWW/Library/Implementation/HTWAIS.c:558
msgid "(Short Header record, can't display)"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:568
+#: WWW/Library/Implementation/HTWAIS.c:565
msgid ""
"\n"
"Long Header record, can't display\n"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:575
+#: WWW/Library/Implementation/HTWAIS.c:572
msgid ""
"\n"
"Text record\n"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:584
+#: WWW/Library/Implementation/HTWAIS.c:581
msgid ""
"\n"
"Headline record, can't display\n"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:592
+#: WWW/Library/Implementation/HTWAIS.c:589
msgid ""
"\n"
"Code record, can't display\n"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:696
+#: WWW/Library/Implementation/HTWAIS.c:691
msgid "Syntax error in WAIS URL"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:768
+#: WWW/Library/Implementation/HTWAIS.c:761
msgid " (WAIS Index)"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:775
+#: WWW/Library/Implementation/HTWAIS.c:768
msgid "WAIS Index: "
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:781
+#: WWW/Library/Implementation/HTWAIS.c:774
msgid "This is a link for searching the "
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:785
+#: WWW/Library/Implementation/HTWAIS.c:778
msgid " WAIS Index.\n"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:811
+#: WWW/Library/Implementation/HTWAIS.c:805
msgid ""
"\n"
"Enter the 's'earch command and then specify search words.\n"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:832
+#: WWW/Library/Implementation/HTWAIS.c:827
msgid " (in "
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:841
+#: WWW/Library/Implementation/HTWAIS.c:836
msgid "WAIS Search of \""
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:845
+#: WWW/Library/Implementation/HTWAIS.c:840
msgid "\" in: "
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:860
+#: WWW/Library/Implementation/HTWAIS.c:855
msgid "HTWAIS: Request too large."
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:869
+#: WWW/Library/Implementation/HTWAIS.c:864
msgid "Searching WAIS database..."
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:879
+#: WWW/Library/Implementation/HTWAIS.c:874
msgid "Search interrupted."
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:929
+#: WWW/Library/Implementation/HTWAIS.c:924
msgid "Can't convert format of WAIS document"
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:973
+#: WWW/Library/Implementation/HTWAIS.c:968
msgid "HTWAIS: Request too long."
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:987
+#.
+#. ** Actually do the transaction given by request_message.
+#.
+#: WWW/Library/Implementation/HTWAIS.c:982
msgid "Fetching WAIS document..."
msgstr ""
-#: WWW/Library/Implementation/HTWAIS.c:1026
+#. display_search_response(target, retrieval_response,
+#. wais_database, keywords);
+#: WWW/Library/Implementation/HTWAIS.c:1021
msgid "No text was returned!\n"
msgstr ""
-#: WWW/Library/Implementation/HTWSRC.c:285
+#: WWW/Library/Implementation/HTWSRC.c:287
msgid " NOT GIVEN in source file; "
msgstr ""
-#: WWW/Library/Implementation/HTWSRC.c:309
+#: WWW/Library/Implementation/HTWSRC.c:311
msgid " WAIS source file"
msgstr ""
-#: WWW/Library/Implementation/HTWSRC.c:316
+#: WWW/Library/Implementation/HTWSRC.c:318
msgid " description"
msgstr ""
-#: WWW/Library/Implementation/HTWSRC.c:326
+#: WWW/Library/Implementation/HTWSRC.c:328
msgid "Access links"
msgstr ""
-#: WWW/Library/Implementation/HTWSRC.c:343
+#: WWW/Library/Implementation/HTWSRC.c:345
msgid "Direct access"
msgstr ""
-#: WWW/Library/Implementation/HTWSRC.c:346
+#. * Proxy will be used if defined, so let user know that - FM *
+#: WWW/Library/Implementation/HTWSRC.c:348
msgid " (or via proxy server, if defined)"
msgstr ""
-#: WWW/Library/Implementation/HTWSRC.c:360
+#: WWW/Library/Implementation/HTWSRC.c:363
msgid "Maintainer"
msgstr ""
-#: WWW/Library/Implementation/HTWSRC.c:368
+#: WWW/Library/Implementation/HTWSRC.c:371
msgid "Host"
msgstr ""
-#: src/GridText.c:385
+#: src/GridText.c:607
msgid "Memory exhausted, display interrupted!"
msgstr ""
-#: src/GridText.c:390
+#: src/GridText.c:612
msgid "Memory exhausted, will interrupt transfer!"
msgstr ""
-#: src/GridText.c:2523
+#: src/GridText.c:3395
msgid " *** MEMORY EXHAUSTED ***"
msgstr ""
-#: src/GridText.c:4005 src/GridText.c:4012 src/LYList.c:260
+#: src/GridText.c:5733 src/GridText.c:5740 src/LYList.c:258
msgid "unknown field or link"
msgstr ""
-#: src/GridText.c:4021
+#: src/GridText.c:5749
msgid "text entry field"
msgstr ""
-#: src/GridText.c:4024
+#: src/GridText.c:5752
msgid "password entry field"
msgstr ""
-#: src/GridText.c:4027
+#: src/GridText.c:5755
msgid "checkbox"
msgstr ""
-#: src/GridText.c:4030
+#: src/GridText.c:5758
msgid "radio button"
msgstr ""
-#: src/GridText.c:4033
+#: src/GridText.c:5761
msgid "submit button"
msgstr ""
-#: src/GridText.c:4036
+#: src/GridText.c:5764
msgid "reset button"
msgstr ""
-#: src/GridText.c:4039
+#: src/GridText.c:5767
msgid "popup menu"
msgstr ""
-#: src/GridText.c:4042
+#: src/GridText.c:5770
msgid "hidden form field"
msgstr ""
-#: src/GridText.c:4045
+#: src/GridText.c:5773
msgid "text entry area"
msgstr ""
-#: src/GridText.c:4048
+#: src/GridText.c:5776
msgid "range entry field"
msgstr ""
-#: src/GridText.c:4051
+#: src/GridText.c:5779
msgid "file entry field"
msgstr ""
-#: src/GridText.c:4054
+#: src/GridText.c:5782
msgid "text-submit field"
msgstr ""
-#: src/GridText.c:4057
+#: src/GridText.c:5785
msgid "image-submit button"
msgstr ""
-#: src/GridText.c:4060
+#: src/GridText.c:5788
msgid "keygen field"
msgstr ""
-#: src/GridText.c:4063
+#: src/GridText.c:5791
msgid "unknown form field"
msgstr ""
-#: src/GridText.c:8810
+#. We can't open the file, what do we do?
+#: src/GridText.c:10348
+msgid "Can't open file for uploading"
+msgstr ""
+
+#. We got an error reading the file, what do we do?
+#: src/GridText.c:10359
+msgid "Short read from file, problem?"
+msgstr ""
+
+#: src/GridText.c:10721
+#, c-format
msgid "Submitting %s"
msgstr ""
-#: src/HTAlert.c:158 src/LYShowInfo.c:291
+#. ugliness has happened; inform user and do the best we can
+#: src/GridText.c:11887
+msgid "Hang Detect: TextAnchor struct corrupted - suggest aborting!"
+msgstr ""
+
+#. don't show previous state
+#: src/GridText.c:12092
+msgid "Wrap lines to fit displayed area?"
+msgstr ""
+
+#: src/GridText.c:12144
+msgid "Very long lines have been wrapped!"
+msgstr ""
+
+#: src/GridText.c:12591
+msgid "Very long lines have been truncated!"
+msgstr ""
+
+#: src/HTAlert.c:155 src/LYShowInfo.c:318
msgid "bytes"
msgstr ""
-#: src/HTAlert.c:162
+#: src/HTAlert.c:156
msgid "KB"
msgstr ""
-#: src/HTAlert.c:169
-msgid "Read %ld of %ld %s of data"
+#: src/HTAlert.c:255
+#, c-format
+msgid "Read %s of %s of data"
+msgstr ""
+
+#: src/HTAlert.c:257
+#, c-format
+msgid "Read %s of data"
msgstr ""
-#: src/HTAlert.c:171
-msgid "Read %ld %s of data"
+#: src/HTAlert.c:262
+#, c-format
+msgid ", %s/sec"
msgstr ""
-#: src/HTAlert.c:174
-msgid ", %ld %s/sec."
+#: src/HTAlert.c:269
+#, c-format
+msgid " (stalled for %ld sec)"
msgstr ""
-#: src/HTAlert.c:179
+#: src/HTAlert.c:271
+#, c-format
+msgid ", ETA %ld sec"
+msgstr ""
+
+#: src/HTAlert.c:277
msgid " (Press 'z' to abort)"
msgstr ""
-#: src/HTAlert.c:208
+#. Meta-note: don't move the following note from its place right
+#. in front of the first gettext(). As it is now, it should
+#. automatically appear in generated lynx.pot files. - kw
+#.
+#. NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+#. * will take the first byte of the translation as a positive response
+#. * to Yes/No questions. If you provide a translation for "no", lynx
+#. * will take the first byte of the translation as a negative response
+#. * to Yes/No questions. For both, lynx will also try to show the
+#. * first byte in the prompt as a character, instead of (y) or (n),
+#. * respectively. This will not work right for multibyte charsets!
+#. * Don't translate "yes" and "no" for CJK character sets (or translate
+#. * them to "yes" and "no"). For a translation using UTF-8, don't
+#. * translate if the translation would begin with anything but a 7-bit
+#. * (US_ASCII) character. That also means do not translate if the
+#. * translation would begin with anything but a 7-bit character, if
+#. * you use a single-byte character encoding (a charset like ISO-8859-n)
+#. * but anticipate that the message catalog may be used re-encoded in
+#. * UTF-8 form.
+#. * For translations using other character sets, you may also wish to
+#. * leave "yes" and "no" untranslated, if using (y) and (n) is the
+#. * preferred behavior.
+#. * Lynx will also accept y Y n N as responses unless there is a conflict
+#. * with the first letter of the "yes" or "no" translation.
+#.
+#: src/HTAlert.c:334
msgid "yes"
msgstr ""
-#: src/HTAlert.c:209
+#: src/HTAlert.c:335
msgid "no"
msgstr ""
-#: src/HTML.c:5828
+#: src/HTML.c:6342
msgid "Description:"
msgstr ""
-#: src/HTML.c:5833
+#: src/HTML.c:6347
msgid "(none)"
msgstr ""
-#: src/HTML.c:5837
+#: src/HTML.c:6351
msgid "Filepath:"
msgstr ""
-#: src/HTML.c:5842
+#: src/HTML.c:6356
msgid "(unknown)"
msgstr ""
-#: src/HTML.c:7127
+#: src/HTML.c:7804
msgid "Document has only hidden links. Use the 'l'ist command."
msgstr ""
-#: src/LYBookmark.c:154
+#: src/HTML.c:8328
+msgid "Source cache error - disk full?"
+msgstr ""
+
+#: src/HTML.c:8341
+msgid "Source cache error - not enough memory!"
+msgstr ""
+
+#: src/LYBookmark.c:166
msgid ""
" This file is an HTML representation of the X Mosaic hotlist file.\n"
" Outdated or invalid links may be removed by using the\n"
@@ -3224,20 +3522,26 @@ msgid ""
" been remapped by you or your system administrator."
msgstr ""
-#: src/LYBookmark.c:340
+#: src/LYBookmark.c:382
+msgid ""
+" You can delete links by the 'R' key<br>\n"
+"<ol>\n"
+msgstr ""
+
+#: src/LYBookmark.c:385
msgid ""
" You can delete links using the remove bookmark command. It is usually\n"
" the 'R' key but may have been remapped by you or your system\n"
" administrator."
msgstr ""
-#: src/LYBookmark.c:344
+#: src/LYBookmark.c:389
msgid ""
" This file also may be edited with a standard text editor to delete\n"
" outdated or invalid links, or to change their order."
msgstr ""
-#: src/LYBookmark.c:347
+#: src/LYBookmark.c:392
msgid ""
"Note: if you edit this file manually\n"
" you should not change the format within the lines\n"
@@ -3245,27 +3549,32 @@ msgid ""
" Make sure any bookmark link is saved as a single line."
msgstr ""
+#: src/LYBookmark.c:683
+#, c-format
+msgid "File may be recoverable from %s during this session"
+msgstr ""
+
#.
#. * Neither the path as given nor any components examined by
#. * backing up were stat()able. - kw
#.
-#: src/LYCgi.c:237
+#: src/LYCgi.c:232
msgid "Unable to access cgi script"
msgstr ""
-#: src/LYCgi.c:650 src/LYCgi.c:653
+#: src/LYCgi.c:651 src/LYCgi.c:654
msgid "Good Advice"
msgstr ""
-#: src/LYCgi.c:656
+#: src/LYCgi.c:657
msgid "An excellent http server for VMS is available via"
msgstr ""
-#: src/LYCgi.c:663
+#: src/LYCgi.c:664
msgid "this link"
msgstr ""
-#: src/LYCgi.c:667
+#: src/LYCgi.c:668
msgid "It provides state of the art CGI script support.\n"
msgstr ""
@@ -3273,52 +3582,54 @@ msgstr ""
msgid "Exiting via interrupt:"
msgstr ""
-#: src/LYCookie.c:2145
-msgid "(From Cookie Jar)"
-msgstr ""
-
-#: src/LYCookie.c:2568
+#: src/LYCookie.c:2659
msgid "(from a previous session)"
msgstr ""
-#.
-#. * Show the Maximum Gobble Date. - FM
-#.
-#: src/LYCookie.c:2628
+#: src/LYCookie.c:2719
msgid "Maximum Gobble Date:"
msgstr ""
-#: src/LYCurses.c:787
+#: src/LYCookie.c:2764
+msgid "Internal"
+msgstr ""
+
+#: src/LYCookie.c:2765
+msgid "cookie_domain_flag_set error, aborting program"
+msgstr ""
+
+#: src/LYCurses.c:936
msgid "Terminal initialisation failed - unknown terminal type?"
msgstr ""
-#: src/LYCurses.c:1030
+#: src/LYCurses.c:1328
msgid "Terminal ="
msgstr ""
-#: src/LYCurses.c:1035
+#: src/LYCurses.c:1332
msgid "You must use a vt100, 200, etc. terminal with this program."
msgstr ""
-#: src/LYCurses.c:1113
+#: src/LYCurses.c:1384
msgid "Your Terminal type is unknown!"
msgstr ""
-#: src/LYCurses.c:1114
+#: src/LYCurses.c:1385
msgid "Enter a terminal type:"
msgstr ""
-#: src/LYCurses.c:1127
+#: src/LYCurses.c:1398
msgid "TERMINAL TYPE IS SET TO"
msgstr ""
-#: src/LYCurses.c:1370
+#: src/LYCurses.c:1749
+#, c-format
msgid ""
"\n"
"A Fatal error has occurred in %s Ver. %s\n"
msgstr ""
-#: src/LYCurses.c:1372
+#: src/LYCurses.c:1751
msgid ""
"\n"
"Please notify your system administrator to confirm a bug, and if\n"
@@ -3328,62 +3639,79 @@ msgid ""
"TRACEBACK if it can be captured, and any other relevant information.\n"
msgstr ""
-#: src/LYDownload.c:503
+#: src/LYEdit.c:264
+msgid "Editor killed by signal"
+msgstr ""
+
+#: src/LYEdit.c:266
+#, c-format
+msgid "Editor returned with error status, %s"
+msgstr ""
+
+#: src/LYEdit.c:267
+msgid "reason unknown."
+msgstr ""
+
+#: src/LYDownload.c:520
msgid "Downloaded link:"
msgstr ""
-#: src/LYDownload.c:508
+#: src/LYDownload.c:525
msgid "Suggested file name:"
msgstr ""
-#: src/LYDownload.c:513
+#: src/LYDownload.c:530
msgid "Standard download options:"
msgstr ""
-#: src/LYDownload.c:514
+#: src/LYDownload.c:531
msgid "Download options:"
msgstr ""
-#: src/LYDownload.c:528
+#: src/LYDownload.c:545
msgid "Save to disk"
msgstr ""
-#: src/LYDownload.c:530
+#: src/LYDownload.c:547
msgid "Save to disk disabled."
msgstr ""
-#: src/LYDownload.c:534 src/LYPrint.c:1303
+#: src/LYDownload.c:551 src/LYPrint.c:1338
msgid "Local additions:"
msgstr ""
-#: src/LYDownload.c:543 src/LYUpload.c:226
+#: src/LYDownload.c:560 src/LYUpload.c:224
msgid "No Name Given"
msgstr ""
-#: src/LYHistory.c:405
+#: src/LYHistory.c:633
msgid "You selected:"
msgstr ""
-#: src/LYHistory.c:429 src/LYHistory.c:597
+#: src/LYHistory.c:657 src/LYHistory.c:905
msgid "(no address)"
msgstr ""
-#: src/LYHistory.c:433
+#: src/LYHistory.c:661
msgid " (internal)"
msgstr ""
-#: src/LYHistory.c:435
+#: src/LYHistory.c:663
msgid " (was internal)"
msgstr ""
-#: src/LYHistory.c:524
+#: src/LYHistory.c:761
msgid " (From History)"
msgstr ""
-#: src/LYHistory.c:561
+#: src/LYHistory.c:825
msgid "You visited (POSTs, bookmark, menu and list files excluded):"
msgstr ""
+#: src/LYHistory.c:1124
+msgid "(No messages yet)"
+msgstr ""
+
#: src/LYLeaks.c:78
msgid "Invalid pointer detected."
msgstr ""
@@ -3392,11 +3720,11 @@ msgstr ""
msgid "Pointer:"
msgstr ""
-#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:137
+#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:136
msgid "FileName:"
msgstr ""
-#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:140 src/LYLeaks.c:151
+#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:139 src/LYLeaks.c:150
msgid "LineCount:"
msgstr ""
@@ -3408,467 +3736,522 @@ msgstr ""
msgid "Contains:"
msgstr ""
-#: src/LYLeaks.c:134
+#: src/LYLeaks.c:133
msgid "ByteSize:"
msgstr ""
-#: src/LYLeaks.c:148
+#: src/LYLeaks.c:147
msgid "realloced:"
msgstr ""
-#: src/LYLeaks.c:169
+#: src/LYLeaks.c:170
msgid "Total memory leakage this run:"
msgstr ""
-#: src/LYList.c:93
+#: src/LYList.c:91
msgid "References in "
msgstr ""
-#: src/LYList.c:94
+#: src/LYList.c:92
msgid "this document:"
msgstr ""
-#: src/LYList.c:100
+#: src/LYList.c:98
msgid "Visible links:"
msgstr ""
-#: src/LYList.c:201 src/LYList.c:321
+#: src/LYList.c:199 src/LYList.c:319
msgid "Hidden links:"
msgstr ""
-#: src/LYList.c:269
+#: src/LYList.c:267
msgid "References"
msgstr ""
-#: src/LYList.c:271
+#: src/LYList.c:269
msgid "Visible links"
msgstr ""
-#: src/LYLocal.c:242
+#: src/LYLocal.c:267
+#, c-format
msgid "Unable to get status of '%s'."
msgstr ""
-#: src/LYLocal.c:274
+#: src/LYLocal.c:301
msgid "The selected item is not a file or a directory! Request ignored."
msgstr ""
-#: src/LYLocal.c:301
+#: src/LYLocal.c:383
+#, c-format
+msgid "Unable to %s due to system error!"
+msgstr ""
+
+#. error return
+#: src/LYLocal.c:415
+#, c-format
+msgid "Probable failure to %s due to system error!"
+msgstr ""
+
+#: src/LYLocal.c:453
+#, c-format
msgid "move %s to %s"
msgstr ""
-#: src/LYLocal.c:322
+#: src/LYLocal.c:475
msgid "There is already a directory with that name! Request ignored."
msgstr ""
-#: src/LYLocal.c:324
+#: src/LYLocal.c:477
msgid "There is already a file with that name! Request ignored."
msgstr ""
-#: src/LYLocal.c:326
+#: src/LYLocal.c:479
msgid "The specified name is already in use! Request ignored."
msgstr ""
-#: src/LYLocal.c:337
+#: src/LYLocal.c:490
msgid "Destination has different owner! Request denied."
msgstr ""
-#: src/LYLocal.c:340
+#: src/LYLocal.c:493
msgid "Destination is not a valid directory! Request denied."
msgstr ""
-#: src/LYLocal.c:363
-msgid "Remove all tagged files and directories "
+#: src/LYLocal.c:516
+msgid "Remove all tagged files and directories?"
msgstr ""
-#: src/LYLocal.c:384
+#: src/LYLocal.c:537
+#, c-format
msgid "remove %s"
msgstr ""
-#: src/LYLocal.c:426
+#: src/LYLocal.c:580
msgid "Enter new location for tagged items: "
msgstr ""
-#: src/LYLocal.c:488
+#: src/LYLocal.c:649
msgid "Path too long"
msgstr ""
-#: src/LYLocal.c:519
+#: src/LYLocal.c:680
msgid "Source and destination are the same location - request ignored!"
msgstr ""
-#.
-#. * Change the name of the file or directory.
-#.
-#: src/LYLocal.c:579
+#: src/LYLocal.c:738
msgid "Enter new name for directory: "
msgstr ""
-#: src/LYLocal.c:581
+#: src/LYLocal.c:740
msgid "Enter new name for file: "
msgstr ""
-#: src/LYLocal.c:592 src/LYUpload.c:106
-msgid "Illegal character \"/\" found! Request ignored."
+#: src/LYLocal.c:751
+msgid "Illegal character (path-separator) found! Request ignored."
msgstr ""
-#: src/LYLocal.c:639
+#: src/LYLocal.c:800
msgid "Enter new location for directory: "
msgstr ""
-#: src/LYLocal.c:641
+#: src/LYLocal.c:802
msgid "Enter new location for file: "
msgstr ""
-#: src/LYLocal.c:665
-msgid "Unexpected failure - unable to find trailing \"/\""
+#: src/LYLocal.c:827
+msgid "Unexpected failure - unable to find trailing path separator"
msgstr ""
-#: src/LYLocal.c:686
+#: src/LYLocal.c:847
msgid "Source and destination are the same location! Request ignored!"
msgstr ""
-#: src/LYLocal.c:733
+#: src/LYLocal.c:894
msgid "Modify name, location, or permission (n, l, or p): "
msgstr ""
-#: src/LYLocal.c:735
-msgid "Modify name, or location (n or l): "
+#: src/LYLocal.c:896
+msgid "Modify name or location (n or l): "
msgstr ""
#.
#. * Code for changing ownership needed here.
#.
-#: src/LYLocal.c:761
+#: src/LYLocal.c:925
msgid "This feature not yet implemented!"
msgstr ""
-#: src/LYLocal.c:779
+#: src/LYLocal.c:943
msgid "Enter name of file to create: "
msgstr ""
-#: src/LYLocal.c:789 src/LYLocal.c:837
+#: src/LYLocal.c:951 src/LYLocal.c:999
msgid "Illegal redirection \"//\" found! Request ignored."
msgstr ""
-#: src/LYLocal.c:804
+#: src/LYLocal.c:966
+#, c-format
msgid "create %s"
msgstr ""
-#: src/LYLocal.c:827
+#: src/LYLocal.c:991
msgid "Enter name for new directory: "
msgstr ""
-#: src/LYLocal.c:870
+#: src/LYLocal.c:1042
msgid "Create file or directory (f or d): "
msgstr ""
-#: src/LYLocal.c:916
-msgid "Remove '%s' and all of its contents: "
+#: src/LYLocal.c:1083
+#, c-format
+msgid "Remove '%s' and all of its contents?"
msgstr ""
-#: src/LYLocal.c:919
-msgid "Remove directory and all of its contents: "
+#: src/LYLocal.c:1086
+msgid "Remove directory and all of its contents?"
msgstr ""
-#: src/LYLocal.c:923
-msgid "Remove file '%s': "
+#: src/LYLocal.c:1090
+#, c-format
+msgid "Remove file '%s'?"
msgstr ""
-#: src/LYLocal.c:925
-msgid "Remove file: "
+#: src/LYLocal.c:1092
+msgid "Remove file?"
msgstr ""
-#: src/LYLocal.c:930
-msgid "Remove symbolic link '%s': "
+#: src/LYLocal.c:1097
+#, c-format
+msgid "Remove symbolic link '%s'?"
msgstr ""
-#: src/LYLocal.c:932
-msgid "Remove symbolic link: "
+#: src/LYLocal.c:1099
+msgid "Remove symbolic link?"
msgstr ""
-#: src/LYLocal.c:1024
+#: src/LYLocal.c:1190
msgid "Sorry, don't know how to permit non-UNIX files yet."
msgstr ""
-#: src/LYLocal.c:1057
+#: src/LYLocal.c:1220
msgid "Unable to open permit options file"
msgstr ""
-#: src/LYLocal.c:1084
+#: src/LYLocal.c:1247
msgid "Specify permissions below:"
msgstr ""
-#: src/LYLocal.c:1085 src/LYShowInfo.c:173
+#: src/LYLocal.c:1248 src/LYShowInfo.c:196
msgid "Owner:"
msgstr ""
-#: src/LYLocal.c:1101
+#: src/LYLocal.c:1264
msgid "Group"
msgstr ""
-#: src/LYLocal.c:1117
+#: src/LYLocal.c:1280
msgid "Others:"
msgstr ""
-#: src/LYLocal.c:1135
+#: src/LYLocal.c:1298
msgid "form to permit"
msgstr ""
-#: src/LYLocal.c:1233
+#: src/LYLocal.c:1396
msgid "Invalid mode format."
msgstr ""
-#: src/LYLocal.c:1237
+#: src/LYLocal.c:1400
msgid "Invalid syntax format."
msgstr ""
-#: src/LYLocal.c:1356
+#: src/LYLocal.c:1575
msgid "NULL URL pointer"
msgstr ""
-#: src/LYLocal.c:1441
+#: src/LYLocal.c:1670
msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
msgstr ""
-#: src/LYLocal.c:1553
+#: src/LYLocal.c:1782
+#, c-format
msgid "Executing %s "
msgstr ""
-#: src/LYLocal.c:1556
+#: src/LYLocal.c:1785
msgid "Executing system command. This might take a while."
msgstr ""
-#: src/LYLocal.c:1601
+#: src/LYLocal.c:1831
msgid "Unable to open file management menu file."
msgstr ""
-#: src/LYLocal.c:1635
+#: src/LYLocal.c:1862
msgid "Current directory:"
msgstr ""
-#: src/LYLocal.c:1638 src/LYLocal.c:1656
+#: src/LYLocal.c:1865 src/LYLocal.c:1883
msgid "Current selection:"
msgstr ""
-#: src/LYLocal.c:1642
+#: src/LYLocal.c:1869
msgid "Nothing currently selected."
msgstr ""
-#: src/LYLocal.c:1657
+#: src/LYLocal.c:1884
msgid "tagged item:"
msgstr ""
-#: src/LYLocal.c:1657
+#: src/LYLocal.c:1884
msgid "tagged items:"
msgstr ""
-#: src/LYLocal.c:1754 src/LYLocal.c:1765
+#: src/LYLocal.c:1983 src/LYLocal.c:1994
msgid "Illegal filename; request ignored."
msgstr ""
-#: src/LYLocal.c:1806
+#: src/LYLocal.c:2137
msgid "The selected item is not a directory! Request ignored."
msgstr ""
-#: src/LYLocal.c:1809
+#. directory not writable
+#: src/LYLocal.c:2141
msgid "Install in the selected directory not permitted."
msgstr ""
-#: src/LYLocal.c:1813
+#: src/LYLocal.c:2146
msgid "Just a moment, ..."
msgstr ""
-#: src/LYLocal.c:1843
-msgid "Installation complete"
+#: src/LYLocal.c:2163
+msgid "Error buiding install args"
msgstr ""
-#: src/LYLocal.c:2013
-msgid "Temporary URL or list would be too long."
+#: src/LYLocal.c:2178 src/LYLocal.c:2210
+#, c-format
+msgid "Source and target are the same: %s"
msgstr ""
-#: src/LYLocal.c:2055
-msgid "Unable to %s due to system error!"
+#: src/LYLocal.c:2188 src/LYLocal.c:2220
+#, c-format
+msgid "Already in target directory: %s"
msgstr ""
-#. !HAVE_WAITPID
-#. error return
-#: src/LYLocal.c:2084
-msgid "Probable failure to %s due to system error!"
+#: src/LYLocal.c:2238
+msgid "Installation complete"
msgstr ""
-#. VMS
-#: src/LYMail.c:736
+#: src/LYLocal.c:2427
+msgid "Temporary URL or list would be too long."
+msgstr ""
+
+#: src/LYMail.c:503
+msgid "Sending"
+msgstr ""
+
+#: src/LYMail.c:989
+#, c-format
msgid "The link %s :?: %s \n"
msgstr ""
-#: src/LYMail.c:738
+#: src/LYMail.c:991
+#, c-format
msgid "called \"%s\"\n"
msgstr ""
-#: src/LYMail.c:739
+#: src/LYMail.c:992
+#, c-format
msgid "in the file \"%s\" called \"%s\"\n"
msgstr ""
-#: src/LYMail.c:740
+#: src/LYMail.c:993
msgid "was requested but was not available."
msgstr ""
-#: src/LYMail.c:741
+#: src/LYMail.c:994
msgid "Thought you might want to know."
msgstr ""
-#: src/LYMail.c:743
+#: src/LYMail.c:996
msgid "This message was automatically generated by"
msgstr ""
-#: src/LYMail.c:744
-msgid "Lynx ver. %s"
-msgstr ""
-
-#: src/LYMail.c:1345
-msgid "Personal_name: "
-msgstr ""
-
-#: src/LYMail.c:1347
-msgid "X_Personal_name: "
-msgstr ""
-
-#: src/LYMail.c:1350
-msgid "Personal Name: "
-msgstr ""
-
-#: src/LYMain.c:679
+#: src/LYMain.c:897
msgid "No Winsock found, sorry."
msgstr ""
-#: src/LYMain.c:834
+#: src/LYMain.c:1103
msgid "You MUST define a valid TMP or TEMP area!\n"
msgstr ""
-#: src/LYMain.c:1229
+#: src/LYMain.c:1156 src/LYMainLoop.c:5117
+msgid "No such directory"
+msgstr ""
+
+#: src/LYMain.c:1378
+#, c-format
msgid ""
"\n"
"Configuration file %s is not available.\n"
"\n"
msgstr ""
-#.
-#. * Make sure we have the character sets declared.
-#. * This will initialize the CHARTRANS handling. - KW
-#.
-#: src/LYMain.c:1245
+#: src/LYMain.c:1388
msgid ""
"\n"
"Lynx character sets not declared.\n"
"\n"
msgstr ""
-#: src/LYMain.c:1269
+#: src/LYMain.c:1417
msgid ""
"\n"
"Lynx edit map not declared.\n"
"\n"
msgstr ""
-#: src/LYMain.c:1312
+#: src/LYMain.c:1446
+#, c-format
msgid ""
"\n"
"Lynx file %s is not available.\n"
"\n"
msgstr ""
-#: src/LYMain.c:1908
+#: src/LYMain.c:1704
+msgid "Warning:"
+msgstr ""
+
+#: src/LYMain.c:2247
msgid "persistent cookies state will be changed in next session only."
msgstr ""
-#: src/LYMain.c:2554
-msgid ""
-"\n"
-"%s Version %s (%.*s)\n"
+#: src/LYMain.c:2477 src/LYMain.c:2525
+#, c-format
+msgid "Lynx: ignoring unrecognized charset=%s\n"
+msgstr ""
+
+#: src/LYMain.c:3047
+#, c-format
+msgid "%s Version %s (%s)\n"
msgstr ""
-#: src/LYMain.c:2566
+#: src/LYMain.c:3072
+#, c-format
msgid "Built on %s %s %s\n"
msgstr ""
-#: src/LYMain.c:2570
-msgid "Copyrights held by the University of Kansas, CERN, and other contributors.\n"
+#: src/LYMain.c:3077
+msgid ""
+"Copyrights held by the University of Kansas, CERN, and other contributors.\n"
msgstr ""
-#: src/LYMain.c:2572
+#: src/LYMain.c:3079
msgid "Distributed under the GNU General Public License.\n"
msgstr ""
-#: src/LYMain.c:2574
+#: src/LYMain.c:3081
msgid ""
"See http://lynx.browser.org/ and the online help for more information.\n"
"\n"
msgstr ""
-#: src/LYMain.c:3103
+#: src/LYMain.c:3800
+#, c-format
msgid "USAGE: %s [options] [file]\n"
msgstr ""
-#: src/LYMain.c:3104
+#: src/LYMain.c:3801
msgid "Options are:\n"
msgstr ""
-#: src/LYMain.c:3312
+#: src/LYMain.c:4060
+#, c-format
msgid "%s: Invalid Option: %s\n"
msgstr ""
-#: src/LYMainLoop.c:305 src/LYMainLoop.c:3797
-msgid "Entry into main screen"
-msgstr ""
-
-#: src/LYMainLoop.c:1204
-msgid "Reparsing document under current settings..."
-msgstr ""
-
-#: src/LYMainLoop.c:1379 src/LYMainLoop.c:1383
-msgid "Fatal error - could not open output file %s\n"
-msgstr ""
-
-#: src/LYMainLoop.c:3010
-msgid "Enctype multipart/form-data not yet supported! Cannot submit."
+#: src/LYMainLoop.c:512
+#, c-format
+msgid "Internal error: Invalid mouse link %d!"
msgstr ""
#.
-#. * Make a name for this new URL.
+#. * Make a name for this new URL.
#.
-#: src/LYMainLoop.c:3728
+#: src/LYMainLoop.c:625 src/LYMainLoop.c:5139
msgid "A URL specified by the user"
msgstr ""
+#: src/LYMainLoop.c:1114
+msgid "Enctype multipart/form-data not yet supported! Cannot submit."
+msgstr ""
+
#.
#. * Make a name for this help file.
#.
-#: src/LYMainLoop.c:3754
+#: src/LYMainLoop.c:3097
msgid "Help Screen"
msgstr ""
-#: src/LYMainLoop.c:3778
+#: src/LYMainLoop.c:3231
msgid "System Index"
msgstr ""
-#: src/LYMainLoop.c:5447
-msgid "charset for this document specified explicitely, sorry..."
+#: src/LYMainLoop.c:3611 src/LYMainLoop.c:5347
+msgid "Entry into main screen"
+msgstr ""
+
+#: src/LYMainLoop.c:3897
+msgid "No next document present"
+msgstr ""
+
+#: src/LYMainLoop.c:4206
+msgid "charset for this document specified explicitly, sorry..."
+msgstr ""
+
+#: src/LYMainLoop.c:5093
+msgid "cd to:"
+msgstr ""
+
+#: src/LYMainLoop.c:5120
+msgid "A component of path is not a directory"
+msgstr ""
+
+#: src/LYMainLoop.c:5123
+msgid "failed to change directory"
msgstr ""
-#: src/LYMainLoop.c:6228
+#: src/LYMainLoop.c:6291
+msgid "Reparsing document under current settings..."
+msgstr ""
+
+#: src/LYMainLoop.c:6579 src/LYMainLoop.c:6583
+#, c-format
+msgid "Fatal error - could not open output file %s\n"
+msgstr ""
+
+#: src/LYMainLoop.c:7719 src/LYMainLoop.c:7892
+msgid "-index-"
+msgstr ""
+
+#: src/LYMainLoop.c:7829
msgid "lynx: Can't access startfile"
msgstr ""
-#: src/LYMainLoop.c:6240
+#: src/LYMainLoop.c:7842
msgid "lynx: Start file could not be found or is not text/html or text/plain"
msgstr ""
-#: src/LYMainLoop.c:6241
+#: src/LYMainLoop.c:7843
msgid " Exiting..."
msgstr ""
+#: src/LYMainLoop.c:7886
+msgid "-more-"
+msgstr ""
+
#. Enable scrolling.
-#: src/LYNews.c:180
+#: src/LYNews.c:203
msgid "You will be posting to:"
msgstr ""
@@ -3876,7 +4259,7 @@ msgstr ""
#. * Get the mail address for the From header,
#. * offering personal_mail_address as default.
#.
-#: src/LYNews.c:189
+#: src/LYNews.c:212
msgid ""
"\n"
"\n"
@@ -3888,14 +4271,14 @@ msgstr ""
#. * document's title as the default if this is a
#. * followup rather than a new post. - FM
#.
-#: src/LYNews.c:208
+#: src/LYNews.c:230
msgid ""
"\n"
"\n"
" Please provide or edit the Subject: header\n"
msgstr ""
-#: src/LYNews.c:258
+#: src/LYNews.c:322
msgid ""
"\n"
"\n"
@@ -3905,93 +4288,100 @@ msgstr ""
#.
#. * Use the built in line editior.
#.
-#: src/LYNews.c:330
+#: src/LYNews.c:379
msgid ""
"\n"
"\n"
" Please enter your message below."
msgstr ""
-#: src/LYNews.c:364
+#: src/LYNews.c:425
msgid "Message has no original text!"
msgstr ""
-#: src/LYOptions.c:659
+#: src/LYOptions.c:743
msgid "review/edit B)ookmarks files"
msgstr ""
-#: src/LYOptions.c:661
+#: src/LYOptions.c:745
msgid "B)ookmark file: "
msgstr ""
-#.
-#. * preformatted text follows
-#.
-#: src/LYOptions.c:4143
-msgid "Personal Preferences"
-msgstr ""
-
-#. Cookies: SELECT
-#: src/LYOptions.c:4146
-msgid "Cookies"
+#: src/LYOptions.c:2507 src/LYOptions.c:2531
+#, c-format
+msgid "Use %s to invoke the Options menu!"
msgstr ""
-#. Editor: INPUT
-#: src/LYOptions.c:4160
-msgid "Editor"
+#: src/LYOptions.c:3208
+msgid "General Preferences"
msgstr ""
-#: src/LYOptions.c:4165
-msgid "Emacs keys"
+#. ***************************************************************
+#. User Mode: SELECT
+#: src/LYOptions.c:3212
+msgid "User mode"
msgstr ""
-#: src/LYOptions.c:4171
-msgid "Keypad mode"
+#. Editor: INPUT
+#: src/LYOptions.c:3218
+msgid "Editor"
msgstr ""
-#. Mail Address: INPUT
-#: src/LYOptions.c:4201
-msgid "Personal mail address"
+#. Search Type: SELECT
+#: src/LYOptions.c:3223
+msgid "Type of Search"
msgstr ""
-#: src/LYOptions.c:4206
-msgid "Searching type"
+#. Cookies: SELECT
+#: src/LYOptions.c:3229
+msgid "Cookies"
msgstr ""
-#: src/LYOptions.c:4217
-msgid "Show color"
+#: src/LYOptions.c:3243
+msgid "Keyboard Input"
msgstr ""
-#. Show cursor: ON/OFF
-#: src/LYOptions.c:4256
-msgid "Show cursor"
+#. ***************************************************************
+#. Keypad Mode: SELECT
+#: src/LYOptions.c:3247
+msgid "Keypad mode"
msgstr ""
-#. User Mode: SELECT
-#: src/LYOptions.c:4262
-msgid "User mode"
+#. Emacs keys: ON/OFF
+#: src/LYOptions.c:3253
+msgid "Emacs keys"
msgstr ""
#. VI Keys: ON/OFF
-#: src/LYOptions.c:4268
+#: src/LYOptions.c:3259
msgid "VI keys"
msgstr ""
-#. Display Character Set: SELECT
-#: src/LYOptions.c:4274
-msgid "Display character set"
+#. Line edit style: SELECT
+#. well, at least 2 line edit styles available
+#: src/LYOptions.c:3266
+msgid "Line edit style"
msgstr ""
-#. X Display: INPUT
-#: src/LYOptions.c:4287
-msgid "X Display"
+#. Keyboard layout: SELECT
+#: src/LYOptions.c:3278
+msgid "Keyboard layout"
msgstr ""
-#: src/LYOptions.c:4293
-msgid "Document Layout"
+#.
+#. * Display and Character Set
+#.
+#: src/LYOptions.c:3291
+msgid "Display and Character Set"
msgstr ""
-#: src/LYOptions.c:4310
+#. ***************************************************************
+#. Display Character Set: SELECT
+#: src/LYOptions.c:3295
+msgid "Display character set"
+msgstr ""
+
+#: src/LYOptions.c:3324
msgid "Assumed document character set"
msgstr ""
@@ -4000,158 +4390,202 @@ msgstr ""
#. * we split the header to make it more readable:
#. * "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
#.
-#: src/LYOptions.c:4327
+#: src/LYOptions.c:3344
msgid "CJK mode"
msgstr ""
-#: src/LYOptions.c:4329
+#: src/LYOptions.c:3346
msgid "Raw 8-bit"
msgstr ""
-#. HTML error recovery: SELECT
-#: src/LYOptions.c:4336
-msgid "HTML error recovery"
+#. X Display: INPUT
+#: src/LYOptions.c:3354
+msgid "X Display"
+msgstr ""
+
+#.
+#. * Document Appearance
+#.
+#: src/LYOptions.c:3360
+msgid "Document Appearance"
+msgstr ""
+
+#: src/LYOptions.c:3366
+msgid "Show color"
+msgstr ""
+
+#. Show cursor: ON/OFF
+#: src/LYOptions.c:3390
+msgid "Show cursor"
msgstr ""
#. Select Popups: ON/OFF
-#: src/LYOptions.c:4342
+#: src/LYOptions.c:3396
msgid "Popups for select fields"
msgstr ""
+#. HTML error recovery: SELECT
+#: src/LYOptions.c:3403
+msgid "HTML error recovery"
+msgstr ""
+
#. Show Images: SELECT
-#: src/LYOptions.c:4348
+#: src/LYOptions.c:3410
msgid "Show images"
msgstr ""
#. Verbose Images: ON/OFF
-#: src/LYOptions.c:4362
+#: src/LYOptions.c:3424
msgid "Verbose images"
msgstr ""
#.
-#. * Bookmark Options
+#. * Headers Transferred to Remote Servers
#.
-#: src/LYOptions.c:4370
-msgid "Bookmark Options"
+#: src/LYOptions.c:3432
+msgid "Headers Transferred to Remote Servers"
msgstr ""
-#. Multi-Bookmark Mode: SELECT
-#: src/LYOptions.c:4374
-msgid "Multi-bookmarks"
+#. ***************************************************************
+#. Mail Address: INPUT
+#: src/LYOptions.c:3436
+msgid "Personal mail address"
msgstr ""
-#: src/LYOptions.c:4391
-msgid "Review/edit Bookmarks files"
+#. Preferred Document Character Set: INPUT
+#: src/LYOptions.c:3441
+msgid "Preferred document character set"
msgstr ""
-#: src/LYOptions.c:4393
-msgid "Goto multi-bookmark menu"
+#. Preferred Document Language: INPUT
+#: src/LYOptions.c:3446
+msgid "Preferred document language"
msgstr ""
-#: src/LYOptions.c:4396
-msgid "Bookmarks file"
+#: src/LYOptions.c:3452
+msgid "User-Agent header"
+msgstr ""
+
+#.
+#. * Listing and Accessing Files
+#.
+#: src/LYOptions.c:3460
+msgid "Listing and Accessing Files"
msgstr ""
-#: src/LYOptions.c:4407
+#. ***************************************************************
+#. FTP sort: SELECT
+#: src/LYOptions.c:3464
msgid "FTP sort criteria"
msgstr ""
-#: src/LYOptions.c:4414
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3471
msgid "Local directory sort criteria"
msgstr ""
-#: src/LYOptions.c:4422
+#: src/LYOptions.c:3479
msgid "Show dot files"
msgstr ""
-#. Execution links: SELECT
-#: src/LYOptions.c:4430
+#: src/LYOptions.c:3487
msgid "Execution links"
msgstr ""
-#. ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3507
+msgid "Show transfer rate"
+msgstr ""
+
#.
-#. * Headers transferred to remote server
+#. * Special Files and Screens
#.
-#: src/LYOptions.c:4451
-msgid "Headers transferred to remote server"
+#: src/LYOptions.c:3516
+msgid "Special Files and Screens"
msgstr ""
-#. Preferred Document Character Set: INPUT
-#: src/LYOptions.c:4454
-msgid "Preferred document character set"
+#: src/LYOptions.c:3521
+msgid "Multi-bookmarks"
msgstr ""
-#. Preferred Document Language: INPUT
-#: src/LYOptions.c:4459
-msgid "Preferred document language"
+#: src/LYOptions.c:3529
+msgid "Review/edit Bookmarks files"
msgstr ""
-#: src/LYOptions.c:4465
-msgid "User-Agent header"
+#: src/LYOptions.c:3531
+msgid "Goto multi-bookmark menu"
msgstr ""
-#: src/LYPrint.c:769
-msgid "Sending"
+#: src/LYOptions.c:3533
+msgid "Bookmarks file"
msgstr ""
-#: src/LYPrint.c:1261
+#. Visited Pages: SELECT
+#: src/LYOptions.c:3539
+msgid "Visited Pages"
+msgstr ""
+
+#: src/LYPrint.c:959
+msgid " Print job complete.\n"
+msgstr ""
+
+#: src/LYPrint.c:1296
msgid "Document:"
msgstr ""
-#: src/LYPrint.c:1262
+#: src/LYPrint.c:1297
msgid "Number of lines:"
msgstr ""
-#: src/LYPrint.c:1263
+#: src/LYPrint.c:1298
msgid "Number of pages:"
msgstr ""
-#: src/LYPrint.c:1264
+#: src/LYPrint.c:1299
msgid "pages"
msgstr ""
-#: src/LYPrint.c:1264
+#: src/LYPrint.c:1299
msgid "page"
msgstr ""
-#: src/LYPrint.c:1265
+#: src/LYPrint.c:1300
msgid "(approximately)"
msgstr ""
-#: src/LYPrint.c:1270
+#: src/LYPrint.c:1305
msgid "Some print functions have been disabled!"
msgstr ""
-#: src/LYPrint.c:1274
+#: src/LYPrint.c:1309
msgid "Standard print options:"
msgstr ""
-#: src/LYPrint.c:1275
+#: src/LYPrint.c:1310
msgid "Print options:"
msgstr ""
-#: src/LYPrint.c:1281
+#: src/LYPrint.c:1316
msgid "Save to a local file"
msgstr ""
-#: src/LYPrint.c:1283
+#: src/LYPrint.c:1318
msgid "Save to disk disabled"
msgstr ""
-#: src/LYPrint.c:1289
+#: src/LYPrint.c:1324
msgid "Mail the file"
msgstr ""
-#: src/LYPrint.c:1295
+#: src/LYPrint.c:1330
msgid "Print to the screen"
msgstr ""
-#: src/LYPrint.c:1299
+#: src/LYPrint.c:1334
msgid "Print out on a printer attached to your vt100 terminal"
msgstr ""
-#: src/LYReadCFG.c:382
+#: src/LYReadCFG.c:340
msgid ""
"Syntax Error parsing COLOR in configuration file:\n"
"The line must be of the form:\n"
@@ -4161,245 +4595,266 @@ msgid ""
"The special strings 'nocolor' or 'default', or\n"
msgstr ""
-#: src/LYReadCFG.c:395
+#: src/LYReadCFG.c:353
msgid "Offending line:"
msgstr ""
-#: src/LYReadCFG.c:645
-msgid "key remapping of "
+#: src/LYReadCFG.c:660
+#, c-format
+msgid "key remapping of %s to %s for %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:667
+#, c-format
+msgid "key remapping of %s to %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:688
+#, c-format
+msgid "invalid line-editor selection %s for key %s, selecting all\n"
+msgstr ""
+
+#: src/LYReadCFG.c:715 src/LYReadCFG.c:728
+#, c-format
+msgid ""
+"setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"
msgstr ""
-#: src/LYReadCFG.c:647
-msgid " failed"
+#: src/LYReadCFG.c:733
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) for %s failed\n"
msgstr ""
-#: src/LYReadCFG.c:749
+#: src/LYReadCFG.c:838
+#, c-format
msgid "Lynx: cannot start, CERN rules file %s is not available\n"
msgstr ""
-#: src/LYReadCFG.c:751
+#: src/LYReadCFG.c:840
msgid "(no name)"
msgstr ""
-#: src/LYReadCFG.c:1285
+#: src/LYReadCFG.c:1658
+#, c-format
msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
msgstr ""
-#: src/LYReadCFG.c:1287
+#: src/LYReadCFG.c:1660
+#, c-format
msgid "Last attempted include was '%s',\n"
msgstr ""
-#: src/LYReadCFG.c:1288
+#: src/LYReadCFG.c:1661
+#, c-format
msgid "included from '%s'.\n"
msgstr ""
-#. no absolute path... for lynx.cfg on DOS/Win32
-#: src/LYReadCFG.c:1737 src/LYReadCFG.c:1750 src/LYReadCFG.c:1778
+#: src/LYReadCFG.c:2116 src/LYReadCFG.c:2129 src/LYReadCFG.c:2165
msgid "The following is read from your lynx.cfg file."
msgstr ""
-#: src/LYReadCFG.c:1738 src/LYReadCFG.c:1751
+#: src/LYReadCFG.c:2117 src/LYReadCFG.c:2130
msgid "Please read the distribution"
msgstr ""
-#: src/LYReadCFG.c:1744 src/LYReadCFG.c:1754
+#: src/LYReadCFG.c:2123 src/LYReadCFG.c:2133
msgid "for more comments."
msgstr ""
-#: src/LYReadCFG.c:1760
+#: src/LYReadCFG.c:2147
msgid "RELOAD THE CHANGES"
msgstr ""
-#: src/LYReadCFG.c:1769
+#: src/LYReadCFG.c:2156
msgid "Your primary configuration"
msgstr ""
-#: src/LYShowInfo.c:103
+#: src/LYShowInfo.c:129
msgid "Directory that you are currently viewing"
msgstr ""
-#: src/LYShowInfo.c:109
+#: src/LYShowInfo.c:132
msgid "Name:"
msgstr ""
-#: src/LYShowInfo.c:110
+#: src/LYShowInfo.c:135
msgid "URL:"
msgstr ""
-#: src/LYShowInfo.c:123
+#: src/LYShowInfo.c:146
msgid "Directory that you have currently selected"
msgstr ""
-#: src/LYShowInfo.c:126
+#: src/LYShowInfo.c:149
msgid "File that you have currently selected"
msgstr ""
-#: src/LYShowInfo.c:130
+#: src/LYShowInfo.c:153
msgid "Symbolic link that you have currently selected"
msgstr ""
-#: src/LYShowInfo.c:134
+#: src/LYShowInfo.c:157
msgid "Item that you have currently selected"
msgstr ""
-#: src/LYShowInfo.c:136
+#: src/LYShowInfo.c:159
msgid "Full name:"
msgstr ""
-#: src/LYShowInfo.c:145
+#: src/LYShowInfo.c:168
msgid "Unable to follow link"
msgstr ""
-#: src/LYShowInfo.c:147
+#: src/LYShowInfo.c:170
msgid "Points to file:"
msgstr ""
-#: src/LYShowInfo.c:152
-msgid "Name of owner"
+#: src/LYShowInfo.c:175
+msgid "Name of owner:"
msgstr ""
-#: src/LYShowInfo.c:155
+#: src/LYShowInfo.c:178
msgid "Group name:"
msgstr ""
-#: src/LYShowInfo.c:158
+#: src/LYShowInfo.c:181
msgid "File size:"
msgstr ""
-#: src/LYShowInfo.c:164
+#: src/LYShowInfo.c:187
msgid "Creation date:"
msgstr ""
-#: src/LYShowInfo.c:167
+#: src/LYShowInfo.c:190
msgid "Last modified:"
msgstr ""
-#: src/LYShowInfo.c:170
+#: src/LYShowInfo.c:193
msgid "Last accessed:"
msgstr ""
-#: src/LYShowInfo.c:172
+#: src/LYShowInfo.c:195
msgid "Access Permissions"
msgstr ""
-#. DIRED_SUPPORT
-#: src/LYShowInfo.c:237
+#: src/LYShowInfo.c:261
msgid "File that you are currently viewing"
msgstr ""
-#: src/LYShowInfo.c:242 src/LYShowInfo.c:348
+#: src/LYShowInfo.c:266 src/LYShowInfo.c:375
msgid "Linkname:"
msgstr ""
-#: src/LYShowInfo.c:252 src/LYShowInfo.c:264
+#: src/LYShowInfo.c:279 src/LYShowInfo.c:291
msgid "Charset:"
msgstr ""
-#: src/LYShowInfo.c:270
+#: src/LYShowInfo.c:297
msgid "Server:"
msgstr ""
-#: src/LYShowInfo.c:273
+#: src/LYShowInfo.c:300
msgid "Date:"
msgstr ""
-#: src/LYShowInfo.c:276
+#: src/LYShowInfo.c:303
msgid "Last Mod:"
msgstr ""
-#: src/LYShowInfo.c:282
+#: src/LYShowInfo.c:309
msgid "&nbsp;Expires:"
msgstr ""
-#: src/LYShowInfo.c:286
+#: src/LYShowInfo.c:313
msgid "Cache-Control:"
msgstr ""
-#: src/LYShowInfo.c:290
+#: src/LYShowInfo.c:317
msgid "Content-Length:"
msgstr ""
-#: src/LYShowInfo.c:295
+#: src/LYShowInfo.c:322
msgid "Language:"
msgstr ""
-#: src/LYShowInfo.c:302
+#: src/LYShowInfo.c:329
msgid "Post Data:"
msgstr ""
-#: src/LYShowInfo.c:304
+#: src/LYShowInfo.c:331
msgid "Post Content Type:"
msgstr ""
-#: src/LYShowInfo.c:313
+#: src/LYShowInfo.c:340
msgid "Owner(s):"
msgstr ""
-#: src/LYShowInfo.c:316
+#: src/LYShowInfo.c:343
msgid "size:"
msgstr ""
-#: src/LYShowInfo.c:316
+#: src/LYShowInfo.c:343
msgid "lines"
msgstr ""
-#: src/LYShowInfo.c:319
+#: src/LYShowInfo.c:346
msgid "mode:"
msgstr ""
-#: src/LYShowInfo.c:321
+#: src/LYShowInfo.c:348
msgid "forms mode"
msgstr ""
-#: src/LYShowInfo.c:323
+#: src/LYShowInfo.c:350
msgid "source"
msgstr ""
-#: src/LYShowInfo.c:323
+#: src/LYShowInfo.c:350
msgid "normal"
msgstr ""
-#: src/LYShowInfo.c:324
+#: src/LYShowInfo.c:351
msgid ", safe"
msgstr ""
-#: src/LYShowInfo.c:325
-msgid ", internal link"
+#: src/LYShowInfo.c:352
+msgid ", via internal link"
msgstr ""
-#: src/LYShowInfo.c:331
+#: src/LYShowInfo.c:358
msgid ", no-cache"
msgstr ""
-#: src/LYShowInfo.c:333
+#: src/LYShowInfo.c:360
msgid ", ISMAP script"
msgstr ""
-#: src/LYShowInfo.c:335
+#: src/LYShowInfo.c:362
msgid ", bookmark file"
msgstr ""
-#: src/LYShowInfo.c:344
+#: src/LYShowInfo.c:371
msgid "Link that you currently have selected"
msgstr ""
-#: src/LYShowInfo.c:357
+#: src/LYShowInfo.c:384
msgid "Method:"
msgstr ""
-#: src/LYShowInfo.c:362
+#: src/LYShowInfo.c:389
msgid "Enctype:"
msgstr ""
-#: src/LYShowInfo.c:374
+#: src/LYShowInfo.c:401
msgid "(Form field)"
msgstr ""
-#: src/LYShowInfo.c:389
+#: src/LYShowInfo.c:416
msgid "No Links on the current page"
msgstr ""
-#: src/LYStyle.c:170
+#: src/LYStyle.c:250
+#, c-format
msgid ""
"Syntax Error parsing style in lss file:\n"
"[%s]\n"
@@ -4413,97 +4868,144 @@ msgstr ""
msgid "here is a list of the history stack so that you may rebuild"
msgstr ""
-#: src/LYUpload.c:81
+#: src/LYUpload.c:78
msgid "ERROR! - upload command is misconfigured"
msgstr ""
-#: src/LYUpload.c:103
+#: src/LYUpload.c:100
msgid "Illegal redirection \"../\" found! Request ignored."
msgstr ""
-#: src/LYUpload.c:109
+#: src/LYUpload.c:103
+msgid "Illegal character \"/\" found! Request ignored."
+msgstr ""
+
+#: src/LYUpload.c:106
msgid "Illegal redirection using \"~\" found! Request ignored."
msgstr ""
-#: src/LYUpload.c:170
+#: src/LYUpload.c:163
msgid "Unable to upload file."
msgstr ""
-#: src/LYUpload.c:216
+#: src/LYUpload.c:214
msgid "Upload To:"
msgstr ""
-#: src/LYUpload.c:217
+#: src/LYUpload.c:215
msgid "Upload options:"
msgstr ""
-#: src/LYUtils.c:4899
+#: src/LYUtils.c:3075
+msgid "Unexpected access protocol for this URL scheme."
+msgstr ""
+
+#: src/LYUtils.c:3915
+msgid "Too many tempfiles"
+msgstr ""
+
+#: src/LYUtils.c:4217
+msgid "unknown restriction"
+msgstr ""
+
+#: src/LYUtils.c:4248
+msgid "No restrictions set.\n"
+msgstr ""
+
+#: src/LYUtils.c:4251
+msgid "Restrictions set:\n"
+msgstr ""
+
+#: src/LYUtils.c:5601
msgid "Ignoring invalid HOME"
msgstr ""
-#: src/LYrcFile.c:565
-msgid ""
-"Lynx User Defaults File\n"
-"\n"
-"This file contains options saved from the Lynx Options Screen (normally\n"
-"with the '>' key). There is normally no need to edit this file manually,\n"
-"since the defaults here can be controlled from the Options Screen, and the\n"
-"next time options are saved from the Options Screen this file will be\n"
-"completely rewritten. You have been warned...\n"
-"If you are looking for the general configuration file - it is normally\n"
-"called lynx.cfg, and it has different content and a different format.\n"
-"It is not this file.\n"
+#: src/LYrcFile.c:20
+msgid "Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n"
msgstr ""
-#.
-#. * File editor
-#.
-#: src/LYrcFile.c:582
+#: src/LYrcFile.c:242
msgid ""
-"file_editor specifies the editor to be invoked when editing local files\n"
-"or sending mail. If no editor is specified, then file editing is disabled\n"
-"unless it is activated from the command line, and the built-in line editor\n"
-"will be used for sending mail.\n"
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
msgstr ""
-#.
-#. * Default bookmark file.
-#.
-#: src/LYrcFile.c:593
+#: src/LYrcFile.c:249
msgid ""
"bookmark_file specifies the name and location of the default bookmark\n"
"file into which the user can paste links for easy access at a later\n"
"date.\n"
msgstr ""
-#: src/LYrcFile.c:603
+#: src/LYrcFile.c:254
msgid ""
-"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
-"been defined (see below), then all bookmark operations will first\n"
-"prompt the user to select an active sub-bookmark file. If the default\n"
-"Lynx bookmark_file is defined (see above), it will be used as the\n"
-"default selection. When this option is set to \"advanced\", and the\n"
-"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
-"statusline prompt instead of the menu seen in novice and intermediate\n"
-"user modes. When this option is set to \"standard\", the menu will be\n"
-"presented regardless of user mode.\n"
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
msgstr ""
-#.
-#. * Multiple (sub)bookmark definitions and descriptions.
-#.
-#: src/LYrcFile.c:622
+#: src/LYrcFile.c:259
msgid ""
-"The following allow you to define sub-bookmark files and descriptions.\n"
-"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
-"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
-"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
msgstr ""
-#.
-#. * FTP/file sorting method.
-#.
-#: src/LYrcFile.c:642
+#: src/LYrcFile.c:266
+msgid ""
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
+msgstr ""
+
+#: src/LYrcFile.c:274
+msgid ""
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
+msgstr ""
+
+#: src/LYrcFile.c:279
+msgid ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
+msgstr ""
+
+#: src/LYrcFile.c:292
+msgid ""
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
+msgstr ""
+
+#: src/LYrcFile.c:300
+msgid ""
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
+msgstr ""
+
+#: src/LYrcFile.c:306
+msgid ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+msgstr ""
+
+#: src/LYrcFile.c:312
msgid ""
"The file_sorting_method specifies which value to sort on when viewing\n"
"file lists such as FTP directories. The options are:\n"
@@ -4513,7 +5015,30 @@ msgid ""
" BY_DATE -- sorts on the date of the file\n"
msgstr ""
-#: src/LYrcFile.c:661
+#: src/LYrcFile.c:324
+msgid ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+msgstr ""
+
+#: src/LYrcFile.c:339
+msgid ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+msgstr ""
+
+#: src/LYrcFile.c:345
msgid ""
"personal_mail_address specifies your personal mail address. The\n"
"address will be sent during HTTP file transfers for authorization and\n"
@@ -4524,41 +5049,7 @@ msgid ""
"your mailed comments.\n"
msgstr ""
-#.
-#. * Searching type.
-#.
-#: src/LYrcFile.c:676
-msgid ""
-"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
-"using the 's' or '/' keys, the search performed will be case sensitive\n"
-"instead of case INsensitive. The default is usually \"off\".\n"
-msgstr ""
-
-#.
-#. * Character set.
-#.
-#: src/LYrcFile.c:687
-msgid ""
-"The character_set definition controls the representation of 8 bit\n"
-"characters for your terminal. If 8 bit characters do not show up\n"
-"correctly on your screen you may try changing to a different 8 bit\n"
-"set or using the 7 bit character approximations.\n"
-"Current valid characters sets are:\n"
-msgstr ""
-
-#.
-#. * Preferred language.
-#.
-#: src/LYrcFile.c:702
-msgid ""
-"preferred_language specifies the language in MIME notation (e.g., en,\n"
-"fr, may be a comma-separated list in decreasing preference)\n"
-"which Lynx will indicate you prefer in requests to http servers.\n"
-"If a file in that language is available, the server will send it.\n"
-"Otherwise, the server will send the file in it's default language.\n"
-msgstr ""
-
-#: src/LYrcFile.c:714
+#: src/LYrcFile.c:354
msgid ""
"preferred_charset specifies the character set in MIME notation (e.g.,\n"
"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
@@ -4574,7 +5065,56 @@ msgid ""
"is also allowed.\n"
msgstr ""
-#: src/LYrcFile.c:735
+#: src/LYrcFile.c:368
+msgid ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+msgstr ""
+
+#: src/LYrcFile.c:377
+msgid ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+
+#: src/LYrcFile.c:388
+msgid ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+
+#: src/LYrcFile.c:403
+msgid ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+msgstr ""
+
+#: src/LYrcFile.c:413
msgid ""
"show_color specifies how to set the color mode at startup. A value of\n"
"\"never\" will force color mode off (treat the terminal as monochrome)\n"
@@ -4593,31 +5133,20 @@ msgid ""
"\"off\" \"show color\" settings will be treated as \"default\".\n"
msgstr ""
-#.
-#. * VI keys.
-#.
-#: src/LYrcFile.c:761
-msgid ""
-"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
-" j = down k = up\n"
-" h = left l = right\n"
-"will be enabled. These keys are only lower case.\n"
-"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
-"and the keymap display, respectively.\n"
-msgstr ""
-
-#: src/LYrcFile.c:774
+#: src/LYrcFile.c:430
msgid ""
-"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
-" ^N = down ^P = up\n"
-" ^B = left ^F = right\n"
-"will be enabled.\n"
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
msgstr ""
-#.
-#. * Show dot files.
-#.
-#: src/LYrcFile.c:785
+#: src/LYrcFile.c:441
msgid ""
"show_dotfiles specifies that the directory listing should include\n"
"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
@@ -4626,37 +5155,53 @@ msgid ""
"is disabled, creation of such files via Lynx also is disabled.\n"
msgstr ""
-#.
-#. * Select popups.
-#.
-#: src/LYrcFile.c:797
+#: src/LYrcFile.c:452
msgid ""
-"select_popups specifies whether the OPTIONs in a SELECT block which\n"
-"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
-"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
-"present in the SELECT start tag, Lynx always will create a vertical list\n"
-"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
-"as the default while a value of \"off\" will set use of radio boxes.\n"
-"The default can be overridden via the -popup command line toggle.\n"
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
msgstr ""
-#: src/LYrcFile.c:811
+#: src/LYrcFile.c:464
msgid ""
-"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
-"bottom, if possible) of the screen, or to place it to the left of the\n"
-"current link in documents, or current option in select popup windows.\n"
-"Positioning the cursor to the left of the current link or option is\n"
-"helpful for speech or braille interfaces, and when the terminal is\n"
-"one which does not distinguish the current link based on highlighting\n"
-"or color. A value of \"on\" will set positioning to the left as the\n"
-"default while a value of \"off\" will set 'hiding' of the cursor.\n"
-"The default can be overridden via the -show_cursor command line toggle.\n"
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
msgstr ""
-#.
-#. * Keypad mode.
-#.
-#: src/LYrcFile.c:827
+#: src/LYrcFile.c:472
+msgid ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+msgstr ""
+
+#: src/LYrcFile.c:477
+msgid ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+msgstr ""
+
+#: src/LYrcFile.c:485
+msgid ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+msgstr ""
+
+#: src/LYrcFile.c:693
msgid ""
"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
"your keypad when the numlock is on will act as arrow keys:\n"
@@ -4667,13 +5212,13 @@ msgid ""
"regardless of whether numlock is on.\n"
msgstr ""
-#: src/LYrcFile.c:836
+#: src/LYrcFile.c:702
msgid ""
"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
"appear next to each link and numbers are used to select links.\n"
msgstr ""
-#: src/LYrcFile.c:840
+#: src/LYrcFile.c:706
msgid ""
"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
"numbers will appear next to each link and visible form input field.\n"
@@ -4684,137 +5229,23 @@ msgid ""
"lists and output from the list command also enumerate form inputs.\n"
msgstr ""
-#: src/LYrcFile.c:849
+#: src/LYrcFile.c:715
msgid ""
"NOTE: Some fixed format documents may look disfigured when\n"
"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
"enabled.\n"
msgstr ""
-#.
-#. * Partial display threshold
-#.
-#: src/LYrcFile.c:864
-msgid ""
-"partial_thres specifies the number of lines Lynx should download and render\n"
-"before we redraw the screen in Partial Display logic\n"
-"e.g., partial_thres=2\n"
-"would have Lynx redraw every 2 lines that it renders\n"
-"partial_thres=-1 would use the entire screensize\n"
-msgstr ""
-
-#: src/LYrcFile.c:878
+#: src/LYrcFile.c:748
msgid ""
-"lineedit_mode specifies the key binding used for inputting strings in\n"
-"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
-"the following control characters are used for moving and deleting:\n"
-"\n"
-" Prev Next Enter = Accept input\n"
-" Move char: <- -> ^G = Cancel input\n"
-" Move word: ^P ^N ^U = Erase line\n"
-" Delete char: ^H ^R ^A = Beginning of line\n"
-" Delete word: ^B ^F ^E = End of line\n"
-"\n"
-"Current lineedit modes are:\n"
-msgstr ""
-
-#: src/LYrcFile.c:907
-msgid ""
-"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
-"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
-"files and directories together. \"FILES_FIRST\" lists files first and\n"
-"\"DIRECTORIES_FIRST\" lists directories first.\n"
-msgstr ""
-
-#: src/LYrcFile.c:923
-msgid ""
-"user_mode specifies the users level of knowledge with Lynx. The\n"
-"default is \"NOVICE\" which displays two extra lines of help at the\n"
-"bottom of the screen to aid the user in learning the basic Lynx\n"
-"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
-"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
-"bottom of the screen.\n"
-msgstr ""
-
-#.
-#. * Cookie options
-#.
-#: src/LYrcFile.c:939
-msgid ""
-"accept_all_cookies allows the user to tell Lynx to automatically\n"
-"accept all cookies if desired. The default is \"FALSE\" which will\n"
-"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
-"all cookies.\n"
-msgstr ""
-
-#: src/LYrcFile.c:948
-msgid ""
-"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
-"lists of domains from which Lynx should automatically accept or reject\n"
-"all cookies. If a domain is specified in both options, rejection will\n"
-"take precedence. The accept_all_cookies parameter will override any\n"
-"settings made here.\n"
-msgstr ""
-
-#: src/LYrcFile.c:963
-msgid ""
-"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
-"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
-"should be subjected to varying degrees of validity checking. If a\n"
-"domain is set to strict checking, strict conformance to RFC2109 will\n"
-"be applied. A domain with loose checking will be allowed to set cookies\n"
-"with an invalid path or domain attribute. All domains will default to\n"
-"querying the user for an invalid path or domain.\n"
-msgstr ""
-
-#.
-#. * Cookie file.
-#.
-#: src/LYrcFile.c:987
-msgid ""
-"cookie_file specifies the file in which to store persistent cookies.\n"
-"The default is ~/.lynx_cookies.\n"
-msgstr ""
-
-#.
-#. * Local execution mode - all links.
-#.
-#: src/LYrcFile.c:1001
-msgid ""
-"If run_all_execution_links is set \"on\" then all local execution links\n"
-"will be executed when they are selected.\n"
-"\n"
-"WARNING - This is potentially VERY dangerous. Since you may view\n"
-" information that is written by unknown and untrusted sources\n"
-" there exists the possibility that Trojan horse links could be\n"
-" written. Trojan horse links could be written to erase files\n"
-" or compromise security. This should only be set to \"on\" if\n"
-" you are viewing trusted source information.\n"
-msgstr ""
-
-#.
-#. * Local execution mode - only links in local files.
-#.
-#: src/LYrcFile.c:1018
-msgid ""
-"If run_execution_links_on_local_files is set \"on\" then all local\n"
-"execution links that are found in LOCAL files will be executed when they\n"
-"are selected. This is different from run_all_execution_links in that\n"
-"only files that reside on the local system will have execution link\n"
-"permissions.\n"
+"Lynx User Defaults File\n"
"\n"
-"WARNING - This is potentially dangerous. Since you may view\n"
-" information that is written by unknown and untrusted sources\n"
-" there exists the possibility that Trojan horse links could be\n"
-" written. Trojan horse links could be written to erase files\n"
-" or compromise security. This should only be set to \"on\" if\n"
-" you are viewing trusted source information.\n"
-msgstr ""
-
-#. defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
-#: src/LYrcFile.c:1036
-msgid ""
-"If verbose_images is \"on\", lynx will print the name of the image\n"
-"source file in place of [INLINE], [LINK] or [IMAGE]\n"
-"See also VERBOSE_IMAGES in lynx.cfg\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
msgstr ""
diff --git a/gnu/usr.bin/lynx/po/makefile.inn b/gnu/usr.bin/lynx/po/makefile.inn
index 3be84bdbe63..7b63ddbeeec 100644
--- a/gnu/usr.bin/lynx/po/makefile.inn
+++ b/gnu/usr.bin/lynx/po/makefile.inn
@@ -1,29 +1,29 @@
# Makefile for program source directory in GNU NLS utilities package.
# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
#
-# This file file be copied and used freely without restrictions. It can
+# This file may be copied and used freely without restrictions. It can
# be used in projects which are not available under the GNU Public License
# but which still want to provide support for the GNU gettext functionality.
# Please note that the actual code is *not* freely available.
-# PACKAGE = @PACKAGE@
-PACKAGE = lynx
-# VERSION = @VERSION@
-VERSION = 2.8.2
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
-SHELL = @CONFIG_SHELL@
+SHELL = /bin/sh
@SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
+DESTDIR= @DESTDIR@
+
prefix = @prefix@
exec_prefix = @exec_prefix@
datadir = @NLS_DATADIR@
-localedir = $(datadir)/locale
-gnulocaledir = $(prefix)/share/locale
-gettextsrcdir = $(prefix)/share/gettext/po
+localedir = $(DESTDIR)$(datadir)/locale
+gnulocaledir = $(DESTDIR)$(prefix)/share/locale
+gettextsrcdir = $(DESTDIR)$(prefix)/share/gettext/po
subdir = po
INSTALL = @INSTALL@
@@ -71,7 +71,7 @@ INSTOBJEXT = @INSTOBJEXT@
$(MSGFMT) -o $@ $<
.po.gmo:
- file=./`echo $* | sed 's,.*/,,'`.gmo \
+ file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
&& rm -f $$file && $(GMSGFMT) -o $$file $<
.po.cat:
@@ -87,8 +87,10 @@ all-no:
$(srcdir)/$(PACKAGE).pot: $(POTFILES)
$(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
--add-comments --keyword=_ --keyword=N_ \
- --files-from=$(srcdir)/POTFILES.in
- sh -c "case '.$(XGETTEXT)' in *:);; *) rm -f $(srcdir)/$(PACKAGE).pot; mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot;; esac"
+ --files-from=$(srcdir)/POTFILES.in \
+ && test ! -f $(PACKAGE).po \
+ || ( rm -f $(srcdir)/$(PACKAGE).pot \
+ && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
$(srcdir)/cat-id-tbl.c: stamp-cat-id; @:
$(srcdir)/stamp-cat-id: $(PACKAGE).pot
@@ -110,10 +112,10 @@ install-exec:
install-data: install-data-@USE_NLS@
install-data-no: all
install-data-yes: all
- if test -r $(MKINSTALLDIRS); then \
+ if test -r "$(MKINSTALLDIRS)"; then \
$(MKINSTALLDIRS) $(datadir); \
else \
- $(top_srcdir)/mkdirs.sh $(datadir); \
+ $(SHELL) $(top_srcdir)/mkdirs.sh $(datadir); \
fi
@catalogs='$(CATALOGS)'; \
for cat in $$catalogs; do \
@@ -124,10 +126,10 @@ install-data-yes: all
esac; \
lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
dir=$$destdir/$$lang/LC_MESSAGES; \
- if test -r $(MKINSTALLDIRS); then \
+ if test -r "$(MKINSTALLDIRS)"; then \
$(MKINSTALLDIRS) $$dir; \
else \
- $(top_srcdir)/mkdirs.sh $$dir; \
+ $(SHELL) $(top_srcdir)/mkdirs.sh $$dir; \
fi; \
if test -r $$cat; then \
$(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
@@ -152,10 +154,10 @@ install-data-yes: all
fi; \
done
if test "$(PACKAGE)" = "gettext"; then \
- if test -r $(MKINSTALLDIRS); then \
+ if test -r "$(MKINSTALLDIRS)"; then \
$(MKINSTALLDIRS) $(gettextsrcdir); \
else \
- $(top_srcdir)/mkdirs.sh $(gettextsrcdir); \
+ $(SHELL) $(top_srcdir)/mkdirs.sh $(gettextsrcdir); \
fi; \
$(INSTALL_DATA) $(srcdir)/makefile.inn \
$(gettextsrcdir)/makefile.inn; \
diff --git a/gnu/usr.bin/lynx/po/nl.po b/gnu/usr.bin/lynx/po/nl.po
index 413ecd3f631..e925c73c216 100644
--- a/gnu/usr.bin/lynx/po/nl.po
+++ b/gnu/usr.bin/lynx/po/nl.po
@@ -1,11 +1,5541 @@
+# Dutch messages for Lynx.
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Tijs van Bakel <smoke@casema.net>, 1999, 2000.
+#
msgid ""
msgstr ""
-"Date: 1998-08-22 16:12:20-0400\n"
-"From: Webmaster Jim <jspath@bcpl.net>\n"
-"Content-Type: text/plain; charset=\n"
-"Xgettext-Options: --default-domain=po/de\n"
-"Files: src/LYMain.c\n"
+"Project-Id-Version: lynx 2.8.4\n"
+"POT-Creation-Date: 2001-06-01 18:55-0400\n"
+"PO-Revision-Date: 2000-04-08 21:13+02:00\n"
+"Last-Translator: Tijs van Bakel <smoke@casema.net>\n"
+"Language-Team: Dutch <nl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
-#: src/LYMain.c:2502
-msgid "%s Version %s %s"
+#. ******************************************************************
+#. * The following definitions are for status line prompts, messages, or
+#. * warnings issued by Lynx during program execution. You can modify
+#. * them to make them more appropriate for your site. We recommend that
+#. * you extend these definitions to other languages using the gettext
+#. * library. There are also scattered uses of 'gettext()' throughout the
+#. * Lynx source, covering all but those messages which (a) are used for
+#. * debugging (CTRACE) or (b) are constants used in interaction with
+#. * other programs.
+#. *
+#. * Links to collections of alternate definitions, developed by the Lynx
+#. * User Community, are maintained in Lynx links:
+#. *
+#. * http://www.trill-home.com/lynx.html
+#. *
+#. * See ABOUT-NLS and po/readme for details and location of contributed
+#. * translations. When no translation is available, the English default is
+#. * used.
+#.
+#: LYMessages.c:29
+#, c-format
+msgid "Alert!: %s"
+msgstr "Let op!: %s"
+
+#: LYMessages.c:30
+msgid "Welcome"
+msgstr "Welkom"
+
+#: LYMessages.c:31 LYMessages.c:32
+msgid "Are you sure you want to quit?"
+msgstr "Weet u zeker dat u wilt stoppen?"
+
+#: LYMessages.c:34 LYMessages.c:35
+msgid "Really exit from Lynx?"
+msgstr "Wilt u lynx echt beëindigen?"
+
+#: LYMessages.c:37
+msgid "Connection interrupted."
+msgstr "Verbinding onderbroken."
+
+#: LYMessages.c:38
+msgid "Data transfer interrupted."
+msgstr "Gegevensoverdracht gestopt."
+
+#: LYMessages.c:39
+msgid "Cancelled!!!"
+msgstr "Geannuleerd!!!"
+
+#: LYMessages.c:40
+msgid "Cancelling!"
+msgstr "Annuleren!"
+
+#: LYMessages.c:41
+msgid "Excellent!!!"
+msgstr "Prima!!!"
+
+#: LYMessages.c:42
+msgid "OK"
+msgstr "OK"
+
+#: LYMessages.c:43
+msgid "Done!"
+msgstr "Klaar!"
+
+#: LYMessages.c:44
+msgid "Bad request!"
+msgstr "Ongeldig verzoek!"
+
+#: LYMessages.c:45
+msgid "previous"
+msgstr "vorige"
+
+#: LYMessages.c:46
+msgid "next screen"
+msgstr "volgend scherm"
+
+#: LYMessages.c:47
+msgid "HELP!"
+msgstr "HELP!"
+
+#: LYMessages.c:48
+msgid ", help on "
+msgstr ", hulp bij "
+
+#. #define HELP
+#: LYMessages.c:50
+msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
+msgstr "Commando's: pijltjes-verplaatsen, '?'-help, 'q'-stoppen, '<-'-ga terug."
+
+#. #define MOREHELP
+#: LYMessages.c:52
+msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
+msgstr "-- spatiebalk-volgende pagina, pijltjes-verplaatsen, '?'-help, 'q'-stoppen."
+
+#: LYMessages.c:53
+msgid "-- press space for next page --"
+msgstr "-- druk op de spatiebalk voor volgende pagina --"
+
+#: LYMessages.c:54
+msgid "URL too long"
+msgstr "URL te lang"
+
+#. Inactive input fields, messages used with -tna option - kw
+#. #define FORM_LINK_TEXT_MESSAGE_INA
+#: LYMessages.c:60
+msgid "(Text entry field) Inactive. Press <return> to activate."
+msgstr "(Text invoer veld) Niet actief. Druk op <return> om te activeren."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA
+#: LYMessages.c:62
+msgid "(Textarea) Inactive. Press <return> to activate."
+msgstr "(Tekstgebied) Niet actief. Druk op <return> om te activeren."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA_E
+#: LYMessages.c:64
+#, c-format
+msgid "(Textarea) Inactive. Press <return> to activate (%s for editor)."
+msgstr "(Tekstgebied) Niet actief. Druk op <return> om te activeren (%s voor editor)."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA
+#: LYMessages.c:66
+msgid "(Form field) Inactive. Use <return> to edit."
+msgstr "(Formulierveld) Niet actief. Gebruik <return> om te wijzigen."
+
+#. #define FORM_TEXT_SUBMIT_MESSAGE_INA_X
+#: LYMessages.c:68
+#, c-format
+msgid "(Form field) Inactive. Use <return> to edit (%s to submit with no cache)."
+msgstr "(Form.veld) Niet actief. Wijzig met <return> (%s - verzenden zonder cache)"
+
+#. #define FORM_TEXT_RESUBMIT_MESSAGE_INA
+#: LYMessages.c:70
+msgid "(Form field) Inactive. Press <return> to edit, press <return> twice to submit."
+msgstr "(Form.veld) Niet actief. Wijzig met <return>, verzenden met twee keer <return>"
+
+#. #define FORM_TEXT_SUBMIT_MAILTO_MSG_INA
+#: LYMessages.c:72
+msgid "(mailto form field) Inactive. Press <return> to change."
+msgstr "(email-formulierveld) Niet actief. Gebruik <return> om te wijzigen."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE_INA
+#: LYMessages.c:74
+msgid "(Password entry field) Inactive. Press <return> to activate."
+msgstr "(Wachtwoord veld) Niet actief. Gebruik <return> om te activeren."
+
+#. #define FORM_LINK_FILE_UNM_MSG
+#: LYMessages.c:77
+msgid "UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off."
+msgstr "VASTSTAAND bestandsnaam invoerveld. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_FILE_MESSAGE
+#: LYMessages.c:79
+msgid "(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off."
+msgstr "(Bestandsnaam veld) Voer een bestandsnaam in. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_TEXT_MESSAGE
+#: LYMessages.c:81
+msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Tekst invoer) Voer tekst in. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE
+#: LYMessages.c:83
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off."
+msgstr "(Tekstgebied) Voer tekst in. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_E
+#: LYMessages.c:85
+#, c-format
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor)."
+msgstr "(Tekstgebied) Voer tekst in. Ga weg met pijltjes of tab (%s voor editor)."
+
+#. #define FORM_LINK_TEXT_UNM_MSG
+#: LYMessages.c:87
+msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
+msgstr "VASTSTAAND formulier tekst veld. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE
+#: LYMessages.c:89
+msgid "(Form field) Enter text. Use <return> to submit."
+msgstr "(Formulierveld) Voer tekst in. Verzend met <return>."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_X
+#: LYMessages.c:91
+#, c-format
+msgid "(Form field) Enter text. Use <return> to submit (%s for no cache)."
+msgstr "(Formulierveld) Voer tekst in. Verzend met <return> (%s - geen cache)."
+
+#. #define FORM_LINK_TEXT_RESUBMIT_MESSAGE
+#: LYMessages.c:93
+msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
+msgstr "(Form.veld) Voer tekst in. <return>-verzenden, ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_TEXT_SUBMIT_UNM_MSG
+#: LYMessages.c:95
+msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
+msgstr "NIET WIJZIGBAAR formulierveld. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_MSG
+#: LYMessages.c:97
+msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
+msgstr "(email-formulierveld) Voer tekst in. Verzend met <return>, ga weg met pijltjes."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:99
+msgid "(mailto form field) Mail is disallowed so you cannot submit."
+msgstr "(email-formulierveld) Post verzenden is niet toegestaan, dus u kunt niets versturen."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE
+#: LYMessages.c:101
+msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Wachtwoord veld) Voer tekst in. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_PASSWORD_UNM_MSG
+#: LYMessages.c:103
+msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
+msgstr "NIET WIJZIGBAAR formulier wachtwoord. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_CHECKBOX_MESSAGE
+#: LYMessages.c:105
+msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
+msgstr "(Aanvink Veld) Gebruik pijltje-rechts of <return> om te veranderen."
+
+#. #define FORM_LINK_CHECKBOX_UNM_MSG
+#: LYMessages.c:107
+msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
+msgstr "NIET WIJZIGBAAR formulier aanvinkveld. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_RADIO_MESSAGE
+#: LYMessages.c:109
+msgid "(Radio Button) Use right-arrow or <return> to toggle."
+msgstr "(druk-knop) Gebruik pijltje-rechts of <return> om te veranderen."
+
+#. #define FORM_LINK_RADIO_UNM_MSG
+#: LYMessages.c:111
+msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
+msgstr "NIET WIJZIGBARE formulier drukknop. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_SUBMIT_PREFIX
+#: LYMessages.c:113
+msgid "Submit ('x' for no cache) to "
+msgstr "Verzend ('x' voor geen cache) naar "
+
+#. #define FORM_LINK_RESUBMIT_PREFIX
+#: LYMessages.c:115
+msgid "Submit to "
+msgstr "Verzend naar "
+
+#. #define FORM_LINK_SUBMIT_MESSAGE
+#: LYMessages.c:117
+msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
+msgstr "(Form. verzendknop) Verzend met pijltje rechts of <return> ('x'-geen cache)."
+
+#. #define FORM_LINK_RESUBMIT_MESSAGE
+#: LYMessages.c:119
+msgid "(Form submit button) Use right-arrow or <return> to submit."
+msgstr "(Formulier verzendknop) Verzend met pijltje rechts of <return>."
+
+#. #define FORM_LINK_SUBMIT_DIS_MSG
+#: LYMessages.c:121
+msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
+msgstr "NIET BESCHIKBAAR: formulier verzendknop. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_PREFIX
+#: LYMessages.c:123
+msgid "Submit mailto form to "
+msgstr "Verzend email-formulier naar "
+
+#. #define FORM_LINK_SUBMIT_MAILTO_MSG
+#: LYMessages.c:125
+msgid "(mailto form submit button) Use right-arrow or <return> to submit."
+msgstr "(email-formulier verzendknop) Verzend met pijltje rechts of <return>."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:127
+msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
+msgstr "(email-formulier verzendknop) Email is niet toegestaan; u kunt niet verzenden."
+
+#. #define FORM_LINK_RESET_MESSAGE
+#: LYMessages.c:129
+msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
+msgstr "(Formulier herstelknop) Herstel met pijltje rechts of <return>."
+
+#. #define FORM_LINK_RESET_DIS_MSG
+#: LYMessages.c:131
+msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
+msgstr "NIET BESCHIKBAAR formulier herstelknop. Ga weg met pijltjes of tab."
+
+#. #define FORM_LINK_OPTION_LIST_MESSAGE
+#: LYMessages.c:133
+msgid "(Option list) Hit return and use arrow keys and return to select option."
+msgstr "(Lijst van opties) Druk op enter, dan pijltjes en enter om een optie te kiezen."
+
+#. #define CHOICE_LIST_MESSAGE
+#: LYMessages.c:135
+msgid "(Choice list) Hit return and use arrow keys and return to select option."
+msgstr "(Keuzelijst) Druk op enter, dan pijltjes en enter om een optie te kiezen."
+
+#. #define FORM_LINK_OPTION_LIST_UNM_MSG
+#: LYMessages.c:137
+msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
+msgstr "ONVERANDERBARE optielijst. Enter en pijltjes om te herzien of weg te gaan."
+
+#. #define CHOICE_LIST_UNM_MSG
+#: LYMessages.c:139
+msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
+msgstr "ONVERANDERBARE keuzelijst. Enter of pijltjes om na te lezen of weg te gaan."
+
+#: LYMessages.c:140
+msgid "Submitting form..."
+msgstr "Bezig formulier te verzenden..."
+
+#: LYMessages.c:141
+msgid "Resetting form..."
+msgstr "Het oorspronkelijke formulier wordt hersteld..."
+
+#. #define RELOADING_FORM
+#: LYMessages.c:143
+msgid "Reloading document. Any form entries will be lost!"
+msgstr "Bezig document te herladen. Alle formulier-invoer gaat verloren!"
+
+#: LYMessages.c:144
+#, c-format
+msgid "Warning: Cannot transcode form data to charset %s!"
+msgstr "Let op: Kan de formuliergegevens niet omvormen naar karakterset %s!"
+
+#. #define NORMAL_LINK_MESSAGE
+#: LYMessages.c:147
+msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
+msgstr "(GEWONE LINK) Activeer met pijltje rechts of <return>."
+
+#: LYMessages.c:148
+msgid "The resource requested is not available at this time."
+msgstr "De gevraagde hulpbron is op dit moment niet beschikbaar."
+
+#: LYMessages.c:149
+msgid "Enter Lynx keystroke command: "
+msgstr "Voer een Lynx-sneltoets commando in: "
+
+#: LYMessages.c:150
+msgid "Looking up "
+msgstr "Opzoeken van "
+
+#: LYMessages.c:151
+#, c-format
+msgid "Getting %s"
+msgstr "%s wordt opgehaald"
+
+#: LYMessages.c:152
+#, c-format
+msgid "Skipping %s"
+msgstr "%s wordt overgeslagen"
+
+#: LYMessages.c:153
+#, c-format
+msgid "Using %s"
+msgstr "%s wordt gebruikt"
+
+#: LYMessages.c:154
+#, c-format
+msgid "Illegal URL: %s"
+msgstr "Ongeldige URL: %s"
+
+#: LYMessages.c:155
+#, c-format
+msgid "Badly formed address %s"
+msgstr "Foutief adres %s"
+
+#: LYMessages.c:156
+#, c-format
+msgid "URL: %s"
+msgstr "URL: %s"
+
+#: LYMessages.c:157
+msgid "Unable to access WWW file!!!"
+msgstr "Kan WWW bestand niet vinden!!!"
+
+#: LYMessages.c:158
+#, c-format
+msgid "This is a searchable index. Use %s to search."
+msgstr "Deze index kan doorzocht worden. Gebruik %s om te zoeken."
+
+#. #define WWW_INDEX_MORE_MESSAGE
+#: LYMessages.c:160
+#, c-format
+msgid "--More-- This is a searchable index. Use %s to search."
+msgstr "--Meer-- Deze index kan doorzocht worden. Gebruik %s om te zoeken."
+
+#: LYMessages.c:161
+msgid "You have entered an invalid link number."
+msgstr "U heeft een ongeldig link-nummer ingevoerd."
+
+#. #define SOURCE_HELP
+#: LYMessages.c:163
+msgid "Currently viewing document source. Press '\\' to return to rendered version."
+msgstr "Dit is de brontekst van het document. Druk op '\\' voor de verwerkte versie. "
+
+#. #define NOVICE_LINE_ONE
+#: LYMessages.c:165
+msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
+msgstr "Pijltjes omhoog en omlaag-verplaatsen; Rechts-volg link; Links-ga terug.\n"
+
+#. #define NOVICE_LINE_TWO
+#: LYMessages.c:167
+msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
+msgstr "H)elp O)pties P)rint G)a naar M)-beginscherm Q)-stop /=zoek [del]=historie\n"
+
+#. #define NOVICE_LINE_TWO_A
+#: LYMessages.c:169
+msgid " O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)uit \n"
+msgstr "O)verige cmds H)elp K)eymap G)a naar P)rint M)-beginscherm o)pties Q)-stop\n"
+
+#. #define NOVICE_LINE_TWO_B
+#: LYMessages.c:171
+msgid " O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n"
+msgstr "O)verige cmds B)-terug E)-wijzig D)ownload ^R)-herladen ^W)is scherm zoek doc: /\n"
+
+#. #define NOVICE_LINE_TWO_C
+#: LYMessages.c:173
+msgid "O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)emove \n"
+msgstr "O)verige C)ommentaar <backspace>-Historie Boekenleggers: V)-inzien A)-toevoegen R)-wissen\n"
+
+#. #define FORM_NOVICELINE_ONE
+#: LYMessages.c:175
+msgid " Enter text into the field by typing on the keyboard "
+msgstr "Type tekst in de invoervelden"
+
+#. #define FORM_NOVICELINE_TWO
+#: LYMessages.c:177
+msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
+msgstr "Ctrl-U wist alle tekst in het invoerveld, [Backspace] wist één teken"
+
+#. #define FORM_NOVICELINE_TWO_DELBL
+#: LYMessages.c:179
+msgid " Ctrl-U to delete text in field, [Backspace] to delete a character "
+msgstr "Ctrl-U wist tekst in het invoerveld, [Backspace] wist één teken"
+
+#. #define FORM_NOVICELINE_TWO_VAR
+#: LYMessages.c:181
+#, c-format
+msgid " %s to delete all text in field, [Backspace] to delete a character "
+msgstr "%s wist alle tekst in het invoerveld, [Backspace] wist één teken"
+
+#. #define FORM_NOVICELINE_TWO_DELBL_VAR
+#: LYMessages.c:183
+#, c-format
+msgid " %s to delete text in field, [Backspace] to delete a character "
+msgstr "%s wist tekst in het invoerveld, [Backspace] wist één teken"
+
+#. mailto
+#: LYMessages.c:186
+msgid "Malformed mailto form submission! Cancelled!"
+msgstr "Verkeerd geformuleerde mailto-form verzending! Geannuleerd!"
+
+#: LYMessages.c:187
+msgid "Warning! Control codes in mail address replaced by ?"
+msgstr "Let op! Controle codes in mail-adres vervangen door ?"
+
+#: LYMessages.c:188
+msgid "Mail disallowed! Cannot submit."
+msgstr "U mag niet e-mailen! Gegevens kunnen niet worden verzonden."
+
+#: LYMessages.c:189
+msgid "Mailto form submission failed!"
+msgstr "Mailto-form verzending mislukt!"
+
+#: LYMessages.c:190
+msgid "Mailto form submission Cancelled!!!"
+msgstr "Mailto-form verzending geannuleerd!!!"
+
+#: LYMessages.c:191
+msgid "Sending form content..."
+msgstr "Gegevens worden verzonden..."
+
+#: LYMessages.c:192
+msgid "No email address is present in mailto URL!"
+msgstr "Er staat geen e-mail adres in de mailto URL!"
+
+#. #define MAILTO_URL_TEMPOPEN_FAILED
+#: LYMessages.c:194
+msgid "Unable to open temporary file for mailto URL!"
+msgstr "Kan geen tijdelijk bestand voor mailto URL maken!"
+
+#. #define INC_ORIG_MSG_PROMPT
+#: LYMessages.c:196
+msgid "Do you wish to include the original message?"
+msgstr "Wilt u het originele bericht opnemen?"
+
+#. #define INC_PREPARSED_MSG_PROMPT
+#: LYMessages.c:198
+msgid "Do you wish to include the preparsed source?"
+msgstr "Wilt u de ontleedde broncode opnemen?"
+
+#. #define SPAWNING_EDITOR_FOR_MAIL
+#: LYMessages.c:200
+msgid "Spawning your selected editor to edit mail message"
+msgstr "Uw editor wordt gestart om het email-bericht te maken"
+
+#. #define ERROR_SPAWNING_EDITOR
+#: LYMessages.c:202
+msgid "Error spawning editor, check your editor definition in the options menu"
+msgstr "De editor wil niet starten, controleer de instellingen in het Opties-menu"
+
+#: LYMessages.c:203
+msgid "Send this comment?"
+msgstr "Dit commentaar verzenden?"
+
+#: LYMessages.c:204
+msgid "Send this message?"
+msgstr "Dit bericht verzenden?"
+
+#: LYMessages.c:205
+msgid "Sending your message..."
+msgstr "Het bericht wordt verzonden..."
+
+#: LYMessages.c:206
+msgid "Sending your comment:"
+msgstr "Het commentaar wordt verzonden:"
+
+#. textarea
+#: LYMessages.c:209
+msgid "Not in a TEXTAREA; cannot use external editor."
+msgstr "Niet in een TEKSTVELD; een externe editor heeft hiervoor geen zin."
+
+#: LYMessages.c:210
+msgid "Not in a TEXTAREA; cannot use command."
+msgstr "Niet in een TEKSTVELD; dit commando heeft hier geen zin."
+
+#: LYMessages.c:213
+msgid "file: ACTIONs are disallowed!"
+msgstr "bestand: ACTIEs zijn niet toegestaan!"
+
+#. #define FILE_SERVED_LINKS_DISALLOWED
+#: LYMessages.c:215
+msgid "file: URLs via served links are disallowed!"
+msgstr "bestand: URL's via aangeboden links zijn niet toegestaan!"
+
+#: LYMessages.c:216
+msgid "Access to local files denied."
+msgstr "Geen toegang tot lokale bestanden."
+
+#: LYMessages.c:217
+msgid "file: URLs via bookmarks are disallowed!"
+msgstr "bestand: URL's via boekenleggers niet toegestaan!"
+
+#. #define SPECIAL_VIA_EXTERNAL_DISALLOWED
+#: LYMessages.c:219
+msgid "This special URL is not allowed in external documents!"
+msgstr "Dit specifieke URL is niet toegestaand in externe documenten!"
+
+#: LYMessages.c:220
+msgid "Press <return> to return to Lynx."
+msgstr "Druk op <return> om terug te keren naar Lynx."
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:223
+msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
+msgstr "DCL subproces wordt aangeroepen. Gebruik 'logout' om terug te keren naar Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:227
+msgid "Type EXIT to return to Lynx.\n"
+msgstr "Type EXIT om terug te keren naar Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:230
+msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
+msgstr "Uw standaard shell wordt aangeroepen. Type 'exit' om terug te keren naar Lynx.\n"
+
+#: LYMessages.c:233
+msgid "Spawning is currently disabled."
+msgstr "Het starten van externe programma's starten is uitgezet."
+
+#: LYMessages.c:234
+msgid "The 'd'ownload command is currently disabled."
+msgstr "Het 'd'ownload commando is momenteel uitgezet."
+
+#: LYMessages.c:235
+msgid "You cannot download an input field."
+msgstr "U kunt niet downloaden in een invoerveld."
+
+#: LYMessages.c:236
+msgid "Form has a mailto action! Cannot download."
+msgstr "Form heeft een mailto-actie! Kan niet downloaden."
+
+#: LYMessages.c:237
+msgid "You cannot download a mailto: link."
+msgstr "U kunt een 'mailto:' koppeling niet downloaden."
+
+#: LYMessages.c:238
+msgid "You cannot download cookies."
+msgstr "U kunt koekjes niet downloaden."
+
+#: LYMessages.c:239
+msgid "You cannot download a printing option."
+msgstr "U kunt een printopdracht niet downloaden."
+
+#: LYMessages.c:240
+msgid "You cannot download an upload option."
+msgstr "U kunt een upload-optie niet downloaden."
+
+#: LYMessages.c:241
+msgid "You cannot download an permit option."
+msgstr "U kunt een toestemmings-optie niet downloaden."
+
+#: LYMessages.c:242
+msgid "This special URL cannot be downloaded!"
+msgstr "Dit specifieke URL kan niet worden gedownload!"
+
+#: LYMessages.c:243
+msgid "Nothing to download."
+msgstr "Niets om te downloaden."
+
+#: LYMessages.c:244
+msgid "Trace ON!"
+msgstr "Traceren AAN!"
+
+#: LYMessages.c:245
+msgid "Trace OFF!"
+msgstr "Traceren UIT!"
+
+#. #define CLICKABLE_IMAGES_ON
+#: LYMessages.c:247
+msgid "Links will be included for all images! Reloading..."
+msgstr "Links voor alle afbeeldingen worden opgenomen! Bezig met herladen..."
+
+#. #define CLICKABLE_IMAGES_OFF
+#: LYMessages.c:249
+msgid "Standard image handling restored! Reloading..."
+msgstr "Normale afhandeling voor afbeeldingen teruggezet! Bezig met herladen..."
+
+#. #define PSEUDO_INLINE_ALTS_ON
+#: LYMessages.c:251
+msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
+msgstr "Voeg Pseudo_ALT's in voor inlines zonder ALT strings! Bezig met herladen..."
+
+#. #define PSEUDO_INLINE_ALTS_OFF
+#: LYMessages.c:253
+msgid "Inlines without an ALT string specified will be ignored! Reloading..."
+msgstr "Inlines zonder ALT strings worden genegeerd! Bezig met herladen..."
+
+#: LYMessages.c:254
+msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
+msgstr "Ruwe 8-bit of CJK mode UIT gezet! Bezig met herladen..."
+
+#: LYMessages.c:255
+msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
+msgstr "Ruwe 8-bit of CJK mode AAN gezet! Bezig met herladen..."
+
+#. #define HEAD_D_L_OR_CANCEL
+#: LYMessages.c:257
+msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
+msgstr "Zend `HEAD' verzoek voor D)ocument, L)ink of C)-annuleer? (d,l,c): "
+
+#. #define HEAD_D_OR_CANCEL
+#: LYMessages.c:259
+msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
+msgstr "Zend HEAD verzoek voor D)ocument of C)-annuleer? (d,c): "
+
+#: LYMessages.c:260
+msgid "Sorry, the document is not an http URL."
+msgstr "Sorry, het document is niet een http URL."
+
+#: LYMessages.c:261
+msgid "Sorry, the link is not an http URL."
+msgstr "Sorry, de link is niet een http URL."
+
+#: LYMessages.c:262
+msgid "Sorry, the ACTION for this form is disabled."
+msgstr "Sorry, de ACTIE voor dit formulier is uitgezet."
+
+#. #define FORM_ACTION_NOT_HTTP_URL
+#: LYMessages.c:264
+msgid "Sorry, the ACTION for this form is not an http URL."
+msgstr "Sorry, de ACTIE voor dit formulier is niet een http URL."
+
+#: LYMessages.c:265
+msgid "Not an http URL or form ACTION!"
+msgstr "Niet een http URL of form ACTIE!"
+
+#: LYMessages.c:266
+msgid "This special URL cannot be a form ACTION!"
+msgstr "Dit specifieke URL kan niet een form ACTIE zijn!"
+
+#: LYMessages.c:267
+msgid "URL is not in starting realm!"
+msgstr "URL is niet in begin-omgeving!"
+
+#: LYMessages.c:268
+msgid "News posting is disabled!"
+msgstr "Nieuwsberichten zenden is uitgezet!"
+
+#: LYMessages.c:269
+msgid "File management support is disabled!"
+msgstr "Bestandsbeheer is uitgezet!"
+
+#: LYMessages.c:270
+msgid "No jump file is currently available."
+msgstr "Er is momenteel geen snelkoppelingen-bestand beschikbaar."
+
+#: LYMessages.c:271
+msgid "Jump to (use '?' for list): "
+msgstr "Spring naar (vraag een lijst op met '?'): "
+
+#: LYMessages.c:272
+msgid "Jumping to a shortcut URL is disallowed!"
+msgstr "Springen naar een snelkoppeling-URL is niet toegestaan!"
+
+#: LYMessages.c:273
+msgid "Random URL is disallowed! Use a shortcut."
+msgstr "Willekeurig URL is niet toegestaan! Gebruik een sneltoets."
+
+#: LYMessages.c:274
+msgid "No random URLs have been used thus far."
+msgstr "Tot nog toe zijn er geen willeukeurige URL's gebruikt."
+
+#: LYMessages.c:275
+msgid "Bookmark features are currently disabled."
+msgstr "Boekenlegger-mogelijkheden zijn momenteel uitgezet."
+
+#: LYMessages.c:276
+msgid "Execution via bookmarks is disabled."
+msgstr "Uitvoeren via boekenleggers is uitgezet."
+
+#. #define BOOKMARK_FILE_NOT_DEFINED
+#: LYMessages.c:278
+#, c-format
+msgid "Bookmark file is not defined. Use %s to see options."
+msgstr "boekenleggerbestand is niet opgegeven. Gebruik %s om de opties te zien."
+
+#. #define NO_TEMP_FOR_HOTLIST
+#: LYMessages.c:280
+msgid "Unable to open tempfile for X Mosaic hotlist conversion."
+msgstr "Niet in staat om tijdelijk bestand te openen voor 'X Mosaic hotlist' conversie."
+
+#: LYMessages.c:281
+msgid "ERROR - unable to open bookmark file."
+msgstr "FOUT - niet in staat om boekenleggerbestand te openen."
+
+#. #define BOOKMARK_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:283
+msgid "Unable to open bookmark file for deletion of link."
+msgstr "Kan boekenleggerbestand niet openen om link te verwijderen."
+
+#. #define BOOKSCRA_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:285
+msgid "Unable to open scratch file for deletion of link."
+msgstr "Kan kladblok-bestand niet openen om link te verwijderen."
+
+#: LYMessages.c:287
+msgid "Error renaming scratch file."
+msgstr "Fout bij het hernoemen van kladblok-bestand."
+
+#: LYMessages.c:289
+msgid "Error renaming temporary file."
+msgstr "Fout bij het hernoemen van tijdelijk bestand."
+
+#. #define BOOKTEMP_COPY_FAIL
+#: LYMessages.c:291
+msgid "Unable to copy temporary file for deletion of link."
+msgstr "Kan tijdelijk bestand niet kopiëren om link te verwijderen."
+
+#. #define BOOKTEMP_REOPEN_FAIL_FOR_DEL
+#: LYMessages.c:293
+msgid "Unable to reopen temporary file for deletion of link."
+msgstr "Kan tijdelijk bestand niet heropenen om link te verwijderen."
+
+#. #define BOOKMARK_LINK_NOT_ONE_LINE
+#: LYMessages.c:296
+msgid "Link is not by itself all on one line in bookmark file."
+msgstr "De link vult meer dan één regel in het boekenleggerbestand."
+
+#: LYMessages.c:297
+msgid "Bookmark deletion failed."
+msgstr "Boekenlegger kon niet gewist worden."
+
+#. #define BOOKMARKS_NOT_TRAVERSED
+#: LYMessages.c:299
+msgid "Bookmark files cannot be traversed (only http URLs)."
+msgstr "boekenleggerbestanden kunnen niet doorkruist worden (enkel http URL's)."
+
+#. #define BOOKMARKS_NOT_OPEN
+#: LYMessages.c:301
+msgid "Unable to open bookmark file, use 'a' to save a link first"
+msgstr "Kan boekenleggerbestand niet openen, gebruik 'a' om de link eerst op te slaan"
+
+#: LYMessages.c:302
+msgid "There are no links in this bookmark file!"
+msgstr "Er zijn geen links in dit boekenleggerbestand!"
+
+#. #define BOOK_D_L_OR_CANCEL
+#: LYMessages.c:304
+msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
+msgstr "Opslaan in boekenleggerbestand: D)ocument, L)ink of C)-annuleren? (d,l,c): "
+
+#: LYMessages.c:305
+msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
+msgstr "Opslaan in boekenleggerbestand: D)ocument of C)-annuleren? (d,c): "
+
+#: LYMessages.c:306
+msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
+msgstr "Opslaan in boekenleggerbestand: L)ink of C)-annuleren? (l,c): "
+
+#. #define NOBOOK_POST_FORM
+#: LYMessages.c:308
+msgid "Documents from forms with POST content cannot be saved as bookmarks."
+msgstr "Kan geen boekenleggers maken van documenten van form's met POST-informatie."
+
+#: LYMessages.c:309
+msgid "Cannot save form fields/links"
+msgstr "Kan form-velden/links niet opslaan"
+
+#. #define NOBOOK_HSML
+#: LYMessages.c:311
+msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
+msgstr "Kan geen boekenleggers maken van historie, info-overzicht, menu of lijsten."
+
+#. #define CONFIRM_BOOKMARK_DELETE
+#: LYMessages.c:313
+msgid "Do you really want to delete this link from your bookmark file?"
+msgstr "Wilt u echt deze link uit het boekenleggerbestand verwijderen?"
+
+#: LYMessages.c:314
+msgid "Malformed address."
+msgstr "Ongeldig adres."
+
+#. #define HISTORICAL_ON_MINIMAL_OFF
+#: LYMessages.c:316
+msgid "Historical comment parsing ON (Minimal is overridden)!"
+msgstr "Oorspronkelijke commentaar-verwerking AAN (Minimale methode onderdrukt)!"
+
+#. #define HISTORICAL_OFF_MINIMAL_ON
+#: LYMessages.c:318
+msgid "Historical comment parsing OFF (Minimal is in effect)!"
+msgstr "Oorspronkelijke commentaar-verwerking UIT (Minimale methode is actief)!"
+
+#. #define HISTORICAL_ON_VALID_OFF
+#: LYMessages.c:320
+msgid "Historical comment parsing ON (Valid is overridden)!"
+msgstr "Oorspronkelijke commentaar-verwerking AAN (Geldige methode onderdrukt)"
+
+#. #define HISTORICAL_OFF_VALID_ON
+#: LYMessages.c:322
+msgid "Historical comment parsing OFF (Valid is in effect)!"
+msgstr "Oorspronkelijke commentaar-ontleding UIT (Geldige methode is actief)!"
+
+#. #define MINIMAL_ON_IN_EFFECT
+#: LYMessages.c:324
+msgid "Minimal comment parsing ON (and in effect)!"
+msgstr "Minimale verwerking van commentaar AAN (en actief)!"
+
+#. #define MINIMAL_OFF_VALID_ON
+#: LYMessages.c:326
+msgid "Minimal comment parsing OFF (Valid is in effect)!"
+msgstr "Minimale verwerking van commentaar UIT (Geldige methode is actief)!"
+
+#. #define MINIMAL_ON_BUT_HISTORICAL
+#: LYMessages.c:328
+msgid "Minimal comment parsing ON (but Historical is in effect)!"
+msgstr "Minimale verwerking van commentaar AAN (Oorspronkelijke methode is actief)!"
+
+#. #define MINIMAL_OFF_HISTORICAL_ON
+#: LYMessages.c:330
+msgid "Minimal comment parsing OFF (Historical is in effect)!"
+msgstr "Minimale verwerking van commentaar UIT (Oorspronkelijke methode actief)!"
+
+#: LYMessages.c:331
+msgid "Soft double-quote parsing ON!"
+msgstr "`Soft double-quote' ontleden AAN!"
+
+#: LYMessages.c:332
+msgid "Soft double-quote parsing OFF!"
+msgstr "`Soft double-quote' ontleden UIT!"
+
+#: LYMessages.c:333
+msgid "Now using TagSoup parsing of HTML."
+msgstr "Vanaf nu wordt `TagSoup' gebruikt om HTML te ontleden."
+
+#: LYMessages.c:334
+msgid "Now using SortaSGML parsing of HTML!"
+msgstr "Vanaf nu wordt `SortaSGML' gebruikt om HTML te ontleden."
+
+#: LYMessages.c:335
+msgid "You are already at the end of this document."
+msgstr "U bent al aan het einde van het document."
+
+#: LYMessages.c:336
+msgid "You are already at the beginning of this document."
+msgstr "U bent al aan het begin van het document."
+
+#: LYMessages.c:337
+#, c-format
+msgid "You are already at page %d of this document."
+msgstr "U bent al op pagina %d van dit document."
+
+#: LYMessages.c:338
+#, c-format
+msgid "Link number %d already is current."
+msgstr "Link nummer %d is al geselecteerd."
+
+#: LYMessages.c:339
+msgid "You are already at the first document"
+msgstr "U bent al bij het eerste document"
+
+#: LYMessages.c:340
+msgid "There are no links above this line of the document."
+msgstr "Er zijn geen links boven deze regel in het document."
+
+#: LYMessages.c:341
+msgid "There are no links below this line of the document."
+msgstr "Er zijn geen links meer beneden deze regel in het document."
+
+#. #define MAXLEN_REACHED_DEL_OR_MOV
+#: LYMessages.c:343
+msgid "Maximum length reached! Delete text or move off field."
+msgstr "Maximale lengte bereikt! Verwijder tekst of ga hier weg."
+
+#. #define NOT_ON_SUBMIT_OR_LINK
+#: LYMessages.c:345
+msgid "You are not on a form submission button or normal link."
+msgstr "U staat niet op een form-verzendknop of op een normale link."
+
+#. #define NEED_CHECKED_RADIO_BUTTON
+#: LYMessages.c:347
+msgid "One radio button must be checked at all times!"
+msgstr "Er moet altijd één drukknop ingedrukt zijn!"
+
+#: LYMessages.c:348
+msgid "No submit button for this form, submit single text field?"
+msgstr ""
+
+#: LYMessages.c:349
+msgid "Do you want to go back to the previous document?"
+msgstr "Wilt u terug gaan naar het vorige document?"
+
+#: LYMessages.c:350
+msgid "Use arrows or tab to move off of field."
+msgstr "Ga weg van dit veld met pijltjes of tab."
+
+#. #define ENTER_TEXT_ARROWS_OR_TAB
+#: LYMessages.c:352
+msgid "Enter text. Use arrows or tab to move off of field."
+msgstr "Voer tekst in. Ga weg met pijltjes of tab."
+
+#: LYMessages.c:353
+msgid "** Bad HTML!! No form action defined. **"
+msgstr "** Onjuiste HTML!! Geen form-actie gedefiniëerd. **"
+
+#: LYMessages.c:354
+msgid "Bad HTML!! Unable to create popup window!"
+msgstr "Onjuiste HTML!! Kan geen popup-venster aanmaken!"
+
+#: LYMessages.c:355
+msgid "Unable to create popup window!"
+msgstr "Kan geen popup-venster aanmaken!"
+
+#: LYMessages.c:356
+msgid "Goto a random URL is disallowed!"
+msgstr "Naar een willekeurige URL gaan is niet toegestaan!"
+
+#: LYMessages.c:357
+msgid "Goto a non-http URL is disallowed!"
+msgstr "Naar een niet-http URL gaan is niet toegestaan!"
+
+#: LYMessages.c:358
+#, c-format
+msgid "You are not allowed to goto \"%s\" URLs"
+msgstr "Het is niet toegestaan naar \"%s\" URL's te gaan"
+
+#: LYMessages.c:359
+msgid "URL to open: "
+msgstr "URL om te openen: "
+
+#: LYMessages.c:360
+msgid "Edit the current Goto URL: "
+msgstr "Wijzig de huidige Ga-naar URL: "
+
+#: LYMessages.c:361
+msgid "Edit the previous Goto URL: "
+msgstr "Wijzig de vorige Ga-naar URL: "
+
+#: LYMessages.c:362
+msgid "Edit a previous Goto URL: "
+msgstr "Wijzig een vorige Ga-naar URL: "
+
+#: LYMessages.c:363
+msgid "Current document has POST data."
+msgstr "Huidige document bevat geen POST informatie."
+
+#: LYMessages.c:364
+msgid "Edit this document's URL: "
+msgstr "Wijzig de URL van dit document: "
+
+#: LYMessages.c:365
+msgid "Edit the current link's URL: "
+msgstr "Wijzig de URL van de huidige link: "
+
+#: LYMessages.c:366
+msgid "You cannot edit File Management URLs"
+msgstr "U kunt Bestandsbeheer URL's niet wijzigen"
+
+#: LYMessages.c:367
+msgid "Enter a database query: "
+msgstr "Voer een database-opdracht in: "
+
+#: LYMessages.c:368
+msgid "Enter a whereis query: "
+msgstr "Voer een zoekopdracht in: "
+
+#: LYMessages.c:369
+msgid "Edit the current query: "
+msgstr "Wijzig de huidige opdracht: "
+
+#: LYMessages.c:370
+msgid "Edit the previous query: "
+msgstr "Wijzig de vorige opdracht: "
+
+#: LYMessages.c:371
+msgid "Edit a previous query: "
+msgstr "Wijzig een voorgaande opdracht: "
+
+#. #define USE_C_R_TO_RESUB_CUR_QUERY
+#: LYMessages.c:373
+msgid "Use Control-R to resubmit the current query."
+msgstr "Gebruik Control-R om de huidige opdracht nog eens te verzenden."
+
+#: LYMessages.c:374
+msgid "Edit the current shortcut: "
+msgstr "Wijzig de huidige snelkoppeling: "
+
+#: LYMessages.c:375
+msgid "Edit the previous shortcut: "
+msgstr "Wijzig de voorgaande snelkoppeling: "
+
+#: LYMessages.c:376
+msgid "Edit a previous shortcut: "
+msgstr "Wijzig een voorgaande snelkoppeling: "
+
+#: LYMessages.c:377
+#, c-format
+msgid "Key '%c' is not mapped to a jump file!"
+msgstr "Toets '%c'is niet verbonden aan een snelkoppeling-bestand!"
+
+#: LYMessages.c:378
+msgid "Cannot locate jump file!"
+msgstr "Kan snelkoppeling-bestand niet vinden!"
+
+#: LYMessages.c:379
+msgid "Cannot open jump file!"
+msgstr "Kan snelkoppeling-bestand niet openen!"
+
+#: LYMessages.c:380
+msgid "Error reading jump file!"
+msgstr "Fout bij het lezen van snelkoppeling-bestand!"
+
+#: LYMessages.c:381
+msgid "Out of memory reading jump file!"
+msgstr "Geen geheugen meer beschikbaar bij het lezen van snelkoppeling-bestand!"
+
+#: LYMessages.c:382
+msgid "Out of memory reading jump table!"
+msgstr "Geen geheugen meer beschikbaar bij het lezen van snelkoppeling-tabel!"
+
+#: LYMessages.c:383
+msgid "No index is currently available."
+msgstr "Er is momenteel geen index beschikbaar."
+
+#. #define CONFIRM_MAIN_SCREEN
+#: LYMessages.c:385
+msgid "Do you really want to go to the Main screen?"
+msgstr "Wilt u echt naar het Beginscherm gaan?"
+
+#: LYMessages.c:386
+msgid "You are already at main screen!"
+msgstr "U bent al in het beginscherm!"
+
+#. #define NOT_ISINDEX
+#: LYMessages.c:388
+msgid "Not a searchable indexed document -- press '/' to search for a text string"
+msgstr "Dit is niet een geïndexeerd document -- gebruik '/' om een tekenreeks te zoeken"
+
+#. #define NO_OWNER
+#: LYMessages.c:390
+msgid "No owner is defined for this file so you cannot send a comment"
+msgstr "Geen eigenaar opgegeven voor dit bestand, dus u kunt geen commentaar zenden"
+
+#: LYMessages.c:391
+#, c-format
+msgid "No owner is defined. Use %s?"
+msgstr "Geen eigenaar opgegeven. Gebruik %s?"
+
+#: LYMessages.c:392
+msgid "Do you wish to send a comment?"
+msgstr "Wilt u commentaar versturen?"
+
+#: LYMessages.c:393
+msgid "Mail is disallowed so you cannot send a comment"
+msgstr "Email is niet toegestaan dus u kunt geen commentaar zenden"
+
+#: LYMessages.c:394
+msgid "The 'e'dit command is currently disabled."
+msgstr "Het 'e'dit command is momenteel uitgeschakeld."
+
+#: LYMessages.c:395
+msgid "External editing is currently disabled."
+msgstr "Extern editen is momenteel uitgeschakeld."
+
+#: LYMessages.c:396
+msgid "System error - failure to get status."
+msgstr "Systeemfout - niet gelukt om status op te vragen."
+
+#: LYMessages.c:397
+msgid "No editor is defined!"
+msgstr "Er is geen editor opgegeven!"
+
+#: LYMessages.c:398
+msgid "The 'p'rint command is currently disabled."
+msgstr "Het 'p'rint commando is momenteel uitgeschakeld."
+
+#: LYMessages.c:399
+msgid "Document has no Toolbar links or Banner."
+msgstr "Het document heeft geen Werkbalk links of koptekst."
+
+#: LYMessages.c:400
+msgid "Unable to open traversal file."
+msgstr "Kan bestand met doorkruisingen niet openen."
+
+#: LYMessages.c:401
+msgid "Unable to open traversal found file."
+msgstr "Kan bestand met gevonden doorkruisingen niet openen."
+
+#: LYMessages.c:402
+msgid "Unable to open reject file."
+msgstr "Kan bestand met verwerpingen niet openen."
+
+#: LYMessages.c:403
+msgid "Unable to open traversal errors output file"
+msgstr "Kan bestand met fouten van doorkruisingen niet vinden"
+
+#: LYMessages.c:404
+msgid "TRAVERSAL WAS INTERRUPTED"
+msgstr "DOORKRUISING WERD ONDERBROKEN"
+
+#: LYMessages.c:405
+msgid "Follow link (or goto link or page) number: "
+msgstr "Volg link (of ga naar link of pagina) nummer: "
+
+#: LYMessages.c:406
+msgid "Select option (or page) number: "
+msgstr "Selecteer optie (of pagina) nummer: "
+
+#: LYMessages.c:407
+#, c-format
+msgid "Option number %d already is current."
+msgstr "Optie-nummer %d is al het huidige."
+
+#. #define ALREADY_AT_OPTION_END
+#: LYMessages.c:409
+msgid "You are already at the end of this option list."
+msgstr "U bent al aan het einde van deze optielijst."
+
+#. #define ALREADY_AT_OPTION_BEGIN
+#: LYMessages.c:411
+msgid "You are already at the beginning of this option list."
+msgstr "U bent al aan het begin van deze optielijst."
+
+#. #define ALREADY_AT_OPTION_PAGE
+#: LYMessages.c:413
+#, c-format
+msgid "You are already at page %d of this option list."
+msgstr "U bent al op pagina %d van deze optielijst."
+
+#: LYMessages.c:414
+msgid "You have entered an invalid option number."
+msgstr "U hebt een ongeldig optienummer ingevoerd."
+
+#: LYMessages.c:415
+msgid "** Bad HTML!! Use -trace to diagnose. **"
+msgstr "** Ongeldige HTML!! Gebruik -trace om een diagnose op te maken. **"
+
+#: LYMessages.c:416
+msgid "Give name of file to save in"
+msgstr "Voer naam in van het bestand om in op te slaan"
+
+#: LYMessages.c:417
+msgid "Can't save data to file -- please run WWW locally"
+msgstr "Kan gegevens niet opslaan in bestand -- draai a.u.b. lokaal WWW"
+
+#: LYMessages.c:418
+msgid "Can't open temporary file!"
+msgstr "Kan tijdelijk bestand niet openen!"
+
+#: LYMessages.c:419
+msgid "Can't open output file! Cancelling!"
+msgstr "Kan uitvoerbestand niet openen! Bezig met annuleren!"
+
+#: LYMessages.c:420
+msgid "Execution is disabled."
+msgstr "Uitvoeren is uitgezet."
+
+#. #define EXECUTION_DISABLED_FOR_FILE
+#: LYMessages.c:422
+#, c-format
+msgid "Execution is not enabled for this file. See the Options menu (use %s)."
+msgstr "Uitvoeren is niet aangezet voor dit bestand. Zie het optiemenu (gebruik %s)."
+
+#. #define EXECUTION_NOT_COMPILED
+#: LYMessages.c:424
+msgid "Execution capabilities are not compiled into this version."
+msgstr "Uitvoermogelijkheden zijn niet ingebouwd in deze versie."
+
+#: LYMessages.c:425
+msgid "This file cannot be displayed on this terminal."
+msgstr "Dit bestand kan niet op deze terminal getoond worden."
+
+#. #define CANNOT_DISPLAY_FILE_D_OR_C
+#: LYMessages.c:427
+msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
+msgstr "Dit bestand kan niet op deze terminal getoond worden: D)ownload, C)-annuleren"
+
+#: LYMessages.c:428
+#, c-format
+msgid "%s D)ownload, or C)ancel"
+msgstr "%s D)ownload, of C)-annuleren"
+
+#: LYMessages.c:429
+msgid "Cancelling file."
+msgstr "Bestand wordt geannuleerd."
+
+#: LYMessages.c:430
+msgid "Retrieving file. - PLEASE WAIT -"
+msgstr "Bezig met ophalen van bestand. - EEN OGENBLIK GEDULD A.U.B. -"
+
+#: LYMessages.c:431
+msgid "Enter a filename: "
+msgstr "Voer een bestandsnaam in: "
+
+#: LYMessages.c:432
+msgid "Edit the previous filename: "
+msgstr "Wijzig de vorige bestandsnaam: "
+
+#: LYMessages.c:433
+msgid "Edit a previous filename: "
+msgstr "Wijzig een voorgaande bestandsnaam: "
+
+#: LYMessages.c:434
+msgid "Enter a new filename: "
+msgstr "Voer een nieuwe bestandsnaam in: "
+
+#: LYMessages.c:435
+msgid "File name may not begin with a dot."
+msgstr "Bestandsnaam mag niet met een punt beginnen."
+
+#: LYMessages.c:437
+msgid "File exists. Create higher version?"
+msgstr "Bestand bestaat. Hogere versie aanmaken?"
+
+#: LYMessages.c:439
+msgid "File exists. Overwrite?"
+msgstr "Bestand bestaat. Overschrijven?"
+
+#: LYMessages.c:441
+msgid "Cannot write to file."
+msgstr "Kan niet naar bestand schrijven."
+
+#: LYMessages.c:442
+msgid "ERROR! - download command is misconfigured."
+msgstr "FOUT! - download commando is foutief geconfigureerd."
+
+#: LYMessages.c:443
+msgid "Unable to download file."
+msgstr "Kan bestand niet downloaden."
+
+#: LYMessages.c:444
+msgid "Reading directory..."
+msgstr "Bezig met lezen van bestandenoverzicht..."
+
+#: LYMessages.c:445
+msgid "Building directory listing..."
+msgstr "Bezig lijst te maken voor map..."
+
+#: LYMessages.c:446
+msgid "Saving..."
+msgstr "Bezig met opslaan..."
+
+#: LYMessages.c:447
+#, c-format
+msgid "Could not edit file '%s'."
+msgstr "Kan bestand '%s' niet wijzigen."
+
+#: LYMessages.c:448
+msgid "Unable to access document!"
+msgstr "Geen toegang tot document!"
+
+#: LYMessages.c:449
+msgid "Could not access file."
+msgstr "Geen toegang tot bestand."
+
+#: LYMessages.c:450
+msgid "Could not access directory."
+msgstr "Geen toegang tot map."
+
+#: LYMessages.c:451
+msgid "Could not load data."
+msgstr "Kan gegevens niet inlezen."
+
+#. #define CANNOT_EDIT_REMOTE_FILES
+#: LYMessages.c:453
+msgid "Lynx cannot currently (e)dit remote WWW files."
+msgstr "Lynx kan momenteel geen WWW bestanden op een andere computer wijzigen."
+
+#. #define CANNOT_EDIT_FIELD
+#: LYMessages.c:455
+msgid "This field cannot be (e)dited with an external editor."
+msgstr "Dit veld kan niet gewijzigd worden met een externe editor."
+
+#: LYMessages.c:456
+msgid "Bad rule"
+msgstr "Foutieve regel"
+
+#: LYMessages.c:457
+msgid "Insufficient operands:"
+msgstr "Onvolledige operandi:"
+
+#: LYMessages.c:458
+msgid "You are not authorized to edit this file."
+msgstr "U bent niet geauthoriseerd om dit bestand te wijzigen."
+
+#: LYMessages.c:459
+msgid "Title: "
+msgstr "Titel: "
+
+#: LYMessages.c:460
+msgid "Subject: "
+msgstr "Onderwerp: "
+
+#: LYMessages.c:461
+msgid "Username: "
+msgstr "Gebruikersnaam: "
+
+#: LYMessages.c:462
+msgid "Password: "
+msgstr "Wachtwoord: "
+
+#: LYMessages.c:463
+msgid "lynx: Username and Password required!!!"
+msgstr "lynx: Gebruikersnaam en Wachtwoord vereist!!!"
+
+#: LYMessages.c:464
+msgid "lynx: Password required!!!"
+msgstr "lynx: Wachtwoord vereist!!!"
+
+#: LYMessages.c:465
+msgid "Clear all authorization info for this session?"
+msgstr "Wis alle authorisatie informatie voor deze sessie?"
+
+#: LYMessages.c:466
+msgid "Authorization info cleared."
+msgstr "Authorisatie informatie gewist."
+
+#: LYMessages.c:467
+msgid "Authorization failed. Retry?"
+msgstr "Authorisatie mislukt. Nog eens proberen?"
+
+#: LYMessages.c:468
+msgid "cgi support has been disabled."
+msgstr "cgi ondersteuning is uitgezet."
+
+#. #define CGI_NOT_COMPILED
+#: LYMessages.c:470
+msgid "Lynxcgi capabilities are not compiled into this version."
+msgstr "Lynxcgi mogelijkheden zijn niet ingebouwd in deze versie."
+
+#: LYMessages.c:471
+#, c-format
+msgid "Sorry, no known way of converting %s to %s."
+msgstr "Sorry, geen bekende manier om %s naar %s te converteren."
+
+#: LYMessages.c:472
+msgid "Unable to set up connection."
+msgstr "Kan verbinding niet voorbereiden."
+
+#: LYMessages.c:473
+msgid "Unable to make connection"
+msgstr "Kan verbinding niet maken"
+
+#. #define MALFORMED_EXEC_REQUEST
+#: LYMessages.c:475
+msgid "Executable link rejected due to malformed request."
+msgstr "Uitvoerbare link verworpen vanwege een verkeerd geformuleerde opdracht."
+
+#. #define BADCHAR_IN_EXEC_LINK
+#: LYMessages.c:477
+#, c-format
+msgid "Executable link rejected due to `%c' character."
+msgstr "Uitvoerbare link verworpen vanwege `%c' karakter."
+
+#. #define RELPATH_IN_EXEC_LINK
+#: LYMessages.c:479
+msgid "Executable link rejected due to relative path string ('../')."
+msgstr "Uitvoerbare link verworpen omdat een relatief pad aangeven wordt ('../')."
+
+#. #define BADLOCPATH_IN_EXEC_LINK
+#: LYMessages.c:481
+msgid "Executable link rejected due to location or path."
+msgstr "Uitvoerbare link verworpen vanwege locatie of pad."
+
+#: LYMessages.c:482
+msgid "Mail access is disabled!"
+msgstr "Email toegang is uitgezet!"
+
+#. #define ACCESS_ONLY_LOCALHOST
+#: LYMessages.c:484
+msgid "Only files and servers on the local host can be accessed."
+msgstr "Enkel toegang tot bestanden en servers op de lokale host."
+
+#: LYMessages.c:485
+msgid "Telnet access is disabled!"
+msgstr "Toegang tot Telnet is uitgezet!"
+
+#. #define TELNET_PORT_SPECS_DISABLED
+#: LYMessages.c:487
+msgid "Telnet port specifications are disabled."
+msgstr "Telnet poort specificaties zijn uitgezet."
+
+#: LYMessages.c:488
+msgid "USENET news access is disabled!"
+msgstr "Toegang tot USENET nieuws is uitgezet!"
+
+#: LYMessages.c:489
+msgid "Rlogin access is disabled!"
+msgstr "Toegang tot Rlogin is uitgezet!"
+
+#: LYMessages.c:490
+msgid "Ftp access is disabled!"
+msgstr "Toegang tot FTP is uitgezet!"
+
+#: LYMessages.c:491
+msgid "There are no references from this document."
+msgstr "Er zijn geen referenties van dit document."
+
+#: LYMessages.c:492
+msgid "There are only hidden links from this document."
+msgstr "Er zijn enkel verborgen links van dit document."
+
+#: LYMessages.c:494
+msgid "Unable to open command file."
+msgstr "Kan opdrachten bestand niet openen."
+
+#: LYMessages.c:496
+msgid "News Post Cancelled!!!"
+msgstr "Nieuws Verzending Geannuleerd!!!"
+
+#. #define SPAWNING_EDITOR_FOR_NEWS
+#: LYMessages.c:498
+msgid "Spawning your selected editor to edit news message"
+msgstr "Uw geselecteerde editor wordt opgestart om een nieuwsbericht in te voeren"
+
+#: LYMessages.c:499
+msgid "Post this message?"
+msgstr "Dit bericht posten?"
+
+#: LYMessages.c:500
+#, c-format
+msgid "Append '%s'?"
+msgstr "Voeg '%s' aan einde toe?"
+
+#: LYMessages.c:501
+msgid "Posting to newsgroup(s)..."
+msgstr "Bezig met posten naar nieuwsgroep(en)..."
+
+#: LYMessages.c:503
+msgid "*** You have unread mail. ***"
+msgstr "*** U hebt ongelezen email. ***"
+
+#: LYMessages.c:505
+msgid "*** You have mail. ***"
+msgstr "*** U hebt email. ***"
+
+#: LYMessages.c:507
+msgid "*** You have new mail. ***"
+msgstr "*** U hebt nieuwe email. ***"
+
+#: LYMessages.c:508
+msgid "File insert cancelled!!!"
+msgstr "Opname van bestand geannuleerd!!!"
+
+#: LYMessages.c:509
+msgid "Not enough memory for file!"
+msgstr "Niet genoeg geheugen voor bestand!"
+
+#: LYMessages.c:510
+msgid "Can't open file for reading."
+msgstr "Kan bestand niet openen om te lezen."
+
+#: LYMessages.c:511
+msgid "File does not exist."
+msgstr "Bestand bestaat niet."
+
+#: LYMessages.c:512
+msgid "File does not exist - reenter or cancel:"
+msgstr "Bestand bestaat niet - voer opnieuw in of annuleer:"
+
+#: LYMessages.c:513
+msgid "File is not readable."
+msgstr "Bestand is niet leesbaar."
+
+#: LYMessages.c:514
+msgid "File is not readable - reenter or cancel:"
+msgstr "Bestand is niet leesbaar - voer opnieuw in of annuleer:"
+
+#: LYMessages.c:515
+msgid "Nothing to insert - file is 0-length."
+msgstr "Niets om in te voegen - bestand heeft lengte 0."
+
+#: LYMessages.c:516
+msgid "Save request cancelled!!!"
+msgstr "Verzoek om op te slaan geannuleerd!!!"
+
+#: LYMessages.c:517
+msgid "Mail request cancelled!!!"
+msgstr "Email opdracht geannuleerd!!!"
+
+#. #define CONFIRM_MAIL_SOURCE_PREPARSED
+#: LYMessages.c:519
+msgid "Viewing preparsed source. Are you sure you want to mail it?"
+msgstr "Voorverwerkte brontekst wordt getoond. Weet u zeker dat u het wilt verzenden?"
+
+#: LYMessages.c:520
+msgid "Please wait..."
+msgstr "Een ogenblik geduld a.u.b..."
+
+#: LYMessages.c:521
+msgid "Mailing file. Please wait..."
+msgstr "Bezig met verzenden van bestand. Een ogenblik geduld a.u.b..."
+
+#: LYMessages.c:522
+msgid "ERROR - Unable to mail file"
+msgstr "FOUT - Kan email bestand niet openen"
+
+#. #define CONFIRM_LONG_SCREEN_PRINT
+#: LYMessages.c:524
+#, c-format
+msgid "File is %d screens long. Are you sure you want to print?"
+msgstr "Bestand is %d schermen lang. Weet u zeker dat u het wilt afdrukken?"
+
+#: LYMessages.c:525
+msgid "Print request cancelled!!!"
+msgstr "Verzoek tot afdrukken geannuleerd!!!"
+
+#: LYMessages.c:526
+msgid "Press <return> to begin: "
+msgstr "Druk op <return> om te beginnen: "
+
+#: LYMessages.c:527
+msgid "Press <return> to finish: "
+msgstr "Druk op <return> om te voltooien: "
+
+#. #define CONFIRM_LONG_PAGE_PRINT
+#: LYMessages.c:529
+#, c-format
+msgid "File is %d pages long. Are you sure you want to print?"
+msgstr "Bestand is %d pagina's lang. Weet u zeker dat u het wilt afdrukken?"
+
+#. #define CHECK_PRINTER
+#: LYMessages.c:531
+msgid "Be sure your printer is on-line. Press <return> to start printing:"
+msgstr "Zorg dat de printer on-line is. Druk op <return> om het afdrukken te beginnen:"
+
+#: LYMessages.c:532
+msgid "ERROR - Unable to allocate file space!!!"
+msgstr "FOUT - Kan bestandsruimte niet reserveren!!!"
+
+#: LYMessages.c:533
+msgid "Unable to open tempfile"
+msgstr "Kan tijdelijk bestand niet openen"
+
+#: LYMessages.c:534
+msgid "Unable to open print options file"
+msgstr "Kan opties-bestand niet afdrukken"
+
+#: LYMessages.c:535
+msgid "Printing file. Please wait..."
+msgstr "Bezig met afdrukken van bestand. Een ogenblik geduld a.u.b..."
+
+#: LYMessages.c:536
+msgid "Please enter a valid internet mail address: "
+msgstr "Voer een geldig email adres in: "
+
+#: LYMessages.c:537
+msgid "ERROR! - printer is misconfigured!"
+msgstr "FOUT! - printer is niet goed ingesteld!"
+
+#: LYMessages.c:538
+msgid "Image map from POST response not available!"
+msgstr "Menu-plaatje van POST antwoord is niet beschikbaar!"
+
+#: LYMessages.c:539
+msgid "Misdirected client-side image MAP request!"
+msgstr "Verkeerd gericht opdracht voor afbeelding-menu aan client-zijde!"
+
+#: LYMessages.c:540
+msgid "Client-side image MAP is not accessible!"
+msgstr "Afbeelding-menu aan client-zijde is niet bereikbaar!"
+
+#: LYMessages.c:541
+msgid "No client-side image MAPs are available!"
+msgstr "Er zijn geen afbeelding-menu's bereikbaar aan client-zijde!"
+
+#: LYMessages.c:542
+msgid "Client-side image MAP is not available!"
+msgstr "Afbeelding-menu aan client-zijde is niet beschikbaar!"
+
+#. #define OPTION_SCREEN_NEEDS_24
+#: LYMessages.c:545
+msgid "Screen height must be at least 24 lines for the Options menu!"
+msgstr "De schermhoogte moet ten minste 24 regels zijn voor het Configuratie menu!"
+
+#. #define OPTION_SCREEN_NEEDS_23
+#: LYMessages.c:547
+msgid "Screen height must be at least 23 lines for the Options menu!"
+msgstr "De schermhoogte moet ten minste 23 regels zijn voor het Configuratie menu!"
+
+#. #define OPTION_SCREEN_NEEDS_22
+#: LYMessages.c:549
+msgid "Screen height must be at least 22 lines for the Options menu!"
+msgstr "De schermhoogte moet ten minste 22 regels zijn voor het Configuratie menu!"
+
+#: LYMessages.c:551
+msgid "That key requires Advanced User mode."
+msgstr "Die toetsaanslag werkt enkel in Expert Gebruiker-modus."
+
+#: LYMessages.c:552
+#, c-format
+msgid "Content-type: %s"
+msgstr "Inhoud-type: %s"
+
+#: LYMessages.c:553
+msgid "Command: "
+msgstr "Commando: "
+
+#: LYMessages.c:554
+msgid "Unknown or ambiguous command"
+msgstr ""
+
+#: LYMessages.c:555
+msgid " Version "
+msgstr "Versie "
+
+#: LYMessages.c:556
+msgid " first"
+msgstr ", als eerste poging."
+
+#: LYMessages.c:557
+msgid ", guessing..."
+msgstr " ; misschien werkt dat?..."
+
+#: LYMessages.c:558
+msgid "Permissions for "
+msgstr "Toegangsrechten voor "
+
+#: LYMessages.c:559
+msgid "Select "
+msgstr "Selecteer "
+
+#: LYMessages.c:560
+msgid "capital letter"
+msgstr "hoofdletter"
+
+#: LYMessages.c:561
+msgid " of option line,"
+msgstr " van optieregel,"
+
+#: LYMessages.c:562
+msgid " to save,"
+msgstr " om op te slaan,"
+
+#: LYMessages.c:563
+msgid " to "
+msgstr " aan "
+
+#: LYMessages.c:564
+msgid " or "
+msgstr " of "
+
+#: LYMessages.c:565
+msgid " index"
+msgstr " index"
+
+#: LYMessages.c:566
+msgid " to return to Lynx."
+msgstr " om terug te keren naar Lynx."
+
+#: LYMessages.c:567
+msgid "Accept Changes"
+msgstr "Bevestigen"
+
+#: LYMessages.c:568
+msgid "Reset Changes"
+msgstr "Annuleren"
+
+#: LYMessages.c:569
+msgid "Left Arrow cancels changes"
+msgstr "annuleren met pijltje naar links"
+
+#: LYMessages.c:570
+msgid "Save options to disk"
+msgstr "Opties op schijf opslaan"
+
+#: LYMessages.c:571
+msgid "Hit RETURN to accept entered data."
+msgstr "Druk op <return> om ingevoerde gegevens te accepteren."
+
+#. #define ACCEPT_DATA_OR_DEFAULT
+#: LYMessages.c:573
+msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
+msgstr "Druk op <return> om de gegevens te accepteren. Wis data om te herstellen."
+
+#: LYMessages.c:574
+msgid "Value accepted!"
+msgstr "Waarde geaccepteerd!"
+
+#. #define VALUE_ACCEPTED_WARNING_X
+#: LYMessages.c:576
+msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
+msgstr "Waarde geaccepteerd! -- LET OP: Lynx is geconfigureerd voor X Windows!"
+
+#. #define VALUE_ACCEPTED_WARNING_NONX
+#: LYMessages.c:578
+msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
+msgstr "Waarde geaccepteerd! -- LET OP: Lynx is NIET geconfigureerd voor X Windows!"
+
+#: LYMessages.c:579
+msgid "You are not allowed to change which editor to use!"
+msgstr "U mag niet opgeven welke editor u wilt gebruiken!"
+
+#: LYMessages.c:580
+msgid "Failed to set DISPLAY variable!"
+msgstr "DISPLAY variabele zetten is mislukt!"
+
+#: LYMessages.c:581
+msgid "Failed to clear DISPLAY variable!"
+msgstr "DISPLAY variabele wissen is mislukt!"
+
+#. #define BOOKMARK_CHANGE_DISALLOWED
+#: LYMessages.c:583
+msgid "You are not allowed to change the bookmark file!"
+msgstr "U mag het boekenleggerbestand niet veranderen!"
+
+#: LYMessages.c:584
+msgid "Terminal does not support color"
+msgstr "Terminal ondersteunt geen kleur"
+
+#: LYMessages.c:585
+#, c-format
+msgid "Your '%s' terminal does not support color."
+msgstr "Uw '%s' terminal ondersteunt geen kleur."
+
+#: LYMessages.c:586
+msgid "Access to dot files is disabled!"
+msgstr "Toegang tot punt-bestanden is uitgezet!"
+
+#. #define UA_NO_LYNX_WARNING
+#: LYMessages.c:588
+msgid "User-Agent string does not contain \"Lynx\" or \"L_y_n_x\""
+msgstr "User-Agent waarde bevat geen \"Lynx\" of \"L_y_n_x\""
+
+#. #define UA_PLEASE_USE_LYNX
+#: LYMessages.c:590
+msgid "Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional deception!"
+msgstr "Gebruik \"L_y_n_x\" of \"Lynx\" in User-Agent, anders lijkt het op opzettelijk bedrog."
+
+#. #define UA_CHANGE_DISABLED
+#: LYMessages.c:592
+msgid "Changing of the User-Agent string is disabled!"
+msgstr "Wijzigen van de User-Agent waarde is uitgezet!"
+
+#. #define CHANGE_OF_SETTING_DISALLOWED
+#: LYMessages.c:594
+msgid "You are not allowed to change this setting."
+msgstr "U mag deze instelling niet wijzigen."
+
+#: LYMessages.c:595
+msgid "Saving Options..."
+msgstr "Bezig met opslaan van Opties..."
+
+#: LYMessages.c:596
+msgid "Options saved!"
+msgstr "Opties opgeslagen!"
+
+#: LYMessages.c:597
+msgid "Unable to save Options!"
+msgstr "Kan Opties niet opslaan!"
+
+#: LYMessages.c:598
+msgid " 'r' to return to Lynx "
+msgstr " 'r' om terug te keren naar Lynx "
+
+#: LYMessages.c:599
+msgid " '>' to save, or 'r' to return to Lynx "
+msgstr " '>' om op te slaan, of 'r' om terug te keren naar Lynx "
+
+#. #define ANY_KEY_CHANGE_RET_ACCEPT
+#: LYMessages.c:601
+msgid "Hit any key to change value; RETURN to accept."
+msgstr "Druk op een toets om de waarde te veranderen; <return> om te accepteren."
+
+#: LYMessages.c:602
+msgid "Error uncompressing temporary file!"
+msgstr "Fout bij decomprimeren van tijdelijk bestand!"
+
+#: LYMessages.c:603
+msgid "Unsupported URL scheme!"
+msgstr "Niet ondersteunde URL methode!"
+
+#: LYMessages.c:604
+msgid "Unsupported data: URL! Use SHOWINFO, for now."
+msgstr "Niet ondersteunde data: URL! Gebruik SHOWINFO, voor zolang als dat nodig is."
+
+#: LYMessages.c:605
+msgid "Redirection limit of 10 URL's reached."
+msgstr "Doorverwijzing-limiet van 10 URL's bereikt."
+
+#: LYMessages.c:606
+msgid "Illegal redirection URL received from server!"
+msgstr "Ongeldige doorverwijzing-URL ontvangen van server!"
+
+#. #define SERVER_ASKED_FOR_REDIRECTION
+#: LYMessages.c:608
+#, c-format
+msgid "Server asked for %d redirection of POST content to"
+msgstr "Server vroeg om %d doorverwijzing van POST inhoud naar"
+
+#: LYMessages.c:611
+msgid "P)roceed, use G)ET or C)ancel "
+msgstr "P)-doorgaan, gebruik G)ET of C)-annuleer "
+
+#: LYMessages.c:612
+msgid "P)roceed, or C)ancel "
+msgstr "P)-doorgaan, of C)-annuleren "
+
+#. #define ADVANCED_POST_GET_REDIRECT
+#: LYMessages.c:614
+msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
+msgstr "Doorverwezen POST inhoud. P)-ga door, bekijk U)RL, gebruik G)ET of C)-annuleer\""
+
+#. #define ADVANCED_POST_REDIRECT
+#: LYMessages.c:616
+msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
+msgstr "Doorverwezen POST inhoud. P)-ga door, bekijk U)RL, of C)-annuleer"
+
+#. #define CONFIRM_POST_RESUBMISSION
+#: LYMessages.c:618
+msgid "Document from Form with POST content. Resubmit?"
+msgstr "Document van Formulier met POST inhoud. Opnieuw verzenden?"
+
+#. #define CONFIRM_POST_RESUBMISSION_TO
+#: LYMessages.c:620
+#, c-format
+msgid "Resubmit POST content to %s ?"
+msgstr "Opnieuw POST inhoud naar %s verzenden ?"
+
+#. #define CONFIRM_POST_LIST_RELOAD
+#: LYMessages.c:622
+#, c-format
+msgid "List from document with POST data. Reload %s ?"
+msgstr "Lijst van document met POST informatie. Opnieuw %s laden ?"
+
+#. #define CONFIRM_POST_DOC_HEAD
+#: LYMessages.c:624
+msgid "Document from POST action, HEAD may not be understood. Proceed?"
+msgstr "Document met POST actie, HEAD wordt mogelijk niet begrepen. Doorgaan?"
+
+#. #define CONFIRM_POST_LINK_HEAD
+#: LYMessages.c:626
+msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
+msgstr "Formulier verzend actie is POST, HEAD wordt mogelijk niet begrepen. Doorgaan?"
+
+#: LYMessages.c:627
+msgid "Proceed without a username and password?"
+msgstr "Doorgaan zonder gebruikersnaam en wachtwoord?"
+
+#: LYMessages.c:628
+#, c-format
+msgid "Proceed (%s)?"
+msgstr "Doorgaan (%s)?"
+
+#: LYMessages.c:629
+msgid "Cannot POST to this host."
+msgstr "Kan niet `POST'en naar deze host."
+
+#: LYMessages.c:630
+msgid "POST not supported for this URL - ignoring POST data!"
+msgstr "POST wordt niet ondersteund voor deze URL - POST informatie worden genegeerd!"
+
+#: LYMessages.c:631
+msgid "Discarding POST data..."
+msgstr "POST informatie worden weggegooid..."
+
+#: LYMessages.c:632
+msgid "Document will not be reloaded!"
+msgstr "Document zal niet opnieuw geladen worden!"
+
+#: LYMessages.c:633
+msgid "Location: "
+msgstr "Locatie: "
+
+#: LYMessages.c:634
+#, c-format
+msgid "'%s' not found!"
+msgstr "'%s' niet gevonden!"
+
+#: LYMessages.c:635
+msgid "Default Bookmark File"
+msgstr "Standaard Boekenlegger Bestand"
+
+#: LYMessages.c:636
+msgid "Screen too small! (8x35 min)"
+msgstr "Scherm te klein! (minimaal 8x35)"
+
+#: LYMessages.c:637
+msgid "Select destination or ^G to Cancel: "
+msgstr "Selecteer bestemming of ^G om te annuleren: "
+
+#. #define MULTIBOOKMARKS_SELECT
+#: LYMessages.c:639
+msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
+msgstr "Selecteer subboekenlegger, '=' voor menu, of ^G om te annuleren: "
+
+#. #define MULTIBOOKMARKS_SELF
+#: LYMessages.c:641
+msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
+msgstr "Reproduceer L)ink in dit boekenlegger bestand of C)-annuleer? (l,c): "
+
+#: LYMessages.c:642
+msgid "Multiple bookmark support is not available."
+msgstr "Meervoudige boekenlegger ondersteuning is niet beschikbaar."
+
+#: LYMessages.c:643
+#, c-format
+msgid " Select Bookmark (screen %d of %d)"
+msgstr " Selecteer Boekenlegger (scherm %d van de %d)"
+
+#: LYMessages.c:644
+msgid " Select Bookmark"
+msgstr " Selecteer Boekenlegger"
+
+#. #define MULTIBOOKMARKS_EHEAD_MASK
+#: LYMessages.c:646
+#, c-format
+msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
+msgstr "Bezig met wijzigen van Boekenlegger OMSCHRIJVING en BESTANDSPAD (%d van 2)"
+
+#. #define MULTIBOOKMARKS_EHEAD
+#: LYMessages.c:648
+msgid " Editing Bookmark DESCRIPTION and FILEPATH"
+msgstr " Wijzigen van Boekenlegger OMSCHRIJVING en BESTANDSPAD"
+
+#: LYMessages.c:649
+msgid "Letter: "
+msgstr "Letter: "
+
+#. #define USE_PATH_OFF_HOME
+#: LYMessages.c:652
+msgid "Use a filepath off your login directory in SHELL syntax!"
+msgstr "Gebruik een bestandspad vanuit uw login map in SHELL syntaxis!"
+
+#: LYMessages.c:654
+msgid "Use a filepath off your home directory!"
+msgstr "Gebruik een bestandspad vanuit uw thuismap!"
+
+#. #define MAXLINKS_REACHED
+#: LYMessages.c:657
+msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
+msgstr "Teveel links per pagina! Blader per halve-pagina of twee-regelig."
+
+#. #define MAXHIST_REACHED
+#: LYMessages.c:659
+msgid "History List maximum reached! Document not pushed."
+msgstr "Maximum van Historie Lijst bereikt! Document niet toegevoegd."
+
+#: LYMessages.c:660
+msgid "No previously visited links available!"
+msgstr "Geen voorgaande bezochte links beschikbaar!"
+
+#: LYMessages.c:661
+msgid "Memory exhausted! Program aborted!"
+msgstr "Geen geheugen meer beschikbaar! Programma afgebroken!"
+
+#: LYMessages.c:662
+msgid "Memory exhausted! Aborting..."
+msgstr "Geen geheugen meer beschikbaar! Bezig met afbreken..."
+
+#: LYMessages.c:663
+msgid "Not enough memory!"
+msgstr "Niet genoeg geheugen!"
+
+#: LYMessages.c:664
+msgid "Directory/File Manager not available"
+msgstr "Map/Bestandsbeheer niet beschikbaar"
+
+#: LYMessages.c:665
+msgid "HREF in BASE tag is not an absolute URL."
+msgstr "HREF in `BASIS' element is niet een absolute URL."
+
+#: LYMessages.c:666
+msgid "Location URL is not absolute."
+msgstr "Locatie URL is niet absoluut."
+
+#: LYMessages.c:667
+msgid "Refresh URL is not absolute."
+msgstr "Verversings URL is niet absoluut."
+
+#. #define SENDING_MESSAGE_WITH_BODY_TO
+#: LYMessages.c:669
+msgid ""
+"You are sending a message with body to:\n"
+" "
+msgstr ""
+"U zendt een bericht met inhoud naar:\n"
+" "
+
+#: LYMessages.c:670
+msgid ""
+"You are sending a comment to:\n"
+" "
+msgstr ""
+"U zendt commentaar naar:\n"
+" "
+
+#: LYMessages.c:671
+msgid ""
+"\n"
+" With copy to:\n"
+" "
+msgstr ""
+"\n"
+" Met kopie naar:\n"
+" "
+
+#: LYMessages.c:672
+msgid ""
+"\n"
+" With copies to:\n"
+" "
+msgstr ""
+"\n"
+" Met kopieën naar:\n"
+" "
+
+#. #define CTRL_G_TO_CANCEL_SEND
+#: LYMessages.c:674
+msgid ""
+"\n"
+"\n"
+"Use Ctrl-G to cancel if you do not want to send a message\n"
+msgstr ""
+"\n"
+"\n"
+"Gebruik Ctrl-G om te annuleren als u het bericht niet wilt verzenden\n"
+
+#. #define ENTER_NAME_OR_BLANK
+#: LYMessages.c:676
+msgid ""
+"\n"
+" Please enter your name, or leave it blank to remain anonymous\n"
+msgstr ""
+"\n"
+" Voer uw naam in, of laat het leeg om anoniem te blijven\n"
+
+#. #define ENTER_MAIL_ADDRESS_OR_OTHER
+#: LYMessages.c:678
+msgid ""
+"\n"
+" Please enter a mail address or some other\n"
+msgstr ""
+"\n"
+" Vul een email adres in of een andere\n"
+
+#. #define MEANS_TO_CONTACT_FOR_RESPONSE
+#: LYMessages.c:680
+msgid " means to contact you, if you desire a response.\n"
+msgstr " manier om u te bereiken, als u antwoord wenst te ontvangen.\n"
+
+#: LYMessages.c:681
+msgid ""
+"\n"
+" Please enter a subject line.\n"
+msgstr ""
+"\n"
+" Vul een onderwerp in.\n"
+
+#. #define ENTER_ADDRESS_FOR_CC
+#: LYMessages.c:683
+msgid ""
+"\n"
+" Enter a mail address for a CC of your message.\n"
+msgstr ""
+"\n"
+"Voer een email adres in om een kopie van het bericht naar toe te sturen.\n"
+
+#: LYMessages.c:684
+msgid " (Leave blank if you don't want a copy.)\n"
+msgstr " (Laat leeg indien u geen kopie wilt.)\n"
+
+#: LYMessages.c:685
+msgid ""
+"\n"
+" Please review the message body:\n"
+"\n"
+msgstr ""
+"\n"
+" Herzie de inhoud van het bericht a.u.b.:\n"
+"\n"
+
+#: LYMessages.c:686
+msgid ""
+"\n"
+"Press RETURN to continue: "
+msgstr ""
+"\n"
+"Druk op <return> om door te gaan: "
+
+#: LYMessages.c:687
+msgid ""
+"\n"
+"Press RETURN to clean up: "
+msgstr ""
+"\n"
+"Druk op <return> om op te ruimen: "
+
+#: LYMessages.c:688
+msgid " Use Control-U to erase the default.\n"
+msgstr " Gebruik Control-U om de huidige regel te wissen.\n"
+
+#: LYMessages.c:689
+msgid ""
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+" Schrijf uw bericht hieronder."
+
+#. #define ENTER_PERIOD_WHEN_DONE_A
+#: LYMessages.c:691 src/LYNews.c:380
+msgid ""
+"\n"
+" When you are done, press enter and put a single period (.)"
+msgstr ""
+"\n"
+" Indien u klaar bent, druk dan op <return> en plaats vervolgens"
+
+#. #define ENTER_PERIOD_WHEN_DONE_B
+#: LYMessages.c:693 src/LYNews.c:381
+msgid ""
+"\n"
+" on a line and press enter again."
+msgstr ""
+"\n"
+" een punt (.) op één regel, en druk dan wederom op <return>."
+
+#. Cookies messages
+#. #define ADVANCED_COOKIE_CONFIRMATION
+#: LYMessages.c:697
+#, c-format
+msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
+msgstr "%s koekje: %.*s=%.*s Toestaan? J)a, N)ee, A)ltijd, V)-nooit"
+
+#. #define INVALID_COOKIE_DOMAIN_CONFIRMATION
+#: LYMessages.c:699
+#, c-format
+msgid "Accept invalid cookie domain=%s for '%s'?"
+msgstr "Accepteer ongeldig koekjesdomein=%s voor '%s'?"
+
+#. #define INVALID_COOKIE_PATH_CONFIRMATION
+#: LYMessages.c:701
+#, c-format
+msgid "Accept invalid cookie path=%s as a prefix of '%s'?"
+msgstr "Accepteer ongeldig koekjespad=%s als een prefix voor '%s'?"
+
+#: LYMessages.c:702
+msgid "Allowing this cookie."
+msgstr "Dit koekje wordt toegelaten."
+
+#: LYMessages.c:703
+msgid "Rejecting this cookie."
+msgstr "Dit koekje wordt niet toegelaten."
+
+#: LYMessages.c:704
+msgid "The Cookie Jar is empty."
+msgstr "De Koekjes Trommel is leeg."
+
+#. #define ACTIVATE_TO_GOBBLE
+#: LYMessages.c:706
+msgid "Activate links to gobble up cookies or entire domains,"
+msgstr "Activeer de links om koekjes over hun houdbaarheidsdatum heen te helpen,"
+
+#: LYMessages.c:707
+msgid "or to change a domain's 'allow' setting."
+msgstr "of om de 'toelaatbaarheids' instelling van een domein te wijzigen."
+
+#: LYMessages.c:708
+msgid "(Cookies never allowed.)"
+msgstr "(Koekjes nooit toegestaan.)"
+
+#: LYMessages.c:709
+msgid "(Cookies always allowed.)"
+msgstr "(Koekjes altijd toegestaan.)"
+
+#: LYMessages.c:710
+msgid "(Cookies allowed via prompt.)"
+msgstr "(Koekjes toegestaan met prompt.)"
+
+#: LYMessages.c:711
+msgid "(Persistent Cookies.)"
+msgstr "(Persistente Koekjes.)"
+
+#: LYMessages.c:712
+msgid "(No title.)"
+msgstr "(Geen titel.)"
+
+#: LYMessages.c:713
+msgid "(No name.)"
+msgstr "(Geen naam.)"
+
+#: LYMessages.c:714
+msgid "(No value.)"
+msgstr "(Geen waarde.)"
+
+#: LYMessages.c:715
+msgid "None"
+msgstr "Geen"
+
+#: LYMessages.c:716
+msgid "(End of session.)"
+msgstr "(Einde sessie.)"
+
+#: LYMessages.c:717
+msgid "Delete this cookie?"
+msgstr "Verwijder dit koekje?"
+
+#: LYMessages.c:718
+msgid "The cookie has been eaten!"
+msgstr "Dit koekje is opgegeten!"
+
+#: LYMessages.c:719
+msgid "Delete this empty domain?"
+msgstr "Verwijder dit lege domein?"
+
+#: LYMessages.c:720
+msgid "The domain has been eaten!"
+msgstr "Dit domein is opgegeten!"
+
+#. #define DELETE_COOKIES_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:722
+msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D)omein wissen; zet toelaten op A)ltijd/P)rompt/V)-nooit; of C)-annuleren? "
+
+#. #define DELETE_DOMAIN_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:724
+msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D)omein wissen, zet toestaan A)ltijd/P)rompt/V)-nooit, of C)-annuleren? "
+
+#: LYMessages.c:725
+msgid "All cookies in the domain have been eaten!"
+msgstr "Alle koekjes in het domein zijn opgegeten!"
+
+#: LYMessages.c:726
+#, c-format
+msgid "'A'lways allowing from domain '%s'."
+msgstr "'A'ltijd toelaten van domein '%s'."
+
+#: LYMessages.c:727
+#, c-format
+msgid "ne'V'er allowing from domain '%s'."
+msgstr "nooit (V) toelaten van domein '%s'."
+
+#: LYMessages.c:728
+#, c-format
+msgid "'P'rompting to allow from domain '%s'."
+msgstr "'P'rompt voor toestaan van domein '%s'."
+
+#: LYMessages.c:729
+msgid "Delete all cookies in this domain?"
+msgstr "Verwijder alle koekjes in dit domein?"
+
+#: LYMessages.c:730
+msgid "All of the cookies in the jar have been eaten!"
+msgstr "Alle koekjes in de trommel zijn opgegeten!"
+
+#: LYMessages.c:732
+msgid "Port 19 not permitted in URLs."
+msgstr "Poort 19 is niet toegestaan in URL's."
+
+#: LYMessages.c:733
+msgid "Port 25 not permitted in URLs."
+msgstr "Poort 25 is niet toegestaan in URL's."
+
+#: LYMessages.c:734
+#, c-format
+msgid "Port %lu not permitted in URLs."
+msgstr "Poort %lu niet toegestaan in URL's."
+
+#: LYMessages.c:735
+msgid "URL has a bad port field."
+msgstr "URL heeft een foutief poort-veld."
+
+#: LYMessages.c:736
+msgid "Maximum nesting of HTML elements exceeded."
+msgstr "Maximale nest-diepte van HTML elementen overschreden."
+
+#: LYMessages.c:737
+msgid "Bad partial reference! Stripping lead dots."
+msgstr "Foutieve gedeeltelijke referentie! Voorafgaande puntjes worden weggelaten."
+
+#: LYMessages.c:738
+msgid "Trace Log open failed. Trace off!"
+msgstr "Kan Traceer logbestand niet openen. Traceren uitgezet!"
+
+#: LYMessages.c:739
+msgid "Lynx Trace Log"
+msgstr "Lynx Traceer Logbestand"
+
+#: LYMessages.c:740
+msgid "No trace log has been started for this session."
+msgstr "Er is geen traceer logbestand gestart voor deze sessie."
+
+#. #define MAX_TEMPCOUNT_REACHED
+#: LYMessages.c:742
+msgid "The maximum temporary file count has been reached!"
+msgstr "Het maximale aantal tijdelijke bestanden is bereikt!"
+
+#. #define FORM_VALUE_TOO_LONG
+#: LYMessages.c:744
+msgid "Form field value exceeds buffer length! Trim the tail."
+msgstr "Waarde in form veld overschrijdt lengte van de buffer! Staart wordt afgeknipt."
+
+#. #define FORM_TAIL_COMBINED_WITH_HEAD
+#: LYMessages.c:746
+msgid "Modified tail combined with head of form field value."
+msgstr "Veranderde staart samengevoegd met kop van waarde uit form veld."
+
+#. HTFile.c
+#: LYMessages.c:749
+msgid "Directory"
+msgstr "Map"
+
+#: LYMessages.c:750
+msgid "Directory browsing is not allowed."
+msgstr "Bladeren door mappen is niet toegestaan."
+
+#: LYMessages.c:751
+msgid "Selective access is not enabled for this directory"
+msgstr "Selectieve toegang is niet aangezet voor deze map"
+
+#: LYMessages.c:752
+msgid "Multiformat: directory scan failed."
+msgstr "Multiformat: doorzoeken van map mislukt."
+
+#: LYMessages.c:753
+msgid "This directory is not readable."
+msgstr "Deze map is niet leesbaar."
+
+#: LYMessages.c:754
+msgid "Can't access requested file."
+msgstr "Geen toegang tot opgevraagd bestand."
+
+#: LYMessages.c:755
+msgid "Could not find suitable representation for transmission."
+msgstr "Kan geen passende representatie vinden voor overdracht."
+
+#: LYMessages.c:756
+msgid "Could not open file for decompression!"
+msgstr "Kan bestand niet openen voor decompressie!"
+
+#: LYMessages.c:757
+msgid "Files:"
+msgstr "Bestanden:"
+
+#: LYMessages.c:758
+msgid "Subdirectories:"
+msgstr "Submappen:"
+
+#: LYMessages.c:759
+msgid " directory"
+msgstr " map"
+
+#: LYMessages.c:760
+msgid "Up to "
+msgstr "Terug naar "
+
+#: LYMessages.c:761
+msgid "Current directory is "
+msgstr "Huidige map is "
+
+#. HTGopher.c
+#: LYMessages.c:764
+msgid "No response from server!"
+msgstr "Geen reactie van die server!"
+
+#: LYMessages.c:765
+msgid "CSO index"
+msgstr "CSO index"
+
+#: LYMessages.c:766
+msgid ""
+"\n"
+"This is a searchable index of a CSO database.\n"
+msgstr ""
+"\n"
+"Dit is een doorzoekbare index van een CSO database.\n"
+
+#: LYMessages.c:767
+msgid "CSO Search Results"
+msgstr "CSO Zoek Resultaten"
+
+#: LYMessages.c:768
+#, c-format
+msgid "Seek fail on %s\n"
+msgstr "Zoekopdracht mislukt op %s\n"
+
+#: LYMessages.c:769
+msgid ""
+"\n"
+"Press the 's' key and enter search keywords.\n"
+msgstr ""
+"\n"
+"Druk op de 's'toets en voer zoektermen in.\n"
+
+#: LYMessages.c:770
+msgid ""
+"\n"
+"This is a searchable Gopher index.\n"
+msgstr ""
+"\n"
+"Dit is een doorzoekbare Gopher index.\n"
+
+#: LYMessages.c:771
+msgid "Gopher index"
+msgstr "Gopher index"
+
+#: LYMessages.c:772
+msgid "Gopher Menu"
+msgstr "Gopher Menu"
+
+#: LYMessages.c:773
+msgid " Search Results"
+msgstr " Zoek Resultaten"
+
+#: LYMessages.c:774
+msgid "Sending CSO/PH request."
+msgstr "Bezig met verzenden van CSO/PH verzoek."
+
+#: LYMessages.c:775
+msgid "Sending Gopher request."
+msgstr "Bezig met verzenden van Gopher verzoek."
+
+#: LYMessages.c:776
+msgid "CSO/PH request sent; waiting for response."
+msgstr "CSO/PH verzoek verzonden; wacht op antwoord."
+
+#: LYMessages.c:777
+msgid "Gopher request sent; waiting for response."
+msgstr "Gopher verzoek verzonden; wacht op antwoord."
+
+#: LYMessages.c:778
+msgid ""
+"\n"
+"Please enter search keywords.\n"
+msgstr ""
+"\n"
+"Voer zoektermen in.\n"
+
+#: LYMessages.c:779
+msgid ""
+"\n"
+"The keywords that you enter will allow you to search on a"
+msgstr ""
+"\n"
+"De zoektermen die u opgeeft maken het mogelijk te zoeken op"
+
+#: LYMessages.c:780
+msgid " person's name in the database.\n"
+msgstr " een persoonsnaam in de database.\n"
+
+#. HTNews.c
+#: LYMessages.c:783
+msgid "Connection closed ???"
+msgstr "Verbinding gesloten ???"
+
+#: LYMessages.c:784
+msgid "Cannot open temporary file for news POST."
+msgstr "Kan tijdelijk bestand niet openen voor nieuws POST."
+
+#: LYMessages.c:785
+msgid "This client does not contain support for posting to news with SSL."
+msgstr "Dit programma heeft geen ondersteuning voor nieuwsberichten versturen met SSL."
+
+#. HTStyle.c
+#: LYMessages.c:788
+#, c-format
+msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
+msgstr "Stijl %d `%s' SGML:%s. Lettertype %s %.1f punts.\n"
+
+#: LYMessages.c:789
+#, c-format
+msgid "\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
+msgstr " Inspringen: eerste=%.0f overigen=%.0f, hoogte=%.1f omschr=%.1f\n"
+
+#: LYMessages.c:790
+#, c-format
+msgid "\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
+msgstr " Uitlijnen=%d, %d tabs. (%.0f voor, %.0f na)\n"
+
+#: LYMessages.c:791
+#, c-format
+msgid "\t\tTab kind=%d at %.0f\n"
+msgstr " Tab soort=%d op %.0f\n"
+
+#. HTTP.c
+#: LYMessages.c:794
+msgid "Can't proceed without a username and password."
+msgstr "Kan niet verder zonder gebruikersnaam en wachtwoord."
+
+#: LYMessages.c:795
+msgid "Can't retry with authorization! Contact the server's WebMaster."
+msgstr "Herhalen gaat niet zonder authorisatie! Vraag beheerder van de webserver."
+
+#: LYMessages.c:796
+msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
+msgstr "Herhalen gaat niet met proxy authorisatie! Vraag beheerder van de webserver."
+
+#: LYMessages.c:797
+msgid "Retrying with proxy authorization information."
+msgstr "Bezig opnieuw te proberen met proxy authorisatie informatie."
+
+#. HTWAIS.c
+#: LYMessages.c:800
+msgid "HTWAIS: Return message too large."
+msgstr "HTWAIS: Terugkeer-bericht te groot."
+
+#: LYMessages.c:801
+msgid "Enter WAIS query: "
+msgstr "Voer een WAIS verzoek in: "
+
+#. Miscellaneous status
+#: LYMessages.c:804
+msgid "Retrying as HTTP0 request."
+msgstr "Bezig opnieuw te proberen als HTTP0 verzoek."
+
+#: LYMessages.c:805
+#, c-format
+msgid "Transferred %d bytes"
+msgstr "%d bytes overgezet"
+
+#: LYMessages.c:806
+msgid "Data transfer complete"
+msgstr "Gegevensoverdracht voltooid"
+
+#: LYMessages.c:807
+#, c-format
+msgid "Error processing line %d of %s\n"
+msgstr "Fout bij behandeling van regel %d van %s\n"
+
+#. Lynx internal page titles
+#: LYMessages.c:810
+msgid "Address List Page"
+msgstr "Adreslijst Pagina"
+
+#: LYMessages.c:811
+msgid "Bookmark file"
+msgstr "Boekenlegger bestand"
+
+#: LYMessages.c:812
+msgid "Configuration Definitions"
+msgstr "Instellingen"
+
+#: LYMessages.c:813
+msgid "Cookie Jar"
+msgstr "Koekjes Trommel"
+
+#: LYMessages.c:814
+msgid "Current Key Map"
+msgstr "Huidige Toetsenbord Mapping"
+
+#: LYMessages.c:815
+msgid "File Management Options"
+msgstr "Bestandsbeheer Opties"
+
+#: LYMessages.c:816
+msgid "Download Options"
+msgstr "Download Opties"
+
+#: LYMessages.c:817
+msgid "History Page"
+msgstr "Historie Pagina"
+
+#: LYMessages.c:818
+msgid "List Page"
+msgstr "Lijst Pagina"
+
+#: LYMessages.c:819
+msgid "Lynx.cfg Information"
+msgstr "Lynx.cfg Informatie"
+
+#: LYMessages.c:820
+msgid "Converted Mosaic Hotlist"
+msgstr "Geconverteerde Mosaic Hotlist"
+
+#: LYMessages.c:821
+msgid "Options Menu"
+msgstr "Opties Menu"
+
+#: LYMessages.c:822
+msgid "File Permission Options"
+msgstr "Bestands Permissie Opties"
+
+#: LYMessages.c:823
+msgid "Printing Options"
+msgstr "Afdruk Opties"
+
+#: LYMessages.c:824
+msgid "Information about the current document"
+msgstr "Informatie over het huidige document"
+
+#: LYMessages.c:825
+msgid "Your recent statusline messages"
+msgstr "De meest recente berichten in de statusregel"
+
+#: LYMessages.c:826
+msgid "Upload Options"
+msgstr "Upload Opties"
+
+#: LYMessages.c:827
+msgid "Visited Links Page"
+msgstr "Bezochte Links Pagina"
+
+#. CONFIG_DEF_TITLE subtitles
+#: LYMessages.c:830
+msgid "See also"
+msgstr "Zie ook"
+
+#: LYMessages.c:831
+msgid "your"
+msgstr "uw"
+
+#: LYMessages.c:832
+msgid "for runtime options"
+msgstr "voor uitvoer opties"
+
+#: LYMessages.c:833
+msgid "compile time options"
+msgstr "compile opties"
+
+#: LYMessages.c:834
+msgid "latest release"
+msgstr "laatste versie"
+
+#: LYMessages.c:835
+msgid "pre-release version"
+msgstr "ontwikkelversie"
+
+#: LYMessages.c:836
+msgid "development version"
+msgstr "ontwikkelversie"
+
+#. #define AUTOCONF_CONFIG_CACHE
+#: LYMessages.c:838
+msgid ""
+"The following data were derived during the automatic configuration/build\n"
+"process of this copy of Lynx. When reporting a bug, please include a copy\n"
+"of this page."
+msgstr ""
+"De volgende gegevens zijn afgeleid uit het automatische configuratie proces\n"
+"van deze kopie van Lynx. Gelieve een kopie van deze pagina in te voegen bij\n"
+"het rapporteren van een bug."
+
+#. #define AUTOCONF_LYNXCFG_H
+#: LYMessages.c:842
+msgid ""
+"The following data were used as automatically-configured compile-time\n"
+"definitions when this copy of Lynx was built."
+msgstr ""
+"De volgende gegevens zijn gebruikt als automatisch geconfigureerde\n"
+"definities die bij het compileren gebruikt zijn, toen deze kopie van Lynx\n"
+"werd gemaakt."
+
+#. #define DIRED_NOVICELINE
+#: LYMessages.c:847
+msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
+msgstr "C)reëer D)ownload E)dit F)-volledig menu M)-wijzig R)-wis T)-vink U)pload\n"
+
+#: LYMessages.c:848
+msgid "Failed to obtain status of current link!"
+msgstr "Kan status van de huidige link niet verkrijgen!"
+
+#. #define INVALID_PERMIT_URL
+#: LYMessages.c:851
+msgid "Special URL only valid from current File Permission menu!"
+msgstr "Speciale URL alleen geldig vanuit huidige Bestands Permissie menu!"
+
+#: LYMessages.c:855
+msgid "External support is currently disabled."
+msgstr "Externe ondersteuning is momenteel uitgezet."
+
+#. new with 2.8.4dev.21
+#: LYMessages.c:859
+#, fuzzy
+msgid "Changing working-directory is currently disabled."
+msgstr "Het starten van externe programma's starten is uitgezet."
+
+#: LYMessages.c:860
+#, fuzzy
+msgid "Linewrap OFF!"
+msgstr "Traceren UIT!"
+
+#: LYMessages.c:861
+msgid "Linewrap ON!"
+msgstr ""
+
+#: LYMessages.c:862
+#, fuzzy
+msgid "Parsing nested-tables toggled OFF! Reloading..."
+msgstr "Ruwe 8-bit of CJK mode UIT gezet! Bezig met herladen..."
+
+#: LYMessages.c:863
+#, fuzzy
+msgid "Parsing nested-tables toggled ON! Reloading..."
+msgstr "Ruwe 8-bit of CJK mode AAN gezet! Bezig met herladen..."
+
+#: LYMessages.c:864
+msgid "Shifting is disabled while line-wrap is in effect"
+msgstr ""
+
+#: LYMessages.c:865
+#, fuzzy
+msgid "Trace not supported"
+msgstr "Terminal ondersteunt geen kleur"
+
+#: WWW/Library/Implementation/HTAABrow.c:648
+#, c-format
+msgid "Username for '%s' at %s '%s%s':"
+msgstr "Gebruikersnaam voor '%s' op %s '%s%s':"
+
+#: WWW/Library/Implementation/HTAABrow.c:914
+msgid "This client doesn't know how to compose proxy authorization information for scheme"
+msgstr "Dit programma weet niet hoe proxy authorisatie informatie te maken voor schema"
+
+#: WWW/Library/Implementation/HTAABrow.c:989
+msgid "This client doesn't know how to compose authorization information for scheme"
+msgstr "Dit programma weet niet hoe authorisatie informatie te maken voor schema"
+
+#: WWW/Library/Implementation/HTAABrow.c:1097
+#, c-format
+msgid "Invalid header '%s%s%s%s%s'"
+msgstr "Foutieve kop '%s%s%s%s%s'"
+
+#: WWW/Library/Implementation/HTAABrow.c:1201
+msgid "Proxy authorization required -- retrying"
+msgstr "Proxy authorisatie vereisd -- ik probeer op nieuw"
+
+#: WWW/Library/Implementation/HTAABrow.c:1260
+msgid "Access without authorization denied -- retrying"
+msgstr "Toegang zonder authorisatie geweigerd -- ik probeer op nieuw"
+
+#: WWW/Library/Implementation/HTAccess.c:683
+msgid "Access forbidden by rule"
+msgstr "Toegang verboden volgens regel"
+
+#: WWW/Library/Implementation/HTAccess.c:785
+msgid "Document with POST content not found in cache. Resubmit?"
+msgstr "Document met POST inhoud niet gevonden in cache. Nog eens verzenden?"
+
+#: WWW/Library/Implementation/HTAccess.c:1026 src/GridText.c:8039
+msgid "Loading incomplete."
+msgstr "Laden niet voltooid."
+
+#: WWW/Library/Implementation/HTAccess.c:1056
+msgid "**** HTAccess: socket or file number returned by obsolete load routine!\n"
+msgstr "**** HTAccess: socket of bestandsnummer teruggegeven door verouderde laadroutine!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1058
+msgid "**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"
+msgstr "**** HTAccess: Interne software fout. Email a.u.b. lynx-dev@sig.net!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1059
+#, c-format
+msgid "**** HTAccess: Status returned was: %d\n"
+msgstr "**** HTAccess: Geretourneerde status was: %d\n"
+
+#.
+#. * hack: if we fail in HTAccess.c
+#. * avoid duplicating URL, oh.
+#.
+#: WWW/Library/Implementation/HTAccess.c:1065 src/LYMainLoop.c:7834
+msgid "Can't Access"
+msgstr "Kan geen toegang krijgen"
+
+#: WWW/Library/Implementation/HTAccess.c:1073
+msgid "Unable to access document."
+msgstr "Kan geen toegang krijgen tot document."
+
+#: WWW/Library/Implementation/HTFTP.c:756
+#, c-format
+msgid "Enter password for user %s@%s:"
+msgstr "Voer wachtwoord in voor gebruiker %s@%s:"
+
+#: WWW/Library/Implementation/HTFTP.c:784
+msgid "Unable to connect to FTP host."
+msgstr "Kan niet verbinden met FTP host."
+
+#: WWW/Library/Implementation/HTFTP.c:1054
+msgid "close master socket"
+msgstr "sluit hoofdsocket af"
+
+#: WWW/Library/Implementation/HTFTP.c:1116
+msgid "socket for master socket"
+msgstr "socket voor hoofdsocket"
+
+#.
+#. ** It's a symbolic link, does the user care about
+#. ** knowing if it is symbolic? I think so since
+#. ** it might be a directory.
+#.
+#: WWW/Library/Implementation/HTFTP.c:1630 WWW/Library/Implementation/HTFTP.c:2251
+msgid "Symbolic Link"
+msgstr "Symbolische Koppeling"
+
+#: WWW/Library/Implementation/HTFTP.c:2612
+msgid "Receiving FTP directory."
+msgstr "Bezig met ophalen van FTP bestandenoverzicht."
+
+#: WWW/Library/Implementation/HTFTP.c:2755
+#, c-format
+msgid "Transferred %d bytes (%5d)"
+msgstr "%d bytes overgezet (%5d)"
+
+#: WWW/Library/Implementation/HTFTP.c:3090
+msgid "connect for data"
+msgstr "verbinden voor datastroom"
+
+#: WWW/Library/Implementation/HTFTP.c:3690
+msgid "Receiving FTP file."
+msgstr "Bezig met ophalen van FTP bestand."
+
+#: WWW/Library/Implementation/HTFinger.c:275
+msgid "Could not set up finger connection."
+msgstr "Kan finger-verbinding niet voorbereiden."
+
+#: WWW/Library/Implementation/HTFinger.c:320
+msgid "Could not load data (no sitename in finger URL)"
+msgstr "Kan gegevens niet laden (geen site-naam in finger URL)"
+
+#: WWW/Library/Implementation/HTFinger.c:328
+msgid "Invalid port number - will only use port 79!"
+msgstr "Ongeldig poortnummer - zal enkel poort 79 gebruiken!"
+
+#: WWW/Library/Implementation/HTFinger.c:396
+msgid "Could not access finger host."
+msgstr "Kan finger host niet bereiken."
+
+#: WWW/Library/Implementation/HTFinger.c:407
+msgid "No response from finger server."
+msgstr "Geen antwoord van finger server."
+
+#: WWW/Library/Implementation/HTNews.c:372
+#, c-format
+msgid "Username for news host '%s':"
+msgstr "Gebruikersnaam voor nieuws host '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:425
+msgid "Change username?"
+msgstr "Wijzig gebruikersnaam?"
+
+#: WWW/Library/Implementation/HTNews.c:429
+msgid "Username:"
+msgstr "Gebruikersnaam:"
+
+#: WWW/Library/Implementation/HTNews.c:453
+#, c-format
+msgid "Password for news host '%s':"
+msgstr "Wachtwoord voor nieuws host '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:536
+msgid "Change password?"
+msgstr "Wijzig wachtwoord?"
+
+#: WWW/Library/Implementation/HTNews.c:1691
+#, c-format
+msgid "No matches for: %s"
+msgstr "Geen overeenkomsten voor: %s"
+
+#: WWW/Library/Implementation/HTNews.c:1744
+msgid ""
+"\n"
+"No articles in this group.\n"
+msgstr ""
+"\n"
+"Geen artikelen gevonden in deze groep.\n"
+
+#: WWW/Library/Implementation/HTNews.c:1757
+msgid ""
+"\n"
+"No articles in this range.\n"
+msgstr ""
+"\n"
+"Geen artikelen in dit bereik.\n"
+
+#.
+#. ** Set window title.
+#.
+#: WWW/Library/Implementation/HTNews.c:1770
+#, c-format
+msgid "%s, Articles %d-%d"
+msgstr "%s, Artikelen %d-%d"
+
+#: WWW/Library/Implementation/HTNews.c:1792
+msgid "Earlier articles"
+msgstr "Vroegere artikelen"
+
+#: WWW/Library/Implementation/HTNews.c:1805
+#, c-format
+msgid ""
+"\n"
+"There are about %d articles currently available in %s, IDs as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"Er zijn momenteel ongeveer %d artikelen beschikbaar in %s, met volgende ID-nr's:\n"
+"\n"
+
+#: WWW/Library/Implementation/HTNews.c:1865
+msgid "All available articles in "
+msgstr "Alle beschikbare artikelen in "
+
+#: WWW/Library/Implementation/HTNews.c:2081
+msgid "Later articles"
+msgstr "Latere artikelen"
+
+#: WWW/Library/Implementation/HTNews.c:2105
+msgid "Post to "
+msgstr "Posten naar "
+
+#: WWW/Library/Implementation/HTNews.c:2323
+msgid "This client does not contain support for SNEWS URLs."
+msgstr "Dit programma ondersteunt geen SNEWS URL's."
+
+#: WWW/Library/Implementation/HTNews.c:2531
+msgid "No target for raw text!"
+msgstr "Geen bestemming voor ruwe tekst!"
+
+#: WWW/Library/Implementation/HTNews.c:2561
+msgid "Connecting to NewsHost ..."
+msgstr "Bezig met verbinden naar NieuwsHost ..."
+
+#: WWW/Library/Implementation/HTNews.c:2612
+#, c-format
+msgid "Could not access %s."
+msgstr "Geen toegang tot %s."
+
+#: WWW/Library/Implementation/HTNews.c:2712
+#, c-format
+msgid "Can't read news info. News host %.20s responded: %.200s"
+msgstr "Kan nieuws informatie niet lezen. Nieuws host %.20s antwoordde: %.200s"
+
+#: WWW/Library/Implementation/HTNews.c:2716
+#, c-format
+msgid "Can't read news info, empty response from host %s"
+msgstr "Kan nieuws informatie niet lezen, loos antwoord van host %s"
+
+#.
+#. ** List available newsgroups. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2920
+msgid "Reading list of available newsgroups."
+msgstr "Bezig met lijst lezen van beschikbare nieuwsgroepen."
+
+#: WWW/Library/Implementation/HTNews.c:2942
+msgid "Reading list of articles in newsgroup."
+msgstr "Bezig met lijst lezen van artikelen in nieuwsgroep."
+
+#.
+#. ** Get an article from a news group. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2948
+msgid "Reading news article."
+msgstr "Bezig met lezen van nieuws-artikel."
+
+#: WWW/Library/Implementation/HTNews.c:2978
+msgid "Sorry, could not load requested news."
+msgstr "Sorry, kan het opgevraagde nieuws niet laden."
+
+#: WWW/Library/Implementation/HTTCP.c:1233
+msgid "Address has invalid port"
+msgstr "Adres heeft ongeldige poort"
+
+#: WWW/Library/Implementation/HTTCP.c:1336
+msgid "Address length looks invalid"
+msgstr "Adres-lengte ziet er verkeerd uit"
+
+#: WWW/Library/Implementation/HTTCP.c:1574 WWW/Library/Implementation/HTTCP.c:1592
+#, c-format
+msgid "Unable to locate remote host %s."
+msgstr "Niet in staat om computer %s te vinden."
+
+#. Not HTProgress, so warning won't be overwritten
+#. * immediately; but not HTAlert, because typically
+#. * there will be other alerts from the callers. - kw
+#.
+#: WWW/Library/Implementation/HTTCP.c:1589 WWW/Library/Implementation/HTTelnet.c:103
+#, c-format
+msgid "Invalid hostname %s"
+msgstr "Ongeldige computernaam %s"
+
+#: WWW/Library/Implementation/HTTCP.c:1603
+#, c-format
+msgid "Making %s connection to %s"
+msgstr "%s verbinding met %s wordt gemaakt."
+
+#: WWW/Library/Implementation/HTTCP.c:1619
+#, c-format
+msgid "socket failed: family %d addr %s port %s."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1628
+msgid "socket failed."
+msgstr "socket mislukt."
+
+#: WWW/Library/Implementation/HTTCP.c:1648
+msgid "Could not make connection non-blocking."
+msgstr "Het is mislukt de verbinding niet-blokkerend maken."
+
+#: WWW/Library/Implementation/HTTCP.c:1717
+msgid "Connection failed (too many retries)."
+msgstr "Verbinden mislukt (te vaak opnieuw geprobeerd)."
+
+#: WWW/Library/Implementation/HTTCP.c:1910
+msgid "Could not restore socket to blocking."
+msgstr "Kon socket niet naar blokkerende modus herstellen."
+
+#: WWW/Library/Implementation/HTTCP.c:1976
+msgid "Socket read failed for 180,000 tries."
+msgstr "Lezen uit socket mislukt na 180,000 (!) pogingen."
+
+#: WWW/Library/Implementation/HTTP.c:466
+msgid "This client does not contain support for HTTPS URLs."
+msgstr "Dit programma ondersteunt geen HTTPS URL's."
+
+#: WWW/Library/Implementation/HTTP.c:491
+msgid "Unable to connect to remote host."
+msgstr "Niet in staat om met de andere computer te verbinden."
+
+#: WWW/Library/Implementation/HTTP.c:1005
+msgid "Sending HTTP request."
+msgstr "Bezig met zenden van HTTP verzoek."
+
+#: WWW/Library/Implementation/HTTP.c:1039
+msgid "Unexpected network write error; connection aborted."
+msgstr "Onverwachte fout bij schrijven naar netwerk: verbinding verbroken."
+
+#: WWW/Library/Implementation/HTTP.c:1045
+msgid "HTTP request sent; waiting for response."
+msgstr "HTTP verzoek verzonden; wacht op antwoord."
+
+#: WWW/Library/Implementation/HTTP.c:1109
+msgid "Unexpected network read error; connection aborted."
+msgstr "Onverwachte fout bij lezen uit netwerk; verbinding verbroken."
+
+#.
+#. ** HTTP/1.1 Informational statuses.
+#. ** 100 Continue.
+#. ** 101 Switching Protocols.
+#. ** > 101 is unknown.
+#. ** We should never get these, and they have only
+#. ** the status line and possibly other headers,
+#. ** so we'll deal with them by showing the full
+#. ** header to the user as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1305
+msgid "Got unexpected Informational Status."
+msgstr "Onverwachte informatieve status ontvangen."
+
+#.
+#. * Reset Content. The server has fulfilled the
+#. * request but nothing is returned and we should
+#. * reset any form content. We'll instruct the
+#. * user to do that, and restore the current
+#. * document. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1340
+msgid "Request fulfilled. Reset Content."
+msgstr "Verzoek volbracht. Herstel inhoud."
+
+#. Not Modified
+#.
+#. * We didn't send an "If-Modified-Since" header,
+#. * so this status is inappropriate. We'll deal
+#. * with it by showing the full header to the user
+#. * as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1459
+msgid "Got unexpected 304 Not Modified status."
+msgstr "Kreeg een onverwachte 304 Niet Gewijzigd statusmelding."
+
+#: WWW/Library/Implementation/HTTP.c:1526
+msgid "Redirection of POST content requires user approval."
+msgstr "Doorverwijzing van POST inhoud vereist toestemming van de gebruiker."
+
+#: WWW/Library/Implementation/HTTP.c:1541
+msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
+msgstr "Heb POST inhoud. Permanente doorverwijzing wordt behandeld als een tijdelijke.\n"
+
+#: WWW/Library/Implementation/HTTP.c:1586
+msgid "Retrying with access authorization information."
+msgstr "Bezig opnieuw te proberen met informatie over toegangs-authorisatie."
+
+#: WWW/Library/Implementation/HTTP.c:1598
+msgid "Show the 401 message body?"
+msgstr "Inhoud van het 401 bericht laten zien?"
+
+#: WWW/Library/Implementation/HTTP.c:1643
+msgid "Show the 407 message body?"
+msgstr "Inhoud van het 407 bericht laten zien?"
+
+#.
+#. ** Bad or unknown server_status number.
+#. ** Take a chance and hope there is
+#. ** something to display. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1748
+msgid "Unknown status reply from server!"
+msgstr "Onbekend status-antwoord van server!"
+
+#: WWW/Library/Implementation/HTTelnet.c:101
+#, c-format
+msgid "remote %s session:"
+msgstr "sessie %s op andere computer:"
+
+#: WWW/Library/Implementation/HTWAIS.c:161
+msgid "Could not connect to WAIS server."
+msgstr "Kan verbinding met WAIS server niet tot stand brengen."
+
+#: WWW/Library/Implementation/HTWAIS.c:170
+msgid "Could not open WAIS connection for reading."
+msgstr "Kan WAIS verbinding voor lezen niet tot stand brengen."
+
+#: WWW/Library/Implementation/HTWAIS.c:194
+msgid "Diagnostic code is "
+msgstr "Diagnostisch code is "
+
+#: WWW/Library/Implementation/HTWAIS.c:463
+msgid "Index "
+msgstr "Inhoud "
+
+#: WWW/Library/Implementation/HTWAIS.c:467
+#, c-format
+msgid " contains the following %d item%s relevant to \""
+msgstr " bevat de volgende %d item%s relevant voor \""
+
+#: WWW/Library/Implementation/HTWAIS.c:475
+msgid "The first figure after each entry is its relative score, "
+msgstr "Het eerste cijfer achter elke ingang is zijn relatieve score, "
+
+#: WWW/Library/Implementation/HTWAIS.c:476
+msgid "the second is the number of lines in the item."
+msgstr "het tweede is het aantal regels in het item."
+
+#: WWW/Library/Implementation/HTWAIS.c:517
+msgid " (bad file name)"
+msgstr " (foutieve bestandsnaam)"
+
+#: WWW/Library/Implementation/HTWAIS.c:542
+msgid "(bad doc id)"
+msgstr "(foutief document id-nr.)"
+
+#: WWW/Library/Implementation/HTWAIS.c:558
+msgid "(Short Header record, can't display)"
+msgstr "(Verkorte Kop structuur, niet toonbaar)"
+
+#: WWW/Library/Implementation/HTWAIS.c:565
+msgid ""
+"\n"
+"Long Header record, can't display\n"
+msgstr ""
+"\n"
+"Lange Kop structuur, niet toonbaar\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:572
+msgid ""
+"\n"
+"Text record\n"
+msgstr ""
+"\n"
+"Tekst structuur\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:581
+msgid ""
+"\n"
+"Headline record, can't display\n"
+msgstr ""
+"\n"
+"Kopregel structuur, niet toonbaar\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:589
+msgid ""
+"\n"
+"Code record, can't display\n"
+msgstr ""
+"\n"
+"Code structuur, niet toonbaar\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:691
+msgid "Syntax error in WAIS URL"
+msgstr "Syntactische fout in WAIS URL"
+
+#: WWW/Library/Implementation/HTWAIS.c:761
+msgid " (WAIS Index)"
+msgstr "(WAIS Index)"
+
+#: WWW/Library/Implementation/HTWAIS.c:768
+msgid "WAIS Index: "
+msgstr "WAIS Index: "
+
+#: WWW/Library/Implementation/HTWAIS.c:774
+msgid "This is a link for searching the "
+msgstr "Deze link is om te zoeken in de "
+
+#: WWW/Library/Implementation/HTWAIS.c:778
+msgid " WAIS Index.\n"
+msgstr " WAIS Index.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:805
+msgid ""
+"\n"
+"Enter the 's'earch command and then specify search words.\n"
+msgstr ""
+"\n"
+"Voer het 's'-zoek commando in en specificeer zoektermen.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:827
+msgid " (in "
+msgstr " (in "
+
+#: WWW/Library/Implementation/HTWAIS.c:836
+msgid "WAIS Search of \""
+msgstr "WAIS Doorzoeken naar \""
+
+#: WWW/Library/Implementation/HTWAIS.c:840
+msgid "\" in: "
+msgstr "\"in: "
+
+#: WWW/Library/Implementation/HTWAIS.c:855
+msgid "HTWAIS: Request too large."
+msgstr "HTWAIS: Verzoek te groot."
+
+#: WWW/Library/Implementation/HTWAIS.c:864
+msgid "Searching WAIS database..."
+msgstr "Bezig met doorzoeken van WAIS database..."
+
+#: WWW/Library/Implementation/HTWAIS.c:874
+msgid "Search interrupted."
+msgstr "Zoeken onderbroken."
+
+#: WWW/Library/Implementation/HTWAIS.c:924
+msgid "Can't convert format of WAIS document"
+msgstr "Kan opmaak van WAIS document niet converteren"
+
+#: WWW/Library/Implementation/HTWAIS.c:968
+msgid "HTWAIS: Request too long."
+msgstr "HTWAIS: Verzoek te lang."
+
+#.
+#. ** Actually do the transaction given by request_message.
+#.
+#: WWW/Library/Implementation/HTWAIS.c:982
+msgid "Fetching WAIS document..."
+msgstr "Bezig met ophalen van WAIS document..."
+
+#. display_search_response(target, retrieval_response,
+#. wais_database, keywords);
+#: WWW/Library/Implementation/HTWAIS.c:1021
+msgid "No text was returned!\n"
+msgstr "Er is geen tekst geretourneerd!\n"
+
+#: WWW/Library/Implementation/HTWSRC.c:287
+msgid " NOT GIVEN in source file; "
+msgstr " NIET OPGEGEVEN in bronbestand; "
+
+#: WWW/Library/Implementation/HTWSRC.c:311
+msgid " WAIS source file"
+msgstr " WAIS bronbestand"
+
+#: WWW/Library/Implementation/HTWSRC.c:318
+msgid " description"
+msgstr " omschrijving"
+
+#: WWW/Library/Implementation/HTWSRC.c:328
+msgid "Access links"
+msgstr "Toegangs-links"
+
+#: WWW/Library/Implementation/HTWSRC.c:345
+msgid "Direct access"
+msgstr "Directe toegang"
+
+#. * Proxy will be used if defined, so let user know that - FM *
+#: WWW/Library/Implementation/HTWSRC.c:348
+msgid " (or via proxy server, if defined)"
+msgstr " (of via een proxy server, indien opgegeven)"
+
+#: WWW/Library/Implementation/HTWSRC.c:363
+msgid "Maintainer"
+msgstr "Beheerder"
+
+#: WWW/Library/Implementation/HTWSRC.c:371
+msgid "Host"
+msgstr "Host"
+
+#: src/GridText.c:607
+msgid "Memory exhausted, display interrupted!"
+msgstr "Geen geheugen meer beschikbar, beeldweergave onderbroken!"
+
+#: src/GridText.c:612
+msgid "Memory exhausted, will interrupt transfer!"
+msgstr "Geen geheugen meer beschikbaar, overdracht zal worden afgebroken!"
+
+#: src/GridText.c:3395
+msgid " *** MEMORY EXHAUSTED ***"
+msgstr " *** GEHEUGEN VERMOEID ***"
+
+#: src/GridText.c:5733 src/GridText.c:5740 src/LYList.c:258
+msgid "unknown field or link"
+msgstr "onbekend veld of link"
+
+#: src/GridText.c:5749
+msgid "text entry field"
+msgstr "tekst invoerveld"
+
+#: src/GridText.c:5752
+msgid "password entry field"
+msgstr "wachtwoord invoerveld"
+
+#: src/GridText.c:5755
+msgid "checkbox"
+msgstr "aanvinkvakje"
+
+#: src/GridText.c:5758
+msgid "radio button"
+msgstr "drukknop"
+
+#: src/GridText.c:5761
+msgid "submit button"
+msgstr "verzendknop"
+
+#: src/GridText.c:5764
+msgid "reset button"
+msgstr "herstelknop"
+
+#: src/GridText.c:5767
+msgid "popup menu"
+msgstr "popup menu"
+
+#: src/GridText.c:5770
+msgid "hidden form field"
+msgstr "verborgen form veld"
+
+#: src/GridText.c:5773
+msgid "text entry area"
+msgstr "tekst invoergebied"
+
+#: src/GridText.c:5776
+msgid "range entry field"
+msgstr "bereik invoerveld"
+
+#: src/GridText.c:5779
+msgid "file entry field"
+msgstr "bestandsnaam invoerveld"
+
+#: src/GridText.c:5782
+msgid "text-submit field"
+msgstr "tekst-verzendveld"
+
+#: src/GridText.c:5785
+msgid "image-submit button"
+msgstr "afbeelding-verzendknop"
+
+#: src/GridText.c:5788
+msgid "keygen field"
+msgstr "sleutelaanmaak veld"
+
+#: src/GridText.c:5791
+msgid "unknown form field"
+msgstr "onbekend formulier veld"
+
+#. We can't open the file, what do we do?
+#: src/GridText.c:10348
+#, fuzzy
+msgid "Can't open file for uploading"
+msgstr "Kan bestand niet openen om te lezen."
+
+#. We got an error reading the file, what do we do?
+#: src/GridText.c:10359
+msgid "Short read from file, problem?"
+msgstr ""
+
+#: src/GridText.c:10721
+#, c-format
+msgid "Submitting %s"
+msgstr "Bezig met verzenden van %s"
+
+#. ugliness has happened; inform user and do the best we can
+#: src/GridText.c:11887
+msgid "Hang Detect: TextAnchor struct corrupted - suggest aborting!"
+msgstr ""
+
+#. don't show previous state
+#: src/GridText.c:12092
+msgid "Wrap lines to fit displayed area?"
+msgstr "Regels omvouwen zodat alles zichtbaar is?"
+
+#: src/GridText.c:12144
+msgid "Very long lines have been wrapped!"
+msgstr "Erg lange regels zijn omgevouwen!"
+
+#: src/GridText.c:12591
+msgid "Very long lines have been truncated!"
+msgstr "Erg lange regels zijn afgekapt!"
+
+#: src/HTAlert.c:155 src/LYShowInfo.c:318
+msgid "bytes"
+msgstr "bytes"
+
+#: src/HTAlert.c:156
+msgid "KB"
+msgstr "KB"
+
+#: src/HTAlert.c:255
+#, c-format
+msgid "Read %s of %s of data"
+msgstr "%s van %s aan gegevens gelezen"
+
+#: src/HTAlert.c:257
+#, c-format
+msgid "Read %s of data"
+msgstr "%s aan gegevens gelezen"
+
+#: src/HTAlert.c:262
+#, c-format
+msgid ", %s/sec"
+msgstr ", %s/s"
+
+#: src/HTAlert.c:269
+#, c-format
+msgid " (stalled for %ld sec)"
+msgstr " (%ld sec. vastgelopen)"
+
+#: src/HTAlert.c:271
+#, c-format
+msgid ", ETA %ld sec"
+msgstr ", geschatte duur: %ld sec."
+
+#: src/HTAlert.c:277
+msgid " (Press 'z' to abort)"
+msgstr " (Druk op 'z' om te stoppen)"
+
+#. Meta-note: don't move the following note from its place right
+#. in front of the first gettext(). As it is now, it should
+#. automatically appear in generated lynx.pot files. - kw
+#.
+#. NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+#. * will take the first byte of the translation as a positive response
+#. * to Yes/No questions. If you provide a translation for "no", lynx
+#. * will take the first byte of the translation as a negative response
+#. * to Yes/No questions. For both, lynx will also try to show the
+#. * first byte in the prompt as a character, instead of (y) or (n),
+#. * respectively. This will not work right for multibyte charsets!
+#. * Don't translate "yes" and "no" for CJK character sets (or translate
+#. * them to "yes" and "no"). For a translation using UTF-8, don't
+#. * translate if the translation would begin with anything but a 7-bit
+#. * (US_ASCII) character. That also means do not translate if the
+#. * translation would begin with anything but a 7-bit character, if
+#. * you use a single-byte character encoding (a charset like ISO-8859-n)
+#. * but anticipate that the message catalog may be used re-encoded in
+#. * UTF-8 form.
+#. * For translations using other character sets, you may also wish to
+#. * leave "yes" and "no" untranslated, if using (y) and (n) is the
+#. * preferred behavior.
+#. * Lynx will also accept y Y n N as responses unless there is a conflict
+#. * with the first letter of the "yes" or "no" translation.
+#.
+#: src/HTAlert.c:334
+msgid "yes"
+msgstr "ja"
+
+#: src/HTAlert.c:335
+msgid "no"
+msgstr "nee"
+
+#: src/HTML.c:6342
+msgid "Description:"
+msgstr "Omschrijving:"
+
+#: src/HTML.c:6347
+msgid "(none)"
+msgstr "(geen)"
+
+#: src/HTML.c:6351
+msgid "Filepath:"
+msgstr "Bestandspad:"
+
+#: src/HTML.c:6356
+msgid "(unknown)"
+msgstr "(onbekend)"
+
+#: src/HTML.c:7804
+msgid "Document has only hidden links. Use the 'l'ist command."
+msgstr "Document heeft slechts verborgen links. Gebruik het 'l'ijst commando."
+
+# Source?
+#: src/HTML.c:8328
+msgid "Source cache error - disk full?"
+msgstr "Cache fout - schijf vol?"
+
+#: src/HTML.c:8341
+msgid "Source cache error - not enough memory!"
+msgstr "Cache fout - niet genoeg geheugen!"
+
+#: src/LYBookmark.c:166
+msgid ""
+" This file is an HTML representation of the X Mosaic hotlist file.\n"
+" Outdated or invalid links may be removed by using the\n"
+" remove bookmark command, it is usually the 'R' key but may have\n"
+" been remapped by you or your system administrator."
+msgstr ""
+" Dit bestand is een HTML representatie van het 'X Mosaic hotlist'\n"
+" bestand. Verlopen of foutieve links kunnen verwijderd worden met\n"
+" het 'verwijder boekenlegger', welke doorgaans gekoppeld is aan\n"
+" de 'R' toets, maar uw systeembeheerder heeft dit wellicht gewijzigd."
+
+#: src/LYBookmark.c:382
+msgid ""
+" You can delete links by the 'R' key<br>\n"
+"<ol>\n"
+msgstr ""
+" U kunt links verwijderen met de 'R' toets<br>\n"
+"<ol>\n"
+
+#: src/LYBookmark.c:385
+msgid ""
+" You can delete links using the remove bookmark command. It is usually\n"
+" the 'R' key but may have been remapped by you or your system\n"
+" administrator."
+msgstr ""
+" U kunt links verwijderen met het commando 'verwijder boekenlegger'.\n"
+" Dit is doorgaans de 'R' toets, maar uw systeembeheerder kan dit\n"
+" gewijzigd hebben."
+
+#: src/LYBookmark.c:389
+msgid ""
+" This file also may be edited with a standard text editor to delete\n"
+" outdated or invalid links, or to change their order."
+msgstr ""
+" Dit bestand kan ook met een doorsnee tekst-editor worden gewijzigd om\n"
+" verlopen of foutieve links te wissen, of om de volgorde aan te passen."
+
+#: src/LYBookmark.c:392
+msgid ""
+"Note: if you edit this file manually\n"
+" you should not change the format within the lines\n"
+" or add other HTML markup.\n"
+" Make sure any bookmark link is saved as a single line."
+msgstr ""
+"N.B.: als u dit bestand handmatig hebt aangepast\n"
+" moet u niet de formattering binnen de regels aanpassen\n"
+" of andere HTML opmaak toevoegen.\n"
+" Boekenlegger-links dienen als één regel te worden opgeslagen."
+
+#: src/LYBookmark.c:683
+#, c-format
+msgid "File may be recoverable from %s during this session"
+msgstr "Het bestand is gedurende deze sessie wellicht terug te halen uit %s"
+
+#.
+#. * Neither the path as given nor any components examined by
+#. * backing up were stat()able. - kw
+#.
+#: src/LYCgi.c:232
+msgid "Unable to access cgi script"
+msgstr "Geen toegang tot cgi script"
+
+#: src/LYCgi.c:651 src/LYCgi.c:654
+msgid "Good Advice"
+msgstr "Goede Raad"
+
+#: src/LYCgi.c:657
+msgid "An excellent http server for VMS is available via"
+msgstr "Een uitstekende http server voor VMS is bereikbaar via"
+
+#: src/LYCgi.c:664
+msgid "this link"
+msgstr "deze link"
+
+#: src/LYCgi.c:668
+msgid "It provides state of the art CGI script support.\n"
+msgstr "Het biedt voortreffelijke CGI script ondersteuning.\n"
+
+#: src/LYClean.c:108
+msgid "Exiting via interrupt:"
+msgstr "Beëindiging via interrupt:"
+
+#: src/LYCookie.c:2659
+msgid "(from a previous session)"
+msgstr "(van een eerdere sessie)"
+
+#: src/LYCookie.c:2719
+msgid "Maximum Gobble Date:"
+msgstr "Uiterste Houdbaarheidsdatum:"
+
+#: src/LYCookie.c:2764
+msgid "Internal"
+msgstr "Intern"
+
+#: src/LYCookie.c:2765
+msgid "cookie_domain_flag_set error, aborting program"
+msgstr "cookie_domain_flag_set fout, programma wordt afgebroken"
+
+#: src/LYCurses.c:936
+msgid "Terminal initialisation failed - unknown terminal type?"
+msgstr "Terminal initialisatie mislukt - onbekend terminal type?"
+
+#: src/LYCurses.c:1328
+msgid "Terminal ="
+msgstr "Terminal ="
+
+#: src/LYCurses.c:1332
+msgid "You must use a vt100, 200, etc. terminal with this program."
+msgstr "U mout een vt100, 200, enz. terminal gebruiken met dit programma."
+
+#: src/LYCurses.c:1384
+msgid "Your Terminal type is unknown!"
+msgstr "Uw terminal type is onbekend!"
+
+#: src/LYCurses.c:1385
+msgid "Enter a terminal type:"
+msgstr "Voer een terminal type in:"
+
+#: src/LYCurses.c:1398
+msgid "TERMINAL TYPE IS SET TO"
+msgstr "TERMINAL TYPE IS GEZET OP"
+
+#: src/LYCurses.c:1749
+#, c-format
+msgid ""
+"\n"
+"A Fatal error has occurred in %s Ver. %s\n"
+msgstr ""
+"\n"
+"Een fatale fout is opgetreden in %s Ver. %s\n"
+
+#: src/LYCurses.c:1751
+msgid ""
+"\n"
+"Please notify your system administrator to confirm a bug, and if\n"
+"confirmed, to notify the lynx-dev list. Bug reports should have concise\n"
+"descriptions of the command and/or URL which causes the problem, the\n"
+"operating system name with version number, the TCPIP implementation, the\n"
+"TRACEBACK if it can be captured, and any other relevant information.\n"
+msgstr ""
+"\n"
+"Breng uw systeembeheerder op de hoogte om deze programmeerfout te\n"
+"bevestigen, en indien dit het geval is, de lynx-dev mailinglist hiervan\n"
+"op de hoogte te stellen. Bug reports moeten nauwgezette omschrijvingen\n"
+"van het commando en/of de URL die het probleem veroorzaakt hebben bevatten,\n"
+"alsmede de naam en het versienummer van het besturingssysteem, de TCP/IP\n"
+"implementatie, de TRACEBACK, indien deze gevangen kan worden, en elke\n"
+"andere relevante informatie.\n"
+
+#: src/LYEdit.c:264
+msgid "Editor killed by signal"
+msgstr "Editor gedood door signaal"
+
+#: src/LYEdit.c:266
+#, c-format
+msgid "Editor returned with error status, %s"
+msgstr "Editor gaf een foutstatus terug, %s"
+
+#: src/LYEdit.c:267
+msgid "reason unknown."
+msgstr "reden onbekend."
+
+#: src/LYDownload.c:520
+msgid "Downloaded link:"
+msgstr "Gedownloade link:"
+
+#: src/LYDownload.c:525
+msgid "Suggested file name:"
+msgstr "Voorgestelde bestandsnaam:"
+
+#: src/LYDownload.c:530
+msgid "Standard download options:"
+msgstr "Standaard download mogelijkheden:"
+
+#: src/LYDownload.c:531
+msgid "Download options:"
+msgstr "Download mogelijkheden:"
+
+#: src/LYDownload.c:545
+msgid "Save to disk"
+msgstr "Opslaan op schijf"
+
+#: src/LYDownload.c:547
+msgid "Save to disk disabled."
+msgstr "Opslaan op schijf uitgezet."
+
+#: src/LYDownload.c:551 src/LYPrint.c:1338
+msgid "Local additions:"
+msgstr "Lokale toevoegingen:"
+
+#: src/LYDownload.c:560 src/LYUpload.c:224
+msgid "No Name Given"
+msgstr "Geen naam opgegeven"
+
+#: src/LYHistory.c:633
+msgid "You selected:"
+msgstr "U selecteerde:"
+
+#: src/LYHistory.c:657 src/LYHistory.c:905
+msgid "(no address)"
+msgstr "(geen adres)"
+
+#: src/LYHistory.c:661
+msgid " (internal)"
+msgstr "(intern)"
+
+#: src/LYHistory.c:663
+msgid " (was internal)"
+msgstr "(was intern)"
+
+#: src/LYHistory.c:761
+msgid " (From History)"
+msgstr "(Uit Historie)"
+
+#: src/LYHistory.c:825
+msgid "You visited (POSTs, bookmark, menu and list files excluded):"
+msgstr "U bezocht (m.u.v. POSTs, boekenlegger, menu en lijstbestanden):"
+
+#: src/LYHistory.c:1124
+msgid "(No messages yet)"
+msgstr "(Nog geen vermeldingen)"
+
+#: src/LYLeaks.c:78
+msgid "Invalid pointer detected."
+msgstr "Foutieve verwijzing gevonden."
+
+#: src/LYLeaks.c:80 src/LYLeaks.c:117
+msgid "Pointer:"
+msgstr "Verwijzing:"
+
+#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:136
+msgid "FileName:"
+msgstr "BestandsNaam:"
+
+#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:139 src/LYLeaks.c:150
+msgid "LineCount:"
+msgstr "RegelAantal:"
+
+#: src/LYLeaks.c:115
+msgid "Memory leak detected."
+msgstr "Geheugenlek ontdekt."
+
+#: src/LYLeaks.c:120
+msgid "Contains:"
+msgstr "Bevat:"
+
+#: src/LYLeaks.c:133
+msgid "ByteSize:"
+msgstr "ByteGrootte:"
+
+#: src/LYLeaks.c:147
+msgid "realloced:"
+msgstr "Opnieuw Gereserveerd:"
+
+#: src/LYLeaks.c:170
+msgid "Total memory leakage this run:"
+msgstr "Totale geheugen lekkage tijdens deze uitvoering:"
+
+#: src/LYList.c:91
+msgid "References in "
+msgstr "Referenties in "
+
+#: src/LYList.c:92
+msgid "this document:"
+msgstr "dit document:"
+
+#: src/LYList.c:98
+msgid "Visible links:"
+msgstr "Zichtbare links:"
+
+#: src/LYList.c:199 src/LYList.c:319
+msgid "Hidden links:"
+msgstr "Verborgen links:"
+
+#: src/LYList.c:267
+msgid "References"
+msgstr "Referenties"
+
+#: src/LYList.c:269
+msgid "Visible links"
+msgstr "Zichtbare links"
+
+#: src/LYLocal.c:267
+#, c-format
+msgid "Unable to get status of '%s'."
+msgstr "Kan status van '%s' niet opvragen."
+
+#: src/LYLocal.c:301
+msgid "The selected item is not a file or a directory! Request ignored."
+msgstr "Het geselecteerde item is geen bestand of map! Verzoek genegeerd."
+
+#: src/LYLocal.c:383
+#, c-format
+msgid "Unable to %s due to system error!"
+msgstr "Kan niet %s vanwege systeemfout!"
+
+#. error return
+#: src/LYLocal.c:415
+#, c-format
+msgid "Probable failure to %s due to system error!"
+msgstr "Mogelijke fout van %s vanwege systeemfout!"
+
+#: src/LYLocal.c:453
+#, c-format
+msgid "move %s to %s"
+msgstr "verplaats %s naar %s"
+
+#: src/LYLocal.c:475
+msgid "There is already a directory with that name! Request ignored."
+msgstr "Er is al een map met die naam! Verzoek genegeerd."
+
+#: src/LYLocal.c:477
+msgid "There is already a file with that name! Request ignored."
+msgstr "Er is al een bestand met die naam! Verzoek genegeerd."
+
+#: src/LYLocal.c:479
+msgid "The specified name is already in use! Request ignored."
+msgstr "De opgegeven naam is al in gebruik! Verzoek genegeerd."
+
+#: src/LYLocal.c:490
+msgid "Destination has different owner! Request denied."
+msgstr "Bestemming heeft een andere eigenaar! Verzoek genegeerd."
+
+#: src/LYLocal.c:493
+msgid "Destination is not a valid directory! Request denied."
+msgstr "Bestemming is geen geldige map! Verzoek genegeerd."
+
+#: src/LYLocal.c:516
+msgid "Remove all tagged files and directories?"
+msgstr "Verwijder alle aangevinkte bestand en mappen?"
+
+#: src/LYLocal.c:537
+#, c-format
+msgid "remove %s"
+msgstr "verwijder %s"
+
+#: src/LYLocal.c:580
+msgid "Enter new location for tagged items: "
+msgstr "Voer een nieuwe bestemming in voor aangevinkte items: "
+
+#: src/LYLocal.c:649
+msgid "Path too long"
+msgstr "Pad te lang"
+
+#: src/LYLocal.c:680
+msgid "Source and destination are the same location - request ignored!"
+msgstr "Bron en bestemming zijn dezelfde locatie - verzoek genegeerd!"
+
+#: src/LYLocal.c:738
+msgid "Enter new name for directory: "
+msgstr "Voer een nieuwe naam in voor map: "
+
+#: src/LYLocal.c:740
+msgid "Enter new name for file: "
+msgstr "Voer een nieuwe naam in voor bestand: "
+
+#: src/LYLocal.c:751
+msgid "Illegal character (path-separator) found! Request ignored."
+msgstr "Ongeldig teken (pad-separatie-teken) gevonden! Verzoek genegeerd."
+
+#: src/LYLocal.c:800
+msgid "Enter new location for directory: "
+msgstr "Voer een nieuwe locatie in voor map: "
+
+#: src/LYLocal.c:802
+msgid "Enter new location for file: "
+msgstr "Voer een nieuwe locatie voor bestand in: "
+
+#: src/LYLocal.c:827
+msgid "Unexpected failure - unable to find trailing path separator"
+msgstr "Onverwachte mislukking - kan achterkomend pad-separatie-teken niet vinden"
+
+#: src/LYLocal.c:847
+msgid "Source and destination are the same location! Request ignored!"
+msgstr "Bron en bestemming zijn dezelfde locatie! Verzoek genegeerd!"
+
+#: src/LYLocal.c:894
+msgid "Modify name, location, or permission (n, l, or p): "
+msgstr "Wijzig N)aam, L)ocatie, of P)ermissies (n,l, of p): "
+
+#: src/LYLocal.c:896
+msgid "Modify name or location (n or l): "
+msgstr "Wijzig N)aam of L)ocatie (n of l): "
+
+#.
+#. * Code for changing ownership needed here.
+#.
+#: src/LYLocal.c:925
+msgid "This feature not yet implemented!"
+msgstr "Deze optie is nog niet geïmplementeerd!"
+
+#: src/LYLocal.c:943
+msgid "Enter name of file to create: "
+msgstr "Voer een bestandsnaam in om aan te maken: "
+
+#: src/LYLocal.c:951 src/LYLocal.c:999
+msgid "Illegal redirection \"//\" found! Request ignored."
+msgstr "Foutieve verwijzing \"/\"gevonden! Verzoek genegeerd."
+
+#: src/LYLocal.c:966
+#, c-format
+msgid "create %s"
+msgstr "maak %s aan"
+
+#: src/LYLocal.c:991
+msgid "Enter name for new directory: "
+msgstr "Voer een naam in voor een nieuwe map: "
+
+#: src/LYLocal.c:1042
+msgid "Create file or directory (f or d): "
+msgstr "Maak F)-bestand of D)-map (f of d): "
+
+#: src/LYLocal.c:1083
+#, c-format
+msgid "Remove '%s' and all of its contents?"
+msgstr "Verwijder '%s' en haar volledige inhoud?"
+
+#: src/LYLocal.c:1086
+msgid "Remove directory and all of its contents?"
+msgstr "Verwijder map en haar volledige inhoud?"
+
+#: src/LYLocal.c:1090
+#, c-format
+msgid "Remove file '%s'?"
+msgstr "Verwijder bestand '%s'?"
+
+#: src/LYLocal.c:1092
+msgid "Remove file?"
+msgstr "Verwijder bestand?"
+
+#: src/LYLocal.c:1097
+#, c-format
+msgid "Remove symbolic link '%s'?"
+msgstr "Verwijder symbolische koppeling '%s'?"
+
+#: src/LYLocal.c:1099
+msgid "Remove symbolic link?"
+msgstr "Verwijder symbolische koppeling?"
+
+#: src/LYLocal.c:1190
+msgid "Sorry, don't know how to permit non-UNIX files yet."
+msgstr "Sorry, weet nog niet hoe met permissies van niet-UNIX bestanden om te gaan."
+
+#: src/LYLocal.c:1220
+msgid "Unable to open permit options file"
+msgstr "Kan bestand met permissie-opties niet openen"
+
+#: src/LYLocal.c:1247
+msgid "Specify permissions below:"
+msgstr "Specificeer permissies hieronder:"
+
+#: src/LYLocal.c:1248 src/LYShowInfo.c:196
+msgid "Owner:"
+msgstr "Eigenaar:"
+
+#: src/LYLocal.c:1264
+msgid "Group"
+msgstr "Groep"
+
+#: src/LYLocal.c:1280
+msgid "Others:"
+msgstr "Anderen:"
+
+#: src/LYLocal.c:1298
+msgid "form to permit"
+msgstr "formulier voor permissies"
+
+#: src/LYLocal.c:1396
+msgid "Invalid mode format."
+msgstr "Onjuist formaat voor modus."
+
+#: src/LYLocal.c:1400
+msgid "Invalid syntax format."
+msgstr "Onjuiste syntaxis."
+
+#: src/LYLocal.c:1575
+msgid "NULL URL pointer"
+msgstr "NULL URL verwijzing"
+
+#: src/LYLocal.c:1670
+msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
+msgstr "Let op! UUDecoded bestand blijft bestaan in de map waarin u Lynx startte."
+
+#: src/LYLocal.c:1782
+#, c-format
+msgid "Executing %s "
+msgstr "Bezig met uitvoeren van %s "
+
+#: src/LYLocal.c:1785
+msgid "Executing system command. This might take a while."
+msgstr "Bezig met uitvoeren van systeemcommando. Dit kan even duren."
+
+#: src/LYLocal.c:1831
+msgid "Unable to open file management menu file."
+msgstr "Kan bestand met bestandsbeheer-menu niet openen."
+
+#: src/LYLocal.c:1862
+msgid "Current directory:"
+msgstr "Huidige map:"
+
+#: src/LYLocal.c:1865 src/LYLocal.c:1883
+msgid "Current selection:"
+msgstr "Huidige selectie:"
+
+#: src/LYLocal.c:1869
+msgid "Nothing currently selected."
+msgstr "Er is momenteel niets geselecteerd."
+
+#: src/LYLocal.c:1884
+msgid "tagged item:"
+msgstr "aangevinkt item:"
+
+#: src/LYLocal.c:1884
+msgid "tagged items:"
+msgstr "aangevinkte items:"
+
+#: src/LYLocal.c:1983 src/LYLocal.c:1994
+msgid "Illegal filename; request ignored."
+msgstr "Onjuiste bestandsnaam; verzoek genegeerd."
+
+#: src/LYLocal.c:2137
+msgid "The selected item is not a directory! Request ignored."
+msgstr "Het geselecteerd item is geen map! Verzoek genegeerd."
+
+#. directory not writable
+#: src/LYLocal.c:2141
+msgid "Install in the selected directory not permitted."
+msgstr "Installatie in de geselecteerde map is niet toegestaan."
+
+#: src/LYLocal.c:2146
+msgid "Just a moment, ..."
+msgstr "Een ogenblik gedlud, ..."
+
+#: src/LYLocal.c:2163
+msgid "Error buiding install args"
+msgstr "Fout bij opbouwen van installatie-argumenten"
+
+#: src/LYLocal.c:2178 src/LYLocal.c:2210
+#, c-format
+msgid "Source and target are the same: %s"
+msgstr "Bron en bestemming zijn gelijk: %s"
+
+#: src/LYLocal.c:2188 src/LYLocal.c:2220
+#, c-format
+msgid "Already in target directory: %s"
+msgstr "Al in map van bestemmings: %s"
+
+#: src/LYLocal.c:2238
+msgid "Installation complete"
+msgstr "Installatie voltooid"
+
+#: src/LYLocal.c:2427
+msgid "Temporary URL or list would be too long."
+msgstr "Tijdelijke URL of lijst zou te lang zijn."
+
+#: src/LYMail.c:503
+msgid "Sending"
+msgstr "Bezig met zenden"
+
+#: src/LYMail.c:989
+#, c-format
+msgid "The link %s :?: %s \n"
+msgstr "De link %s :?: %s\n"
+
+#: src/LYMail.c:991
+#, c-format
+msgid "called \"%s\"\n"
+msgstr "genaamd \"%s\"\n"
+
+#: src/LYMail.c:992
+#, c-format
+msgid "in the file \"%s\" called \"%s\"\n"
+msgstr "in het bestand \"%s\" genaamd \"%s\"\n"
+
+#: src/LYMail.c:993
+msgid "was requested but was not available."
+msgstr "is opgevraagd maar niet beschikbaar."
+
+#: src/LYMail.c:994
+msgid "Thought you might want to know."
+msgstr "Leek me dat u dat wilde weten."
+
+#: src/LYMail.c:996
+msgid "This message was automatically generated by"
+msgstr "Dit bericht is automatisch gegenereerd door"
+
+#: src/LYMain.c:897
+msgid "No Winsock found, sorry."
+msgstr "Geen Winsock gevonden, sorry."
+
+#: src/LYMain.c:1103
+msgid "You MUST define a valid TMP or TEMP area!\n"
+msgstr "U MOET een geldig TMP of TEMP gebied opgeven!\n"
+
+#: src/LYMain.c:1156 src/LYMainLoop.c:5117
+msgid "No such directory"
+msgstr " map"
+
+#: src/LYMain.c:1378
+#, c-format
+msgid ""
+"\n"
+"Configuration file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Configuratiebestand %s is niet beschikbaar.\n"
+"\n"
+
+#: src/LYMain.c:1388
+msgid ""
+"\n"
+"Lynx character sets not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx karaktersets zijn niet opgegeven.\n"
+"\n"
+
+#: src/LYMain.c:1417
+msgid ""
+"\n"
+"Lynx edit map not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx edit-kaart niet opgegeven.\n"
+"\n"
+
+#: src/LYMain.c:1446
+#, c-format
+msgid ""
+"\n"
+"Lynx file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynx bestand %s is niet beschikbaar.\n"
+"\n"
+
+#: src/LYMain.c:1704
+msgid "Warning:"
+msgstr "Let op:"
+
+#: src/LYMain.c:2247
+msgid "persistent cookies state will be changed in next session only."
+msgstr "Voortbestaande stand van koekjes wordt pas in volgende sessie gewijzigd."
+
+#: src/LYMain.c:2477 src/LYMain.c:2525
+#, c-format
+msgid "Lynx: ignoring unrecognized charset=%s\n"
+msgstr "Lynx: ik negeer onbekende karakterset=%s\n"
+
+#: src/LYMain.c:3047
+#, c-format
+msgid "%s Version %s (%s)\n"
+msgstr "%s Versie %s (%s)\n"
+
+#: src/LYMain.c:3072
+#, c-format
+msgid "Built on %s %s %s\n"
+msgstr "Gebouwd op %s %s %s\n"
+
+#: src/LYMain.c:3077
+msgid "Copyrights held by the University of Kansas, CERN, and other contributors.\n"
+msgstr "Copyrights in handen van `the University of Kansas', CERN, en andere medewerkers.\n"
+
+#: src/LYMain.c:3079
+msgid "Distributed under the GNU General Public License.\n"
+msgstr "Gedistribueerd onder het GNU General Public License.\n"
+
+#: src/LYMain.c:3081
+msgid ""
+"See http://lynx.browser.org/ and the online help for more information.\n"
+"\n"
+msgstr ""
+"Zie http://lynx.browser.org/ en de online help voor meer informatie.\n"
+"\n"
+
+#: src/LYMain.c:3800
+#, c-format
+msgid "USAGE: %s [options] [file]\n"
+msgstr "GEBRUIK: %s [opties] [bestand]\n"
+
+#: src/LYMain.c:3801
+msgid "Options are:\n"
+msgstr "Opties zijn:\n"
+
+#: src/LYMain.c:4060
+#, c-format
+msgid "%s: Invalid Option: %s\n"
+msgstr "%s: Ongeldige Optie: %s\n"
+
+#: src/LYMainLoop.c:512
+#, c-format
+msgid "Internal error: Invalid mouse link %d!"
+msgstr "Interne fout: Ongeldige muis link %d!"
+
+#.
+#. * Make a name for this new URL.
+#.
+#: src/LYMainLoop.c:625 src/LYMainLoop.c:5139
+msgid "A URL specified by the user"
+msgstr "Een door de gebruiker opgegeven URL"
+
+#: src/LYMainLoop.c:1114
+msgid "Enctype multipart/form-data not yet supported! Cannot submit."
+msgstr "Enctype meerdelig/form-data nog niet ondersteund! Kan niet verzenden."
+
+#.
+#. * Make a name for this help file.
+#.
+#: src/LYMainLoop.c:3097
+msgid "Help Screen"
+msgstr "Help Scherm"
+
+#: src/LYMainLoop.c:3231
+msgid "System Index"
+msgstr "Systeem Index"
+
+#: src/LYMainLoop.c:3611 src/LYMainLoop.c:5347
+msgid "Entry into main screen"
+msgstr "Ingang naar begin scherm"
+
+#: src/LYMainLoop.c:3897
+msgid "No next document present"
+msgstr ""
+
+#: src/LYMainLoop.c:4206
+msgid "charset for this document specified explicitly, sorry..."
+msgstr "de tekenverzameling voor dit document is expliciet opgegeven, sorry..."
+
+#: src/LYMainLoop.c:5093
+msgid "cd to:"
+msgstr " aan "
+
+#: src/LYMainLoop.c:5120
+msgid "A component of path is not a directory"
+msgstr ""
+
+#: src/LYMainLoop.c:5123
+msgid "failed to change directory"
+msgstr "Geen toegang tot map."
+
+#: src/LYMainLoop.c:6291
+msgid "Reparsing document under current settings..."
+msgstr "Document wordt opnieuw ontleed met huidige instellingen..."
+
+#: src/LYMainLoop.c:6579 src/LYMainLoop.c:6583
+#, c-format
+msgid "Fatal error - could not open output file %s\n"
+msgstr "Fatale fout - kan uitvoerbestand %s niet openen\n"
+
+#: src/LYMainLoop.c:7719 src/LYMainLoop.c:7892
+msgid "-index-"
+msgstr "-index-"
+
+#: src/LYMainLoop.c:7829
+msgid "lynx: Can't access startfile"
+msgstr "lynx: Geen toegang tot startbestand"
+
+#: src/LYMainLoop.c:7842
+msgid "lynx: Start file could not be found or is not text/html or text/plain"
+msgstr "lynx: Beginbestand kan niet gevonden worden of is geen tekst/html of tekst/plain"
+
+#: src/LYMainLoop.c:7843
+msgid " Exiting..."
+msgstr " Bezig met stoppen..."
+
+#: src/LYMainLoop.c:7886
+msgid "-more-"
+msgstr "-meer-"
+
+#. Enable scrolling.
+#: src/LYNews.c:203
+msgid "You will be posting to:"
+msgstr "U zult posten naar:"
+
+#.
+#. * Get the mail address for the From header,
+#. * offering personal_mail_address as default.
+#.
+#: src/LYNews.c:212
+msgid ""
+"\n"
+"\n"
+" Please provide your mail address for the From: header\n"
+msgstr ""
+"\n"
+"\n"
+" Geef uw email adres van de `From:' kop\n"
+
+#.
+#. * Get the Subject header, offering the current
+#. * document's title as the default if this is a
+#. * followup rather than a new post. - FM
+#.
+#: src/LYNews.c:230
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Subject: header\n"
+msgstr ""
+"\n"
+"\n"
+" Geef of wijzig de `Subject:' (onderwerp) kop\n"
+
+#: src/LYNews.c:322
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Organization: header\n"
+msgstr ""
+"\n"
+"\n"
+" Geef of wijzig de `Organization:' (organisatie) kop\n"
+
+#.
+#. * Use the built in line editior.
+#.
+#: src/LYNews.c:379
+msgid ""
+"\n"
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+"\n"
+" Schrijf hieronder uw bericht."
+
+#: src/LYNews.c:425
+msgid "Message has no original text!"
+msgstr "Bericht heeft geen oorspronkelijke tekst!"
+
+#: src/LYOptions.c:743
+msgid "review/edit B)ookmarks files"
+msgstr "herzien/wijzig B)ladwijzer bestanden"
+
+#: src/LYOptions.c:745
+msgid "B)ookmark file: "
+msgstr "B)ladwijzer bestand: "
+
+#: src/LYOptions.c:2507 src/LYOptions.c:2531
+#, c-format
+msgid "Use %s to invoke the Options menu!"
+msgstr "Gebruik %s om naar het Opties-menu te gaan!"
+
+#: src/LYOptions.c:3208
+msgid "General Preferences"
+msgstr "Persoonlijke voorkeuren"
+
+#. ***************************************************************
+#. User Mode: SELECT
+#: src/LYOptions.c:3212
+msgid "User mode"
+msgstr "Gebruiker-modus"
+
+#. Editor: INPUT
+#: src/LYOptions.c:3218
+msgid "Editor"
+msgstr "Editor"
+
+#. Search Type: SELECT
+#: src/LYOptions.c:3223
+msgid "Type of Search"
+msgstr ""
+
+#. Cookies: SELECT
+#: src/LYOptions.c:3229
+msgid "Cookies"
+msgstr "Koekjes"
+
+#: src/LYOptions.c:3243
+msgid "Keyboard Input"
+msgstr ""
+
+#. ***************************************************************
+#. Keypad Mode: SELECT
+#: src/LYOptions.c:3247
+msgid "Keypad mode"
+msgstr "Gedrag van numeriek eiland"
+
+#. Emacs keys: ON/OFF
+#: src/LYOptions.c:3253
+msgid "Emacs keys"
+msgstr "Emacs toetsen"
+
+#. VI Keys: ON/OFF
+#: src/LYOptions.c:3259
+msgid "VI keys"
+msgstr "VI toetsen"
+
+#. Line edit style: SELECT
+#. well, at least 2 line edit styles available
+#: src/LYOptions.c:3266
+msgid "Line edit style"
+msgstr ""
+
+#. Keyboard layout: SELECT
+#: src/LYOptions.c:3278
+msgid "Keyboard layout"
+msgstr ""
+
+#.
+#. * Display and Character Set
+#.
+#: src/LYOptions.c:3291
+msgid "Display and Character Set"
+msgstr "Karakterset op beeldscherm"
+
+#. ***************************************************************
+#. Display Character Set: SELECT
+#: src/LYOptions.c:3295
+msgid "Display character set"
+msgstr "Karakterset op beeldscherm"
+
+#: src/LYOptions.c:3324
+msgid "Assumed document character set"
+msgstr "Veronderstelde karakterset"
+
+#.
+#. * Since CJK people hardly mixed with other world
+#. * we split the header to make it more readable:
+#. * "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
+#.
+#: src/LYOptions.c:3344
+msgid "CJK mode"
+msgstr "CJK modus"
+
+#: src/LYOptions.c:3346
+msgid "Raw 8-bit"
+msgstr "Kale 8-bit"
+
+#. X Display: INPUT
+#: src/LYOptions.c:3354
+msgid "X Display"
+msgstr "X Display"
+
+#.
+#. * Document Appearance
+#.
+#: src/LYOptions.c:3360
+msgid "Document Appearance"
+msgstr ""
+
+#: src/LYOptions.c:3366
+msgid "Show color"
+msgstr "Toon kleur"
+
+#. Show cursor: ON/OFF
+#: src/LYOptions.c:3390
+msgid "Show cursor"
+msgstr "Toon cursor"
+
+#. Select Popups: ON/OFF
+#: src/LYOptions.c:3396
+msgid "Popups for select fields"
+msgstr "Menuutjes voor keuzevelden"
+
+#. HTML error recovery: SELECT
+#: src/LYOptions.c:3403
+msgid "HTML error recovery"
+msgstr "HTML foutcorrectie"
+
+#. Show Images: SELECT
+#: src/LYOptions.c:3410
+msgid "Show images"
+msgstr "Afbeeldingen laten zien als"
+
+#. Verbose Images: ON/OFF
+#: src/LYOptions.c:3424
+msgid "Verbose images"
+msgstr "Naam van afbeeldingen vermelden"
+
+#.
+#. * Headers Transferred to Remote Servers
+#.
+#: src/LYOptions.c:3432
+msgid "Headers Transferred to Remote Servers"
+msgstr "Kopteksten die overgedragen worden naar andere computers"
+
+#. ***************************************************************
+#. Mail Address: INPUT
+#: src/LYOptions.c:3436
+msgid "Personal mail address"
+msgstr "Persoonlijk e-mail adres"
+
+#. Preferred Document Character Set: INPUT
+#: src/LYOptions.c:3441
+msgid "Preferred document character set"
+msgstr "Voorkeur voor karakterset"
+
+#. Preferred Document Language: INPUT
+#: src/LYOptions.c:3446
+msgid "Preferred document language"
+msgstr "Voorkeur voor taal van document"
+
+#: src/LYOptions.c:3452
+msgid "User-Agent header"
+msgstr "User-Agent koptekst"
+
+#.
+#. * Listing and Accessing Files
+#.
+#: src/LYOptions.c:3460
+msgid "Listing and Accessing Files"
+msgstr ""
+
+#. ***************************************************************
+#. FTP sort: SELECT
+#: src/LYOptions.c:3464
+msgid "FTP sort criteria"
+msgstr "sorteercriteria voor FTP"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3471
+msgid "Local directory sort criteria"
+msgstr "Sorteercriteria lokale mappen"
+
+#: src/LYOptions.c:3479
+msgid "Show dot files"
+msgstr "Toon .-bestanden"
+
+#: src/LYOptions.c:3487
+msgid "Execution links"
+msgstr "verwijzingen die programma's starten"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3507
+msgid "Show transfer rate"
+msgstr "Gegevensoverdracht voltooid"
+
+#.
+#. * Special Files and Screens
+#.
+#: src/LYOptions.c:3516
+msgid "Special Files and Screens"
+msgstr ""
+
+#: src/LYOptions.c:3521
+msgid "Multi-bookmarks"
+msgstr "Meervoudige boekenleggers"
+
+#: src/LYOptions.c:3529
+msgid "Review/edit Bookmarks files"
+msgstr "Bekijk/wijzig Boekenlegger bestanden"
+
+#: src/LYOptions.c:3531
+msgid "Goto multi-bookmark menu"
+msgstr "Ga naar multi-boekenlegger menu"
+
+#: src/LYOptions.c:3533
+msgid "Bookmarks file"
+msgstr "Boekenlegger bestand"
+
+#. Visited Pages: SELECT
+#: src/LYOptions.c:3539
+msgid "Visited Pages"
+msgstr "Bezochte Pagina's"
+
+#: src/LYPrint.c:959
+msgid " Print job complete.\n"
+msgstr " Printopdracht voltooid.\n"
+
+#: src/LYPrint.c:1296
+msgid "Document:"
+msgstr "Document:"
+
+#: src/LYPrint.c:1297
+msgid "Number of lines:"
+msgstr "Aantal regels:"
+
+#: src/LYPrint.c:1298
+msgid "Number of pages:"
+msgstr "Aantal pagina's"
+
+#: src/LYPrint.c:1299
+msgid "pages"
+msgstr "pagina's"
+
+#: src/LYPrint.c:1299
+msgid "page"
+msgstr "pagina"
+
+#: src/LYPrint.c:1300
+msgid "(approximately)"
+msgstr "(bij benadering)"
+
+#: src/LYPrint.c:1305
+msgid "Some print functions have been disabled!"
+msgstr "Enkele afdrukinstellingen zijn niet beschikbaar"
+
+#: src/LYPrint.c:1309
+msgid "Standard print options:"
+msgstr "Standaard afdrukinstellingen"
+
+#: src/LYPrint.c:1310
+msgid "Print options:"
+msgstr "Afdrukinstellingen:"
+
+#: src/LYPrint.c:1316
+msgid "Save to a local file"
+msgstr "Opslaan naar een lokaal bestand"
+
+#: src/LYPrint.c:1318
+msgid "Save to disk disabled"
+msgstr "Opslaan naar schijf niet beschikbaar"
+
+#: src/LYPrint.c:1324
+msgid "Mail the file"
+msgstr "Post het bestand"
+
+#: src/LYPrint.c:1330
+msgid "Print to the screen"
+msgstr "Afdrukken naar het scherm"
+
+#: src/LYPrint.c:1334
+msgid "Print out on a printer attached to your vt100 terminal"
+msgstr "Afdrukken naar een printer die verbonden is aan uw vt100 terminal"
+
+#: src/LYReadCFG.c:340
+msgid ""
+"Syntax Error parsing COLOR in configuration file:\n"
+"The line must be of the form:\n"
+"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
+"\n"
+"Here FOREGROUND and BACKGROUND must be one of:\n"
+"The special strings 'nocolor' or 'default', or\n"
+msgstr ""
+"Syntactische fout bij het verwerken van KLEUR in het configuratiebestand:\n"
+"De regel moet in de volgende vorm staan:\n"
+"KLEUR:GEHEEL GETAL:VOORGROND:ACHTERGROND\n"
+"\n"
+"Hier kunnen VOORGROND en ACHTERGROND één van de volgende zijn:\n"
+"De uitzonderingen 'nocolor' of 'default', of\n"
+
+#: src/LYReadCFG.c:353
+msgid "Offending line:"
+msgstr "Regel waar het mis ging:"
+
+#: src/LYReadCFG.c:660
+#, c-format
+msgid "key remapping of %s to %s for %s failed\n"
+msgstr "toetsenbord afbeelding van %s naar %s voor %s mislukt\n"
+
+#: src/LYReadCFG.c:667
+#, c-format
+msgid "key remapping of %s to %s failed\n"
+msgstr "toetsbord-mapping van %s naar %s mislukt\n"
+
+#: src/LYReadCFG.c:688
+#, c-format
+msgid "invalid line-editor selection %s for key %s, selecting all\n"
+msgstr "ongeldige selectie %s voor toets %s; alles wordt geselecteerd\n"
+
+#: src/LYReadCFG.c:715 src/LYReadCFG.c:728
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"
+msgstr "maken van koppeling voor toets %s (0x%x) naar 0x%x voor %s mislukt\n"
+
+#: src/LYReadCFG.c:733
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) for %s failed\n"
+msgstr "maken van koppeling voor toets %s (0x%x) voor %s mislukt\n"
+
+#: src/LYReadCFG.c:838
+#, c-format
+msgid "Lynx: cannot start, CERN rules file %s is not available\n"
+msgstr "Lynx: kan niet starten, CERN reglement bestand %s is niet beschikbaar\n"
+
+#: src/LYReadCFG.c:840
+msgid "(no name)"
+msgstr "(naamloos)"
+
+#: src/LYReadCFG.c:1658
+#, c-format
+msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
+msgstr "Meer dan %d geneste lynx.cfg insluitingen -- misschien een lus?!?\n"
+
+#: src/LYReadCFG.c:1660
+#, c-format
+msgid "Last attempted include was '%s',\n"
+msgstr "De laatste insluiting die geprobeerd is, was '%s',\n"
+
+#: src/LYReadCFG.c:1661
+#, c-format
+msgid "included from '%s'.\n"
+msgstr "ingevoegd vanuit '%s'.\n"
+
+#: src/LYReadCFG.c:2116 src/LYReadCFG.c:2129 src/LYReadCFG.c:2165
+msgid "The following is read from your lynx.cfg file."
+msgstr "Het volgende wordt gelezen uit uw lynx.cfg bestand."
+
+#: src/LYReadCFG.c:2117 src/LYReadCFG.c:2130
+msgid "Please read the distribution"
+msgstr "Lees a.u.b. de meegeleverde versie"
+
+#: src/LYReadCFG.c:2123 src/LYReadCFG.c:2133
+msgid "for more comments."
+msgstr "voor meer opmerkingen."
+
+#: src/LYReadCFG.c:2147
+msgid "RELOAD THE CHANGES"
+msgstr "HERLAAD DE VERANDERINGEN"
+
+#: src/LYReadCFG.c:2156
+msgid "Your primary configuration"
+msgstr "Uw primaire configuratie"
+
+#: src/LYShowInfo.c:129
+msgid "Directory that you are currently viewing"
+msgstr "De map die u op dit moment bekijkt"
+
+#: src/LYShowInfo.c:132
+msgid "Name:"
+msgstr "Naam:"
+
+#: src/LYShowInfo.c:135
+msgid "URL:"
+msgstr "URL:"
+
+#: src/LYShowInfo.c:146
+msgid "Directory that you have currently selected"
+msgstr "Geselecteerde map"
+
+#: src/LYShowInfo.c:149
+msgid "File that you have currently selected"
+msgstr "Geselecteerd bestand"
+
+#: src/LYShowInfo.c:153
+msgid "Symbolic link that you have currently selected"
+msgstr "Geselecteerde symbolische verwijzing"
+
+#: src/LYShowInfo.c:157
+msgid "Item that you have currently selected"
+msgstr "Geselecteerd item"
+
+#: src/LYShowInfo.c:159
+msgid "Full name:"
+msgstr "Volledige naam:"
+
+#: src/LYShowInfo.c:168
+msgid "Unable to follow link"
+msgstr "De verwijzing kan niet vervolgd worden"
+
+#: src/LYShowInfo.c:170
+msgid "Points to file:"
+msgstr "Wijst naar bestand:"
+
+#: src/LYShowInfo.c:175
+msgid "Name of owner:"
+msgstr "Naam van eigenaar"
+
+#: src/LYShowInfo.c:178
+msgid "Group name:"
+msgstr "Groepnaam:"
+
+#: src/LYShowInfo.c:181
+msgid "File size:"
+msgstr "Bestandsgrootte:"
+
+#: src/LYShowInfo.c:187
+msgid "Creation date:"
+msgstr "Aanmaakdatum:"
+
+#: src/LYShowInfo.c:190
+msgid "Last modified:"
+msgstr "Laatst veranderd op:"
+
+#: src/LYShowInfo.c:193
+msgid "Last accessed:"
+msgstr "Laatst bezocht op:"
+
+#: src/LYShowInfo.c:195
+msgid "Access Permissions"
+msgstr "Toegangsrechten"
+
+#: src/LYShowInfo.c:261
+msgid "File that you are currently viewing"
+msgstr "Het bestand dat u op dit moment bekijkt"
+
+#: src/LYShowInfo.c:266 src/LYShowInfo.c:375
+msgid "Linkname:"
+msgstr "Linknaam:"
+
+#: src/LYShowInfo.c:279 src/LYShowInfo.c:291
+msgid "Charset:"
+msgstr "Karakterset:"
+
+#: src/LYShowInfo.c:297
+msgid "Server:"
+msgstr "Server:"
+
+#: src/LYShowInfo.c:300
+msgid "Date:"
+msgstr "Datum:"
+
+#: src/LYShowInfo.c:303
+msgid "Last Mod:"
+msgstr "Laatst veranderd:"
+
+#: src/LYShowInfo.c:309
+msgid "&nbsp;Expires:"
+msgstr "Vervalt op:"
+
+#: src/LYShowInfo.c:313
+msgid "Cache-Control:"
+msgstr "Cache-Besturing:"
+
+#: src/LYShowInfo.c:317
+msgid "Content-Length:"
+msgstr "Lengte inhoud:"
+
+#: src/LYShowInfo.c:322
+msgid "Language:"
+msgstr "Taal:"
+
+#: src/LYShowInfo.c:329
+msgid "Post Data:"
+msgstr "Post Informatie:"
+
+#: src/LYShowInfo.c:331
+msgid "Post Content Type:"
+msgstr "Inhoudstype Post:"
+
+#: src/LYShowInfo.c:340
+msgid "Owner(s):"
+msgstr "Eigenaar:"
+
+#: src/LYShowInfo.c:343
+msgid "size:"
+msgstr "grootte:"
+
+#: src/LYShowInfo.c:343
+msgid "lines"
+msgstr "regels"
+
+#: src/LYShowInfo.c:346
+msgid "mode:"
+msgstr "modus:"
+
+#: src/LYShowInfo.c:348
+msgid "forms mode"
+msgstr "formulier modus"
+
+#: src/LYShowInfo.c:350
+msgid "source"
+msgstr "bron"
+
+#: src/LYShowInfo.c:350
+msgid "normal"
+msgstr "normaal"
+
+#: src/LYShowInfo.c:351
+msgid ", safe"
+msgstr ", veilig"
+
+#: src/LYShowInfo.c:352
+msgid ", via internal link"
+msgstr ", via interne link"
+
+#: src/LYShowInfo.c:358
+msgid ", no-cache"
+msgstr ", geen buffer"
+
+#: src/LYShowInfo.c:360
+msgid ", ISMAP script"
+msgstr ", ISMAP script"
+
+#: src/LYShowInfo.c:362
+msgid ", bookmark file"
+msgstr ", boekenleggerbestand"
+
+#: src/LYShowInfo.c:371
+msgid "Link that you currently have selected"
+msgstr "Link die nu geselecteerd is"
+
+#: src/LYShowInfo.c:384
+msgid "Method:"
+msgstr "Methode:"
+
+#: src/LYShowInfo.c:389
+msgid "Enctype:"
+msgstr "Beveiligingstype:"
+
+#: src/LYShowInfo.c:401
+msgid "(Form field)"
+msgstr "(Formulier veld)"
+
+#: src/LYShowInfo.c:416
+msgid "No Links on the current page"
+msgstr "Er zijn geen verwijzingen op de huidige pagina"
+
+#: src/LYStyle.c:250
+#, c-format
+msgid ""
+"Syntax Error parsing style in lss file:\n"
+"[%s]\n"
+"The line must be of the form:\n"
+"OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
+"where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+msgstr ""
+"Syntactische fout bij verwerken van stijl in lss bestand:\n"
+"[%s]\n"
+"De regel moet van de volgende vorm zijn:\n"
+"OBJECT:MONO:KLEUR (dat is, em:bold:brightblue:white)\n"
+"waar OBJECT een van de volgende is: EM,STRONG,B,I,U,BLINK enz.\n"
+"\n"
+
+#: src/LYTraversal.c:107
+msgid "here is a list of the history stack so that you may rebuild"
+msgstr "hier is een lijst van de logs, zodat u opnieuw kunt bouwen"
+
+#: src/LYUpload.c:78
+msgid "ERROR! - upload command is misconfigured"
+msgstr "FOUT! - zend-commando is niet goed ingesteld"
+
+#: src/LYUpload.c:100
+msgid "Illegal redirection \"../\" found! Request ignored."
+msgstr "Ongeldige doorverwijzing \"../\" gevonden! Verzoek genegeerd."
+
+#: src/LYUpload.c:103
+msgid "Illegal character \"/\" found! Request ignored."
+msgstr "Ongeldig teken \"/\" gevonden! Opdracht geannuleerd."
+
+#: src/LYUpload.c:106
+msgid "Illegal redirection using \"~\" found! Request ignored."
+msgstr "Ongeldige doorverwijzing gevonden die gebruik maakt van \"~\"! Verzoek genegeerd."
+
+#: src/LYUpload.c:163
+msgid "Unable to upload file."
+msgstr "Niet in staat bestand te zenden."
+
+#: src/LYUpload.c:214
+msgid "Upload To:"
+msgstr "Zenden naar:"
+
+#: src/LYUpload.c:215
+msgid "Upload options:"
+msgstr "Zend opties:"
+
+#: src/LYUtils.c:3075
+msgid "Unexpected access protocol for this URL scheme."
+msgstr "Onverwacht toegangsprotocol voor dit URL methode"
+
+#: src/LYUtils.c:3915
+msgid "Too many tempfiles"
+msgstr ""
+
+#: src/LYUtils.c:4217
+#, fuzzy
+msgid "unknown restriction"
+msgstr "Er zijn geen beperkingen gesteld.\n"
+
+#: src/LYUtils.c:4248
+msgid "No restrictions set.\n"
+msgstr "Er zijn geen beperkingen gesteld.\n"
+
+#: src/LYUtils.c:4251
+msgid "Restrictions set:\n"
+msgstr "Gestelde beperkingen:\n"
+
+#: src/LYUtils.c:5601
+msgid "Ignoring invalid HOME"
+msgstr "Negeer ongeldig HOME"
+
+#: src/LYrcFile.c:20
+msgid "Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n"
+msgstr ""
+
+#: src/LYrcFile.c:242
+msgid ""
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
+msgstr ""
+"accept_all_cookies stelt de gebruiker in staat om, indien gewenst,\n"
+"Lynx automatisch alle koekjes te laten accepteren. De standaard is\n"
+"\"FALSE\", zodat voor elk koekje om bevestiging zal worden gevraagd.\n"
+"Zet accept_all_cookies op \"TRUE\" om alle koekjes te accepteren.\n"
+
+#: src/LYrcFile.c:249
+msgid ""
+"bookmark_file specifies the name and location of the default bookmark\n"
+"file into which the user can paste links for easy access at a later\n"
+"date.\n"
+msgstr ""
+"bookmark_file specificeert de naam en lokatie van het standaard boekenlegger-\n"
+"bestand, in welke de gebruiker links kan plaatsen om deze op een later\n"
+"tijdstip eenvoudig te kunnen bereiken.\n"
+
+#: src/LYrcFile.c:254
+msgid ""
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
+msgstr ""
+"Als case_sensitive_searching \"on\" is, zal indien de gebruiker een zoekopdracht\n"
+"opgeeft met de 's' of '/' toetsen, het zoeken gevoelig voor verschil in grote\n"
+"en kleine letters, in plaats van ongevoelig voor kast. De standaard is\n"
+"meestal \"off\".\n"
+
+#: src/LYrcFile.c:259
+msgid ""
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
+msgstr ""
+"De character_set definitie bepaalt de representatie van 8 bit tekens\n"
+"voor uw terminal. Als 8 bit tekens niet correct afgebeeld worden op uw\n"
+"scherm, kunt u een andere 8 bit verzameling proberen of 7 bit benaderingen.\n"
+"Huidig geldige tekenverzamelingen zijn:\n"
+
+#: src/LYrcFile.c:266
+msgid ""
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
+msgstr ""
+"cookie_accept_domains en cookie_reject_domains zijn door komma's gescheiden lijsten van domeinen voor welke Lynx automatisch alle "
+"koekjes respectievelijk toelaat of weigert. Als een domein opgegeven wordt voor beide opties zal verwerping het winnen van "
+"toelaten. De accept_all_cookies parameter doet deze instellingen teniet.\n"
+
+#: src/LYrcFile.c:274
+msgid ""
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
+msgstr ""
+"cookie_file specificeert het bestand waarin blijvende koekjes worden\n"
+"opgeslagen. Standaard is dit ~/.lynx_cookies.\n"
+
+#: src/LYrcFile.c:279
+msgid ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
+msgstr ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, en\n"
+"cookie_query_invalid_domains zijn door komma's gescheiden lijsten\n"
+"waarmee domeinen op verscheidene niveau's van geldigheid worden\n"
+"gecontroleerd. Als een domein op `strict'e controle wordt gezet, moet\n"
+"strict voldaan worden aan RFC2109. Een domein met 'loose' controle\n"
+"zal toegestaan worden om koekjes met een ongeldige padnaam of\n"
+"domein-attribuut te plaatsen. Alle domeinen zullen standaard de\n"
+"gebruiker vragen (query) in geval van ongeldig pad of domein.\n"
+
+#: src/LYrcFile.c:292
+msgid ""
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
+msgstr ""
+"dir_list_styles specificeert de stijl van een map in DIRED_SUPPORT\n"
+"(indien geïmplementeerd). De standaard is \"MIXED_STYLE\", waarmee\n"
+"bestanden en mappen samen worden gesorteerd. \"FILES_FIRST\" plaatst\n"
+"bestanden eerst, \"DIRECTORIES_FIRST\" plaatst mappen eerst.\n"
+
+#: src/LYrcFile.c:300
+msgid ""
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
+msgstr ""
+"Als emacs_keys \"on\" is dan zullen de normale EMACS toetsen:\n"
+" ^N = omlaag (next-line) ^P = omhoog (previous-line)\n"
+" ^B = links (backward-char) ^F = rechts (forward-char)\n"
+"in gebruik zijn.\n"
+
+#: src/LYrcFile.c:306
+msgid ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+msgstr ""
+"file_editor specificeert de editor die aangeroepen wordt om lokale bestanden\n"
+"te wijzigen of om email te verzenden. Als geen editor gespecificeerd wordt,\n"
+"dan is bestanden wijzigen niet mogelijk, tenzij het vanaf de commando-regel\n"
+"wordt opgegeven. De ingebouwde editor zal worden gebruikt om email te\n"
+"verzenden.\n"
+
+#: src/LYrcFile.c:312
+msgid ""
+"The file_sorting_method specifies which value to sort on when viewing\n"
+"file lists such as FTP directories. The options are:\n"
+" BY_FILENAME -- sorts on the name of the file\n"
+" BY_TYPE -- sorts on the type of the file\n"
+" BY_SIZE -- sorts on the size of the file\n"
+" BY_DATE -- sorts on the date of the file\n"
+msgstr ""
+"De file_sorting_method specificeert op welke waarde gesorteerd wordt bij\n"
+"het bekijken van lijsten zoals FTP mappen. De opties zijn:\n"
+" BY_FILENAME -- sorteert op de naam van het bestand\n"
+" BY_TYPE -- sorteert op het type van het bestand\n"
+" BY_SIZE -- sorteert op de grootte van het bestand\n"
+" BY_DATE -- sorteert op de datum van het bestand\n"
+
+#: src/LYrcFile.c:324
+msgid ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+msgstr ""
+"lineedit_mode specificeert de toetsaanslagen die gebruikt worden voor het invoeren van tekenreeksen in prompten en formulieren. "
+"Als lineedit_mode gezet wordt op \"Default Binding\" dan worden de volgende tekens gebruikt voor verplaatsen en verwijderen:\n"
+" Vorig Volgend return = Accepteer invoer\n"
+" Verplaats teken: <- -> ^G = annuleer invoer\n"
+" Verplaats woord: ^P ^N ^U = wis regel\n"
+" Wis teken: ^H ^R ^A = ga naar begin van regel\n"
+" Wis woord: ^B ^F ^E = ga naar einde van regel\n"
+"\n"
+"Huidige mogelijkheden voor lineedit_mode zijn:\n"
+
+#: src/LYrcFile.c:339
+msgid ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+msgstr ""
+"Op de volgende regels kunt u sub-boekenlegger bestanden en\n"
+"omschrijvingen opgeven. Het formaat is als volgt:\n"
+"multi_bookmark<hoofdletter>=<bestandsnaam>,<omschrijving>\n"
+"Er kunnen 26 boekenleggerbestanden zijn, voor elke hoofdletter A-Z.\n"
+"We beginnen met \"multi_bookmarkB\" omdat 'A' de gewone is (zie boven).\n"
+
+#: src/LYrcFile.c:345
+msgid ""
+"personal_mail_address specifies your personal mail address. The\n"
+"address will be sent during HTTP file transfers for authorization and\n"
+"logging purposes, and for mailed comments.\n"
+"If you do not want this information given out, set the NO_FROM_HEADER\n"
+"to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
+"could leave this field blank, but then you won't have it included in\n"
+"your mailed comments.\n"
+msgstr ""
+"personal_mail_address specificeert uw persoonlijke email-adres.\n"
+"Het adres zal verzonden worden tijdens HTTP bestandsoverdrachten voor\n"
+"authorisatie en log-doeleinden, en voor email commentaren.\n"
+"Als u deze informatie niet uit wilt reiken, zet dan NO_FROM_HEADER op\n"
+"TRUE in lynx.cfg, of gebruik de -nofrom commando-regel optie. U kunt\n"
+"ook dit veld leeg laten, maar dan wordt het ook niet opgenomen in\n"
+"uw email commentaren.\n"
+
+#: src/LYrcFile.c:354
+msgid ""
+"preferred_charset specifies the character set in MIME notation (e.g.,\n"
+"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
+"to http servers using an Accept-Charset header. The value should NOT\n"
+"include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
+"by default. May be a comma-separated list.\n"
+"If a file in that character set is available, the server will send it.\n"
+"If no Accept-Charset header is present, the default is that any\n"
+"character set is acceptable. If an Accept-Charset header is present,\n"
+"and if the server cannot send a response which is acceptable\n"
+"according to the Accept-Charset header, then the server SHOULD send\n"
+"an error response, though the sending of an unacceptable response\n"
+"is also allowed.\n"
+msgstr ""
+"preferred_charset specificeert de tekenverzameling in MIME notatie\n"
+"(dat is, ISO-8859-2, ISO-8859-5, .. een door komma's gescheiden lijst)\n"
+"waarmee Lynx uw voorkeuren doorgeeft aan http servers die een\n"
+"Accept-Charset kop gebruiken. De waarde mag _niet_ ISO-8859-1 of\n"
+"US-ASCII bevatten, omdat deze waarden altijd standaard aangenomen\n"
+"worden. Als een bestand in die tekenverzameling beschikbaar is, zal\n"
+"de server het verzenden. Als geen Accept-Charset kop aanwezig is, is\n"
+"elke willekeurige tekenverzameling acceptabel. Als een Accept-Charset\n"
+"kop aanwezig is, en als de server geen antwoord kan zenden dat\n"
+"acceptabel is volgens deze koptekst, dan ZOU de server een foutmelding\n"
+"moeten sturen, maar het verzenden van een onacceptabel antwoord is ook\n"
+"toegestaan.\n"
+
+#: src/LYrcFile.c:368
+msgid ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+msgstr ""
+"preferred_language specificeert de taal in MIME notatie (dat is, en,\n"
+"nl, fr, een door komma's gescheiden lijst in afnemende volgorde van\n"
+"voorkeur) waarmee Lynx uw voorkeuren doorgeeft in opdrachten aan http\n"
+"servers. Als een bestand in een bepaalde taal aanwezig is, zal de\n"
+"server het verzenden. Als dit niet het geval is, zal de server het\n"
+"bestand in zijn standaard taal verzenden.\n"
+
+#: src/LYrcFile.c:377
+msgid ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Als run_all_execution_links op \"on\" wordt gezet zullen alle lokale uitvoer-linksworden uitgevoerd als ze geselecteerd worden.\n"
+"\n"
+"LET OP - Dit is potentieel ERG gevaarlijk. Omdat u informatie kunt\n"
+" bekijken die geschreven is door onbekende en niet vertrouwde\n"
+" bronnen, bestaat er een mogelijkheid dat Trojaanse paarden in\n"
+" de vorm van links geschreven kunnen worden. Deze kunnen\n"
+" worden geschreven om bestanden te wissen of beveiligingen te\n"
+" omzeilen. Deze optie moet enkel op \"on\" gezet worden als u\n"
+" alleen maar informatie bekijkt uit een vertrouwde bron.\n"
+
+#: src/LYrcFile.c:388
+msgid ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Als run_execution_links_on_local_files op \"on\" wordt gezet zullen alle lokale uitvoer-links gevonden in LOKALE bestanden worden "
+"uitgevoerd als ze geselecteerd worden. Dit verschilt van run_all_execution_links, daar slechts bestanden die zich op het lokale "
+"systeem bevinden deze uitvoer rechten krijgen.\n"
+"\n"
+"LET OP - Hier dreigt potentieel gevaar. Omdat u informatie kunt\n"
+" bekijken die geschreven is door onbekende en niet vertrouwde\n"
+" bronnen, bestaat er een mogelijkheid dat Trojaanse paarden in\n"
+" de vorm van links geschreven kunnen worden. Deze kunnen\n"
+" worden geschreven om bestanden te wissen of beveiligingen te\n"
+" omzeilen. Deze optie moet enkel op \"on\" gezet worden als u\n"
+" alleen maar informatie bekijkt uit een vertrouwde bron.\n"
+
+#: src/LYrcFile.c:403
+msgid ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+msgstr ""
+"select_popups bepaalt of de `OPTION's in een `SELECT' block, dat geen\n"
+"`MULTIPLE' attribuut heeft, getoond worden als een verticale lijst van\n"
+"drukknoppen of via een popup menu. Merk op dat indien de `MULTIPLE'\n"
+"attribuut aanwezig is in de `SELECT' begin-tag, Lynx altijd een\n"
+"verticale lijst van aanvinkvelden voor de `OPTION's zal maken. Een\n"
+"waarde \"on\" maakt popup menus de standaard, terwijl \"off\" voor\n"
+"drukknoppen zorgt.\n"
+"De standaard kan worden tenietgedaan d.m.v. de `-popup' commandoregel optie.\n"
+
+#: src/LYrcFile.c:413
+msgid ""
+"show_color specifies how to set the color mode at startup. A value of\n"
+"\"never\" will force color mode off (treat the terminal as monochrome)\n"
+"at startup even if the terminal appears to be color capable. A value of\n"
+"\"always\" will force color mode on even if the terminal appears to be\n"
+"monochrome, if this is supported by the library used to build lynx.\n"
+"A value of \"default\" will yield the behavior of assuming\n"
+"a monochrome terminal unless color capability is inferred at startup\n"
+"based on the terminal type, or the -color command line switch is used, or\n"
+"the COLORTERM environment variable is set. The default behavior always is\n"
+"used in anonymous accounts or if the \"option_save\" restriction is set.\n"
+"The effect of the saved value can be overridden via\n"
+"the -color and -nocolor command line switches.\n"
+"The mode set at startup can be changed via the \"show color\" option in\n"
+"the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
+"\"off\" \"show color\" settings will be treated as \"default\".\n"
+msgstr ""
+"show_color specificeert hoe de kleuren modus bij het opstarten moet\n"
+"zijn. Een waarde \"never\" forceert een kleur modus \"off\" (de terminal\n"
+"wordt als monochroom beschouwd) zelfs als de terminal kleur aan lijkt\n"
+"te kunnen. Een waarde \"always\" zal kleuren modus \"on\" forceren, zelfs\n"
+"als de terminal monochroom lijkt te zijn, als dit maar ondersteund\n"
+"wordt door de bibliotheek die gebruikt is om lynx mee te maken. Een\n"
+"waarde \"default\" zal uitgaan van een monochroom terminal, tenzij bij\n"
+"het opstarten blijkt dat de terminal kleur aan kan, of als de `-color'\n"
+"optie wordt opgegeven vanaf de commandoregel, of als de COLORTERM\n"
+"omgevingsvariabele gezet is. Het standaard gedrag wordt gebruikt bij\n"
+"anonieme accounts of als de \"option_save\" restrictie gezet is. Het\n"
+"effect van de opgeslagen waarde kan worden tenietgedaan d.m.v. de\n"
+"`-color' en `-nocolor' opties op de commandoregel. De modus van het\n"
+"opstarten kan gewijzigd worden via de \"Toon kleur\" optie in het\n"
+"'o'pties menu. Als de optie-instellingen worden opgeslagen, zullen de\n"
+"\"on\" en \"off\" instellingen worden gezien als \"default\".\n"
+
+#: src/LYrcFile.c:430
+msgid ""
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
+msgstr ""
+"show_cursor bepaalt of de cursor 'verborgen' wordt rechts van (en,\n"
+"indien mogelijk, onder in) het scherm, of om het links van de huidige\n"
+"link in documenten te plaatsen, of op de huidige optie in popup\n"
+"vensters. De cursor links van een link of optie plaatsen is handig\n"
+"voor spraak of braille interfaces, en voor gevallen waarin de terminal\n"
+"de geselecteerde link niet onderscheidt door fel oplichten of kleur.\n"
+"Een waarde \"on\" zal de positionering links van de links of opties\n"
+"zetten, en en waarde \"off\" probeert de cursor te 'verbergen'.\n"
+
+#: src/LYrcFile.c:441
+msgid ""
+"show_dotfiles specifies that the directory listing should include\n"
+"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
+"honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
+"restricted via a command line switch. If display of hidden files\n"
+"is disabled, creation of such files via Lynx also is disabled.\n"
+msgstr ""
+"show_dotfiles specificeert of binnen een map `verborgen' (punt) bestanden\n"
+"en mappen getoond worden. Indien \"on\", zal dit gebeuren, slechts indien\n"
+"aangezet in userdefs.h en/of lynx.cfg, en niet beperkt door een\n"
+"commando-regel optie. Indien uitgezet wordt het ook onmogelijk gemaakt\n"
+"om verborgen bestanden aan te maken vanuit Lynx.\n"
+
+#: src/LYrcFile.c:452
+msgid ""
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
+msgstr ""
+"Als sub_bookmarks niet \"off\" is, en meervoudige boekenleggers zijn\n"
+"opgegeven (zie onder), dan zullen alle boekenlegger operaties eerst de\n"
+"gebruiker vragen om een actief sub-boekenlegger bestand te selecteren.\n"
+"Als de standaard Lynx bookmark_file gedefiniëerd is (zie boven), dan\n"
+"zal dit gebruikt worden als de standaard selectie. Als deze optie op\n"
+"\"advanced\" gezet is en de gebruikersmodus ook \"advanced\" is, dan zal\n"
+"het 'v'-inzien boekenlegger commando een statusregel-menu tonen in\n"
+"plaats van het menu dat in \"novice\" en \"intermediate\" modus wordt\n"
+"gebruikt. Als deze optie op \"standaard\" gezet wordt, zal ongeacht de\n"
+"gebruikersmodus het volledige menu getoond worden.\n"
+
+#: src/LYrcFile.c:464
+msgid ""
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
+msgstr ""
+"user_mode specificeert het gebruikersniveau binnen Lynx. De standaard\n"
+"is \"NOVICE\" waarbij twee extra regels met hulpteksten onder in het\n"
+"scherm getoond worden, om de gebruiker de basis commando's in Lynx te\n"
+"leren. Zet user_mode op \"INTERMEDIATE\" om de extra informatie uit te\n"
+"schakelen. Gebruik \"ADVANCED\" om onder in het scherm de URL van de\n"
+"geselecteerd link te zien.\n"
+
+#: src/LYrcFile.c:472
+msgid ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+msgstr ""
+"Als verbose_images \"on\" is, zal lynx de naam van het brobestand van de\n"
+"afbeelding laten zien in plaats van [INLINE], [LINK] of [IMAGE].\n"
+"Zie ook VERBOSE_IMAGES in lynx.cfg\n"
+
+#: src/LYrcFile.c:477
+msgid ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+msgstr ""
+"Als vi_keys \"on\" is, dan zijn de normale VI toetsen in gebruik:\n"
+" j = omlaag k = omhoog\n"
+" h = links l = rechts\n"
+"Deze toetsen zijn enkel de kleine letters.\n"
+"De hoofdletters 'H', 'J' en 'K' zullen nog steeds help activeren,\n"
+"springen naar snelkoppelingen (j-ump) of the toetsenindeling laten\n"
+"zien (k-eymap display).\n"
+
+#: src/LYrcFile.c:485
+msgid ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+msgstr ""
+"De visited_links optie bepaalt hoe Lynx de informatie weergeeft op de\n"
+"pagina met Bezochte Links.\n"
+
+#: src/LYrcFile.c:693
+msgid ""
+"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
+"your keypad when the numlock is on will act as arrow keys:\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"and the corresponding keyboard numbers will act as arrow keys,\n"
+"regardless of whether numlock is on.\n"
+msgstr ""
+"Als keypad_mode op \"NUMBERS_AS_ARROWS\" gezet wordt, zullen de nummers\n"
+"op uw numerieke eiland met Numlock aan als pijltjestoetsen functioneren:\n"
+" 8 = Pijltje omhoog\n"
+" 4 = Pijltje links 6 = Pijltje rechts\n"
+" 2 = Pijltje omlaag\n"
+"De corresponderende nummers op het linkerdeel van het toetsenbord zullen\n"
+"ook als pijltjestoetsen functioneren, ongeacht de Numlock stand.\n"
+
+#: src/LYrcFile.c:702
+msgid ""
+"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
+"appear next to each link and numbers are used to select links.\n"
+msgstr ""
+"Als keypad_mode op \"LINKS_ARE_NUMBERED\" staat, zullen nummers\n"
+"verschijnen naast elke link en nummers kunnen gebruikt worden om links\n"
+"te selecteren.\n"
+
+#: src/LYrcFile.c:706
+msgid ""
+"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
+"numbers will appear next to each link and visible form input field.\n"
+"Numbers are used to select links, or to move the \"current link\" to a\n"
+"form input field or button. In addition, options in popup menus are\n"
+"indexed so that the user may type an option number to select an option in\n"
+"a popup menu, even if the option isn't visible on the screen. Reference\n"
+"lists and output from the list command also enumerate form inputs.\n"
+msgstr ""
+"Als keypad_mode op \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" gezet wordt,\n"
+"zullen nummers verschijnen naast elke link en zichtbare\n"
+"formulier-invoervelden. Nummers zullen gebruikt worden om links te\n"
+"selecteren, of om de \"huidige link\" te verplaatsen naar een\n"
+"formulier-invoerveld of -knop. Daarbij komt dat opties in een popup\n"
+"menu geïndexeerd zijn, zodat de gebruiker een optienummer kan intypen\n"
+"om een optie in een popup menu te selecteren, zelfs als de optie niet\n"
+"op het scherm zichtbaar is. Referentielijsten en uitvoer van het\n"
+"lijst commando nummeren ook formulier-invoervelden.\n"
+
+#: src/LYrcFile.c:715
+msgid ""
+"NOTE: Some fixed format documents may look disfigured when\n"
+"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
+"enabled.\n"
+msgstr ""
+"MERK OP: Sommige documenten met een gefixeerde opmaak kunnen er\n"
+"verminkt uitzien als \"LINKS_ARE_NUMBERED\" of\n"
+"\"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" is aangezet.\n"
+
+#: src/LYrcFile.c:748
+msgid ""
+"Lynx User Defaults File\n"
+"\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
msgstr ""
+"Lynx Standaardinstellingenbestand voor Gebruiker\n"
+"\n"
+"Dit bestand bevat opties die opgeslagen zijn in het Lynx Opties Scherm\n"
+"(normaliter d.m.v. the '>' toets). Er is doorgaans geen reden om dit\n"
+"bestand handmatig te wijzigen, omdat de instellingen vanuit het Opties\n"
+"Scherm kunnen worden bewerkt, en de eerstvolgende keer dat de opties\n"
+"daar opgeslagen worden zal dit bestand volledig worden herschreven.\n"
+"U bent gewaarschuwd...\n"
+"Als u op zoek bent naar het algemene configuratiebestand - dat is\n"
+"meestal lynx.cfg, en het heeft andere inhoud en een andere opmaak.\n"
+"Het is niet dit bestand.\n"
diff --git a/gnu/usr.bin/lynx/po/pt_BR.po b/gnu/usr.bin/lynx/po/pt_BR.po
new file mode 100644
index 00000000000..02aef0c29c9
--- /dev/null
+++ b/gnu/usr.bin/lynx/po/pt_BR.po
@@ -0,0 +1,5519 @@
+# Brazilian Portuguese translation of the "lynx" messages
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Ricardo Soares Guimarães <ricardo@conectiva.com.br>, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lynx 2.8.4\n"
+"POT-Creation-Date: 2001-06-01 18:55-0400\n"
+"PO-Revision-Date: 1999-07-30 09:47-03:00\n"
+"Last-Translator: Ricardo Soares Guimarães <ricardo@conectiva.com.br>\n"
+"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#. ******************************************************************
+#. * The following definitions are for status line prompts, messages, or
+#. * warnings issued by Lynx during program execution. You can modify
+#. * them to make them more appropriate for your site. We recommend that
+#. * you extend these definitions to other languages using the gettext
+#. * library. There are also scattered uses of 'gettext()' throughout the
+#. * Lynx source, covering all but those messages which (a) are used for
+#. * debugging (CTRACE) or (b) are constants used in interaction with
+#. * other programs.
+#. *
+#. * Links to collections of alternate definitions, developed by the Lynx
+#. * User Community, are maintained in Lynx links:
+#. *
+#. * http://www.trill-home.com/lynx.html
+#. *
+#. * See ABOUT-NLS and po/readme for details and location of contributed
+#. * translations. When no translation is available, the English default is
+#. * used.
+#.
+#: LYMessages.c:29
+#, c-format
+msgid "Alert!: %s"
+msgstr "Alerta!: %s"
+
+#: LYMessages.c:30
+msgid "Welcome"
+msgstr "Bem Vindo"
+
+#: LYMessages.c:31 LYMessages.c:32
+msgid "Are you sure you want to quit?"
+msgstr "Você tem certeza?"
+
+#: LYMessages.c:34 LYMessages.c:35
+msgid "Really exit from Lynx?"
+msgstr "Realmente sair do Lynx?"
+
+#: LYMessages.c:37
+msgid "Connection interrupted."
+msgstr "Conexão interrompida."
+
+#: LYMessages.c:38
+msgid "Data transfer interrupted."
+msgstr "Transferência de dados interrompida."
+
+#: LYMessages.c:39
+msgid "Cancelled!!!"
+msgstr "Cancelado!!!"
+
+#: LYMessages.c:40
+msgid "Cancelling!"
+msgstr "Cancelando!"
+
+#: LYMessages.c:41
+msgid "Excellent!!!"
+msgstr "Excelente!!"
+
+#: LYMessages.c:42
+msgid "OK"
+msgstr "OK"
+
+#: LYMessages.c:43
+msgid "Done!"
+msgstr "Finalizado!"
+
+#: LYMessages.c:44
+msgid "Bad request!"
+msgstr "Requisição mal formada!"
+
+#: LYMessages.c:45
+msgid "previous"
+msgstr "anterior"
+
+#: LYMessages.c:46
+msgid "next screen"
+msgstr "próxima tela"
+
+#: LYMessages.c:47
+msgid "HELP!"
+msgstr "AJUDA!"
+
+#: LYMessages.c:48
+msgid ", help on "
+msgstr ", ajuda em "
+
+#. #define HELP
+#: LYMessages.c:50
+msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
+msgstr "Comandos: Use as setas para mover,'?' ajuda, 'q' sair, '<-' voltar."
+
+#. #define MOREHELP
+#: LYMessages.c:52
+msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
+msgstr "espaço para continuar, use as setas para mover,'?' ajuda, 'q' sair."
+
+#: LYMessages.c:53
+msgid "-- press space for next page --"
+msgstr "-- pressione a barra de espaço para ir para a próxima página --"
+
+#: LYMessages.c:54
+msgid "URL too long"
+msgstr "Caminho muito grande"
+
+#. Inactive input fields, messages used with -tna option - kw
+#. #define FORM_LINK_TEXT_MESSAGE_INA
+#: LYMessages.c:60
+msgid "(Text entry field) Inactive. Press <return> to activate."
+msgstr ""
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA
+#: LYMessages.c:62
+msgid "(Textarea) Inactive. Press <return> to activate."
+msgstr ""
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA_E
+#: LYMessages.c:64
+#, c-format
+msgid "(Textarea) Inactive. Press <return> to activate (%s for editor)."
+msgstr "(Area de texto).Setas para cima/baixo, ou TAB para sair (%s para editor)."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA
+#: LYMessages.c:66
+msgid "(Form field) Inactive. Use <return> to edit."
+msgstr "(Campo de formulário). Use <enter> para enviar('x' para não salvar no cache)."
+
+#. #define FORM_TEXT_SUBMIT_MESSAGE_INA_X
+#: LYMessages.c:68
+#, c-format
+msgid "(Form field) Inactive. Use <return> to edit (%s to submit with no cache)."
+msgstr "(Campo de formulário). Use <enter> para enviar(%s para não salvar no cache)."
+
+#. #define FORM_TEXT_RESUBMIT_MESSAGE_INA
+#: LYMessages.c:70
+msgid "(Form field) Inactive. Press <return> to edit, press <return> twice to submit."
+msgstr "(Campo de formulário). Use <enter> para enviar, setas ou TAB para sair."
+
+#. #define FORM_TEXT_SUBMIT_MAILTO_MSG_INA
+#: LYMessages.c:72
+msgid "(mailto form field) Inactive. Press <return> to change."
+msgstr "(Campo de e-mail) Digite o texto. Use <enter> para enviar, setas para sair."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE_INA
+#: LYMessages.c:74
+msgid "(Password entry field) Inactive. Press <return> to activate."
+msgstr "(Campo de entrada de senha). Use setas para cima/baixo ou TAB para sair."
+
+#. #define FORM_LINK_FILE_UNM_MSG
+#: LYMessages.c:77
+msgid "UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off."
+msgstr "Campo não modificável. Use setas para cima ou para baixo ou TAB para sair."
+
+#. #define FORM_LINK_FILE_MESSAGE
+#: LYMessages.c:79
+msgid "(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off."
+msgstr "(Caixa de texto). Use seta para cima, para baixo ou TAB para sair."
+
+#. #define FORM_LINK_TEXT_MESSAGE
+#: LYMessages.c:81
+msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Caixa de texto) Digite o texto.Seta para cima, para baixo ou TAB para sair."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE
+#: LYMessages.c:83
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off."
+msgstr "(Area de texto).Setas para cima/baixo, ou TAB para sair (^Ve para editor)."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_E
+#: LYMessages.c:85
+#, c-format
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor)."
+msgstr "(Area de texto).Setas para cima/baixo, ou TAB para sair (%s para editor)."
+
+#. #define FORM_LINK_TEXT_UNM_MSG
+#: LYMessages.c:87
+msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
+msgstr "Caixa de texto não modificável. S setas para cima/baixo, ou TAB para sair."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE
+#: LYMessages.c:89
+msgid "(Form field) Enter text. Use <return> to submit."
+msgstr "(Campo de formulário). Use <enter> para enviar('x' para não salvar no cache)."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_X
+#: LYMessages.c:91
+#, c-format
+msgid "(Form field) Enter text. Use <return> to submit (%s for no cache)."
+msgstr "(Campo de formulário). Use <enter> para enviar(%s para não salvar no cache)."
+
+#. #define FORM_LINK_TEXT_RESUBMIT_MESSAGE
+#: LYMessages.c:93
+msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
+msgstr "(Campo de formulário). Use <enter> para enviar, setas ou TAB para sair."
+
+#. #define FORM_LINK_TEXT_SUBMIT_UNM_MSG
+#: LYMessages.c:95
+msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
+msgstr "Campo de texto não modificável. Use setas para cima/baixo ou TAB para sair."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_MSG
+#: LYMessages.c:97
+msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
+msgstr "(Campo de e-mail) Digite o texto. Use <enter> para enviar, setas para sair."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:99
+msgid "(mailto form field) Mail is disallowed so you cannot submit."
+msgstr "(Campo de e-mail) E-mail está desabilitado, portanto você não pode enviar."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE
+#: LYMessages.c:101
+msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Campo de entrada de senha). Use setas para cima/baixo ou TAB para sair."
+
+#. #define FORM_LINK_PASSWORD_UNM_MSG
+#: LYMessages.c:103
+msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
+msgstr "Campo de senha não modificável. Use setas para cima/baixo ou TAB para sair."
+
+#. #define FORM_LINK_CHECKBOX_MESSAGE
+#: LYMessages.c:105
+msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
+msgstr "(Caixa de checagem) Use seta para a direita ou <enter> para marcar."
+
+#. #define FORM_LINK_CHECKBOX_UNM_MSG
+#: LYMessages.c:107
+msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
+msgstr "Caixa de checagem não modificável. Setas para cima/baixo ou TAB para sair."
+
+#. #define FORM_LINK_RADIO_MESSAGE
+#: LYMessages.c:109
+msgid "(Radio Button) Use right-arrow or <return> to toggle."
+msgstr "(Botão de rádio) Use seta para a direita ou <enter> para marcar."
+
+#. #define FORM_LINK_RADIO_UNM_MSG
+#: LYMessages.c:111
+msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
+msgstr "Botão de rádio não modificável.Setas para cima/baixo ou TAB para sair."
+
+#. #define FORM_LINK_SUBMIT_PREFIX
+#: LYMessages.c:113
+msgid "Submit ('x' for no cache) to "
+msgstr "Enviar ('x' para não salvar) para"
+
+#. #define FORM_LINK_RESUBMIT_PREFIX
+#: LYMessages.c:115
+msgid "Submit to "
+msgstr "Enviar para"
+
+#. #define FORM_LINK_SUBMIT_MESSAGE
+#: LYMessages.c:117
+msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
+msgstr "Botão de envio.Seta para a direita ou <enter> para enviar('x' para não salvar)"
+
+#. #define FORM_LINK_RESUBMIT_MESSAGE
+#: LYMessages.c:119
+msgid "(Form submit button) Use right-arrow or <return> to submit."
+msgstr "(Botão de envio) Use seta para a direita ou <enter> para enviar."
+
+#. #define FORM_LINK_SUBMIT_DIS_MSG
+#: LYMessages.c:121
+msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
+msgstr "Botão de rádio desabilitado. Seta para cima ou para baixo ou TAB para sair."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_PREFIX
+#: LYMessages.c:123
+msgid "Submit mailto form to "
+msgstr "Enviar formulário de e-mail para "
+
+#. #define FORM_LINK_SUBMIT_MAILTO_MSG
+#: LYMessages.c:125
+msgid "(mailto form submit button) Use right-arrow or <return> to submit."
+msgstr "(Botão de envio de email) Use seta para a direita ou <enter> para enviar."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:127
+msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
+msgstr "(Botão de envio de email) E-mail desabilitado. Você não pode enviar emails agora."
+
+#. #define FORM_LINK_RESET_MESSAGE
+#: LYMessages.c:129
+msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
+msgstr "(Botão de limpar).Seta para a direita ou<enter> para voltar aos valores padrão"
+
+#. #define FORM_LINK_RESET_DIS_MSG
+#: LYMessages.c:131
+msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
+msgstr "Botão de limpar desabilitado. Seta para cima ou para baixo ou TAB para sair."
+
+#. #define FORM_LINK_OPTION_LIST_MESSAGE
+#: LYMessages.c:133
+msgid "(Option list) Hit return and use arrow keys and return to select option."
+msgstr "(Lista de opções)Tecle enter, use as setas e enter novamente para selecionar."
+
+#. #define CHOICE_LIST_MESSAGE
+#: LYMessages.c:135
+msgid "(Choice list) Hit return and use arrow keys and return to select option."
+msgstr "(Lista de opções) Tecle enter, use as setas e enter novamente para selecionar."
+
+#. #define FORM_LINK_OPTION_LIST_UNM_MSG
+#: LYMessages.c:137
+msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
+msgstr "Lista de opções não modificável. Use enter ou setas para rever ou sair."
+
+#. #define CHOICE_LIST_UNM_MSG
+#: LYMessages.c:139
+msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
+msgstr "Lista de opções não modificável. Use enter ou setas para rever ou sair."
+
+#: LYMessages.c:140
+msgid "Submitting form..."
+msgstr "Enviando formulário..."
+
+#: LYMessages.c:141
+msgid "Resetting form..."
+msgstr "Limpando formulário..."
+
+#. #define RELOADING_FORM
+#: LYMessages.c:143
+msgid "Reloading document. Any form entries will be lost!"
+msgstr "Recarregando formulário. Qualquer entrada será perdida!"
+
+#: LYMessages.c:144
+#, c-format
+msgid "Warning: Cannot transcode form data to charset %s!"
+msgstr "Atencão: Impossível transformar dados do formulario em %s!"
+
+#. #define NORMAL_LINK_MESSAGE
+#: LYMessages.c:147
+msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
+msgstr "(Link Normal) Use seta para a direita ou <enter> para ativar."
+
+#: LYMessages.c:148
+msgid "The resource requested is not available at this time."
+msgstr "O recurso solicitado não está disponível neste momento."
+
+#: LYMessages.c:149
+msgid "Enter Lynx keystroke command: "
+msgstr "Entre o comando para o Lynx:"
+
+#: LYMessages.c:150
+msgid "Looking up "
+msgstr "Procurando "
+
+#: LYMessages.c:151
+#, c-format
+msgid "Getting %s"
+msgstr "Recebendo %s"
+
+#: LYMessages.c:152
+#, c-format
+msgid "Skipping %s"
+msgstr "Omitindo %s"
+
+#: LYMessages.c:153
+#, c-format
+msgid "Using %s"
+msgstr "Usando %s"
+
+#: LYMessages.c:154
+#, c-format
+msgid "Illegal URL: %s"
+msgstr "Link Ilegal: %s"
+
+#: LYMessages.c:155
+#, c-format
+msgid "Badly formed address %s"
+msgstr "Endereço %s mal formado"
+
+#: LYMessages.c:156
+#, c-format
+msgid "URL: %s"
+msgstr "URL: %s"
+
+#: LYMessages.c:157
+msgid "Unable to access WWW file!!!"
+msgstr "Impossível acessar o arquivo WWW!!!"
+
+#: LYMessages.c:158
+#, c-format
+msgid "This is a searchable index. Use %s to search."
+msgstr "Este é um índice de busca, use %s para procurar."
+
+#. #define WWW_INDEX_MORE_MESSAGE
+#: LYMessages.c:160
+#, c-format
+msgid "--More-- This is a searchable index. Use %s to search."
+msgstr "--Mais-- Este é um índice de busca. Use %s para procurar."
+
+#: LYMessages.c:161
+msgid "You have entered an invalid link number."
+msgstr "Você entrou um número inválido de link."
+
+#. #define SOURCE_HELP
+#: LYMessages.c:163
+msgid "Currently viewing document source. Press '\\' to return to rendered version."
+msgstr "Vendo a fonte do documento.Pressione '\\' para voltar ao documento."
+
+#. #define NOVICE_LINE_ONE
+#: LYMessages.c:165
+msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
+msgstr "Setas para cima/baixo move.A direita segue um link; A esquerda para voltar.\n"
+
+#. #define NOVICE_LINE_TWO
+#: LYMessages.c:167
+msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
+msgstr "H)Ajuda O)Opções P)Imprimir G)Segue M)Principal Q)Sair /=procura [delete]=Histórico \n"
+
+#. #define NOVICE_LINE_TWO_A
+#: LYMessages.c:169
+msgid " O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)uit \n"
+msgstr "O)Comandos H)Ajuda K)Teclas G)Segue P)Imprimir M)Principal o)opções Q)Sair\n"
+
+#. #define NOVICE_LINE_TWO_B
+#: LYMessages.c:171
+msgid " O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n"
+msgstr "O)Outros comandos B)Volta E)Edita D)Copia ^R)Recarrega ^W)Tela procura doc:\n"
+
+#. #define NOVICE_LINE_TWO_C
+#: LYMessages.c:173
+msgid "O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)emove \n"
+msgstr "O)Comandos|C)Comentário|<delete>Marcações|V)Visualizar|A) Adicionar|R)Remover\n"
+
+#. #define FORM_NOVICELINE_ONE
+#: LYMessages.c:175
+msgid " Enter text into the field by typing on the keyboard "
+msgstr " Entre com o texto no campo digitando no teclado"
+
+#. #define FORM_NOVICELINE_TWO
+#: LYMessages.c:177
+msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
+msgstr "Ctrl-U apaga todo o texto do campo. [Backspace] apaga um caractere"
+
+#. #define FORM_NOVICELINE_TWO_DELBL
+#: LYMessages.c:179
+msgid " Ctrl-U to delete text in field, [Backspace] to delete a character "
+msgstr "Ctrl-U apaga todo o texto do campo. [Backspace] apaga um caractere"
+
+#. #define FORM_NOVICELINE_TWO_VAR
+#: LYMessages.c:181
+#, c-format
+msgid " %s to delete all text in field, [Backspace] to delete a character "
+msgstr "%s apaga todo o texto do campo. [Backspace] apaga um caractere"
+
+#. #define FORM_NOVICELINE_TWO_DELBL_VAR
+#: LYMessages.c:183
+#, c-format
+msgid " %s to delete text in field, [Backspace] to delete a character "
+msgstr "%s apaga todo o texto do campo. [Backspace] apaga um caractere"
+
+#. mailto
+#: LYMessages.c:186
+msgid "Malformed mailto form submission! Cancelled!"
+msgstr "Formulário de envio de email mal-formado! Cancelado!"
+
+#: LYMessages.c:187
+msgid "Warning! Control codes in mail address replaced by ?"
+msgstr "Atenção! Codificação de endereço de email alterado por ?"
+
+#: LYMessages.c:188
+msgid "Mail disallowed! Cannot submit."
+msgstr "E-mail desabilitado!! Impossível enviar."
+
+#: LYMessages.c:189
+msgid "Mailto form submission failed!"
+msgstr "Envio de formulário de email falhou!"
+
+#: LYMessages.c:190
+msgid "Mailto form submission Cancelled!!!"
+msgstr "Envio de formulário de e-mail cancelado!!"
+
+#: LYMessages.c:191
+msgid "Sending form content..."
+msgstr "Enviando dados do formulário..."
+
+#: LYMessages.c:192
+msgid "No email address is present in mailto URL!"
+msgstr "Endereço de e-mail não está presente no campo de E-mail!"
+
+#. #define MAILTO_URL_TEMPOPEN_FAILED
+#: LYMessages.c:194
+msgid "Unable to open temporary file for mailto URL!"
+msgstr "Impossível abrir arquivo temporário para o campo de e-mail!"
+
+#. #define INC_ORIG_MSG_PROMPT
+#: LYMessages.c:196
+msgid "Do you wish to include the original message?"
+msgstr "Você quer imcluir a mensagem original?"
+
+#. #define INC_PREPARSED_MSG_PROMPT
+#: LYMessages.c:198
+msgid "Do you wish to include the preparsed source?"
+msgstr "Você quer incluir o arquivo fonte?"
+
+#. #define SPAWNING_EDITOR_FOR_MAIL
+#: LYMessages.c:200
+msgid "Spawning your selected editor to edit mail message"
+msgstr "Chamando o editor selecionado para editar o email."
+
+#. #define ERROR_SPAWNING_EDITOR
+#: LYMessages.c:202
+msgid "Error spawning editor, check your editor definition in the options menu"
+msgstr "Erro chamando o editor, cheque as configurações de seu editor em opções"
+
+#: LYMessages.c:203
+msgid "Send this comment?"
+msgstr "Envia este comentário?"
+
+#: LYMessages.c:204
+msgid "Send this message?"
+msgstr "Envia esta mensagem?"
+
+#: LYMessages.c:205
+msgid "Sending your message..."
+msgstr "Enviando sua mensagem..."
+
+#: LYMessages.c:206
+msgid "Sending your comment:"
+msgstr "Enviando seu comentário..."
+
+#. textarea
+#: LYMessages.c:209
+msgid "Not in a TEXTAREA; cannot use external editor."
+msgstr "Fora da área de texto: impossível usar um editor externo."
+
+#: LYMessages.c:210
+msgid "Not in a TEXTAREA; cannot use command."
+msgstr "Fora da área de texto: impossível usar um editor externo."
+
+#: LYMessages.c:213
+msgid "file: ACTIONs are disallowed!"
+msgstr "arquivo: ACTION está desabilitado!"
+
+#. #define FILE_SERVED_LINKS_DISALLOWED
+#: LYMessages.c:215
+msgid "file: URLs via served links are disallowed!"
+msgstr "arquivo: URLs através de links estão desabilitadas!"
+
+#: LYMessages.c:216
+msgid "Access to local files denied."
+msgstr "Acesso aos arquivos ocultos está desabilitado!"
+
+#: LYMessages.c:217
+msgid "file: URLs via bookmarks are disallowed!"
+msgstr "arquivo: URLs através de 'favoritos' estão desabilitadas!"
+
+#. #define SPECIAL_VIA_EXTERNAL_DISALLOWED
+#: LYMessages.c:219
+msgid "This special URL is not allowed in external documents!"
+msgstr "Esta URL em particular não permite entrada em documentos externos!"
+
+#: LYMessages.c:220
+msgid "Press <return> to return to Lynx."
+msgstr "Pressione <enter> para voltar ao Lynx."
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:223
+msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
+msgstr "Chamando subprocessos DCL. Use 'logout' para voltar ao Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:227
+msgid "Type EXIT to return to Lynx.\n"
+msgstr "Digite EXIT para voltar ao Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:230
+msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
+msgstr "Chamando seu shell padrão. Use 'exit' para voltar ao Lynx.\n"
+
+#: LYMessages.c:233
+msgid "Spawning is currently disabled."
+msgstr "Chamadas estão atualmente desabilitadas."
+
+#: LYMessages.c:234
+msgid "The 'd'ownload command is currently disabled."
+msgstr "O comando de 'd'ownload está atualmente desabilitado."
+
+#: LYMessages.c:235
+msgid "You cannot download an input field."
+msgstr "Você não pode copiar um campo de entrada."
+
+#: LYMessages.c:236
+msgid "Form has a mailto action! Cannot download."
+msgstr "O formulário tem uma ação de envio de email. Impossível copiar."
+
+#: LYMessages.c:237
+msgid "You cannot download a mailto: link."
+msgstr "Você não pode copiar uma ligação de e-mail."
+
+#: LYMessages.c:238
+msgid "You cannot download cookies."
+msgstr "Você não pode copiar cookies."
+
+#: LYMessages.c:239
+msgid "You cannot download a printing option."
+msgstr "Você não pode copiar uma opção de impressão."
+
+#: LYMessages.c:240
+msgid "You cannot download an upload option."
+msgstr "Você não pode copiar uma opção de envio de arquivos."
+
+#: LYMessages.c:241
+msgid "You cannot download an permit option."
+msgstr "Você não pode copiar uma opção de permissão."
+
+#: LYMessages.c:242
+msgid "This special URL cannot be downloaded!"
+msgstr "Esta URL em particular não pode ser copiada."
+
+#: LYMessages.c:243
+msgid "Nothing to download."
+msgstr "Nada a fazer."
+
+#: LYMessages.c:244
+msgid "Trace ON!"
+msgstr "Traçador de rotas ligado!"
+
+#: LYMessages.c:245
+msgid "Trace OFF!"
+msgstr "Traçador de rotas desligado!"
+
+#. #define CLICKABLE_IMAGES_ON
+#: LYMessages.c:247
+msgid "Links will be included for all images! Reloading..."
+msgstr "Os links serão incluídos em todas as imagens! Recarregando..."
+
+#. #define CLICKABLE_IMAGES_OFF
+#: LYMessages.c:249
+msgid "Standard image handling restored! Reloading..."
+msgstr "Imagem padrão de ponteiro restaurada! Recarregando..."
+
+#. #define PSEUDO_INLINE_ALTS_ON
+#: LYMessages.c:251
+msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
+msgstr "Pseudo nomes serão incluídos sem os nomes alternativos. Recarregando..."
+
+#. #define PSEUDO_INLINE_ALTS_OFF
+#: LYMessages.c:253
+msgid "Inlines without an ALT string specified will be ignored! Reloading..."
+msgstr "Campos sem um nome alternativo serão ignorados! Recarregando..."
+
+#: LYMessages.c:254
+msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
+msgstr "Modo Raw 8-bit ou CJK estão desativados. Atualizando..."
+
+#: LYMessages.c:255
+msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
+msgstr "Modo Raw 8-bit ou CJK estão ativados. Atualizando..."
+
+#. #define HEAD_D_L_OR_CANCEL
+#: LYMessages.c:257
+msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
+msgstr "Envia pedido de HEAD para D) Documento ou L) Link ou C) Cancela (d,l,c):"
+
+#. #define HEAD_D_OR_CANCEL
+#: LYMessages.c:259
+msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
+msgstr "Envia pedido de HEAD para D) Documento ou C) Cancela (d,c):"
+
+#: LYMessages.c:260
+msgid "Sorry, the document is not an http URL."
+msgstr "Desculpe, o documento não é no formato de endereço http."
+
+#: LYMessages.c:261
+msgid "Sorry, the link is not an http URL."
+msgstr "Desculpe, esta ligação não é um endereço http."
+
+#: LYMessages.c:262
+msgid "Sorry, the ACTION for this form is disabled."
+msgstr "Desculpe, a ACTION para este formulário está desabilitada."
+
+#. #define FORM_ACTION_NOT_HTTP_URL
+#: LYMessages.c:264
+msgid "Sorry, the ACTION for this form is not an http URL."
+msgstr "Desculpe, a ACTION para este formulário não é um endereço http."
+
+#: LYMessages.c:265
+msgid "Not an http URL or form ACTION!"
+msgstr "Não há um endereço http ou ação de formulário!"
+
+#: LYMessages.c:266
+msgid "This special URL cannot be a form ACTION!"
+msgstr "Esta URL não tem uma ação de formulário!"
+
+#: LYMessages.c:267
+msgid "URL is not in starting realm!"
+msgstr "Esta URL não tem um domínio inicial!"
+
+#: LYMessages.c:268
+msgid "News posting is disabled!"
+msgstr "Postagem de NEWS está desabilitada!"
+
+#: LYMessages.c:269
+msgid "File management support is disabled!"
+msgstr "Suporte a gerenciamento de arquivos está desabilitado!"
+
+#: LYMessages.c:270
+msgid "No jump file is currently available."
+msgstr "Nenhum arquivo de pulo está disponível."
+
+#: LYMessages.c:271
+msgid "Jump to (use '?' for list): "
+msgstr "Siga para (use '?' para ajuda):"
+
+#: LYMessages.c:272
+msgid "Jumping to a shortcut URL is disallowed!"
+msgstr "Atalho URL de pulo está desabilitado!"
+
+#: LYMessages.c:273
+msgid "Random URL is disallowed! Use a shortcut."
+msgstr "URL randômica está sesabilitada! Use um atalho."
+
+#: LYMessages.c:274
+msgid "No random URLs have been used thus far."
+msgstr "Nenhuma URL randômica foi usada ultimamente."
+
+#: LYMessages.c:275
+msgid "Bookmark features are currently disabled."
+msgstr "Insersão de URL no Livro de Marcações está desabilitada neste momento."
+
+#: LYMessages.c:276
+msgid "Execution via bookmarks is disabled."
+msgstr "Execução via Livro de Marcações está desabilitada."
+
+#. #define BOOKMARK_FILE_NOT_DEFINED
+#: LYMessages.c:278
+#, c-format
+msgid "Bookmark file is not defined. Use %s to see options."
+msgstr "Livro de Marcações não está definido. Use %s para ver as opções."
+
+#. #define NO_TEMP_FOR_HOTLIST
+#: LYMessages.c:280
+msgid "Unable to open tempfile for X Mosaic hotlist conversion."
+msgstr "Impossível abrir arquivo temporário para conversão X Mosaic"
+
+#: LYMessages.c:281
+msgid "ERROR - unable to open bookmark file."
+msgstr "ERRO - Impossível abrir arquivo de Livro de Marcações."
+
+#. #define BOOKMARK_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:283
+msgid "Unable to open bookmark file for deletion of link."
+msgstr "Impossível arir arquivo do Livro de Marcações para apagar a ligação."
+
+#. #define BOOKSCRA_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:285
+msgid "Unable to open scratch file for deletion of link."
+msgstr "Impossível abrir arquivo de marcação para apagar a ligação."
+
+#: LYMessages.c:287
+msgid "Error renaming scratch file."
+msgstr "Erro renomeando arquivo de marcação."
+
+#: LYMessages.c:289
+msgid "Error renaming temporary file."
+msgstr "Erro renomeando arquivo temporário."
+
+#. #define BOOKTEMP_COPY_FAIL
+#: LYMessages.c:291
+msgid "Unable to copy temporary file for deletion of link."
+msgstr "Impossível copiar arquivo temporário para apagar a ligação."
+
+#. #define BOOKTEMP_REOPEN_FAIL_FOR_DEL
+#: LYMessages.c:293
+msgid "Unable to reopen temporary file for deletion of link."
+msgstr "Impossível reabrir arquivo temporário para deleção de ligação."
+
+#. #define BOOKMARK_LINK_NOT_ONE_LINE
+#: LYMessages.c:296
+msgid "Link is not by itself all on one line in bookmark file."
+msgstr "Ligação não é a única na linha do arquivo do Livro de Marcações."
+
+#: LYMessages.c:297
+msgid "Bookmark deletion failed."
+msgstr "Deleção do Livro de Marcações falhou!"
+
+#. #define BOOKMARKS_NOT_TRAVERSED
+#: LYMessages.c:299
+msgid "Bookmark files cannot be traversed (only http URLs)."
+msgstr "Endereços do Livro de Marcações não pode ser transversal (somente http URLs)."
+
+#. #define BOOKMARKS_NOT_OPEN
+#: LYMessages.c:301
+msgid "Unable to open bookmark file, use 'a' to save a link first"
+msgstr "Impossível abrir Livro de Marcações, use 'a' para salvar a ligação primeiro."
+
+#: LYMessages.c:302
+msgid "There are no links in this bookmark file!"
+msgstr "Não existem ligações neste Livro de Marcações."
+
+#. #define BOOK_D_L_OR_CANCEL
+#: LYMessages.c:304
+msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
+msgstr "D)Salvar documento ou L)Marque no Livro de Marcações ou C)Cancela? (d,l,c):"
+
+#: LYMessages.c:305
+msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
+msgstr "D) Salva documento no Livro de Marcações ou C) Cancela> (d,c): "
+
+#: LYMessages.c:306
+msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
+msgstr "L) Salva ligação no Livro de Marcações ou C) Cancela? (l,c):"
+
+#. #define NOBOOK_POST_FORM
+#: LYMessages.c:308
+msgid "Documents from forms with POST content cannot be saved as bookmarks."
+msgstr "Formulários com função de postar não podem ser marcados no Livro de Marcações."
+
+#: LYMessages.c:309
+msgid "Cannot save form fields/links"
+msgstr "Impossível salvar campos de formulário/ligações"
+
+#. #define NOBOOK_HSML
+#: LYMessages.c:311
+msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
+msgstr "Histórico, informações, menu e lista de arquivos não podem ser salvos no Livro de Marcações."
+
+#. #define CONFIRM_BOOKMARK_DELETE
+#: LYMessages.c:313
+msgid "Do you really want to delete this link from your bookmark file?"
+msgstr "Você realmente quer apagar esta ligação do seu Livro de Marcações?"
+
+#: LYMessages.c:314
+msgid "Malformed address."
+msgstr "Endereço mal formado."
+
+#. #define HISTORICAL_ON_MINIMAL_OFF
+#: LYMessages.c:316
+msgid "Historical comment parsing ON (Minimal is overridden)!"
+msgstr "Mensagens do histórico de tratamento estão ligadas (Ignorando mínimas)!"
+
+#. #define HISTORICAL_OFF_MINIMAL_ON
+#: LYMessages.c:318
+msgid "Historical comment parsing OFF (Minimal is in effect)!"
+msgstr "Mensagens do histórico de tratamento estão desligadas (Não ignorando nenhuma)!"
+
+#. #define HISTORICAL_ON_VALID_OFF
+#: LYMessages.c:320
+msgid "Historical comment parsing ON (Valid is overridden)!"
+msgstr "Mensagens do histórico de tratamento estão ligadas (Ignorando as válidas)!"
+
+#. #define HISTORICAL_OFF_VALID_ON
+#: LYMessages.c:322
+msgid "Historical comment parsing OFF (Valid is in effect)!"
+msgstr "Mensagens do histórico de tratamento estão desligadas (Incluindo as válidas)!"
+
+#. #define MINIMAL_ON_IN_EFFECT
+#: LYMessages.c:324
+msgid "Minimal comment parsing ON (and in effect)!"
+msgstr "Comentários mínimos de tratamento estão ativos e ligados!"
+
+#. #define MINIMAL_OFF_VALID_ON
+#: LYMessages.c:326
+msgid "Minimal comment parsing OFF (Valid is in effect)!"
+msgstr "Comentários mínimos de tratamento desligados. (Estão em efeitos os válidos)!"
+
+#. #define MINIMAL_ON_BUT_HISTORICAL
+#: LYMessages.c:328
+msgid "Minimal comment parsing ON (but Historical is in effect)!"
+msgstr "Comentários mínimos de tratamento ativos. (mas histórico está ativado)!"
+
+#. #define MINIMAL_OFF_HISTORICAL_ON
+#: LYMessages.c:330
+msgid "Minimal comment parsing OFF (Historical is in effect)!"
+msgstr "Comentários mínimos de tratamento desativados. (Histórico está ativado)!"
+
+#: LYMessages.c:331
+msgid "Soft double-quote parsing ON!"
+msgstr "Interpretação de aspas duplas ativada!"
+
+#: LYMessages.c:332
+msgid "Soft double-quote parsing OFF!"
+msgstr "Interpretação de aspas duplas desativada!"
+
+#: LYMessages.c:333
+msgid "Now using TagSoup parsing of HTML."
+msgstr "Agora usando formato TagSoup de tratamento de HTML. "
+
+#: LYMessages.c:334
+msgid "Now using SortaSGML parsing of HTML!"
+msgstr "Agora usando formato SortaSGML de tratamento de HTML!"
+
+#: LYMessages.c:335
+msgid "You are already at the end of this document."
+msgstr "Você ja está no fim do documento."
+
+#: LYMessages.c:336
+msgid "You are already at the beginning of this document."
+msgstr "Você ja está no início do documento."
+
+#: LYMessages.c:337
+#, c-format
+msgid "You are already at page %d of this document."
+msgstr "Você está na página %d deste documento."
+
+#: LYMessages.c:338
+#, c-format
+msgid "Link number %d already is current."
+msgstr "Ligação número %d já esta ativada."
+
+#: LYMessages.c:339
+msgid "You are already at the first document"
+msgstr "Você está no primeiro documento."
+
+#: LYMessages.c:340
+msgid "There are no links above this line of the document."
+msgstr "Não existem ligações acima desta linha do documento."
+
+#: LYMessages.c:341
+msgid "There are no links below this line of the document."
+msgstr "Não existem ligações abaixo desta linha do documento."
+
+#. #define MAXLEN_REACHED_DEL_OR_MOV
+#: LYMessages.c:343
+msgid "Maximum length reached! Delete text or move off field."
+msgstr "Tamanho máximo atingido! Apague uma parte do texto ou saia do campo."
+
+#. #define NOT_ON_SUBMIT_OR_LINK
+#: LYMessages.c:345
+msgid "You are not on a form submission button or normal link."
+msgstr "Você não está num botão de envio de formulário ou ligação normal."
+
+#. #define NEED_CHECKED_RADIO_BUTTON
+#: LYMessages.c:347
+msgid "One radio button must be checked at all times!"
+msgstr "Pelo menos um botão de rádio deve estar marcado sempre!"
+
+#: LYMessages.c:348
+msgid "No submit button for this form, submit single text field?"
+msgstr ""
+
+#: LYMessages.c:349
+msgid "Do you want to go back to the previous document?"
+msgstr "Você quer voltar ao documento inicial?"
+
+#: LYMessages.c:350
+msgid "Use arrows or tab to move off of field."
+msgstr "Use setas ou TAB para sair do campo."
+
+#. #define ENTER_TEXT_ARROWS_OR_TAB
+#: LYMessages.c:352
+msgid "Enter text. Use arrows or tab to move off of field."
+msgstr "Digite o texto. Use setas ou TAB para sair do campo."
+
+#: LYMessages.c:353
+msgid "** Bad HTML!! No form action defined. **"
+msgstr "** Tag HTML desconhecida!! Sem ação de formulário definida. **"
+
+#: LYMessages.c:354
+msgid "Bad HTML!! Unable to create popup window!"
+msgstr "** Tag HTML desconhecida ** Impossível criar janela de pop-up!"
+
+#: LYMessages.c:355
+msgid "Unable to create popup window!"
+msgstr "Impossível criar janela pop-up!"
+
+#: LYMessages.c:356
+msgid "Goto a random URL is disallowed!"
+msgstr "Ir para URL randômica está desabilitado!"
+
+#: LYMessages.c:357
+msgid "Goto a non-http URL is disallowed!"
+msgstr "Ir para não-http URL está desabilitado!"
+
+#: LYMessages.c:358
+#, c-format
+msgid "You are not allowed to goto \"%s\" URLs"
+msgstr "Você não pode ir para \"%s\" URLs"
+
+#: LYMessages.c:359
+msgid "URL to open: "
+msgstr "URL para ir:"
+
+#: LYMessages.c:360
+msgid "Edit the current Goto URL: "
+msgstr "Edite a URL que será apresentada:"
+
+#: LYMessages.c:361
+msgid "Edit the previous Goto URL: "
+msgstr "Edite a URL que foi escolhida anteriormente:"
+
+#: LYMessages.c:362
+msgid "Edit a previous Goto URL: "
+msgstr "Edite a URL que foi apresentada anteriormente:"
+
+#: LYMessages.c:363
+msgid "Current document has POST data."
+msgstr "O documento corrente tem uma ação de postagem"
+
+#: LYMessages.c:364
+msgid "Edit this document's URL: "
+msgstr "Edite este documento de URL:"
+
+#: LYMessages.c:365
+msgid "Edit the current link's URL: "
+msgstr "Edite o link corrente:"
+
+#: LYMessages.c:366
+msgid "You cannot edit File Management URLs"
+msgstr "Você não pode editar Gerenciadores de arquivos de URLs"
+
+#: LYMessages.c:367
+msgid "Enter a database query: "
+msgstr "Digite uma pesquisa de banco de dados:"
+
+#: LYMessages.c:368
+msgid "Enter a whereis query: "
+msgstr "Digite uma pesquisa de 'onde está':"
+
+#: LYMessages.c:369
+msgid "Edit the current query: "
+msgstr "Edite a pesquisa atual:"
+
+#: LYMessages.c:370
+msgid "Edit the previous query: "
+msgstr "Edite a pesquisa anterior:"
+
+#: LYMessages.c:371
+msgid "Edit a previous query: "
+msgstr "Edite uma pesquisa anterior:"
+
+#. #define USE_C_R_TO_RESUB_CUR_QUERY
+#: LYMessages.c:373
+msgid "Use Control-R to resubmit the current query."
+msgstr "Use Control-R para reenviar a pesquisa atual."
+
+#: LYMessages.c:374
+msgid "Edit the current shortcut: "
+msgstr "Edite o atalho atual:"
+
+#: LYMessages.c:375
+msgid "Edit the previous shortcut: "
+msgstr "Edite o atalho anterior:"
+
+#: LYMessages.c:376
+msgid "Edit a previous shortcut: "
+msgstr "Edite um atalho anterior:"
+
+#: LYMessages.c:377
+#, c-format
+msgid "Key '%c' is not mapped to a jump file!"
+msgstr "Tecla '%c' não está mapeada para abrir um arquivo!"
+
+#: LYMessages.c:378
+msgid "Cannot locate jump file!"
+msgstr "Não foi possível localizar um arquivo de salto!"
+
+#: LYMessages.c:379
+msgid "Cannot open jump file!"
+msgstr "Não foi possivel abrir um arquivo de salto!"
+
+#: LYMessages.c:380
+msgid "Error reading jump file!"
+msgstr "Erro lendo arquivo de salto!"
+
+#: LYMessages.c:381
+msgid "Out of memory reading jump file!"
+msgstr "Estouro de memória, lendo arquivo de salto!"
+
+#: LYMessages.c:382
+msgid "Out of memory reading jump table!"
+msgstr "Estouro de memória, lento tabela de atalhos!"
+
+#: LYMessages.c:383
+msgid "No index is currently available."
+msgstr "Sem arquivo indexador disponível."
+
+#. #define CONFIRM_MAIN_SCREEN
+#: LYMessages.c:385
+msgid "Do you really want to go to the Main screen?"
+msgstr "Você quer realmente ir para o menu principal?"
+
+#: LYMessages.c:386
+msgid "You are already at main screen!"
+msgstr "Você ja esta na tela inicial!"
+
+#. #define NOT_ISINDEX
+#: LYMessages.c:388
+msgid "Not a searchable indexed document -- press '/' to search for a text string"
+msgstr "Área não passivel de busca - pressione '/' para procurar no documento."
+
+#. #define NO_OWNER
+#: LYMessages.c:390
+msgid "No owner is defined for this file so you cannot send a comment"
+msgstr "Nenhum dono definido para este arquivo, você não pode enviar um comentário"
+
+#: LYMessages.c:391
+#, c-format
+msgid "No owner is defined. Use %s?"
+msgstr "Nehum dono está definido. Uso %s?"
+
+#: LYMessages.c:392
+msgid "Do you wish to send a comment?"
+msgstr "Você quer que envio um comentário?"
+
+#: LYMessages.c:393
+msgid "Mail is disallowed so you cannot send a comment"
+msgstr "Email está desabilitado, portanto você não pode enviar um comentário"
+
+#: LYMessages.c:394
+msgid "The 'e'dit command is currently disabled."
+msgstr "Comando 'e' Edite está atualmente desabilitado."
+
+#: LYMessages.c:395
+msgid "External editing is currently disabled."
+msgstr "Suporte externo está desabilitado."
+
+#: LYMessages.c:396
+msgid "System error - failure to get status."
+msgstr "Erro de sistema - Falha ao receber estado."
+
+#: LYMessages.c:397
+msgid "No editor is defined!"
+msgstr "Nenhum editor foi definido"
+
+#: LYMessages.c:398
+msgid "The 'p'rint command is currently disabled."
+msgstr "Comando 'p' Imprimir está atualmente desabilitado."
+
+#: LYMessages.c:399
+msgid "Document has no Toolbar links or Banner."
+msgstr "O documento não tem uma barra de links ou Faixa."
+
+#: LYMessages.c:400
+msgid "Unable to open traversal file."
+msgstr "Impossível abrir um arquivo transversal."
+
+#: LYMessages.c:401
+msgid "Unable to open traversal found file."
+msgstr "Impossível abrir o arquivo transversal encontrado."
+
+#: LYMessages.c:402
+msgid "Unable to open reject file."
+msgstr "Impossível de abrir um arquivo rejeitado."
+
+#: LYMessages.c:403
+msgid "Unable to open traversal errors output file"
+msgstr "Impossível de abrir o log de erros transversal"
+
+#: LYMessages.c:404
+msgid "TRAVERSAL WAS INTERRUPTED"
+msgstr "TRANSMISSÃO TRANSVERSAL FOI INTERROMPIDA."
+
+#: LYMessages.c:405
+msgid "Follow link (or goto link or page) number: "
+msgstr "Segue ligação (ou vai para a pagina de ligações) número:"
+
+#: LYMessages.c:406
+msgid "Select option (or page) number: "
+msgstr "Seleciona a opção (ou página) número:"
+
+#: LYMessages.c:407
+#, c-format
+msgid "Option number %d already is current."
+msgstr "Opção número %d ja está ativa."
+
+#. #define ALREADY_AT_OPTION_END
+#: LYMessages.c:409
+msgid "You are already at the end of this option list."
+msgstr "Você ja está no fim desta opçao."
+
+#. #define ALREADY_AT_OPTION_BEGIN
+#: LYMessages.c:411
+msgid "You are already at the beginning of this option list."
+msgstr "Você ja esta no começo desta lista de opções."
+
+#. #define ALREADY_AT_OPTION_PAGE
+#: LYMessages.c:413
+#, c-format
+msgid "You are already at page %d of this option list."
+msgstr "Você ja está na página %d desta lista de opções."
+
+#: LYMessages.c:414
+msgid "You have entered an invalid option number."
+msgstr "Você entrou com um número inválido de opção."
+
+#: LYMessages.c:415
+msgid "** Bad HTML!! Use -trace to diagnose. **"
+msgstr "** Tag errada no HTML!! Use -trace para diagnosticar. **"
+
+#: LYMessages.c:416
+msgid "Give name of file to save in"
+msgstr "Informe o nome do arquivo a salvar"
+
+#: LYMessages.c:417
+msgid "Can't save data to file -- please run WWW locally"
+msgstr "Impossível salvar dados no arquivo -- por favor, rode WWW localmente. "
+
+#: LYMessages.c:418
+msgid "Can't open temporary file!"
+msgstr "Impossível abrir arquivo temporário!"
+
+#: LYMessages.c:419
+msgid "Can't open output file! Cancelling!"
+msgstr "Impossível abrir arquivo de saída! Cancelando!"
+
+#: LYMessages.c:420
+msgid "Execution is disabled."
+msgstr "Executar está desabilitado!"
+
+#. #define EXECUTION_DISABLED_FOR_FILE
+#: LYMessages.c:422
+#, c-format
+msgid "Execution is not enabled for this file. See the Options menu (use %s)."
+msgstr "Executar não disponível para este arquivo.Veja o menu de Optins (use %s)."
+
+#. #define EXECUTION_NOT_COMPILED
+#: LYMessages.c:424
+msgid "Execution capabilities are not compiled into this version."
+msgstr "Capacidade de execução não está compilada nesta versão."
+
+#: LYMessages.c:425
+msgid "This file cannot be displayed on this terminal."
+msgstr "Este arquivo não pode ser mostrado neste terminal."
+
+#. #define CANNOT_DISPLAY_FILE_D_OR_C
+#: LYMessages.c:427
+msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
+msgstr "Este arquivo não pode ser mostrado neste terminal: D) Copia ou C) Cancela"
+
+#: LYMessages.c:428
+#, c-format
+msgid "%s D)ownload, or C)ancel"
+msgstr "%s D) Copia ou C) Cancela"
+
+#: LYMessages.c:429
+msgid "Cancelling file."
+msgstr "Cancelando arquivo."
+
+#: LYMessages.c:430
+msgid "Retrieving file. - PLEASE WAIT -"
+msgstr "Recebendo arquivo, AGUARDE!"
+
+#: LYMessages.c:431
+msgid "Enter a filename: "
+msgstr "Entre com um nome para o arquivo:"
+
+#: LYMessages.c:432
+msgid "Edit the previous filename: "
+msgstr "Edite o nome anterior:"
+
+#: LYMessages.c:433
+msgid "Edit a previous filename: "
+msgstr "Edite um arquivo anterior:"
+
+#: LYMessages.c:434
+msgid "Enter a new filename: "
+msgstr "Entre com um novo nome:"
+
+#: LYMessages.c:435
+msgid "File name may not begin with a dot."
+msgstr "Nome do arquivo não pode começar com um ponto."
+
+#: LYMessages.c:437
+msgid "File exists. Create higher version?"
+msgstr "Arquivo existente. Criar nova versão?"
+
+#: LYMessages.c:439
+msgid "File exists. Overwrite?"
+msgstr "Arquivo existente. Sobreescrever?"
+
+#: LYMessages.c:441
+msgid "Cannot write to file."
+msgstr "Impossível gravar no arquivo"
+
+#: LYMessages.c:442
+msgid "ERROR! - download command is misconfigured."
+msgstr "ERRO! - comando de cópia está mal configurado."
+
+#: LYMessages.c:443
+msgid "Unable to download file."
+msgstr "Impossível copiar arquivo."
+
+#: LYMessages.c:444
+msgid "Reading directory..."
+msgstr "Lendo diretório..."
+
+#: LYMessages.c:445
+msgid "Building directory listing..."
+msgstr "Criando lista de diretórios..."
+
+#: LYMessages.c:446
+msgid "Saving..."
+msgstr "Salvando..."
+
+#: LYMessages.c:447
+#, c-format
+msgid "Could not edit file '%s'."
+msgstr "Impossível editar o arquivo '%s'."
+
+#: LYMessages.c:448
+msgid "Unable to access document!"
+msgstr "Não foi possível acessar o documento!"
+
+#: LYMessages.c:449
+msgid "Could not access file."
+msgstr "Impossível acessar o arquivo."
+
+#: LYMessages.c:450
+msgid "Could not access directory."
+msgstr "Impossível acessar diretório."
+
+#: LYMessages.c:451
+msgid "Could not load data."
+msgstr "Impossível ler dados."
+
+#. #define CANNOT_EDIT_REMOTE_FILES
+#: LYMessages.c:453
+msgid "Lynx cannot currently (e)dit remote WWW files."
+msgstr "Lynx não pode atualmente editar um arquivo WWW remoto."
+
+#. #define CANNOT_EDIT_FIELD
+#: LYMessages.c:455
+msgid "This field cannot be (e)dited with an external editor."
+msgstr "Este campo não pode ser editado por um editor externo."
+
+#: LYMessages.c:456
+msgid "Bad rule"
+msgstr "Domínio inválido"
+
+#: LYMessages.c:457
+msgid "Insufficient operands:"
+msgstr "Operadores insuficientes:"
+
+#: LYMessages.c:458
+msgid "You are not authorized to edit this file."
+msgstr "Você não está autorizado a editar este arquivo."
+
+#: LYMessages.c:459
+msgid "Title: "
+msgstr "Título: "
+
+#: LYMessages.c:460
+msgid "Subject: "
+msgstr "Assunto: "
+
+#: LYMessages.c:461
+msgid "Username: "
+msgstr "Nome do Usuário: "
+
+#: LYMessages.c:462
+msgid "Password: "
+msgstr "Senha: "
+
+#: LYMessages.c:463
+msgid "lynx: Username and Password required!!!"
+msgstr "lynx: Nome do usuário e senha são requeridos!!!"
+
+#: LYMessages.c:464
+msgid "lynx: Password required!!!"
+msgstr "lynx: Senha requerida!!!"
+
+#: LYMessages.c:465
+msgid "Clear all authorization info for this session?"
+msgstr "Limpar todas as informações de autorização desta seção?"
+
+#: LYMessages.c:466
+msgid "Authorization info cleared."
+msgstr "Informações de autorização foram apagadas."
+
+#: LYMessages.c:467
+msgid "Authorization failed. Retry?"
+msgstr "Falha na autorização. Repetir?"
+
+#: LYMessages.c:468
+msgid "cgi support has been disabled."
+msgstr "Suporte a CGI foi desabilitado pelo administrador."
+
+#. #define CGI_NOT_COMPILED
+#: LYMessages.c:470
+msgid "Lynxcgi capabilities are not compiled into this version."
+msgstr "Capacidades do LynxCGI não foram compiladas com esta versão."
+
+#: LYMessages.c:471
+#, c-format
+msgid "Sorry, no known way of converting %s to %s."
+msgstr "Desculpe, não há protocolos disponíveis para converter %s em %s."
+
+#: LYMessages.c:472
+msgid "Unable to set up connection."
+msgstr "Imposível preparar conecção."
+
+#: LYMessages.c:473
+msgid "Unable to make connection"
+msgstr "Impossível criar conecção"
+
+#. #define MALFORMED_EXEC_REQUEST
+#: LYMessages.c:475
+msgid "Executable link rejected due to malformed request."
+msgstr "Ligação rejeitada por má formação da requisição."
+
+#. #define BADCHAR_IN_EXEC_LINK
+#: LYMessages.c:477
+#, c-format
+msgid "Executable link rejected due to `%c' character."
+msgstr "Ligação rejeitada devido ao caracter '%c'."
+
+#. #define RELPATH_IN_EXEC_LINK
+#: LYMessages.c:479
+msgid "Executable link rejected due to relative path string ('../')."
+msgstr "Ligação rejeitada devido ao caminho relativo errado ('../')."
+
+#. #define BADLOCPATH_IN_EXEC_LINK
+#: LYMessages.c:481
+msgid "Executable link rejected due to location or path."
+msgstr "Ligação rejeitada devido a localização ou caminho."
+
+#: LYMessages.c:482
+msgid "Mail access is disabled!"
+msgstr "Acesso ao Mail está desabilitado!"
+
+#. #define ACCESS_ONLY_LOCALHOST
+#: LYMessages.c:484
+msgid "Only files and servers on the local host can be accessed."
+msgstr "Somente arquivos e servidores no host local podem ser acessados."
+
+#: LYMessages.c:485
+msgid "Telnet access is disabled!"
+msgstr "Acesso telnet está desabilitado!"
+
+#. #define TELNET_PORT_SPECS_DISABLED
+#: LYMessages.c:487
+msgid "Telnet port specifications are disabled."
+msgstr "Especificações de porta telnet estão desabilitadas."
+
+#: LYMessages.c:488
+msgid "USENET news access is disabled!"
+msgstr "Acesso aos NEWS USENET está desabilitado!"
+
+#: LYMessages.c:489
+msgid "Rlogin access is disabled!"
+msgstr "Acesso Rlogin está desabilitado!"
+
+#: LYMessages.c:490
+msgid "Ftp access is disabled!"
+msgstr "Acesso FTP está desabilitado!"
+
+#: LYMessages.c:491
+msgid "There are no references from this document."
+msgstr "Não existem referências a partir documento."
+
+#: LYMessages.c:492
+msgid "There are only hidden links from this document."
+msgstr "Existem somente ligações ocultas a partir deste documento."
+
+#: LYMessages.c:494
+msgid "Unable to open command file."
+msgstr "Impossível abrir linha de comando."
+
+#: LYMessages.c:496
+msgid "News Post Cancelled!!!"
+msgstr "Postagem de NEWS cancelada!!"
+
+#. #define SPAWNING_EDITOR_FOR_NEWS
+#: LYMessages.c:498
+msgid "Spawning your selected editor to edit news message"
+msgstr "Chamando seu editor preferido para editar mensagens de NEWS."
+
+#: LYMessages.c:499
+msgid "Post this message?"
+msgstr "Postar esta mensagem?"
+
+#: LYMessages.c:500
+#, c-format
+msgid "Append '%s'?"
+msgstr "Acrescentar '%s'?"
+
+#: LYMessages.c:501
+msgid "Posting to newsgroup(s)..."
+msgstr "Postando aos newsgroup(s)..."
+
+#: LYMessages.c:503
+msgid "*** You have unread mail. ***"
+msgstr "*** Você tem emails não lidos ainda. ***"
+
+#: LYMessages.c:505
+msgid "*** You have mail. ***"
+msgstr "*** Você recebeu emails. ***"
+
+#: LYMessages.c:507
+msgid "*** You have new mail. ***"
+msgstr "*** Você recebeu novos emails. ***"
+
+#: LYMessages.c:508
+msgid "File insert cancelled!!!"
+msgstr "Inserção de arquivo cancelada!!!"
+
+#: LYMessages.c:509
+msgid "Not enough memory for file!"
+msgstr "Estouro de memória, lendo arquivo de salto!"
+
+#: LYMessages.c:510
+msgid "Can't open file for reading."
+msgstr "Impossóvel abrir arquivo para descompressão!"
+
+#: LYMessages.c:511
+msgid "File does not exist."
+msgstr "Arquivo inexistente."
+
+#: LYMessages.c:512
+msgid "File does not exist - reenter or cancel:"
+msgstr "Arquivo não existe - Repita ou cancele:"
+
+#: LYMessages.c:513
+msgid "File is not readable."
+msgstr "Arquivo não pode ser lido."
+
+#: LYMessages.c:514
+msgid "File is not readable - reenter or cancel:"
+msgstr "Arquivo não pode ser lido. Repita ou cancele:"
+
+#: LYMessages.c:515
+msgid "Nothing to insert - file is 0-length."
+msgstr "Nada a acrescentar - arquivo tem tamanho 0"
+
+#: LYMessages.c:516
+msgid "Save request cancelled!!!"
+msgstr "Salvamento de requisição cancelado!!!"
+
+#: LYMessages.c:517
+msgid "Mail request cancelled!!!"
+msgstr "Requisição de e-mail cancelada!!!"
+
+#. #define CONFIRM_MAIL_SOURCE_PREPARSED
+#: LYMessages.c:519
+msgid "Viewing preparsed source. Are you sure you want to mail it?"
+msgstr "Visualizando aquivo quebrado. Você tem certeza de que quer enviar este email?"
+
+#: LYMessages.c:520
+msgid "Please wait..."
+msgstr "Por favor aguarde...."
+
+#: LYMessages.c:521
+msgid "Mailing file. Please wait..."
+msgstr "Enviando email. Por favor aguarde..."
+
+#: LYMessages.c:522
+msgid "ERROR - Unable to mail file"
+msgstr "ERRO - Impossível enviar arquivo..."
+
+#. #define CONFIRM_LONG_SCREEN_PRINT
+#: LYMessages.c:524
+#, c-format
+msgid "File is %d screens long. Are you sure you want to print?"
+msgstr "Arquivo contém %d páginas. Você quer mesmo imprimir?"
+
+#: LYMessages.c:525
+msgid "Print request cancelled!!!"
+msgstr "Impressão da requisição foi cancelada!!!"
+
+#: LYMessages.c:526
+msgid "Press <return> to begin: "
+msgstr "Pressione <enter> para continuar:"
+
+#: LYMessages.c:527
+msgid "Press <return> to finish: "
+msgstr "Pressione <enter> para terminar:"
+
+#. #define CONFIRM_LONG_PAGE_PRINT
+#: LYMessages.c:529
+#, c-format
+msgid "File is %d pages long. Are you sure you want to print?"
+msgstr "O arquivo tem %d páginas. Tem certeza de que quer imprimir?"
+
+#. #define CHECK_PRINTER
+#: LYMessages.c:531
+msgid "Be sure your printer is on-line. Press <return> to start printing:"
+msgstr "Confira se sua impressora está on-line. Pressione <enter> para iniciar:"
+
+#: LYMessages.c:532
+msgid "ERROR - Unable to allocate file space!!!"
+msgstr "ERRO - Impossível alocar espaço para o arquivo!!!"
+
+#: LYMessages.c:533
+msgid "Unable to open tempfile"
+msgstr "Impossível criar arquivo temporário."
+
+#: LYMessages.c:534
+msgid "Unable to open print options file"
+msgstr "Impossível abrir arquivo de opções da inpressora."
+
+#: LYMessages.c:535
+msgid "Printing file. Please wait..."
+msgstr "Imprimindo. Por favor aguarde..."
+
+#: LYMessages.c:536
+msgid "Please enter a valid internet mail address: "
+msgstr "Por favor, entre com um endereço válido de email:"
+
+#: LYMessages.c:537
+msgid "ERROR! - printer is misconfigured!"
+msgstr "ERRO! - A impressora está mal configurada!!"
+
+#: LYMessages.c:538
+msgid "Image map from POST response not available!"
+msgstr "Imagem mapeada através da esposta do comando POST não está disponível!"
+
+#: LYMessages.c:539
+msgid "Misdirected client-side image MAP request!"
+msgstr "Requisição da imagem mapeada foi perdida!"
+
+#: LYMessages.c:540
+msgid "Client-side image MAP is not accessible!"
+msgstr "O mapeador de imagens não pôde ser acessado!!"
+
+#: LYMessages.c:541
+msgid "No client-side image MAPs are available!"
+msgstr "Não há programa mapeador de imagem disponível!"
+
+#: LYMessages.c:542
+msgid "Client-side image MAP is not available!"
+msgstr "O mapeador de imagens não está disponível!"
+
+#. #define OPTION_SCREEN_NEEDS_24
+#: LYMessages.c:545
+msgid "Screen height must be at least 24 lines for the Options menu!"
+msgstr "O comprimento da tela deve ter pelo menos 24 linhas para o menu de opções."
+
+#. #define OPTION_SCREEN_NEEDS_23
+#: LYMessages.c:547
+msgid "Screen height must be at least 23 lines for the Options menu!"
+msgstr "O comprimento da tela deve ter pelo menos 23 linhas para o menu de opções."
+
+#. #define OPTION_SCREEN_NEEDS_22
+#: LYMessages.c:549
+msgid "Screen height must be at least 22 lines for the Options menu!"
+msgstr "O comprimento da tela deve ter pelo menos 22 linhas para o menu de opçoes."
+
+#: LYMessages.c:551
+msgid "That key requires Advanced User mode."
+msgstr "Esta opção requere o modo de usuário avançado."
+
+#: LYMessages.c:552
+#, c-format
+msgid "Content-type: %s"
+msgstr "Content-type: %s"
+
+#: LYMessages.c:553
+msgid "Command: "
+msgstr "Comando:"
+
+#: LYMessages.c:554
+msgid "Unknown or ambiguous command"
+msgstr ""
+
+#: LYMessages.c:555
+msgid " Version "
+msgstr " Versão "
+
+#: LYMessages.c:556
+msgid " first"
+msgstr " primeiro."
+
+#: LYMessages.c:557
+msgid ", guessing..."
+msgstr ", solicitando..."
+
+#: LYMessages.c:558
+msgid "Permissions for "
+msgstr "Permissão para "
+
+#: LYMessages.c:559
+msgid "Select "
+msgstr "Selecione "
+
+#: LYMessages.c:560
+msgid "capital letter"
+msgstr "maiuscula"
+
+#: LYMessages.c:561
+msgid " of option line,"
+msgstr "da linha de opção."
+
+#: LYMessages.c:562
+msgid " to save,"
+msgstr " para salvar,"
+
+#: LYMessages.c:563
+msgid " to "
+msgstr " para "
+
+#: LYMessages.c:564
+msgid " or "
+msgstr " ou "
+
+#: LYMessages.c:565
+msgid " index"
+msgstr " index"
+
+#: LYMessages.c:566
+msgid " to return to Lynx."
+msgstr " para voltar ao Lynx"
+
+#: LYMessages.c:567
+msgid "Accept Changes"
+msgstr "Aceitar mudanças"
+
+#: LYMessages.c:568
+msgid "Reset Changes"
+msgstr "Limpar alterações"
+
+#: LYMessages.c:569
+msgid "Left Arrow cancels changes"
+msgstr "Setas a esquerda cancelam as mudanças"
+
+#: LYMessages.c:570
+msgid "Save options to disk"
+msgstr "Grava as opções no disco"
+
+#: LYMessages.c:571
+msgid "Hit RETURN to accept entered data."
+msgstr "Tecle ENTER para aceitar os dados fornecidos"
+
+#. #define ACCEPT_DATA_OR_DEFAULT
+#: LYMessages.c:573
+msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
+msgstr "Tecle ENTER para aceitar os dados.Delete para chamar os valores padrão."
+
+#: LYMessages.c:574
+msgid "Value accepted!"
+msgstr "Valor aceito!"
+
+#. #define VALUE_ACCEPTED_WARNING_X
+#: LYMessages.c:576
+msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
+msgstr "Valor aceito! - Atenção: O Lynx está configurado para XWINDOWS!"
+
+#. #define VALUE_ACCEPTED_WARNING_NONX
+#: LYMessages.c:578
+msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
+msgstr "Valor aceito! - Atenção: O Lynx não está configurado para XWINDOWS!"
+
+#: LYMessages.c:579
+msgid "You are not allowed to change which editor to use!"
+msgstr "Você não tem permissão para alterar o editor a ser usado!"
+
+#: LYMessages.c:580
+msgid "Failed to set DISPLAY variable!"
+msgstr "Falha ao setar a variável DISPLAY!"
+
+#: LYMessages.c:581
+msgid "Failed to clear DISPLAY variable!"
+msgstr "Falha ao apagar a variável DISPLAY"
+
+#. #define BOOKMARK_CHANGE_DISALLOWED
+#: LYMessages.c:583
+msgid "You are not allowed to change the bookmark file!"
+msgstr "Você não tem permissão para alterar o Livro de Marcações!"
+
+#: LYMessages.c:584
+msgid "Terminal does not support color"
+msgstr "O terminal não suporta cores."
+
+#: LYMessages.c:585
+#, c-format
+msgid "Your '%s' terminal does not support color."
+msgstr "Seu terminal '%s' não suporta cores."
+
+#: LYMessages.c:586
+msgid "Access to dot files is disabled!"
+msgstr "Acesso aos arquivos ocultos está desabilitado!"
+
+#. #define UA_NO_LYNX_WARNING
+#: LYMessages.c:588
+msgid "User-Agent string does not contain \"Lynx\" or \"L_y_n_x\""
+msgstr ""
+
+#. #define UA_PLEASE_USE_LYNX
+#: LYMessages.c:590
+msgid "Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional deception!"
+msgstr ""
+
+#. #define UA_CHANGE_DISABLED
+#: LYMessages.c:592
+msgid "Changing of the User-Agent string is disabled!"
+msgstr ""
+
+#. #define CHANGE_OF_SETTING_DISALLOWED
+#: LYMessages.c:594
+msgid "You are not allowed to change this setting."
+msgstr "Você não tem permissão para alterar esta configuração."
+
+#: LYMessages.c:595
+msgid "Saving Options..."
+msgstr "Salvando opções..."
+
+#: LYMessages.c:596
+msgid "Options saved!"
+msgstr "Opções salvas."
+
+#: LYMessages.c:597
+msgid "Unable to save Options!"
+msgstr "Impossível salvar opções!"
+
+#: LYMessages.c:598
+msgid " 'r' to return to Lynx "
+msgstr " 'r' para voltar ao Lynx "
+
+#: LYMessages.c:599
+msgid " '>' to save, or 'r' to return to Lynx "
+msgstr " '>' para salvar, ou 'r' para voltar ao Lynx "
+
+#. #define ANY_KEY_CHANGE_RET_ACCEPT
+#: LYMessages.c:601
+msgid "Hit any key to change value; RETURN to accept."
+msgstr "Qualquer tecla para alterar, ENTER para submeter."
+
+#: LYMessages.c:602
+msgid "Error uncompressing temporary file!"
+msgstr "Erro descomprimindo arquivo temporário!"
+
+#: LYMessages.c:603
+msgid "Unsupported URL scheme!"
+msgstr "Esquema de URL não suportado!"
+
+#: LYMessages.c:604
+msgid "Unsupported data: URL! Use SHOWINFO, for now."
+msgstr "Dados não suportados. Use SHOWINFO por agora."
+
+#: LYMessages.c:605
+msgid "Redirection limit of 10 URL's reached."
+msgstr "Limite de 10 redirecionamentos atingido."
+
+#: LYMessages.c:606
+msgid "Illegal redirection URL received from server!"
+msgstr "Recebido um redirecionamento ilegal do servidor."
+
+#. #define SERVER_ASKED_FOR_REDIRECTION
+#: LYMessages.c:608
+#, c-format
+msgid "Server asked for %d redirection of POST content to"
+msgstr "O servidor perguntou sobre redirecionar o formulário postado de %d para"
+
+#: LYMessages.c:611
+msgid "P)roceed, use G)ET or C)ancel "
+msgstr "P) Procede, G) Copia, ou C) Cancela"
+
+#: LYMessages.c:612
+msgid "P)roceed, or C)ancel "
+msgstr "P) Procede, C) Cancela"
+
+#. #define ADVANCED_POST_GET_REDIRECT
+#: LYMessages.c:614
+msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
+msgstr "Redirecionamento de Postagem. P)Procede, U)Ver a URL, G)Copia ou C)Cancela"
+
+#. #define ADVANCED_POST_REDIRECT
+#: LYMessages.c:616
+msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
+msgstr "Redirecinamento de comando de Postagem. P) Procede, U) Ver URL ou C) Cancela"
+
+#. #define CONFIRM_POST_RESUBMISSION
+#: LYMessages.c:618
+msgid "Document from Form with POST content. Resubmit?"
+msgstr "Documento com formulário de postagem. Reenviar?"
+
+#. #define CONFIRM_POST_RESUBMISSION_TO
+#: LYMessages.c:620
+#, c-format
+msgid "Resubmit POST content to %s ?"
+msgstr "Reenviar formulário postado para %s ?"
+
+#. #define CONFIRM_POST_LIST_RELOAD
+#: LYMessages.c:622
+#, c-format
+msgid "List from document with POST data. Reload %s ?"
+msgstr "Documento com lista de dados para postagem. Re-ler %s ? "
+
+#. #define CONFIRM_POST_DOC_HEAD
+#: LYMessages.c:624
+msgid "Document from POST action, HEAD may not be understood. Proceed?"
+msgstr "Documento de uma ação de postagem. Cabeçalho não compreendido. Continua?"
+
+#. #define CONFIRM_POST_LINK_HEAD
+#: LYMessages.c:626
+msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
+msgstr "Ação de postagem de formulário. Cabeçalho não compreendido. Continua?"
+
+#: LYMessages.c:627
+msgid "Proceed without a username and password?"
+msgstr "Continua sem um usuário e senha?"
+
+#: LYMessages.c:628
+#, c-format
+msgid "Proceed (%s)?"
+msgstr "Proseguir (%s)?"
+
+#: LYMessages.c:629
+msgid "Cannot POST to this host."
+msgstr "Impossível postar neste servidor."
+
+#: LYMessages.c:630
+msgid "POST not supported for this URL - ignoring POST data!"
+msgstr "Comando de postagem não suportado por esta URL - ignorando dados de postagem!"
+
+#: LYMessages.c:631
+msgid "Discarding POST data..."
+msgstr "Apagando dados de postagem..."
+
+#: LYMessages.c:632
+msgid "Document will not be reloaded!"
+msgstr "Documento não será atualizado!"
+
+#: LYMessages.c:633
+msgid "Location: "
+msgstr "Localização:"
+
+#: LYMessages.c:634
+#, c-format
+msgid "'%s' not found!"
+msgstr "'%s' não encontrado!"
+
+#: LYMessages.c:635
+msgid "Default Bookmark File"
+msgstr "Arquivo padrão do Livro de Marcações"
+
+#: LYMessages.c:636
+msgid "Screen too small! (8x35 min)"
+msgstr "Tela muito pequena, (8x35 mínimo)"
+
+#: LYMessages.c:637
+msgid "Select destination or ^G to Cancel: "
+msgstr "Selecione destino ou ^G para cancelar:"
+
+#. #define MULTIBOOKMARKS_SELECT
+#: LYMessages.c:639
+msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
+msgstr "Selecione submarca, '=' para menu, ou ^G para cancelar:"
+
+#. #define MULTIBOOKMARKS_SELF
+#: LYMessages.c:641
+msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
+msgstr "L) Reproduzir ligação nesta marcação ou C) Cancela? (l,c):"
+
+#: LYMessages.c:642
+msgid "Multiple bookmark support is not available."
+msgstr "Suporte a multiplos livros de marcação não está disponível."
+
+#: LYMessages.c:643
+#, c-format
+msgid " Select Bookmark (screen %d of %d)"
+msgstr "Selecione Livro de Marcação (seleção %d de %d)"
+
+#: LYMessages.c:644
+msgid " Select Bookmark"
+msgstr " Selecione Livro de Marcação"
+
+#. #define MULTIBOOKMARKS_EHEAD_MASK
+#: LYMessages.c:646
+#, c-format
+msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
+msgstr "Editando Descrição e Localização do Livro de Marcações (%d de 2)"
+
+#. #define MULTIBOOKMARKS_EHEAD
+#: LYMessages.c:648
+msgid " Editing Bookmark DESCRIPTION and FILEPATH"
+msgstr " Editando Descrição e Localização"
+
+#: LYMessages.c:649
+msgid "Letter: "
+msgstr "Letra: "
+
+#. #define USE_PATH_OFF_HOME
+#: LYMessages.c:652
+msgid "Use a filepath off your login directory in SHELL syntax!"
+msgstr "Use o diretório de seu login na sintaxe do interpretador de comando."
+
+#: LYMessages.c:654
+msgid "Use a filepath off your home directory!"
+msgstr "Use o caminho de seu diretório padrão!"
+
+#. #define MAXLINKS_REACHED
+#: LYMessages.c:657
+msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
+msgstr "Limite de ligações atingido! Use uma página menor ou rolagem de tela dupla."
+
+#. #define MAXHIST_REACHED
+#: LYMessages.c:659
+msgid "History List maximum reached! Document not pushed."
+msgstr "Máximo do histórico atingido. O documento não foi acrescentado."
+
+#: LYMessages.c:660
+msgid "No previously visited links available!"
+msgstr "Não há ligações visitadas antes desta disponíveis!"
+
+#: LYMessages.c:661
+msgid "Memory exhausted! Program aborted!"
+msgstr "Memória no limite. Programa abortado!"
+
+#: LYMessages.c:662
+msgid "Memory exhausted! Aborting..."
+msgstr "Memória no limite. Abortando..."
+
+#: LYMessages.c:663
+msgid "Not enough memory!"
+msgstr ""
+
+#: LYMessages.c:664
+msgid "Directory/File Manager not available"
+msgstr "Gerenciador de Diretórios/Arquivos não disponível"
+
+#: LYMessages.c:665
+msgid "HREF in BASE tag is not an absolute URL."
+msgstr "HREF na tag BASE não é uma URL absoluta."
+
+#: LYMessages.c:666
+msgid "Location URL is not absolute."
+msgstr "Ligação da URL não tem endereço absoluto."
+
+#: LYMessages.c:667
+msgid "Refresh URL is not absolute."
+msgstr "Não há um endereço absoluto de atualização definido."
+
+#. #define SENDING_MESSAGE_WITH_BODY_TO
+#: LYMessages.c:669
+msgid ""
+"You are sending a message with body to:\n"
+" "
+msgstr ""
+"Você está enviando uma mensagem para:\n"
+" "
+
+#: LYMessages.c:670
+msgid ""
+"You are sending a comment to:\n"
+" "
+msgstr ""
+"Você está enviando um comentário para:\n"
+" "
+
+#: LYMessages.c:671
+msgid ""
+"\n"
+" With copy to:\n"
+" "
+msgstr ""
+"\n"
+" com cópia para:\n"
+" "
+
+#: LYMessages.c:672
+msgid ""
+"\n"
+" With copies to:\n"
+" "
+msgstr ""
+"\n"
+" com cópias para:\n"
+" "
+
+#. #define CTRL_G_TO_CANCEL_SEND
+#: LYMessages.c:674
+msgid ""
+"\n"
+"\n"
+"Use Ctrl-G to cancel if you do not want to send a message\n"
+msgstr ""
+"\n"
+"\n"
+"Use Ctrl-G para Cancelar se você não quer enviar a mensagem.\n"
+
+#. #define ENTER_NAME_OR_BLANK
+#: LYMessages.c:676
+msgid ""
+"\n"
+" Please enter your name, or leave it blank to remain anonymous\n"
+msgstr ""
+"\n"
+" Por favor, entre com seu nome, ou deixe em branco para enviar anônimo\n"
+
+#. #define ENTER_MAIL_ADDRESS_OR_OTHER
+#: LYMessages.c:678
+msgid ""
+"\n"
+" Please enter a mail address or some other\n"
+msgstr ""
+"\n"
+" Por favor, entre com o endereço de email ou outro qualquer.\n"
+
+#. #define MEANS_TO_CONTACT_FOR_RESPONSE
+#: LYMessages.c:680
+msgid " means to contact you, if you desire a response.\n"
+msgstr " quer contactar você, se você desejar responder.\n"
+
+#: LYMessages.c:681
+msgid ""
+"\n"
+" Please enter a subject line.\n"
+msgstr ""
+"\n"
+"Por favor, entre com uma linha de assunto.\n"
+
+#. #define ENTER_ADDRESS_FOR_CC
+#: LYMessages.c:683
+msgid ""
+"\n"
+" Enter a mail address for a CC of your message.\n"
+msgstr ""
+"\n"
+" Entre com o endereço de email para enviar uma cópia da mensagem.\n"
+
+#: LYMessages.c:684
+msgid " (Leave blank if you don't want a copy.)\n"
+msgstr " (Deixe em branco se não deseja enviar uma cópia deste email)\n"
+
+#: LYMessages.c:685
+msgid ""
+"\n"
+" Please review the message body:\n"
+"\n"
+msgstr ""
+"\n"
+" Por favor, examine o corpo da mensagem:\n"
+"\n"
+
+#: LYMessages.c:686
+msgid ""
+"\n"
+"Press RETURN to continue: "
+msgstr ""
+"\n"
+"Pressione ENTER para continuar:"
+
+#: LYMessages.c:687
+msgid ""
+"\n"
+"Press RETURN to clean up: "
+msgstr ""
+"\n"
+"Pressione ENTER para limpar:"
+
+#: LYMessages.c:688
+msgid " Use Control-U to erase the default.\n"
+msgstr "Use Control-U para apagar o valor padrão.\n"
+
+#: LYMessages.c:689
+msgid ""
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+" Por favor entre com sua mensagem abaixo."
+
+#. #define ENTER_PERIOD_WHEN_DONE_A
+#: LYMessages.c:691 src/LYNews.c:380
+msgid ""
+"\n"
+" When you are done, press enter and put a single period (.)"
+msgstr ""
+"\n"
+" Quando você terminar, pressione enter e aguarde alguns instantes."
+
+#. #define ENTER_PERIOD_WHEN_DONE_B
+#: LYMessages.c:693 src/LYNews.c:381
+msgid ""
+"\n"
+" on a line and press enter again."
+msgstr ""
+"\n"
+" numa linha em pressione enter novamente."
+
+#. Cookies messages
+#. #define ADVANCED_COOKIE_CONFIRMATION
+#: LYMessages.c:697
+#, c-format
+msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
+msgstr "%s cookie: %.*s=%.*s Permite? (Y Sim/N Não/A Sempre/V Nunca)"
+
+#. #define INVALID_COOKIE_DOMAIN_CONFIRMATION
+#: LYMessages.c:699
+#, c-format
+msgid "Accept invalid cookie domain=%s for '%s'?"
+msgstr "Aceita cookie inválido do domínio %s para '%s'?"
+
+#. #define INVALID_COOKIE_PATH_CONFIRMATION
+#: LYMessages.c:701
+#, c-format
+msgid "Accept invalid cookie path=%s as a prefix of '%s'?"
+msgstr "Aceita cookie de caminho mal definido '%s' com prefixo de '%s'?"
+
+#: LYMessages.c:702
+msgid "Allowing this cookie."
+msgstr "Aceitando este cookie."
+
+#: LYMessages.c:703
+msgid "Rejecting this cookie."
+msgstr "Rejeitando este cookie."
+
+#: LYMessages.c:704
+msgid "The Cookie Jar is empty."
+msgstr "O arquivo Jar do cookie está vazio."
+
+#. #define ACTIVATE_TO_GOBBLE
+#: LYMessages.c:706
+msgid "Activate links to gobble up cookies or entire domains,"
+msgstr "Ativa ligação para pegar os cookies de todo o domínio,"
+
+#: LYMessages.c:707
+msgid "or to change a domain's 'allow' setting."
+msgstr "ou para alterar a permissão de cookies do domínio"
+
+#: LYMessages.c:708
+msgid "(Cookies never allowed.)"
+msgstr "(Cookies nunca serão aceitos.)"
+
+#: LYMessages.c:709
+msgid "(Cookies always allowed.)"
+msgstr "(Cookies estão sendo aceitos.)"
+
+#: LYMessages.c:710
+msgid "(Cookies allowed via prompt.)"
+msgstr "(Pergunta antes de aceitar cookies.)"
+
+#: LYMessages.c:711
+msgid "(Persistent Cookies.)"
+msgstr "(Cookies permanentes.)"
+
+#: LYMessages.c:712
+msgid "(No title.)"
+msgstr "(Sem título.)"
+
+#: LYMessages.c:713
+msgid "(No name.)"
+msgstr "(Sem nome.)"
+
+#: LYMessages.c:714
+msgid "(No value.)"
+msgstr "(Sem valor.)"
+
+#: LYMessages.c:715
+msgid "None"
+msgstr "Vazio"
+
+#: LYMessages.c:716
+msgid "(End of session.)"
+msgstr "(Fim da seção.)"
+
+#: LYMessages.c:717
+msgid "Delete this cookie?"
+msgstr "Delete este cookie?"
+
+#: LYMessages.c:718
+msgid "The cookie has been eaten!"
+msgstr "O cookie foi destruido!"
+
+#: LYMessages.c:719
+msgid "Delete this empty domain?"
+msgstr "Apaga este domínio vazio?"
+
+#: LYMessages.c:720
+msgid "The domain has been eaten!"
+msgstr "O domínio foi destruido!"
+
+#. #define DELETE_COOKIES_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:722
+msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D)Deleta cookie, acerta para A)Sempre/P)Perguntar/V)Nunca ou C) Cancela?"
+
+#. #define DELETE_DOMAIN_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:724
+msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D)Deleta dominio, acerta para A)Sempre/P)Perguntar/V)Nunca ou C) Cancela?"
+
+#: LYMessages.c:725
+msgid "All cookies in the domain have been eaten!"
+msgstr "Todos os cookies deste domínio foram destruídos!"
+
+#: LYMessages.c:726
+#, c-format
+msgid "'A'lways allowing from domain '%s'."
+msgstr "'Sempre' aceitar do domínio '%s'."
+
+#: LYMessages.c:727
+#, c-format
+msgid "ne'V'er allowing from domain '%s'."
+msgstr "'Nunca' aceitar do domínio '%s'."
+
+#: LYMessages.c:728
+#, c-format
+msgid "'P'rompting to allow from domain '%s'."
+msgstr "'Perguntar' antes de aceitar de '%s'."
+
+#: LYMessages.c:729
+msgid "Delete all cookies in this domain?"
+msgstr "Deleta todos os cookies deste domínio?"
+
+#: LYMessages.c:730
+msgid "All of the cookies in the jar have been eaten!"
+msgstr "Todos os cookies no arquivo Jar foram destruidos!"
+
+#: LYMessages.c:732
+msgid "Port 19 not permitted in URLs."
+msgstr "Porta 19 não permitida em URLs."
+
+#: LYMessages.c:733
+msgid "Port 25 not permitted in URLs."
+msgstr "Porta 25 nao permitida em URLs."
+
+#: LYMessages.c:734
+#, c-format
+msgid "Port %lu not permitted in URLs."
+msgstr "Porta %lu nao permitida em URLs."
+
+#: LYMessages.c:735
+msgid "URL has a bad port field."
+msgstr "URL tem uma porta inválida."
+
+#: LYMessages.c:736
+msgid "Maximum nesting of HTML elements exceeded."
+msgstr "Origens dos elementos HTML excederam o limite."
+
+#: LYMessages.c:737
+msgid "Bad partial reference! Stripping lead dots."
+msgstr "Referência parcial inválida! Ignorando alguns pontos."
+
+#: LYMessages.c:738
+msgid "Trace Log open failed. Trace off!"
+msgstr "Falha ao localizar arquivo de log. Localização desligada!"
+
+#: LYMessages.c:739
+msgid "Lynx Trace Log"
+msgstr "Registro de depuração de rotas do Lynx"
+
+#: LYMessages.c:740
+msgid "No trace log has been started for this session."
+msgstr "Não foi aberta uma seção de traçagem de log."
+
+#. #define MAX_TEMPCOUNT_REACHED
+#: LYMessages.c:742
+msgid "The maximum temporary file count has been reached!"
+msgstr "A quantidade máxima de arquivos temporários foi atingida."
+
+#. #define FORM_VALUE_TOO_LONG
+#: LYMessages.c:744
+msgid "Form field value exceeds buffer length! Trim the tail."
+msgstr "O tamanho do buffer excedeu o tramanho do campo do formulário. Cortando o fim."
+
+#. #define FORM_TAIL_COMBINED_WITH_HEAD
+#: LYMessages.c:746
+msgid "Modified tail combined with head of form field value."
+msgstr "Aba modificada combinada com o cabeçalho do campo de formulario."
+
+#. HTFile.c
+#: LYMessages.c:749
+msgid "Directory"
+msgstr "Diretório"
+
+#: LYMessages.c:750
+msgid "Directory browsing is not allowed."
+msgstr "Leitor de diretórios não disponível."
+
+#: LYMessages.c:751
+msgid "Selective access is not enabled for this directory"
+msgstr "Acesso seletivo está habilitado para este diretório"
+
+#: LYMessages.c:752
+msgid "Multiformat: directory scan failed."
+msgstr "Formatador multiplo: Leitura de diretório falhou."
+
+#: LYMessages.c:753
+msgid "This directory is not readable."
+msgstr "Este diretório não pode ser lido."
+
+#: LYMessages.c:754
+msgid "Can't access requested file."
+msgstr "Impossível acessar arquivo requisitado."
+
+#: LYMessages.c:755
+msgid "Could not find suitable representation for transmission."
+msgstr "Não foi encontrado processo de representação para transmissão."
+
+#: LYMessages.c:756
+msgid "Could not open file for decompression!"
+msgstr "Impossóvel abrir arquivo para descompressão!"
+
+#: LYMessages.c:757
+msgid "Files:"
+msgstr "Arquivos:"
+
+#: LYMessages.c:758
+msgid "Subdirectories:"
+msgstr "Subdiretórios:"
+
+#: LYMessages.c:759
+msgid " directory"
+msgstr " diretório"
+
+#: LYMessages.c:760
+msgid "Up to "
+msgstr "Segue para "
+
+#: LYMessages.c:761
+msgid "Current directory is "
+msgstr "Diretório corrente é "
+
+#. HTGopher.c
+#: LYMessages.c:764
+msgid "No response from server!"
+msgstr "Sem resposta do servidor!"
+
+#: LYMessages.c:765
+msgid "CSO index"
+msgstr "CSO index"
+
+#: LYMessages.c:766
+msgid ""
+"\n"
+"This is a searchable index of a CSO database.\n"
+msgstr ""
+"\n"
+"Este é um campo de procura de um banco de dados CSO.\n"
+
+#: LYMessages.c:767
+msgid "CSO Search Results"
+msgstr "Resultados da busca no CSO"
+
+#: LYMessages.c:768
+#, c-format
+msgid "Seek fail on %s\n"
+msgstr "Busca falhou em %s\n"
+
+#: LYMessages.c:769
+msgid ""
+"\n"
+"Press the 's' key and enter search keywords.\n"
+msgstr ""
+"\n"
+"Pressione 's' e entre com os dados para busca.\n"
+
+#: LYMessages.c:770
+msgid ""
+"\n"
+"This is a searchable Gopher index.\n"
+msgstr ""
+"\n"
+"Este é um indexador de busca Gopher.\n"
+
+#: LYMessages.c:771
+msgid "Gopher index"
+msgstr "Indexador Gopher"
+
+#: LYMessages.c:772
+msgid "Gopher Menu"
+msgstr "Menu Gopher"
+
+#: LYMessages.c:773
+msgid " Search Results"
+msgstr "Resultados da Busca"
+
+#: LYMessages.c:774
+msgid "Sending CSO/PH request."
+msgstr "Enviando requisição CSO/PH."
+
+#: LYMessages.c:775
+msgid "Sending Gopher request."
+msgstr "Enviando requisição Gopher."
+
+#: LYMessages.c:776
+msgid "CSO/PH request sent; waiting for response."
+msgstr "requisição CSO/PH enviada; esperando pela resposta."
+
+#: LYMessages.c:777
+msgid "Gopher request sent; waiting for response."
+msgstr "requisição Gopher enviada; esperando pela resposta."
+
+#: LYMessages.c:778
+msgid ""
+"\n"
+"Please enter search keywords.\n"
+msgstr ""
+"\n"
+"Por favor, entre com os dados para busca.\n"
+
+#: LYMessages.c:779
+msgid ""
+"\n"
+"The keywords that you enter will allow you to search on a"
+msgstr ""
+"\n"
+"Os dados que você escolheu para busca irão fazer uma busca em"
+
+#: LYMessages.c:780
+msgid " person's name in the database.\n"
+msgstr " nome personificado na base de dados.\n"
+
+#. HTNews.c
+#: LYMessages.c:783
+msgid "Connection closed ???"
+msgstr "Conecção fechada???"
+
+#: LYMessages.c:784
+msgid "Cannot open temporary file for news POST."
+msgstr "Impossível abrir arquivo temporário para postagem de NEWS"
+
+#: LYMessages.c:785
+msgid "This client does not contain support for posting to news with SSL."
+msgstr "Este cliente não contém suporte para postar NEWS com SSL."
+
+#. HTStyle.c
+#: LYMessages.c:788
+#, c-format
+msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
+msgstr "Estilo %d '%s' SGML:%s. Fonte %s %.1f pontos.\n"
+
+#: LYMessages.c:789
+#, c-format
+msgid "\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
+msgstr "Recortes: primeiro:%.0f outros=%.0f, altura=%.1f Desc.=%.1f\n"
+
+#: LYMessages.c:790
+#, c-format
+msgid "\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
+msgstr "Alinhamento=%d, %d tabs. (%.0f antes, %.0f depois)\n"
+
+#: LYMessages.c:791
+#, c-format
+msgid "\t\tTab kind=%d at %.0f\n"
+msgstr "Aba tipo=%d a %.0f\n"
+
+#. HTTP.c
+#: LYMessages.c:794
+msgid "Can't proceed without a username and password."
+msgstr "Impossível continuar sem um usuário e senha."
+
+#: LYMessages.c:795
+msgid "Can't retry with authorization! Contact the server's WebMaster."
+msgstr "Impossível repetir sem autorização! Contate o WebMaster."
+
+#: LYMessages.c:796
+msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
+msgstr "Impossível repetir sem uma autorização de proxy. Contate o WebMaster."
+
+#: LYMessages.c:797
+msgid "Retrying with proxy authorization information."
+msgstr "Repetindo com informações de autorização para o proxy."
+
+#. HTWAIS.c
+#: LYMessages.c:800
+msgid "HTWAIS: Return message too large."
+msgstr "HTWAIS: Mensagem de retorno muito grande."
+
+#: LYMessages.c:801
+msgid "Enter WAIS query: "
+msgstr "Entre com a requisição de WAIS: "
+
+#. Miscellaneous status
+#: LYMessages.c:804
+msgid "Retrying as HTTP0 request."
+msgstr "Repetindo com requisição HTTPO."
+
+#: LYMessages.c:805
+#, c-format
+msgid "Transferred %d bytes"
+msgstr "Transferidos %s bytes."
+
+#: LYMessages.c:806
+msgid "Data transfer complete"
+msgstr "Transferência completada"
+
+#: LYMessages.c:807
+#, c-format
+msgid "Error processing line %d of %s\n"
+msgstr "Erro processando linha %d de %s\n"
+
+#. Lynx internal page titles
+#: LYMessages.c:810
+msgid "Address List Page"
+msgstr "Pagina de endereços"
+
+#: LYMessages.c:811
+msgid "Bookmark file"
+msgstr "Arquivo do Livro de Marcações"
+
+#: LYMessages.c:812
+msgid "Configuration Definitions"
+msgstr "Definições de configuração"
+
+#: LYMessages.c:813
+msgid "Cookie Jar"
+msgstr "Cookie Jar"
+
+#: LYMessages.c:814
+msgid "Current Key Map"
+msgstr "Mapa de teclado corrente"
+
+#: LYMessages.c:815
+msgid "File Management Options"
+msgstr "Opções de gerenciamento de arquivos"
+
+#: LYMessages.c:816
+msgid "Download Options"
+msgstr "Opções de cópia"
+
+#: LYMessages.c:817
+msgid "History Page"
+msgstr "Página de histórico"
+
+#: LYMessages.c:818
+msgid "List Page"
+msgstr "Listas"
+
+#: LYMessages.c:819
+msgid "Lynx.cfg Information"
+msgstr "Informações do Lynx.cfg"
+
+#: LYMessages.c:820
+msgid "Converted Mosaic Hotlist"
+msgstr "Livro de amrcações convertido do Mosaic"
+
+#: LYMessages.c:821
+msgid "Options Menu"
+msgstr "Menu de Opções"
+
+#: LYMessages.c:822
+msgid "File Permission Options"
+msgstr "Opções de permissão de arquivos"
+
+#: LYMessages.c:823
+msgid "Printing Options"
+msgstr "Opções de imporessão"
+
+#: LYMessages.c:824
+msgid "Information about the current document"
+msgstr "Informações sobre este documento"
+
+#: LYMessages.c:825
+msgid "Your recent statusline messages"
+msgstr "Sua linha de mensagens de estado atual"
+
+#: LYMessages.c:826
+msgid "Upload Options"
+msgstr "Opções de Envio"
+
+#: LYMessages.c:827
+msgid "Visited Links Page"
+msgstr "Página de ligações visitadas"
+
+#. CONFIG_DEF_TITLE subtitles
+#: LYMessages.c:830
+msgid "See also"
+msgstr "Veja mais"
+
+#: LYMessages.c:831
+msgid "your"
+msgstr "seu"
+
+#: LYMessages.c:832
+msgid "for runtime options"
+msgstr "para opções de execução"
+
+#: LYMessages.c:833
+msgid "compile time options"
+msgstr "Opções de tempo de compilação"
+
+#: LYMessages.c:834
+msgid "latest release"
+msgstr "ultimo apresentado"
+
+#: LYMessages.c:835
+msgid "pre-release version"
+msgstr "versão em desenvolvimento"
+
+#: LYMessages.c:836
+msgid "development version"
+msgstr "versão em desenvolvimento"
+
+#. #define AUTOCONF_CONFIG_CACHE
+#: LYMessages.c:838
+msgid ""
+"The following data were derived during the automatic configuration/build\n"
+"process of this copy of Lynx. When reporting a bug, please include a copy\n"
+"of this page."
+msgstr ""
+"Os dados apresentados são derivados dos processos de configuração/compilação\n"
+"automática desta cópia do Lynx. Quando reportar um BUG, por favor inclua uma\n"
+"cópia desta página."
+
+#. #define AUTOCONF_LYNXCFG_H
+#: LYMessages.c:842
+msgid ""
+"The following data were used as automatically-configured compile-time\n"
+"definitions when this copy of Lynx was built."
+msgstr ""
+"Os dados apresentados usaram uma configuração automática de definição de\n"
+"compilação quando esta cópia do Lynx foi criada."
+
+#. #define DIRED_NOVICELINE
+#: LYMessages.c:847
+msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
+msgstr "C) Criar D) Copiar E) Editar F) Menu inteiro M) Alterar R) Remover T) Tag U) Enviar arquivo \n"
+
+#: LYMessages.c:848
+msgid "Failed to obtain status of current link!"
+msgstr "Falha obtendo o estado atual desta ligação!"
+
+#. #define INVALID_PERMIT_URL
+#: LYMessages.c:851
+msgid "Special URL only valid from current File Permission menu!"
+msgstr "Acesso a URLs especiais só válidas pelo menu de permissões de arquivos."
+
+#: LYMessages.c:855
+msgid "External support is currently disabled."
+msgstr "Suporte externo está desabilitado."
+
+#. new with 2.8.4dev.21
+#: LYMessages.c:859
+#, fuzzy
+msgid "Changing working-directory is currently disabled."
+msgstr "Chamadas estão atualmente desabilitadas."
+
+#: LYMessages.c:860
+#, fuzzy
+msgid "Linewrap OFF!"
+msgstr "Traçador de rotas desligado!"
+
+#: LYMessages.c:861
+msgid "Linewrap ON!"
+msgstr ""
+
+#: LYMessages.c:862
+#, fuzzy
+msgid "Parsing nested-tables toggled OFF! Reloading..."
+msgstr "Modo Raw 8-bit ou CJK estão desativados. Atualizando..."
+
+#: LYMessages.c:863
+#, fuzzy
+msgid "Parsing nested-tables toggled ON! Reloading..."
+msgstr "Modo Raw 8-bit ou CJK estão ativados. Atualizando..."
+
+#: LYMessages.c:864
+msgid "Shifting is disabled while line-wrap is in effect"
+msgstr ""
+
+#: LYMessages.c:865
+#, fuzzy
+msgid "Trace not supported"
+msgstr "O terminal não suporta cores."
+
+#: WWW/Library/Implementation/HTAABrow.c:648
+#, c-format
+msgid "Username for '%s' at %s '%s%s':"
+msgstr "Usuário de '%s' em %s '%s%s':"
+
+#: WWW/Library/Implementation/HTAABrow.c:914
+msgid "This client doesn't know how to compose proxy authorization information for scheme"
+msgstr "Este programa não está preparado para compor autorização proxy neste esquema."
+
+#: WWW/Library/Implementation/HTAABrow.c:989
+msgid "This client doesn't know how to compose authorization information for scheme"
+msgstr "Este programa não está preparado para compor autorizações neste esquema."
+
+#: WWW/Library/Implementation/HTAABrow.c:1097
+#, c-format
+msgid "Invalid header '%s%s%s%s%s'"
+msgstr "Cabeçalho inválido '%s%s%s%s%s'"
+
+#: WWW/Library/Implementation/HTAABrow.c:1201
+msgid "Proxy authorization required -- retrying"
+msgstr "Autorização de proxy requerida -- repetindo"
+
+#: WWW/Library/Implementation/HTAABrow.c:1260
+msgid "Access without authorization denied -- retrying"
+msgstr "Acesso sem autorização não permitido -- repetindo"
+
+#: WWW/Library/Implementation/HTAccess.c:683
+msgid "Access forbidden by rule"
+msgstr "Acesso não permitido pelo regulamento."
+
+#: WWW/Library/Implementation/HTAccess.c:785
+msgid "Document with POST content not found in cache. Resubmit?"
+msgstr "Documento com ação de postagem não encontrado no cache. Reenviar?"
+
+#: WWW/Library/Implementation/HTAccess.c:1026 src/GridText.c:8039
+msgid "Loading incomplete."
+msgstr "Leitura incompleta"
+
+#: WWW/Library/Implementation/HTAccess.c:1056
+msgid "**** HTAccess: socket or file number returned by obsolete load routine!\n"
+msgstr "**** HTAccess: Socket ou numero de arquivos retornado pela rotina é obsoleto!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1058
+msgid "**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"
+msgstr "HTAccess:Erro interno.Por favor envie email informando para lynx_dev@sig.net!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1059
+#, c-format
+msgid "**** HTAccess: Status returned was: %d\n"
+msgstr "HTAccess: Retorno de estado foi: %d\n"
+
+#.
+#. * hack: if we fail in HTAccess.c
+#. * avoid duplicating URL, oh.
+#.
+#: WWW/Library/Implementation/HTAccess.c:1065 src/LYMainLoop.c:7834
+msgid "Can't Access"
+msgstr "Não foi possível acessar"
+
+#: WWW/Library/Implementation/HTAccess.c:1073
+msgid "Unable to access document."
+msgstr "Impossível acessar documento."
+
+#: WWW/Library/Implementation/HTFTP.c:756
+#, c-format
+msgid "Enter password for user %s@%s:"
+msgstr "Entre senha para usuário %s@%s:"
+
+#: WWW/Library/Implementation/HTFTP.c:784
+msgid "Unable to connect to FTP host."
+msgstr "Impossível contactar servidor de FTP."
+
+#: WWW/Library/Implementation/HTFTP.c:1054
+msgid "close master socket"
+msgstr "fechado o socket principal."
+
+#: WWW/Library/Implementation/HTFTP.c:1116
+msgid "socket for master socket"
+msgstr "socket para socket principal"
+
+#.
+#. ** It's a symbolic link, does the user care about
+#. ** knowing if it is symbolic? I think so since
+#. ** it might be a directory.
+#.
+#: WWW/Library/Implementation/HTFTP.c:1630 WWW/Library/Implementation/HTFTP.c:2251
+msgid "Symbolic Link"
+msgstr "Ligação simbólica"
+
+#: WWW/Library/Implementation/HTFTP.c:2612
+msgid "Receiving FTP directory."
+msgstr "Recebendo lista de diretórios do FTP."
+
+#: WWW/Library/Implementation/HTFTP.c:2755
+#, c-format
+msgid "Transferred %d bytes (%5d)"
+msgstr "Transferidos %d bytes (%5d)."
+
+#: WWW/Library/Implementation/HTFTP.c:3090
+msgid "connect for data"
+msgstr "conectado para dados"
+
+#: WWW/Library/Implementation/HTFTP.c:3690
+msgid "Receiving FTP file."
+msgstr "Recebendo arquivo de FTP."
+
+#: WWW/Library/Implementation/HTFinger.c:275
+msgid "Could not set up finger connection."
+msgstr "Não foi possível conecção pelo finger."
+
+#: WWW/Library/Implementation/HTFinger.c:320
+msgid "Could not load data (no sitename in finger URL)"
+msgstr "Não foi possível ler dados. (sem site definido na URL)"
+
+#: WWW/Library/Implementation/HTFinger.c:328
+msgid "Invalid port number - will only use port 79!"
+msgstr "Porta inválida. - Será usada somente a porta 79!"
+
+#: WWW/Library/Implementation/HTFinger.c:396
+msgid "Could not access finger host."
+msgstr "Não foi possível acessar o servidor pelo finger."
+
+#: WWW/Library/Implementation/HTFinger.c:407
+msgid "No response from finger server."
+msgstr "Sem resposta do comando finger pelo servidor."
+
+#: WWW/Library/Implementation/HTNews.c:372
+#, c-format
+msgid "Username for news host '%s':"
+msgstr "Usuário para o servidor NEWS '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:425
+msgid "Change username?"
+msgstr "Troca o usuário?"
+
+#: WWW/Library/Implementation/HTNews.c:429
+msgid "Username:"
+msgstr "Usuário:"
+
+#: WWW/Library/Implementation/HTNews.c:453
+#, c-format
+msgid "Password for news host '%s':"
+msgstr "Senha para o servidor NEWS '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:536
+msgid "Change password?"
+msgstr "Troca senha?"
+
+#: WWW/Library/Implementation/HTNews.c:1691
+#, c-format
+msgid "No matches for: %s"
+msgstr "Sem combinações para: %s"
+
+#: WWW/Library/Implementation/HTNews.c:1744
+msgid ""
+"\n"
+"No articles in this group.\n"
+msgstr ""
+"\n"
+"Sem objetos neste grupo.\n"
+
+#: WWW/Library/Implementation/HTNews.c:1757
+msgid ""
+"\n"
+"No articles in this range.\n"
+msgstr ""
+"\n"
+"Sem objetos nesta faixa.\n"
+
+#.
+#. ** Set window title.
+#.
+#: WWW/Library/Implementation/HTNews.c:1770
+#, c-format
+msgid "%s, Articles %d-%d"
+msgstr "%s, Objetos %d-%d"
+
+#: WWW/Library/Implementation/HTNews.c:1792
+msgid "Earlier articles"
+msgstr "Primeiros objetos"
+
+#: WWW/Library/Implementation/HTNews.c:1805
+#, c-format
+msgid ""
+"\n"
+"There are about %d articles currently available in %s, IDs as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"Existem cerca de %s atualmente disponíveis em %s, Como segue:\n"
+"\n"
+
+#: WWW/Library/Implementation/HTNews.c:1865
+msgid "All available articles in "
+msgstr "Todos os objetos disponíveis em "
+
+#: WWW/Library/Implementation/HTNews.c:2081
+msgid "Later articles"
+msgstr "Próximos objetos"
+
+#: WWW/Library/Implementation/HTNews.c:2105
+msgid "Post to "
+msgstr "Envoar pata "
+
+#: WWW/Library/Implementation/HTNews.c:2323
+msgid "This client does not contain support for SNEWS URLs."
+msgstr "Este programa não contém suporte para SNEWS URLs."
+
+#: WWW/Library/Implementation/HTNews.c:2531
+msgid "No target for raw text!"
+msgstr "Sem destino para texto primário!"
+
+#: WWW/Library/Implementation/HTNews.c:2561
+msgid "Connecting to NewsHost ..."
+msgstr "Conectando ao servidor NEWS..."
+
+#: WWW/Library/Implementation/HTNews.c:2612
+#, c-format
+msgid "Could not access %s."
+msgstr "Não foi possível acessar %s."
+
+#: WWW/Library/Implementation/HTNews.c:2712
+#, c-format
+msgid "Can't read news info. News host %.20s responded: %.200s"
+msgstr "Não foi possível ler notícias. Sservidor NEWS %.20s respondeu: %.200s"
+
+#: WWW/Library/Implementation/HTNews.c:2716
+#, c-format
+msgid "Can't read news info, empty response from host %s"
+msgstr "Não foi possível ler notícias. Sservidor NEWS respondeu: %s"
+
+#.
+#. ** List available newsgroups. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2920
+msgid "Reading list of available newsgroups."
+msgstr "Lendo lista de grupos de NEWS disponíveis."
+
+#: WWW/Library/Implementation/HTNews.c:2942
+msgid "Reading list of articles in newsgroup."
+msgstr "Lendo lista de objetos no grupo de NEWS."
+
+#.
+#. ** Get an article from a news group. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2948
+msgid "Reading news article."
+msgstr "Lendo objetos de NEWS."
+
+#: WWW/Library/Implementation/HTNews.c:2978
+msgid "Sorry, could not load requested news."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1233
+msgid "Address has invalid port"
+msgstr "Comprimento do endereço parece estar errado"
+
+#: WWW/Library/Implementation/HTTCP.c:1336
+msgid "Address length looks invalid"
+msgstr "Comprimento do endereço parece estar errado"
+
+#: WWW/Library/Implementation/HTTCP.c:1574 WWW/Library/Implementation/HTTCP.c:1592
+#, c-format
+msgid "Unable to locate remote host %s."
+msgstr "Imposs;ivel localizar servidor remoto %s."
+
+#. Not HTProgress, so warning won't be overwritten
+#. * immediately; but not HTAlert, because typically
+#. * there will be other alerts from the callers. - kw
+#.
+#: WWW/Library/Implementation/HTTCP.c:1589 WWW/Library/Implementation/HTTelnet.c:103
+#, c-format
+msgid "Invalid hostname %s"
+msgstr "Servidor inválido %s"
+
+#: WWW/Library/Implementation/HTTCP.c:1603
+#, c-format
+msgid "Making %s connection to %s"
+msgstr "Conectando com %s em %s."
+
+#: WWW/Library/Implementation/HTTCP.c:1619
+#, c-format
+msgid "socket failed: family %d addr %s port %s."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1628
+msgid "socket failed."
+msgstr "Falha na conecção do socket."
+
+#: WWW/Library/Implementation/HTTCP.c:1648
+msgid "Could not make connection non-blocking."
+msgstr "Não foi possível criar conecção."
+
+#: WWW/Library/Implementation/HTTCP.c:1717
+msgid "Connection failed (too many retries)."
+msgstr "Conecção falhou apos 180,000 tentativas."
+
+#: WWW/Library/Implementation/HTTCP.c:1910
+msgid "Could not restore socket to blocking."
+msgstr "Impossível restaurar socket para blocagem."
+
+#: WWW/Library/Implementation/HTTCP.c:1976
+msgid "Socket read failed for 180,000 tries."
+msgstr "Leitura do socket falhou após 180,000 tentativas."
+
+#: WWW/Library/Implementation/HTTP.c:466
+msgid "This client does not contain support for HTTPS URLs."
+msgstr "Este programa não suporta URLs com HTTPS"
+
+#: WWW/Library/Implementation/HTTP.c:491
+msgid "Unable to connect to remote host."
+msgstr "Impossível conectar ao servidor remoto."
+
+#: WWW/Library/Implementation/HTTP.c:1005
+msgid "Sending HTTP request."
+msgstr "Enviando requisição HTTP."
+
+#: WWW/Library/Implementation/HTTP.c:1039
+msgid "Unexpected network write error; connection aborted."
+msgstr "Erro inesperado de gravação na rede; conecção abortada."
+
+#: WWW/Library/Implementation/HTTP.c:1045
+msgid "HTTP request sent; waiting for response."
+msgstr "Enviada requisição HTTP; aguardando resposta."
+
+#: WWW/Library/Implementation/HTTP.c:1109
+msgid "Unexpected network read error; connection aborted."
+msgstr "Erro inesperado de leitura na rede; conecção abortada."
+
+#.
+#. ** HTTP/1.1 Informational statuses.
+#. ** 100 Continue.
+#. ** 101 Switching Protocols.
+#. ** > 101 is unknown.
+#. ** We should never get these, and they have only
+#. ** the status line and possibly other headers,
+#. ** so we'll deal with them by showing the full
+#. ** header to the user as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1305
+msgid "Got unexpected Informational Status."
+msgstr "Recebido informação de estado não solicitada."
+
+#.
+#. * Reset Content. The server has fulfilled the
+#. * request but nothing is returned and we should
+#. * reset any form content. We'll instruct the
+#. * user to do that, and restore the current
+#. * document. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1340
+msgid "Request fulfilled. Reset Content."
+msgstr "Estouro de requisição. Limpando pedido."
+
+#. Not Modified
+#.
+#. * We didn't send an "If-Modified-Since" header,
+#. * so this status is inappropriate. We'll deal
+#. * with it by showing the full header to the user
+#. * as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1459
+msgid "Got unexpected 304 Not Modified status."
+msgstr "Recebida resposta de valor 304."
+
+#: WWW/Library/Implementation/HTTP.c:1526
+msgid "Redirection of POST content requires user approval."
+msgstr "Redirecionamento de postagem requer autorização do usuário."
+
+#: WWW/Library/Implementation/HTTP.c:1541
+msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
+msgstr "Há uma ação de postagem.Tratando redirecionamento permanente como temporário.\n"
+
+#: WWW/Library/Implementation/HTTP.c:1586
+msgid "Retrying with access authorization information."
+msgstr "Repetindo com informações de autorização de acesso."
+
+#: WWW/Library/Implementation/HTTP.c:1598
+msgid "Show the 401 message body?"
+msgstr "Mostra o corpo da mensagem 401?"
+
+#: WWW/Library/Implementation/HTTP.c:1643
+msgid "Show the 407 message body?"
+msgstr "Mostra o corpo da mensagem 407?"
+
+#.
+#. ** Bad or unknown server_status number.
+#. ** Take a chance and hope there is
+#. ** something to display. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1748
+msgid "Unknown status reply from server!"
+msgstr "Resposta desconhecida de estado do servidor!"
+
+#: WWW/Library/Implementation/HTTelnet.c:101
+#, c-format
+msgid "remote %s session:"
+msgstr "seção remota %s:"
+
+#: WWW/Library/Implementation/HTWAIS.c:161
+msgid "Could not connect to WAIS server."
+msgstr "Não foi possível conectar ao servidor de WAIS."
+
+#: WWW/Library/Implementation/HTWAIS.c:170
+msgid "Could not open WAIS connection for reading."
+msgstr "Não foi possível conectar ao servidor de WAIS para leitura."
+
+#: WWW/Library/Implementation/HTWAIS.c:194
+msgid "Diagnostic code is "
+msgstr "O código de diagnóstido é "
+
+#: WWW/Library/Implementation/HTWAIS.c:463
+msgid "Index "
+msgstr "Arquivo de indexação "
+
+#: WWW/Library/Implementation/HTWAIS.c:467
+#, c-format
+msgid " contains the following %d item%s relevant to \""
+msgstr " contém os segintes %d ítens %s relativos a\""
+
+#: WWW/Library/Implementation/HTWAIS.c:475
+msgid "The first figure after each entry is its relative score, "
+msgstr "A primeira figura após qualquer entrada está em posição relativa, "
+
+#: WWW/Library/Implementation/HTWAIS.c:476
+msgid "the second is the number of lines in the item."
+msgstr "o(a) segundo(a) é i número de linhas no ítem."
+
+#: WWW/Library/Implementation/HTWAIS.c:517
+msgid " (bad file name)"
+msgstr " (Nome incorreto de arquivo)"
+
+#: WWW/Library/Implementation/HTWAIS.c:542
+msgid "(bad doc id)"
+msgstr " (mau id de documento)"
+
+#: WWW/Library/Implementation/HTWAIS.c:558
+msgid "(Short Header record, can't display)"
+msgstr "Campo de cabeçalho curto, não é possível mostrar)"
+
+#: WWW/Library/Implementation/HTWAIS.c:565
+msgid ""
+"\n"
+"Long Header record, can't display\n"
+msgstr ""
+"\n"
+"Campo de cabeçalho longo, não é possível mostrar.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:572
+msgid ""
+"\n"
+"Text record\n"
+msgstr ""
+"\n"
+"Registro de texto\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:581
+msgid ""
+"\n"
+"Headline record, can't display\n"
+msgstr ""
+"\n"
+"Registro de cabeçalho. Não é possível apresentar.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:589
+msgid ""
+"\n"
+"Code record, can't display\n"
+msgstr ""
+"\n"
+"Registro de código, não é possível apresentar\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:691
+msgid "Syntax error in WAIS URL"
+msgstr "Erro de sintaxe na URL WAIS"
+
+#: WWW/Library/Implementation/HTWAIS.c:761
+msgid " (WAIS Index)"
+msgstr " (WAIS Index)"
+
+#: WWW/Library/Implementation/HTWAIS.c:768
+msgid "WAIS Index: "
+msgstr "Index WAIS:"
+
+#: WWW/Library/Implementation/HTWAIS.c:774
+msgid "This is a link for searching the "
+msgstr "Esta é uma ligação para procurar o(a)"
+
+#: WWW/Library/Implementation/HTWAIS.c:778
+msgid " WAIS Index.\n"
+msgstr " Index do WAIS.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:805
+msgid ""
+"\n"
+"Enter the 's'earch command and then specify search words.\n"
+msgstr ""
+"\n"
+"Entre com 's' para procura e especifique as palavras de busca.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:827
+msgid " (in "
+msgstr " (em "
+
+#: WWW/Library/Implementation/HTWAIS.c:836
+msgid "WAIS Search of \""
+msgstr "Procura WAIS de \""
+
+#: WWW/Library/Implementation/HTWAIS.c:840
+msgid "\" in: "
+msgstr "\" em: "
+
+#: WWW/Library/Implementation/HTWAIS.c:855
+msgid "HTWAIS: Request too large."
+msgstr "HTWAIS: Requisição muito grande."
+
+#: WWW/Library/Implementation/HTWAIS.c:864
+msgid "Searching WAIS database..."
+msgstr "Procurando no banco de dados WAIS..."
+
+#: WWW/Library/Implementation/HTWAIS.c:874
+msgid "Search interrupted."
+msgstr "Procura interrompida."
+
+#: WWW/Library/Implementation/HTWAIS.c:924
+msgid "Can't convert format of WAIS document"
+msgstr "Impossível converter formado do documento WAIS."
+
+#: WWW/Library/Implementation/HTWAIS.c:968
+msgid "HTWAIS: Request too long."
+msgstr "HTWAIS: Requisição muito grande."
+
+#.
+#. ** Actually do the transaction given by request_message.
+#.
+#: WWW/Library/Implementation/HTWAIS.c:982
+msgid "Fetching WAIS document..."
+msgstr "Procurando documento WAIS..."
+
+#. display_search_response(target, retrieval_response,
+#. wais_database, keywords);
+#: WWW/Library/Implementation/HTWAIS.c:1021
+msgid "No text was returned!\n"
+msgstr "Não foi retornado texto algum!\n"
+
+#: WWW/Library/Implementation/HTWSRC.c:287
+msgid " NOT GIVEN in source file; "
+msgstr "NÃO ENTREGAR no arquivo de fonte;"
+
+#: WWW/Library/Implementation/HTWSRC.c:311
+msgid " WAIS source file"
+msgstr "Arquivo de fonte do WAIS"
+
+#: WWW/Library/Implementation/HTWSRC.c:318
+msgid " description"
+msgstr " descrição"
+
+#: WWW/Library/Implementation/HTWSRC.c:328
+msgid "Access links"
+msgstr "Acesso de ligações"
+
+#: WWW/Library/Implementation/HTWSRC.c:345
+msgid "Direct access"
+msgstr "Acesso direto"
+
+#. * Proxy will be used if defined, so let user know that - FM *
+#: WWW/Library/Implementation/HTWSRC.c:348
+msgid " (or via proxy server, if defined)"
+msgstr " (ou via servidor de proxy, se definido)"
+
+#: WWW/Library/Implementation/HTWSRC.c:363
+msgid "Maintainer"
+msgstr "Mantenedor"
+
+#: WWW/Library/Implementation/HTWSRC.c:371
+msgid "Host"
+msgstr "Servidor"
+
+#: src/GridText.c:607
+msgid "Memory exhausted, display interrupted!"
+msgstr "Memória exaurida, apresentação interrompida!"
+
+#: src/GridText.c:612
+msgid "Memory exhausted, will interrupt transfer!"
+msgstr "Memória exaurida, srá interrompida a transferência!"
+
+#: src/GridText.c:3395
+msgid " *** MEMORY EXHAUSTED ***"
+msgstr "*** MEMÓRIA EXAURIDA ***"
+
+#: src/GridText.c:5733 src/GridText.c:5740 src/LYList.c:258
+msgid "unknown field or link"
+msgstr "Campo ou ligacão desconhecidos."
+
+#: src/GridText.c:5749
+msgid "text entry field"
+msgstr "Campo de entrada de texto"
+
+#: src/GridText.c:5752
+msgid "password entry field"
+msgstr "Campo de entrada de senha"
+
+#: src/GridText.c:5755
+msgid "checkbox"
+msgstr "Caixa de checagem"
+
+#: src/GridText.c:5758
+msgid "radio button"
+msgstr "Botão de rádio"
+
+#: src/GridText.c:5761
+msgid "submit button"
+msgstr "Botão de envio"
+
+#: src/GridText.c:5764
+msgid "reset button"
+msgstr "Botão de limpar"
+
+#: src/GridText.c:5767
+msgid "popup menu"
+msgstr "Menu de pop-up"
+
+#: src/GridText.c:5770
+msgid "hidden form field"
+msgstr "Campo de formulário escondido"
+
+#: src/GridText.c:5773
+msgid "text entry area"
+msgstr "Área de entrada de texto"
+
+#: src/GridText.c:5776
+msgid "range entry field"
+msgstr "Faixa de entrada de texto"
+
+#: src/GridText.c:5779
+msgid "file entry field"
+msgstr "Campo de entrada de arquivo"
+
+#: src/GridText.c:5782
+msgid "text-submit field"
+msgstr "Campo de envio de texto"
+
+#: src/GridText.c:5785
+msgid "image-submit button"
+msgstr "Botão de imagem de envio de formulário"
+
+#: src/GridText.c:5788
+msgid "keygen field"
+msgstr "Campo de 'chave'"
+
+#: src/GridText.c:5791
+msgid "unknown form field"
+msgstr "Campo desconhecido"
+
+#. We can't open the file, what do we do?
+#: src/GridText.c:10348
+#, fuzzy
+msgid "Can't open file for uploading"
+msgstr "Impossóvel abrir arquivo para descompressão!"
+
+#. We got an error reading the file, what do we do?
+#: src/GridText.c:10359
+msgid "Short read from file, problem?"
+msgstr ""
+
+#: src/GridText.c:10721
+#, c-format
+msgid "Submitting %s"
+msgstr "Enviando %s"
+
+#. ugliness has happened; inform user and do the best we can
+#: src/GridText.c:11887
+msgid "Hang Detect: TextAnchor struct corrupted - suggest aborting!"
+msgstr ""
+
+#. don't show previous state
+#: src/GridText.c:12092
+msgid "Wrap lines to fit displayed area?"
+msgstr ""
+
+#: src/GridText.c:12144
+msgid "Very long lines have been wrapped!"
+msgstr ""
+
+#: src/GridText.c:12591
+msgid "Very long lines have been truncated!"
+msgstr ""
+
+#: src/HTAlert.c:155 src/LYShowInfo.c:318
+msgid "bytes"
+msgstr "bytes"
+
+#: src/HTAlert.c:156
+msgid "KB"
+msgstr "KB"
+
+#: src/HTAlert.c:255
+#, c-format
+msgid "Read %s of %s of data"
+msgstr "Lido %s de %s dos dados."
+
+#: src/HTAlert.c:257
+#, c-format
+msgid "Read %s of data"
+msgstr "Lido %s dos dados"
+
+#: src/HTAlert.c:262
+#, c-format
+msgid ", %s/sec"
+msgstr ", %s/sec."
+
+#: src/HTAlert.c:269
+#, c-format
+msgid " (stalled for %ld sec)"
+msgstr ""
+
+#: src/HTAlert.c:271
+#, c-format
+msgid ", ETA %ld sec"
+msgstr ", ETA %ld sec."
+
+#: src/HTAlert.c:277
+msgid " (Press 'z' to abort)"
+msgstr " (Pressione 'z' para abortar)"
+
+#. Meta-note: don't move the following note from its place right
+#. in front of the first gettext(). As it is now, it should
+#. automatically appear in generated lynx.pot files. - kw
+#.
+#. NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+#. * will take the first byte of the translation as a positive response
+#. * to Yes/No questions. If you provide a translation for "no", lynx
+#. * will take the first byte of the translation as a negative response
+#. * to Yes/No questions. For both, lynx will also try to show the
+#. * first byte in the prompt as a character, instead of (y) or (n),
+#. * respectively. This will not work right for multibyte charsets!
+#. * Don't translate "yes" and "no" for CJK character sets (or translate
+#. * them to "yes" and "no"). For a translation using UTF-8, don't
+#. * translate if the translation would begin with anything but a 7-bit
+#. * (US_ASCII) character. That also means do not translate if the
+#. * translation would begin with anything but a 7-bit character, if
+#. * you use a single-byte character encoding (a charset like ISO-8859-n)
+#. * but anticipate that the message catalog may be used re-encoded in
+#. * UTF-8 form.
+#. * For translations using other character sets, you may also wish to
+#. * leave "yes" and "no" untranslated, if using (y) and (n) is the
+#. * preferred behavior.
+#. * Lynx will also accept y Y n N as responses unless there is a conflict
+#. * with the first letter of the "yes" or "no" translation.
+#.
+#: src/HTAlert.c:334
+msgid "yes"
+msgstr "sim"
+
+#: src/HTAlert.c:335
+msgid "no"
+msgstr "não"
+
+#: src/HTML.c:6342
+msgid "Description:"
+msgstr "Descrição:"
+
+#: src/HTML.c:6347
+msgid "(none)"
+msgstr " (vazio)"
+
+#: src/HTML.c:6351
+msgid "Filepath:"
+msgstr "Caminho:"
+
+#: src/HTML.c:6356
+msgid "(unknown)"
+msgstr "(desconhecido)"
+
+#: src/HTML.c:7804
+msgid "Document has only hidden links. Use the 'l'ist command."
+msgstr "Documento contém somente ligações ocultas. Use 'l' para listar."
+
+#: src/HTML.c:8328
+msgid "Source cache error - disk full?"
+msgstr ""
+
+#: src/HTML.c:8341
+msgid "Source cache error - not enough memory!"
+msgstr ""
+
+#: src/LYBookmark.c:166
+msgid ""
+" This file is an HTML representation of the X Mosaic hotlist file.\n"
+" Outdated or invalid links may be removed by using the\n"
+" remove bookmark command, it is usually the 'R' key but may have\n"
+" been remapped by you or your system administrator."
+msgstr ""
+" Este arquivo é uma representação HTML do Livro de marcações do\n"
+" Mosaic. Ligações antigas ou inválidas podem ser removidas usando\n"
+" o comando de remover marcação 'R'. Este comando pode ser sido \n"
+" alterado pelo administrador do sistema."
+
+#: src/LYBookmark.c:382
+msgid ""
+" You can delete links by the 'R' key<br>\n"
+"<ol>\n"
+msgstr ""
+
+#: src/LYBookmark.c:385
+msgid ""
+" You can delete links using the remove bookmark command. It is usually\n"
+" the 'R' key but may have been remapped by you or your system\n"
+" administrator."
+msgstr ""
+" Ligações antigas ou inválidas podem ser removidas usando\n"
+" o comando de remover marcação 'R'. Este comando pode ser sido \n"
+" alterado pelo administrador do sistema."
+
+#: src/LYBookmark.c:389
+msgid ""
+" This file also may be edited with a standard text editor to delete\n"
+" outdated or invalid links, or to change their order."
+msgstr ""
+" Este arquivo também pode ser editado por um editor normal de texto para\n"
+" apagar as ligações antigas ou inválidas, ou para alterar sua ordem.<"
+
+#: src/LYBookmark.c:392
+msgid ""
+"Note: if you edit this file manually\n"
+" you should not change the format within the lines\n"
+" or add other HTML markup.\n"
+" Make sure any bookmark link is saved as a single line."
+msgstr ""
+"Nota: Se você editar este arquivo manualmente, você não deve\n"
+" mudar o formato das linhas ou inserir alguma TAG HTML.\n"
+" Tenha certeza de que cada ligação está salva como uma linha simples."
+
+#: src/LYBookmark.c:683
+#, c-format
+msgid "File may be recoverable from %s during this session"
+msgstr ""
+
+#.
+#. * Neither the path as given nor any components examined by
+#. * backing up were stat()able. - kw
+#.
+#: src/LYCgi.c:232
+msgid "Unable to access cgi script"
+msgstr "Impossível acessar script CGI"
+
+#: src/LYCgi.c:651 src/LYCgi.c:654
+msgid "Good Advice"
+msgstr "Conselho útil"
+
+#: src/LYCgi.c:657
+msgid "An excellent http server for VMS is available via"
+msgstr "Um excelente servidor de HTTP para VMS está dispinível via"
+
+#: src/LYCgi.c:664
+msgid "this link"
+msgstr "esta ligação"
+
+#: src/LYCgi.c:668
+msgid "It provides state of the art CGI script support.\n"
+msgstr "Provê o estado do suporte a scripts CGI\n"
+
+#: src/LYClean.c:108
+msgid "Exiting via interrupt:"
+msgstr "Saindo via interrupção:"
+
+#: src/LYCookie.c:2659
+msgid "(from a previous session)"
+msgstr "(De uma seção anterior)"
+
+#: src/LYCookie.c:2719
+msgid "Maximum Gobble Date:"
+msgstr "Data máxima de aquisição:"
+
+#: src/LYCookie.c:2764
+msgid "Internal"
+msgstr "(interno)"
+
+#: src/LYCookie.c:2765
+msgid "cookie_domain_flag_set error, aborting program"
+msgstr ""
+
+#: src/LYCurses.c:936
+msgid "Terminal initialisation failed - unknown terminal type?"
+msgstr "Inicialização do terminal falhou - Terminal de tipo desconhecido?"
+
+#: src/LYCurses.c:1328
+msgid "Terminal ="
+msgstr "Terminal ="
+
+#: src/LYCurses.c:1332
+msgid "You must use a vt100, 200, etc. terminal with this program."
+msgstr "Você deve usar um terminal vt100, 200, etc... com este programa."
+
+#: src/LYCurses.c:1384
+msgid "Your Terminal type is unknown!"
+msgstr "O tipo do seu terminal é desconhecido!"
+
+#: src/LYCurses.c:1385
+msgid "Enter a terminal type:"
+msgstr "Entre com o tipo do terminal:"
+
+#: src/LYCurses.c:1398
+msgid "TERMINAL TYPE IS SET TO"
+msgstr "TERMINAL ESTÁ CONFIGURADO PARA"
+
+#: src/LYCurses.c:1749
+#, c-format
+msgid ""
+"\n"
+"A Fatal error has occurred in %s Ver. %s\n"
+msgstr ""
+"\n"
+"Um erro fatal ocorreu em %s Ver. %s\n"
+
+#: src/LYCurses.c:1751
+msgid ""
+"\n"
+"Please notify your system administrator to confirm a bug, and if\n"
+"confirmed, to notify the lynx-dev list. Bug reports should have concise\n"
+"descriptions of the command and/or URL which causes the problem, the\n"
+"operating system name with version number, the TCPIP implementation, the\n"
+"TRACEBACK if it can be captured, and any other relevant information.\n"
+msgstr ""
+"\n"
+"Por favor, notifique o administrador do sistema para confirmar o nug, e se\n"
+"for confirmado, para notificar a lista lynx-dev. Reportes de bug devem ter\n"
+"uma descrição concisa do comando e/ou URL que causou o problema, o sistema\n"
+"operacional e sua versão, a implementação TCPIP, o 'TRACEBACK' se puder ser\n"
+"capturado, e qualquer outra informação relevante.\n"
+
+#: src/LYEdit.c:264
+msgid "Editor killed by signal"
+msgstr ""
+
+#: src/LYEdit.c:266
+#, c-format
+msgid "Editor returned with error status, %s"
+msgstr ""
+
+#: src/LYEdit.c:267
+msgid "reason unknown."
+msgstr ""
+
+#: src/LYDownload.c:520
+msgid "Downloaded link:"
+msgstr "Ligaçao copiada:"
+
+#: src/LYDownload.c:525
+msgid "Suggested file name:"
+msgstr "Sugestão de nome do arquivo:"
+
+#: src/LYDownload.c:530
+msgid "Standard download options:"
+msgstr "Opções padrão de cópia:"
+
+#: src/LYDownload.c:531
+msgid "Download options:"
+msgstr "Opções de cópia"
+
+#: src/LYDownload.c:545
+msgid "Save to disk"
+msgstr "Salva no disco"
+
+#: src/LYDownload.c:547
+msgid "Save to disk disabled."
+msgstr "Salvar para o disco está desabilitado."
+
+#: src/LYDownload.c:551 src/LYPrint.c:1338
+msgid "Local additions:"
+msgstr "Adições locais:"
+
+#: src/LYDownload.c:560 src/LYUpload.c:224
+msgid "No Name Given"
+msgstr "Não foi informado nome"
+
+#: src/LYHistory.c:633
+msgid "You selected:"
+msgstr "Você selecionou:"
+
+#: src/LYHistory.c:657 src/LYHistory.c:905
+msgid "(no address)"
+msgstr "(sem endereço)"
+
+#: src/LYHistory.c:661
+msgid " (internal)"
+msgstr "(interno)"
+
+#: src/LYHistory.c:663
+msgid " (was internal)"
+msgstr " (foi interno)"
+
+#: src/LYHistory.c:761
+msgid " (From History)"
+msgstr " (Do histórico)"
+
+#: src/LYHistory.c:825
+msgid "You visited (POSTs, bookmark, menu and list files excluded):"
+msgstr "Você visitou (POSTs, Livro de marcações, menu e listas de arquivos excluidos):"
+
+#: src/LYHistory.c:1124
+msgid "(No messages yet)"
+msgstr ""
+
+#: src/LYLeaks.c:78
+msgid "Invalid pointer detected."
+msgstr "Ponto inválido detectado."
+
+#: src/LYLeaks.c:80 src/LYLeaks.c:117
+msgid "Pointer:"
+msgstr "Ponteiro:"
+
+#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:136
+msgid "FileName:"
+msgstr "Arquivo:"
+
+#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:139 src/LYLeaks.c:150
+msgid "LineCount:"
+msgstr "Numero de Linha(s):"
+
+#: src/LYLeaks.c:115
+msgid "Memory leak detected."
+msgstr "Vazamento de memória detectado."
+
+#: src/LYLeaks.c:120
+msgid "Contains:"
+msgstr "Contém:"
+
+#: src/LYLeaks.c:133
+msgid "ByteSize:"
+msgstr "Tamanho em bytes:"
+
+#: src/LYLeaks.c:147
+msgid "realloced:"
+msgstr "realocado:"
+
+#: src/LYLeaks.c:170
+msgid "Total memory leakage this run:"
+msgstr "Total de memória gasta nesta execução:"
+
+#: src/LYList.c:91
+msgid "References in "
+msgstr "Referências em "
+
+#: src/LYList.c:92
+msgid "this document:"
+msgstr "este documento:"
+
+#: src/LYList.c:98
+msgid "Visible links:"
+msgstr "Ligações visíveis:"
+
+#: src/LYList.c:199 src/LYList.c:319
+msgid "Hidden links:"
+msgstr "Ligações escondidas:"
+
+#: src/LYList.c:267
+msgid "References"
+msgstr "Referências"
+
+#: src/LYList.c:269
+msgid "Visible links"
+msgstr "Ligações visíveis"
+
+#: src/LYLocal.c:267
+#, c-format
+msgid "Unable to get status of '%s'."
+msgstr "Impossível pegar estado de '%s'."
+
+#: src/LYLocal.c:301
+msgid "The selected item is not a file or a directory! Request ignored."
+msgstr "O ítem selecionado não é um diretório ou arquivo! Requisição ignorada."
+
+#: src/LYLocal.c:383
+#, c-format
+msgid "Unable to %s due to system error!"
+msgstr "Impossível executar %s em razão de falha do sistema!"
+
+#. error return
+#: src/LYLocal.c:415
+#, c-format
+msgid "Probable failure to %s due to system error!"
+msgstr "Falha possível em %s devido a falha do sistema!"
+
+#: src/LYLocal.c:453
+#, c-format
+msgid "move %s to %s"
+msgstr "move %s para %s"
+
+#: src/LYLocal.c:475
+msgid "There is already a directory with that name! Request ignored."
+msgstr "Já existe um diretório com este nome! Requisição ignorada."
+
+#: src/LYLocal.c:477
+msgid "There is already a file with that name! Request ignored."
+msgstr "Já existe um arquivo com este nome! Requisição ignorada."
+
+#: src/LYLocal.c:479
+msgid "The specified name is already in use! Request ignored."
+msgstr "O nome especificado já está em uso! Requisição ignorada."
+
+#: src/LYLocal.c:490
+msgid "Destination has different owner! Request denied."
+msgstr "Destino tem um dono difwerente! Requisição impedida."
+
+#: src/LYLocal.c:493
+msgid "Destination is not a valid directory! Request denied."
+msgstr "Destino não é um diretório válido! Requisição impedida."
+
+#: src/LYLocal.c:516
+msgid "Remove all tagged files and directories?"
+msgstr "Remove todos os diretórios e arquivos marcados"
+
+#: src/LYLocal.c:537
+#, c-format
+msgid "remove %s"
+msgstr "remove %s"
+
+#: src/LYLocal.c:580
+msgid "Enter new location for tagged items: "
+msgstr "Entre com novo local para itens marcados:"
+
+#: src/LYLocal.c:649
+msgid "Path too long"
+msgstr "Caminho muito grande"
+
+#: src/LYLocal.c:680
+msgid "Source and destination are the same location - request ignored!"
+msgstr "Fonte e destino são o mesmo local - requisição impedida!"
+
+#: src/LYLocal.c:738
+msgid "Enter new name for directory: "
+msgstr "Entre com o novo nome para o diretório:"
+
+#: src/LYLocal.c:740
+msgid "Enter new name for file: "
+msgstr "Entre com o novo nome do arquivo:"
+
+#: src/LYLocal.c:751
+msgid "Illegal character (path-separator) found! Request ignored."
+msgstr "Caractere inválido \"/\" encontrado! requisição ignorada."
+
+#: src/LYLocal.c:800
+msgid "Enter new location for directory: "
+msgstr "Entre com novo local para o diretório:"
+
+#: src/LYLocal.c:802
+msgid "Enter new location for file: "
+msgstr "Entre com novo local para o arquivo:"
+
+#: src/LYLocal.c:827
+msgid "Unexpected failure - unable to find trailing path separator"
+msgstr "Falha inexperada - Impossível encontrar caminho \"/\""
+
+#: src/LYLocal.c:847
+msgid "Source and destination are the same location! Request ignored!"
+msgstr "Fonte e destino são o mesmo local! Requisição ignorada!"
+
+#: src/LYLocal.c:894
+msgid "Modify name, location, or permission (n, l, or p): "
+msgstr "Modifica nome, local, ou permissão (n,l,p):"
+
+#: src/LYLocal.c:896
+msgid "Modify name or location (n or l): "
+msgstr "Modifica nome ou local (n,l):"
+
+#.
+#. * Code for changing ownership needed here.
+#.
+#: src/LYLocal.c:925
+msgid "This feature not yet implemented!"
+msgstr "Esta propriedade não foi implementada ainda!"
+
+#: src/LYLocal.c:943
+msgid "Enter name of file to create: "
+msgstr "Entre com o nome do arquivo a ser criado:"
+
+#: src/LYLocal.c:951 src/LYLocal.c:999
+msgid "Illegal redirection \"//\" found! Request ignored."
+msgstr "Redirecionamento ilegal \"//\" encontrado! Requisição ignorada."
+
+#: src/LYLocal.c:966
+#, c-format
+msgid "create %s"
+msgstr "criar %s"
+
+#: src/LYLocal.c:991
+msgid "Enter name for new directory: "
+msgstr "Entre com o nome para o novo diretório:"
+
+#: src/LYLocal.c:1042
+msgid "Create file or directory (f or d): "
+msgstr "Criar 'f' arquivo ou 'd' diretório (f ou d):"
+
+#: src/LYLocal.c:1083
+#, c-format
+msgid "Remove '%s' and all of its contents?"
+msgstr "Remove '%s' e todos que ele contém:"
+
+#: src/LYLocal.c:1086
+msgid "Remove directory and all of its contents?"
+msgstr "Remove diretório e sub-diretórios:"
+
+#: src/LYLocal.c:1090
+#, c-format
+msgid "Remove file '%s'?"
+msgstr "Remove arquivo '%s':"
+
+#: src/LYLocal.c:1092
+msgid "Remove file?"
+msgstr "Remove arquivo:"
+
+#: src/LYLocal.c:1097
+#, c-format
+msgid "Remove symbolic link '%s'?"
+msgstr "Remove uma ligação simbólcia '%s':"
+
+#: src/LYLocal.c:1099
+msgid "Remove symbolic link?"
+msgstr "Remove ligação simbólica:"
+
+#: src/LYLocal.c:1190
+msgid "Sorry, don't know how to permit non-UNIX files yet."
+msgstr "Desculpe, não sei como permitir arquivos não-UNIX ainda."
+
+#: src/LYLocal.c:1220
+msgid "Unable to open permit options file"
+msgstr "Impossível abrir arquivo de opções de permissão"
+
+#: src/LYLocal.c:1247
+msgid "Specify permissions below:"
+msgstr "Especifique as permissões abaixo:"
+
+#: src/LYLocal.c:1248 src/LYShowInfo.c:196
+msgid "Owner:"
+msgstr "Dono:"
+
+#: src/LYLocal.c:1264
+msgid "Group"
+msgstr "Grupo"
+
+#: src/LYLocal.c:1280
+msgid "Others:"
+msgstr "Outros:"
+
+#: src/LYLocal.c:1298
+msgid "form to permit"
+msgstr "forma como permitir"
+
+#: src/LYLocal.c:1396
+msgid "Invalid mode format."
+msgstr "Formato de modo inválido"
+
+#: src/LYLocal.c:1400
+msgid "Invalid syntax format."
+msgstr "Formato da sintaxe inválido."
+
+#: src/LYLocal.c:1575
+msgid "NULL URL pointer"
+msgstr "Ponteiro de URL vazio"
+
+#: src/LYLocal.c:1670
+msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
+msgstr "Atenção! UUDecodificação ficará no diretório onde você chamou o Lynx."
+
+#: src/LYLocal.c:1782
+#, c-format
+msgid "Executing %s "
+msgstr "Executando %s "
+
+#: src/LYLocal.c:1785
+msgid "Executing system command. This might take a while."
+msgstr "Executando comando de sistema. Isto pode demorar um pouco."
+
+#: src/LYLocal.c:1831
+msgid "Unable to open file management menu file."
+msgstr "Impossível abrir arquivo de menu de gerenciamento de arquivos."
+
+#: src/LYLocal.c:1862
+msgid "Current directory:"
+msgstr "Diretório corrente:"
+
+#: src/LYLocal.c:1865 src/LYLocal.c:1883
+msgid "Current selection:"
+msgstr "Seleção corrente:"
+
+#: src/LYLocal.c:1869
+msgid "Nothing currently selected."
+msgstr "Nada foi selecionado."
+
+#: src/LYLocal.c:1884
+msgid "tagged item:"
+msgstr "item marcado:"
+
+#: src/LYLocal.c:1884
+msgid "tagged items:"
+msgstr "itens marcados:"
+
+#: src/LYLocal.c:1983 src/LYLocal.c:1994
+msgid "Illegal filename; request ignored."
+msgstr "Nome de arquivo inválido. Requisição ignorada."
+
+#: src/LYLocal.c:2137
+msgid "The selected item is not a directory! Request ignored."
+msgstr "O item selecionado não é um diretório. Requisição ignorada."
+
+#. directory not writable
+#: src/LYLocal.c:2141
+msgid "Install in the selected directory not permitted."
+msgstr "Instalação no diretório selecionado não é possivel."
+
+#: src/LYLocal.c:2146
+msgid "Just a moment, ..."
+msgstr "Só um momento..."
+
+#: src/LYLocal.c:2163
+msgid "Error buiding install args"
+msgstr ""
+
+#: src/LYLocal.c:2178 src/LYLocal.c:2210
+#, c-format
+msgid "Source and target are the same: %s"
+msgstr ""
+
+#: src/LYLocal.c:2188 src/LYLocal.c:2220
+#, c-format
+msgid "Already in target directory: %s"
+msgstr "Lendo diretório: %s"
+
+#: src/LYLocal.c:2238
+msgid "Installation complete"
+msgstr "Instalação completa."
+
+#: src/LYLocal.c:2427
+msgid "Temporary URL or list would be too long."
+msgstr "URL temporário ou lista podem estar muito longas."
+
+#: src/LYMail.c:503
+msgid "Sending"
+msgstr "Enviando"
+
+#: src/LYMail.c:989
+#, c-format
+msgid "The link %s :?: %s \n"
+msgstr "A ligação %s :?: %s \n"
+
+#: src/LYMail.c:991
+#, c-format
+msgid "called \"%s\"\n"
+msgstr "chamado(a) \"%s\"\n"
+
+#: src/LYMail.c:992
+#, c-format
+msgid "in the file \"%s\" called \"%s\"\n"
+msgstr "no arquivo \"%s\" chamado \"%s\" \n"
+
+#: src/LYMail.c:993
+msgid "was requested but was not available."
+msgstr "foi requisitado mas não está disponível."
+
+#: src/LYMail.c:994
+msgid "Thought you might want to know."
+msgstr "Embora você possa querer saber."
+
+#: src/LYMail.c:996
+msgid "This message was automatically generated by"
+msgstr "Esta mensagem foi gerada automaticamente por"
+
+#: src/LYMain.c:897
+msgid "No Winsock found, sorry."
+msgstr "Não foi encontrado o Winsock, desculpe."
+
+#: src/LYMain.c:1103
+msgid "You MUST define a valid TMP or TEMP area!\n"
+msgstr "Você deve definir uma área TMP ou TEMP válida!\n"
+
+#: src/LYMain.c:1156 src/LYMainLoop.c:5117
+msgid "No such directory"
+msgstr " diretório"
+
+#: src/LYMain.c:1378
+#, c-format
+msgid ""
+"\n"
+"Configuration file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Arquivo %s de configuração não está disponível.\n"
+"\n"
+
+#: src/LYMain.c:1388
+msgid ""
+"\n"
+"Lynx character sets not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Não foi declarada uma coleção de caracteres Lynx.\n"
+"\n"
+
+#: src/LYMain.c:1417
+msgid ""
+"\n"
+"Lynx edit map not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Editor de mapas Lynx não foi declarado.\n"
+"\n"
+
+#: src/LYMain.c:1446
+#, c-format
+msgid ""
+"\n"
+"Lynx file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Arquivo Lynx %s não está disponível.\n"
+"\n"
+
+#: src/LYMain.c:1704
+msgid "Warning:"
+msgstr ""
+
+#: src/LYMain.c:2247
+msgid "persistent cookies state will be changed in next session only."
+msgstr "O estado dos cookies permanentes será alterado na próxima seção."
+
+#: src/LYMain.c:2477 src/LYMain.c:2525
+#, c-format
+msgid "Lynx: ignoring unrecognized charset=%s\n"
+msgstr ""
+
+#: src/LYMain.c:3047
+#, c-format
+msgid "%s Version %s (%s)\n"
+msgstr "%s Versão %s (%s)\n"
+
+#: src/LYMain.c:3072
+#, c-format
+msgid "Built on %s %s %s\n"
+msgstr "Criado em %s %s %s\n"
+
+#: src/LYMain.c:3077
+msgid "Copyrights held by the University of Kansas, CERN, and other contributors.\n"
+msgstr "Copyrights mantidos pela University of Kansas, CERN, e outros colaboradores.\n"
+
+#: src/LYMain.c:3079
+msgid "Distributed under the GNU General Public License.\n"
+msgstr "Distribuido pela GNU General Public License.\n"
+
+#: src/LYMain.c:3081
+msgid ""
+"See http://lynx.browser.org/ and the online help for more information.\n"
+"\n"
+msgstr ""
+"Veja http://lynx.browser.org/ e o help on-line para mais informações.\n"
+"\n"
+
+#: src/LYMain.c:3800
+#, c-format
+msgid "USAGE: %s [options] [file]\n"
+msgstr "USO: %s [opções] [arquivo]\n"
+
+#: src/LYMain.c:3801
+msgid "Options are:\n"
+msgstr "Opções são:\n"
+
+#: src/LYMain.c:4060
+#, c-format
+msgid "%s: Invalid Option: %s\n"
+msgstr "%s: Opção inválida: %s\n"
+
+#: src/LYMainLoop.c:512
+#, c-format
+msgid "Internal error: Invalid mouse link %d!"
+msgstr ""
+
+#.
+#. * Make a name for this new URL.
+#.
+#: src/LYMainLoop.c:625 src/LYMainLoop.c:5139
+msgid "A URL specified by the user"
+msgstr "Uma URL especificada pelo usuário"
+
+#: src/LYMainLoop.c:1114
+msgid "Enctype multipart/form-data not yet supported! Cannot submit."
+msgstr "multipart/form-data não é suportado ainda! Impossível enviar."
+
+#.
+#. * Make a name for this help file.
+#.
+#: src/LYMainLoop.c:3097
+msgid "Help Screen"
+msgstr "Tela de Ajuda"
+
+#: src/LYMainLoop.c:3231
+msgid "System Index"
+msgstr "Indexador de sistema"
+
+#: src/LYMainLoop.c:3611 src/LYMainLoop.c:5347
+msgid "Entry into main screen"
+msgstr "Entrada na tela principal"
+
+#: src/LYMainLoop.c:3897
+msgid "No next document present"
+msgstr ""
+
+#: src/LYMainLoop.c:4206
+msgid "charset for this document specified explicitly, sorry..."
+msgstr "O mapa de caracteres deve ser explicito no documento, desculpe..."
+
+#: src/LYMainLoop.c:5093
+msgid "cd to:"
+msgstr " para "
+
+#: src/LYMainLoop.c:5120
+msgid "A component of path is not a directory"
+msgstr ""
+
+#: src/LYMainLoop.c:5123
+msgid "failed to change directory"
+msgstr "Impossível acessar diretório."
+
+#: src/LYMainLoop.c:6291
+msgid "Reparsing document under current settings..."
+msgstr "Reinterpretando documento pelas opções atuais..."
+
+#: src/LYMainLoop.c:6579 src/LYMainLoop.c:6583
+#, c-format
+msgid "Fatal error - could not open output file %s\n"
+msgstr "Erro fatal - não foi possível abrir arquivo %s\n"
+
+#: src/LYMainLoop.c:7719 src/LYMainLoop.c:7892
+msgid "-index-"
+msgstr " index"
+
+#: src/LYMainLoop.c:7829
+msgid "lynx: Can't access startfile"
+msgstr "lynx: Não foi possível acessar o arquivo principal"
+
+#: src/LYMainLoop.c:7842
+msgid "lynx: Start file could not be found or is not text/html or text/plain"
+msgstr "lynx: Arquivo inicial não pode ser encontrado ou não é texto/HTML"
+
+#: src/LYMainLoop.c:7843
+msgid " Exiting..."
+msgstr " Saindo..."
+
+#: src/LYMainLoop.c:7886
+msgid "-more-"
+msgstr ""
+
+#. Enable scrolling.
+#: src/LYNews.c:203
+msgid "You will be posting to:"
+msgstr "Você estará postando para:"
+
+#.
+#. * Get the mail address for the From header,
+#. * offering personal_mail_address as default.
+#.
+#: src/LYNews.c:212
+msgid ""
+"\n"
+"\n"
+" Please provide your mail address for the From: header\n"
+msgstr ""
+"\n"
+"\n"
+" Por favor forneça seu endereço de email para o cabeçalho\n"
+
+#.
+#. * Get the Subject header, offering the current
+#. * document's title as the default if this is a
+#. * followup rather than a new post. - FM
+#.
+#: src/LYNews.c:230
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Subject: header\n"
+msgstr ""
+"\n"
+"\n"
+"Por favor forneça ou edite o Assunto:\n"
+
+#: src/LYNews.c:322
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Organization: header\n"
+msgstr ""
+"\n"
+"\n"
+"Por favor forneça ou edite a Empresa:\n"
+
+#.
+#. * Use the built in line editior.
+#.
+#: src/LYNews.c:379
+msgid ""
+"\n"
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+"\n"
+"Por favor, entre com sua mensagem abaixo."
+
+#: src/LYNews.c:425
+msgid "Message has no original text!"
+msgstr "Mensagem não tem texto original!"
+
+#: src/LYOptions.c:743
+msgid "review/edit B)ookmarks files"
+msgstr "rever/editar B) Livro de Marcações"
+
+#: src/LYOptions.c:745
+msgid "B)ookmark file: "
+msgstr "B) Livro de Marcações:"
+
+#: src/LYOptions.c:2507 src/LYOptions.c:2531
+#, c-format
+msgid "Use %s to invoke the Options menu!"
+msgstr ""
+
+#: src/LYOptions.c:3208
+msgid "General Preferences"
+msgstr "Preferências pessoais"
+
+#. ***************************************************************
+#. User Mode: SELECT
+#: src/LYOptions.c:3212
+msgid "User mode"
+msgstr "Modo usuário"
+
+#. Editor: INPUT
+#: src/LYOptions.c:3218
+msgid "Editor"
+msgstr "Editor"
+
+#. Search Type: SELECT
+#: src/LYOptions.c:3223
+msgid "Type of Search"
+msgstr ""
+
+#. Cookies: SELECT
+#: src/LYOptions.c:3229
+msgid "Cookies"
+msgstr "Cookies"
+
+#: src/LYOptions.c:3243
+msgid "Keyboard Input"
+msgstr ""
+
+#. ***************************************************************
+#. Keypad Mode: SELECT
+#: src/LYOptions.c:3247
+msgid "Keypad mode"
+msgstr "Modo Keypad"
+
+#. Emacs keys: ON/OFF
+#: src/LYOptions.c:3253
+msgid "Emacs keys"
+msgstr "Teclas Emacs"
+
+#. VI Keys: ON/OFF
+#: src/LYOptions.c:3259
+msgid "VI keys"
+msgstr "Teclas VI"
+
+#. Line edit style: SELECT
+#. well, at least 2 line edit styles available
+#: src/LYOptions.c:3266
+msgid "Line edit style"
+msgstr ""
+
+#. Keyboard layout: SELECT
+#: src/LYOptions.c:3278
+msgid "Keyboard layout"
+msgstr ""
+
+#.
+#. * Display and Character Set
+#.
+#: src/LYOptions.c:3291
+msgid "Display and Character Set"
+msgstr "Mostra mapa de caracteres"
+
+#. ***************************************************************
+#. Display Character Set: SELECT
+#: src/LYOptions.c:3295
+msgid "Display character set"
+msgstr "Mostra mapa de caracteres"
+
+#: src/LYOptions.c:3324
+msgid "Assumed document character set"
+msgstr "Assumindo mapa de caracteres do documento"
+
+#.
+#. * Since CJK people hardly mixed with other world
+#. * we split the header to make it more readable:
+#. * "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
+#.
+#: src/LYOptions.c:3344
+msgid "CJK mode"
+msgstr "Modo CJK"
+
+#: src/LYOptions.c:3346
+msgid "Raw 8-bit"
+msgstr "Raw 8-bit"
+
+#. X Display: INPUT
+#: src/LYOptions.c:3354
+msgid "X Display"
+msgstr "Visual X"
+
+#.
+#. * Document Appearance
+#.
+#: src/LYOptions.c:3360
+msgid "Document Appearance"
+msgstr ""
+
+#: src/LYOptions.c:3366
+msgid "Show color"
+msgstr "Mostra cor"
+
+#. Show cursor: ON/OFF
+#: src/LYOptions.c:3390
+msgid "Show cursor"
+msgstr "Mostra cursor"
+
+#. Select Popups: ON/OFF
+#: src/LYOptions.c:3396
+msgid "Popups for select fields"
+msgstr "Pop-ups para os campos selecionados"
+
+#. HTML error recovery: SELECT
+#: src/LYOptions.c:3403
+msgid "HTML error recovery"
+msgstr "Erro recuperando HTML"
+
+#. Show Images: SELECT
+#: src/LYOptions.c:3410
+msgid "Show images"
+msgstr "Mostra imagens"
+
+#. Verbose Images: ON/OFF
+#: src/LYOptions.c:3424
+msgid "Verbose images"
+msgstr "Imagens explicitadas"
+
+#.
+#. * Headers Transferred to Remote Servers
+#.
+#: src/LYOptions.c:3432
+msgid "Headers Transferred to Remote Servers"
+msgstr "Cabeçalhos tranferidos ao servidor remoto"
+
+#. ***************************************************************
+#. Mail Address: INPUT
+#: src/LYOptions.c:3436
+msgid "Personal mail address"
+msgstr "Endereço pessoal de email"
+
+#. Preferred Document Character Set: INPUT
+#: src/LYOptions.c:3441
+msgid "Preferred document character set"
+msgstr "Preferências de mapa de caracteres do documento"
+
+#. Preferred Document Language: INPUT
+#: src/LYOptions.c:3446
+msgid "Preferred document language"
+msgstr "Preferência de linguagem do documento."
+
+#: src/LYOptions.c:3452
+msgid "User-Agent header"
+msgstr "Cabeçalho de Agente de Usuário"
+
+#.
+#. * Listing and Accessing Files
+#.
+#: src/LYOptions.c:3460
+msgid "Listing and Accessing Files"
+msgstr ""
+
+#. ***************************************************************
+#. FTP sort: SELECT
+#: src/LYOptions.c:3464
+msgid "FTP sort criteria"
+msgstr "Critérios de organização do FTP"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3471
+msgid "Local directory sort criteria"
+msgstr "Critérios de organizações dos diretórios locais"
+
+#: src/LYOptions.c:3479
+msgid "Show dot files"
+msgstr "Monstre arquivos de pontos"
+
+#: src/LYOptions.c:3487
+msgid "Execution links"
+msgstr "Ligações de execução"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3507
+msgid "Show transfer rate"
+msgstr "Transferência completada"
+
+#.
+#. * Special Files and Screens
+#.
+#: src/LYOptions.c:3516
+msgid "Special Files and Screens"
+msgstr ""
+
+#: src/LYOptions.c:3521
+msgid "Multi-bookmarks"
+msgstr "Multiplos Livros de Marcações"
+
+#: src/LYOptions.c:3529
+msgid "Review/edit Bookmarks files"
+msgstr "Rever/editar arquivos de Livro de Marcações"
+
+#: src/LYOptions.c:3531
+msgid "Goto multi-bookmark menu"
+msgstr "Ir para menu de multiplos livros de marcações"
+
+#: src/LYOptions.c:3533
+msgid "Bookmarks file"
+msgstr "Arquivo de Livro de marcações"
+
+#. Visited Pages: SELECT
+#: src/LYOptions.c:3539
+msgid "Visited Pages"
+msgstr "Página de ligações visitadas"
+
+#: src/LYPrint.c:959
+msgid " Print job complete.\n"
+msgstr "Leitura incompleta.\n"
+
+#: src/LYPrint.c:1296
+msgid "Document:"
+msgstr "Documento:"
+
+#: src/LYPrint.c:1297
+msgid "Number of lines:"
+msgstr "Número de Linhas:"
+
+#: src/LYPrint.c:1298
+msgid "Number of pages:"
+msgstr "Número de páginas:"
+
+#: src/LYPrint.c:1299
+msgid "pages"
+msgstr "páginas"
+
+#: src/LYPrint.c:1299
+msgid "page"
+msgstr "página"
+
+#: src/LYPrint.c:1300
+msgid "(approximately)"
+msgstr "(aproximadamente)"
+
+#: src/LYPrint.c:1305
+msgid "Some print functions have been disabled!"
+msgstr "Algumas funções de impressão foram desabilitadas!"
+
+#: src/LYPrint.c:1309
+msgid "Standard print options:"
+msgstr "Opções padrão de impressão:"
+
+#: src/LYPrint.c:1310
+msgid "Print options:"
+msgstr "Opções de impressão:"
+
+#: src/LYPrint.c:1316
+msgid "Save to a local file"
+msgstr "Salva para um arquivo local"
+
+#: src/LYPrint.c:1318
+msgid "Save to disk disabled"
+msgstr "Salvar para disco desabilitado"
+
+#: src/LYPrint.c:1324
+msgid "Mail the file"
+msgstr "Enviar arquivo por email"
+
+#: src/LYPrint.c:1330
+msgid "Print to the screen"
+msgstr "Mostra na tela"
+
+#: src/LYPrint.c:1334
+msgid "Print out on a printer attached to your vt100 terminal"
+msgstr "Imprime numa impressora atachada num terminal vt100."
+
+#: src/LYReadCFG.c:340
+msgid ""
+"Syntax Error parsing COLOR in configuration file:\n"
+"The line must be of the form:\n"
+"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
+"\n"
+"Here FOREGROUND and BACKGROUND must be one of:\n"
+"The special strings 'nocolor' or 'default', or\n"
+msgstr ""
+"Erro de sintaxe analizando cores no arquivo de configuração:\n"
+"A linha deve ser formada desta vorma:\n"
+"COR:INTEIRO:FRENTE:FUNDO\n"
+"\n"
+"Onde FRENTE e FUNDO devem ser um destes:\n"
+"O campo 'nocolor', ou 'default', ou\n"
+
+#: src/LYReadCFG.c:353
+msgid "Offending line:"
+msgstr "Linha 'infratora': "
+
+#: src/LYReadCFG.c:660
+#, c-format
+msgid "key remapping of %s to %s for %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:667
+#, c-format
+msgid "key remapping of %s to %s failed\n"
+msgstr "Remapeamento de teclas\n"
+
+#: src/LYReadCFG.c:688
+#, c-format
+msgid "invalid line-editor selection %s for key %s, selecting all\n"
+msgstr ""
+
+#: src/LYReadCFG.c:715 src/LYReadCFG.c:728
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:733
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) for %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:838
+#, c-format
+msgid "Lynx: cannot start, CERN rules file %s is not available\n"
+msgstr "Lynx: Impossível iniciar,CERN arquivo de regulamento %s não está disponível\n"
+
+#: src/LYReadCFG.c:840
+msgid "(no name)"
+msgstr "(sem nome)"
+
+#: src/LYReadCFG.c:1658
+#, c-format
+msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
+msgstr "Mais de %d aninhados nos arquivos incluídos do lynx.cfg -- talvez seja um loop???\n"
+
+#: src/LYReadCFG.c:1660
+#, c-format
+msgid "Last attempted include was '%s',\n"
+msgstr "Ultimo arquivo incluso chamado foi '%s',\n"
+
+#: src/LYReadCFG.c:1661
+#, c-format
+msgid "included from '%s'.\n"
+msgstr "incluído a partir de '%s'\n"
+
+#: src/LYReadCFG.c:2116 src/LYReadCFG.c:2129 src/LYReadCFG.c:2165
+msgid "The following is read from your lynx.cfg file."
+msgstr "O seguinte foi lido em seu arquivo lynx.cfg."
+
+#: src/LYReadCFG.c:2117 src/LYReadCFG.c:2130
+msgid "Please read the distribution"
+msgstr "Por favor veja a distribuição"
+
+#: src/LYReadCFG.c:2123 src/LYReadCFG.c:2133
+msgid "for more comments."
+msgstr "para mais comentários."
+
+#: src/LYReadCFG.c:2147
+msgid "RELOAD THE CHANGES"
+msgstr "RELER AS ALTERAÇÕES"
+
+#: src/LYReadCFG.c:2156
+msgid "Your primary configuration"
+msgstr "Sua configuração inicial"
+
+#: src/LYShowInfo.c:129
+msgid "Directory that you are currently viewing"
+msgstr "Diretório que você está vendo atualmente"
+
+#: src/LYShowInfo.c:132
+msgid "Name:"
+msgstr "Nome:"
+
+#: src/LYShowInfo.c:135
+msgid "URL:"
+msgstr "URL:"
+
+#: src/LYShowInfo.c:146
+msgid "Directory that you have currently selected"
+msgstr "Diretório que você acabou de selecionar"
+
+#: src/LYShowInfo.c:149
+msgid "File that you have currently selected"
+msgstr "Arquivo que você acabou de selecionar"
+
+#: src/LYShowInfo.c:153
+msgid "Symbolic link that you have currently selected"
+msgstr "Ligação simbólica que você acabou de selecionar"
+
+#: src/LYShowInfo.c:157
+msgid "Item that you have currently selected"
+msgstr "Item que você acabou de selecionar"
+
+#: src/LYShowInfo.c:159
+msgid "Full name:"
+msgstr "Nome Completo:"
+
+#: src/LYShowInfo.c:168
+msgid "Unable to follow link"
+msgstr "Impossível seguir link"
+
+#: src/LYShowInfo.c:170
+msgid "Points to file:"
+msgstr "Ponteiros para o arquivo:"
+
+#: src/LYShowInfo.c:175
+msgid "Name of owner:"
+msgstr "Nome do dono:"
+
+#: src/LYShowInfo.c:178
+msgid "Group name:"
+msgstr "Nome do grupo:"
+
+#: src/LYShowInfo.c:181
+msgid "File size:"
+msgstr "Tamanho do arquivo:"
+
+#: src/LYShowInfo.c:187
+msgid "Creation date:"
+msgstr "Data de criação:"
+
+#: src/LYShowInfo.c:190
+msgid "Last modified:"
+msgstr "Última modificação:"
+
+#: src/LYShowInfo.c:193
+msgid "Last accessed:"
+msgstr "Último acesso:"
+
+#: src/LYShowInfo.c:195
+msgid "Access Permissions"
+msgstr "Permissões de acesso"
+
+#: src/LYShowInfo.c:261
+msgid "File that you are currently viewing"
+msgstr "Arquivo que você está vendo atualmente."
+
+#: src/LYShowInfo.c:266 src/LYShowInfo.c:375
+msgid "Linkname:"
+msgstr "Nome da Ligação:"
+
+#: src/LYShowInfo.c:279 src/LYShowInfo.c:291
+msgid "Charset:"
+msgstr "Mapa de caracteres:"
+
+#: src/LYShowInfo.c:297
+msgid "Server:"
+msgstr "Servidor:"
+
+#: src/LYShowInfo.c:300
+msgid "Date:"
+msgstr "Data:"
+
+#: src/LYShowInfo.c:303
+msgid "Last Mod:"
+msgstr "Última modificação:"
+
+#: src/LYShowInfo.c:309
+msgid "&nbsp;Expires:"
+msgstr "&nbsp;EXpira:"
+
+#: src/LYShowInfo.c:313
+msgid "Cache-Control:"
+msgstr "Controle de cache:"
+
+#: src/LYShowInfo.c:317
+msgid "Content-Length:"
+msgstr "Content-Length:"
+
+#: src/LYShowInfo.c:322
+msgid "Language:"
+msgstr "Lingua:"
+
+#: src/LYShowInfo.c:329
+msgid "Post Data:"
+msgstr "Data de postagem:"
+
+#: src/LYShowInfo.c:331
+msgid "Post Content Type:"
+msgstr "Postar tipo de documento:"
+
+#: src/LYShowInfo.c:340
+msgid "Owner(s):"
+msgstr "Dono(s):"
+
+#: src/LYShowInfo.c:343
+msgid "size:"
+msgstr "Tamanho:"
+
+#: src/LYShowInfo.c:343
+msgid "lines"
+msgstr "linhas"
+
+#: src/LYShowInfo.c:346
+msgid "mode:"
+msgstr "modo:"
+
+#: src/LYShowInfo.c:348
+msgid "forms mode"
+msgstr "modo do formulário"
+
+#: src/LYShowInfo.c:350
+msgid "source"
+msgstr "fonte"
+
+#: src/LYShowInfo.c:350
+msgid "normal"
+msgstr "normal"
+
+#: src/LYShowInfo.c:351
+msgid ", safe"
+msgstr ", salvo"
+
+#: src/LYShowInfo.c:352
+msgid ", via internal link"
+msgstr ", ligação interna"
+
+#: src/LYShowInfo.c:358
+msgid ", no-cache"
+msgstr ", sem cache"
+
+#: src/LYShowInfo.c:360
+msgid ", ISMAP script"
+msgstr ", script ISMAP"
+
+#: src/LYShowInfo.c:362
+msgid ", bookmark file"
+msgstr ", arquivo de Livro de marcações"
+
+#: src/LYShowInfo.c:371
+msgid "Link that you currently have selected"
+msgstr "Ligação que você acabou de selecionar"
+
+#: src/LYShowInfo.c:384
+msgid "Method:"
+msgstr "Metodo:"
+
+#: src/LYShowInfo.c:389
+msgid "Enctype:"
+msgstr "Enctype:"
+
+#: src/LYShowInfo.c:401
+msgid "(Form field)"
+msgstr "(Campo de formulário)"
+
+#: src/LYShowInfo.c:416
+msgid "No Links on the current page"
+msgstr "Sem ligações na página atual"
+
+#: src/LYStyle.c:250
+#, c-format
+msgid ""
+"Syntax Error parsing style in lss file:\n"
+"[%s]\n"
+"The line must be of the form:\n"
+"OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
+"where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+msgstr ""
+"Erro de sintaxe durante interpretação do arquivo lss:\n"
+"[%s]\n"
+"A linha deve estar:\n"
+"OBJETO:MONO:COLOR (ex. em:bold:brightblue:white)\n"
+"onde OBJETO é um destes: EM,STRONG,B,I,U,BLINK etc...\n"
+"\n"
+
+#: src/LYTraversal.c:107
+msgid "here is a list of the history stack so that you may rebuild"
+msgstr "Aqui há uma lista da pilha de histórico que você pode recriar"
+
+#: src/LYUpload.c:78
+msgid "ERROR! - upload command is misconfigured"
+msgstr "ERRO - Comando de envio de arquivos está mal configurado"
+
+#: src/LYUpload.c:100
+msgid "Illegal redirection \"../\" found! Request ignored."
+msgstr "Redirecionamento ilegal atingido \"../\" encontrado! Requisição ignorada."
+
+#: src/LYUpload.c:103
+msgid "Illegal character \"/\" found! Request ignored."
+msgstr "Caractere inválido \"/\" encontrado! requisição ignorada."
+
+#: src/LYUpload.c:106
+msgid "Illegal redirection using \"~\" found! Request ignored."
+msgstr "Redirecionamento ilegal usando \"~\" encontrado! Requisição ignorada."
+
+#: src/LYUpload.c:163
+msgid "Unable to upload file."
+msgstr "Impossível abrir arquivo"
+
+#: src/LYUpload.c:214
+msgid "Upload To:"
+msgstr "Enviar para:"
+
+#: src/LYUpload.c:215
+msgid "Upload options:"
+msgstr "Opções de envio de arquivos:"
+
+#: src/LYUtils.c:3075
+msgid "Unexpected access protocol for this URL scheme."
+msgstr ""
+
+#: src/LYUtils.c:3915
+msgid "Too many tempfiles"
+msgstr ""
+
+#: src/LYUtils.c:4217
+#, fuzzy
+msgid "unknown restriction"
+msgstr "Campo ou ligacão desconhecidos."
+
+#: src/LYUtils.c:4248
+msgid "No restrictions set.\n"
+msgstr ""
+
+#: src/LYUtils.c:4251
+msgid "Restrictions set:\n"
+msgstr "Descrição:\n"
+
+#: src/LYUtils.c:5601
+msgid "Ignoring invalid HOME"
+msgstr "Ignorando $HOME inválido"
+
+#: src/LYrcFile.c:20
+msgid "Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n"
+msgstr ""
+
+#: src/LYrcFile.c:242
+msgid ""
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
+msgstr ""
+"accept_all_cookies permite receber qualquer tipo de cookie. \n"
+"O padrão é \"FALSE\" que vai forçar o usuário a confirmar a cada novo\n"
+"cookie que for enviado. Ajuste para \"TRUE\" a fim de aceitar qualquer\n"
+"cookie.\n"
+
+#: src/LYrcFile.c:249
+msgid ""
+"bookmark_file specifies the name and location of the default bookmark\n"
+"file into which the user can paste links for easy access at a later\n"
+"date.\n"
+msgstr ""
+"bookmark_file especifica o nome e local do livro de marcação padrão\n"
+"onde o usuário pode inserir para acessar facilmente os endereços \n"
+"preferidos.\n"
+
+#: src/LYrcFile.c:254
+msgid ""
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
+msgstr ""
+"Se case_sensitive_searching estiver \"on\" então quando o usuário\n"
+"chama uma busca usando 's' ou '/', a performance da procura será\n"
+"não sensitiva a letras maiusculas e minusculas. O padrão é \"off\".\n"
+
+#: src/LYrcFile.c:259
+msgid ""
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
+msgstr ""
+"O character_set controla a representação dos caracteres de 8 bits para seu\n"
+"terminal. Se os caracteres de 8 bits não aparecerem corretamente em sua \n"
+"tela, você pode tentar trocando para uma diferente configuração ou usando \n"
+"caracteres de 7 bits.\n"
+"Atualmente os caracteres válidos são:\n"
+
+#: src/LYrcFile.c:266
+msgid ""
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
+msgstr ""
+"cookie_accept_domains e cookie_reject_domains são listas de domínios\n"
+"delimitados por virgulas, de onde o Lynx pode aceitar ou rejeitar \n"
+"automaticamente os cookies enviados. Se um domínio estiver especificado\n"
+"em ambos, rejeitar tem preferência. O parametro accept_all_cookies irá\n"
+"sobreescrever qualquer outro parâmetro feito aqui.\n"
+
+#: src/LYrcFile.c:274
+msgid ""
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
+msgstr ""
+"cookie_file especifica o arquivo em que irão ser gravados os cookies.\n"
+"O padrão é ~/.lynx_cookies.\n"
+
+#: src/LYrcFile.c:279
+msgid ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
+msgstr ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, e\n"
+"cookie_query_invalid_domains são listas de domínios, delimitados \n"
+"por vírgulas que podem ser sujeitados a vários tipos de autenticação\n"
+"Se um domínio estriver ajustado para checagem precisa, será checado\n"
+"de acordo com a norma RFC2109. Um domínio que perder a checagem será \n"
+"autorizado a configurar cookies com caminhos ou parâmetros inválidos.\n"
+"Todos os domínios tem como padrão perguntar ao usuário sobre um caminho\n"
+"ou parâmetro inválido no cookie.\n"
+
+#: src/LYrcFile.c:292
+msgid ""
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
+msgstr ""
+"dir_list_styles especifica o estilo da listagem de diretório pelo \n"
+"DIRED_SUPPORT (se implementado). O padrão é \"MIXED_STYLE\", que \n"
+"organiza os diretórios e os arquivos juntos.\"FILES_FIRST\" organiza\n"
+"primeiro os arquivos, depois os diretórios.\"DIRECTORIES_FIRST\" lista\n"
+"primeiro os diretórios.\n"
+
+#: src/LYrcFile.c:300
+msgid ""
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
+msgstr ""
+"Se emacs_keys estiver \"on\" então as teclas normais de movimento são:\n"
+" ^N = para baixo ^P = para cima\n"
+" ^B = esquerda ^F = para direita\n"
+
+#: src/LYrcFile.c:306
+msgid ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+msgstr ""
+"file_editor especifica o editor que deve ser chamado quando você\n"
+"quer editar arquivos localmente ou enviar email. Se nenhum editor for\n"
+"especificado, então esta facilidade estará desabilitada, a não ser que\n"
+"seja ativado na linha de comando, então o editor será usado para enviar\n"
+"emails.\n"
+
+#: src/LYrcFile.c:312
+msgid ""
+"The file_sorting_method specifies which value to sort on when viewing\n"
+"file lists such as FTP directories. The options are:\n"
+" BY_FILENAME -- sorts on the name of the file\n"
+" BY_TYPE -- sorts on the type of the file\n"
+" BY_SIZE -- sorts on the size of the file\n"
+" BY_DATE -- sorts on the date of the file\n"
+msgstr ""
+"O file_sorting_method especifica qual valor será usado para classificar\n"
+"quando você estiver listando diretórios e arquivos de FTP. As opções são:\n"
+" BY_FILENAME -- classifica pelo Nome do arquivo\n"
+" BY_TYPE -- classifica pelo Tipo do arquivo\n"
+" BY_SIZE -- classifica pelo Tamanho do arquivo\n"
+" BY_DATE -- classifica pela Data do arquivo\n"
+
+#: src/LYrcFile.c:324
+msgid ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+msgstr ""
+"lineedit_mode especifica as teclas que serão usadas durante a edição \n"
+"de campos de formulários. Se lineedit_mode estiver como \"Default Binding\"\n"
+"então os caracteres abaixo serão usados para mover-se e deletar.\n"
+"\n"
+" anterior próximo Enter = Aceita entrada\n"
+" Move carac: <- -> ^G = Cancela entrada\n"
+" Move palav: ^P ^N ^U = Apaga linha\n"
+" Delete carac: ^H ^R ^A = Começo da linha \n"
+" Delete palav: ^B ^F ^E = Fim da linha\n"
+"\n"
+"Atualmente os modos de edição de linha são:\n"
+
+#: src/LYrcFile.c:339
+msgid ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+msgstr ""
+"Este permite a você definir sub-livros de marcação. O formato é\n"
+"multi_bookmark(letra maiúscula)=(nome do arquivo),(descrição)\n"
+"Até 26 livros podem ser definidos (para letras maiúsculas do\n"
+"ingles). Nós começamos com \"multi_bookmarkB\" desde que 'A' é o \n"
+"padrão. (veja abaixo).\n"
+
+#: src/LYrcFile.c:345
+msgid ""
+"personal_mail_address specifies your personal mail address. The\n"
+"address will be sent during HTTP file transfers for authorization and\n"
+"logging purposes, and for mailed comments.\n"
+"If you do not want this information given out, set the NO_FROM_HEADER\n"
+"to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
+"could leave this field blank, but then you won't have it included in\n"
+"your mailed comments.\n"
+msgstr ""
+"persona_mail_address especifica seu email. O endereço será\n"
+"enviado durante transferências de arquivos para autenticação\n"
+"de usuário e dentro de emails que você enviar.\n"
+"Se você não quer que esta informação seja publicada, acerte \n"
+"NO_FROM_HEADER para TRUE no lynx.cfg, ou use -nofrom na linha \n"
+"de comando. Você também pode deixar este campo em branco, mas então você não poderá incluir em seus comentários de email.\n"
+
+#: src/LYrcFile.c:354
+msgid ""
+"preferred_charset specifies the character set in MIME notation (e.g.,\n"
+"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
+"to http servers using an Accept-Charset header. The value should NOT\n"
+"include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
+"by default. May be a comma-separated list.\n"
+"If a file in that character set is available, the server will send it.\n"
+"If no Accept-Charset header is present, the default is that any\n"
+"character set is acceptable. If an Accept-Charset header is present,\n"
+"and if the server cannot send a response which is acceptable\n"
+"according to the Accept-Charset header, then the server SHOULD send\n"
+"an error response, though the sending of an unacceptable response\n"
+"is also allowed.\n"
+msgstr ""
+"preferred_charset especifica o formato ISO que será usado nas notações\n"
+"MIME, e que será enviado ao servidor http usando cabeçalho 'Accept-Charset'\n"
+"O valor não deve conter ISO-8859-1 ou US-ASCII, desde que estes valores \n"
+"são assumidos como padrão. Deve ser uma lista separada por virgulas.\n"
+"Se um arquivo com este codigo estiver disponível, o servidor irá envia-lo\n"
+"a você. Se não houver cabeçalho 'Accept-Charset', o documento padrão\n"
+"será enviado. Se um cabeçalho 'Accept-Charset' estiver presente, e se o\n"
+"servidor não puder enviar uma resposta que seja aceitável de acordo com\n"
+"o cabeçalho solicitado, então você poderá receber uma mensagem de erro.\n"
+
+#: src/LYrcFile.c:368
+msgid ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+msgstr ""
+"preferred_language especifica a lingua que será informado o formato\n"
+"MIME(ex. en,fr, devem ser separados por vírgulas em ordem decrescente de\n"
+"preferência) ao servidor de http. Se o arquivo nesta linguagem estiver \n"
+"disponível, o servidor irá envia-lo a você. Do contrário, enviará o\n"
+"documento padrão.\n"
+
+#: src/LYrcFile.c:377
+msgid ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Se run_all_execution_links estiver como \"on\" então todas as execuções de\n"
+"ligações locais serão executadas quando elas forem selecionadas.\n"
+"\n"
+"ATENÇÃO - Isto é muito perigoso. Desde que você permita que alguma informação\n"
+" seja gravada em seu microcomputador de um local desconhecido\n"
+" existe a possibilidade de um Trojan ou Cavalo de Tróia ser \n"
+" executado. Trojans e Cavalos de Tróia podem desde alterar a segu-\n"
+" rança de seu microcomputador até destruir arquivos. Somente deixe\n"
+" como \"on\" se você tiver certeza das informações que estarão sendo \n"
+" executadas ou gravadas em seu equipamento. \n"
+
+#: src/LYrcFile.c:388
+msgid ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Se run_execution_links_on_local_files estiver como \"on\" então todas as\n"
+"execuções de ligações locais encontradas em arquivos LOCAIS serão execu-\n"
+"tadas quando forem selecionadas. Isto é diferente de run_all_execution_links\n"
+"onde somente arquivos que estiverem no sistema local serão executados.\n"
+"\n"
+"ATENÇÃO - Isto é muito perigoso. Desde que você permita que alguma informação\n"
+" seja executada em seu microcomputador de um local desconhecido\n"
+" existe a possibilidade de um Trojan ou Cavalo de Tróia ser \n"
+" executado. Trojans e Cavalos de Tróia podem desde alterar a segu-\n"
+" rança de seu microcomputador até destruir arquivos. Somente deixe\n"
+" como \"on\" se você tiver certeza das informações que estarão sendo \n"
+" executadas ou gravadas em sei equipament.\n"
+
+#: src/LYrcFile.c:403
+msgid ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+msgstr ""
+"select_popups especifica como srão apresentados os menus de pop-up. Se\n"
+"como botões de rádio ou via menu. Note que o Lynx sempre criará um menu \n"
+"vertical para OPÇÕES. Um valor de \"on\" irá deixar os menus como o padrão\n"
+"e \"off\" forçará o uso de caixas de rádio. O valor pode ser alterado na\n"
+"linha de comando com -popup.\n"
+
+#: src/LYrcFile.c:413
+msgid ""
+"show_color specifies how to set the color mode at startup. A value of\n"
+"\"never\" will force color mode off (treat the terminal as monochrome)\n"
+"at startup even if the terminal appears to be color capable. A value of\n"
+"\"always\" will force color mode on even if the terminal appears to be\n"
+"monochrome, if this is supported by the library used to build lynx.\n"
+"A value of \"default\" will yield the behavior of assuming\n"
+"a monochrome terminal unless color capability is inferred at startup\n"
+"based on the terminal type, or the -color command line switch is used, or\n"
+"the COLORTERM environment variable is set. The default behavior always is\n"
+"used in anonymous accounts or if the \"option_save\" restriction is set.\n"
+"The effect of the saved value can be overridden via\n"
+"the -color and -nocolor command line switches.\n"
+"The mode set at startup can be changed via the \"show color\" option in\n"
+"the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
+"\"off\" \"show color\" settings will be treated as \"default\".\n"
+msgstr ""
+"show_color especifica como as cores irão ser apresentadas. Um valor de \n"
+"\"never\" forçará o mono monocromático mesmo que o terminal tenha capaci-\n"
+"dade de apresentar cores. Um valor de \"always\" forçará o modo colorido\n"
+"mesmo que o terminal seja monocromático. Mas somente se a biblioteca \n"
+"usada para compilar o lynx permitir. Um valor de \"default\" irá assumir\n"
+"monocromático a não ser que a opção de colorido tenha sido requisitada\n"
+"na linha de comando (ex.'lynx -color') ou a variável COLORTERM esteja\n"
+"presente. O padrão sempre é usado em contas anônimas ou se a restrição\n"
+"\"option_save\" esteja presente. O efeito dos valores salvos pode ser \n"
+"sobreescrito com o comando -color ou -nocolor. Para alterar o modo padrão\n"
+"use o menu de opções. Se estiver salvo \"on\" ou \"off\" estes serão tratados\n"
+"como \"default\".\n"
+
+#: src/LYrcFile.c:430
+msgid ""
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
+msgstr ""
+"show_cursor especifica como 'esconder' o cursor no canto inferior direito\n"
+"da tela, ou para coloca-lo no lado esquerdo da ligação corrente do \n"
+"documento, ou opções correntes nas janelas de pop-up.\n"
+"Posicionando o cursor no lado esquerdo ajuda em interfaces braille, e \n"
+"quando o terminal não distingue as ligações baseadas em cores.\n"
+"Um valor de \"on\" ira posiciona-lo no lado esquerdo e \"off\" irá oculta-lo\n"
+"O valor padrão pode ser sobreescrito via linha de comando -show_cursor.\n"
+
+#: src/LYrcFile.c:441
+msgid ""
+"show_dotfiles specifies that the directory listing should include\n"
+"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
+"honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
+"restricted via a command line switch. If display of hidden files\n"
+"is disabled, creation of such files via Lynx also is disabled.\n"
+msgstr ""
+"show_dotfiles especifica que o diretório listado irá apresentar os\n"
+"arquivos ocultos. Se estiver \"on\" este será distinto somente via \n"
+"userdefs.h e/ou lynx.cfg, e não restringido via linha de comando.\n"
+"Se a apresentação de arquivos ocultos estiver \"off\", a criação dos \n"
+"mesmos pelo lynx estará desabilitada.\n"
+
+#: src/LYrcFile.c:452
+msgid ""
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
+msgstr ""
+"Se sub_bookmarks não estiver \"off\", e foram definidos multiplis livros de\n"
+"marcação (veja abaixo), então todas as operações de livros de marcações \n"
+"irão solicitar que você escolha entre os arquivos de livro de marcação.\n"
+"Se o bookmark_file padrão estiver definido(veja acima), ele será usado\n"
+"como padrão de seleção. Quando esta opção estiver \"advanced\", e o modo\n"
+"de usuário estiver como avançado, o comando de 'v'isualizar irá invocar\n"
+"uma linha de prompt em vez de um menu de novato ou intermediário. Quando\n"
+"esta opção estiver como \"standart\", o menu será apresentado respeitando o\n"
+"modo do usuário.\n"
+
+#: src/LYrcFile.c:464
+msgid ""
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
+msgstr ""
+"user_mode especifica o nível do usuário que está usando o Lynx. O\n"
+"padrão é \"NOVICE\" que equivale a novato. Mostra menus simples junto\n"
+"de uma barra de ajuda. Ajustando para \"INTERMEDIATE\" para desligar\n"
+"a ajuda e ter menus mais avançados.\n"
+"Use \"ADVANCED\" para ver a URL da ligação marcada atualmente na base\n"
+"da tela.\n"
+
+#: src/LYrcFile.c:472
+msgid ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+msgstr ""
+"Se as imagens são \"on\", Lynx irá imprimir o nome da imagem\n"
+"no local como [INLINE], [LINK], ou [IMAGE]\n"
+"Veja mais sobre em lynx.cfg\n"
+
+#: src/LYrcFile.c:477
+msgid ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+msgstr ""
+"Se vi_keys estiver marcado como \"on\", então os movimentos normais de teclas são:\n"
+" j = para baixo k = para cima\n"
+" h = esquerda l = direita\n"
+"Estas teclas são somente em letras minúsculas.\n"
+"As letras 'H', 'J' e 'K continuam ativando a ajuda,pular atalhos e mostrar\n"
+"o mapa de caracteres.\n"
+
+#: src/LYrcFile.c:485
+msgid ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+msgstr ""
+
+#: src/LYrcFile.c:693
+msgid ""
+"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
+"your keypad when the numlock is on will act as arrow keys:\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"and the corresponding keyboard numbers will act as arrow keys,\n"
+"regardless of whether numlock is on.\n"
+msgstr ""
+"Se keypad_mode estiver com \"NUMBERS_AS_ARROWS\", então oa números em\n"
+"seu keypad quando o numlock estiver ligado funcionarão como setas.\n"
+" 8 = para cima\n"
+" 4 = para esquerda 6 = para direita\n"
+" 2 = para baixo\n"
+"e os números do teclado responderão da mesma forma, desde que o \n"
+"numlock estiver ligado.\n"
+
+#: src/LYrcFile.c:702
+msgid ""
+"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
+"appear next to each link and numbers are used to select links.\n"
+msgstr ""
+"Se keypad_mode estiver com \"LINKS_ARE_NUMBERED\", então números\n"
+"irão aparecer ao lado das ligações e serão usados para ativá-las.\n"
+
+#: src/LYrcFile.c:706
+msgid ""
+"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
+"numbers will appear next to each link and visible form input field.\n"
+"Numbers are used to select links, or to move the \"current link\" to a\n"
+"form input field or button. In addition, options in popup menus are\n"
+"indexed so that the user may type an option number to select an option in\n"
+"a popup menu, even if the option isn't visible on the screen. Reference\n"
+"lists and output from the list command also enumerate form inputs.\n"
+msgstr ""
+"Se keypad_mode estiver com \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", então\n"
+"números irão aparecer ao lado das ligações e dos campos de formulário.\n"
+"Serão usados para ativar ligações ou para mover o \"link corrente\" para\n"
+"um campo de formulário ou botão. Em adição, as opções nos menus serão\n"
+"indexadas onde o usuário poderá escolher a opção por um número, mesmo\n"
+"que a opção não esteja visível. Listas de referências e saídas do comando\n"
+"de lista serão numeradas também.\n"
+
+#: src/LYrcFile.c:715
+msgid ""
+"NOTE: Some fixed format documents may look disfigured when\n"
+"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
+"enabled.\n"
+msgstr ""
+"NOTA: Alguns formatos fixados de documento podem ser alterados quando\n"
+"\"LINKS_ARE_NUMBERED\" ou \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" estiverem\n"
+"habilitados.\n"
+
+#: src/LYrcFile.c:748
+msgid ""
+"Lynx User Defaults File\n"
+"\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
+msgstr ""
+"Arquivo de configuração do usuário\n"
+"\n"
+"Este arquivo contém as opções salvas pela tela de Opções do Lynx.\n"
+"(normalmente com a tecla '>'). Normalmente você não precisa editar\n"
+"este arquivo manualmente, desde que os valores aqui são controlados\n"
+"pelo menu de opções, e a próxima vez que qualquer opção for salva\n"
+"este arquivo será totalmente reescrito. Você foi avisado...\n"
+"Se você está procurando pelo arquivo de configurações principal - \n"
+"ele é normalmente chamado de lynx.cfg, e tel forma e conteúdo dife-\n"
+"rente - não é este arquivo.\n"
diff --git a/gnu/usr.bin/lynx/po/readme b/gnu/usr.bin/lynx/po/readme
index 0a6feacc808..c5dae390471 100644
--- a/gnu/usr.bin/lynx/po/readme
+++ b/gnu/usr.bin/lynx/po/readme
@@ -17,5 +17,5 @@ Do not forget to include %s properly in your contributed translation!
A good place to start is with the messages derived from LYMessages_en.h
-We are collecting Lynx user contributed message translation files at
-http://www.slcc.edu/lynx/po/ to avoid increasing the distribution size.
+The Translation Project is collecting message translation files at
+http://www.iro.umontreal.ca/contrib/po/HTML/domain-lynx.html
diff --git a/gnu/usr.bin/lynx/po/ru.po b/gnu/usr.bin/lynx/po/ru.po
new file mode 100644
index 00000000000..6ec1a1b1260
--- /dev/null
+++ b/gnu/usr.bin/lynx/po/ru.po
@@ -0,0 +1,5541 @@
+# ðÅÒÅ×ÏÄ ÓÏÏÂÝÅÎÉÊ lynx.
+# Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+# Dmitry S. Sivachenko <dima@Chg.RU>, 1999, 2000, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lynx 2.8.4.dev20\n"
+"POT-Creation-Date: 2001-06-01 18:55-0400\n"
+"PO-Revision-Date: 2001-06-11 23:22+04:00\n"
+"Last-Translator: Dmitry S. Sivachenko <dima@Chg.RU>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=koi8-r\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#. ******************************************************************
+#. * The following definitions are for status line prompts, messages, or
+#. * warnings issued by Lynx during program execution. You can modify
+#. * them to make them more appropriate for your site. We recommend that
+#. * you extend these definitions to other languages using the gettext
+#. * library. There are also scattered uses of 'gettext()' throughout the
+#. * Lynx source, covering all but those messages which (a) are used for
+#. * debugging (CTRACE) or (b) are constants used in interaction with
+#. * other programs.
+#. *
+#. * Links to collections of alternate definitions, developed by the Lynx
+#. * User Community, are maintained in Lynx links:
+#. *
+#. * http://www.trill-home.com/lynx.html
+#. *
+#. * See ABOUT-NLS and po/readme for details and location of contributed
+#. * translations. When no translation is available, the English default is
+#. * used.
+#.
+#: LYMessages.c:29
+#, c-format
+msgid "Alert!: %s"
+msgstr "÷ÎÉÍÁÎÉÅ!: %s"
+
+#: LYMessages.c:30
+msgid "Welcome"
+msgstr "äÏÂÒÏ ÐÏÖÁÌÏ×ÁÔØ"
+
+#: LYMessages.c:31 LYMessages.c:32
+msgid "Are you sure you want to quit?"
+msgstr "÷Ù Õ×ÅÒÅÎÙ, ÞÔÏ ÈÏÔÉÔÅ ×ÙÊÔÉ?"
+
+#: LYMessages.c:34 LYMessages.c:35
+msgid "Really exit from Lynx?"
+msgstr "äÅÊÓÔ×ÉÔÅÌØÎÏ ×ÙÊÔÉ ÉÚ Lynx?"
+
+#: LYMessages.c:37
+msgid "Connection interrupted."
+msgstr "óÏÅÄÉÎÅÎÉÅ ÐÒÅÒ×ÁÎÏ."
+
+#: LYMessages.c:38
+msgid "Data transfer interrupted."
+msgstr "ðÅÒÅÄÁÞÁ ÄÁÎÎÙÈ ÐÒÅÒ×ÁÎÁ."
+
+#: LYMessages.c:39
+msgid "Cancelled!!!"
+msgstr "ïÔÍÅÎÅÎÏ!!!"
+
+#: LYMessages.c:40
+msgid "Cancelling!"
+msgstr "ïÔÍÅÎÁ!"
+
+#: LYMessages.c:41
+msgid "Excellent!!!"
+msgstr "ïÔÌÉÞÎÏ!!!"
+
+#: LYMessages.c:42
+msgid "OK"
+msgstr "OK"
+
+#: LYMessages.c:43
+msgid "Done!"
+msgstr "çÏÔÏ×Ï!"
+
+#: LYMessages.c:44
+msgid "Bad request!"
+msgstr "ðÌÏÈÏÊ ÚÁÐÒÏÓ!"
+
+#: LYMessages.c:45
+msgid "previous"
+msgstr "ÐÒÅÄÙÄÕÝÉÊ"
+
+#: LYMessages.c:46
+msgid "next screen"
+msgstr "ÓÌÅÄÕÀÝÉÊ ÜËÒÁÎ"
+
+#: LYMessages.c:47
+msgid "HELP!"
+msgstr "ðïíïýø!"
+
+#: LYMessages.c:48
+msgid ", help on "
+msgstr ", ÐÏÍÏÝØ ÐÏ "
+
+#. #define HELP
+#: LYMessages.c:50
+msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
+msgstr "ëÏÍÁÎÄÙ: ÓÔÒÅÌËÉ - ÐÅÒÅÍÅÝÅÎÉÅ, '?' - ÐÏÍÏÝØ, 'q' - ×ÙÈÏÄ, '<-' - ÎÁÚÁÄ."
+
+#. #define MOREHELP
+#: LYMessages.c:52
+msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
+msgstr "-- ÎÁÖÍÉÔÅ ÐÒÏÂÅÌ ÄÌÑ ÐÒÏÄÏÌÖÅÎÉÑ, ÓÔÒÅÌËÉ - ÐÅÒÅÍÅÝÅÎÉÅ, '?' ÐÏÍÏÝØ, 'q' ×ÙÈÏÄ."
+
+#: LYMessages.c:53
+msgid "-- press space for next page --"
+msgstr "-- ÎÁÖÍÉÔÅ ÐÒÏÂÅÌ ÄÌÑ ÐÅÒÅÈÏÄÁ ÎÁ ÓÌÅÄÕÀÝÕÀ ÓÔÒÁÎÉÃÕ --"
+
+#: LYMessages.c:54
+msgid "URL too long"
+msgstr "URL ÓÌÉÛËÏÍ ÄÌÉÎÎÙÊ"
+
+#. Inactive input fields, messages used with -tna option - kw
+#. #define FORM_LINK_TEXT_MESSAGE_INA
+#: LYMessages.c:60
+msgid "(Text entry field) Inactive. Press <return> to activate."
+msgstr "(ðÏÌÅ ××ÏÄÁ ÔÅËÓÔÁ) îÅÁËÔÉ×ÎÏ. îÁÖÍÉÔÅ <××ÏÄ> ÄÌÑ ÁËÔÉ×ÉÚÁÃÉÉ."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA
+#: LYMessages.c:62
+msgid "(Textarea) Inactive. Press <return> to activate."
+msgstr "(Textarea) îÅÁËÔÉ×ÎÁ. îÁÖÍÉÔÅ <××ÏÄ> ÄÌÑ ÁËÔÉ×ÉÚÁÃÉÉ."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA_E
+#: LYMessages.c:64
+#, c-format
+msgid "(Textarea) Inactive. Press <return> to activate (%s for editor)."
+msgstr "(Textarea) îÅÁËÔÉ×ÎÁ. îÁÖÍÉÔÅ <××ÏÄ> ÄÌÑ ÁËÔÉ×ÉÚÁÃÉÉ (%s - ÒÅÄÁËÔÏÒ)."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA
+#: LYMessages.c:66
+msgid "(Form field) Inactive. Use <return> to edit."
+msgstr "(ðÏÌÅ ÆÏÒÍÙ) îÅÁËÔÉ×ÎÏ. éÓÐÏÌØÚÕÊÔÅ <××ÏÄ> ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ."
+
+#. #define FORM_TEXT_SUBMIT_MESSAGE_INA_X
+#: LYMessages.c:68
+#, c-format
+msgid "(Form field) Inactive. Use <return> to edit (%s to submit with no cache)."
+msgstr "(ðÏÌÅ ÆÏÒÍÙ) îÅÁËÔÉ×ÎÏ. <××ÏÄ> ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ (%s - ÐÏÓÌÁÔØ ÂÅÚ ËÜÛÉÒÏ×ÁÎÉÑ)."
+
+#. #define FORM_TEXT_RESUBMIT_MESSAGE_INA
+#: LYMessages.c:70
+msgid "(Form field) Inactive. Press <return> to edit, press <return> twice to submit."
+msgstr ""
+"(ðÏÌÅ ÆÏÒÍÙ) îÅÁËÔÉ×ÎÏ. îÁÖÍÉÔÅ <××ÏÄ> ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ, <××ÏÄ> Ä×ÁÖÄÙ - \n"
+"ÐÏÓÌÁÔØ."
+
+#. #define FORM_TEXT_SUBMIT_MAILTO_MSG_INA
+#: LYMessages.c:72
+msgid "(mailto form field) Inactive. Press <return> to change."
+msgstr "(ðÏÌÅ ÆÏÒÍÙ mailto) îÅÁËÔÉ×ÎÏ. îÁÖÍÉÔÅ <××ÏÄ> ÄÌÑ ÉÚÍÅÎÅÎÉÑ."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE_INA
+#: LYMessages.c:74
+msgid "(Password entry field) Inactive. Press <return> to activate."
+msgstr "(ðÏÌÅ ××ÏÄÁ ÐÁÒÏÌÑ) îÅÁËÔÉ×ÎÏ. îÁÖÍÉÔÅ <××ÏÄ> ÄÌÑ ÁËÔÉ×ÉÚÁÃÉÉ."
+
+#. #define FORM_LINK_FILE_UNM_MSG
+#: LYMessages.c:77
+msgid "UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off."
+msgstr "îåíïäéæéãéòõåíïå ÐÏÌÅ ××ÏÄÁ ÆÁÊÌÁ. óÔÒÅÌËÉ ÷÷åòè, ÷îéú ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_FILE_MESSAGE
+#: LYMessages.c:79
+msgid "(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off."
+msgstr "(ðÏÌÅ ××ÏÄÁ ÆÁÊÌÁ) ÷×ÅÄÉÔÅ ÉÍÑ ÆÁÊÌÁ. óÔÒÅÌËÉ ÷÷åòè, ÷îéú ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_TEXT_MESSAGE
+#: LYMessages.c:81
+msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(ðÏÌÅ ××ÏÄÁ ÔÅËÓÔÁ) ÷×ÅÄÉÔÅ ÔÅËÓÔ. óÔÒÅÌËÉ ÷÷åòè, ÷îéú ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE
+#: LYMessages.c:83
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off."
+msgstr "(Textarea) ÷×ÅÄÉÔÅ ÔÅËÓÔ. óÔÒÅÌËÉ ÷÷åòè/÷îéú ÉÌÉ TAB - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_E
+#: LYMessages.c:85
+#, c-format
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor)."
+msgstr "(Textarea) ÷×ÅÄÉÔÅ ÔÅËÓÔ. óÔÒÅÌËÉ ÷÷åòè/÷îéú ÉÌÉ TAB - ×ÙÈÏÄ (%s - ÒÅÄÁËÔÏÒ)."
+
+#. #define FORM_LINK_TEXT_UNM_MSG
+#: LYMessages.c:87
+msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
+msgstr "îåíïäéæéãéòõåíïå ÐÏÌÅ ××ÏÄÁ ÔÅËÓÔÁ. óÔÒÅÌËÉ ÷÷åòè, ÷îéú ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE
+#: LYMessages.c:89
+msgid "(Form field) Enter text. Use <return> to submit."
+msgstr "(ðÏÌÅ ÆÏÒÍÙ) ÷×ÅÄÉÔÅ ÔÅËÓÔ. <××ÏÄ> - ÐÏÓÌÁÔØ."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_X
+#: LYMessages.c:91
+#, c-format
+msgid "(Form field) Enter text. Use <return> to submit (%s for no cache)."
+msgstr "(ðÏÌÅ ÆÏÒÍÙ) ÷×ÅÄÉÔÅ ÔÅËÓÔ. <××ÏÄ> - ÐÏÓÌÁÔØ (%s ÄÌÑ ÚÁÐÒÅÔÁ ËÜÛÉÒÏ×ÁÎÉÑ)."
+
+#. #define FORM_LINK_TEXT_RESUBMIT_MESSAGE
+#: LYMessages.c:93
+msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
+msgstr "(ðÏÌÅ ÆÏÒÍÙ) ÷×ÅÄÉÔÅ ÔÅËÓÔ. <××ÏÄ> - ÐÏÓÌÁÔØ, ÓÔÒÅÌËÉ ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_TEXT_SUBMIT_UNM_MSG
+#: LYMessages.c:95
+msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
+msgstr "îåíïäéæéãéòõåíïå ÐÏÌÅ ÆÏÒÍÙ. óÔÒÅÌËÉ ÷÷åòè, ÷îéú ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_MSG
+#: LYMessages.c:97
+msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
+msgstr "(ðÏÌÅ ÆÏÒÍÙ mailto) ÷×ÅÄÉÔÅ ÔÅËÓÔ. <××ÏÄ> - ÐÏÓÌÁÔØ, ÓÔÒÅÌËÉ ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:99
+msgid "(mailto form field) Mail is disallowed so you cannot submit."
+msgstr "(ðÏÌÅ ÆÏÒÍÙ mailto) ïÔÐÒÁ×ËÁ ÐÏÞÔÙ ÚÁÐÒÅÝÅÎÁ, ÔÁË ÞÔÏ ×Ù ÎÅ ÍÏÖÅÔÅ ÐÏÓÌÁÔØ."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE
+#: LYMessages.c:101
+msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(ðÏÌÅ ××ÏÄÁ ÐÁÒÏÌÑ) ÷×ÅÄÉÔÅ ÔÅËÓÔ. óÔÒÅÌËÉ ÷÷åòè, ÷îéú ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_PASSWORD_UNM_MSG
+#: LYMessages.c:103
+msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
+msgstr "îåíïäéæéãéòõåíùê ÐÁÒÏÌØ ÆÏÒÍÙ. óÔÒÅÌËÉ ÷÷åòè, ÷îéú ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_CHECKBOX_MESSAGE
+#: LYMessages.c:105
+msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
+msgstr "(ðÏÌÅ ÎÅÚÁ×ÉÓÉÍÏÊ ËÎÏÐËÉ) ðÒÁ×ÁÑ ÓÔÒÅÌËÁ ÉÌÉ <××ÏÄ> - ÐÅÒÅËÌÀÞÅÎÉÅ."
+
+#. #define FORM_LINK_CHECKBOX_UNM_MSG
+#: LYMessages.c:107
+msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
+msgstr "îåíïäéæéãéòõåíáñ ÎÅÚÁ×ÉÓÉÍÁÑ ËÎÏÐËÁ ÆÏÒÍÙ. óÔÒÅÌËÉ ÷÷åòè, ÷îéú ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_RADIO_MESSAGE
+#: LYMessages.c:109
+msgid "(Radio Button) Use right-arrow or <return> to toggle."
+msgstr "(úÁ×ÉÓÉÍÁÑ ËÎÏÐËÁ) ðÒÁ×ÁÑ ÓÔÒÅÌËÁ ÉÌÉ <××ÏÄ> - ÐÅÒÅËÌÀÞÅÎÉÅ."
+
+#. #define FORM_LINK_RADIO_UNM_MSG
+#: LYMessages.c:111
+msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
+msgstr "îåíïäéæéãéòõåíáñ ÚÁ×ÉÓÉÍÁÑ ËÎÏÐËÁ ÆÏÒÍÙ. óÔÒÅÌËÉ ÷÷åòè, ÷îéú ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_SUBMIT_PREFIX
+#: LYMessages.c:113
+msgid "Submit ('x' for no cache) to "
+msgstr "ðÏÓÌÁÔØ ('x' ÄÌÑ ÚÁÐÒÅÔÁ ËÜÛÉÒÏ×ÁÎÉÑ) "
+
+#. #define FORM_LINK_RESUBMIT_PREFIX
+#: LYMessages.c:115
+msgid "Submit to "
+msgstr "ðÏÓÌÁÔØ "
+
+#. #define FORM_LINK_SUBMIT_MESSAGE
+#: LYMessages.c:117
+msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
+msgstr "(ëÎÏÐËÁ ÐÏÓÙÌËÉ ÆÏÒÍÙ) -> ÉÌÉ <××ÏÄ> - ÐÏÓÌÁÔØ ('x' - ÚÁÐÒÅÔ ËÜÛÉÒÏ×ÁÎÉÑ)."
+
+#. #define FORM_LINK_RESUBMIT_MESSAGE
+#: LYMessages.c:119
+msgid "(Form submit button) Use right-arrow or <return> to submit."
+msgstr "(ëÎÏÐËÁ ÐÏÓÙÌËÉ ÆÏÒÍÙ) ðÒÁ×ÁÑ ÓÔÒÅÌËÁ ÉÌÉ <××ÏÄ> - ÐÏÓÌÁÔØ."
+
+#. #define FORM_LINK_SUBMIT_DIS_MSG
+#: LYMessages.c:121
+msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
+msgstr "ïôëìàþåîîáñ ËÎÏÐËÁ ÐÏÓÙÌËÉ ÆÏÒÍÙ. óÔÒÅÌËÉ ÷÷åòè, ÷îéú ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_PREFIX
+#: LYMessages.c:123
+msgid "Submit mailto form to "
+msgstr "ðÏÓÌÁÔØ ÆÏÒÍÕ ÐÏ ÐÏÞÔÅ "
+
+#. #define FORM_LINK_SUBMIT_MAILTO_MSG
+#: LYMessages.c:125
+msgid "(mailto form submit button) Use right-arrow or <return> to submit."
+msgstr "(ëÎÏÐËÁ ÐÏÓÙÌËÉ ÆÏÒÍÙ ÐÏ ÐÏÞÔÅ) ðÒÁ×ÁÑ ÓÔÒÅÌËÁ ÉÌÉ <××ÏÄ> - ÐÏÓÌÁÔØ."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:127
+msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
+msgstr "(ëÎÏÐËÁ ÐÏÓÙÌËÉ ÆÏÒÍÙ ÐÏ ÐÏÞÔÅ) ðÏÞÔÁ ÚÁÐÒÅÝÅÎÁ, ÔÁË ÞÔÏ ×Ù ÎÅ ÍÏÖÅÔÅ ÐÏÓÌÁÔØ."
+
+#. #define FORM_LINK_RESET_MESSAGE
+#: LYMessages.c:129
+msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
+msgstr "(ëÎÏÐËÁ ÏÞÉÓÔËÉ ÆÏÒÍÙ) ðÒÁ×ÁÑ ÓÔÒÅÌËÁ ÉÌÉ <××ÏÄ> - ÏÞÉÓÔÉÔØ ÆÏÒÍÕ."
+
+#. #define FORM_LINK_RESET_DIS_MSG
+#: LYMessages.c:131
+msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
+msgstr "ïôëìàþåîîáñ ËÎÏÐËÁ ÏÞÉÓÔËÉ ÆÏÒÍÙ. óÔÒÅÌËÉ ÷÷åòè, ÷îéú ÉÌÉ tab - ×ÙÈÏÄ."
+
+#. #define FORM_LINK_OPTION_LIST_MESSAGE
+#: LYMessages.c:133
+msgid "(Option list) Hit return and use arrow keys and return to select option."
+msgstr "(óÐÉÓÏË ÏÐÃÉÊ) îÁÖÍÉÔÅ ××ÏÄ É ÉÓÐÏÌØÚÕÊÔÅ ÓÔÒÅÌËÉ É ××ÏÄ ÄÌÑ ×ÙÂÏÒÁ ÏÐÃÉÉ."
+
+#. #define CHOICE_LIST_MESSAGE
+#: LYMessages.c:135
+msgid "(Choice list) Hit return and use arrow keys and return to select option."
+msgstr "(óÐÉÓÏË ×ÁÒÉÁÎÔÏ×) îÁÖÍÉÔÅ ××ÏÄ É ÉÓÐÏÌØÚÕÊÔÅ ÓÔÒÅÌËÉ É ××ÏÄ ÄÌÑ ×ÙÂÏÒÁ ×ÁÒÉÁÎÔÁ."
+
+#. #define FORM_LINK_OPTION_LIST_UNM_MSG
+#: LYMessages.c:137
+msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
+msgstr "îåíïäéæéãéòõåíùê ÓÐÉÓÏË ÏÐÃÉÊ. ÷×ÏÄ ÉÌÉ ÓÔÒÅÌËÉ - ÐÒÏÓÍÏÔÒ ÉÌÉ ×ÙÈÏÄ."
+
+#. #define CHOICE_LIST_UNM_MSG
+#: LYMessages.c:139
+msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
+msgstr "îåíïäéæéãéòõåíùê ÓÐÉÓÏË ×ÁÒÉÁÎÔÏ×. ÷×ÏÄ ÉÌÉ ÓÔÒÅÌËÉ - ÐÒÏÓÍÏÔÒ ÉÌÉ ×ÙÈÏÄ."
+
+#: LYMessages.c:140
+msgid "Submitting form..."
+msgstr "ðÏÓÙÌËÁ ÆÏÒÍÙ..."
+
+#: LYMessages.c:141
+msgid "Resetting form..."
+msgstr "ïÞÉÓÔËÁ ÆÏÒÍÙ..."
+
+#. #define RELOADING_FORM
+#: LYMessages.c:143
+msgid "Reloading document. Any form entries will be lost!"
+msgstr "ïÂÎÏ×ÌÅÎÉÅ ÄÏËÕÍÅÎÔÁ. úÎÁÞÅÎÉÑ ×ÓÅÈ ÐÏÌÅÊ ÆÏÒÍÙ ÂÕÄÕÔ ÐÏÔÅÒÑÎÙ!"
+
+#: LYMessages.c:144
+#, c-format
+msgid "Warning: Cannot transcode form data to charset %s!"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ ÕÄÁÅÔÓÑ ÐÅÒÅËÏÄÉÒÏ×ÁÔØ ÄÁÎÎÙÅ ÆÏÒÍÙ × ËÏÄÉÒÏ×ËÕ %s!"
+
+#. #define NORMAL_LINK_MESSAGE
+#: LYMessages.c:147
+msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
+msgstr "(ïâùþîáñ óóùìëá) éÓÐÏÌØÚÕÊÔÅ ÐÒÁ×ÕÀ ÓÔÒÅÌËÕ ÉÌÉ <××ÏÄ> ÄÌÑ ÁËÔÉ×ÉÚÁÃÉÉ."
+
+#: LYMessages.c:148
+msgid "The resource requested is not available at this time."
+msgstr "úÁÐÒÁÛÉ×ÁÅÍÙÊ ÒÅÓÕÒÓ × ÎÁÓÔÏÑÝÅÅ ×ÒÅÍÑ ÎÅÄÏÓÔÕÐÅÎ."
+
+#: LYMessages.c:149
+msgid "Enter Lynx keystroke command: "
+msgstr "÷×ÅÄÉÔÅ ËÏÍÁÎÄÕ Lynx: "
+
+#: LYMessages.c:150
+msgid "Looking up "
+msgstr "éÄÅÔ ÐÏÉÓË "
+
+#: LYMessages.c:151
+#, c-format
+msgid "Getting %s"
+msgstr "ðÏÌÕÞÅÎÉÅ %s"
+
+#: LYMessages.c:152
+#, c-format
+msgid "Skipping %s"
+msgstr "ðÒÏÐÕÓË %s"
+
+#: LYMessages.c:153
+#, c-format
+msgid "Using %s"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ %s"
+
+#: LYMessages.c:154
+#, c-format
+msgid "Illegal URL: %s"
+msgstr "îÅ×ÅÒÎÙÊ URL: %s"
+
+#: LYMessages.c:155
+#, c-format
+msgid "Badly formed address %s"
+msgstr "îÅÐÒÁ×ÉÌØÎÏ ÓÆÏÒÍÉÒÏ×ÁÎÎÙÊ ÁÄÒÅÓ %s"
+
+#: LYMessages.c:156
+#, c-format
+msgid "URL: %s"
+msgstr "URL: %s"
+
+#: LYMessages.c:157
+msgid "Unable to access WWW file!!!"
+msgstr "îÅÔ ÄÏÓÔÕÐÁ Ë WWW-ÆÁÊÌÕ!!!"
+
+#: LYMessages.c:158
+#, c-format
+msgid "This is a searchable index. Use %s to search."
+msgstr "üÔÏ ÐÏÉÓËÏ×ÙÊ ÉÎÄÅËÓ. äÌÑ ÐÏÉÓËÁ ÉÓÐÏÌØÚÕÊÔÅ %s."
+
+#. #define WWW_INDEX_MORE_MESSAGE
+#: LYMessages.c:160
+#, c-format
+msgid "--More-- This is a searchable index. Use %s to search."
+msgstr "--äÁÌÅÅ-- üÔÏ ÐÏÉÓËÏ×ÙÊ ÉÎÄÅËÓ. äÌÑ ÐÏÉÓËÁ ÉÓÐÏÌØÚÕÊÔÅ %s."
+
+#: LYMessages.c:161
+msgid "You have entered an invalid link number."
+msgstr "÷Ù ××ÅÌÉ ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÓÓÙÌËÉ."
+
+#. #define SOURCE_HELP
+#: LYMessages.c:163
+msgid "Currently viewing document source. Press '\\' to return to rendered version."
+msgstr "éÄÅÔ ÐÒÏÓÍÏÔÒ ÉÓÈÏÄÎÏÇÏ ÔÅËÓÔÁ ÄÏËÕÍÅÎÔÁ. îÁÖÍÉÔÅ '\\' ÄÌÑ ×ÏÚ×ÒÁÔÁ Ë ÒÅÖÉÍÕ ×ÉÚÕÁÌÉÚÁÃÉÉ."
+
+#. #define NOVICE_LINE_ONE
+#: LYMessages.c:165
+msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
+msgstr "óÔÒÅÌËÉ: ÷×ÅÒÈ, ÷ÎÉÚ - ÐÅÒÅÍÅÝÅÎÉÅ. ÷ÐÒÁ×Ï - ÐÅÒÅÈÏÄ ÐÏ ÓÓÙÌËÅ; ÷ÌÅ×Ï - ×ÏÚ×ÒÁÔ.\n"
+
+#. #define NOVICE_LINE_TWO
+#: LYMessages.c:167
+msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
+msgstr " H)elp O)ptions P)rint G)o M)çÌÁ× ÜËÒÁÎ Q)uit /=ÐÏÉÓË [delete]=ÓÐÉÓÏË ÉÓÔÏÒÉÉ \n"
+
+#. #define NOVICE_LINE_TWO_A
+#: LYMessages.c:169
+msgid " O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)uit \n"
+msgstr " O)äÒ. ËÏÍ. H)elp K)eymap G)oto P)ðÅÞÁÔØ M)çÌÁ× ÜËÒÁÎ o)ðÁÒÁÍ Q)÷ÙÈÏÄ\n"
+
+#. #define NOVICE_LINE_TWO_B
+#: LYMessages.c:171
+msgid " O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n"
+msgstr " O)äÒ. ËÏÍ. B)ack E)òÅÄ D)ÚÁÇÒÕÚÉÔØ ^R)eload ^W)ipe screen ÐÏÉÓË × ÄÏË: / \n"
+
+#. #define NOVICE_LINE_TWO_C
+#: LYMessages.c:173
+msgid "O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)emove \n"
+msgstr "O)äÒ. ËÏÍ. C)omment éÓÔÏÒÉÑ: <backspace> úÁËÌÁÄËÉ: V)iew, A)dd, R)emove \n"
+
+#. #define FORM_NOVICELINE_ONE
+#: LYMessages.c:175
+msgid " Enter text into the field by typing on the keyboard "
+msgstr " ÷×ÅÄÉÔÅ × ÐÏÌÅ ÔÅËÓÔ Ó ËÌÁ×ÉÁÔÕÒÙ "
+
+#. #define FORM_NOVICELINE_TWO
+#: LYMessages.c:177
+msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U - ÕÄÁÌÅÎÉÅ ×ÓÅÇÏ ÔÅËÓÔÁ × ÐÏÌÅ, [Backspace] - ÕÄÁÌÅÎÉÅ ÏÄÎÏÇÏ ÓÉÍ×ÏÌÁ"
+
+#. #define FORM_NOVICELINE_TWO_DELBL
+#: LYMessages.c:179
+msgid " Ctrl-U to delete text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U - ÕÄÁÌÅÎÉÅ ×ÓÅÇÏ ÔÅËÓÔÁ × ÐÏÌÅ, [Backspace] - ÕÄÁÌÅÎÉÅ ÏÄÎÏÇÏ ÓÉÍ×ÏÌÁ "
+
+#. #define FORM_NOVICELINE_TWO_VAR
+#: LYMessages.c:181
+#, c-format
+msgid " %s to delete all text in field, [Backspace] to delete a character "
+msgstr " %s - ÕÄÁÌÅÎÉÅ ×ÓÅÇÏ ÔÅËÓÔÁ × ÐÏÌÅ, [Backspace] - ÕÄÁÌÅÎÉÅ ÏÄÎÏÇÏ ÓÉÍ×ÏÌÁ "
+
+#. #define FORM_NOVICELINE_TWO_DELBL_VAR
+#: LYMessages.c:183
+#, c-format
+msgid " %s to delete text in field, [Backspace] to delete a character "
+msgstr " %s - ÕÄÁÌÅÎÉÅ ×ÓÅÇÏ ÔÅËÓÔÁ × ÐÏÌÅ, [Backspace] - ÕÄÁÌÅÎÉÅ ÏÄÎÏÇÏ ÓÉÍ×ÏÌÁ "
+
+#. mailto
+#: LYMessages.c:186
+msgid "Malformed mailto form submission! Cancelled!"
+msgstr "îÅÐÒÁ×ÉÌØÎÏ ÓÆÏÒÍÉÒÏ×ÁÎÎÁÑ ÐÏÓÙÌËÁ ÆÏÒÍÙ ÐÏ ÐÏÞÔÅ! ïÔÍÅÎÅÎÏ!"
+
+#: LYMessages.c:187
+msgid "Warning! Control codes in mail address replaced by ?"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ! õÐÒÁ×ÌÑÀÝÉÅ ËÏÄÙ × ÐÏÞÔÏ×ÏÍ ÁÄÒÅÓÅ ÚÁÍÅÎÅÎÙ ÎÁ ?"
+
+#: LYMessages.c:188
+msgid "Mail disallowed! Cannot submit."
+msgstr "ðÏÞÔÁ ÚÁÐÒÅÝÅÎÁ! îÅ ÕÄÁÅÔÓÑ ÐÏÓÌÁÔØ."
+
+#: LYMessages.c:189
+msgid "Mailto form submission failed!"
+msgstr "ðÏÓÙÌËÁ ÆÏÒÍÙ ÐÏ ÐÏÞÔÅ ÎÅ ×ÙÐÏÌÎÅÎÁ!"
+
+#: LYMessages.c:190
+msgid "Mailto form submission Cancelled!!!"
+msgstr "ðÏÓÙÌËÁ ÆÏÒÍÙ ÐÏ ÐÏÞÔÅ ÏÔÍÅÎÅÎÁ!!!"
+
+#: LYMessages.c:191
+msgid "Sending form content..."
+msgstr "ðÏÓÙÌËÁ ÓÏÄÅÒÖÉÍÏÇÏ ÆÏÒÍÙ..."
+
+#: LYMessages.c:192
+msgid "No email address is present in mailto URL!"
+msgstr "ïÔÓÕÔÓÔ×ÕÅÔ ÐÏÞÔÏ×ÙÊ ÁÄÒÅÓ × mailto URL!"
+
+#. #define MAILTO_URL_TEMPOPEN_FAILED
+#: LYMessages.c:194
+msgid "Unable to open temporary file for mailto URL!"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ ÄÌÑ mailto URL!"
+
+#. #define INC_ORIG_MSG_PROMPT
+#: LYMessages.c:196
+msgid "Do you wish to include the original message?"
+msgstr "÷Ù ÈÏÔÉÔÅ ×ËÌÀÞÉÔØ ÉÓÈÏÄÎÏÅ ÓÏÏÂÝÅÎÉÅ?"
+
+#. #define INC_PREPARSED_MSG_PROMPT
+#: LYMessages.c:198
+msgid "Do you wish to include the preparsed source?"
+msgstr "÷Ù ÈÏÔÉÔÅ ×ËÌÀÞÉÔØ ÒÁÚÏÂÒÁÎÎÙÊ ÉÓÈÏÄÎÙÊ ÔÅËÓÔ?"
+
+#. #define SPAWNING_EDITOR_FOR_MAIL
+#: LYMessages.c:200
+msgid "Spawning your selected editor to edit mail message"
+msgstr "úÁÐÕÓË ×ÁÛÅÇÏ ×ÙÂÒÁÎÎÏÇÏ ÒÅÄÁËÔÏÒÁ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÐÏÞÔÏ×ÏÇÏ ÓÏÏÂÝÅÎÉÑ"
+
+#. #define ERROR_SPAWNING_EDITOR
+#: LYMessages.c:202
+msgid "Error spawning editor, check your editor definition in the options menu"
+msgstr "ïÛÉÂËÁ ÐÒÉ ÚÁÐÕÓËÅ ÒÅÄÁËÔÏÒÁ, ÐÒÏ×ÅÒØÔÅ ÏÐÒÅÄÅÌÅÎÉÅ ÒÅÄÁËÔÏÒÁ × ÍÅÎÀ ÏÐÃÉÊ"
+
+#: LYMessages.c:203
+msgid "Send this comment?"
+msgstr "ðÏÓÌÁÔØ ÜÔÏÔ ËÏÍÍÅÎÔÁÒÉÊ?"
+
+#: LYMessages.c:204
+msgid "Send this message?"
+msgstr "ðÏÓÌÁÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ?"
+
+#: LYMessages.c:205
+msgid "Sending your message..."
+msgstr "ðÏÓÙÌËÁ ×ÁÛÅÇÏ ÓÏÏÂÝÅÎÉÑ..."
+
+#: LYMessages.c:206
+msgid "Sending your comment:"
+msgstr "ðÏÓÙÌËÁ ×ÁÛÅÇÏ ËÏÍÍÅÎÔÁÒÉÑ:"
+
+#. textarea
+#: LYMessages.c:209
+msgid "Not in a TEXTAREA; cannot use external editor."
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ ×ÎÅÛÎÅÇÏ ÒÅÄÁËÔÏÒÁ, ÎÁÈÏÄÑÓØ ×ÎÅ TEXTAREA, ÎÅ×ÏÚÍÏÖÎÏ."
+
+#: LYMessages.c:210
+msgid "Not in a TEXTAREA; cannot use command."
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ ËÏÍÁÎÄÙ, ÎÁÈÏÄÑÓØ ×ÎÅ TEXTAREA, ÎÅ×ÏÚÍÏÖÎÏ."
+
+#: LYMessages.c:213
+msgid "file: ACTIONs are disallowed!"
+msgstr "ÆÁÊÌ: äåêóô÷éñ ÚÁÐÒÅÝÅÎÙ!"
+
+#. #define FILE_SERVED_LINKS_DISALLOWED
+#: LYMessages.c:215
+msgid "file: URLs via served links are disallowed!"
+msgstr ""
+
+#: LYMessages.c:216
+msgid "Access to local files denied."
+msgstr "äÏÓÔÕÐ Ë ÌÏËÁÌØÎÙÍ ÆÁÊÌÁÍ ÚÁÐÒÅÝÅÎ."
+
+#: LYMessages.c:217
+msgid "file: URLs via bookmarks are disallowed!"
+msgstr "ÆÁÊÌ: URL ÞÅÒÅÚ ÚÁËÌÁÄËÉ ÚÁÐÒÅÝÅÎÙ!"
+
+#. #define SPECIAL_VIA_EXTERNAL_DISALLOWED
+#: LYMessages.c:219
+msgid "This special URL is not allowed in external documents!"
+msgstr "üÔÏÔ ÓÐÅÃÉÁÌØÎÙÊ URL ÎÅ ÄÏÐÕÓËÁÅÔÓÑ ×Ï ×ÎÅÛÎÅÍ ÄÏËÕÍÅÎÔÅ!"
+
+#: LYMessages.c:220
+msgid "Press <return> to return to Lynx."
+msgstr "îÁÖÍÉÔÅ <××ÏÄ> ÄÌÑ ×ÏÚ×ÒÁÔÁ × Lynx."
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:223
+msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
+msgstr "úÁÐÕÓËÁÅÔÓÑ ÐÏÄÐÒÏÃÅÓÓ DCL. éÓÐÏÌØÚÕÊÔÅ 'logout' ÄÌÑ ×ÏÚ×ÒÁÔÁ × Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:227
+msgid "Type EXIT to return to Lynx.\n"
+msgstr "÷×ÅÄÉÔÅ EXIT ÄÌÑ ×ÏÚ×ÒÁÔÁ × Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:230
+msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
+msgstr "úÁÐÕÓË ×ÁÛÅÊ ÏÂÏÌÏÞËÉ ÐÏ ÕÍÏÌÞÁÎÉÀ. éÓÐÏÌØÚÕÊÔÅ 'exit' ÄÌÑ ×ÏÚ×ÒÁÔÁ × Lynx.\n"
+
+#: LYMessages.c:233
+msgid "Spawning is currently disabled."
+msgstr "úÁÐÕÓË ÐÒÏÃÅÓÓÏ× ÓÅÊÞÁÓ ÚÁÐÒÅÝÅÎ."
+
+#: LYMessages.c:234
+msgid "The 'd'ownload command is currently disabled."
+msgstr "ëÏÍÁÎÄÁ 'd' (ÓËÁÞÁÔØ) ÓÅÊÞÁÓ ÚÁÐÒÅÝÅÎÁ."
+
+#: LYMessages.c:235
+msgid "You cannot download an input field."
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÓËÁÞÁÔØ ÐÏÌÅ ××ÏÄÁ."
+
+#: LYMessages.c:236
+msgid "Form has a mailto action! Cannot download."
+msgstr "äÅÊÓÔ×ÉÅÍ ÆÏÒÍÙ Ñ×ÌÑÅÔÓÑ ÐÏÓÙÌËÁ ÐÏ ÐÏÞÔÅ! îÅ×ÏÚÍÏÖÎÏ ÓËÁÞÁÔØ."
+
+#: LYMessages.c:237
+msgid "You cannot download a mailto: link."
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÓËÁÞÁÔØ ÓÓÙÌËÕ mailto:."
+
+#: LYMessages.c:238
+msgid "You cannot download cookies."
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÓËÁÞÁÔØ cookie."
+
+#: LYMessages.c:239
+msgid "You cannot download a printing option."
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÓËÁÞÁÔØ ÐÁÒÁÍÅÔÒ ÐÅÞÁÔÉ."
+
+#: LYMessages.c:240
+msgid "You cannot download an upload option."
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÓËÁÞÁÔØ ÉÌÉ ÚÁÇÒÕÚÉÔØ ÐÁÒÁÍÅÔÒ."
+
+#: LYMessages.c:241
+msgid "You cannot download an permit option."
+msgstr ""
+
+#: LYMessages.c:242
+msgid "This special URL cannot be downloaded!"
+msgstr "üÔÏÔ ÓÐÅÃÉÁÌØÎÙÊ URL ÎÅ ÍÏÖÅÔ ÂÙÔØ ÓËÁÞÁÎ!"
+
+#: LYMessages.c:243
+msgid "Nothing to download."
+msgstr "óËÁÞÉ×ÁÔØ ÎÅÞÅÇÏ."
+
+#: LYMessages.c:244
+msgid "Trace ON!"
+msgstr "ôÒÁÓÓÉÒÏ×ËÁ ÷ëìàþåîá!"
+
+#: LYMessages.c:245
+msgid "Trace OFF!"
+msgstr "ôÒÁÓÓÉÒÏ×ËÁ ÷ùëìàþåîá!"
+
+#. #define CLICKABLE_IMAGES_ON
+#: LYMessages.c:247
+msgid "Links will be included for all images! Reloading..."
+msgstr "óÓÙÌËÉ ÂÕÄÕÔ ×ËÌÀÞÅÎÙ ÄÌÑ ×ÓÅÈ ÉÚÏÂÒÁÖÅÎÉÊ! ïÂÎÏ×ÌÅÎÉÅ..."
+
+#. #define CLICKABLE_IMAGES_OFF
+#: LYMessages.c:249
+msgid "Standard image handling restored! Reloading..."
+msgstr "óÔÁÎÄÁÒÔÎÁÑ ÏÂÒÁÂÏÔËÁ ÉÚÏÂÒÁÖÅÎÉÊ ×ÏÓÓÔÁÎÏ×ÌÅÎÁ! ïÂÎÏ×ÌÅÎÉÅ..."
+
+#. #define PSEUDO_INLINE_ALTS_ON
+#: LYMessages.c:251
+msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
+msgstr "ðÓÅ×ÄÏ-ALT ÂÕÄÕÔ ×ÓÔÁ×ÌÅÎÙ ÄÌÑ ×ÎÕÔÒÉÓÔÒÏÞÎÙÈ ÉÚÏÂÒÁÖÅÎÉÊ ÂÅÚ ALT. ïÂÎÏ×ÌÅÎÉÅ..."
+
+#. #define PSEUDO_INLINE_ALTS_OFF
+#: LYMessages.c:253
+msgid "Inlines without an ALT string specified will be ignored! Reloading..."
+msgstr "÷ÎÕÔÒÉÓÔÒÏÞÎÙÅ ÉÚÏÂÒÁÖÅÎÉÑ ÂÅÚ ÁÔÒÉÂÕÔÁ ALT ÂÕÄÕÔ ÉÇÎÏÒÉÒÏ×ÁÔØÓÑ! ïÂÎÏ×ÌÅÎÉÅ..."
+
+#: LYMessages.c:254
+msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
+msgstr "îÅÏÂÒÁÂÏÔÁÎÎÙÊ 8-ÂÉÔÎÙÊ ÉÌÉ CJK-ÒÅÖÉÍ ÷ùëìàþåî! ïÂÎÏ×ÌÅÎÉÅ..."
+
+#: LYMessages.c:255
+msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
+msgstr "îÅÏÂÒÁÂÏÔÁÎÎÙÊ 8-ÂÉÔÎÙÊ ÉÌÉ CJK-ÒÅÖÉÍ ÷ëìàþåî! ïÂÎÏ×ÌÅÎÉÅ..."
+
+#. #define HEAD_D_L_OR_CANCEL
+#: LYMessages.c:257
+msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
+msgstr "ðÏÓÌÁÔØ ÚÁÐÒÏÓ HEAD ÄÌÑ D)ÄÏËÕÍÅÎÔÁ ÉÌÉ L)ÓÓÙÌËÉ, ÉÌÉ C)ïÔÍÅÎÉÔØ? (d,l,c): "
+
+#. #define HEAD_D_OR_CANCEL
+#: LYMessages.c:259
+msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
+msgstr "ðÏÓÌÁÔØ ÚÁÐÒÏÓ HEAD ÄÌÑ D)ÄÏËÕÍÅÎÔÁ, ÉÌÉ C)ÏÔÍÅÎÉÔØ? (d,c): "
+
+#: LYMessages.c:260
+msgid "Sorry, the document is not an http URL."
+msgstr "éÚ×ÉÎÉÔÅ, ÄÏËÕÍÅÎÔ ÎÅ Ñ×ÌÑÅÔÓÑ http URL."
+
+#: LYMessages.c:261
+msgid "Sorry, the link is not an http URL."
+msgstr "éÚ×ÉÎÉÔÅ, ÓÓÙÌËÁ ÎÅ Ñ×ÌÑÅÔÓÑ http URL."
+
+#: LYMessages.c:262
+msgid "Sorry, the ACTION for this form is disabled."
+msgstr "éÚ×ÉÎÉÔÅ, äåêóô÷éå ÄÌÑ ÜÔÏÊ ÆÏÒÍÙ ÏÔËÌÀÞÅÎÏ."
+
+#. #define FORM_ACTION_NOT_HTTP_URL
+#: LYMessages.c:264
+msgid "Sorry, the ACTION for this form is not an http URL."
+msgstr "éÚ×ÉÎÉÔÅ, äåêóô÷éå ÄÌÑ ÜÔÏÊ ÆÏÒÍÙ ÎÅ Ñ×ÌÑÅÔÓÑ http URL."
+
+#: LYMessages.c:265
+msgid "Not an http URL or form ACTION!"
+msgstr "îÅ http URL ÉÌÉ äåêóô÷éå ÆÏÒÍÙ!"
+
+#: LYMessages.c:266
+msgid "This special URL cannot be a form ACTION!"
+msgstr "üÔÏÔ ÓÐÅÃÉÁÌØÎÙÊ URL ÎÅ ÍÏÖÅÔ ÂÙÔØ äåêóô÷éåí ÆÏÒÍÙ!"
+
+#: LYMessages.c:267
+msgid "URL is not in starting realm!"
+msgstr "URL ÎÁÈÏÄÉÔÓÑ ×ÎÅ ÎÁÞÁÌØÎÏÊ ÏÂÌÁÓÔÉ!"
+
+#: LYMessages.c:268
+msgid "News posting is disabled!"
+msgstr "ðÏÓÙÌËÁ ÎÏ×ÏÓÔÅÊ ÚÁÐÒÅÝÅÎÁ!"
+
+#: LYMessages.c:269
+msgid "File management support is disabled!"
+msgstr "ðÏÄÄÅÒÖËÁ ÒÁÂÏÔÙ Ó ÆÁÊÌÁÍÉ ÏÔËÌÀÞÅÎÁ!"
+
+#: LYMessages.c:270
+msgid "No jump file is currently available."
+msgstr "÷ ÄÁÎÎÙÊ ÍÏÍÅÎÔ ÎÅÔ ÄÏÓÔÕÐÎÏÇÏ ÆÁÊÌÁ ÐÅÒÅÈÏÄÏ×."
+
+#: LYMessages.c:271
+msgid "Jump to (use '?' for list): "
+msgstr "ðÅÒÅÊÔÉ Ë (ÉÓÐÏÌØÚÕÊÔÅ '?' ÄÌÑ ÓÐÉÓËÁ): "
+
+#: LYMessages.c:272
+msgid "Jumping to a shortcut URL is disallowed!"
+msgstr "ðÅÒÅÈÏÄ ÐÏ ÓÏËÒÁÝÅÎÎÏÍÕ URL ÚÁÐÒÅÝÅÎ!"
+
+#: LYMessages.c:273
+msgid "Random URL is disallowed! Use a shortcut."
+msgstr "óÌÕÞÁÊÎÙÅ URL ÚÁÐÒÅÝÅÎÙ! éÓÐÏÌØÚÕÊÔÅ ÓÏËÒÁÝÅÎÉÅ."
+
+#: LYMessages.c:274
+msgid "No random URLs have been used thus far."
+msgstr "óÌÕÞÁÊÎÙÅ URL ÄÏ ÓÉÈ ÐÏÒ ÎÅ ÉÓÐÏÌØÚÏ×ÁÌÉÓØ."
+
+#: LYMessages.c:275
+msgid "Bookmark features are currently disabled."
+msgstr "úÁËÌÁÄËÉ ÓÅÊÞÁÓ ÏÔËÌÀÞÅÎÙ."
+
+#: LYMessages.c:276
+msgid "Execution via bookmarks is disabled."
+msgstr "÷ÙÐÏÌÎÅÎÉÅ ÞÅÒÅÚ ÚÁËÌÁÄËÉ ÏÔËÌÀÞÅÎÏ."
+
+#. #define BOOKMARK_FILE_NOT_DEFINED
+#: LYMessages.c:278
+#, c-format
+msgid "Bookmark file is not defined. Use %s to see options."
+msgstr "æÁÊÌ ÚÁËÌÁÄÏË ÎÅ ÏÐÒÅÄÅÌÅÎ. éÓÐÏÌØÚÕÊÔÅ %s ÄÌÑ ÐÒÏÓÍÏÔÒÁ ÏÐÃÉÊ."
+
+#. #define NO_TEMP_FOR_HOTLIST
+#: LYMessages.c:280
+msgid "Unable to open tempfile for X Mosaic hotlist conversion."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ ÄÌÑ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÚÁËÌÁÄÏË X Mosaic."
+
+#: LYMessages.c:281
+msgid "ERROR - unable to open bookmark file."
+msgstr "ïûéâëá - ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ ÚÁËÌÁÄÏË."
+
+#. #define BOOKMARK_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:283
+msgid "Unable to open bookmark file for deletion of link."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ ÚÁËÌÁÄÏË ÄÌÑ ÕÄÁÌÅÎÉÑ ÓÓÙÌËÉ."
+
+#. #define BOOKSCRA_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:285
+msgid "Unable to open scratch file for deletion of link."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÒÁÂÏÞÉÊ ÆÁÊÌ ÄÌÑ ÕÄÁÌÅÎÉÑ ÓÓÙÌËÉ."
+
+#: LYMessages.c:287
+msgid "Error renaming scratch file."
+msgstr "ïÛÉÂËÁ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ ÒÁÂÏÞÅÇÏ ÆÁÊÌÁ."
+
+#: LYMessages.c:289
+msgid "Error renaming temporary file."
+msgstr "ïÛÉÂËÁ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ ×ÒÅÍÅÎÎÏÇÏ ÆÁÊÌÁ."
+
+#. #define BOOKTEMP_COPY_FAIL
+#: LYMessages.c:291
+msgid "Unable to copy temporary file for deletion of link."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓËÏÐÉÒÏ×ÁÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ ÄÌÑ ÕÄÁÌÅÎÉÑ ÓÓÙÌËÉ."
+
+#. #define BOOKTEMP_REOPEN_FAIL_FOR_DEL
+#: LYMessages.c:293
+msgid "Unable to reopen temporary file for deletion of link."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÎÏ×Ï ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ ÄÌÑ ÕÄÁÌÅÎÉÑ ÓÓÙÌËÉ."
+
+#. #define BOOKMARK_LINK_NOT_ONE_LINE
+#: LYMessages.c:296
+msgid "Link is not by itself all on one line in bookmark file."
+msgstr "óÓÙÌËÁ ÎÅ ÎÁÈÏÄÉÔÓÑ ÃÅÌÉËÏÍ ÎÁ ÏÄÎÏÊ ÓÔÒÏËÅ ÆÁÊÌÁ ÚÁËÌÁÄÏË."
+
+#: LYMessages.c:297
+msgid "Bookmark deletion failed."
+msgstr "ïÛÉÂËÁ ÐÒÉ ÕÄÁÌÅÎÉÉ ÚÁËÌÁÄËÉ."
+
+#. #define BOOKMARKS_NOT_TRAVERSED
+#: LYMessages.c:299
+msgid "Bookmark files cannot be traversed (only http URLs)."
+msgstr "ðÒÏÈÏÖÄÅÎÉÅ ÐÏ ÆÁÊÌÁÍ ÚÁËÌÁÄÏË ÎÅ×ÏÚÍÏÖÎÏ (ÔÏÌØËÏ ÐÏ http URL)."
+
+#. #define BOOKMARKS_NOT_OPEN
+#: LYMessages.c:301
+msgid "Unable to open bookmark file, use 'a' to save a link first"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ ÚÁËÌÁÄÏË, ÓÎÁÞÁÌÁ ÉÓÐÏÌØÚÕÊÔÅ 'a' ÄÌÑ ÓÏÈÒÁÎÅÎÉÑ ÓÓÙÌËÉ"
+
+#: LYMessages.c:302
+msgid "There are no links in this bookmark file!"
+msgstr "÷ ÜÔÏÍ ÆÁÊÌÅ ÚÁËÌÁÄÏË ÎÅÔ ÓÓÙÌÏË!"
+
+#. #define BOOK_D_L_OR_CANCEL
+#: LYMessages.c:304
+msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
+msgstr "óÏÈÒÁÎÉÔØ D)ÄÏËÕÍÅÎÔ ÉÌÉ L)ÓÓÙÌËÕ × ÆÁÊÌ ÚÁËÌÁÄÏË ÉÌÉ C)ÏÔÍÅÎÉÔØ? (d,l,c): "
+
+#: LYMessages.c:305
+msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
+msgstr "óÏÈÒÁÎÉÔØ D)ÄÏËÕÍÅÎÔ × ÆÁÊÌ ÚÁËÌÁÄÏË ÉÌÉ C)ÏÔÍÅÎÉÔØ? (d,c): "
+
+#: LYMessages.c:306
+msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
+msgstr "óÏÈÒÁÎÉÔØ L)ÓÓÙÌËÕ × ÆÁÊÌ ÚÁËÌÁÄÏË ÉÌÉ C)ÏÔÍÅÎÉÔØ? (l,c): "
+
+#. #define NOBOOK_POST_FORM
+#: LYMessages.c:308
+msgid "Documents from forms with POST content cannot be saved as bookmarks."
+msgstr "äÏËÕÍÅÎÔÙ ÉÚ ÆÏÒÍ Ó ÓÏÄÅÒÖÉÍÙÍ POST ÎÅ ÍÏÇÕÔ ÂÙÔØ ÓÏÈÒÁÎÅÎÙ ËÁË ÚÁËÌÁÄËÉ."
+
+#: LYMessages.c:309
+msgid "Cannot save form fields/links"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÈÒÁÎÉÔØ ÐÏÌÑ/ÓÓÙÌËÉ ÆÏÒÍÙ"
+
+#. #define NOBOOK_HSML
+#: LYMessages.c:311
+msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
+msgstr "éÓÔÏÒÉÑ, ÉÎÆÏÒÍÁÃÉÑ, ÍÅÎÀ É ÆÁÊÌÙ ÓÐÉÓËÏ× ÎÅ ÍÏÇÕÔ ÂÙÔØ ÓÏÈÒÁÎÅÎÙ ËÁË ÚÁËÌÁÄËÉ."
+
+#. #define CONFIRM_BOOKMARK_DELETE
+#: LYMessages.c:313
+msgid "Do you really want to delete this link from your bookmark file?"
+msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ÜÔÕ ÓÓÙÌËÕ ÉÚ ÆÁÊÌÁ ÚÁËÌÁÄÏË?"
+
+#: LYMessages.c:314
+msgid "Malformed address."
+msgstr "îÅÐÒÁ×ÉÌØÎÏ ÓÆÏÒÍÉÒÏ×ÁÎÎÙÊ ÁÄÒÅÓ."
+
+#. #define HISTORICAL_ON_MINIMAL_OFF
+#: LYMessages.c:316
+msgid "Historical comment parsing ON (Minimal is overridden)!"
+msgstr "éÓÔÏÒÉÞÅÓËÉÊ ÓÐÏÓÏ ÒÁÚÂÏÒÁ ËÏÍÍÅÎÔÁÒÉÅ× ÷ëìàþåî (ÚÁÍÅÝÁÅÔ íÉÎÉÍÁÌØÎÙÊ)!"
+
+#. #define HISTORICAL_OFF_MINIMAL_ON
+#: LYMessages.c:318
+msgid "Historical comment parsing OFF (Minimal is in effect)!"
+msgstr "éÓÔÏÒÉÞÅÓËÉÊ ÓÐÏÓÏ ÒÁÚÂÏÒÁ ËÏÍÍÅÎÔÁÒÉÅ× ÷ùëìàþåî (íÉÎÉÍÁÌØÎÙÊ ÄÅÊÓÔ×ÕÅÔ)!"
+
+#. #define HISTORICAL_ON_VALID_OFF
+#: LYMessages.c:320
+msgid "Historical comment parsing ON (Valid is overridden)!"
+msgstr "éÓÔÏÒÉÞÅÓËÉÊ ÓÐÏÓÏ ÒÁÚÂÏÒÁ ËÏÍÍÅÎÔÁÒÉÅ× ÷ëìàþåî (ÚÁÍÅÝÁÅÔ ðÒÁ×ÉÌØÎÙÊ)!"
+
+#. #define HISTORICAL_OFF_VALID_ON
+#: LYMessages.c:322
+msgid "Historical comment parsing OFF (Valid is in effect)!"
+msgstr "éÓÔÏÒÉÞÅÓËÉÊ ÓÐÏÓÏ ÒÁÚÂÏÒÁ ËÏÍÍÅÎÔÁÒÉÅ× ÷ùëìàþåî (ðÒÁ×ÉÌØÎÙÊ ÄÅÊÓÔ×ÕÅÔ)!"
+
+#. #define MINIMAL_ON_IN_EFFECT
+#: LYMessages.c:324
+msgid "Minimal comment parsing ON (and in effect)!"
+msgstr "íÉÎÉÍÁÌØÎÙÊ ÓÐÏÓÏ ÒÁÚÂÏÒÁ ËÏÍÍÅÎÔÁÒÉÅ× ÷ëìàþåî (É ÄÅÊÓÔ×ÕÅÔ)!"
+
+#. #define MINIMAL_OFF_VALID_ON
+#: LYMessages.c:326
+msgid "Minimal comment parsing OFF (Valid is in effect)!"
+msgstr "íÉÎÉÍÁÌØÎÙÊ ÓÐÏÓÏ ÒÁÚÂÏÒÁ ËÏÍÍÅÎÔÁÒÉÅ× ÷ùëìàþåî (ðÒÁ×ÉÌØÎÙÊ ÄÅÊÓÔ×ÕÅÔ)!"
+
+#. #define MINIMAL_ON_BUT_HISTORICAL
+#: LYMessages.c:328
+msgid "Minimal comment parsing ON (but Historical is in effect)!"
+msgstr "íÉÎÉÍÁÌØÎÙÊ ÓÐÏÓÏ ÒÁÚÂÏÒÁ ËÏÍÍÅÎÔÁÒÉÅ× ÷ëìàþåî (ÎÏ éÓÔÏÒÉÞÅÓËÉÊ ÄÅÊÓÔ×ÕÅÔ)!"
+
+#. #define MINIMAL_OFF_HISTORICAL_ON
+#: LYMessages.c:330
+msgid "Minimal comment parsing OFF (Historical is in effect)!"
+msgstr "íÉÎÉÍÁÌØÎÙÊ ÓÐÏÓÏ ÒÁÚÂÏÒÁ ËÏÍÍÅÎÔÁÒÉÅ× ÷ùëìàþåî (éÓÔÏÒÉÞÅÓËÉÊ ÄÅÊÓÔ×ÕÅÔ)!"
+
+#: LYMessages.c:331
+msgid "Soft double-quote parsing ON!"
+msgstr "íÑÇËÉÊ ÒÁÚÂÏÒ Ä×ÏÊÎÙÈ ËÁ×ÙÞÅË ÷ëìàþåî!"
+
+#: LYMessages.c:332
+msgid "Soft double-quote parsing OFF!"
+msgstr "íÑÇËÉÊ ÒÁÚÂÏÒ Ä×ÏÊÎÙÈ ËÁ×ÙÞÅË ÷ùëìàþåî!"
+
+#: LYMessages.c:333
+msgid "Now using TagSoup parsing of HTML."
+msgstr "ôÅÐÅÒØ ÉÓÐÏÌØÚÕÅÔÓÑ ÍÅÔÏÄ TagSoup ÒÁÚÂÏÒÁ HTML."
+
+#: LYMessages.c:334
+msgid "Now using SortaSGML parsing of HTML!"
+msgstr "ôÅÐÅÒØ ÉÓÐÏÌØÚÕÅÔÓÑ ÍÅÔÏÄ SortaSGML ÒÁÚÂÏÒÁ HTML!"
+
+#: LYMessages.c:335
+msgid "You are already at the end of this document."
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ × ËÏÎÃÅ ÜÔÏÇÏ ÄÏËÕÍÅÎÔÁ."
+
+#: LYMessages.c:336
+msgid "You are already at the beginning of this document."
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ × ÎÁÞÁÌÅ ÜÔÏÇÏ ÄÏËÕÍÅÎÔÁ."
+
+#: LYMessages.c:337
+#, c-format
+msgid "You are already at page %d of this document."
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ ÎÁ ÓÔÒÁÎÉÃÅ %d ÜÔÏÇÏ ÄÏËÕÍÅÎÔÁ."
+
+#: LYMessages.c:338
+#, c-format
+msgid "Link number %d already is current."
+msgstr "óÓÙÌËÁ ÎÏÍÅÒ %d ÕÖÅ Ñ×ÌÑÅÔÓÑ ÔÅËÕÝÅÊ."
+
+#: LYMessages.c:339
+msgid "You are already at the first document"
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ ÎÁ ÐÅÒ×ÏÍ ÄÏËÕÍÅÎÔÅ"
+
+#: LYMessages.c:340
+msgid "There are no links above this line of the document."
+msgstr "÷ÙÛÅ ÜÔÏÊ ÓÔÒÏËÉ ÄÏËÕÍÅÎÔÁ ÓÓÙÌÏË ÎÅÔ."
+
+#: LYMessages.c:341
+msgid "There are no links below this line of the document."
+msgstr "îÉÖÅ ÜÔÏÊ ÓÔÒÏËÉ ÄÏËÕÍÅÎÔÁ ÓÓÙÌÏË ÎÅÔ."
+
+#. #define MAXLEN_REACHED_DEL_OR_MOV
+#: LYMessages.c:343
+msgid "Maximum length reached! Delete text or move off field."
+msgstr "íÁËÓÉÍÁÌØÎÁÑ ÄÌÉÎÁ ÄÏÓÔÉÇÎÕÔÁ! õÄÁÌÉÔÅ ÔÅËÓÔ ÉÌÉ ×ÙÊÄÅÔÅ Ó ÐÏÌÑ."
+
+#. #define NOT_ON_SUBMIT_OR_LINK
+#: LYMessages.c:345
+msgid "You are not on a form submission button or normal link."
+msgstr "÷Ù ÎÁÈÏÄÉÔÅÓØ ÎÅ ÎÁ ËÎÏÐËÅ ÐÏÓÙÌËÉ ÆÏÒÍÙ ÉÌÉ ÏÂÙÞÎÏÊ ÓÓÙÌËÅ."
+
+#. #define NEED_CHECKED_RADIO_BUTTON
+#: LYMessages.c:347
+msgid "One radio button must be checked at all times!"
+msgstr "÷ÓÅ ×ÒÅÍÑ ÄÏÌÖÎÁ ÂÙÔØ ×ÙÂÒÁÎÁ ÏÄÎÁ ÚÁ×ÉÓÉÍÁÑ ËÎÏÐËÁ!"
+
+#: LYMessages.c:348
+msgid "No submit button for this form, submit single text field?"
+msgstr "÷ ÜÔÏÊ ÆÏÒÍÅ ÎÅÔ ËÎÏÐËÉ ÐÏÓÙÌËÉ, ÐÏÓÌÁÔØ ÏÄÎÏ ÔÅËÓÔÏ×ÏÅ ÐÏÌÅ?"
+
+#: LYMessages.c:349
+msgid "Do you want to go back to the previous document?"
+msgstr "÷Ù ÈÏÔÉÔÅ ×ÅÒÎÕÔØÓÑ ÎÁÚÁÄ Ë ÐÒÅÄÙÄÕÝÅÍÕ ÄÏËÕÍÅÎÔÕ?"
+
+#: LYMessages.c:350
+msgid "Use arrows or tab to move off of field."
+msgstr "éÓÐÏÌØÚÕÊÔÅ ÓÔÒÅÌËÉ ÉÌÉ tab ÄÌÑ ×ÙÈÏÄÁ ÉÚ ÐÏÌÑ."
+
+#. #define ENTER_TEXT_ARROWS_OR_TAB
+#: LYMessages.c:352
+msgid "Enter text. Use arrows or tab to move off of field."
+msgstr "÷×ÅÄÉÔÅ ÔÅËÓÔ. éÓÐÏÌØÚÕÊÔÅ ÓÔÒÅÌËÉ ÉÌÉ tab ÄÌÑ ×ÙÈÏÄÁ ÉÚ ÐÏÌÑ."
+
+#: LYMessages.c:353
+msgid "** Bad HTML!! No form action defined. **"
+msgstr "** ðÌÏÈÏÊ HTML!! îÅ ÏÐÒÅÄÅÌÅÎÏ ÄÅÊÓÔ×ÉÅ ÆÏÒÍÙ. **"
+
+#: LYMessages.c:354
+msgid "Bad HTML!! Unable to create popup window!"
+msgstr "ðÌÏÈÏÊ HTML!! îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÓÐÌÙ×ÁÀÝÅÅ ÏËÎÏ!"
+
+#: LYMessages.c:355
+msgid "Unable to create popup window!"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÓÐÌÙ×ÁÀÝÅÅ ÏËÎÏ!"
+
+#: LYMessages.c:356
+msgid "Goto a random URL is disallowed!"
+msgstr "ðÅÒÅÈÏÄ Ë ÓÌÕÞÁÊÎÏÍÕ URL ÚÁÐÒÅÝÅÎ!"
+
+#: LYMessages.c:357
+msgid "Goto a non-http URL is disallowed!"
+msgstr "ðÅÒÅÈÏÄ Ë ÎÅ-http URL ÚÁÐÒÅÝÅÎ!"
+
+#: LYMessages.c:358
+#, c-format
+msgid "You are not allowed to goto \"%s\" URLs"
+msgstr "÷ÁÍ ÎÅ ÒÁÚÒÅÛÅÎÏ ÐÅÒÅÈÏÄÉÔØ Ë \"%s\" URLs"
+
+#: LYMessages.c:359
+msgid "URL to open: "
+msgstr "ïÔËÒÙÔØ URL: "
+
+#: LYMessages.c:360
+msgid "Edit the current Goto URL: "
+msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÔÅËÕÝÅÇÏ URL ÄÌÑ ÐÅÒÅÈÏÄÁ: "
+
+#: LYMessages.c:361
+msgid "Edit the previous Goto URL: "
+msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÐÒÅÄÙÄÕÝÅÇÏ URL ÄÌÑ ÐÅÒÅÈÏÄÁ: "
+
+#: LYMessages.c:362
+msgid "Edit a previous Goto URL: "
+msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÐÒÅÄÙÄÕÝÅÇÏ URL ÄÌÑ ÐÅÒÅÈÏÄÁ: "
+
+#: LYMessages.c:363
+msgid "Current document has POST data."
+msgstr "ôÅËÕÝÉÊ ÄÏËÕÍÅÎÔ ÉÍÅÅÔ POST-ÄÁÎÎÙÅ."
+
+#: LYMessages.c:364
+msgid "Edit this document's URL: "
+msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ URL ÜÔÏÇÏ ÄÏËÕÍÅÎÔÁ: "
+
+#: LYMessages.c:365
+msgid "Edit the current link's URL: "
+msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ URL ÔÅËÕÝÅÊ ÓÓÙÌËÉ: "
+
+#: LYMessages.c:366
+msgid "You cannot edit File Management URLs"
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÒÅÄÁËÔÉÒÏ×ÁÔØ URL òÁÂÏÔÙ Ó æÁÊÌÁÍÉ"
+
+#: LYMessages.c:367
+msgid "Enter a database query: "
+msgstr "÷×ÅÄÉÔÅ ÚÁÐÒÏÓ Ë ÂÁÚÅ ÄÁÎÎÙÈ: "
+
+#: LYMessages.c:368
+msgid "Enter a whereis query: "
+msgstr "÷×ÅÄÉÔÅ ÚÁÐÒÏÓ ÎÁ ÐÏÉÓË: "
+
+#: LYMessages.c:369
+msgid "Edit the current query: "
+msgstr "ïÔÒÅÄÁËÔÉÒÕÊÔÅ ÔÅËÕÝÉÊ ÚÁÐÒÏÓ: "
+
+#: LYMessages.c:370
+msgid "Edit the previous query: "
+msgstr "ïÔÒÅÄÁËÔÉÒÕÊÔÅ ÐÒÅÄÙÄÕÝÉÊ ÚÁÐÒÏÓ: "
+
+#: LYMessages.c:371
+msgid "Edit a previous query: "
+msgstr "ïÔÒÅÄÁËÔÉÒÕÊÔÅ ÐÒÅÄÙÄÕÝÉÊ ÚÁÐÒÏÓ: "
+
+#. #define USE_C_R_TO_RESUB_CUR_QUERY
+#: LYMessages.c:373
+msgid "Use Control-R to resubmit the current query."
+msgstr "éÓÐÏÌØÚÕÊÔÅ Control-R, ÞÔÏÂÙ ÐÏÓÌÁÔØ ÚÁÎÏ×Ï ÔÅËÕÝÉÊ ÚÁÐÒÏÓ."
+
+#: LYMessages.c:374
+msgid "Edit the current shortcut: "
+msgstr "ïÔÒÅÄÁËÔÉÒÕÊÔÅ ÔÅËÕÝÅÅ ÓÏËÒÁÝÅÎÉÅ: "
+
+#: LYMessages.c:375
+msgid "Edit the previous shortcut: "
+msgstr "ïÔÒÅÄÁËÔÉÒÕÊÔÅ ÐÒÅÄÙÄÕÝÅÅ ÓÏËÒÁÝÅÎÉÅ: "
+
+#: LYMessages.c:376
+msgid "Edit a previous shortcut: "
+msgstr "ïÔÒÅÄÁËÔÉÒÕÊÔÅ ÐÒÅÄÙÄÕÝÅÅ ÓÏËÒÁÝÅÎÉÅ: "
+
+#: LYMessages.c:377
+#, c-format
+msgid "Key '%c' is not mapped to a jump file!"
+msgstr "ëÌÀÞ '%c' ÎÅ ÏÔÏÂÒÁÖÁÅÔÓÑ × ÆÁÊÌ ÐÅÒÅÈÏÄÏ×!"
+
+#: LYMessages.c:378
+msgid "Cannot locate jump file!"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÂÎÁÒÕÖÉÔØ ÆÁÊÌ ÐÅÒÅÈÏÄÏ×!"
+
+#: LYMessages.c:379
+msgid "Cannot open jump file!"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ ÐÅÒÅÈÏÄÏ×!"
+
+#: LYMessages.c:380
+msgid "Error reading jump file!"
+msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÆÁÊÌÁ ÐÅÒÅÈÏÄÏ×!"
+
+#: LYMessages.c:381
+msgid "Out of memory reading jump file!"
+msgstr "îÅ È×ÁÔÁÅÔ ÐÁÍÑÔÉ ÄÌÑ ÞÔÅÎÉÑ ÆÁÊÌÁ ÐÅÒÅÈÏÄÏ×!"
+
+#: LYMessages.c:382
+msgid "Out of memory reading jump table!"
+msgstr "îÅ È×ÁÔÁÅÔ ÐÁÍÑÔÉ ÄÌÑ ÞÔÅÎÉÑ ÔÁÂÌÉÃÙ ÐÅÒÅÈÏÄÏ×!"
+
+#: LYMessages.c:383
+msgid "No index is currently available."
+msgstr "óÅÊÞÁÓ ÎÅÔ ÄÏÓÔÕÐÎÏÇÏ ÉÎÄÅËÓÁ."
+
+#. #define CONFIRM_MAIN_SCREEN
+#: LYMessages.c:385
+msgid "Do you really want to go to the Main screen?"
+msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ÐÅÒÅÊÔÉ Ë çÌÁ×ÎÏÍÕ ÜËÒÁÎÕ?"
+
+#: LYMessages.c:386
+msgid "You are already at main screen!"
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ ÎÁ ÇÌÁ×ÎÏÍ ÜËÒÁÎÅ!"
+
+#. #define NOT_ISINDEX
+#: LYMessages.c:388
+msgid "Not a searchable indexed document -- press '/' to search for a text string"
+msgstr "îÅ ÐÏÉÓËÏ×ÙÊ ÉÎÄÅËÓÉÒÏ×ÁÎÎÙÊ ÄÏËÕÍÅÎÔ - ÎÁÖÍÉÔÅ '/' ÄÌÑ ÐÏÉÓËÁ ÐÏ ÓÔÒÏËÅ ÔÅËÓÔÁ"
+
+#. #define NO_OWNER
+#: LYMessages.c:390
+msgid "No owner is defined for this file so you cannot send a comment"
+msgstr "äÌÑ ÜÔÏÇÏ ÆÁÊÌÁ ÎÅ ÏÐÒÅÄÅÌÅÎ ×ÌÁÄÅÌÅÃ, ÔÁË ÞÔÏ ×Ù ÎÅ ÍÏÖÅÔÅ ÐÏÓÌÁÔØ ËÏÍÍÅÎÔÁÒÉÊ"
+
+#: LYMessages.c:391
+#, c-format
+msgid "No owner is defined. Use %s?"
+msgstr "÷ÌÁÄÅÌÅà ÎÅ ÏÐÒÅÄÅÌÅÎ. éÓÐÏÌØÚÕÊÔÅ %s?"
+
+#: LYMessages.c:392
+msgid "Do you wish to send a comment?"
+msgstr "÷Ù ÈÏÔÉÔÅ ÐÏÓÌÁÔØ ËÏÍÍÅÎÔÁÒÉÊ?"
+
+#: LYMessages.c:393
+msgid "Mail is disallowed so you cannot send a comment"
+msgstr "ðÏÞÔÁ ÚÁÐÒÅÝÅÎÁ, ÔÁË ÞÔÏ ×Ù ÎÅ ÍÏÖÅÔÅ ÐÏÓÌÁÔØ ËÏÍÍÅÎÔÁÒÉÊ"
+
+#: LYMessages.c:394
+msgid "The 'e'dit command is currently disabled."
+msgstr "ëÏÍÁÎÄÁ e)ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÓÅÊÞÁÓ ÏÔËÌÀÞÅÎÁ."
+
+#: LYMessages.c:395
+msgid "External editing is currently disabled."
+msgstr "÷ÎÅÛÎÅÅ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ ÓÅÊÞÁÓ ÏÔËÌÀÞÅÎÏ."
+
+#: LYMessages.c:396
+msgid "System error - failure to get status."
+msgstr "óÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ - ÎÅ ÕÄÁÅÔÓÑ ÐÏÌÕÞÉÔØ ÓÔÁÔÕÓ."
+
+#: LYMessages.c:397
+msgid "No editor is defined!"
+msgstr "òÅÄÁËÔÏÒ ÎÅ ÏÐÒÅÄÅÌÅÎ!"
+
+#: LYMessages.c:398
+msgid "The 'p'rint command is currently disabled."
+msgstr "ëÏÍÁÎÄÁ p)ÐÅÞÁÔÉ ÓÅÊÞÁÓ ÏÔËÌÀÞÅÎÁ."
+
+#: LYMessages.c:399
+msgid "Document has no Toolbar links or Banner."
+msgstr "äÏËÕÍÅÎÔ ÎÅ ÉÍÅÅÔ ÓÓÙÌÏË Toolbar ÉÌÉ Banner."
+
+#: LYMessages.c:400
+msgid "Unable to open traversal file."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ ÐÒÏÈÏÖÄÅÎÉÑ."
+
+#: LYMessages.c:401
+msgid "Unable to open traversal found file."
+msgstr ""
+
+#: LYMessages.c:402
+msgid "Unable to open reject file."
+msgstr ""
+
+#: LYMessages.c:403
+msgid "Unable to open traversal errors output file"
+msgstr ""
+
+#: LYMessages.c:404
+msgid "TRAVERSAL WAS INTERRUPTED"
+msgstr "ðïèïöäåîéå ðòåò÷áîï"
+
+#: LYMessages.c:405
+msgid "Follow link (or goto link or page) number: "
+msgstr "ðÅÒÅÈÏÄ ÐÏ ÓÓÙÌËÅ (ÉÌÉ Ë ÓÓÙÌËÅ ÉÌÉ ÓÔÒÁÎÉÃÅ) Ó ÎÏÍÅÒÏÍ: "
+
+#: LYMessages.c:406
+msgid "Select option (or page) number: "
+msgstr "÷ÙÂÅÒÉÔÅ ÎÏÍÅÒ ÏÐÃÉÉ (ÉÌÉ ÓÔÒÁÎÉÃÙ): "
+
+#: LYMessages.c:407
+#, c-format
+msgid "Option number %d already is current."
+msgstr "ïÐÃÉÑ ÎÏÍÅÒ %d ÕÖÅ Ñ×ÌÑÅÔÓÑ ÔÅËÕÝÅÊ."
+
+#. #define ALREADY_AT_OPTION_END
+#: LYMessages.c:409
+msgid "You are already at the end of this option list."
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ × ËÏÎÃÅ ÜÔÏÇÏ ÓÐÉÓËÁ ÏÐÃÉÊ."
+
+#. #define ALREADY_AT_OPTION_BEGIN
+#: LYMessages.c:411
+msgid "You are already at the beginning of this option list."
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ × ÎÁÞÁÌÅ ÜÔÏÇÏ ÓÐÉÓËÁ ÏÐÃÉÊ."
+
+#. #define ALREADY_AT_OPTION_PAGE
+#: LYMessages.c:413
+#, c-format
+msgid "You are already at page %d of this option list."
+msgstr "÷Ù ÕÖÅ ÎÁÈÏÄÉÔÅÓØ ÎÁ ÓÔÒÁÎÉÃÅ %d ÜÔÏÇÏ ÓÐÉÓËÁ ÏÐÃÉÊ."
+
+#: LYMessages.c:414
+msgid "You have entered an invalid option number."
+msgstr "÷Ù ××ÅÌÉ ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÏÐÃÉÉ."
+
+#: LYMessages.c:415
+msgid "** Bad HTML!! Use -trace to diagnose. **"
+msgstr "** ðÌÏÈÏÊ HTML!! äÌÑ ÄÉÁÇÎÏÓÔÉËÉ ÉÓÐÏÌØÚÕÊÔÅ -trace. **"
+
+#: LYMessages.c:416
+msgid "Give name of file to save in"
+msgstr "úÁÄÁÊÔÅ ÉÍÑ ÆÁÊÌÁ ÄÌÑ ÚÁÐÉÓÉ"
+
+#: LYMessages.c:417
+msgid "Can't save data to file -- please run WWW locally"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÚÁÐÉÓÁÔØ ÄÁÎÎÙÅ × ÆÁÊÌ -- ÐÏÖÁÌÕÊÓÔÁ, ÚÁÐÕÓÔÉÔÅ WWW ÌÏËÁÌØÎÏ"
+
+#: LYMessages.c:418
+msgid "Can't open temporary file!"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ!"
+
+#: LYMessages.c:419
+msgid "Can't open output file! Cancelling!"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ! ïÔÍÅÎÁ!"
+
+#: LYMessages.c:420
+msgid "Execution is disabled."
+msgstr "÷ÙÐÏÌÎÅÎÉÅ ÏÔËÌÀÞÅÎÏ."
+
+#. #define EXECUTION_DISABLED_FOR_FILE
+#: LYMessages.c:422
+#, c-format
+msgid "Execution is not enabled for this file. See the Options menu (use %s)."
+msgstr "÷ÙÐÏÌÎÅÎÉÅ ÄÌÑ ÜÔÏÇÏ ÆÁÊÌÁ ÏÔËÌÀÞÅÎÏ. óÍ. ÍÅÎÀ ïÐÃÉÊ (ÉÓÐÏÌØÚÕÊÔÅ %s)."
+
+#. #define EXECUTION_NOT_COMPILED
+#: LYMessages.c:424
+msgid "Execution capabilities are not compiled into this version."
+msgstr "÷ÏÚÍÏÖÎÏÓÔÉ ×ÙÐÏÌÎÅÎÉÑ ÎÅ ×ËÌÀÞÅÎÙ × ÜÔÕ ×ÅÒÓÉÀ."
+
+#: LYMessages.c:425
+msgid "This file cannot be displayed on this terminal."
+msgstr "üÔÏÔ ÆÁÊÌ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÏÔÏÂÒÁÖÅÎ ÎÁ ÄÁÎÎÏÍ ÔÅÒÍÉÎÁÌÅ."
+
+#. #define CANNOT_DISPLAY_FILE_D_OR_C
+#: LYMessages.c:427
+msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
+msgstr "üÔÏÔ ÆÁÊÌ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÏÔÏÂÒÁÖÅÎ ÎÁ ÄÁÎÎÏÍ ÔÅÒÍÉÎÁÌÅ: D)ÚÁÇÒÕÚÉÔØ ÉÌÉ C)ÏÔÍÅÎÉÔØ"
+
+#: LYMessages.c:428
+#, c-format
+msgid "%s D)ownload, or C)ancel"
+msgstr "%s D)ÓËÁÞÁÔØ ÉÌÉ C)ÏÔÍÅÎÉÔØ"
+
+#: LYMessages.c:429
+msgid "Cancelling file."
+msgstr "ïÔÍÅÎÁ ÆÁÊÌÁ."
+
+#: LYMessages.c:430
+msgid "Retrieving file. - PLEASE WAIT -"
+msgstr "ðÏÌÕÞÅÎÉÅ ÆÁÊÌÁ. - ðïöáìõêóôá, ðïäïöäéôå -"
+
+#: LYMessages.c:431
+msgid "Enter a filename: "
+msgstr "÷×ÅÄÉÔÅ ÉÍÑ ÆÁÊÌÁ: "
+
+#: LYMessages.c:432
+msgid "Edit the previous filename: "
+msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÐÒÅÄÙÄÕÝÅÇÏ ÉÍÅÎÉ ÆÁÊÌÁ: "
+
+#: LYMessages.c:433
+msgid "Edit a previous filename: "
+msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÐÒÅÄÙÄÕÝÅÇÏ ÉÍÅÎÉ ÆÁÊÌÁ: "
+
+#: LYMessages.c:434
+msgid "Enter a new filename: "
+msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÉÍÑ ÆÁÊÌÁ: "
+
+#: LYMessages.c:435
+msgid "File name may not begin with a dot."
+msgstr "éÍÑ ÆÁÊÌÁ ÎÅ ÍÏÖÅÔ ÎÁÞÉÎÁÔØÓÑ Ó ÔÏÞËÉ."
+
+#: LYMessages.c:437
+msgid "File exists. Create higher version?"
+msgstr "æÁÊÌ ÓÕÝÅÓÔ×ÕÅÔ. óÏÚÄÁÔØ ÅÝÅ ÏÄÎÕ ×ÅÒÓÉÀ?"
+
+#: LYMessages.c:439
+msgid "File exists. Overwrite?"
+msgstr "æÁÊÌ ÓÕÝÅÓÔ×ÕÅÔ. ðÅÒÅÚÁÐÉÓÁÔØ?"
+
+#: LYMessages.c:441
+msgid "Cannot write to file."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÚÁÐÉÓÁÔØ × ÆÁÊÌ."
+
+#: LYMessages.c:442
+msgid "ERROR! - download command is misconfigured."
+msgstr "ïûéâëá! - ËÏÍÁÎÄÁ ÓËÁÞÉ×ÁÎÉÑ ÎÅÐÒÁ×ÉÌØÎÏ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÎÁ."
+
+#: LYMessages.c:443
+msgid "Unable to download file."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÓËÁÞÁÔØ ÆÁÊÌ."
+
+#: LYMessages.c:444
+msgid "Reading directory..."
+msgstr "þÔÅÎÉÅ ËÁÔÁÌÏÇÁ..."
+
+#: LYMessages.c:445
+msgid "Building directory listing..."
+msgstr "ðÏÓÔÒÏÅÎÉÅ ÓÐÉÓËÁ ËÁÔÁÌÏÇÁ..."
+
+#: LYMessages.c:446
+msgid "Saving..."
+msgstr "óÏÈÒÁÎÅÎÉÅ..."
+
+#: LYMessages.c:447
+#, c-format
+msgid "Could not edit file '%s'."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔÒÅÄÁËÔÉÒÏ×ÁÔØ ÆÁÊÌ '%s'."
+
+#: LYMessages.c:448
+msgid "Unable to access document!"
+msgstr "ïÛÉÂËÁ ÄÏÓÔÕÐÁ Ë ÄÏËÕÍÅÎÔÕ!"
+
+#: LYMessages.c:449
+msgid "Could not access file."
+msgstr "ïÛÉÂËÁ ÄÏÓÔÕÐÁ Ë ÆÁÊÌÕ."
+
+#: LYMessages.c:450
+msgid "Could not access directory."
+msgstr "ïÛÉÂËÁ ÄÏÓÔÕÐÁ Ë ËÁÔÁÌÏÇÕ."
+
+#: LYMessages.c:451
+msgid "Could not load data."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÚÁÇÒÕÚÉÔØ ÄÁÎÎÙÅ."
+
+#. #define CANNOT_EDIT_REMOTE_FILES
+#: LYMessages.c:453
+msgid "Lynx cannot currently (e)dit remote WWW files."
+msgstr "÷ ÎÁÓÔÏÑÝÅÅ ×ÒÅÍÑ Lynx ÎÅ ÍÏÖÅÔ e)ÒÅÄÁËÔÉÒÏ×ÁÔØ ÕÄÁÌÅÎÎÙÅ WWW ÆÁÊÌÙ."
+
+#. #define CANNOT_EDIT_FIELD
+#: LYMessages.c:455
+msgid "This field cannot be (e)dited with an external editor."
+msgstr "üÔÏ ÐÏÌÅ ÎÅ ÍÏÖÅÔ ÂÙÔØ e)ÏÔÒÅÄÁËÔÉÒÏ×ÁÎÏ Ó ÐÏÍÏÝØÀ ×ÎÅÛÎÅÇÏ ÒÅÄÁËÔÏÒÁ."
+
+#: LYMessages.c:456
+msgid "Bad rule"
+msgstr "ðÌÏÈÏÅ ÐÒÁ×ÉÌÏ"
+
+#: LYMessages.c:457
+msgid "Insufficient operands:"
+msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÏÐÅÒÁÎÄÏ×:"
+
+#: LYMessages.c:458
+msgid "You are not authorized to edit this file."
+msgstr "õ ×ÁÓ ÎÅÔ ÐÏÌÎÏÍÏÞÉÊ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÜÔÏÇÏ ÆÁÊÌÁ."
+
+#: LYMessages.c:459
+msgid "Title: "
+msgstr "úÁÇÏÌÏ×ÏË: "
+
+#: LYMessages.c:460
+msgid "Subject: "
+msgstr "ôÅÍÁ: "
+
+#: LYMessages.c:461
+msgid "Username: "
+msgstr "éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ: "
+
+#: LYMessages.c:462
+msgid "Password: "
+msgstr "ðÁÒÏÌØ: "
+
+#: LYMessages.c:463
+msgid "lynx: Username and Password required!!!"
+msgstr "lynx: ÔÒÅÂÕÀÔÓÑ éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ É ðÁÒÏÌØ!!!"
+
+#: LYMessages.c:464
+msgid "lynx: Password required!!!"
+msgstr "lynx: ÔÒÅÂÕÅÔÓÑ ðÁÒÏÌØ!!!"
+
+#: LYMessages.c:465
+msgid "Clear all authorization info for this session?"
+msgstr "ïÞÉÓÔÉÔØ ×ÓÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÐÏÌÎÏÍÏÞÉÑÈ ÄÌÑ ÜÔÏÇÏ ÓÅÁÎÓÁ?"
+
+#: LYMessages.c:466
+msgid "Authorization info cleared."
+msgstr "éÎÆÏÒÍÁÃÉÑ Ï ÐÏÌÎÏÍÏÞÉÑÈ ÏÞÉÝÅÎÁ."
+
+#: LYMessages.c:467
+msgid "Authorization failed. Retry?"
+msgstr "îÅÕÄÁÞÎÁÑ ÐÒÏ×ÅÒËÁ ÐÏÌÎÏÍÏÞÉÊ. ðÏ×ÔÏÒÉÔØ?"
+
+#: LYMessages.c:468
+msgid "cgi support has been disabled."
+msgstr "ÐÏÄÄÅÒÖËÁ cgi ÂÙÌÁ ÏÔËÌÀÞÅÎÁ."
+
+#. #define CGI_NOT_COMPILED
+#: LYMessages.c:470
+msgid "Lynxcgi capabilities are not compiled into this version."
+msgstr "÷ÏÚÍÏÖÎÏÓÔÉ lynxcgi ÎÅ ÓËÏÍÐÉÌÉÒÏ×ÁÎÙ × ÜÔÏÊ ×ÅÒÓÉÉ."
+
+#: LYMessages.c:471
+#, c-format
+msgid "Sorry, no known way of converting %s to %s."
+msgstr "éÚ×ÉÎÉÔÅ, ÎÅÔ ÉÚ×ÅÓÔÎÏÇÏ ÓÐÏÓÏÂÁ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ %s × %s."
+
+#: LYMessages.c:472
+msgid "Unable to set up connection."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÐÏÄÇÏÔÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ."
+
+#: LYMessages.c:473
+msgid "Unable to make connection"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÕÓÔÁÎÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ"
+
+#. #define MALFORMED_EXEC_REQUEST
+#: LYMessages.c:475
+msgid "Executable link rejected due to malformed request."
+msgstr "÷ÙÐÏÌÎÑÅÍÁÑ ÓÓÙÌËÁ ÏÔ×ÅÒÇÎÕÔÁ ÉÚ-ÚÁ ÎÅÐÒÁ×ÉÌØÎÏ ÓÆÏÒÍÉÒÏ×ÁÎÎÏÇÏ ÚÁÐÒÏÓÁ."
+
+#. #define BADCHAR_IN_EXEC_LINK
+#: LYMessages.c:477
+#, c-format
+msgid "Executable link rejected due to `%c' character."
+msgstr "÷ÙÐÏÌÎÑÅÍÁÑ ÓÓÙÌËÁ ÏÔ×ÅÒÇÎÕÔÁ ÉÚ-ÚÁ ÓÉÍ×ÏÌÁ `%c'."
+
+#. #define RELPATH_IN_EXEC_LINK
+#: LYMessages.c:479
+msgid "Executable link rejected due to relative path string ('../')."
+msgstr "÷ÙÐÏÌÎÑÅÍÁÑ ÓÓÙÌËÁ ÏÔ×ÅÒÇÎÕÔÁ ÉÚ-ÚÁ ÓÔÒÏËÉ ÏÔÎÏÓÉÔÅÌØÎÏÇÏ ÐÕÔÉ ('../')."
+
+#. #define BADLOCPATH_IN_EXEC_LINK
+#: LYMessages.c:481
+msgid "Executable link rejected due to location or path."
+msgstr "÷ÙÐÏÌÎÑÅÍÁÑ ÓÓÙÌËÁ ÏÔ×ÅÒÇÎÕÔÁ ÉÚ-ÚÁ ÁÄÒÅÓÁ ÉÌÉ ÐÕÔÉ."
+
+#: LYMessages.c:482
+msgid "Mail access is disabled!"
+msgstr "äÏÓÔÕÐ Ë ÐÏÞÔÅ ÏÔËÌÀÞÅÎ!"
+
+#. #define ACCESS_ONLY_LOCALHOST
+#: LYMessages.c:484
+msgid "Only files and servers on the local host can be accessed."
+msgstr "äÏÓÔÕÐÎÙ ÔÏÌØËÏ ÆÁÊÌÙ É ÓÅÒ×ÅÒÙ ÎÁ ÌÏËÁÌØÎÏÍ ËÏÍÐØÀÔÅÒÅ."
+
+#: LYMessages.c:485
+msgid "Telnet access is disabled!"
+msgstr "äÏÓÔÕÐ Ë telnet ÚÁÐÒÅÝÅÎ!"
+
+#. #define TELNET_PORT_SPECS_DISABLED
+#: LYMessages.c:487
+msgid "Telnet port specifications are disabled."
+msgstr "óÐÅÃÉÆÉËÁÃÉÉ ÐÏÒÔÁ ÄÌÑ telnet ÚÁÐÒÅÝÅÎÙ."
+
+#: LYMessages.c:488
+msgid "USENET news access is disabled!"
+msgstr "äÏÓÔÕÐ Ë ÎÏ×ÏÓÔÑÍ USENET ÚÁÐÒÅÝÅÎ!"
+
+#: LYMessages.c:489
+msgid "Rlogin access is disabled!"
+msgstr "äÏÓÔÕÐ Ë rlogin ÚÁÐÒÅÝÅÎ!"
+
+#: LYMessages.c:490
+msgid "Ftp access is disabled!"
+msgstr "äÏÓÔÕÐ Ë ftp ÚÁÐÒÅÝÅÎ!"
+
+#: LYMessages.c:491
+msgid "There are no references from this document."
+msgstr "éÚ ÜÔÏÇÏ ÄÏËÕÍÅÎÔÁ ÎÅÔ ÓÓÙÌÏË."
+
+#: LYMessages.c:492
+msgid "There are only hidden links from this document."
+msgstr "÷ ÜÔÏÍ ÄÏËÕÍÅÎÔÅ ÅÓÔØ ÔÏÌØËÏ ÓËÒÙÔÙÅ ÓÓÙÌËÉ."
+
+#: LYMessages.c:494
+msgid "Unable to open command file."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ËÏÍÁÎÄÎÙÊ ÆÁÊÌ."
+
+#: LYMessages.c:496
+msgid "News Post Cancelled!!!"
+msgstr "ðÏÓÙÌËÁ ÎÏ×ÏÓÔÅÊ ÐÒÅÒ×ÁÎÁ!!!"
+
+#. #define SPAWNING_EDITOR_FOR_NEWS
+#: LYMessages.c:498
+msgid "Spawning your selected editor to edit news message"
+msgstr "úÁÐÕÓË ×ÙÂÒÁÎÎÏÇÏ ×ÁÍÉ ÒÅÄÁËÔÏÒÁ ÄÌÑ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÓÏÏÂÝÅÎÉÑ ÎÏ×ÏÓÔÅÊ"
+
+#: LYMessages.c:499
+msgid "Post this message?"
+msgstr "ðÏÓÌÁÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ?"
+
+#: LYMessages.c:500
+#, c-format
+msgid "Append '%s'?"
+msgstr "äÏÂÁ×ÉÔØ '%s'?"
+
+#: LYMessages.c:501
+msgid "Posting to newsgroup(s)..."
+msgstr "ðÏÓÙÌËÁ × ÇÒÕÐÐÙ ÎÏ×ÏÓÔÅÊ..."
+
+#: LYMessages.c:503
+msgid "*** You have unread mail. ***"
+msgstr "*** õ ×ÁÓ ÅÓÔØ ÎÅÐÒÏÞÉÔÁÎÎÁÑ ÐÏÞÔÁ. ***"
+
+#: LYMessages.c:505
+msgid "*** You have mail. ***"
+msgstr "*** õ ×ÁÓ ÅÓÔØ ÐÏÞÔÁ. ***"
+
+#: LYMessages.c:507
+msgid "*** You have new mail. ***"
+msgstr "*** õ ×ÁÓ ÅÓÔØ ÎÏ×ÁÑ ÐÏÞÔÁ. ***"
+
+#: LYMessages.c:508
+msgid "File insert cancelled!!!"
+msgstr "÷ÓÔÁ×ËÁ ÆÁÊÌÁ ÏÔÍÅÎÅÎÁ!!!"
+
+#: LYMessages.c:509
+msgid "Not enough memory for file!"
+msgstr "îÅ È×ÁÔÁÅÔ ÐÁÍÑÔÉ ÄÌÑ ÆÁÊÌÁ!"
+
+#: LYMessages.c:510
+msgid "Can't open file for reading."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ ÄÌÑ ÞÔÅÎÉÑ!"
+
+#: LYMessages.c:511
+msgid "File does not exist."
+msgstr "æÁÊÌ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ."
+
+#: LYMessages.c:512
+msgid "File does not exist - reenter or cancel:"
+msgstr "æÁÊÌ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ - ××ÅÄÉÔÅ ÓÎÏ×Á ÉÌÉ ÏÔÍÅÎÉÔÅ:"
+
+#: LYMessages.c:513
+msgid "File is not readable."
+msgstr "æÁÊÌ ÎÅ ÄÏÓÔÕÐÅÎ ÎÁ ÞÔÅÎÉÅ."
+
+#: LYMessages.c:514
+msgid "File is not readable - reenter or cancel:"
+msgstr "æÁÊÌ ÎÅ ÄÏÓÔÕÐÅÎ ÎÁ ÞÔÅÎÉÅ - ××ÅÄÉÔÅ ÓÎÏ×Á ÉÌÉ ÏÔÍÅÎÉÔÅ:"
+
+#: LYMessages.c:515
+msgid "Nothing to insert - file is 0-length."
+msgstr "÷ÓÔÁ×ÌÑÔØ ÎÅÞÅÇÏ - ÆÁÊÌ ÎÕÌÅ×ÏÊ ÄÌÉÎÙ."
+
+#: LYMessages.c:516
+msgid "Save request cancelled!!!"
+msgstr "úÁÐÒÏÓ ÎÁ ÓÏÈÒÁÎÅÎÉÅ ÏÔÍÅÎÅÎ!!!"
+
+#: LYMessages.c:517
+msgid "Mail request cancelled!!!"
+msgstr "úÁÐÒÏÓ ÎÁ ÐÏÓÙÌËÕ ÐÏÞÔÙ ÏÔÍÅÎÅÎ!!!"
+
+#. #define CONFIRM_MAIL_SOURCE_PREPARSED
+#: LYMessages.c:519
+msgid "Viewing preparsed source. Are you sure you want to mail it?"
+msgstr "ðÒÏÓÍÏÔÒ ÒÁÚÏÂÒÁÎÎÏÇÏ ÉÓÈÏÄÎÏÇÏ ÔÅËÓÔÁ. ÷Ù Õ×ÅÒÅÎÙ, ÞÔÏ ÈÏÔÉÔÅ ÏÔÐÒÁ×ÉÔØ ÅÇÏ?"
+
+#: LYMessages.c:520
+msgid "Please wait..."
+msgstr "ðÏÖÁÌÕÊÓÔÁ, ÐÏÄÏÖÄÉÔÅ..."
+
+#: LYMessages.c:521
+msgid "Mailing file. Please wait..."
+msgstr "ðÏÓÙÌËÁ ÆÁÊÌÁ ÐÏ ÐÏÞÔÅ. ðÏÖÁÌÕÊÓÔÁ, ÐÏÄÏÖÄÉÔÅ..."
+
+#: LYMessages.c:522
+msgid "ERROR - Unable to mail file"
+msgstr "ïûéâëá - ÎÅ ÕÄÁÅÔÓÑ ÐÏÓÌÁÔØ ÆÁÊÌ ÐÏ ÐÏÞÔÅ"
+
+#. #define CONFIRM_LONG_SCREEN_PRINT
+#: LYMessages.c:524
+#, c-format
+msgid "File is %d screens long. Are you sure you want to print?"
+msgstr "æÁÊÌ ÚÁÎÉÍÁÅÔ %d ÜËÒÁÎÏ×. ÷Ù Õ×ÅÒÅÎÙ, ÞÔÏ ÈÏÔÉÔÅ ÅÇÏ ÎÁÐÅÞÁÔÁÔØ?"
+
+#: LYMessages.c:525
+msgid "Print request cancelled!!!"
+msgstr "úÁÐÒÏÓ ÎÁ ÐÅÞÁÔØ ÏÔÍÅÎÅÎ!!!"
+
+#: LYMessages.c:526
+msgid "Press <return> to begin: "
+msgstr "îÁÖÍÉÔÅ <××ÏÄ> ÄÌÑ ÎÁÞÁÌÁ: "
+
+#: LYMessages.c:527
+msgid "Press <return> to finish: "
+msgstr "îÁÖÍÉÔÅ <××ÏÄ> ÄÌÑ ÚÁ×ÅÒÛÅÎÉÑ: "
+
+#. #define CONFIRM_LONG_PAGE_PRINT
+#: LYMessages.c:529
+#, c-format
+msgid "File is %d pages long. Are you sure you want to print?"
+msgstr "æÁÊÌ ÚÁÎÉÍÁÅÔ %d ÓÔÒÁÎÉÃ. ÷Ù Õ×ÅÒÅÎÙ, ÞÔÏ ÈÏÔÉÔÅ ÎÁÐÅÞÁÔÁÔØ?"
+
+#. #define CHECK_PRINTER
+#: LYMessages.c:531
+msgid "Be sure your printer is on-line. Press <return> to start printing:"
+msgstr "õÂÅÄÉÔÅÓØ, ÞÔÏ ÐÒÉÎÔÅÒ × ÒÅÖÉÍÅ on-line. îÁÖÍÉÔÅ <××ÏÄ> ÄÌÑ ÎÁÞÁÌÁ ÐÅÞÁÔÉ:"
+
+#: LYMessages.c:532
+msgid "ERROR - Unable to allocate file space!!!"
+msgstr "ïûéâëá - ÎÅ ÕÄÁÅÔÓÑ ×ÙÄÅÌÉÔØ ÍÅÓÔÏ ÄÌÑ ÆÁÊÌÁ!!!"
+
+#: LYMessages.c:533
+msgid "Unable to open tempfile"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ"
+
+#: LYMessages.c:534
+msgid "Unable to open print options file"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ Ó ÏÐÃÉÑÍÉ ÐÅÞÁÔÉ"
+
+#: LYMessages.c:535
+msgid "Printing file. Please wait..."
+msgstr "ðÅÞÁÔØ ÆÁÊÌÁ. ðÏÖÁÌÕÊÓÔÁ, ÐÏÄÏÖÄÉÔÅ..."
+
+#: LYMessages.c:536
+msgid "Please enter a valid internet mail address: "
+msgstr "ðÏÖÁÌÕÊÓÔÁ, ××ÅÄÉÔÅ ÐÒÁ×ÉÌØÎÙÊ ÁÄÒÅÓ ÜÌÅËÔÒÏÎÎÏÊ ÐÏÞÔÙ: "
+
+#: LYMessages.c:537
+msgid "ERROR! - printer is misconfigured!"
+msgstr "ïûéâëá! - ÐÒÉÎÔÅÒ ÎÅÐÒÁ×ÉÌØÎÏ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÎ!"
+
+#: LYMessages.c:538
+msgid "Image map from POST response not available!"
+msgstr "ïÔÓÕÔÓÔ×ÕÅÔ ÎÁ×ÉÇÁÃÉÏÎÎÁÑ ËÁÒÔÁ ÏÔ ÏÔ×ÅÔÁ POST!"
+
+#: LYMessages.c:539
+msgid "Misdirected client-side image MAP request!"
+msgstr ""
+
+#: LYMessages.c:540
+msgid "Client-side image MAP is not accessible!"
+msgstr "ëÌÉÅÎÔÓËÁÑ ÎÁ×ÉÇÁÃÉÏÎÎÁÑ ËÁÒÔÁ ÎÅÄÏÓÔÕÐÎÁ!"
+
+#: LYMessages.c:541
+msgid "No client-side image MAPs are available!"
+msgstr "ëÌÉÅÎÔÓËÉÅ ÎÁ×ÉÇÁÃÉÏÎÎÙÅ ËÁÒÔÙ ÏÔÓÕÔÓÔ×ÕÀÔ!"
+
+#: LYMessages.c:542
+msgid "Client-side image MAP is not available!"
+msgstr "ëÌÉÅÎÔÓËÁÑ ÎÁ×ÉÇÁÃÉÏÎÎÁÑ ËÁÒÔÁ ÏÔÓÕÔÓÔ×ÕÅÔ!"
+
+#. #define OPTION_SCREEN_NEEDS_24
+#: LYMessages.c:545
+msgid "Screen height must be at least 24 lines for the Options menu!"
+msgstr "äÌÑ ÏÔÏÂÒÁÖÅÎÉÑ ÍÅÎÀ ïÐÃÉÊ, ×ÙÓÏÔÁ ÜËÒÁÎÁ ÄÏÌÖÎÁ ÂÙÔØ ÎÅ ÍÅÎÅÅ 24 ÓÔÒÏË!"
+
+#. #define OPTION_SCREEN_NEEDS_23
+#: LYMessages.c:547
+msgid "Screen height must be at least 23 lines for the Options menu!"
+msgstr "äÌÑ ÏÔÏÂÒÁÖÅÎÉÑ ÍÅÎÀ ïÐÃÉÊ, ×ÙÓÏÔÁ ÜËÒÁÎÁ ÄÏÌÖÎÁ ÂÙÔØ ÎÅ ÍÅÎÅÅ 23 ÓÔÒÏË!"
+
+#. #define OPTION_SCREEN_NEEDS_22
+#: LYMessages.c:549
+msgid "Screen height must be at least 22 lines for the Options menu!"
+msgstr "äÌÑ ÏÔÏÂÒÁÖÅÎÉÑ ÍÅÎÀ ïÐÃÉÊ, ×ÙÓÏÔÁ ÜËÒÁÎÁ ÄÏÌÖÎÁ ÂÙÔØ ÎÅ ÍÅÎÅÅ 22 ÓÔÒÏË!"
+
+#: LYMessages.c:551
+msgid "That key requires Advanced User mode."
+msgstr "üÔÏÔ ËÌÀÞ ÔÒÅÂÕÅÔ ÒÅÖÉÍÁ ÄÌÑ ðÒÏÄ×ÉÎÕÔÏÇÏ ðÏÌØÚÏ×ÁÔÅÌÑ."
+
+#: LYMessages.c:552
+#, c-format
+msgid "Content-type: %s"
+msgstr "ôÉÐ ÓÏÄÅÒÖÉÍÏÇÏ: %s"
+
+#: LYMessages.c:553
+msgid "Command: "
+msgstr "ëÏÍÁÎÄÁ: "
+
+#: LYMessages.c:554
+msgid "Unknown or ambiguous command"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÉÌÉ ÎÅÏÄÎÏÚÎÁÞÎÁÑ ËÏÍÁÎÄÁ"
+
+#: LYMessages.c:555
+msgid " Version "
+msgstr " ÷ÅÒÓÉÑ "
+
+#: LYMessages.c:556
+msgid " first"
+msgstr " ÓÎÁÞÁÌÁ"
+
+#: LYMessages.c:557
+msgid ", guessing..."
+msgstr ", ÕÇÁÄÙ×ÁÎÉÅ..."
+
+#: LYMessages.c:558
+msgid "Permissions for "
+msgstr "òÁÚÒÅÛÅÎÉÅ ÄÌÑ "
+
+#: LYMessages.c:559
+msgid "Select "
+msgstr "÷ÙÂÅÒÉÔÅ "
+
+#: LYMessages.c:560
+msgid "capital letter"
+msgstr "ÚÁÇÌÁ×ÎÁÑ ÂÕË×Á"
+
+#: LYMessages.c:561
+msgid " of option line,"
+msgstr " ÓÔÒÏËÉ ÏÐÃÉÊ,"
+
+#: LYMessages.c:562
+msgid " to save,"
+msgstr " ÄÌÑ ÚÁÐÉÓÉ,"
+
+#: LYMessages.c:563
+msgid " to "
+msgstr " ÄÌÑ "
+
+#: LYMessages.c:564
+msgid " or "
+msgstr " ÉÌÉ "
+
+#: LYMessages.c:565
+msgid " index"
+msgstr " ÉÎÄÅËÓ"
+
+#: LYMessages.c:566
+msgid " to return to Lynx."
+msgstr " ÄÌÑ ×ÏÚ×ÒÁÔÁ Ë Lynx."
+
+#: LYMessages.c:567
+msgid "Accept Changes"
+msgstr "ðÒÉÎÑÔØ ÉÚÍÅÎÅÎÉÑ"
+
+#: LYMessages.c:568
+msgid "Reset Changes"
+msgstr "ïÔÍÅÎÉÔØ éÚÍÅÎÅÎÉÑ"
+
+#: LYMessages.c:569
+msgid "Left Arrow cancels changes"
+msgstr "ìÅ×ÁÑ óÔÒÅÌËÁ ÏÔÍÅÎÑÅÔ ÉÚÍÅÎÅÎÉÑ"
+
+#: LYMessages.c:570
+msgid "Save options to disk"
+msgstr "óÏÈÒÁÎÉÔØ ÏÐÃÉÉ ÎÁ ÄÉÓË"
+
+#: LYMessages.c:571
+msgid "Hit RETURN to accept entered data."
+msgstr "îÁÖÍÉÔÅ ÷÷ïä ÄÌÑ ÐÒÉÎÑÔÉÑ ××ÅÄÅÎÎÙÈ ÄÁÎÎÙÈ."
+
+#. #define ACCEPT_DATA_OR_DEFAULT
+#: LYMessages.c:573
+msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
+msgstr "îÁÖÍÉÔÅ ÷÷ïä ÄÌÑ ÐÒÉÎÑÔÉÑ ××ÅÄÅÎÎÙÈ ÄÁÎÎÙÈ. õÄÁÌÉÔÅ ÄÌÑ ×ÏÚ×ÒÁÔÁ Ë ÐÒÅÄÙÄÕÝÉÍ."
+
+#: LYMessages.c:574
+msgid "Value accepted!"
+msgstr "úÎÁÞÅÎÉÅ ÐÒÉÎÑÔÏ!"
+
+#. #define VALUE_ACCEPTED_WARNING_X
+#: LYMessages.c:576
+msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
+msgstr "úÎÁÞÅÎÉÅ ÐÒÉÎÑÔÏ! -- ðòåäõðòåöäåîéå: Lynx ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÎ ÄÌÑ XWINDOWS!"
+
+#. #define VALUE_ACCEPTED_WARNING_NONX
+#: LYMessages.c:578
+msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
+msgstr "úÎÁÞÅÎÉÅ ÐÒÉÎÑÔÏ! -- ðòåäõðòåöäåîéå: Lynx îå ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÎ ÄÌÑ XWINDOWS!"
+
+#: LYMessages.c:579
+msgid "You are not allowed to change which editor to use!"
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÉÚÍÅÎÉÔØ ÒÅÄÁËÔÏÒ, ËÏÔÏÒÙÊ ÉÓÐÏÌØÚÏ×ÁÔØ!"
+
+#: LYMessages.c:580
+msgid "Failed to set DISPLAY variable!"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÕÓÔÁÎÏ×ÉÔØ ÐÅÒÅÍÅÎÎÕÀ DISPLAY!"
+
+#: LYMessages.c:581
+msgid "Failed to clear DISPLAY variable!"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÞÉÓÔÉÔØ ÐÅÒÅÍÅÎÎÕÀ DISPLAY!"
+
+#. #define BOOKMARK_CHANGE_DISALLOWED
+#: LYMessages.c:583
+msgid "You are not allowed to change the bookmark file!"
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÉÚÍÅÎÉÔØ ÆÁÊÌ ÚÁËÌÁÄÏË!"
+
+#: LYMessages.c:584
+msgid "Terminal does not support color"
+msgstr "ôÅÒÍÉÎÁÌ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ Ã×ÅÔ"
+
+#: LYMessages.c:585
+#, c-format
+msgid "Your '%s' terminal does not support color."
+msgstr "÷ÁÛ ÔÅÒÍÉÎÁÌ '%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ Ã×ÅÔ."
+
+#: LYMessages.c:586
+msgid "Access to dot files is disabled!"
+msgstr "äÏÓÔÕÐ Ë dot-ÆÁÊÌÁÍ ÏÔËÌÀÞÅÎ!"
+
+#. #define UA_NO_LYNX_WARNING
+#: LYMessages.c:588
+msgid "User-Agent string does not contain \"Lynx\" or \"L_y_n_x\""
+msgstr "óÔÒÏËÁ User-Agent ÎÅ ÓÏÄÅÒÖÉÔ \"Lynx\" ÉÌÉ \"L_y_n_x\""
+
+#. #define UA_PLEASE_USE_LYNX
+#: LYMessages.c:590
+msgid "Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional deception!"
+msgstr "éÓÐÏÌØÚÕÊÔÅ \"L_y_n_x\" ÉÌÉ \"Lynx\" × User-Agent, ÉÎÁÞÅ ÜÔÏ ×ÙÇÌÑÄÉÔ ËÁË ÐÒÅÄÎÁÍÅÒÅÎÎÙÊ ÏÂÍÁÎ!"
+
+#. #define UA_CHANGE_DISABLED
+#: LYMessages.c:592
+msgid "Changing of the User-Agent string is disabled!"
+msgstr "÷ÏÚÍÏÖÎÏÓÔØ ÉÚÍÅÎÅÎÉÑ ÓÔÒÏËÉ User-Agent ÏÔËÌÀÞÅÎÁ!"
+
+#. #define CHANGE_OF_SETTING_DISALLOWED
+#: LYMessages.c:594
+msgid "You are not allowed to change this setting."
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ÉÚÍÅÎÉÔØ ÜÔÕ ÎÁÓÔÒÏÊËÕ."
+
+#: LYMessages.c:595
+msgid "Saving Options..."
+msgstr "óÏÈÒÁÎÅÎÉÅ ÏÐÃÉÊ..."
+
+#: LYMessages.c:596
+msgid "Options saved!"
+msgstr "ïÐÃÉÉ ÓÏÈÒÁÎÅÎÙ!"
+
+#: LYMessages.c:597
+msgid "Unable to save Options!"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÓÏÈÒÁÎÉÔØ ïÐÃÉÉ!"
+
+#: LYMessages.c:598
+msgid " 'r' to return to Lynx "
+msgstr " 'r' ÄÌÑ ×ÏÚ×ÒÁÔÁ Ë Lynx "
+
+#: LYMessages.c:599
+msgid " '>' to save, or 'r' to return to Lynx "
+msgstr " '>' ÄÌÑ ÓÏÈÒÁÎÅÎÉÑ, ÉÌÉ 'r' ÄÌÑ ×ÏÚ×ÒÁÔÁ Ë Lynx "
+
+#. #define ANY_KEY_CHANGE_RET_ACCEPT
+#: LYMessages.c:601
+msgid "Hit any key to change value; RETURN to accept."
+msgstr "îÁÖÍÉÔÅ ÌÀÂÕÀ ËÌÁ×ÉÛÕ ÄÌÑ ÉÚÍÅÎÅÎÉÑ ÚÎÁÞÅÎÉÑ; ÷÷ïä ÞÔÏÂÙ ÐÒÉÎÑÔØ."
+
+#: LYMessages.c:602
+msgid "Error uncompressing temporary file!"
+msgstr "ïÛÉÂËÁ ÒÁÚÁÒÈÉ×ÁÃÉÉ ×ÒÅÍÅÎÎÏÇÏ ÆÁÊÌÁ!"
+
+#: LYMessages.c:603
+msgid "Unsupported URL scheme!"
+msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÁÑ ÓÈÅÍÁ URL!"
+
+#: LYMessages.c:604
+msgid "Unsupported data: URL! Use SHOWINFO, for now."
+msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÄÁÎÎÙÅ: URL! éÓÐÏÌØÚÕÊÔÅ ðïëáú éîæïòíáãéé, ÐÏËÁ ÞÔÏ."
+
+#: LYMessages.c:605
+msgid "Redirection limit of 10 URL's reached."
+msgstr "äÏÓÔÉÇÎÕÔ ÐÒÅÄÅÌ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÊ × 10 URL."
+
+#: LYMessages.c:606
+msgid "Illegal redirection URL received from server!"
+msgstr "ïÔ ÓÅÒ×ÅÒÁ ÐÏÌÕÞÅÎ ÎÅ×ÅÒÎÙÊ URL ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÑ!"
+
+#. #define SERVER_ASKED_FOR_REDIRECTION
+#: LYMessages.c:608
+#, c-format
+msgid "Server asked for %d redirection of POST content to"
+msgstr "óÅÒ×ÅÒ ÚÁÐÒÏÓÉÌ %d ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÊ ÓÏÄÅÒÖÉÍÏÇÏ POST ÐÏ ÁÄÒÅÓÕ"
+
+#: LYMessages.c:611
+msgid "P)roceed, use G)ET or C)ancel "
+msgstr "P)ðÒÉÓÔÕÐÉÔØ, ÉÓÐÏÌØÚÕÊÔÅ G)ET ÉÌÉ C)ïÔÍÅÎÁ "
+
+#: LYMessages.c:612
+msgid "P)roceed, or C)ancel "
+msgstr "P)ðÒÉÓÔÕÐÉÔØ, ÉÌÉ C)ïÔÍÅÎÉÔØ "
+
+#. #define ADVANCED_POST_GET_REDIRECT
+#: LYMessages.c:614
+msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
+msgstr "ðÅÒÅÎÁÐÒÁ×ÌÅÎÉÅ ÓÏÄÅÒÖÉÍÏÇÏ POST. P)ðÒÉÓÔÕÐÉÔØ, ÐÏËÁÚÁÔØ U)RL, G)ET ÉÌÉ C)ÏÔÍÅÎÁ"
+
+#. #define ADVANCED_POST_REDIRECT
+#: LYMessages.c:616
+msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
+msgstr "ðÅÒÅÎÁÐÒÁ×ÌÅÎÉÅ ÓÏÄÅÒÖÉÍÏÇÏ POST. P)ðÒÏÄÏÌÖÉÔØ, ÐÒÏÓÍÏÔÒÅÔØ U)RL ÉÌÉ C)ÏÔÍÅÎÉÔØ"
+
+#. #define CONFIRM_POST_RESUBMISSION
+#: LYMessages.c:618
+msgid "Document from Form with POST content. Resubmit?"
+msgstr "äÏËÕÍÅÎÔ ÉÚ æÏÒÍÙ Ó ÓÏÄÅÒÖÉÍÙÍ POST. ðÏÓÌÁÔØ ÚÁÎÏ×Ï?"
+
+#. #define CONFIRM_POST_RESUBMISSION_TO
+#: LYMessages.c:620
+#, c-format
+msgid "Resubmit POST content to %s ?"
+msgstr "ðÏÓÌÁÔØ ÚÁÎÏ×Ï ÓÏÄÅÒÖÉÍÏÅ POST ÎÁ %s ?"
+
+#. #define CONFIRM_POST_LIST_RELOAD
+#: LYMessages.c:622
+#, c-format
+msgid "List from document with POST data. Reload %s ?"
+msgstr "óÐÉÓÏË ÉÚ ÄÏËÕÍÅÎÔÁ Ó ÄÁÎÎÙÍÉ POST. ïÂÎÏ×ÉÔØ %s ?"
+
+#. #define CONFIRM_POST_DOC_HEAD
+#: LYMessages.c:624
+msgid "Document from POST action, HEAD may not be understood. Proceed?"
+msgstr "äÏËÕÍÅÎÔ ÉÚ ÄÅÊÓÔ×ÉÑ POST, HEAD ÍÏÖÅÔ ÂÙÔØ ÎÅ ÐÏÎÑÔ. ðÒÏÄÏÌÖÉÔØ?"
+
+#. #define CONFIRM_POST_LINK_HEAD
+#: LYMessages.c:626
+msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
+msgstr "äÅÊÓÔ×ÉÅ ÐÏÓÙÌËÉ ÆÏÒÍÙ - POST, HEAD ÍÏÖÅÔ ÂÙÔØ ÎÅ ÐÏÎÑÔ. ðÒÏÄÏÌÖÉÔØ?"
+
+#: LYMessages.c:627
+msgid "Proceed without a username and password?"
+msgstr "ðÒÏÄÏÌÖÉÔØ ÂÅÚ ÉÍÅÎÉ ÐÏÌØÚÏ×ÁÔÅÌÑ É ÐÁÒÏÌÑ?"
+
+#: LYMessages.c:628
+#, c-format
+msgid "Proceed (%s)?"
+msgstr "ðÒÏÄÏÌÖÉÔØ (%s)?"
+
+#: LYMessages.c:629
+msgid "Cannot POST to this host."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ POST ÎÁ ÜÔÕ ÍÁÛÉÎÕ."
+
+#: LYMessages.c:630
+msgid "POST not supported for this URL - ignoring POST data!"
+msgstr "POST ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ ÜÔÏÇÏ URL - ÄÁÎÎÙÅ POST ÉÇÎÏÒÉÒÕÀÔÓÑ!"
+
+#: LYMessages.c:631
+msgid "Discarding POST data..."
+msgstr "õÎÉÞÔÏÖÅÎÉÅ ÄÁÎÎÙÈ POST..."
+
+#: LYMessages.c:632
+msgid "Document will not be reloaded!"
+msgstr "äÏËÕÍÅÎÔ ÎÅ ÂÕÄÅÔ ÏÂÎÏ×ÌÅÎ!"
+
+#: LYMessages.c:633
+msgid "Location: "
+msgstr "áÄÒÅÓ: "
+
+#: LYMessages.c:634
+#, c-format
+msgid "'%s' not found!"
+msgstr "'%s' ÎÅ ÎÁÊÄÅÎÏ!"
+
+#: LYMessages.c:635
+msgid "Default Bookmark File"
+msgstr "æÁÊÌ ÚÁËÌÁÄÏË ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: LYMessages.c:636
+msgid "Screen too small! (8x35 min)"
+msgstr "üËÒÁÎ ÓÌÉÛËÏÍ ÍÁÌÅÎØËÉÊ! (8x35 ÍÉÎÉÍÕÍ)"
+
+#: LYMessages.c:637
+msgid "Select destination or ^G to Cancel: "
+msgstr "÷ÙÂÅÒÉÔÅ ÍÅÓÔÏ ÎÁÚÎÁÞÅÎÉÑ ÉÌÉ ^G ÄÌÑ ÏÔÍÅÎÙ: "
+
+#. #define MULTIBOOKMARKS_SELECT
+#: LYMessages.c:639
+msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
+msgstr "÷ÙÂÅÒÉÔÅ ÐÏÄÚÁËÌÁÄËÕ, '=' ÄÌÑ ÍÅÎÀ ÉÌÉ ^G ÄÌÑ ÏÔÍÅÎÙ: "
+
+#. #define MULTIBOOKMARKS_SELF
+#: LYMessages.c:641
+msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
+msgstr "÷ÏÓÐÒÏÉÚ×ÅÓÔÉ L)ÓÓÙÌËÕ × ÜÔÏÍ ÆÁÊÌÅ ÚÁËÌÁÄÏË ÉÌÉ C)ÏÔÍÅÎÉÔØ? (l,c): "
+
+#: LYMessages.c:642
+msgid "Multiple bookmark support is not available."
+msgstr "ðÏÄÄÅÒÖËÁ ÍÎÏÖÅÓÔ×ÅÎÎÙÈ ÚÁËÌÁÄÏË ÎÅ ÄÏÓÔÕÐÎÁ."
+
+#: LYMessages.c:643
+#, c-format
+msgid " Select Bookmark (screen %d of %d)"
+msgstr " ÷ÙÂÅÒÉÔÅ ÚÁËÌÁÄËÕ (ÜËÒÁÎ %d ÉÚ %d)"
+
+#: LYMessages.c:644
+msgid " Select Bookmark"
+msgstr " ÷ÙÂÅÒÉÔÅ ÚÁËÌÁÄËÕ"
+
+#. #define MULTIBOOKMARKS_EHEAD_MASK
+#: LYMessages.c:646
+#, c-format
+msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
+msgstr "òÅÄÁËÔÉÒÏ×ÁÎÉÅ ïðéóáîéñ É ðõôé ë æáêìõ ÚÁËÌÁÄÏË (%d ÉÚ 2)"
+
+#. #define MULTIBOOKMARKS_EHEAD
+#: LYMessages.c:648
+msgid " Editing Bookmark DESCRIPTION and FILEPATH"
+msgstr " òÅÄÁËÔÉÒÏ×ÁÎÉÅ ïðéóáîéñ É ðõôé_æáêìá ÚÁËÌÁÄÏË"
+
+#: LYMessages.c:649
+msgid "Letter: "
+msgstr "âÕË×Á: "
+
+#. #define USE_PATH_OFF_HOME
+#: LYMessages.c:652
+msgid "Use a filepath off your login directory in SHELL syntax!"
+msgstr ""
+
+#: LYMessages.c:654
+msgid "Use a filepath off your home directory!"
+msgstr ""
+
+#. #define MAXLINKS_REACHED
+#: LYMessages.c:657
+msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
+msgstr ""
+
+#. #define MAXHIST_REACHED
+#: LYMessages.c:659
+msgid "History List maximum reached! Document not pushed."
+msgstr "äÏÓÔÉÇÎÕÔ ÍÁËÓÉÍÕÍ óÐÉÓËÁ éÓÔÏÒÉÉ! äÏËÕÍÅÎÔ ÎÅ ÐÏÍÅÝÅÎ."
+
+#: LYMessages.c:660
+msgid "No previously visited links available!"
+msgstr "òÁÎÅÅ ÐÏÓÅÝÅÎÎÙÈ ÓÓÙÌÏË ÎÅÔ!"
+
+#: LYMessages.c:661
+msgid "Memory exhausted! Program aborted!"
+msgstr "ðÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ! ðÒÏÇÒÁÍÍÁ ÐÒÅÒ×ÁÎÁ!"
+
+#: LYMessages.c:662
+msgid "Memory exhausted! Aborting..."
+msgstr "ðÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ! ðÒÅÒÙ×ÁÎÉÅ..."
+
+#: LYMessages.c:663
+msgid "Not enough memory!"
+msgstr "îÅ È×ÁÔÁÅÔ ÐÁÍÑÔÉ!"
+
+#: LYMessages.c:664
+msgid "Directory/File Manager not available"
+msgstr "ëÁÔÁÌÏÇ/ÆÁÊÌ-ÍÅÎÅÄÖÅÒ ÎÅÄÏÓÔÕÐÅÎ"
+
+#: LYMessages.c:665
+msgid "HREF in BASE tag is not an absolute URL."
+msgstr "HREF × ÔÅÇÅ BASE ÎÅ Ñ×ÌÑÅÔÓÑ ÁÂÓÏÌÀÔÎÙÍ URL."
+
+#: LYMessages.c:666
+msgid "Location URL is not absolute."
+msgstr "áÄÒÅÓ URL ÎÅ ÁÂÓÏÌÀÔÎÙÊ."
+
+#: LYMessages.c:667
+msgid "Refresh URL is not absolute."
+msgstr "URL ÏÂÎÏ×ÌÅÎÉÑ ÎÅ ÁÂÓÏÌÀÔÎÙÊ."
+
+#. #define SENDING_MESSAGE_WITH_BODY_TO
+#: LYMessages.c:669
+msgid ""
+"You are sending a message with body to:\n"
+" "
+msgstr ""
+"÷Ù ÐÏÓÙÌÁÅÔÅ ÓÏÏÂÝÅÎÉÅ Ó ÔÅÌÏÍ ÐÏ ÁÄÒÅÓÕ:\n"
+" "
+
+#: LYMessages.c:670
+msgid ""
+"You are sending a comment to:\n"
+" "
+msgstr ""
+"÷Ù ÐÏÓÙÌÁÅÔÅ ËÏÍÍÅÎÔÁÒÉÊ ÐÏ ÁÄÒÅÓÕ:\n"
+" "
+
+#: LYMessages.c:671
+msgid ""
+"\n"
+" With copy to:\n"
+" "
+msgstr ""
+"\n"
+" ó ËÏÐÉÅÊ ÐÏ ÁÄÒÅÓÕ:\n"
+" "
+
+#: LYMessages.c:672
+msgid ""
+"\n"
+" With copies to:\n"
+" "
+msgstr ""
+"\n"
+" ó ËÏÐÉÑÍÉ ÐÏ ÁÄÒÅÓÕ:\n"
+" "
+
+#. #define CTRL_G_TO_CANCEL_SEND
+#: LYMessages.c:674
+msgid ""
+"\n"
+"\n"
+"Use Ctrl-G to cancel if you do not want to send a message\n"
+msgstr ""
+"\n"
+"\n"
+"éÓÐÏÌØÚÕÊÔÅ Ctrl-G ÄÌÑ ÏÔÍÅÎÙ, ÅÓÌÉ ×Ù ÎÅ ÈÏÔÉÔÅ ÐÏÓÙÌÁÔØ ÓÏÏÂÝÅÎÉÅ\n"
+
+#. #define ENTER_NAME_OR_BLANK
+#: LYMessages.c:676
+msgid ""
+"\n"
+" Please enter your name, or leave it blank to remain anonymous\n"
+msgstr ""
+"\n"
+" ðÏÖÁÌÕÊÓÔÁ, ××ÅÄÉÔÅ ×ÁÛÅ ÉÍÑ ÉÌÉ ÏÓÔÁרÔÅ ÅÇÏ ÐÕÓÔÙÍ, ÞÔÏÂÙ ÏÓÔÁÔØÓÑ ÁÎÏÎÉÍÎÙÍ\n"
+
+#. #define ENTER_MAIL_ADDRESS_OR_OTHER
+#: LYMessages.c:678
+msgid ""
+"\n"
+" Please enter a mail address or some other\n"
+msgstr ""
+"\n"
+" ðÏÖÁÌÕÊÓÔÁ, ××ÅÄÉÔÅ ÐÏÞÔÏ×ÙÊ ÁÄÒÅÓ ÉÌÉ ËÁËÕÀ-ÎÉÂÕÄØ ÄÒÕÇÕÀ\n"
+
+#. #define MEANS_TO_CONTACT_FOR_RESPONSE
+#: LYMessages.c:680
+msgid " means to contact you, if you desire a response.\n"
+msgstr " ÉÎÆÏÒÍÁÃÉÀ ÄÌÑ ËÏÎÔÁËÔÁ Ó ×ÁÍÉ, ÅÓÌÉ ×Ù ÖÅÌÁÅÔÅ ÐÏÌÕÞÉÔØ ÏÔ×ÅÔ.\n"
+
+#: LYMessages.c:681
+msgid ""
+"\n"
+" Please enter a subject line.\n"
+msgstr ""
+"\n"
+" ðÏÖÁÌÕÊÓÔÁ, ××ÅÄÉÔÅ ÓÔÒÏËÕ ÔÅÍÙ.\n"
+
+#. #define ENTER_ADDRESS_FOR_CC
+#: LYMessages.c:683
+msgid ""
+"\n"
+" Enter a mail address for a CC of your message.\n"
+msgstr ""
+"\n"
+" ÷×ÅÄÉÔÅ ÐÏÞÔÏ×ÙÊ ÁÄÒÅÓ ÄÌÑ ËÏÐÉÉ (CC) ×ÁÛÅÇÏ ÓÏÏÂÝÅÎÉÑ.\n"
+
+#: LYMessages.c:684
+msgid " (Leave blank if you don't want a copy.)\n"
+msgstr " (ïÓÔÁרÔÅ ÐÕÓÔÙÍ, ÅÓÌÉ ×Ù ÎÅ ÈÏÔÉÔÅ ËÏÐÉÀ.)\n"
+
+#: LYMessages.c:685
+msgid ""
+"\n"
+" Please review the message body:\n"
+"\n"
+msgstr ""
+"\n"
+" ðÏÖÁÌÕÊÓÔÁ, ÐÒÏÓÍÏÔÒÉÔÅ ÔÅÌÏ ÓÏÏÂÝÅÎÉÑ:\n"
+"\n"
+
+#: LYMessages.c:686
+msgid ""
+"\n"
+"Press RETURN to continue: "
+msgstr ""
+"\n"
+"îÁÖÍÉÔÅ ÷÷ïä ÄÌÑ ÐÒÏÄÏÌÖÅÎÉÑ: "
+
+#: LYMessages.c:687
+msgid ""
+"\n"
+"Press RETURN to clean up: "
+msgstr ""
+"\n"
+"îÁÖÍÉÔÅ ÷÷ïä ÄÌÑ ÏÞÉÓÔËÉ: "
+
+#: LYMessages.c:688
+msgid " Use Control-U to erase the default.\n"
+msgstr " éÓÐÏÌØÚÕÊÔÅ Control-U ÄÌÑ ÕÎÉÞÔÏÖÅÎÉÑ ÚÎÁÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ.\n"
+
+#: LYMessages.c:689
+msgid ""
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+" ðÏÖÁÌÕÊÓÔÁ, ××ÅÄÉÔÅ ÎÉÖÅ ×ÁÛÅ ÓÏÏÂÝÅÎÉÅ."
+
+#. #define ENTER_PERIOD_WHEN_DONE_A
+#: LYMessages.c:691 src/LYNews.c:380
+msgid ""
+"\n"
+" When you are done, press enter and put a single period (.)"
+msgstr ""
+"\n"
+" ëÏÇÄÁ ×ÓÅ ÇÏÔÏ×Ï, ÎÁÖÍÉÔÅ <××ÏÄ> É ÐÏÓÔÁרÔÅ ÅÄÉÎÓÔ×ÅÎÎÕÀ ÔÏÞËÕ (.)"
+
+#. #define ENTER_PERIOD_WHEN_DONE_B
+#: LYMessages.c:693 src/LYNews.c:381
+msgid ""
+"\n"
+" on a line and press enter again."
+msgstr ""
+"\n"
+" × ÓÔÒÏËÅ É ÓÎÏ×Á ÎÁÖÍÉÔÅ <××ÏÄ>."
+
+#. Cookies messages
+#. #define ADVANCED_COOKIE_CONFIRMATION
+#: LYMessages.c:697
+#, c-format
+msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
+msgstr "%s cookie: %.*s=%.*s ðÒÉÎÑÔØ? (Y/N/A)÷ÓÅÇÄÁ/V)îÉËÏÇÄÁ)"
+
+#. #define INVALID_COOKIE_DOMAIN_CONFIRMATION
+#: LYMessages.c:699
+#, c-format
+msgid "Accept invalid cookie domain=%s for '%s'?"
+msgstr "ðÒÉÎÑÔØ ÎÅÐÒÁ×ÉÌØÎÙÊ ÄÏÍÅÎ=%s ÄÌÑ cookie '%s'?"
+
+#. #define INVALID_COOKIE_PATH_CONFIRMATION
+#: LYMessages.c:701
+#, c-format
+msgid "Accept invalid cookie path=%s as a prefix of '%s'?"
+msgstr "ðÒÉÎÑÔØ ÎÅÐÒÁ×ÉÌØÎÙÊ ÐÕÔØ=%s ËÁË ÐÒÅÆÉËÓ ÄÌÑ cookie '%s'?"
+
+#: LYMessages.c:702
+msgid "Allowing this cookie."
+msgstr "ðÒÉÎÑÔÉÅ ÜÔÏÇÏ cookie."
+
+#: LYMessages.c:703
+msgid "Rejecting this cookie."
+msgstr "ïÔËÌÏÎÅÎÉÅ ÜÔÏÇÏ cookie."
+
+#: LYMessages.c:704
+msgid "The Cookie Jar is empty."
+msgstr "óÐÉÓÏË cookie ÐÕÓÔ."
+
+#. #define ACTIVATE_TO_GOBBLE
+#: LYMessages.c:706
+msgid "Activate links to gobble up cookies or entire domains,"
+msgstr "áËÔÉ×ÉÚÉÒÏ×ÁÔØ ÓÓÙÌËÉ ÄÌÑ ÕÎÉÞÔÏÖÅÎÉÑ cookie ÉÌÉ ÃÅÌÙÈ ÄÏÍÅÎÏ×,"
+
+#: LYMessages.c:707
+msgid "or to change a domain's 'allow' setting."
+msgstr "ÉÌÉ ÄÌÑ ÉÚÍÅÎÅÎÉÑ ÕÓÔÁÎÏ×ËÉ 'allow' ÄÏÍÅÎÁ."
+
+#: LYMessages.c:708
+msgid "(Cookies never allowed.)"
+msgstr "(Cookie ÎÉËÏÇÄÁ ÎÅ ÒÁÚÒÅÛÅÎÙ.)"
+
+#: LYMessages.c:709
+msgid "(Cookies always allowed.)"
+msgstr "(Cookie ×ÓÅÇÄÁ ÒÁÚÒÅÛÅÎÙ.)"
+
+#: LYMessages.c:710
+msgid "(Cookies allowed via prompt.)"
+msgstr "(Cookie ÒÁÚÒÅÛÁÀÔÓÑ ÞÅÒÅÚ ÐÏÄÔ×ÅÒÖÄÅÎÉÅ.)"
+
+#: LYMessages.c:711
+msgid "(Persistent Cookies.)"
+msgstr "(ðÏÓÔÏÑÎÎÙÅ cookie.)"
+
+#: LYMessages.c:712
+msgid "(No title.)"
+msgstr "(îÅÔ ÚÁÇÏÌÏ×ËÁ.)"
+
+#: LYMessages.c:713
+msgid "(No name.)"
+msgstr "(îÅÔ ÉÍÅÎÉ.)"
+
+#: LYMessages.c:714
+msgid "(No value.)"
+msgstr "(îÅÔ ÚÎÁÞÅÎÉÑ.)"
+
+#: LYMessages.c:715
+msgid "None"
+msgstr "îÅÔ"
+
+#: LYMessages.c:716
+msgid "(End of session.)"
+msgstr "(ëÏÎÅà ÓÅÁÎÓÁ.)"
+
+#: LYMessages.c:717
+msgid "Delete this cookie?"
+msgstr "õÄÁÌÉÔØ ÜÔÏÔ cookie?"
+
+#: LYMessages.c:718
+msgid "The cookie has been eaten!"
+msgstr "Cookie ÕÄÁÌÅÎ!"
+
+#: LYMessages.c:719
+msgid "Delete this empty domain?"
+msgstr "õÄÁÌÉÔØ ÜÔÏÔ ÐÕÓÔÏÊ ÄÏÍÅÎ?"
+
+#: LYMessages.c:720
+msgid "The domain has been eaten!"
+msgstr "äÏÍÅÎ ÕÄÁÌÅÎ!"
+
+#. #define DELETE_COOKIES_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:722
+msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D)õÄÁÌÉÔØ cookie ÄÏÍÅÎÁ, ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÅÛÅÎÉÅ × A)lways/P)rompt/neVer, C)ancel?"
+
+#. #define DELETE_DOMAIN_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:724
+msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D)õÄÁÌÉÔØ ÄÏÍÅÎ, ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÅÛÅÎÉÅ × A)lways/P)rompt/neV)er, ÉÌÉ C)ancel? "
+
+#: LYMessages.c:725
+msgid "All cookies in the domain have been eaten!"
+msgstr "÷ÓÅ cookie × ÄÏÍÅÎÅ ÂÙÌÉ ÕÎÉÞÔÏÖÅÎÙ!"
+
+#: LYMessages.c:726
+#, c-format
+msgid "'A'lways allowing from domain '%s'."
+msgstr "A)÷ÓÅÇÄÁ ÐÒÉÎÉÍÁÔØ ÉÚ ÄÏÍÅÎÁ '%s'."
+
+#: LYMessages.c:727
+#, c-format
+msgid "ne'V'er allowing from domain '%s'."
+msgstr "V)îÉËÏÇÄÁ ÎÅ ÐÒÉÎÉÍÁÔØ ÉÚ ÄÏÍÅÎÁ '%s'."
+
+#: LYMessages.c:728
+#, c-format
+msgid "'P'rompting to allow from domain '%s'."
+msgstr "P)óÐÒÁÛÉ×ÁÔØ Ï ÐÒÉÅÍÅ ÉÚ ÄÏÍÅÎÁ '%s'."
+
+#: LYMessages.c:729
+msgid "Delete all cookies in this domain?"
+msgstr "õÄÁÌÉÔØ ×ÓÅ cookie × ÜÔÏÍ ÄÏÍÅÎÅ?"
+
+#: LYMessages.c:730
+msgid "All of the cookies in the jar have been eaten!"
+msgstr "÷ÓÅ cookie ÉÚ ÓÐÉÓËÁ ÂÙÌÉ ÕÎÉÞÔÏÖÅÎÙ!"
+
+#: LYMessages.c:732
+msgid "Port 19 not permitted in URLs."
+msgstr "19 ÐÏÒÔ × URL ÎÅ ÄÏÐÕÓËÁÅÔÓÑ."
+
+#: LYMessages.c:733
+msgid "Port 25 not permitted in URLs."
+msgstr "25 ÐÏÒÔ × URL ÎÅ ÄÏÐÕÓËÁÅÔÓÑ."
+
+#: LYMessages.c:734
+#, c-format
+msgid "Port %lu not permitted in URLs."
+msgstr "%lu ÐÏÒÔ × URL ÎÅ ÄÏÐÕÓËÁÅÔÓÑ."
+
+#: LYMessages.c:735
+msgid "URL has a bad port field."
+msgstr "URL ÉÍÅÅÔ ÐÌÏÈÏÅ ÐÏÌÅ ÐÏÒÔÁ."
+
+#: LYMessages.c:736
+msgid "Maximum nesting of HTML elements exceeded."
+msgstr "ðÒÅ×ÙÛÅÎÏ ÍÁËÓÉÍÁÌØÎÏÅ ÞÉÓÌÏ ×ÌÏÖÅÎÎÙÈ ÜÌÅÍÅÎÔÏ× HTML."
+
+#: LYMessages.c:737
+msgid "Bad partial reference! Stripping lead dots."
+msgstr "ðÌÏÈÁÑ ÞÁÓÔÉÞÎÁÑ ÓÓÙÌËÁ! îÁÞÁÌØÎÙÅ ÔÏÞËÉ ÉÇÎÏÒÉÒÕÀÔÓÑ."
+
+#: LYMessages.c:738
+msgid "Trace Log open failed. Trace off!"
+msgstr "ïÛÉÂËÁ ÐÒÉ ÏÔËÒÙÔÉÉ ÖÕÒÎÁÌÁ ÔÒÁÓÓÉÒÏ×ËÉ. ôÒÁÓÓÉÒÏ×ËÁ ×ÙËÌÀÞÅÎÁ!"
+
+#: LYMessages.c:739
+msgid "Lynx Trace Log"
+msgstr "öÕÒÎÁÌ ÔÒÁÓÓÉÒÏ×ËÉ Lynx"
+
+#: LYMessages.c:740
+msgid "No trace log has been started for this session."
+msgstr "öÕÒÎÁÌ ÔÒÁÓÓÉÒÏ×ËÉ ÄÌÑ ÜÔÏÇÏ ÓÅÁÎÓÁ ÎÅ ×ÅÌÓÑ."
+
+#. #define MAX_TEMPCOUNT_REACHED
+#: LYMessages.c:742
+msgid "The maximum temporary file count has been reached!"
+msgstr "äÏÓÔÉÇÎÕÔÏ ÍÁËÓÉÍÁÌØÎÏÅ ËÏÌÉÞÅÓÔ×Ï ×ÒÅÍÅÎÎÙÈ ÆÁÊÌÏ×!"
+
+#. #define FORM_VALUE_TOO_LONG
+#: LYMessages.c:744
+msgid "Form field value exceeds buffer length! Trim the tail."
+msgstr "úÎÁÞÅÎÉÅ ÐÏÌÑ ÆÏÒÍÙ ÐÒÅ×ÙÛÁÅÔ ÄÌÉÎÕ ÂÕÆÅÒÁ. ïÂÒÅÖØÔÅ ËÏÎÅÃ."
+
+#. #define FORM_TAIL_COMBINED_WITH_HEAD
+#: LYMessages.c:746
+msgid "Modified tail combined with head of form field value."
+msgstr "íÏÄÉÆÉÃÉÒÏ×ÁÎÎÏÅ ÏËÏÎÞÁÎÉÅ ÓËÏÍÂÉÎÉÒÏ×ÁÎÏ Ó ÎÁÞÁÌÏÍ ÚÎÁÞÅÎÉÑ ÐÏÌÑ ÆÏÒÍÙ."
+
+#. HTFile.c
+#: LYMessages.c:749
+msgid "Directory"
+msgstr "ëÁÔÁÌÏÇ"
+
+#: LYMessages.c:750
+msgid "Directory browsing is not allowed."
+msgstr "ðÒÏÓÍÏÔÒ ËÁÔÁÌÏÇÏ× ÎÅ ÒÁÚÒÅÛÅÎ."
+
+#: LYMessages.c:751
+msgid "Selective access is not enabled for this directory"
+msgstr "éÚÂÉÒÁÔÅÌØÎÙÊ ÄÏÓÔÕÐ ÎÅ ×ËÌÀÞÅÎ ÄÌÑ ÜÔÏÇÏ ËÁÔÁÌÏÇÁ"
+
+#: LYMessages.c:752
+msgid "Multiformat: directory scan failed."
+msgstr "Multiformat: ÏÛÉÂËÁ ÐÒÉ ÓËÁÎÉÒÏ×ÁÎÉÉ ËÁÔÁÌÏÇÁ."
+
+#: LYMessages.c:753
+msgid "This directory is not readable."
+msgstr "üÔÏÔ ËÁÔÁÌÏÇ ÎÅ ÄÏÓÔÕÐÅÎ ÎÁ ÞÔÅÎÉÅ."
+
+#: LYMessages.c:754
+msgid "Can't access requested file."
+msgstr "îÅÔ ÄÏÓÔÕÐÁ Ë ÚÁÐÒÏÛÅÎÎÏÍÕ ÆÁÊÌÕ."
+
+#: LYMessages.c:755
+msgid "Could not find suitable representation for transmission."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÎÁÊÔÉ ÐÏÄÈÏÄÑÝÅÅ ÐÒÅÄÓÔÁ×ÌÅÎÉÅ ÄÌÑ ÐÅÒÅÄÁÞÉ."
+
+#: LYMessages.c:756
+msgid "Could not open file for decompression!"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ ÄÌÑ ÒÁÚÁÒÈÉ×ÁÃÉÉ!"
+
+#: LYMessages.c:757
+msgid "Files:"
+msgstr "æÁÊÌÙ:"
+
+#: LYMessages.c:758
+msgid "Subdirectories:"
+msgstr "ðÏÄËÁÔÁÌÏÇÉ:"
+
+#: LYMessages.c:759
+msgid " directory"
+msgstr " ËÁÔÁÌÏÇ"
+
+#: LYMessages.c:760
+msgid "Up to "
+msgstr "ðÅÒÅÊÔÉ Ë "
+
+#: LYMessages.c:761
+msgid "Current directory is "
+msgstr "ôÅËÕÝÉÊ ËÁÔÁÌÏÇ "
+
+#. HTGopher.c
+#: LYMessages.c:764
+msgid "No response from server!"
+msgstr "îÅÔ ÏÔ×ÅÔÁ ÏÔ ÓÅÒ×ÅÒÁ!"
+
+#: LYMessages.c:765
+msgid "CSO index"
+msgstr "éÎÄÅËÓ CSO"
+
+#: LYMessages.c:766
+msgid ""
+"\n"
+"This is a searchable index of a CSO database.\n"
+msgstr ""
+"\n"
+"üÔÏ ÐÏÉÓËÏ×ÙÊ ÉÎÄÅËÓ ÂÁÚÙ ÄÁÎÎÙÈ CSO.\n"
+
+#: LYMessages.c:767
+msgid "CSO Search Results"
+msgstr "òÅÚÕÌØÔÁÔÙ ÐÏÉÓËÁ CSO"
+
+#: LYMessages.c:768
+#, c-format
+msgid "Seek fail on %s\n"
+msgstr "ïÛÉÂËÁ ÐÏÚÉÃÉÏÎÉÒÏ×ÁÎÉÑ × %s\n"
+
+#: LYMessages.c:769
+msgid ""
+"\n"
+"Press the 's' key and enter search keywords.\n"
+msgstr ""
+"\n"
+"îÁÖÍÉÔÅ ËÌÁ×ÉÛÕ 's' É ××ÅÄÉÔÅ ËÌÀÞÅ×ÙÅ ÓÌÏ×Á ÄÌÑ ÐÏÉÓËÁ.\n"
+
+#: LYMessages.c:770
+msgid ""
+"\n"
+"This is a searchable Gopher index.\n"
+msgstr ""
+"\n"
+"üÔÏ ÐÏÉÓËÏ×ÙÊ ÉÎÄÅËÓ Gopher.\n"
+
+#: LYMessages.c:771
+msgid "Gopher index"
+msgstr "éÎÄÅËÓ Gopher"
+
+#: LYMessages.c:772
+msgid "Gopher Menu"
+msgstr "íÅÎÀ Gopher"
+
+#: LYMessages.c:773
+msgid " Search Results"
+msgstr " òÅÚÕÌØÔÁÔÙ ÐÏÉÓËÁ"
+
+#: LYMessages.c:774
+msgid "Sending CSO/PH request."
+msgstr "ðÏÓÙÌËÁ ÚÁÐÒÏÓÁ CSO/PH"
+
+#: LYMessages.c:775
+msgid "Sending Gopher request."
+msgstr "ðÏÓÙÌËÁ ÚÁÐÒÏÓÁ Gopher."
+
+#: LYMessages.c:776
+msgid "CSO/PH request sent; waiting for response."
+msgstr "úÁÐÒÏÓ CSO/PH ÐÏÓÌÁÎ; ÏÖÉÄÁÅÔÓÑ ÏÔ×ÅÔ."
+
+#: LYMessages.c:777
+msgid "Gopher request sent; waiting for response."
+msgstr "úÁÐÒÏÓ Gopher ÐÏÓÌÁÎ; ÏÖÉÄÁÅÔÓÑ ÏÔ×ÅÔ."
+
+#: LYMessages.c:778
+msgid ""
+"\n"
+"Please enter search keywords.\n"
+msgstr ""
+"\n"
+"ðÏÖÁÌÕÊÓÔÁ, ××ÅÄÉÔÅ ËÌÀÞÅ×ÙÅ ÓÌÏ×Á ÄÌÑ ÐÏÉÓËÁ.\n"
+
+#: LYMessages.c:779
+msgid ""
+"\n"
+"The keywords that you enter will allow you to search on a"
+msgstr ""
+"\n"
+"÷×ÅÄÅÎÎÙÅ ×ÁÍÉ ËÌÀÞÅ×ÙÅ ÓÌÏ×Á ÐÏÚ×ÏÌÑÔ ×ÁÍ ÉÓËÁÔØ ÐÏ"
+
+#: LYMessages.c:780
+msgid " person's name in the database.\n"
+msgstr " ÉÍÅÎÉ ÞÅÌÏ×ÅËÁ × ÂÁÚÅ ÄÁÎÎÙÈ.\n"
+
+#. HTNews.c
+#: LYMessages.c:783
+msgid "Connection closed ???"
+msgstr "óÏÅÄÉÎÅÎÉÅ ÚÁËÒÙÔÏ ???"
+
+#: LYMessages.c:784
+msgid "Cannot open temporary file for news POST."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ ÄÌÑ ÐÏÓÙÌËÉ ÎÏ×ÏÓÔÅÊ."
+
+#: LYMessages.c:785
+msgid "This client does not contain support for posting to news with SSL."
+msgstr "üÔÏÔ ËÌÉÅÎÔ ÎÅ ÉÍÅÅÔ ÐÏÄÄÅÒÖËÉ ÄÌÑ ÐÏÓÙÌËÉ ÎÏ×ÏÓÔÅÊ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ SSL."
+
+#. HTStyle.c
+#: LYMessages.c:788
+#, c-format
+msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
+msgstr "óÔÉÌØ %d `%s' SGML:%s. ûÒÉÆÔ %s %.1f ÔÏÞËÁ.\n"
+
+#: LYMessages.c:789
+#, c-format
+msgid "\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
+msgstr "\tïÔÓÔÕÐÙ: ÐÅÒ×ÙÊ=%.0f ÏÓÔÁÌØÎÙÅ=%.0f, ×ÙÓÏÔÁ=%.1f ÏÐÉÓÁÎÉÅ=%.1f\n"
+
+#: LYMessages.c:790
+#, c-format
+msgid "\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
+msgstr "\t÷ÙÒÁ×ÎÉ×ÁÎÉÅ=%d, %d tabs. (%.0f ÄÏ, %.0f ÐÏÓÌÅ)\n"
+
+#: LYMessages.c:791
+#, c-format
+msgid "\t\tTab kind=%d at %.0f\n"
+msgstr ""
+
+#. HTTP.c
+#: LYMessages.c:794
+msgid "Can't proceed without a username and password."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÐÒÏÄÏÌÖÉÔØ ÂÅÚ ÉÍÅÎÉ ÐÏÌØÚÏ×ÁÔÅÌÑ É ÐÁÒÏÌÑ."
+
+#: LYMessages.c:795
+msgid "Can't retry with authorization! Contact the server's WebMaster."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÐÏ×ÔÏÒÉÔØ ÐÒÏ×ÅÒËÕ ÐÏÌÎÏÍÏÞÉÊ! ó×ÑÖÉÔÅÓØ Ó ×ÅÂÍÁÓÔÅÒÏÍ ÓÅÒ×ÅÒÁ."
+
+#: LYMessages.c:796
+msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÐÏ×ÔÏÒÉÔØ ÐÒÏ×ÅÒËÕ ÐÏÌÎÏÍÏÞÉÊ ÞÅÒÅÚ ÐÒÏËÓÉ! ó×ÑÖÉÔÅÓØ Ó ×ÅÂÍÁÓÔÅÒÏÍ ÓÅÒ×ÅÒÁ."
+
+#: LYMessages.c:797
+msgid "Retrying with proxy authorization information."
+msgstr "ðÏ×ÔÏÒ Ó ÉÎÆÏÒÍÁÃÉÅÊ ÐÒÏ×ÅÒËÉ ÐÏÌÎÏÍÏÞÉÊ ÄÌÑ ÐÒÏËÓÉ."
+
+#. HTWAIS.c
+#: LYMessages.c:800
+msgid "HTWAIS: Return message too large."
+msgstr "HTWAIS: ÷ÏÚ×ÒÁÝÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ ÓÌÉÛËÏÍ ×ÅÌÉËÏ."
+
+#: LYMessages.c:801
+msgid "Enter WAIS query: "
+msgstr "÷×ÅÄÉÔÅ ÚÁÐÒÏÓ WAIS: "
+
+#. Miscellaneous status
+#: LYMessages.c:804
+msgid "Retrying as HTTP0 request."
+msgstr "ðÏ×ÔÏÒ ËÁË ÚÁÐÒÏÓ HTTP0."
+
+#: LYMessages.c:805
+#, c-format
+msgid "Transferred %d bytes"
+msgstr "ðÅÒÅÄÁÎÏ %d ÂÁÊÔ"
+
+#: LYMessages.c:806
+msgid "Data transfer complete"
+msgstr "ðÅÒÅÄÁÞÁ ÄÁÎÎÙÈ ÚÁ×ÅÒÛÅÎÁ"
+
+#: LYMessages.c:807
+#, c-format
+msgid "Error processing line %d of %s\n"
+msgstr "ïÛÉÂËÁ ÐÒÉ ÏÂÒÁÂÏÔËÅ ÓÔÒÏËÉ %d ÉÚ %s\n"
+
+#. Lynx internal page titles
+#: LYMessages.c:810
+msgid "Address List Page"
+msgstr "óÔÒÁÎÉÃÁ ÓÐÉÓËÁ ÁÄÒÅÓÏ×"
+
+#: LYMessages.c:811
+msgid "Bookmark file"
+msgstr "æÁÊÌ ÚÁËÌÁÄÏË"
+
+#: LYMessages.c:812
+msgid "Configuration Definitions"
+msgstr "ïÐÒÅÄÅÌÅÎÉÑ ËÏÎÆÉÇÕÒÁÃÉÉ"
+
+#: LYMessages.c:813
+msgid "Cookie Jar"
+msgstr "óÐÉÓÏË cookie"
+
+#: LYMessages.c:814
+msgid "Current Key Map"
+msgstr "ôÅËÕÝÅÅ ÏÔÏÂÒÁÖÅÎÉÅ ËÌÁ×ÉÛ"
+
+#: LYMessages.c:815
+msgid "File Management Options"
+msgstr "ïÐÃÉÉ ÒÁÂÏÔÙ Ó ÆÁÊÌÁÍÉ"
+
+#: LYMessages.c:816
+msgid "Download Options"
+msgstr "ïÐÃÉÉ ÓËÁÞÉ×ÁÎÉÑ"
+
+#: LYMessages.c:817
+msgid "History Page"
+msgstr "óÔÒÁÎÉÃÁ ÉÓÔÏÒÉÉ"
+
+#: LYMessages.c:818
+msgid "List Page"
+msgstr "óÔÒÁÎÉÃÁ ÓÐÉÓËÁ"
+
+#: LYMessages.c:819
+msgid "Lynx.cfg Information"
+msgstr "éÎÆÏÒÍÁÃÉÑ lynx.cfg"
+
+#: LYMessages.c:820
+msgid "Converted Mosaic Hotlist"
+msgstr "ðÒÅÏÂÒÁÚÏ×ÁÎÎÙÅ ÚÁËÌÁÄËÉ Mosaic"
+
+#: LYMessages.c:821
+msgid "Options Menu"
+msgstr "íÅÎÀ ïÐÃÉÊ"
+
+#: LYMessages.c:822
+msgid "File Permission Options"
+msgstr "ïÐÃÉÉ ÐÒÁ× ÄÏÓÔÕÐÁ Ë ÆÁÊÌÁÍ"
+
+#: LYMessages.c:823
+msgid "Printing Options"
+msgstr "ïÐÃÉÉ ÐÅÞÁÔÉ"
+
+#: LYMessages.c:824
+msgid "Information about the current document"
+msgstr "éÎÆÏÒÍÁÃÉÑ Ï ÔÅËÕÝÅÍ ÄÏËÕÍÅÎÔÅ"
+
+#: LYMessages.c:825
+msgid "Your recent statusline messages"
+msgstr "÷ÁÛÉ ÐÏÓÌÅÄÎÉÅ ÓÏÏÂÝÅÎÉÑ ÓÔÒÏËÉ ÓÔÁÔÕÓÁ"
+
+#: LYMessages.c:826
+msgid "Upload Options"
+msgstr "ïÐÃÉÉ ÚÁÇÒÕÚËÉ"
+
+#: LYMessages.c:827
+msgid "Visited Links Page"
+msgstr "óÔÒÁÎÉÃÁ ÐÏÓÅÝÅÎÎÙÈ ÓÓÙÌÏË"
+
+#. CONFIG_DEF_TITLE subtitles
+#: LYMessages.c:830
+msgid "See also"
+msgstr "óÍ. ÔÁËÖÅ"
+
+#: LYMessages.c:831
+msgid "your"
+msgstr "×ÁÛ"
+
+#: LYMessages.c:832
+msgid "for runtime options"
+msgstr "ÄÌÑ ÏÐÃÉÊ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ"
+
+#: LYMessages.c:833
+msgid "compile time options"
+msgstr "ÏÐÃÉÉ ÓÔÁÄÉÉ ËÏÍÐÉÌÑÃÉÉ"
+
+#: LYMessages.c:834
+msgid "latest release"
+msgstr "ÐÏÓÌÅÄÎÑÑ ÓÔÁÂÉÌØÎÁÑ ×ÅÒÓÉÑ"
+
+#: LYMessages.c:835
+msgid "pre-release version"
+msgstr "ÐÏÞÔÉ ÓÔÁÂÉÌØÎÁÑ ×ÅÒÓÉÑ"
+
+#: LYMessages.c:836
+msgid "development version"
+msgstr "ÎÅÓÔÁÂÉÌØÎÁÑ ×ÅÒÓÉÑ"
+
+#. #define AUTOCONF_CONFIG_CACHE
+#: LYMessages.c:838
+msgid ""
+"The following data were derived during the automatic configuration/build\n"
+"process of this copy of Lynx. When reporting a bug, please include a copy\n"
+"of this page."
+msgstr ""
+"óÌÅÄÕÀÝÉÅ ÄÁÎÎÙÅ ÂÙÌÉ ÐÏÌÕÞÅÎÙ × ÔÅÞÅÎÉÅ Á×ÔÏÍÁÔÉÞÅÓËÏÇÏ ÐÒÏÃÅÓÓÁ\n"
+"ËÏÎÆÉÇÕÒÁÃÉÉ/ËÏÍÐÉÌÑÃÉÉ ÜÔÏÊ ËÏÐÉÉ Lynx. ðÒÉ ÓÏÏÂÝÅÎÉÉ ÏÂ ÏÛÉÂËÅ, ÐÏÖÁÌÕÊÓÔÁ,\n"
+"×ËÌÀÞÉÔÅ ËÏÐÉÀ ÜÔÏÊ ÓÔÒÁÎÉÃÙ."
+
+#. #define AUTOCONF_LYNXCFG_H
+#: LYMessages.c:842
+msgid ""
+"The following data were used as automatically-configured compile-time\n"
+"definitions when this copy of Lynx was built."
+msgstr ""
+"óÌÅÄÕÀÝÉÅ ÄÁÎÎÙÅ ÂÙÌÉ ÉÓÐÏÌØÚÏ×ÁÎÙ ËÁË Á×ÔÏÍÁÔÉÞÅÓËÉ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÎÎÙÅ\n"
+"ÏÐÒÅÄÅÌÅÎÉÑ ÓÔÁÄÉÉ ËÏÍÐÉÌÑÃÉÉ ÐÒÉ ÓÂÏÒËÅ ÜÔÏÊ ËÏÐÉÉ Lynx."
+
+#. #define DIRED_NOVICELINE
+#: LYMessages.c:847
+msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
+msgstr " C)ÏÚÄÁÔØ D)úÁÇÒ E)òÅÄÁËÔ F)ðÏÌÎ ÍÅÎÀ M)éÚÍÅÎ R)õÄÁÌ T)ïÔÍ U)úÁÇÒ \n"
+
+#: LYMessages.c:848
+msgid "Failed to obtain status of current link!"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÐÏÌÕÞÉÔØ ÓÔÁÔÕÓ ÔÅËÕÝÅÊ ÓÓÙÌËÉ!"
+
+#. #define INVALID_PERMIT_URL
+#: LYMessages.c:851
+msgid "Special URL only valid from current File Permission menu!"
+msgstr "óÐÅÃÉÁÌØÎÙÊ URL ÄÅÊÓÔ×ÉÔÅÌÅÎ ÔÏÌØËÏ ÉÚ ÔÅËÕÝÅÇÏ ÍÅÎÀ ðÒÁ× äÏÓÔÕÐÁ Ë æÁÊÌÁÍ!"
+
+#: LYMessages.c:855
+msgid "External support is currently disabled."
+msgstr "÷ÎÅÛÎÑÑ ÐÏÄÄÅÒÖËÁ ÓÅÊÞÁÓ ÏÔËÌÀÞÅÎÁ."
+
+#. new with 2.8.4dev.21
+#: LYMessages.c:859
+#, fuzzy
+msgid "Changing working-directory is currently disabled."
+msgstr "úÁÐÕÓË ÐÒÏÃÅÓÓÏ× ÓÅÊÞÁÓ ÚÁÐÒÅÝÅÎ."
+
+#: LYMessages.c:860
+#, fuzzy
+msgid "Linewrap OFF!"
+msgstr "ôÒÁÓÓÉÒÏ×ËÁ ÷ùëìàþåîá!"
+
+#: LYMessages.c:861
+msgid "Linewrap ON!"
+msgstr ""
+
+#: LYMessages.c:862
+#, fuzzy
+msgid "Parsing nested-tables toggled OFF! Reloading..."
+msgstr "îÅÏÂÒÁÂÏÔÁÎÎÙÊ 8-ÂÉÔÎÙÊ ÉÌÉ CJK-ÒÅÖÉÍ ÷ùëìàþåî! ïÂÎÏ×ÌÅÎÉÅ..."
+
+#: LYMessages.c:863
+#, fuzzy
+msgid "Parsing nested-tables toggled ON! Reloading..."
+msgstr "îÅÏÂÒÁÂÏÔÁÎÎÙÊ 8-ÂÉÔÎÙÊ ÉÌÉ CJK-ÒÅÖÉÍ ÷ëìàþåî! ïÂÎÏ×ÌÅÎÉÅ..."
+
+#: LYMessages.c:864
+msgid "Shifting is disabled while line-wrap is in effect"
+msgstr ""
+
+#: LYMessages.c:865
+#, fuzzy
+msgid "Trace not supported"
+msgstr "ôÅÒÍÉÎÁÌ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ Ã×ÅÔ"
+
+#: WWW/Library/Implementation/HTAABrow.c:648
+#, c-format
+msgid "Username for '%s' at %s '%s%s':"
+msgstr "éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ '%s' ÎÁ %s '%s%s':"
+
+#: WWW/Library/Implementation/HTAABrow.c:914
+msgid "This client doesn't know how to compose proxy authorization information for scheme"
+msgstr "üÔÏÔ ËÌÉÅÎÔ ÎÅ ÚÎÁÅÔ, ËÁË ÓÏÓÔÁ×ÉÔØ ÉÎÆÏÒÍÁÃÉÀ ÐÒÏ×ÅÒËÉ ÐÒÁ× ÄÌÑ ÐÒÏËÓÉ ÄÌÑ ÓÈÅÍÙ"
+
+#: WWW/Library/Implementation/HTAABrow.c:989
+msgid "This client doesn't know how to compose authorization information for scheme"
+msgstr "üÔÏÔ ËÌÉÅÎÔ ÎÅ ÚÎÁÅÔ, ËÁË ÓÏÓÔÁ×ÉÔØ ÉÎÆÏÒÍÁÃÉÀ ÐÒÏ×ÅÒËÉ ÐÒÁ× ÄÌÑ ÓÈÅÍÙ"
+
+#: WWW/Library/Implementation/HTAABrow.c:1097
+#, c-format
+msgid "Invalid header '%s%s%s%s%s'"
+msgstr "îÅ×ÅÒÎÙÊ ÚÁÇÏÌÏ×ÏË '%s%s%s%s%s'"
+
+#: WWW/Library/Implementation/HTAABrow.c:1201
+msgid "Proxy authorization required -- retrying"
+msgstr "ôÒÅÂÕÅÔÓÑ ÐÒÏ×ÅÒËÁ ÐÒÁ× ÄÌÑ ÐÒÏËÓÉ -- ÐÏ×ÔÏÒ"
+
+#: WWW/Library/Implementation/HTAABrow.c:1260
+msgid "Access without authorization denied -- retrying"
+msgstr "äÏÓÔÕÐ ÂÅÚ ÐÒÏ×ÅÒËÉ ÐÒÁ× ÚÁÐÒÅÝÅÎ -- ÐÏ×ÔÏÒ"
+
+#: WWW/Library/Implementation/HTAccess.c:683
+msgid "Access forbidden by rule"
+msgstr "äÏÓÔÕÐ ÚÁÐÒÅÝÅÎ ÐÒÁ×ÉÌÏÍ"
+
+#: WWW/Library/Implementation/HTAccess.c:785
+msgid "Document with POST content not found in cache. Resubmit?"
+msgstr "äÏËÕÍÅÎÔ Ó ÓÏÄÅÒÖÉÍÙÍ POST ÎÅ ÎÁÊÄÅÎ × ËÜÛÅ. ðÏÓÌÁÔØ ÓÎÏ×Á?"
+
+#: WWW/Library/Implementation/HTAccess.c:1026 src/GridText.c:8039
+msgid "Loading incomplete."
+msgstr "úÁÇÒÕÚËÁ ÚÁ×ÅÒÛÅÎÁ ÎÅ ÐÏÌÎÏÓÔØÀ."
+
+#: WWW/Library/Implementation/HTAccess.c:1056
+msgid "**** HTAccess: socket or file number returned by obsolete load routine!\n"
+msgstr "**** HTAccess: ÎÏÍÅÒ ÓÏËÅÔÁ ÉÌÉ ÆÁÊÌÁ ×ÏÚ×ÒÁÝÅÎ ÕÓÔÁÒÅ×ÛÅÊ ÐÒÏÇÒÁÍÍÏÊ ÚÁÇÒÕÚËÉ!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1058
+msgid "**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"
+msgstr "**** HTAccess: ÷ÎÕÔÒÅÎÎÑÑ ÐÒÏÇÒÁÍÍÎÁÑ ÏÛÉÂËÁ. ðÏÖÁÌÕÊÓÔÁ, ÎÁÐÉÛÉÔÅ × lynx-dev@sig.net!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1059
+#, c-format
+msgid "**** HTAccess: Status returned was: %d\n"
+msgstr "**** HTAccess: ÷ÏÚ×ÒÁÝÅÎÎÙÊ ÓÔÁÔÕÓ: %d\n"
+
+#.
+#. * hack: if we fail in HTAccess.c
+#. * avoid duplicating URL, oh.
+#.
+#: WWW/Library/Implementation/HTAccess.c:1065 src/LYMainLoop.c:7834
+msgid "Can't Access"
+msgstr "îÅÔ ÄÏÓÔÕÐÁ"
+
+#: WWW/Library/Implementation/HTAccess.c:1073
+msgid "Unable to access document."
+msgstr "ïÛÉÂËÁ ÄÏÓÔÕÐÁ Ë ÄÏËÕÍÅÎÔÕ."
+
+#: WWW/Library/Implementation/HTFTP.c:756
+#, c-format
+msgid "Enter password for user %s@%s:"
+msgstr "÷×ÅÄÉÔÅ ÐÁÒÏÌØ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ %s@%s:"
+
+#: WWW/Library/Implementation/HTFTP.c:784
+msgid "Unable to connect to FTP host."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÕÓÔÁÎÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ Ó FTP-ÕÚÌÏÍ."
+
+#: WWW/Library/Implementation/HTFTP.c:1054
+msgid "close master socket"
+msgstr "ÚÁËÒÙÔØ ×ÅÄÕÝÉÊ ÓÏËÅÔ"
+
+#: WWW/Library/Implementation/HTFTP.c:1116
+msgid "socket for master socket"
+msgstr "ÓÏËÅÔ ÄÌÑ ×ÅÄÕÝÅÇÏ ÓÏËÅÔÁ"
+
+#.
+#. ** It's a symbolic link, does the user care about
+#. ** knowing if it is symbolic? I think so since
+#. ** it might be a directory.
+#.
+#: WWW/Library/Implementation/HTFTP.c:1630 WWW/Library/Implementation/HTFTP.c:2251
+msgid "Symbolic Link"
+msgstr "óÉÍ×ÏÌØÎÁÑ ÓÓÙÌËÁ"
+
+#: WWW/Library/Implementation/HTFTP.c:2612
+msgid "Receiving FTP directory."
+msgstr "ðÏÌÕÞÅÎÉÅ FTP-ËÁÔÁÌÏÇÁ."
+
+#: WWW/Library/Implementation/HTFTP.c:2755
+#, c-format
+msgid "Transferred %d bytes (%5d)"
+msgstr "ðÅÒÅÄÁÎÏ %d ÂÁÊÔ (%5d)"
+
+#: WWW/Library/Implementation/HTFTP.c:3090
+msgid "connect for data"
+msgstr "ÓÏÅÄÉÎÅÎÉÅ ÄÌÑ ÄÁÎÎÙÈ"
+
+#: WWW/Library/Implementation/HTFTP.c:3690
+msgid "Receiving FTP file."
+msgstr "ðÏÌÕÞÅÎÉÅ FTP-ÆÁÊÌÁ."
+
+#: WWW/Library/Implementation/HTFinger.c:275
+msgid "Could not set up finger connection."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÕÓÔÁÎÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ finger."
+
+#: WWW/Library/Implementation/HTFinger.c:320
+msgid "Could not load data (no sitename in finger URL)"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÚÁÇÒÕÚÉÔØ ÄÁÎÎÙÅ (ÎÅÔ ÉÍÅÎÉ ÓÁÊÔÁ × URL ÄÌÑ finger)"
+
+#: WWW/Library/Implementation/HTFinger.c:328
+msgid "Invalid port number - will only use port 79!"
+msgstr "îÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÐÏÒÔÁ - ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÎ ÔÏÌØËÏ ÐÏÒÔ 79!"
+
+#: WWW/Library/Implementation/HTFinger.c:396
+msgid "Could not access finger host."
+msgstr "îÅÔ ÄÏÓÔÕÐÁ Ë ÕÚÌÕ finger."
+
+#: WWW/Library/Implementation/HTFinger.c:407
+msgid "No response from finger server."
+msgstr "îÅÔ ÏÔ×ÅÔÁ ÏÔ ÓÅÒ×ÅÒÁ finger."
+
+#: WWW/Library/Implementation/HTNews.c:372
+#, c-format
+msgid "Username for news host '%s':"
+msgstr "éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ÕÚÌÁ ÎÏ×ÏÓÔÅÊ '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:425
+msgid "Change username?"
+msgstr "éÚÍÅÎÉÔØ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ?"
+
+#: WWW/Library/Implementation/HTNews.c:429
+msgid "Username:"
+msgstr "éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ:"
+
+#: WWW/Library/Implementation/HTNews.c:453
+#, c-format
+msgid "Password for news host '%s':"
+msgstr "ðÁÒÏÌØ ÄÌÑ ÕÚÌÁ ÎÏ×ÏÓÔÅÊ '%s':"
+
+#: WWW/Library/Implementation/HTNews.c:536
+msgid "Change password?"
+msgstr "éÚÍÅÎÉÔØ ÐÁÒÏÌØ?"
+
+#: WWW/Library/Implementation/HTNews.c:1691
+#, c-format
+msgid "No matches for: %s"
+msgstr "îÅÔ ÓÏ×ÐÁÄÅÎÉÊ ÄÌÑ: %s"
+
+#: WWW/Library/Implementation/HTNews.c:1744
+msgid ""
+"\n"
+"No articles in this group.\n"
+msgstr ""
+"\n"
+"÷ ÜÔÏÊ ÇÒÕÐÐÅ ÎÅÔ ÓÔÁÔÅÊ.\n"
+
+#: WWW/Library/Implementation/HTNews.c:1757
+msgid ""
+"\n"
+"No articles in this range.\n"
+msgstr ""
+"\n"
+"÷ ÜÔÏÍ ÄÉÁÐÁÚÏÎÅ ÎÅÔ ÓÔÁÔÅÊ.\n"
+
+#.
+#. ** Set window title.
+#.
+#: WWW/Library/Implementation/HTNews.c:1770
+#, c-format
+msgid "%s, Articles %d-%d"
+msgstr "%s, óÔÁÔØÉ %d-%d"
+
+#: WWW/Library/Implementation/HTNews.c:1792
+msgid "Earlier articles"
+msgstr "âÏÌÅÅ ÒÁÎÎÉÅ ÓÔÁÔØÉ"
+
+#: WWW/Library/Implementation/HTNews.c:1805
+#, c-format
+msgid ""
+"\n"
+"There are about %d articles currently available in %s, IDs as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"óÅÊÞÁÓ ÄÏÓÔÕÐÎÏ ÏËÏÌÏ %d ÓÔÁÔÅÊ × %s ÓÏ ÓÌÅÄÕÀÝÉÍÉ ÉÄÅÎÔÉÆÉËÁÔÏÒÁÍÉ:\n"
+"\n"
+
+#: WWW/Library/Implementation/HTNews.c:1865
+msgid "All available articles in "
+msgstr "÷ÓÅ ÄÏÓÔÕÐÎÙÅ ÓÔÁÔØÉ × "
+
+#: WWW/Library/Implementation/HTNews.c:2081
+msgid "Later articles"
+msgstr "âÏÌÅÅ ÐÏÚÄÎÉÅ ÓÔÁÔØÉ"
+
+#: WWW/Library/Implementation/HTNews.c:2105
+msgid "Post to "
+msgstr "ðÏÓÌÁÔØ × "
+
+#: WWW/Library/Implementation/HTNews.c:2323
+msgid "This client does not contain support for SNEWS URLs."
+msgstr "üÔÏÔ ËÌÉÅÎÔ ÎÅ ÓÏÄÅÒÖÉÔ ÐÏÄÄÅÒÖËÉ ÄÌÑ URL SNEWS."
+
+#: WWW/Library/Implementation/HTNews.c:2531
+msgid "No target for raw text!"
+msgstr "îÅÔ ÃÅÌÉ ÄÌÑ ÏÂÙÞÎÏÇÏ ÔÅËÓÔÁ!"
+
+#: WWW/Library/Implementation/HTNews.c:2561
+msgid "Connecting to NewsHost ..."
+msgstr "õÓÔÁÎÏ×ÌÅÎÉÅ ÓÏÅÄÉÎÅÎÉÑ Ó õÚÌÏÍîÏ×ÏÓÔÅÊ ..."
+
+#: WWW/Library/Implementation/HTNews.c:2612
+#, c-format
+msgid "Could not access %s."
+msgstr "îÅÔ ÄÏÓÔÕÐÁ Ë %s."
+
+#: WWW/Library/Implementation/HTNews.c:2712
+#, c-format
+msgid "Can't read news info. News host %.20s responded: %.200s"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÐÏÌÕÞÉÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÎÏ×ÏÓÔÑÈ. õÚÅÌ ÎÏ×ÏÓÔÅÊ %.20s ÏÔ×ÅÔÉÌ: %.200s"
+
+#: WWW/Library/Implementation/HTNews.c:2716
+#, c-format
+msgid "Can't read news info, empty response from host %s"
+msgstr "îÕ ÕÄÁÅÔÓÑ ÐÒÏÞÉÔÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÎÏ×ÏÓÔÑÈ, ÐÕÓÔÏÊ ÏÔ×ÅÔ ÏÔ ÕÚÌÁ %s"
+
+#.
+#. ** List available newsgroups. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2920
+msgid "Reading list of available newsgroups."
+msgstr "þÔÅÎÉÅ ÓÐÉÓËÁ ÄÏÓÔÕÐÎÙÈ ÇÒÕÐÐ ÎÏ×ÏÓÔÅÊ."
+
+#: WWW/Library/Implementation/HTNews.c:2942
+msgid "Reading list of articles in newsgroup."
+msgstr "þÔÅÎÉÅ ÓÐÉÓËÁ ÓÔÁÔÅÊ × ÇÒÕÐÐÅ ÎÏ×ÏÓÔÅÊ."
+
+#.
+#. ** Get an article from a news group. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2948
+msgid "Reading news article."
+msgstr "þÔÅÎÉÅ ÓÔÁÔØÉ ÎÏ×ÏÓÔÅÊ."
+
+#: WWW/Library/Implementation/HTNews.c:2978
+msgid "Sorry, could not load requested news."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÚÁÇÒÕÚÉÔØ ÚÁÐÒÏÛÅÎÎÙÅ ÎÏ×ÏÓÔÉ, ÉÚ×ÉÎÉÔÅ."
+
+#: WWW/Library/Implementation/HTTCP.c:1233
+msgid "Address has invalid port"
+msgstr "îÅ×ÅÒÎÙÊ ÐÏÒÔ Õ ÁÄÒÅÓÁ"
+
+#: WWW/Library/Implementation/HTTCP.c:1336
+msgid "Address length looks invalid"
+msgstr "äÌÉÎÁ ÁÄÒÅÓÁ ×ÙÇÌÑÄÉÔ ÎÅ×ÅÒÎÏÊ"
+
+#: WWW/Library/Implementation/HTTCP.c:1574 WWW/Library/Implementation/HTTCP.c:1592
+#, c-format
+msgid "Unable to locate remote host %s."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÂÎÁÒÕÖÉÔØ ÕÄÁÌÅÎÎÕÀ ÍÁÛÉÎÕ %s."
+
+#. Not HTProgress, so warning won't be overwritten
+#. * immediately; but not HTAlert, because typically
+#. * there will be other alerts from the callers. - kw
+#.
+#: WWW/Library/Implementation/HTTCP.c:1589 WWW/Library/Implementation/HTTelnet.c:103
+#, c-format
+msgid "Invalid hostname %s"
+msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÉÍÑ ÍÁÛÉÎÙ %s"
+
+#: WWW/Library/Implementation/HTTCP.c:1603
+#, c-format
+msgid "Making %s connection to %s"
+msgstr "õÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ %s ÓÏÅÄÉÎÅÎÉÅ Ó %s"
+
+#: WWW/Library/Implementation/HTTCP.c:1619
+#, c-format
+msgid "socket failed: family %d addr %s port %s."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1628
+msgid "socket failed."
+msgstr "ÏÛÉÂËÁ ÓÏËÅÔÁ."
+
+#: WWW/Library/Implementation/HTTCP.c:1648
+msgid "Could not make connection non-blocking."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1717
+msgid "Connection failed (too many retries)."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÕÓÔÁÎÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ (ÓÌÉÛËÏÍ ÍÎÏÇÏ ÐÏÐÙÔÏË)."
+
+#: WWW/Library/Implementation/HTTCP.c:1910
+msgid "Could not restore socket to blocking."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1976
+msgid "Socket read failed for 180,000 tries."
+msgstr "ïÛÉÂËÁ ÐÒÉ ÞÔÅÎÉÉ ÓÏËÅÔÁ × ÔÅÞÅÎÉÅ 180,000 ÐÏÐÙÔÏË."
+
+#: WWW/Library/Implementation/HTTP.c:466
+msgid "This client does not contain support for HTTPS URLs."
+msgstr "üÔÏÔ ËÌÉÅÎÔ ÎÅ ÓÏÄÅÒÖÉÔ ÐÏÄÄÅÒÖËÉ ÄÌÑ URL HTTPS."
+
+#: WWW/Library/Implementation/HTTP.c:491
+msgid "Unable to connect to remote host."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÕÓÔÁÎÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ Ó ÕÄÁÌÅÎÎÏÊ ÍÁÛÉÎÏÊ."
+
+#: WWW/Library/Implementation/HTTP.c:1005
+msgid "Sending HTTP request."
+msgstr "ðÏÓÙÌËÁ HTTP-ÚÁÐÒÏÓÁ."
+
+#: WWW/Library/Implementation/HTTP.c:1039
+msgid "Unexpected network write error; connection aborted."
+msgstr "îÅÏÖÉÄÁÎÎÁÑ ÏÛÉÂËÁ ÚÁÐÉÓÉ ÐÏ ÓÅÔÉ; ÓÏÅÄÉÎÅÎÉÅ ÐÒÅÒ×ÁÎÏ."
+
+#: WWW/Library/Implementation/HTTP.c:1045
+msgid "HTTP request sent; waiting for response."
+msgstr "HTTP-ÚÁÐÒÏÓ ÐÏÓÌÁÎ; ÏÖÉÄÁÅÔÓÑ ÏÔ×ÅÔ."
+
+#: WWW/Library/Implementation/HTTP.c:1109
+msgid "Unexpected network read error; connection aborted."
+msgstr "îÅÏÖÉÄÁÎÎÁÑ ÏÛÉÂËÁ ÞÔÅÎÉÑ ÐÏ ÓÅÔÉ; ÓÏÅÄÉÎÅÎÉÅ ÐÒÅÒ×ÁÎÏ."
+
+#.
+#. ** HTTP/1.1 Informational statuses.
+#. ** 100 Continue.
+#. ** 101 Switching Protocols.
+#. ** > 101 is unknown.
+#. ** We should never get these, and they have only
+#. ** the status line and possibly other headers,
+#. ** so we'll deal with them by showing the full
+#. ** header to the user as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1305
+msgid "Got unexpected Informational Status."
+msgstr "ðÏÌÕÞÅÎ ÎÅÏÖÉÄÁÎÎÙÊ éÎÆÏÒÍÁÃÉÏÎÎÙÊ óÔÁÔÕÓ."
+
+#.
+#. * Reset Content. The server has fulfilled the
+#. * request but nothing is returned and we should
+#. * reset any form content. We'll instruct the
+#. * user to do that, and restore the current
+#. * document. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1340
+msgid "Request fulfilled. Reset Content."
+msgstr "úÁÐÒÏÓ ×ÙÐÏÌÎÅÎ. ïÂÎÏ×ÌÅÎÉÅ óÏÄÅÒÖÉÍÏÇÏ."
+
+#. Not Modified
+#.
+#. * We didn't send an "If-Modified-Since" header,
+#. * so this status is inappropriate. We'll deal
+#. * with it by showing the full header to the user
+#. * as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1459
+msgid "Got unexpected 304 Not Modified status."
+msgstr "ðÏÌÕÞÅÎ ÎÅÏÖÉÄÁÎÎÙÊ ÓÔÁÔÕÓ 304 (îÅ íÏÄÉÆÉÃÉÒÏ×ÁÎÏ)."
+
+#: WWW/Library/Implementation/HTTP.c:1526
+msgid "Redirection of POST content requires user approval."
+msgstr "ðÅÒÅÎÁÐÒÁ×ÌÅÎÉÅ ÓÏÄÅÒÖÉÍÏÇÏ POST ÔÒÅÂÕÅÔ ÐÏÄÔ×ÅÒÖÄÅÎÉÑ ÐÏÌØÚÏ×ÁÔÅÌÑ."
+
+#: WWW/Library/Implementation/HTTP.c:1541
+msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
+msgstr "éÍÅÅÔÓÑ ÓÏÄÅÒÖÉÍÏÅ POST. ôÒÁËÔÏ×ËÁ ðÏÓÔÏÑÎÎÏÇÏ ðÅÒÅÎÁÐÒÁ×ÌÅÎÉÑ ËÁË ÷ÒÅÍÅÎÎÏÇÏ.\n"
+
+#: WWW/Library/Implementation/HTTP.c:1586
+msgid "Retrying with access authorization information."
+msgstr "ðÏ×ÔÏÒÅÎÉÅ Ó ÉÎÆÏÒÍÁÃÉÅÊ Ï ÐÒÁ×ÁÈ ÄÏÓÔÕÐÁ."
+
+#: WWW/Library/Implementation/HTTP.c:1598
+msgid "Show the 401 message body?"
+msgstr "ðÏËÁÚÙ×ÁÔØ ÔÅÌÏ ÓÏÏÂÝÅÎÉÑ 401?"
+
+#: WWW/Library/Implementation/HTTP.c:1643
+msgid "Show the 407 message body?"
+msgstr "ðÏËÁÚÙ×ÁÔØ ÔÅÌÏ ÓÏÏÂÝÅÎÉÑ 407?"
+
+#.
+#. ** Bad or unknown server_status number.
+#. ** Take a chance and hope there is
+#. ** something to display. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1748
+msgid "Unknown status reply from server!"
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÓÔÁÔÕÓ ÏÔ×ÅÔÁ ÏÔ ÓÅÒ×ÅÒÁ!"
+
+#: WWW/Library/Implementation/HTTelnet.c:101
+#, c-format
+msgid "remote %s session:"
+msgstr "ÕÄÁÌÅÎÎÙÊ %s ÓÅÁÎÓ:"
+
+#: WWW/Library/Implementation/HTWAIS.c:161
+msgid "Could not connect to WAIS server."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÕÓÔÁÎÏ×ÉÔØ ÓÏÅÄÉÎÅÎÉÅ Ó ÓÅÒ×ÅÒÏÍ WAIS."
+
+#: WWW/Library/Implementation/HTWAIS.c:170
+msgid "Could not open WAIS connection for reading."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ WAIS-ÓÏÅÄÉÎÅÎÉÅ ÄÌÑ ÞÔÅÎÉÑ."
+
+#: WWW/Library/Implementation/HTWAIS.c:194
+msgid "Diagnostic code is "
+msgstr "ëÏÄ ÄÉÁÇÎÏÓÔÉËÉ "
+
+#: WWW/Library/Implementation/HTWAIS.c:463
+msgid "Index "
+msgstr "éÎÄÅËÓ "
+
+#: WWW/Library/Implementation/HTWAIS.c:467
+#, c-format
+msgid " contains the following %d item%s relevant to \""
+msgstr " ÓÏÄÅÒÖÉÔ ÓÌÅÄÕÀÝÉÅ %d ÜÌÅÍÅÎÔÏ×%s, ÏÔÎÏÓÑÝÉÈÓÑ Ë \""
+
+#: WWW/Library/Implementation/HTWAIS.c:475
+msgid "The first figure after each entry is its relative score, "
+msgstr "ðÅÒ×ÁÑ ÆÉÇÕÒÁ ÐÏÓÌÅ ËÁÖÄÏÇÏ ÜÌÅÍÅÎÔÁ Ñ×ÌÑÅÔÓÑ ÅÅ ÏÔÎÏÓÉÔÅÌØÎÙÍ ÓÞÅÔÏÍ, "
+
+#: WWW/Library/Implementation/HTWAIS.c:476
+msgid "the second is the number of lines in the item."
+msgstr "×ÔÏÒÁÑ Ñ×ÌÑÅÔÓÑ ÞÉÓÌÏÍ ÓÔÒÏË × ÜÌÅÍÅÎÔÅ."
+
+#: WWW/Library/Implementation/HTWAIS.c:517
+msgid " (bad file name)"
+msgstr " (ÎÅ×ÅÒÎÏÅ ÉÍÑ ÆÁÊÌÁ)"
+
+#: WWW/Library/Implementation/HTWAIS.c:542
+msgid "(bad doc id)"
+msgstr "(ÎÅ×ÅÒÎÙÈ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÄÏËÕÍÅÎÔÁ)"
+
+#: WWW/Library/Implementation/HTWAIS.c:558
+msgid "(Short Header record, can't display)"
+msgstr "(úÁÐÉÓØ ëÏÒÏÔËÏÇÏ úÁÇÏÌÏ×ËÁ, ÎÅ ÕÄÁÅÔÓÑ ÏÔÏÂÒÁÚÉÔØ)"
+
+#: WWW/Library/Implementation/HTWAIS.c:565
+msgid ""
+"\n"
+"Long Header record, can't display\n"
+msgstr ""
+"\n"
+"úÁÐÉÓØ äÌÉÎÎÏÇÏ úÁÇÏÌÏ×ËÁ, ÎÅ ÕÄÁÅÔÓÑ ÏÔÏÂÒÁÚÉÔØ\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:572
+msgid ""
+"\n"
+"Text record\n"
+msgstr ""
+"\n"
+"ôÅËÓÔÏ×ÁÑ ÚÁÐÉÓØ\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:581
+msgid ""
+"\n"
+"Headline record, can't display\n"
+msgstr ""
+"\n"
+"úÁÐÉÓØ úÁÇÏÌÏ×ËÁ, ÎÅ ÕÄÁÅÔÓÑ ÏÔÏÂÒÁÚÉÔØ\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:589
+msgid ""
+"\n"
+"Code record, can't display\n"
+msgstr ""
+"\n"
+"úÁÐÉÓØ ëÏÄÁ, ÎÅ ÕÄÁÅÔÓÑ ÏÔÏÂÒÁÚÉÔØ\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:691
+msgid "Syntax error in WAIS URL"
+msgstr "óÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × WAIS URL"
+
+#: WWW/Library/Implementation/HTWAIS.c:761
+msgid " (WAIS Index)"
+msgstr " (éÎÄÅËÓ WAIS)"
+
+#: WWW/Library/Implementation/HTWAIS.c:768
+msgid "WAIS Index: "
+msgstr "éÎÄÅËÓ WAIS: "
+
+#: WWW/Library/Implementation/HTWAIS.c:774
+msgid "This is a link for searching the "
+msgstr "üÔÏ ÓÓÙÌËÁ ÄÌÑ ÐÏÉÓËÁ × "
+
+#: WWW/Library/Implementation/HTWAIS.c:778
+msgid " WAIS Index.\n"
+msgstr " ÉÎÄÅËÓÅ WAIS.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:805
+msgid ""
+"\n"
+"Enter the 's'earch command and then specify search words.\n"
+msgstr ""
+"\n"
+"÷×ÅÄÉÔÅ ËÏÍÁÎÄÕ ÐÏÉÓËÁ (s), É ÚÁÔÅÍ ÚÁÄÁÊÔÅ ÐÏÉÓËÏ×ÙÅ ÓÌÏ×Á.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:827
+msgid " (in "
+msgstr " (× "
+
+#: WWW/Library/Implementation/HTWAIS.c:836
+msgid "WAIS Search of \""
+msgstr "ðÏÉÓË WAIS \""
+
+#: WWW/Library/Implementation/HTWAIS.c:840
+msgid "\" in: "
+msgstr "\" ×: "
+
+#: WWW/Library/Implementation/HTWAIS.c:855
+msgid "HTWAIS: Request too large."
+msgstr "HTWAIS: úÁÐÒÏÓ ÓÌÉÛËÏÍ ÂÏÌØÛÏÊ."
+
+#: WWW/Library/Implementation/HTWAIS.c:864
+msgid "Searching WAIS database..."
+msgstr "ðÏÉÓË × ÂÁÚÅ ÄÁÎÎÙÈ WAIS..."
+
+#: WWW/Library/Implementation/HTWAIS.c:874
+msgid "Search interrupted."
+msgstr "ðÏÉÓË ÐÒÅÒ×ÁÎ."
+
+#: WWW/Library/Implementation/HTWAIS.c:924
+msgid "Can't convert format of WAIS document"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÐÒÅÏÂÒÁÚÏ×ÁÔØ ÆÏÒÍÁÔ ÄÏËÕÍÅÎÔÁ WAIS"
+
+#: WWW/Library/Implementation/HTWAIS.c:968
+msgid "HTWAIS: Request too long."
+msgstr "HTWAIS: úÁÐÒÏÓ ÓÌÉÛËÏÍ ÄÌÉÎÎÙÊ."
+
+#.
+#. ** Actually do the transaction given by request_message.
+#.
+#: WWW/Library/Implementation/HTWAIS.c:982
+msgid "Fetching WAIS document..."
+msgstr "ðÏÌÕÞÅÎÉÅ ÄÏËÕÍÅÎÔÁ WAIS..."
+
+#. display_search_response(target, retrieval_response,
+#. wais_database, keywords);
+#: WWW/Library/Implementation/HTWAIS.c:1021
+msgid "No text was returned!\n"
+msgstr "ôÅËÓÔ ÎÅ ÂÙÌ ×ÏÚ×ÒÁÝÅÎ!\n"
+
+#: WWW/Library/Implementation/HTWSRC.c:287
+msgid " NOT GIVEN in source file; "
+msgstr " îå úáäáî × ÉÓÈÏÄÎÏÍ ÆÁÊÌÅ; "
+
+#: WWW/Library/Implementation/HTWSRC.c:311
+msgid " WAIS source file"
+msgstr " ÉÓÈÏÄÎÙÊ ÆÁÊÌ WAIS"
+
+#: WWW/Library/Implementation/HTWSRC.c:318
+msgid " description"
+msgstr " ÏÐÉÓÁÎÉÅ"
+
+#: WWW/Library/Implementation/HTWSRC.c:328
+msgid "Access links"
+msgstr "óÓÙÌËÉ ÄÏÓÔÕÐÁ"
+
+#: WWW/Library/Implementation/HTWSRC.c:345
+msgid "Direct access"
+msgstr "ðÒÑÍÏÊ ÄÏÓÔÕÐ"
+
+#. * Proxy will be used if defined, so let user know that - FM *
+#: WWW/Library/Implementation/HTWSRC.c:348
+msgid " (or via proxy server, if defined)"
+msgstr " (ÉÌÉ ÞÅÒÅÚ ÐÒÏËÓÉ-ÓÅÒ×ÅÒ, ÅÓÌÉ ÏÎ ÏÐÒÅÄÅÌÅÎ)"
+
+#: WWW/Library/Implementation/HTWSRC.c:363
+msgid "Maintainer"
+msgstr "ïÔ×ÅÔÓÔ×ÅÎÎÙÊ"
+
+#: WWW/Library/Implementation/HTWSRC.c:371
+msgid "Host"
+msgstr "íÁÛÉÎÁ"
+
+#: src/GridText.c:607
+msgid "Memory exhausted, display interrupted!"
+msgstr "ðÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ, ÏÔÏÂÒÁÖÅÎÉÅ ÐÒÅÒ×ÁÎÏ!"
+
+#: src/GridText.c:612
+msgid "Memory exhausted, will interrupt transfer!"
+msgstr "ðÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ, ÐÅÒÅÄÁÞÁ ÄÁÎÎÙÈ ÂÕÄÅÔ ÐÒÅÒ×ÁÎÁ!"
+
+#: src/GridText.c:3395
+msgid " *** MEMORY EXHAUSTED ***"
+msgstr " *** ðáíñôø éóþåòðáîá ***"
+
+#: src/GridText.c:5733 src/GridText.c:5740 src/LYList.c:258
+msgid "unknown field or link"
+msgstr "ÎÅÉÚ×ÅÓÔÎÏÅ ÐÏÌÅ ÉÌÉ ÓÓÙÌËÁ"
+
+#: src/GridText.c:5749
+msgid "text entry field"
+msgstr "ÐÏÌÅ ××ÏÄÁ ÔÅËÓÔÁ"
+
+#: src/GridText.c:5752
+msgid "password entry field"
+msgstr "ÐÏÌÅ ××ÏÄÁ ÐÁÒÏÌÑ"
+
+#: src/GridText.c:5755
+msgid "checkbox"
+msgstr "ÎÅÚÁ×ÉÓÉÍÁÑ ËÎÏÐËÁ"
+
+#: src/GridText.c:5758
+msgid "radio button"
+msgstr "ÚÁ×ÉÓÉÍÁÑ ËÎÏÐËÁ"
+
+#: src/GridText.c:5761
+msgid "submit button"
+msgstr "ËÎÏÐËÁ ÐÏÓÙÌËÉ"
+
+#: src/GridText.c:5764
+msgid "reset button"
+msgstr "ËÎÏÐËÁ ÏÞÉÓÔËÉ"
+
+#: src/GridText.c:5767
+msgid "popup menu"
+msgstr "×ÓÐÌÙ×ÁÀÝÅÅ ÍÅÎÀ"
+
+#: src/GridText.c:5770
+msgid "hidden form field"
+msgstr "ÓËÒÙÔÏÅ ÐÏÌÅ ÆÏÒÍÙ"
+
+#: src/GridText.c:5773
+msgid "text entry area"
+msgstr "ÏÂÌÁÓÔØ ××ÏÄÁ ÔÅËÓÔÁ"
+
+#: src/GridText.c:5776
+msgid "range entry field"
+msgstr "ÐÏÌÅ ××ÏÄÁ ÄÉÁÐÁÚÏÎÁ"
+
+#: src/GridText.c:5779
+msgid "file entry field"
+msgstr "ÐÏÌÅ ××ÏÄÁ ÆÁÊÌÁ"
+
+#: src/GridText.c:5782
+msgid "text-submit field"
+msgstr "ÔÅËÓÔÏ×ÏÅ ÐÏÌÅ ÐÏÓÙÌËÉ"
+
+#: src/GridText.c:5785
+msgid "image-submit button"
+msgstr "ÇÒÁÆÉÞÅÓËÁÑ ËÎÏÐËÁ ÐÏÓÙÌËÉ"
+
+#: src/GridText.c:5788
+msgid "keygen field"
+msgstr "ÐÏÌÅ keygen"
+
+#: src/GridText.c:5791
+msgid "unknown form field"
+msgstr "ÎÅÉÚ×ÅÓÔÎÏÅ ÐÏÌÅ ÆÏÒÍÙ"
+
+#. We can't open the file, what do we do?
+#: src/GridText.c:10348
+#, fuzzy
+msgid "Can't open file for uploading"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ ÄÌÑ ÞÔÅÎÉÑ!"
+
+#. We got an error reading the file, what do we do?
+#: src/GridText.c:10359
+msgid "Short read from file, problem?"
+msgstr ""
+
+#: src/GridText.c:10721
+#, c-format
+msgid "Submitting %s"
+msgstr "ðÏÓÙÌËÁ %s"
+
+#. ugliness has happened; inform user and do the best we can
+#: src/GridText.c:11887
+msgid "Hang Detect: TextAnchor struct corrupted - suggest aborting!"
+msgstr ""
+
+#. don't show previous state
+#: src/GridText.c:12092
+msgid "Wrap lines to fit displayed area?"
+msgstr "ðÅÒÅÎÅÓÔÉ ÓÔÒÏËÉ, ÞÔÏÂÙ ÐÏÐÁÓÔØ × ÏÂÌÁÓÔØ ÏÔÏÂÒÁÖÅÎÉÑ?"
+
+#: src/GridText.c:12144
+msgid "Very long lines have been wrapped!"
+msgstr "ïÞÅÎØ ÄÌÉÎÎÙÅ ÓÔÒÏËÉ ÂÙÌÉ ÐÅÒÅÎÅÓÅÎÙ!"
+
+#: src/GridText.c:12591
+msgid "Very long lines have been truncated!"
+msgstr "ïÞÅÎØ ÄÌÉÎÎÙÅ ÓÔÒÏËÉ ÂÙÌÉ ÕÓÅÞÅÎÙ!"
+
+#: src/HTAlert.c:155 src/LYShowInfo.c:318
+msgid "bytes"
+msgstr "ÂÁÊÔ"
+
+#: src/HTAlert.c:156
+msgid "KB"
+msgstr "ëâ"
+
+#: src/HTAlert.c:255
+#, c-format
+msgid "Read %s of %s of data"
+msgstr "ðÒÏÞÉÔÁÎÏ %s ÉÚ %s ÄÁÎÎÙÈ"
+
+#: src/HTAlert.c:257
+#, c-format
+msgid "Read %s of data"
+msgstr "ðÒÏÞÉÔÁÎÏ %s ÄÁÎÎÙÈ"
+
+#: src/HTAlert.c:262
+#, c-format
+msgid ", %s/sec"
+msgstr ", %s/ÓÅË"
+
+#: src/HTAlert.c:269
+#, c-format
+msgid " (stalled for %ld sec)"
+msgstr " (ÚÁÄÅÒÖÁÎÏ ÎÁ %ld ÓÅË)"
+
+#: src/HTAlert.c:271
+#, c-format
+msgid ", ETA %ld sec"
+msgstr ", ETA %ld ÓÅË"
+
+#: src/HTAlert.c:277
+msgid " (Press 'z' to abort)"
+msgstr " (îÁÖÍÉÔÅ 'z' ÞÔÏÂÙ ÐÒÅÒ×ÁÔØ)"
+
+#. Meta-note: don't move the following note from its place right
+#. in front of the first gettext(). As it is now, it should
+#. automatically appear in generated lynx.pot files. - kw
+#.
+#. NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+#. * will take the first byte of the translation as a positive response
+#. * to Yes/No questions. If you provide a translation for "no", lynx
+#. * will take the first byte of the translation as a negative response
+#. * to Yes/No questions. For both, lynx will also try to show the
+#. * first byte in the prompt as a character, instead of (y) or (n),
+#. * respectively. This will not work right for multibyte charsets!
+#. * Don't translate "yes" and "no" for CJK character sets (or translate
+#. * them to "yes" and "no"). For a translation using UTF-8, don't
+#. * translate if the translation would begin with anything but a 7-bit
+#. * (US_ASCII) character. That also means do not translate if the
+#. * translation would begin with anything but a 7-bit character, if
+#. * you use a single-byte character encoding (a charset like ISO-8859-n)
+#. * but anticipate that the message catalog may be used re-encoded in
+#. * UTF-8 form.
+#. * For translations using other character sets, you may also wish to
+#. * leave "yes" and "no" untranslated, if using (y) and (n) is the
+#. * preferred behavior.
+#. * Lynx will also accept y Y n N as responses unless there is a conflict
+#. * with the first letter of the "yes" or "no" translation.
+#.
+#: src/HTAlert.c:334
+msgid "yes"
+msgstr "yes"
+
+#: src/HTAlert.c:335
+msgid "no"
+msgstr "no"
+
+#: src/HTML.c:6342
+msgid "Description:"
+msgstr "ïÐÉÓÁÎÉÅ:"
+
+#: src/HTML.c:6347
+msgid "(none)"
+msgstr "(ÎÅÔ)"
+
+#: src/HTML.c:6351
+msgid "Filepath:"
+msgstr "ðÕÔØ Ë ÆÁÊÌÕ:"
+
+#: src/HTML.c:6356
+msgid "(unknown)"
+msgstr "(ÎÅÉÚ×ÅÓÔÎÙÊ)"
+
+#: src/HTML.c:7804
+msgid "Document has only hidden links. Use the 'l'ist command."
+msgstr "äÏËÕÍÅÎÔ ÉÍÅÅÔ ÔÏÌØËÏ ÓËÒÙÔÙÅ ÓÓÙÌËÉ. éÓÐÏÌØÚÕÊÔÅ ËÏÍÁÎÄÕ 'l'ist."
+
+#: src/HTML.c:8328
+msgid "Source cache error - disk full?"
+msgstr "ïÛÉÂËÁ ËÜÛÉÒÏ×ÁÎÉÑ ÉÓÈÏÄÎÙÈ ÆÁÊÌÏ× - ÐÅÒÅÐÏÌÎÅÎÉÅ ÄÉÓËÁ?"
+
+#: src/HTML.c:8341
+msgid "Source cache error - not enough memory!"
+msgstr "ïÛÉÂËÁ ËÜÛÉÒÏ×ÁÎÉÑ ÉÓÈÏÄÎÙÈ ÆÁÊÌÏ× - ÎÅ È×ÁÔÁÅÔ ÐÁÍÑÔÉ!"
+
+#: src/LYBookmark.c:166
+msgid ""
+" This file is an HTML representation of the X Mosaic hotlist file.\n"
+" Outdated or invalid links may be removed by using the\n"
+" remove bookmark command, it is usually the 'R' key but may have\n"
+" been remapped by you or your system administrator."
+msgstr ""
+" üÔÏÔ ÆÁÊÌ Ñ×ÌÑÅÔÓÑ HTML-ÐÒÅÄÓÔÁ×ÌÅÎÉÅÍ ÆÁÊÌÁ ÚÁËÌÁÄÏË X Mosaic.\n"
+" õÓÔÁÒÅ×ÛÉÅ É ÎÅÐÒÁ×ÉÌØÎÙÅ ÓÓÙÌËÉ ÍÏÇÕÔ ÂÙÔØ ÕÄÁÌÅÎÙ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ\n"
+" ËÏÍÁÎÄÙ ÕÄÁÌÅÎÉÑ ÚÁËÌÁÄËÉ, ÏÂÙÞÎÏ ËÌÁ×ÉÛÁ 'R', ÈÏÔÑ ÏÎÁ ÍÏÖÅÔ ÂÙÔØ\n"
+" ÐÅÒÅÎÁÚÎÁÞÅÎÁ ×ÁÍÉ ÉÌÉ ÓÉÓÔÅÍÎÙÍ ÁÄÍÉÎÉÓÔÒÁÔÏÒÏÍ."
+
+#: src/LYBookmark.c:382
+msgid ""
+" You can delete links by the 'R' key<br>\n"
+"<ol>\n"
+msgstr ""
+" ÷Ù ÍÏÖÅÔÅ ÕÄÁÌÑÔØ ÓÓÙÌËÉ ËÌÁ×ÉÛÅÊ 'R'<br>\n"
+"<ol>\n"
+
+#: src/LYBookmark.c:385
+msgid ""
+" You can delete links using the remove bookmark command. It is usually\n"
+" the 'R' key but may have been remapped by you or your system\n"
+" administrator."
+msgstr ""
+" ÷Ù ÍÏÖÅÔÅ ÕÄÁÌÑÔØ ÓÓÙÌËÉ ÉÓÐÏÌØÚÕÑ ËÏÍÁÎÄÕ ÕÄÁÌÅÎÉÑ ÚÁËÌÁÄËÉ. ïÂÙÞÎÏ ÜÔÏ\n"
+" ÄÅÌÁÅÔÓÑ Ó ÐÏÍÏÝØÀ ËÌÁ×ÉÛÉ 'R', ÎÏ ÍÏÖÅÔ ÂÙÔØ ÐÅÒÅÎÁÚÎÁÞÅÎÏ ×ÁÍÉ ÉÌÉ\n"
+" ×ÁÛÉÍ ÓÉÓÔÅÍÎÙÍ ÁÄÍÉÎÉÓÔÒÁÔÏÒÏÍ."
+
+#: src/LYBookmark.c:389
+msgid ""
+" This file also may be edited with a standard text editor to delete\n"
+" outdated or invalid links, or to change their order."
+msgstr ""
+" üÔÏÔ ÆÁÊÌ ÔÁËÖÅ ÍÏÖÅÔ ÂÙÔØ ÏÔÒÅÄÁËÔÉÒÏ×ÁÎ ÓÔÁÎÄÁÒÔÎÙÍ ÔÅËÓÔÏ×ÙÍ\n"
+" ÒÅÄÁËÔÏÒÏÍ ÄÌÑ ÕÄÁÌÅÎÉÑ ÕÓÔÁÒÅ×ÛÉÈ ÉÌÉ ÎÅÐÒÁ×ÉÌØÎÙÈ ÓÓÙÌÏË, ÉÌÉ\n"
+" ÄÌÑ ÉÚÍÅÎÅÎÉÑ ÉÈ ÐÏÒÑÄËÁ."
+
+#: src/LYBookmark.c:392
+msgid ""
+"Note: if you edit this file manually\n"
+" you should not change the format within the lines\n"
+" or add other HTML markup.\n"
+" Make sure any bookmark link is saved as a single line."
+msgstr ""
+"ðÒÉÍÅÞÁÎÉÅ: ÅÓÌÉ ×Ù ÒÅÄÁËÔÉÒÕÅÔÅ ÜÔÏÔ ÆÁÊÌ ×ÒÕÞÎÕÀ,\n"
+" ×Ù ÎÅ ÄÏÌÖÎÙ ÉÚÍÅÎÑÔØ ÆÏÒÍÁÔ ÓÔÒÏË\n"
+" ÉÌÉ ÄÏÂÁ×ÌÑÔØ ÄÒÕÇÉÅ ÔÅÇÉ HTML.\n"
+" õÂÅÄÉÔÅÓØ, ÞÔÏ ËÁÖÄÁÑ ÚÁËÌÁÄËÁ ÓÏÈÒÁÎÅÎÁ ÎÁ ÅÄÉÎÓÔ×ÅÎÎÏÊ ÓÔÒÏËÅ."
+
+#: src/LYBookmark.c:683
+#, c-format
+msgid "File may be recoverable from %s during this session"
+msgstr "æÁÊÌ ÍÏÖÅÔ ÂÙÔØ ×ÏÓÓÔÁÎÏ×ÌÅÎ ÉÚ %s × ÔÅÞÅÎÉÅ ÜÔÏÇÏ ÓÅÁÎÓÁ"
+
+#.
+#. * Neither the path as given nor any components examined by
+#. * backing up were stat()able. - kw
+#.
+#: src/LYCgi.c:232
+msgid "Unable to access cgi script"
+msgstr "ïÛÉÂËÁ ÄÏÓÔÕÐÁ Ë cgi-ÓËÒÉÐÔÕ"
+
+#: src/LYCgi.c:651 src/LYCgi.c:654
+msgid "Good Advice"
+msgstr "èÏÒÏÛÉÊ ÓÏ×ÅÔ"
+
+#: src/LYCgi.c:657
+msgid "An excellent http server for VMS is available via"
+msgstr "ïÔÌÉÞÎÙÊ http ÓÅÒ×ÅÒ ÄÌÑ VMS ÄÏÓÔÕÐÅÎ ÞÅÒÅÚ"
+
+#: src/LYCgi.c:664
+msgid "this link"
+msgstr "ÜÔÕ ÓÓÙÌËÕ"
+
+#: src/LYCgi.c:668
+msgid "It provides state of the art CGI script support.\n"
+msgstr "ðÒÅÄÏÓÔÁ×ÌÑÅÍÁÑ ÉÍ ÐÏÄÄÅÒÖËÁ CGI-ÓËÒÉÐÔÏ× Ñ×ÌÑÅÔÓÑ ÐÏÓÌÅÄÎÉÍ ÓÌÏ×ÏÍ ÔÅÈÎÉËÉ.\n"
+
+#: src/LYClean.c:108
+msgid "Exiting via interrupt:"
+msgstr "÷ÙÈÏÄ ÐÏ ÐÒÅÒÙ×ÁÎÉÀ:"
+
+#: src/LYCookie.c:2659
+msgid "(from a previous session)"
+msgstr "(ÉÚ ÐÒÅÄÙÄÕÝÅÇÏ ÓÅÁÎÓÁ)"
+
+#: src/LYCookie.c:2719
+msgid "Maximum Gobble Date:"
+msgstr ""
+
+#: src/LYCookie.c:2764
+msgid "Internal"
+msgstr "÷ÎÕÔÒÅÎÎÉÊ"
+
+#: src/LYCookie.c:2765
+msgid "cookie_domain_flag_set error, aborting program"
+msgstr "ÏÛÉÂËÁ cookie_domain_flag_set error, ÐÒÅÇÒÁÍÍÁ ÐÒÅÒÙ×ÁÅÔÓÑ"
+
+#: src/LYCurses.c:936
+msgid "Terminal initialisation failed - unknown terminal type?"
+msgstr "ïÛÉÂËÁ ÐÒÉ ÉÎÉÃÉÁÌÉÚÁÃÉÉ ÔÅÒÍÉÎÁÌÁ - ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ÔÅÒÍÉÎÁÌÁ?"
+
+#: src/LYCurses.c:1328
+msgid "Terminal ="
+msgstr "ôÅÒÍÉÎÁÌ ="
+
+#: src/LYCurses.c:1332
+msgid "You must use a vt100, 200, etc. terminal with this program."
+msgstr "ó ÜÔÏÊ ÐÒÏÇÒÁÍÍÏÊ ×Ù ÄÏÌÖÎÙ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÅÒÍÉÎÁÌ vt100, 200, É Ô.Ä."
+
+#: src/LYCurses.c:1384
+msgid "Your Terminal type is unknown!"
+msgstr "ôÉÐ ×ÁÛÅÇÏ ôÅÒÍÉÎÁÌÁ ÎÅÉÚ×ÅÓÔÅÎ!"
+
+#: src/LYCurses.c:1385
+msgid "Enter a terminal type:"
+msgstr "÷×ÅÄÉÔÅ ÔÉÐ ÔÅÒÍÉÎÁÌÁ:"
+
+#: src/LYCurses.c:1398
+msgid "TERMINAL TYPE IS SET TO"
+msgstr "ôéð ôåòíéîáìá õóôáîï÷ìåî ÷"
+
+#: src/LYCurses.c:1749
+#, c-format
+msgid ""
+"\n"
+"A Fatal error has occurred in %s Ver. %s\n"
+msgstr ""
+"\n"
+" ÷ %s ÷ÅÒ. %s ÐÒÏÉÚÏÛÌÁ ÆÁÔÁÌØÎÁÑ ÏÛÉÂËÁ.\n"
+
+#: src/LYCurses.c:1751
+msgid ""
+"\n"
+"Please notify your system administrator to confirm a bug, and if\n"
+"confirmed, to notify the lynx-dev list. Bug reports should have concise\n"
+"descriptions of the command and/or URL which causes the problem, the\n"
+"operating system name with version number, the TCPIP implementation, the\n"
+"TRACEBACK if it can be captured, and any other relevant information.\n"
+msgstr ""
+"\n"
+"ðÏÖÁÌÕÊÓÔÁ, ÐÏÐÒÏÓÉÔÅ ×ÁÛÅÇÏ ÓÉÓÔÅÍÎÏÇÏ ÁÄÍÉÎÉÓÔÒÁÔÏÒÁ ÐÏÄÔ×ÅÒÄÉÔØ\n"
+"ÏÛÉÂËÕ, É, ÅÓÌÉ ÏÎÁ ÐÏÄÔ×ÅÒÄÉÔÓÑ, ÓÏÏÂÝÉÔÅ × ÓÐÉÓÏË ÒÁÓÓÙÌËÉ lynx-dev.\n"
+"óÏÏÂÝÅÎÉÑ ÏÂ ÏÛÉÂËÁÈ ÄÏÌÖÎÙ ÓÏÄÅÒÖÁÔØ ÔÏÞÎÙÅ ÏÐÉÓÁÎÉÑ ËÏÍÁÎÄÙ É/ÉÌÉ URL,\n"
+"ËÏÔÏÒÙÅ ×ÙÚÙ×ÁÀÔ ÐÒÏÂÌÅÍÕ, ÎÁÚ×ÁÎÉÅ É ×ÅÒÓÉÀ ÏÐÅÒÁÃÉÏÎÎÏÊ ÓÉÓÔÅÍÙ,\n"
+"ÒÅÁÌÉÚÁÃÉÀ TCPIP, ÓÌÅÄ ×ÙÚÏ×Ï× TRACEBACK, ÅÓÌÉ ÅÇÏ ÍÏÖÎÏ ÐÏÌÕÞÉÔØ, É ÌÀÂÕÀ\n"
+"ÄÒÕÇÕÀ ÏÔÎÏÓÑÝÕÀÓÑ Ë ÄÅÌÕ ÉÎÆÏÒÍÁÃÉÀ.\n"
+
+#: src/LYEdit.c:264
+msgid "Editor killed by signal"
+msgstr "òÅÄÁËÔÏÒ ÕÂÉÔ ÓÉÇÎÁÌÏÍ"
+
+#: src/LYEdit.c:266
+#, c-format
+msgid "Editor returned with error status, %s"
+msgstr "òÅÄÁËÔÏÒ ÚÁ×ÅÒÛÉÌÓÑ ÓÏ ÓÔÁÔÕÓÏÍ ÏÛÉÂËÉ, %s"
+
+#: src/LYEdit.c:267
+msgid "reason unknown."
+msgstr "ÐÒÉÞÉÎÁ ÎÅÉÚ×ÅÓÔÎÁ."
+
+#: src/LYDownload.c:520
+msgid "Downloaded link:"
+msgstr "óËÁÞÁÎÎÁÑ ÓÓÙÌËÁ:"
+
+#: src/LYDownload.c:525
+msgid "Suggested file name:"
+msgstr "ðÒÅÄÌÁÇÁÅÍÏÅ ÉÍÑ ÆÁÊÌÁ:"
+
+#: src/LYDownload.c:530
+msgid "Standard download options:"
+msgstr "óÔÁÎÄÁÒÔÎÙÅ ÏÐÃÉÉ ÄÌÑ ÓËÁÞÉ×ÁÎÉÑ:"
+
+#: src/LYDownload.c:531
+msgid "Download options:"
+msgstr "ïÐÃÉÉ ÓËÁÞÉ×ÁÎÉÑ:"
+
+#: src/LYDownload.c:545
+msgid "Save to disk"
+msgstr "óÏÈÒÁÎÉÔØ ÎÁ ÄÉÓË"
+
+#: src/LYDownload.c:547
+msgid "Save to disk disabled."
+msgstr "óÏÈÒÁÎÅÎÉÅ ÎÁ ÄÉÓË ÏÔËÌÀÞÅÎÏ."
+
+#: src/LYDownload.c:551 src/LYPrint.c:1338
+msgid "Local additions:"
+msgstr "ìÏËÁÌØÎÙÅ ÄÏÐÏÌÎÅÎÉÑ:"
+
+#: src/LYDownload.c:560 src/LYUpload.c:224
+msgid "No Name Given"
+msgstr "éÍÑ ÎÅ ÚÁÄÁÎÏ"
+
+#: src/LYHistory.c:633
+msgid "You selected:"
+msgstr "÷Ù ×ÙÂÒÁÌÉ:"
+
+#: src/LYHistory.c:657 src/LYHistory.c:905
+msgid "(no address)"
+msgstr "(ÎÅÔ ÁÄÒÅÓÁ)"
+
+#: src/LYHistory.c:661
+msgid " (internal)"
+msgstr " (×ÎÕÔÒÅÎÎÉÊ)"
+
+#: src/LYHistory.c:663
+msgid " (was internal)"
+msgstr " (ÂÙÌ ×ÎÕÔÒÅÎÎÉÊ)"
+
+#: src/LYHistory.c:761
+msgid " (From History)"
+msgstr " (éÚ éÓÔÏÒÉÉ)"
+
+#: src/LYHistory.c:825
+msgid "You visited (POSTs, bookmark, menu and list files excluded):"
+msgstr "÷Ù ÐÏÓÅÔÉÌÉ (POST, ÚÁËÌÁÄËÉ, ÍÅÎÀ É ÓÐÉÓËÉ ÆÁÊÌÏ× ÉÓËÌÀÞÁÀÔÓÑ):"
+
+#: src/LYHistory.c:1124
+msgid "(No messages yet)"
+msgstr "(ðÏËÁ ÓÏÏÂÝÅÎÉÊ ÎÅÔ)"
+
+#: src/LYLeaks.c:78
+msgid "Invalid pointer detected."
+msgstr "ïÂÎÁÒÕÖÅÎ ÎÅ×ÅÒÎÙÊ ÕËÁÚÁÔÅÌØ."
+
+#: src/LYLeaks.c:80 src/LYLeaks.c:117
+msgid "Pointer:"
+msgstr "õËÁÚÁÔÅÌØ:"
+
+#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:136
+msgid "FileName:"
+msgstr "éÍÑæÁÊÌÁ:"
+
+#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:139 src/LYLeaks.c:150
+msgid "LineCount:"
+msgstr "îÏÍÅÒóÔÒÏËÉ:"
+
+#: src/LYLeaks.c:115
+msgid "Memory leak detected."
+msgstr "ïÂÎÁÒÕÖÅÎÁ ÕÔÅÞËÁ ÐÁÍÑÔÉ."
+
+#: src/LYLeaks.c:120
+msgid "Contains:"
+msgstr "óÏÄÅÒÖÉÔ:"
+
+#: src/LYLeaks.c:133
+msgid "ByteSize:"
+msgstr "òÁÚÍÅÒâÁÊÔÁ:"
+
+#: src/LYLeaks.c:147
+msgid "realloced:"
+msgstr "×ÙÄÅÌÅÎÏ ÚÁÎÏ×Ï:"
+
+#: src/LYLeaks.c:170
+msgid "Total memory leakage this run:"
+msgstr "ïÂÝÁÑ ÕÔÅÞËÁ ÐÁÍÑÔÉ ÚÁ ÜÔÏÔ ÚÁÐÕÓË:"
+
+#: src/LYList.c:91
+msgid "References in "
+msgstr "óÓÙÌÏË × "
+
+#: src/LYList.c:92
+msgid "this document:"
+msgstr "ÜÔÏÍ ÄÏËÕÍÅÎÔÅ:"
+
+#: src/LYList.c:98
+msgid "Visible links:"
+msgstr "÷ÉÄÉÍÙÈ ÓÓÙÌÏË:"
+
+#: src/LYList.c:199 src/LYList.c:319
+msgid "Hidden links:"
+msgstr "óËÒÙÔÙÈ ÓÓÙÌÏË:"
+
+#: src/LYList.c:267
+msgid "References"
+msgstr "óÓÙÌËÉ"
+
+#: src/LYList.c:269
+msgid "Visible links"
+msgstr "÷ÉÄÉÍÙÅ ÓÓÙÌËÉ"
+
+#: src/LYLocal.c:267
+#, c-format
+msgid "Unable to get status of '%s'."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÓÔÁÔÕÓ '%s'."
+
+#: src/LYLocal.c:301
+msgid "The selected item is not a file or a directory! Request ignored."
+msgstr "÷ÙÂÒÁÎÎÙÊ ÜÌÅÍÅÎÔ ÎÅ Ñ×ÌÑÅÔÓÑ ÆÁÊÌÏÍ ÉÌÉ ËÁÔÁÌÏÇÏÍ! úÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ."
+
+#: src/LYLocal.c:383
+#, c-format
+msgid "Unable to %s due to system error!"
+msgstr "îÅ ÕÄÁÅÔÓÑ %s ×ÓÌÅÄÓÔ×ÉÅ ÓÉÓÔÅÍÎÏÊ ÏÛÉÂËÉ!"
+
+#. error return
+#: src/LYLocal.c:415
+#, c-format
+msgid "Probable failure to %s due to system error!"
+msgstr "÷ÏÚÍÏÖÎÏ ÏÛÉÂËÁ %s ×ÓÌÅÄÓÔ×ÉÅ ÓÉÓÔÅÍÎÏÊ ÏÛÉÂËÉ!"
+
+#: src/LYLocal.c:453
+#, c-format
+msgid "move %s to %s"
+msgstr "ÐÅÒÅÍÅÓÔÉÔØ %s × %s"
+
+#: src/LYLocal.c:475
+msgid "There is already a directory with that name! Request ignored."
+msgstr "ëÁÔÁÌÏÇ Ó ÔÁËÉÍ ÉÍÅÎÅÍ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ! úÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ."
+
+#: src/LYLocal.c:477
+msgid "There is already a file with that name! Request ignored."
+msgstr "æÁÊÌ Ó ÔÁËÉÍ ÉÍÅÎÅÍ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ! úÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ."
+
+#: src/LYLocal.c:479
+msgid "The specified name is already in use! Request ignored."
+msgstr "õËÁÚÁÎÎÏÅ ÉÍÑ ÕÖÅ ÉÓÐÏÌØÚÕÅÔÓÑ! úÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ."
+
+#: src/LYLocal.c:490
+msgid "Destination has different owner! Request denied."
+msgstr "æÁÊÌ ÎÁÚÎÁÞÅÎÉÑ ÉÍÅÅÔ ÄÒÕÇÏÇÏ ×ÌÁÄÅÌØÃÁ! úÁÐÒÏÓ ÚÁÐÒÅÝÅÎ."
+
+#: src/LYLocal.c:493
+msgid "Destination is not a valid directory! Request denied."
+msgstr "æÁÊÌ ÎÁÚÎÁÞÅÎÉÑ ÎÅ Ñ×ÌÑÅÔÓÑ ÐÒÁ×ÉÌØÎÙÍ ËÁÔÁÌÏÇÏÍ! úÁÐÒÏÓ ÚÁÐÒÅÝÅÎ."
+
+#: src/LYLocal.c:516
+msgid "Remove all tagged files and directories?"
+msgstr "õÄÁÌÉÔØ ×ÓÅ ÏÔÍÅÞÅÎÎÙÅ ÆÁÊÌÙ É ËÁÔÁÌÏÇÉ?"
+
+#: src/LYLocal.c:537
+#, c-format
+msgid "remove %s"
+msgstr "ÕÄÁÌÉÔØ %s"
+
+#: src/LYLocal.c:580
+msgid "Enter new location for tagged items: "
+msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÒÁÓÐÏÌÏÖÅÎÉÅ ÄÌÑ ÏÔÍÅÞÅÎÎÙÈ ÜÌÅÍÅÎÔÏ×: "
+
+#: src/LYLocal.c:649
+msgid "Path too long"
+msgstr "ðÕÔØ ÓÌÉÛËÏÍ ÄÌÉÎÎÙÊ"
+
+#: src/LYLocal.c:680
+msgid "Source and destination are the same location - request ignored!"
+msgstr "éÓÔÏÞÎÉË É ÐÕÔØ ÎÁÚÎÁÞÅÎÉÑ ÓÏ×ÐÁÄÁÀÔ - ÚÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ!"
+
+#: src/LYLocal.c:738
+msgid "Enter new name for directory: "
+msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÉÍÑ ÄÌÑ ËÁÔÁÌÏÇÁ: "
+
+#: src/LYLocal.c:740
+msgid "Enter new name for file: "
+msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÉÍÑ ÄÌÑ ÆÁÊÌÁ: "
+
+#: src/LYLocal.c:751
+msgid "Illegal character (path-separator) found! Request ignored."
+msgstr "îÁÊÄÅÎ ÎÅÄÏÐÕÓÔÉÍÙÊ ÓÉÍ×ÏÌ (ÒÁÚÄÅÌÉÔÅÌØ ÐÕÔÉ)! úÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ."
+
+#: src/LYLocal.c:800
+msgid "Enter new location for directory: "
+msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÍÅÓÔÏ ÒÁÓÐÏÌÏÖÅÎÉÑ ÄÌÑ ËÁÔÁÌÏÇÁ: "
+
+#: src/LYLocal.c:802
+msgid "Enter new location for file: "
+msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÍÅÓÔÏ ÒÁÓÐÏÌÏÖÅÎÉÑ ÄÌÑ ÆÁÊÌÁ: "
+
+#: src/LYLocal.c:827
+msgid "Unexpected failure - unable to find trailing path separator"
+msgstr "îÅÏÖÉÄÁÎÎÁÑ ÏÛÉÂËÁ - ÎÅ ÕÄÁÅÔÓÑ ÎÁÊÔÉ ÚÁ×ÅÒÛÁÀÝÉÊ ÒÁÚÄÅÌÉÔÅÌØ ÐÕÔÉ"
+
+#: src/LYLocal.c:847
+msgid "Source and destination are the same location! Request ignored!"
+msgstr "éÓÔÏÞÎÉË É ÐÕÔØ ÎÁÚÎÁÞÅÎÉÑ ÓÏ×ÐÁÄÁÀÔ! úÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ!"
+
+#: src/LYLocal.c:894
+msgid "Modify name, location, or permission (n, l, or p): "
+msgstr "éÚÍÅÎÉÔÅ ÉÍÑ, ÍÅÓÔÏ ÒÁÓÐÏÌÏÖÅÎÉÑ, ÉÌÉ ÐÒÁ×Á ÄÏÓÔÕÐÁ (n, l, ÉÌÉ p): "
+
+#: src/LYLocal.c:896
+msgid "Modify name or location (n or l): "
+msgstr "éÚÍÅÎÉÔØ ÉÍÑ ÉÌÉ ÍÅÓÔÏ ÒÁÓÐÏÌÏÖÅÎÉÑ (n ÉÌÉ l): "
+
+#.
+#. * Code for changing ownership needed here.
+#.
+#: src/LYLocal.c:925
+msgid "This feature not yet implemented!"
+msgstr "üÔÁ ×ÏÚÍÏÖÎÏÓÔØ ÅÝÅ ÎÅ ÒÅÁÌÉÚÏ×ÁÎÁ!"
+
+#: src/LYLocal.c:943
+msgid "Enter name of file to create: "
+msgstr "÷×ÅÄÉÔÅ ÉÍÑ ÓÏÚÄÁ×ÁÅÍÏÇÏ ÆÁÊÌÁ: "
+
+#: src/LYLocal.c:951 src/LYLocal.c:999
+msgid "Illegal redirection \"//\" found! Request ignored."
+msgstr "îÁÊÄÅÎÏ ÎÅ×ÅÒÎÏÅ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÅ! úÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ."
+
+#: src/LYLocal.c:966
+#, c-format
+msgid "create %s"
+msgstr "ÓÏÚÄÁÔØ %s"
+
+#: src/LYLocal.c:991
+msgid "Enter name for new directory: "
+msgstr "÷×ÅÄÉÔÅ ÉÍÑ ÄÌÑ ÎÏ×ÏÇÏ ËÁÔÁÌÏÇÁ: "
+
+#: src/LYLocal.c:1042
+msgid "Create file or directory (f or d): "
+msgstr "óÏÚÄÁÔØ ÆÁÊÌ ÉÌÉ ËÁÔÁÌÏÇ (f ÉÌÉ d): "
+
+#: src/LYLocal.c:1083
+#, c-format
+msgid "Remove '%s' and all of its contents?"
+msgstr "õÄÁÌÉÔØ '%s' É ×ÓÅ ÅÇÏ ÓÏÄÅÒÖÉÍÏÅ?"
+
+#: src/LYLocal.c:1086
+msgid "Remove directory and all of its contents?"
+msgstr "õÄÁÌÉÔØ ËÁÔÁÌÏÇ É ×ÓÅ ÅÇÏ ÓÏÄÅÒÖÉÍÏÅ?"
+
+#: src/LYLocal.c:1090
+#, c-format
+msgid "Remove file '%s'?"
+msgstr "õÄÁÌÉÔØ ÆÁÊÌ '%s'?"
+
+#: src/LYLocal.c:1092
+msgid "Remove file?"
+msgstr "õÄÁÌÉÔØ ÆÁÊÌ?"
+
+#: src/LYLocal.c:1097
+#, c-format
+msgid "Remove symbolic link '%s'?"
+msgstr "õÄÁÌÉÔØ ÓÉÍ×ÏÌØÎÕÀ ÓÓÙÌËÕ '%s'?"
+
+#: src/LYLocal.c:1099
+msgid "Remove symbolic link?"
+msgstr "õÄÁÌÉÔØ ÓÉÍ×ÏÌØÎÕÀ ÓÓÙÌËÕ?"
+
+#: src/LYLocal.c:1190
+msgid "Sorry, don't know how to permit non-UNIX files yet."
+msgstr "éÚ×ÉÎÉÔÅ, ÐÏËÁ ÎÅ ÉÚ×ÅÓÔÎÏ, ËÁË ÕÓÔÁÎÁ×ÌÉ×ÁÔØ ÐÒÁ×Á ÄÏÓÔÕÐÁ ÄÌÑ ÎÅ-UNIX ÆÁÊÌÏ×."
+
+#: src/LYLocal.c:1220
+msgid "Unable to open permit options file"
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ Ó ÏÐÃÉÑÍÉ ÐÒÁ× ÄÏÓÔÕÐÁ"
+
+#: src/LYLocal.c:1247
+msgid "Specify permissions below:"
+msgstr "õËÁÖÉÔÅ ÎÉÖÅ ÐÒÁ×Á ÄÏÓÔÕÐÁ:"
+
+#: src/LYLocal.c:1248 src/LYShowInfo.c:196
+msgid "Owner:"
+msgstr "÷ÌÁÄÅÌÅÃ:"
+
+#: src/LYLocal.c:1264
+msgid "Group"
+msgstr "çÒÕÐÐÁ"
+
+#: src/LYLocal.c:1280
+msgid "Others:"
+msgstr "äÒÕÇÉÅ:"
+
+#: src/LYLocal.c:1298
+msgid "form to permit"
+msgstr ""
+
+#: src/LYLocal.c:1396
+msgid "Invalid mode format."
+msgstr "îÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÒÅÖÉÍÁ."
+
+#: src/LYLocal.c:1400
+msgid "Invalid syntax format."
+msgstr "îÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÓÉÎÔÁËÓÉÓÁ."
+
+#: src/LYLocal.c:1575
+msgid "NULL URL pointer"
+msgstr "NULL ÕËÁÚÁÔÅÌØ ÎÁ URL"
+
+#: src/LYLocal.c:1670
+msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
+msgstr "÷ÎÉÍÁÎÉÅ! UU-ÄÅËÏÄÉÒÏ×ÁÎÎÙÊ ÆÁÊÌ ÂÕÄÅÔ × ËÁÔÁÌÏÇÅ, ÉÚ ËÏÔÏÒÏÇÏ ×Ù ÚÁÐÕÓÔÉÌÉ Lynx."
+
+#: src/LYLocal.c:1782
+#, c-format
+msgid "Executing %s "
+msgstr "÷ÙÐÏÌÎÅÎÉÅ %s"
+
+#: src/LYLocal.c:1785
+msgid "Executing system command. This might take a while."
+msgstr "÷ÙÐÏÌÎÅÎÉÅ ÓÉÓÔÅÍÎÏÊ ËÏÍÁÎÄÙ. üÔÏ ÍÏÖÅÔ ÚÁÎÑÔØ ×ÒÅÍÑ."
+
+#: src/LYLocal.c:1831
+msgid "Unable to open file management menu file."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ ÍÅÎÀ ÒÁÂÏÔÙ Ó ÆÁÊÌÁÍÉ."
+
+#: src/LYLocal.c:1862
+msgid "Current directory:"
+msgstr "ôÅËÕÝÉÊ ËÁÔÁÌÏÇ:"
+
+#: src/LYLocal.c:1865 src/LYLocal.c:1883
+msgid "Current selection:"
+msgstr "ôÅËÕÝÉÊ ×ÙÂÏÒ:"
+
+#: src/LYLocal.c:1869
+msgid "Nothing currently selected."
+msgstr "óÅÊÞÁÓ ÎÉÞÅÇÏ ÎÅ ×ÙÂÒÁÎÏ."
+
+#: src/LYLocal.c:1884
+msgid "tagged item:"
+msgstr "ÏÔÍÅÞÅÎÎÙÊ ÜÌÅÍÅÎÔ:"
+
+#: src/LYLocal.c:1884
+msgid "tagged items:"
+msgstr "ÏÔÍÅÞÅÎÎÙÅ ÜÌÅÍÅÎÔÙ:"
+
+#: src/LYLocal.c:1983 src/LYLocal.c:1994
+msgid "Illegal filename; request ignored."
+msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÉÍÑ ÆÁÊÌÁ; ÚÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ."
+
+#: src/LYLocal.c:2137
+msgid "The selected item is not a directory! Request ignored."
+msgstr "÷ÙÂÒÁÎÎÙÊ ÜÌÅÍÅÎÔ ÎÅ Ñ×ÌÑÅÔÓÑ ËÁÔÁÌÏÇÏÍ! úÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ."
+
+#. directory not writable
+#: src/LYLocal.c:2141
+msgid "Install in the selected directory not permitted."
+msgstr "õÓÔÁÎÏ×ËÁ × ×ÙÂÒÁÎÎÙÊ ËÁÔÁÌÏÇ ÎÅ ÒÁÚÒÅÛÅÎÁ."
+
+#: src/LYLocal.c:2146
+msgid "Just a moment, ..."
+msgstr "íÉÎÕÔËÕ, ..."
+
+#: src/LYLocal.c:2163
+msgid "Error buiding install args"
+msgstr ""
+
+#: src/LYLocal.c:2178 src/LYLocal.c:2210
+#, c-format
+msgid "Source and target are the same: %s"
+msgstr "éÓÔÏÞÎÉË É ÃÅÌØ ÓÏ×ÐÁÄÁÀÔ: %s"
+
+#: src/LYLocal.c:2188 src/LYLocal.c:2220
+#, c-format
+msgid "Already in target directory: %s"
+msgstr "õÖÅ × ÃÅÌÅ×ÏÍ ËÁÔÁÌÏÇÅ: %s"
+
+#: src/LYLocal.c:2238
+msgid "Installation complete"
+msgstr "õÓÔÁÎÏ×ËÁ ÚÁ×ÅÒÛÅÎÁ"
+
+#: src/LYLocal.c:2427
+msgid "Temporary URL or list would be too long."
+msgstr "÷ÒÅÍÅÎÎÙÊ URL ÉÌÉ ÓÐÉÓÏË ÄÏÌÖÅÎ ÂÙÔØ ÓÌÉÛËÏÍ ÄÌÉÎÎÙÍ."
+
+#: src/LYMail.c:503
+msgid "Sending"
+msgstr "ðÏÓÙÌËÁ"
+
+#: src/LYMail.c:989
+#, c-format
+msgid "The link %s :?: %s \n"
+msgstr "óÓÙÌËÁ %s :?: %s \n"
+
+#: src/LYMail.c:991
+#, c-format
+msgid "called \"%s\"\n"
+msgstr "ÎÁÚ×ÁÎÎÁÑ \"%s\"\n"
+
+#: src/LYMail.c:992
+#, c-format
+msgid "in the file \"%s\" called \"%s\"\n"
+msgstr "× ÆÁÊÌÅ \"%s\" ÎÁÚ×ÁÎÁ \"%s\"\n"
+
+#: src/LYMail.c:993
+msgid "was requested but was not available."
+msgstr "ÂÙÌÁ ÚÁÐÒÏÛÅÎÁ, ÎÏ ÏËÁÚÁÌÁÓØ ÎÅÄÏÓÔÕÐÎÁ."
+
+#: src/LYMail.c:994
+msgid "Thought you might want to know."
+msgstr "èÏÔÑ ×Ù ÍÏÖÅÔÅ ÈÏÔÅÔØ ÚÎÁÔØ."
+
+#: src/LYMail.c:996
+msgid "This message was automatically generated by"
+msgstr "üÔÏ ÓÏÏÂÝÅÎÉÅ ÂÙÌÏ Á×ÔÏÍÁÔÉÞÅÓËÉ ÓÇÅÎÅÒÉÒÏ×ÁÎÏ"
+
+#: src/LYMain.c:897
+msgid "No Winsock found, sorry."
+msgstr "ë ÓÏÖÁÌÅÎÉÀ Winsock ÎÅ ÎÁÊÄÅÎ."
+
+#: src/LYMain.c:1103
+msgid "You MUST define a valid TMP or TEMP area!\n"
+msgstr "÷Ù äïìöîù ÏÐÒÅÄÅÌÉÔØ ÐÒÁ×ÉÌØÎÕÀ ÏÂÌÁÓÔØ TMP ÉÌÉ TEMP!\n"
+
+#: src/LYMain.c:1156 src/LYMainLoop.c:5117
+msgid "No such directory"
+msgstr "îÅÔ ËÁÔÁÌÏÇÁ"
+
+#: src/LYMain.c:1378
+#, c-format
+msgid ""
+"\n"
+"Configuration file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"ëÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ %s ÎÅ ÄÏÓÔÕÐÅÎ.\n"
+"\n"
+
+#: src/LYMain.c:1388
+msgid ""
+"\n"
+"Lynx character sets not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"ëÏÄÉÒÏ×ËÉ Lynx ÎÅ ÏÐÒÅÄÅÌÅÎÙ.\n"
+"\n"
+
+#: src/LYMain.c:1417
+msgid ""
+"\n"
+"Lynx edit map not declared.\n"
+"\n"
+msgstr ""
+
+#: src/LYMain.c:1446
+#, c-format
+msgid ""
+"\n"
+"Lynx file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"æÁÊÌ Lynx %s ÎÅ ÄÏÓÔÕÐÅÎ.\n"
+"\n"
+
+#: src/LYMain.c:1704
+msgid "Warning:"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ:"
+
+#: src/LYMain.c:2247
+msgid "persistent cookies state will be changed in next session only."
+msgstr "ÓÏÓÔÏÑÎÉÅ ÐÏÓÔÏÑÎÎÙÈ cookie ÂÕÄÅÔ ÉÚÍÅÎÅÎÏ ÔÏÌØËÏ × ÓÌÅÄÕÀÝÅÍ ÓÅÁÎÓÅ."
+
+#: src/LYMain.c:2477 src/LYMain.c:2525
+#, c-format
+msgid "Lynx: ignoring unrecognized charset=%s\n"
+msgstr "Lynx: ÎÅÒÁÓÐÏÚÎÁÎÎÁÑ ËÏÄÉÒÏ×ËÁ=%s ÉÇÎÏÒÉÒÕÅÔÓÑ\n"
+
+#: src/LYMain.c:3047
+#, c-format
+msgid "%s Version %s (%s)\n"
+msgstr "%s ÷ÅÒÓÉÑ %s (%s)\n"
+
+#: src/LYMain.c:3072
+#, c-format
+msgid "Built on %s %s %s\n"
+msgstr "óÏÂÒÁÎÏ %s %s %s\n"
+
+#: src/LYMain.c:3077
+msgid "Copyrights held by the University of Kansas, CERN, and other contributors.\n"
+msgstr "á×ÔÏÒÓËÉÅ ÐÒÁ×Á ÐÒÉÎÁÄÌÅÖÁÔ ÕÎÉ×ÅÒÓÉÔÅÔÕ ëÁÎÚÁÓÁ, CERN, É ÄÒÕÇÉÍ ÕÞÁÓÔÎÉËÁÍ.\n"
+
+#: src/LYMain.c:3079
+msgid "Distributed under the GNU General Public License.\n"
+msgstr "òÁÓÐÒÏÓÔÒÁÎÑÅÔÓÑ × ÒÁÍËÁÈ õÎÉ×ÅÒÓÁÌØÎÏÊ ïÂÝÅÓÔ×ÅÎÎÏÊ ìÉÃÅÎÚÉÉ GNU.\n"
+
+#: src/LYMain.c:3081
+msgid ""
+"See http://lynx.browser.org/ and the online help for more information.\n"
+"\n"
+msgstr ""
+"óÍ. http://lynx.browser.org/ É ÐÏÍÏÝØ ÄÌÑ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ.\n"
+"\n"
+
+#: src/LYMain.c:3800
+#, c-format
+msgid "USAGE: %s [options] [file]\n"
+msgstr "éóðïìøúï÷áîéå: %s [ËÌÀÞÉ] [ÆÁÊÌ]\n"
+
+#: src/LYMain.c:3801
+msgid "Options are:\n"
+msgstr "ëÌÀÞÉ:\n"
+
+#: src/LYMain.c:4060
+#, c-format
+msgid "%s: Invalid Option: %s\n"
+msgstr "%s: îÅ×ÅÒÎÁÑ ÏÐÃÉÑ: %s\n"
+
+#: src/LYMainLoop.c:512
+#, c-format
+msgid "Internal error: Invalid mouse link %d!"
+msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: îÅ×ÅÒÎÁÑ ÓÓÙÌËÁ ÍÙÛÉ %d!"
+
+#.
+#. * Make a name for this new URL.
+#.
+#: src/LYMainLoop.c:625 src/LYMainLoop.c:5139
+msgid "A URL specified by the user"
+msgstr "URL, ÕËÁÚÁÎÎÙÊ ÐÏÌØÚÏ×ÁÔÅÌÅÍ"
+
+#: src/LYMainLoop.c:1114
+msgid "Enctype multipart/form-data not yet supported! Cannot submit."
+msgstr "Enctype multipart/form-data ÅÝÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ! îÅ ÕÄÁÅÔÓÑ ÐÏÓÌÁÔØ."
+
+#.
+#. * Make a name for this help file.
+#.
+#: src/LYMainLoop.c:3097
+msgid "Help Screen"
+msgstr "üËÒÁÎ ðÏÍÏÝÉ"
+
+#: src/LYMainLoop.c:3231
+msgid "System Index"
+msgstr "óÉÓÔÅÍÎÙÊ éÎÄÅËÓ"
+
+#: src/LYMainLoop.c:3611 src/LYMainLoop.c:5347
+msgid "Entry into main screen"
+msgstr "÷ÈÏÄ ÎÁ ÇÌÁ×ÎÙÊ ÜËÒÁÎ"
+
+#: src/LYMainLoop.c:3897
+msgid "No next document present"
+msgstr ""
+
+#: src/LYMainLoop.c:4206
+msgid "charset for this document specified explicitly, sorry..."
+msgstr "ÉÚ×ÉÎÉÔÅ, ËÏÄÉÒÏ×ËÁ ÄÌÑ ÜÔÏÇÏ ÄÏËÕÍÅÎÔÁ ÕËÁÚÁÎÁ Ñ×ÎÏ..."
+
+#: src/LYMainLoop.c:5093
+msgid "cd to:"
+msgstr "ÐÅÒÅÊÔÉ ×:"
+
+#: src/LYMainLoop.c:5120
+msgid "A component of path is not a directory"
+msgstr "ëÏÍÐÏÎÅÎÔÁ ÐÕÔÉ ÎÅ Ñ×ÌÑÅÔÓÑ ËÁÔÁÌÏÇÏÍ"
+
+#: src/LYMainLoop.c:5123
+msgid "failed to change directory"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÉÚÍÅÎÉÔØ ËÁÔÁÌÏÇ"
+
+#: src/LYMainLoop.c:6291
+msgid "Reparsing document under current settings..."
+msgstr "äÏËÕÍÅÎÔ ÒÁÚÂÉÒÁÅÔÓÑ ÚÁÎÏ×Ï Ó ÕÞÅÔÏÍ ÔÅËÕÝÉÈ ÕÓÔÁÎÏ×ÏË..."
+
+#: src/LYMainLoop.c:6579 src/LYMainLoop.c:6583
+#, c-format
+msgid "Fatal error - could not open output file %s\n"
+msgstr "æÁÔÁÌØÎÁÑ ÏÛÉÂËÁ - ÎÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ %s\n"
+
+#: src/LYMainLoop.c:7719 src/LYMainLoop.c:7892
+msgid "-index-"
+msgstr "-ÉÎÄÅËÓ-"
+
+#: src/LYMainLoop.c:7829
+msgid "lynx: Can't access startfile"
+msgstr "lynx: îÅÔ ÄÏÓÔÕÐÁ Ë ÎÁÞÁÌØÎÏÍÕ ÆÁÊÌÕ"
+
+#: src/LYMainLoop.c:7842
+msgid "lynx: Start file could not be found or is not text/html or text/plain"
+msgstr "lynx: îÁÞÁÌØÎÙÊ ÆÁÊÌ ÌÉÂÏ ÎÅ ÕÄÁÅÔÓÑ ÎÁÊÔÉ, ÌÉÂÏ ÏÎ ÎÅ text/html ÉÌÉ text/plain"
+
+#: src/LYMainLoop.c:7843
+msgid " Exiting..."
+msgstr " ÷ÙÈÏÄ..."
+
+#: src/LYMainLoop.c:7886
+msgid "-more-"
+msgstr "-ÄÁÌÅÅ-"
+
+#. Enable scrolling.
+#: src/LYNews.c:203
+msgid "You will be posting to:"
+msgstr "÷Ù ÂÕÄÅÔÅ ÐÏÓÙÌÁÔØ ×:"
+
+#.
+#. * Get the mail address for the From header,
+#. * offering personal_mail_address as default.
+#.
+#: src/LYNews.c:212
+msgid ""
+"\n"
+"\n"
+" Please provide your mail address for the From: header\n"
+msgstr ""
+"\n"
+"\n"
+" ðÏÖÁÌÕÊÓÔÁ, ÕËÁÖÉÔÅ ×ÁÛ ÐÏÞÔÏ×ÙÊ ÁÄÒÅÓ ÄÌÑ ÚÁÇÏÌÏ×ËÁ From:\n"
+
+#.
+#. * Get the Subject header, offering the current
+#. * document's title as the default if this is a
+#. * followup rather than a new post. - FM
+#.
+#: src/LYNews.c:230
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Subject: header\n"
+msgstr ""
+"\n"
+"\n"
+" ðÏÖÁÌÕÊÓÔÁ, ÕËÁÖÉÔÅ ÉÌÉ ÏÔÒÅÄÁËÔÉÒÕÊÔÅ ÚÁÇÏÌÏ×ÏË Subject:\n"
+
+#: src/LYNews.c:322
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Organization: header\n"
+msgstr ""
+"\n"
+"\n"
+" ðÏÖÁÌÕÊÓÔÁ, ÕËÁÖÉÔÅ ÉÌÉ ÏÔÒÅÄÁËÔÉÒÕÊÔÅ ÚÁÇÏÌÏ×ÏË Organization:\n"
+
+#.
+#. * Use the built in line editior.
+#.
+#: src/LYNews.c:379
+msgid ""
+"\n"
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+"\n"
+" ðÏÖÁÌÕÊÓÔÁ, ××ÅÄÉÔÅ ÎÉÖÅ ×ÁÛÅ ÓÏÏÂÝÅÎÉÅ."
+
+#: src/LYNews.c:425
+msgid "Message has no original text!"
+msgstr "óÏÏÂÝÅÎÉÅ ÎÅ ÉÍÅÅÔ ÐÅÒ×ÏÎÁÞÁÌØÎÏÇÏ ÔÅËÓÔÁ!"
+
+#: src/LYOptions.c:743
+msgid "review/edit B)ookmarks files"
+msgstr "ÐÒÏÓÍÏÔÒÅÔØ/ÏÔÒÅÄÁËÔÉÒÏ×ÁÔØ ÆÁÊÌÙ B)ÚÁËÌÁÄÏË"
+
+#: src/LYOptions.c:745
+msgid "B)ookmark file: "
+msgstr "æÁÊÌ B)ÚÁËÌÁÄÏË: "
+
+#: src/LYOptions.c:2507 src/LYOptions.c:2531
+#, c-format
+msgid "Use %s to invoke the Options menu!"
+msgstr "éÓÐÏÌØÚÕÊÔÅ %s ÄÌÑ ×ÙÚÏ×Á ÍÅÎÀ ðÁÒÁÍÅÔÒÏ×!"
+
+#: src/LYOptions.c:3208
+msgid "General Preferences"
+msgstr "ïÂÝÉÅ ðÒÅÄÐÏÞÔÅÎÉÑ"
+
+#. ***************************************************************
+#. User Mode: SELECT
+#: src/LYOptions.c:3212
+msgid "User mode"
+msgstr "òÅÖÉÍ ÐÏÌØÚÏ×ÁÔÅÌÑ"
+
+#. Editor: INPUT
+#: src/LYOptions.c:3218
+msgid "Editor"
+msgstr "òÅÄÁËÔÏÒ"
+
+#. Search Type: SELECT
+#: src/LYOptions.c:3223
+msgid "Type of Search"
+msgstr "ôÉÐ ÐÏÉÓËÁ"
+
+#. Cookies: SELECT
+#: src/LYOptions.c:3229
+msgid "Cookies"
+msgstr "Cookie"
+
+#: src/LYOptions.c:3243
+msgid "Keyboard Input"
+msgstr "÷×ÏÄ Ó ËÌÁ×ÉÁÔÕÒÙ"
+
+#. ***************************************************************
+#. Keypad Mode: SELECT
+#: src/LYOptions.c:3247
+msgid "Keypad mode"
+msgstr "òÅÖÉÍ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ËÌÁ×ÉÁÔÕÒÙ"
+
+#. Emacs keys: ON/OFF
+#: src/LYOptions.c:3253
+msgid "Emacs keys"
+msgstr "ëÌÁ×ÉÛÉ Emacs"
+
+#. VI Keys: ON/OFF
+#: src/LYOptions.c:3259
+msgid "VI keys"
+msgstr "ëÌÁ×ÉÛÉ VI"
+
+#. Line edit style: SELECT
+#. well, at least 2 line edit styles available
+#: src/LYOptions.c:3266
+msgid "Line edit style"
+msgstr ""
+
+#. Keyboard layout: SELECT
+#: src/LYOptions.c:3278
+#, fuzzy
+msgid "Keyboard layout"
+msgstr "÷×ÏÄ Ó ËÌÁ×ÉÁÔÕÒÙ"
+
+#.
+#. * Display and Character Set
+#.
+#: src/LYOptions.c:3291
+msgid "Display and Character Set"
+msgstr "ïÔÏÂÒÁÖÅÎÉÅ É îÁÂÏÒ óÉÍ×ÏÌÏ×"
+
+#. ***************************************************************
+#. Display Character Set: SELECT
+#: src/LYOptions.c:3295
+msgid "Display character set"
+msgstr "ëÏÄÉÒÏ×ËÁ ÏÔÏÂÒÁÖÅÎÉÑ"
+
+#: src/LYOptions.c:3324
+msgid "Assumed document character set"
+msgstr "ðÏÄÒÁÚÕÍÅ×ÁÅÍÁÑ ËÏÄÉÒÏ×ËÁ ÄÏËÕÍÅÎÔÁ"
+
+#.
+#. * Since CJK people hardly mixed with other world
+#. * we split the header to make it more readable:
+#. * "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
+#.
+#: src/LYOptions.c:3344
+msgid "CJK mode"
+msgstr "òÅÖÉÍ CJK"
+
+#: src/LYOptions.c:3346
+msgid "Raw 8-bit"
+msgstr "îÅÏÂÒÁÂÏÔÁÎÎÙÊ 8-ÂÉÔÎÙÊ ÒÅÖÉÍ"
+
+#. X Display: INPUT
+#: src/LYOptions.c:3354
+msgid "X Display"
+msgstr "üËÒÁÎ X"
+
+#.
+#. * Document Appearance
+#.
+#: src/LYOptions.c:3360
+msgid "Document Appearance"
+msgstr "÷ÎÅÛÎÉÊ ×ÉÄ ÄÏËÕÍÅÎÔÁ"
+
+#: src/LYOptions.c:3366
+msgid "Show color"
+msgstr "ðÏËÁÚÙ×ÁÔØ Ã×ÅÔ"
+
+#. Show cursor: ON/OFF
+#: src/LYOptions.c:3390
+msgid "Show cursor"
+msgstr "ðÏËÁÚÙ×ÁÔØ ËÕÒÓÏÒ"
+
+#. Select Popups: ON/OFF
+#: src/LYOptions.c:3396
+msgid "Popups for select fields"
+msgstr "÷ÓÐÌÙ×ÁÀÝÉÅ ÍÅÎÀ ÄÌÑ ×ÙÂÒÁÎÎÙÈ ÐÏÌÅÊ"
+
+#. HTML error recovery: SELECT
+#: src/LYOptions.c:3403
+msgid "HTML error recovery"
+msgstr "÷ÏÓÓÔÁÎÏ×ÌÅÎÉÅ ÏÔ ÏÛÉÂÏË × HTML"
+
+#. Show Images: SELECT
+#: src/LYOptions.c:3410
+msgid "Show images"
+msgstr "ðÏËÁÚÁÔØ ÉÚÏÂÒÁÖÅÎÉÑ"
+
+#. Verbose Images: ON/OFF
+#: src/LYOptions.c:3424
+msgid "Verbose images"
+msgstr "úÁÍÅÎÑÔØ ÉÚÏÂÒÁÖÅÎÉÑ ÎÁ ÁÄÒÅÓÁ"
+
+#.
+#. * Headers Transferred to Remote Servers
+#.
+#: src/LYOptions.c:3432
+msgid "Headers Transferred to Remote Servers"
+msgstr "úÁÇÏÌÏ×ËÉ, ÐÅÒÅÄÁÎÎÙÅ ÎÁ ÕÄÁÌÅÎÎÙÅ ÓÅÒ×ÅÒÙ"
+
+#. ***************************************************************
+#. Mail Address: INPUT
+#: src/LYOptions.c:3436
+msgid "Personal mail address"
+msgstr "ðÅÒÓÏÎÁÌØÎÙÊ ÐÏÞÔÏ×ÙÊ ÁÄÒÅÓ"
+
+#. Preferred Document Character Set: INPUT
+#: src/LYOptions.c:3441
+msgid "Preferred document character set"
+msgstr "ðÒÅÄÐÏÞÉÔÁÅÍÁÑ ËÏÄÉÒÏ×ËÁ ÄÏËÕÍÅÎÔÁ"
+
+#. Preferred Document Language: INPUT
+#: src/LYOptions.c:3446
+msgid "Preferred document language"
+msgstr "ðÒÅÄÐÏÞÉÔÁÅÍÙÊ ÑÚÙË ÄÏËÕÍÅÎÔÁ"
+
+#: src/LYOptions.c:3452
+msgid "User-Agent header"
+msgstr "úÁÇÏÌÏ×ÏË User-Agent"
+
+#.
+#. * Listing and Accessing Files
+#.
+#: src/LYOptions.c:3460
+msgid "Listing and Accessing Files"
+msgstr ""
+
+#. ***************************************************************
+#. FTP sort: SELECT
+#: src/LYOptions.c:3464
+msgid "FTP sort criteria"
+msgstr "ëÒÉÔÅÒÉÊ ÓÏÒÔÉÒÏ×ËÉ FTP"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3471
+msgid "Local directory sort criteria"
+msgstr "ëÒÉÔÅÒÉÊ ÓÏÒÔÉÒÏ×ËÉ ÌÏËÁÌØÎÏÇÏ ËÁÔÁÌÏÇÁ"
+
+#: src/LYOptions.c:3479
+msgid "Show dot files"
+msgstr "ðÏËÁÚÙ×ÁÔØ dot-ÆÁÊÌÙ"
+
+#: src/LYOptions.c:3487
+msgid "Execution links"
+msgstr "÷ÙÐÏÌÎÅÎÉÅ ÓÓÙÌÏË"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3507
+msgid "Show transfer rate"
+msgstr "ðÏËÁÚÙ×ÁÔØ ÓËÏÒÏÓÔØ ÐÅÒÅÄÁÞÉ"
+
+#.
+#. * Special Files and Screens
+#.
+#: src/LYOptions.c:3516
+msgid "Special Files and Screens"
+msgstr "óÐÅÃÉÁÌØÎÙÅ ÆÁÊÌÙ É ÜËÒÁÎÙ"
+
+#: src/LYOptions.c:3521
+msgid "Multi-bookmarks"
+msgstr "íÎÏÖÅÓÔ×ÅÎÎÙÅ ÚÁËÌÁÄËÉ"
+
+#: src/LYOptions.c:3529
+msgid "Review/edit Bookmarks files"
+msgstr "ðÒÏÓÍÏÔÒÅÔØ/ÏÔÒÅÄÁËÔÉÒÏ×ÁÔØ ÆÁÊÌÁ ÚÁËÌÁÄÏË"
+
+#: src/LYOptions.c:3531
+msgid "Goto multi-bookmark menu"
+msgstr "ðÅÒÅÈÏÄ Ë ÍÅÎÀ ÍÎÏÖÅÓÔ×ÅÎÎÙÈ ÚÁËÌÁÄÏË"
+
+#: src/LYOptions.c:3533
+msgid "Bookmarks file"
+msgstr "æÁÊÌ ÚÁËÌÁÄÏË"
+
+#. Visited Pages: SELECT
+#: src/LYOptions.c:3539
+msgid "Visited Pages"
+msgstr "ðÏÓÅÝÅÎÎÙÅ ÓÔÒÁÎÉÃÙ"
+
+#: src/LYPrint.c:959
+msgid " Print job complete.\n"
+msgstr " úÁÄÁÞÁ ÐÅÞÁÔÉ ÚÁ×ÅÒÛÅÎÁ.\n"
+
+#: src/LYPrint.c:1296
+msgid "Document:"
+msgstr "äÏËÕÍÅÎÔ:"
+
+#: src/LYPrint.c:1297
+msgid "Number of lines:"
+msgstr "þÉÓÌÏ ÓÔÒÏË:"
+
+#: src/LYPrint.c:1298
+msgid "Number of pages:"
+msgstr "þÉÓÌÏ ÓÔÒÁÎÉÃ:"
+
+#: src/LYPrint.c:1299
+msgid "pages"
+msgstr "ÓÔÒÁÎÉÃ"
+
+#: src/LYPrint.c:1299
+msgid "page"
+msgstr "ÓÔÒÁÎÉÃÁ"
+
+#: src/LYPrint.c:1300
+msgid "(approximately)"
+msgstr "(ÐÒÉÂÌÉÚÉÔÅÌØÎÏ)"
+
+#: src/LYPrint.c:1305
+msgid "Some print functions have been disabled!"
+msgstr "îÅËÏÔÏÒÙÅ ÆÕÎËÃÉÉ ÐÅÞÁÔÉ ÂÙÌÉ ÏÔËÌÀÞÅÎÙ!"
+
+#: src/LYPrint.c:1309
+msgid "Standard print options:"
+msgstr "óÔÁÎÄÁÒÔÎÙÅ ÏÐÃÉÉ ÐÅÞÁÔÉ:"
+
+#: src/LYPrint.c:1310
+msgid "Print options:"
+msgstr "ïÐÃÉÉ ÐÅÞÁÔÉ:"
+
+#: src/LYPrint.c:1316
+msgid "Save to a local file"
+msgstr "óÏÈÒÁÎÉÔØ × ÌÏËÁÌØÎÙÊ ÆÁÊÌ"
+
+#: src/LYPrint.c:1318
+msgid "Save to disk disabled"
+msgstr "óÏÈÒÁÎÅÎÉÅ ÎÁ ÄÉÓË ÏÔËÌÀÞÅÎÏ"
+
+#: src/LYPrint.c:1324
+msgid "Mail the file"
+msgstr "ðÏÓÌÁÔØ ÐÏÞÔÏÊ ÆÁÊÌ"
+
+#: src/LYPrint.c:1330
+msgid "Print to the screen"
+msgstr "îÁÐÅÞÁÔÁÔØ ÎÁ ÜËÒÁÎ"
+
+#: src/LYPrint.c:1334
+msgid "Print out on a printer attached to your vt100 terminal"
+msgstr "îÁÐÅÞÁÔÁÔØ ÎÁ ÐÒÉÎÔÅÒ, ÐÏÄÓÏÅÄÉÎÅÎÎÙÊ Ë ×ÁÛÅÍÕ ÔÅÒÍÉÎÁÌÕ vt100"
+
+#: src/LYReadCFG.c:340
+msgid ""
+"Syntax Error parsing COLOR in configuration file:\n"
+"The line must be of the form:\n"
+"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
+"\n"
+"Here FOREGROUND and BACKGROUND must be one of:\n"
+"The special strings 'nocolor' or 'default', or\n"
+msgstr ""
+"óÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ ÐÒÉ ÒÁÚÂÏÒÅ COLOR × ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÍ ÆÁÊÌÅ:\n"
+"óÔÒÏËÁ ÄÏÌÖÎÁ ÉÍÅÔØ ÆÏÒÍÕ:\n"
+"COLOR:ãåìïå:ã÷åô:ã÷åô_æïîá\n"
+"\n"
+"úÄÅÓØ ã÷åô É ã÷åô_æïîá ÄÏÌÖÎÙ ÂÙÔØ ÓÐÅÃÉÁÌØÎÏÊ ÓÔÒÏËÏÊ:\n"
+"'nocolor' ÉÌÉ 'default', ÉÌÉ\n"
+
+#: src/LYReadCFG.c:353
+msgid "Offending line:"
+msgstr "ðÏ×ÒÅÖÄÅÎÎÁÑ ÓÔÒÏËÁ:"
+
+#: src/LYReadCFG.c:660
+#, c-format
+msgid "key remapping of %s to %s for %s failed\n"
+msgstr "ÏÛÉÂËÁ ÐÒÉ ÐÅÒÅÎÁÚÎÁÞÅÎÉÉ ËÌÁ×ÉÛÉ %s × %s ÄÌÑ %s\n"
+
+#: src/LYReadCFG.c:667
+#, c-format
+msgid "key remapping of %s to %s failed\n"
+msgstr "ÐÅÒÅÎÁÚÎÁÞÅÎÉÅ ËÌÁ×ÉÛÉ %s × %s ÚÁËÏÎÞÉÌÏÓØ ÎÅÕÄÁÞÅÊ\n"
+
+#: src/LYReadCFG.c:688
+#, c-format
+msgid "invalid line-editor selection %s for key %s, selecting all\n"
+msgstr "ÎÅ×ÅÒÎÙÊ ×ÙÂÏÒ × ÒÅÄÁËÔÏÒÅ ÓÔÒÏËÉ %s ÄÌÑ ËÌÁ×ÉÛÉ %s, ×ÙÂÒÁÎÏ ×ÓÅ\n"
+
+#: src/LYReadCFG.c:715 src/LYReadCFG.c:728
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"
+msgstr "ÏÛÉÂËÁ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÒÉ×ÑÚËÉ ËÌÁ×ÉÛÉ ÒÅÄÁËÔÏÒÁ ÓÔÒÏËÉ %s (0x%x) × 0x%x ÄÌÑ %s\n"
+
+#: src/LYReadCFG.c:733
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) for %s failed\n"
+msgstr "ÏÛÉÂËÁ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÐÒÉ×ÑÚËÉ ËÌÁ×ÉÛÉ ÒÅÄÁËÔÏÒÁ ÓÔÒÏËÉ %s (0x%x) ÄÌÑ %s\n"
+
+#: src/LYReadCFG.c:838
+#, c-format
+msgid "Lynx: cannot start, CERN rules file %s is not available\n"
+msgstr "Lynx: ÏÛÉÂËÁ ÓÔÁÒÔÁ, ÆÁÊÌ Ó ÐÒÁ×ÉÌÁÍÉ CERN %s ÎÅ ÄÏÓÔÕÐÅÎ\n"
+
+#: src/LYReadCFG.c:840
+msgid "(no name)"
+msgstr "(ÎÅÔ ÉÍÅÎÉ)"
+
+#: src/LYReadCFG.c:1658
+#, c-format
+msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
+msgstr "âÏÌØÛÅ ÞÅÍ %d ×ÌÏÖÅÎÎÙÈ ×ËÌÀÞÅÎÉÊ lynx.cfg -- ×ÏÚÍÏÖÎÏ ÃÉËÌ?!?\n"
+
+#: src/LYReadCFG.c:1660
+#, c-format
+msgid "Last attempted include was '%s',\n"
+msgstr "ðÏÓÌÅÄÎÑÑ ÐÏÐÙÔËÁ ×ËÌÀÞÅÎÉÑ ÂÙÌÁ '%s',\n"
+
+#: src/LYReadCFG.c:1661
+#, c-format
+msgid "included from '%s'.\n"
+msgstr "×ËÌÀÞÅÎÏ ÉÚ '%s'.\n"
+
+#: src/LYReadCFG.c:2116 src/LYReadCFG.c:2129 src/LYReadCFG.c:2165
+msgid "The following is read from your lynx.cfg file."
+msgstr "óÌÅÄÕÀÝÅÅ ÞÉÔÁÅÔÓÑ ÉÚ ×ÁÛÅÇÏ ÆÁÊÌÁ lynx.cfg."
+
+#: src/LYReadCFG.c:2117 src/LYReadCFG.c:2130
+msgid "Please read the distribution"
+msgstr "ðÏÖÁÌÕÊÓÔÁ, ÐÒÏÞÉÔÁÊÔÅ ÉÓÈÏÄÎÙÊ"
+
+#: src/LYReadCFG.c:2123 src/LYReadCFG.c:2133
+msgid "for more comments."
+msgstr "ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ËÏÍÍÅÎÔÁÒÉÅ×."
+
+#: src/LYReadCFG.c:2147
+msgid "RELOAD THE CHANGES"
+msgstr "ïâîï÷éôø éúíåîåîéñ"
+
+#: src/LYReadCFG.c:2156
+msgid "Your primary configuration"
+msgstr "÷ÁÛÁ ÏÓÎÏ×ÎÁÑ ËÏÎÆÉÇÕÒÁÃÉÑ"
+
+#: src/LYShowInfo.c:129
+msgid "Directory that you are currently viewing"
+msgstr "ëÁÔÁÌÏÇ, ËÏÔÏÒÙÊ ×Ù ÓÅÊÞÁÓ ÐÒÏÓÍÁÔÒÉ×ÁÅÔÅ"
+
+#: src/LYShowInfo.c:132
+msgid "Name:"
+msgstr "éÍÑ:"
+
+#: src/LYShowInfo.c:135
+msgid "URL:"
+msgstr "URL:"
+
+#: src/LYShowInfo.c:146
+msgid "Directory that you have currently selected"
+msgstr "ëÁÔÁÌÏÇ, ËÏÔÏÒÙÊ ×Ù ÓÅÊÞÁÓ ×ÙÂÒÁÌÉ"
+
+#: src/LYShowInfo.c:149
+msgid "File that you have currently selected"
+msgstr "æÁÊÌ, ËÏÔÏÒÙÊ ×Ù ÓÅÊÞÁÓ ×ÙÂÒÁÌÉ"
+
+#: src/LYShowInfo.c:153
+msgid "Symbolic link that you have currently selected"
+msgstr "óÉÍ×ÏÌØÎÁÑ ÓÓÙÌËÁ, ËÏÔÏÒÕÀ ×Ù ÓÅÊÞÁÓ ×ÙÂÒÁÌÉ"
+
+#: src/LYShowInfo.c:157
+msgid "Item that you have currently selected"
+msgstr "üÌÅÍÅÎÔ, ËÏÔÏÒÙÊ ×Ù ÓÅÊÞÁÓ ×ÙÂÒÁÌÉ"
+
+#: src/LYShowInfo.c:159
+msgid "Full name:"
+msgstr "ðÏÌÎÏÅ ÉÍÑ:"
+
+#: src/LYShowInfo.c:168
+msgid "Unable to follow link"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÌÅÄÏ×ÁÔØ ÐÏ ÓÓÙÌËÅ"
+
+#: src/LYShowInfo.c:170
+msgid "Points to file:"
+msgstr "õËÁÚÙ×ÁÅÔ ÎÁ ÆÁÊÌ:"
+
+#: src/LYShowInfo.c:175
+msgid "Name of owner:"
+msgstr "éÍÑ ×ÌÁÄÅÌØÃÁ:"
+
+#: src/LYShowInfo.c:178
+msgid "Group name:"
+msgstr "éÍÑ ÇÒÕÐÐÙ:"
+
+#: src/LYShowInfo.c:181
+msgid "File size:"
+msgstr "òÁÚÍÅÒ ÆÁÊÌÁ:"
+
+#: src/LYShowInfo.c:187
+msgid "Creation date:"
+msgstr "äÁÔÁ ÓÏÚÄÁÎÉÑ:"
+
+#: src/LYShowInfo.c:190
+msgid "Last modified:"
+msgstr "ðÏÓÌÅÄÎÑÑ ÍÏÄÉÆÉËÁÃÉÑ:"
+
+#: src/LYShowInfo.c:193
+msgid "Last accessed:"
+msgstr "ðÏÓÌÅÄÎÉÊ ÄÏÓÔÕÐ:"
+
+#: src/LYShowInfo.c:195
+msgid "Access Permissions"
+msgstr "ðÒÁ×Á ÄÏÓÔÕÐÁ"
+
+#: src/LYShowInfo.c:261
+msgid "File that you are currently viewing"
+msgstr "æÁÊÌ, ËÏÔÏÒÙÊ ×Ù ÓÅÊÞÁÓ ÐÒÏÓÍÁÔÒÉ×ÁÅÔÅ"
+
+#: src/LYShowInfo.c:266 src/LYShowInfo.c:375
+msgid "Linkname:"
+msgstr "éÍÑ ÓÓÙÌËÉ:"
+
+#: src/LYShowInfo.c:279 src/LYShowInfo.c:291
+msgid "Charset:"
+msgstr "ëÏÄÉÒÏ×ËÁ:"
+
+#: src/LYShowInfo.c:297
+msgid "Server:"
+msgstr "óÅÒ×ÅÒ:"
+
+#: src/LYShowInfo.c:300
+msgid "Date:"
+msgstr "äÁÔÁ:"
+
+#: src/LYShowInfo.c:303
+msgid "Last Mod:"
+msgstr "ðÏÓÌ ÍÏÄ:"
+
+#: src/LYShowInfo.c:309
+msgid "&nbsp;Expires:"
+msgstr "&nbsp;õÓÔÁÒÅ×ÁÅÔ:"
+
+#: src/LYShowInfo.c:313
+msgid "Cache-Control:"
+msgstr "Cache-Control:"
+
+#: src/LYShowInfo.c:317
+msgid "Content-Length:"
+msgstr "Content-Length:"
+
+#: src/LYShowInfo.c:322
+msgid "Language:"
+msgstr "ñÚÙË:"
+
+#: src/LYShowInfo.c:329
+msgid "Post Data:"
+msgstr "äÁÎÎÙÅ Post:"
+
+#: src/LYShowInfo.c:331
+msgid "Post Content Type:"
+msgstr "ôÉÐ ÓÏÄÅÒÖÉÍÏÇÏ Post:"
+
+#: src/LYShowInfo.c:340
+msgid "Owner(s):"
+msgstr "÷ÌÁÄÅÌØÃÙ:"
+
+#: src/LYShowInfo.c:343
+msgid "size:"
+msgstr "ÒÁÚÍÅÒ:"
+
+#: src/LYShowInfo.c:343
+msgid "lines"
+msgstr "ÓÔÒÏË"
+
+#: src/LYShowInfo.c:346
+msgid "mode:"
+msgstr "ÒÅÖÉÍ:"
+
+#: src/LYShowInfo.c:348
+msgid "forms mode"
+msgstr ""
+
+#: src/LYShowInfo.c:350
+msgid "source"
+msgstr "ÉÓÔÏÞÎÉË"
+
+#: src/LYShowInfo.c:350
+msgid "normal"
+msgstr "ÏÂÙÞÎÙÊ"
+
+#: src/LYShowInfo.c:351
+msgid ", safe"
+msgstr ", ÂÅÚÏÐÁÓÎÙÊ"
+
+#: src/LYShowInfo.c:352
+msgid ", via internal link"
+msgstr ", ÞÅÒÅÚ ×ÎÕÔÒÅÎÎÀÀ ÓÓÙÌËÕ"
+
+#: src/LYShowInfo.c:358
+msgid ", no-cache"
+msgstr ", ÎÅ ËÜÛÉÒÏ×ÁÔØ"
+
+#: src/LYShowInfo.c:360
+msgid ", ISMAP script"
+msgstr ", ISMAP-ÓËÒÉÐÔ"
+
+#: src/LYShowInfo.c:362
+msgid ", bookmark file"
+msgstr ", ÆÁÊÌ ÚÁËÌÁÄÏË"
+
+#: src/LYShowInfo.c:371
+msgid "Link that you currently have selected"
+msgstr "óÓÙÌËÁ, ËÏÔÏÒÕÀ ×Ù ÓÅÊÞÁÓ ×ÙÂÒÁÌÉ"
+
+#: src/LYShowInfo.c:384
+msgid "Method:"
+msgstr "íÅÔÏÄ:"
+
+#: src/LYShowInfo.c:389
+msgid "Enctype:"
+msgstr "ôÉÐ ÛÉÆÒÏ×ÁÎÉÑ:"
+
+#: src/LYShowInfo.c:401
+msgid "(Form field)"
+msgstr "(ðÏÌÅ ÆÏÒÍÙ)"
+
+#: src/LYShowInfo.c:416
+msgid "No Links on the current page"
+msgstr "îÁ ÜÔÏÊ ÓÔÒÁÎÉÃÅ ÎÅÔ ÓÓÙÌÏË"
+
+#: src/LYStyle.c:250
+#, c-format
+msgid ""
+"Syntax Error parsing style in lss file:\n"
+"[%s]\n"
+"The line must be of the form:\n"
+"OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
+"where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+msgstr ""
+"óÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ ÐÒÉ ÒÁÚÂÏÒÅ ÓÔÉÌÑ × lss ÆÁÊÌÅ:\n"
+"[%s]\n"
+"óÔÒÏËÁ ÄÏÌÖÎÁ ÉÍÅÔØ ÆÏÒÍÕ:\n"
+"ïâÿåëô:MONO:ã÷åô (Ô.Å. em:bold:brightblue:white),\n"
+"ÇÄÅ ïâÿåëô - ÏÄÎÏ ÉÚ EM,STRONG,B,I,U,BLINK É Ô.Ä.\n"
+"\n"
+
+#: src/LYTraversal.c:107
+msgid "here is a list of the history stack so that you may rebuild"
+msgstr "ÜÔÏ ÓÐÉÓÏË ÉÓÔÏÒÉÉ, ÔÁË ÞÔÏ ×Ù ÍÏÖÅÔÅ ÐÅÒÅÓÔÒÏÉÔØ"
+
+#: src/LYUpload.c:78
+msgid "ERROR! - upload command is misconfigured"
+msgstr "ïûéâëá! - ËÏÍÁÎÄÁ ÚÁÇÒÕÚËÉ ÎÅÐÒÁ×ÉÌØÎÏ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÎÁ"
+
+#: src/LYUpload.c:100
+msgid "Illegal redirection \"../\" found! Request ignored."
+msgstr "îÁÊÄÅÎÏ ÎÅ×ÅÒÎÏÅ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÅ \"../\"! úÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ."
+
+#: src/LYUpload.c:103
+msgid "Illegal character \"/\" found! Request ignored."
+msgstr "îÁÊÄÅÎ ÎÅÄÏÐÕÓÔÉÍÙÊ ÓÉÍ×ÏÌ \"/\"! úÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ."
+
+#: src/LYUpload.c:106
+msgid "Illegal redirection using \"~\" found! Request ignored."
+msgstr "îÁÊÄÅÎÏ ÎÅ×ÅÒÎÏÅ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÉÅ, ÉÓÐÏÌØÚÕÀÝÅÅ \"~\"! úÁÐÒÏÓ ÉÇÎÏÒÉÒÏ×ÁÎ."
+
+#: src/LYUpload.c:163
+msgid "Unable to upload file."
+msgstr "îÅ ÕÄÁÅÔÓÑ ÚÁÇÒÕÚÉÔØ ÆÁÊÌ."
+
+#: src/LYUpload.c:214
+msgid "Upload To:"
+msgstr "úÁÇÒÕÚÉÔØ ×:"
+
+#: src/LYUpload.c:215
+msgid "Upload options:"
+msgstr "ïÐÃÉÉ ÚÁÇÒÕÚËÉ:"
+
+#: src/LYUtils.c:3075
+msgid "Unexpected access protocol for this URL scheme."
+msgstr "îÅÏÖÉÄÁÎÎÙÊ ÐÒÏÔÏËÏÌ ÄÏÓÔÕÐÁ ÄÌÑ ÜÔÏÊ ÓÈÅÍÙ URL."
+
+#: src/LYUtils.c:3915
+msgid "Too many tempfiles"
+msgstr ""
+
+#: src/LYUtils.c:4217
+#, fuzzy
+msgid "unknown restriction"
+msgstr "ïÇÒÁÎÉÞÅÎÉÊ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÙ.\n"
+
+#: src/LYUtils.c:4248
+msgid "No restrictions set.\n"
+msgstr "ïÇÒÁÎÉÞÅÎÉÊ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÙ.\n"
+
+#: src/LYUtils.c:4251
+msgid "Restrictions set:\n"
+msgstr "õÓÔÁÎÏ×ÌÅÎÎÙÅ ÏÇÒÁÎÉÞÅÎÉÑ:\n"
+
+#: src/LYUtils.c:5601
+msgid "Ignoring invalid HOME"
+msgstr "îÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ HOME ÉÇÎÏÒÉÒÏ×ÁÎÏ"
+
+#: src/LYrcFile.c:20
+msgid "Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n"
+msgstr ""
+
+#: src/LYrcFile.c:242
+msgid ""
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
+msgstr ""
+"accept_all_cookies ÐÏÚ×ÏÌÑÅÔ Lynx Á×ÔÏÍÁÔÉÞÅÓËÉ ÐÒÉÎÉÍÁÔØ ×ÓÅ cookie.\n"
+"ðÏ ÕÍÏÌÞÁÎÉÀ ÜÔÁ ÏÐÃÉÑ ÕÓÔÁÎÏ×ÌÅÎÁ × \"FALSE\", ÞÔÏ ÂÕÄÅÔ ÚÁÐÒÁÛÉ×ÁÔØ\n"
+"ÐÏÄÔ×ÅÒÖÄÅÎÉÅ ÄÌÑ ËÁÖÄÏÇÏ cookie. õÓÔÁÎÏ×ÉÔÅ accept_all_cookies × \"TRUE\"\n"
+"ÞÔÏÂÙ ÐÒÉÎÉÍÁÔØ ×ÓÅ cookie.\n"
+
+#: src/LYrcFile.c:249
+msgid ""
+"bookmark_file specifies the name and location of the default bookmark\n"
+"file into which the user can paste links for easy access at a later\n"
+"date.\n"
+msgstr ""
+"bookmark_file ÏÐÒÅÄÅÌÑÅÔ ÉÍÑ É ÍÅÓÔÏÐÏÌÏÖÅÎÉÅ ÆÁÊÌÁ ÚÁËÌÁÄÏË ÐÏ ÕÍÏÌÞÁÎÉÀ,\n"
+"× ËÏÔÏÒÙÊ ÐÏÌØÚÏ×ÁÔÅÌØ ÍÏÖÅÔ ÐÏÍÅÝÁÔØ ÓÓÙÌËÉ ÄÌÑ ÐÒÏÓÔÏÇÏ ÄÏÓÔÕÐÁ\n"
+"× ÂÕÄÕÝÅÍ.\n"
+
+#: src/LYrcFile.c:254
+msgid ""
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
+msgstr ""
+"åÓÌÉ case_sensitive_searching ÎÁÈÏÄÉÔÓÑ × ÓÏÓÔÏÑÎÉÉ \"on\", ÔÏ ËÏÇÄÁ\n"
+"ÐÏÌØÚÏ×ÁÔÅÌØ ×ÙÚÙ×ÁÅÔ ÐÏÉÓË ÉÓÐÏÌØÚÕÑ ËÌÁ×ÉÛÉ 's' ÉÌÉ '/', ×ÙÐÏÌÎÑÅÍÙÊ ÐÏÉÓË\n"
+"ÂÕÄÅÔ ÐÒÏÉÚ×ÏÄÉÔØÓÑ Ó ÕÞÅÔÏÍ ÒÅÇÉÓÔÒÁ ÓÉÍ×ÏÌÏ×, ×ÍÅÓÔÏ ÐÏÉÓËÁ âåú ÕÞÅÔÁ\n"
+"ÒÅÇÉÓÔÒÁ. úÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ ÏÂÙÞÎÏ \"off\".\n"
+
+#: src/LYrcFile.c:259
+msgid ""
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
+msgstr ""
+"ïÐÒÅÄÅÌÅÎÉÅ character_set ËÏÎÔÒÏÌÉÒÕÅÔ ÐÒÅÄÓÔÁ×ÌÅÎÉÅ 8-ÂÉÔÎÙÈ\n"
+"ÓÉÍ×ÏÌÏ× ÄÌÑ ×ÁÛÅÇÏ ÔÅÒÍÉÎÁÌÁ. åÓÌÉ 8-ÂÉÔÎÙÅ ÓÉÍ×ÏÌÙ ÎÅ ÏÔÏÂÒÁÖÁÀÔÓÑ\n"
+"ËÏÒÒÅËÔÎÏ ÎÁ ×ÁÛÅÍ ÜËÒÁÎÅ, ×Ù ÍÏÖÅÔÅ ÐÏÐÒÏÂÏ×ÁÔØ ÐÅÒÅÊÔÉ Ë ÄÒÕÇÏÍÕ 8-ÂÉÔÎÏÍÕ\n"
+"ÎÁÂÏÒÕ ÉÌÉ ÉÓÐÏÌØÚÏ×ÁÔØ 7-ÂÉÔÎÙÅ ÐÒÉÂÌÉÖÅÎÉÑ ÓÉÍ×ÏÌÏ×.\n"
+"ôÅËÕÝÉÍÉ ÐÒÁ×ÉÌØÎÙÍÉ ËÏÄÉÒÏ×ËÁÍÉ Ñ×ÌÑÀÔÓÑ:\n"
+
+#: src/LYrcFile.c:266
+msgid ""
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
+msgstr ""
+"cookie_accept_domains É cookie_reject_domains - ÓÐÉÓËÉ ÄÏÍÅÎÏ×, ÒÁÚÄÅÌÅÎÎÙÅ\n"
+"ÚÁÐÑÔÙÍÉ, ÏÔ ËÏÔÏÒÙÈ Lynx ÄÏÌÖÅÎ Á×ÔÏÍÁÔÉÞÅÓËÉ ÐÒÉÎÉÍÁÔØ ÉÌÉ\n"
+"ÏÔ×ÅÒÇÁÔØ ×ÓÅ cookie. åÓÌÉ ÄÏÍÅÎ ÕËÁÚÁÎ × ÏÂÏÉÈ ÓÐÉÓËÁÈ, ×ÙÓÛÉÊ\n"
+"ÐÒÉÏÒÉÔÅÔ ÉÍÅÅÔ ×ÔÏÒÏÊ ÓÐÉÓÏË (ÏÔ×ÅÒÇÁÔØ). ðÁÒÁÍÅÔÒ accept_all_cookies\n"
+"ÚÁÍÅÝÁÅÔ ×ÓÅ ÕÓÔÁÎÏ×ËÉ, ÓÄÅÌÁÎÎÙÅ Ó ÐÏÍÏÝØÀ ÜÔÉÈ ÓÐÉÓËÏ×.\n"
+
+#: src/LYrcFile.c:274
+msgid ""
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
+msgstr ""
+"cookie_file ÏÐÒÅÄÅÌÑÅÔ ÆÁÊÌ, ÉÚ ËÏÔÏÒÏÇÏ ÂÕÄÕÔ ÓÞÉÔÙ×ÁÔØÓÑ ÐÏÓÔÏÑÎÎÙÅ cookie.\n"
+"ðÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÅÔÓÑ ~/.lynx_cookies.\n"
+
+#: src/LYrcFile.c:279
+msgid ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
+msgstr ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, É\n"
+"cookie_query_invalid_domains - ÜÔÏ ÓÐÉÓËÉ ÄÏÍÅÎÏ×, ÒÁÚÄÅÌÅÎÎÙÈ ÚÁÐÑÔÙÍÉ,\n"
+"ËÏÔÏÒÙÅ ÐÒÏ×ÅÒÑÀÔÓÑ ÎÁ ÐÒÁ×ÉÌØÎÏÓÔØ Ó ÒÁÚÌÉÞÎÏÊ ÓÔÅÐÅÎØÀ. åÓÌÉ ÄÏÍÅÎ\n"
+"ÎÁÈÏÄÉÔÓÑ × ÓÐÉÓËÅ ÖÅÓÔËÏÊ (strict) ÐÒÏ×ÅÒËÉ, ÔÏ ÂÕÄÅÔ ÔÒÅÂÏ×ÁÔØÓÑ ÔÏÞÎÏÅ\n"
+"ÓÏÏÔ×ÅÔÓÔ×ÉÅ RFC2109. äÏÍÅÎÕ, ÎÁÈÏÄÑÝÅÍÕÓÑ × ÓÐÉÓËÅ ÍÑÇËÏÊ (loose) ÐÒÏ×ÅÒËÉ,\n"
+"ÂÕÄÅÔ ÒÁÚÒÅÛÅÎÏ ÕÓÔÁÎÁ×ÌÉ×ÁÔØ cookie Ó ÎÅÐÒÁ×ÉÌØÎÙÍÉ ÁÔÒÉÂÕÔÁÍÉ\n"
+"ÐÕÔÉ ÉÌÉ ÄÏÍÅÎÁ. ðÏ ÕÍÏÌÞÁÎÉÀ ×ÓÅ ÄÏÍÅÎÙ ÚÁÐÒÁÛÉ×ÁÀÔ ÐÏÄÔ×ÅÒÖÄÅÎÉÅ Õ\n"
+"ÐÏÌØÚÏ×ÁÔÅÌÑ × ÓÌÕÞÁÅ ÎÅÐÒÁ×ÉÌØÎÏÇÏ ÚÎÁÞÅÎÉÑ ÐÕÔÉ ÉÌÉ ÄÏÍÅÎÁ.\n"
+
+#: src/LYrcFile.c:292
+msgid ""
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
+msgstr ""
+"dir_list_styles ÏÐÒÅÄÅÌÑÅÔ ÓÔÉÌØ ÏÔÏÂÒÁÖÅÎÉÑ ÓÏÄÅÒÖÉÍÏÇÏ ËÁÔÁÌÏÇÁ\n"
+"ÐÒÉ DIRED_SUPPORT (ÅÓÌÉ ÒÅÁÌÉÚÏ×ÁÎÏ). ðÏ ÕÍÏÌÞÁÎÉÀ ÕÓÔÁÎÏ×ÌÅÎÏ \"MIXED_STYLE\",\n"
+"ÞÔÏ ÓÏÒÔÉÒÕÅÔ ÆÁÊÌÙ É ËÁÔÁÌÏÇÉ ×ÍÅÓÔÅ. \"FILES_FIRST\" ×Ù×ÏÄÉÔ ÓÎÁÞÁÌÁ ÆÁÊÌÙ,\n"
+"Á \"DIRECTORIES_FIRST\" ×Ù×ÏÄÉÔ ÓÎÁÞÁÌÁ ËÁÔÁÌÏÇÉ.\n"
+
+#: src/LYrcFile.c:300
+msgid ""
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
+msgstr ""
+"åÓÌÉ emacs_keys ÕÓÔÁÎÏ×ÌÅÎÏ × \"on\", ÔÏ ÂÕÄÕÔ ×ËÌÀÞÅÎÙ ÏÂÙÞÎÙÅ\n"
+"ËÏÍÁÎÄÙ ÐÅÒÅÍÅÝÅÎÉÑ EMACS:\n"
+" ^N = ×ÎÉÚ ^P = ××ÅÒÈ\n"
+" ^B = ×ÌÅ×Ï ^F = ×ÐÒÁ×Ï\n"
+
+#: src/LYrcFile.c:306
+msgid ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+msgstr ""
+"file_editor ÏÐÒÅÄÅÌÑÅÔ, ËÁËÏÊ ÒÅÄÁËÔÏÒ ÂÕÄÅÔ ÚÁÐÕÓËÁÔØÓÑ ÐÒÉ ÒÅÄÁËÔÉÒÏ×ÁÎÉÉ\n"
+"ÌÏËÁÌØÎÙÈ ÆÁÊÌÏ× ÉÌÉ ÐÒÉ ÐÏÓÙÌËÅ ÐÏÞÔÙ. ÷ ÓÌÕÞÁÅ, ËÏÇÄÁ ÒÅÄÁËÔÏÒ ÎÅ ÕËÁÚÁÎ,\n"
+"ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ ÆÁÊÌÏ× ÂÕÄÅÔ ÚÁÐÒÅÝÅÎÏ, ÅÓÌÉ ÒÅÄÁËÔÏÒ ÎÅ ×ÙÚ×ÁÎ Ó ËÏÍÁÎÄÎÏÊ\n"
+"ÓÔÒÏËÉ, Á ÐÒÉ ÐÏÓÙÌËÅ ÐÏÞÔÙ ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ×ÓÔÒÏÅÎÎÙÊ\n"
+"ÓÔÒÏËÏ×ÙÊ ÒÅÄÁËÔÏÒ.\n"
+
+#: src/LYrcFile.c:312
+msgid ""
+"The file_sorting_method specifies which value to sort on when viewing\n"
+"file lists such as FTP directories. The options are:\n"
+" BY_FILENAME -- sorts on the name of the file\n"
+" BY_TYPE -- sorts on the type of the file\n"
+" BY_SIZE -- sorts on the size of the file\n"
+" BY_DATE -- sorts on the date of the file\n"
+msgstr ""
+"file_sorting_method ÏÐÒÅÄÅÌÑÅÔ, ÐÏ ËÁËÏÍÕ ÐÁÒÁÍÅÔÒÕ ÐÒÏÉÚ×ÏÄÉÔØ ÓÏÒÔÉÒÏ×ËÕ\n"
+"ÐÒÉ ÐÒÏÓÍÏÔÒÅ ÓÐÉÓËÏ× ÆÁÊÌÏ×, ÔÁËÉÈ ËÁË FTP ËÁÔÁÌÏÇÉ. ÷ÏÚÍÏÖÎÏÓÔÉ ×ÙÂÏÒÁ:\n"
+" BY_FILENAME -- ÓÏÒÔÉÒÏ×ÁÔØ ÐÏ ÉÍÅÎÉ ÆÁÊÌÁ\n"
+" BY_TYPE -- ÓÏÒÔÉÒÏ×ÁÔØ ÐÏ ÔÉÐÕ ÆÁÊÌÁ\n"
+" BY_SIZE -- ÓÏÒÔÉÒÏ×ÁÔØ ÐÏ ÒÁÚÍÅÒÕ ÆÁÊÌÁ\n"
+" BY_DATE -- ÓÏÒÔÉÒÏ×ÁÔØ ÐÏ ÄÁÔÅ ÐÏÓÌÅÄÎÅÊ ÍÏÄÉÆÉËÁÃÉÉ ÆÁÊÌÁ\n"
+
+#: src/LYrcFile.c:324
+msgid ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+msgstr ""
+"lineedit_mode ÏÐÒÅÄÅÌÑÅÔ ÐÒÉ×ÑÚËÕ ËÌÁ×ÉÛ, ÉÓÐÏÌØÚÕÅÍÕÀ ÄÌÑ ××ÏÄÉÍÙÈ ÓÔÒÏË ×\n"
+"ÐÒÉÇÌÁÛÅÎÉÑÈ É ÆÏÒÍÁÈ. åÓÌÉ lineedit_mode ÕÓÔÁÎÏ×ÌÅÎÏ ×\n"
+"\"ðÒÉ×ÑÚËÁ ÐÏ ÕÍÏÌÞÁÎÉÀ\", ÔÏÇÄÁ ÓÌÅÄÕÀÝÉÅ ÕÐÒÁ×ÌÑÀÝÉÅ ÓÉÍ×ÏÌÙ ÂÕÄÕÔ\n"
+"ÉÓÐÏÌØÚÏ×ÁÎÙ ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ É ÕÄÁÌÅÎÉÑ:\n"
+"\n"
+" ðÒÅÄ óÌÅÄ Enter = ðÒÉÎÑÔØ ××ÏÄ\n"
+" óÄ×ÉÎÕÔØÓÑ ÎÁ ÓÉÍ×ÏÌ: <- -> ^G = ïÔÍÅÎÉÔØ ××ÏÄ\n"
+" óÄ×ÉÎÕÔØÓÑ ÎÁ ÓÌÏ×Ï: ^P ^N ^U = õÄÁÌÉÔØ ÓÔÒÏËÕ\n"
+" õÄÁÌÉÔØ ÓÉÍ×ÏÌ: ^H ^R ^A = ÷ ÎÁÞÁÌÏ ÓÔÒÏËÉ\n"
+" õÄÁÌÉÔØ ÓÌÏ×Ï: ^B ^F ^E = ÷ ËÏÎÅà ÓÔÒÏËÉ\n"
+"ðÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÒÅÖÉÍÙ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÓÔÒÏËÉ:\n"
+
+#: src/LYrcFile.c:339
+msgid ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+msgstr ""
+"óÌÅÄÕÀÝÅÅ ÐÏÚ×ÏÌÉÔ ×ÁÍ ÏÐÒÅÄÅÌÉÔØ ÆÁÊÌÙ ÐÏÄÚÁËÌÁÄÏË É ÉÈ ÏÐÉÓÁÎÉÑ.\n"
+"æÏÒÍÁÔ: multi_bookmark<úÁÇÌÁ×ÎÁÑ_ÂÕË×Á>=<ÉÍÑ_ÆÁÊÌÁ>,<ÏÐÉÓÁÎÉÅ>\n"
+"òÁÚÒÅÛÁÅÔÓÑ ÉÍÅÔØ ÄÏ 26 ÆÁÊÌÏ× ÚÁËÌÁÄÏË (ÐÏ ËÏÌÉÞÅÓÔ×Õ ÁÎÇÌÉÊÓËÉÈ ÚÁÇÌÁ×ÎÙÈ\n"
+"ÂÕË×). óÌÅÄÕÅÔ ÎÁÞÉÎÁÔØ Ó \"multi_bookmarkB\", Ô.Ë. 'A' Ñ×ÌÑÅÔÓÑ ÚÎÁÞÅÎÉÅÍ\n"
+"ÐÏ ÕÍÏÌÞÁÎÉÀ (ÓÍ. ×ÙÛÅ).\n"
+
+#: src/LYrcFile.c:345
+msgid ""
+"personal_mail_address specifies your personal mail address. The\n"
+"address will be sent during HTTP file transfers for authorization and\n"
+"logging purposes, and for mailed comments.\n"
+"If you do not want this information given out, set the NO_FROM_HEADER\n"
+"to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
+"could leave this field blank, but then you won't have it included in\n"
+"your mailed comments.\n"
+msgstr ""
+"personal_mail_address ÏÐÒÅÄÅÌÑÅÔ ×ÁÛ ÌÉÞÎÙÊ ÐÏÞÔÏ×ÙÊ ÁÄÒÅÓ. üÔÏÔ ÁÄÒÅÓ\n"
+"ÂÕÄÅÔ ÐÏÓÙÌÁÔØÓÑ ×Ï ×ÒÅÍÑ ÐÅÒÅÄÁÞÉ ÆÁÊÌÏ× ÐÏ HTTP ÄÌÑ ÁÕÔÅÎÔÉÆÉËÁÃÉÉ, Ó ÃÅÌØÀ\n"
+"×ÅÄÅÎÉÑ ÖÕÒÎÁÌØÎÙÈ ÚÁÐÉÓÅÊ, É ÄÌÑ ÐÏÓÙÌÁÅÍÙÈ ËÏÍÍÅÎÔÁÒÉÅ×.\n"
+"åÓÌÉ ×Ù ÎÅ ÈÏÔÉÔÅ ÏÂßÑ×ÌÑÔØ ÜÔÕ ÉÎÆÏÒÍÁÃÉÀ, ÕÓÔÁÎÏ×ÉÔÅ NO_FROM_HEADER\n"
+"× TRUE × lynx.cfg, ÉÌÉ ÉÓÐÏÌØÚÕÊÔÅ ËÌÀÞ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ -nofrom. ÷Ù ÔÁËÖÅ\n"
+"ÍÏÖÅÔÅ ÏÓÔÁ×ÉÔØ ÜÔÏ ÐÏÌÅ ÐÕÓÔÙÍ, ÎÏ × ÜÔÏÍ ÓÌÕÞÁÅ ÏÎÏ ÎÅ ÂÕÄÅÔ ×ËÌÀÞÁÔØÓÑ ×\n"
+"ÐÏÓÙÌÁÅÍÙÅ ËÏÍÍÅÎÔÁÒÉÉ.\n"
+
+#: src/LYrcFile.c:354
+msgid ""
+"preferred_charset specifies the character set in MIME notation (e.g.,\n"
+"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
+"to http servers using an Accept-Charset header. The value should NOT\n"
+"include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
+"by default. May be a comma-separated list.\n"
+"If a file in that character set is available, the server will send it.\n"
+"If no Accept-Charset header is present, the default is that any\n"
+"character set is acceptable. If an Accept-Charset header is present,\n"
+"and if the server cannot send a response which is acceptable\n"
+"according to the Accept-Charset header, then the server SHOULD send\n"
+"an error response, though the sending of an unacceptable response\n"
+"is also allowed.\n"
+msgstr ""
+"preferred_charset ÏÐÒÅÄÅÌÑÅÔ ËÏÄÉÒÏ×ËÕ × ÎÏÔÁÃÉÉ MIME (ÎÁÐÒ.\n"
+"ISO-8859-2, ISO-8859-5), ËÏÔÏÒÕÀ Lynx ÂÕÄÅÔ ÕËÁÚÙ×ÁÔØ ËÁË ÐÒÅÄÐÏÞÔÉÔÅÌØÎÕÀ\n"
+"× ÚÁÐÒÏÓÁÈ Ë http ÓÅÒ×ÅÒÁÍ, ÉÓÐÏÌØÚÕÑ ÚÁÇÏÌÏ×ÏË Accept-Charset. üÔÏ ÚÎÁÞÅÎÉÅ\n"
+"îå ÄÏÌÖÎÏ ×ËÌÀÞÁÔØ ISO-8859-1 ÉÌÉ US-ASCII, Ô.Ë. ÏÎÉ ×ÓÅÇÄÁ ÐÏÄÒÁÚÕÍÅ×ÁÀÔÓÑ ÐÏ\n"
+"ÕÍÏÌÞÁÎÉÀ. íÏÖÅÔ ÂÙÔØ ÓÐÉÓËÏÍ, ÒÁÚÄÅÌÅÎÎÙÍ ÚÁÐÑÔÙÍÉ.\n"
+"åÓÌÉ ÆÁÊÌ × ÜÔÏÊ ËÏÄÉÒÏ×ËÅ ÄÏÓÔÕÐÅÎ, ÓÅÒ×ÅÒ ÐÏÛÌÅÔ ÅÇÏ.\n"
+"åÓÌÉ ÚÁÇÏÌÏ×ÏË Accept-Charset ÎÅ ÕËÁÚÁÎ, ÐÏ ÕÍÏÌÞÁÎÉÀ ÜÔÏ ÚÎÁÞÉÔ, ÞÔÏ ÌÀÂÁÑ\n"
+"ËÏÄÉÒÏ×ËÁ ÐÒÉÅÍÌÅÍÁ. åÓÌÉ ÚÁÇÏÌÏ×ÏË Accept-Charset ÕËÁÚÁÎ, É ÅÓÌÉ ÓÅÒ×ÅÒ ÎÅ\n"
+"ÍÏÖÅÔ ÐÏÓÌÁÔØ ÏÔ×ÅÔ × ËÏÄÉÒÏ×ËÅ, ÐÒÉÅÍÌÅÍÏÊ × ÓÏÏÔ×ÅÔÓÔ×ÉÉ Ó ÜÔÉÍ ÚÁÇÏÌÏ×ËÏÍ,\n"
+"ÔÏ ÓÅÒ×ÅÒ äïìöåî (SHOULD) ÐÏÓÌÁÔØ ÏÔ×ÅÔ, ÕËÁÚÙ×ÁÀÝÉÊ\n"
+"ÎÁ ÏÛÉÂËÕ, ÈÏÔÑ ÐÏÓÙÌËÁ ÏÔ×ÅÔÁ × ÎÅÐÒÉÅÍÌÅÍÏÊ ËÏÄÉÒÏ×ËÅ ÔÏÖÅ ÄÏÐÕÓËÁÅÔÓÑ.\n"
+
+#: src/LYrcFile.c:368
+msgid ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+msgstr ""
+"preferred_language ÏÐÒÅÄÅÌÑÅÔ ÑÚÙË × ÎÏÔÁÃÉÉ MIME (ÎÁÐÒ. en, fr,\n"
+"ÍÏÖÅÔ ÂÙÔØ ÓÐÉÓÏË, ÒÁÚÄÅÌÅÎÎÙÊ ÚÁÐÑÔÙÍÉ, × ÕÂÙ×ÁÎÉÉ ÐÒÉÏÒÉÔÅÔÁ),\n"
+"ËÏÔÏÒÙÊ Lynx ÂÕÄÅÔ ÕËÁÚÙ×ÁÔØ ËÁË ÐÒÅÄÐÏÞÔÉÔÅÌØÎÙÊ × ÚÁÐÒÏÓÁÈ Ë http ÓÅÒ×ÅÒÁÍ.\n"
+"åÓÌÉ ÆÁÊÌ ÎÁ ÜÔÏÍ ÑÚÙËÅ ÄÏÓÔÕÐÅÎ, ÓÅÒ×ÅÒ ÂÕÄÅÔ ÐÏÓÙÌÁÔØ ÅÇÏ.\n"
+"÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ, ÓÅÒ×ÅÒ ÂÕÄÅÔ ÐÏÓÙÌÁÔØ ÆÁÊÌ ÎÁ Ó×ÏÅÍ ÑÚÙËÅ ÐÏ ÕÍÏÌÞÁÎÉÀ.\n"
+
+#: src/LYrcFile.c:377
+msgid ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"åÓÌÉ run_all_execution_links ÕÓÔÁÎÏ×ÌÅÎÏ × \"on\", ÔÏ ×ÓÅ ÌÏËÁÌØÎÙÅ\n"
+"×ÙÐÏÌÎÑÅÍÙÅ ÓÓÙÌËÉ ÂÕÄÕÔ ×ÙÐÏÌÎÑÔØÓÑ, ËÏÇÄÁ ÏÎÉ ×ÙÂÒÁÎÙ.\n"
+"\n"
+"ðòåäõðòåöäåîéå - ðÏÔÅÎÃÉÁÌØÎÏ ÜÔÏ ïþåîø ÏÐÁÓÎÏ. ô.Ë. ×Ù ÍÏÖÅÔÅ ÐÒÏÓÍÁÔÒÉ×ÁÔØ\n"
+" ÎÅÉÚ×ÅÓÔÎÕÀ É ÎÅÐÒÏ×ÅÒÅÎÎÕÀ ÉÎÆÏÒÍÁÃÉÀ, ÓÕÝÅÓÔ×ÕÅÔ ×ÅÒÏÑÔÎÏÓÔØ\n"
+" ÎÁÐÉÓÁÎÉÑ ÓÓÙÌÏË Ó ôÒÏÑÎÓËÉÍ ËÏÎÅÍ. óÓÙÌËÉ Ó ôÒÏÑÎÓËÉÍ ËÏÎÅÍ\n"
+" ÍÏÇÕÔ ÂÙÔØ ÎÁÐÉÓÁÎÙ Ó ÃÅÌØÀ ÕÎÉÞÔÏÖÅÎÉÑ ÆÁÊÌÏ× ÉÌÉ ÎÁÒÕÛÅÎÉÑ\n"
+" ÂÅÚÏÐÁÓÎÏÓÔÉ. üÔÁ ÏÐÃÉÑ ÄÏÌÖÎÁ ÂÙÔØ ÕÓÔÁÎÏ×ÌÅÎÁ × \"on\" ÔÏÌØËÏ\n"
+" ÅÓÌÉ ×Ù ÐÒÏÓÍÁÔÒÉ×ÁÅÔÅ ÐÒÏ×ÅÒÅÎÎÙÊ ÉÓÔÏÞÎÉË ÉÎÆÏÒÍÁÃÉÉ.\n"
+
+#: src/LYrcFile.c:388
+msgid ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"åÓÌÉ run_execution_links_on_local_files ÎÁÈÏÄÉÔÓÑ × ÓÏÓÔÏÑÎÉÉ \"on\", ÔÏ ×ÓÅ\n"
+"×ÙÐÏÌÎÑÅÍÙÅ ÓÓÙÌËÉ, ÎÁÊÄÅÎÎÙÅ × ìïëáìøîùè ÆÁÊÌÁÈ, ÂÕÄÕÔ ×ÙÐÏÌÎÑÔØÓÑ × ÓÌÕÞÁÅ\n"
+"ÉÈ ×ÙÂÏÒÁ. üÔÏ ÏÔÌÉÞÁÅÔÓÑ ÏÔ run_all_execution_links ÔÅÍ, ÞÔÏ ÔÏÌØËÏ ÆÁÊÌÙ ÎÁ\n"
+"ÌÏËÁÌØÎÏÊ ÓÉÓÔÅÍÅ ÂÕÄÕÔ ÉÍÅÔØ ÒÁÚÒÅÛÅÎÉÅ ÎÁ ×ÙÐÏÌÎÑÅÍÙÅ ÓÓÙÌËÉ.\n"
+"\n"
+"ðòåäõðòåöäåîéå - üÔÏ ÐÏÔÅÎÃÉÁÌØÎÏ ÏÐÁÓÎÏ. ô.Ë. ×Ù ÍÏÖÅÔÅ ÐÒÏÓÍÁÔÒÉ×ÁÔØ\n"
+" ÎÅÉÚ×ÅÓÔÎÕÀ É ÎÅÐÒÏ×ÅÒÅÎÎÕÀ ÉÎÆÏÒÍÁÃÉÀ, ÓÕÝÅÓÔ×ÕÅÔ ×ÅÒÏÑÔÎÏÓÔØ\n"
+" ÎÁÐÉÓÁÎÉÑ ÓÓÙÌÏË Ó ôÒÏÑÎÓËÉÍ ËÏÎÅÍ. óÓÙÌËÉ Ó ôÒÏÑÎÓËÉÍ ËÏÎÅÍ\n"
+" ÍÏÇÕÔ ÂÙÔØ ÎÁÐÉÓÁÎÙ Ó ÃÅÌØÀ ÕÎÉÞÔÏÖÅÎÉÑ ÆÁÊÌÏ× ÉÌÉ ÎÁÒÕÛÅÎÉÑ\n"
+" ÂÅÚÏÐÁÓÎÏÓÔÉ. üÔÁ ÏÐÃÉÑ ÄÏÌÖÎÁ ÂÙÔØ ÕÓÔÁÎÏ×ÌÅÎÁ × \"on\" ÔÏÌØËÏ\n"
+" ÅÓÌÉ ×Ù ÐÒÏÓÍÁÔÒÉ×ÁÅÔÅ ÐÒÏ×ÅÒÅÎÎÙÊ ÉÓÔÏÞÎÉË ÉÎÆÏÒÍÁÃÉÉ.\n"
+
+#: src/LYrcFile.c:403
+msgid ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+msgstr ""
+"select_popups ÏÐÒÅÄÅÌÑÅÔ, ÂÕÄÕÔ ÌÉ ïðãéé × ÂÌÏËÅ SELECT, × ËÏÔÏÒÏÍ ÏÔÓÕÔÓÔ×ÕÅÔ\n"
+"ÁÔÒÉÂÕÔ MULTIPLE, ÐÒÅÄÓÔÁ×ÌÅÎÙ ×ÅÒÔÉËÁÌØÎÙÍ ÓÐÉÓËÏÍ ÚÁ×ÉÓÉÍÙÈ ËÎÏÐÏË ÉÌÉ\n"
+"×ÓÐÌÙ×ÁÀÝÉÍ ÍÅÎÀ. úÁÍÅÔØÔÅ, ÞÔÏ ÅÓÌÉ ÁÔÒÉÂÕÔ MULTIPLE ÐÒÉÓÕÔÓÔ×ÕÅÔ × ÔÅÇÅ\n"
+"SELECT, Lynx ÂÕÄÅÔ ×ÓÅÇÄÁ ÓÏÚÄÁ×ÁÔØ ÄÌÑ ÏÐÃÉÊ ×ÅÒÔÉËÁÌØÎÙÊ ÓÐÉÓÏË ÎÅÚÁ×ÉÓÉÍÙÈ\n"
+"ËÎÏÐÏË. úÎÁÞÅÎÉÅ \"on\" ÕÓÔÁÎÁ×ÌÉ×ÁÅÔ ÐÏ ÕÍÏÌÞÁÎÉÀ ×ÓÐÌÙ×ÁÀÝÉÅ ÍÅÎÀ, × ÔÏ\n"
+"×ÒÅÍÑ ËÁË ÚÎÁÞÅÎÉÅ \"off\" ÕÓÔÁÎÁ×ÌÉ×ÁÅÔ ÚÁ×ÉÓÉÍÙÅ ËÎÏÐËÉ. úÎÁÞÅÎÉÅ\n"
+"ÐÏ ÕÍÏÌÞÁÎÉÀ ÍÏÖÅÔ ÂÙÔØ ÉÚÍÅÎÅÎÏ ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ËÌÀÞÁ ËÏÍÁÎÄÎÏÊ\n"
+"ÓÔÒÏËÉ -popup.\n"
+
+#: src/LYrcFile.c:413
+msgid ""
+"show_color specifies how to set the color mode at startup. A value of\n"
+"\"never\" will force color mode off (treat the terminal as monochrome)\n"
+"at startup even if the terminal appears to be color capable. A value of\n"
+"\"always\" will force color mode on even if the terminal appears to be\n"
+"monochrome, if this is supported by the library used to build lynx.\n"
+"A value of \"default\" will yield the behavior of assuming\n"
+"a monochrome terminal unless color capability is inferred at startup\n"
+"based on the terminal type, or the -color command line switch is used, or\n"
+"the COLORTERM environment variable is set. The default behavior always is\n"
+"used in anonymous accounts or if the \"option_save\" restriction is set.\n"
+"The effect of the saved value can be overridden via\n"
+"the -color and -nocolor command line switches.\n"
+"The mode set at startup can be changed via the \"show color\" option in\n"
+"the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
+"\"off\" \"show color\" settings will be treated as \"default\".\n"
+msgstr ""
+"show_color ÏÐÒÅÄÅÌÑÅÔ, ËÁË ÕÓÔÁÎÁ×ÌÉ×ÁÔØ Ã×ÅÔÏ×ÏÊ ÒÅÖÉÍ ÐÒÉ ÓÔÁÒÔÅ. úÎÁÞÅÎÉÅ\n"
+"\"never\" ÂÕÄÅÔ ÐÒÉÎÕÄÉÔÅÌØÎÏ ÏÔËÌÀÞÁÔØ Ã×ÅÔÏ×ÏÊ ÒÅÖÉÍ (É ÔÒÁËÔÏ×ÁÔØ\n"
+"ÔÅÒÍÉÎÁÌ ËÁË ÍÏÎÏÈÒÏÍÎÙÊ), ÄÁÖÅ ÅÓÌÉ ÎÁ ÐÅÒ×ÙÊ ×ÚÇÌÑÄ ÔÅÒÍÉÎÁÌ ÓÐÏÓÏÂÅÎ\n"
+"ÐÏÄÄÅÒÖÉ×ÁÔØ Ã×ÅÔÁ. úÎÁÞÅÎÉÅ \"always\" ÐÒÉÎÕÄÉÔÅÌØÎÏ ×ËÌÀÞÁÅÔ Ã×ÅÔÏ×ÏÊ\n"
+"ÒÅÖÉÍ, ÄÁÖÅ ÅÓÌÉ ÔÅÒÍÉÎÁÌ ËÁÖÅÔÓÑ ÍÏÎÏÈÒÏÍÎÙÍ, ÅÓÌÉ ÜÔÏ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ\n"
+"ÂÉÂÌÉÏÔÅËÏÊ, ÉÓÐÏÌØÚÏ×Á×ÛÅÊÓÑ ÐÒÉ ÓÂÏÒËÅ lynx. úÎÁÞÅÎÉÅ \"default\" ÐÒÉ×ÅÄÅÔ\n"
+"Ë ÐÏ×ÅÄÅÎÉÀ, ÐÒÉ ËÏÔÏÒÏÍ ÐÏÄÒÁÚÕÍÅ×ÁÅÔÓÑ ÍÏÎÏÈÒÏÍÎÙÊ ÔÅÒÍÉÎÁÌ, ÚÁ ÉÓËÌÀÞÅÎÉÅÍ\n"
+"ÓÌÕÞÁÅ×, ËÏÇÄÁ ÐÒÉ ÓÔÁÒÔÅ Ã×ÅÔÏ×ÙÅ ×ÏÚÍÏÖÎÏÓÔÉ ÓÌÅÄÕÀÔ ÉÚ ÔÉÐÁ ÔÅÒÍÉÎÁÌÁ,\n"
+"ÉÌÉ ÚÁÄÁÎ ËÌÀÞ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ -color, ÉÌÉ ÕÓÔÁÎÏ×ÌÅÎÁ ÐÅÒÅÍÅÎÎÁÑ ÓÒÅÄÙ\n"
+"COLORTERM. ðÏ×ÅÄÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ ×ÓÅÇÄÁ ÉÓÐÏÌØÚÕÅÔÓÑ ÐÒÉ ÁÎÏÎÉÍÎÙÈ account\n"
+"ÉÌÉ ÅÓÌÉ ÕÓÔÁÎÏ×ÌÅÎÏ ÏÇÒÁÎÉÞÅÎÉÅ \"option_save\". üÆÆÅËÔ ÓÏÈÒÁÎÅÎÎÏÇÏ\n"
+"ÚÎÁÞÅÎÉÑ ÍÏÖÅÔ ÂÙÔØ ÐÅÒÅËÒÙÔ Ó ÐÏÍÏÝØÀ ËÌÀÞÅÊ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ\n"
+"-color É -nocolor.\n"
+"òÅÖÉÍ, ÕÓÔÁÎÏ×ÌÅÎÎÙÊ ÐÒÉ ÓÔÁÒÔÅ, ÍÏÖÅÔ ÂÙÔØ ÉÚÍÅÎÅÎ Ó ÐÏÍÏÝØÀ ÏÐÃÉÉ\n"
+"\"ÐÏËÁÚÙ×ÁÔØ Ã×ÅÔ\" × ÍÅÎÀ ÏÐÃÉÊ. åÓÌÉ ÎÁÓÔÒÏÊËÉ ÏÐÃÉÊ ÓÏÈÒÁÎÅÎÙ, ÚÎÁÞÅÎÉÑ\n"
+"\"on\" É \"off\" ÐÁÒÁÍÅÔÒÁ \"ÐÏËÁÚÙ×ÁÔØ Ã×ÅÔ\" ÂÕÄÕÔ\n"
+"ÔÒÁËÔÏ×ÁÔØÓÑ ËÁË \"default\".\n"
+
+#: src/LYrcFile.c:430
+msgid ""
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
+msgstr ""
+"show_cursor ÏÐÒÅÄÅÌÑÅÔ, 'ÓËÒÙ×ÁÔØ' ËÕÒÓÏÒ ÓÐÒÁ×Á (É ×ÎÉÚÕ, ÅÓÌÉ ×ÏÚÍÏÖÎÏ)\n"
+"ÜËÒÁÎÁ, ÉÌÉ ÐÏÍÅÝÁÔØ ÅÇÏ ÓÌÅ×Á ÏÔ ÔÅËÕÝÅÊ ÓÓÙÌËÉ × ÄÏËÕÍÅÎÔÁÈ ÉÌÉ ÔÅËÕÝÅÊ\n"
+"ÏÐÃÉÉ ×Ï ×ÓÐÌÙ×ÁÀÝÉÈ ÍÅÎÀ ×ÙÂÏÒÁ. ðÏÚÉÃÉÏÎÉÒÏ×ÁÎÉÅ ËÕÒÓÏÒÁ ÓÌÅ×Á ÏÔ ÔÅËÕÝÅÊ\n"
+"ÓÓÙÌËÉ ÉÌÉ ÏÐÃÉÉ ÐÏÌÅÚÎÏ ÄÌÑ ÒÅÞÅ×ÙÈ ÉÎÔÅÒÆÅÊÓÏ× ÉÌÉ ÉÎÔÅÒÆÅÊÓÏ× ÄÌÑ ÓÌÅÐÙÈ,\n"
+"ÉÌÉ ËÏÇÄÁ ÔÅÒÍÉÎÁÌ ÏÄÉÎ ÉÚ ÔÅÈ, ËÏÔÏÒÙÅ ÎÅ ×ÙÄÅÌÑÀÔ ÔÅËÕÝÕÀ ÓÓÙÌËÉ ÑÒËÏÓÔØÀ\n"
+"ÉÌÉ Ã×ÅÔÏÍ. úÎÁÞÅÎÉÅ \"on\" ÕÓÔÁÎÁ×ÌÉ×ÁÅÔ ÒÁÓÐÏÌÏÖÅÎÉÅ ÓÌÅ×Á ËÁË ÏÐÃÉÀ ÐÏ\n"
+"ÕÍÏÌÞÁÎÉÀ, × ÔÏ ×ÒÅÍÑ ËÁË ÚÎÁÞÅÎÉÅ \"off\" ÕÓÔÁÎÁ×ÌÉ×ÁÅÔ 'ÓÏËÒÙÔÉÅ' ËÕÒÓÏÒÁ.\n"
+"úÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ ÍÏÖÅÔ ÂÙÔØ ÐÅÒÅËÒÙÔÏ ÏÐÃÉÅÊ ËÏÍÁÎÄÎÏÊ\n"
+"ÓÔÒÏËÉ -show_cursor.\n"
+
+#: src/LYrcFile.c:441
+msgid ""
+"show_dotfiles specifies that the directory listing should include\n"
+"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
+"honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
+"restricted via a command line switch. If display of hidden files\n"
+"is disabled, creation of such files via Lynx also is disabled.\n"
+msgstr ""
+"show_dotfiles ÏÐÒÅÄÅÌÑÅÔ, ÞÔÏ ÓÏÄÅÒÖÉÍÏÅ ËÁÔÁÌÏÇÁ ÄÏÌÖÎÏ ×ËÌÀÞÁÔØ\n"
+"\"ÓËÒÙÔÙÅ\" (ÎÁÞÉÎÁÀÝÉÅÓÑ Ó ÔÏÞËÉ) ÆÁÊÌÙ/ËÁÔÁÌÏÇÉ. åÓÌÉ ÕÓÔÁÎÏ×ÌÅÎÏ × \"on\",\n"
+"ÜÔÏ ÂÕÄÅÔ ÕÞÉÔÙ×ÁÔØÓÑ ÔÏÌØËÏ ÅÓÌÉ ×ËÌÀÞÅÎÏ × userdefs.h É/ÉÌÉ × lynx.cfg,\n"
+"É ÎÅ ÚÁÐÒÅÝÅÎÏ Ó ÐÏÍÏÝØÀ ËÌÀÞÅÊ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ. åÓÌÉ ÏÔÏÂÒÁÖÅÎÉÅ ÓËÒÙÔÙÈ\n"
+"ÆÁÊÌÏ× ÏÔËÌÀÞÅÎÏ, ÓÏÚÄÁÎÉÅ ÔÁËÉÈ ÆÁÊÌÏ× ÉÚ Lynx ÔÏÖÅ ÚÁÐÒÅÝÁÅÔÓÑ.\n"
+
+#: src/LYrcFile.c:452
+msgid ""
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
+msgstr ""
+"åÓÌÉ sub_bookmarks ÎÅ ÎÁÈÏÄÉÔÓÑ × ÓÏÓÔÏÑÎÉÉ \"off\", É ÍÎÏÖÅÓÔ×ÅÎÎÙÅ ÚÁËÌÁÄËÉ\n"
+"ÂÙÌÉ ÏÐÒÅÄÅÌÅÎÙ (ÓÍ. ÎÉÖÅ), ÔÏ ×ÓÅ ÏÐÅÒÁÃÉÉ Ó ÚÁËÌÁÄËÁÍÉ ÂÕÄÕÔ ÎÁÞÉÎÁÔØÓÑ Ó\n"
+"ÚÁÐÒÏÓÁ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ×ÙÂÏÒÁ ÁËÔÉ×ÎÏÇÏ ÆÁÊÌÁ ÐÏÄÚÁËÌÁÄÏË. åÓÌÉ ÆÁÊÌ\n"
+"ÐÏ ÕÍÏÌÞÁÎÉÀ Lynx ÏÐÒÅÄÅÌÅÎ (ÓÍ. ×ÙÛÅ), ÏÎ ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ËÁË ×ÙÂÏÒ ÐÏ\n"
+"ÕÍÏÌÞÁÎÉÀ. ëÏÇÄÁ ÜÔÁ ÏÐÃÉÑ ÕÓÔÁÎÏ×ÌÅÎÁ × \"advanced\", É ×ÙÂÒÁÎ òÅÖÉÍ\n"
+"ðÏÌØÚÏ×ÁÔÅÌÑ advanced, ËÏÍÁÎÄÁ ÐÒÏÓÍÏÔÒÁ ÚÁËÌÁÄÏË ('v') ÂÕÄÅÔ ×ÙÚÙ×ÁÔØ ÚÁÐÒÏÓ\n"
+"× ÓÔÒÏËÅ ÓÔÁÔÕÓÁ, ×ÍÅÓÔÏ ÍÅÎÀ, ×Ù×ÏÄÉÍÏÇÏ × òÅÖÉÍÅ ðÏÌØÚÏ×ÁÔÅÌÑ novice É\n"
+"intermediate. ëÏÇÄÁ ÜÔÁ ÏÐÃÉÑ ÕÓÔÁÎÏ×ÌÅÎÁ × \"standard\", ÍÅÎÀ ÂÕÄÅÔ\n"
+"×Ù×ÏÄÉÔØÓÑ ×ÎÅ ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ òÅÖÉÍÁ ðÏÌØÚÏ×ÁÔÅÌÑ.\n"
+
+#: src/LYrcFile.c:464
+msgid ""
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
+msgstr ""
+"user_mode ÏÐÒÅÄÅÌÑÅÔ ÕÒÏ×ÅÎØ ÚÎÁÎÉÑ Lynx ÐÏÌØÚÏ×ÁÔÅÌÅÍ. ðÏ ÕÍÏÌÞÁÎÉÀ\n"
+"ÕÓÔÁÎÏ×ÌÅÎÏ \"NOVICE\", ÞÔÏ ÏÔÏÂÒÁÖÁÅÔ Ä×Å ÄÏÐÏÌÎÉÔÅÌØÎÙÈ ÓÔÒÏËÉ ÐÏÄÓËÁÚÏË\n"
+"×ÎÉÚÕ ÜËÒÁÎÁ, ÞÔÏÂÙ ÐÏÍÏÞØ ÐÏÌØÚÏ×ÁÔÅÌÀ × ÉÚÕÞÅÎÉÉ ÏÓÎÏ×ÎÙÈ ËÏÍÁÎÄ Lynx.\n"
+"õÓÔÁÎÏ×ÉÔÅ user_mode × \"INTERMEDIATE\" ÞÔÏÂÙ ÕÂÒÁÔØ ÄÏÐÏÌÎÉÔÅÌØÎÕÀ\n"
+"ÉÎÆÏÒÍÁÃÉÀ. éÓÐÏÌØÚÕÊÔÅ \"ADVANCED\" ÄÌÑ ÏÔÏÂÒÁÖÅÎÉÑ URL ÔÅËÕÝÅÊ ×ÙÂÒÁÎÎÏÊ\n"
+"ÓÓÙÌËÉ ×ÎÉÚÕ ÜËÒÁÎÁ.\n"
+
+#: src/LYrcFile.c:472
+msgid ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+msgstr ""
+"åÓÌÉ verbose_images ÎÁÈÏÄÉÔÓÑ × ÓÏÓÔÏÑÎÉÉ \"on\", lynx ÂÕÄÅÔ ÐÅÞÁÔÁÔØ ÉÍÑ\n"
+"ÉÓÈÏÄÎÏÇÏ ÆÁÊÌÁ Ó ËÁÒÔÉÎËÏÊ ÎÁ ÍÅÓÔÅ [INLINE], [LINK] ÉÌÉ [IMAGE]\n"
+"óÍ. ÔÁËÖÅ VERBOSE_IMAGES × lynx.cfg\n"
+
+#: src/LYrcFile.c:477
+msgid ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+msgstr ""
+"åÓÌÉ vi_keys ÕÓÔÁÎÏ×ÌÅÎÏ × \"on\", ÔÏ ÂÕÄÕÔ ×ËÌÀÞÅÎÙ ÏÂÙÞÎÙÅ ËÏÍÁÎÄÙ\n"
+"ÐÅÒÅÍÅÝÅÎÉÑ VI:\n"
+" j = ×ÎÉÚ k = ××ÅÒÈ\n"
+" h = ×ÌÅ×Ï l = ×ÐÒÁ×Ï\n"
+"üÔÉ ËÌÁ×ÉÛÉ ÄÅÊÓÔ×ÕÀÔ ÔÁË ÔÏÌØËÏ × ÎÉÖÎÅÍ ÒÅÇÉÓÔÒÅ.\n"
+"úÁÇÌÁ×ÎÙÅ 'H', 'J' É 'K' ÂÕÄÕÔ ÐÏ-ÐÒÅÖÎÅÍÕ ÁËÔÉ×ÉÚÉÒÏ×ÁÔØ ÐÏÍÏÝØ, ÓÏËÒÁÝÅÎÉÑ\n"
+"ÐÅÒÅÈÏÄÁ É ×Ù×ÏÄ ÏÔÏÂÒÁÖÅÎÉÑ ËÌÁ×ÉÛ, ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ.\n"
+
+#: src/LYrcFile.c:485
+msgid ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+msgstr ""
+"õÓÔÁÎÏ×ËÁ visited_links ËÏÎÔÒÏÌÉÒÕÅÔ, ËÁË Lynx ÏÒÇÁÎÉÚÕÅÔ ÉÎÆÏÒÍÁÃÉÀ\n"
+"ÎÁ óÔÒÁÎÉÃÅ ðÏÓÅÝÅÎÎÙÈ óÓÙÌÏË.\n"
+
+#: src/LYrcFile.c:693
+msgid ""
+"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
+"your keypad when the numlock is on will act as arrow keys:\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"and the corresponding keyboard numbers will act as arrow keys,\n"
+"regardless of whether numlock is on.\n"
+msgstr ""
+"åÓÌÉ keypad_mode ÕÓÔÁÎÏ×ÌÅÎÏ × \"NUMBERS_AS_ARROWS\", ÔÏ ÃÉÆÒÙ ÎÁ ×ÁÛÅÊ\n"
+"ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ËÌÁ×ÉÁÔÕÒÅ, ÅÓÌÉ ×ËÌÀÞÅÎ ÒÅÖÉÍ numlock, ÂÕÄÕÔ ÄÅÊÓÔ×Ï×ÁÔØ\n"
+"ËÁË ËÌÁ×ÉÛÉ ÓÔÒÅÌÏË:\n"
+" 8 = óÔÒÅÌËÁ ××ÅÒÈ\n"
+" 4 = óÔÒÅÌËÁ ×ÌÅ×Ï 6 = óÔÒÅÌËÁ ×ÐÒÁ×Ï\n"
+" 2 = óÔÒÅÌËÁ ×ÎÉÚ\n"
+"É ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÅ ÃÉÆÒÙ ÎÁ ÏÓÎÏ×ÎÏÊ ËÌÁ×ÉÁÔÕÒÅ ÂÕÄÕÔ ÄÅÊÓÔ×Ï×ÁÔØ ËÁË\n"
+"ËÌÁ×ÉÛÉ ÓÔÒÅÌÏË, ×ÎÅ ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÓÏÓÔÏÑÎÉÑ numlock.\n"
+
+#: src/LYrcFile.c:702
+msgid ""
+"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
+"appear next to each link and numbers are used to select links.\n"
+msgstr ""
+"åÓÌÉ keypad_mode ÕÓÔÁÎÏ×ÌÅÎÏ × ÓÏÓÔÏÑÎÉÅ \"LINKS_ARE_NUMBERED\", ÔÏ ÞÉÓÌÁ\n"
+"ÂÕÄÕÔ ÐÏÑ×ÌÑÔØÓÑ ÓÌÅÄÏÍ ÚÁ ËÁÖÄÏÊ ÓÓÙÌËÏÊ É ÏÎÉ ÍÏÇÕÔ ÂÙÔØ ÉÓÐÏÌØÚÏ×ÁÎÙ ÄÌÑ\n"
+"×ÙÂÏÒÁ ÓÓÙÌËÉ.\n"
+
+#: src/LYrcFile.c:706
+msgid ""
+"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
+"numbers will appear next to each link and visible form input field.\n"
+"Numbers are used to select links, or to move the \"current link\" to a\n"
+"form input field or button. In addition, options in popup menus are\n"
+"indexed so that the user may type an option number to select an option in\n"
+"a popup menu, even if the option isn't visible on the screen. Reference\n"
+"lists and output from the list command also enumerate form inputs.\n"
+msgstr ""
+"åÓÌÉ keypad_mode ÕÓÔÁÎÏ×ÌÅÎÏ × \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", ÔÏ\n"
+"ÞÉÓÌÁ ÂÕÄÕÔ ÐÏÑ×ÌÑÔØÓÑ ÓÌÅÄÏÍ ÚÁ ËÁÖÄÏÊ ÓÓÙÌËÏÊ É ÏÔÏÂÒÁÖÁÅÍÙÍ ÐÏÌÅÍ ××ÏÄÁ\n"
+"ÆÏÒÍÙ. þÉÓÌÁ ÉÓÐÏÌØÚÕÀÔÓÑ ÄÌÑ ×ÙÂÏÒÁ ÓÓÙÌÏË, ÉÌÉ ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ ÕËÁÚÁÔÅÌÑ\n"
+"\"ÔÅËÕÝÅÊ ÓÓÙÌËÉ\" ÎÁ ÐÏÌÅ ××ÏÄÁ ÉÌÉ ËÎÏÐËÕ ÆÏÒÍÙ. ëÒÏÍÅ ÔÏÇÏ, ÏÐÃÉÉ ×Ï\n"
+"×ÓÐÌÙ×ÁÀÝÉÈ ÍÅÎÀ ÉÎÄÅËÓÉÒÏ×ÁÎÙ ÔÁË, ÞÔÏ ÐÏÌØÚÏ×ÁÔÅÌØ ÄÌÑ ×ÙÂÏÒÁ ÍÏÖÅÔ ××ÅÓÔÉ\n"
+"ÎÏÍÅÒ ÏÐÃÉÉ, ÄÁÖÅ ÅÓÌÉ ÏÐÃÉÑ ÎÅ ×ÉÄÎÁ ÎÁ ÜËÒÁÎÅ. óÐÉÓËÉ ÓÓÙÌÏË É ÒÅÚÕÌØÔÁÔ\n"
+"ËÏÍÁÎÄÙ ×Ù×ÏÄÁ ÓÐÉÓËÁ ÔÁËÖÅ ÎÕÍÅÒÕÀÔ ÐÏÌÑ ××ÏÄÁ ÆÏÒÍÙ.\n"
+
+#: src/LYrcFile.c:715
+msgid ""
+"NOTE: Some fixed format documents may look disfigured when\n"
+"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
+"enabled.\n"
+msgstr ""
+"ðòéíåþáîéå: ÎÅËÏÔÏÒÙÅ ÄÏËÕÍÅÎÔÙ ÆÉËÓÉÒÏ×ÁÎÎÏÇÏ ÆÏÒÍÁÔÁ ÍÏÇÕÔ\n"
+"ÏÔÏÂÒÁÖÁÔØÓÑ ÎÅÐÒÁ×ÉÌØÎÏ, ÅÓÌÉ ×ËÌÀÞÅÎÙ ÏÐÃÉÉ \"LINKS_ARE_NUMBERED\"\n"
+"ÉÌÉ \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\".\n"
+
+#: src/LYrcFile.c:748
+msgid ""
+"Lynx User Defaults File\n"
+"\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
+msgstr ""
+"æÁÊÌ Lynx ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ ÏÐÃÉÊ ÐÏ ÕÍÏÌÞÁÎÉÀ\n"
+"\n"
+"üÔÏÔ ÆÁÊÌ ÓÏÄÅÒÖÉÔ ÏÐÃÉÉ, ÓÏÈÒÁÎÅÎÎÙÅ ÉÚ üËÒÁÎÁ ïÐÃÉÊ Lynx (ÏÂÙÞÎÏ\n"
+"Ó ÐÏÍÏÝØÀ ËÌÁ×ÉÛÉ '>'). ëÁË ÐÒÁ×ÉÌÏ, ÎÅÔ ÓÍÙÓÌÁ ÒÅÄÁËÔÉÒÏ×ÁÔØ ÜÔÏÔ ÆÁÊÌ\n"
+"×ÒÕÞÎÕÀ, Ô.Ë. ÜÔÉ ÏÐÃÉÉ ÐÏ ÕÍÏÌÞÁÎÉÀ ÍÏÇÕÔ ÉÚÍÅÎÑÔØÓÑ ÉÚ üËÒÁÎÁ ïÐÃÉÊ, É ËÏÇÄÁ\n"
+"× ÓÌÅÄÕÀÝÉÊ ÒÁÚ ÏÐÃÉÉ ÂÕÄÕÔ ÓÏÈÒÁÎÅÎÙ ÉÚ üËÒÁÎÁ ïÐÃÉÊ, ÜÔÏÔ ÆÁÊÌ ÂÕÄÅÔ\n"
+"ÐÏÌÎÏÓÔØÀ ÐÅÒÅÚÁÐÉÓÁÎ. ÷Ù ÂÙÌÉ ÐÒÅÄÕÐÒÅÖÄÅÎÙ...\n"
+"åÓÌÉ ×Ù ÉÝÅÔÅ ÏÂÝÉÊ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ, ÔÏ ÏÎ ÏÂÙÞÎÏ ÎÁÚÙ×ÁÅÔÓÑ lynx.cfg\n"
+"É ÉÍÅÅÔ ÄÒÕÇÏÅ ÓÏÄÅÒÖÁÎÉÅ É ÄÒÕÇÏÊ ÆÏÒÍÁÔ.\n"
+"üÔÏ ÎÅ ÔÏÔ ÆÁÊÌ.\n"
diff --git a/gnu/usr.bin/lynx/po/sl.po b/gnu/usr.bin/lynx/po/sl.po
index 413ecd3f631..1e79a5adef6 100644
--- a/gnu/usr.bin/lynx/po/sl.po
+++ b/gnu/usr.bin/lynx/po/sl.po
@@ -1,11 +1,5301 @@
+# Slovenian translation of Lynx WWW browser.
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Roman Maurer <roman.maurer@hermes.si>, 1999.
+# $Id: sl.po,v 1.2 2003/05/01 18:59:38 avsm Exp $
+# $Source: /home/cvs/src/gnu/usr.bin/lynx/po/Attic/sl.po,v $
+#
msgid ""
msgstr ""
-"Date: 1998-08-22 16:12:20-0400\n"
-"From: Webmaster Jim <jspath@bcpl.net>\n"
-"Content-Type: text/plain; charset=\n"
-"Xgettext-Options: --default-domain=po/de\n"
-"Files: src/LYMain.c\n"
+"Project-Id-Version: lynx 2.8.4\n"
+"POT-Creation-Date: 2001-06-01 18:55-0400\n"
+"PO-Revision-Date: 1999-12-29 12:30 +0200\n"
+"Last-Translator: Roman Maurer <roman.maurer@hermes.si>\n"
+"Language-Team: Slovenian <sl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
-#: src/LYMain.c:2502
-msgid "%s Version %s %s"
+#. ******************************************************************
+#. * The following definitions are for status line prompts, messages, or
+#. * warnings issued by Lynx during program execution. You can modify
+#. * them to make them more appropriate for your site. We recommend that
+#. * you extend these definitions to other languages using the gettext
+#. * library. There are also scattered uses of 'gettext()' throughout the
+#. * Lynx source, covering all but those messages which (a) are used for
+#. * debugging (CTRACE) or (b) are constants used in interaction with
+#. * other programs.
+#. *
+#. * Links to collections of alternate definitions, developed by the Lynx
+#. * User Community, are maintained in Lynx links:
+#. *
+#. * http://www.trill-home.com/lynx.html
+#. *
+#. * See ABOUT-NLS and po/readme for details and location of contributed
+#. * translations. When no translation is available, the English default is
+#. * used.
+#.
+#: LYMessages.c:29
+#, c-format
+msgid "Alert!: %s"
+msgstr "Pozor!: %s"
+
+#: LYMessages.c:30
+msgid "Welcome"
+msgstr "Dobrodo¹li"
+
+#: LYMessages.c:31 LYMessages.c:32
+msgid "Are you sure you want to quit?"
+msgstr "Ste preprièani, da ¾elite konèati?"
+
+#: LYMessages.c:34 LYMessages.c:35
+msgid "Really exit from Lynx?"
+msgstr "Zares zapustim Lynx?"
+
+#: LYMessages.c:37
+msgid "Connection interrupted."
+msgstr "Povezava prekinjena."
+
+#: LYMessages.c:38
+msgid "Data transfer interrupted."
+msgstr "Podatkovni prenos prekinjen."
+
+#: LYMessages.c:39
+msgid "Cancelled!!!"
+msgstr "Preklicano!!!"
+
+#: LYMessages.c:40
+msgid "Cancelling!"
+msgstr "Preklicujem!"
+
+#: LYMessages.c:41
+msgid "Excellent!!!"
+msgstr "Izvrstno!!!"
+
+#: LYMessages.c:42
+msgid "OK"
+msgstr "V redu."
+
+#: LYMessages.c:43
+msgid "Done!"
+msgstr "Opravljeno!"
+
+#: LYMessages.c:44
+msgid "Bad request!"
+msgstr "Slaba zahteva!"
+
+#: LYMessages.c:45
+msgid "previous"
+msgstr "prej¹nji"
+
+#: LYMessages.c:46
+msgid "next screen"
+msgstr "naslednji zaslon"
+
+#: LYMessages.c:47
+msgid "HELP!"
+msgstr "POMOÈ!"
+
+#: LYMessages.c:48
+msgid ", help on "
+msgstr ", pomoè za "
+
+#. #define HELP
+#: LYMessages.c:50
+msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
+msgstr "Ukazi: pu¹èice za premikanje ,?` za pomoè, ,q` za izhod, vraèalka za povratek."
+
+#. #define MOREHELP
+#: LYMessages.c:52
+msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
+msgstr "-- pritisnite presledek za veè, pu¹èice za premik, ,?` za pomoè, ,q` za izhod."
+
+#: LYMessages.c:53
+msgid "-- press space for next page --"
+msgstr "-- pritisnite presledek za naslednjo stran --"
+
+#: LYMessages.c:54
+msgid "URL too long"
+msgstr "Predolga pot"
+
+#. Inactive input fields, messages used with -tna option - kw
+#. #define FORM_LINK_TEXT_MESSAGE_INA
+#: LYMessages.c:60
+msgid "(Text entry field) Inactive. Press <return> to activate."
+msgstr ""
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA
+#: LYMessages.c:62
+msgid "(Textarea) Inactive. Press <return> to activate."
+msgstr ""
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA_E
+#: LYMessages.c:64
+#, c-format
+msgid "(Textarea) Inactive. Press <return> to activate (%s for editor)."
+msgstr "(Besedilo) Vnesite besedilo. Uporabljajte GOR/DOL ali TAB (%s za urejevalnik)."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA
+#: LYMessages.c:66
+msgid "(Form field) Inactive. Use <return> to edit."
+msgstr "(Vnosno polje) Vnesite besedilo. Na koncu uporabite <return> ('x' brez predpomnenja)."
+
+#. #define FORM_TEXT_SUBMIT_MESSAGE_INA_X
+#: LYMessages.c:68
+#, c-format
+msgid "(Form field) Inactive. Use <return> to edit (%s to submit with no cache)."
+msgstr "(Vnosno polje) Vnesite besedilo. Na koncu uporabite <return> (%s brez predpomnenja)."
+
+#. #define FORM_TEXT_RESUBMIT_MESSAGE_INA
+#: LYMessages.c:70
+msgid "(Form field) Inactive. Press <return> to edit, press <return> twice to submit."
+msgstr "(Vnosno polje) Vnesite besedilo. Na koncu uporabite <return>, pu¹èice ali tab za premik."
+
+#. #define FORM_TEXT_SUBMIT_MAILTO_MSG_INA
+#: LYMessages.c:72
+msgid "(mailto form field) Inactive. Press <return> to change."
+msgstr ""
+
+#. #define FORM_LINK_PASSWORD_MESSAGE_INA
+#: LYMessages.c:74
+msgid "(Password entry field) Inactive. Press <return> to activate."
+msgstr ""
+
+#. #define FORM_LINK_FILE_UNM_MSG
+#: LYMessages.c:77
+msgid "UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off."
+msgstr "NESPREMENLJIVO datoteèno polje. Uporabljajte GOR/DOL ali tab."
+
+#. #define FORM_LINK_FILE_MESSAGE
+#: LYMessages.c:79
+msgid "(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off."
+msgstr "(Datoteèno polje) Vnesite ime datoteke. Uporabljajte GOR/DOL ali tab."
+
+#. #define FORM_LINK_TEXT_MESSAGE
+#: LYMessages.c:81
+msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Tekstovno vnosno polje) Vnesite besedilo. Uporabljajte pu¹èici GOR/DOL ali tab."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE
+#: LYMessages.c:83
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off."
+msgstr "(Besedilo) Vnesite besedilo. Uporabljajte GOR/DOL ali TAB (^Ve za urejevalnik)."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_E
+#: LYMessages.c:85
+#, c-format
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor)."
+msgstr "(Besedilo) Vnesite besedilo. Uporabljajte GOR/DOL ali TAB (%s za urejevalnik)."
+
+#. #define FORM_LINK_TEXT_UNM_MSG
+#: LYMessages.c:87
+msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
+msgstr "NESPREMENLJIVO vnosno polje. Za premik uporabite pu¹èici gor ali dol ali Tab."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE
+#: LYMessages.c:89
+msgid "(Form field) Enter text. Use <return> to submit."
+msgstr "(Vnosno polje) Vnesite besedilo. Na koncu uporabite <return> ('x' brez predpomnenja)."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_X
+#: LYMessages.c:91
+#, c-format
+msgid "(Form field) Enter text. Use <return> to submit (%s for no cache)."
+msgstr "(Vnosno polje) Vnesite besedilo. Na koncu uporabite <return> (%s brez predpomnenja)."
+
+#. #define FORM_LINK_TEXT_RESUBMIT_MESSAGE
+#: LYMessages.c:93
+msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
+msgstr "(Vnosno polje) Vnesite besedilo. Na koncu uporabite <return>, pu¹èice ali tab za premik."
+
+#. #define FORM_LINK_TEXT_SUBMIT_UNM_MSG
+#: LYMessages.c:95
+msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
+msgstr "NESPREMENLJIVO polje obrazca. Uporabite tipke gor, dol ali tab za premik drugam."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_MSG
+#: LYMessages.c:97
+msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
+msgstr ""
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:99
+msgid "(mailto form field) Mail is disallowed so you cannot submit."
+msgstr ""
+
+#. #define FORM_LINK_PASSWORD_MESSAGE
+#: LYMessages.c:101
+msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr ""
+
+#. #define FORM_LINK_PASSWORD_UNM_MSG
+#: LYMessages.c:103
+msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
+msgstr ""
+
+#. #define FORM_LINK_CHECKBOX_MESSAGE
+#: LYMessages.c:105
+msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
+msgstr ""
+
+#. #define FORM_LINK_CHECKBOX_UNM_MSG
+#: LYMessages.c:107
+msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
+msgstr ""
+
+#. #define FORM_LINK_RADIO_MESSAGE
+#: LYMessages.c:109
+msgid "(Radio Button) Use right-arrow or <return> to toggle."
+msgstr ""
+
+#. #define FORM_LINK_RADIO_UNM_MSG
+#: LYMessages.c:111
+msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
+msgstr ""
+
+#. #define FORM_LINK_SUBMIT_PREFIX
+#: LYMessages.c:113
+msgid "Submit ('x' for no cache) to "
+msgstr ""
+
+#. #define FORM_LINK_RESUBMIT_PREFIX
+#: LYMessages.c:115
+msgid "Submit to "
+msgstr ""
+
+#. #define FORM_LINK_SUBMIT_MESSAGE
+#: LYMessages.c:117
+msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
+msgstr ""
+
+#. #define FORM_LINK_RESUBMIT_MESSAGE
+#: LYMessages.c:119
+msgid "(Form submit button) Use right-arrow or <return> to submit."
+msgstr ""
+
+#. #define FORM_LINK_SUBMIT_DIS_MSG
+#: LYMessages.c:121
+msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
+msgstr ""
+
+#. #define FORM_LINK_SUBMIT_MAILTO_PREFIX
+#: LYMessages.c:123
+msgid "Submit mailto form to "
+msgstr ""
+
+#. #define FORM_LINK_SUBMIT_MAILTO_MSG
+#: LYMessages.c:125
+msgid "(mailto form submit button) Use right-arrow or <return> to submit."
+msgstr ""
+
+#. #define FORM_LINK_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:127
+msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
+msgstr ""
+
+#. #define FORM_LINK_RESET_MESSAGE
+#: LYMessages.c:129
+msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
+msgstr ""
+
+#. #define FORM_LINK_RESET_DIS_MSG
+#: LYMessages.c:131
+msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
+msgstr ""
+
+#. #define FORM_LINK_OPTION_LIST_MESSAGE
+#: LYMessages.c:133
+msgid "(Option list) Hit return and use arrow keys and return to select option."
+msgstr ""
+
+#. #define CHOICE_LIST_MESSAGE
+#: LYMessages.c:135
+msgid "(Choice list) Hit return and use arrow keys and return to select option."
+msgstr ""
+
+#. #define FORM_LINK_OPTION_LIST_UNM_MSG
+#: LYMessages.c:137
+msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
+msgstr ""
+
+#. #define CHOICE_LIST_UNM_MSG
+#: LYMessages.c:139
+msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
+msgstr ""
+
+#: LYMessages.c:140
+msgid "Submitting form..."
+msgstr "Po¹iljamo obrazec..."
+
+#: LYMessages.c:141
+msgid "Resetting form..."
+msgstr "Resetiramo obrazec..."
+
+#. #define RELOADING_FORM
+#: LYMessages.c:143
+msgid "Reloading document. Any form entries will be lost!"
+msgstr "Ponovno nalagamo dokument. Vsi vnosi v obrazcu bodo izgubljeni!"
+
+#: LYMessages.c:144
+#, c-format
+msgid "Warning: Cannot transcode form data to charset %s!"
+msgstr "Pozor: Prevedba podatkov v znakovni nabor %s ni mogoèa!"
+
+#. #define NORMAL_LINK_MESSAGE
+#: LYMessages.c:147
+msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
+msgstr ""
+
+#: LYMessages.c:148
+msgid "The resource requested is not available at this time."
+msgstr ""
+
+#: LYMessages.c:149
+msgid "Enter Lynx keystroke command: "
+msgstr "Vnesite tipkovni ukaz Lynxu: "
+
+#: LYMessages.c:150
+msgid "Looking up "
+msgstr "I¹èemo "
+
+#: LYMessages.c:151
+#, c-format
+msgid "Getting %s"
+msgstr "Prena¹amo %s"
+
+#: LYMessages.c:152
+#, c-format
+msgid "Skipping %s"
+msgstr "Preskakujemo %s"
+
+#: LYMessages.c:153
+#, c-format
+msgid "Using %s"
+msgstr "Uporabljamo %s"
+
+#: LYMessages.c:154
+#, c-format
+msgid "Illegal URL: %s"
+msgstr "Nepravilni URL: %s"
+
+#: LYMessages.c:155
+#, c-format
+msgid "Badly formed address %s"
+msgstr "Slabo oblikovan naslov %s"
+
+#: LYMessages.c:156
+#, c-format
+msgid "URL: %s"
+msgstr "URL: %s"
+
+#: LYMessages.c:157
+msgid "Unable to access WWW file!!!"
+msgstr "Dostop do spletne datoteke ni mogoè!!!"
+
+#: LYMessages.c:158
+#, c-format
+msgid "This is a searchable index. Use %s to search."
+msgstr "To je kazalo z mo¾nostjo iskanja. Uporabite %s za iskanje."
+
+#. #define WWW_INDEX_MORE_MESSAGE
+#: LYMessages.c:160
+#, c-format
+msgid "--More-- This is a searchable index. Use %s to search."
+msgstr "--Naprej-- To je kazalo z mo¾nostjo iskanja. Uporabite %s za iskanje."
+
+#: LYMessages.c:161
+msgid "You have entered an invalid link number."
+msgstr "Vnesli ste neveljavno ¹tevilko povezave."
+
+#. #define SOURCE_HELP
+#: LYMessages.c:163
+msgid "Currently viewing document source. Press '\\' to return to rendered version."
+msgstr ""
+
+#. #define NOVICE_LINE_ONE
+#: LYMessages.c:165
+msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
+msgstr ""
+
+#. #define NOVICE_LINE_TWO
+#: LYMessages.c:167
+msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
+msgstr ""
+
+#. #define NOVICE_LINE_TWO_A
+#: LYMessages.c:169
+msgid " O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)uit \n"
+msgstr ""
+
+#. #define NOVICE_LINE_TWO_B
+#: LYMessages.c:171
+msgid " O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n"
+msgstr ""
+
+#. #define NOVICE_LINE_TWO_C
+#: LYMessages.c:173
+msgid "O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)emove \n"
+msgstr ""
+
+#. #define FORM_NOVICELINE_ONE
+#: LYMessages.c:175
+msgid " Enter text into the field by typing on the keyboard "
+msgstr ""
+
+#. #define FORM_NOVICELINE_TWO
+#: LYMessages.c:177
+msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
+msgstr ""
+
+#. #define FORM_NOVICELINE_TWO_DELBL
+#: LYMessages.c:179
+msgid " Ctrl-U to delete text in field, [Backspace] to delete a character "
+msgstr ""
+
+#. #define FORM_NOVICELINE_TWO_VAR
+#: LYMessages.c:181
+#, c-format
+msgid " %s to delete all text in field, [Backspace] to delete a character "
+msgstr ""
+
+#. #define FORM_NOVICELINE_TWO_DELBL_VAR
+#: LYMessages.c:183
+#, c-format
+msgid " %s to delete text in field, [Backspace] to delete a character "
+msgstr ""
+
+#. mailto
+#: LYMessages.c:186
+msgid "Malformed mailto form submission! Cancelled!"
+msgstr ""
+
+#: LYMessages.c:187
+msgid "Warning! Control codes in mail address replaced by ?"
+msgstr ""
+
+#: LYMessages.c:188
+msgid "Mail disallowed! Cannot submit."
+msgstr ""
+
+#: LYMessages.c:189
+msgid "Mailto form submission failed!"
+msgstr ""
+
+#: LYMessages.c:190
+msgid "Mailto form submission Cancelled!!!"
+msgstr ""
+
+#: LYMessages.c:191
+msgid "Sending form content..."
+msgstr ""
+
+#: LYMessages.c:192
+msgid "No email address is present in mailto URL!"
+msgstr ""
+
+#. #define MAILTO_URL_TEMPOPEN_FAILED
+#: LYMessages.c:194
+msgid "Unable to open temporary file for mailto URL!"
+msgstr ""
+
+#. #define INC_ORIG_MSG_PROMPT
+#: LYMessages.c:196
+msgid "Do you wish to include the original message?"
+msgstr ""
+
+#. #define INC_PREPARSED_MSG_PROMPT
+#: LYMessages.c:198
+msgid "Do you wish to include the preparsed source?"
+msgstr ""
+
+#. #define SPAWNING_EDITOR_FOR_MAIL
+#: LYMessages.c:200
+msgid "Spawning your selected editor to edit mail message"
+msgstr ""
+
+#. #define ERROR_SPAWNING_EDITOR
+#: LYMessages.c:202
+msgid "Error spawning editor, check your editor definition in the options menu"
+msgstr ""
+
+#: LYMessages.c:203
+msgid "Send this comment?"
+msgstr "Po¹ljemo ta komentar?"
+
+#: LYMessages.c:204
+msgid "Send this message?"
+msgstr "Po¹ljemo to sporoèilo?"
+
+#: LYMessages.c:205
+msgid "Sending your message..."
+msgstr "Po¹iljamo va¹e sporoèilo..."
+
+#: LYMessages.c:206
+msgid "Sending your comment:"
+msgstr "Po¹iljamo va¹ komentar:"
+
+#. textarea
+#: LYMessages.c:209
+msgid "Not in a TEXTAREA; cannot use external editor."
+msgstr ""
+
+#: LYMessages.c:210
+msgid "Not in a TEXTAREA; cannot use command."
+msgstr ""
+
+#: LYMessages.c:213
+msgid "file: ACTIONs are disallowed!"
+msgstr ""
+
+#. #define FILE_SERVED_LINKS_DISALLOWED
+#: LYMessages.c:215
+msgid "file: URLs via served links are disallowed!"
+msgstr ""
+
+#: LYMessages.c:216
+msgid "Access to local files denied."
+msgstr ""
+
+#: LYMessages.c:217
+msgid "file: URLs via bookmarks are disallowed!"
+msgstr ""
+
+#. #define SPECIAL_VIA_EXTERNAL_DISALLOWED
+#: LYMessages.c:219
+msgid "This special URL is not allowed in external documents!"
+msgstr ""
+
+#: LYMessages.c:220
+msgid "Press <return> to return to Lynx."
+msgstr "Pritisnite <return> za vrnitev v Lynx."
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:223
+msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
+msgstr ""
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:227
+msgid "Type EXIT to return to Lynx.\n"
+msgstr "Napi¹ite EXIT za vrnitev v Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:230
+msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
+msgstr ""
+
+#: LYMessages.c:233
+msgid "Spawning is currently disabled."
+msgstr ""
+
+#: LYMessages.c:234
+msgid "The 'd'ownload command is currently disabled."
+msgstr ""
+
+#: LYMessages.c:235
+msgid "You cannot download an input field."
+msgstr ""
+
+#: LYMessages.c:236
+msgid "Form has a mailto action! Cannot download."
+msgstr ""
+
+#: LYMessages.c:237
+msgid "You cannot download a mailto: link."
+msgstr ""
+
+#: LYMessages.c:238
+msgid "You cannot download cookies."
+msgstr "Ne morete prenesti pi¹kotov."
+
+#: LYMessages.c:239
+msgid "You cannot download a printing option."
+msgstr "Ne morete prenesti tiskalni¹ke izbire."
+
+#: LYMessages.c:240
+msgid "You cannot download an upload option."
+msgstr "Ne morete prenesti izbire za po¹iljanje."
+
+#: LYMessages.c:241
+msgid "You cannot download an permit option."
+msgstr "Ne morete prenesti izbire za dovoljenje."
+
+#: LYMessages.c:242
+msgid "This special URL cannot be downloaded!"
+msgstr ""
+
+#: LYMessages.c:243
+msgid "Nothing to download."
+msgstr "Nièesar ni za prenesti."
+
+#: LYMessages.c:244
+msgid "Trace ON!"
+msgstr "Sledenje VKLJUÈENO!"
+
+#: LYMessages.c:245
+msgid "Trace OFF!"
+msgstr "Sledenje IZKLJUÈENO!"
+
+#. #define CLICKABLE_IMAGES_ON
+#: LYMessages.c:247
+msgid "Links will be included for all images! Reloading..."
+msgstr ""
+
+#. #define CLICKABLE_IMAGES_OFF
+#: LYMessages.c:249
+msgid "Standard image handling restored! Reloading..."
+msgstr ""
+
+#. #define PSEUDO_INLINE_ALTS_ON
+#: LYMessages.c:251
+msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
+msgstr ""
+
+#. #define PSEUDO_INLINE_ALTS_OFF
+#: LYMessages.c:253
+msgid "Inlines without an ALT string specified will be ignored! Reloading..."
+msgstr ""
+
+#: LYMessages.c:254
+msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
+msgstr ""
+
+#: LYMessages.c:255
+msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
+msgstr ""
+
+#. #define HEAD_D_L_OR_CANCEL
+#: LYMessages.c:257
+msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
+msgstr ""
+
+#. #define HEAD_D_OR_CANCEL
+#: LYMessages.c:259
+msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
+msgstr ""
+
+#: LYMessages.c:260
+msgid "Sorry, the document is not an http URL."
+msgstr "Oprostite, sestavek ni URL vrste http."
+
+#: LYMessages.c:261
+msgid "Sorry, the link is not an http URL."
+msgstr "Oprostite, povezava ni URL vrste http."
+
+#: LYMessages.c:262
+msgid "Sorry, the ACTION for this form is disabled."
+msgstr ""
+
+#. #define FORM_ACTION_NOT_HTTP_URL
+#: LYMessages.c:264
+msgid "Sorry, the ACTION for this form is not an http URL."
+msgstr ""
+
+#: LYMessages.c:265
+msgid "Not an http URL or form ACTION!"
+msgstr ""
+
+#: LYMessages.c:266
+msgid "This special URL cannot be a form ACTION!"
+msgstr ""
+
+#: LYMessages.c:267
+msgid "URL is not in starting realm!"
+msgstr ""
+
+#: LYMessages.c:268
+msgid "News posting is disabled!"
+msgstr ""
+
+#: LYMessages.c:269
+msgid "File management support is disabled!"
+msgstr ""
+
+#: LYMessages.c:270
+msgid "No jump file is currently available."
+msgstr ""
+
+#: LYMessages.c:271
+msgid "Jump to (use '?' for list): "
+msgstr ""
+
+#: LYMessages.c:272
+msgid "Jumping to a shortcut URL is disallowed!"
+msgstr ""
+
+#: LYMessages.c:273
+msgid "Random URL is disallowed! Use a shortcut."
+msgstr ""
+
+#: LYMessages.c:274
+msgid "No random URLs have been used thus far."
+msgstr ""
+
+#: LYMessages.c:275
+msgid "Bookmark features are currently disabled."
+msgstr ""
+
+#: LYMessages.c:276
+msgid "Execution via bookmarks is disabled."
+msgstr ""
+
+#. #define BOOKMARK_FILE_NOT_DEFINED
+#: LYMessages.c:278
+#, c-format
+msgid "Bookmark file is not defined. Use %s to see options."
+msgstr ""
+
+#. #define NO_TEMP_FOR_HOTLIST
+#: LYMessages.c:280
+msgid "Unable to open tempfile for X Mosaic hotlist conversion."
+msgstr ""
+
+#: LYMessages.c:281
+msgid "ERROR - unable to open bookmark file."
+msgstr ""
+
+#. #define BOOKMARK_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:283
+msgid "Unable to open bookmark file for deletion of link."
+msgstr ""
+
+#. #define BOOKSCRA_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:285
+msgid "Unable to open scratch file for deletion of link."
+msgstr ""
+
+#: LYMessages.c:287
+msgid "Error renaming scratch file."
+msgstr ""
+
+#: LYMessages.c:289
+msgid "Error renaming temporary file."
+msgstr ""
+
+#. #define BOOKTEMP_COPY_FAIL
+#: LYMessages.c:291
+msgid "Unable to copy temporary file for deletion of link."
+msgstr ""
+
+#. #define BOOKTEMP_REOPEN_FAIL_FOR_DEL
+#: LYMessages.c:293
+msgid "Unable to reopen temporary file for deletion of link."
+msgstr ""
+
+#. #define BOOKMARK_LINK_NOT_ONE_LINE
+#: LYMessages.c:296
+msgid "Link is not by itself all on one line in bookmark file."
+msgstr ""
+
+#: LYMessages.c:297
+msgid "Bookmark deletion failed."
+msgstr ""
+
+#. #define BOOKMARKS_NOT_TRAVERSED
+#: LYMessages.c:299
+msgid "Bookmark files cannot be traversed (only http URLs)."
+msgstr ""
+
+#. #define BOOKMARKS_NOT_OPEN
+#: LYMessages.c:301
+msgid "Unable to open bookmark file, use 'a' to save a link first"
+msgstr ""
+
+#: LYMessages.c:302
+msgid "There are no links in this bookmark file!"
+msgstr ""
+
+#. #define BOOK_D_L_OR_CANCEL
+#: LYMessages.c:304
+msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
+msgstr ""
+
+#: LYMessages.c:305
+msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
+msgstr ""
+
+#: LYMessages.c:306
+msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
+msgstr ""
+
+#. #define NOBOOK_POST_FORM
+#: LYMessages.c:308
+msgid "Documents from forms with POST content cannot be saved as bookmarks."
+msgstr ""
+
+#: LYMessages.c:309
+msgid "Cannot save form fields/links"
+msgstr ""
+
+#. #define NOBOOK_HSML
+#: LYMessages.c:311
+msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
+msgstr ""
+
+#. #define CONFIRM_BOOKMARK_DELETE
+#: LYMessages.c:313
+msgid "Do you really want to delete this link from your bookmark file?"
+msgstr ""
+
+#: LYMessages.c:314
+msgid "Malformed address."
+msgstr "Zmalièen naslov."
+
+#. #define HISTORICAL_ON_MINIMAL_OFF
+#: LYMessages.c:316
+msgid "Historical comment parsing ON (Minimal is overridden)!"
+msgstr ""
+
+#. #define HISTORICAL_OFF_MINIMAL_ON
+#: LYMessages.c:318
+msgid "Historical comment parsing OFF (Minimal is in effect)!"
+msgstr ""
+
+#. #define HISTORICAL_ON_VALID_OFF
+#: LYMessages.c:320
+msgid "Historical comment parsing ON (Valid is overridden)!"
+msgstr ""
+
+#. #define HISTORICAL_OFF_VALID_ON
+#: LYMessages.c:322
+msgid "Historical comment parsing OFF (Valid is in effect)!"
+msgstr ""
+
+#. #define MINIMAL_ON_IN_EFFECT
+#: LYMessages.c:324
+msgid "Minimal comment parsing ON (and in effect)!"
+msgstr ""
+
+#. #define MINIMAL_OFF_VALID_ON
+#: LYMessages.c:326
+msgid "Minimal comment parsing OFF (Valid is in effect)!"
+msgstr ""
+
+#. #define MINIMAL_ON_BUT_HISTORICAL
+#: LYMessages.c:328
+msgid "Minimal comment parsing ON (but Historical is in effect)!"
+msgstr ""
+
+#. #define MINIMAL_OFF_HISTORICAL_ON
+#: LYMessages.c:330
+msgid "Minimal comment parsing OFF (Historical is in effect)!"
+msgstr ""
+
+#: LYMessages.c:331
+msgid "Soft double-quote parsing ON!"
+msgstr ""
+
+#: LYMessages.c:332
+msgid "Soft double-quote parsing OFF!"
+msgstr ""
+
+#: LYMessages.c:333
+msgid "Now using TagSoup parsing of HTML."
+msgstr ""
+
+#: LYMessages.c:334
+msgid "Now using SortaSGML parsing of HTML!"
+msgstr ""
+
+#: LYMessages.c:335
+msgid "You are already at the end of this document."
+msgstr ""
+
+#: LYMessages.c:336
+msgid "You are already at the beginning of this document."
+msgstr ""
+
+#: LYMessages.c:337
+#, c-format
+msgid "You are already at page %d of this document."
+msgstr ""
+
+#: LYMessages.c:338
+#, c-format
+msgid "Link number %d already is current."
+msgstr ""
+
+#: LYMessages.c:339
+msgid "You are already at the first document"
+msgstr ""
+
+#: LYMessages.c:340
+msgid "There are no links above this line of the document."
+msgstr ""
+
+#: LYMessages.c:341
+msgid "There are no links below this line of the document."
+msgstr ""
+
+#. #define MAXLEN_REACHED_DEL_OR_MOV
+#: LYMessages.c:343
+msgid "Maximum length reached! Delete text or move off field."
+msgstr ""
+
+#. #define NOT_ON_SUBMIT_OR_LINK
+#: LYMessages.c:345
+msgid "You are not on a form submission button or normal link."
+msgstr ""
+
+#. #define NEED_CHECKED_RADIO_BUTTON
+#: LYMessages.c:347
+msgid "One radio button must be checked at all times!"
+msgstr ""
+
+#: LYMessages.c:348
+msgid "No submit button for this form, submit single text field?"
+msgstr ""
+
+#: LYMessages.c:349
+msgid "Do you want to go back to the previous document?"
+msgstr ""
+
+#: LYMessages.c:350
+msgid "Use arrows or tab to move off of field."
+msgstr "Uporabite pu¹èice ali tab za premik drugam."
+
+#. #define ENTER_TEXT_ARROWS_OR_TAB
+#: LYMessages.c:352
+msgid "Enter text. Use arrows or tab to move off of field."
+msgstr "Vnesite besedilo. Uporabite pu¹èice ali tab za premik drugam."
+
+#: LYMessages.c:353
+msgid "** Bad HTML!! No form action defined. **"
+msgstr "** Slab HTML!! V obrazcu ni definirane akcije. **"
+
+#: LYMessages.c:354
+msgid "Bad HTML!! Unable to create popup window!"
+msgstr ""
+
+#: LYMessages.c:355
+msgid "Unable to create popup window!"
+msgstr ""
+
+#: LYMessages.c:356
+msgid "Goto a random URL is disallowed!"
+msgstr ""
+
+#: LYMessages.c:357
+msgid "Goto a non-http URL is disallowed!"
+msgstr "Premik na URL, ki ni http, ni dovoljen!"
+
+#: LYMessages.c:358
+#, c-format
+msgid "You are not allowed to goto \"%s\" URLs"
+msgstr "Ni vam dovoljeno odpreti URL-jev \"%s\""
+
+#: LYMessages.c:359
+msgid "URL to open: "
+msgstr "URL za odpiranje: "
+
+#: LYMessages.c:360
+msgid "Edit the current Goto URL: "
+msgstr ""
+
+#: LYMessages.c:361
+msgid "Edit the previous Goto URL: "
+msgstr ""
+
+#: LYMessages.c:362
+msgid "Edit a previous Goto URL: "
+msgstr ""
+
+#: LYMessages.c:363
+msgid "Current document has POST data."
+msgstr ""
+
+#: LYMessages.c:364
+msgid "Edit this document's URL: "
+msgstr "Uredimo URL tega sestavka: "
+
+#: LYMessages.c:365
+msgid "Edit the current link's URL: "
+msgstr "Uredimo URL trenutne povezave: "
+
+#: LYMessages.c:366
+msgid "You cannot edit File Management URLs"
+msgstr ""
+
+#: LYMessages.c:367
+msgid "Enter a database query: "
+msgstr ""
+
+#: LYMessages.c:368
+msgid "Enter a whereis query: "
+msgstr ""
+
+#: LYMessages.c:369
+msgid "Edit the current query: "
+msgstr ""
+
+#: LYMessages.c:370
+msgid "Edit the previous query: "
+msgstr ""
+
+#: LYMessages.c:371
+msgid "Edit a previous query: "
+msgstr ""
+
+#. #define USE_C_R_TO_RESUB_CUR_QUERY
+#: LYMessages.c:373
+msgid "Use Control-R to resubmit the current query."
+msgstr ""
+
+#: LYMessages.c:374
+msgid "Edit the current shortcut: "
+msgstr ""
+
+#: LYMessages.c:375
+msgid "Edit the previous shortcut: "
+msgstr ""
+
+#: LYMessages.c:376
+msgid "Edit a previous shortcut: "
+msgstr ""
+
+#: LYMessages.c:377
+#, c-format
+msgid "Key '%c' is not mapped to a jump file!"
+msgstr ""
+
+#: LYMessages.c:378
+msgid "Cannot locate jump file!"
+msgstr ""
+
+#: LYMessages.c:379
+msgid "Cannot open jump file!"
+msgstr ""
+
+#: LYMessages.c:380
+msgid "Error reading jump file!"
+msgstr ""
+
+#: LYMessages.c:381
+msgid "Out of memory reading jump file!"
+msgstr ""
+
+#: LYMessages.c:382
+msgid "Out of memory reading jump table!"
+msgstr ""
+
+#: LYMessages.c:383
+msgid "No index is currently available."
+msgstr "Trenutno ni dostopno nobeno kazalo."
+
+#. #define CONFIRM_MAIN_SCREEN
+#: LYMessages.c:385
+msgid "Do you really want to go to the Main screen?"
+msgstr "Ali res ¾elite skoèiti na Glavni zaslon?"
+
+#: LYMessages.c:386
+msgid "You are already at main screen!"
+msgstr "®e zdaj smo v glavnem zaslonu!"
+
+#. #define NOT_ISINDEX
+#: LYMessages.c:388
+msgid "Not a searchable indexed document -- press '/' to search for a text string"
+msgstr ""
+
+#. #define NO_OWNER
+#: LYMessages.c:390
+msgid "No owner is defined for this file so you cannot send a comment"
+msgstr "Za to datoteko ni definiranega lastnika, torej ne morete poslati komentarja"
+
+#: LYMessages.c:391
+#, c-format
+msgid "No owner is defined. Use %s?"
+msgstr "Lastnik ni definiran. Uporabimo %s?"
+
+#: LYMessages.c:392
+msgid "Do you wish to send a comment?"
+msgstr "Ali ¾elite poslati komentar?"
+
+#: LYMessages.c:393
+msgid "Mail is disallowed so you cannot send a comment"
+msgstr "Po¹ta je onemogoèena, zato ne moremo poslati komentarja"
+
+#: LYMessages.c:394
+msgid "The 'e'dit command is currently disabled."
+msgstr "Ukaz ur,e`di je trenutno onemogoèen."
+
+#: LYMessages.c:395
+msgid "External editing is currently disabled."
+msgstr "Zunanja podpora je trenutno onemogoèena."
+
+#: LYMessages.c:396
+msgid "System error - failure to get status."
+msgstr "Sistemska napaka - ne moremo dobiti statusa."
+
+#: LYMessages.c:397
+msgid "No editor is defined!"
+msgstr "Ni definiranega urejevalnika!"
+
+#: LYMessages.c:398
+msgid "The 'p'rint command is currently disabled."
+msgstr "Ukaz natisni (p) je trenutno onemogoèen."
+
+#: LYMessages.c:399
+msgid "Document has no Toolbar links or Banner."
+msgstr ""
+
+#: LYMessages.c:400
+msgid "Unable to open traversal file."
+msgstr ""
+
+#: LYMessages.c:401
+msgid "Unable to open traversal found file."
+msgstr ""
+
+#: LYMessages.c:402
+msgid "Unable to open reject file."
+msgstr "Ne moremo odpreti datoteke z zavrnjenimi URL-ji."
+
+#: LYMessages.c:403
+msgid "Unable to open traversal errors output file"
+msgstr ""
+
+#: LYMessages.c:404
+msgid "TRAVERSAL WAS INTERRUPTED"
+msgstr ""
+
+#: LYMessages.c:405
+msgid "Follow link (or goto link or page) number: "
+msgstr ""
+
+#: LYMessages.c:406
+msgid "Select option (or page) number: "
+msgstr "Izberite ¹tevilko mo¾nosti (ali strani): "
+
+#: LYMessages.c:407
+#, c-format
+msgid "Option number %d already is current."
+msgstr "Mo¾nost ¹tevilka %d je ¾e zdaj trenutna."
+
+#. #define ALREADY_AT_OPTION_END
+#: LYMessages.c:409
+msgid "You are already at the end of this option list."
+msgstr "®e zdaj smo na vrhu tega seznama izbir."
+
+#. #define ALREADY_AT_OPTION_BEGIN
+#: LYMessages.c:411
+msgid "You are already at the beginning of this option list."
+msgstr "®e zdaj smo na zaèetku tega seznama mo¾nosti."
+
+#. #define ALREADY_AT_OPTION_PAGE
+#: LYMessages.c:413
+#, c-format
+msgid "You are already at page %d of this option list."
+msgstr "®e zdaj smo na strani %d tega seznama mo¾nosti."
+
+#: LYMessages.c:414
+msgid "You have entered an invalid option number."
+msgstr "Vnesli ste neveljavno ¹tevilko mo¾nosti."
+
+#: LYMessages.c:415
+msgid "** Bad HTML!! Use -trace to diagnose. **"
+msgstr "** Slab HTML!! Uporabite -trace za diagnozo. **"
+
+#: LYMessages.c:416
+msgid "Give name of file to save in"
+msgstr "Podajte ime datoteke za shranitev"
+
+#: LYMessages.c:417
+msgid "Can't save data to file -- please run WWW locally"
+msgstr "Ne moremo posneti podatkov v datoteko -- prosim, po¾enite WWW lokalno"
+
+#: LYMessages.c:418
+msgid "Can't open temporary file!"
+msgstr "Ne moremo odpreti zaèasne datoteke!"
+
+#: LYMessages.c:419
+msgid "Can't open output file! Cancelling!"
+msgstr "Ne moremo odpreti izhodne datoteke! Prekinitev!"
+
+#: LYMessages.c:420
+msgid "Execution is disabled."
+msgstr "Izvajanje je onemogoèeno."
+
+#. #define EXECUTION_DISABLED_FOR_FILE
+#: LYMessages.c:422
+#, c-format
+msgid "Execution is not enabled for this file. See the Options menu (use %s)."
+msgstr "Izvajanje za to datoteko ni omogoèeno. Poglejte menu Izbire (uporabite %s)."
+
+#. #define EXECUTION_NOT_COMPILED
+#: LYMessages.c:424
+msgid "Execution capabilities are not compiled into this version."
+msgstr "Zmo¾nosti izvajanja niso prevedene v to razlièico."
+
+#: LYMessages.c:425
+msgid "This file cannot be displayed on this terminal."
+msgstr "Ta datoteka ne more biti prikazana na tem terminalu."
+
+#. #define CANNOT_DISPLAY_FILE_D_OR_C
+#: LYMessages.c:427
+msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
+msgstr "Ta datoteka ne more biti prikazana na tem terminalu: D) prenos ali C) prekinitev"
+
+#: LYMessages.c:428
+#, c-format
+msgid "%s D)ownload, or C)ancel"
+msgstr "%s D) prenos, ali C) prekinitev"
+
+#: LYMessages.c:429
+msgid "Cancelling file."
+msgstr "Prekinjamo z datoteko."
+
+#: LYMessages.c:430
+msgid "Retrieving file. - PLEASE WAIT -"
+msgstr "Jemljemo datoteko. - PROSIM, POÈAKAJTE -"
+
+#: LYMessages.c:431
+msgid "Enter a filename: "
+msgstr "Vnesite ime datoteke: "
+
+#: LYMessages.c:432
+msgid "Edit the previous filename: "
+msgstr "Uredite prej¹nje ime datoteke: "
+
+#: LYMessages.c:433
+msgid "Edit a previous filename: "
+msgstr "Uredite kak¹no prej¹nje ime datoteke: "
+
+#: LYMessages.c:434
+msgid "Enter a new filename: "
+msgstr "Vnesite novo ime datoteke: "
+
+#: LYMessages.c:435
+msgid "File name may not begin with a dot."
+msgstr "Ime datoteke se ne sme zaèeti s piko."
+
+#: LYMessages.c:437
+msgid "File exists. Create higher version?"
+msgstr "Datoteka obstaja. Ustvarimo vi¹jo razlièico?"
+
+#: LYMessages.c:439
+msgid "File exists. Overwrite?"
+msgstr "Datoteka obstaja. Prepi¹emo?"
+
+#: LYMessages.c:441
+msgid "Cannot write to file."
+msgstr "Ne moremo pisati v datoteko."
+
+#: LYMessages.c:442
+msgid "ERROR! - download command is misconfigured."
+msgstr "NAPAKA! - ukaz za jemanje je napaèno nastavljen."
+
+#: LYMessages.c:443
+msgid "Unable to download file."
+msgstr "Ne moremo prenesti datoteke."
+
+#: LYMessages.c:444
+msgid "Reading directory..."
+msgstr "Beremo imenik..."
+
+#: LYMessages.c:445
+msgid "Building directory listing..."
+msgstr "Gradimo seznam vsebine imenika ..."
+
+#: LYMessages.c:446
+msgid "Saving..."
+msgstr "Shranjujemo ..."
+
+#: LYMessages.c:447
+#, c-format
+msgid "Could not edit file '%s'."
+msgstr "Ne moremo urediti datoteke ,%s`."
+
+#: LYMessages.c:448
+msgid "Unable to access document!"
+msgstr "Ne moremo dostopati do sestavka!"
+
+#: LYMessages.c:449
+msgid "Could not access file."
+msgstr "Ne moremo dostopati do datoteke."
+
+#: LYMessages.c:450
+msgid "Could not access directory."
+msgstr "Ne moremo dostopati do imenika."
+
+#: LYMessages.c:451
+msgid "Could not load data."
+msgstr "Ne moremo nalo¾iti podatkov."
+
+#. #define CANNOT_EDIT_REMOTE_FILES
+#: LYMessages.c:453
+msgid "Lynx cannot currently (e)dit remote WWW files."
+msgstr "Lynx trenutno ne zmore ur(e)diti oddaljenih spletnih datotek."
+
+#. #define CANNOT_EDIT_FIELD
+#: LYMessages.c:455
+msgid "This field cannot be (e)dited with an external editor."
+msgstr "To polje ne more biti ur(e)jeno z zunanjim urejevalnikom."
+
+#: LYMessages.c:456
+msgid "Bad rule"
+msgstr "Slabo pravilo"
+
+#: LYMessages.c:457
+msgid "Insufficient operands:"
+msgstr "Premalo operandov:"
+
+#: LYMessages.c:458
+msgid "You are not authorized to edit this file."
+msgstr "Niste poobla¹èeni za urejanje te datoteke."
+
+#: LYMessages.c:459
+msgid "Title: "
+msgstr "Naslov: "
+
+#: LYMessages.c:460
+msgid "Subject: "
+msgstr "Predmet: "
+
+#: LYMessages.c:461
+msgid "Username: "
+msgstr "Uporabni¹ko ime: "
+
+#: LYMessages.c:462
+msgid "Password: "
+msgstr "Geslo: "
+
+#: LYMessages.c:463
+msgid "lynx: Username and Password required!!!"
+msgstr "lynx: Uporabni¹ko ime in geslo sta zahtevani!!!"
+
+#: LYMessages.c:464
+msgid "lynx: Password required!!!"
+msgstr "lynx: Geslo je zahtevano!!!"
+
+#: LYMessages.c:465
+msgid "Clear all authorization info for this session?"
+msgstr "Pobri¹emo vse avtorizacijske podatke za to sejo?"
+
+#: LYMessages.c:466
+msgid "Authorization info cleared."
+msgstr "Avtorizacijski podatki pobrisani."
+
+#: LYMessages.c:467
+msgid "Authorization failed. Retry?"
+msgstr "Avtorizaciji je spodletelo. Poskusimo ¹e enkrat?"
+
+#: LYMessages.c:468
+msgid "cgi support has been disabled."
+msgstr "Sistemski upravitelj je onemogoèil podporo CGI."
+
+#. #define CGI_NOT_COMPILED
+#: LYMessages.c:470
+msgid "Lynxcgi capabilities are not compiled into this version."
+msgstr "V tej razlièici ni prevedene mo¾nosti Lynxcgi."
+
+#: LYMessages.c:471
+#, c-format
+msgid "Sorry, no known way of converting %s to %s."
+msgstr "®al, ni znanega naèina za pretvarjanje %s v %s."
+
+#: LYMessages.c:472
+msgid "Unable to set up connection."
+msgstr "Ne moremo nastaviti povezave."
+
+#: LYMessages.c:473
+msgid "Unable to make connection"
+msgstr "Ne moremo vzpostaviti povezave."
+
+#. #define MALFORMED_EXEC_REQUEST
+#: LYMessages.c:475
+msgid "Executable link rejected due to malformed request."
+msgstr "Izvedljiva povezava zavrnjena zaradi zmalièenega zahtevka."
+
+#. #define BADCHAR_IN_EXEC_LINK
+#: LYMessages.c:477
+#, c-format
+msgid "Executable link rejected due to `%c' character."
+msgstr "Izvedljiva povezava zavrnjena zaradi znaka ,%c`."
+
+#. #define RELPATH_IN_EXEC_LINK
+#: LYMessages.c:479
+msgid "Executable link rejected due to relative path string ('../')."
+msgstr "Izvedljiva povezava zavrnjena zaradi niza za relativno pot (,../`)."
+
+#. #define BADLOCPATH_IN_EXEC_LINK
+#: LYMessages.c:481
+msgid "Executable link rejected due to location or path."
+msgstr "Izvedljiva povezava zavrnjena zaradi lokacije ali poti."
+
+#: LYMessages.c:482
+msgid "Mail access is disabled!"
+msgstr "Po¹tni dostop je onemogoèen!"
+
+#. #define ACCESS_ONLY_LOCALHOST
+#: LYMessages.c:484
+msgid "Only files and servers on the local host can be accessed."
+msgstr "Dostopne so le datoteke in stre¾niki na lokalnem raèunalniku."
+
+#: LYMessages.c:485
+msgid "Telnet access is disabled!"
+msgstr "Dostop prek telneta je onemogoèen!"
+
+#. #define TELNET_PORT_SPECS_DISABLED
+#: LYMessages.c:487
+msgid "Telnet port specifications are disabled."
+msgstr ""
+
+#: LYMessages.c:488
+msgid "USENET news access is disabled!"
+msgstr "Dostop novièarskih skupin USENET je onemogoèen!"
+
+#: LYMessages.c:489
+msgid "Rlogin access is disabled!"
+msgstr "Dostop s programom rlogin je onemogoèen!"
+
+#: LYMessages.c:490
+msgid "Ftp access is disabled!"
+msgstr "Dostop prek FTP je onemogoèen!"
+
+#: LYMessages.c:491
+msgid "There are no references from this document."
+msgstr "Iz tega dokumenta ni sklicevanj."
+
+#: LYMessages.c:492
+msgid "There are only hidden links from this document."
+msgstr "Iz tega dokumenta vodijo le skrite povezave."
+
+#: LYMessages.c:494
+msgid "Unable to open command file."
+msgstr "Ne moremo odpreti ukazne datoteke."
+
+#: LYMessages.c:496
+msgid "News Post Cancelled!!!"
+msgstr "Po¹iljanje novièarskega èlanka preklicano!!!"
+
+#. #define SPAWNING_EDITOR_FOR_NEWS
+#: LYMessages.c:498
+msgid "Spawning your selected editor to edit news message"
+msgstr ""
+
+#: LYMessages.c:499
+msgid "Post this message?"
+msgstr "Po¹ljemo to sporoèilo?"
+
+#: LYMessages.c:500
+#, c-format
+msgid "Append '%s'?"
+msgstr "Pripnemo na konec ,%s`?"
+
+#: LYMessages.c:501
+msgid "Posting to newsgroup(s)..."
+msgstr "Po¹iljamo v novièarske skupine ..."
+
+#: LYMessages.c:503
+msgid "*** You have unread mail. ***"
+msgstr "*** Imate neprebrano po¹to. ***"
+
+#: LYMessages.c:505
+msgid "*** You have mail. ***"
+msgstr "*** Imate po¹to. ***"
+
+#: LYMessages.c:507
+msgid "*** You have new mail. ***"
+msgstr "*** Imate novo po¹to. ***"
+
+#: LYMessages.c:508
+msgid "File insert cancelled!!!"
+msgstr ""
+
+#: LYMessages.c:509
+msgid "Not enough memory for file!"
+msgstr "Ne moremo odpreti zaèasne datoteke!"
+
+#: LYMessages.c:510
+msgid "Can't open file for reading."
+msgstr "Ne moremo odpreti izhodne datoteke! Prekinitev!"
+
+#: LYMessages.c:511
+msgid "File does not exist."
+msgstr "Datoteka ne obstaja."
+
+#: LYMessages.c:512
+msgid "File does not exist - reenter or cancel:"
+msgstr "Datoteka ne obstaja - ponovni vnos ali preklic:"
+
+#: LYMessages.c:513
+msgid "File is not readable."
+msgstr "Datoteka ni berlljiva."
+
+#: LYMessages.c:514
+msgid "File is not readable - reenter or cancel:"
+msgstr "Datoteka ni berljiva - ponovni vnos ali preklic:"
+
+#: LYMessages.c:515
+msgid "Nothing to insert - file is 0-length."
+msgstr "Nièesar za vnesti - datoteka je dolga 0 zlogov."
+
+#: LYMessages.c:516
+msgid "Save request cancelled!!!"
+msgstr "Preklicana zahteva za shranjevanje!!!"
+
+#: LYMessages.c:517
+msgid "Mail request cancelled!!!"
+msgstr "Preklicana po¹tna zahteva!!!"
+
+#. #define CONFIRM_MAIL_SOURCE_PREPARSED
+#: LYMessages.c:519
+msgid "Viewing preparsed source. Are you sure you want to mail it?"
+msgstr ""
+
+#: LYMessages.c:520
+msgid "Please wait..."
+msgstr "Prosim, poèakajte ..."
+
+#: LYMessages.c:521
+msgid "Mailing file. Please wait..."
+msgstr "Po¹iljamo datoteko. Prosimo, poèakajte ..."
+
+#: LYMessages.c:522
+msgid "ERROR - Unable to mail file"
+msgstr "NAPAKA - Ne moremo poslati datoteke"
+
+#. #define CONFIRM_LONG_SCREEN_PRINT
+#: LYMessages.c:524
+#, c-format
+msgid "File is %d screens long. Are you sure you want to print?"
+msgstr "Datoteka je dolga %d zaslonov. Ste preprièani, da jo ¾elite natisniti?"
+
+#: LYMessages.c:525
+msgid "Print request cancelled!!!"
+msgstr "Tiskalni¹ka zahteva preklicana!!!"
+
+#: LYMessages.c:526
+msgid "Press <return> to begin: "
+msgstr "Pritisnite <return > za zaèetek: "
+
+#: LYMessages.c:527
+msgid "Press <return> to finish: "
+msgstr "Pritisnite <return> za konec: "
+
+#. #define CONFIRM_LONG_PAGE_PRINT
+#: LYMessages.c:529
+#, c-format
+msgid "File is %d pages long. Are you sure you want to print?"
+msgstr "Datoteka je dolga %d strani. Ste preprièani, da jo ¾elite natisniti?"
+
+#. #define CHECK_PRINTER
+#: LYMessages.c:531
+msgid "Be sure your printer is on-line. Press <return> to start printing:"
+msgstr "Preprièajte se, da je tiskalnik na zvezi. Pritisnite <return> za zaèetek tiskanja:"
+
+#: LYMessages.c:532
+msgid "ERROR - Unable to allocate file space!!!"
+msgstr "NAPAKA - Ne moremo doloèiti prostora za datoteko!!!"
+
+#: LYMessages.c:533
+msgid "Unable to open tempfile"
+msgstr "Ne moremo odpreti zaèasne datoteke"
+
+#: LYMessages.c:534
+msgid "Unable to open print options file"
+msgstr "Ne moremo odpreti datoteke s tiskalni¹kimi izbirami"
+
+#: LYMessages.c:535
+msgid "Printing file. Please wait..."
+msgstr "Tiskamo datoteko. Prosim, poèakajte ..."
+
+#: LYMessages.c:536
+msgid "Please enter a valid internet mail address: "
+msgstr "Prosim, vnesite veljavni internetni po¹tni naslov: "
+
+#: LYMessages.c:537
+msgid "ERROR! - printer is misconfigured!"
+msgstr "NAPAKA! - tiskalnik je nepravilno nastavljen!"
+
+#: LYMessages.c:538
+msgid "Image map from POST response not available!"
+msgstr ""
+
+#: LYMessages.c:539
+msgid "Misdirected client-side image MAP request!"
+msgstr ""
+
+#: LYMessages.c:540
+msgid "Client-side image MAP is not accessible!"
+msgstr ""
+
+#: LYMessages.c:541
+msgid "No client-side image MAPs are available!"
+msgstr ""
+
+#: LYMessages.c:542
+msgid "Client-side image MAP is not available!"
+msgstr ""
+
+#. #define OPTION_SCREEN_NEEDS_24
+#: LYMessages.c:545
+msgid "Screen height must be at least 24 lines for the Options menu!"
+msgstr "Za menu Mo¾nosti mora biti zaslon visok vsaj 24 vrstic!"
+
+#. #define OPTION_SCREEN_NEEDS_23
+#: LYMessages.c:547
+msgid "Screen height must be at least 23 lines for the Options menu!"
+msgstr "Za menu Mo¾nosti mora biti zaslon visok vsaj 23 vrstic!"
+
+#. #define OPTION_SCREEN_NEEDS_22
+#: LYMessages.c:549
+msgid "Screen height must be at least 22 lines for the Options menu!"
+msgstr "Za menu Mo¾nosti mora biti zaslon visok vsaj 22 vrstic!"
+
+#: LYMessages.c:551
+msgid "That key requires Advanced User mode."
+msgstr "Ta tipka zahteva naèin dela Izku¹eni uporabnik."
+
+#: LYMessages.c:552
+#, c-format
+msgid "Content-type: %s"
+msgstr "Content-type: %s"
+
+#: LYMessages.c:553
+msgid "Command: "
+msgstr "Ukaz: "
+
+#: LYMessages.c:554
+msgid "Unknown or ambiguous command"
+msgstr ""
+
+#: LYMessages.c:555
+msgid " Version "
+msgstr " Razlièica "
+
+#: LYMessages.c:556
+msgid " first"
+msgstr " najprej."
+
+#: LYMessages.c:557
+msgid ", guessing..."
+msgstr ", ugibamo ..."
+
+#: LYMessages.c:558
+msgid "Permissions for "
+msgstr "Dovoljenja za "
+
+#: LYMessages.c:559
+msgid "Select "
+msgstr "Izberite "
+
+#: LYMessages.c:560
+msgid "capital letter"
+msgstr "veliko èrko"
+
+#: LYMessages.c:561
+msgid " of option line,"
+msgstr " v vrstici z mo¾nostmi,"
+
+#: LYMessages.c:562
+msgid " to save,"
+msgstr " za shranjevanje,"
+
+#: LYMessages.c:563
+msgid " to "
+msgstr " v "
+
+#: LYMessages.c:564
+msgid " or "
+msgstr " ali "
+
+#: LYMessages.c:565
+msgid " index"
+msgstr " stvarno kazalo"
+
+#: LYMessages.c:566
+msgid " to return to Lynx."
+msgstr " za vrnitev v Lynx."
+
+#: LYMessages.c:567
+msgid "Accept Changes"
+msgstr "Sprejmimo spremembe"
+
+#: LYMessages.c:568
+msgid "Reset Changes"
+msgstr "Iznièimo spremembe"
+
+#: LYMessages.c:569
+msgid "Left Arrow cancels changes"
+msgstr "Z levo pu¹èico iznièimo spremembe"
+
+#: LYMessages.c:570
+msgid "Save options to disk"
+msgstr "Shranimo izbire v disk"
+
+#: LYMessages.c:571
+msgid "Hit RETURN to accept entered data."
+msgstr ""
+
+#. #define ACCEPT_DATA_OR_DEFAULT
+#: LYMessages.c:573
+msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
+msgstr ""
+
+#: LYMessages.c:574
+msgid "Value accepted!"
+msgstr "Vrednost sprejeta!"
+
+#. #define VALUE_ACCEPTED_WARNING_X
+#: LYMessages.c:576
+msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
+msgstr "Vrednost sprejeta! -- POZOR: Lynx je nastavljen za XWINDOWS!"
+
+#. #define VALUE_ACCEPTED_WARNING_NONX
+#: LYMessages.c:578
+msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
+msgstr "Vrednost sprejeta! -- POZOR: Lynx NI nastavljen za XWINDOWS!"
+
+#: LYMessages.c:579
+msgid "You are not allowed to change which editor to use!"
+msgstr ""
+
+#: LYMessages.c:580
+msgid "Failed to set DISPLAY variable!"
+msgstr ""
+
+#: LYMessages.c:581
+msgid "Failed to clear DISPLAY variable!"
+msgstr ""
+
+#. #define BOOKMARK_CHANGE_DISALLOWED
+#: LYMessages.c:583
+msgid "You are not allowed to change the bookmark file!"
+msgstr ""
+
+#: LYMessages.c:584
+msgid "Terminal does not support color"
+msgstr "Terminal ne podpira barv"
+
+#: LYMessages.c:585
+#, c-format
+msgid "Your '%s' terminal does not support color."
+msgstr ""
+
+#: LYMessages.c:586
+msgid "Access to dot files is disabled!"
+msgstr ""
+
+#. #define UA_NO_LYNX_WARNING
+#: LYMessages.c:588
+msgid "User-Agent string does not contain \"Lynx\" or \"L_y_n_x\""
+msgstr ""
+
+#. #define UA_PLEASE_USE_LYNX
+#: LYMessages.c:590
+msgid "Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional deception!"
+msgstr ""
+
+#. #define UA_CHANGE_DISABLED
+#: LYMessages.c:592
+msgid "Changing of the User-Agent string is disabled!"
+msgstr ""
+
+#. #define CHANGE_OF_SETTING_DISALLOWED
+#: LYMessages.c:594
+msgid "You are not allowed to change this setting."
+msgstr ""
+
+#: LYMessages.c:595
+msgid "Saving Options..."
+msgstr "Shranjujemo mo¾nosti ..."
+
+#: LYMessages.c:596
+msgid "Options saved!"
+msgstr "Mo¾nosti shranjene!"
+
+#: LYMessages.c:597
+msgid "Unable to save Options!"
+msgstr ""
+
+#: LYMessages.c:598
+msgid " 'r' to return to Lynx "
+msgstr ""
+
+#: LYMessages.c:599
+msgid " '>' to save, or 'r' to return to Lynx "
+msgstr ""
+
+#. #define ANY_KEY_CHANGE_RET_ACCEPT
+#: LYMessages.c:601
+msgid "Hit any key to change value; RETURN to accept."
+msgstr "Pritisnite katerokoli tipko za spremembo vrednosti; RETURN za sprejem."
+
+#: LYMessages.c:602
+msgid "Error uncompressing temporary file!"
+msgstr "Napaka pri raz¹irjanju zaèasne datoteke!"
+
+#: LYMessages.c:603
+msgid "Unsupported URL scheme!"
+msgstr "Nepodprta shema URL!"
+
+#: LYMessages.c:604
+msgid "Unsupported data: URL! Use SHOWINFO, for now."
+msgstr "Nepodprti podatki: URL! Zaenkrat uporabite SHOWINFO."
+
+#: LYMessages.c:605
+msgid "Redirection limit of 10 URL's reached."
+msgstr "Dose¾ena je bila omejitev 10 preumerjenih URL-jve."
+
+#: LYMessages.c:606
+msgid "Illegal redirection URL received from server!"
+msgstr "Stre¾nik je poslal URL z neveljavno preusmeritvijo!"
+
+#. #define SERVER_ASKED_FOR_REDIRECTION
+#: LYMessages.c:608
+#, c-format
+msgid "Server asked for %d redirection of POST content to"
+msgstr "Server je prosil za preusmeritev %d vsebine POST na"
+
+#: LYMessages.c:611
+msgid "P)roceed, use G)ET or C)ancel "
+msgstr "P)nadaljevanje, uporabite G)poberi ali C)preklièi"
+
+#: LYMessages.c:612
+msgid "P)roceed, or C)ancel "
+msgstr "P)nadaljevanje ali C)preklic"
+
+#. #define ADVANCED_POST_GET_REDIRECT
+#: LYMessages.c:614
+msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
+msgstr "Preusmeritev vsebine POST. P)nadaljevanje, ogled U)RL, G)pobiranje ali C)preklic"
+
+#. #define ADVANCED_POST_REDIRECT
+#: LYMessages.c:616
+msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
+msgstr "Preusmeritev vsebine POST. P)nadaljevanje, ogled U)URL ali C)preklic"
+
+#. #define CONFIRM_POST_RESUBMISSION
+#: LYMessages.c:618
+msgid "Document from Form with POST content. Resubmit?"
+msgstr "Spis iz obrazca brez vsebine POST. Ponovno po¹ljemo zahtevo?"
+
+#. #define CONFIRM_POST_RESUBMISSION_TO
+#: LYMessages.c:620
+#, c-format
+msgid "Resubmit POST content to %s ?"
+msgstr "Ponovno po¹ljemo vsebino POST na %s ?"
+
+#. #define CONFIRM_POST_LIST_RELOAD
+#: LYMessages.c:622
+#, c-format
+msgid "List from document with POST data. Reload %s ?"
+msgstr "Seznam iz dokumenta s podatki POST. Ponovno nalo¾imo %s ?"
+
+#. #define CONFIRM_POST_DOC_HEAD
+#: LYMessages.c:624
+msgid "Document from POST action, HEAD may not be understood. Proceed?"
+msgstr ""
+
+#. #define CONFIRM_POST_LINK_HEAD
+#: LYMessages.c:626
+msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
+msgstr ""
+
+#: LYMessages.c:627
+msgid "Proceed without a username and password?"
+msgstr "Nadaljujemo brez uporabni¹kega imena in gesla?"
+
+#: LYMessages.c:628
+#, c-format
+msgid "Proceed (%s)?"
+msgstr "Nadaljujemo (%s)?"
+
+#: LYMessages.c:629
+msgid "Cannot POST to this host."
+msgstr "Ne moremo poslati POST temu gostitelju."
+
+#: LYMessages.c:630
+msgid "POST not supported for this URL - ignoring POST data!"
+msgstr "POST ni podprt za ta URL - zanemarjamo podatke POST!"
+
+#: LYMessages.c:631
+msgid "Discarding POST data..."
+msgstr "Zanemarjamo podatke POST..."
+
+#: LYMessages.c:632
+msgid "Document will not be reloaded!"
+msgstr "Dokument ne bo ponovno nalo¾en!"
+
+#: LYMessages.c:633
+msgid "Location: "
+msgstr "Lokacija: "
+
+#: LYMessages.c:634
+#, c-format
+msgid "'%s' not found!"
+msgstr ",%s` ni bil najden!"
+
+#: LYMessages.c:635
+msgid "Default Bookmark File"
+msgstr "Privzeta datoteka z zaznamki"
+
+#: LYMessages.c:636
+msgid "Screen too small! (8x35 min)"
+msgstr "Premajhen zaslon! (najmanj 8×35)"
+
+#: LYMessages.c:637
+msgid "Select destination or ^G to Cancel: "
+msgstr "Izberite cilj ali ^G za preklic: "
+
+#. #define MULTIBOOKMARKS_SELECT
+#: LYMessages.c:639
+msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
+msgstr "Izberite podzaznamek, ,=` za menu ali ^G za preklic: "
+
+#. #define MULTIBOOKMARKS_SELF
+#: LYMessages.c:641
+msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
+msgstr "Reproduciramo L)povezavo v tej datoteki z zaznamki ali C)preklièemo? (l,c): "
+
+#: LYMessages.c:642
+msgid "Multiple bookmark support is not available."
+msgstr "Podpora za veè zaznamkov ni dostopna."
+
+#: LYMessages.c:643
+#, c-format
+msgid " Select Bookmark (screen %d of %d)"
+msgstr ""
+
+#: LYMessages.c:644
+msgid " Select Bookmark"
+msgstr " Izberimo zaznamek"
+
+#. #define MULTIBOOKMARKS_EHEAD_MASK
+#: LYMessages.c:646
+#, c-format
+msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
+msgstr "Urejamo OPIS in POT DO DATOTEKE zaznamka (%d od 2)"
+
+#. #define MULTIBOOKMARKS_EHEAD
+#: LYMessages.c:648
+msgid " Editing Bookmark DESCRIPTION and FILEPATH"
+msgstr " Urejamo OPIS in POT DO DATOTEKE zaznamka"
+
+#: LYMessages.c:649
+msgid "Letter: "
+msgstr "Pismo: "
+
+#. #define USE_PATH_OFF_HOME
+#: LYMessages.c:652
+msgid "Use a filepath off your login directory in SHELL syntax!"
+msgstr "Uporabite pot do datoteke od va¹ega prijavnega imenika v skladnji za lupino!"
+
+#: LYMessages.c:654
+msgid "Use a filepath off your home directory!"
+msgstr "Uporabite ime poti od va¹ega domaèega imenika!"
+
+#. #define MAXLINKS_REACHED
+#: LYMessages.c:657
+msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
+msgstr "Prese¾eno najveèje ¹tevilo povezav na stran! Uporabite polovièno stran ali dvovrstièno pomikanje."
+
+#. #define MAXHIST_REACHED
+#: LYMessages.c:659
+msgid "History List maximum reached! Document not pushed."
+msgstr ""
+
+#: LYMessages.c:660
+msgid "No previously visited links available!"
+msgstr ""
+
+#: LYMessages.c:661
+msgid "Memory exhausted! Program aborted!"
+msgstr "Zmanjkalo pomnilnika! Program je prekinjen!"
+
+#: LYMessages.c:662
+msgid "Memory exhausted! Aborting..."
+msgstr "Zmanjkalo pomnilnika! Konèujemo..."
+
+#: LYMessages.c:663
+msgid "Not enough memory!"
+msgstr ""
+
+#: LYMessages.c:664
+msgid "Directory/File Manager not available"
+msgstr "Urejevalnik imenikov/datotek ni dostopen"
+
+#: LYMessages.c:665
+msgid "HREF in BASE tag is not an absolute URL."
+msgstr "HREF v oznaki BASE ni absolutni URL."
+
+#: LYMessages.c:666
+msgid "Location URL is not absolute."
+msgstr "URL lokacije ni absoluten."
+
+#: LYMessages.c:667
+msgid "Refresh URL is not absolute."
+msgstr "URL za osve¾itev strani ni absoluten."
+
+#. #define SENDING_MESSAGE_WITH_BODY_TO
+#: LYMessages.c:669
+msgid ""
+"You are sending a message with body to:\n"
+" "
+msgstr ""
+"Po¹iljate sporoèilo s telesom na:\n"
+" "
+
+#: LYMessages.c:670
+msgid ""
+"You are sending a comment to:\n"
+" "
+msgstr ""
+"Po¹iljate komentar prejemniku:\n"
+" "
+
+#: LYMessages.c:671
+msgid ""
+"\n"
+" With copy to:\n"
+" "
+msgstr ""
+"\n"
+"S kopijo prejemniku:\n"
+" "
+
+#: LYMessages.c:672
+msgid ""
+"\n"
+" With copies to:\n"
+" "
+msgstr ""
+"\n"
+"S kopijami prejemnikom:\n"
+" "
+
+#. #define CTRL_G_TO_CANCEL_SEND
+#: LYMessages.c:674
+msgid ""
+"\n"
+"\n"
+"Use Ctrl-G to cancel if you do not want to send a message\n"
+msgstr ""
+"\n"
+"\n"
+"Èe ne ¾elite poslati sporoèila, uporabite Ctrl-G za preklic\n"
+
+#. #define ENTER_NAME_OR_BLANK
+#: LYMessages.c:676
+msgid ""
+"\n"
+" Please enter your name, or leave it blank to remain anonymous\n"
+msgstr ""
+"\n"
+" Prosim, vnesite svoje ime ali pustite prazno polje za anonimnost\n"
+
+#. #define ENTER_MAIL_ADDRESS_OR_OTHER
+#: LYMessages.c:678
+msgid ""
+"\n"
+" Please enter a mail address or some other\n"
+msgstr ""
+"\n"
+" Prosim, vnesite po¹tni naslov ali kaj drugega\n"
+
+#. #define MEANS_TO_CONTACT_FOR_RESPONSE
+#: LYMessages.c:680
+msgid " means to contact you, if you desire a response.\n"
+msgstr " naèini za kontaktiranje, èe ¾elite odziv.\n"
+
+#: LYMessages.c:681
+msgid ""
+"\n"
+" Please enter a subject line.\n"
+msgstr ""
+"\n"
+" Prosim, vnesite vrstico s predmetom.\n"
+
+#. #define ENTER_ADDRESS_FOR_CC
+#: LYMessages.c:683
+msgid ""
+"\n"
+" Enter a mail address for a CC of your message.\n"
+msgstr ""
+"\n"
+" Vnesite po¹tni naslov za kopijo (CC) va¹ega sporoèila.\n"
+
+#: LYMessages.c:684
+msgid " (Leave blank if you don't want a copy.)\n"
+msgstr " (Pustite prazno, èe ne ¾elite kopije.)\n"
+
+#: LYMessages.c:685
+msgid ""
+"\n"
+" Please review the message body:\n"
+"\n"
+msgstr ""
+"\n"
+" Prosim, preglejte telo sporoèila:\n"
+"\n"
+
+#: LYMessages.c:686
+msgid ""
+"\n"
+"Press RETURN to continue: "
+msgstr ""
+"\n"
+"Pritisnite RETURN za nadaljevanje: "
+
+#: LYMessages.c:687
+msgid ""
+"\n"
+"Press RETURN to clean up: "
+msgstr ""
+"\n"
+"Pritisnite RETURN za èi¹èenje: "
+
+#: LYMessages.c:688
+msgid " Use Control-U to erase the default.\n"
+msgstr " Uporabite Control-U za izbris privzete vrednosti.\n"
+
+#: LYMessages.c:689
+msgid ""
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+" Prosim, spodaj vnesite svoje sporoèilo."
+
+#. #define ENTER_PERIOD_WHEN_DONE_A
+#: LYMessages.c:691 src/LYNews.c:380
+msgid ""
+"\n"
+" When you are done, press enter and put a single period (.)"
+msgstr ""
+"\n"
+" Ko opravite, pritisnite Enter in vstavite eno samo piko (.)"
+
+#. #define ENTER_PERIOD_WHEN_DONE_B
+#: LYMessages.c:693 src/LYNews.c:381
+msgid ""
+"\n"
+" on a line and press enter again."
+msgstr ""
+"\n"
+" v vrstici, nato spet pritisnite Enter."
+
+#. Cookies messages
+#. #define ADVANCED_COOKIE_CONFIRMATION
+#: LYMessages.c:697
+#, c-format
+msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
+msgstr "pi¹kot %s: %.*s=%.*s Dovolimo? (Y-da/N-ne/A-vedno/V-nikoli)"
+
+#. #define INVALID_COOKIE_DOMAIN_CONFIRMATION
+#: LYMessages.c:699
+#, c-format
+msgid "Accept invalid cookie domain=%s for '%s'?"
+msgstr "Sprejmemo neveljavno domeno=%s za pi¹kote za ,%s`?"
+
+#. #define INVALID_COOKIE_PATH_CONFIRMATION
+#: LYMessages.c:701
+#, c-format
+msgid "Accept invalid cookie path=%s as a prefix of '%s'?"
+msgstr "Sprejmemo neveljavno pot=%s za pi¹kote s predpono ,%s`?"
+
+#: LYMessages.c:702
+msgid "Allowing this cookie."
+msgstr "Sprejmemo ta pi¹kot."
+
+#: LYMessages.c:703
+msgid "Rejecting this cookie."
+msgstr "Zavraèamo ta pi¹kot."
+
+#: LYMessages.c:704
+msgid "The Cookie Jar is empty."
+msgstr "Posoda s pi¹koti je prazna."
+
+#. #define ACTIVATE_TO_GOBBLE
+#: LYMessages.c:706
+msgid "Activate links to gobble up cookies or entire domains,"
+msgstr ""
+
+#: LYMessages.c:707
+msgid "or to change a domain's 'allow' setting."
+msgstr ""
+
+#: LYMessages.c:708
+msgid "(Cookies never allowed.)"
+msgstr "(Pi¹koti nikoli dovoljeni.)"
+
+#: LYMessages.c:709
+msgid "(Cookies always allowed.)"
+msgstr "(Pi¹koti vedno dobrodo¹li.)"
+
+#: LYMessages.c:710
+msgid "(Cookies allowed via prompt.)"
+msgstr "(Pi¹koti dovoljeni po vpra¹anju.)"
+
+#: LYMessages.c:711
+msgid "(Persistent Cookies.)"
+msgstr "(Obstojni pi¹koti.)"
+
+#: LYMessages.c:712
+msgid "(No title.)"
+msgstr "(Brez naslova.)"
+
+#: LYMessages.c:713
+msgid "(No name.)"
+msgstr "(Brez imena.)"
+
+#: LYMessages.c:714
+msgid "(No value.)"
+msgstr "(Brez vrednosti.)"
+
+#: LYMessages.c:715
+msgid "None"
+msgstr "Niè"
+
+#: LYMessages.c:716
+msgid "(End of session.)"
+msgstr "(Konec seje.)"
+
+#: LYMessages.c:717
+msgid "Delete this cookie?"
+msgstr "Odstranimo ta pi¹kot?"
+
+#: LYMessages.c:718
+msgid "The cookie has been eaten!"
+msgstr "Pi¹kot smo pojedli!"
+
+#: LYMessages.c:719
+msgid "Delete this empty domain?"
+msgstr "Pobri¹emo to prazno domeno?"
+
+#: LYMessages.c:720
+msgid "The domain has been eaten!"
+msgstr "Domeno smo pojedli!"
+
+#. #define DELETE_COOKIES_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:722
+msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr ""
+
+#. #define DELETE_DOMAIN_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:724
+msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr ""
+
+#: LYMessages.c:725
+msgid "All cookies in the domain have been eaten!"
+msgstr "Pojedli smo vse pi¹kote v domeni!"
+
+#: LYMessages.c:726
+#, c-format
+msgid "'A'lways allowing from domain '%s'."
+msgstr "A)Vedno dovolimo iz domene ,%s`."
+
+#: LYMessages.c:727
+#, c-format
+msgid "ne'V'er allowing from domain '%s'."
+msgstr "V)Nikoli ne dovolimo iz domene ,%s`."
+
+#: LYMessages.c:728
+#, c-format
+msgid "'P'rompting to allow from domain '%s'."
+msgstr "P)Vpra¹amo za dovoljenje za pi¹kote iz domene ,%s`."
+
+#: LYMessages.c:729
+msgid "Delete all cookies in this domain?"
+msgstr "Odstranimo vse pi¹kote v tej domeni?"
+
+#: LYMessages.c:730
+msgid "All of the cookies in the jar have been eaten!"
+msgstr "Vse pi¹kote v posodi smo pojedli!"
+
+#: LYMessages.c:732
+msgid "Port 19 not permitted in URLs."
+msgstr "Vrata 19 niso dovoljena v URL-jih."
+
+#: LYMessages.c:733
+msgid "Port 25 not permitted in URLs."
+msgstr "Vrata 25 niso dovoljena v URL-jih."
+
+#: LYMessages.c:734
+#, c-format
+msgid "Port %lu not permitted in URLs."
+msgstr "Vrata %lu niso dovoljena v URL-jih."
+
+#: LYMessages.c:735
+msgid "URL has a bad port field."
+msgstr "URL ima slabo polje z vrati."
+
+#: LYMessages.c:736
+msgid "Maximum nesting of HTML elements exceeded."
+msgstr "Dose¾eno najgloblje gnezdenje gradnikov HTML."
+
+#: LYMessages.c:737
+msgid "Bad partial reference! Stripping lead dots."
+msgstr "Slab delni sklic! Odstranjujemo vodilne pike."
+
+#: LYMessages.c:738
+msgid "Trace Log open failed. Trace off!"
+msgstr "Odpiranje dnevnika za sledenje spodletelo. Sledenje izkljuèeno!"
+
+#: LYMessages.c:739
+msgid "Lynx Trace Log"
+msgstr "Dnevnik za sledenje Lynxu"
+
+#: LYMessages.c:740
+msgid "No trace log has been started for this session."
+msgstr "V tej seji ni bilo zagnanega dnevnika za sledenje."
+
+#. #define MAX_TEMPCOUNT_REACHED
+#: LYMessages.c:742
+msgid "The maximum temporary file count has been reached!"
+msgstr ""
+
+#. #define FORM_VALUE_TOO_LONG
+#: LYMessages.c:744
+msgid "Form field value exceeds buffer length! Trim the tail."
+msgstr ""
+
+#. #define FORM_TAIL_COMBINED_WITH_HEAD
+#: LYMessages.c:746
+msgid "Modified tail combined with head of form field value."
+msgstr ""
+
+#. HTFile.c
+#: LYMessages.c:749
+msgid "Directory"
+msgstr "Imenik"
+
+#: LYMessages.c:750
+msgid "Directory browsing is not allowed."
+msgstr "Brskanje po imeniku ni dovoljeno."
+
+#: LYMessages.c:751
+msgid "Selective access is not enabled for this directory"
+msgstr ""
+
+#: LYMessages.c:752
+msgid "Multiformat: directory scan failed."
+msgstr ""
+
+#: LYMessages.c:753
+msgid "This directory is not readable."
+msgstr "Tega imenika ni mogoèe brati."
+
+#: LYMessages.c:754
+msgid "Can't access requested file."
+msgstr "Ne moremo dostopati do zahtevane datoteke."
+
+#: LYMessages.c:755
+msgid "Could not find suitable representation for transmission."
+msgstr ""
+
+#: LYMessages.c:756
+msgid "Could not open file for decompression!"
+msgstr ""
+
+#: LYMessages.c:757
+msgid "Files:"
+msgstr "Datoteke:"
+
+#: LYMessages.c:758
+msgid "Subdirectories:"
+msgstr "Podimeniki:"
+
+#: LYMessages.c:759
+msgid " directory"
+msgstr " imenik"
+
+#: LYMessages.c:760
+msgid "Up to "
+msgstr "Do "
+
+#: LYMessages.c:761
+msgid "Current directory is "
+msgstr "Trenutni imenik je "
+
+#. HTGopher.c
+#: LYMessages.c:764
+msgid "No response from server!"
+msgstr "Ni odgovora od stre¾nika!"
+
+#: LYMessages.c:765
+msgid "CSO index"
+msgstr "Indeks CSO"
+
+#: LYMessages.c:766
+msgid ""
+"\n"
+"This is a searchable index of a CSO database.\n"
+msgstr ""
+"\n"
+"To je iskalni indeks za zbirko podatkov CSO.\n"
+
+#: LYMessages.c:767
+msgid "CSO Search Results"
+msgstr "Iskalni rezultati CSO"
+
+#: LYMessages.c:768
+#, c-format
+msgid "Seek fail on %s\n"
+msgstr "Napaka pri iskanju pri %s\n"
+
+#: LYMessages.c:769
+msgid ""
+"\n"
+"Press the 's' key and enter search keywords.\n"
+msgstr ""
+"\n"
+"Pritisnite tipko ,s` in vnesite iskane kljuène besede.\n"
+
+#: LYMessages.c:770
+msgid ""
+"\n"
+"This is a searchable Gopher index.\n"
+msgstr ""
+"\n"
+"To je iskalno kazalo po Gopherju.\n"
+
+#: LYMessages.c:771
+msgid "Gopher index"
+msgstr "Kazalo po Gopherju"
+
+#: LYMessages.c:772
+msgid "Gopher Menu"
+msgstr "Menu Gopherja"
+
+#: LYMessages.c:773
+msgid " Search Results"
+msgstr " Rezultati iskanja"
+
+#: LYMessages.c:774
+msgid "Sending CSO/PH request."
+msgstr "Po¹iljamo zahtevek CSO/PH."
+
+#: LYMessages.c:775
+msgid "Sending Gopher request."
+msgstr "Po¹iljamo zahtevek Gopherju."
+
+#: LYMessages.c:776
+msgid "CSO/PH request sent; waiting for response."
+msgstr "Zahtevek CSO/PH poslan; èakamo na odgovor."
+
+#: LYMessages.c:777
+msgid "Gopher request sent; waiting for response."
+msgstr "Zahteva Gopherju poslana; èakamo na odgovor."
+
+#: LYMessages.c:778
+msgid ""
+"\n"
+"Please enter search keywords.\n"
+msgstr ""
+"\n"
+"Prosim, vnesite iskane kljuène besede.\n"
+
+#: LYMessages.c:779
+msgid ""
+"\n"
+"The keywords that you enter will allow you to search on a"
+msgstr ""
+"\n"
+"Kljuène besede, ki jih boste vnesli, bodo omogoèile iskanje po"
+
+#: LYMessages.c:780
+msgid " person's name in the database.\n"
+msgstr " imenu osebe v zbirki podatkov.\n"
+
+#. HTNews.c
+#: LYMessages.c:783
+msgid "Connection closed ???"
+msgstr "Povezava zaprta???"
+
+#: LYMessages.c:784
+msgid "Cannot open temporary file for news POST."
+msgstr "Ne moremo odpreti zaèasne datoteke za PO©ILJANJE novic."
+
+#: LYMessages.c:785
+msgid "This client does not contain support for posting to news with SSL."
+msgstr "Ta odjemnik ne vsebuje podpore za po¹iljanje novic s SSL."
+
+#. HTStyle.c
+#: LYMessages.c:788
+#, c-format
+msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
+msgstr "Slog %d ,%s` SGML:%s. Pisava %s %.1f pik.\n"
+
+#: LYMessages.c:789
+#, c-format
+msgid "\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
+msgstr "\tZamiki: prvi=%.0f ostali=%.0f, vi¹ina=%.1f globina=%.1f\n"
+
+#: LYMessages.c:790
+#, c-format
+msgid "\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
+msgstr "\tPoravnava=%d, %d predelènikov. (%.0f prej, %.0f pozneje)\n"
+
+#: LYMessages.c:791
+#, c-format
+msgid "\t\tTab kind=%d at %.0f\n"
+msgstr "\t\tVrsta predelènika=%d na %.0f\n"
+
+#. HTTP.c
+#: LYMessages.c:794
+msgid "Can't proceed without a username and password."
+msgstr "Ne moremo nadaljevati brez uporabni¹kega imena in gesla."
+
+#: LYMessages.c:795
+msgid "Can't retry with authorization! Contact the server's WebMaster."
+msgstr "Ne moremo ponovno poskusiti brez avtorizacije! Povpra¹ajte upravitelja spletnega stre¾nika."
+
+#: LYMessages.c:796
+msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
+msgstr "Ne moremo ponovno poskusiti brez avtorizacije za proxy! Povpra¹ajte upravitelja spletnega stre¾nika."
+
+#: LYMessages.c:797
+msgid "Retrying with proxy authorization information."
+msgstr "Posku¹amo ponovno z avtorizacijo za proxy."
+
+#. HTWAIS.c
+#: LYMessages.c:800
+msgid "HTWAIS: Return message too large."
+msgstr "HTWAIS: Sporoèilo z odgovorom je predolgo."
+
+#: LYMessages.c:801
+msgid "Enter WAIS query: "
+msgstr "Vnesite zahtevek za WAIS: "
+
+#. Miscellaneous status
+#: LYMessages.c:804
+msgid "Retrying as HTTP0 request."
+msgstr "Ponovno posku¹amo z zahtevkom HTTP0."
+
+#: LYMessages.c:805
+#, c-format
+msgid "Transferred %d bytes"
+msgstr "Preneseno %d zlogov"
+
+#: LYMessages.c:806
+msgid "Data transfer complete"
+msgstr "Prenos podatkov konèan"
+
+#: LYMessages.c:807
+#, c-format
+msgid "Error processing line %d of %s\n"
+msgstr "Napaka pri obdelavi vrstice %d datoteke %s\n"
+
+#. Lynx internal page titles
+#: LYMessages.c:810
+msgid "Address List Page"
+msgstr "Stran z imenikom naslovov"
+
+#: LYMessages.c:811
+msgid "Bookmark file"
+msgstr "Datoteka z zaznamki"
+
+#: LYMessages.c:812
+msgid "Configuration Definitions"
+msgstr "Definicije nastavitev"
+
+#: LYMessages.c:813
+msgid "Cookie Jar"
+msgstr "Posoda s pi¹koti"
+
+#: LYMessages.c:814
+msgid "Current Key Map"
+msgstr "Trenutna tipkovnica"
+
+#: LYMessages.c:815
+msgid "File Management Options"
+msgstr "Izbire upravljanja datotek"
+
+#: LYMessages.c:816
+msgid "Download Options"
+msgstr "Izbire za jemanje"
+
+#: LYMessages.c:817
+msgid "History Page"
+msgstr "Stran z zgodovino"
+
+#: LYMessages.c:818
+msgid "List Page"
+msgstr "Stran s seznamom"
+
+#: LYMessages.c:819
+msgid "Lynx.cfg Information"
+msgstr "Informacije o Lynx.cfg"
+
+#: LYMessages.c:820
+msgid "Converted Mosaic Hotlist"
+msgstr ""
+
+#: LYMessages.c:821
+msgid "Options Menu"
+msgstr "Menu izbir"
+
+#: LYMessages.c:822
+msgid "File Permission Options"
+msgstr "Izbire za dovoljenja datotek"
+
+#: LYMessages.c:823
+msgid "Printing Options"
+msgstr "Izbire tiskanja"
+
+#: LYMessages.c:824
+msgid "Information about the current document"
+msgstr "Informacije o trenutnem dokumentu"
+
+#: LYMessages.c:825
+msgid "Your recent statusline messages"
+msgstr "Novej¹a sporoèila v vrstici stanja"
+
+#: LYMessages.c:826
+msgid "Upload Options"
+msgstr "Izbire po¹iljanja"
+
+#: LYMessages.c:827
+msgid "Visited Links Page"
+msgstr "Stran z obiskanimi povezavami"
+
+#. CONFIG_DEF_TITLE subtitles
+#: LYMessages.c:830
+msgid "See also"
+msgstr "Glejte tudi"
+
+#: LYMessages.c:831
+msgid "your"
+msgstr "va¹"
+
+#: LYMessages.c:832
+msgid "for runtime options"
+msgstr "za izbire med tekom"
+
+#: LYMessages.c:833
+msgid "compile time options"
+msgstr "izbire ob prevajanju"
+
+#: LYMessages.c:834
+msgid "latest release"
+msgstr "zadnjo razlièico"
+
+#: LYMessages.c:835
+msgid "pre-release version"
+msgstr "razvojno razlièico"
+
+#: LYMessages.c:836
+msgid "development version"
+msgstr "razvojno razlièico"
+
+#. #define AUTOCONF_CONFIG_CACHE
+#: LYMessages.c:838
+msgid ""
+"The following data were derived during the automatic configuration/build\n"
+"process of this copy of Lynx. When reporting a bug, please include a copy\n"
+"of this page."
+msgstr ""
+
+#. #define AUTOCONF_LYNXCFG_H
+#: LYMessages.c:842
+msgid ""
+"The following data were used as automatically-configured compile-time\n"
+"definitions when this copy of Lynx was built."
+msgstr ""
+
+#. #define DIRED_NOVICELINE
+#: LYMessages.c:847
+msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
+msgstr ""
+
+#: LYMessages.c:848
+msgid "Failed to obtain status of current link!"
+msgstr "Nismo mogli dobiti stanja trenutne povezave!"
+
+#. #define INVALID_PERMIT_URL
+#: LYMessages.c:851
+msgid "Special URL only valid from current File Permission menu!"
+msgstr ""
+
+#: LYMessages.c:855
+msgid "External support is currently disabled."
+msgstr "Zunanja podpora je trenutno onemogoèena."
+
+#. new with 2.8.4dev.21
+#: LYMessages.c:859
+#, fuzzy
+msgid "Changing working-directory is currently disabled."
+msgstr "Ukaz natisni (p) je trenutno onemogoèen."
+
+#: LYMessages.c:860
+#, fuzzy
+msgid "Linewrap OFF!"
+msgstr "Sledenje IZKLJUÈENO!"
+
+#: LYMessages.c:861
+msgid "Linewrap ON!"
+msgstr ""
+
+#: LYMessages.c:862
+msgid "Parsing nested-tables toggled OFF! Reloading..."
+msgstr ""
+
+#: LYMessages.c:863
+msgid "Parsing nested-tables toggled ON! Reloading..."
+msgstr ""
+
+#: LYMessages.c:864
+msgid "Shifting is disabled while line-wrap is in effect"
+msgstr ""
+
+#: LYMessages.c:865
+#, fuzzy
+msgid "Trace not supported"
+msgstr "Terminal ne podpira barv"
+
+#: WWW/Library/Implementation/HTAABrow.c:648
+#, c-format
+msgid "Username for '%s' at %s '%s%s':"
+msgstr "Uporabni¹ko ime za ,%s` na %s ,%s%s`:"
+
+#: WWW/Library/Implementation/HTAABrow.c:914
+msgid "This client doesn't know how to compose proxy authorization information for scheme"
+msgstr ""
+
+#: WWW/Library/Implementation/HTAABrow.c:989
+msgid "This client doesn't know how to compose authorization information for scheme"
+msgstr ""
+
+#: WWW/Library/Implementation/HTAABrow.c:1097
+#, c-format
+msgid "Invalid header '%s%s%s%s%s'"
+msgstr "Neveljavna glava ,%s%s%s%s%s`"
+
+#: WWW/Library/Implementation/HTAABrow.c:1201
+msgid "Proxy authorization required -- retrying"
+msgstr ""
+
+#: WWW/Library/Implementation/HTAABrow.c:1260
+msgid "Access without authorization denied -- retrying"
+msgstr ""
+
+#: WWW/Library/Implementation/HTAccess.c:683
+msgid "Access forbidden by rule"
+msgstr ""
+
+#: WWW/Library/Implementation/HTAccess.c:785
+msgid "Document with POST content not found in cache. Resubmit?"
+msgstr ""
+
+#: WWW/Library/Implementation/HTAccess.c:1026 src/GridText.c:8039
+msgid "Loading incomplete."
+msgstr "Nalaganje nepopolno."
+
+#: WWW/Library/Implementation/HTAccess.c:1056
+msgid "**** HTAccess: socket or file number returned by obsolete load routine!\n"
+msgstr ""
+
+#: WWW/Library/Implementation/HTAccess.c:1058
+msgid "**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"
+msgstr ""
+
+#: WWW/Library/Implementation/HTAccess.c:1059
+#, c-format
+msgid "**** HTAccess: Status returned was: %d\n"
+msgstr ""
+
+#.
+#. * hack: if we fail in HTAccess.c
+#. * avoid duplicating URL, oh.
+#.
+#: WWW/Library/Implementation/HTAccess.c:1065 src/LYMainLoop.c:7834
+msgid "Can't Access"
+msgstr "Ne moremo dostopati"
+
+#: WWW/Library/Implementation/HTAccess.c:1073
+msgid "Unable to access document."
+msgstr "Ne moremo dostopati do sestavka"
+
+#: WWW/Library/Implementation/HTFTP.c:756
+#, c-format
+msgid "Enter password for user %s@%s:"
+msgstr "Vnesite geslo za uporabnika %s@%s:"
+
+#: WWW/Library/Implementation/HTFTP.c:784
+msgid "Unable to connect to FTP host."
+msgstr "Ne moremo se povezati z gostiteljem FTP."
+
+#: WWW/Library/Implementation/HTFTP.c:1054
+msgid "close master socket"
+msgstr ""
+
+#: WWW/Library/Implementation/HTFTP.c:1116
+msgid "socket for master socket"
+msgstr ""
+
+#.
+#. ** It's a symbolic link, does the user care about
+#. ** knowing if it is symbolic? I think so since
+#. ** it might be a directory.
+#.
+#: WWW/Library/Implementation/HTFTP.c:1630 WWW/Library/Implementation/HTFTP.c:2251
+msgid "Symbolic Link"
+msgstr "Simbolna povezava"
+
+#: WWW/Library/Implementation/HTFTP.c:2612
+msgid "Receiving FTP directory."
+msgstr "Sprejemamo imenik za FTP."
+
+#: WWW/Library/Implementation/HTFTP.c:2755
+#, c-format
+msgid "Transferred %d bytes (%5d)"
+msgstr "Preneseno %d zlogov (%5d)"
+
+#: WWW/Library/Implementation/HTFTP.c:3090
+msgid "connect for data"
+msgstr "povezava za podatke"
+
+#: WWW/Library/Implementation/HTFTP.c:3690
+msgid "Receiving FTP file."
+msgstr "Jemljemo datoteko s FTP."
+
+#: WWW/Library/Implementation/HTFinger.c:275
+msgid "Could not set up finger connection."
+msgstr "Ne moremo vzpostaviti povezave s finger."
+
+#: WWW/Library/Implementation/HTFinger.c:320
+msgid "Could not load data (no sitename in finger URL)"
+msgstr ""
+
+#: WWW/Library/Implementation/HTFinger.c:328
+msgid "Invalid port number - will only use port 79!"
+msgstr ""
+
+#: WWW/Library/Implementation/HTFinger.c:396
+msgid "Could not access finger host."
+msgstr ""
+
+#: WWW/Library/Implementation/HTFinger.c:407
+msgid "No response from finger server."
+msgstr "Ni odgovora od stre¾nika za finger."
+
+#: WWW/Library/Implementation/HTNews.c:372
+#, c-format
+msgid "Username for news host '%s':"
+msgstr "Uporabni¹ko ime za novièarski stre¾nik ,%s`:"
+
+#: WWW/Library/Implementation/HTNews.c:425
+msgid "Change username?"
+msgstr "Sprememba uporabni¹kega imena?"
+
+#: WWW/Library/Implementation/HTNews.c:429
+msgid "Username:"
+msgstr "Uporabni¹ko ime:"
+
+#: WWW/Library/Implementation/HTNews.c:453
+#, c-format
+msgid "Password for news host '%s':"
+msgstr "Geslo za novièarski stre¾nik ,%s`:"
+
+#: WWW/Library/Implementation/HTNews.c:536
+msgid "Change password?"
+msgstr "Sprememba gesla?"
+
+#: WWW/Library/Implementation/HTNews.c:1691
+#, c-format
+msgid "No matches for: %s"
+msgstr "Ni ujemanja za: %s"
+
+#: WWW/Library/Implementation/HTNews.c:1744
+msgid ""
+"\n"
+"No articles in this group.\n"
+msgstr ""
+"\n"
+"V tem obsegu ni èlankov.\n"
+
+#: WWW/Library/Implementation/HTNews.c:1757
+msgid ""
+"\n"
+"No articles in this range.\n"
+msgstr ""
+
+#.
+#. ** Set window title.
+#.
+#: WWW/Library/Implementation/HTNews.c:1770
+#, c-format
+msgid "%s, Articles %d-%d"
+msgstr "%s, Èlanki %d-%d"
+
+#: WWW/Library/Implementation/HTNews.c:1792
+msgid "Earlier articles"
+msgstr "Prej¹nji èlanki"
+
+#: WWW/Library/Implementation/HTNews.c:1805
+#, c-format
+msgid ""
+"\n"
+"There are about %d articles currently available in %s, IDs as follows:\n"
+"\n"
+msgstr ""
+
+#: WWW/Library/Implementation/HTNews.c:1865
+msgid "All available articles in "
+msgstr "Vsi dostopni èlanki v "
+
+#: WWW/Library/Implementation/HTNews.c:2081
+msgid "Later articles"
+msgstr "Poznej¹i èlanki"
+
+#: WWW/Library/Implementation/HTNews.c:2105
+msgid "Post to "
+msgstr "Razpo¹ljemo v "
+
+#: WWW/Library/Implementation/HTNews.c:2323
+msgid "This client does not contain support for SNEWS URLs."
+msgstr ""
+
+#: WWW/Library/Implementation/HTNews.c:2531
+msgid "No target for raw text!"
+msgstr ""
+
+#: WWW/Library/Implementation/HTNews.c:2561
+msgid "Connecting to NewsHost ..."
+msgstr "Povezujemo se z novièarskim stre¾nikom ..."
+
+#: WWW/Library/Implementation/HTNews.c:2612
+#, c-format
+msgid "Could not access %s."
+msgstr "Ne moremo dostopati do %s."
+
+#: WWW/Library/Implementation/HTNews.c:2712
+#, c-format
+msgid "Can't read news info. News host %.20s responded: %.200s"
+msgstr ""
+
+#: WWW/Library/Implementation/HTNews.c:2716
+#, c-format
+msgid "Can't read news info, empty response from host %s"
+msgstr ""
+
+#.
+#. ** List available newsgroups. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2920
+msgid "Reading list of available newsgroups."
+msgstr ""
+
+#: WWW/Library/Implementation/HTNews.c:2942
+msgid "Reading list of articles in newsgroup."
+msgstr ""
+
+#.
+#. ** Get an article from a news group. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2948
+msgid "Reading news article."
+msgstr "Beremo novièarski èlanek."
+
+#: WWW/Library/Implementation/HTNews.c:2978
+msgid "Sorry, could not load requested news."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1233
+msgid "Address has invalid port"
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1336
+msgid "Address length looks invalid"
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1574 WWW/Library/Implementation/HTTCP.c:1592
+#, c-format
+msgid "Unable to locate remote host %s."
+msgstr ""
+
+#. Not HTProgress, so warning won't be overwritten
+#. * immediately; but not HTAlert, because typically
+#. * there will be other alerts from the callers. - kw
+#.
+#: WWW/Library/Implementation/HTTCP.c:1589 WWW/Library/Implementation/HTTelnet.c:103
+#, c-format
+msgid "Invalid hostname %s"
+msgstr "Neveljavno ime gostitelja %s"
+
+#: WWW/Library/Implementation/HTTCP.c:1603
+#, c-format
+msgid "Making %s connection to %s"
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1619
+#, c-format
+msgid "socket failed: family %d addr %s port %s."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1628
+msgid "socket failed."
+msgstr "vtiènici je spodletelo."
+
+#: WWW/Library/Implementation/HTTCP.c:1648
+msgid "Could not make connection non-blocking."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1717
+msgid "Connection failed (too many retries)."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1910
+msgid "Could not restore socket to blocking."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTCP.c:1976
+msgid "Socket read failed for 180,000 tries."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTP.c:466
+msgid "This client does not contain support for HTTPS URLs."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTP.c:491
+msgid "Unable to connect to remote host."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTP.c:1005
+msgid "Sending HTTP request."
+msgstr "Po¹iljamo zahtevek HTTP."
+
+#: WWW/Library/Implementation/HTTP.c:1039
+msgid "Unexpected network write error; connection aborted."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTP.c:1045
+msgid "HTTP request sent; waiting for response."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTP.c:1109
+msgid "Unexpected network read error; connection aborted."
+msgstr ""
+
+#.
+#. ** HTTP/1.1 Informational statuses.
+#. ** 100 Continue.
+#. ** 101 Switching Protocols.
+#. ** > 101 is unknown.
+#. ** We should never get these, and they have only
+#. ** the status line and possibly other headers,
+#. ** so we'll deal with them by showing the full
+#. ** header to the user as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1305
+msgid "Got unexpected Informational Status."
+msgstr ""
+
+#.
+#. * Reset Content. The server has fulfilled the
+#. * request but nothing is returned and we should
+#. * reset any form content. We'll instruct the
+#. * user to do that, and restore the current
+#. * document. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1340
+msgid "Request fulfilled. Reset Content."
+msgstr ""
+
+#. Not Modified
+#.
+#. * We didn't send an "If-Modified-Since" header,
+#. * so this status is inappropriate. We'll deal
+#. * with it by showing the full header to the user
+#. * as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1459
+msgid "Got unexpected 304 Not Modified status."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTP.c:1526
+msgid "Redirection of POST content requires user approval."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTP.c:1541
+msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
+msgstr ""
+
+#: WWW/Library/Implementation/HTTP.c:1586
+msgid "Retrying with access authorization information."
+msgstr ""
+
+#: WWW/Library/Implementation/HTTP.c:1598
+msgid "Show the 401 message body?"
+msgstr ""
+
+#: WWW/Library/Implementation/HTTP.c:1643
+msgid "Show the 407 message body?"
+msgstr ""
+
+#.
+#. ** Bad or unknown server_status number.
+#. ** Take a chance and hope there is
+#. ** something to display. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1748
+msgid "Unknown status reply from server!"
+msgstr ""
+
+#: WWW/Library/Implementation/HTTelnet.c:101
+#, c-format
+msgid "remote %s session:"
+msgstr "oddaljena seja %s:"
+
+#: WWW/Library/Implementation/HTWAIS.c:161
+msgid "Could not connect to WAIS server."
+msgstr "Ne moremo se prikljuèiti na stre¾nik WAIS."
+
+#: WWW/Library/Implementation/HTWAIS.c:170
+msgid "Could not open WAIS connection for reading."
+msgstr "Ne moremo odpreti povezave WAIS za branje."
+
+#: WWW/Library/Implementation/HTWAIS.c:194
+msgid "Diagnostic code is "
+msgstr "Koda za diagnozo je "
+
+#: WWW/Library/Implementation/HTWAIS.c:463
+msgid "Index "
+msgstr "Stvarno kazalo "
+
+#: WWW/Library/Implementation/HTWAIS.c:467
+#, c-format
+msgid " contains the following %d item%s relevant to \""
+msgstr " vsebuje naslednjih %d postavk(%s) za \""
+
+#: WWW/Library/Implementation/HTWAIS.c:475
+msgid "The first figure after each entry is its relative score, "
+msgstr "Prva ¹tevilka po vsakem vnosu je njegov relativni rezultat, "
+
+#: WWW/Library/Implementation/HTWAIS.c:476
+msgid "the second is the number of lines in the item."
+msgstr "druga je ¹tevilo vrstic v postavki."
+
+#: WWW/Library/Implementation/HTWAIS.c:517
+msgid " (bad file name)"
+msgstr " (slabo ime datoteke)"
+
+#: WWW/Library/Implementation/HTWAIS.c:542
+msgid "(bad doc id)"
+msgstr "(slaba id dokumenta)"
+
+#: WWW/Library/Implementation/HTWAIS.c:558
+msgid "(Short Header record, can't display)"
+msgstr "(Zapis s prekratko glavo, ne moremo prikazati)"
+
+#: WWW/Library/Implementation/HTWAIS.c:565
+msgid ""
+"\n"
+"Long Header record, can't display\n"
+msgstr ""
+"\n"
+"Zapis s predolgo glavo, ne moremo prikazati\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:572
+msgid ""
+"\n"
+"Text record\n"
+msgstr ""
+"\n"
+"Besedilni zapis\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:581
+msgid ""
+"\n"
+"Headline record, can't display\n"
+msgstr ""
+
+#: WWW/Library/Implementation/HTWAIS.c:589
+msgid ""
+"\n"
+"Code record, can't display\n"
+msgstr ""
+
+#: WWW/Library/Implementation/HTWAIS.c:691
+msgid "Syntax error in WAIS URL"
+msgstr ""
+
+#: WWW/Library/Implementation/HTWAIS.c:761
+msgid " (WAIS Index)"
+msgstr " (Indeks WAIS)"
+
+#: WWW/Library/Implementation/HTWAIS.c:768
+msgid "WAIS Index: "
+msgstr "Indeks WAIS: "
+
+#: WWW/Library/Implementation/HTWAIS.c:774
+msgid "This is a link for searching the "
+msgstr ""
+
+#: WWW/Library/Implementation/HTWAIS.c:778
+msgid " WAIS Index.\n"
+msgstr " Indeks WAIS.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:805
+msgid ""
+"\n"
+"Enter the 's'earch command and then specify search words.\n"
+msgstr ""
+"\n"
+"Vnesite ukaz za i,s`kanje in potem doloèite iskalne besede.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:827
+msgid " (in "
+msgstr " (v "
+
+#: WWW/Library/Implementation/HTWAIS.c:836
+msgid "WAIS Search of \""
+msgstr "Iskanje z WAIS za \""
+
+#: WWW/Library/Implementation/HTWAIS.c:840
+msgid "\" in: "
+msgstr "\" v: "
+
+#: WWW/Library/Implementation/HTWAIS.c:855
+msgid "HTWAIS: Request too large."
+msgstr "HTWAIS: Prevelik zahtevek."
+
+#: WWW/Library/Implementation/HTWAIS.c:864
+msgid "Searching WAIS database..."
+msgstr "Iskanje po zbirki podatkov WAIS..."
+
+#: WWW/Library/Implementation/HTWAIS.c:874
+msgid "Search interrupted."
+msgstr "Iskanje prekinjeno."
+
+#: WWW/Library/Implementation/HTWAIS.c:924
+msgid "Can't convert format of WAIS document"
+msgstr "Ne moremo pretvoriti formata dokumenta WAIS"
+
+#: WWW/Library/Implementation/HTWAIS.c:968
+msgid "HTWAIS: Request too long."
+msgstr "HTWAIS: Predolg zahtevek."
+
+#.
+#. ** Actually do the transaction given by request_message.
+#.
+#: WWW/Library/Implementation/HTWAIS.c:982
+msgid "Fetching WAIS document..."
+msgstr "Pobiramo dokument WAIS..."
+
+#. display_search_response(target, retrieval_response,
+#. wais_database, keywords);
+#: WWW/Library/Implementation/HTWAIS.c:1021
+msgid "No text was returned!\n"
+msgstr "Besedilo ni bilo vrnjeno!\n"
+
+#: WWW/Library/Implementation/HTWSRC.c:287
+msgid " NOT GIVEN in source file; "
+msgstr " NI PODANO v izvorni datoteki; "
+
+#: WWW/Library/Implementation/HTWSRC.c:311
+msgid " WAIS source file"
+msgstr " Izvorna datoteka WAIS"
+
+#: WWW/Library/Implementation/HTWSRC.c:318
+msgid " description"
+msgstr " opis"
+
+#: WWW/Library/Implementation/HTWSRC.c:328
+msgid "Access links"
+msgstr "Povezave za dostop"
+
+#: WWW/Library/Implementation/HTWSRC.c:345
+msgid "Direct access"
+msgstr "Neposredni dostop"
+
+#. * Proxy will be used if defined, so let user know that - FM *
+#: WWW/Library/Implementation/HTWSRC.c:348
+msgid " (or via proxy server, if defined)"
+msgstr " (ali prek stre¾nika proxy, èe je definiran)"
+
+#: WWW/Library/Implementation/HTWSRC.c:363
+msgid "Maintainer"
+msgstr "Vzdr¾evalec"
+
+#: WWW/Library/Implementation/HTWSRC.c:371
+msgid "Host"
+msgstr "Gostitelj"
+
+#: src/GridText.c:607
+msgid "Memory exhausted, display interrupted!"
+msgstr "Pomnilnik izèrpan, prikaz prekinjen!"
+
+#: src/GridText.c:612
+msgid "Memory exhausted, will interrupt transfer!"
+msgstr "Pomnilnik izèrpan, prekinili bomo prenos!"
+
+#: src/GridText.c:3395
+msgid " *** MEMORY EXHAUSTED ***"
+msgstr "*** POMNILNIK IZÈRPAN ***"
+
+#: src/GridText.c:5733 src/GridText.c:5740 src/LYList.c:258
+msgid "unknown field or link"
+msgstr "neznano polje ali povezava"
+
+#: src/GridText.c:5749
+msgid "text entry field"
+msgstr "tekstovno vnosno polje"
+
+#: src/GridText.c:5752
+msgid "password entry field"
+msgstr "vnosno polje za geslo"
+
+#: src/GridText.c:5755
+msgid "checkbox"
+msgstr ""
+
+#: src/GridText.c:5758
+msgid "radio button"
+msgstr "radijski gumb"
+
+#: src/GridText.c:5761
+msgid "submit button"
+msgstr ""
+
+#: src/GridText.c:5764
+msgid "reset button"
+msgstr ""
+
+#: src/GridText.c:5767
+msgid "popup menu"
+msgstr ""
+
+#: src/GridText.c:5770
+msgid "hidden form field"
+msgstr ""
+
+#: src/GridText.c:5773
+msgid "text entry area"
+msgstr ""
+
+#: src/GridText.c:5776
+msgid "range entry field"
+msgstr ""
+
+#: src/GridText.c:5779
+msgid "file entry field"
+msgstr ""
+
+#: src/GridText.c:5782
+msgid "text-submit field"
+msgstr ""
+
+#: src/GridText.c:5785
+msgid "image-submit button"
+msgstr "gumb za po¹iljanje slike"
+
+#: src/GridText.c:5788
+msgid "keygen field"
+msgstr "polje za generiranje kljuèa"
+
+#: src/GridText.c:5791
+msgid "unknown form field"
+msgstr ""
+
+#. We can't open the file, what do we do?
+#: src/GridText.c:10348
+#, fuzzy
+msgid "Can't open file for uploading"
+msgstr "Ne moremo odpreti izhodne datoteke! Prekinitev!"
+
+#. We got an error reading the file, what do we do?
+#: src/GridText.c:10359
+msgid "Short read from file, problem?"
+msgstr ""
+
+#: src/GridText.c:10721
+#, c-format
+msgid "Submitting %s"
+msgstr ""
+
+#. ugliness has happened; inform user and do the best we can
+#: src/GridText.c:11887
+msgid "Hang Detect: TextAnchor struct corrupted - suggest aborting!"
+msgstr ""
+
+#. don't show previous state
+#: src/GridText.c:12092
+msgid "Wrap lines to fit displayed area?"
+msgstr ""
+
+#: src/GridText.c:12144
+msgid "Very long lines have been wrapped!"
+msgstr ""
+
+#: src/GridText.c:12591
+msgid "Very long lines have been truncated!"
+msgstr ""
+
+#: src/HTAlert.c:155 src/LYShowInfo.c:318
+msgid "bytes"
+msgstr "zlogov"
+
+#: src/HTAlert.c:156
+msgid "KB"
+msgstr "KB"
+
+#: src/HTAlert.c:255
+#, c-format
+msgid "Read %s of %s of data"
+msgstr "Prebrano %s od %s podatkov"
+
+#: src/HTAlert.c:257
+#, c-format
+msgid "Read %s of data"
+msgstr "Prebrano %s podatkov"
+
+#: src/HTAlert.c:262
+#, c-format
+msgid ", %s/sec"
+msgstr ", %s/sek."
+
+#: src/HTAlert.c:269
+#, c-format
+msgid " (stalled for %ld sec)"
+msgstr ""
+
+#: src/HTAlert.c:271
+#, c-format
+msgid ", ETA %ld sec"
+msgstr ", ETA %ld sek."
+
+#: src/HTAlert.c:277
+msgid " (Press 'z' to abort)"
+msgstr " (Pritisnite ,z` za prenehanje)"
+
+#. Meta-note: don't move the following note from its place right
+#. in front of the first gettext(). As it is now, it should
+#. automatically appear in generated lynx.pot files. - kw
+#.
+#. NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+#. * will take the first byte of the translation as a positive response
+#. * to Yes/No questions. If you provide a translation for "no", lynx
+#. * will take the first byte of the translation as a negative response
+#. * to Yes/No questions. For both, lynx will also try to show the
+#. * first byte in the prompt as a character, instead of (y) or (n),
+#. * respectively. This will not work right for multibyte charsets!
+#. * Don't translate "yes" and "no" for CJK character sets (or translate
+#. * them to "yes" and "no"). For a translation using UTF-8, don't
+#. * translate if the translation would begin with anything but a 7-bit
+#. * (US_ASCII) character. That also means do not translate if the
+#. * translation would begin with anything but a 7-bit character, if
+#. * you use a single-byte character encoding (a charset like ISO-8859-n)
+#. * but anticipate that the message catalog may be used re-encoded in
+#. * UTF-8 form.
+#. * For translations using other character sets, you may also wish to
+#. * leave "yes" and "no" untranslated, if using (y) and (n) is the
+#. * preferred behavior.
+#. * Lynx will also accept y Y n N as responses unless there is a conflict
+#. * with the first letter of the "yes" or "no" translation.
+#.
+#: src/HTAlert.c:334
+msgid "yes"
+msgstr "da"
+
+#: src/HTAlert.c:335
+msgid "no"
+msgstr "ne"
+
+#: src/HTML.c:6342
+msgid "Description:"
+msgstr "Opis:"
+
+#: src/HTML.c:6347
+msgid "(none)"
+msgstr "(brez)"
+
+#: src/HTML.c:6351
+msgid "Filepath:"
+msgstr "Pot do datoteke:"
+
+#: src/HTML.c:6356
+msgid "(unknown)"
+msgstr "(neznana)"
+
+#: src/HTML.c:7804
+msgid "Document has only hidden links. Use the 'l'ist command."
+msgstr "Dokument ima le skrite povezave. Uporabite ukaz ,l` za izpis."
+
+#: src/HTML.c:8328
+msgid "Source cache error - disk full?"
+msgstr ""
+
+#: src/HTML.c:8341
+msgid "Source cache error - not enough memory!"
+msgstr ""
+
+#: src/LYBookmark.c:166
+msgid ""
+" This file is an HTML representation of the X Mosaic hotlist file.\n"
+" Outdated or invalid links may be removed by using the\n"
+" remove bookmark command, it is usually the 'R' key but may have\n"
+" been remapped by you or your system administrator."
+msgstr ""
+
+#: src/LYBookmark.c:382
+msgid ""
+" You can delete links by the 'R' key<br>\n"
+"<ol>\n"
+msgstr ""
+
+#: src/LYBookmark.c:385
+msgid ""
+" You can delete links using the remove bookmark command. It is usually\n"
+" the 'R' key but may have been remapped by you or your system\n"
+" administrator."
+msgstr ""
+
+#: src/LYBookmark.c:389
+msgid ""
+" This file also may be edited with a standard text editor to delete\n"
+" outdated or invalid links, or to change their order."
+msgstr ""
+
+#: src/LYBookmark.c:392
+msgid ""
+"Note: if you edit this file manually\n"
+" you should not change the format within the lines\n"
+" or add other HTML markup.\n"
+" Make sure any bookmark link is saved as a single line."
+msgstr ""
+
+#: src/LYBookmark.c:683
+#, c-format
+msgid "File may be recoverable from %s during this session"
+msgstr ""
+
+#.
+#. * Neither the path as given nor any components examined by
+#. * backing up were stat()able. - kw
+#.
+#: src/LYCgi.c:232
+msgid "Unable to access cgi script"
+msgstr ""
+
+#: src/LYCgi.c:651 src/LYCgi.c:654
+msgid "Good Advice"
+msgstr "Dober nasvet"
+
+#: src/LYCgi.c:657
+msgid "An excellent http server for VMS is available via"
+msgstr "Izvrsten stre¾nik HTTP za VMS je dostopen prek"
+
+#: src/LYCgi.c:664
+msgid "this link"
+msgstr "te povezave"
+
+#: src/LYCgi.c:668
+msgid "It provides state of the art CGI script support.\n"
+msgstr "Ponuja naravnost umetni¹ko podporo za skripte CGI.\n"
+
+#: src/LYClean.c:108
+msgid "Exiting via interrupt:"
+msgstr "Zapu¹èamo program prek prekinitve:"
+
+#: src/LYCookie.c:2659
+msgid "(from a previous session)"
+msgstr "(iz prej¹nje seje)"
+
+#: src/LYCookie.c:2719
+msgid "Maximum Gobble Date:"
+msgstr ""
+
+#: src/LYCookie.c:2764
+msgid "Internal"
+msgstr " (notranji)"
+
+#: src/LYCookie.c:2765
+msgid "cookie_domain_flag_set error, aborting program"
+msgstr ""
+
+#: src/LYCurses.c:936
+msgid "Terminal initialisation failed - unknown terminal type?"
+msgstr ""
+
+#: src/LYCurses.c:1328
+msgid "Terminal ="
+msgstr "Terminal ="
+
+#: src/LYCurses.c:1332
+msgid "You must use a vt100, 200, etc. terminal with this program."
+msgstr "V tem programu morate uporabljati terminal vt100, 200, ipd."
+
+#: src/LYCurses.c:1384
+msgid "Your Terminal type is unknown!"
+msgstr "Vrsta va¹ega terminala je neznana!"
+
+#: src/LYCurses.c:1385
+msgid "Enter a terminal type:"
+msgstr "Vnesite vrsto terminala:"
+
+#: src/LYCurses.c:1398
+msgid "TERMINAL TYPE IS SET TO"
+msgstr "VRSTA TERMINALA JE NASTAVLJENA NA"
+
+#: src/LYCurses.c:1749
+#, c-format
+msgid ""
+"\n"
+"A Fatal error has occurred in %s Ver. %s\n"
+msgstr ""
+"\n"
+"Usodna napaka se je pojavila v %s Ver. %s\n"
+
+#: src/LYCurses.c:1751
+msgid ""
+"\n"
+"Please notify your system administrator to confirm a bug, and if\n"
+"confirmed, to notify the lynx-dev list. Bug reports should have concise\n"
+"descriptions of the command and/or URL which causes the problem, the\n"
+"operating system name with version number, the TCPIP implementation, the\n"
+"TRACEBACK if it can be captured, and any other relevant information.\n"
+msgstr ""
+"\n"
+"Prosim, obvestite va¹ega sistemskega nadzornika, da potrdi ta hro¹è\n"
+"in, èe je potrjen, obvesti dopisni seznam lynx-dev. Opisi hro¹èev bi\n"
+"morali imeti podrobne opise ukazov in/ali URL-jev, ki so povzroèili\n"
+"te¾ave, ime in ¹tevilko razlièice operacijskega sistema, izvedbe\n"
+"TCP/IP, podatke TRACEBACK, èe jih je mogoèe zajeti, in vse druge\n"
+"pomembne podatke.\n"
+
+#: src/LYEdit.c:264
+msgid "Editor killed by signal"
+msgstr ""
+
+#: src/LYEdit.c:266
+#, c-format
+msgid "Editor returned with error status, %s"
+msgstr ""
+
+#: src/LYEdit.c:267
+msgid "reason unknown."
+msgstr ""
+
+#: src/LYDownload.c:520
+msgid "Downloaded link:"
+msgstr "Prene¹ena povezava:"
+
+#: src/LYDownload.c:525
+msgid "Suggested file name:"
+msgstr "Predlagano ime datoteke:"
+
+#: src/LYDownload.c:530
+msgid "Standard download options:"
+msgstr "Standardne izbire za jemanje:"
+
+#: src/LYDownload.c:531
+msgid "Download options:"
+msgstr "Izbire za jemanje:"
+
+#: src/LYDownload.c:545
+msgid "Save to disk"
+msgstr "Shranimo v disk"
+
+#: src/LYDownload.c:547
+msgid "Save to disk disabled."
+msgstr "Shranjevanje v disk onemogoèeno."
+
+#: src/LYDownload.c:551 src/LYPrint.c:1338
+msgid "Local additions:"
+msgstr "Lokalni dodatki:"
+
+#: src/LYDownload.c:560 src/LYUpload.c:224
+msgid "No Name Given"
+msgstr "Ni podanega imena"
+
+#: src/LYHistory.c:633
+msgid "You selected:"
+msgstr "Izbrali ste:"
+
+#: src/LYHistory.c:657 src/LYHistory.c:905
+msgid "(no address)"
+msgstr "(ni naslova)"
+
+#: src/LYHistory.c:661
+msgid " (internal)"
+msgstr " (notranji)"
+
+#: src/LYHistory.c:663
+msgid " (was internal)"
+msgstr " (je bil notranji)"
+
+#: src/LYHistory.c:761
+msgid " (From History)"
+msgstr " (iz Zgodovine)"
+
+#: src/LYHistory.c:825
+msgid "You visited (POSTs, bookmark, menu and list files excluded):"
+msgstr ""
+
+#: src/LYHistory.c:1124
+msgid "(No messages yet)"
+msgstr ""
+
+#: src/LYLeaks.c:78
+msgid "Invalid pointer detected."
+msgstr ""
+
+#: src/LYLeaks.c:80 src/LYLeaks.c:117
+msgid "Pointer:"
+msgstr "Kazalec:"
+
+#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:136
+msgid "FileName:"
+msgstr "Ime datoteke:"
+
+#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:139 src/LYLeaks.c:150
+msgid "LineCount:"
+msgstr ""
+
+#: src/LYLeaks.c:115
+msgid "Memory leak detected."
+msgstr ""
+
+#: src/LYLeaks.c:120
+msgid "Contains:"
+msgstr "Vsebuje:"
+
+#: src/LYLeaks.c:133
+msgid "ByteSize:"
+msgstr "Velikost zlogov:"
+
+#: src/LYLeaks.c:147
+msgid "realloced:"
+msgstr ""
+
+#: src/LYLeaks.c:170
+msgid "Total memory leakage this run:"
+msgstr ""
+
+#: src/LYList.c:91
+msgid "References in "
+msgstr ""
+
+#: src/LYList.c:92
+msgid "this document:"
+msgstr ""
+
+#: src/LYList.c:98
+msgid "Visible links:"
+msgstr ""
+
+#: src/LYList.c:199 src/LYList.c:319
+msgid "Hidden links:"
+msgstr "Skrite povezave:"
+
+#: src/LYList.c:267
+msgid "References"
+msgstr "Sklici"
+
+#: src/LYList.c:269
+msgid "Visible links"
+msgstr "Vidne povezave"
+
+#: src/LYLocal.c:267
+#, c-format
+msgid "Unable to get status of '%s'."
+msgstr ""
+
+#: src/LYLocal.c:301
+msgid "The selected item is not a file or a directory! Request ignored."
+msgstr ""
+
+#: src/LYLocal.c:383
+#, c-format
+msgid "Unable to %s due to system error!"
+msgstr ""
+
+#. error return
+#: src/LYLocal.c:415
+#, c-format
+msgid "Probable failure to %s due to system error!"
+msgstr ""
+
+#: src/LYLocal.c:453
+#, c-format
+msgid "move %s to %s"
+msgstr ""
+
+#: src/LYLocal.c:475
+msgid "There is already a directory with that name! Request ignored."
+msgstr ""
+
+#: src/LYLocal.c:477
+msgid "There is already a file with that name! Request ignored."
+msgstr ""
+
+#: src/LYLocal.c:479
+msgid "The specified name is already in use! Request ignored."
+msgstr ""
+
+#: src/LYLocal.c:490
+msgid "Destination has different owner! Request denied."
+msgstr ""
+
+#: src/LYLocal.c:493
+msgid "Destination is not a valid directory! Request denied."
+msgstr ""
+
+#: src/LYLocal.c:516
+msgid "Remove all tagged files and directories?"
+msgstr ""
+
+#: src/LYLocal.c:537
+#, c-format
+msgid "remove %s"
+msgstr ""
+
+#: src/LYLocal.c:580
+msgid "Enter new location for tagged items: "
+msgstr ""
+
+#: src/LYLocal.c:649
+msgid "Path too long"
+msgstr "Predolga pot"
+
+#: src/LYLocal.c:680
+msgid "Source and destination are the same location - request ignored!"
+msgstr ""
+
+#: src/LYLocal.c:738
+msgid "Enter new name for directory: "
+msgstr ""
+
+#: src/LYLocal.c:740
+msgid "Enter new name for file: "
+msgstr ""
+
+#: src/LYLocal.c:751
+msgid "Illegal character (path-separator) found! Request ignored."
+msgstr ""
+
+#: src/LYLocal.c:800
+msgid "Enter new location for directory: "
+msgstr ""
+
+#: src/LYLocal.c:802
+msgid "Enter new location for file: "
+msgstr ""
+
+#: src/LYLocal.c:827
+msgid "Unexpected failure - unable to find trailing path separator"
+msgstr ""
+
+#: src/LYLocal.c:847
+msgid "Source and destination are the same location! Request ignored!"
+msgstr ""
+
+#: src/LYLocal.c:894
+msgid "Modify name, location, or permission (n, l, or p): "
+msgstr ""
+
+#: src/LYLocal.c:896
+msgid "Modify name or location (n or l): "
+msgstr ""
+
+#.
+#. * Code for changing ownership needed here.
+#.
+#: src/LYLocal.c:925
+msgid "This feature not yet implemented!"
+msgstr ""
+
+#: src/LYLocal.c:943
+msgid "Enter name of file to create: "
+msgstr ""
+
+#: src/LYLocal.c:951 src/LYLocal.c:999
+msgid "Illegal redirection \"//\" found! Request ignored."
+msgstr ""
+
+#: src/LYLocal.c:966
+#, c-format
+msgid "create %s"
+msgstr ""
+
+#: src/LYLocal.c:991
+msgid "Enter name for new directory: "
+msgstr ""
+
+#: src/LYLocal.c:1042
+msgid "Create file or directory (f or d): "
+msgstr ""
+
+#: src/LYLocal.c:1083
+#, c-format
+msgid "Remove '%s' and all of its contents?"
+msgstr ""
+
+#: src/LYLocal.c:1086
+msgid "Remove directory and all of its contents?"
+msgstr ""
+
+#: src/LYLocal.c:1090
+#, c-format
+msgid "Remove file '%s'?"
+msgstr ""
+
+#: src/LYLocal.c:1092
+msgid "Remove file?"
+msgstr ""
+
+#: src/LYLocal.c:1097
+#, c-format
+msgid "Remove symbolic link '%s'?"
+msgstr ""
+
+#: src/LYLocal.c:1099
+msgid "Remove symbolic link?"
+msgstr "Simbolna povezava"
+
+#: src/LYLocal.c:1190
+msgid "Sorry, don't know how to permit non-UNIX files yet."
+msgstr ""
+
+#: src/LYLocal.c:1220
+msgid "Unable to open permit options file"
+msgstr ""
+
+#: src/LYLocal.c:1247
+msgid "Specify permissions below:"
+msgstr ""
+
+#: src/LYLocal.c:1248 src/LYShowInfo.c:196
+msgid "Owner:"
+msgstr "Lastnik:"
+
+#: src/LYLocal.c:1264
+msgid "Group"
+msgstr "Skupina"
+
+#: src/LYLocal.c:1280
+msgid "Others:"
+msgstr "Drugi:"
+
+#: src/LYLocal.c:1298
+msgid "form to permit"
+msgstr ""
+
+#: src/LYLocal.c:1396
+msgid "Invalid mode format."
+msgstr ""
+
+#: src/LYLocal.c:1400
+msgid "Invalid syntax format."
+msgstr ""
+
+#: src/LYLocal.c:1575
+msgid "NULL URL pointer"
+msgstr ""
+
+#: src/LYLocal.c:1670
+msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
+msgstr ""
+
+#: src/LYLocal.c:1782
+#, c-format
+msgid "Executing %s "
+msgstr "Izvajamo %s "
+
+#: src/LYLocal.c:1785
+msgid "Executing system command. This might take a while."
+msgstr ""
+
+#: src/LYLocal.c:1831
+msgid "Unable to open file management menu file."
+msgstr ""
+
+#: src/LYLocal.c:1862
+msgid "Current directory:"
+msgstr "Trenutni imenik:"
+
+#: src/LYLocal.c:1865 src/LYLocal.c:1883
+msgid "Current selection:"
+msgstr ""
+
+#: src/LYLocal.c:1869
+msgid "Nothing currently selected."
+msgstr ""
+
+#: src/LYLocal.c:1884
+msgid "tagged item:"
+msgstr ""
+
+#: src/LYLocal.c:1884
+msgid "tagged items:"
+msgstr ""
+
+#: src/LYLocal.c:1983 src/LYLocal.c:1994
+msgid "Illegal filename; request ignored."
+msgstr ""
+
+#: src/LYLocal.c:2137
+msgid "The selected item is not a directory! Request ignored."
+msgstr ""
+
+#. directory not writable
+#: src/LYLocal.c:2141
+msgid "Install in the selected directory not permitted."
+msgstr ""
+
+#: src/LYLocal.c:2146
+msgid "Just a moment, ..."
+msgstr ""
+
+#: src/LYLocal.c:2163
+msgid "Error buiding install args"
+msgstr ""
+
+#: src/LYLocal.c:2178 src/LYLocal.c:2210
+#, c-format
+msgid "Source and target are the same: %s"
+msgstr ""
+
+#: src/LYLocal.c:2188 src/LYLocal.c:2220
+#, c-format
+msgid "Already in target directory: %s"
+msgstr "Beremo imenik: %s"
+
+#: src/LYLocal.c:2238
+msgid "Installation complete"
+msgstr ""
+
+#: src/LYLocal.c:2427
+msgid "Temporary URL or list would be too long."
+msgstr ""
+
+#: src/LYMail.c:503
+msgid "Sending"
+msgstr "Po¹iljamo"
+
+#: src/LYMail.c:989
+#, c-format
+msgid "The link %s :?: %s \n"
+msgstr "Povezava %s :?: %s\n"
+
+#: src/LYMail.c:991
+#, c-format
+msgid "called \"%s\"\n"
+msgstr "je klicala \"%s\"\n"
+
+#: src/LYMail.c:992
+#, c-format
+msgid "in the file \"%s\" called \"%s\"\n"
+msgstr "v datoteki \"%s\" je klicana \"%s\"\n"
+
+#: src/LYMail.c:993
+msgid "was requested but was not available."
+msgstr "je bila zahtevana, a ni dostopna."
+
+#: src/LYMail.c:994
+msgid "Thought you might want to know."
+msgstr ""
+
+#: src/LYMail.c:996
+msgid "This message was automatically generated by"
+msgstr ""
+
+#: src/LYMain.c:897
+msgid "No Winsock found, sorry."
+msgstr "Vtiènica Winsock ¾al ni bila najdena."
+
+#: src/LYMain.c:1103
+msgid "You MUST define a valid TMP or TEMP area!\n"
+msgstr "MORATE nastaviti veljavno podroèje TMP ali TEMP!\n"
+
+#: src/LYMain.c:1156 src/LYMainLoop.c:5117
+msgid "No such directory"
+msgstr " imenik"
+
+#: src/LYMain.c:1378
+#, c-format
+msgid ""
+"\n"
+"Configuration file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Nastavitvena datoteka %s ni dostopna.\n"
+"\n"
+
+#: src/LYMain.c:1388
+msgid ""
+"\n"
+"Lynx character sets not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Nabor znakov za Lynx ni bil doloèen.\n"
+"\n"
+
+#: src/LYMain.c:1417
+msgid ""
+"\n"
+"Lynx edit map not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Urejevalna preslikava za Lynx ni bila doloèena.\n"
+"\n"
+
+#: src/LYMain.c:1446
+#, c-format
+msgid ""
+"\n"
+"Lynx file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Datoteka %s za Lynx< ni dostopna.\n"
+"\n"
+
+#: src/LYMain.c:1704
+msgid "Warning:"
+msgstr ""
+
+#: src/LYMain.c:2247
+msgid "persistent cookies state will be changed in next session only."
+msgstr "stanje obstojnih pi¹kotov bo spremenjeno le v naslednji seji."
+
+#: src/LYMain.c:2477 src/LYMain.c:2525
+#, c-format
+msgid "Lynx: ignoring unrecognized charset=%s\n"
+msgstr ""
+
+#: src/LYMain.c:3047
+#, c-format
+msgid "%s Version %s (%s)\n"
+msgstr "%s Razlièica %s (%s)\n"
+
+#: src/LYMain.c:3072
+#, c-format
+msgid "Built on %s %s %s\n"
+msgstr "Zgrajena na %s %s %s\n"
+
+#: src/LYMain.c:3077
+msgid "Copyrights held by the University of Kansas, CERN, and other contributors.\n"
+msgstr "Pravice raz¹irjanja imajo Univerza v Kansasu, CERN in drugi sodelavci.\n"
+
+#: src/LYMain.c:3079
+msgid "Distributed under the GNU General Public License.\n"
+msgstr "Raz¹irjano pod Splo¹no licenco GNU.\n"
+
+#: src/LYMain.c:3081
+msgid ""
+"See http://lynx.browser.org/ and the online help for more information.\n"
+"\n"
+msgstr ""
+
+#: src/LYMain.c:3800
+#, c-format
+msgid "USAGE: %s [options] [file]\n"
+msgstr ""
+
+#: src/LYMain.c:3801
+msgid "Options are:\n"
+msgstr ""
+
+#: src/LYMain.c:4060
+#, c-format
+msgid "%s: Invalid Option: %s\n"
+msgstr ""
+
+#: src/LYMainLoop.c:512
+#, c-format
+msgid "Internal error: Invalid mouse link %d!"
+msgstr ""
+
+#.
+#. * Make a name for this new URL.
+#.
+#: src/LYMainLoop.c:625 src/LYMainLoop.c:5139
+msgid "A URL specified by the user"
+msgstr ""
+
+#: src/LYMainLoop.c:1114
+msgid "Enctype multipart/form-data not yet supported! Cannot submit."
+msgstr ""
+
+#.
+#. * Make a name for this help file.
+#.
+#: src/LYMainLoop.c:3097
+msgid "Help Screen"
+msgstr ""
+
+#: src/LYMainLoop.c:3231
+msgid "System Index"
+msgstr ""
+
+#: src/LYMainLoop.c:3611 src/LYMainLoop.c:5347
+msgid "Entry into main screen"
+msgstr ""
+
+#: src/LYMainLoop.c:3897
+msgid "No next document present"
+msgstr ""
+
+#: src/LYMainLoop.c:4206
+msgid "charset for this document specified explicitly, sorry..."
+msgstr ""
+
+#: src/LYMainLoop.c:5093
+msgid "cd to:"
+msgstr " v "
+
+#: src/LYMainLoop.c:5120
+msgid "A component of path is not a directory"
+msgstr ""
+
+#: src/LYMainLoop.c:5123
+msgid "failed to change directory"
+msgstr "Ne moremo dostopati do imenika."
+
+#: src/LYMainLoop.c:6291
+msgid "Reparsing document under current settings..."
+msgstr ""
+
+#: src/LYMainLoop.c:6579 src/LYMainLoop.c:6583
+#, c-format
+msgid "Fatal error - could not open output file %s\n"
+msgstr ""
+
+#: src/LYMainLoop.c:7719 src/LYMainLoop.c:7892
+msgid "-index-"
+msgstr " stvarno kazalo"
+
+#: src/LYMainLoop.c:7829
+msgid "lynx: Can't access startfile"
+msgstr ""
+
+#: src/LYMainLoop.c:7842
+msgid "lynx: Start file could not be found or is not text/html or text/plain"
+msgstr ""
+
+#: src/LYMainLoop.c:7843
+msgid " Exiting..."
+msgstr ""
+
+#: src/LYMainLoop.c:7886
+msgid "-more-"
+msgstr ""
+
+#. Enable scrolling.
+#: src/LYNews.c:203
+msgid "You will be posting to:"
+msgstr ""
+
+#.
+#. * Get the mail address for the From header,
+#. * offering personal_mail_address as default.
+#.
+#: src/LYNews.c:212
+msgid ""
+"\n"
+"\n"
+" Please provide your mail address for the From: header\n"
+msgstr ""
+
+#.
+#. * Get the Subject header, offering the current
+#. * document's title as the default if this is a
+#. * followup rather than a new post. - FM
+#.
+#: src/LYNews.c:230
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Subject: header\n"
+msgstr ""
+
+#: src/LYNews.c:322
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Organization: header\n"
+msgstr ""
+
+#.
+#. * Use the built in line editior.
+#.
+#: src/LYNews.c:379
+msgid ""
+"\n"
+"\n"
+" Please enter your message below."
+msgstr ""
+
+#: src/LYNews.c:425
+msgid "Message has no original text!"
+msgstr ""
+
+#: src/LYOptions.c:743
+msgid "review/edit B)ookmarks files"
+msgstr ""
+
+#: src/LYOptions.c:745
+msgid "B)ookmark file: "
+msgstr ""
+
+#: src/LYOptions.c:2507 src/LYOptions.c:2531
+#, c-format
+msgid "Use %s to invoke the Options menu!"
+msgstr ""
+
+#: src/LYOptions.c:3208
+msgid "General Preferences"
+msgstr "Sklici"
+
+#. ***************************************************************
+#. User Mode: SELECT
+#: src/LYOptions.c:3212
+msgid "User mode"
+msgstr ""
+
+#. Editor: INPUT
+#: src/LYOptions.c:3218
+msgid "Editor"
+msgstr ""
+
+#. Search Type: SELECT
+#: src/LYOptions.c:3223
+msgid "Type of Search"
+msgstr ""
+
+#. Cookies: SELECT
+#: src/LYOptions.c:3229
+msgid "Cookies"
+msgstr ""
+
+#: src/LYOptions.c:3243
+msgid "Keyboard Input"
+msgstr ""
+
+#. ***************************************************************
+#. Keypad Mode: SELECT
+#: src/LYOptions.c:3247
+msgid "Keypad mode"
+msgstr ""
+
+#. Emacs keys: ON/OFF
+#: src/LYOptions.c:3253
+msgid "Emacs keys"
+msgstr ""
+
+#. VI Keys: ON/OFF
+#: src/LYOptions.c:3259
+msgid "VI keys"
+msgstr ""
+
+#. Line edit style: SELECT
+#. well, at least 2 line edit styles available
+#: src/LYOptions.c:3266
+msgid "Line edit style"
+msgstr ""
+
+#. Keyboard layout: SELECT
+#: src/LYOptions.c:3278
+msgid "Keyboard layout"
+msgstr ""
+
+#.
+#. * Display and Character Set
+#.
+#: src/LYOptions.c:3291
+msgid "Display and Character Set"
+msgstr ""
+
+#. ***************************************************************
+#. Display Character Set: SELECT
+#: src/LYOptions.c:3295
+msgid "Display character set"
+msgstr ""
+
+#: src/LYOptions.c:3324
+msgid "Assumed document character set"
+msgstr ""
+
+#.
+#. * Since CJK people hardly mixed with other world
+#. * we split the header to make it more readable:
+#. * "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
+#.
+#: src/LYOptions.c:3344
+msgid "CJK mode"
+msgstr ""
+
+#: src/LYOptions.c:3346
+msgid "Raw 8-bit"
+msgstr ""
+
+#. X Display: INPUT
+#: src/LYOptions.c:3354
+msgid "X Display"
+msgstr ""
+
+#.
+#. * Document Appearance
+#.
+#: src/LYOptions.c:3360
+msgid "Document Appearance"
+msgstr ""
+
+#: src/LYOptions.c:3366
+msgid "Show color"
+msgstr ""
+
+#. Show cursor: ON/OFF
+#: src/LYOptions.c:3390
+msgid "Show cursor"
+msgstr ""
+
+#. Select Popups: ON/OFF
+#: src/LYOptions.c:3396
+msgid "Popups for select fields"
+msgstr ""
+
+#. HTML error recovery: SELECT
+#: src/LYOptions.c:3403
+msgid "HTML error recovery"
+msgstr ""
+
+#. Show Images: SELECT
+#: src/LYOptions.c:3410
+msgid "Show images"
+msgstr ""
+
+#. Verbose Images: ON/OFF
+#: src/LYOptions.c:3424
+msgid "Verbose images"
+msgstr ""
+
+#.
+#. * Headers Transferred to Remote Servers
+#.
+#: src/LYOptions.c:3432
+msgid "Headers Transferred to Remote Servers"
+msgstr ""
+
+#. ***************************************************************
+#. Mail Address: INPUT
+#: src/LYOptions.c:3436
+msgid "Personal mail address"
+msgstr ""
+
+#. Preferred Document Character Set: INPUT
+#: src/LYOptions.c:3441
+msgid "Preferred document character set"
+msgstr ""
+
+#. Preferred Document Language: INPUT
+#: src/LYOptions.c:3446
+msgid "Preferred document language"
+msgstr ""
+
+#: src/LYOptions.c:3452
+msgid "User-Agent header"
+msgstr ""
+
+#.
+#. * Listing and Accessing Files
+#.
+#: src/LYOptions.c:3460
+msgid "Listing and Accessing Files"
+msgstr ""
+
+#. ***************************************************************
+#. FTP sort: SELECT
+#: src/LYOptions.c:3464
+msgid "FTP sort criteria"
+msgstr ""
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3471
+msgid "Local directory sort criteria"
+msgstr ""
+
+#: src/LYOptions.c:3479
+msgid "Show dot files"
+msgstr ""
+
+#: src/LYOptions.c:3487
+msgid "Execution links"
+msgstr ""
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3507
+msgid "Show transfer rate"
+msgstr "Prenos podatkov konèan"
+
+#.
+#. * Special Files and Screens
+#.
+#: src/LYOptions.c:3516
+msgid "Special Files and Screens"
+msgstr ""
+
+#: src/LYOptions.c:3521
+msgid "Multi-bookmarks"
+msgstr ""
+
+#: src/LYOptions.c:3529
+msgid "Review/edit Bookmarks files"
+msgstr ""
+
+#: src/LYOptions.c:3531
+msgid "Goto multi-bookmark menu"
+msgstr ""
+
+#: src/LYOptions.c:3533
+msgid "Bookmarks file"
+msgstr ""
+
+#. Visited Pages: SELECT
+#: src/LYOptions.c:3539
+msgid "Visited Pages"
+msgstr "Stran z obiskanimi povezavami"
+
+#: src/LYPrint.c:959
+msgid " Print job complete.\n"
+msgstr "Nalaganje nepopolno.\n"
+
+#: src/LYPrint.c:1296
+msgid "Document:"
+msgstr ""
+
+#: src/LYPrint.c:1297
+msgid "Number of lines:"
+msgstr "©tevilo vrstic:"
+
+#: src/LYPrint.c:1298
+msgid "Number of pages:"
+msgstr "©tevilo strani:"
+
+#: src/LYPrint.c:1299
+msgid "pages"
+msgstr "strani"
+
+#: src/LYPrint.c:1299
+msgid "page"
+msgstr "stran"
+
+#: src/LYPrint.c:1300
+msgid "(approximately)"
+msgstr "(pribli¾no)"
+
+#: src/LYPrint.c:1305
+msgid "Some print functions have been disabled!"
+msgstr ""
+
+#: src/LYPrint.c:1309
+msgid "Standard print options:"
+msgstr ""
+
+#: src/LYPrint.c:1310
+msgid "Print options:"
+msgstr ""
+
+#: src/LYPrint.c:1316
+msgid "Save to a local file"
+msgstr ""
+
+#: src/LYPrint.c:1318
+msgid "Save to disk disabled"
+msgstr ""
+
+#: src/LYPrint.c:1324
+msgid "Mail the file"
+msgstr ""
+
+#: src/LYPrint.c:1330
+msgid "Print to the screen"
+msgstr ""
+
+#: src/LYPrint.c:1334
+msgid "Print out on a printer attached to your vt100 terminal"
+msgstr ""
+
+#: src/LYReadCFG.c:340
+msgid ""
+"Syntax Error parsing COLOR in configuration file:\n"
+"The line must be of the form:\n"
+"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
+"\n"
+"Here FOREGROUND and BACKGROUND must be one of:\n"
+"The special strings 'nocolor' or 'default', or\n"
+msgstr ""
+
+#: src/LYReadCFG.c:353
+msgid "Offending line:"
+msgstr ""
+
+#: src/LYReadCFG.c:660
+#, c-format
+msgid "key remapping of %s to %s for %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:667
+#, c-format
+msgid "key remapping of %s to %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:688
+#, c-format
+msgid "invalid line-editor selection %s for key %s, selecting all\n"
+msgstr ""
+
+#: src/LYReadCFG.c:715 src/LYReadCFG.c:728
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:733
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) for %s failed\n"
+msgstr ""
+
+#: src/LYReadCFG.c:838
+#, c-format
+msgid "Lynx: cannot start, CERN rules file %s is not available\n"
+msgstr ""
+
+#: src/LYReadCFG.c:840
+msgid "(no name)"
+msgstr "(brez imena)"
+
+#: src/LYReadCFG.c:1658
+#, c-format
+msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
+msgstr ""
+
+#: src/LYReadCFG.c:1660
+#, c-format
+msgid "Last attempted include was '%s',\n"
+msgstr ""
+
+#: src/LYReadCFG.c:1661
+#, c-format
+msgid "included from '%s'.\n"
+msgstr ""
+
+#: src/LYReadCFG.c:2116 src/LYReadCFG.c:2129 src/LYReadCFG.c:2165
+msgid "The following is read from your lynx.cfg file."
+msgstr ""
+
+#: src/LYReadCFG.c:2117 src/LYReadCFG.c:2130
+msgid "Please read the distribution"
+msgstr "Prosim, preberite dokumentacijo v distribuciji"
+
+#: src/LYReadCFG.c:2123 src/LYReadCFG.c:2133
+msgid "for more comments."
+msgstr "za veè pripomb."
+
+#: src/LYReadCFG.c:2147
+msgid "RELOAD THE CHANGES"
+msgstr ""
+
+#: src/LYReadCFG.c:2156
+msgid "Your primary configuration"
+msgstr ""
+
+#: src/LYShowInfo.c:129
+msgid "Directory that you are currently viewing"
+msgstr ""
+
+#: src/LYShowInfo.c:132
+msgid "Name:"
+msgstr "Ime:"
+
+#: src/LYShowInfo.c:135
+msgid "URL:"
+msgstr "URL:"
+
+#: src/LYShowInfo.c:146
+msgid "Directory that you have currently selected"
+msgstr ""
+
+#: src/LYShowInfo.c:149
+msgid "File that you have currently selected"
+msgstr ""
+
+#: src/LYShowInfo.c:153
+msgid "Symbolic link that you have currently selected"
+msgstr ""
+
+#: src/LYShowInfo.c:157
+msgid "Item that you have currently selected"
+msgstr ""
+
+#: src/LYShowInfo.c:159
+msgid "Full name:"
+msgstr ""
+
+#: src/LYShowInfo.c:168
+msgid "Unable to follow link"
+msgstr ""
+
+#: src/LYShowInfo.c:170
+msgid "Points to file:"
+msgstr ""
+
+#: src/LYShowInfo.c:175
+msgid "Name of owner:"
+msgstr "©tevilo vrstic:"
+
+#: src/LYShowInfo.c:178
+msgid "Group name:"
+msgstr ""
+
+#: src/LYShowInfo.c:181
+msgid "File size:"
+msgstr ""
+
+#: src/LYShowInfo.c:187
+msgid "Creation date:"
+msgstr ""
+
+#: src/LYShowInfo.c:190
+msgid "Last modified:"
+msgstr ""
+
+#: src/LYShowInfo.c:193
+msgid "Last accessed:"
+msgstr ""
+
+#: src/LYShowInfo.c:195
+msgid "Access Permissions"
+msgstr ""
+
+#: src/LYShowInfo.c:261
+msgid "File that you are currently viewing"
+msgstr ""
+
+#: src/LYShowInfo.c:266 src/LYShowInfo.c:375
+msgid "Linkname:"
+msgstr ""
+
+#: src/LYShowInfo.c:279 src/LYShowInfo.c:291
+msgid "Charset:"
+msgstr ""
+
+#: src/LYShowInfo.c:297
+msgid "Server:"
+msgstr ""
+
+#: src/LYShowInfo.c:300
+msgid "Date:"
+msgstr ""
+
+#: src/LYShowInfo.c:303
+msgid "Last Mod:"
+msgstr ""
+
+#: src/LYShowInfo.c:309
+msgid "&nbsp;Expires:"
+msgstr ""
+
+#: src/LYShowInfo.c:313
+msgid "Cache-Control:"
+msgstr ""
+
+#: src/LYShowInfo.c:317
+msgid "Content-Length:"
+msgstr ""
+
+#: src/LYShowInfo.c:322
+msgid "Language:"
+msgstr ""
+
+#: src/LYShowInfo.c:329
+msgid "Post Data:"
+msgstr ""
+
+#: src/LYShowInfo.c:331
+msgid "Post Content Type:"
+msgstr ""
+
+#: src/LYShowInfo.c:340
+msgid "Owner(s):"
+msgstr ""
+
+#: src/LYShowInfo.c:343
+msgid "size:"
+msgstr ""
+
+#: src/LYShowInfo.c:343
+msgid "lines"
+msgstr ""
+
+#: src/LYShowInfo.c:346
+msgid "mode:"
+msgstr ""
+
+#: src/LYShowInfo.c:348
+msgid "forms mode"
+msgstr ""
+
+#: src/LYShowInfo.c:350
+msgid "source"
+msgstr ""
+
+#: src/LYShowInfo.c:350
+msgid "normal"
+msgstr ""
+
+#: src/LYShowInfo.c:351
+msgid ", safe"
+msgstr ""
+
+#: src/LYShowInfo.c:352
+msgid ", via internal link"
+msgstr " (je bil notranji)"
+
+#: src/LYShowInfo.c:358
+msgid ", no-cache"
+msgstr ""
+
+#: src/LYShowInfo.c:360
+msgid ", ISMAP script"
+msgstr ""
+
+#: src/LYShowInfo.c:362
+msgid ", bookmark file"
+msgstr ""
+
+#: src/LYShowInfo.c:371
+msgid "Link that you currently have selected"
+msgstr ""
+
+#: src/LYShowInfo.c:384
+msgid "Method:"
+msgstr ""
+
+#: src/LYShowInfo.c:389
+msgid "Enctype:"
+msgstr ""
+
+#: src/LYShowInfo.c:401
+msgid "(Form field)"
+msgstr ""
+
+#: src/LYShowInfo.c:416
+msgid "No Links on the current page"
+msgstr ""
+
+#: src/LYStyle.c:250
+#, c-format
+msgid ""
+"Syntax Error parsing style in lss file:\n"
+"[%s]\n"
+"The line must be of the form:\n"
+"OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
+"where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+msgstr ""
+
+#: src/LYTraversal.c:107
+msgid "here is a list of the history stack so that you may rebuild"
+msgstr ""
+
+#: src/LYUpload.c:78
+msgid "ERROR! - upload command is misconfigured"
+msgstr ""
+
+#: src/LYUpload.c:100
+msgid "Illegal redirection \"../\" found! Request ignored."
+msgstr ""
+
+#: src/LYUpload.c:103
+msgid "Illegal character \"/\" found! Request ignored."
+msgstr ""
+
+#: src/LYUpload.c:106
+msgid "Illegal redirection using \"~\" found! Request ignored."
+msgstr ""
+
+#: src/LYUpload.c:163
+msgid "Unable to upload file."
+msgstr ""
+
+#: src/LYUpload.c:214
+msgid "Upload To:"
+msgstr ""
+
+#: src/LYUpload.c:215
+msgid "Upload options:"
+msgstr ""
+
+#: src/LYUtils.c:3075
+msgid "Unexpected access protocol for this URL scheme."
+msgstr ""
+
+#: src/LYUtils.c:3915
+msgid "Too many tempfiles"
+msgstr ""
+
+#: src/LYUtils.c:4217
+#, fuzzy
+msgid "unknown restriction"
+msgstr "neznano polje ali povezava"
+
+#: src/LYUtils.c:4248
+msgid "No restrictions set.\n"
+msgstr ""
+
+#: src/LYUtils.c:4251
+msgid "Restrictions set:\n"
+msgstr "Opis:\n"
+
+#: src/LYUtils.c:5601
+msgid "Ignoring invalid HOME"
+msgstr ""
+
+#: src/LYrcFile.c:20
+msgid "Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n"
+msgstr ""
+
+#: src/LYrcFile.c:242
+msgid ""
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
+msgstr ""
+
+#: src/LYrcFile.c:249
+msgid ""
+"bookmark_file specifies the name and location of the default bookmark\n"
+"file into which the user can paste links for easy access at a later\n"
+"date.\n"
+msgstr ""
+
+#: src/LYrcFile.c:254
+msgid ""
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
+msgstr ""
+
+#: src/LYrcFile.c:259
+msgid ""
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
+msgstr ""
+
+#: src/LYrcFile.c:266
+msgid ""
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
+msgstr ""
+
+#: src/LYrcFile.c:274
+msgid ""
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
+msgstr ""
+"cookie_file doloèa datoteko, v kateri naj se hranijo obstojni pi¹koti.\n"
+"Privzeta je ~/.lynx_cookies.\n"
+
+#: src/LYrcFile.c:279
+msgid ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
+msgstr ""
+
+#: src/LYrcFile.c:292
+msgid ""
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
+msgstr ""
+
+#: src/LYrcFile.c:300
+msgid ""
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
+msgstr ""
+
+#: src/LYrcFile.c:306
+msgid ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+msgstr ""
+
+#: src/LYrcFile.c:312
+msgid ""
+"The file_sorting_method specifies which value to sort on when viewing\n"
+"file lists such as FTP directories. The options are:\n"
+" BY_FILENAME -- sorts on the name of the file\n"
+" BY_TYPE -- sorts on the type of the file\n"
+" BY_SIZE -- sorts on the size of the file\n"
+" BY_DATE -- sorts on the date of the file\n"
+msgstr ""
+
+#: src/LYrcFile.c:324
+msgid ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+msgstr ""
+
+#: src/LYrcFile.c:339
+msgid ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+msgstr ""
+
+#: src/LYrcFile.c:345
+msgid ""
+"personal_mail_address specifies your personal mail address. The\n"
+"address will be sent during HTTP file transfers for authorization and\n"
+"logging purposes, and for mailed comments.\n"
+"If you do not want this information given out, set the NO_FROM_HEADER\n"
+"to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
+"could leave this field blank, but then you won't have it included in\n"
+"your mailed comments.\n"
+msgstr ""
+
+#: src/LYrcFile.c:354
+msgid ""
+"preferred_charset specifies the character set in MIME notation (e.g.,\n"
+"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
+"to http servers using an Accept-Charset header. The value should NOT\n"
+"include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
+"by default. May be a comma-separated list.\n"
+"If a file in that character set is available, the server will send it.\n"
+"If no Accept-Charset header is present, the default is that any\n"
+"character set is acceptable. If an Accept-Charset header is present,\n"
+"and if the server cannot send a response which is acceptable\n"
+"according to the Accept-Charset header, then the server SHOULD send\n"
+"an error response, though the sending of an unacceptable response\n"
+"is also allowed.\n"
+msgstr ""
+
+#: src/LYrcFile.c:368
+msgid ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+msgstr ""
+
+#: src/LYrcFile.c:377
+msgid ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Èe je vrednost all_execution_links nastavljena na \"on\", se bodo\n"
+"izvedle vse lokalne povezave, èe bodo izbrane.\n"
+"\n"
+"POZOR - To je potencialno ZELO nevarno. Ker lahko pregledujete\n"
+" informacije iz neznanih in nezaupnih virov, je mogoèe, da so\n"
+" napisane tudi povezave do trojanskih konjev. Trojanski konji\n"
+" vam lahko pobri¹ejo datoteke ali ogrozijo varnost. To naj bi\n"
+" bilo nastavljeno na \"on\" le, èe pregledujete zaupen vir\n"
+" informacij.\n"
+
+#: src/LYrcFile.c:388
+msgid ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Èe je vrednost run_execution_links_on_local_files nastavljena na \"on\",\n"
+"e bodo izvedle vse lokalne povezave, ki so na¹tete v datotekah LOCAL,\n"
+"èe bodo izbrane. To se razlikuje od run_all_execution_links v tem, da\n"
+"bodo imele dovoljenje za izvajanje povezav le datoteke na lokalnem\n"
+"sistemu.\n"
+"\n"
+"POZOR - To je potencialno nevarno. Ker lahko pregledujete informacije\n"
+" iz neznanih in nezaupnih virov, je mogoèe, da so napisane tudi\n"
+" povezave do trojanskih konjev. Trojanski konji vam lahko\n"
+" pobri¹ejo datoteke ali ogrozijo varnost. To naj bi bilo\n"
+" nastavljeno na \"on\" le, èe pregledujete zaupen vir informacij.\n"
+
+#: src/LYrcFile.c:403
+msgid ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+msgstr ""
+
+#: src/LYrcFile.c:413
+msgid ""
+"show_color specifies how to set the color mode at startup. A value of\n"
+"\"never\" will force color mode off (treat the terminal as monochrome)\n"
+"at startup even if the terminal appears to be color capable. A value of\n"
+"\"always\" will force color mode on even if the terminal appears to be\n"
+"monochrome, if this is supported by the library used to build lynx.\n"
+"A value of \"default\" will yield the behavior of assuming\n"
+"a monochrome terminal unless color capability is inferred at startup\n"
+"based on the terminal type, or the -color command line switch is used, or\n"
+"the COLORTERM environment variable is set. The default behavior always is\n"
+"used in anonymous accounts or if the \"option_save\" restriction is set.\n"
+"The effect of the saved value can be overridden via\n"
+"the -color and -nocolor command line switches.\n"
+"The mode set at startup can be changed via the \"show color\" option in\n"
+"the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
+"\"off\" \"show color\" settings will be treated as \"default\".\n"
+msgstr ""
+
+#: src/LYrcFile.c:430
+msgid ""
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
+msgstr ""
+
+#: src/LYrcFile.c:441
+msgid ""
+"show_dotfiles specifies that the directory listing should include\n"
+"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
+"honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
+"restricted via a command line switch. If display of hidden files\n"
+"is disabled, creation of such files via Lynx also is disabled.\n"
+msgstr ""
+
+#: src/LYrcFile.c:452
+msgid ""
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
+msgstr ""
+
+#: src/LYrcFile.c:464
+msgid ""
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
+msgstr ""
+
+#: src/LYrcFile.c:472
+msgid ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+msgstr ""
+
+#: src/LYrcFile.c:477
+msgid ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+msgstr ""
+
+#: src/LYrcFile.c:485
+msgid ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+msgstr ""
+
+#: src/LYrcFile.c:693
+msgid ""
+"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
+"your keypad when the numlock is on will act as arrow keys:\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"and the corresponding keyboard numbers will act as arrow keys,\n"
+"regardless of whether numlock is on.\n"
+msgstr ""
+
+#: src/LYrcFile.c:702
+msgid ""
+"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
+"appear next to each link and numbers are used to select links.\n"
+msgstr ""
+
+#: src/LYrcFile.c:706
+msgid ""
+"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
+"numbers will appear next to each link and visible form input field.\n"
+"Numbers are used to select links, or to move the \"current link\" to a\n"
+"form input field or button. In addition, options in popup menus are\n"
+"indexed so that the user may type an option number to select an option in\n"
+"a popup menu, even if the option isn't visible on the screen. Reference\n"
+"lists and output from the list command also enumerate form inputs.\n"
+msgstr ""
+
+#: src/LYrcFile.c:715
+msgid ""
+"NOTE: Some fixed format documents may look disfigured when\n"
+"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
+"enabled.\n"
+msgstr ""
+
+#: src/LYrcFile.c:748
+msgid ""
+"Lynx User Defaults File\n"
+"\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
msgstr ""
diff --git a/gnu/usr.bin/lynx/po/sv.po b/gnu/usr.bin/lynx/po/sv.po
index 413ecd3f631..ce1d86f27f3 100644
--- a/gnu/usr.bin/lynx/po/sv.po
+++ b/gnu/usr.bin/lynx/po/sv.po
@@ -1,11 +1,5524 @@
+# Swedish translation for Lynx
+# Copyright © 2000, 2001 Free Software Foundation, Inc.
+# Peter Karlsson <peter@softwolves.pp.se>, 2000-2001.
+#
msgid ""
msgstr ""
-"Date: 1998-08-22 16:12:20-0400\n"
-"From: Webmaster Jim <jspath@bcpl.net>\n"
-"Content-Type: text/plain; charset=\n"
-"Xgettext-Options: --default-domain=po/de\n"
-"Files: src/LYMain.c\n"
+"Project-Id-Version: lynx 2.8.4.pre2\n"
+"POT-Creation-Date: 2001-06-01 18:55-0400\n"
+"PO-Revision-Date: 2001-06-25 21:00+0200\n"
+"Last-Translator: Peter Karlsson <peter@softwolves.pp.se>\n"
+"Language-Team: Swedish <sv@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
-#: src/LYMain.c:2502
-msgid "%s Version %s %s"
+#. ******************************************************************
+#. * The following definitions are for status line prompts, messages, or
+#. * warnings issued by Lynx during program execution. You can modify
+#. * them to make them more appropriate for your site. We recommend that
+#. * you extend these definitions to other languages using the gettext
+#. * library. There are also scattered uses of 'gettext()' throughout the
+#. * Lynx source, covering all but those messages which (a) are used for
+#. * debugging (CTRACE) or (b) are constants used in interaction with
+#. * other programs.
+#. *
+#. * Links to collections of alternate definitions, developed by the Lynx
+#. * User Community, are maintained in Lynx links:
+#. *
+#. * http://www.trill-home.com/lynx.html
+#. *
+#. * See ABOUT-NLS and po/readme for details and location of contributed
+#. * translations. When no translation is available, the English default is
+#. * used.
+#.
+#: LYMessages.c:29
+#, c-format
+msgid "Alert!: %s"
+msgstr "Varning!: %s"
+
+#: LYMessages.c:30
+msgid "Welcome"
+msgstr "Välkommen"
+
+#: LYMessages.c:31 LYMessages.c:32
+msgid "Are you sure you want to quit?"
+msgstr "Är du säker att du vill avsluta?"
+
+#: LYMessages.c:34 LYMessages.c:35
+msgid "Really exit from Lynx?"
+msgstr "Verkligen avsluta Lynx?"
+
+#: LYMessages.c:37
+msgid "Connection interrupted."
+msgstr "Anslutningen avbröts."
+
+#: LYMessages.c:38
+msgid "Data transfer interrupted."
+msgstr "Dataöverföringen avbröts."
+
+#: LYMessages.c:39
+msgid "Cancelled!!!"
+msgstr "Avbruten!!!"
+
+#: LYMessages.c:40
+msgid "Cancelling!"
+msgstr "Avbryter!"
+
+#: LYMessages.c:41
+msgid "Excellent!!!"
+msgstr "Underbart!!!"
+
+#: LYMessages.c:42
+msgid "OK"
+msgstr "OK"
+
+#: LYMessages.c:43
+msgid "Done!"
+msgstr "Klar!"
+
+#: LYMessages.c:44
+msgid "Bad request!"
+msgstr "Felaktig förfrågan!"
+
+#: LYMessages.c:45
+msgid "previous"
+msgstr "föregående"
+
+#: LYMessages.c:46
+msgid "next screen"
+msgstr "nästa skärm"
+
+#: LYMessages.c:47
+msgid "HELP!"
+msgstr "HJÄLP!"
+
+#: LYMessages.c:48
+msgid ", help on "
+msgstr ", hjälp om "
+
+#. #define HELP
+#: LYMessages.c:50
+msgid "Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back."
+msgstr "Kommandon: Piltangenter flyttar, \"?\" ger hjälp, \"q\" avslutar, \"<-\" återgår."
+
+#. #define MOREHELP
+#: LYMessages.c:52
+msgid "-- press space for more, use arrow keys to move, '?' for help, 'q' to quit."
+msgstr "-- tryck blanksteg för mer, piltangenter flyttar, \"?\" ger hjälp, \"q\" avslutar."
+
+#: LYMessages.c:53
+msgid "-- press space for next page --"
+msgstr "-- tryck blanksteg för nästa sida --"
+
+#: LYMessages.c:54
+msgid "URL too long"
+msgstr "Adressen för lång"
+
+#. Inactive input fields, messages used with -tna option - kw
+#. #define FORM_LINK_TEXT_MESSAGE_INA
+#: LYMessages.c:60
+msgid "(Text entry field) Inactive. Press <return> to activate."
+msgstr "(Textinmatningsfält) Inaktivt. Tryck <Enter> för att aktivera."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA
+#: LYMessages.c:62
+msgid "(Textarea) Inactive. Press <return> to activate."
+msgstr "(Textfält) Inaktivt. Tryck <Enter> för att aktivera."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_INA_E
+#: LYMessages.c:64
+#, c-format
+msgid "(Textarea) Inactive. Press <return> to activate (%s for editor)."
+msgstr "(Textfält) Inaktivt. Tryck <Enter> för att aktivera (%s för redigeringsprogram)."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_INA
+#: LYMessages.c:66
+msgid "(Form field) Inactive. Use <return> to edit."
+msgstr "(Formulärfält) Inaktivt. Tryck <Enter> för att redigera."
+
+#. #define FORM_TEXT_SUBMIT_MESSAGE_INA_X
+#: LYMessages.c:68
+#, c-format
+msgid "(Form field) Inactive. Use <return> to edit (%s to submit with no cache)."
+msgstr "(Formulärfält) Inaktivt. Tryck <Enter> för att redigera (%s skickar utan cache)."
+
+#. #define FORM_TEXT_RESUBMIT_MESSAGE_INA
+#: LYMessages.c:70
+msgid "(Form field) Inactive. Press <return> to edit, press <return> twice to submit."
+msgstr "(Formulärfält) Inaktivt. Redigera med <Enter>, två gånger för att skicka."
+
+#. #define FORM_TEXT_SUBMIT_MAILTO_MSG_INA
+#: LYMessages.c:72
+msgid "(mailto form field) Inactive. Press <return> to change."
+msgstr "(e-postformulärfält) Inaktivt. Tryck <Enter> för att ändra."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE_INA
+#: LYMessages.c:74
+msgid "(Password entry field) Inactive. Press <return> to activate."
+msgstr "(Lösenordsinmatningsfält) Inaktivt. Tryck <Enter> för att aktivera."
+
+#. #define FORM_LINK_FILE_UNM_MSG
+#: LYMessages.c:77
+msgid "UNMODIFIABLE file entry field. Use UP or DOWN arrows or tab to move off."
+msgstr "SKRIVSKYDDAT filinmatningsfält. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_FILE_MESSAGE
+#: LYMessages.c:79
+msgid "(File entry field) Enter filename. Use UP or DOWN arrows or tab to move off."
+msgstr "(Filinmatningsfält) Ange filnamn. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_TEXT_MESSAGE
+#: LYMessages.c:81
+msgid "(Text entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Textinmatningsfält) Ange text. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE
+#: LYMessages.c:83
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off."
+msgstr "(Textfält) Ange text. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_TEXTAREA_MESSAGE_E
+#: LYMessages.c:85
+#, c-format
+msgid "(Textarea) Enter text. Use UP/DOWN arrows or TAB to move off (%s for editor)."
+msgstr "(Textfält) Ange text. UPP-/NED-pil eller tabb lämnar (%s redigerar med program)."
+
+#. #define FORM_LINK_TEXT_UNM_MSG
+#: LYMessages.c:87
+msgid "UNMODIFIABLE form text field. Use UP or DOWN arrows or tab to move off."
+msgstr "SKRIVSKYDDAT formulärtextfält. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE
+#: LYMessages.c:89
+msgid "(Form field) Enter text. Use <return> to submit."
+msgstr "(Formulärfält) Ange text. Tryck <Enter> för att skicka."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MESSAGE_X
+#: LYMessages.c:91
+#, c-format
+msgid "(Form field) Enter text. Use <return> to submit (%s for no cache)."
+msgstr "(Formulärfält) Ange text. Tryck <Enter> för att skicka (%s förbigår cache)."
+
+#. #define FORM_LINK_TEXT_RESUBMIT_MESSAGE
+#: LYMessages.c:93
+msgid "(Form field) Enter text. Use <return> to submit, arrows or tab to move off."
+msgstr "(Formulärfält) Ange text. <Enter> skickar, pilar eller tabb lämnar."
+
+#. #define FORM_LINK_TEXT_SUBMIT_UNM_MSG
+#: LYMessages.c:95
+msgid "UNMODIFIABLE form field. Use UP or DOWN arrows or tab to move off."
+msgstr "SKRIVSKYDDAT formulärfält. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_MSG
+#: LYMessages.c:97
+msgid "(mailto form field) Enter text. Use <return> to submit, arrows to move off."
+msgstr "(e-postformulärfält) Ange text. <Enter> skickar, pilar lämnar."
+
+#. #define FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:99
+msgid "(mailto form field) Mail is disallowed so you cannot submit."
+msgstr "(e-postformulärfält) E-post tillåts ej, så du kan inte skicka."
+
+#. #define FORM_LINK_PASSWORD_MESSAGE
+#: LYMessages.c:101
+msgid "(Password entry field) Enter text. Use UP or DOWN arrows or tab to move off."
+msgstr "(Lösenordsfält) Ange text. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_PASSWORD_UNM_MSG
+#: LYMessages.c:103
+msgid "UNMODIFIABLE form password. Use UP or DOWN arrows or tab to move off."
+msgstr "SKRIVSKYDDAT formulärlösenord. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_CHECKBOX_MESSAGE
+#: LYMessages.c:105
+msgid "(Checkbox Field) Use right-arrow or <return> to toggle."
+msgstr "(Kryssruta) Använd högerpil eller <Enter> för att ställa om."
+
+#. #define FORM_LINK_CHECKBOX_UNM_MSG
+#: LYMessages.c:107
+msgid "UNMODIFIABLE form checkbox. Use UP or DOWN arrows or tab to move off."
+msgstr "SKRIVSKYDDAD kryssruta. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_RADIO_MESSAGE
+#: LYMessages.c:109
+msgid "(Radio Button) Use right-arrow or <return> to toggle."
+msgstr "(Radioknapp) Använd högerpil eller <Enter> för att ställa om."
+
+#. #define FORM_LINK_RADIO_UNM_MSG
+#: LYMessages.c:111
+msgid "UNMODIFIABLE form radio button. Use UP or DOWN arrows or tab to move off."
+msgstr "SKRIVSKYDDAD radioknapp. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_SUBMIT_PREFIX
+#: LYMessages.c:113
+msgid "Submit ('x' for no cache) to "
+msgstr "Skicka (\"x\" förbigår cache) till "
+
+#. #define FORM_LINK_RESUBMIT_PREFIX
+#: LYMessages.c:115
+msgid "Submit to "
+msgstr "Skicka till "
+
+#. #define FORM_LINK_SUBMIT_MESSAGE
+#: LYMessages.c:117
+msgid "(Form submit button) Use right-arrow or <return> to submit ('x' for no cache)."
+msgstr "(Sändknapp) Använd högerpil eller <Enter> för att skicka (\"x\" förbigår cache)."
+
+#. #define FORM_LINK_RESUBMIT_MESSAGE
+#: LYMessages.c:119
+msgid "(Form submit button) Use right-arrow or <return> to submit."
+msgstr "(Sändknapp) Använd högerpil eller <Enter> för att skicka."
+
+#. #define FORM_LINK_SUBMIT_DIS_MSG
+#: LYMessages.c:121
+msgid "DISABLED form submit button. Use UP or DOWN arrows or tab to move off."
+msgstr "INAKTIV sändknapp. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_PREFIX
+#: LYMessages.c:123
+msgid "Submit mailto form to "
+msgstr "Skicka e-postformulär till "
+
+#. #define FORM_LINK_SUBMIT_MAILTO_MSG
+#: LYMessages.c:125
+msgid "(mailto form submit button) Use right-arrow or <return> to submit."
+msgstr "(sändknapp i e-postformulär) Använd högerpil eller <Enter> för att skicka."
+
+#. #define FORM_LINK_SUBMIT_MAILTO_DIS_MSG
+#: LYMessages.c:127
+msgid "(mailto form submit button) Mail is disallowed so you cannot submit."
+msgstr "(sändknapp i e-postformulär) E-post tillåts ej, så du kan inte skicka."
+
+#. #define FORM_LINK_RESET_MESSAGE
+#: LYMessages.c:129
+msgid "(Form reset button) Use right-arrow or <return> to reset form to defaults."
+msgstr "(Nollställningsknapp) Använd högerpil eller <Enter> för att återställa förval."
+
+#. #define FORM_LINK_RESET_DIS_MSG
+#: LYMessages.c:131
+msgid "DISABLED form reset button. Use UP or DOWN arrows or tab to move off."
+msgstr "INAKTIV nollställningsknapp. Använd UPP-/NED-pil eller tabb för att lämna."
+
+#. #define FORM_LINK_OPTION_LIST_MESSAGE
+#: LYMessages.c:133
+msgid "(Option list) Hit return and use arrow keys and return to select option."
+msgstr "(Alternativlista) Tryck Enter och använd pilar och Enter för att välja."
+
+#. #define CHOICE_LIST_MESSAGE
+#: LYMessages.c:135
+msgid "(Choice list) Hit return and use arrow keys and return to select option."
+msgstr "(Vallista) Tryck Enter och använd piltangenter och Enter för att välja."
+
+#. #define FORM_LINK_OPTION_LIST_UNM_MSG
+#: LYMessages.c:137
+msgid "UNMODIFIABLE option list. Use return or arrow keys to review or leave."
+msgstr "SKRIVSKYDDAD alternativlista. Använd Enter och pilar för att visa eller lämna."
+
+#. #define CHOICE_LIST_UNM_MSG
+#: LYMessages.c:139
+msgid "UNMODIFIABLE choice list. Use return or arrow keys to review or leave."
+msgstr "SKRIVSKYDDAD vallista. Använd Enter och piltangenter för att visa eller lämna."
+
+#: LYMessages.c:140
+msgid "Submitting form..."
+msgstr "Skickar formulär..."
+
+#: LYMessages.c:141
+msgid "Resetting form..."
+msgstr "Nollställer formulär..."
+
+#. #define RELOADING_FORM
+#: LYMessages.c:143
+msgid "Reloading document. Any form entries will be lost!"
+msgstr "Hämtar om dokument. Eventuellt formulärinnehåll förkastas!"
+
+#: LYMessages.c:144
+#, c-format
+msgid "Warning: Cannot transcode form data to charset %s!"
+msgstr "Varning: Kan inte koda formulärdata i teckenuppsättningen %s!"
+
+#. #define NORMAL_LINK_MESSAGE
+#: LYMessages.c:147
+msgid "(NORMAL LINK) Use right-arrow or <return> to activate."
+msgstr "(VANLIG LÄNK) Använd högerpil eller <Enter> för att aktivera."
+
+#: LYMessages.c:148
+msgid "The resource requested is not available at this time."
+msgstr "Resursen du begärt är inte tillgänglig just nu."
+
+#: LYMessages.c:149
+msgid "Enter Lynx keystroke command: "
+msgstr "Ange Lynxtangentkommando: "
+
+#: LYMessages.c:150
+msgid "Looking up "
+msgstr "Slår upp "
+
+#: LYMessages.c:151
+#, c-format
+msgid "Getting %s"
+msgstr "Hämtar %s"
+
+#: LYMessages.c:152
+#, c-format
+msgid "Skipping %s"
+msgstr "Hoppas över %s"
+
+#: LYMessages.c:153
+#, c-format
+msgid "Using %s"
+msgstr "Använder %s"
+
+#: LYMessages.c:154
+#, c-format
+msgid "Illegal URL: %s"
+msgstr "Felaktig adress: %s"
+
+#: LYMessages.c:155
+#, c-format
+msgid "Badly formed address %s"
+msgstr "Trasig adress %s"
+
+#: LYMessages.c:156
+#, c-format
+msgid "URL: %s"
+msgstr "Adress: %s"
+
+#: LYMessages.c:157
+msgid "Unable to access WWW file!!!"
+msgstr "Kan inte komma åt webbfil!!!"
+
+#: LYMessages.c:158
+#, c-format
+msgid "This is a searchable index. Use %s to search."
+msgstr "Detta är ett sökbart index. Använd %s för att söka."
+
+#. #define WWW_INDEX_MORE_MESSAGE
+#: LYMessages.c:160
+#, c-format
+msgid "--More-- This is a searchable index. Use %s to search."
+msgstr "--Mer-- Detta är ett sökbart index. Använd %s för att söka."
+
+#: LYMessages.c:161
+msgid "You have entered an invalid link number."
+msgstr "Du har angett ett felaktigt länknummer."
+
+#. #define SOURCE_HELP
+#: LYMessages.c:163
+msgid "Currently viewing document source. Press '\\' to return to rendered version."
+msgstr "Visar dokumentkällkod. Tryck \"\\\" för att återgå till tolkad version."
+
+#. #define NOVICE_LINE_ONE
+#: LYMessages.c:165
+msgid " Arrow keys: Up and Down to move. Right to follow a link; Left to go back. \n"
+msgstr " Piltangenter: Upp och ned flyttar. Höger följer länk; vänster återgår. \n"
+
+#. #define NOVICE_LINE_TWO
+#: LYMessages.c:167
+msgid " H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list \n"
+msgstr " H=Hjälp O=Val P=Utskrift G=Gå M=Huvudskärm Q=Avsluta /=sök Del=Historik \n"
+
+#. #define NOVICE_LINE_TWO_A
+#: LYMessages.c:169
+msgid " O)ther cmds H)elp K)eymap G)oto P)rint M)ain screen o)ptions Q)uit \n"
+msgstr " O=Fler H=Hjälp K=Tangenter G=Gå P=Utskrift M=Huvudskärm O=Val Q=Avsluta \n"
+
+#. #define NOVICE_LINE_TWO_B
+#: LYMessages.c:171
+msgid " O)ther cmds B)ack E)dit D)ownload ^R)eload ^W)ipe screen search doc: / \n"
+msgstr " O=Fler B=Bakåt E=Redigera D=Hämta ^R=Hämta om ^W=Rita om sök dokument: / \n"
+
+#. #define NOVICE_LINE_TWO_C
+#: LYMessages.c:173
+msgid "O)ther cmds C)omment History: <backspace> Bookmarks: V)iew, A)dd, R)emove \n"
+msgstr "O=Fler C=Kommentera Historik: backsteg Bokmärken: V=Visa A=Nytt R=Ta bort \n"
+
+#. #define FORM_NOVICELINE_ONE
+#: LYMessages.c:175
+msgid " Enter text into the field by typing on the keyboard "
+msgstr " Ange text i fältet genom att skriva på tangentbordet "
+
+#. #define FORM_NOVICELINE_TWO
+#: LYMessages.c:177
+msgid " Ctrl-U to delete all text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U tömmer inmatningsfältet, [Backsteg] tar bort en bokstav "
+
+#. #define FORM_NOVICELINE_TWO_DELBL
+#: LYMessages.c:179
+msgid " Ctrl-U to delete text in field, [Backspace] to delete a character "
+msgstr " Ctrl-U tömmer inmatningsfältet, [Backsteg] tar bort en bokstav "
+
+#. #define FORM_NOVICELINE_TWO_VAR
+#: LYMessages.c:181
+#, c-format
+msgid " %s to delete all text in field, [Backspace] to delete a character "
+msgstr " %s tömmer inmatningsfältet, [Backsteg] tar bort en bokstav "
+
+#. #define FORM_NOVICELINE_TWO_DELBL_VAR
+#: LYMessages.c:183
+#, c-format
+msgid " %s to delete text in field, [Backspace] to delete a character "
+msgstr " %s tömmer inmatningsfältet, [Backsteg] tar bort en bokstav "
+
+#. mailto
+#: LYMessages.c:186
+msgid "Malformed mailto form submission! Cancelled!"
+msgstr "Trasig \"mailto\" i formulär! Avbryter!"
+
+#: LYMessages.c:187
+msgid "Warning! Control codes in mail address replaced by ?"
+msgstr "Varning! Kontrollkoder i e-postadress ersatta med frågetecken"
+
+#: LYMessages.c:188
+msgid "Mail disallowed! Cannot submit."
+msgstr "E-post tillåts ej! Kan inte skicka."
+
+#: LYMessages.c:189
+msgid "Mailto form submission failed!"
+msgstr "Misslyckades att skicka e-postformulär!"
+
+#: LYMessages.c:190
+msgid "Mailto form submission Cancelled!!!"
+msgstr "Insändning av e-postformulär avbruten!!!"
+
+#: LYMessages.c:191
+msgid "Sending form content..."
+msgstr "Skickar formulärdata..."
+
+#: LYMessages.c:192
+msgid "No email address is present in mailto URL!"
+msgstr "Ingen e-postadress i \"mailto\"-fältet!"
+
+#. #define MAILTO_URL_TEMPOPEN_FAILED
+#: LYMessages.c:194
+msgid "Unable to open temporary file for mailto URL!"
+msgstr "Kan inte öppna temporärfil för \"mailto\"-adress!"
+
+#. #define INC_ORIG_MSG_PROMPT
+#: LYMessages.c:196
+msgid "Do you wish to include the original message?"
+msgstr "Vill du inkludera originalmeddelandet?"
+
+#. #define INC_PREPARSED_MSG_PROMPT
+#: LYMessages.c:198
+msgid "Do you wish to include the preparsed source?"
+msgstr "Vill du inkludera den färdigtolkade källkoden?"
+
+#. #define SPAWNING_EDITOR_FOR_MAIL
+#: LYMessages.c:200
+msgid "Spawning your selected editor to edit mail message"
+msgstr "Startar ditt valda textredigeringsprogram för att skriva brevet"
+
+#. #define ERROR_SPAWNING_EDITOR
+#: LYMessages.c:202
+msgid "Error spawning editor, check your editor definition in the options menu"
+msgstr "Fel vid start av textredigeringsprogram, se inställningar i valmenyn"
+
+#: LYMessages.c:203
+msgid "Send this comment?"
+msgstr "Skicka denna kommentar?"
+
+#: LYMessages.c:204
+msgid "Send this message?"
+msgstr "Skicka detta meddelande?"
+
+#: LYMessages.c:205
+msgid "Sending your message..."
+msgstr "Skickar ditt meddelande..."
+
+#: LYMessages.c:206
+msgid "Sending your comment:"
+msgstr "Skickar din kommentar:"
+
+#. textarea
+#: LYMessages.c:209
+msgid "Not in a TEXTAREA; cannot use external editor."
+msgstr "Inte i en TEXTAREA; kan inte använda externt redigeringsprogram."
+
+#: LYMessages.c:210
+msgid "Not in a TEXTAREA; cannot use command."
+msgstr "Inte i en TEXTAREA; kan inte använda kommando."
+
+#: LYMessages.c:213
+msgid "file: ACTIONs are disallowed!"
+msgstr "file:-formulärmål tillåts inte!"
+
+#. #define FILE_SERVED_LINKS_DISALLOWED
+#: LYMessages.c:215
+msgid "file: URLs via served links are disallowed!"
+msgstr "file:-adresser i givna adresser tillåts ej!"
+
+#: LYMessages.c:216
+msgid "Access to local files denied."
+msgstr "Åtkomst till lokala filer nekas."
+
+#: LYMessages.c:217
+msgid "file: URLs via bookmarks are disallowed!"
+msgstr "file:-adresser i bokmärken tillåts ej!"
+
+#. #define SPECIAL_VIA_EXTERNAL_DISALLOWED
+#: LYMessages.c:219
+msgid "This special URL is not allowed in external documents!"
+msgstr "Denna specialadress tillåts ej i externa dokument!"
+
+#: LYMessages.c:220
+msgid "Press <return> to return to Lynx."
+msgstr "Tryck <Enter> för att återgå till Lynx."
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:223
+msgid "Spawning DCL subprocess. Use 'logout' to return to Lynx.\n"
+msgstr "Startar DCL-underprocess. Använd \"logout\" för att återgå till Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:227
+msgid "Type EXIT to return to Lynx.\n"
+msgstr "Skriv EXIT för att återgå till Lynx.\n"
+
+#. #define SPAWNING_MSG
+#: LYMessages.c:230
+msgid "Spawning your default shell. Use 'exit' to return to Lynx.\n"
+msgstr "Startar ditt valda skal. Skriv \"exit\" för att återgå till Lynx.\n"
+
+#: LYMessages.c:233
+msgid "Spawning is currently disabled."
+msgstr "Start av externa program tillåts ej just nu."
+
+#: LYMessages.c:234
+msgid "The 'd'ownload command is currently disabled."
+msgstr "Hämtningskommandot (\"d\") tillåts ej just nu."
+
+#: LYMessages.c:235
+msgid "You cannot download an input field."
+msgstr "Du kan inte hämta ett indatafält."
+
+#: LYMessages.c:236
+msgid "Form has a mailto action! Cannot download."
+msgstr "Detta är ett e-postformulär! Kan inte hämta."
+
+#: LYMessages.c:237
+msgid "You cannot download a mailto: link."
+msgstr "Du kan inte hämta en mailto:-länk."
+
+#: LYMessages.c:238
+msgid "You cannot download cookies."
+msgstr "Du kan inte hämta kakor."
+
+#: LYMessages.c:239
+msgid "You cannot download a printing option."
+msgstr "Du kan inte hämta ett utskriftsval."
+
+#: LYMessages.c:240
+msgid "You cannot download an upload option."
+msgstr "Du kan inte hämta ett sändningsalternativ."
+
+#: LYMessages.c:241
+msgid "You cannot download an permit option."
+msgstr "Du kan inte hämta en inställning."
+
+#: LYMessages.c:242
+msgid "This special URL cannot be downloaded!"
+msgstr "Denna specialadress kan inte hämtas!"
+
+#: LYMessages.c:243
+msgid "Nothing to download."
+msgstr "Inget att hämta."
+
+#: LYMessages.c:244
+msgid "Trace ON!"
+msgstr "Spårning AKTIV!"
+
+#: LYMessages.c:245
+msgid "Trace OFF!"
+msgstr "Spårning INAKTIV!"
+
+#. #define CLICKABLE_IMAGES_ON
+#: LYMessages.c:247
+msgid "Links will be included for all images! Reloading..."
+msgstr "Länkar skapas för alla bilder! Hämtar om..."
+
+#. #define CLICKABLE_IMAGES_OFF
+#: LYMessages.c:249
+msgid "Standard image handling restored! Reloading..."
+msgstr "Normal bildhantering återställd! Hämtar om..."
+
+#. #define PSEUDO_INLINE_ALTS_ON
+#: LYMessages.c:251
+msgid "Pseudo_ALTs will be inserted for inlines without ALT strings! Reloading..."
+msgstr "\"Pseudo-ALT\" sätts in för bilder som saknar ALT-strängar! Hämtar om..."
+
+#. #define PSEUDO_INLINE_ALTS_OFF
+#: LYMessages.c:253
+msgid "Inlines without an ALT string specified will be ignored! Reloading..."
+msgstr "Bilder utan ALT-strängar ignoreras! Hämtar om..."
+
+#: LYMessages.c:254
+msgid "Raw 8-bit or CJK mode toggled OFF! Reloading..."
+msgstr "Rått 8-bitars- eller CJK-läge AV! Hämtar om..."
+
+#: LYMessages.c:255
+msgid "Raw 8-bit or CJK mode toggled ON! Reloading..."
+msgstr "Rått 8-bitars- eller CJK-läge PÅ! Hämtar om..."
+
+#. #define HEAD_D_L_OR_CANCEL
+#: LYMessages.c:257
+msgid "Send HEAD request for D)ocument or L)ink, or C)ancel? (d,l,c): "
+msgstr "Sänd \"HEAD\" för D=dokument eller L=länk; C=Avbryt? (d,l,c): "
+
+#. #define HEAD_D_OR_CANCEL
+#: LYMessages.c:259
+msgid "Send HEAD request for D)ocument, or C)ancel? (d,c): "
+msgstr "Sänd \"HEAD\" för D=dokument; C=Avbryt? (d,c): "
+
+#: LYMessages.c:260
+msgid "Sorry, the document is not an http URL."
+msgstr "Tyvärr, dokumentet har inte en http-adress."
+
+#: LYMessages.c:261
+msgid "Sorry, the link is not an http URL."
+msgstr "Tyvärr, länken har inte en http-adress."
+
+#: LYMessages.c:262
+msgid "Sorry, the ACTION for this form is disabled."
+msgstr "Tyvärr, formulärmålet detta formulär är avstängt."
+
+#. #define FORM_ACTION_NOT_HTTP_URL
+#: LYMessages.c:264
+msgid "Sorry, the ACTION for this form is not an http URL."
+msgstr "Tyvärr, formulärmålet för detta formulär är inte en http-adress."
+
+#: LYMessages.c:265
+msgid "Not an http URL or form ACTION!"
+msgstr "Inte en http-adress eller formulärmål!"
+
+#: LYMessages.c:266
+msgid "This special URL cannot be a form ACTION!"
+msgstr "Denna speciella adress kan inte vara formulärmål!"
+
+#: LYMessages.c:267
+msgid "URL is not in starting realm!"
+msgstr "Adressen är inte i startmängden!"
+
+#: LYMessages.c:268
+msgid "News posting is disabled!"
+msgstr "Postning av artiklar deaktiverad!"
+
+#: LYMessages.c:269
+msgid "File management support is disabled!"
+msgstr "Filhanteringsstödet är deaktiverat!"
+
+#: LYMessages.c:270
+msgid "No jump file is currently available."
+msgstr "Ingen hoppfil finns just nu att tillgå."
+
+#: LYMessages.c:271
+msgid "Jump to (use '?' for list): "
+msgstr "Hoppa till (\"?\"=lista): "
+
+#: LYMessages.c:272
+msgid "Jumping to a shortcut URL is disallowed!"
+msgstr "Hopp till genvägsadress ej tillåtet!"
+
+#: LYMessages.c:273
+msgid "Random URL is disallowed! Use a shortcut."
+msgstr "Slumpmässig adress ej tillåten! Använd en genväg."
+
+#: LYMessages.c:274
+msgid "No random URLs have been used thus far."
+msgstr "Inga slumpmässiga adresser har ännu används."
+
+#: LYMessages.c:275
+msgid "Bookmark features are currently disabled."
+msgstr "Bomärkesfunktionerna är just nu deaktiverade."
+
+#: LYMessages.c:276
+msgid "Execution via bookmarks is disabled."
+msgstr "Programkörning via bokmärken är deaktiverat."
+
+#. #define BOOKMARK_FILE_NOT_DEFINED
+#: LYMessages.c:278
+#, c-format
+msgid "Bookmark file is not defined. Use %s to see options."
+msgstr "Bokmärkesfil ej definierad. Använd %s för att se alternativ."
+
+#. #define NO_TEMP_FOR_HOTLIST
+#: LYMessages.c:280
+msgid "Unable to open tempfile for X Mosaic hotlist conversion."
+msgstr "Kan inte öppna temporärfil för konvertering av X Mosaics bokmärken."
+
+#: LYMessages.c:281
+msgid "ERROR - unable to open bookmark file."
+msgstr "FEL - kan inte öppna bokmärkesfil."
+
+#. #define BOOKMARK_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:283
+msgid "Unable to open bookmark file for deletion of link."
+msgstr "Kan inte öppna bokmärkesfil för borttagning av länk."
+
+#. #define BOOKSCRA_OPEN_FAILED_FOR_DEL
+#: LYMessages.c:285
+msgid "Unable to open scratch file for deletion of link."
+msgstr "Kan inte öppna skräpfil för borttagning av länk."
+
+#: LYMessages.c:287
+msgid "Error renaming scratch file."
+msgstr "Fel vid namnändring av skräpfil."
+
+#: LYMessages.c:289
+msgid "Error renaming temporary file."
+msgstr "Fel vid namnändring av temporärfil."
+
+#. #define BOOKTEMP_COPY_FAIL
+#: LYMessages.c:291
+msgid "Unable to copy temporary file for deletion of link."
+msgstr "Kan inte kopiera temporärfil för borttagning av länk."
+
+#. #define BOOKTEMP_REOPEN_FAIL_FOR_DEL
+#: LYMessages.c:293
+msgid "Unable to reopen temporary file for deletion of link."
+msgstr "Kan inte återöppna temporärfil för borttagning av länk."
+
+#. #define BOOKMARK_LINK_NOT_ONE_LINE
+#: LYMessages.c:296
+msgid "Link is not by itself all on one line in bookmark file."
+msgstr "Länk är inte själv helt på en rad i bokmärkesfilen."
+
+#: LYMessages.c:297
+msgid "Bookmark deletion failed."
+msgstr "Borttagning av bokmärke misslyckades."
+
+#. #define BOOKMARKS_NOT_TRAVERSED
+#: LYMessages.c:299
+msgid "Bookmark files cannot be traversed (only http URLs)."
+msgstr "Bokmärkesfiler kan inte traverseras (endast http-adresser)."
+
+#. #define BOOKMARKS_NOT_OPEN
+#: LYMessages.c:301
+msgid "Unable to open bookmark file, use 'a' to save a link first"
+msgstr "Kan inte öppna bokmärkesfil, använd 'a' för att spara en länk först"
+
+#: LYMessages.c:302
+msgid "There are no links in this bookmark file!"
+msgstr "Det finns inga länkar i denna bokmärkesfil!"
+
+#. #define BOOK_D_L_OR_CANCEL
+#: LYMessages.c:304
+msgid "Save D)ocument or L)ink to bookmark file or C)ancel? (d,l,c): "
+msgstr "Spara D)okument eller L)änk till bokmärkesfil? C=Avbryt (d,l,c): "
+
+#: LYMessages.c:305
+msgid "Save D)ocument to bookmark file or C)ancel? (d,c): "
+msgstr "Spara D)okument till bokmärkesfil? C=Avbryt (d,c): "
+
+#: LYMessages.c:306
+msgid "Save L)ink to bookmark file or C)ancel? (l,c): "
+msgstr "Spara L)änk till bokmärkesfil? C=Avbryt (l,c): "
+
+#. #define NOBOOK_POST_FORM
+#: LYMessages.c:308
+msgid "Documents from forms with POST content cannot be saved as bookmarks."
+msgstr "Dokument från \"POST\"-formulär kan inte lagras som bokmärken."
+
+#: LYMessages.c:309
+msgid "Cannot save form fields/links"
+msgstr "Kan inte spara formulärfält/länkar"
+
+#. #define NOBOOK_HSML
+#: LYMessages.c:311
+msgid "History, showinfo, menu and list files cannot be saved as bookmarks."
+msgstr "Historik, \"showinfo\", menyer och listfiler kan inte lagras som bokmärken."
+
+#. #define CONFIRM_BOOKMARK_DELETE
+#: LYMessages.c:313
+msgid "Do you really want to delete this link from your bookmark file?"
+msgstr "Vill du verkligen ta bort denna länk från din bokmärkesfil?"
+
+#: LYMessages.c:314
+msgid "Malformed address."
+msgstr "Trasig adress."
+
+#. #define HISTORICAL_ON_MINIMAL_OFF
+#: LYMessages.c:316
+msgid "Historical comment parsing ON (Minimal is overridden)!"
+msgstr "Historisk tolkning av kommentarer PÅ (minimal undertryckt)!"
+
+#. #define HISTORICAL_OFF_MINIMAL_ON
+#: LYMessages.c:318
+msgid "Historical comment parsing OFF (Minimal is in effect)!"
+msgstr "Historisk tolkning av kommentarer AV (minmal aktiv)!"
+
+#. #define HISTORICAL_ON_VALID_OFF
+#: LYMessages.c:320
+msgid "Historical comment parsing ON (Valid is overridden)!"
+msgstr "Historisk tolkning av kommentarer PÅ (korrekt undertryckt)!"
+
+#. #define HISTORICAL_OFF_VALID_ON
+#: LYMessages.c:322
+msgid "Historical comment parsing OFF (Valid is in effect)!"
+msgstr "Historisk tolkning av kommentarer AV (korrekt aktiv)!"
+
+#. #define MINIMAL_ON_IN_EFFECT
+#: LYMessages.c:324
+msgid "Minimal comment parsing ON (and in effect)!"
+msgstr "Minimal tolkning av kommentarer PÅ (och aktiv)!"
+
+#. #define MINIMAL_OFF_VALID_ON
+#: LYMessages.c:326
+msgid "Minimal comment parsing OFF (Valid is in effect)!"
+msgstr "Minimal tolkning av kommentarer AV (korrekt aktiv)!"
+
+#. #define MINIMAL_ON_BUT_HISTORICAL
+#: LYMessages.c:328
+msgid "Minimal comment parsing ON (but Historical is in effect)!"
+msgstr "Minimal tolkning av kommentarer PÅ (men historisk aktiv)!"
+
+#. #define MINIMAL_OFF_HISTORICAL_ON
+#: LYMessages.c:330
+msgid "Minimal comment parsing OFF (Historical is in effect)!"
+msgstr "Minimal tolkning av kommentarer AV (historisk aktiv)!"
+
+#: LYMessages.c:331
+msgid "Soft double-quote parsing ON!"
+msgstr "Mjuk citationsteckenstolkning PÅ!"
+
+#: LYMessages.c:332
+msgid "Soft double-quote parsing OFF!"
+msgstr "Mjuk citationsteckenstolkning AV!"
+
+#: LYMessages.c:333
+msgid "Now using TagSoup parsing of HTML."
+msgstr "Tolkar nu HTML enligt \"TagSoup\"-modellen."
+
+#: LYMessages.c:334
+msgid "Now using SortaSGML parsing of HTML!"
+msgstr "Tolkar nu HTML enligt \"SortaSGML\"-modellen."
+
+#: LYMessages.c:335
+msgid "You are already at the end of this document."
+msgstr "Du är redan i slutet av dokumentet."
+
+#: LYMessages.c:336
+msgid "You are already at the beginning of this document."
+msgstr "Du är redan i början av dokumentet."
+
+#: LYMessages.c:337
+#, c-format
+msgid "You are already at page %d of this document."
+msgstr "Du är redan på sida %d av dokumentet."
+
+#: LYMessages.c:338
+#, c-format
+msgid "Link number %d already is current."
+msgstr "Länk nummer %d är redan nuvarande."
+
+#: LYMessages.c:339
+msgid "You are already at the first document"
+msgstr "Du är redan i det första dokumentet."
+
+#: LYMessages.c:340
+msgid "There are no links above this line of the document."
+msgstr "Det finns inga länkar över denna rad i dokumentet."
+
+#: LYMessages.c:341
+msgid "There are no links below this line of the document."
+msgstr "Det finns inga länkar nedanför denna rad i dokumentet."
+
+#. #define MAXLEN_REACHED_DEL_OR_MOV
+#: LYMessages.c:343
+msgid "Maximum length reached! Delete text or move off field."
+msgstr "Maximal längd nådd! Ta bort text eller lämna fältet."
+
+#. #define NOT_ON_SUBMIT_OR_LINK
+#: LYMessages.c:345
+msgid "You are not on a form submission button or normal link."
+msgstr "Du är inte på en formulärsändknapp eller normal länk."
+
+#. #define NEED_CHECKED_RADIO_BUTTON
+#: LYMessages.c:347
+msgid "One radio button must be checked at all times!"
+msgstr "En radioknapp måste alltid vara markerad!"
+
+#: LYMessages.c:348
+msgid "No submit button for this form, submit single text field?"
+msgstr "Ingen insändningsknapp i formuläret, skicka ensamt textfält?"
+
+#: LYMessages.c:349
+msgid "Do you want to go back to the previous document?"
+msgstr "Vill du gå tillbaka till föregående dokument?"
+
+#: LYMessages.c:350
+msgid "Use arrows or tab to move off of field."
+msgstr "Använd pilar eller tabb för att lämna."
+
+#. #define ENTER_TEXT_ARROWS_OR_TAB
+#: LYMessages.c:352
+msgid "Enter text. Use arrows or tab to move off of field."
+msgstr "Ange text. Använd pilar eller tabb för att lämna."
+
+#: LYMessages.c:353
+msgid "** Bad HTML!! No form action defined. **"
+msgstr "** Trasig HTML!! Inget formulärmål angivet. **"
+
+#: LYMessages.c:354
+msgid "Bad HTML!! Unable to create popup window!"
+msgstr "Trasig HTML!! Kan inte skapa popupfönster!"
+
+#: LYMessages.c:355
+msgid "Unable to create popup window!"
+msgstr "Kan inte skapa popupfönster!"
+
+#: LYMessages.c:356
+msgid "Goto a random URL is disallowed!"
+msgstr "Slumpmässig adress ej tillåten!"
+
+#: LYMessages.c:357
+msgid "Goto a non-http URL is disallowed!"
+msgstr "Icke-http-adress ej tillåten!"
+
+#: LYMessages.c:358
+#, c-format
+msgid "You are not allowed to goto \"%s\" URLs"
+msgstr "Du tillåts inte gå till \"%s\"-adresser"
+
+#: LYMessages.c:359
+msgid "URL to open: "
+msgstr "Adress att öppna: "
+
+#: LYMessages.c:360
+msgid "Edit the current Goto URL: "
+msgstr "Redigera aktuell gåadress: "
+
+#: LYMessages.c:361
+msgid "Edit the previous Goto URL: "
+msgstr "Redigera föregående gåadress: "
+
+#: LYMessages.c:362
+msgid "Edit a previous Goto URL: "
+msgstr "Redigera en tidigare gåadress: "
+
+#: LYMessages.c:363
+msgid "Current document has POST data."
+msgstr "Aktuellt dokument har \"POST\"-data."
+
+#: LYMessages.c:364
+msgid "Edit this document's URL: "
+msgstr "Redigera dokumentets adress: "
+
+#: LYMessages.c:365
+msgid "Edit the current link's URL: "
+msgstr "Redigera aktull länkadress: "
+
+#: LYMessages.c:366
+msgid "You cannot edit File Management URLs"
+msgstr "Du kan inte redigera filhanteringsadresser"
+
+#: LYMessages.c:367
+msgid "Enter a database query: "
+msgstr "Ange en databasfråga: "
+
+#: LYMessages.c:368
+msgid "Enter a whereis query: "
+msgstr "Ange en \"whereis\"-fråga: "
+
+#: LYMessages.c:369
+msgid "Edit the current query: "
+msgstr "Redigera aktuell fråga: "
+
+#: LYMessages.c:370
+msgid "Edit the previous query: "
+msgstr "Redigera föregående fråga: "
+
+#: LYMessages.c:371
+msgid "Edit a previous query: "
+msgstr "Redigera en tidigare fråga: "
+
+#. #define USE_C_R_TO_RESUB_CUR_QUERY
+#: LYMessages.c:373
+msgid "Use Control-R to resubmit the current query."
+msgstr "Använd Control-R för att skicka frågan på nytt."
+
+#: LYMessages.c:374
+msgid "Edit the current shortcut: "
+msgstr "Redigera aktuell genväg: "
+
+#: LYMessages.c:375
+msgid "Edit the previous shortcut: "
+msgstr "Redigera föregående genväg: "
+
+#: LYMessages.c:376
+msgid "Edit a previous shortcut: "
+msgstr "Redigera en tidigare genväg:"
+
+#: LYMessages.c:377
+#, c-format
+msgid "Key '%c' is not mapped to a jump file!"
+msgstr "Tangenten \"%c\" är inte kopplad till en hoppfil!"
+
+#: LYMessages.c:378
+msgid "Cannot locate jump file!"
+msgstr "Kan inte lokalisera hoppfil!"
+
+#: LYMessages.c:379
+msgid "Cannot open jump file!"
+msgstr "Kan inte öppna hoppfil!"
+
+#: LYMessages.c:380
+msgid "Error reading jump file!"
+msgstr "Fel vid läsning av hoppfil!"
+
+#: LYMessages.c:381
+msgid "Out of memory reading jump file!"
+msgstr "Slut på minne vid läsning av hoppfil!"
+
+#: LYMessages.c:382
+msgid "Out of memory reading jump table!"
+msgstr "Slut på minne vid läsning av hopptabell!"
+
+#: LYMessages.c:383
+msgid "No index is currently available."
+msgstr "Inget index är tillgängligt."
+
+#. #define CONFIRM_MAIN_SCREEN
+#: LYMessages.c:385
+msgid "Do you really want to go to the Main screen?"
+msgstr "Vill du verkligen gå till huvudskärmen?"
+
+#: LYMessages.c:386
+msgid "You are already at main screen!"
+msgstr "Du är redan på huvudskärmen!"
+
+#. #define NOT_ISINDEX
+#: LYMessages.c:388
+msgid "Not a searchable indexed document -- press '/' to search for a text string"
+msgstr "Inte ett sökbart index -- tryck \"/\" för att söka efter en textsträng"
+
+#. #define NO_OWNER
+#: LYMessages.c:390
+msgid "No owner is defined for this file so you cannot send a comment"
+msgstr "Ingen ägare är angiven för denna fil, så du kan inte skicka en kommentar"
+
+#: LYMessages.c:391
+#, c-format
+msgid "No owner is defined. Use %s?"
+msgstr "Ingen ägaren är angiven. Använda %s?"
+
+#: LYMessages.c:392
+msgid "Do you wish to send a comment?"
+msgstr "Vill du skicka en kommentar?"
+
+#: LYMessages.c:393
+msgid "Mail is disallowed so you cannot send a comment"
+msgstr "E-post tillåts ej, så du kan inte skicka en kommentar"
+
+#: LYMessages.c:394
+msgid "The 'e'dit command is currently disabled."
+msgstr "Redigeringskommandot är just nu deaktiverat."
+
+#: LYMessages.c:395
+msgid "External editing is currently disabled."
+msgstr "Extern redigering är just nu deaktiverad."
+
+#: LYMessages.c:396
+msgid "System error - failure to get status."
+msgstr "Systemfel - kunde inte hämta status."
+
+#: LYMessages.c:397
+msgid "No editor is defined!"
+msgstr "Inget textredigeringsprogram har angivits!"
+
+#: LYMessages.c:398
+msgid "The 'p'rint command is currently disabled."
+msgstr "Utskriftskommandot är just nu deaktiverat."
+
+#: LYMessages.c:399
+msgid "Document has no Toolbar links or Banner."
+msgstr "Dokumentet har varken verktygsradslänkar eller baner."
+
+#: LYMessages.c:400
+msgid "Unable to open traversal file."
+msgstr "Kan inte öppna traverseringsfil."
+
+#: LYMessages.c:401
+msgid "Unable to open traversal found file."
+msgstr "Kan inte öppna traverseringens resultatfil."
+
+#: LYMessages.c:402
+msgid "Unable to open reject file."
+msgstr "Kan inte öppna avvisningsfilen."
+
+#: LYMessages.c:403
+msgid "Unable to open traversal errors output file"
+msgstr "Kan inte öppna traverseringens felfil."
+
+#: LYMessages.c:404
+msgid "TRAVERSAL WAS INTERRUPTED"
+msgstr "TRAVERSERINGEN AVBRÖTS"
+
+#: LYMessages.c:405
+msgid "Follow link (or goto link or page) number: "
+msgstr "Följ länk (eller gå till länk eller sida) nummer: "
+
+#: LYMessages.c:406
+msgid "Select option (or page) number: "
+msgstr "Välj val- (eller sid-)nummer: "
+
+#: LYMessages.c:407
+#, c-format
+msgid "Option number %d already is current."
+msgstr "Alternativ %d är redan markerat."
+
+#. #define ALREADY_AT_OPTION_END
+#: LYMessages.c:409
+msgid "You are already at the end of this option list."
+msgstr "Du är redan i slutet av alternativlistan."
+
+#. #define ALREADY_AT_OPTION_BEGIN
+#: LYMessages.c:411
+msgid "You are already at the beginning of this option list."
+msgstr "Du är redan i början av alternativlistan."
+
+#. #define ALREADY_AT_OPTION_PAGE
+#: LYMessages.c:413
+#, c-format
+msgid "You are already at page %d of this option list."
+msgstr "Du är redan på sida %d i alternativlistan."
+
+#: LYMessages.c:414
+msgid "You have entered an invalid option number."
+msgstr "Du har angett ett felaktigt alternativnummer."
+
+#: LYMessages.c:415
+msgid "** Bad HTML!! Use -trace to diagnose. **"
+msgstr "** Trasig HTML!! Använd -trace för att diagnostisera. **"
+
+#: LYMessages.c:416
+msgid "Give name of file to save in"
+msgstr "Ange filnamn att spara till"
+
+#: LYMessages.c:417
+msgid "Can't save data to file -- please run WWW locally"
+msgstr "Kan inte spara data till fil -- kör lokal webbläsare"
+
+#: LYMessages.c:418
+msgid "Can't open temporary file!"
+msgstr "Kan inte öppna temporärfil!"
+
+#: LYMessages.c:419
+msgid "Can't open output file! Cancelling!"
+msgstr "Kan inte öppna utdatafil! Avbryter!"
+
+#: LYMessages.c:420
+msgid "Execution is disabled."
+msgstr "Programkörning deaktiverad."
+
+#. #define EXECUTION_DISABLED_FOR_FILE
+#: LYMessages.c:422
+#, c-format
+msgid "Execution is not enabled for this file. See the Options menu (use %s)."
+msgstr "Programkörning inte aktiverad för denna fil. Se alternativmeny (använd %s)."
+
+#. #define EXECUTION_NOT_COMPILED
+#: LYMessages.c:424
+msgid "Execution capabilities are not compiled into this version."
+msgstr "Programkörningsmöjligheter inte inkompilerade i denna version."
+
+#: LYMessages.c:425
+msgid "This file cannot be displayed on this terminal."
+msgstr "Denna fil kan inte visas på terminalen."
+
+#. #define CANNOT_DISPLAY_FILE_D_OR_C
+#: LYMessages.c:427
+msgid "This file cannot be displayed on this terminal: D)ownload, or C)ancel"
+msgstr "Denna fil kan inte visas på terminalen. D=Hämta, C=Avbryt"
+
+#: LYMessages.c:428
+#, c-format
+msgid "%s D)ownload, or C)ancel"
+msgstr "%s D=Hämta, C=Avbryt"
+
+#: LYMessages.c:429
+msgid "Cancelling file."
+msgstr "Avbryter fil."
+
+#: LYMessages.c:430
+msgid "Retrieving file. - PLEASE WAIT -"
+msgstr "Hämtar fil. - VÄNLIGEN VÄNTA -"
+
+#: LYMessages.c:431
+msgid "Enter a filename: "
+msgstr "Ange ett filnamn: "
+
+#: LYMessages.c:432
+msgid "Edit the previous filename: "
+msgstr "Redigera föregående filnamn: "
+
+#: LYMessages.c:433
+msgid "Edit a previous filename: "
+msgstr "Redigera ett tidigare filnamn: "
+
+#: LYMessages.c:434
+msgid "Enter a new filename: "
+msgstr "Ange ett nytt filnamn: "
+
+#: LYMessages.c:435
+msgid "File name may not begin with a dot."
+msgstr "Filnamnet får inte börja med en punkt."
+
+#: LYMessages.c:437
+msgid "File exists. Create higher version?"
+msgstr "Filen existerar. Skapa en högre version?"
+
+#: LYMessages.c:439
+msgid "File exists. Overwrite?"
+msgstr "Filen existerar. Skriva över?"
+
+#: LYMessages.c:441
+msgid "Cannot write to file."
+msgstr "Kan inte skriva till fil."
+
+#: LYMessages.c:442
+msgid "ERROR! - download command is misconfigured."
+msgstr "FEL! - hämtkommandot är felkonfigurerat."
+
+#: LYMessages.c:443
+msgid "Unable to download file."
+msgstr "Kan inte hämta fil."
+
+#: LYMessages.c:444
+msgid "Reading directory..."
+msgstr "Läser katalog..."
+
+#: LYMessages.c:445
+msgid "Building directory listing..."
+msgstr "Bygger kataloglista..."
+
+#: LYMessages.c:446
+msgid "Saving..."
+msgstr "Sparar..."
+
+#: LYMessages.c:447
+#, c-format
+msgid "Could not edit file '%s'."
+msgstr "Kan inte redigera filen \"%s\"."
+
+#: LYMessages.c:448
+msgid "Unable to access document!"
+msgstr "Kan inte komma åt dokument!"
+
+#: LYMessages.c:449
+msgid "Could not access file."
+msgstr "Kan inte komma åt fil."
+
+#: LYMessages.c:450
+msgid "Could not access directory."
+msgstr "Kan inte komma åt katalog."
+
+#: LYMessages.c:451
+msgid "Could not load data."
+msgstr "Kan inte läsa in data."
+
+#. #define CANNOT_EDIT_REMOTE_FILES
+#: LYMessages.c:453
+msgid "Lynx cannot currently (e)dit remote WWW files."
+msgstr "Lynx kan ännu inte redigera fjärrwebbfiler."
+
+#. #define CANNOT_EDIT_FIELD
+#: LYMessages.c:455
+msgid "This field cannot be (e)dited with an external editor."
+msgstr "Detta fält kan inte redigeras med en extern redigerare."
+
+#: LYMessages.c:456
+msgid "Bad rule"
+msgstr "Felaktig regel"
+
+#: LYMessages.c:457
+msgid "Insufficient operands:"
+msgstr "Otillräckliga operander:"
+
+#: LYMessages.c:458
+msgid "You are not authorized to edit this file."
+msgstr "Du har inte rättighet att redigera filen."
+
+#: LYMessages.c:459
+msgid "Title: "
+msgstr "Titel: "
+
+#: LYMessages.c:460
+msgid "Subject: "
+msgstr "Ärende: "
+
+#: LYMessages.c:461
+msgid "Username: "
+msgstr "Användar-id: "
+
+#: LYMessages.c:462
+msgid "Password: "
+msgstr "Lösenord: "
+
+#: LYMessages.c:463
+msgid "lynx: Username and Password required!!!"
+msgstr "lynx: Användar-id och lösenord krävs!!!"
+
+#: LYMessages.c:464
+msgid "lynx: Password required!!!"
+msgstr "lynx: Lösenord krävs!!!"
+
+#: LYMessages.c:465
+msgid "Clear all authorization info for this session?"
+msgstr "Rensa all auktoriseringsinformation från denna session?"
+
+#: LYMessages.c:466
+msgid "Authorization info cleared."
+msgstr "Auktoriseringsinformation rensad."
+
+#: LYMessages.c:467
+msgid "Authorization failed. Retry?"
+msgstr "Auktorisering misslyckades. Försök igen?"
+
+#: LYMessages.c:468
+msgid "cgi support has been disabled."
+msgstr "cgi-stöd har deaktiverats."
+
+#. #define CGI_NOT_COMPILED
+#: LYMessages.c:470
+msgid "Lynxcgi capabilities are not compiled into this version."
+msgstr "Lynxcgi-stöd är inte inkompilerade i denna version."
+
+#: LYMessages.c:471
+#, c-format
+msgid "Sorry, no known way of converting %s to %s."
+msgstr "Tyvärr, kan inte konvertera %s till %s."
+
+#: LYMessages.c:472
+msgid "Unable to set up connection."
+msgstr "Kan inte ställa in anslutning."
+
+#: LYMessages.c:473
+msgid "Unable to make connection"
+msgstr "Kan inte skapa anslutning"
+
+#. #define MALFORMED_EXEC_REQUEST
+#: LYMessages.c:475
+msgid "Executable link rejected due to malformed request."
+msgstr "Körbar länk förkastad på grund av trasig förfrågan."
+
+#. #define BADCHAR_IN_EXEC_LINK
+#: LYMessages.c:477
+#, c-format
+msgid "Executable link rejected due to `%c' character."
+msgstr "Körbar länk förkastad på grund av tecknet \"%c\"."
+
+#. #define RELPATH_IN_EXEC_LINK
+#: LYMessages.c:479
+msgid "Executable link rejected due to relative path string ('../')."
+msgstr "Körbar länk förkastad på grund av relativ sökvägssträng (\"../\")."
+
+#. #define BADLOCPATH_IN_EXEC_LINK
+#: LYMessages.c:481
+msgid "Executable link rejected due to location or path."
+msgstr "Körbar länk förkastad på grund av placering eller sökväg."
+
+#: LYMessages.c:482
+msgid "Mail access is disabled!"
+msgstr "Åtkomst till e-post deaktiverad!"
+
+#. #define ACCESS_ONLY_LOCALHOST
+#: LYMessages.c:484
+msgid "Only files and servers on the local host can be accessed."
+msgstr "Endast filer och servrar på den lokala värden kan nås."
+
+#: LYMessages.c:485
+msgid "Telnet access is disabled!"
+msgstr "Telnetåtkomst är deaktiverad!"
+
+#. #define TELNET_PORT_SPECS_DISABLED
+#: LYMessages.c:487
+msgid "Telnet port specifications are disabled."
+msgstr "Specificering av telnetport är deaktiverad."
+
+#: LYMessages.c:488
+msgid "USENET news access is disabled!"
+msgstr "Åtkomst till Usenet news är deaktiverad!"
+
+#: LYMessages.c:489
+msgid "Rlogin access is disabled!"
+msgstr "Rloginåtkomst är deaktiverad!"
+
+#: LYMessages.c:490
+msgid "Ftp access is disabled!"
+msgstr "Ftpåtkomst är deaktiverad!"
+
+#: LYMessages.c:491
+msgid "There are no references from this document."
+msgstr "Det finns inga referenser i detta dokument."
+
+#: LYMessages.c:492
+msgid "There are only hidden links from this document."
+msgstr "Det finns inga dolda länkar i detta dokument."
+
+#: LYMessages.c:494
+msgid "Unable to open command file."
+msgstr "Kan inte öppna kommandofil."
+
+#: LYMessages.c:496
+msgid "News Post Cancelled!!!"
+msgstr "Postning av inlägg avbruten!!!"
+
+#. #define SPAWNING_EDITOR_FOR_NEWS
+#: LYMessages.c:498
+msgid "Spawning your selected editor to edit news message"
+msgstr "Startar ditt valda textredigeringsprogram för att redigera inlägg"
+
+#: LYMessages.c:499
+msgid "Post this message?"
+msgstr "Posta inlägget?"
+
+#: LYMessages.c:500
+#, c-format
+msgid "Append '%s'?"
+msgstr "Lägga till \"%s\"?"
+
+#: LYMessages.c:501
+msgid "Posting to newsgroup(s)..."
+msgstr "Postar till diskussionsgrupp(er)..."
+
+#: LYMessages.c:503
+msgid "*** You have unread mail. ***"
+msgstr "*** Du har oläst e-post. ***"
+
+#: LYMessages.c:505
+msgid "*** You have mail. ***"
+msgstr "*** Du har e-post. ***"
+
+#: LYMessages.c:507
+msgid "*** You have new mail. ***"
+msgstr "*** Du har ny e-post. ***"
+
+#: LYMessages.c:508
+msgid "File insert cancelled!!!"
+msgstr "Filinläggning avbruten!!!"
+
+#: LYMessages.c:509
+msgid "Not enough memory for file!"
+msgstr "Minnet slut för fil!"
+
+#: LYMessages.c:510
+msgid "Can't open file for reading."
+msgstr "Kan inte öppna fil för läsning."
+
+#: LYMessages.c:511
+msgid "File does not exist."
+msgstr "Filen existerar inte."
+
+#: LYMessages.c:512
+msgid "File does not exist - reenter or cancel:"
+msgstr "Filen existerar inte - ange igen eller avbryt:"
+
+#: LYMessages.c:513
+msgid "File is not readable."
+msgstr "Filen är inte läsbar."
+
+#: LYMessages.c:514
+msgid "File is not readable - reenter or cancel:"
+msgstr "Filen är inte läsbar - ange igen eller avbryt:"
+
+#: LYMessages.c:515
+msgid "Nothing to insert - file is 0-length."
+msgstr "Inget att lägga in - filen har nollstorlek."
+
+#: LYMessages.c:516
+msgid "Save request cancelled!!!"
+msgstr "Sparning avbruten!!!"
+
+#: LYMessages.c:517
+msgid "Mail request cancelled!!!"
+msgstr "E-post avbrutet!!!"
+
+#. #define CONFIRM_MAIL_SOURCE_PREPARSED
+#: LYMessages.c:519
+msgid "Viewing preparsed source. Are you sure you want to mail it?"
+msgstr "Visar tolkad källkod. Är du säker på att du vill skicka den?"
+
+#: LYMessages.c:520
+msgid "Please wait..."
+msgstr "Var god vänta..."
+
+#: LYMessages.c:521
+msgid "Mailing file. Please wait..."
+msgstr "Skickar fil. Var god vänta..."
+
+#: LYMessages.c:522
+msgid "ERROR - Unable to mail file"
+msgstr "FEL - Kan inte skicka fil per e-post"
+
+#. #define CONFIRM_LONG_SCREEN_PRINT
+#: LYMessages.c:524
+#, c-format
+msgid "File is %d screens long. Are you sure you want to print?"
+msgstr "Filen är %d skärmar lång. Är du säker att du vill skriva ut?"
+
+#: LYMessages.c:525
+msgid "Print request cancelled!!!"
+msgstr "Utskrift avbruten!!!"
+
+#: LYMessages.c:526
+msgid "Press <return> to begin: "
+msgstr "Tryck <Enter> för att börja: "
+
+#: LYMessages.c:527
+msgid "Press <return> to finish: "
+msgstr "Tryck <Enter> för att avsluta: "
+
+#. #define CONFIRM_LONG_PAGE_PRINT
+#: LYMessages.c:529
+#, c-format
+msgid "File is %d pages long. Are you sure you want to print?"
+msgstr "Filen är %d sidor lång. Är du säker att du vill skriva ut?"
+
+#. #define CHECK_PRINTER
+#: LYMessages.c:531
+msgid "Be sure your printer is on-line. Press <return> to start printing:"
+msgstr "Försäkra dig om att skrivaren är inkopplad. Tryck <Enter> för att påbörja utskriften:"
+
+#: LYMessages.c:532
+msgid "ERROR - Unable to allocate file space!!!"
+msgstr "FEL - kan inte reservera filutrymme!!!"
+
+#: LYMessages.c:533
+msgid "Unable to open tempfile"
+msgstr "Kan inte öppna temporärfil"
+
+#: LYMessages.c:534
+msgid "Unable to open print options file"
+msgstr "Kan inte öppna utskriftsalternativfil"
+
+#: LYMessages.c:535
+msgid "Printing file. Please wait..."
+msgstr "Skriver ut fil. Var god vänta..."
+
+#: LYMessages.c:536
+msgid "Please enter a valid internet mail address: "
+msgstr "Ange en giltig Internet-e-postadress: "
+
+#: LYMessages.c:537
+msgid "ERROR! - printer is misconfigured!"
+msgstr "FEL! - skrivaren är felkonfigurerad!"
+
+#: LYMessages.c:538
+msgid "Image map from POST response not available!"
+msgstr "Bildkarta från \"POST\"-svar ej tillgänglig!"
+
+#: LYMessages.c:539
+msgid "Misdirected client-side image MAP request!"
+msgstr "Feldirigerad klientbildkarteförfrågan!"
+
+#: LYMessages.c:540
+msgid "Client-side image MAP is not accessible!"
+msgstr "Klientbildkarta ej åtkomlig!"
+
+#: LYMessages.c:541
+msgid "No client-side image MAPs are available!"
+msgstr "Inga klientbildkartor är tillgängliga!"
+
+#: LYMessages.c:542
+msgid "Client-side image MAP is not available!"
+msgstr "Klientbildkarta ej tillgänglig!"
+
+#. #define OPTION_SCREEN_NEEDS_24
+#: LYMessages.c:545
+msgid "Screen height must be at least 24 lines for the Options menu!"
+msgstr "Skärmhöjden måste vara minst 24 rader för alternativmenyn!"
+
+#. #define OPTION_SCREEN_NEEDS_23
+#: LYMessages.c:547
+msgid "Screen height must be at least 23 lines for the Options menu!"
+msgstr "Skärmhöjden måste vara minst 23 rader för alternativmenyn!"
+
+#. #define OPTION_SCREEN_NEEDS_22
+#: LYMessages.c:549
+msgid "Screen height must be at least 22 lines for the Options menu!"
+msgstr "Skärmhöjden måste vara minst 22 rader för alternativmenyn!"
+
+#: LYMessages.c:551
+msgid "That key requires Advanced User mode."
+msgstr "Den knappen kräver avancerat användarläge."
+
+#: LYMessages.c:552
+#, c-format
+msgid "Content-type: %s"
+msgstr "Datatyp: %s"
+
+#: LYMessages.c:553
+msgid "Command: "
+msgstr "Kommando: "
+
+#: LYMessages.c:554
+msgid "Unknown or ambiguous command"
+msgstr "Okänt eller tvetydigt kommando"
+
+#: LYMessages.c:555
+msgid " Version "
+msgstr " Version "
+
+#: LYMessages.c:556
+msgid " first"
+msgstr " först"
+
+#: LYMessages.c:557
+msgid ", guessing..."
+msgstr ", gissar..."
+
+#: LYMessages.c:558
+msgid "Permissions for "
+msgstr "Behörighet för "
+
+#: LYMessages.c:559
+msgid "Select "
+msgstr "Välj "
+
+#: LYMessages.c:560
+msgid "capital letter"
+msgstr "stora bokstaven"
+
+#: LYMessages.c:561
+msgid " of option line,"
+msgstr " i alternativet,"
+
+#: LYMessages.c:562
+msgid " to save,"
+msgstr " för att lagra,"
+
+#: LYMessages.c:563
+msgid " to "
+msgstr " till "
+
+#: LYMessages.c:564
+msgid " or "
+msgstr " eller "
+
+#: LYMessages.c:565
+msgid " index"
+msgstr " index"
+
+#: LYMessages.c:566
+msgid " to return to Lynx."
+msgstr " för att återgå till Lynx"
+
+#: LYMessages.c:567
+msgid "Accept Changes"
+msgstr "Bekräfta ändringar"
+
+#: LYMessages.c:568
+msgid "Reset Changes"
+msgstr "Nollställ ändringar"
+
+#: LYMessages.c:569
+msgid "Left Arrow cancels changes"
+msgstr "Vänsterpil avbryter ändringar"
+
+#: LYMessages.c:570
+msgid "Save options to disk"
+msgstr "Spara inställningar till disk"
+
+#: LYMessages.c:571
+msgid "Hit RETURN to accept entered data."
+msgstr "Tryck ENTER för att bekräfta angiven data."
+
+#. #define ACCEPT_DATA_OR_DEFAULT
+#: LYMessages.c:573
+msgid "Hit RETURN to accept entered data. Delete data to invoke the default."
+msgstr "Tryck ENTER för att bekräfta angiven data. Ta bort för att återställa förval."
+
+#: LYMessages.c:574
+msgid "Value accepted!"
+msgstr "Värdet accepterat!"
+
+#. #define VALUE_ACCEPTED_WARNING_X
+#: LYMessages.c:576
+msgid "Value accepted! -- WARNING: Lynx is configured for XWINDOWS!"
+msgstr "Värdet accepterat! -- VARNING: Lynx har ställts in för XWINDOWS!"
+
+#. #define VALUE_ACCEPTED_WARNING_NONX
+#: LYMessages.c:578
+msgid "Value accepted! -- WARNING: Lynx is NOT configured for XWINDOWS!"
+msgstr "Värdet accepterat! -- VARNING: Lynx har INTE ställts in för XWINDOWS!"
+
+#: LYMessages.c:579
+msgid "You are not allowed to change which editor to use!"
+msgstr "Du har inte rättighet att ändra textredigeringsprogram!"
+
+#: LYMessages.c:580
+msgid "Failed to set DISPLAY variable!"
+msgstr "Kunde inte ställa in DISPLAY-variabel!"
+
+#: LYMessages.c:581
+msgid "Failed to clear DISPLAY variable!"
+msgstr "Kunde inte ta bort DISPLAY-variabel!"
+
+#. #define BOOKMARK_CHANGE_DISALLOWED
+#: LYMessages.c:583
+msgid "You are not allowed to change the bookmark file!"
+msgstr "Du har inte rättighet att ändra bokmärkesfil!"
+
+#: LYMessages.c:584
+msgid "Terminal does not support color"
+msgstr "Terminalen stöder inte färg"
+
+#: LYMessages.c:585
+#, c-format
+msgid "Your '%s' terminal does not support color."
+msgstr "Din \"%s\"-terminal stöder inte färg."
+
+#: LYMessages.c:586
+msgid "Access to dot files is disabled!"
+msgstr "Tillgång till punktfiler är deaktiverad!"
+
+#. #define UA_NO_LYNX_WARNING
+#: LYMessages.c:588
+msgid "User-Agent string does not contain \"Lynx\" or \"L_y_n_x\""
+msgstr "Identifieringssträngen innehåller inte \"Lynx\" eller \"L_y_n_x\""
+
+#. #define UA_PLEASE_USE_LYNX
+#: LYMessages.c:590
+msgid "Use \"L_y_n_x\" or \"Lynx\" in User-Agent, or it looks like intentional deception!"
+msgstr "Använd \"L_y_n_x\" eller \"Lynx\" i identifieringen, annars ser det ut som medvetet bedrägeri"
+
+#. #define UA_CHANGE_DISABLED
+#: LYMessages.c:592
+msgid "Changing of the User-Agent string is disabled!"
+msgstr "Ändring av identifieringssträngen är deaktiverad!"
+
+#. #define CHANGE_OF_SETTING_DISALLOWED
+#: LYMessages.c:594
+msgid "You are not allowed to change this setting."
+msgstr "Du har inte behörighet att ändra denna inställning."
+
+#: LYMessages.c:595
+msgid "Saving Options..."
+msgstr "Sparar inställningar..."
+
+#: LYMessages.c:596
+msgid "Options saved!"
+msgstr "Inställningar sparade!"
+
+#: LYMessages.c:597
+msgid "Unable to save Options!"
+msgstr "Kan inte spara inställningar!"
+
+#: LYMessages.c:598
+msgid " 'r' to return to Lynx "
+msgstr " 'r' återgår till Lynx "
+
+#: LYMessages.c:599
+msgid " '>' to save, or 'r' to return to Lynx "
+msgstr " '>' sparar, 'r' återgår till Lynx "
+
+#. #define ANY_KEY_CHANGE_RET_ACCEPT
+#: LYMessages.c:601
+msgid "Hit any key to change value; RETURN to accept."
+msgstr "Valfri tangent ändrar, förutom ENTER som accepterar."
+
+#: LYMessages.c:602
+msgid "Error uncompressing temporary file!"
+msgstr "Fel vid dekomprimering av temporärfil!"
+
+#: LYMessages.c:603
+msgid "Unsupported URL scheme!"
+msgstr "Adresstypen stöds ej!"
+
+#: LYMessages.c:604
+msgid "Unsupported data: URL! Use SHOWINFO, for now."
+msgstr "Data stöds ej: URL! Använd SHOWINFO så länge."
+
+#: LYMessages.c:605
+msgid "Redirection limit of 10 URL's reached."
+msgstr "Gräns på 10 adressomdirigeringar nådd."
+
+#: LYMessages.c:606
+msgid "Illegal redirection URL received from server!"
+msgstr "Felaktig omdirigeringsadress mottagen från servern!"
+
+#. #define SERVER_ASKED_FOR_REDIRECTION
+#: LYMessages.c:608
+#, c-format
+msgid "Server asked for %d redirection of POST content to"
+msgstr "Servern bad om %d-omdirigering för POST-data till"
+
+#: LYMessages.c:611
+msgid "P)roceed, use G)ET or C)ancel "
+msgstr "P=Fortsätt, G=använd Get, C=Avbryt"
+
+#: LYMessages.c:612
+msgid "P)roceed, or C)ancel "
+msgstr "P=Fortsätt, C=Avbryt "
+
+#. #define ADVANCED_POST_GET_REDIRECT
+#: LYMessages.c:614
+msgid "Redirection of POST content. P)roceed, see U)RL, use G)ET or C)ancel"
+msgstr "Omdirigering av POST-data. P=Fortsätt, U=Se adress, G=använd GET, C=Avbryt"
+
+#. #define ADVANCED_POST_REDIRECT
+#: LYMessages.c:616
+msgid "Redirection of POST content. P)roceed, see U)RL, or C)ancel"
+msgstr "Omdirigering av POST-data. P=Fortsätt, U=Se adress, C=Avbryt"
+
+#. #define CONFIRM_POST_RESUBMISSION
+#: LYMessages.c:618
+msgid "Document from Form with POST content. Resubmit?"
+msgstr "Dokument från formulär med POST-data. Skicka igen?"
+
+#. #define CONFIRM_POST_RESUBMISSION_TO
+#: LYMessages.c:620
+#, c-format
+msgid "Resubmit POST content to %s ?"
+msgstr "Skicka POST-data till %s igen?"
+
+#. #define CONFIRM_POST_LIST_RELOAD
+#: LYMessages.c:622
+#, c-format
+msgid "List from document with POST data. Reload %s ?"
+msgstr "Lista från dokument med POST-data. Hämta om %s?"
+
+#. #define CONFIRM_POST_DOC_HEAD
+#: LYMessages.c:624
+msgid "Document from POST action, HEAD may not be understood. Proceed?"
+msgstr "Dokument från POST-formulär, HEAD kanske inte förstås. Fortsätta?"
+
+#. #define CONFIRM_POST_LINK_HEAD
+#: LYMessages.c:626
+msgid "Form submit action is POST, HEAD may not be understood. Proceed?"
+msgstr "Formulärmetod är POST, HEAD kanske inte förstås. Fortsätta?"
+
+#: LYMessages.c:627
+msgid "Proceed without a username and password?"
+msgstr "Fortsätta utan användar-id och lösenord?"
+
+#: LYMessages.c:628
+#, c-format
+msgid "Proceed (%s)?"
+msgstr "Fortsätta (%s)?"
+
+#: LYMessages.c:629
+msgid "Cannot POST to this host."
+msgstr "Kan inte skicka POST-data till denna värd."
+
+#: LYMessages.c:630
+msgid "POST not supported for this URL - ignoring POST data!"
+msgstr "POST stöds inte för denna adress - ignorerar POST-data!"
+
+#: LYMessages.c:631
+msgid "Discarding POST data..."
+msgstr "Kastar POST-data..."
+
+#: LYMessages.c:632
+msgid "Document will not be reloaded!"
+msgstr "Dokumentet hämtas inte om!"
+
+#: LYMessages.c:633
+msgid "Location: "
+msgstr "Plats: "
+
+#: LYMessages.c:634
+#, c-format
+msgid "'%s' not found!"
+msgstr "'%s' hittades ej!"
+
+#: LYMessages.c:635
+msgid "Default Bookmark File"
+msgstr "Förinställd bokmärkesfil"
+
+#: LYMessages.c:636
+msgid "Screen too small! (8x35 min)"
+msgstr "Skärm för liten! (min. 8x35)"
+
+#: LYMessages.c:637
+msgid "Select destination or ^G to Cancel: "
+msgstr "Välj destination eller ^G för att avbryta: "
+
+#. #define MULTIBOOKMARKS_SELECT
+#: LYMessages.c:639
+msgid "Select subbookmark, '=' for menu, or ^G to cancel: "
+msgstr "Välj underbokmärke. '=' ger meny, ^G avbryter: "
+
+#. #define MULTIBOOKMARKS_SELF
+#: LYMessages.c:641
+msgid "Reproduce L)ink in this bookmark file or C)ancel? (l,c): "
+msgstr "L=Avbilda länk i bokmärkesfil, C=Avbryt? (l,c): "
+
+#: LYMessages.c:642
+msgid "Multiple bookmark support is not available."
+msgstr "Stöd för multipla bokmärken ej tillgängligt."
+
+#: LYMessages.c:643
+#, c-format
+msgid " Select Bookmark (screen %d of %d)"
+msgstr " Välj bokmärke (skärm %d av %d)"
+
+#: LYMessages.c:644
+msgid " Select Bookmark"
+msgstr " Välj bokmärke"
+
+#. #define MULTIBOOKMARKS_EHEAD_MASK
+#: LYMessages.c:646
+#, c-format
+msgid "Editing Bookmark DESCRIPTION and FILEPATH (%d of 2)"
+msgstr "Redigerar bokmärkes-BESKRIVNING och SÖKVÄG (%d av 2)"
+
+#. #define MULTIBOOKMARKS_EHEAD
+#: LYMessages.c:648
+msgid " Editing Bookmark DESCRIPTION and FILEPATH"
+msgstr " Redigerar bokmärkes-BESKRIVNING och SÖKVÄG"
+
+#: LYMessages.c:649
+msgid "Letter: "
+msgstr "Bokstav: "
+
+#. #define USE_PATH_OFF_HOME
+#: LYMessages.c:652
+msgid "Use a filepath off your login directory in SHELL syntax!"
+msgstr "Använd en sökväg från din inloggningskatalog enligt SKAL-syntax!"
+
+#: LYMessages.c:654
+msgid "Use a filepath off your home directory!"
+msgstr "Använd en sökväg från din hemkatalog!"
+
+#. #define MAXLINKS_REACHED
+#: LYMessages.c:657
+msgid "Maximum links per page exceeded! Use half-page or two-line scrolling."
+msgstr "Max antal länkar per sida överskreds! Använd halvsides- eller tvåradsrullning."
+
+#. #define MAXHIST_REACHED
+#: LYMessages.c:659
+msgid "History List maximum reached! Document not pushed."
+msgstr "Historiklistemaximum nått! Dokumentet lagrades inte."
+
+#: LYMessages.c:660
+msgid "No previously visited links available!"
+msgstr "Inga tidigare besökta länkar tillgängliga!"
+
+#: LYMessages.c:661
+msgid "Memory exhausted! Program aborted!"
+msgstr "Minnet slut! Programmet avbrutet!"
+
+#: LYMessages.c:662
+msgid "Memory exhausted! Aborting..."
+msgstr "Minnet slut! Avbryter..."
+
+#: LYMessages.c:663
+msgid "Not enough memory!"
+msgstr "Ej tillräckligt minne!"
+
+#: LYMessages.c:664
+msgid "Directory/File Manager not available"
+msgstr "Katalog-/filhanterare ej tillgänglig"
+
+#: LYMessages.c:665
+msgid "HREF in BASE tag is not an absolute URL."
+msgstr "HREF i BASE-märke är inte en absolut adress."
+
+#: LYMessages.c:666
+msgid "Location URL is not absolute."
+msgstr "\"Location\"-adress ej absolut."
+
+#: LYMessages.c:667
+msgid "Refresh URL is not absolute."
+msgstr "\"Refresh\"-adress ej absolut."
+
+#. #define SENDING_MESSAGE_WITH_BODY_TO
+#: LYMessages.c:669
+msgid ""
+"You are sending a message with body to:\n"
+" "
+msgstr ""
+"Du sänder ett meddelande med textkropp till:\n"
+" "
+
+#: LYMessages.c:670
+msgid ""
+"You are sending a comment to:\n"
+" "
+msgstr ""
+"Du sänder en kommentar till:\n"
+" "
+
+#: LYMessages.c:671
+msgid ""
+"\n"
+" With copy to:\n"
+" "
+msgstr ""
+"\n"
+" Med kopia till:\n"
+" "
+
+#: LYMessages.c:672
+msgid ""
+"\n"
+" With copies to:\n"
+" "
+msgstr ""
+"\n"
+" Med kopior till:\n"
+" "
+
+#. #define CTRL_G_TO_CANCEL_SEND
+#: LYMessages.c:674
+msgid ""
+"\n"
+"\n"
+"Use Ctrl-G to cancel if you do not want to send a message\n"
+msgstr ""
+"\n"
+"\n"
+"Använd Ctrl-G för att avbryta om du inte vill skicka ett meddelande\n"
+
+#. #define ENTER_NAME_OR_BLANK
+#: LYMessages.c:676
+msgid ""
+"\n"
+" Please enter your name, or leave it blank to remain anonymous\n"
+msgstr ""
+"\n"
+" Ange ditt namn eller lämna blankt för att förbli anonym\n"
+
+#. #define ENTER_MAIL_ADDRESS_OR_OTHER
+#: LYMessages.c:678
+msgid ""
+"\n"
+" Please enter a mail address or some other\n"
+msgstr ""
+"\n"
+" Skriv din e-postadress eller något annat\n"
+
+#. #define MEANS_TO_CONTACT_FOR_RESPONSE
+#: LYMessages.c:680
+msgid " means to contact you, if you desire a response.\n"
+msgstr " sätt du kan nås på, om du vill ha ett svar.\n"
+
+#: LYMessages.c:681
+msgid ""
+"\n"
+" Please enter a subject line.\n"
+msgstr ""
+"\n"
+" Ange en ärenderad.\n"
+
+#. #define ENTER_ADDRESS_FOR_CC
+#: LYMessages.c:683
+msgid ""
+"\n"
+" Enter a mail address for a CC of your message.\n"
+msgstr ""
+"\n"
+" Ange e-postadress som får kopia på ditt meddelande.\n"
+
+#: LYMessages.c:684
+msgid " (Leave blank if you don't want a copy.)\n"
+msgstr " (Lämna blankt om du inte vill ha en kopia).\n"
+
+#: LYMessages.c:685
+msgid ""
+"\n"
+" Please review the message body:\n"
+"\n"
+msgstr ""
+"\n"
+" Se över meddelandekroppen:\n"
+"\n"
+
+#: LYMessages.c:686
+msgid ""
+"\n"
+"Press RETURN to continue: "
+msgstr ""
+"\n"
+"Tryck ENTER för att fortsätta: "
+
+#: LYMessages.c:687
+msgid ""
+"\n"
+"Press RETURN to clean up: "
+msgstr ""
+"\n"
+"Tryck ENTER för att städa upp: "
+
+#: LYMessages.c:688
+msgid " Use Control-U to erase the default.\n"
+msgstr " Använd Control-U för att rensa förvalet.\n"
+
+#: LYMessages.c:689
+msgid ""
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+" Skriv ditt meddelande nedan."
+
+#. #define ENTER_PERIOD_WHEN_DONE_A
+#: LYMessages.c:691 src/LYNews.c:380
+msgid ""
+"\n"
+" When you are done, press enter and put a single period (.)"
+msgstr ""
+"\n"
+" När du är klar, tryck Enter och skriv en ensam punkt (.)"
+
+#. #define ENTER_PERIOD_WHEN_DONE_B
+#: LYMessages.c:693 src/LYNews.c:381
+msgid ""
+"\n"
+" on a line and press enter again."
+msgstr ""
+"\n"
+" på en rad och tryck Enter igen."
+
+#. Cookies messages
+#. #define ADVANCED_COOKIE_CONFIRMATION
+#: LYMessages.c:697
+#, c-format
+msgid "%s cookie: %.*s=%.*s Allow? (Y/N/Always/neVer)"
+msgstr "%s kaka: %.*s=%.*s Tillåta? (J/N/Alltid/V=aldrig)"
+
+#. #define INVALID_COOKIE_DOMAIN_CONFIRMATION
+#: LYMessages.c:699
+#, c-format
+msgid "Accept invalid cookie domain=%s for '%s'?"
+msgstr "Tillåta ogiltig kakdomän=%s för \"%s\"?"
+
+#. #define INVALID_COOKIE_PATH_CONFIRMATION
+#: LYMessages.c:701
+#, c-format
+msgid "Accept invalid cookie path=%s as a prefix of '%s'?"
+msgstr "Tillåta ogiltig kaksökväg=%s som prefix för \"%s\"?"
+
+#: LYMessages.c:702
+msgid "Allowing this cookie."
+msgstr "Tillåter kakan."
+
+#: LYMessages.c:703
+msgid "Rejecting this cookie."
+msgstr "Avvisar kakan."
+
+#: LYMessages.c:704
+msgid "The Cookie Jar is empty."
+msgstr "Kakburken är tom."
+
+#. #define ACTIVATE_TO_GOBBLE
+#: LYMessages.c:706
+msgid "Activate links to gobble up cookies or entire domains,"
+msgstr "Aktivera länk för att äta upp kakor eller hela domäner,"
+
+#: LYMessages.c:707
+msgid "or to change a domain's 'allow' setting."
+msgstr "eller ändra ändra domänens \"tillåt\"-inställning."
+
+#: LYMessages.c:708
+msgid "(Cookies never allowed.)"
+msgstr "(Kakor tillåts aldrig)"
+
+#: LYMessages.c:709
+msgid "(Cookies always allowed.)"
+msgstr "(Kakor tillåts alltid)"
+
+#: LYMessages.c:710
+msgid "(Cookies allowed via prompt.)"
+msgstr "(Kakor tillåts via fråga)"
+
+#: LYMessages.c:711
+msgid "(Persistent Cookies.)"
+msgstr "(Persistenta kakor)"
+
+#: LYMessages.c:712
+msgid "(No title.)"
+msgstr "(Titel saknas)"
+
+#: LYMessages.c:713
+msgid "(No name.)"
+msgstr "(Inget namn)"
+
+#: LYMessages.c:714
+msgid "(No value.)"
+msgstr "(Inget värde)"
+
+#: LYMessages.c:715
+msgid "None"
+msgstr "Ingen"
+
+#: LYMessages.c:716
+msgid "(End of session.)"
+msgstr "(Slut på session)"
+
+#: LYMessages.c:717
+msgid "Delete this cookie?"
+msgstr "Radera denna kaka?"
+
+#: LYMessages.c:718
+msgid "The cookie has been eaten!"
+msgstr "Kakan har ätits upp!"
+
+#: LYMessages.c:719
+msgid "Delete this empty domain?"
+msgstr "Radera denna tomma domän?"
+
+#: LYMessages.c:720
+msgid "The domain has been eaten!"
+msgstr "Domänen har ätits upp!"
+
+#. #define DELETE_COOKIES_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:722
+msgid "D)elete domain's cookies, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D=Radera domänens kakor, ställ in A=Alltid/P=Fråga/V=Aldrig, C=Avbryt? "
+
+#. #define DELETE_DOMAIN_SET_ALLOW_OR_CANCEL
+#: LYMessages.c:724
+msgid "D)elete domain, set allow A)lways/P)rompt/neV)er, or C)ancel? "
+msgstr "D=Radera domän, ställ in A=Alltid/P=Fråga/V=Aldrig, C=Avbryt? "
+
+#: LYMessages.c:725
+msgid "All cookies in the domain have been eaten!"
+msgstr "Alla kakor från domänen har ätits upp!"
+
+#: LYMessages.c:726
+#, c-format
+msgid "'A'lways allowing from domain '%s'."
+msgstr "Tillåter alla kakor från domänen \"%s\"."
+
+#: LYMessages.c:727
+#, c-format
+msgid "ne'V'er allowing from domain '%s'."
+msgstr "Avvisar alla kakor från domänen \"%s\"."
+
+#: LYMessages.c:728
+#, c-format
+msgid "'P'rompting to allow from domain '%s'."
+msgstr "Frågar om alla kakor från domänen \"%s\"."
+
+#: LYMessages.c:729
+msgid "Delete all cookies in this domain?"
+msgstr "Radera alla kakor i denna domän?"
+
+#: LYMessages.c:730
+msgid "All of the cookies in the jar have been eaten!"
+msgstr "Alla kakor i kakburken har ätits upp!"
+
+#: LYMessages.c:732
+msgid "Port 19 not permitted in URLs."
+msgstr "Port 19 ej tillåten i adress."
+
+#: LYMessages.c:733
+msgid "Port 25 not permitted in URLs."
+msgstr "Port 25 ej tillåten i adress."
+
+#: LYMessages.c:734
+#, c-format
+msgid "Port %lu not permitted in URLs."
+msgstr "Port %lu ej tillåten i adress."
+
+#: LYMessages.c:735
+msgid "URL has a bad port field."
+msgstr "Adressen har ett felaktigt portfält."
+
+#: LYMessages.c:736
+msgid "Maximum nesting of HTML elements exceeded."
+msgstr "Maximal stapling av HTML-element överskreds."
+
+#: LYMessages.c:737
+msgid "Bad partial reference! Stripping lead dots."
+msgstr "Felaktig partiell referens! Raderar inledande punkter."
+
+#: LYMessages.c:738
+msgid "Trace Log open failed. Trace off!"
+msgstr "Öppning av spårningslogg misslyckades. Spårning avslagen!"
+
+#: LYMessages.c:739
+msgid "Lynx Trace Log"
+msgstr "Lynx' spårningslogg"
+
+#: LYMessages.c:740
+msgid "No trace log has been started for this session."
+msgstr "Ingen spårningslogg har startats för denna session."
+
+#. #define MAX_TEMPCOUNT_REACHED
+#: LYMessages.c:742
+msgid "The maximum temporary file count has been reached!"
+msgstr "Maximalt antal temporärfiler har nåtts!"
+
+#. #define FORM_VALUE_TOO_LONG
+#: LYMessages.c:744
+msgid "Form field value exceeds buffer length! Trim the tail."
+msgstr "Värdet för formulärfält är längre än bufferten! Klipp på slutet."
+
+#. #define FORM_TAIL_COMBINED_WITH_HEAD
+#: LYMessages.c:746
+msgid "Modified tail combined with head of form field value."
+msgstr "Modifierad avslutning kombinerad med huvudet i formulärfältsvärdet."
+
+#. HTFile.c
+#: LYMessages.c:749
+msgid "Directory"
+msgstr "Katalog"
+
+#: LYMessages.c:750
+msgid "Directory browsing is not allowed."
+msgstr "Katalogbläddring tillåts ej."
+
+#: LYMessages.c:751
+msgid "Selective access is not enabled for this directory"
+msgstr "Selektiv åtkomst är inte tillgänglig för denna katalog"
+
+#: LYMessages.c:752
+msgid "Multiformat: directory scan failed."
+msgstr "Multiformat: katalogavsökning misslyckades."
+
+#: LYMessages.c:753
+msgid "This directory is not readable."
+msgstr "Denna katalog är inte läsbar."
+
+#: LYMessages.c:754
+msgid "Can't access requested file."
+msgstr "Kan inte komma åt vald fil."
+
+#: LYMessages.c:755
+msgid "Could not find suitable representation for transmission."
+msgstr "Kunde inte hitta en lämplig representation för överföring."
+
+#: LYMessages.c:756
+msgid "Could not open file for decompression!"
+msgstr "Kunde inte öppna filen för dekomprimering!"
+
+#: LYMessages.c:757
+msgid "Files:"
+msgstr "Filer:"
+
+#: LYMessages.c:758
+msgid "Subdirectories:"
+msgstr "Underkataloger:"
+
+#: LYMessages.c:759
+msgid " directory"
+msgstr " katalog"
+
+#: LYMessages.c:760
+msgid "Up to "
+msgstr "Upp till "
+
+#: LYMessages.c:761
+msgid "Current directory is "
+msgstr "Aktuell katalog är "
+
+#. HTGopher.c
+#: LYMessages.c:764
+msgid "No response from server!"
+msgstr "Inget svar från servern!"
+
+#: LYMessages.c:765
+msgid "CSO index"
+msgstr "CSO-index"
+
+#: LYMessages.c:766
+msgid ""
+"\n"
+"This is a searchable index of a CSO database.\n"
+msgstr ""
+"\n"
+"Detta är ett sökbart index i en CSO-databas.\n"
+
+#: LYMessages.c:767
+msgid "CSO Search Results"
+msgstr "CSO-sökresultat"
+
+#: LYMessages.c:768
+#, c-format
+msgid "Seek fail on %s\n"
+msgstr "Sökning misslyckades på %s\n"
+
+#: LYMessages.c:769
+msgid ""
+"\n"
+"Press the 's' key and enter search keywords.\n"
+msgstr ""
+"\n"
+"Tryck \"s\"-tangenten och ange söknyckelord.\n"
+
+#: LYMessages.c:770
+msgid ""
+"\n"
+"This is a searchable Gopher index.\n"
+msgstr ""
+"\n"
+"Detta är ett sökbart Gopherindex.\n"
+
+#: LYMessages.c:771
+msgid "Gopher index"
+msgstr "Gopherindex"
+
+#: LYMessages.c:772
+msgid "Gopher Menu"
+msgstr "Gophermeny"
+
+#: LYMessages.c:773
+msgid " Search Results"
+msgstr " Sökresultats"
+
+#: LYMessages.c:774
+msgid "Sending CSO/PH request."
+msgstr "Sänder CSO/PH-fråga."
+
+#: LYMessages.c:775
+msgid "Sending Gopher request."
+msgstr "Sänder Gopherfråga."
+
+#: LYMessages.c:776
+msgid "CSO/PH request sent; waiting for response."
+msgstr "CSO/PH-fråga sänd; väntar på svar."
+
+#: LYMessages.c:777
+msgid "Gopher request sent; waiting for response."
+msgstr "Gopherfråga sänd; väntar på svar."
+
+#: LYMessages.c:778
+msgid ""
+"\n"
+"Please enter search keywords.\n"
+msgstr ""
+"\n"
+"Ange söknyckelord.\n"
+
+#: LYMessages.c:779
+msgid ""
+"\n"
+"The keywords that you enter will allow you to search on a"
+msgstr ""
+"\n"
+"Nyckelorden du anger gör det möjligt att söka på en"
+
+#: LYMessages.c:780
+msgid " person's name in the database.\n"
+msgstr " persons namn i databasen.\n"
+
+#. HTNews.c
+#: LYMessages.c:783
+msgid "Connection closed ???"
+msgstr "Anslutning stängd???"
+
+#: LYMessages.c:784
+msgid "Cannot open temporary file for news POST."
+msgstr "Kan inte öppna temporärfil för diskussionsinlägg."
+
+#: LYMessages.c:785
+msgid "This client does not contain support for posting to news with SSL."
+msgstr "Denna klient innehåller inte stöd för att posta inlägg över SSL."
+
+#. HTStyle.c
+#: LYMessages.c:788
+#, c-format
+msgid "Style %d `%s' SGML:%s. Font %s %.1f point.\n"
+msgstr "Stil %d \"%s\" SGML:%s. Teckensnitt %s %.1f punkter.\n"
+
+#: LYMessages.c:789
+#, c-format
+msgid "\tIndents: first=%.0f others=%.0f, Height=%.1f Desc=%.1f\n"
+msgstr "\tIndrag: första=%.0f övriga=%.0f, Höjd=%.1f Djup=%.1f\n"
+
+#: LYMessages.c:790
+#, c-format
+msgid "\tAlign=%d, %d tabs. (%.0f before, %.0f after)\n"
+msgstr "\tJustering=%d, %d tabbar. (%.0f före, %.0f efter)\n"
+
+#: LYMessages.c:791
+#, c-format
+msgid "\t\tTab kind=%d at %.0f\n"
+msgstr "\t\tTabbsort=%d på %.0f\n"
+
+#. HTTP.c
+#: LYMessages.c:794
+msgid "Can't proceed without a username and password."
+msgstr "Kan inte fortsätta utan användar-id och lösenord."
+
+#: LYMessages.c:795
+msgid "Can't retry with authorization! Contact the server's WebMaster."
+msgstr "Kan inte försöka igen utan tillåtelse! Kontakta serverns ansvariga."
+
+#: LYMessages.c:796
+msgid "Can't retry with proxy authorization! Contact the server's WebMaster."
+msgstr "Kan ej försöka igen utan mellanserverauktorisering! Kontakta serverns ansvariga."
+
+#: LYMessages.c:797
+msgid "Retrying with proxy authorization information."
+msgstr "Försöker igen med mellanserverauktoriseringsinformation."
+
+#. HTWAIS.c
+#: LYMessages.c:800
+msgid "HTWAIS: Return message too large."
+msgstr "HTWAIS: Returmeddelande för stort."
+
+#: LYMessages.c:801
+msgid "Enter WAIS query: "
+msgstr "Ange WAIS-fråga: "
+
+#. Miscellaneous status
+#: LYMessages.c:804
+msgid "Retrying as HTTP0 request."
+msgstr "Försöker ingen som HTTP0-fråga."
+
+#: LYMessages.c:805
+#, c-format
+msgid "Transferred %d bytes"
+msgstr "Överförde %d byte"
+
+#: LYMessages.c:806
+msgid "Data transfer complete"
+msgstr "Dataöverföring färdig"
+
+#: LYMessages.c:807
+#, c-format
+msgid "Error processing line %d of %s\n"
+msgstr "Fel vid tolkning av rad %d i %s\n"
+
+#. Lynx internal page titles
+#: LYMessages.c:810
+msgid "Address List Page"
+msgstr "Adresslistesida"
+
+#: LYMessages.c:811
+msgid "Bookmark file"
+msgstr "Bokmärkesfil"
+
+#: LYMessages.c:812
+msgid "Configuration Definitions"
+msgstr "Konfigurationsdefinitioner"
+
+#: LYMessages.c:813
+msgid "Cookie Jar"
+msgstr "Kakburk"
+
+#: LYMessages.c:814
+msgid "Current Key Map"
+msgstr "Aktuella tangentbordsbindningar"
+
+#: LYMessages.c:815
+msgid "File Management Options"
+msgstr "Filhanteringsalternativ"
+
+#: LYMessages.c:816
+msgid "Download Options"
+msgstr "Hämtningalternativ"
+
+#: LYMessages.c:817
+msgid "History Page"
+msgstr "Historiksida"
+
+#: LYMessages.c:818
+msgid "List Page"
+msgstr "Listsida"
+
+#: LYMessages.c:819
+msgid "Lynx.cfg Information"
+msgstr "Lynx.cfg-information"
+
+#: LYMessages.c:820
+msgid "Converted Mosaic Hotlist"
+msgstr "Konverterade Mosaicbokmärken"
+
+#: LYMessages.c:821
+msgid "Options Menu"
+msgstr "Alternativmeny"
+
+#: LYMessages.c:822
+msgid "File Permission Options"
+msgstr "Filbehörighetsalternativ"
+
+#: LYMessages.c:823
+msgid "Printing Options"
+msgstr "Utskriftsalternativ"
+
+#: LYMessages.c:824
+msgid "Information about the current document"
+msgstr "Information om det aktuella dokumentet"
+
+#: LYMessages.c:825
+msgid "Your recent statusline messages"
+msgstr "Dina senaste statusradmeddelanden"
+
+#: LYMessages.c:826
+msgid "Upload Options"
+msgstr "Insändningsalternativ"
+
+#: LYMessages.c:827
+msgid "Visited Links Page"
+msgstr "Använda länkar"
+
+#. CONFIG_DEF_TITLE subtitles
+#: LYMessages.c:830
+msgid "See also"
+msgstr "Se även"
+
+#: LYMessages.c:831
+msgid "your"
+msgstr "din"
+
+#: LYMessages.c:832
+msgid "for runtime options"
+msgstr "för körningsalternativ"
+
+#: LYMessages.c:833
+msgid "compile time options"
+msgstr "kompileringsalternativ"
+
+#: LYMessages.c:834
+msgid "latest release"
+msgstr "senaste utgåva"
+
+#: LYMessages.c:835
+msgid "pre-release version"
+msgstr "förhandsversion"
+
+#: LYMessages.c:836
+msgid "development version"
+msgstr "utvecklingsversion"
+
+#. #define AUTOCONF_CONFIG_CACHE
+#: LYMessages.c:838
+msgid ""
+"The following data were derived during the automatic configuration/build\n"
+"process of this copy of Lynx. When reporting a bug, please include a copy\n"
+"of this page."
+msgstr ""
+"Följande data hämtades under den automatiska konfigurations-/kompilerings-\n"
+"processen för din kopia av Lynx. När du rapporterar ett fel ber vi dig\n"
+"inkludera en kopia av denna sida."
+
+#. #define AUTOCONF_LYNXCFG_H
+#: LYMessages.c:842
+msgid ""
+"The following data were used as automatically-configured compile-time\n"
+"definitions when this copy of Lynx was built."
+msgstr ""
+"Följande data användes som automatiskt konfigurerade kompileringsdefinitioner\n"
+"när denna kopia av Lynx kompilerades."
+
+#. #define DIRED_NOVICELINE
+#: LYMessages.c:847
+msgid " C)reate D)ownload E)dit F)ull menu M)odify R)emove T)ag U)pload \n"
+msgstr "C=Skapa D=Hämta E=Redigera F=Full meny M=Ändra R=Radera T=Märk U=Skicka\n"
+
+#: LYMessages.c:848
+msgid "Failed to obtain status of current link!"
+msgstr "Kunde inte hämta status för aktuell länk!"
+
+#. #define INVALID_PERMIT_URL
+#: LYMessages.c:851
+msgid "Special URL only valid from current File Permission menu!"
+msgstr "Speciell adress endast giltig i menyn för filbehörigheter!"
+
+#: LYMessages.c:855
+msgid "External support is currently disabled."
+msgstr "Externt stöd är just nu deaktiverat."
+
+#. new with 2.8.4dev.21
+#: LYMessages.c:859
+msgid "Changing working-directory is currently disabled."
+msgstr "Byte av arbetskatalog tillåts ej just nu."
+
+#: LYMessages.c:860
+msgid "Linewrap OFF!"
+msgstr "Radbrytning AV!"
+
+#: LYMessages.c:861
+msgid "Linewrap ON!"
+msgstr "Radbrytning PÅ!"
+
+#: LYMessages.c:862
+msgid "Parsing nested-tables toggled OFF! Reloading..."
+msgstr "Tolkning av nästlade tabeller AV! Hämtar om..."
+
+#: LYMessages.c:863
+msgid "Parsing nested-tables toggled ON! Reloading..."
+msgstr "Tolkning av nästlade tabeller PÅ! Hämtar om..."
+
+#: LYMessages.c:864
+msgid "Shifting is disabled while line-wrap is in effect"
+msgstr "Skiftning är deaktiverad när radbrytning är aktiv"
+
+#: LYMessages.c:865
+msgid "Trace not supported"
+msgstr "Spårning stöds ej"
+
+#: WWW/Library/Implementation/HTAABrow.c:648
+#, c-format
+msgid "Username for '%s' at %s '%s%s':"
+msgstr "Användar-id för \"%s\" på %s \"%s%s\":"
+
+#: WWW/Library/Implementation/HTAABrow.c:914
+msgid "This client doesn't know how to compose proxy authorization information for scheme"
+msgstr "Denna klient kan inte skapa mellanserverauktoriseringsinformation för protokolltyp"
+
+#: WWW/Library/Implementation/HTAABrow.c:989
+msgid "This client doesn't know how to compose authorization information for scheme"
+msgstr "Denna klient kan inte skapa auktoriseringsinformation för protokolltyp"
+
+#: WWW/Library/Implementation/HTAABrow.c:1097
+#, c-format
+msgid "Invalid header '%s%s%s%s%s'"
+msgstr "Felaktigt huvud \"%s%s%s%s%s\""
+
+#: WWW/Library/Implementation/HTAABrow.c:1201
+msgid "Proxy authorization required -- retrying"
+msgstr "Mellanserverauktorisering krävs -- försöker igen"
+
+#: WWW/Library/Implementation/HTAABrow.c:1260
+msgid "Access without authorization denied -- retrying"
+msgstr "Åtkomst utan auktorisering avvisad -- försöker igen"
+
+#: WWW/Library/Implementation/HTAccess.c:683
+msgid "Access forbidden by rule"
+msgstr "Åtkomst förbjuden av regel"
+
+#: WWW/Library/Implementation/HTAccess.c:785
+msgid "Document with POST content not found in cache. Resubmit?"
+msgstr "Dokument med POST-data hittades ej i cache. Skicka in igen?"
+
+#: WWW/Library/Implementation/HTAccess.c:1026 src/GridText.c:8039
+msgid "Loading incomplete."
+msgstr "Hämtning ej komplett."
+
+#: WWW/Library/Implementation/HTAccess.c:1056
+msgid "**** HTAccess: socket or file number returned by obsolete load routine!\n"
+msgstr "**** HTAccess: uttag eller filnummer returnerad av föråldrad inläsningsrutin!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1058
+msgid "**** HTAccess: Internal software error. Please mail lynx-dev@sig.net!\n"
+msgstr "**** HTAccess: Internt programvarufel. Meddela lynx-dev@sig.net!\n"
+
+#: WWW/Library/Implementation/HTAccess.c:1059
+#, c-format
+msgid "**** HTAccess: Status returned was: %d\n"
+msgstr "**** HTAccess: Returnerad status var: %d\n"
+
+#.
+#. * hack: if we fail in HTAccess.c
+#. * avoid duplicating URL, oh.
+#.
+#: WWW/Library/Implementation/HTAccess.c:1065 src/LYMainLoop.c:7834
+msgid "Can't Access"
+msgstr "Kan inte komma åt"
+
+#: WWW/Library/Implementation/HTAccess.c:1073
+msgid "Unable to access document."
+msgstr "Kan inte komma åt dokument."
+
+#: WWW/Library/Implementation/HTFTP.c:756
+#, c-format
+msgid "Enter password for user %s@%s:"
+msgstr "Ange lösenord för användar-id %s@%s:"
+
+#: WWW/Library/Implementation/HTFTP.c:784
+msgid "Unable to connect to FTP host."
+msgstr "Kan inte ansluta till ftp-värd."
+
+#: WWW/Library/Implementation/HTFTP.c:1054
+msgid "close master socket"
+msgstr "stängd huvuduttag (master socket)"
+
+#: WWW/Library/Implementation/HTFTP.c:1116
+msgid "socket for master socket"
+msgstr "uttag (socket) för huvuduttag"
+
+#.
+#. ** It's a symbolic link, does the user care about
+#. ** knowing if it is symbolic? I think so since
+#. ** it might be a directory.
+#.
+#: WWW/Library/Implementation/HTFTP.c:1630 WWW/Library/Implementation/HTFTP.c:2251
+msgid "Symbolic Link"
+msgstr "Symbolisk länk"
+
+#: WWW/Library/Implementation/HTFTP.c:2612
+msgid "Receiving FTP directory."
+msgstr "Hämtar ftp-katalog."
+
+#: WWW/Library/Implementation/HTFTP.c:2755
+#, c-format
+msgid "Transferred %d bytes (%5d)"
+msgstr "Överförde %d byte (%5d)"
+
+#: WWW/Library/Implementation/HTFTP.c:3090
+msgid "connect for data"
+msgstr "ansluter för data"
+
+#: WWW/Library/Implementation/HTFTP.c:3690
+msgid "Receiving FTP file."
+msgstr "Hämtar ftp-fil."
+
+#: WWW/Library/Implementation/HTFinger.c:275
+msgid "Could not set up finger connection."
+msgstr "Kunde inte skapa \"finger\"-anslutning."
+
+#: WWW/Library/Implementation/HTFinger.c:320
+msgid "Could not load data (no sitename in finger URL)"
+msgstr "Kunde inte hämta data (inget värdnamn i \"finger\"-adress)"
+
+#: WWW/Library/Implementation/HTFinger.c:328
+msgid "Invalid port number - will only use port 79!"
+msgstr "Felaktigt portnummer - använder endast port 79!"
+
+#: WWW/Library/Implementation/HTFinger.c:396
+msgid "Could not access finger host."
+msgstr "Kunde inta komma åt \"finger\"-värd."
+
+#: WWW/Library/Implementation/HTFinger.c:407
+msgid "No response from finger server."
+msgstr "Inget svar från \"finger\"-server."
+
+#: WWW/Library/Implementation/HTNews.c:372
+#, c-format
+msgid "Username for news host '%s':"
+msgstr "Användar-id för diskussionsvärd \"%s\":"
+
+#: WWW/Library/Implementation/HTNews.c:425
+msgid "Change username?"
+msgstr "Ändra användar-id?"
+
+#: WWW/Library/Implementation/HTNews.c:429
+msgid "Username:"
+msgstr "Användar-id:"
+
+#: WWW/Library/Implementation/HTNews.c:453
+#, c-format
+msgid "Password for news host '%s':"
+msgstr "Lösenord för diskussionsvärd \"%s\":"
+
+#: WWW/Library/Implementation/HTNews.c:536
+msgid "Change password?"
+msgstr "Ändra lösenord?"
+
+#: WWW/Library/Implementation/HTNews.c:1691
+#, c-format
+msgid "No matches for: %s"
+msgstr "Inga träffar för: %s"
+
+#: WWW/Library/Implementation/HTNews.c:1744
+msgid ""
+"\n"
+"No articles in this group.\n"
+msgstr ""
+"\n"
+"Inga artiklar i denna grupp.\n"
+
+#: WWW/Library/Implementation/HTNews.c:1757
+msgid ""
+"\n"
+"No articles in this range.\n"
+msgstr ""
+"\n"
+"Inga artiklar i detta område.\n"
+
+#.
+#. ** Set window title.
+#.
+#: WWW/Library/Implementation/HTNews.c:1770
+#, c-format
+msgid "%s, Articles %d-%d"
+msgstr "%s, artiklar %d-%d"
+
+#: WWW/Library/Implementation/HTNews.c:1792
+msgid "Earlier articles"
+msgstr "Tidigare artiklar"
+
+#: WWW/Library/Implementation/HTNews.c:1805
+#, c-format
+msgid ""
+"\n"
+"There are about %d articles currently available in %s, IDs as follows:\n"
+"\n"
+msgstr ""
+"\n"
+"Det finns ca %d artiklar tillgängliga i %s nu med följande identifierare:\n"
+"\n"
+
+#: WWW/Library/Implementation/HTNews.c:1865
+msgid "All available articles in "
+msgstr "Alla tillgängliga artiklar i "
+
+#: WWW/Library/Implementation/HTNews.c:2081
+msgid "Later articles"
+msgstr "Senare artiklar"
+
+#: WWW/Library/Implementation/HTNews.c:2105
+msgid "Post to "
+msgstr "Skicka till "
+
+#: WWW/Library/Implementation/HTNews.c:2323
+msgid "This client does not contain support for SNEWS URLs."
+msgstr "Denna klient innehåller inte stöd för SNEWS-adresser."
+
+#: WWW/Library/Implementation/HTNews.c:2531
+msgid "No target for raw text!"
+msgstr "Inget mål för rå text!"
+
+#: WWW/Library/Implementation/HTNews.c:2561
+msgid "Connecting to NewsHost ..."
+msgstr "Ansluter till diskussionsvärd..."
+
+#: WWW/Library/Implementation/HTNews.c:2612
+#, c-format
+msgid "Could not access %s."
+msgstr "Kunde inte komma åt %s."
+
+#: WWW/Library/Implementation/HTNews.c:2712
+#, c-format
+msgid "Can't read news info. News host %.20s responded: %.200s"
+msgstr "Kan inte läsa dikussionsinformation. Värden %.20s svarade %.200s"
+
+#: WWW/Library/Implementation/HTNews.c:2716
+#, c-format
+msgid "Can't read news info, empty response from host %s"
+msgstr "Kan inte läsa diskussionsinformation, tomt svar från värd %s"
+
+#.
+#. ** List available newsgroups. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2920
+msgid "Reading list of available newsgroups."
+msgstr "Läser lista över tillgängliga grupper."
+
+#: WWW/Library/Implementation/HTNews.c:2942
+msgid "Reading list of articles in newsgroup."
+msgstr "Läser lista över artiklar i grupp."
+
+#.
+#. ** Get an article from a news group. - FM
+#.
+#: WWW/Library/Implementation/HTNews.c:2948
+msgid "Reading news article."
+msgstr "Läser artikel."
+
+#: WWW/Library/Implementation/HTNews.c:2978
+msgid "Sorry, could not load requested news."
+msgstr "Kunde inte hämta begärda artiklar."
+
+#: WWW/Library/Implementation/HTTCP.c:1233
+msgid "Address has invalid port"
+msgstr "Adressen har en ogiltig port"
+
+#: WWW/Library/Implementation/HTTCP.c:1336
+msgid "Address length looks invalid"
+msgstr "Adresslängden verkar ogiltig"
+
+#: WWW/Library/Implementation/HTTCP.c:1574 WWW/Library/Implementation/HTTCP.c:1592
+#, c-format
+msgid "Unable to locate remote host %s."
+msgstr "Kan inte hitta värd %s."
+
+#. Not HTProgress, so warning won't be overwritten
+#. * immediately; but not HTAlert, because typically
+#. * there will be other alerts from the callers. - kw
+#.
+#: WWW/Library/Implementation/HTTCP.c:1589 WWW/Library/Implementation/HTTelnet.c:103
+#, c-format
+msgid "Invalid hostname %s"
+msgstr "Ogiltigt värdnamn %s"
+
+#: WWW/Library/Implementation/HTTCP.c:1603
+#, c-format
+msgid "Making %s connection to %s"
+msgstr "Kopplar upp %s-anslutning till %s"
+
+#: WWW/Library/Implementation/HTTCP.c:1619
+#, c-format
+msgid "socket failed: family %d addr %s port %s."
+msgstr "uttag misslyckades: familj %d adress %s port %s."
+
+#: WWW/Library/Implementation/HTTCP.c:1628
+msgid "socket failed."
+msgstr "uttag misslyckades."
+
+#: WWW/Library/Implementation/HTTCP.c:1648
+msgid "Could not make connection non-blocking."
+msgstr "Kunde inte koppla upp icke-blockerande anslutning."
+
+#: WWW/Library/Implementation/HTTCP.c:1717
+msgid "Connection failed (too many retries)."
+msgstr "Uppkoppling misslyckades (för många försök)."
+
+#: WWW/Library/Implementation/HTTCP.c:1910
+msgid "Could not restore socket to blocking."
+msgstr "Kunde inte återställa blockering i uttag."
+
+#: WWW/Library/Implementation/HTTCP.c:1976
+msgid "Socket read failed for 180,000 tries."
+msgstr "Läsning från uttag misslyckades 180.000 gånger."
+
+#: WWW/Library/Implementation/HTTP.c:466
+msgid "This client does not contain support for HTTPS URLs."
+msgstr "Denna klient innehåller inte stöd för HTTPS-adresser."
+
+#: WWW/Library/Implementation/HTTP.c:491
+msgid "Unable to connect to remote host."
+msgstr "Kan inte ansluta till värd."
+
+#: WWW/Library/Implementation/HTTP.c:1005
+msgid "Sending HTTP request."
+msgstr "Sänder HTTP-fråga."
+
+#: WWW/Library/Implementation/HTTP.c:1039
+msgid "Unexpected network write error; connection aborted."
+msgstr "Oväntat skrivfel på nätverket; uppkopplingen avbröts."
+
+#: WWW/Library/Implementation/HTTP.c:1045
+msgid "HTTP request sent; waiting for response."
+msgstr "HTTP-fråga sänd; väntar på svar."
+
+#: WWW/Library/Implementation/HTTP.c:1109
+msgid "Unexpected network read error; connection aborted."
+msgstr "Oväntat läsfel på nätverket; uppkopplingen avbröts."
+
+#.
+#. ** HTTP/1.1 Informational statuses.
+#. ** 100 Continue.
+#. ** 101 Switching Protocols.
+#. ** > 101 is unknown.
+#. ** We should never get these, and they have only
+#. ** the status line and possibly other headers,
+#. ** so we'll deal with them by showing the full
+#. ** header to the user as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1305
+msgid "Got unexpected Informational Status."
+msgstr "Fick oväntad informationsstatus."
+
+#.
+#. * Reset Content. The server has fulfilled the
+#. * request but nothing is returned and we should
+#. * reset any form content. We'll instruct the
+#. * user to do that, and restore the current
+#. * document. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1340
+msgid "Request fulfilled. Reset Content."
+msgstr "Frågan slutförd. Nollställ innehåll."
+
+#. Not Modified
+#.
+#. * We didn't send an "If-Modified-Since" header,
+#. * so this status is inappropriate. We'll deal
+#. * with it by showing the full header to the user
+#. * as text/plain. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1459
+msgid "Got unexpected 304 Not Modified status."
+msgstr "Fick oväntad \"ej modifierad\"-(304)-status."
+
+#: WWW/Library/Implementation/HTTP.c:1526
+msgid "Redirection of POST content requires user approval."
+msgstr "Omdirigering av POST-innehåll kräver användarens samtycke."
+
+#: WWW/Library/Implementation/HTTP.c:1541
+msgid "Have POST content. Treating Permanent Redirection as Temporary.\n"
+msgstr "Har POST-innehåll. Behandlar permanent omdirigering som temporär.\n"
+
+#: WWW/Library/Implementation/HTTP.c:1586
+msgid "Retrying with access authorization information."
+msgstr "Försöker igen med auktoriseringsinformation."
+
+#: WWW/Library/Implementation/HTTP.c:1598
+msgid "Show the 401 message body?"
+msgstr "Visa kroppen för 401-meddelandet?"
+
+#: WWW/Library/Implementation/HTTP.c:1643
+msgid "Show the 407 message body?"
+msgstr "Via kroppen för 407-meddelandet?"
+
+#.
+#. ** Bad or unknown server_status number.
+#. ** Take a chance and hope there is
+#. ** something to display. - FM
+#.
+#: WWW/Library/Implementation/HTTP.c:1748
+msgid "Unknown status reply from server!"
+msgstr "Okänt statussvar från server!"
+
+#: WWW/Library/Implementation/HTTelnet.c:101
+#, c-format
+msgid "remote %s session:"
+msgstr "fjärr-%s-session:"
+
+#: WWW/Library/Implementation/HTWAIS.c:161
+msgid "Could not connect to WAIS server."
+msgstr "Kunde inte ansluta till WAIS-server."
+
+#: WWW/Library/Implementation/HTWAIS.c:170
+msgid "Could not open WAIS connection for reading."
+msgstr "Kunde inte öppna WAIS-anslutning för läsning."
+
+#: WWW/Library/Implementation/HTWAIS.c:194
+msgid "Diagnostic code is "
+msgstr "Diagnostisk kod är "
+
+#: WWW/Library/Implementation/HTWAIS.c:463
+msgid "Index "
+msgstr "Index "
+
+#: WWW/Library/Implementation/HTWAIS.c:467
+#, c-format
+msgid " contains the following %d item%s relevant to \""
+msgstr " innehåller följande %d%s poster relevanta för \""
+
+#: WWW/Library/Implementation/HTWAIS.c:475
+msgid "The first figure after each entry is its relative score, "
+msgstr "Den första siffran efter varje post är dess relativa poäng, "
+
+#: WWW/Library/Implementation/HTWAIS.c:476
+msgid "the second is the number of lines in the item."
+msgstr "den andra är antalet rader i posten"
+
+#: WWW/Library/Implementation/HTWAIS.c:517
+msgid " (bad file name)"
+msgstr " (felaktigt filnamn)"
+
+#: WWW/Library/Implementation/HTWAIS.c:542
+msgid "(bad doc id)"
+msgstr "(felaktig dokument-id)"
+
+#: WWW/Library/Implementation/HTWAIS.c:558
+msgid "(Short Header record, can't display)"
+msgstr "(Kort huvudpost, kan inte visa)"
+
+#: WWW/Library/Implementation/HTWAIS.c:565
+msgid ""
+"\n"
+"Long Header record, can't display\n"
+msgstr ""
+"\n"
+"Lång huvudpost, kan inte visa\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:572
+msgid ""
+"\n"
+"Text record\n"
+msgstr ""
+"\n"
+"Textfält\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:581
+msgid ""
+"\n"
+"Headline record, can't display\n"
+msgstr ""
+"\n"
+"Rubrikfält, kan inte visa\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:589
+msgid ""
+"\n"
+"Code record, can't display\n"
+msgstr ""
+"\n"
+"Kodfält, kan inte visa\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:691
+msgid "Syntax error in WAIS URL"
+msgstr "Syntaxfel i WAIS-adress"
+
+#: WWW/Library/Implementation/HTWAIS.c:761
+msgid " (WAIS Index)"
+msgstr " (WAIS-index)"
+
+#: WWW/Library/Implementation/HTWAIS.c:768
+msgid "WAIS Index: "
+msgstr "WAIS-index: "
+
+#: WWW/Library/Implementation/HTWAIS.c:774
+msgid "This is a link for searching the "
+msgstr "Detta är en länk för att söka i "
+
+#: WWW/Library/Implementation/HTWAIS.c:778
+msgid " WAIS Index.\n"
+msgstr " WAIS-index.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:805
+msgid ""
+"\n"
+"Enter the 's'earch command and then specify search words.\n"
+msgstr ""
+"\n"
+"Välj S=sök och ange sedan sökord.\n"
+
+#: WWW/Library/Implementation/HTWAIS.c:827
+msgid " (in "
+msgstr " (i "
+
+#: WWW/Library/Implementation/HTWAIS.c:836
+msgid "WAIS Search of \""
+msgstr "WAIS-sökning efter \""
+
+#: WWW/Library/Implementation/HTWAIS.c:840
+msgid "\" in: "
+msgstr "\" i: "
+
+#: WWW/Library/Implementation/HTWAIS.c:855
+msgid "HTWAIS: Request too large."
+msgstr "HTWAIS: Fråga för stor."
+
+#: WWW/Library/Implementation/HTWAIS.c:864
+msgid "Searching WAIS database..."
+msgstr "Söker WAIS-databas..."
+
+#: WWW/Library/Implementation/HTWAIS.c:874
+msgid "Search interrupted."
+msgstr "Sökning avbruten."
+
+#: WWW/Library/Implementation/HTWAIS.c:924
+msgid "Can't convert format of WAIS document"
+msgstr "Kan inte konvertera WAIS-dokumentformat"
+
+#: WWW/Library/Implementation/HTWAIS.c:968
+msgid "HTWAIS: Request too long."
+msgstr "HTWAIS: Fråga för lång."
+
+#.
+#. ** Actually do the transaction given by request_message.
+#.
+#: WWW/Library/Implementation/HTWAIS.c:982
+msgid "Fetching WAIS document..."
+msgstr "Hämtar WAIS-dokument..."
+
+#. display_search_response(target, retrieval_response,
+#. wais_database, keywords);
+#: WWW/Library/Implementation/HTWAIS.c:1021
+msgid "No text was returned!\n"
+msgstr "Ingen text returnerades!\n"
+
+#: WWW/Library/Implementation/HTWSRC.c:287
+msgid " NOT GIVEN in source file; "
+msgstr " EJ ANGIVEN i källfilen; "
+
+#: WWW/Library/Implementation/HTWSRC.c:311
+msgid " WAIS source file"
+msgstr " WAIS-källfil"
+
+#: WWW/Library/Implementation/HTWSRC.c:318
+msgid " description"
+msgstr " beskrivning"
+
+#: WWW/Library/Implementation/HTWSRC.c:328
+msgid "Access links"
+msgstr "Åtkomstlänkar"
+
+#: WWW/Library/Implementation/HTWSRC.c:345
+msgid "Direct access"
+msgstr "Direktåtkomst"
+
+#. * Proxy will be used if defined, so let user know that - FM *
+#: WWW/Library/Implementation/HTWSRC.c:348
+msgid " (or via proxy server, if defined)"
+msgstr " (eller via mellanserver, om angiven)"
+
+#: WWW/Library/Implementation/HTWSRC.c:363
+msgid "Maintainer"
+msgstr "Ansvarig"
+
+#: WWW/Library/Implementation/HTWSRC.c:371
+msgid "Host"
+msgstr "Värd"
+
+#: src/GridText.c:607
+msgid "Memory exhausted, display interrupted!"
+msgstr "Minnet slut, visning avbruten!"
+
+#: src/GridText.c:612
+msgid "Memory exhausted, will interrupt transfer!"
+msgstr "Minnet slut, avbryter överföring!"
+
+#: src/GridText.c:3395
+msgid " *** MEMORY EXHAUSTED ***"
+msgstr " *** MINNET SLUT ***"
+
+#: src/GridText.c:5733 src/GridText.c:5740 src/LYList.c:258
+msgid "unknown field or link"
+msgstr "okänt fält eller länk"
+
+#: src/GridText.c:5749
+msgid "text entry field"
+msgstr "textinmatningsfält"
+
+#: src/GridText.c:5752
+msgid "password entry field"
+msgstr "lösenordsinmatningsfält"
+
+#: src/GridText.c:5755
+msgid "checkbox"
+msgstr "kryssruta"
+
+#: src/GridText.c:5758
+msgid "radio button"
+msgstr "radioknapp"
+
+#: src/GridText.c:5761
+msgid "submit button"
+msgstr "sändknapp"
+
+#: src/GridText.c:5764
+msgid "reset button"
+msgstr "nollställningsknapp"
+
+#: src/GridText.c:5767
+msgid "popup menu"
+msgstr "popup-meny"
+
+#: src/GridText.c:5770
+msgid "hidden form field"
+msgstr "dolt formulärfält"
+
+#: src/GridText.c:5773
+msgid "text entry area"
+msgstr "textinmatningsområde"
+
+#: src/GridText.c:5776
+msgid "range entry field"
+msgstr "områdesinmatningsfält"
+
+#: src/GridText.c:5779
+msgid "file entry field"
+msgstr "filinmatningsfält"
+
+#: src/GridText.c:5782
+msgid "text-submit field"
+msgstr "textsändfält"
+
+#: src/GridText.c:5785
+msgid "image-submit button"
+msgstr "bildsändfält"
+
+#: src/GridText.c:5788
+msgid "keygen field"
+msgstr "nyckelgenerering misslyckades"
+
+#: src/GridText.c:5791
+msgid "unknown form field"
+msgstr "okänt formulärfält"
+
+#. We can't open the file, what do we do?
+#: src/GridText.c:10348
+msgid "Can't open file for uploading"
+msgstr "Kan inte öppna fil för sändning"
+
+#. We got an error reading the file, what do we do?
+#: src/GridText.c:10359
+msgid "Short read from file, problem?"
+msgstr "Filen tog slut tidigt, problem?"
+
+#: src/GridText.c:10721
+#, c-format
+msgid "Submitting %s"
+msgstr "Skickar %s"
+
+#. ugliness has happened; inform user and do the best we can
+#: src/GridText.c:11887
+msgid "Hang Detect: TextAnchor struct corrupted - suggest aborting!"
+msgstr "Hängning upptäckt: TextAnchor-struktur förstörd - föreslår avbrott!"
+
+#. don't show previous state
+#: src/GridText.c:12092
+msgid "Wrap lines to fit displayed area?"
+msgstr "Ombryt rader så att de passar i visat fält?"
+
+#: src/GridText.c:12144
+msgid "Very long lines have been wrapped!"
+msgstr "Mycket långa rader har ombrutits!"
+
+#: src/GridText.c:12591
+msgid "Very long lines have been truncated!"
+msgstr "mycket långa rader har trunkerats!"
+
+#: src/HTAlert.c:155 src/LYShowInfo.c:318
+msgid "bytes"
+msgstr "byte"
+
+#: src/HTAlert.c:156
+msgid "KB"
+msgstr "KB"
+
+#: src/HTAlert.c:255
+#, c-format
+msgid "Read %s of %s of data"
+msgstr "Läste %s av %s data"
+
+#: src/HTAlert.c:257
+#, c-format
+msgid "Read %s of data"
+msgstr "Läste %s data"
+
+#: src/HTAlert.c:262
+#, c-format
+msgid ", %s/sec"
+msgstr ", %s/s"
+
+#: src/HTAlert.c:269
+#, c-format
+msgid " (stalled for %ld sec)"
+msgstr " (avstannad i %lds)"
+
+#: src/HTAlert.c:271
+#, c-format
+msgid ", ETA %ld sec"
+msgstr ", %lds kvar"
+
+#: src/HTAlert.c:277
+msgid " (Press 'z' to abort)"
+msgstr " (\"z\" avbryter)"
+
+#. Meta-note: don't move the following note from its place right
+#. in front of the first gettext(). As it is now, it should
+#. automatically appear in generated lynx.pot files. - kw
+#.
+#. NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+#. * will take the first byte of the translation as a positive response
+#. * to Yes/No questions. If you provide a translation for "no", lynx
+#. * will take the first byte of the translation as a negative response
+#. * to Yes/No questions. For both, lynx will also try to show the
+#. * first byte in the prompt as a character, instead of (y) or (n),
+#. * respectively. This will not work right for multibyte charsets!
+#. * Don't translate "yes" and "no" for CJK character sets (or translate
+#. * them to "yes" and "no"). For a translation using UTF-8, don't
+#. * translate if the translation would begin with anything but a 7-bit
+#. * (US_ASCII) character. That also means do not translate if the
+#. * translation would begin with anything but a 7-bit character, if
+#. * you use a single-byte character encoding (a charset like ISO-8859-n)
+#. * but anticipate that the message catalog may be used re-encoded in
+#. * UTF-8 form.
+#. * For translations using other character sets, you may also wish to
+#. * leave "yes" and "no" untranslated, if using (y) and (n) is the
+#. * preferred behavior.
+#. * Lynx will also accept y Y n N as responses unless there is a conflict
+#. * with the first letter of the "yes" or "no" translation.
+#.
+#: src/HTAlert.c:334
+msgid "yes"
+msgstr "ja"
+
+#: src/HTAlert.c:335
+msgid "no"
+msgstr "nej"
+
+#: src/HTML.c:6342
+msgid "Description:"
+msgstr "Beskrivning:"
+
+#: src/HTML.c:6347
+msgid "(none)"
+msgstr "(ingen)"
+
+#: src/HTML.c:6351
+msgid "Filepath:"
+msgstr "Sökväg:"
+
+#: src/HTML.c:6356
+msgid "(unknown)"
+msgstr "(okänd)"
+
+#: src/HTML.c:7804
+msgid "Document has only hidden links. Use the 'l'ist command."
+msgstr "Dokumentet innehåller endast dolda länkar. Använd \"l\"istkommandot."
+
+#: src/HTML.c:8328
+msgid "Source cache error - disk full?"
+msgstr "Källkodscachefel - disk full?"
+
+#: src/HTML.c:8341
+msgid "Source cache error - not enough memory!"
+msgstr "Källkodscachefel - minnet slut!"
+
+#: src/LYBookmark.c:166
+msgid ""
+" This file is an HTML representation of the X Mosaic hotlist file.\n"
+" Outdated or invalid links may be removed by using the\n"
+" remove bookmark command, it is usually the 'R' key but may have\n"
+" been remapped by you or your system administrator."
+msgstr ""
+" Denna fil är en HTML-representation av X Mosaics bokmärkesfil.\n"
+" Föråldrade eller ogiltiga länkar kan tas bort genom att använda\n"
+" kommandot radera bokmärke, vilket vanligtvis nås via tangenten \"R\",\n"
+" men som kan ha ändrats av dig eller din systemadministratör."
+
+#: src/LYBookmark.c:382
+msgid ""
+" You can delete links by the 'R' key<br>\n"
+"<ol>\n"
+msgstr ""
+" Du kan ta bort länkar med \"R\"-tangenten<br>\n"
+"<ol>\n"
+
+#: src/LYBookmark.c:385
+msgid ""
+" You can delete links using the remove bookmark command. It is usually\n"
+" the 'R' key but may have been remapped by you or your system\n"
+" administrator."
+msgstr ""
+" Du kan ta bort länkar med kommandot radera bokmärke, vilket vanligtvis\n"
+" nås via tangenten \"R\", men som kan ha ändrats av dig eller din\n"
+" systemadministratör."
+
+#: src/LYBookmark.c:389
+msgid ""
+" This file also may be edited with a standard text editor to delete\n"
+" outdated or invalid links, or to change their order."
+msgstr ""
+" Denna fil kan även redigeras med ett vanligt textredigeringsprogram för\n"
+" att ta bort föråldrade eller ogiltiga länkar, eller ändra den inbördes\n"
+" ordningen."
+
+#: src/LYBookmark.c:392
+msgid ""
+"Note: if you edit this file manually\n"
+" you should not change the format within the lines\n"
+" or add other HTML markup.\n"
+" Make sure any bookmark link is saved as a single line."
+msgstr ""
+"Obs: om du redigerar denna fil manuellt\n"
+" bör du inte ändra formatet på raderna,\n"
+" eller lägga till annan HTML-kod.\n"
+" Se till att alla bokmärkeslänkar lagras som enskilda rader."
+
+#: src/LYBookmark.c:683
+#, c-format
+msgid "File may be recoverable from %s during this session"
+msgstr "Filen kan kanske återskapas från %s under denna session"
+
+#.
+#. * Neither the path as given nor any components examined by
+#. * backing up were stat()able. - kw
+#.
+#: src/LYCgi.c:232
+msgid "Unable to access cgi script"
+msgstr "Kan inte nå cgi-skript"
+
+#: src/LYCgi.c:651 src/LYCgi.c:654
+msgid "Good Advice"
+msgstr "Gott råd"
+
+#: src/LYCgi.c:657
+msgid "An excellent http server for VMS is available via"
+msgstr "En utmärkt http-server för VMS är tillgänglig via"
+
+#: src/LYCgi.c:664
+msgid "this link"
+msgstr "denna länk"
+
+#: src/LYCgi.c:668
+msgid "It provides state of the art CGI script support.\n"
+msgstr "Den ger förstklassigt stöd för CGI-skript.\n"
+
+#: src/LYClean.c:108
+msgid "Exiting via interrupt:"
+msgstr "Avslutar via avbrott:"
+
+#: src/LYCookie.c:2659
+msgid "(from a previous session)"
+msgstr "(från en tidigare session)"
+
+#: src/LYCookie.c:2719
+msgid "Maximum Gobble Date:"
+msgstr "Maximalt ätdatum:"
+
+#: src/LYCookie.c:2764
+msgid "Internal"
+msgstr "Intern"
+
+#: src/LYCookie.c:2765
+msgid "cookie_domain_flag_set error, aborting program"
+msgstr "\"cookie_domain_flag_set\"-fel, avbryter programmet"
+
+#: src/LYCurses.c:936
+msgid "Terminal initialisation failed - unknown terminal type?"
+msgstr "Terminalinitiering misslyckades - okänd terminaltyp?"
+
+#: src/LYCurses.c:1328
+msgid "Terminal ="
+msgstr "Terminal ="
+
+#: src/LYCurses.c:1332
+msgid "You must use a vt100, 200, etc. terminal with this program."
+msgstr "Du måste använda en vt100-, -200-, etc. -terminal med detta program."
+
+#: src/LYCurses.c:1384
+msgid "Your Terminal type is unknown!"
+msgstr "Din terminaltyp är okänd!"
+
+#: src/LYCurses.c:1385
+msgid "Enter a terminal type:"
+msgstr "Ange en terminaltyp:"
+
+#: src/LYCurses.c:1398
+msgid "TERMINAL TYPE IS SET TO"
+msgstr "TERMINALTYP SATT TILL"
+
+#: src/LYCurses.c:1749
+#, c-format
+msgid ""
+"\n"
+"A Fatal error has occurred in %s Ver. %s\n"
+msgstr ""
+"\n"
+"Ett fatalt fel har uppstått i %s ver. %s\n"
+
+#: src/LYCurses.c:1751
+msgid ""
+"\n"
+"Please notify your system administrator to confirm a bug, and if\n"
+"confirmed, to notify the lynx-dev list. Bug reports should have concise\n"
+"descriptions of the command and/or URL which causes the problem, the\n"
+"operating system name with version number, the TCPIP implementation, the\n"
+"TRACEBACK if it can be captured, and any other relevant information.\n"
+msgstr ""
+"\n"
+"Kontakta din systemadministratör för att bekräfta ett programfel, och om\n"
+"det bekräftas, att notifiera lynx-dev-listan. Felrapporter bör ha en\n"
+"koncis beskrivning av kommandon och/eller webbadresser (URLar) som gör att\n"
+"felet uppstår, namn och versionsnummer på operativsystemet, använd TCP/IP-\n"
+"implementation, TRACEBACK om den kan fås, och all annan relevant information.\n"
+
+#: src/LYEdit.c:264
+msgid "Editor killed by signal"
+msgstr "Redigeringsprogram dödat av signal"
+
+#: src/LYEdit.c:266
+#, c-format
+msgid "Editor returned with error status, %s"
+msgstr "Redigeringsprogrammet gav felstatus %s"
+
+#: src/LYEdit.c:267
+msgid "reason unknown."
+msgstr "okänd anledning."
+
+#: src/LYDownload.c:520
+msgid "Downloaded link:"
+msgstr "Hämtad länk:"
+
+#: src/LYDownload.c:525
+msgid "Suggested file name:"
+msgstr "Föreslaget filnamn:"
+
+#: src/LYDownload.c:530
+msgid "Standard download options:"
+msgstr "Fördefinierade hämtalternativ:"
+
+#: src/LYDownload.c:531
+msgid "Download options:"
+msgstr "Hämtalternativ:"
+
+#: src/LYDownload.c:545
+msgid "Save to disk"
+msgstr "Spara på disk"
+
+#: src/LYDownload.c:547
+msgid "Save to disk disabled."
+msgstr "\"Spara på disk\" deaktiverad."
+
+#: src/LYDownload.c:551 src/LYPrint.c:1338
+msgid "Local additions:"
+msgstr "Lokala tillägg:"
+
+#: src/LYDownload.c:560 src/LYUpload.c:224
+msgid "No Name Given"
+msgstr "Inget namn har angetts"
+
+#: src/LYHistory.c:633
+msgid "You selected:"
+msgstr "Du valde:"
+
+#: src/LYHistory.c:657 src/LYHistory.c:905
+msgid "(no address)"
+msgstr "(ingen adress)"
+
+#: src/LYHistory.c:661
+msgid " (internal)"
+msgstr " (intern)"
+
+#: src/LYHistory.c:663
+msgid " (was internal)"
+msgstr " (var intern)"
+
+#: src/LYHistory.c:761
+msgid " (From History)"
+msgstr " (Från historik)"
+
+#: src/LYHistory.c:825
+msgid "You visited (POSTs, bookmark, menu and list files excluded):"
+msgstr "Du besökte (POST, bokmärkes-, meny- och listfiler ej medräknade):"
+
+#: src/LYHistory.c:1124
+msgid "(No messages yet)"
+msgstr "(Inga meddelanden ännu)"
+
+#: src/LYLeaks.c:78
+msgid "Invalid pointer detected."
+msgstr "Ogiltig pekare upptäckt."
+
+#: src/LYLeaks.c:80 src/LYLeaks.c:117
+msgid "Pointer:"
+msgstr "Pekare:"
+
+#: src/LYLeaks.c:91 src/LYLeaks.c:98 src/LYLeaks.c:136
+msgid "FileName:"
+msgstr "Filnamn:"
+
+#: src/LYLeaks.c:94 src/LYLeaks.c:101 src/LYLeaks.c:139 src/LYLeaks.c:150
+msgid "LineCount:"
+msgstr "Radnummer:"
+
+#: src/LYLeaks.c:115
+msgid "Memory leak detected."
+msgstr "Minnesläcka upptäckt."
+
+#: src/LYLeaks.c:120
+msgid "Contains:"
+msgstr "Innehåller:"
+
+#: src/LYLeaks.c:133
+msgid "ByteSize:"
+msgstr "Bytestorlek:"
+
+#: src/LYLeaks.c:147
+msgid "realloced:"
+msgstr "omallokerad:"
+
+#: src/LYLeaks.c:170
+msgid "Total memory leakage this run:"
+msgstr "Totalt minnesläckage denna körning:"
+
+#: src/LYList.c:91
+msgid "References in "
+msgstr "Referenser i "
+
+#: src/LYList.c:92
+msgid "this document:"
+msgstr "detta dokument:"
+
+#: src/LYList.c:98
+msgid "Visible links:"
+msgstr "Besökta länkar:"
+
+#: src/LYList.c:199 src/LYList.c:319
+msgid "Hidden links:"
+msgstr "Dolda länkar:"
+
+#: src/LYList.c:267
+msgid "References"
+msgstr "Referenser"
+
+#: src/LYList.c:269
+msgid "Visible links"
+msgstr "Synliga länkar"
+
+#: src/LYLocal.c:267
+#, c-format
+msgid "Unable to get status of '%s'."
+msgstr "Kan inte ta status på \"%s\"."
+
+#: src/LYLocal.c:301
+msgid "The selected item is not a file or a directory! Request ignored."
+msgstr "Vald post är inte en fil eller en katalog! Begäran ignoreras."
+
+#: src/LYLocal.c:383
+#, c-format
+msgid "Unable to %s due to system error!"
+msgstr "Kan inte %s på grund av systemfel!"
+
+#. error return
+#: src/LYLocal.c:415
+#, c-format
+msgid "Probable failure to %s due to system error!"
+msgstr "Möjligt misslyckande i %s på grund av systemfel!"
+
+#: src/LYLocal.c:453
+#, c-format
+msgid "move %s to %s"
+msgstr "flytta %s till %s"
+
+#: src/LYLocal.c:475
+msgid "There is already a directory with that name! Request ignored."
+msgstr "Det finns redan en katalog med det namnet! Begäran ignoreras."
+
+#: src/LYLocal.c:477
+msgid "There is already a file with that name! Request ignored."
+msgstr "Det finns redan en fil med det namnet! Begäran ignoreras."
+
+#: src/LYLocal.c:479
+msgid "The specified name is already in use! Request ignored."
+msgstr "Angivet filnamn används redan! Begäran ignoreras."
+
+#: src/LYLocal.c:490
+msgid "Destination has different owner! Request denied."
+msgstr "Målet har annan ägare! Begäran avvisas."
+
+#: src/LYLocal.c:493
+msgid "Destination is not a valid directory! Request denied."
+msgstr "Målet är inte en giltig katalog! Begäran avvisas."
+
+#: src/LYLocal.c:516
+msgid "Remove all tagged files and directories?"
+msgstr "Ta bort alla markerade filer och kataloger?"
+
+#: src/LYLocal.c:537
+#, c-format
+msgid "remove %s"
+msgstr "ta bort %s"
+
+#: src/LYLocal.c:580
+msgid "Enter new location for tagged items: "
+msgstr "Ange ny plats för markerade poster: "
+
+#: src/LYLocal.c:649
+msgid "Path too long"
+msgstr "Sökväg för lång"
+
+#: src/LYLocal.c:680
+msgid "Source and destination are the same location - request ignored!"
+msgstr "Källa och mål är samma - begäran ignoreras!"
+
+#: src/LYLocal.c:738
+msgid "Enter new name for directory: "
+msgstr "Ange nytt namn för katalog: "
+
+#: src/LYLocal.c:740
+msgid "Enter new name for file: "
+msgstr "Ange nytt namn för fil: "
+
+#: src/LYLocal.c:751
+msgid "Illegal character (path-separator) found! Request ignored."
+msgstr "Felaktigt tecken (sökvägsavdelare) funnen! Begäran ignorerad."
+
+#: src/LYLocal.c:800
+msgid "Enter new location for directory: "
+msgstr "Ange ny plats för katalog: "
+
+#: src/LYLocal.c:802
+msgid "Enter new location for file: "
+msgstr "Ange ny plats för fil: "
+
+#: src/LYLocal.c:827
+msgid "Unexpected failure - unable to find trailing path separator"
+msgstr "Oväntat misslyckande - kan inte hitta avslutande sökvägsavdelare"
+
+#: src/LYLocal.c:847
+msgid "Source and destination are the same location! Request ignored!"
+msgstr "Källa och mål är samma plats! Begäran ignorerad."
+
+#: src/LYLocal.c:894
+msgid "Modify name, location, or permission (n, l, or p): "
+msgstr "Ända N=namn, L=plats eller P=behörighet? "
+
+#: src/LYLocal.c:896
+msgid "Modify name or location (n or l): "
+msgstr "Ändra N=namn eller L=plats? "
+
+#.
+#. * Code for changing ownership needed here.
+#.
+#: src/LYLocal.c:925
+msgid "This feature not yet implemented!"
+msgstr "Denna funktion är ännu ej implementerad!"
+
+#: src/LYLocal.c:943
+msgid "Enter name of file to create: "
+msgstr "Ange namn på fil att skapa: "
+
+#: src/LYLocal.c:951 src/LYLocal.c:999
+msgid "Illegal redirection \"//\" found! Request ignored."
+msgstr "Felaktig omdirigering \"//\" funnen! Begäran ignoreras."
+
+#: src/LYLocal.c:966
+#, c-format
+msgid "create %s"
+msgstr "skapa %s"
+
+#: src/LYLocal.c:991
+msgid "Enter name for new directory: "
+msgstr "Ange namn på ny katalog: "
+
+#: src/LYLocal.c:1042
+msgid "Create file or directory (f or d): "
+msgstr "Skapa F=fil eller D=katalog? "
+
+#: src/LYLocal.c:1083
+#, c-format
+msgid "Remove '%s' and all of its contents?"
+msgstr "Ta bort \"%s\" och allt dess innehåll?"
+
+#: src/LYLocal.c:1086
+msgid "Remove directory and all of its contents?"
+msgstr "Ta bort katalog och allt dess innehåll?"
+
+#: src/LYLocal.c:1090
+#, c-format
+msgid "Remove file '%s'?"
+msgstr "Ta bort fil \"%s\"?"
+
+#: src/LYLocal.c:1092
+msgid "Remove file?"
+msgstr "Ta bort fil?"
+
+#: src/LYLocal.c:1097
+#, c-format
+msgid "Remove symbolic link '%s'?"
+msgstr "Ta bort symbolisk länk \"%s\"?"
+
+#: src/LYLocal.c:1099
+msgid "Remove symbolic link?"
+msgstr "Ta bort symbolisk länk?"
+
+#: src/LYLocal.c:1190
+msgid "Sorry, don't know how to permit non-UNIX files yet."
+msgstr "Tyvärr, kan inte ändra behörighet för icke-Unixfiler ännu."
+
+#: src/LYLocal.c:1220
+msgid "Unable to open permit options file"
+msgstr "Kan inte öppna behörighetsalternativfil"
+
+#: src/LYLocal.c:1247
+msgid "Specify permissions below:"
+msgstr "Ange behörighet nedan:"
+
+#: src/LYLocal.c:1248 src/LYShowInfo.c:196
+msgid "Owner:"
+msgstr "Ägare:"
+
+#: src/LYLocal.c:1264
+msgid "Group"
+msgstr "Grupp"
+
+#: src/LYLocal.c:1280
+msgid "Others:"
+msgstr "Övriga:"
+
+#: src/LYLocal.c:1298
+msgid "form to permit"
+msgstr "formulär för att ändra behörighet för"
+
+#: src/LYLocal.c:1396
+msgid "Invalid mode format."
+msgstr "Ogiltigt format på behörighet."
+
+#: src/LYLocal.c:1400
+msgid "Invalid syntax format."
+msgstr "Ogiltig syntaxformat."
+
+#: src/LYLocal.c:1575
+msgid "NULL URL pointer"
+msgstr "URL-pekare är NULL"
+
+#: src/LYLocal.c:1670
+msgid "Warning! UUDecoded file will exist in the directory you started Lynx."
+msgstr "Varning! UU-avkodad fil lagras i katalogen du startade Lynx från."
+
+#: src/LYLocal.c:1782
+#, c-format
+msgid "Executing %s "
+msgstr "Kör %s "
+
+#: src/LYLocal.c:1785
+msgid "Executing system command. This might take a while."
+msgstr "Kör systemkommando. Detta kan ta en stund."
+
+#: src/LYLocal.c:1831
+msgid "Unable to open file management menu file."
+msgstr "Kan inte öppna filhanteringsmenyfil."
+
+#: src/LYLocal.c:1862
+msgid "Current directory:"
+msgstr "Aktuell katalog:"
+
+#: src/LYLocal.c:1865 src/LYLocal.c:1883
+msgid "Current selection:"
+msgstr "Aktuell markering:"
+
+#: src/LYLocal.c:1869
+msgid "Nothing currently selected."
+msgstr "Ingenting har markerats."
+
+#: src/LYLocal.c:1884
+msgid "tagged item:"
+msgstr "markerad post:"
+
+#: src/LYLocal.c:1884
+msgid "tagged items:"
+msgstr "markerade poster:"
+
+#: src/LYLocal.c:1983 src/LYLocal.c:1994
+msgid "Illegal filename; request ignored."
+msgstr "Ogiltigt filnamn; begäran ignorerad."
+
+#: src/LYLocal.c:2137
+msgid "The selected item is not a directory! Request ignored."
+msgstr "Vald post är inte en katalog! Begäran ignorerad."
+
+#. directory not writable
+#: src/LYLocal.c:2141
+msgid "Install in the selected directory not permitted."
+msgstr "Installation i vald katalog ej tillåten."
+
+#: src/LYLocal.c:2146
+msgid "Just a moment, ..."
+msgstr "Ett ögonblick, ..."
+
+#: src/LYLocal.c:2163
+msgid "Error buiding install args"
+msgstr "Fel vid uppbyggning av installationsflaggor"
+
+#: src/LYLocal.c:2178 src/LYLocal.c:2210
+#, c-format
+msgid "Source and target are the same: %s"
+msgstr "Källa och mål är samma: %s"
+
+#: src/LYLocal.c:2188 src/LYLocal.c:2220
+#, c-format
+msgid "Already in target directory: %s"
+msgstr "Redan i målkatalog: %s"
+
+#: src/LYLocal.c:2238
+msgid "Installation complete"
+msgstr "Installation färdig"
+
+#: src/LYLocal.c:2427
+msgid "Temporary URL or list would be too long."
+msgstr "Temporär adress eller lista skulle vara för lång."
+
+#: src/LYMail.c:503
+msgid "Sending"
+msgstr "Skickar"
+
+#: src/LYMail.c:989
+#, c-format
+msgid "The link %s :?: %s \n"
+msgstr "Länken %s :?: %s \n"
+
+#: src/LYMail.c:991
+#, c-format
+msgid "called \"%s\"\n"
+msgstr "anropade \"%s\"\n"
+
+#: src/LYMail.c:992
+#, c-format
+msgid "in the file \"%s\" called \"%s\"\n"
+msgstr "i filen \"%s\" anropade \"%s\"\n"
+
+#: src/LYMail.c:993
+msgid "was requested but was not available."
+msgstr "efterfrågades men var inte tillgänglig."
+
+#: src/LYMail.c:994
+msgid "Thought you might want to know."
+msgstr "Tänkte att du kanske ville veta."
+
+#: src/LYMail.c:996
+msgid "This message was automatically generated by"
+msgstr "Detta meddelande automatgenererades av"
+
+#: src/LYMain.c:897
+msgid "No Winsock found, sorry."
+msgstr "Ingen Winsock hittades, ursäkta."
+
+#: src/LYMain.c:1103
+msgid "You MUST define a valid TMP or TEMP area!\n"
+msgstr "Du MÅSTE ange ett giltigt TMP- eller TEMP-område!\n"
+
+#: src/LYMain.c:1156 src/LYMainLoop.c:5117
+msgid "No such directory"
+msgstr "Katalogen finns ej"
+
+#: src/LYMain.c:1378
+#, c-format
+msgid ""
+"\n"
+"Configuration file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Konfigurationsfil %s ej tillgänglig.\n"
+"\n"
+
+#: src/LYMain.c:1388
+msgid ""
+"\n"
+"Lynx character sets not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynxteckenuppsättningar ej deklarerade.\n"
+"\n"
+
+#: src/LYMain.c:1417
+msgid ""
+"\n"
+"Lynx edit map not declared.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynxredigeringskarta ej deklarerad.\n"
+"\n"
+
+#: src/LYMain.c:1446
+#, c-format
+msgid ""
+"\n"
+"Lynx file %s is not available.\n"
+"\n"
+msgstr ""
+"\n"
+"Lynxfil %s ej tillgänglig.\n"
+"\n"
+
+#: src/LYMain.c:1704
+msgid "Warning:"
+msgstr "Varning:"
+
+#: src/LYMain.c:2247
+msgid "persistent cookies state will be changed in next session only."
+msgstr "varaktiga kakinställningar ändras endast i nästa session."
+
+#: src/LYMain.c:2477 src/LYMain.c:2525
+#, c-format
+msgid "Lynx: ignoring unrecognized charset=%s\n"
+msgstr "Lynx: ignorerar okänd teckenuppsättning %s\n"
+
+#: src/LYMain.c:3047
+#, c-format
+msgid "%s Version %s (%s)\n"
+msgstr "%s version %s (%s)\n"
+
+#: src/LYMain.c:3072
+#, c-format
+msgid "Built on %s %s %s\n"
+msgstr "Byggd %s %s %s\n"
+
+#: src/LYMain.c:3077
+msgid "Copyrights held by the University of Kansas, CERN, and other contributors.\n"
+msgstr "Upphovsrätten ägs av University of Kansas, CERN, och andra bidragslämnare.\n"
+
+#: src/LYMain.c:3079
+msgid "Distributed under the GNU General Public License.\n"
+msgstr "Distribuerad enligt GNU General Public License.\n"
+
+#: src/LYMain.c:3081
+msgid ""
+"See http://lynx.browser.org/ and the online help for more information.\n"
+"\n"
+msgstr ""
+"Se http://lynx.browser.org/ och direkthjälpen för ytterligare information.\n"
+"\n"
+
+#: src/LYMain.c:3800
+#, c-format
+msgid "USAGE: %s [options] [file]\n"
+msgstr "ANVÄNDNING: %s [flaggor] [fil]\n"
+
+#: src/LYMain.c:3801
+msgid "Options are:\n"
+msgstr "Flaggorna är:\n"
+
+#: src/LYMain.c:4060
+#, c-format
+msgid "%s: Invalid Option: %s\n"
+msgstr "%s: Okänd flagga: %s\n"
+
+#: src/LYMainLoop.c:512
+#, c-format
+msgid "Internal error: Invalid mouse link %d!"
+msgstr "Internt fel: Ogiltig muslänk %d!"
+
+#.
+#. * Make a name for this new URL.
+#.
+#: src/LYMainLoop.c:625 src/LYMainLoop.c:5139
+msgid "A URL specified by the user"
+msgstr "En adress angiven av användaren"
+
+#: src/LYMainLoop.c:1114
+msgid "Enctype multipart/form-data not yet supported! Cannot submit."
+msgstr "Kodningen multiport/form-data stöds inte ännu! Kan inte skicka."
+
+#.
+#. * Make a name for this help file.
+#.
+#: src/LYMainLoop.c:3097
+msgid "Help Screen"
+msgstr "Hjälpskärm"
+
+#: src/LYMainLoop.c:3231
+msgid "System Index"
+msgstr "Systemindex"
+
+#: src/LYMainLoop.c:3611 src/LYMainLoop.c:5347
+msgid "Entry into main screen"
+msgstr "Ingång till huvudskärm"
+
+#: src/LYMainLoop.c:3897
+msgid "No next document present"
+msgstr "Det finns inget nästa dokument"
+
+#: src/LYMainLoop.c:4206
+msgid "charset for this document specified explicitly, sorry..."
+msgstr "teckenuppsättning för detta dokumentet explicit deklarerat, ursäkta..."
+
+#: src/LYMainLoop.c:5093
+msgid "cd to:"
+msgstr "byt katalog till:"
+
+#: src/LYMainLoop.c:5120
+msgid "A component of path is not a directory"
+msgstr "En del av sökvägen är inte en katalog"
+
+#: src/LYMainLoop.c:5123
+msgid "failed to change directory"
+msgstr "lyckades inte byta katalog"
+
+#: src/LYMainLoop.c:6291
+msgid "Reparsing document under current settings..."
+msgstr "Tolkar om dokumentet med aktuella inställningar..."
+
+#: src/LYMainLoop.c:6579 src/LYMainLoop.c:6583
+#, c-format
+msgid "Fatal error - could not open output file %s\n"
+msgstr "Fatalt fel - kunde inte öppna utdatafil %s\n"
+
+#: src/LYMainLoop.c:7719 src/LYMainLoop.c:7892
+msgid "-index-"
+msgstr "-index-"
+
+#: src/LYMainLoop.c:7829
+msgid "lynx: Can't access startfile"
+msgstr "lynx: Kan inte komma åt startfil"
+
+#: src/LYMainLoop.c:7842
+msgid "lynx: Start file could not be found or is not text/html or text/plain"
+msgstr "lynx: Startfilen hittades inte eller är varken text/html eller text/plain"
+
+#: src/LYMainLoop.c:7843
+msgid " Exiting..."
+msgstr " Avslutar..."
+
+#: src/LYMainLoop.c:7886
+msgid "-more-"
+msgstr "-mer-"
+
+#. Enable scrolling.
+#: src/LYNews.c:203
+msgid "You will be posting to:"
+msgstr "Du kommer att skicka till:"
+
+#.
+#. * Get the mail address for the From header,
+#. * offering personal_mail_address as default.
+#.
+#: src/LYNews.c:212
+msgid ""
+"\n"
+"\n"
+" Please provide your mail address for the From: header\n"
+msgstr ""
+"\n"
+"\n"
+" Ange din e-postadress för avsändarfältet\n"
+
+#.
+#. * Get the Subject header, offering the current
+#. * document's title as the default if this is a
+#. * followup rather than a new post. - FM
+#.
+#: src/LYNews.c:230
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Subject: header\n"
+msgstr ""
+"\n"
+"\n"
+" Ange eller redigera ärenderaden\n"
+
+#: src/LYNews.c:322
+msgid ""
+"\n"
+"\n"
+" Please provide or edit the Organization: header\n"
+msgstr ""
+"\n"
+"\n"
+" Ange eller redigera organisationsfältet\n"
+
+#.
+#. * Use the built in line editior.
+#.
+#: src/LYNews.c:379
+msgid ""
+"\n"
+"\n"
+" Please enter your message below."
+msgstr ""
+"\n"
+"\n"
+" Skriv ditt inlägg nedan."
+
+#: src/LYNews.c:425
+msgid "Message has no original text!"
+msgstr "Inlägget har ingen ursprunglig text!"
+
+#: src/LYOptions.c:743
+msgid "review/edit B)ookmarks files"
+msgstr "se/redigera B)okmärkesfiler"
+
+#: src/LYOptions.c:745
+msgid "B)ookmark file: "
+msgstr "B)okmärkesfil: "
+
+#: src/LYOptions.c:2507 src/LYOptions.c:2531
+#, c-format
+msgid "Use %s to invoke the Options menu!"
+msgstr "Använd %s för att nå alternativmenyn!"
+
+#: src/LYOptions.c:3208
+msgid "General Preferences"
+msgstr "Allmänna inställningar"
+
+#. ***************************************************************
+#. User Mode: SELECT
+#: src/LYOptions.c:3212
+msgid "User mode"
+msgstr "Användarläge"
+
+#. Editor: INPUT
+#: src/LYOptions.c:3218
+msgid "Editor"
+msgstr "Redigeringsprogram"
+
+#. Search Type: SELECT
+#: src/LYOptions.c:3223
+msgid "Type of Search"
+msgstr "Söktyp"
+
+#. Cookies: SELECT
+#: src/LYOptions.c:3229
+msgid "Cookies"
+msgstr "Kakor"
+
+#: src/LYOptions.c:3243
+msgid "Keyboard Input"
+msgstr "Tangentbordsindata"
+
+#. ***************************************************************
+#. Keypad Mode: SELECT
+#: src/LYOptions.c:3247
+msgid "Keypad mode"
+msgstr "Numeriskt tangentbord"
+
+#. Emacs keys: ON/OFF
+#: src/LYOptions.c:3253
+msgid "Emacs keys"
+msgstr "Emacstangenter"
+
+#. VI Keys: ON/OFF
+#: src/LYOptions.c:3259
+msgid "VI keys"
+msgstr "VI-tangenter"
+
+#. Line edit style: SELECT
+#. well, at least 2 line edit styles available
+#: src/LYOptions.c:3266
+msgid "Line edit style"
+msgstr "Radredigeringsstil"
+
+#. Keyboard layout: SELECT
+#: src/LYOptions.c:3278
+msgid "Keyboard layout"
+msgstr "Tangentbordsmall"
+
+#.
+#. * Display and Character Set
+#.
+#: src/LYOptions.c:3291
+msgid "Display and Character Set"
+msgstr "Visning och teckenuppsättning"
+
+#. ***************************************************************
+#. Display Character Set: SELECT
+#: src/LYOptions.c:3295
+msgid "Display character set"
+msgstr "Teckenuppsättning för visning"
+
+#: src/LYOptions.c:3324
+msgid "Assumed document character set"
+msgstr "Förvald dokumentteckenuppsättning"
+
+#.
+#. * Since CJK people hardly mixed with other world
+#. * we split the header to make it more readable:
+#. * "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
+#.
+#: src/LYOptions.c:3344
+msgid "CJK mode"
+msgstr "CJK-läge"
+
+#: src/LYOptions.c:3346
+msgid "Raw 8-bit"
+msgstr "Rå 8-bitars"
+
+#. X Display: INPUT
+#: src/LYOptions.c:3354
+msgid "X Display"
+msgstr "X-display"
+
+#.
+#. * Document Appearance
+#.
+#: src/LYOptions.c:3360
+msgid "Document Appearance"
+msgstr "Dokumentutseende"
+
+#: src/LYOptions.c:3366
+msgid "Show color"
+msgstr "Visa färg"
+
+#. Show cursor: ON/OFF
+#: src/LYOptions.c:3390
+msgid "Show cursor"
+msgstr "Visa markör"
+
+#. Select Popups: ON/OFF
+#: src/LYOptions.c:3396
+msgid "Popups for select fields"
+msgstr "Popup för valfält"
+
+#. HTML error recovery: SELECT
+#: src/LYOptions.c:3403
+msgid "HTML error recovery"
+msgstr "HTML-felåterhämtning"
+
+#. Show Images: SELECT
+#: src/LYOptions.c:3410
+msgid "Show images"
+msgstr "Visa bilder"
+
+#. Verbose Images: ON/OFF
+#: src/LYOptions.c:3424
+msgid "Verbose images"
+msgstr "Pratsamma bilder"
+
+#.
+#. * Headers Transferred to Remote Servers
+#.
+#: src/LYOptions.c:3432
+msgid "Headers Transferred to Remote Servers"
+msgstr "Frågehuvud överfört till fjärrservrar"
+
+#. ***************************************************************
+#. Mail Address: INPUT
+#: src/LYOptions.c:3436
+msgid "Personal mail address"
+msgstr "Egen e-postadress"
+
+#. Preferred Document Character Set: INPUT
+#: src/LYOptions.c:3441
+msgid "Preferred document character set"
+msgstr "Önskad dokumentteckenuppsättning"
+
+#. Preferred Document Language: INPUT
+#: src/LYOptions.c:3446
+msgid "Preferred document language"
+msgstr "Önskade dokumentspråk"
+
+#: src/LYOptions.c:3452
+msgid "User-Agent header"
+msgstr "Webbläsaridentifiering"
+
+#.
+#. * Listing and Accessing Files
+#.
+#: src/LYOptions.c:3460
+msgid "Listing and Accessing Files"
+msgstr "Visning av och åtkomst till filer"
+
+#. ***************************************************************
+#. FTP sort: SELECT
+#: src/LYOptions.c:3464
+msgid "FTP sort criteria"
+msgstr "Sortering för ftp-kataloger"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3471
+msgid "Local directory sort criteria"
+msgstr "Sortering för lokala kataloger"
+
+#: src/LYOptions.c:3479
+msgid "Show dot files"
+msgstr "Visa punktfiler"
+
+#: src/LYOptions.c:3487
+msgid "Execution links"
+msgstr "Exekveringslänkar"
+
+#. Local Directory Sort: SELECT
+#: src/LYOptions.c:3507
+msgid "Show transfer rate"
+msgstr "Visa överföringshastighet"
+
+#.
+#. * Special Files and Screens
+#.
+#: src/LYOptions.c:3516
+msgid "Special Files and Screens"
+msgstr "Speciella filer och skärmar"
+
+#: src/LYOptions.c:3521
+msgid "Multi-bookmarks"
+msgstr "Multibokmärken"
+
+#: src/LYOptions.c:3529
+msgid "Review/edit Bookmarks files"
+msgstr "Se/ändra bokmärkesfiler"
+
+#: src/LYOptions.c:3531
+msgid "Goto multi-bookmark menu"
+msgstr "Gå till multibokmärkesmenyn"
+
+#: src/LYOptions.c:3533
+msgid "Bookmarks file"
+msgstr "Bokmärkesfil"
+
+#. Visited Pages: SELECT
+#: src/LYOptions.c:3539
+msgid "Visited Pages"
+msgstr "Besökta sidor"
+
+#: src/LYPrint.c:959
+msgid " Print job complete.\n"
+msgstr " Utskriftsjobb färdigt.\n"
+
+#: src/LYPrint.c:1296
+msgid "Document:"
+msgstr "Dokument:"
+
+#: src/LYPrint.c:1297
+msgid "Number of lines:"
+msgstr "Antal länkar:"
+
+#: src/LYPrint.c:1298
+msgid "Number of pages:"
+msgstr "Antal sidor:"
+
+#: src/LYPrint.c:1299
+msgid "pages"
+msgstr "sidor"
+
+#: src/LYPrint.c:1299
+msgid "page"
+msgstr "sida"
+
+#: src/LYPrint.c:1300
+msgid "(approximately)"
+msgstr "(ungefär)"
+
+#: src/LYPrint.c:1305
+msgid "Some print functions have been disabled!"
+msgstr "Vissa utskriftsfunktioner har deaktiverats!"
+
+#: src/LYPrint.c:1309
+msgid "Standard print options:"
+msgstr "Fördefinierade utskriftsalternativ:"
+
+#: src/LYPrint.c:1310
+msgid "Print options:"
+msgstr "Utskriftsalternativ"
+
+#: src/LYPrint.c:1316
+msgid "Save to a local file"
+msgstr "Spara som lokal fil"
+
+#: src/LYPrint.c:1318
+msgid "Save to disk disabled"
+msgstr "\"Spara på disk\" deaktiverad"
+
+#: src/LYPrint.c:1324
+msgid "Mail the file"
+msgstr "Sänd filer per e-post"
+
+#: src/LYPrint.c:1330
+msgid "Print to the screen"
+msgstr "Skriv ut på skärmen"
+
+#: src/LYPrint.c:1334
+msgid "Print out on a printer attached to your vt100 terminal"
+msgstr "Skriv ut på en skrivare ansluten till din vt100-terminal"
+
+#: src/LYReadCFG.c:340
+msgid ""
+"Syntax Error parsing COLOR in configuration file:\n"
+"The line must be of the form:\n"
+"COLOR:INTEGER:FOREGROUND:BACKGROUND\n"
+"\n"
+"Here FOREGROUND and BACKGROUND must be one of:\n"
+"The special strings 'nocolor' or 'default', or\n"
+msgstr ""
+"Syntaxfel vid tolkning av färg (COLOR) i konfigurationsfil:\n"
+"Raden måste vara på formen:\n"
+"COLOR:HELTAL:FÖRGRUND:BAKGRUND\n"
+"\n"
+"FÖRGRUND och BAKGRUND måste vara en av:\n"
+"specialsträngarna \"nocolor\" eller \"default\", eller\n"
+
+#: src/LYReadCFG.c:353
+msgid "Offending line:"
+msgstr "Felaktig rad:"
+
+#: src/LYReadCFG.c:660
+#, c-format
+msgid "key remapping of %s to %s for %s failed\n"
+msgstr "tangentomdefiniering av %s till %s för %s misslyckades\n"
+
+#: src/LYReadCFG.c:667
+#, c-format
+msgid "key remapping of %s to %s failed\n"
+msgstr "tangentomdefiniering av %s till %s misslyckades\n"
+
+#: src/LYReadCFG.c:688
+#, c-format
+msgid "invalid line-editor selection %s for key %s, selecting all\n"
+msgstr "ogiltig radredigeringsval %s för tangent %s, väljer alla\n"
+
+#: src/LYReadCFG.c:715 src/LYReadCFG.c:728
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"
+msgstr "inställning av radredigeringsdefinition för tangent %s (0x%x) till 0x%x för %s misslyckades\n"
+
+#: src/LYReadCFG.c:733
+#, c-format
+msgid "setting of line-editor binding for key %s (0x%x) for %s failed\n"
+msgstr "inställning av radredigeringsdefinition för tangent %s (0x%x) för %s misslyckades\n"
+
+#: src/LYReadCFG.c:838
+#, c-format
+msgid "Lynx: cannot start, CERN rules file %s is not available\n"
+msgstr "Lynx: kan inte börja, CERN-regelfilen %s ej tillgänglig\n"
+
+#: src/LYReadCFG.c:840
+msgid "(no name)"
+msgstr "(inget namn)"
+
+#: src/LYReadCFG.c:1658
+#, c-format
+msgid "More than %d nested lynx.cfg includes -- perhaps there is a loop?!?\n"
+msgstr "Mer än %d staplade lynx.cfg-inkluderingar -- kanske en slinga?!?\n"
+
+#: src/LYReadCFG.c:1660
+#, c-format
+msgid "Last attempted include was '%s',\n"
+msgstr "Sista försökta inkludering var \"%s\",\n"
+
+#: src/LYReadCFG.c:1661
+#, c-format
+msgid "included from '%s'.\n"
+msgstr "inkluderad från \"%s\".\n"
+
+#: src/LYReadCFG.c:2116 src/LYReadCFG.c:2129 src/LYReadCFG.c:2165
+msgid "The following is read from your lynx.cfg file."
+msgstr "Följande läses från din lynx.cfg-fil."
+
+#: src/LYReadCFG.c:2117 src/LYReadCFG.c:2130
+msgid "Please read the distribution"
+msgstr "Se distributionens"
+
+#: src/LYReadCFG.c:2123 src/LYReadCFG.c:2133
+msgid "for more comments."
+msgstr "för ytterligare kommentarer."
+
+#: src/LYReadCFG.c:2147
+msgid "RELOAD THE CHANGES"
+msgstr "HÄMTA OM ÄNDRINGARNA"
+
+#: src/LYReadCFG.c:2156
+msgid "Your primary configuration"
+msgstr "Din primära konfiguration"
+
+#: src/LYShowInfo.c:129
+msgid "Directory that you are currently viewing"
+msgstr "Visad katalog"
+
+#: src/LYShowInfo.c:132
+msgid "Name:"
+msgstr "Namn:"
+
+#: src/LYShowInfo.c:135
+msgid "URL:"
+msgstr "Adress:"
+
+#: src/LYShowInfo.c:146
+msgid "Directory that you have currently selected"
+msgstr "Markerade kataloger"
+
+#: src/LYShowInfo.c:149
+msgid "File that you have currently selected"
+msgstr "Markerade filer"
+
+#: src/LYShowInfo.c:153
+msgid "Symbolic link that you have currently selected"
+msgstr "Markerade symboliska länkar"
+
+#: src/LYShowInfo.c:157
+msgid "Item that you have currently selected"
+msgstr "Markerade poster"
+
+#: src/LYShowInfo.c:159
+msgid "Full name:"
+msgstr "Fullt namn:"
+
+#: src/LYShowInfo.c:168
+msgid "Unable to follow link"
+msgstr "Kan inte följa länk"
+
+#: src/LYShowInfo.c:170
+msgid "Points to file:"
+msgstr "Pekar på fil:"
+
+#: src/LYShowInfo.c:175
+msgid "Name of owner:"
+msgstr "Namn på ägare:"
+
+#: src/LYShowInfo.c:178
+msgid "Group name:"
+msgstr "Gruppnamn:"
+
+#: src/LYShowInfo.c:181
+msgid "File size:"
+msgstr "Filstorlek:"
+
+#: src/LYShowInfo.c:187
+msgid "Creation date:"
+msgstr "Skapad den:"
+
+#: src/LYShowInfo.c:190
+msgid "Last modified:"
+msgstr "Senast ändrad:"
+
+#: src/LYShowInfo.c:193
+msgid "Last accessed:"
+msgstr "Senast åtkommen:"
+
+#: src/LYShowInfo.c:195
+msgid "Access Permissions"
+msgstr "Åtkomstbehörighet"
+
+#: src/LYShowInfo.c:261
+msgid "File that you are currently viewing"
+msgstr "Visad fil"
+
+#: src/LYShowInfo.c:266 src/LYShowInfo.c:375
+msgid "Linkname:"
+msgstr "Länknamn:"
+
+#: src/LYShowInfo.c:279 src/LYShowInfo.c:291
+msgid "Charset:"
+msgstr "Teckenuppsättning:"
+
+#: src/LYShowInfo.c:297
+msgid "Server:"
+msgstr "Server:"
+
+#: src/LYShowInfo.c:300
+msgid "Date:"
+msgstr "Datum:"
+
+#: src/LYShowInfo.c:303
+msgid "Last Mod:"
+msgstr "Senaste ändring:"
+
+#: src/LYShowInfo.c:309
+msgid "&nbsp;Expires:"
+msgstr "Utgår:"
+
+#: src/LYShowInfo.c:313
+msgid "Cache-Control:"
+msgstr "Cachekontroll:"
+
+#: src/LYShowInfo.c:317
+msgid "Content-Length:"
+msgstr "Datalängd:"
+
+#: src/LYShowInfo.c:322
+msgid "Language:"
+msgstr "Språk:"
+
+#: src/LYShowInfo.c:329
+msgid "Post Data:"
+msgstr "\"POST\"-data:"
+
+#: src/LYShowInfo.c:331
+msgid "Post Content Type:"
+msgstr "\"POST\"-datatyp:"
+
+#: src/LYShowInfo.c:340
+msgid "Owner(s):"
+msgstr "Ägare:"
+
+#: src/LYShowInfo.c:343
+msgid "size:"
+msgstr "storlek:"
+
+#: src/LYShowInfo.c:343
+msgid "lines"
+msgstr "rader"
+
+#: src/LYShowInfo.c:346
+msgid "mode:"
+msgstr "läge:"
+
+#: src/LYShowInfo.c:348
+msgid "forms mode"
+msgstr "formulärläge"
+
+#: src/LYShowInfo.c:350
+msgid "source"
+msgstr "källkod"
+
+#: src/LYShowInfo.c:350
+msgid "normal"
+msgstr "normal"
+
+#: src/LYShowInfo.c:351
+msgid ", safe"
+msgstr ", säker"
+
+#: src/LYShowInfo.c:352
+msgid ", via internal link"
+msgstr ", via intern länk"
+
+#: src/LYShowInfo.c:358
+msgid ", no-cache"
+msgstr ", ingen cache"
+
+#: src/LYShowInfo.c:360
+msgid ", ISMAP script"
+msgstr ", ISMAP-skript"
+
+#: src/LYShowInfo.c:362
+msgid ", bookmark file"
+msgstr ", bokmärkesfil"
+
+#: src/LYShowInfo.c:371
+msgid "Link that you currently have selected"
+msgstr "Markerad länk"
+
+#: src/LYShowInfo.c:384
+msgid "Method:"
+msgstr "Metod:"
+
+#: src/LYShowInfo.c:389
+msgid "Enctype:"
+msgstr "Kodningstyp:"
+
+#: src/LYShowInfo.c:401
+msgid "(Form field)"
+msgstr "(Formulärfält)"
+
+#: src/LYShowInfo.c:416
+msgid "No Links on the current page"
+msgstr "Ingen länk på aktuell sida"
+
+#: src/LYStyle.c:250
+#, c-format
+msgid ""
+"Syntax Error parsing style in lss file:\n"
+"[%s]\n"
+"The line must be of the form:\n"
+"OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n"
+"where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+msgstr ""
+"Syntaxfel vid tolkning av stil i lss-fil:\n"
+"[%s]\n"
+"Raden måste vara på formen:\n"
+"OBJEKT:MONO:FÄRG (t.ex em:bold:brightblue:white)\n"
+"där OBJEKT är en av EM,STRONG,B,I,U,BLINK etc.\n"
+"\n"
+
+#: src/LYTraversal.c:107
+msgid "here is a list of the history stack so that you may rebuild"
+msgstr "här finns en lista över historikstacken så att du kan bygga om"
+
+#: src/LYUpload.c:78
+msgid "ERROR! - upload command is misconfigured"
+msgstr "FEL! - insändningskommandot är felkonfigurerat"
+
+#: src/LYUpload.c:100
+msgid "Illegal redirection \"../\" found! Request ignored."
+msgstr "Felaktig omdirigering \"../\" hittad! Begäran ignorerad."
+
+#: src/LYUpload.c:103
+msgid "Illegal character \"/\" found! Request ignored."
+msgstr "Felaktigt tecken \"/\" hittad! Begäran ignorerad."
+
+#: src/LYUpload.c:106
+msgid "Illegal redirection using \"~\" found! Request ignored."
+msgstr "Ogiltig omdirigering med \"~\" hittad! Begäran ignorerad."
+
+#: src/LYUpload.c:163
+msgid "Unable to upload file."
+msgstr "Kan inte skicka fil."
+
+#: src/LYUpload.c:214
+msgid "Upload To:"
+msgstr "Skicka till:"
+
+#: src/LYUpload.c:215
+msgid "Upload options:"
+msgstr "Insändningsalternativ:"
+
+#: src/LYUtils.c:3075
+msgid "Unexpected access protocol for this URL scheme."
+msgstr "Oväntat åtkomstprotokoll för denna adresstyp."
+
+#: src/LYUtils.c:3915
+msgid "Too many tempfiles"
+msgstr "För många temporärfiler"
+
+#: src/LYUtils.c:4217
+msgid "unknown restriction"
+msgstr "okänd begränsning"
+
+#: src/LYUtils.c:4248
+msgid "No restrictions set.\n"
+msgstr "Inga begränsningar satta.\n"
+
+#: src/LYUtils.c:4251
+msgid "Restrictions set:\n"
+msgstr "Satta begränsningar:\n"
+
+#: src/LYUtils.c:5601
+msgid "Ignoring invalid HOME"
+msgstr "Ignorerar ogiltig HOME"
+
+#: src/LYrcFile.c:20
+msgid "Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n"
+msgstr ""
+
+#: src/LYrcFile.c:242
+msgid ""
+"accept_all_cookies allows the user to tell Lynx to automatically\n"
+"accept all cookies if desired. The default is \"FALSE\" which will\n"
+"prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n"
+"all cookies.\n"
+msgstr ""
+"accept_all_cookies låter användaren tala om för Lynx att automatiskt\n"
+"acceptera alla kakor. Förvalet är \"FALSE\", och visar en fråga för\n"
+"varje kaka. Sätt accept_all_cookies till \"TRUE\" för att acceptera\n"
+"alla kakor.\n"
+
+#: src/LYrcFile.c:249
+msgid ""
+"bookmark_file specifies the name and location of the default bookmark\n"
+"file into which the user can paste links for easy access at a later\n"
+"date.\n"
+msgstr ""
+"bookmark_file anger namn och plats för standardbokmärkesfilen, i vilken\n"
+"användaren kan klistra in länkar för att lätt komma åt dem senare.\n"
+
+#: src/LYrcFile.c:254
+msgid ""
+"If case_sensitive_searching is \"on\" then when the user invokes a search\n"
+"using the 's' or '/' keys, the search performed will be case sensitive\n"
+"instead of case INsensitive. The default is usually \"off\".\n"
+msgstr ""
+"Om case_sensitive_searching är \"on\" när användaren startar en sökning\n"
+"med \"s\" eller \"/\" kommer sökningen som genomförs att göra skillnad på\n"
+"gemener och versaler. Förvalet är normalt sett av (\"off\").\n"
+
+#: src/LYrcFile.c:259
+msgid ""
+"The character_set definition controls the representation of 8 bit\n"
+"characters for your terminal. If 8 bit characters do not show up\n"
+"correctly on your screen you may try changing to a different 8 bit\n"
+"set or using the 7 bit character approximations.\n"
+"Current valid characters sets are:\n"
+msgstr ""
+"Inställningen för character_set anger hur åttabitarstecken representeras\n"
+"på din terminal. Om åttabitarstecken inte visas korrekt på din skärm kan\n"
+"du försöka att ändra till en annan åttabitarsteckenuppsättning, eller\n"
+"använda sjubitarstolkningarna.\n"
+"Giltiga teckenuppsättningar är:\n"
+
+#: src/LYrcFile.c:266
+msgid ""
+"cookie_accept_domains and cookie_reject_domains are comma-delimited\n"
+"lists of domains from which Lynx should automatically accept or reject\n"
+"all cookies. If a domain is specified in both options, rejection will\n"
+"take precedence. The accept_all_cookies parameter will override any\n"
+"settings made here.\n"
+msgstr ""
+"cookie_accept_domains och cookie_reject_domains är kommaavdelade\n"
+"listor över domäner från vilka Lynx automatisk skall acceptera eller\n"
+"avvisa kakor. Om en domän anges i båda alternativet kommer avvisning\n"
+"att gå före. Flaggan accept_all_cookies går före alla inställningar\n"
+"som görs här.\n"
+
+#: src/LYrcFile.c:274
+msgid ""
+"cookie_file specifies the file from which to read persistent cookies.\n"
+"The default is ~/.lynx_cookies.\n"
+msgstr ""
+"cookie_file anger filen som varaktiga kakor skall läsas från.\n"
+"Förval är ~/.lynx_cookies.\n"
+
+#: src/LYrcFile.c:279
+msgid ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n"
+"cookie_query_invalid_domains are comma-delimited lists of which domains\n"
+"should be subjected to varying degrees of validity checking. If a\n"
+"domain is set to strict checking, strict conformance to RFC2109 will\n"
+"be applied. A domain with loose checking will be allowed to set cookies\n"
+"with an invalid path or domain attribute. All domains will default to\n"
+"querying the user for an invalid path or domain.\n"
+msgstr ""
+"cookie_loose_invalid_domains, cookie_strict_invalid_domains och\n"
+"cookie_query_invalid_domains är kommaavdelade listor över domäner som\n"
+"skall underkastas olika nivåer av giltighetskontroll. Om en domän sätts\n"
+"till strikt kontroll kommer strikt tolkning av RFC2109 att gälla.\n"
+"En domän med lös kontroll gör det möjligt att sätta kakor med felaktiga\n"
+"sökväg- eller domänattribut. Alla domäner får som förval frågor till\n"
+"användaren för felaktiga sökvägar eller domäner.\n"
+
+#: src/LYrcFile.c:292
+msgid ""
+"dir_list_styles specifies the directory list style under DIRED_SUPPORT\n"
+"(if implemented). The default is \"MIXED_STYLE\", which sorts both\n"
+"files and directories together. \"FILES_FIRST\" lists files first and\n"
+"\"DIRECTORIES_FIRST\" lists directories first.\n"
+msgstr ""
+"dir_list_styles anger kataloglistestil i DIRED_SUPPORT (om det är\n"
+"implementerat). Förvalet är \"MIXED_STYLE\", vilket sorterar filer\n"
+"och kataloger tillsammanns. \"FILES_FIRST\" listar filer först, och\n"
+"\"DIRECTORIES_FIRST\" listar kataloger först.\n"
+
+#: src/LYrcFile.c:300
+msgid ""
+"If emacs_keys is to \"on\" then the normal EMACS movement keys:\n"
+" ^N = down ^P = up\n"
+" ^B = left ^F = right\n"
+"will be enabled.\n"
+msgstr ""
+"Om emacs_keys sätts till \"on\" kommer EMACS-förflyttningstangeter att\n"
+"aktiveras:\n"
+" ^N = ned ^P = upp\n"
+" ^B = vänster ^F = höger\n"
+
+#: src/LYrcFile.c:306
+msgid ""
+"file_editor specifies the editor to be invoked when editing local files\n"
+"or sending mail. If no editor is specified, then file editing is disabled\n"
+"unless it is activated from the command line, and the built-in line editor\n"
+"will be used for sending mail.\n"
+msgstr ""
+"file_editor anger vilket redigeringsprogram som skall aktiveras när lokala\n"
+"filer redigeras, eller e-post sänds. Om inget program anges deaktiveras\n"
+"filredigering, såvida det inte aktiveras från kommandoraden, och den inbyggda\n"
+"radredigeraren används för e-post.\n"
+
+#: src/LYrcFile.c:312
+msgid ""
+"The file_sorting_method specifies which value to sort on when viewing\n"
+"file lists such as FTP directories. The options are:\n"
+" BY_FILENAME -- sorts on the name of the file\n"
+" BY_TYPE -- sorts on the type of the file\n"
+" BY_SIZE -- sorts on the size of the file\n"
+" BY_DATE -- sorts on the date of the file\n"
+msgstr ""
+"file_sorting_method anger hur fillistor, såsom ftp-kataloger, skall\n"
+"sorteras. Alternativen är:\n"
+" BY_FILENAME -- sorterar efter filnamn\n"
+" BY_TYPE -- sorterar efter filtyp\n"
+" BY_SIZE -- sorterar efter filstorlek\n"
+" BY_DATE -- sorterar efter fildatum\n"
+
+#: src/LYrcFile.c:324
+msgid ""
+"lineedit_mode specifies the key binding used for inputting strings in\n"
+"prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n"
+"the following control characters are used for moving and deleting:\n"
+"\n"
+" Prev Next Enter = Accept input\n"
+" Move char: <- -> ^G = Cancel input\n"
+" Move word: ^P ^N ^U = Erase line\n"
+" Delete char: ^H ^R ^A = Beginning of line\n"
+" Delete word: ^B ^F ^E = End of line\n"
+"\n"
+"Current lineedit modes are:\n"
+msgstr ""
+"lineedit_mode ange tangentbordsfunktioner som används för att skriva\n"
+"in strängar i frågor och formulär. Om lineedit_mode sätts till\n"
+"\"Default Binding\" kommer följande kontrolltecken användas för att\n"
+"flytta och ta bort:\n"
+"\n"
+" Bakåt Framåt Enter = Bekräfta indata\n"
+" Flytta tecken: <- -> ^G = Avbryt inmatning\n"
+" Flytta ord: ^P ^N ^U = Radera rad\n"
+" Radera tecken: ^H ^R ^A = Radbörjan\n"
+" Radera ord: ^B ^F ^E = Radslut\n"
+"\n"
+
+#: src/LYrcFile.c:339
+msgid ""
+"The following allow you to define sub-bookmark files and descriptions.\n"
+"The format is multi_bookmark<capital_letter>=<filename>,<description>\n"
+"Up to 26 bookmark files (for the English capital letters) are allowed.\n"
+"We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n"
+msgstr ""
+"Följande gör det möjligt för dig att definiera underbokmärkesfiler och\n"
+"tillhörande beskrivningar. Formatet är:\n"
+"multi_bookmark<stor bokstav>=<filnamn>,<beskrivning>\n"
+"Upp till 26 bokmärkesfiler (de stora bokstäverna A-Z) tillåts.\n"
+"Vi börjar med \"multi_bookmarkB\" eftersom \"A\" är förvalet (se ovan).\n"
+
+#: src/LYrcFile.c:345
+msgid ""
+"personal_mail_address specifies your personal mail address. The\n"
+"address will be sent during HTTP file transfers for authorization and\n"
+"logging purposes, and for mailed comments.\n"
+"If you do not want this information given out, set the NO_FROM_HEADER\n"
+"to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n"
+"could leave this field blank, but then you won't have it included in\n"
+"your mailed comments.\n"
+msgstr ""
+"personal_mail_address anger din personliga e-postaderss. Adressen\n"
+"sänds under HTTP-filöverföringar för auktoriserings- och\n"
+"loggningsändamål, samt för att sända kommentarer per e-post\n"
+"Om du inte vill att denna information skall sändas, sätt NO_FROM_HEADER\n"
+"till TRUE i lynx.cfg, eller använd kommandoradsflaggan -nofrom. Du kan\n"
+"även lämna detta fält blankt, men då inkluderas det inte i kommentarer\n"
+"du sänder.\n"
+
+#: src/LYrcFile.c:354
+msgid ""
+"preferred_charset specifies the character set in MIME notation (e.g.,\n"
+"ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n"
+"to http servers using an Accept-Charset header. The value should NOT\n"
+"include ISO-8859-1 or US-ASCII, since those values are always assumed\n"
+"by default. May be a comma-separated list.\n"
+"If a file in that character set is available, the server will send it.\n"
+"If no Accept-Charset header is present, the default is that any\n"
+"character set is acceptable. If an Accept-Charset header is present,\n"
+"and if the server cannot send a response which is acceptable\n"
+"according to the Accept-Charset header, then the server SHOULD send\n"
+"an error response, though the sending of an unacceptable response\n"
+"is also allowed.\n"
+msgstr ""
+"preferred_charset anger de teckenuppsättningar Lynx kommer att ange att\n"
+"du önskar ta emot i frågor till http-serverar i MIME-notation (t.ex\n"
+"ISO-8859-2, ISO-8859-5). Detta sänds i Accept-Charset-huvudet. Värdet\n"
+"bör inte innehålla ISO-8859-1 eller US-ASCII eftersom de värdena alltid\n"
+"antas som förval. Kan vara en kommaseparerad lista.\n"
+"Om en fil i den teckenuppsättningen finns att tillgå kommer servern\n"
+"Om inget Accept-Charset sänds är förvalet att alla teckenuppsättningar\n"
+"är acceptabla. Om en Accept-Charset är tillgänglig, och om servern inte\n"
+"kan sända ett svar som är acceptabelt enligt Accept-Charset-huvudet BÖR\n"
+"servern sända ett felmeddelande, även om det är tillåtet att sända även\n"
+"ett icke-acceptabelt svar.\n"
+
+#: src/LYrcFile.c:368
+msgid ""
+"preferred_language specifies the language in MIME notation (e.g., en,\n"
+"fr, may be a comma-separated list in decreasing preference)\n"
+"which Lynx will indicate you prefer in requests to http servers.\n"
+"If a file in that language is available, the server will send it.\n"
+"Otherwise, the server will send the file in it's default language.\n"
+msgstr ""
+"preferred_language anger de språk som Lynx kommer att ange att du önskar\n"
+"ta emot i frågor till webbservrar i MIME-notation (t.ex en,fr, kan vara\n"
+"en kommaseparerad lista i minskande prioriteringsordning).\n"
+"Om en fil i det språket finns att tillgå kommer servern sända den.\n"
+"Annars kommer servern sända filen i sitt standardspråk.\n"
+
+#: src/LYrcFile.c:377
+msgid ""
+"If run_all_execution_links is set \"on\" then all local execution links\n"
+"will be executed when they are selected.\n"
+"\n"
+"WARNING - This is potentially VERY dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Om run_all_execution_links är satt till \"on\" kommer alla lokala\n"
+"programkörningslänkar att köras när de väljs.\n"
+"\n"
+"VARNING - Detta kan vara MYCKET farligt. Eftersom du kan visa information\n"
+" som skrivits av okända och otillförlitliga källor är det möjligt\n"
+" att trojanska hästlänkar kan skrivas. Trojanska hästlänkar kan\n"
+" skrivas så att de raderar filer eller komprometterar säkerheten.\n"
+" Detta bör endast aktiveras (\"on\") om du visar information från\n"
+" tillförlitliga källor.\n"
+
+#: src/LYrcFile.c:388
+msgid ""
+"If run_execution_links_on_local_files is set \"on\" then all local\n"
+"execution links that are found in LOCAL files will be executed when they\n"
+"are selected. This is different from run_all_execution_links in that\n"
+"only files that reside on the local system will have execution link\n"
+"permissions.\n"
+"\n"
+"WARNING - This is potentially dangerous. Since you may view\n"
+" information that is written by unknown and untrusted sources\n"
+" there exists the possibility that Trojan horse links could be\n"
+" written. Trojan horse links could be written to erase files\n"
+" or compromise security. This should only be set to \"on\" if\n"
+" you are viewing trusted source information.\n"
+msgstr ""
+"Om run_all_execution_links_on_local_files är satt till \"on\" kommer\n"
+"alla lokala programkörningslänkar i LOKALA filer att köras när de väljs.\n"
+"Detta skiljer sig från run_all_execution_links i det att endast filer\n"
+"som ligger på det lokala systemet har rättighet att innehålla\n"
+"programkörningslänkar.\n"
+"\n"
+"VARNING - Detta kan vara farligt. Eftersom du kan visa information som\n"
+" skrivits av okända och otillförlitliga källor är det möjligt att\n"
+" trojanska hästlänkar kan skrivas. Trojanska hästlänkar kan\n"
+" skrivas å att de raderar filer eller komprometterar säkerheten.\n"
+" Detta bör endast aktiveras (\"on\") om du visar information från\n"
+" tillförlitliga källor.\n"
+
+#: src/LYrcFile.c:403
+msgid ""
+"select_popups specifies whether the OPTIONs in a SELECT block which\n"
+"lacks a MULTIPLE attribute are presented as a vertical list of radio\n"
+"buttons or via a popup menu. Note that if the MULTIPLE attribute is\n"
+"present in the SELECT start tag, Lynx always will create a vertical list\n"
+"of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n"
+"as the default while a value of \"off\" will set use of radio boxes.\n"
+"The default can be overridden via the -popup command line toggle.\n"
+msgstr ""
+"select_popups anger huruvida OPTION i ett SELECT-block som saknar\n"
+"MULTIPLE-attribut skall visas som en vertikal lista med radioknappar\n"
+"eller via en popupmuni. Observera att om MULTIPLE-attributet finns i\n"
+"SELECT-märket kommer Lynx alltid skapa en vertikal lista med kryssrutor\n"
+"för varje OPTION. Värdet \"on\" skapar som förval popupmenyer, medan\n"
+"värdet \"off\" väljer radioknappar. Förvalet kan gås förbi via\n"
+"kommandoradsflaggan -popup.\n"
+
+#: src/LYrcFile.c:413
+msgid ""
+"show_color specifies how to set the color mode at startup. A value of\n"
+"\"never\" will force color mode off (treat the terminal as monochrome)\n"
+"at startup even if the terminal appears to be color capable. A value of\n"
+"\"always\" will force color mode on even if the terminal appears to be\n"
+"monochrome, if this is supported by the library used to build lynx.\n"
+"A value of \"default\" will yield the behavior of assuming\n"
+"a monochrome terminal unless color capability is inferred at startup\n"
+"based on the terminal type, or the -color command line switch is used, or\n"
+"the COLORTERM environment variable is set. The default behavior always is\n"
+"used in anonymous accounts or if the \"option_save\" restriction is set.\n"
+"The effect of the saved value can be overridden via\n"
+"the -color and -nocolor command line switches.\n"
+"The mode set at startup can be changed via the \"show color\" option in\n"
+"the 'o'ptions menu. If the option settings are saved, the \"on\" and\n"
+"\"off\" \"show color\" settings will be treated as \"default\".\n"
+msgstr ""
+"show_color anger hur färger ställs in vid start. Värdet \"never\" tvingar\n"
+"färg att stängas av (terminalen behandlas som vore den monokrom) vid\n"
+"start, även om terminalen verkar vara kapabel till färg. Värdet \"always\"\n"
+"tvingar färg att slås på även om terminalen verkar vara monokrom, om det\n"
+"stöds av det bibliotek som användes för att bygga lynx. Värdet \"default\"\n"
+"gör att en monokrom terminal antas såvida inte färgstöd anges vid start\n"
+"baserat på terminaltyp, eller via kommandoradsflaggan -color, eller om\n"
+"miljövariabeln COLORTERM är satt. Detta beteende används alltid för anonyma\n"
+"konton, eller om \"option_save\"-begränsningen är satt.\n"
+"Det sparade värdet kan förbigås med kommandoradsflaggorna -color och\n"
+"-nocolor.\n"
+"Läget som sätts vid start kan ändras via inställningen \"visa färg\" i\n"
+"alternativmenyn. Om alternativen sparas kommer inställningarna \"on\" och\n"
+"\"off\" att tolkas som \"default\".\n"
+
+#: src/LYrcFile.c:430
+msgid ""
+"show_cursor specifies whether to 'hide' the cursor to the right (and\n"
+"bottom, if possible) of the screen, or to place it to the left of the\n"
+"current link in documents, or current option in select popup windows.\n"
+"Positioning the cursor to the left of the current link or option is\n"
+"helpful for speech or braille interfaces, and when the terminal is\n"
+"one which does not distinguish the current link based on highlighting\n"
+"or color. A value of \"on\" will set positioning to the left as the\n"
+"default while a value of \"off\" will set 'hiding' of the cursor.\n"
+"The default can be overridden via the -show_cursor command line toggle.\n"
+msgstr ""
+"show_cursor anger om markören skall \"gömmas\" till höger (och nederst,\n"
+"om möjligt) på skärmen, eller om den skall ställas till vänster om\n"
+"aktuell länk i dokument, eller aktuellt alternativ i popupfönster.\n"
+"Att ställa markören till vänster om den aktuella länken eller alternativet\n"
+"förenklar för tal- och braillegränssnitt, och om terminalen inte gör\n"
+"skillnad på den aktuella länken med ljus- eller färgmarkering. Värdet\n"
+"\"on\" placerar markören till vänster som förval, medan \"off\" \"gömmer\"\n"
+"markören. Förvalet kan gås förbi via kommandoradsflaggan -show_cursor.\n"
+
+#: src/LYrcFile.c:441
+msgid ""
+"show_dotfiles specifies that the directory listing should include\n"
+"\"hidden\" (dot) files/directories. If set \"on\", this will be\n"
+"honored only if enabled via userdefs.h and/or lynx.cfg, and not\n"
+"restricted via a command line switch. If display of hidden files\n"
+"is disabled, creation of such files via Lynx also is disabled.\n"
+msgstr ""
+"show_dotfiles anger att kataloglistan skall inkludera \"dolda\"\n"
+"(punkt-)filer/kataloger. Om satt till \"on\" kommer detta endast\n"
+"att läsas om det aktiverats via userdefs.h och/eller lynx.cfg, och\n"
+"inte begränsat via en kommandoradsflagga. Om visning av dolda\n"
+"filer är deaktiverat kommer skapandet av sådana filer via Lynx\n"
+"också att deaktiveras.\n"
+
+#: src/LYrcFile.c:452
+msgid ""
+"If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n"
+"been defined (see below), then all bookmark operations will first\n"
+"prompt the user to select an active sub-bookmark file. If the default\n"
+"Lynx bookmark_file is defined (see above), it will be used as the\n"
+"default selection. When this option is set to \"advanced\", and the\n"
+"user mode is advanced, the 'v'iew bookmark command will invoke a\n"
+"statusline prompt instead of the menu seen in novice and intermediate\n"
+"user modes. When this option is set to \"standard\", the menu will be\n"
+"presented regardless of user mode.\n"
+msgstr ""
+"Om sub_bookmarks inte är avstängt (\"off\"), och multipla bokmärken\n"
+"har angetts (se nedan) kommer alla bokmärkesfunktioner först att be\n"
+"användaren ange en aktiv underbokmärkesfil. Om en standardbokmärkesfil\n"
+"har definierats (se bookmark_file ovan), kommer den att användas som\n"
+"förval. När detta alternativ är satt till \"advanced\", och användarläget\n"
+"är avancerat, kommer kommandot visa bokmärke att visa en statusradsfråga\n"
+"istället för den meny som visas i användarlägets nybörjar- och\n"
+"mellannivåer. Om detta alternativ sätts till \"standard\" visas menyn\n"
+"oavsett användarläge.\n"
+
+#: src/LYrcFile.c:464
+msgid ""
+"user_mode specifies the users level of knowledge with Lynx. The\n"
+"default is \"NOVICE\" which displays two extra lines of help at the\n"
+"bottom of the screen to aid the user in learning the basic Lynx\n"
+"commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n"
+"Use \"ADVANCED\" to see the URL of the currently selected link at the\n"
+"bottom of the screen.\n"
+msgstr ""
+"user_mode anger användarens nivå av kunskap om Lynx. Förvalet\n"
+"\"NOVICE\" (nybörjare) visar två extra rader med hjälp nederst på\n"
+"skärmen för att hjälpa användaren lära de grundläggande kommandona\n"
+"i Lynx. Sätt user_mode till \"INTERMEDIATE\" (mellannivå) för att\n"
+"stänga av extrainformationen. Använd \"ADVANCED\" för att se adressen\n"
+"för den markerade länken nederst på skärmen.\n"
+
+#: src/LYrcFile.c:472
+msgid ""
+"If verbose_images is \"on\", lynx will print the name of the image\n"
+"source file in place of [INLINE], [LINK] or [IMAGE]\n"
+"See also VERBOSE_IMAGES in lynx.cfg\n"
+msgstr ""
+"Om verbose_images är \"on\" skriver lynx namnet på bildens källfil\n"
+"istället för [INLINE], [LINK] eller [IMAGE]\n"
+"Se även VERBOSE_IMAGES i lynx.cfg\n"
+
+#: src/LYrcFile.c:477
+msgid ""
+"If vi_keys is set to \"on\", then the normal VI movement keys:\n"
+" j = down k = up\n"
+" h = left l = right\n"
+"will be enabled. These keys are only lower case.\n"
+"Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n"
+"and the keymap display, respectively.\n"
+msgstr ""
+"Om vi_keys sätts till \"on\" kommer VI-förflyttningstangeter att aktiveras:\n"
+" j = ned k = upp\n"
+" h = vänster l = höger\n"
+"Dessa tangenter gäller bara som gemener.\n"
+"Versala \"H\", \"J\" och \"K\" aktiverar hjälp, hoppgenvägar respektiva\n"
+"tangentbordsinställningarna.\n"
+
+#: src/LYrcFile.c:485
+msgid ""
+"The visited_links setting controls how Lynx organizes the information\n"
+"in the Visited Links Page.\n"
+msgstr ""
+"Inställningen visited_links anger hur Lynx organiserar informationen\n"
+"på sidan Använda länkar.\n"
+
+#: src/LYrcFile.c:693
+msgid ""
+"If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n"
+"your keypad when the numlock is on will act as arrow keys:\n"
+" 8 = Up Arrow\n"
+" 4 = Left Arrow 6 = Right Arrow\n"
+" 2 = Down Arrow\n"
+"and the corresponding keyboard numbers will act as arrow keys,\n"
+"regardless of whether numlock is on.\n"
+msgstr ""
+"Om keypad_mode sätts till \"NUMBERS_AS_ARROWS\" fungerar siffrorna på\n"
+"ditt numeriska tangentbord som piltangeter när NumLock är aktivt:\n"
+" 8 = Upppil\n"
+" 4 = Vänsterpil 6 = Högerpil\n"
+" 2 = Nedpil\n"
+"och motsvarande siffertangenter på tangentbordet fungerar som\n"
+"piltangetner, oavsett om NumLock är aktivt eller inte.\n"
+
+#: src/LYrcFile.c:702
+msgid ""
+"If keypad_mode is set to \"LINKS_ARE_NUMBERED\", then numbers will\n"
+"appear next to each link and numbers are used to select links.\n"
+msgstr ""
+"Om keypad_mode sätts till \"LINKS_ARE_NUMBERED\" kommer siffror\n"
+"att visas vid varje länk, och siffror används för att välja länk.\n"
+
+#: src/LYrcFile.c:706
+msgid ""
+"If keypad_mode is set to \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\", then\n"
+"numbers will appear next to each link and visible form input field.\n"
+"Numbers are used to select links, or to move the \"current link\" to a\n"
+"form input field or button. In addition, options in popup menus are\n"
+"indexed so that the user may type an option number to select an option in\n"
+"a popup menu, even if the option isn't visible on the screen. Reference\n"
+"lists and output from the list command also enumerate form inputs.\n"
+msgstr ""
+"Om keypad_mode sätts till \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" kommer\n"
+"siffror att visas vid varje länk och synligt formulärindatafält.\n"
+"Siffror används för att välja länkar, eller för att flytta \"aktuell\n"
+"länk\" till ett formulärindatafält eller -knapp. Dessutom kommer\n"
+"alternativ i popupmenyer att numreras så att användaren kan skriva in\n"
+"ett alternativnummer för att välja ett alternativ i popupmenyn, även om\n"
+"alternativet inte är synligt på skärmen. Referenslistor och utdata från\n"
+"listkommandot kommer även de att numrera formulärindatafält.\n"
+
+#: src/LYrcFile.c:715
+msgid ""
+"NOTE: Some fixed format documents may look disfigured when\n"
+"\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n"
+"enabled.\n"
+msgstr ""
+"OBS: Vissa dokument med fixerat format kan se trasiga ut när\n"
+"\"LINKS_ARE_NUMBERED\" eller \"LINKS_AND_FORM_FILES_ARE_NUMBERED\" är\n"
+"aktiva.\n"
+
+#: src/LYrcFile.c:748
+msgid ""
+"Lynx User Defaults File\n"
+"\n"
+"This file contains options saved from the Lynx Options Screen (normally\n"
+"with the '>' key). There is normally no need to edit this file manually,\n"
+"since the defaults here can be controlled from the Options Screen, and the\n"
+"next time options are saved from the Options Screen this file will be\n"
+"completely rewritten. You have been warned...\n"
+"If you are looking for the general configuration file - it is normally\n"
+"called lynx.cfg, and it has different content and a different format.\n"
+"It is not this file.\n"
msgstr ""
+"Lynx användarinställningsfil\n"
+"\n"
+"Denna fil innehåller alternativ som sparats från Lynx' alternativmeny\n"
+"vanligtvis med tangenten \">\"). Vanligtvis behöver du inte redigera denna\n"
+"fil manuellt, eftersom dessa inställningar kan nås från alternativmenyn,\n"
+"och nästa gång alternativen lagras från alternativmenyn kommer denna fil\n"
+"helt att skrivas över. Du har varnats...\n"
+"Om du letar efter den generella konfigurationsfilen heter den normalt\n"
+"lynx.cfg, och har annat innehåll och ett annat format. Det är inte denna\n"
+"fil.\n"
diff --git a/gnu/usr.bin/lynx/samples/bright-blue.lss b/gnu/usr.bin/lynx/samples/bright-blue.lss
new file mode 100644
index 00000000000..888dc4e4f84
--- /dev/null
+++ b/gnu/usr.bin/lynx/samples/bright-blue.lss
@@ -0,0 +1,67 @@
+# From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+#
+# Colors: black, red, green, brown, blue, magenta, cyan,
+# lightgray, gray, brightred, brightgreen, yellow, brightblue,
+# brightmagenta, brightcyan, white.
+#
+# On some terminals combination of background and foreground of different
+# brightness is not supported.
+#
+# Normal type styles correspond to HTML tags.
+#
+# default should be the *last* line
+#
+# The next line (beginning with "h1") means: use bold if mono, otherwise
+# yellow on black (use 'default' for <defaultbackground>/<defaultforeground>)
+default:normal:brightcyan:blue
+# match "link":
+input:normal:green
+input.type.submit:normal:blue:black
+textarea:normal:white:cyan
+# type-less input is the same as type=text (similar to textarea)
+input.type.:normal:white:cyan
+input.type.text:normal:white:cyan
+input.type.password:normal:white:cyan
+input.type.file:normal:brightred:cyan
+# Shows gray on black?!
+edit.current:normal:yellow:lightgray
+#edit.current:normal:yellow:white
+edit.active:normal:black:white
+edit.active.marked:normal:white:black
+edit.prompt:normal:white:gray
+edit.prompt.marked:normal:black:white
+edit.active.arrow:normal:red:white
+edit.prompt.arrow:normal:red:gray
+edit.active.pad:normal:red:lightgray
+edit.prompt.pad:normal:white:black
+option:normal:red:black
+#alink:normal:red:green
+scroll.arrow:bold:white:default
+scroll.noarrow:normal:black:default
+scroll.bar:bold:white
+#scroll.back:reverse:green:red
+status:reverse:yellow:black
+h1:bold:yellow:black
+em:bold:white
+em.a:reverse:black:blue
+em.b:reverse:white:black
+font.letter:normal:default:black
+link.blue:bold:white:brightblue
+link.blue.prev:bold:yellow:brightblue
+title:normal:magenta:black
+forwbackw.arrow:bold:red:default
+i:bold:white
+table:normal:white
+blockquote:normal:white
+li.blue:bold:blue:black
+link.blue.next:bold:blue:black
+normal:normal:default:default
+menu.bg:normal:black:lightgray
+menu.frame:normal:black:lightgray
+menu.entry:normal:white:gray
+menu.n:normal:white:gray
+menu.active:normal:white:black
+menu.sb:normal:brightred:lightgray
+hot.paste:normal:brightred:gray
+INCLUDE:lynx.lss
+default:normal:brightcyan:blue
diff --git a/gnu/usr.bin/lynx/samples/cernrules.txt b/gnu/usr.bin/lynx/samples/cernrules.txt
index 1064e74eeae..977f25d85a5 100644
--- a/gnu/usr.bin/lynx/samples/cernrules.txt
+++ b/gnu/usr.bin/lynx/samples/cernrules.txt
@@ -10,10 +10,29 @@
#
# Syntax:
# =======
+# Summary of common forms:
+#
+# Fail URL1
+# Map URL1 URL2 [CONDITION]
+# Pass URL1 [URL2] [CONDITION]
+# Redirect URL1 URL2 [CONDITION]
+# RedirectPerm URL1 URL2 [CONDITION]
+# UseProxy URL1 PROXYURL [CONDITION]
+# UseProxy URL1 "none" [CONDITION]
+#
+# Alert URL1 MESSAGE [CONDITION]
+# AlwaysAlert URL1 MESSAGE [CONDITION]
+# UserMsg URL1 MESSAGE [CONDITION]
+# InfoMsg URL1 MESSAGE [CONDITION]
+# Progress URL1 MESSAGE [CONDITION]
+#
# As you may have guessed, comments are introduced by a '#' character.
# Rules have the general form
-# Operator Operand1 [Operand2]
-# with words separated by whitespace.
+# Operator Operand1 [Operand2] [CONDITION]
+# with words separated by whitespace. Words containing space can be quoted
+# with "double quotes". Although normally this should not be necessary
+# necessary for URLs, it has to be used for MESSAGE Operands in Alert etc.
+# See below for an explanation of the optional CONDITION.
#
# Recognized operators are
#
@@ -21,18 +40,95 @@
# Reject access to this URL, stop processing further rules.
#
# Map URL1 URL2
-# Change the URL to URL2, then continue processing.
+# Change the current URL to URL2, then continue processing.
#
# Pass URL1 [URL2]
# Accept this URL and stop processing further rules; if URL2
# is given, apply this as the last mapping.
+# See the next item for reasons why you generally don't want to "pass"
+# a changed URL.
+#
+# RedirectTemp URL1 URL2
+# RedirectPerm URL1 URL2
+# Redirect [STATUS] URL1 URL2
+# Stop processing further rules and redirect to URL2, just as if lynx had
+# received a HTTP redirection with URL2 as the new location. This means that
+# URL2 is subject to any applicable permission checking, if it passes a new
+# request will be issued (which may result in a new round of rules checking,
+# with a new "current URL") or the new URL might be taken from the cache, and,
+# after successful loading, lynx's idea of what the loaded document's URL is
+# will be fully updated. All this does not happen if you just "pass" a changed
+# URL (or let it fall through), so this is generally the preferred way for
+# substituting URLs.
+# If the RedirectPerm variant is used, or if the optional word is supplied and
+# is either "permanent" or "301", act as if lynx had received a permanent
+# redirection (with HTTP status 301). In most cases this will not make a
+# noticeable difference. Lynx may cache the location in a special way for 301
+# redirections, so that the redirection is followed immediately the next time
+# the same original URL is accessed, without re-checking of rules. Therefore
+# the permanent variant should never be used if the desired outcome of rules
+# processing depends on variable conditions (see CONDITIONS below) or on
+# setting a special flag (see next item).
+#
+# PermitRedirection URL1
+# Mark following redirection as permitted, and continue processing. Some
+# redirection locations are normally not allowed, because permitting them in a
+# response from an arbitrary remote server would open a security hole, and
+# others are not allowed if certain restrictions options are in effect. Among
+# redirection locations normally always forbidden are lynxprog: and lynxexec:
+# schemes. With "default" anonymous restrictions in effect, many URL schemes
+# are disallowed if the user would not be allowed to use them with 'g'oto.
+# This rule allows to override the permission checking if rules processing ends
+# with a Redirect (including the RedirectPerm or RedirectTemp forms). It is
+# ignored otherwise, in particular, it does not influence acceptance if rules
+# processing ends with a "Pass" and a real redirection is received in the
+# subsequent HTTP request. If redirections are chained, it only applies to the
+# redirection that ends the same rules cycle. Note that the new URL is still
+# subject to other permission checks that are not specific to redirections; but
+# using this rule may still weaken the expected effect of -anonymous,
+# -validate, -realm, and other restriction options, including TRUSTED_EXEC and
+# similar in lynx.cfg, so be careful where you redirect to if restrictions are
+# important!
#
-# Rules are processed sequentially first to last, a rule applies
-# if the current URL (for the resource the user is trying to access)
-# matches URL1. case-sensitive (!) string comparison is used, in addition
-# URL1 can contain one '*' which is interpreted as a wildcard matching
-# 0 or more characters. So if for example
-# "http://example.com/dir/doc.html" is requested, it would matches any of
+# UseProxy URL1 PROXYURL
+# Stop processing further rules, and force access through the proxy given by
+# PROXYURL. PROXYURL should have the same form as required for foo_proxy
+# environment variables and lynx.cfg options, i.e., (unless you are trying to
+# do something unusual) "http://some.proxy-server.dom:port/". This rule
+# overrides any use of a proxy (or external gateway) that might otherwise apply
+# because of environment variables or lynx.cfg options, it also overrides any
+# "no_proxy" settings.
+#
+# UseProxy URL1 none
+# Mark request as NOT using any proxy (or external gateway), and continue
+# processing(!). For a request marked this way, any subsequent UseProxy
+# rule with a PROXYURL will be ignored, and any use of a proxy (or external
+# gateway) that might otherwise apply because of environment variables or
+# lynx.cfg options will be overridden. Note that the marking will not
+# survive a Redirect rule (since that will result, if successful, in a
+# new request).
+#
+# Alert URL1 MESSAGE
+# AlwaysAlert URL1 MESSAGE
+# UserMsg URL1 MESSAGE
+# InfoMsg URL1 MESSAGE
+# Progress URL1 MESSAGE
+# These produce various kinds of statusline messages, differing in whether
+# a pause is enforced and in its duration, immediately when the rule is
+# applied. AlwaysAlert shows the message text even in non-interactive mode
+# (-dump, -source, etc.). Rule processing continues after the message is
+# shown. As usual, these rules only apply if URL1 matches. MESSAGE is
+# the text to be displayed, it can contain one occurrence of "%s" which
+# will be replaced by the current URL, literal '%' characters should be
+# doubled as "%%".
+#
+# Rules are processed sequentially first to last for each request, a rule
+# applies if the current URL matches URL1. The current URL is initally the
+# URL for the resource the user is trying to access, but may change as the
+# result of applied Map rules. case-sensitive (!) string comparison is used,
+# in addition URL1 can contain one '*' which is interpreted as a wildcard
+# matching 0 or more characters. So if for example
+# "http://example.com/dir/doc.html" is requested, it would match any of
# the following:
# Pass http:*
# Pass http://example.com/*.html
@@ -56,14 +152,74 @@
# not in the machine's native representation for filenames.
#
# Anyone with experience configuring the venerable CERN httpd server will
-# recognize the syntax - in fact, the code implementing rules goes back
-# to a common ancestor. But note the differences: all URLs and URL-
+# recognize some of the syntax - in fact, the code implementing rules goes
+# back to a common ancestor. But note the differences: all URLs and URL-
# patterns here have to be given as absolute URLs, even for local files.
-# (Absolute URLs don't imply proxying - you cannot control that from here.)
+# (Absolute URLs don't imply proxying.)
+#
+# CONDITIONS
+# ----------
+# All rules mentioned can be followed by an optional CONDITION, which can
+# be used to further restrict when the rule should be applied (in addition
+# to the match on URL1). A CONDITION takes one of the forms
+# "if" CONDITIONFLAG
+# "unless" CONDITIONFLAG
+# and currently two condition flags are recognized:
+# "userspecified" (or abbreviated "userspec")
+# "redirected"
+# To explain these, first some terms need to be defined. A "request"
+# is...
+#
+# A user action (like following a link, or entering a 'g'oto URL) can either be
+# rejected immediately (for example, because of restrictions in effect, or
+# because of invalid input), or can generate a "request". For the purpose of
+# this discussion, a "request" is the sequence of processing done by lynx,
+# which might ultimately lead to an actual network request and loading and
+# display of data; a request can also result in rejection (for example, some
+# restrictions are checked at this stage), or in a redirection. A redirection
+# in turn can be rejected (which makes the request fail), or can automatically
+# generate a new request. A "request chain" is the sequence of one or more
+# requests triggered by the same user event that are chained together by
+# redirections.
+# For each request, some URL schemes are handled (or rejected) specially, see
+# Limitation 1 below, the others are passed to the generic access code. Rules
+# processing occurs at the beginning of the generic access code, before a
+# request is dispatched to the scheme-specific protocol module (but after
+# checking whether the request can be satisfied by re-displaying an already
+# cached document).
+# With these definitions, the meaning of the possible CONDITIONFLAGS:
+#
+# if redirected
+# The rule applies if the current request results from a redirection;
+# whether that was a real HTTP redirection or one generated by a rule
+# in the previous request makes no difference. In other words, the
+# condition is true if the current request is not the first one in the
+# request chain.
+#
+# if userspecified
+# The rule applies if the initial URL of the request chain was specified
+# by the user. Lynx marks a request as "user specified" for URLs that
+# come from 'g'oto prompts, as well as for following links in a bookmark
+# or Jump file and some other special (lynx-generated) pages that may
+# contain URLs that were typed in by the user.
+# Note that this is not a property of the request, but of the whole request
+# chain (based on where the first request's URL came from). The current
+# URL may differ from what the user typed
+# - because of initial fixups, including conversion of Guess-URLs and file
+# paths to full URLs,
+# - because of Map rules applied, and/or
+# - because of a previous redirection.
+# So to make reasonably sure a suspicious or potentially dangerous URL has
+# been entered by the user, i.e. is not a link or external redirection
+# location that cannot be trusted, a combination of "userspecified" and
+# "redirected" flags should be used, for example
+# Fail URL1 unless userspecified
+# Fail URL1 if redirected
+# ...
#
# CAVEAT
# ======
-# First, to squash any false expectations, and example for what NOT TO DO.
+# First, to squash any false expectations, an example for what NOT TO DO.
# It might be expected that a rule like
# Fail file://localhost/etc/passwd # <- DON'T RELY ON THIS
# could be used to prevent access to the file "/etc/passwd". This might
@@ -105,15 +261,13 @@
#
# You could also direct access for a scheme to a brief text explaining
# why it's not available:
-# Map news:* http://localhost/texts/newsserver-is-broken.html
-# (That text shouldn't contain any relative links, they would be
-# broken.)
+# Redirect news:* http://localhost/texts/newsserver-is-broken.html
#
# 2. Preventing accidental access
# -------------------------------
# If there is a page or site you don't want to access for whatever
# reason (say there's a link to it that crashes Lynx [don't forget to
-# report a bug], or it that starts sending you a 5 Mb file you don't
+# report a bug], or if that starts sending you a 5 Mb file you don't
# want, or you just don't like the people...), you can prevent yourself
# from accidentally accessing it:
# Fail http://bad.site.com/*
@@ -126,6 +280,8 @@
# following kind of rule will alow you to navigate, invisibly accessing
# the compressed files:
# Map file://localhost/somedir/*.html file://localhost/somedir/*.html.gz
+# or, perhaps better:
+# Redirect file://localhost/somedir/*.html file://localhost/somedir/*.html.gz
#
# 4. Use local copies
# -------------------
@@ -137,6 +293,12 @@
# Or even combine this with compressing the files:
# Map http://remote.com/docs/*.html file://localhost/home/me/docs/*.html.gz
#
+# Again, replacing the "Map" with "Redirect" is probably better - it will
+# allow you to see the _real_ location on the lynx INFO screen or in the
+# HISTORY list, will avoid duplicates in the cache if the same document is
+# loaded with two different URLs, and may allow you to 'e'dit the local
+# from within lynx if you feel like it.
+#
# 5. Broken links etc.
# --------------------
# A user has moved from http://www.siteA.com/~jdoe to http://siteB.org/john,
@@ -147,10 +309,13 @@
# which you're tired of seeing. This will not fix your bookmarks, and
# it will let you see the outdated URLs for longer (Limitation 3 below),
# but for a quick fix:
-# Map http://www.siteA.com/~jdoe/* http://siteB.org/john/*
-# Map http://www.provider.com/company/* http://www.company.com/*
-# But note that you are likely to create invalid links if not all documents
-# from a site are mapped (Limitation 3).
+# Redirect http://www.siteA.com/~jdoe/* http://siteB.org/john/*
+# Redirect http://www.provider.com/company/* http://www.company.com/*
+#
+# You could use "Map" instead of "Redirect", but this would let you see the
+# outdated URLs for longer and even bookmark them, and you are likely to
+# create invalid links if not all documents from a site are mapped
+# (Limitation 3).
#
# 6. DNS troubles
# ---------------
@@ -168,10 +333,202 @@
# Map http://www.w3.org/* http://www12.w3.org/*
#
# Note that this can break access to some name-based virtually hosted sites.
-
-
-# Limitations
-# ===========
+#
+# In this case use of "Map" is probably preferred over "Redirect", as long
+# as the URL on the left side contains the real and preferred hostname or
+# the problem is only temporary.
+#
+# 7. Avoid redirections
+# ---------------------
+# Some sites have a habit to provide links that don't go to the destination
+# directly but always force redirection via some intermediate URL. The
+# delay imposed by this, especially for users with slower connections and
+# for overloaded servers, can be avoided if the intermediate URLs always
+# follow some simple pattern: we can then anticipate the redirect that will
+# inevitably follow and generate it internally. For example,
+# Redirect http://lwn.net/cgi-bin/vr/* http://*
+#
+# Warning: The page authors may not like this circumvention. Often the
+# redirection is wanted by them to track access, sometimes in connection
+# with cookies. Some sites may employ mechanisms that defeat the shortcut.
+# It is your responsibility to decide whether use of this feature is
+# acceptable. (But note that the same effect can be achieved anyway for
+# any link by editing the URL, e.g. with the ELGOTO ('E') key in Lynx, so
+# a shortcut like this does not create some new kind of intrusion.)
+#
+# 8. Detailed proxy selection
+# ---------------------------
+# Basic use for this one should be obvious, if you have a need for it.
+# It simply allows selecting use (or non-use) of proxies on a more detailed
+# level than the traditional <scheme>_proxy and no_proxy variables, as well
+# as using different proxies for different sites.
+# For example, to request access through an anonymizing proxy for all pages
+# on a "suspicious" site:
+# UseProxy http://suspicious.site/* http://anonymyzing.proxy.dom/
+# (as long as all URLs really have a matching form, not some alternative
+# like <http://suspicious.site:80/> or <http://SuSpIcIoUs.site/>!)
+#
+# To access some site through a local squid proxy, running on the same host
+# as lynx, except for some image types (say because you rarely access images
+# with lynx anyway, and if you do, you don't want them cached by the proxy):
+# UseProxy http://some.site/*.gif none
+# UseProxy http://some.site/*.jpg none
+# UseProxy http://some.site/* http://localhost:3128/
+# Note that order is important here.
+#
+# To exempt a local address from all proxying:
+# UseProxy http://local.site/* none
+#
+# Note however that for some purposes the "no_proxy" setting may be better
+# suited than "UseProxy ... none", because of its different matching logic
+# (see comments in lynx.cfg).
+#
+# 9. Invent your own scheme
+# -------------------------
+# Suppose you want to teach lynx to handle a completely new URL scheme.
+# If what's required for the new scheme is already available in lynx in
+# _some_ way, this may be possible with some inventive use of rules.
+# As an example, let's assume you want to introduce a simple "man:" scheme
+# for showing manual pages, so (for a Unix-like system, at least) "man:lynx"
+# would display the same help information as the "man lynx" command and so
+# on (we ignore section numbers etc. for simplicity here).
+# First, since lynx doesn't know anything about a "man:" scheme, it will
+# normally reject any such URLs at an early stage. However, a trick exists
+# to bypass that hurdle: define a man_proxy environment variable *outside of
+# lynx, before starting lynx* (it won't work in lynx.cfg), the actual value
+# is unimportant and won't actually be used. For example, in your shell:
+# export man_proxy=X
+#
+# If you already have some kind of HTTP-accessible man gateway available,
+# the task then probably just amounts to transforming the URL into the right
+# form. For one such gateway (in this case, a CGI script running on the
+# local machine), the rule
+# Redirect man:* http://localhost/cgi-bin/dwww?type=runman&location=*/
+# or, alternatively,
+# UseProxy man:* none
+# Map man:* http://localhost/cgi-bin/dwww?type=runman&location=*/
+# does it, for other setups the right-hand side just has to be modified
+# appropriately. The "UseProxy" is to make sure the bogus man_proxy gets
+# ignored.
+#
+# If no CGI-like access is available, you might want to invoke your system's
+# man command directly for a man: URL. Here is some discussion of how this
+# could be done, and why ultimately you may not want to do it; this is also
+# an opportunity to show examples for how some of the rules and conditions
+# can be used that haven't been discussed in detail elsewhere.
+# Lynx provides the lynxexec: (and the similar lynxprog:) scheme for running
+# (nearly) arbitrary commands locally. At the heart of employing it for
+# man: would be a rule like this:
+# Redirect man:* "lynxexec:/usr/bin/man *"
+# (It is a peculiarity of this scheme that the literal space and quoting
+# are necessary here. Also note that Map cannot be used here instead of
+# Redirect, since lynxexec, as a special kind of URL, needs to be handled
+# "early" in a request.)
+# Of course, execution of arbitrary commands is a potentially dangerous
+# thing. lynxexec has to be specifically enabled at compile time and in
+# lynx.cfg (or with command line options), and there are various levels
+# of control, too much to go into here. It is assumed in the following that
+# lynxexec has been enabled to the degree necessary (allow /usr/bin/man
+# execution) but hopefully not too much.
+# What needs to be prevented is that allowing local execution of the man
+# command might unintentionally open up unwanted execution of other commands,
+# possibly by some trick that could be exploited. For example, redirecting
+# man:* as above, the URL "man:lynx;rm -r *" could result in the command
+# "man lynx;rm -r *" executed by the system, with obvious disastrous results.
+# (This particular example won't actually work, for several reasons; but
+# for the purpose of discussion let's assume it did, there may be similar
+# ones that do.)
+# Because of such dangers, redirection to a lynxexec: is normally never
+# accepted by lynx. We need at least a PermitRedirection rule to override
+# this protective limitation:
+# PermitRedirection man:*
+# Redirect man:* "lynxexec:/usr/bin/man *"
+# But now we have potentially opened up local execution more than is
+# acceptable via the man: scheme, so this needs to be examined.
+# There are two aspects to security here: (1) restricting the user, and (2)
+# protecting the user. The first could also be phrased as protecting the
+# system from the user; the second as preventing lynx (and the system) from
+# doing things the user doesn't really want. Aspect (1) is very important
+# for setups providing anonymous guest accounts and similarly restricted
+# environments. (Otherwise shell access is normally allowed, and trying to
+# protect the system in lynx would be rather pointless.) As far as access
+# to some URLs is concerned, the difference can be characterized in terms of
+# which sources of URLs are trusted enough to allow access: for (1), only
+# links occurring in a limited number of documents are trusted enough for
+# some (or all) URLs, user input at 'g'oto prompts and the like is not (if
+# not completely disabled). For (2) and assuming a user with normal shell
+# privileges, the user may be trusted enough to accept any URL explicitly
+# entered, but URLs from arbitrary external sources are not - someone might
+# try to use them to trick the user (by following an innocent-looking link)
+# or lynx (by following a redirection) into doing something undesirable.
+#
+# In the following we are concerned with (2); it is assumed that providers
+# of anonymous accounts would not want to follow this path, and would have
+# no need for additional schemes that imply local execution anyway. (For
+# one thing, with the man example they would have to carefully check that
+# users cannot break out of the man command to a local shell prompt.)
+#
+# Getting back to the example, it was already mentioned that lynx does not
+# allow redirections to lynxexec. In fact this continues to be disallowed
+# for real redirection received from HTTP servers. But we have introduced
+# a new man: scheme, and the lynx code that does the redirection checking
+# doesn't know anything about special considerations for man: URLs, so
+# an external HTTP server might send a redirection message with "Location:
+# man:<something>", which lynx would allow, and which would in turn be
+# redirected by our rule to "lynxexec:/usr/bin/man <something>". Unless
+# we are 100% sure that either this can never happen or that the lynxexec
+# URL resulting from this can have no harmful effect, this needs to be
+# prevented. It can be done by checking for the "redirected" condition,
+# either by putting something like (the first line is of course optional)
+# Alert man:* "Redirection to man: not allowed" if redirected
+# Fail man:* if redirected
+# somewhere before the Redirect rule, or, reversing the logic, by adding
+# a condition to the redirection rules, i.e. they become
+# PermitRedirection man:* unless redirected
+# Redirect man:* "lynxexec:/usr/bin/man *" unless redirected
+# (actually, putting the condition on either one of the rules would be
+# sufficient). The second variant assumes that the attempted access to
+# man: via redirection will ultimately fail because there is no other way
+# to handle such URLs.
+#
+# The above should take care of rejecting man: URLs from redirections, but
+# what about regular links in HTML (like <A HREF="man:...">)? As long as
+# it can be assumed that the user will always inspect each and every link
+# before following it, and never follow a link that can have harmful effect,
+# no further restrictions are necessary. But this is a very big assumption,
+# unrealistic except perhaps in some single-user setups where the user is
+# is identical with the rule writer. So normally most links have to be
+# regarded as suspect, and only URLs entered by the user can be accepted:
+# Alert man:* "Redirection to man: not allowed" if redirected
+# Fail man:* if redirected
+# Alert man:* "Link to man: not allowed" unless userspecified
+# Fail man:* unless userspecified
+#
+# With these restrictions we have limited the ways our new man: scheme can
+# be used rather severely, to the point where its usefulness is questionable.
+# In addition to 'g'oto prompts, it may work in Jump files; also, should
+# links to man:<something> appear in HTML text, the user could retype them
+# manually or use the ELGOTO ('E') command with some trivial editing (like
+# adding a space) to "confirm" the URL. Even if the precautions outlined
+# above are followed: THIS TEXT DOES NOT IMPLY ANY PROMISE THAT, BY FOLLOWING
+# THE EXAMPLES, LYNX WILL BE SAFE. On the other hand, some of the precautions
+# *may* not be necessary: it is possible that careful use of TRUSTED_EXEC
+# options in lynx.cfg could offer enough protection while making the new
+# scheme more useful.
+#
+# If all this seems a bit too scary, that's intentional; it should be noted
+# that these considerations are not in general necessary for "harmless" URL
+# schemes, but appropriate for this "extreme" example. One last remark
+# regarding the hypothetical man scheme: instead of implementing it through
+# "lynxexec:" or "lynxprog:", it would be somewhat safer to use "lynxcgi:"
+# instead if it is supported. A simple lynxcgi script would have to write
+# the man page to stdout (either converted to text/html or as plain text,
+# preceded by an appropriate Content-Type header line), and all necessary
+# checking for special shell characters would be done within the script -
+# lynx does not use the system() function to run the script.
+#
+# Other Limitations
+# =================
# First, see CAVEAT above. There are other limitations:
#
# 1. Applicable URL schemes
@@ -179,11 +536,15 @@
# Rules processing does not apply to all URL schemes. Some are
# handled differently from the generic access code, therefore rules
# for such URLs will never be "seen". This limitation applies at
-# least to lynxexec:, lynxprog:, mailto:, and LYNXHIST: URLs.
+# least to lynxexec:, lynxprog:, mailto:, LYNXHIST:, LYNXMESSAGES:,
+# LYNXCFG:, and LYNXCOMPILEOPTS: URLs. You shouldn't be tempted
+# to try to redirect most of these schemes anyway, but this also
+# makes it impossible to disable them with "Fail" rules.
#
# Also, a scheme has to be known to Lynx in order to get as far as
# applying rules - you cannot just define your own new foobar: scheme
-# and then map it to something here.
+# and then map it to something here, but see Application 9, above,
+# for a workaround.
#
# 2. No re-checking
# -----------------
@@ -193,6 +554,8 @@
# it allows specific exceptions. Of course it means that users for
# whom any restrictions must be enforced cannot have write access to a
# personal rules file, but that should be obvious anyway!
+# This limitation does not applies if "Redirect" is used, in that case
+# the new URL will always be re-examined.
#
# 3. Mappings are invisible
# -------------------------
@@ -209,6 +572,10 @@
# since they are taken to be relative to the "Document URL" (if no BASE tag
# is present) when the HTML is parsed.
#
+# This limitation does not apply if "Redirect" is used - the new location
+# will be visible to the user, and will be used by lynx for resolving
+# relative URLs within the document.
+#
# 4. Interaction with proxying
# ----------------------------
# Rules processing is done after most other access checks, but before
@@ -224,3 +591,50 @@
# don't do that"; in some cases setting the no_proxy variable will help.
# Example 3 happens to work nicely if there is a http_proxy but no
# ftp_proxy.
+#
+# This limitation does not come into play if a "UseProxy" rule is applied,
+# in either of its two forms: with a PROXYURL, proxying is fully under
+# the control of the rules author, and with "none", subsequent proxy
+# and gateway checking is completely disabled. It is therefore a good
+# idea to combine any "Map" and "Pass" rules that might result in passing
+# the changed URL with explicit "UseProxy" rules, if the rules file is
+# expected to be used together with proxying; or else always use "Redirect"
+# instead of simple passing.
+#
+# 5. Case-sensitive matching
+# --------------------------
+# The matching logic is generic string-based. It doesn't know anything
+# about URL syntax, and so it cannot know in which parts of a URL case
+# matters and where it doesn't. As a result, all comparisons are case-
+# sensitive. If (a limited number of) case variations of a URL need
+# to be dealt with, several rules can be used instead of one.
+# In particular, this makes "UseProxy ... none" in some ways more limited
+# than a no_proxy setting.
+#
+# 6. Redirection differences
+# --------------------------
+# For some URLs lynx does never check after a request whether a redirection
+# occurs; that makes the "Redirect" rule useless for such URLs (in addition
+# to those mentioned under limitation 1.). Some of them are some gopher
+# types, telnet: and similar in most situations, newspost: and similar,
+# lynxcgi:, and some other private types. Trying to redirect these will
+# make access fail. You probable don't want to change such URLs anyway,
+# but if you feel you must, try using "Map" and "Pass" instead.
+#
+# The -noredir command line option only applies for real HTTP redirection
+# responses, Redirect rules are still applied. Also for certain other
+# command line options (-mime_header, -head) and command keys (HEAD) lynx
+# shows the redirection message (or part of it) in case of a real HTTP
+# redirection, instead of following the redirection. Here, too, a Redirect
+# rule remains effective (there is no redirection message to show, after all).
+#
+# 7. URLs required
+# ----------------
+# Full absolute URLs (modulo possible "*" matching wildcards) are required
+# in rules. Strings like "www.somewhere.com" or "/some/dir/some.file" or
+# "www.somewhere.com/some/dir/some.file" are not URLs. Lynx may accept
+# them as user input, as abbreviated forms for URLs; but by the time the
+# rules get checked, those have been converted to full URLs, if they can
+# be recognized. This also means that rules cannot influence which strings
+# typed at a 'g'oto prompt are recognized for URLs - rules processing kicks
+# in later.
diff --git a/gnu/usr.bin/lynx/samples/installdirs.html b/gnu/usr.bin/lynx/samples/installdirs.html
new file mode 100644
index 00000000000..c3f63c48f8d
--- /dev/null
+++ b/gnu/usr.bin/lynx/samples/installdirs.html
@@ -0,0 +1,18 @@
+<HTML>
+<TITLE>File Management Install Targets</TITLE>
+<!-- This is an example file for the Lynx dired "install" functionality.
+ Lynx needs to be compiled with dired support and OK_INSTALL defined.
+ For the dired "install" function to work, this file has to exist
+ in the HOME directory under the name ".installdirs.html" or (for
+ 8+3, i.e. DOS-like, filesystems) "instdirs.htm".
+ -->
+<BODY>
+<H1>Install Target directories</H1>
+<UL>
+<LH>Choose destination:</LH>
+<LI><A HREF="LYNXDIRED://INSTALL_DEST/~/">install in Home directory</A>
+<LI><A HREF="LYNXDIRED://INSTALL_DEST/~/bin">install in ~/bin</A>
+<LI><A HREF="LYNXDIRED://INSTALL_DEST/tmp">install in /tmp</A>
+</UL>
+</BODY>
+</HTML>
diff --git a/gnu/usr.bin/lynx/samples/jumpsUnix.html b/gnu/usr.bin/lynx/samples/jumpsUnix.html
index 6e86da1dfd4..4c5359e48fe 100644
--- a/gnu/usr.bin/lynx/samples/jumpsUnix.html
+++ b/gnu/usr.bin/lynx/samples/jumpsUnix.html
@@ -5,9 +5,18 @@
</head>
<body>
<h1>Shortcut List</h1>
- Following is a list of shortcut names and the target links associated
- with them. In Lynx, pressing J followed by one of these shortcut names
- will jump you directly to the link. This list will expand over time.<p>
+ This is a sample jumps file created in the early days of Lynx:
+ you should use it as a template, replacing with your own choices.
+ See Users Guide for details of how the `j' command works.
+<p>
+ *** IMPORTANT *** If you want to use `?' with `j' to recall
+ your own list of abbreviations, you must make sure
+ you always have the correct URL corresponding to `?' below:
+ otherwise, Lynx may display an incorrect list with misleading results.
+<p>
+ *** ALSO *** The entries must be in alphabetic order, with `?' first:
+ otherwise, Lynx may not be able to find them all.
+<p>
<b>Name</b>&nbsp;&nbsp;&nbsp;<b>Link</b>
<!-- The list *MUST* be kept SORTED, one entry per line -->
<dl compact>
diff --git a/gnu/usr.bin/lynx/samples/lynx-keymaps b/gnu/usr.bin/lynx/samples/lynx-keymaps
index ee6039afe23..0a1c321415f 100644
--- a/gnu/usr.bin/lynx/samples/lynx-keymaps
+++ b/gnu/usr.bin/lynx/samples/lynx-keymaps
@@ -107,10 +107,42 @@ setkey "^[[Z" 0x10F
# \v vertical tab
# \<number> octal number, up to 3 digits, e.g., "\033".
# \d<number> decimal number, up to 3 digits, e.g., "\d99"
-# \x<number> hexidecimal number, up to 2 digits, e.g., "\xFF"
+# \x<number> hexadecimal number, up to 2 digits, e.g., "\xFF"
#
# For Unix-systems (which have termcap or terminfo) you may also use symbols
# that refer to the termcap/terminfo, by referencing the name bracketed by
# "^(" and ")", e.g.,
setkey "^(cuu1)" UPARROW
setkey "^(up)" UPARROW
+#
+# The following extension, introduced after lynx2.8.2, allows to force
+# recognition of meta (ESC) prefixes - especially useful with the
+# "Bash-like" lineeditor binding. Its use is unnecessary in most
+# cases if Lynx was built with ncurses, but is probably necessary for
+# all keys that should recognize ESC as a prefix if Lynx was built with
+# slang.
+#
+# setkey ESC-SEQUENCE Meta-LETTER
+# setkey ESC-SEQUENCE Meta-KEYSYM
+# setkey ESC-SEQUENCE Meta-KEYSYM_NAME
+#
+# for example
+#setkey "\033b" Meta-b
+#setkey "\033e" Meta-'e'
+#setkey "\033\033[28~" Meta-F1
+#
+# The following extensions, introduced after lynx2.8.2, allow mapping
+# escape sequences directly to key commands (lynxactioncodes).
+#
+# setkey ESC-SEQUENCE LAC:LYNX_ACTION
+# setkey ESC-SEQUENCE LAC:LYNX_ACTION:LYNX_EDITACTION
+#
+# where LYNX_ACTION is a key command specified as for lynx.cfg KEYMAP
+# options and as listed on the KEYMAP ('K') screen, and LYNX_EDITACTION
+# is a line-editor action specified as for KEYMAP and as listed in Line
+# Editor help pages. Using this form makes remapping according to user
+# preference with KEYMAP impossible, and should thus be used sparingly
+# (in general, use KEYMAP with PASS instead, if the goal is to force
+# recognition of a key in form text fields). For example:
+#
+#setkey "\033e" LAC:EDITTEXTAREA:PASS
diff --git a/gnu/usr.bin/lynx/samples/lynx.lss b/gnu/usr.bin/lynx/samples/lynx.lss
index 13f673f8a60..9c6477e61fc 100644
--- a/gnu/usr.bin/lynx/samples/lynx.lss
+++ b/gnu/usr.bin/lynx/samples/lynx.lss
@@ -51,6 +51,7 @@ whereis:reverse+underline:magenta:cyan
# currently not used
#value:normal:green
#high:bold:brightmagenta
+forwbackw.arrow:reverse
# Styles with classes - <ul class=red> etc.
ul.red:underline:brightred
diff --git a/gnu/usr.bin/lynx/samples/mailto-form.pl b/gnu/usr.bin/lynx/samples/mailto-form.pl
new file mode 100644
index 00000000000..41174d9388e
--- /dev/null
+++ b/gnu/usr.bin/lynx/samples/mailto-form.pl
@@ -0,0 +1,280 @@
+#! /usr/bin/perl -w
+# Some scripts for handling mailto URLs within lynx via an interactive form
+#
+# Warning: this is a quick demo, to show what kinds of things are possible
+# by hooking some external commands into lynx. Use at your own risk.
+#
+# Requirements:
+#
+# - Perl and CGI.pm.
+# - A "sendmail" command for actually sending mail (if you need some
+# other interface, change the code below in sub sendit appropriately).
+# - Lynx compiled with support for lynxcgi, that means EXEC_CGI must have
+# been defined at compilation, usually done with
+# ./configure --enable-cgi-links
+# - Lynx must have support for CERN-style rules as of 2.8.3, which must
+# not have been disabled at compilation (it is enabled by default).
+#
+# Instructions:
+# (This is for people without lynxcgi experience; if you are already
+# use lynxcgi, you don't have to follow everything literally, use
+# common sense for picking appropriate file locations in your situation.)
+#
+# - Make a subdirectory 'lynxcgi' under you home directory, i.e.
+# mkdir ~/lynxcgi
+# - Put this three script file mailto-form.pl there and make it
+# executable. For example,
+# cp mailto-form.pl ~/lynxcgi
+# chmod a+x ~/lynxcgi/mailto-form.pl
+# - Edit mailto-form.pl (THIS FILE), there are some strings that
+# that need to be changed, see ### Configurable variables ###
+# below.
+# - Allow lynx to execute lynxcgi files in that directory, for example,
+# put in your lynx.cfg file:
+# TRUSTED_LYNXCGI:<tab>/home/myhomedir/lynxcgi/mailto-form.pl
+# where <tab> is a real TAB character and you have to put the real
+# location of your directory in place of "myhomedir", of course.
+# The '~' abbreviation cannot be used.
+# You could also just enable execution of all lynxcgi scripts, by
+# not having any TRUSTED_LYNXCGI options in lynx.cfg at all, but
+# that can't be recommended.
+# - Tell lynx to actually use the lynxcgi scripts for mailto URLs.
+# There are two variants:
+# a) Redirect "mailto"
+# Requires patched lynx, currently not yet in the developent code.
+# Use the following two lines in the file that is configured as
+# RULESFILE in lynxcfg:
+# PermitRedirection mailto:*
+# Redirect mailto:* lynxcgi:/home/myhomedir/lynxcgi/mailto-form.pl?from=myname@myhost&to=*
+# You can also put them directly in lynx.cfg, prefixing each with
+# "RULE:". Replace ""myhomedir", "myname", and "myhost" with your
+# correct values, of course.
+# b) Redirect "xmailto"
+# Requires defining a fake proxy before starting lynx, like
+# export xmailto_proxy=dummy # or for csh: setenv xmailto_proxy dummy
+# Requires that you change "mailto" to "xmailto" each time you want
+# to activate a mailto link. This can be done conveniently with
+# a few keys: 'E', ^A, 'x', Enter.
+# Use the following two lines in the file that is configured as
+# RULESFILE in lynxcfg:
+# PermitRedirection xmailto:*
+# Redirect xmailto:* lynxcgi:/home/myhomedir/lynxcgi/mailto-form.pl?from=myname@myhost&to=*
+# You can also put them directly in lynx.cfg, prefixing each with
+# "RULE:". Replace ""myhomedir", "myname", and "myhost" with your
+# correct values, of course.
+#
+# Limitations:
+#
+# - Only applies to mailto URLs that appear as links or are entered at
+# a 'g'oto prompt. Does not apply to other ways of sending mail, like
+# the 'c' (COMMENT) key, mailto as a FORM action, or mailing a file
+# from the 'P'rinting Options screen.
+# - Nothing is done for charset labelling, content-transfer-encoding
+# of non-ASCII characters, and other MIME niceties.
+#
+# Klaus Weide 20000712
+
+########################################################################
+########## Configurable variables ######################################
+
+$SENDMAIL = '/usr/sbin/sendmail';
+# The location of your sendmail binary
+$SELFURL = 'lynxcgi:/home/lynxdev/lynxcgi/mailto-form.pl';
+# Where this script lives in URL space
+$SEND_TOKEN = '/vJhOp6eQ';
+# When found in the PATH_INFO part of the URL,
+# this causes the script to actually send mail
+# by calling $SENDMAIL instead of just throwing
+# up a form. CHANGE IT! And don't tell anyone!
+# Treat it like a password.
+# Must start with '/', probably should have only
+# alphanumeric ASCII characters.
+
+## Also, make sure the first line of this script points
+## to your PERL binary
+
+########## Nothing else to change - I hope #############################
+########################################################################
+
+use CGI;
+
+$|=1;
+
+### Upcase first character
+##sub ucfirst {
+## s/^./\U$1/;
+##}
+
+# If there are mutiple occurrences of the same thing, how to join them
+# into one string
+%joiner = (from => ', ',
+ to => ', ',
+ cc => ', ',
+ subject => '; ',
+ body => "\n\n"
+ );
+sub joiner {
+ my ($key) = @_;
+ if ($joiner{$key}) {
+ $joiner{$key};
+ } else {
+ " ";
+ }
+}
+
+# Here we check whether this script is called for actual sending, rather
+# than form generation. If so, all the rest is handled by sub sendit, below.
+$pathinfo = $ENV{'PATH_INFO'};
+if (defined($pathinfo) && $pathinfo eq $SEND_TOKEN) {
+ $q = new CGI;
+ print $q->header('text/plain');
+ sendit();
+ exit;
+}
+
+$method = $ENV{'REQUEST_METHOD'};
+$querystring = $ENV{'QUERY_STRING'};
+if ($querystring) {
+ if ($method && $method eq "POST" && $ENV{'CONTENT_LENGTH'}) {
+ $querystring =~ s/((^|\&)to=[^?&]*)\?/$1&/;
+ $q0 = new CGI;
+ $q = new CGI($querystring);
+ @fields = $q0->param();
+ foreach $key (@fields) {
+ @vals = $q0->param($key);
+# print "Content-type: text/html\n\n";
+# print "Appending $key to \$q...\n";
+ $q->append($key, @vals);
+# print "<H2>Current Values in \$q0</H2>\n";
+# print $q0->dump;
+# print "<H2>Current Values in \$q</H2>\n";
+# print $q->dump;
+
+ }
+
+ } else {
+ $querystring =~ s/((^|\&)to=[^?&]*)\?/$1&/;
+ $q = new CGI($querystring);
+ }
+} else {
+ $q = new CGI;
+}
+
+print $q->header;
+
+$long_title = $ENV{'QUERY_STRING'};
+$long_title =~ s/^from=([^&]*)\&to=//;
+$long_title = "someone" unless $long_title;
+$long_title = "Compose mail for $long_title";
+if (length($long_title) > 72) {
+ $title = substr($long_title,0,72) . "...";
+} else {
+ $title = $long_title;
+}
+$long_title =~ s/&/&amp;/g;
+$long_title =~ s/</&lt;/g;
+print
+ $q->start_html($title), "\n",
+ $q->h1($long_title), "\n",
+ $q->start_form(-method=>'POST', -action => $SELFURL . $SEND_TOKEN), "\n";
+
+print "<TABLE>\n";
+@fields = $q->param();
+foreach $key (@fields) {
+ @vals = $q->param($key);
+ if (scalar(@vals) != 1) {
+ print "multiple values " . scalar(@vals) ." for $key!\n";
+ $q->param($key, join (joiner($key), @vals));
+ }
+}
+foreach $key (@fields) {
+ $_ = lc($key);
+ if ($_ ne $key) {
+ print "noncanonical case for $key!\n";
+ $val=$q->param($key);
+ $q->delete($key);
+ if (!$q->param($_)) {
+ $q->param($_, $val);
+ } else {
+ $q->param($_, $q->param($_) . joiner($_) . "$val");
+ }
+ }
+}
+foreach $key ('from', 'to', 'cc', 'subject') {
+ print $q->Tr,
+ $q->td(ucfirst($key) . ":"),
+ $q->td($q->textfield(-name=>$key,
+ -size=>60,
+ -default=>$q->param($key))), "\n";
+ $q->delete($key);
+}
+
+# Also pass on any unrecognized header fields that were specified.
+# This may not be a good idea for general use!
+# At least some dangerous header fields may have to be suppressed.
+@keys = $q->param();
+if (scalar(@keys) > (($q->param('body')) ? 1 : 0)) {
+ print "<TR><TD colspan=2><EM>Additional headers:</EM>\n";
+ foreach $key ($q->param()) {
+ if ($key ne 'body') {
+ print $q->Tr,
+ $q->td(ucfirst($key) . ":"),
+ $q->td($q->textfield(-name=>$key,
+ -size=>60,
+ -default=>$q->param($key))), "\n";
+ }
+ }
+}
+print "</TABLE>\n";
+print $q->textarea(-name=>'body',
+ -default=>$q->param('body')), "\n";
+print "<PRE>\n\n</PRE>", "\n",
+ $q->submit(-value=>"Send the message"), "\n",
+ $q->endform, "\n";
+
+print "\n";
+exit;
+
+# This is for header field values.
+sub sanitize_field_value {
+ my($val) = @_;
+ $val =~ s/\0/./g;
+ $val =~ s/\r\n/\n/g;
+ $val =~ s/\r/\n/g;
+ $val =~ s/\n*$//g;
+ $val =~ s/\n+/\n/g;
+ $val =~ s/\n(\S)/\n\t$1/g;
+ $val;
+}
+
+sub sendit {
+ open (MAIL, "| $SENDMAIL -t -oi -v") || die ("$0: Can't run sendmail: $!\n");
+ @fields = $q->param();
+ foreach $key (@fields) {
+ @vals = $q->param($key);
+ if (scalar(@vals) != 1) {
+ print "multiple values " . scalar(@vals) ." for $key!\n";
+ $q->param($key, join (joiner($key), @vals));
+ }
+ }
+ foreach $key (@fields) {
+ if ($key ne 'body') {
+ if ($key =~ /[^A-Za-z0-9_-]/) {
+ print "$0: Ignoring malformed header field named '$key'!\n";
+ next;
+ }
+ print MAIL ucfirst($key) . ": " .
+ sanitize_field_value($q->param($key)) . "\n"
+ or die ("$0: Feeding header to sendmail failed: $!\n");
+ }
+ }
+ print MAIL "\n"
+ or die ("$0: Ending header for sendmail failed: $!\n");
+ print MAIL $q->param('body'), "\n"
+ or die ("$0: Feeding body to sendmail failed: $!\n");
+ close(MAIL)
+ or warn $! ? "Error closing pipe to sendmail: $!"
+ : ($? & 127) ? ("Sendmail killed by signal " . ($? & 127) .
+ ($? & 127) ? ", core dumped" : "")
+ : "Return value " . ($? >> 8) . " from sendmail";
+}
diff --git a/gnu/usr.bin/lynx/samples/mild-colors.lss b/gnu/usr.bin/lynx/samples/mild-colors.lss
index 163242eab5e..db9fb048dc5 100644
--- a/gnu/usr.bin/lynx/samples/mild-colors.lss
+++ b/gnu/usr.bin/lynx/samples/mild-colors.lss
@@ -14,18 +14,18 @@ var:bold:cyan
samp:bold:cyan
b:bold:cyan
i:bold:cyan
-alink:reverse:brightgreen:black
+alink:reverse:brightgreen:default
a:bold:green
-img:dim:cyan:black
-status:reverse:cyan:black
+img:dim:cyan:default
+status:reverse:cyan:default
fig:normal:gray
caption:reverse:cyan
hr:normal:gray
-blockquote:normal:cyan:black
+blockquote:normal:cyan:default
address:normal:cyan
title:normal:cyan:default
-tt:normal:white:black
-h1:bold:cyan:black
+tt:normal:white:default
+h1:bold:cyan:default
label:normal:cyan
value:normal:cyan
high:bold:cyan
diff --git a/gnu/usr.bin/lynx/scripts/cfg2html.pl b/gnu/usr.bin/lynx/scripts/cfg2html.pl
new file mode 100644
index 00000000000..9f5fb6d02b0
--- /dev/null
+++ b/gnu/usr.bin/lynx/scripts/cfg2html.pl
@@ -0,0 +1,506 @@
+#!/usr/bin/perl -w
+#
+# This script uses embedded formatting directives in the lynx.cfg file to
+# guide it in extracting comments and related information to construct a
+# set of HTML files. Comments begin with '#', and directives with '.'.
+# Directives implemented:
+#
+# h1 {Text}
+# major heading. You may specify the same major heading in
+# more than one place.
+# h2 {Text}
+# minor heading, i.e. a keyword.
+# ex [number]
+# the following line(s) are an example. The [number] defaults
+# to 1.
+# nf [number]
+# turn justification off for the given number of lines, defaulting
+# to the remainder of the file.
+# fi
+# turn justification back on
+#
+
+require "getopts.pl";
+
+# Options:
+# -a show all options, not only those that are available.
+# -m mark unavailable options with an '*'. Data for this is read
+# from standard input.
+# -s sort entries in body.html
+&Getopts('ams');
+
+if ( defined $opt_m ) {
+ @settings_ = <STDIN>;
+ %settings_avail = ();
+ foreach $l (@settings_) {
+ chop $l;
+ if ($l =~ /^[a-zA-Z_][a-zA-Z_0-9]*$/) {
+ $settings_avail{uc $l} = 1;
+ }
+ }
+} else {
+ $opt_a = 1;
+}
+
+# This sub tells whether the support for the given setting was enabled at
+# compile time.
+sub ok {
+ local ($name) = @_;
+ local ($ret) = defined $opt_a || defined($settings_avail{uc $name})+0;
+ $ret;
+}
+
+
+if ( $#ARGV < 0 ) {
+ &doit("lynx.cfg");
+} else {
+ while ( $#ARGV >= 0 ) {
+ &doit ( shift @ARGV );
+ }
+}
+exit (0);
+
+
+# process a Lynx configuration-file
+sub doit {
+ local ($name) = @_;
+
+ # Ignore our own backup files
+ if ( $name =~ ".*~" ) {
+ return;
+ }
+
+ # Read the file into an array in memory.
+ open(FP,$name) || do {
+ print STDERR "Can't open $name: $!\n";
+ return;
+ };
+ local(@input) = <FP>;
+ close(FP);
+
+ for $n (0..$#input) {
+ chop $input[$n]; # trim newlines
+ $input[$n] =~ s/\s*$//; # trim trailing blanks
+ $input[$n] =~ s/^\s*//; # trim leading blanks
+ }
+
+ &gen_alphatoc(@input);
+ @cats = &gen_cattoc(@input);
+ &gen_body(@input);
+}
+
+sub gen_alphatoc {
+ local(@input) = @_;
+ local (@minor);
+ local ($n, $m, $c, $d);
+ local ($output="alphatoc.html");
+ open(FP,">$output") || do {
+ print STDERR "Can't open $output: $!\n";
+ return;
+ };
+ print FP <<'EOF';
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<html>
+<head>
+<link rev="made" href="mailto:lynx-dev@sig.net">
+<title>Settings by name</title>
+</head>
+<body>
+<h1>Alphabetical table of settings</h1>
+EOF
+ $m=0;
+ for $n (0..$#input) {
+ if ( $input[$n] =~ /^\.h2\s*[A-Z][A-Z0-9_]*$/ ) {
+ $minor[$m] = $input[$n];
+ $minor[$m] =~ s/^.h2\s*//;
+ $m++ if (ok($minor[$m]) || defined $opt_a);
+ }
+ }
+ @minor = sort @minor;
+ # index by the first character of each keyword
+ $c=' ';
+ for $n (0..$#minor) {
+ $d = substr($minor[$n],0,1);
+ if ($d ne $c) {
+ printf FP "<a href=\"#%s\">%s</a> \n", $d, $d;
+ $c=$d;
+ }
+ }
+ # index by the first character of each keyword
+ $c=' ';
+ for $n (0..$#minor) {
+ $d = substr($minor[$n],0,1);
+ if ($d ne $c) {
+ printf FP "<h2><a name=%s>%s</a></h2>\n", $d, $d;
+ $c=$d;
+ }
+ local ($avail = ok($minor[$n]));
+ local ($mark = !$avail && defined $opt_m ? "*" : "");
+ if (defined $opt_a || $avail) {
+ printf FP "<a href=\"body.html#%s\">%s</a>&nbsp;&nbsp;\n", $minor[$n], $minor[$n] . $mark;
+ };
+ }
+ $str = <<'EOF'
+<p>
+<a href=cattoc.html>To list of settings by category</a>
+EOF
+. (defined $opt_a && defined $opt_m ?
+"<p>Support for all settings suffixed with '*' was disabled at compile time.\n" :
+ "") . <<'EOF'
+</body>
+</html>
+EOF
+ ;print FP $str;
+ close(FP);
+}
+
+# This uses the associative array $cats{} to store HREF values pointing into
+# the cattoc file.
+#
+# We could generate this file in alphabetic order as well, but choose to use
+# the order of entries in lynx.cfg, since some people expect that arrangement.
+sub gen_body {
+ local(@input) = @_;
+ local ($n, $m, $c, $p, $h1, $h2, $any);
+ local ($output="body.html");
+ open(FP,">$output") || do {
+ print STDERR "Can't open $output: $!\n";
+ return;
+ };
+ print FP <<'EOF';
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<html>
+<head>
+<link rev="made" href="mailto:lynx-dev@sig.net">
+<title>Description of settings in lynx configuration file</title>
+</head>
+<body>
+EOF
+ $d = -1;
+ $p = 0;
+ $m = 0;
+ $h1 = "";
+ $sp = ' ';
+ $ex = 0;
+ $nf = 0;
+ $any = 0;
+ $next = 0;
+ $left = 0;
+ undef %keys;
+
+ local (@optnames);
+ local (%optname_to_fname);#this maps optname to fname - will be used
+ #for alphabetical output of the content
+ local ($curfilename = "tmp000");#will be incremented each time
+ local ($tmpdir = "./");#temp files will be created there
+ close(FP);
+
+ for $n (0..$#input) {
+ if ( $next ) {
+ $next--;
+ next;
+ }
+ $c = $input[$n];
+ $count = $#input;
+ $once = 1;
+ if ( $c =~ /^\.h1\s/ ) {
+ $h1 = 1;
+ $h1 = $c;
+ $h1 =~ s/^.h1\s*//;
+ $m = 0;
+ $first = 1;
+ undef %keys;
+ next;
+ } elsif ( $c =~ /^\.h2\s/ ) {
+ $c =~ s/^.h2\s*//;
+ $h2[$m] = $c;
+ $keys{$c} = 1;
+ $m++;
+ next;
+ } elsif ( $c =~ /^\./ ) {
+ $s = $c;
+ $s =~ s/^\.[a-z]+\s//;
+ if ( $s =~ /^[0-9]+$/ ) {
+ $count = $s;
+ $once = $s;
+ }
+ }
+ if ( $c =~ /^\.ex/ ) {
+ $ex = $once;
+ printf FP "<h3><em>Example%s:</em></h3>\n", $ex > 1 ? "s" : "";
+ } elsif ( $c =~ /^\.nf/ ) {
+ printf FP "<pre>\n";
+ $nf = $count;
+ } elsif ( $c =~ /^\.fi/ ) {
+ printf FP "</pre>\n";
+ $nf = 0;
+ } elsif ( $c =~ /^$/ ) {
+ if ( $m > 1 ) {
+ for $j (1..$#h2) {
+ close(FP);++$curfilename;
+ push @optnames,$h2[$j];
+ open(FP,">$tmpdir/$curfilename") || do {
+ print STDERR "Can't open tmpfile: $!\n";
+ return;
+ };
+ $optname_to_fname{$h2[$j]} = $curfilename;
+
+ printf FP "<hr>\n";
+ printf FP "<h2><kbd><a name=\"%s\">%s</a></kbd>\n", $h2[$j], $h2[$j];
+ if ( $h1 ne "" ) {
+ printf FP " - <a href=\"cattoc.html#%s\">%s</a>", $cats{$h1}, $h1;
+ }
+ printf FP "</h2>\n";
+ printf FP "<h3><em>Description</em></h3>\n";
+ printf FP "Please see the description of <a href=\"#%s\">%s</a>\n", $h2[0], $h2[0];
+ }
+ @h2 = "";
+ }
+ $m = 0;
+ $first = 1;
+ } elsif ( $c =~ /^[#A-Za-z]/ && $m != 0 ) {
+ if ( $first ) {
+ close(FP);++$curfilename;
+ push @optnames,$h2[0];
+ open(FP,">$tmpdir/$curfilename") || do {
+ print STDERR "Can't open tmpfile: $!\n";
+ return;
+ };
+ $optname_to_fname{$h2[0]} = $curfilename;
+
+ if ( $any ) {
+ printf FP "<hr>\n";
+ }
+ printf FP "<h2><kbd><a name=\"%s\">%s</a></kbd>\n", $h2[0], $h2[0];
+ if ( $h1 ne "" ) {
+ printf FP " - <a href=\"cattoc.html#%s\">%s</a>", $cats{$h1}, $h1;
+ }
+ printf FP "</h2>\n";
+ printf FP "<h3><em>Description</em></h3>\n";
+ $any++;
+ $first = 0;
+ }
+
+ # Convert tabs first, to retain relative alignment
+ $c =~ s#^\t#' 'x8#e;
+ while ( $c =~ /\t/ ) {
+ $c =~ s#(^[^\t]+)\t#$1 . $sp x (9 - (length($1) % 8 ))#e;
+ }
+
+ # Strip off the comment marker
+ $c =~ s/^#//;
+
+ # and convert simple expressions:
+ $c =~ s/&/&amp;/g;
+ $c =~ s/>/&gt;/g;
+ $c =~ s/</&lt;/g;
+ #hvv - something wrong was with next statement
+ $c =~ s/'([^ ])'/"<strong>$1<\/strong>"/g;
+
+ # Do a line-break each time the margin changes. We
+ # could get fancier, but HTML doesn't really support
+ # text-formatting, and we'll use what it does have to
+ # do wrapping.
+ if ( ! $nf ) {
+ $t = $c;
+ $t =~ s/(\s*).*/$1/;
+ $t = length $t;
+ if ( $t != $left ) {
+ $left = $t;
+ printf FP "<br>\n";
+ }
+ }
+
+ $k = 0;
+ if ( $c =~ /^[a-zA-Z_]+:/ ) {
+ $t = $c;
+ $t =~ s/:.*//;
+ $k = $keys{$t};
+ }
+
+ if ( $c =~ /^$/ ) {
+ if ( $nf ) {
+ printf FP "\n";
+ } else {
+ $p = 1;
+ }
+ } elsif ( $ex != 0 ) {
+ printf FP "<br><code>%s</code><br>\n", $c;
+ $ex--;
+ } elsif ( $k ) {
+ if ( $d != $n && ! $nf ) {
+ printf FP "<h3><em>Default value</em></h3>\n";
+ }
+ $c =~ s/:$/:<em>none<\/em>/;
+ $c =~ s/:/<\/code>:<code>/;
+ $c = "<code>" . $c . "</code>";
+ if ( ! $nf ) {
+ $c .= "<br>";
+ }
+ printf FP "%s\n", $c;
+ $d = $n + 1;
+ } else {
+ if ( $p && ! $nf ) {
+ printf FP "<p>\n";
+ }
+ $p = 0;
+ if ( $input[$n+1] =~ /^#\s*==/ ) {
+ $c = "<br><em>$c</em>";
+ if ( ! $nf ) {
+ $c .= "<br>";
+ }
+ $next++;
+ }
+ printf FP "%s\n", $c;
+ }
+ if ( $nf != 0 && $nf-- == 0 ) {
+ printf FP "</pre>\n";
+ }
+ }
+ }
+ close(FP);
+ # Here we collect files with description of needed lynx.cfg
+ # options in the proper (natural or sorted) order.
+ open(FP,">>$output") || do {
+ print STDERR "Can't open $output: $!\n";
+ return;
+ };
+ {
+ local (@ordered = (defined $opt_s ? (sort keys(%optname_to_fname)) : @optnames));
+ if (defined $opt_s) {
+ print FP "Options are sorted by name.\n";
+ } else {
+ print FP "Options are in the same order as lynx.cfg.\n";
+ }
+ foreach $l (@ordered) {
+ local ($fnm = $tmpdir . $optname_to_fname{$l});
+ open(FP1,"<$fnm") || do {
+ print STDERR "Can't open $fnm: $!\n";
+ return;
+ };
+ local ($avail = ok($l));
+ if (defined $opt_a || $avail) {
+ local(@lines) = <FP1>;
+ print FP @lines;
+ if (!$avail && defined $opt_m) {
+ print FP <<'EOF';
+<p>Support for this setting was disabled at compile-time.
+EOF
+ }
+ }
+ close(FP1);
+ }
+ foreach $l (values(%optname_to_fname)) {
+ unlink $l;
+ }
+ }
+
+ print FP <<'EOF';
+</body>
+</html>
+EOF
+ close(FP);
+}
+
+sub gen_cattoc {
+ local(@input) = @_;
+ local (@major);
+ local (@descs);
+ local (@index);
+ local ($n, $m, $c, $d, $found, $h1);
+ local ($output="cattoc.html");
+
+ open(FP,">$output") || do {
+ print STDERR "Can't open $output: $!\n";
+ return;
+ };
+ print FP <<'EOF';
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<html>
+<head>
+<link rev="made" href="mailto:lynx-dev@sig.net">
+<title>Settings by category</title>
+</head>
+<body>
+<h1>Settings by category</h1>
+These are the major categories of configuration settings in Lynx:
+<ul>
+EOF
+ $m = -1;
+ $h1 = 0;
+ for $n (0..$#input) {
+ if ( $input[$n] =~ /^\.h1\s/ ) {
+ $h1 = 1;
+ $c = $input[$n];
+ $c =~ s/^.h1\s*//;
+ $m = $#major + 1;
+ $d = 0;
+ $found = 0;
+ while ( $d <= $#major && ! $found ) {
+ if ( $major[$d] eq $c ) {
+ $m = $d;
+ $found = 1;
+ }
+ $d++;
+ }
+ if ( ! $found ) {
+ $major[$m] = $c;
+ $descs{$major[$m]} = "";
+ $index{$major[$m]} = "";
+ }
+ } elsif ( $h1 != 0 ) {
+ if ( $input[$n] =~ /^$/ ) {
+ $h1 = 0;
+ } elsif ( $input[$n] =~ /^\s*#/ ) {
+ $c = $input[$n];
+ $c =~ s/^\s*#\s*//;
+ $descs{$major[$m]} .= $c . "\n";
+ }
+ }
+ if ( $m >= 0 && $input[$n] =~ /^\.h2\s/ ) {
+ $c = $input[$n];
+ $c =~ s/^.h2\s*//;
+ $index{$major[$m]} .= $c . "\n"
+ if (defined $opt_a || ok($c));
+ }
+ }
+ @major = sort @major;
+ for $n (0..$#major) {
+ $cats{$major[$n]} = sprintf("header%03d", $n);
+ printf FP "<li><a href=\"#%s\">%s</a>\n", $cats{$major[$n]}, $major[$n];
+ }
+ printf FP "</ul>\n";
+ for $n (0..$#major) {
+ printf FP "\n";
+ printf FP "<h2><a name=\"%s\">%s</a></h2>\n", $cats{$major[$n]}, $major[$n];
+ if ($descs{$major[$n]} !~ /^$/) {
+ printf FP "<h3>Description</h3>\n%s\n", $descs{$major[$n]};
+ }
+ $c = $index{$major[$n]};
+ if ( $c ne "" ) {
+ @c = split(/\n/, $c);
+ @c = sort @c;
+ printf FP "<p>Here is a list of settings that belong to this category\n";
+ printf FP "<ul>\n";
+ for $m (0..$#c) {
+ local($avail = ok($c[$m]));
+ local($mark = !$avail && defined $opt_m ? "*" : "");
+ printf FP "<li><a href=\"body.html#%s\">%s</a>\n", $c[$m], $c[$m] . $mark;
+ }
+ printf FP "</ul>\n";
+ }
+ }
+ $str = <<'EOF'
+<p>
+<a href=alphatoc.html>To list of settings by name</a>
+EOF
+. (defined $opt_a && defined $opt_m ?
+"<p>Support for all settings suffixed with '*' was disabled at compile time." :
+ "") . <<'EOF'
+</body>
+</html>
+EOF
+ ;print FP $str;
+ close(FP);
+ return @cats;
+}
diff --git a/gnu/usr.bin/lynx/scripts/man2hlp.sh b/gnu/usr.bin/lynx/scripts/man2hlp.sh
new file mode 100644
index 00000000000..d522bc57e50
--- /dev/null
+++ b/gnu/usr.bin/lynx/scripts/man2hlp.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+# This script uses rman (Rosetta Man), which complements TkMan, to strip
+# nroff headers from a manpage file, and format the result into a VMS help
+# file.
+for name in $*
+do
+ NAME=`echo $name |sed -e 's/\.man$/.1/'`
+ (echo 1 `echo $NAME | sed -e 's/\..*$//' | tr '[a-z]' '[A-Z]'` ; \
+ (echo '.hy 0'; cat $name) |\
+ nroff -Tascii -man |\
+ rman -n$NAME |\
+ sed -e 's/^[1-9].*$//' \
+ -e 's/^\([A-Z]\)/2 \1/' |\
+ uniq)
+done
diff --git a/gnu/usr.bin/lynx/src/AttrList.h b/gnu/usr.bin/lynx/src/AttrList.h
index 66d434cf78f..1fac1e8e7a1 100644
--- a/gnu/usr.bin/lynx/src/AttrList.h
+++ b/gnu/usr.bin/lynx/src/AttrList.h
@@ -26,28 +26,13 @@ enum {
DSTYLE_ELEMENTS
};
-enum {
- MSTYLE_NORMAL = 0,
- MSTYLE_EM = 1,
- MSTYLE_STRONG = 2,
- MSTYLE_PHYSICAL = 3,
- MSTYLE_A = 4,
- MSTYLE_A_OFF = 4,
- MSTYLE_A_ON,
- MSTYLE_BOLD,
- MSTYLE_UL,
- MSTYLE_STATUS,
- MSTYLE_CANDY,
- MSTYLE_NOMORE
-};
-
typedef struct {
int color; /* color highlighting to be done */
int mono; /* mono highlighting to be done */
int cattr; /* attributes to go with the color */
} HTCharStyle;
-#define HText_characterStyle CTRACE(tfp,"HTC called from %s/%d\n",__FILE__,__LINE__);_internal_HTC
+#define HText_characterStyle CTRACE((tfp,"HTC called from %s/%d\n",__FILE__,__LINE__));_internal_HTC
#undef HText_characterStyle
#define HText_characterStyle _internal_HTC
diff --git a/gnu/usr.bin/lynx/src/DefaultStyle.c b/gnu/usr.bin/lynx/src/DefaultStyle.c
index 9532c9734e3..8549a3bfc1f 100644
--- a/gnu/usr.bin/lynx/src/DefaultStyle.c
+++ b/gnu/usr.bin/lynx/src/DefaultStyle.c
@@ -4,8 +4,8 @@
*/
#include <HTUtils.h>
-#include <HTStyle.h>
#include <HTFont.h>
+#include <HTStyle.h>
#include <LYLeaks.h>
@@ -20,14 +20,6 @@ PRIVATE CONST HTTabStop tabs_8[] = {
{0, 0 } /* Terminate */
};
-#ifdef NOT_USED
-PRIVATE HTTabStop tabs_16[] = {
- { 0, 16 }, {0, 32}, {0, 48}, {0, 64}, {0, 80},
- {0, 96}, {0, 112},
- {0, 0 } /* Terminate */
-};
-#endif /* NOT_USED */
-
/* Template:
** link to next, name, tag,
** font, size, colour, superscript, anchor id,
diff --git a/gnu/usr.bin/lynx/src/GridText.c b/gnu/usr.bin/lynx/src/GridText.c
index d3d7e2ea7aa..8b12dd33bc2 100644
--- a/gnu/usr.bin/lynx/src/GridText.c
+++ b/gnu/usr.bin/lynx/src/GridText.c
@@ -4,24 +4,18 @@
#include <HTUtils.h>
#include <HTString.h>
-#include <HTFont.h>
#include <HTAccess.h>
#include <HTAnchor.h>
#include <HTParse.h>
#include <HTTP.h>
#include <HTAlert.h>
#include <HTCJK.h>
+#include <HTFile.h>
#include <UCDefs.h>
#include <UCAux.h>
#include <assert.h>
-#ifndef VMS
-#ifdef SYSLOG_REQUESTED_URLS
-#include <syslog.h>
-#endif /* SYSLOG_REQUESTED_URLS */
-#endif /* !VMS */
-
#include <GridText.h>
#include <LYCurses.h>
#include <LYUtils.h>
@@ -38,6 +32,8 @@
#include <LYEdit.h>
#include <LYPrint.h>
#include <LYPrettySrc.h>
+#include <TRSTable.h>
+#include <LYHistory.h>
#ifdef EXP_CHARTRANS_AUTOSWITCH
#include <UCAuto.h>
#endif /* EXP_CHARTRANS_AUTOSWITCH */
@@ -45,6 +41,10 @@
#include <LYexit.h>
#include <LYLeaks.h>
+#ifdef SH_EX /* for DEBUG (1997/10/10 (Fri) 07:58:47) */
+#define NOTUSED_BAD_FOR_SCREEN
+#endif
+
#undef DEBUG_APPCH
#ifdef SOURCE_CACHE
@@ -59,25 +59,35 @@ unsigned int cached_styles[CACHEH][CACHEW];
#endif
-#ifdef USE_COLOR_STYLE_UNUSED
-void LynxClearScreenCache NOARGS
-{
- int i,j;
+#include <LYJustify.h>
- CTRACE(tfp, "flushing cached screen styles\n");
- for (i=0;i<CACHEH;i++)
- for (j=0;j<CACHEW;j++)
- cached_styles[i][j]=s_a;
-}
+#ifdef USE_CURSES_PADS
+# define DISPLAY_COLS (LYwideLines ? MAX_COLS : LYcols)
+# define WRAP_COLS(text) ((text)->stbl ? \
+ (LYtableCols <= 0 \
+ ? DISPLAY_COLS : (LYtableCols * LYcols)/12) \
+ : LYcols)
+#else
+# define DISPLAY_COLS LYcols
+# define WRAP_COLS(text) LYcols
#endif
+
+#define FirstHTLine(text) ((text)->last_line->next)
+#define LastHTLine(text) ((text)->last_line)
+
+PRIVATE void HText_trimHightext PARAMS((
+ HText * text,
+ BOOLEAN final,
+ int stop_before));
+
#ifdef USE_COLOR_STYLE
PRIVATE void LynxResetScreenCache NOARGS
{
- int i,j;
+ int i, j;
- for (i=1; (i<CACHEH && i <= display_lines); i++) {
- for (j=0;j<CACHEW;j++)
- cached_styles[i][j]=0;
+ for (i = 1; (i < CACHEH && i <= display_lines); i++) {
+ for (j = 0; j < CACHEW; j++)
+ cached_styles[i][j] = 0;
}
}
#endif /* USE_COLOR_STYLE */
@@ -89,11 +99,21 @@ struct _HTStream { /* only know it as object */
#define TITLE_LINES 1
#define IS_UTF_EXTRA(ch) (text->T.output_utf8 && \
- ((unsigned char)(ch)&0xc0) == 0x80)
+ (UCH((ch))&0xc0) == 0x80)
+/* a test in compact form: how many extra UTF-8 chars after initial? - kw */
+#define UTF8_XNEGLEN(c) (c&0xC0? 0 :c&32? 1 :c&16? 2 :c&8? 3 :c&4? 4 :c&2? 5:0)
+#define UTF_XLEN(c) UTF8_XNEGLEN(((char)~(c)))
extern BOOL HTPassHighCtrlRaw;
-extern HTkcode kanji_code;
-extern HTCJKlang HTCJK;
+
+#ifdef KANJI_CODE_OVERRIDE
+PUBLIC HTkcode last_kcode = NOKANJI; /* 1997/11/14 (Fri) 09:09:26 */
+#endif
+#ifdef CJK_EX
+#define CHAR_WIDTH 6
+#else
+#define CHAR_WIDTH 1
+#endif
/* Exports
*/
@@ -116,24 +136,30 @@ PUBLIC char * unchecked_box = "[ ]";
PUBLIC char * checked_radio = "(*)";
PUBLIC char * unchecked_radio = "( )";
-PUBLIC BOOLEAN underline_on = OFF;
-PUBLIC BOOLEAN bold_on = OFF;
+PRIVATE BOOLEAN underline_on = OFF;
+PRIVATE BOOLEAN bold_on = OFF;
#ifdef SOURCE_CACHE
-PUBLIC char * source_cache_filename = NULL;
-PUBLIC HTChunk * source_cache_chunk = NULL;
PUBLIC int LYCacheSource = SOURCE_CACHE_NONE;
-PUBLIC BOOLEAN from_source_cache = FALSE; /* mutable */
+PUBLIC int LYCacheSourceForAborted = SOURCE_CACHE_FOR_ABORTED_DROP;
+#endif
+
+#ifdef USE_SCROLLBAR
+PUBLIC BOOLEAN LYsb = FALSE;
+PUBLIC BOOLEAN LYsb_arrow = TRUE;
+PUBLIC int LYsb_begin = -1;
+PUBLIC int LYsb_end = -1;
#endif
#if defined(USE_COLOR_STYLE)
#define MAX_STYLES_ON_LINE 64
+ /*try to fit in 2 shorts*/
typedef struct _stylechange {
- int horizpos; /* horizontal position of this change */
- int style; /* which style to change to */
- int direction; /* on or off */
- int previous; /* previous style */
+ unsigned int direction:2; /* on or off */
+ unsigned int horizpos: (sizeof(short)*CHAR_BIT-2);
+ /* horizontal position of this change */
+ unsigned short style; /* which style to change to */
} HTStyleChange;
#endif
@@ -142,24 +168,140 @@ typedef struct _line {
struct _line *prev;
unsigned offset; /* Implicit initial spaces */
unsigned size; /* Number of characters */
- BOOL split_after; /* Can we split after? */
- BOOL bullet; /* Do we bullet? */
- BOOL expansion_line; /* TEXTAREA edit new line flag */
#if defined(USE_COLOR_STYLE)
- HTStyleChange styles[MAX_STYLES_ON_LINE];
+ HTStyleChange* styles;
int numstyles;
#endif
char data[1]; /* Space for terminator at least! */
} HTLine;
+#if defined(USE_COLOR_STYLE)
+typedef struct _HTStyleChangePool {
+ HTStyleChange data[4092];
+ struct _HTStyleChangePool* next;
+ int free_items;
+} HTStyleChangePool;
+
+/*these are used when current line is being aggregated. */
+HTStyleChange stylechanges_buffers[2][MAX_STYLES_ON_LINE];
+int stylechanges_buffers_free;/*this is an index of the free buffer.
+ Can be 0 or 1*/
+
+/* These are generic macors for any pools (provided those structures have the
+same members as HTStyleChangePool). Pools are used for allocation of groups of
+objects of the same type T. Pools are represented as a list of structures of
+type P (called pool chunks here). Structure P has an array of N objects of
+type T named 'data' (the number N in the array can be chosen arbitrary),
+pointer to the next pool chunk named 'pool', and the number of free items in
+that pool chunk named 'free_items'. Here is a definition of the structure P:
+ struct P
+ {
+ T data[N];
+ struct P* next;
+ int free_items;
+ };
+ It's recommended that sizeof(P) be memory page size minus 32 in order malloc'd
+chunks to fit in machine page size.
+ Allocation of 'n' items in the pool is implemented by decrementing member
+'free_items' by 'n' if 'free_items' >= 'n', or allocating a new pool chunk and
+allocating 'n' items in that new chunk. It's the task of the programmer to
+assert that 'n' is <= N. Only entire pool may be freed - this limitation makes
+allocation algorithms trivial and fast - so the use of pools is limited to
+objects that are freed in batch, that are not deallocated not in the batch, and
+not reallocated.
+ Pools greatly reduce memory fragmentation and memory allocation/deallocation
+speed due to the simple algorithms used. Due to the fact that memory is
+'allocated' in array, alignment overhead is minimal. Allocating strings in a
+pool provided their length will never exceed N and is much smaller than N seems
+to be very efficient.
+
+ Pool are referenced by pointer to the chunk that contains free slots. Macros
+that allocate memory in pools update that pointer if needed.
+ There are 3 macros that deal with pools - POOL_NEW, POOL_FREE and
+ALLOC_IN_POOL.
+ Here is a description of those macros as C++ functions (with names mentioned
+above and with use of C++ references)
+
+void ALLOC_IN_POOL( P*& pool, pool_type, int toalloc, T*& ptr)
+ - allocates 'toalloc' items in the pool of type 'pool_type' pointed by
+ 'pool', sets the pointer 'ptr' to the "allocated" memory and updates 'pool'
+ if necessary. Sets 'ptr' to NULL if fails.
+
+void POOL_NEW( pool_type , P*& ptr)
+ Initializes a pool of type 'pool_type' pointed by 'ptr', updating 'ptr'.
+ Sets 'ptr' to NULL if fails.
+
+void POOL_FREE( pool_type , P* ptr)
+ Frees a pool of type 'pool_type' pointed by ptr.
+
+ - VH */
+
+/*
+void ALLOC_IN_POOL( P*& pool, pool_type, int toalloc, T*& ptr)
+ - allocates 'toalloc' items in the pool of type 'pool_type' pointed by
+ 'pool', sets the pointer 'ptr' to the "allocated" memory and updates 'pool'
+ if necessary. Sets 'ptr' to NULL if fails.
+*/
+#define ALLOC_IN_POOL(pool,pool_type,toalloc,ptr) \
+if (!pool) \
+ ptr = NULL; \
+else { \
+ if ((pool)->free_items > toalloc) { \
+ (pool)->free_items -= toalloc; \
+ ptr = (pool)->data + (pool)->free_items; \
+ } else { \
+ pool_type* newpool = (pool_type*)malloc(sizeof(pool_type)); \
+ if (!newpool) { \
+ ptr = NULL; \
+ } else { \
+ newpool->next = pool; \
+ newpool->free_items = sizeof newpool->data/ \
+ sizeof newpool->data[0] - toalloc; \
+ pool = newpool; \
+ ptr = newpool->data + sizeof newpool->data/sizeof newpool->data[0] - toalloc; \
+ } \
+ } \
+}
+/*
+void POOL_NEW( pool_type , P*& ptr)
+ Initializes a pool of type 'pool_type' pointed by 'ptr', updating 'ptr'.
+ Sets 'ptr' to NULL if fails.
+*/
+#define POOL_NEW(pool_type,ptr) \
+ { \
+ pool_type* newpool = (pool_type*)malloc(sizeof(pool_type)); \
+ if (!newpool) { \
+ ptr = NULL; \
+ } else { \
+ newpool->next = NULL; \
+ newpool->free_items = sizeof newpool->data/sizeof newpool->data[0]; \
+ ptr = newpool; \
+ } \
+ }
+/*
+void POOL_FREE( pool_type , P* ptr)
+ Frees a pool of type 'pool_type' pointed by ptr.
+*/
+#define POOL_FREE(pool_type,xptr) \
+ { \
+ pool_type* ptr = xptr; \
+ do { \
+ pool_type* prevpool = ptr; \
+ ptr = ptr->next; \
+ FREE(prevpool); \
+ } while (ptr); \
+ }
+#endif
+
#define LINE_SIZE(l) (sizeof(HTLine)+(l)) /* Allow for terminator */
+#define allocHTLine(l) (HTLine *)calloc(1, LINE_SIZE(l))
typedef struct _TextAnchor {
struct _TextAnchor * next;
+ struct _TextAnchor * prev; /* www_user_search only! */
int number; /* For user interface */
- int start; /* Characters */
- int line_pos; /* Position in text */
- int extent; /* Characters */
+ int line_pos; /* Bytes/chars - extent too */
+ int extent; /* (see HText_trimHightext) */
int line_num; /* Place in document */
char * hightext; /* The link text */
char * hightext2; /* A second line*/
@@ -179,34 +321,33 @@ typedef struct _HTTabID {
/* Notes on struct _Htext:
-** next_line is valid if state is false.
+** next_line is valid if stale is false.
** top_of_screen line means the line at the top of the screen
** or just under the title if there is one.
*/
struct _HText {
HTParentAnchor * node_anchor;
#ifdef SOURCE_CACHE
-#undef lines /* FIXME */
- char * source_cache_file;
- HTChunk * source_cache_chunk;
/*
* Parse settings when this HText was generated.
*/
BOOLEAN clickable_images;
BOOLEAN pseudo_inline_alts;
+ BOOLEAN verbose_img;
BOOLEAN raw_mode;
BOOLEAN historical_comments;
BOOLEAN minimal_comments;
BOOLEAN soft_dquotes;
- BOOLEAN old_dtd;
- int lines; /* Screen size */
- int cols;
+ int old_dtd;
+ int keypad_mode;
+ int disp_lines; /* Screen size */
+ int disp_cols; /* Used for reports only */
#endif
HTLine * last_line;
int Lines; /* Number of them */
- int chars; /* Number of them */
TextAnchor * first_anchor; /* Singly linked list */
TextAnchor * last_anchor;
+ TextAnchor * last_anchor_before_stbl;
HTList * forms; /* also linked internally */
int last_anchor_number; /* user number */
BOOL source; /* Is the text source? */
@@ -228,12 +369,25 @@ struct _HText {
BOOL in_line_1; /* of paragraph */
BOOL stale; /* Must refresh */
BOOL page_has_target; /* has target on screen */
+ BOOL has_utf8; /* has utf-8 on screen or line */
+ BOOL had_utf8; /* had utf-8 when last displayed */
#ifdef DISP_PARTIAL
int first_lineno_last_disp_partial;
int last_lineno_last_disp_partial;
#endif
+ STable_info * stbl;
HTkcode kcode; /* Kanji code? */
+ HTkcode specified_kcode; /* Specified Kanji code */
+#ifdef USE_TH_JP_AUTO_DETECT
+ enum _detected_kcode { DET_SJIS, DET_EUC, DET_NOTYET, DET_MIXED }
+ detected_kcode; /* Detected Kanji code */
+ enum _SJIS_status { SJIS_state_neutral, SJIS_state_in_kanji,
+ SJIS_state_has_bad_code } SJIS_status;
+ enum _EUC_status { EUC_state_neutral, EUC_state_in_kanji,
+ EUC_state_in_kana, EUC_state_has_bad_code }
+ EUC_status;
+#endif
enum grid_state { S_text, S_esc, S_dollar, S_paren,
S_nonascii_text, S_dollar_paren,
S_jisx0201_text }
@@ -249,10 +403,80 @@ struct _HText {
HTStream * target; /* Output stream */
HTStreamClass targetClass; /* Output routines */
+#if defined(USE_COLOR_STYLE)
+ HTStyleChangePool* styles_pool;
+#endif
};
PRIVATE void HText_AddHiddenLink PARAMS((HText *text, TextAnchor *textanchor));
+#ifdef EXP_JUSTIFY_ELTS
+PUBLIC BOOL can_justify_here;
+PUBLIC BOOL can_justify_here_saved;
+
+PUBLIC BOOL can_justify_this_line;/* =FALSE if line contains form objects */
+PUBLIC int wait_for_this_stacked_elt;/* -1 if can justify contents of the
+ element on the op of stack. If positive - specifies minimal stack depth
+ plus 1 at which we can justify element (can be MAX_LINE+2 if
+ ok_justify ==FALSE or in psrcview. */
+PUBLIC BOOL form_in_htext;/*to indicate that we are in form (since HTML_FORM is
+ not stacked in the HTML.c */
+PUBLIC BOOL in_DT = FALSE;
+#ifdef DEBUG_JUSTIFY
+PUBLIC BOOL can_justify_stack_depth;/* can be 0 or 1 if all code is correct*/
+#endif
+
+
+typedef struct ht_run_info_ {
+ int byte_len; /*length in bytes*/
+ int cell_len; /*length in cells*/
+} ht_run_info;
+
+static int justify_start_position;/* this is an index of char from which
+ justification can start (eg after "* " preceeding <li> text) */
+
+static int ht_num_runs;/*the number of runs filled*/
+static ht_run_info ht_runs[MAX_LINE];
+static BOOL this_line_was_split;
+static TextAnchor* last_anchor_of_previous_line;
+static BOOL have_raw_nbsps = FALSE;
+
+PUBLIC void ht_justify_cleanup NOARGS
+{
+ wait_for_this_stacked_elt = !ok_justify
+# ifdef USE_PRETTYSRC
+ || psrc_view
+# endif
+ ? 30000/*MAX_NESTING*/+2 /*some unreachable value*/ : -1;
+ can_justify_here = TRUE;
+ can_justify_this_line = TRUE;
+ form_in_htext = FALSE;
+
+ last_anchor_of_previous_line = NULL;
+ this_line_was_split = FALSE;
+ in_DT = FALSE;
+ have_raw_nbsps = FALSE;
+}
+
+PUBLIC void mark_justify_start_position ARGS1(void*,text)
+{
+ if (text && ((HText*)text)->last_line)
+ justify_start_position = ((HText*)text )->last_line->size;
+}
+
+
+#define REALLY_CAN_JUSTIFY(text) ( (wait_for_this_stacked_elt<0) && \
+ ( text->style->alignment == HT_LEFT || \
+ text->style->alignment == HT_JUSTIFY) && \
+ HTCJK == NOCJK && !in_DT && \
+ can_justify_here && can_justify_this_line && !form_in_htext )
+
+#else
+#define last_anchor_of_previous_line (TextAnchor*)0
+#endif /* EXP_JUSTIFY_ELTS */
+
+
+
/*
* Boring static variable used for moving cursor across
*/
@@ -268,6 +492,8 @@ PRIVATE char underscore_string[MAX_LINE + 1];
PUBLIC char star_string[MAX_LINE + 1];
PRIVATE int ctrl_chars_on_this_line = 0; /* num of ctrl chars in current line */
+PRIVATE int utfxtra_on_this_line = 0; /* num of UTF-8 extra bytes in line,
+ they *also* count as ctrl chars. */
PRIVATE HTStyle default_style =
{ 0, "(Unstyled)", "",
@@ -291,6 +517,7 @@ PRIVATE int HText_TrueLineSize PARAMS((
#define CHECK_FREE_MEM
#endif
+
#ifdef CHECK_FREE_MEM
/*
@@ -362,14 +589,14 @@ PRIVATE void * LY_check_calloc ARGS2(
if (t == HTMainText)
t = NULL; /* shouldn't happen */
{
- CTRACE(tfp, "\r *** Emergency freeing document %d/%d for '%s'%s!\n",
+ CTRACE((tfp, "\nBUG *** Emergency freeing document %d/%d for '%s'%s!\n",
i + 1, n,
((t && t->node_anchor &&
t->node_anchor->address) ?
t->node_anchor->address : "unknown anchor"),
((t && t->node_anchor &&
t->node_anchor->post_data) ?
- " with POST data" : ""));
+ " with POST data" : "")));
}
HTList_removeObjectAt(loaded_texts, i);
HText_free(t);
@@ -450,15 +677,33 @@ PUBLIC HText * HText_new ARGS1(
int status, VMType=3, VMTotal;
#endif /* VMS && VAXC && !__DECC */
HTLine * line = NULL;
- HText * self = (HText *) calloc(1, sizeof(*self));
+ HText * self = typecalloc(HText);
if (!self)
return self;
+ CTRACE((tfp, "GridText: start HText_new\n"));
+
#if defined(VMS) && defined (VAXC) && !defined(__DECC)
status = lib$stat_vm(&VMType, &VMTotal);
- CTRACE(tfp, "GridText: VMTotal = %d\n", VMTotal);
+ CTRACE((tfp, "GridText: VMTotal = %d\n", VMTotal));
#endif /* VMS && VAXC && !__DECC */
+ /*
+ * If the previously shown text had UTF-8 characters on screen,
+ * remember this in the newly created object. Do this now, before
+ * the previous object may become invalid. - kw
+ */
+ if (HTMainText) {
+ if (HText_hasUTF8OutputSet(HTMainText) &&
+ HTLoadedDocumentEightbit() &&
+ LYCharSet_UC[current_char_set].enc == UCT_ENC_UTF8) {
+ self->had_utf8 = HTMainText->has_utf8;
+ } else {
+ self->had_utf8 = HTMainText->has_utf8;
+ }
+ HTMainText->has_utf8 = NO;
+ }
+
if (!loaded_texts) {
loaded_texts = HTList_new();
#ifdef LY_FIND_LEAKS
@@ -475,7 +720,7 @@ PUBLIC HText * HText_new ARGS1(
*/
if (anchor->document) {
HTList_removeObject(loaded_texts, anchor->document);
- CTRACE(tfp, "GridText: Auto-uncaching\n") ;
+ CTRACE((tfp, "GridText: Auto-uncaching\n")) ;
((HText *)anchor->document)->node_anchor = NULL;
HText_free((HText *)anchor->document);
anchor->document = NULL;
@@ -489,23 +734,28 @@ PUBLIC HText * HText_new ARGS1(
if (HTList_count(loaded_texts) > HTCacheSize)
#endif /* VMS && VAXC && !__DECC */
{
- CTRACE(tfp, "GridText: Freeing off cached doc.\n");
+ CTRACE((tfp, "GridText: Freeing off cached doc.\n"));
HText_free((HText *)HTList_removeFirstObject(loaded_texts));
#if defined(VMS) && defined (VAXC) && !defined(__DECC)
status = lib$stat_vm(&VMType, &VMTotal);
- CTRACE(tfp, "GridText: VMTotal reduced to %d\n", VMTotal);
+ CTRACE((tfp, "GridText: VMTotal reduced to %d\n", VMTotal));
#endif /* VMS && VAXC && !__DECC */
}
- line = self->last_line = (HTLine *)calloc(1, LINE_SIZE(MAX_LINE));
+ line = self->last_line = allocHTLine(MAX_LINE);
if (line == NULL)
outofmem(__FILE__, "HText_New");
line->next = line->prev = line;
line->offset = line->size = 0;
#ifdef USE_COLOR_STYLE
line->numstyles = 0;
+ POOL_NEW(HTStyleChangePool,self->styles_pool);
+ if (!self->styles_pool)
+ outofmem(__FILE__, "HText_New");
+ stylechanges_buffers_free = 0;
+ line->styles = stylechanges_buffers[0];
#endif
- self->Lines = self->chars = 0;
+ self->Lines = 0;
self->first_anchor = self->last_anchor = NULL;
self->style = &default_style;
self->top_of_screen = 0;
@@ -516,31 +766,19 @@ PUBLIC HText * HText_new ARGS1(
self->tabs = NULL;
#ifdef SOURCE_CACHE
/*
- * Yes, this is a Gross And Disgusting Hack(TM), I know...
- */
- self->source_cache_file = NULL;
- if (LYCacheSource == SOURCE_CACHE_FILE && source_cache_filename) {
- StrAllocCopy(self->source_cache_file, source_cache_filename);
- FREE(source_cache_filename);
- }
- self->source_cache_chunk = NULL;
- if (LYCacheSource == SOURCE_CACHE_MEMORY && source_cache_chunk) {
- self->source_cache_chunk = source_cache_chunk;
- source_cache_chunk = NULL;
- }
-
- /*
* Remember the parse settings.
*/
self->clickable_images = clickable_images;
self->pseudo_inline_alts = pseudo_inline_alts;
+ self->verbose_img = verbose_img;
self->raw_mode = LYUseDefaultRawMode;
self->historical_comments = historical_comments;
self->minimal_comments = minimal_comments;
self->soft_dquotes = soft_dquotes;
self->old_dtd = Old_DTD;
- self->lines = LYlines;
- self->cols = LYcols;
+ self->keypad_mode = keypad_mode;
+ self->disp_lines = LYlines;
+ self->disp_cols = DISPLAY_COLS;
#endif
/*
* If we are going to render the List Page, always merge in hidden
@@ -552,7 +790,8 @@ PUBLIC HText * HText_new ARGS1(
* contain any entries with empty titles, but it might happen. - kw
*/
if (anchor->bookmark ||
- (anchor->address && !strcmp(anchor->address, LYlist_temp_url())))
+ LYIsUIPage3(anchor->address, UIP_LIST_PAGE, 0) ||
+ LYIsUIPage3(anchor->address, UIP_ADDRLIST_PAGE, 0))
self->hiddenlinkflag = HIDDENLINKS_MERGE;
else
self->hiddenlinkflag = LYHiddenLinks;
@@ -562,13 +801,19 @@ PUBLIC HText * HText_new ARGS1(
self->LastChar = '\0';
self->IgnoreExcess = FALSE;
-#ifndef PSRC_TEST
+#ifndef USE_PRETTYSRC
if (HTOutputFormat == WWW_SOURCE)
self->source = YES;
else
self->source = NO;
#else
- self->source=( LYpsrc ? psrc_view : HTOutputFormat == WWW_SOURCE);
+ /* mark_htext_as_source == TRUE if we are parsing html file (and psrc_view is
+ * set temporary to false at creation time)
+ * psrc_view == TRUE if source of the text produced by some lynx module
+ * (like ftp browsers) is requested). - VH
+ */
+ self->source = (BOOL) (LYpsrc ? mark_htext_as_source || psrc_view : HTOutputFormat == WWW_SOURCE);
+ mark_htext_as_source = FALSE;
#endif
HTAnchor_setDocument(anchor, (HyperDoc *)self);
HTFormNumber = 0; /* no forms started yet */
@@ -576,6 +821,12 @@ PUBLIC HText * HText_new ARGS1(
HTMainAnchor = anchor;
self->display_on_the_fly = 0;
self->kcode = NOKANJI;
+ self->specified_kcode = NOKANJI;
+#ifdef USE_TH_JP_AUTO_DETECT
+ self->detected_kcode = DET_NOTYET;
+ self->SJIS_status = SJIS_state_neutral;
+ self->EUC_status = EUC_state_neutral;
+#endif
self->state = S_text;
self->kanji_buf = '\0';
self->in_sjis = 0;
@@ -589,9 +840,8 @@ PUBLIC HText * HText_new ARGS1(
/*
* Check the kcode setting if the anchor has a charset element. - FM
*/
- if (anchor->charset)
- HText_setKcode(self, anchor->charset,
- HTAnchor_getUCInfoStage(anchor, UCT_STAGE_HTEXT));
+ HText_setKcode(self, anchor->charset,
+ HTAnchor_getUCInfoStage(anchor, UCT_STAGE_HTEXT));
/*
* Memory leak fixed.
@@ -619,11 +869,13 @@ PUBLIC HText * HText_new ARGS1(
#ifdef DISP_PARTIAL
/*
- * By this function we create HText object and set new Lines counter
+ * By this function we create HText object
* so we may start displaying the document while downloading. - LP
*/
- if (display_partial)
- NumOfLines_partial = 0; /* enable HTDisplayPartial() */
+ if (display_partial_flag) {
+ display_partial = TRUE; /* enable HTDisplayPartial() */
+ NumOfLines_partial = 0; /* initialize */
+ }
/*
* These two fields should only be set to valid line numbers
@@ -635,8 +887,9 @@ PUBLIC HText * HText_new ARGS1(
self->last_lineno_last_disp_partial = -1;
#endif
- CTRACE(tfp, "GridText: start HText_new\n");
-
+#ifdef EXP_JUSTIFY_ELTS
+ ht_justify_cleanup();
+#endif
return self;
}
@@ -669,7 +922,9 @@ PUBLIC void HText_free ARGS1(
return;
HTAnchor_setDocument(self->node_anchor, (HyperDoc *)0);
-
+#if defined(USE_COLOR_STYLE)
+ POOL_FREE(HTStyleChangePool,self->styles_pool);
+#endif
while (YES) { /* Free off line array */
HTLine * l = self->last_line;
if (l) {
@@ -784,6 +1039,15 @@ PUBLIC void HText_free ARGS1(
UCT_SETBY_NONE);
HTAnchor_resetUCInfoStage(self->node_anchor, -1, UCT_STAGE_HTEXT,
UCT_SETBY_NONE);
+#ifdef SOURCE_CACHE
+ /* Remove source cache files and chunks always, even if the
+ * HTAnchor_delete call does not actually remove the anchor.
+ * Keeping them would just be a waste of space - they won't
+ * be used any more after the anchor has been disassociated
+ * from a HText structure. - kw
+ */
+ HTAnchor_clearSourceCache(self->node_anchor);
+#endif
if (HTAnchor_delete(self->node_anchor))
/*
* Make sure HTMainAnchor won't point
@@ -792,23 +1056,6 @@ PUBLIC void HText_free ARGS1(
HTMainAnchor = NULL;
}
-#ifdef SOURCE_CACHE
- /*
- * Clean up the source cache, if any.
- */
- if (self->source_cache_file) {
- CTRACE(tfp, "Removing source cache file %s\n",
- self->source_cache_file);
- LYRemoveTemp(self->source_cache_file);
- FREE(self->source_cache_file);
- }
- if (self->source_cache_chunk) {
- CTRACE(tfp, "Removing memory source cache %p\n",
- (void *)self->source_cache_chunk);
- HTChunkFree(self->source_cache_chunk);
- }
-#endif
-
FREE(self);
}
@@ -820,18 +1067,36 @@ PUBLIC void HText_free ARGS1(
/* Output a line
** -------------
*/
-PRIVATE int display_line ARGS2(
+PRIVATE int display_line ARGS4(
HTLine *, line,
- HText *, text)
+ HText *, text,
+ int, scrline GCC_UNUSED,
+ CONST char*, target GCC_UNUSED)
{
register int i, j;
char buffer[7];
char *data;
size_t utf_extra = 0;
+ char LastDisplayChar = ' ';
#ifdef USE_COLOR_STYLE
int current_style = 0;
+#define inunderline NO
+#define inbold NO
+#else
+ BOOL inbold=NO, inunderline=NO;
+#endif
+#if defined(SHOW_WHEREIS_TARGETS) && !defined(USE_COLOR_STYLE)
+ CONST char *cp_tgt;
+ int i_start_tgt=0, i_after_tgt;
+ int HitOffset, LenNeeded;
+ BOOL intarget=NO;
+#else
+#define intarget NO
+#endif /* SHOW_WHEREIS_TARGETS && !USE_COLOR_STYLE */
+
+#ifndef NCURSES_VERSION
+ text->has_utf8 = NO; /* use as per-line flag, except with ncurses */
#endif
- char LastDisplayChar = ' ';
/*
* Set up the multibyte character buffer,
@@ -839,15 +1104,15 @@ PRIVATE int display_line ARGS2(
* writing.
*/
buffer[0] = buffer[1] = buffer[2] = '\0';
- clrtoeol();
+ LYclrtoeol();
/*
* Add offset, making sure that we do not
* go over the COLS limit on the display.
*/
j = (int)line->offset;
- if (j > (int)LYcols - 1)
- j = (int)LYcols - 1;
+ if (j > (int)DISPLAY_COLS - 1)
+ j = (int)DISPLAY_COLS - 1;
#ifdef USE_SLANG
SLsmg_forward (j);
i = j;
@@ -858,7 +1123,7 @@ PRIVATE int display_line ARGS2(
else
#endif
for (i = 0; i < j; i++)
- addch (' ');
+ LYaddch (' ');
#endif /* USE_SLANG */
/*
@@ -867,7 +1132,60 @@ PRIVATE int display_line ARGS2(
*/
data = line->data;
i++;
- while ((i < LYcols) && ((buffer[0] = *data) != '\0')) {
+
+#ifndef USE_COLOR_STYLE
+#if defined(SHOW_WHEREIS_TARGETS)
+ /*
+ * If the target is on this line, it will be emphasized.
+ */
+ i_after_tgt = i;
+ if (target) {
+ cp_tgt = LYno_attr_mb_strstr(data,
+ target,
+ text->T.output_utf8, YES,
+ &HitOffset,
+ &LenNeeded);
+ if (cp_tgt) {
+ if (((int)line->offset + LenNeeded) >= DISPLAY_COLS) {
+ cp_tgt = NULL;
+ } else {
+ text->page_has_target = YES;
+ i_start_tgt = i + HitOffset;
+ i_after_tgt = i + LenNeeded;
+ }
+ }
+ } else {
+ cp_tgt = NULL;
+ }
+#endif /* SHOW_WHEREIS_TARGETS */
+#endif /* USE_COLOR_STYLE */
+
+ while ((i < DISPLAY_COLS) && ((buffer[0] = *data) != '\0')) {
+
+#ifndef USE_COLOR_STYLE
+#if defined(SHOW_WHEREIS_TARGETS)
+ if (cp_tgt && i >= i_after_tgt) {
+ if (intarget) {
+ cp_tgt = LYno_attr_mb_strstr(data,
+ target,
+ text->T.output_utf8, YES,
+ &HitOffset,
+ &LenNeeded);
+ if (cp_tgt) {
+ i_start_tgt = i + HitOffset;
+ i_after_tgt = i + LenNeeded;
+ }
+ if (!cp_tgt || i_start_tgt != i) {
+ LYstopTargetEmphasis();
+ intarget = NO;
+ if (inbold) start_bold();
+ if (inunderline) start_underline();
+ }
+ }
+ }
+#endif /* SHOW_WHEREIS_TARGETS */
+#endif /* USE_COLOR_STYLE */
+
data++;
#if defined(USE_COLOR_STYLE) || defined(SLSC)
@@ -876,8 +1194,8 @@ PRIVATE int display_line ARGS2(
while (current_style < line->numstyles &&
i >= (int) (CStyle.horizpos + line->offset + 1))
{
- LynxChangeStyle (CStyle.style,CStyle.direction,CStyle.previous);
- current_style++;
+ LynxChangeStyle (CStyle.style,CStyle.direction);
+ current_style++;
}
#endif
switch (buffer[0]) {
@@ -885,41 +1203,65 @@ PRIVATE int display_line ARGS2(
#ifndef USE_COLOR_STYLE
case LY_UNDERLINE_START_CHAR:
if (dump_output_immediately && use_underscore) {
- addch('_');
+ LYaddch('_');
i++;
} else {
- start_underline();
+ inunderline = YES;
+ if (!intarget) {
+#if (defined(DOSPATH) || defined(WIN_EX)) && !defined(USE_SLANG)
+ if (LYShowColor == SHOW_COLOR_NEVER)
+ start_bold();
+ else
+ start_underline();
+#else
+ start_underline();
+#endif /* DOSPATH ... */
+ }
}
break;
case LY_UNDERLINE_END_CHAR:
if (dump_output_immediately && use_underscore) {
- addch('_');
+ LYaddch('_');
i++;
} else {
+ inunderline = NO;
+ if (!intarget) {
+#if (defined(DOSPATH) || defined(WIN_EX)) && !defined(USE_SLANG)
+ if (LYShowColor == SHOW_COLOR_NEVER)
+ stop_bold();
+ else
+ stop_underline();
+#else
stop_underline();
+#endif /* DOSPATH ... */
+ }
}
break;
case LY_BOLD_START_CHAR:
- start_bold();
+ inbold = YES;
+ if (!intarget)
+ start_bold();
break;
case LY_BOLD_END_CHAR:
- stop_bold ();
+ inbold = NO;
+ if (!intarget)
+ stop_bold();
break;
#endif
case LY_SOFT_NEWLINE:
if (!dump_output_immediately) {
- addch('+');
+ LYaddch('+');
i++;
}
break;
case LY_SOFT_HYPHEN:
if (*data != '\0' ||
- isspace((unsigned char)LastDisplayChar) ||
+ isspace(UCH(LastDisplayChar)) ||
LastDisplayChar == '-') {
/*
* Ignore the soft hyphen if it is not the last
@@ -937,12 +1279,26 @@ PRIVATE int display_line ARGS2(
* Make it a hard hyphen and fall through. - FM
*/
buffer[0] = '-';
- i++;
}
+ /* FALLTHRU */
default:
+#ifndef USE_COLOR_STYLE
+#if defined(SHOW_WHEREIS_TARGETS)
+ if (!intarget && cp_tgt && i >= i_start_tgt) {
+ /*
+ * Start the emphasis.
+ */
+ if (data > cp_tgt) {
+ LYstartTargetEmphasis();
+ intarget = YES;
+ }
+ }
+#endif /* SHOW_WHEREIS_TARGETS */
+#endif /* USE_COLOR_STYLE */
i++;
- if (text->T.output_utf8 && !isascii(buffer[0])) {
+ if (text->T.output_utf8 && !isascii(UCH(buffer[0]))) {
+ text->has_utf8 = YES;
if ((*buffer & 0xe0) == 0xc0) {
utf_extra = 1;
} else if ((*buffer & 0xf0) == 0xe0) {
@@ -970,17 +1326,25 @@ PRIVATE int display_line ARGS2(
if (utf_extra) {
strncpy(&buffer[1], data, utf_extra);
buffer[utf_extra+1] = '\0';
- addstr(buffer);
+ LYaddstr(buffer);
buffer[1] = '\0';
data += utf_extra;
utf_extra = 0;
- } else if (HTCJK != NOCJK && !isascii(buffer[0])) {
+ } else if (HTCJK != NOCJK && !isascii(UCH(buffer[0]))
+#ifndef CONV_JISX0201KANA_JISX0208KANA
+ && kanji_code != SJIS
+#endif
+ ) {
/*
* For CJK strings, by Masanobu Kimura.
*/
+ if (i >= DISPLAY_COLS) goto after_while;
+
buffer[1] = *data;
+ buffer[2] = '\0';
data++;
- addstr(buffer);
+ i++;
+ LYaddstr(buffer);
buffer[1] = '\0';
/*
* For now, load 'M' into LastDisplayChar,
@@ -995,24 +1359,37 @@ PRIVATE int display_line ARGS2(
*/
LastDisplayChar = 'M';
} else {
- addstr(buffer);
+ LYaddstr(buffer);
LastDisplayChar = buffer[0];
}
} /* end of switch */
} /* end of while */
+after_while:
+#if !defined(NCURSES_VERSION)
+ if (text->has_utf8) {
+ LYtouchline(scrline);
+ text->has_utf8 = NO; /* we had some, but have dealt with it. */
+ }
+#endif
/*
* Add the return.
*/
- addch('\n');
+ LYaddch('\n');
+#if defined(SHOW_WHEREIS_TARGETS) && !defined(USE_COLOR_STYLE)
+ if (intarget)
+ LYstopTargetEmphasis();
+#else
+#undef intarget
+#endif /* SHOW_WHEREIS_TARGETS && !USE_COLOR_STYLE */
#ifndef USE_COLOR_STYLE
stop_underline();
stop_bold();
#else
while (current_style < line->numstyles)
{
- LynxChangeStyle (CStyle.style, CStyle.direction, CStyle.previous);
+ LynxChangeStyle (CStyle.style, CStyle.direction);
current_style++;
}
#undef CStyle
@@ -1030,7 +1407,8 @@ PRIVATE void display_title ARGS1(
char percent[20];
char *cp = NULL;
unsigned char *tmp = NULL;
- int i = 0, j = 0;
+ int i = 0, j = 0, toolbar = 0;
+ int limit;
/*
* Make sure we have a text structure. - FM
@@ -1042,9 +1420,9 @@ PRIVATE void display_title ARGS1(
#ifdef USE_COLOR_STYLE
/* turn the TITLE style on */
if (last_colorattr_ptr > 0) {
- LynxChangeStyle(s_title, STACK_ON, 0);
+ LynxChangeStyle(s_title, STACK_ON);
} else {
- LynxChangeStyle(s_title, ABS_ON, 0);
+ LynxChangeStyle(s_title, ABS_ON);
}
#endif /* USE_COLOR_STYLE */
@@ -1053,7 +1431,7 @@ PRIVATE void display_title ARGS1(
*/
StrAllocCopy(title,
(HTAnchor_title(text->node_anchor) ?
- HTAnchor_title(text->node_anchor) : ""));
+ HTAnchor_title(text->node_anchor) : " ")); /* "" -> " " */
/*
* There shouldn't be any \n in the title field,
@@ -1069,7 +1447,15 @@ PRIVATE void display_title ARGS1(
/*
* Generate the page indicator (percent) string.
*/
- if ((text->Lines + 1) > (display_lines)) {
+ limit = LYscreenWidth();
+ if (limit < 10) {
+ percent[0] = '\0'; /* Null string */
+ } else if ((display_lines) <= 0 && LYlines > 0 &&
+ text->top_of_screen <= 99999 && text->Lines <= 999999) {
+ sprintf(percent, " (l%d of %d)",
+ text->top_of_screen, text->Lines);
+ } else if ((text->Lines + 1) > (display_lines) &&
+ (display_lines) > 0) {
/*
* In a small attempt to correct the number of pages counted....
* GAB 07-14-94
@@ -1099,7 +1485,7 @@ PRIVATE void display_title ARGS1(
*/
if (HTCJK != NOCJK) {
if (*title &&
- (tmp = (unsigned char *)calloc(1, (strlen(title) + 1)))) {
+ (tmp = typecallocn(unsigned char, (strlen(title) + 256)))) {
if (kanji_code == EUC) {
TO_EUC((unsigned char *)title, tmp);
} else if (kanji_code == SJIS) {
@@ -1116,38 +1502,186 @@ PRIVATE void display_title ARGS1(
FREE(tmp);
}
}
- move(0, 0);
- clrtoeol();
- if (text->top_of_screen > 0 && HText_hasToolbar(text)) {
- addch('#');
+ LYmove(0, 0);
+ LYclrtoeol();
+#if defined(SH_EX) && defined(KANJI_CODE_OVERRIDE)
+ LYaddstr(str_kcode(last_kcode));
+#endif
+ if (HText_hasToolbar(text)) {
+ LYaddch('#');
+ toolbar = 1;
+ }
+#ifdef USE_COLOR_STYLE
+ if (s_forw_backw != NOSTYLE && (nhist || nhist_extra > 1)) {
+ int c = nhist ? ACS_LARROW : ' ';
+
+ /* turn the FORWBACKW.ARROW style on */
+ LynxChangeStyle(s_forw_backw, STACK_ON);
+ if (nhist) {
+ LYaddch(c); LYaddch(c); LYaddch(c);
+ } else
+ LYmove(0, 3 + toolbar);
+ if (nhist_extra > 1) {
+ LYaddch(ACS_RARROW); LYaddch(ACS_RARROW); LYaddch(ACS_RARROW);
+ }
+ LynxChangeStyle(s_forw_backw, STACK_OFF);
}
- i = (LYcols - 1) - strlen(percent) - strlen(title);
- if (i > 0) {
- move(0, i);
+#endif /* USE_COLOR_STYLE */
+ i = (limit - 1) - strlen(percent) - strlen(title);
+ if (i >= CHAR_WIDTH) {
+ LYmove(0, i);
} else {
/*
* Note that this truncation is not taking into
* account the possibility that multibyte
* characters might be present. - FM
*/
- title[((LYcols - 2) - strlen(percent))] = '\0';
- move(0, 1);
+#ifdef SH_EX /* 1999/06/15 (Tue) 10:17:28 */
+ int last;
+ last = (int)strlen(percent) + CHAR_WIDTH;
+ if (limit - 3 >= last) {
+ title[(limit - 3) - last] = '.';
+ title[(limit - 2) - last] = '.';
+ title[(limit - 1) - last] = '\0';
+ } else {
+ title[(limit - 1) - last] = '\0';
+ }
+#else
+ if ((i = ((limit - 2) - strlen(percent)) - CHAR_WIDTH) >= 0)
+ title[i] = '\0';
+#endif
+ LYmove(0, CHAR_WIDTH);
}
- addstr(title);
+ LYaddstr(title);
if (percent[0] != '\0')
- addstr(percent);
- addch('\n');
+ LYaddstr(percent);
+ LYaddch('\n');
FREE(title);
#ifdef USE_COLOR_STYLE
/* turn the TITLE style off */
- LynxChangeStyle(s_title, STACK_OFF, 0);
+ LynxChangeStyle(s_title, STACK_OFF);
#endif /* USE_COLOR_STYLE */
lynx_stop_title_color ();
return;
}
+/* Output the scrollbar
+** ---------------------
+*/
+#ifdef USE_SCROLLBAR
+PRIVATE void display_scrollbar ARGS1(
+ HText *, text)
+{
+ int i;
+ int h = display_lines - 2 * (LYsb_arrow!=0); /* Height of the scrollbar */
+ int off = (LYsb_arrow != 0); /* Start of the scrollbar */
+ int top_skip, bot_skip, sh, shown;
+
+ LYsb_begin = LYsb_end = -1;
+ if (!LYsb || !text || h <= 2
+ || (text->Lines + 1) <= display_lines)
+ return;
+
+ if (text->top_of_screen >= text->Lines + 1 - display_lines) {
+ /* Only part of the screen shows actual text */
+ shown = text->Lines + 1 - text->top_of_screen;
+
+ if (shown <= 0)
+ shown = 1;
+ } else
+ shown = display_lines;
+ /* Each cell of scrollbar represents text->Lines/h lines of text. */
+ /* Always smaller than h */
+ sh = (shown*h + text->Lines/2)/(text->Lines + 1);
+ if (sh <= 0)
+ sh = 1;
+ if (sh >= h - 1)
+ sh = h - 2; /* Position at ends indicates BEG and END */
+
+ if (text->top_of_screen == 0)
+ top_skip = 0;
+ else if (text->Lines - (text->top_of_screen + display_lines - 1) <= 0)
+ top_skip = h - sh;
+ else {
+ /* text->top_of_screen between 1 and text->Lines - display_lines
+ corresponds to top_skip between 1 and h - sh - 1 */
+ /* Use rounding to get as many positions into top_skip==h - sh - 1
+ as into top_skip == 1:
+ 1--->1, text->Lines - display_lines + 1--->h - sh. */
+ top_skip = (int) (1 +
+ 1. * (h - sh - 1) * text->top_of_screen
+ / (text->Lines - display_lines + 1));
+ }
+ bot_skip = h - sh - top_skip;
+
+ LYsb_begin = top_skip;
+ LYsb_end = h - bot_skip;
+
+ if (LYsb_arrow) {
+#ifdef USE_COLOR_STYLE
+ int s = top_skip ? s_sb_aa : s_sb_naa;
+
+ if (last_colorattr_ptr > 0) {
+ LynxChangeStyle(s, STACK_ON);
+ } else {
+ LynxChangeStyle(s, ABS_ON);
+ }
+#endif /* USE_COLOR_STYLE */
+ LYmove(1, LYcols + LYshiftWin - 1);
+ addch_raw(ACS_UARROW);
+#ifdef USE_COLOR_STYLE
+ LynxChangeStyle(s, STACK_OFF);
+#endif /* USE_COLOR_STYLE */
+ }
+#ifdef USE_COLOR_STYLE
+ if (last_colorattr_ptr > 0) {
+ LynxChangeStyle(s_sb_bg, STACK_ON);
+ } else {
+ LynxChangeStyle(s_sb_bg, ABS_ON);
+ }
+#endif /* USE_COLOR_STYLE */
+
+ for (i=1; i <= h; i++) {
+#ifdef USE_COLOR_STYLE
+ if (i-1 <= top_skip && i > top_skip)
+ LynxChangeStyle(s_sb_bar, STACK_ON);
+ if (i-1 <= h - bot_skip && i > h - bot_skip)
+ LynxChangeStyle(s_sb_bar, STACK_OFF);
+#endif /* USE_COLOR_STYLE */
+ LYmove(i + off, LYcols + LYshiftWin - 1);
+ if (i > top_skip && i <= h - bot_skip)
+ LYaddch(ACS_BLOCK);
+ else
+ LYaddch(ACS_CKBOARD);
+ }
+#ifdef USE_COLOR_STYLE
+ LynxChangeStyle(s_sb_bg, STACK_OFF);
+#endif /* USE_COLOR_STYLE */
+
+ if (LYsb_arrow) {
+#ifdef USE_COLOR_STYLE
+ int s = bot_skip ? s_sb_aa : s_sb_naa;
+
+ if (last_colorattr_ptr > 0) {
+ LynxChangeStyle(s, STACK_ON);
+ } else {
+ LynxChangeStyle(s, ABS_ON);
+ }
+#endif /* USE_COLOR_STYLE */
+ LYmove(h + 2, LYcols + LYshiftWin - 1);
+ addch_raw(ACS_DARROW);
+#ifdef USE_COLOR_STYLE
+ LynxChangeStyle(s, STACK_OFF);
+#endif /* USE_COLOR_STYLE */
+ }
+ return;
+}
+#else
+#define display_scrollbar(text) /*nothing*/
+#endif /* USE_SCROLLBAR */
+
/* Output a page
** -------------
*/
@@ -1158,12 +1692,13 @@ PRIVATE void display_page ARGS3(
{
HTLine * line = NULL;
int i;
-#if defined(FANCY_CURSES) || defined(USE_SLANG)
+#if defined(USE_COLOR_STYLE) && defined(SHOW_WHEREIS_TARGETS)
char *cp;
#endif
char tmp[7];
int last_screen;
TextAnchor *Anchor_ptr = NULL;
+ int stop_before_for_anchors;
FormInfo *FormInfo_ptr;
BOOL display_flag = FALSE;
HTAnchor *link_dest;
@@ -1183,12 +1718,12 @@ PRIVATE void display_page ARGS3(
* curses packages. - shf@access.digex.net & seldon@eskimo.com
*/
if (enable_scrollback) {
- addch('*');
- refresh();
- clear();
+ LYaddch('*');
+ LYrefresh();
+ LYclear();
}
- addstr("\n\nError accessing document!\nNo data available!\n");
- refresh();
+ LYaddstr("\n\nError accessing document!\nNo data available!\n");
+ LYrefresh();
nlinks = 0; /* set number of links to 0 */
return;
}
@@ -1202,7 +1737,14 @@ PRIVATE void display_page ARGS3(
#endif /* DISP_PARTIAL */
tmp[0] = tmp[1] = tmp[2] = '\0';
+ if (target && *target == '\0') target = NULL;
text->page_has_target = NO;
+ if (display_lines <= 0) {
+ /* No screen space to display anything!
+ * returning here makes it more likely we will survive if
+ * an xterm is temporarily made very small. - kw */
+ return;
+ }
last_screen = text->Lines - (display_lines - 2);
line = text->last_line->prev;
@@ -1216,7 +1758,7 @@ PRIVATE void display_page ARGS3(
else if (line_number < 0)
line_number = 0;
- for (i = 0, line = text->last_line->next; /* Find line */
+ for (i = 0, line = FirstHTLine(text); /* Find line */
i < line_number && (line != text->last_line);
i++, line = line->next) { /* Loop */
#ifndef VMS
@@ -1224,12 +1766,12 @@ PRIVATE void display_page ARGS3(
assert(line->next != NULL);
} else if (line->next == NULL) {
if (enable_scrollback) {
- addch('*');
- refresh();
- clear();
+ LYaddch('*');
+ LYrefresh();
+ LYclear();
}
- addstr("\n\nError drawing page!\nBad HText structure!\n");
- refresh();
+ LYaddstr("\n\nError drawing page!\nBad HText structure!\n");
+ LYrefresh();
nlinks = 0; /* set number of links to 0 */
return;
}
@@ -1246,16 +1788,14 @@ PRIVATE void display_page ARGS3(
* Also we don't want to do this for -dump and -source etc.
*/
LYCursesON) {
- charset_last_displayed = current_char_set;
#ifdef EXP_CHARTRANS_AUTOSWITCH
-#ifdef LINUX
/*
* Currently implemented only for LINUX
*/
UCChangeTerminalCodepage(current_char_set,
&LYCharSet_UC[current_char_set]);
-#endif /* LINUX */
#endif /* EXP_CHARTRANS_AUTOSWITCH */
+ charset_last_displayed = current_char_set;
}
/*
@@ -1264,9 +1804,9 @@ PRIVATE void display_page ARGS3(
* curses packages. - shf@access.digex.net & seldon@eskimo.com
*/
if (enable_scrollback) {
- addch('*');
- refresh();
- clear();
+ LYaddch('*');
+ LYrefresh();
+ LYclear();
}
#ifdef USE_COLOR_STYLE
@@ -1283,6 +1823,7 @@ PRIVATE void display_page ARGS3(
#endif
text->top_of_screen = line_number;
+ text->top_of_screen_line = line;
display_title(text); /* will move cursor to top of screen */
display_flag=TRUE;
@@ -1295,13 +1836,29 @@ PRIVATE void display_page ARGS3(
LynxResetScreenCache();
#endif /* USE_COLOR_STYLE */
+#ifdef DISP_PARTIAL
+ if (display_partial && text->stbl) {
+ stop_before_for_anchors = Stbl_getStartLineDeep(text->stbl);
+ if (stop_before_for_anchors > line_number+(display_lines))
+ stop_before_for_anchors = line_number+(display_lines);
+ } else
+#endif
+ stop_before_for_anchors = line_number+(display_lines);
+
/*
* Output the page.
*/
if (line) {
-#if defined(FANCY_CURSES) || defined(USE_SLANG)
+#if defined(USE_COLOR_STYLE) && defined(SHOW_WHEREIS_TARGETS)
char *data;
- int offset, HitOffset, LenNeeded;
+ int offset, LenNeeded;
+#endif
+#ifdef DISP_PARTIAL
+ if (display_partial ||
+ line_number != text->first_lineno_last_disp_partial)
+ text->has_utf8 = NO;
+#else
+ text->has_utf8 = NO;
#endif
for (i = 0; i < (display_lines); i++) {
/*
@@ -1312,12 +1869,12 @@ PRIVATE void display_page ARGS3(
assert(line != NULL);
} else if (line == NULL) {
if (enable_scrollback) {
- addch('*');
- refresh();
- clear();
+ LYaddch('*');
+ LYrefresh();
+ LYclear();
}
- addstr("\n\nError drawing page!\nBad HText structure!\n");
- refresh();
+ LYaddstr("\n\nError drawing page!\nBad HText structure!\n");
+ LYrefresh();
nlinks = 0; /* set number of links to 0 */
return;
}
@@ -1329,12 +1886,13 @@ PRIVATE void display_page ARGS3(
if (!display_partial &&
line_number == text->first_lineno_last_disp_partial &&
i + line_number <= text->last_lineno_last_disp_partial)
- move((i + 2), 0);
+ LYmove((i + 2), 0);
else
#endif
- display_line(line, text);
+ display_line(line, text, i+1, target);
-#if defined(FANCY_CURSES) || defined(USE_SLANG)
+#if defined(SHOW_WHEREIS_TARGETS)
+#ifdef USE_COLOR_STYLE /* otherwise done in display_line - kw */
/*
* If the target is on this line, recursively
* seek and emphasize it. - FM
@@ -1342,18 +1900,12 @@ PRIVATE void display_page ARGS3(
data = (char *)line->data;
offset = (int)line->offset;
while ((target && *target) &&
- (case_sensitive ?
- (cp = LYno_attr_mbcs_strstr(data,
- target,
- text->T.output_utf8,
- &HitOffset,
- &LenNeeded)) != NULL :
- (cp = LYno_attr_mbcs_case_strstr(data,
- target,
- text->T.output_utf8,
- &HitOffset,
- &LenNeeded)) != NULL) &&
- ((int)line->offset + LenNeeded) < LYcols) {
+ (cp = LYno_attr_mb_strstr(data,
+ target,
+ text->T.output_utf8, YES,
+ NULL,
+ &LenNeeded)) != NULL &&
+ ((int)line->offset + LenNeeded) < DISPLAY_COLS) {
int itmp = 0;
int written = 0;
int x_pos = offset + (int)(cp - data);
@@ -1380,61 +1932,17 @@ PRIVATE void display_page ARGS3(
*/
x_pos--;
- } else if (cp == &data[itmp]) {
- /*
- * First printable character of target.
- */
- move((i + 1), x_pos);
- 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[itmp+1]) < utf_extra) {
- /*
- * Shouldn't happen.
- */
- utf_extra = 0;
- }
- }
- 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 += (utf_extra + 1);
- utf_extra = 0;
- } else if (HTCJK != NOCJK && !isascii(tmp[0])) {
+ } else if (&data[itmp] >= cp) {
+ if (cp == &data[itmp]) {
/*
- * For CJK strings, by Masanobu Kimura.
+ * First printable character of target.
*/
- tmp[1] = data[++itmp];
- addstr(tmp);
- tmp[1] = '\0';
- written += 2;
- } else {
- addstr(tmp);
- written++;
+ LYmove((i + 1), x_pos);
}
-
- } else if (&data[itmp] > cp) {
/*
- * Output all the other printable target chars.
+ * Output all the printable target chars.
*/
- if (text->T.output_utf8 && !isascii(tmp[0])) {
+ if (text->T.output_utf8 && !isascii(UCH(tmp[0]))) {
if ((*tmp & 0xe0) == 0xc0) {
utf_extra = 1;
} else if ((*tmp & 0xf0) == 0xe0) {
@@ -1462,20 +1970,20 @@ PRIVATE void display_page ARGS3(
strncpy(&tmp[1], &line->data[itmp+1], utf_extra);
tmp[utf_extra+1] = '\0';
itmp += utf_extra;
- addstr(tmp);
+ LYaddstr(tmp);
tmp[1] = '\0';
written += (utf_extra + 1);
utf_extra = 0;
- } else if (HTCJK != NOCJK && !isascii(tmp[0])) {
+ } else if (HTCJK != NOCJK && !isascii(UCH(tmp[0]))) {
/*
* For CJK strings, by Masanobu Kimura.
*/
tmp[1] = data[++itmp];
- addstr(tmp);
+ LYaddstr(tmp);
tmp[1] = '\0';
written += 2;
} else {
- addstr(tmp);
+ LYaddstr(tmp);
written++;
}
}
@@ -1495,9 +2003,10 @@ PRIVATE void display_page ARGS3(
* the end of the line, or not have another hit
* in it. - FM
*/
- move((i + 2), 0);
+ LYmove((i + 2), 0);
} /* end while */
-#endif /* FANCY CURSES || USE_SLANG */
+#endif /* USE_COLOR_STYLE */
+#endif /* SHOW_WHEREIS_TARGETS */
/*
* Stop if this is the last line. Otherwise, make sure
@@ -1508,8 +2017,8 @@ PRIVATE void display_page ARGS3(
* Clear remaining lines of display.
*/
for (i++; i < (display_lines); i++) {
- move((i + 1), 0);
- clrtoeol();
+ LYmove((i + 1), 0);
+ LYclrtoeol();
}
break;
}
@@ -1535,11 +2044,11 @@ PRIVATE void display_page ARGS3(
*/
nlinks = 0;
for (Anchor_ptr=text->first_anchor; Anchor_ptr != NULL &&
- Anchor_ptr->line_num <= line_number+(display_lines);
+ Anchor_ptr->line_num <= stop_before_for_anchors;
Anchor_ptr = Anchor_ptr->next) {
if (Anchor_ptr->line_num >= line_number &&
- Anchor_ptr->line_num < line_number+(display_lines)) {
+ Anchor_ptr->line_num < stop_before_for_anchors) {
/*
* Load normal hypertext anchors.
*/
@@ -1572,9 +2081,9 @@ PRIVATE void display_page ARGS3(
(HTAnchor *)Anchor_ptr->anchor, LINK_INTERNAL);
if (link_dest_intl && link_dest_intl != link_dest) {
- CTRACE(tfp,
- "display_page: unexpected typed link to %s!\n",
- link_dest_intl->parent->address);
+ CTRACE((tfp,
+ "GridText: display_page: unexpected typed link to %s!\n",
+ link_dest_intl->parent->address));
link_dest_intl = NULL;
}
} else
@@ -1664,9 +2173,9 @@ PRIVATE void display_page ARGS3(
* Not showing anchor.
*/
if (Anchor_ptr->hightext && *Anchor_ptr->hightext)
- CTRACE(tfp,
+ CTRACE((tfp,
"\nGridText: Not showing link, hightext=%s\n",
- Anchor_ptr->hightext);
+ Anchor_ptr->hightext));
}
}
@@ -1684,7 +2193,7 @@ PRIVATE void display_page ARGS3(
if (LYCursesON) {
HTAlert(MAXLINKS_REACHED);
}
- CTRACE(tfp, "\ndisplay_page: MAXLINKS reached.\n");
+ CTRACE((tfp, "\ndisplay_page: MAXLINKS reached.\n"));
break;
}
} /* end of loop "Add the anchors to Lynx structures." */
@@ -1712,8 +2221,9 @@ PRIVATE void display_page ARGS3(
/*
* Nothing on the page.
*/
- addstr("\n Document is empty");
+ LYaddstr("\n Document is empty");
}
+ display_scrollbar(text);
#ifdef DISP_PARTIAL
if (display_partial && display_flag &&
@@ -1728,14 +2238,24 @@ PRIVATE void display_page ARGS3(
}
#endif /* DISP_PARTIAL */
- if (HTCJK != NOCJK || text->T.output_utf8) {
+ if (text->has_utf8 || text->had_utf8) {
+ /*
+ * For other than ncurses, repainting is taken care of
+ * by touching lines in display_line and highlight. - kw 1999-10-07
+ */
+ text->had_utf8 = text->has_utf8;
+ clearok(curscr, TRUE);
+ } else if (HTCJK != NOCJK) {
/*
* For non-multibyte curses.
+ *
+ * Full repainting is necessary, otherwise only part of a multibyte
+ * character sequence might be written because of curses output
+ * optimizations.
*/
- lynx_force_repaint();
+ clearok(curscr, TRUE);
}
- refresh();
-
+ LYrefresh();
}
@@ -1753,6 +2273,22 @@ PUBLIC void HText_beginAppend ARGS1(
}
+/* LYcols_cu is the notion that the display library has of the screen
+ width. Normally it is the same as LYcols, but there may be a
+ difference via SLANG_MBCS_HACK. Checks of the line length (as the
+ non-UTF-8-aware display library would see it) against LYcols_cu are
+ is used to try to prevent that lines with UTF-8 chars get wrapped
+ by the library when they shouldn't.
+ If there is no display library involved, i.e. dump_output_immediately,
+ no such limit should be imposed. MAX_COLS should be just as good
+ as any other large value. (But don't use INT_MAX or something close
+ to it to, avoid over/underflow.) - kw */
+#ifdef USE_SLANG
+#define LYcols_cu (dump_output_immediately ? MAX_COLS : SLtt_Screen_Cols)
+#else
+#define LYcols_cu (dump_output_immediately ? MAX_COLS : DISPLAY_COLS)
+#endif
+
/* Add a new line of text
** ----------------------
**
@@ -1772,6 +2308,243 @@ PUBLIC void HText_beginAppend ARGS1(
*/
#define new_line(text) split_line(text, 0)
+#define DEBUG_SPLITLINE
+
+#ifdef DEBUG_SPLITLINE
+#define CTRACE_SPLITLINE(p) CTRACE(p)
+#else
+#define CTRACE_SPLITLINE(p) /*nothing*/
+#endif
+
+PRIVATE int set_style_by_embedded_chars ARGS4(
+ char *, s,
+ char *, e,
+ unsigned char, start_c,
+ unsigned char, end_c)
+{
+ int ret = NO;
+
+ while (--e >= s) {
+ if (*e == end_c)
+ break;
+ if (*e == start_c) {
+ ret = YES;
+ break;
+ }
+ }
+ return ret;
+}
+
+PRIVATE void move_anchors_in_region ARGS7(
+ HTLine *, line,
+ int, line_number,
+ TextAnchor **, prev_anchor,
+ int *, prev_head_processed,
+ int, sbyte,
+ int, ebyte,
+ int, shift) /* Likewise */
+{
+ /*
+ * Update anchor positions for anchors that start on this line.
+ * Note: we rely on a->line_pos counting bytes, not
+ * characters. That's one reason why HText_trimHightext
+ * has to be prevented from acting on these anchors in
+ * partial display mode before we get a chance to
+ * deal with them here.
+ */
+ TextAnchor *a;
+ int head_processed = *prev_head_processed;
+
+ /* We need to know whether (*prev_anchor)->line_pos is "in new
+ coordinates" or in old ones. If prev_anchor' head was touched
+ on the previous iteraction, we set head_processed. The tail
+ may need to be treated now. */
+ for (a = *prev_anchor;
+ a && a->line_num <= line_number;
+ a = a->next, head_processed = 0) {
+ /* extent==0 needs to be special-cased; happens if no text for
+ the anchor was processed yet. */
+ /* Subtract one so that the space is not inserted at the end
+ of the anchor... */
+ int last = a->line_pos + (a->extent ? a->extent - 1 : 0);
+
+ /* Include the anchors started on the previous line */
+ if (a->line_num < line_number - 1)
+ continue;
+ if (a->line_num == line_number - 1)
+ last -= line->prev->size + 1; /* Fake "\n" "between" lines counted too */
+ if (last < sbyte) /* Completely before the start */
+ continue;
+
+ if ( !head_processed /* a->line_pos is not edited yet */
+ && a->line_num == line_number
+ && a->line_pos >= ebyte) /* Completely after the end */
+ break;
+ /* Now we know that the anchor context intersects the chunk */
+
+ /* Fix the start */
+ if ( !head_processed && a->line_num == line_number
+ && a->line_pos >= sbyte ) {
+ a->line_pos += shift;
+ a->extent -= shift;
+ head_processed = 1;
+ }
+ /* Fix the end */
+ if ( last < ebyte )
+ a->extent += shift;
+ else
+ break; /* Keep this `a' for the next step */
+ }
+ *prev_anchor = a;
+ *prev_head_processed = head_processed;
+}
+
+/*
+ * Given a line and two int arrays of old/now position, this function
+ * creates a new line where spaces have been inserted/removed
+ * in appropriate places - so that characters at/after the old
+ * position end up at/after the new position, for each pair, if possible.
+ * Some necessary changes for anchors starting on this line are also done
+ * here if needed.
+ * Returns a newly allocated HTLine* if changes were made
+ * (caller has to free the old one).
+ * Returns NULL if no changes needed. (Remove-spaces code may be buggy...)
+ * - kw
+ */
+PRIVATE HTLine * insert_blanks_in_line ARGS7(
+ HTLine *, line,
+ int, line_number,
+ HText *, text,
+ TextAnchor *, prev_anchor,
+ int, ninserts,
+ int *, oldpos, /* Measured in cells */
+ int *, newpos) /* Likewise */
+{
+ int ioldc = 0; /* count visible characters */
+ int ip; /* count insertion pairs */
+#if defined(USE_COLOR_STYLE)
+ int istyle = 0;
+#endif
+ int added_chars = 0;
+ int shift = 0;
+ int head_processed;
+ HTLine * mod_line;
+ char *newdata;
+ char *s = line->data;
+ char *pre = s;
+ char *copied = line->data, *t;
+
+ if (!(line && line->size && ninserts))
+ return NULL;
+ for (ip = 0; ip < ninserts; ip++)
+ if (newpos[ip] > oldpos[ip] &&
+ (newpos[ip] - oldpos[ip]) > added_chars)
+ added_chars = newpos[ip] - oldpos[ip];
+ if (line->size + added_chars > MAX_LINE - 2)
+ return NULL;
+ if (line == text->last_line)
+ mod_line = allocHTLine(MAX_LINE);
+ else
+ mod_line = allocHTLine(line->size + added_chars);
+ if (!mod_line)
+ return NULL;
+ if (!prev_anchor)
+ prev_anchor = text->first_anchor;
+ head_processed = (prev_anchor && prev_anchor->line_num < line_number);
+ memcpy(mod_line, line, LINE_SIZE(1));
+ t = newdata = mod_line->data;
+ ip = 0;
+ while (ip <= ninserts) {
+ /* line->size is in bytes, so it may be larger than needed... */
+ int curlim = (ip < ninserts
+ ? oldpos[ip]
+ /* Include'em all! */
+ : (line->size <= MAX_LINE ? MAX_LINE+1 : line->size+1));
+ pre = s;
+
+ /* Fast forward to char==curlim or EOL. Stop *before* the
+ style-change chars. */
+ while (*s) {
+ if ( text && text->T.output_utf8
+ && UCH(*s) >= 0x80 && UCH(*s) < 0xC0 ) {
+ pre = s + 1;
+ } else if (!IsSpecialAttrChar(*s)) { /* At a "displayed" char */
+ if (ioldc >= curlim)
+ break;
+ ioldc++;
+ pre = s + 1;
+ }
+ s++;
+ }
+
+ /* Now s is at the "displayed" char, pre is before the style change */
+ if (ip) /* Fix anchor positions */
+ move_anchors_in_region(line, line_number, &prev_anchor,
+ &head_processed,
+ copied - line->data, pre - line->data,
+ shift);
+#if defined(USE_COLOR_STYLE) /* Move styles too */
+#define NStyle mod_line->styles[istyle]
+ for (; istyle < line->numstyles && (int) NStyle.horizpos < curlim ; istyle++)
+ /* Should not we include OFF-styles at curlim? */
+ NStyle.horizpos += shift;
+#endif
+ while (copied < pre) /* Copy verbatim to byte == pre */
+ *t++ = *copied++;
+ if (ip < ninserts) { /* Insert spaces */
+ int delta = newpos[ip] - oldpos[ip] - shift;
+
+ if (delta < 0) { /* Not used yet? */
+ while (delta++ < 0 && t > newdata && t[-1] == ' ')
+ t--, shift--;
+ } else
+ shift = newpos[ip] - oldpos[ip];
+ while (delta-- > 0)
+ *t++ = ' ';
+ }
+ ip++;
+ }
+ while (pre < s) /* Copy remaining style-codes */
+ *t++ = *pre++;
+ /* Check whether the last anchor continues on the next line */
+ if (head_processed && prev_anchor && prev_anchor->line_num == line_number)
+ prev_anchor->extent += shift;
+ *t = '\0';
+ mod_line->size = t - newdata;
+ return mod_line;
+}
+
+#if defined(USE_COLOR_STYLE)
+PRIVATE HTStyleChange * skip_matched_and_correct_offsets ARGS3(
+ HTStyleChange *, end,
+ HTStyleChange *, start,
+ unsigned, split_pos)
+{ /* Found an OFF change not part of an adjacent matched pair.
+ * Walk backward looking for the corresponding ON change.
+ * Move everything after split_pos to be at split_pos.
+ * This can only work correctly if all changes are correctly
+ * nested! If this fails, assume it is safer to leave whatever
+ * comes before the OFF on the previous line alone. */
+ int level = 0;
+ HTStyleChange *tmp = end;
+
+ for (; tmp >= start; tmp--) {
+ if (tmp->style == end->style) {
+ if (tmp->direction == STACK_OFF)
+ level--;
+ else if (tmp->direction == STACK_ON) {
+ if (++level == 0)
+ return tmp;
+ } else
+ return 0;
+ }
+ if (tmp->horizpos > split_pos)
+ tmp->horizpos = split_pos;
+ }
+ return 0;
+}
+#endif /* USE_COLOR_STYLE */
+
PRIVATE void split_line ARGS2(
HText *, text,
unsigned, split)
@@ -1779,48 +2552,66 @@ PRIVATE void split_line ARGS2(
HTStyle * style = text->style;
HTLine * temp;
int spare;
-#if defined(USE_COLOR_STYLE)
- int inew;
-#endif
int indent = text->in_line_1 ?
text->style->indent1st : text->style->leftIndent;
+ short alignment;
TextAnchor * a;
int CurLine = text->Lines;
int HeadTrim = 0;
int SpecialAttrChars = 0;
int TailTrim = 0;
- int s;
-
-#define DEBUG_SPLITLINE
- /*
- * Make new line.
- */
+ int s, s_post, s_pre, t_underline = underline_on, t_bold = bold_on;
+ char *p;
HTLine * previous = text->last_line;
int ctrl_chars_on_previous_line = 0;
+ int utfxtra_on_previous_line = utfxtra_on_this_line;
char * cp;
/* can't wrap in middle of multibyte sequences, so allocate 2 extra */
HTLine * line = (HTLine *)LY_CALLOC(1, LINE_SIZE(MAX_LINE)+2);
+
+ /*
+ * Make new line.
+ */
if (line == NULL)
outofmem(__FILE__, "split_line_1");
-
ctrl_chars_on_this_line = 0; /*reset since we are going to a new line*/
+ utfxtra_on_this_line = 0; /*reset too, we'll count them*/
text->LastChar = ' ';
#ifdef DEBUG_APPCH
- CTRACE(tfp,"GridText: split_line(%p,%d) called\n", text, split);
- CTRACE(tfp," bold_on=%d, underline_on=%d\n", bold_on, underline_on);
+ CTRACE((tfp,"GridText: split_line(%p,%d) called\n", text, split));
+ CTRACE((tfp," bold_on=%d, underline_on=%d\n", bold_on, underline_on));
#endif
+ cp = previous->data;
+ /* Float LY_SOFT_NEWLINE to the start */
+ if (cp[0] == LY_BOLD_START_CHAR
+ || cp[0] == LY_UNDERLINE_START_CHAR) {
+ switch (cp[1]) {
+ case LY_SOFT_NEWLINE:
+ cp[1] = cp[0];
+ cp[0] = LY_SOFT_NEWLINE;
+ break;
+ case LY_BOLD_START_CHAR:
+ case LY_UNDERLINE_START_CHAR:
+ if (cp[2] == LY_SOFT_NEWLINE) {
+ cp[2] = cp[1];
+ cp[1] = cp[0];
+ cp[0] = LY_SOFT_NEWLINE;
+ }
+ break;
+ }
+ }
if (split > previous->size) {
- CTRACE(tfp,
+ CTRACE((tfp,
"*** split_line: split==%d greater than last_line->size==%d !\n",
- split, previous->size);
+ split, previous->size));
if (split > MAX_LINE) {
split = previous->size;
if ((cp = strrchr(previous->data, ' ')) &&
cp - previous->data > 1)
split = cp - previous->data;
- CTRACE(tfp, " split adjusted to %d.\n", split);
+ CTRACE((tfp, " split adjusted to %d.\n", split));
}
}
@@ -1836,35 +2627,42 @@ PRIVATE void split_line ARGS2(
text->permissible_split = 0; /* 12/13/93 */
line->data[0] = '\0';
- /*
- * If we are not splitting and need an underline char, add it now. - FM
- */
- if ((split < 1) &&
- !(dump_output_immediately && use_underscore) && underline_on) {
+ alignment = style->alignment;
+
+ if (split > 0) { /* Restore flags to the value at the splitting point */
+ if (!(dump_output_immediately && use_underscore))
+ t_underline = set_style_by_embedded_chars(
+ previous->data, previous->data + split,
+ LY_UNDERLINE_START_CHAR, LY_UNDERLINE_END_CHAR);
+
+ t_bold = set_style_by_embedded_chars(
+ previous->data, previous->data + split,
+ LY_BOLD_START_CHAR, LY_BOLD_END_CHAR);
+
+ }
+
+ if (!(dump_output_immediately && use_underscore) && t_underline) {
line->data[line->size++] = LY_UNDERLINE_START_CHAR;
line->data[line->size] = '\0';
ctrl_chars_on_this_line++;
+ SpecialAttrChars++;
}
- /*
- * If we are not splitting and need a bold char, add it now. - FM
- */
- if ((split < 1) && bold_on) {
+ if (t_bold) {
line->data[line->size++] = LY_BOLD_START_CHAR;
line->data[line->size] = '\0';
ctrl_chars_on_this_line++;
+ SpecialAttrChars++;
}
/*
* Split at required point
*/
if (split > 0) { /* Delete space at "split" splitting line */
- char *p, *prevdata = previous->data, *linedata = line->data;
+ char *prevdata = previous->data, *linedata = line->data;
unsigned plen;
int i;
- /*
- * Split the line. - FM
- */
+ /* Split the line. - FM */
prevdata[previous->size] = '\0';
previous->size = split;
@@ -1873,135 +2671,78 @@ PRIVATE void split_line ARGS2(
* of our new line. - FM
*/
p = prevdata + split;
- while ((*p == ' ' &&
- (HeadTrim || text->first_anchor ||
- underline_on || bold_on ||
- text->style->alignment != HT_LEFT ||
- text->style->wordWrap || text->style->freeFormat ||
- text->style->spaceBefore || text->style->spaceAfter)) ||
- *p == LY_SOFT_HYPHEN) {
+ while ((
+ (*p == ' '
+#ifdef EXP_JUSTIFY_ELTS
+ /* if justification is allowed for prev line, then raw
+ * HT_NON_BREAK_SPACE are still present in data[] (they'll be
+ * substituted at the end of this function with ' ') - VH
+ */
+ || *p == HT_NON_BREAK_SPACE
+#endif
+ )
+ && (HeadTrim || text->first_anchor ||
+ underline_on || bold_on ||
+ alignment != HT_LEFT ||
+ style->wordWrap || style->freeFormat ||
+ style->spaceBefore || style->spaceAfter)) ||
+ *p == LY_SOFT_HYPHEN) {
p++;
HeadTrim++;
}
- plen = strlen(p);
- /*
- * Add underline char if needed. - FM
- */
- if (!(dump_output_immediately && use_underscore)) {
- /*
- * Make sure our global flag is correct. - FM
- */
- underline_on = NO;
- for (i = (split-1); i >= 0; i--) {
- if (prevdata[i] == LY_UNDERLINE_END_CHAR) {
- break;
- }
- if (prevdata[i] == LY_UNDERLINE_START_CHAR) {
- underline_on = YES;
- break;
- }
- }
- /*
- * Act on the global flag if set above. - FM
- */
- if (underline_on && *p != LY_UNDERLINE_END_CHAR) {
- linedata[line->size++] = LY_UNDERLINE_START_CHAR;
- linedata[line->size] = '\0';
- ctrl_chars_on_this_line++;
- SpecialAttrChars++;
- }
- if (plen) {
- for (i = (plen - 1); i >= 0; i--) {
- if (p[i] == LY_UNDERLINE_START_CHAR) {
- underline_on = YES;
- break;
- }
- if (p[i] == LY_UNDERLINE_END_CHAR) {
- underline_on = NO;
- break;
- }
- }
- for (i = (plen - 1); i >= 0; i--) {
- if (p[i] == LY_UNDERLINE_START_CHAR ||
- p[i] == LY_UNDERLINE_END_CHAR) {
- ctrl_chars_on_this_line++;
- }
- }
- }
- }
-
- /*
- * Add bold char if needed, first making
- * sure that our global flag is correct. - FM
- */
- bold_on = NO;
- for (i = (split - 1); i >= 0; i--) {
- if (prevdata[i] == LY_BOLD_END_CHAR) {
- break;
- }
- if (prevdata[i] == LY_BOLD_START_CHAR) {
- bold_on = YES;
- break;
- }
- }
- /*
- * Act on the global flag if set above. - FM
- */
- if (bold_on && *p != LY_BOLD_END_CHAR) {
- linedata[line->size++] = LY_BOLD_START_CHAR;
- linedata[line->size] = '\0';
- ctrl_chars_on_this_line++;
- SpecialAttrChars++;
- }
- if (plen) {
- for (i = (plen - 1); i >= 0; i--) {
- if (p[i] == LY_BOLD_START_CHAR) {
- bold_on = YES;
- break;
- }
- if (p[i] == LY_BOLD_END_CHAR) {
- bold_on = NO;
- break;
- }
- }
+ plen = strlen(p);
+ if (plen) { /* Count funny characters */
for (i = (plen - 1); i >= 0; i--) {
- if (p[i] == LY_BOLD_START_CHAR ||
+ if (p[i] == LY_UNDERLINE_START_CHAR ||
+ p[i] == LY_UNDERLINE_END_CHAR ||
+ p[i] == LY_BOLD_START_CHAR ||
p[i] == LY_BOLD_END_CHAR ||
- IS_UTF_EXTRA(p[i]) ||
- p[i] == LY_SOFT_HYPHEN) {
+ p[i] == LY_SOFT_HYPHEN)
ctrl_chars_on_this_line++;
- }
- if (p[i] == LY_SOFT_HYPHEN && (int)text->permissible_split < i) {
+ else if (IS_UTF_EXTRA(p[i]))
+ utfxtra_on_this_line++;
+ if (p[i] == LY_SOFT_HYPHEN && (int)text->permissible_split < i)
text->permissible_split = i + 1;
- }
}
- }
+ ctrl_chars_on_this_line += utfxtra_on_this_line;
- /*
- * Add the data to the new line. - FM
- */
- strcat(linedata, p);
- line->size += plen;
+ /* Add the data to the new line. - FM */
+ strcat(linedata, p);
+ line->size += plen;
+ }
}
/*
* Economize on space.
*/
- while ((previous->size > 0) &&
- (previous->data[previous->size-1] == ' ') &&
- (ctrl_chars_on_this_line || HeadTrim || text->first_anchor ||
- underline_on || bold_on ||
- text->style->alignment != HT_LEFT ||
- text->style->wordWrap || text->style->freeFormat ||
- text->style->spaceBefore || text->style->spaceAfter)) {
- /*
- * Strip trailers.
- */
- previous->data[previous->size-1] = '\0';
- previous->size--;
- TailTrim++;
+ p = previous->data + previous->size - 1;
+ while (p >= previous->data
+ && (*p == ' '
+#ifdef EXP_JUSTIFY_ELTS
+ /* if justification is allowed for prev line, then raw
+ * HT_NON_BREAK_SPACE are still present in data[] (they'll be
+ * substituted at the end of this function with ' ') - VH
+ */
+ || *p == HT_NON_BREAK_SPACE
+#endif
+ )
+#ifdef USE_PRETTYSRC
+ && !psrc_view /*don't strip trailing whites - since next line can
+ start with LY_SOFT_NEWLINE - so we don't lose spaces when
+ 'p'rinting this text to file -VH */
+#endif
+ && (ctrl_chars_on_this_line || HeadTrim || text->first_anchor ||
+ underline_on || bold_on ||
+ alignment != HT_LEFT ||
+ style->wordWrap || style->freeFormat ||
+ style->spaceBefore || style->spaceAfter)) {
+ p--; /* Strip trailers. */
}
+ TailTrim = previous->data + previous->size - 1 - p; /* Strip trailers. */
+ previous->size -= TailTrim;
+ p[1] = '\0';
+
/*
* s is the effective split position, given by either a non-zero
* value of split or by the size of the previous line before
@@ -2012,165 +2753,121 @@ PRIVATE void split_line ARGS2(
} else {
s = split;
}
+ s_post = s + HeadTrim;
+ s_pre = s - TailTrim;
+
#ifdef DEBUG_SPLITLINE
#ifdef DEBUG_APPCH
if (s != (int)split)
#endif
- CTRACE(tfp,"GridText: split_line(%d [now:%d]) called\n", split, s);
+ CTRACE((tfp,"GridText: split_line(%d [now:%d]) called\n", split, s));
#endif
#if defined(USE_COLOR_STYLE)
-#define LastStyle (previous->numstyles-1)
+ line->styles = stylechanges_buffers[stylechanges_buffers_free = (stylechanges_buffers_free + 1) &1];
line->numstyles = 0;
- inew = MAX_STYLES_ON_LINE - 1;
- /*
- * Color style changes after the split position + possible trimmed
- * head characters are transferred to the new line. Ditto for changes
- * within the trimming region, but be stop when we reach an OFF change.
- * The second while loop below may then handle remaining changes. - kw
- */
- while (previous->numstyles && inew >= 0) {
- if (previous->styles[LastStyle].horizpos > s + HeadTrim) {
- line->styles[inew].horizpos =
- previous->styles[LastStyle].horizpos
- - (s + HeadTrim) + SpecialAttrChars;
- line->styles[inew].direction = previous->styles[LastStyle].direction;
- line->styles[inew].style = previous->styles[LastStyle].style;
- inew --;
- line->numstyles ++;
- previous->numstyles --;
- } else if (previous->styles[LastStyle].horizpos > s - TailTrim &&
- (previous->styles[LastStyle].direction == STACK_ON ||
- previous->styles[LastStyle].direction == ABS_ON)) {
- line->styles[inew].horizpos =
- (previous->styles[LastStyle].horizpos < s) ?
- 0 : SpecialAttrChars;
- line->styles[inew].direction = previous->styles[LastStyle].direction;
- line->styles[inew].style = previous->styles[LastStyle].style;
- inew --;
- line->numstyles ++;
- previous->numstyles --;
- } else
- break;
- }
- spare = previous->numstyles;
- while (previous->numstyles && inew >= 0) {
- if (previous->numstyles >= 2 &&
- previous->styles[LastStyle].style
- == previous->styles[previous->numstyles-2].style &&
- previous->styles[LastStyle].horizpos
- == previous->styles[previous->numstyles-2].horizpos &&
- ((previous->styles[LastStyle].direction == STACK_OFF &&
- previous->styles[previous->numstyles-2].direction == STACK_ON) ||
- (previous->styles[LastStyle].direction == ABS_OFF &&
- previous->styles[previous->numstyles-2].direction == ABS_ON) ||
- (previous->styles[LastStyle].direction == ABS_ON &&
- previous->styles[previous->numstyles-2].direction == ABS_OFF)
- )) {
- /*
- * Discard pairs of ON/OFF for the same color style, but only
- * if they appear at the same position. - kw
- */
- previous->numstyles -= 2;
- if (spare > previous->numstyles)
- spare = previous->numstyles;
- } else if (spare > 0 && previous->styles[spare - 1].direction &&
- previous->numstyles < MAX_STYLES_ON_LINE) {
- /*
- * The index variable spare walks backwards through the
- * list of color style changes on the previous line, trying
- * to find an ON change which isn't followed by a
- * corresponding OFF. When it finds one, the missing OFF
- * change is appended to the end, and an ON change is added
- * at the beginning of the current line. The OFF change
- * appended to the previous line may get removed again in
- * the next iteration. - kw
- */
- line->styles[inew].horizpos = 0;
- line->styles[inew].direction = ON;
- line->styles[inew].style = previous->styles[spare - 1].style;
- inew --;
- line->numstyles ++;
- previous->styles[previous->numstyles].style = line->styles[inew + 1].style;
-
- previous->styles[previous->numstyles].direction = ABS_OFF;
- previous->styles[previous->numstyles].horizpos = previous->size;
- previous->numstyles++;
- spare --;
- } else if (spare >= 2 &&
- previous->styles[spare - 1].style == previous->styles[spare - 2].style &&
- ((previous->styles[spare - 1].direction == STACK_OFF &&
- previous->styles[spare - 2].direction == STACK_ON) ||
- (previous->styles[spare - 1].direction == ABS_OFF &&
- previous->styles[spare - 2].direction == ABS_ON) ||
- (previous->styles[spare - 1].direction == STACK_ON &&
- previous->styles[spare - 2].direction == STACK_OFF) ||
- (previous->styles[spare - 1].direction == ABS_ON &&
- previous->styles[spare - 2].direction == ABS_OFF)
- )) {
- /*
- * Skip pairs of adjacent ON/OFF or OFF/ON changes.
- */
- spare -= 2;
- } else if (spare && !previous->styles[spare - 1].direction) {
- /*
- * Found an OFF change not part of an adjacent matched pair.
- * Walk backward looking for the corresponding ON change.
- * If we find it, skip the ON/OFF and everything in between.
- * This can only work correctly if all changes are correctly
- * nested! If this fails, assume it is safer to leave whatever
- * comes before the OFF on the previous line alone. Setting
- * spare to 0 ensures that it won't be used in a following
- * iteration. - kw
+ {
+ HTStyleChange *from = previous->styles + previous->numstyles - 1;
+ HTStyleChange *to = line->styles + MAX_STYLES_ON_LINE - 1;
+ HTStyleChange *scan, *at_end;
+
+ /* Color style changes after the split position
+ * are transferred to the new line. Ditto for changes
+ * in the trimming region, but we stop when we reach an OFF change.
+ * The second loop below may then handle remaining changes. - kw */
+ while (from >= previous->styles && to >= line->styles) {
+ *to = *from;
+ if ((int) to->horizpos > s_post)
+ to->horizpos += - s_post + SpecialAttrChars;
+ else if ((int) to->horizpos > s_pre &&
+ (to->direction == STACK_ON ||
+ to->direction == ABS_ON))
+ to->horizpos = ((int) to->horizpos < s) ? 0 : SpecialAttrChars;
+ else
+ break;
+ to--;
+ from--;
+ }
+ /* FROM may be invalid, otherwise it is either an ON change at or
+ before s_pre, or is an OFF change at or before s_post. */
+
+ scan = from;
+ at_end = from;
+ /* Now on the previous line we have a correctly nested but
+ possibly non-terminated sequence of style changes.
+ Terminate it, and duplicate unterminated changes at the
+ beginning of the new line. */
+ while (scan >= previous->styles && at_end >= previous->styles) {
+ /* The algorithm: scan back though the styles on the previous line.
+ a) If OFF, skip the matched group.
+ Report a bug on failure.
+ b) If ON, (try to) cancel the corresponding ON at at_end,
+ and the corresponding OFF at to;
+ If not, put the corresponding OFF at at_end, and copy to to;
*/
- int level=-1;
- int itmp;
- for (itmp = spare-1; itmp > 0; itmp--) {
- if (previous->styles[itmp - 1].style
- == previous->styles[spare - 1].style) {
- if (previous->styles[itmp - 1].direction == STACK_OFF) {
- level--;
- } else if (previous->styles[itmp - 1].direction == STACK_ON) {
- if (++level == 0)
- break;
- } else
- break;
+ if (scan->direction == STACK_OFF) {
+ scan = skip_matched_and_correct_offsets(scan, previous->styles,
+ s_pre);
+ if (!scan) {
+ CTRACE((tfp, "BUG: styles improperly nested.\n"));
+ break;
+ }
+ } else if (scan->direction == STACK_ON) {
+ if ( at_end->direction == STACK_ON
+ && at_end->style == scan->style
+ && (int) at_end->horizpos >= s_pre )
+ at_end--;
+ else if (at_end >= previous->styles + MAX_STYLES_ON_LINE - 1) {
+ CTRACE((tfp, "BUG: style overflow before split_line.\n"));
+ break;
+ } else {
+ at_end++;
+ at_end->direction = STACK_OFF;
+ at_end->style = scan->style;
+ at_end->horizpos = s_pre;
+ }
+ if ( to < line->styles + MAX_STYLES_ON_LINE - 1
+ && to[1].direction == STACK_OFF
+ && to[1].horizpos <= SpecialAttrChars
+ && to[1].style == scan->style )
+ to++;
+ else if (to >= line->styles) {
+ *to = *scan;
+ to->horizpos = SpecialAttrChars;
+ to--;
+ } else {
+ CTRACE((tfp, "BUG: style overflow after split_line.\n"));
+ break;
}
}
- if (level == 0)
- spare = itmp - 1;
- else
- spare = 0;
- } else {
- /*
- * Nothing applied, so we are done with the loop. - kw
- */
- break;
- }
+ if ((int) scan->horizpos > s_pre)
+ scan->horizpos = s_pre;
+ scan--;
+ }
+ line->numstyles = line->styles + MAX_STYLES_ON_LINE - 1 - to;
+ if (line->numstyles > 0 && line->numstyles < MAX_STYLES_ON_LINE) {
+ int n;
+
+ for (n = 0; n < line->numstyles; n++)
+ line->styles[n] = to[n + 1];
+ } else if (line->numstyles == 0)
+ line->styles[0].horizpos = ~0; /* ?!!! */
+ previous->numstyles = at_end - previous->styles + 1;
+ if (previous->numstyles == 0)
+ previous->styles[0].horizpos = ~0; /* ?!!! */
}
- if (previous->numstyles > 0 && previous->styles[LastStyle].direction) {
-
- CTRACE(tfp, "%s\n%s%s\n",
- "........... Too many character styles on line:",
- "........... ", previous->data);
- }
- if (line->numstyles > 0 && line->numstyles < MAX_STYLES_ON_LINE) {
- int n;
- inew ++;
- for (n = 0; n < line->numstyles; n++)
- line->styles[n] = line->styles[n + inew];
- } else
- if (line->numstyles == 0)
- /* FIXME: RJP - shouldn't use 0xffffffff for largest integer */
- line->styles[0].horizpos = 0xffffffff;
- if (previous->numstyles == 0)
- previous->styles[0].horizpos = 0xffffffff;
#endif /*USE_COLOR_STYLE*/
temp = (HTLine *)LY_CALLOC(1, LINE_SIZE(previous->size));
if (temp == NULL)
outofmem(__FILE__, "split_line_2");
memcpy(temp, previous, LINE_SIZE(previous->size));
+#if defined(USE_COLOR_STYLE)
+ ALLOC_IN_POOL((text->styles_pool),HTStyleChangePool,previous->numstyles,temp->styles);
+ memcpy(temp->styles, previous->styles, sizeof(HTStyleChange)*previous->numstyles);
+ if (!temp->styles)
+ outofmem(__FILE__, "split_line_2");
+#endif
FREE(previous);
previous = temp;
@@ -2186,8 +2883,12 @@ PRIVATE void split_line ARGS2(
* Align left, right or center.
*/
spare = 0;
- if (style->alignment == HT_CENTER ||
- style->alignment == HT_RIGHT) {
+ if (
+#ifdef EXP_JUSTIFY_ELTS
+ this_line_was_split ||
+#endif
+ (alignment == HT_CENTER ||
+ alignment == HT_RIGHT) || text->stbl) {
/* Calculate spare character positions if needed */
for (cp = previous->data; *cp; cp++) {
if (*cp == LY_UNDERLINE_START_CHAR ||
@@ -2198,14 +2899,62 @@ PRIVATE void split_line ARGS2(
*cp == LY_SOFT_HYPHEN)
ctrl_chars_on_previous_line++;
}
+ if ((previous->size > 0) &&
+ (int)(previous->data[previous->size-1] == LY_SOFT_HYPHEN))
+ ctrl_chars_on_previous_line--;
+
/* @@ first line indent */
- spare = (LYcols-1) -
+ spare = (WRAP_COLS(text)-1) -
(int)style->rightIndent - indent +
- ctrl_chars_on_previous_line - previous->size -
- ((previous->size > 0) &&
- (int)(previous->data[previous->size-1] ==
- LY_SOFT_HYPHEN ?
- 1 : 0));
+ ctrl_chars_on_previous_line - previous->size;
+ if (spare < 0 && LYwideLines) /* Can be wider than screen */
+ spare = 0;
+
+ if (spare > 0 && !dump_output_immediately &&
+ text->T.output_utf8 && ctrl_chars_on_previous_line) {
+ utfxtra_on_previous_line -= utfxtra_on_this_line;
+ if (utfxtra_on_previous_line) {
+ int spare_cu = (LYcols_cu-1) -
+ utfxtra_on_previous_line - indent +
+ ctrl_chars_on_previous_line - previous->size;
+ /*
+ * Shift non-leftaligned UTF-8 lines that would be
+ * mishandled by the display library towards the left
+ * if this would make them fit. The resulting display
+ * will not be as intended, but this is better than
+ * having them split by curses. (Curses cursor movement
+ * optimization may still cause wrong positioning within
+ * the line, in particular after a sequence of spaces).
+ * - kw
+ */
+ if (spare_cu < spare) {
+ if (spare_cu >= 0) {
+ if (alignment == HT_CENTER &&
+ (int)(previous->offset + indent + spare/2 +
+ previous->size)
+ - ctrl_chars_on_previous_line
+ + utfxtra_on_previous_line <= (LYcols_cu - 1))
+ /* do nothing - it still fits - kw */;
+ else {
+ spare = spare_cu;
+ if (alignment == HT_CENTER) {
+ /*
+ * Can't move towars center all the way,
+ * but at least make line contents appear
+ * as far right as possible. - kw
+ */
+ alignment = HT_RIGHT;
+ }
+ }
+ } else if (indent + (int)previous->offset + spare_cu >= 0)
+ { /* subtract overdraft from effective indentation */
+ indent += (int)previous->offset + spare_cu;
+ previous->offset = 0;
+ spare = 0;
+ }
+ }
+ }
+ }
}
switch (style->alignment) {
@@ -2222,7 +2971,23 @@ PRIVATE void split_line ARGS2(
break;
} /* switch */
- text->chars = text->chars + previous->size + 1; /* 1 for the line */
+ if (text->stbl)
+ /*
+ * Notify simple table stuff of line split, so that it can
+ * set the last cell's length. The last cell should and
+ * its row should really end here, or on one of the following
+ * lines with no more characters added after the break.
+ * We don't know whether a cell has been started, so ignore
+ * errors here.
+ * This call is down here because we need the
+ * ctrl_chars_on_previous_line, which have just been re-
+ * counted above. - kw
+ */
+ Stbl_lineBreak(text->stbl,
+ text->Lines - 1,
+ previous->offset,
+ previous->size - ctrl_chars_on_previous_line);
+
text->in_line_1 = NO; /* unless caller sets it otherwise */
/*
@@ -2230,154 +2995,236 @@ PRIVATE void split_line ARGS2(
* structure values for the new line. - FM
*/
- if (split > 0 || s > 0) { /* if not completely empty */
+ if (s > 0) { /* if not completely empty */
TextAnchor * prev_a = NULL;
+ int moved = 0;
+
+ /* In the algorithm below we move or not move anchors between
+ lines using some heuristic criteria. However, it is
+ desirable not to have two consequent anchors on different
+ lines *in a wrong order*! (How can this happen?)
+ So when the "reasonable choice" is not unique, we use the
+ MOVED flag to choose one.
+ */
+ /* Our operations can make a non-empty all-whitespace link
+ empty. So what? */
for (a = text->first_anchor; a; prev_a = a, a = a->next) {
if (a->line_num == CurLine) {
- int old_e = a->extent;
- int a0 = a->line_pos, a1 = a->line_pos + a->extent;
- int S, d, new_pos, new_ext;
- if (a->link_type == INPUT_ANCHOR) {
- if (a->line_pos >= s) {
- a->start += (1 + SpecialAttrChars - HeadTrim - TailTrim);
- a->line_pos -= (s - SpecialAttrChars + HeadTrim);
- a->line_num = text->Lines;
+ int len = a->extent, n = a->number, start = a->line_pos;
+ int end = start + len;
+
+ /* Which anchors do we leave on the previous line?
+ a) empty finished (We need a cut-off value.
+ "Just because": those before s;
+ this is the only case when we use s, not s_pre/s_post);
+ b) Those which start before s_pre;
+ */
+ if (start < s_pre) {
+ if (end <= s_pre)
+ continue; /* No problem */
+
+ CTRACE_SPLITLINE((tfp, "anchor %d: no relocation", n));
+ if (end > s_post) {
+ CTRACE_SPLITLINE((tfp, " of the start.\n"));
+ a->extent += -(TailTrim + HeadTrim) - SpecialAttrChars;
+ } else {
+ CTRACE_SPLITLINE((tfp, ", cut the end.\n"));
+ a->extent = s_pre - start;
}
continue;
+ } else if (start < s && !len
+ && (!n || (a->show_anchor && !moved))) {
+ CTRACE_SPLITLINE((tfp, "anchor %d: no relocation, empty-finished",
+ n));
+ a->line_pos = s_pre; /* Leave at the end of line */
+ continue;
}
- if (a0 < s - TailTrim && a1 <= s - TailTrim) {
- continue; /* unaffected, leave it where it is. */
- }
- S = s + a->start - a->line_pos;
- d = S - s; /* == a->start - a->line_pos */
- new_ext = old_e = a->extent;
-
- if (!old_e &&
- (!a->number || a->show_anchor) &&
- a0 <= s + HeadTrim) {
-#ifdef DEBUG_SPLITLINE
- CTRACE(tfp, "anchor %d case %d: ",
- a->number,1);
-#endif
- /*
- * It is meant to be empty, and/or endAnchor
- * has seen it and recognized it as empty.
- */
- new_pos = (a0 <= s) ? s - TailTrim :
- s - TailTrim + 1;
- if (prev_a && new_pos + d < prev_a->start) {
- if (prev_a->start <= S - TailTrim + 1 + SpecialAttrChars)
- new_pos = prev_a->start - d;
- else
- new_pos = s - TailTrim + 1 + SpecialAttrChars;
- }
- } else if (old_e &&
- a0 >= s - TailTrim && a0 <= s + HeadTrim &&
- a1 <= s + HeadTrim) {
-#ifdef DEBUG_SPLITLINE
- CTRACE(tfp, "anchor %d case %d: ",
- a->number,2);
-#endif
- /*
- * endAnchor has seen it, it is effectively empty
- * after our trimming, but endAnchor has for some
- * reason not recognized this. In other words,
- * this should not happen.
- * Should we not adjust the extent and let it "leak"
- * into the new line?
- */
- new_pos = (a0 < s) ? s - TailTrim :
- s - TailTrim + 1;
- if (prev_a && new_pos + d < prev_a->start) {
- if (prev_a->start <= S - TailTrim + 1 + SpecialAttrChars)
- new_pos = prev_a->start - d;
- else
- new_pos = s - TailTrim + 1 + SpecialAttrChars;
- }
- new_ext = 0;
- } else if (a0 >= s + HeadTrim) {
-#ifdef DEBUG_SPLITLINE
- CTRACE(tfp, "anchor %d case %d: ",
- a->number,3);
-#endif
- /*
- * Completely after split, just shift.
- */
- new_pos = a0 - TailTrim + 1 - HeadTrim + SpecialAttrChars;
- } else if (!old_e) {
-#ifdef DEBUG_SPLITLINE
- CTRACE(tfp, "anchor %d case %d: ",
- a->number,4);
-#endif
- /*
- * No extent set, we may still be growing it.
- */
- new_pos = s - TailTrim + 1 + SpecialAttrChars;
- /*
- * Ok, it's neither empty, nor is it completely
- * before or after the split region (including trimmed
- * stuff). So the anchor is either being split in
- * the middle, with stuff remaining on both lines,
- * or something is being nibbled off, either at
- * the end (anchor stays on previous line) or at
- * the beginning (anchor is on new line). Let's
- * try in that order.
- */
- } else if (a0 < s - TailTrim &&
- a1 > s + HeadTrim) {
-#ifdef DEBUG_SPLITLINE
- CTRACE(tfp, "anchor %d case %d: ",
- a->number,5);
-#endif
- new_pos = a0;
- new_ext = old_e - TailTrim - HeadTrim + SpecialAttrChars;
- } else if (a0 < s - TailTrim) {
-#ifdef DEBUG_SPLITLINE
- CTRACE(tfp, "anchor %d case %d: ",
- a->number,6);
-#endif
- new_pos = a0;
- new_ext = s - TailTrim - a0;
- } else if (a1 > s + HeadTrim) {
-#ifdef DEBUG_SPLITLINE
- CTRACE(tfp, "anchor %d case %d: ",
- a->number,7);
-#endif
- new_pos = s - TailTrim + 1 + SpecialAttrChars;
- new_ext = old_e - (s + HeadTrim - a0);
- } else {
- CTRACE(tfp, "split_line anchor %d line %d: This should not happen!\n",
- a->number, a->line_num);
- CTRACE(tfp,
- "anchor %d: (T,H,S)=(%d,%d,%d); (line,start,pos,ext):(%d,%d,%d,%d)!\n",
- a->number,
- TailTrim,HeadTrim,SpecialAttrChars,
- a->line_num,a->start,a->line_pos,a->extent);
- continue;
+ /* The rest we relocate */
+ moved = 1;
+ a->line_num++;
+ CTRACE_SPLITLINE((tfp, "anchor %d: (T,H,S)=(%d,%d,%d); (line,pos,ext):(%d,%d,%d), ",
+ n, TailTrim,HeadTrim,SpecialAttrChars,
+ a->line_num,a->line_pos,a->extent));
+ if (end < s_post) { /* Move the end to s_post */
+ CTRACE_SPLITLINE((tfp, "Move end +%d, ", s_post - end));
+ len += s_post - end;
}
-#ifdef DEBUG_SPLITLINE
- CTRACE(tfp, "(T,H,S)=(%d,%d,%d); (line,start,pos,ext):(%d,%d,%d,%d",
- TailTrim,HeadTrim,SpecialAttrChars,
- a->line_num,a->start,a->line_pos,a->extent);
-#endif
- if (new_pos != a->line_pos)
- a->start = new_pos + d;
- if (new_pos > s - TailTrim) {
- new_pos -= s - TailTrim + 1;
- a->line_num = text->Lines;
+ if (start < s_post) { /* Move the start to s_post */
+ CTRACE_SPLITLINE((tfp, "Move start +%d, ", s_post - start));
+ len -= s_post - start;
+ start = s_post;
}
- a->line_pos = new_pos;
- a->extent = new_ext;
+ a->line_pos = start - s_post + SpecialAttrChars;
+ a->extent = len;
-#ifdef DEBUG_SPLITLINE
- CTRACE(tfp, ")->(%d,%d,%d,%d)\n",
- a->line_num,a->start,a->line_pos,a->extent);
-#endif
+ CTRACE_SPLITLINE((tfp, "->(%d,%d,%d)\n",
+ a->line_num,a->line_pos,a->extent));
+ } else if (a->line_num > CurLine)
+ break;
+ }
+ }
+
+#ifdef EXP_JUSTIFY_ELTS
+ /* now perform justification - by VH */
+
+ if (this_line_was_split
+ && spare
+ && !text->stbl /* We don't inform TRST on the cell width change yet */
+ && justify_max_void_percent > 0
+ && justify_max_void_percent <= 100
+ && justify_max_void_percent >= ((100*spare)
+ / ((WRAP_COLS(text) - 1)
+ - (int)style->rightIndent
+ - indent
+ + ctrl_chars_on_previous_line))) {
+ /* this is the only case when we need justification*/
+ char* jp = previous->data + justify_start_position;
+ ht_run_info* r = ht_runs;
+ char c;
+ int total_byte_len = 0, total_cell_len = 0;
+ int d_, r_;
+ HTLine * jline;
+
+ ht_num_runs = 0;
+ r->byte_len = r->cell_len = 0;
+
+ for(; (c = *jp) != 0; ++jp) {
+ if (c == ' ') {
+ total_byte_len += r->byte_len;
+ total_cell_len += r->cell_len;
+ ++r;
+ ++ht_num_runs;
+ r->byte_len = r->cell_len = 0;
+ continue;
+ }
+ ++r->byte_len;
+ if ( IsSpecialAttrChar(c) )
+ continue;
+ ++r->cell_len;
+ if (c == HT_NON_BREAK_SPACE) {
+ *jp = ' '; /* substitute it */
+ continue;
+ }
+ if (text->T.output_utf8 && !isascii(UCH(c))) {
+ int utf_extra = 0;
+ if ((c & 0xe0) == 0xc0) {
+ utf_extra = 1;
+ } else if ((c & 0xf0) == 0xe0) {
+ utf_extra = 2;
+ } else if ((c & 0xf8) == 0xf0) {
+ utf_extra = 3;
+ } else if ((c & 0xfc) == 0xf8) {
+ utf_extra = 4;
+ } else if ((c & 0xfe) == 0xfc) {
+ utf_extra = 5;
+ } else
+ utf_extra = 0;
+ if ( (int) strlen(jp+1) < utf_extra)
+ utf_extra = 0;
+ r->byte_len += utf_extra;
+ jp += utf_extra;
}
}
- }
+ total_byte_len += r->byte_len;
+ total_cell_len += r->cell_len;
+ ++ht_num_runs;
+
+ if (ht_num_runs != 1) {
+ int *oldpos = (int*)malloc(sizeof(int)*2*(ht_num_runs - 1));
+ int *newpos = oldpos + ht_num_runs - 1;
+ int i = 1;
+
+ if (oldpos == NULL)
+ outofmem(__FILE__, "split_line_3");
+
+ d_ = spare/(ht_num_runs-1);
+ r_ = spare % (ht_num_runs-1);
+
+ /* The first run is not moved, proceed to the second one */
+ oldpos[0] = justify_start_position + ht_runs[0].cell_len + 1;
+ newpos[0] = oldpos[0] + ( d_ + ( r_-- > 0 ) );
+ while (i < ht_num_runs - 1) {
+ int delta = ht_runs[i].cell_len + 1;
+
+ oldpos[i] = oldpos[i-1] + delta;
+ newpos[i] = newpos[i-1] + delta + ( d_ + ( r_-- > 0 ) );
+ i++;
+ }
+ jline = insert_blanks_in_line(previous, CurLine, text,
+ last_anchor_of_previous_line,
+ ht_num_runs - 1, oldpos, newpos);
+ free((char*)oldpos);
+ if (jline == NULL)
+ outofmem(__FILE__, "split_line_4");
+ previous->next->prev = jline;
+ previous->prev->next = jline;
+
+ FREE(previous);
+
+ previous = jline;
+ }
+ { /* (ht_num_runs==1) */
+ /* keep maintaining 'last_anchor_of_previous_line' */
+ TextAnchor* a2 = last_anchor_of_previous_line;
+ if (justify_start_position) {
+ char* p2 = previous->data;
+ for( ; p2 < previous->data + justify_start_position; ++p2)
+ *p2 = (*p2 == HT_NON_BREAK_SPACE ? ' ' : *p2);
+ }
+
+ if (!a2)
+ a2 = text->first_anchor;
+ else if (a2 == text->last_anchor)
+ a2 = NULL;
+ else
+ a2 = a2->next; /* 1st anchor on line we justify */
+
+ if (a2)
+ for (; a2 && a2->line_num <= text->Lines-1;
+ last_anchor_of_previous_line = a2, a2 = a2->next);
+ }
+ } else {
+ if (REALLY_CAN_JUSTIFY(text) ) {
+ char* p2;
+
+ /* it was permitted to justify line, but this function was called
+ * to end paragraph - we must substitute HT_NON_BREAK_SPACEs with
+ * spaces in previous line
+ */
+ if (line->size && !text->stbl) {
+ CTRACE((tfp,"BUG: justification: shouldn't happen - new line is not empty!\n"));
+ }
+
+ for (p2=previous->data;*p2;++p2)
+ if (*p2 == HT_NON_BREAK_SPACE)
+ *p2 = ' ';
+ } else if (have_raw_nbsps) {
+ /* this is very rare case, that can happen in forms placed in
+ table cells*/
+ unsigned i;
+
+ for (i = 0; i< previous->size; ++i)
+ if (previous->data[i] == HT_NON_BREAK_SPACE)
+ previous->data[i] = ' ';
+
+ /*next line won't be justified, so substitute nbsps in it too */
+ for (i = 0; i< line->size; ++i)
+ if (line->data[i] == HT_NON_BREAK_SPACE)
+ line->data[i] = ' ';
+ }
+
+ /* else HT_NON_BREAK_SPACEs were substituted with spaces in
+ HText_appendCharacter */
+ }
+ /* cleanup */
+ can_justify_this_line = TRUE;
+ justify_start_position = 0;
+ this_line_was_split = FALSE;
+ have_raw_nbsps = FALSE;
+#endif /* EXP_JUSTIFY_ELTS */
+ return;
} /* split_line */
@@ -2392,6 +3239,13 @@ PRIVATE void blank_lines ARGS2(
if (!HText_LastLineSize(text, IgnoreSpaces)) { /* No text on current line */
HTLine * line = text->last_line->prev;
+
+#ifdef USE_COLOR_STYLE
+ /* Style-change petty requests at the start of the document: */
+ if (line == text->last_line && newlines == 1)
+ return; /* Do not add a blank line at start */
+#endif
+
while ((line != text->last_line) &&
(HText_TrueLineSize(line, text, IgnoreSpaces) == 0)) {
if (newlines == 0)
@@ -2439,7 +3293,7 @@ PUBLIC void HText_setStyle ARGS2(
after = text->style->spaceAfter;
before = style->spaceBefore;
- CTRACE(tfp, "GridText: Change to style %s\n", style->name);
+ CTRACE((tfp, "GridText: Change to style %s\n", style->name));
blank_lines (text, ((after > before) ? after : before));
@@ -2451,13 +3305,17 @@ PUBLIC void HText_setStyle ARGS2(
*/
PUBLIC void HText_appendCharacter ARGS2(
HText *, text,
- char, ch)
+ int, ch)
{
HTLine * line;
HTStyle * style;
- int indent;
+ int indent, utfx;
#ifdef DEBUG_APPCH
+#ifdef CJK_EX
+ static unsigned char save_ch = 0;
+#endif
+
if (TRACE) {
char * special = NULL; /* make trace a little more readable */
switch(ch) {
@@ -2491,11 +3349,31 @@ PUBLIC void HText_appendCharacter ARGS2(
}
if (special != NULL) {
- CTRACE(tfp, "add(%s %d special char) %d/%d\n", special, ch,
- HTisDocumentSource(), HTOutputFormat != WWW_SOURCE);
+ CTRACE((tfp, "add(%s %d special char) %d/%d\n", special, ch,
+ HTisDocumentSource(), HTOutputFormat != WWW_SOURCE));
} else {
- CTRACE(tfp, "add(%c) %d/%d\n", ch,
- HTisDocumentSource(), HTOutputFormat != WWW_SOURCE);
+#ifdef CJK_EX /* 1998/08/30 (Sun) 13:26:23 */
+ if (save_ch == 0) {
+ if (IS_SJIS_HI1(ch) || IS_SJIS_HI2(ch)) {
+ save_ch = ch;
+ } else {
+ CTRACE((tfp, "add(%c) %d/%d\n", ch,
+ HTisDocumentSource(), HTOutputFormat != WWW_SOURCE));
+ }
+ } else {
+ CTRACE((tfp, "add(%c%c) %d/%d\n", save_ch, ch,
+ HTisDocumentSource(), HTOutputFormat != WWW_SOURCE));
+ save_ch = 0;
+ }
+#else
+ if (ch < 0x80) {
+ CTRACE((tfp, "add(%c) %d/%d\n", ch,
+ HTisDocumentSource(), HTOutputFormat != WWW_SOURCE));
+ } else {
+ CTRACE((tfp, "add(%02x) %d/%d\n", ch,
+ HTisDocumentSource(), HTOutputFormat != WWW_SOURCE));
+ }
+#endif /* CJK_EX */
}
} /* trace only */
#endif /* DEBUG_APPCH */
@@ -2525,11 +3403,109 @@ PUBLIC void HText_appendCharacter ARGS2(
text->halted = 3;
return;
}
+#ifdef USE_TH_JP_AUTO_DETECT
+ if ((HTCJK == JAPANESE) && (text->detected_kcode != DET_MIXED) &&
+ (text->specified_kcode != SJIS) && (text->specified_kcode != EUC)) {
+ unsigned char c;
+ enum _detected_kcode save_d_kcode;
+
+ c = UCH(ch);
+ save_d_kcode = text->detected_kcode;
+ switch (text->SJIS_status) {
+ case SJIS_state_has_bad_code:
+ break;
+ case SJIS_state_neutral:
+ if (IS_SJIS_HI1(c) || IS_SJIS_HI2(c)) {
+ text->SJIS_status = SJIS_state_in_kanji;
+ }
+ else if ((c & 0x80) && !IS_SJIS_X0201KANA(c)) {
+ text->SJIS_status = SJIS_state_has_bad_code;
+ if (text->EUC_status == EUC_state_has_bad_code)
+ text->detected_kcode = DET_MIXED;
+ else
+ text->detected_kcode = DET_EUC;
+ }
+ break;
+ case SJIS_state_in_kanji:
+ if (IS_SJIS_LO(c)) {
+ text->SJIS_status = SJIS_state_neutral;
+ }
+ else {
+ text->SJIS_status = SJIS_state_has_bad_code;
+ if (text->EUC_status == EUC_state_has_bad_code)
+ text->detected_kcode = DET_MIXED;
+ else
+ text->detected_kcode = DET_EUC;
+ }
+ break;
+ }
+ switch (text->EUC_status) {
+ case EUC_state_has_bad_code:
+ break;
+ case EUC_state_neutral:
+ if (IS_EUC_HI(c)) {
+ text->EUC_status = EUC_state_in_kanji;
+ }
+ else if (c == 0x8e) {
+ text->EUC_status = EUC_state_in_kana;
+ }
+ else if (c & 0x80) {
+ text->EUC_status = EUC_state_has_bad_code;
+ if (text->SJIS_status == SJIS_state_has_bad_code)
+ text->detected_kcode = DET_MIXED;
+ else
+ text->detected_kcode = DET_SJIS;
+ }
+ break;
+ case EUC_state_in_kanji:
+ if (IS_EUC_LOX(c)) {
+ text->EUC_status = EUC_state_neutral;
+ }
+ else {
+ text->EUC_status = EUC_state_has_bad_code;
+ if (text->SJIS_status == SJIS_state_has_bad_code)
+ text->detected_kcode = DET_MIXED;
+ else
+ text->detected_kcode = DET_SJIS;
+ }
+ break;
+ case EUC_state_in_kana:
+ if ((0xA1<=c)&&(c<=0xDF)) {
+ text->EUC_status = EUC_state_neutral;
+ }
+ else {
+ text->EUC_status = EUC_state_has_bad_code;
+ if (text->SJIS_status == SJIS_state_has_bad_code)
+ text->detected_kcode = DET_MIXED;
+ else
+ text->detected_kcode = DET_SJIS;
+ }
+ break;
+ }
+ if (save_d_kcode != text->detected_kcode) {
+ switch (text->detected_kcode) {
+ case DET_SJIS:
+ CTRACE((tfp, "TH_JP_AUTO_DETECT: This document's kcode seems SJIS.\n"));
+ break;
+ case DET_EUC:
+ CTRACE((tfp, "TH_JP_AUTO_DETECT: This document's kcode seems EUC.\n"));
+ break;
+ case DET_MIXED:
+ CTRACE((tfp, "TH_JP_AUTO_DETECT: This document's kcode seems mixed!\n"));
+ break;
+ default:
+ CTRACE((tfp, "TH_JP_AUTO_DETECT: This document's kcode is unexpected!\n"));
+ break;
+ }
+ }
+ }
+#endif /* USE_TH_JP_AUTO_DETECT */
/*
* Make sure we don't hang on escape sequences.
*/
- if (ch == CH_ESC && HTCJK == NOCJK) /* decimal 27 S/390 -- gil -- 1504 */
+ if (ch == CH_ESC && HTCJK == NOCJK) { /* decimal 27 S/390 -- gil -- 1504 */
return;
+ }
#ifndef USE_SLANG
/*
* Block 8-bit chars not allowed by the current display character
@@ -2540,13 +3516,13 @@ PUBLIC void HText_appendCharacter ARGS2(
* processing stage anyway. - kw
*/
#ifndef EBCDIC /* S/390 -- gil -- 1514 */
- if ((unsigned char)ch >= 128 && HTCJK == NOCJK &&
+ if (UCH(ch) >= 128 && HTCJK == NOCJK &&
!text->T.transp && !text->T.output_utf8 &&
- (unsigned char)ch < LYlowest_eightbit[current_char_set])
+ UCH(ch) < LYlowest_eightbit[current_char_set])
return;
#endif /* EBCDIC */
#endif /* !USE_SLANG */
- if ((unsigned char)ch == 155 && HTCJK == NOCJK) { /* octal 233 */
+ if (UCH(ch) == 155 && HTCJK == NOCJK) { /* octal 233 */
if (!HTPassHighCtrlRaw &&
!text->T.transp && !text->T.output_utf8 &&
(155 < LYlowest_eightbit[current_char_set])) {
@@ -2558,6 +3534,7 @@ PUBLIC void HText_appendCharacter ARGS2(
style = text->style;
indent = text->in_line_1 ? (int)style->indent1st : (int)style->leftIndent;
+ utfx = utfxtra_on_this_line;
if (HTCJK != NOCJK) {
switch(text->state) {
@@ -2573,7 +3550,7 @@ PUBLIC void HText_appendCharacter ARGS2(
}
break;
- case S_esc:
+ case S_esc:
/*
* Expecting '$'or '(' following CJK ESC.
*/
@@ -2586,13 +3563,16 @@ PUBLIC void HText_appendCharacter ARGS2(
} else {
text->state = S_text;
}
+ /* FALLTHRU */
- case S_dollar:
+ case S_dollar:
/*
* Expecting '@', 'B', 'A' or '(' after CJK "ESC$".
*/
if (ch == '@' || ch == 'B' || ch=='A') {
text->state = S_nonascii_text;
+ if (ch == '@' || ch == 'B')
+ text->kcode = JIS;
return;
} else if (ch == '(') {
text->state = S_dollar_paren;
@@ -2602,7 +3582,7 @@ PUBLIC void HText_appendCharacter ARGS2(
}
break;
- case S_dollar_paren:
+ case S_dollar_paren:
/*
* Expecting 'C' after CJK "ESC$(".
*/
@@ -2614,7 +3594,7 @@ PUBLIC void HText_appendCharacter ARGS2(
}
break;
- case S_paren:
+ case S_paren:
/*
* Expecting 'B', 'J', 'T' or 'I' after CJK "ESC(".
*/
@@ -2631,20 +3611,30 @@ PUBLIC void HText_appendCharacter ARGS2(
* Can split here. - FM
*/
text->permissible_split = text->last_line->size;
+ text->kcode = JIS;
return;
} else {
text->state = S_text;
}
break;
- case S_nonascii_text:
+ case S_nonascii_text:
/*
* Expecting CJK ESC after non-ASCII text.
*/
if (ch == CH_ESC) { /* S/390 -- gil -- 1553 */
text->state = S_esc;
text->kanji_buf = '\0';
+ if (HTCJK == JAPANESE) {
+ text->kcode = NOKANJI;
+ }
return;
+ } else if (UCH(ch) < 32) {
+ text->state = S_text;
+ text->kanji_buf = '\0';
+ if (HTCJK == JAPANESE) {
+ text->kcode = NOKANJI;
+ }
} else {
ch |= 0200;
}
@@ -2653,33 +3643,54 @@ PUBLIC void HText_appendCharacter ARGS2(
/*
* JIS X0201 Kana in JIS support. - by ASATAKU
*/
- case S_jisx0201_text:
+ case S_jisx0201_text:
if (ch == CH_ESC) { /* S/390 -- gil -- 1570 */
text->state = S_esc;
text->kanji_buf = '\0';
+ text->kcode = NOKANJI;
return;
} else {
text->kanji_buf = '\216';
ch |= 0200;
}
break;
- }
+ } /* end switch */
if (!text->kanji_buf) {
if ((ch & 0200) != 0) {
/*
* JIS X0201 Kana in SJIS support. - by ASATAKU
*/
- if ((text->kcode == SJIS) &&
- ((unsigned char)ch >= 0xA1) &&
- ((unsigned char)ch <= 0xDF)) {
- unsigned char c = (unsigned char)ch;
- unsigned char kb = (unsigned char)text->kanji_buf;
+ if ((text->kcode != JIS)
+ && (
+#ifdef KANJI_CODE_OVERRIDE
+ (last_kcode == SJIS) ||
+ ((last_kcode == NOKANJI) &&
+#endif
+ ((text->kcode == SJIS) ||
+#ifdef USE_TH_JP_AUTO_DETECT
+ ((text->detected_kcode == DET_SJIS) &&
+ (text->specified_kcode == NOKANJI)) ||
+#endif
+ ((text->kcode == NOKANJI) &&
+ (text->specified_kcode == SJIS)) )
+#ifdef KANJI_CODE_OVERRIDE
+ )
+#endif
+ ) &&
+ (UCH(ch) >= 0xA1) &&
+ (UCH(ch) <= 0xDF)) {
+#ifdef CONV_JISX0201KANA_JISX0208KANA
+ unsigned char c = UCH(ch);
+ unsigned char kb = UCH(text->kanji_buf);
JISx0201TO0208_SJIS(c,
(unsigned char *)&kb,
(unsigned char *)&c);
ch = (char)c;
text->kanji_buf = kb;
+#endif
+ /* 1998/01/19 (Mon) 09:06:15 */
+ text->permissible_split = (int)text->last_line->size;
} else {
text->kanji_buf = ch;
/*
@@ -2690,15 +3701,28 @@ PUBLIC void HText_appendCharacter ARGS2(
}
}
} else {
- goto check_IgnoreExcess;
+ goto check_WrapSource;
}
} else if (ch == CH_ESC) { /* S/390 -- gil -- 1587 */
return;
}
+#ifdef CJK_EX /* MOJI-BAKE Fix! 1997/10/12 -- 10/31 (Fri) 00:22:57 - JH7AYN */
+ if (HTCJK != NOCJK && /* added condition - kw */
+ (ch == LY_BOLD_START_CHAR || ch == LY_BOLD_END_CHAR)) {
+ text->permissible_split = (int)line->size; /* Can split here */
+ if (HTCJK == JAPANESE)
+ text->kcode = NOKANJI;
+ }
+#endif
+
if (IsSpecialAttrChar(ch) && ch != LY_SOFT_NEWLINE) {
-#ifndef USE_COLOR_STYLE
- if (line->size >= (MAX_LINE-1)) return;
+#if !defined(USE_COLOR_STYLE) || !defined(NO_DUMP_WITH_BACKSPACES)
+ if (line->size >= (MAX_LINE-1))
+ return;
+#if defined(USE_COLOR_STYLE) && !defined(NO_DUMP_WITH_BACKSPACES)
+ if (with_backspaces && HTCJK==NOCJK && !text->T.output_utf8) {
+#endif
if (ch == LY_UNDERLINE_START_CHAR) {
line->data[line->size++] = LY_UNDERLINE_START_CHAR;
line->data[line->size] = '\0';
@@ -2737,11 +3761,11 @@ PUBLIC void HText_appendCharacter ARGS2(
return;
for (i = (text->permissible_split + 1); line->data[i]; i++) {
- if (!IsSpecialAttrChar((unsigned char)line->data[i]) &&
- !isspace((unsigned char)line->data[i]) &&
- (unsigned char)line->data[i] != '-' &&
- (unsigned char)line->data[i] != HT_NON_BREAK_SPACE &&
- (unsigned char)line->data[i] != HT_EN_SPACE) {
+ if (!IsSpecialAttrChar(UCH(line->data[i])) &&
+ !isspace(UCH(line->data[i])) &&
+ UCH(line->data[i]) != '-' &&
+ UCH(line->data[i]) != HT_NON_BREAK_SPACE &&
+ UCH(line->data[i]) != HT_EN_SPACE) {
break;
}
}
@@ -2749,6 +3773,12 @@ PUBLIC void HText_appendCharacter ARGS2(
return;
}
}
+#if defined(USE_COLOR_STYLE) && !defined(NO_DUMP_WITH_BACKSPACES)
+ } /* if (with_backspaces && HTCJK==HTNOCJK && !text->T.output_utf8) */
+ else
+ return;
+#endif
+
#else
return;
#endif
@@ -2758,11 +3788,62 @@ PUBLIC void HText_appendCharacter ARGS2(
return;
}
- if (IS_UTF_EXTRA(ch)) {
- line->data[line->size++] = ch;
- line->data[line->size] = '\0';
- ctrl_chars_on_this_line++;
- return;
+ if (text->T.output_utf8) {
+ /*
+ * Some extra checks for UTF-8 output here to make sure
+ * memory is not overrun. For a non-first char, append
+ * to the line here and return. - kw
+ */
+ if (IS_UTF_EXTRA(ch)) {
+ if ((line->size > (MAX_LINE-1))
+ || (indent + (int)(line->offset + line->size) +
+ utfxtra_on_this_line - ctrl_chars_on_this_line +
+ ((line->size > 0) &&
+ (int)(line->data[line->size-1] ==
+ LY_SOFT_HYPHEN ?
+ 1 : 0)) >= (LYcols_cu-1))
+ ) {
+ if (!text->permissible_split || text->source) {
+ text->permissible_split = line->size;
+ while (text->permissible_split > 0 &&
+ IS_UTF_EXTRA(line->data[text->permissible_split-1]))
+ text->permissible_split--;
+ if (text->permissible_split &&
+ (line->data[text->permissible_split-1] & 0x80))
+ text->permissible_split--;
+ if (text->permissible_split == line->size)
+ text->permissible_split = 0;
+ }
+ split_line(text, text->permissible_split);
+ line = text->last_line;
+ if (text->source && line->size - ctrl_chars_on_this_line
+ + utfxtra_on_this_line == 0)
+ HText_appendCharacter (text, LY_SOFT_NEWLINE);
+ }
+ line->data[line->size++] = (char) ch;
+ line->data[line->size] = '\0';
+ utfxtra_on_this_line++;
+ ctrl_chars_on_this_line++;
+ return;
+ } else if (ch & 0x80) { /* a first char of UTF-8 sequence - kw */
+ if ((line->size > (MAX_LINE-7))) {
+ if (!text->permissible_split || text->source) {
+ text->permissible_split = line->size;
+ while (text->permissible_split > 0 &&
+ (line->data[text->permissible_split-1] & 0x80)
+ == 0xC0) {
+ text->permissible_split--;
+ }
+ if (text->permissible_split == line->size)
+ text->permissible_split = 0;
+ }
+ split_line(text, text->permissible_split);
+ line = text->last_line;
+ if (text->source && line->size - ctrl_chars_on_this_line
+ + utfxtra_on_this_line == 0)
+ HText_appendCharacter (text, LY_SOFT_NEWLINE);
+ }
+ }
}
/*
@@ -2786,6 +3867,15 @@ PUBLIC void HText_appendCharacter ARGS2(
if (ch == HT_EN_SPACE)
ch = ' ';
+#ifdef SH_EX /* 1997/11/01 (Sat) 12:08:54 */
+ if (ch == 0x0b) { /* ^K ??? */
+ ch = '\r';
+ }
+ if (ch == 0x1a) { /* ^Z ??? */
+ ch = '\r';
+ }
+#endif
+
/*
* I'm going to cheat here in a BIG way. Since I know that all
* \r's will be trapped by HTML_put_character I'm going to use
@@ -2810,8 +3900,8 @@ PUBLIC void HText_appendCharacter ARGS2(
*/
if (ch == '\t') {
CONST HTTabStop * Tab;
- int target; /* Where to tab to */
- int here;
+ int target, target_cu; /* Where to tab to */
+ int here, here_cu; /* in _cu we try to guess what curses thinks */
if (line->size > 0 && line->data[line->size-1] == LY_SOFT_HYPHEN) {
/*
@@ -2823,6 +3913,7 @@ PUBLIC void HText_appendCharacter ARGS2(
}
here = ((int)(line->size + line->offset) + indent)
- ctrl_chars_on_this_line; /* Consider special chars GAB */
+ here_cu = here + utfxtra_on_this_line;
if (style->tabs) { /* Use tab table */
for (Tab = style->tabs;
Tab->position <= here;
@@ -2850,7 +3941,12 @@ PUBLIC void HText_appendCharacter ARGS2(
#endif
}
- if (target > (LYcols-1) - (int)style->rightIndent &&
+ if (target >= here)
+ target_cu = target;
+ else
+ target_cu = target + (here_cu - here);
+
+ if (target > (WRAP_COLS(text)-1) - (int)style->rightIndent &&
HTOutputFormat != WWW_SOURCE) {
new_line(text);
} else {
@@ -2858,6 +3954,8 @@ PUBLIC void HText_appendCharacter ARGS2(
* Can split here. - FM
*/
text->permissible_split = line->size;
+ if (target_cu > (WRAP_COLS(text)-1))
+ target -= target_cu - (WRAP_COLS(text)-1);
if (line->size == 0) {
line->offset = line->offset + target - here;
} else {
@@ -2870,17 +3968,33 @@ PUBLIC void HText_appendCharacter ARGS2(
}
return;
} /* if tab */
- else {
+
+check_WrapSource:
+ if ( (text->source || dont_wrap_pre) && text == HTMainText) {
/*
* If we're displaying document source, wrap long lines to keep all of
* the source visible.
*/
- int target = (int)(line->offset + line->size);
- if ((target >= (LYcols-1) - style->rightIndent) &&
- HTisDocumentSource()) {
+ int target = (int)(line->offset + line->size) - ctrl_chars_on_this_line;
+ int target_cu = target + utfxtra_on_this_line;
+ if (target >= (WRAP_COLS(text)-1) - style->rightIndent -
+ (((HTCJK != NOCJK) && text->kanji_buf) ? 1 : 0) ||
+ (text->T.output_utf8 &&
+ target_cu + UTF_XLEN(ch) >= (LYcols_cu-1))
+ ) {
+ int saved_kanji_buf;
+ int saved_state;
+
new_line(text);
line = text->last_line;
+
+ saved_kanji_buf = text->kanji_buf;
+ saved_state = text->state;
+ text->kanji_buf = '\0';
+ text->state = S_text;
HText_appendCharacter (text, LY_SOFT_NEWLINE);
+ text->kanji_buf = saved_kanji_buf;
+ text->state = saved_state;
}
}
@@ -2900,10 +4014,11 @@ PUBLIC void HText_appendCharacter ARGS2(
/*
* Check if we should ignore characters at the wrap point.
*/
-check_IgnoreExcess:
if (text->IgnoreExcess &&
- ((indent + (int)line->offset + (int)line->size) +
- (int)style->rightIndent - ctrl_chars_on_this_line) >= (LYcols-1))
+ (((indent + (int)line->offset + (int)line->size) +
+ (int)style->rightIndent - ctrl_chars_on_this_line) >= (WRAP_COLS(text)-1) ||
+ ((indent + (int)line->offset + (int)line->size) +
+ utfxtra_on_this_line - ctrl_chars_on_this_line) >= (LYcols_cu-1)))
return;
/*
@@ -2911,12 +4026,25 @@ check_IgnoreExcess:
*/
if (((indent + (int)line->offset + (int)line->size) +
(int)style->rightIndent - ctrl_chars_on_this_line +
+ (((HTCJK != NOCJK) && text->kanji_buf) ? 1 : 0) +
((line->size > 0) &&
(int)(line->data[line->size-1] ==
LY_SOFT_HYPHEN ?
- 1 : 0))) >= (LYcols - 1)) {
+ 1 : 0))) >= (WRAP_COLS(text) - 1) ||
+ (text->T.output_utf8 &&
+ (((indent + (int)line->offset + (int)line->size) +
+ utfxtra_on_this_line - ctrl_chars_on_this_line +
+ UTF_XLEN(ch) +
+ ((line->size > 0) &&
+ (int)(line->data[line->size-1] ==
+ LY_SOFT_HYPHEN ?
+ 1 : 0))) >= (LYcols_cu - 1)))) {
if (style->wordWrap && HTOutputFormat != WWW_SOURCE) {
+#ifdef EXP_JUSTIFY_ELTS
+ if (REALLY_CAN_JUSTIFY(text))
+ this_line_was_split = TRUE;
+#endif
split_line(text, text->permissible_split);
if (ch == ' ') return; /* Ignore space causing split */
@@ -2928,18 +4056,27 @@ check_IgnoreExcess:
* If we don't wrap here we might get a segmentation fault.
* but let's see what happens
*/
- if ((int)line->size >= (int)(MAX_LINE-1))
+ if ((int)line->size >= (int)(MAX_LINE-1)) {
new_line(text); /* try not to linewrap */
+ }
} else {
/*
* For normal stuff like pre let's go ahead and
* wrap so the user can see all of the text.
*/
- new_line(text);
+
+ if ( (dump_output_immediately|| (crawl && traversal) )
+ && dont_wrap_pre) {
+ if ((int)line->size >= (int)(MAX_LINE-1))
+ new_line(text);
+ } else {
+ new_line(text);
+ }
+
}
} else if ((int)line->size >= (int)(MAX_LINE-1)) {
/*
- * Never overrun memory if LYcols is set to a large value - KW
+ * Never overrun memory if DISPLAY_COLS is set to a large value - KW
*/
new_line(text);
}
@@ -2947,57 +4084,131 @@ check_IgnoreExcess:
/*
* Insert normal characters.
*/
- if (ch == HT_NON_BREAK_SPACE) {
+ if (ch == HT_NON_BREAK_SPACE
+#ifdef EXP_JUSTIFY_ELTS
+ && !REALLY_CAN_JUSTIFY(text)
+#endif
+ )
ch = ' ';
- }
+#ifdef EXP_JUSTIFY_ELTS
+ else
+ have_raw_nbsps = TRUE;
+#endif
+
+ /* we leave raw HT_NON_BREAK_SPACE otherwise (we'll substitute it later) */
if (ch & 0x80)
text->have_8bit_chars = YES;
+ /*
+ * Kanji charactor handling.
+ */
{
HTFont font = style->font;
unsigned char hi, lo, tmp[2];
line = text->last_line; /* May have changed */
+
if (HTCJK != NOCJK && text->kanji_buf) {
- hi = (unsigned char)text->kanji_buf, lo = (unsigned char)ch;
- if (HTCJK == JAPANESE && text->kcode == NOKANJI) {
- if (IS_SJIS(hi, lo, text->in_sjis) && IS_EUC(hi, lo)) {
- text->kcode = NOKANJI;
- } else if (IS_SJIS(hi, lo, text->in_sjis)) {
- text->kcode = SJIS;
- } else if (IS_EUC(hi, lo)) {
- text->kcode = EUC;
+ hi = UCH(text->kanji_buf);
+ lo = UCH(ch);
+
+ if (HTCJK == JAPANESE) {
+ if (text->kcode != JIS) {
+ if (IS_SJIS_2BYTE(hi, lo)) {
+ if (IS_EUC(hi, lo)) {
+#ifdef KANJI_CODE_OVERRIDE
+ if (last_kcode != NOKANJI)
+ text->kcode = last_kcode;
+ else
+#endif
+ if (text->specified_kcode != NOKANJI)
+ text->kcode = text->specified_kcode;
+#ifdef USE_TH_JP_AUTO_DETECT
+ else if (text->detected_kcode == DET_EUC)
+ text->kcode = EUC;
+ else if (text->detected_kcode == DET_SJIS)
+ text->kcode = SJIS;
+#endif
+ else if (IS_EUC_X0201KANA(hi, lo) && (text->kcode != EUC))
+ text->kcode = SJIS;
+ }
+ else
+ text->kcode = SJIS;
+ }
+ else if (IS_EUC(hi, lo))
+ text->kcode = EUC;
+ else
+ text->kcode = NOKANJI;
+ }
+
+ switch (kanji_code) {
+ case EUC:
+ if (text->kcode == SJIS) {
+ SJIS_TO_EUC1(hi, lo, tmp);
+ line->data[line->size++] = tmp[0];
+ line->data[line->size++] = tmp[1];
+ } else if (IS_EUC(hi, lo)) {
+#ifdef CONV_JISX0201KANA_JISX0208KANA
+ JISx0201TO0208_EUC(hi, lo, &hi, &lo);
+#endif
+ line->data[line->size++] = hi;
+ line->data[line->size++] = lo;
+ } else {
+ CTRACE((tfp, "This character (%X:%X) doesn't seem Japanese\n", hi, lo));
+ line->data[line->size++] = '=';
+ line->data[line->size++] = '=';
+ }
+ break;
+
+ case SJIS:
+ if ((text->kcode == EUC) || (text->kcode == JIS))
+ {
+#ifndef CONV_JISX0201KANA_JISX0208KANA
+ if (IS_EUC_X0201KANA(hi, lo))
+ line->data[line->size++] = lo;
+ else
+#endif
+ {
+ EUC_TO_SJIS1(hi, lo, tmp);
+ line->data[line->size++] = tmp[0];
+ line->data[line->size++] = tmp[1];
+ }
+ } else if (IS_SJIS_2BYTE(hi, lo)) {
+ line->data[line->size++] = hi;
+ line->data[line->size++] = lo;
+ } else {
+ line->data[line->size++] = '=';
+ line->data[line->size++] = '=';
+ CTRACE((tfp, "This character (%X:%X) doesn't seem Japanese\n", hi, lo));
+ }
+ break;
+
+ default:
+ break;
}
- }
- if (HTCJK == JAPANESE &&
- (kanji_code == EUC) && (text->kcode == SJIS)) {
- SJIS_TO_EUC1(hi, lo, tmp);
- line->data[line->size++] = tmp[0];
- line->data[line->size++] = tmp[1];
- } else if (HTCJK == JAPANESE &&
- (kanji_code == EUC) && (text->kcode == EUC)) {
- JISx0201TO0208_EUC(hi, lo, &hi, &lo);
- line->data[line->size++] = hi;
- line->data[line->size++] = lo;
- } else if (HTCJK == JAPANESE &&
- (kanji_code == SJIS) && (text->kcode == EUC)) {
- EUC_TO_SJIS1(hi, lo, tmp);
- line->data[line->size++] = tmp[0];
- line->data[line->size++] = tmp[1];
} else {
line->data[line->size++] = hi;
line->data[line->size++] = lo;
}
text->kanji_buf = 0;
- } else if (HTCJK != NOCJK) {
- line->data[line->size++] = (kanji_code != NOKANJI) ?
+ }
+#ifndef CONV_JISX0201KANA_JISX0208KANA
+ else if ((HTCJK == JAPANESE) && IS_SJIS_X0201KANA(UCH((ch))) &&
+ (kanji_code == EUC)) {
+ line->data[line->size++] = UCH(0x8e);
+ line->data[line->size++] = ch;
+ }
+#endif
+ else if (HTCJK != NOCJK) {
+ line->data[line->size++] = (char) (
+ (kanji_code != NOKANJI) ?
ch :
(font & HT_CAPITALS) ?
- TOUPPER(ch) : ch;
+ TOUPPER(ch) : ch);
} else {
line->data[line->size++] = /* Put character into line */
- font & HT_CAPITALS ? TOUPPER(ch) : ch;
+ (char) (font & HT_CAPITALS ? TOUPPER(ch) : ch);
}
line->data[line->size] = '\0';
if (font & HT_DOUBLE) /* Do again if doubled */
@@ -3015,6 +4226,7 @@ check_IgnoreExcess:
ctrl_chars_on_this_line++;
}
}
+ return;
}
#ifdef USE_COLOR_STYLE
@@ -3030,8 +4242,26 @@ PUBLIC void _internal_HTC ARGS3(HText *,text, int,style, int,dir)
line = text->last_line;
- if (line->numstyles < MAX_STYLES_ON_LINE) {
+ if (line->numstyles > 0 && dir == 0 &&
+ line->styles[line->numstyles-1].direction &&
+ line->styles[line->numstyles-1].style == style &&
+ (int) line->styles[line->numstyles-1].horizpos
+ == (int)line->size - ctrl_chars_on_this_line) {
+ /*
+ * If this is an OFF change directly preceded by an
+ * ON for the same style, just remove the previous one. - kw
+ */
+ line->numstyles--;
+ } else if (line->numstyles < MAX_STYLES_ON_LINE) {
line->styles[line->numstyles].horizpos = line->size;
+ /*
+ * Special chars for bold and underlining usually don't
+ * occur with color style, but soft hyphen can.
+ * And in UTF-8 display mode all non-initial bytes are
+ * counted as ctrl_chars. - kw
+ */
+ if ((int) line->styles[line->numstyles].horizpos >= ctrl_chars_on_this_line)
+ line->styles[line->numstyles].horizpos -= ctrl_chars_on_this_line;
line->styles[line->numstyles].style = style;
line->styles[line->numstyles].direction = dir;
line->numstyles++;
@@ -3080,6 +4310,462 @@ PUBLIC void HText_setIgnoreExcess ARGS2(
text->IgnoreExcess = ignore;
}
+/* Simple table handling - private
+** -------------------------------
+*/
+
+/*
+ * HText_insertBlanksInStblLines fixes up table lines when simple table
+ * processing is closed, by calling insert_blanks_in_line for lines
+ * that need fixup. Also recalculates alignment for those lines,
+ * does additional updating of anchor positions, and makes sure the
+ * display of the lines on screen will be updated after partial display
+ * upon return to mainloop. - kw
+ */
+PRIVATE int HText_insertBlanksInStblLines ARGS2(
+ HText *, me,
+ int, ncols)
+{
+ HTLine *line;
+ HTLine *mod_line, *first_line = NULL;
+ int * oldpos;
+ int * newpos;
+ int ninserts, lineno;
+ int first_lineno, last_lineno, first_lineno_pass2;
+#ifdef EXP_NESTED_TABLES
+ int last_nonempty = -1;
+#endif
+ int added_chars_before = 0;
+ int lines_changed = 0;
+ int max_width = 0, indent, spare, table_offset;
+ HTStyle *style;
+ short alignment;
+ int i = 0;
+
+ lineno = first_lineno = Stbl_getStartLine(me->stbl);
+ if (lineno < 0 || lineno > me->Lines)
+ return -1;
+ /*
+ * oldpos, newpos: allocate space for two int arrays.
+ */
+ oldpos = typecallocn(int, 2 * ncols);
+ if (!oldpos)
+ return -1;
+ else
+ newpos = oldpos + ncols;
+ for (line = FirstHTLine(me); i < lineno; line = line->next, i++) {
+ if (!line) {
+ free(oldpos);
+ return -1;
+ }
+ }
+ first_lineno_pass2 = last_lineno = me->Lines;
+ for (; line && lineno <= last_lineno; line = line->next, lineno++) {
+ ninserts = Stbl_getFixupPositions(me->stbl, lineno, oldpos, newpos);
+ if (ninserts < 0)
+ continue;
+ if (!first_line) {
+ first_line = line;
+ first_lineno_pass2 = lineno;
+ if (TRACE) {
+ int ip;
+ CTRACE((tfp, "line %d first to adjust -- newpos:", lineno));
+ for (ip = 0; ip < ncols; ip++)
+ CTRACE((tfp, " %d", newpos[ip]));
+ CTRACE((tfp, "\n"));
+ }
+ }
+ if (line == me->last_line) {
+ if (line->size == 0 || !HText_TrueLineSize(line, me, FALSE))
+ continue;
+ /*
+ * Last ditch effort to end the table with a line break,
+ * if HTML_end_element didn't do it. - kw
+ */
+ if (first_line == line) /* obscure: all table on last line... */
+ first_line = NULL;
+ new_line(me);
+ line = me->last_line->prev;
+ if (first_line == NULL)
+ first_line = line;
+ }
+ if (ninserts == 0) {
+ /* Do it also for no positions (but not error) */
+ int width = HText_TrueLineSize(line, me, FALSE);
+ if (width > max_width)
+ max_width = width;
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables) {
+ if (width && last_nonempty < lineno)
+ last_nonempty = lineno;
+ }
+#endif
+ CTRACE((tfp, "line %d true/max width:%d/%d oldpos: NONE\n",
+ lineno, width, max_width));
+ continue;
+ }
+ mod_line = insert_blanks_in_line(line, lineno, me,
+ me->last_anchor_before_stbl,
+ ninserts, oldpos, newpos);
+ if (mod_line) {
+ if (line == me->last_line) {
+ me->last_line = mod_line;
+ } else {
+ added_chars_before += (mod_line->size - line->size);
+ }
+ line->prev->next = mod_line;
+ line->next->prev = mod_line;
+ lines_changed++;
+ if (line == first_line)
+ first_line = mod_line;
+ free(line);
+ line = mod_line;
+#ifdef DISP_PARTIAL
+ /*
+ * Make sure modified lines get fully re-displayed after
+ * loading with partial display is done.
+ */
+ if (me->first_lineno_last_disp_partial >= 0) {
+ if (me->first_lineno_last_disp_partial >= lineno) {
+ me->first_lineno_last_disp_partial =
+ me->last_lineno_last_disp_partial = -1;
+ } else if (me->last_lineno_last_disp_partial >= lineno) {
+ me->last_lineno_last_disp_partial = lineno - 1;
+ }
+ }
+#endif
+ }
+ {
+ int width = HText_TrueLineSize(line, me, FALSE);
+ if (width > max_width)
+ max_width = width;
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables) {
+ if (width && last_nonempty < lineno)
+ last_nonempty = lineno;
+ }
+#endif
+ if (TRACE) {
+ int ip;
+ CTRACE((tfp, "line %d true/max width:%d/%d oldpos:",
+ lineno, width, max_width));
+ for (ip = 0; ip < ninserts; ip++)
+ CTRACE((tfp, " %d", oldpos[ip]));
+ CTRACE((tfp, "\n"));
+ }
+ }
+ }
+ /*
+ * Line offsets have been set based on the paragraph style, and
+ * have already been updated for centering or right-alignment
+ * for each line in split_line. Here we want to undo all that, and
+ * align the table as a whole (i.e. all lines for which
+ * Stbl_getFixupPositions returned >= 0). All those lines have to
+ * get the same offset, for the simple table formatting mechanism
+ * to make sense, and that may not actually be the case at this point.
+ *
+ * What indentation and alignment do we want for the table as
+ * a whole? Let's take most style properties from me->style.
+ * With some luck, it is the appropriate style for the element
+ * enclosing the TABLE. But let's take alignment from the attribute
+ * of the TABLE itself instead, if it was specified.
+ *
+ * Note that this logic assumes that all lines have been finished
+ * by split_line. The order of calls made by HTML_end_element for
+ * HTML_TABLE should take care of this.
+ */
+ style = me->style;
+ alignment = Stbl_getAlignment(me->stbl);
+ if (alignment == HT_ALIGN_NONE)
+ alignment = style->alignment;
+ indent = style->leftIndent;
+ /* Calculate spare character positions */
+ spare = (WRAP_COLS(me)-1) -
+ (int)style->rightIndent - indent - max_width;
+ if (spare < 0 && (int)style->rightIndent + spare >= 0) {
+ /*
+ * Not enough room! But we can fit if we ignore right indentation,
+ * so let's do that.
+ */
+ spare = 0;
+ } else if (spare < 0) {
+ spare += style->rightIndent; /* ignore right indent, but need more */
+ }
+ if (spare < 0 && indent + spare >= 0) {
+ /*
+ * Still not enough room. But we can move to the left.
+ */
+ indent += spare;
+ spare = 0;
+ } else if (spare < 0) {
+ /*
+ * Still not enough. Something went wrong. Try the best we
+ * can do.
+ */
+ CTRACE((tfp, "BUG: insertBlanks: resulting table too wide by %d positions!\n",
+ -spare));
+ indent = spare = 0;
+ }
+ /*
+ * Align left, right or center.
+ */
+ switch (alignment) {
+ case HT_CENTER :
+ table_offset = indent + spare/2;
+ break;
+ case HT_RIGHT :
+ table_offset = indent + spare;
+ break;
+ case HT_LEFT :
+ case HT_JUSTIFY :
+ default:
+ table_offset = indent;
+ break;
+ } /* switch */
+
+ CTRACE((tfp, "changing offsets"));
+ for (line = first_line, lineno = first_lineno_pass2;
+ line && lineno <= last_lineno && line != me->last_line;
+ line = line->next, lineno++) {
+ ninserts = Stbl_getFixupPositions(me->stbl, lineno, oldpos, newpos);
+ if (ninserts >= 0 && (int) line->offset != table_offset) {
+#ifdef DISP_PARTIAL
+ /* As above make sure modified lines get fully re-displayed */
+ if (me->first_lineno_last_disp_partial >= 0) {
+ if (me->first_lineno_last_disp_partial >= lineno) {
+ me->first_lineno_last_disp_partial =
+ me->last_lineno_last_disp_partial = -1;
+ } else if (me->last_lineno_last_disp_partial >= lineno) {
+ me->last_lineno_last_disp_partial = lineno - 1;
+ }
+ }
+#endif
+ CTRACE((tfp, " %d:%d", lineno, table_offset - line->offset));
+ line->offset = table_offset;
+ }
+ }
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables) {
+ if (max_width)
+ Stbl_update_enclosing(me->stbl, max_width, last_nonempty);
+ }
+#endif
+ CTRACE((tfp, " %d:done\n", lineno));
+ free(oldpos);
+ return lines_changed;
+}
+
+/* Simple table handling - public functions
+** ----------------------------------------
+*/
+
+/* Cancel simple table handling
+*/
+PUBLIC void HText_cancelStbl ARGS1(
+ HText *, me)
+{
+ if (!me || !me->stbl) {
+ CTRACE((tfp, "cancelStbl: ignored.\n"));
+ return;
+ }
+ CTRACE((tfp, "cancelStbl: ok, will do.\n"));
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables) {
+ STable_info *stbl = me->stbl;
+ while (stbl) {
+ STable_info *enclosing = Stbl_get_enclosing(stbl);
+ Stbl_free(stbl);
+ stbl = enclosing;
+ }
+ } else
+#endif
+ Stbl_free(me->stbl);
+ me->stbl = NULL;
+}
+
+/* Start simple table handling
+*/
+PUBLIC void HText_startStblTABLE ARGS2(
+ HText *, me,
+ short, alignment)
+{
+#ifdef EXP_NESTED_TABLES
+ STable_info *current = me->stbl;
+#endif
+
+ if (!me)
+ return;
+
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables) {
+ if (current)
+ new_line(me);
+ } else
+#endif
+ {
+ if (me->stbl)
+ HText_cancelStbl(me); /* auto cancel previously open table */
+ }
+
+ me->stbl = Stbl_startTABLE(alignment);
+ if (me->stbl) {
+ CTRACE((tfp, "startStblTABLE: started.\n"));
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables) {
+ Stbl_set_enclosing(me->stbl, current, me->last_anchor_before_stbl);
+ }
+#endif
+ me->last_anchor_before_stbl = me->last_anchor;
+ } else {
+ CTRACE((tfp, "startStblTABLE: failed.\n"));
+ }
+}
+
+/* Finish simple table handling
+ * Return TRUE if the table is nested inside another table.
+ */
+PUBLIC int HText_endStblTABLE ARGS1(
+ HText *, me)
+{
+ int ncols, lines_changed = 0;
+ STable_info *enclosing = NULL;
+
+ if (!me || !me->stbl) {
+ CTRACE((tfp, "endStblTABLE: ignored.\n"));
+ return FALSE;
+ }
+ CTRACE((tfp, "endStblTABLE: ok, will try.\n"));
+ ncols = Stbl_finishTABLE(me->stbl);
+ CTRACE((tfp, "endStblTABLE: ncols = %d.\n", ncols));
+ if (ncols > 0) {
+ lines_changed = HText_insertBlanksInStblLines(me, ncols);
+ CTRACE((tfp, "endStblTABLE: changed %d lines, done.\n", lines_changed));
+#ifdef DISP_PARTIAL
+ /* allow HTDisplayPartial() to redisplay the changed lines.
+ * There is no harm if we got several stbl in the document, hope so.
+ */
+ NumOfLines_partial -= lines_changed; /* fake */
+#endif /* DISP_PARTIAL */
+ }
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables) {
+ enclosing = Stbl_get_enclosing(me->stbl);
+ me->last_anchor_before_stbl = Stbl_get_last_anchor_before(me->stbl);
+ } else
+#endif
+ Stbl_free(me->stbl);
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables)
+ me->stbl = enclosing;
+ else
+#endif
+ me->stbl = NULL;
+ return enclosing != 0;
+}
+
+/* Start simple table row
+*/
+PUBLIC void HText_startStblTR ARGS2(
+ HText *, me,
+ short, alignment)
+{
+ if (!me || !me->stbl)
+ return;
+ if (Stbl_addRowToTable(me->stbl, alignment, me->Lines) < 0)
+ HText_cancelStbl(me); /* give up */
+}
+
+/* Finish simple table row
+*/
+PUBLIC void HText_endStblTR ARGS1(
+ HText *, me)
+{
+ if (!me || !me->stbl)
+ return;
+ /* should this do something?? */
+}
+
+/* Start simple table cell
+*/
+PUBLIC void HText_startStblTD ARGS5(
+ HText *, me,
+ int, colspan,
+ int, rowspan,
+ short, alignment,
+ BOOL, isheader)
+{
+ if (!me || !me->stbl)
+ return;
+ if (colspan < 0)
+ colspan = 1;
+ if (colspan > TRST_MAXCOLSPAN) {
+ CTRACE((tfp, "*** COLSPAN=%d is too large, ignored!\n", colspan));
+ colspan = 1;
+ }
+ if (rowspan > TRST_MAXROWSPAN) {
+ CTRACE((tfp, "*** ROWSPAN=%d is too large, ignored!\n", rowspan));
+ rowspan = 1;
+ }
+ if (Stbl_addCellToTable(me->stbl, colspan, rowspan, alignment, isheader,
+ me->Lines, HText_LastLineOffset(me), HText_LastLineSize(me,FALSE)) < 0)
+ HText_cancelStbl(me); /* give up */
+}
+
+/* Finish simple table cell
+*/
+PUBLIC void HText_endStblTD ARGS1(
+ HText *, me)
+{
+ if (!me || !me->stbl)
+ return;
+ if (Stbl_finishCellInTable(me->stbl, TRST_ENDCELL_ENDTD,
+ me->Lines, HText_LastLineOffset(me), HText_LastLineSize(me,FALSE)) < 0)
+ HText_cancelStbl(me); /* give up */
+}
+
+/* Remember COL info / Start a COLGROUP and remember info
+*/
+PUBLIC void HText_startStblCOL ARGS4(
+ HText *, me,
+ int, span,
+ short, alignment,
+ BOOL, isgroup)
+{
+ if (!me || !me->stbl)
+ return;
+ if (span <= 0)
+ span = 1;
+ if (span > TRST_MAXCOLSPAN) {
+ CTRACE((tfp, "*** SPAN=%d is too large, ignored!\n", span));
+ span = 1;
+ }
+ if (Stbl_addColInfo(me->stbl, span, alignment, isgroup) < 0)
+ HText_cancelStbl(me); /* give up */
+}
+
+/* Finish a COLGROUP
+*/
+PUBLIC void HText_endStblCOLGROUP ARGS1(
+ HText *, me)
+{
+ if (!me || !me->stbl)
+ return;
+ if (Stbl_finishColGroup(me->stbl) < 0)
+ HText_cancelStbl(me); /* give up */
+}
+
+/* Start a THEAD / TFOOT / TBODY - remember its alignment info
+*/
+PUBLIC void HText_startStblRowGroup ARGS2(
+ HText *, me,
+ short, alignment)
+{
+ if (!me || !me->stbl)
+ return;
+ if (Stbl_addRowGroup(me->stbl, alignment) < 0)
+ HText_cancelStbl(me); /* give up */
+}
+
/* Anchor handling
** ---------------
*/
@@ -3093,13 +4779,12 @@ PUBLIC int HText_beginAnchor ARGS3(
{
char marker[32];
- TextAnchor * a = (TextAnchor *) calloc(1, sizeof(*a));
+ TextAnchor * a = typecalloc(TextAnchor);
if (a == NULL)
outofmem(__FILE__, "HText_beginAnchor");
a->hightext = NULL;
a->hightext2 = NULL;
- a->start = text->chars + text->last_line->size;
a->inUnderline = underline;
a->line_num = text->Lines;
@@ -3121,7 +4806,7 @@ PUBLIC int HText_beginAnchor ARGS3(
a->link_type = INTERNAL_LINK_ANCHOR;
} else
#endif
- if (HTAnchor_followMainLink((HTAnchor*)anc)) {
+ if (HTAnchor_followMainLink((HTAnchor*)anc)) {
a->number = ++(text->last_anchor_number);
} else {
a->number = 0;
@@ -3131,15 +4816,17 @@ PUBLIC int HText_beginAnchor ARGS3(
* If we are doing link_numbering add the link number.
*/
if ((a->number > 0) &&
+#ifdef USE_PRETTYSRC
+ (text->source ? !psrcview_no_anchor_numbering : 1 ) &&
+#endif
(keypad_mode == LINKS_ARE_NUMBERED ||
- keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED)) {
+ keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED)) {
char saved_lastchar = text->LastChar;
int saved_linenum = text->Lines;
sprintf(marker,"[%d]", a->number);
HText_appendText(text, marker);
if (saved_linenum && text->Lines && saved_lastchar != ' ')
text->LastChar = ']'; /* if marker not after space caused split */
- a->start = text->chars + text->last_line->size;
a->line_num = text->Lines;
a->line_pos = text->last_line->size;
}
@@ -3147,10 +4834,11 @@ PUBLIC int HText_beginAnchor ARGS3(
return(a->number);
}
-
-PUBLIC void HText_endAnchor ARGS2(
+/* If !really, report whether the anchor is empty. */
+PRIVATE BOOL HText_endAnchor0 ARGS3(
HText *, text,
- int, number)
+ int, number,
+ int, really)
{
TextAnchor *a;
@@ -3182,43 +4870,54 @@ PUBLIC void HText_endAnchor ARGS2(
}
}
- CTRACE(tfp, "HText_endAnchor: number:%d link_type:%d\n",
- a->number, a->link_type);
+ CTRACE((tfp, "GridText:HText_endAnchor0: number:%d link_type:%d\n",
+ a->number, a->link_type));
if (a->link_type == INPUT_ANCHOR) {
/*
* Shouldn't happen, but put test here anyway to be safe. - LE
*/
- CTRACE(tfp,
- "HText_endAnchor: internal error: last anchor was input field!\n");
- return;
+ CTRACE((tfp,
+ "BUG: HText_endAnchor0: internal error: last anchor was input field!\n"));
+ return FALSE;
}
if (a->number) {
/*
* If it goes somewhere...
*/
int i, j, k, l;
- BOOL remove_numbers_on_empty =
+ BOOL remove_numbers_on_empty = (BOOL) (
((keypad_mode == LINKS_ARE_NUMBERED ||
- keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED) &&
+ keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED) &&
(text->hiddenlinkflag != HIDDENLINKS_MERGE ||
(LYNoISMAPifUSEMAP &&
!(text->node_anchor && text->node_anchor->bookmark) &&
HTAnchor_isISMAPScript(
- HTAnchor_followMainLink((HTAnchor *)a->anchor)))));
+ HTAnchor_followMainLink((HTAnchor *)a->anchor))))));
HTLine *last = text->last_line;
HTLine *prev = text->last_line->prev;
HTLine *start = last;
int CurBlankExtent = 0;
int BlankExtent = 0;
+ int extent_adjust = 0;
+
+ /* Find the length taken by the anchor */
+ l = text->Lines; /* lineno of last */
+ while (l > a->line_num) {
+ extent_adjust += start->size;
+ start = start->prev;
+ l--;
+ }
+ /* Now start is the start line of the anchor */
+ extent_adjust += start->size - a->line_pos;
+ start = last; /* Used later */
/*
* Check if the anchor content has only
* white and special characters, starting
* with the content on the last line. - FM
*/
- a->extent += (text->chars + last->size) - a->start -
- (text->Lines - a->line_num);
+ a->extent += extent_adjust;
if (a->extent > (int)last->size) {
/*
* The anchor extends over more than one line,
@@ -3235,7 +4934,7 @@ PUBLIC void HText_endAnchor ARGS2(
k = j = (last->size - i);
while (j < (int)last->size) {
if (!IsSpecialAttrChar(last->data[j]) &&
- !isspace((unsigned char)last->data[j]) &&
+ !isspace(UCH(last->data[j])) &&
last->data[j] != HT_NON_BREAK_SPACE &&
last->data[j] != HT_EN_SPACE)
break;
@@ -3292,7 +4991,7 @@ PUBLIC void HText_endAnchor ARGS2(
}
while (j < (int)prev->size) {
if (!IsSpecialAttrChar(prev->data[j]) &&
- !isspace((unsigned char)prev->data[j]) &&
+ !isspace(UCH(prev->data[j])) &&
prev->data[j] != HT_NON_BREAK_SPACE &&
prev->data[j] != HT_EN_SPACE)
break;
@@ -3326,6 +5025,10 @@ PUBLIC void HText_endAnchor ARGS2(
}
}
}
+ if (!really) { /* Just report whether it is empty */
+ a->extent -= extent_adjust;
+ return (BOOL)(i == 0);
+ }
if (i == 0) {
/*
* It's an invisible anchor probably from an ALT=""
@@ -3334,10 +5037,10 @@ PUBLIC void HText_endAnchor ARGS2(
*/
a->show_anchor = NO;
- CTRACE(tfp,
- "HText_endAnchor: hidden (line,start,pos,ext,BlankExtent):(%d,%d,%d,%d,%d)",
- a->line_num,a->start,a->line_pos,a->extent,
- BlankExtent);
+ CTRACE((tfp,
+ "HText_endAnchor0: hidden (line,pos,ext,BlankExtent):(%d,%d,%d,%d)",
+ a->line_num, a->line_pos, a->extent,
+ BlankExtent));
/*
* If links are numbered, then try to get rid of the
@@ -3388,7 +5091,7 @@ PUBLIC void HText_endAnchor ARGS2(
if (start->data[j] == ']') {
j--;
NumSize++;
- while (j >= 0 && isdigit((unsigned char)start->data[j])) {
+ while (j >= 0 && isdigit(UCH(start->data[j]))) {
j--;
NumSize++;
}
@@ -3411,10 +5114,7 @@ PUBLIC void HText_endAnchor ARGS2(
k = j + NumSize;
while (k < (int)start->size)
start->data[j++] = start->data[k++];
- if (start != last)
- text->chars -= NumSize;
for (anc = a; anc; anc = anc->next) {
- anc->start -= NumSize;
if (anc->line_num == a->line_num &&
anc->line_pos >= NumSize) {
anc->line_pos -= NumSize;
@@ -3431,7 +5131,7 @@ PUBLIC void HText_endAnchor ARGS2(
j--;
i = (j + 1);
while (j >= 0 &&
- isdigit((unsigned char)prev->data[j])) {
+ isdigit(UCH(prev->data[j]))) {
j--;
NumSize++;
}
@@ -3449,10 +5149,6 @@ PUBLIC void HText_endAnchor ARGS2(
l = (i - j);
while (i < (int)prev->size)
prev->data[j++] = prev->data[i++];
- text->chars -= l;
- for (anc = a; anc; anc = anc->next) {
- anc->start -= l;
- }
prev->size = j;
prev->data[j] = '\0';
while (j < i)
@@ -3467,10 +5163,7 @@ PUBLIC void HText_endAnchor ARGS2(
i = k;
while (k < (int)start->size)
start->data[j++] = start->data[k++];
- if (start != last)
- text->chars -= i;
for (anc = a; anc; anc = anc->next) {
- anc->start -= i;
if (anc->line_num == a->line_num &&
anc->line_pos >= i) {
anc->line_pos -= i;
@@ -3503,12 +5196,12 @@ PUBLIC void HText_endAnchor ARGS2(
i = (j + 1);
if ((j >= 2) &&
(prev->data[j] == ']' &&
- isdigit((unsigned char)prev->data[j - 1]))) {
+ isdigit(UCH(prev->data[j - 1])))) {
j--;
NumSize++;
k = (j + 1);
while (j >= 0 &&
- isdigit((unsigned char)prev->data[j])) {
+ isdigit(UCH(prev->data[j]))) {
j--;
NumSize++;
}
@@ -3526,10 +5219,6 @@ PUBLIC void HText_endAnchor ARGS2(
k = j + NumSize;
while (k < (int)prev->size)
prev->data[j++] = prev->data[k++];
- text->chars -= NumSize;
- for (anc = a; anc; anc = anc->next) {
- anc->start -= NumSize;
- }
prev->size = j;
prev->data[j++] = '\0';
while (j < k)
@@ -3564,16 +5253,16 @@ PUBLIC void HText_endAnchor ARGS2(
*/
a->show_anchor = YES;
if (BlankExtent) {
- CTRACE(tfp,
- "HText_endAnchor: blanks (line,start,pos,ext,BlankExtent):(%d,%d,%d,%d,%d)",
- a->line_num,a->start,a->line_pos,a->extent,
- BlankExtent);
+ CTRACE((tfp,
+ "HText_endAnchor0: blanks (line,pos,ext,BlankExtent):(%d,%d,%d,%d)",
+ a->line_num,a->line_pos,a->extent,
+ BlankExtent));
}
}
if (a->show_anchor == NO) {
/*
* The anchor's content is restricted to white
- * and special characters, so set it's number
+ * and special characters, so set its number
* and extent to zero, decrement the visible
* anchor number counter, and add this anchor
* to the hidden links list. - FM
@@ -3588,20 +5277,22 @@ PUBLIC void HText_endAnchor ARGS2(
/*
* The anchor's content is not restricted to white
* and special characters, so we'll display the
- * content, but shorten it's extent by any trailing
+ * content, but shorten its extent by any trailing
* blank lines we've detected. - FM
*/
a->extent -= ((BlankExtent < a->extent) ?
BlankExtent : 0);
}
if (BlankExtent || a->extent <= 0 || a->number <= 0) {
- CTRACE(tfp,
- "->[%d](%d,%d,%d,%d,%d)\n",
+ CTRACE((tfp,
+ "->[%d](%d,%d,%d,%d)\n",
a->number,
- a->line_num,a->start,a->line_pos,a->extent,
- BlankExtent);
+ a->line_num,a->line_pos,a->extent,
+ BlankExtent));
}
} else {
+ if (!really) /* Just report whether it is empty */
+ return FALSE;
/*
* It's a named anchor without an HREF, so it
* should be registered but not shown as a
@@ -3610,8 +5301,29 @@ PUBLIC void HText_endAnchor ARGS2(
a->show_anchor = NO;
a->extent = 0;
}
+ return FALSE;
}
+PUBLIC void HText_endAnchor ARGS2(
+ HText *, text,
+ int, number)
+{
+ HText_endAnchor0(text, number, 1);
+}
+
+/*
+ This returns whether the given anchor has blank content. Shamelessly copied
+ from HText_endAnchor. The values returned are meaningful only for "normal"
+ links - like ones produced by <a href=".">foo</a>, no inputs, etc. - VH
+*/
+#ifdef MARK_HIDDEN_LINKS
+PUBLIC BOOL HText_isAnchorBlank ARGS2(
+ HText *, text,
+ int, number)
+{
+ return HText_endAnchor0(text, number, 0);
+}
+#endif /* MARK_HIDDEN_LINKS */
PUBLIC void HText_appendText ARGS2(
HText *, text,
@@ -3631,21 +5343,24 @@ PUBLIC void HText_appendText ARGS2(
}
-PRIVATE void remove_special_attr_chars ARGS1(
+PRIVATE int remove_special_attr_chars ARGS1(
char *, buf)
{
register char *cp;
+ register int soft_newline_count = 0;
for (cp = buf; *cp != '\0' ; cp++) {
/*
* Don't print underline chars.
*/
+ soft_newline_count += (*cp == LY_SOFT_NEWLINE);
if (!IsSpecialAttrChar(*cp)) {
*buf = *cp,
buf++;
}
}
*buf = '\0';
+ return soft_newline_count;
}
@@ -3663,7 +5378,7 @@ PUBLIC void HText_endAppend ARGS1(
if (!text)
return;
- CTRACE(tfp,"Gridtext: Entering HText_endAppend\n");
+ CTRACE((tfp,"Gridtext: Entering HText_endAppend\n"));
/*
* Create a blank line at the bottom.
@@ -3671,6 +5386,8 @@ PUBLIC void HText_endAppend ARGS1(
new_line(text);
if (text->halted) {
+ if (text->stbl)
+ HText_cancelStbl(text);
/*
* If output was stopped because memory was low, and we made
* it to the end of the document, reset those flags and hope
@@ -3678,12 +5395,18 @@ PUBLIC void HText_endAppend ARGS1(
*/
LYFakeZap(NO);
text->halted = 0;
+ } else if (text->stbl) {
+ /*
+ * Could happen if TABLE end tag was missing.
+ * Alternatively we could cancel in this case. - kw
+ */
+ HText_endStblTABLE(text);
}
/*
* Get the first line.
*/
- line_ptr = text->last_line->next;
+ line_ptr = FirstHTLine(text);
/*
* Remove the blank lines at the end of document.
@@ -3691,9 +5414,8 @@ PUBLIC void HText_endAppend ARGS1(
while (text->last_line->data[0] == '\0' && text->Lines > 2) {
HTLine *next_to_the_last_line = text->last_line->prev;
-
- CTRACE(tfp, "GridText: Removing bottom blank line: %s\n",
- text->last_line->data);
+ CTRACE((tfp, "GridText: Removing bottom blank line: `%s'\n",
+ text->last_line->data));
/*
* line_ptr points to the first line.
*/
@@ -3702,15 +5424,15 @@ PUBLIC void HText_endAppend ARGS1(
FREE(text->last_line);
text->last_line = next_to_the_last_line;
text->Lines--;
- CTRACE(tfp, "GridText: New bottom line: %s\n",
- text->last_line->data);
+ CTRACE((tfp, "GridText: New bottom line: `%s'\n",
+ text->last_line->data));
}
/*
* Fix up the anchor structure values and
* create the hightext strings. - FM
*/
- HText_trimHightext(text, TRUE);
+ HText_trimHightext(text, TRUE, -1);
}
@@ -3733,16 +5455,17 @@ PUBLIC void HText_endAppend ARGS1(
** if applicable) fields indicate x positions in terms of displayed
** character cells, and the extent field apparently is unimportant;
** the anchor text has been copied to the hightext (and possibly
-** hightext2) fields (which should be NULL up to this point), with
-** special attribute chars removed.
+** hightext2) fields (which should have been NULL up to that point),
+** with special attribute chars removed.
** This needs to be done so that display_page finds the anchors in the
** form it expects when it sets the links[] elements.
*/
-PUBLIC void HText_trimHightext ARGS2(
+PRIVATE void HText_trimHightext ARGS3(
HText *, text,
- BOOLEAN, final)
+ BOOLEAN, final,
+ int, stop_before)
{
- int cur_line, cur_char, cur_shift;
+ int cur_line, cur_shift;
TextAnchor *anchor_ptr;
TextAnchor *prev_a = NULL;
HTLine *line_ptr;
@@ -3751,14 +5474,20 @@ PUBLIC void HText_trimHightext ARGS2(
if (!text)
return;
- CTRACE(tfp,"Gridtext: Entering HText_trimHightext %s\n",
- final ? "(final)" : "(partial)");
+ if (final) {
+ CTRACE((tfp, "Gridtext: Entering HText_trimHightext (final)\n"));
+ } else {
+ if (stop_before < 0 || stop_before > text->Lines)
+ stop_before = text->Lines;
+ CTRACE((tfp,
+ "Gridtext: Entering HText_trimHightext (partial: 0..%d/%d)\n",
+ stop_before, text->Lines));
+ }
/*
* Get the first line.
*/
- line_ptr = text->last_line->next;
- cur_char = line_ptr->size;
+ line_ptr = FirstHTLine(text);
cur_line = 0;
/*
@@ -3768,14 +5497,13 @@ PUBLIC void HText_trimHightext ARGS2(
for (anchor_ptr = text->first_anchor;
anchor_ptr;
prev_a = anchor_ptr, anchor_ptr=anchor_ptr->next) {
+ int have_soft_newline_in_1st_line = 0;
re_parse:
/*
* Find the right line.
*/
- for (; anchor_ptr->start > cur_char;
- line_ptr = line_ptr->next,
- cur_char += line_ptr->size+1,
- cur_line++) {
+ for (; anchor_ptr->line_num > cur_line;
+ line_ptr = line_ptr->next, cur_line++) {
; /* null body */
}
@@ -3785,9 +5513,10 @@ re_parse:
* the last line, or the very end of preceding line.
* The last line is probably still not finished. - kw
*/
- if (cur_line >= text->Lines)
+ if (cur_line >= stop_before)
break;
- if (anchor_ptr->start >= text->chars - 1)
+ if ( anchor_ptr->line_num >= text->Lines - 1
+ && anchor_ptr->line_pos >= (int) text->last_line->prev->size )
break;
/*
* Also skip this anchor if it looks like HText_endAnchor
@@ -3808,21 +5537,17 @@ re_parse:
if (anchor_ptr->hightext)
continue;
- if (anchor_ptr->start == cur_char) {
+ if (anchor_ptr->line_pos > (int) line_ptr->size) {
anchor_ptr->line_pos = line_ptr->size;
- } else {
- anchor_ptr->line_pos = anchor_ptr->start -
- (cur_char - line_ptr->size);
}
if (anchor_ptr->line_pos < 0) {
- anchor_ptr->start -= anchor_ptr->line_pos;
anchor_ptr->line_pos = 0;
anchor_ptr->line_num = cur_line;
}
- CTRACE(tfp,
+ CTRACE((tfp,
"Gridtext: Anchor found on line:%d col:%d [%d] ext:%d\n",
cur_line, anchor_ptr->line_pos,
- anchor_ptr->number, anchor_ptr->extent);
+ anchor_ptr->number, anchor_ptr->extent));
cur_shift = 0;
/*
@@ -3830,22 +5555,20 @@ re_parse:
* if they exist, but only on HYPERTEXT_ANCHORS.
*/
if (anchor_ptr->link_type & HYPERTEXT_ANCHOR) {
- ch = (unsigned char)line_ptr->data[anchor_ptr->line_pos];
+ ch = UCH(line_ptr->data[anchor_ptr->line_pos]);
while (isspace(ch) ||
IsSpecialAttrChar(ch)) {
anchor_ptr->line_pos++;
anchor_ptr->extent--;
cur_shift++;
- ch = (unsigned char)line_ptr->data[anchor_ptr->line_pos];
+ ch = UCH(line_ptr->data[anchor_ptr->line_pos]);
}
}
if (anchor_ptr->extent < 0) {
anchor_ptr->extent = 0;
}
- anchor_ptr->start += cur_shift;
- CTRACE(tfp, "anchor text: '%s'\n",
- line_ptr->data);
+ CTRACE((tfp, "anchor text: '%s'\n", line_ptr->data));
/*
* If the link begins with an end of line and we have more
* lines, then start the highlighting on the next line. - FM
@@ -3857,12 +5580,14 @@ re_parse:
if (cur_line < text->Lines &&
(anchor_ptr->extent ||
anchor_ptr->line_pos != (int)line_ptr->size ||
- (prev_a && prev_a->start > anchor_ptr->start))) {
- anchor_ptr->start++;
- CTRACE(tfp, "found anchor at end of line\n");
+ (prev_a && /* How could this happen? */
+ (prev_a->line_num > anchor_ptr->line_num)))) {
+ anchor_ptr->line_num++;
+ anchor_ptr->line_pos = 0;
+ CTRACE((tfp, "found anchor at end of line\n"));
goto re_parse;
} else {
- CTRACE(tfp, "found anchor at end of line, leaving it there\n");
+ CTRACE((tfp, "found anchor at end of line, leaving it there\n"));
}
}
@@ -3886,7 +5611,7 @@ re_parse:
HTLine *line_ptr2 = line_ptr->next;
if (!final) {
- if (cur_line + 1 >= text->Lines) {
+ if (cur_line + 1 >= stop_before) {
FREE(anchor_ptr->hightext); /* bail out */
break;
}
@@ -3901,7 +5626,10 @@ re_parse:
(anchor_ptr->extent -
strlen(anchor_ptr->hightext)));
anchor_ptr->hightext2offset = line_ptr2->offset;
- remove_special_attr_chars(anchor_ptr->hightext2);
+ /*handle LY_SOFT_NEWLINEs -VH */
+ anchor_ptr->hightext2offset +=
+ remove_special_attr_chars(anchor_ptr->hightext2);
+
if (anchor_ptr->link_type & HYPERTEXT_ANCHOR) {
LYTrimTrailing(anchor_ptr->hightext2);
if (anchor_ptr->hightext2[0] == '\0') {
@@ -3922,10 +5650,13 @@ re_parse:
*/
if (anchor_ptr->line_pos > 0) {
register int offset = 0, i = 0;
- for (; i < anchor_ptr->line_pos; i++)
+ for (; i < anchor_ptr->line_pos; i++) {
if (IS_UTF_EXTRA(line_ptr->data[i]) ||
- IsSpecialAttrChar(line_ptr->data[i]))
+ IsSpecialAttrChar(line_ptr->data[i])) {
offset++;
+ have_soft_newline_in_1st_line += (line_ptr->data[i] == LY_SOFT_NEWLINE);
+ }
+ }
anchor_ptr->line_pos -= offset;
}
@@ -3935,9 +5666,12 @@ re_parse:
anchor_ptr->line_pos += line_ptr->offset;
anchor_ptr->line_num = cur_line;
- CTRACE(tfp, "GridText: add link on line %d col %d [%d] %s\n",
+ /*handle LY_SOFT_NEWLINEs -VH */
+ anchor_ptr->line_pos += have_soft_newline_in_1st_line;
+
+ CTRACE((tfp, "GridText: add link on line %d col %d [%d] %s\n",
cur_line, anchor_ptr->line_pos,
- anchor_ptr->number, "in HText_trimHightext");
+ anchor_ptr->number, "in HText_trimHightext"));
/*
* If this is the last anchor, we're done!
@@ -3948,15 +5682,6 @@ re_parse:
}
-/* Dump diagnostics to tfp
-*/
-PUBLIC void HText_dump ARGS1(
- HText *, text GCC_UNUSED)
-{
- fprintf(tfp, "HText: Dump called\n");
-}
-
-
/* Return the anchor associated with this node
*/
PUBLIC HTParentAnchor * HText_nodeAnchor ARGS1(
@@ -4086,17 +5811,17 @@ PUBLIC int HTGetRelLinkNum ARGS3(
*/
int curanchor = links[cur].anchor_number;
- CTRACE(tfp, "HTGetRelLinkNum(%d,%d,%d) -- HTMainText=%p\n",
- num, rel, cur, HTMainText);
- CTRACE(tfp," scrtop=%d, curline=%d, curanchor=%d, display_lines=%d, %s\n",
+ CTRACE((tfp, "HTGetRelLinkNum(%d,%d,%d) -- HTMainText=%p\n",
+ num, rel, cur, HTMainText));
+ CTRACE((tfp," scrtop=%d, curline=%d, curanchor=%d, display_lines=%d, %s\n",
scrtop, curline, curanchor, display_lines,
- on_screen ? "on_screen" : "0");
+ on_screen ? "on_screen" : "0"));
if (!HTMainText) return 0;
if ( rel==0 ) return num;
/* if cur numbered link is on current page, use it */
if ( on_screen && curanchor ) {
- CTRACE(tfp,"curanchor=%d at line %d on screen\n",curanchor,curline);
+ CTRACE((tfp,"curanchor=%d at line %d on screen\n",curanchor,curline));
if ( rel == '+' ) return curanchor + num;
else if ( rel == '-' ) return curanchor - num;
else return num; /* shouldn't happen */
@@ -4106,13 +5831,13 @@ PUBLIC int HTGetRelLinkNum ARGS3(
* -- find previous closest numbered link
*/
for (a = HTMainText->first_anchor; a; a = a->next) {
- CTRACE(tfp," a->line_num=%d, a->number=%d\n",a->line_num,a->number);
+ CTRACE((tfp," a->line_num=%d, a->number=%d\n", a->line_num, a->number));
if ( a->line_num >= scrtop ) break;
if ( a->number == 0 ) continue;
l = a;
curanchor = l->number;
}
- CTRACE(tfp," a=%p, l=%p, curanchor=%d\n",a,l,curanchor);
+ CTRACE((tfp," a=%p, l=%p, curanchor=%d\n",a,l,curanchor));
if ( on_screen ) { /* on screen but not a numbered link */
for ( ; a; a = a->next ) {
if ( a->number ) { l = a; curanchor = l->number; }
@@ -4174,8 +5899,8 @@ PUBLIC int HTGetLinkInfo ARGS6(
* and don't count towards nlinks. - KW
*/
if ((a->show_anchor) &&
- (a->link_type != INPUT_ANCHOR ||
- a->input_field->type != F_HIDDEN_TYPE)) {
+ !(a->link_type == INPUT_ANCHOR
+ && a->input_field->type == F_HIDDEN_TYPE)) {
if (a->line_num == prev_anchor_line) {
anchors_this_line++;
} else {
@@ -4276,8 +6001,8 @@ PUBLIC int HTGetLinkInfo ARGS6(
(HTAnchor *)a->anchor, LINK_INTERNAL);
if (link_dest_intl && link_dest_intl != link_dest) {
- CTRACE(tfp, "HTGetLinkInfo: unexpected typed link to %s!\n",
- link_dest_intl->parent->address);
+ CTRACE((tfp, "HTGetLinkInfo: unexpected typed link to %s!\n",
+ link_dest_intl->parent->address));
link_dest_intl = NULL;
}
}
@@ -4325,28 +6050,70 @@ PRIVATE BOOLEAN same_anchor_or_field ARGS5(
return(NO);
}
if (formA->type != formB->type ||
- formA->type != F_TEXTAREA_TYPE || formB->type != F_TEXTAREA_TYPE) {
+ formA->type != F_TEXTAREA_TYPE ||
+ formB->type != F_TEXTAREA_TYPE) {
return(NO);
}
if (formA->number != formB->number)
return(NO);
if (!formA->name || !formB->name)
return(YES);
- return(strcmp(formA->name, formB->name) == 0);
+ return (BOOL) (strcmp(formA->name, formB->name) == 0);
}
-#define same_anchor_as_link(i,a) (i >= 0 && a &&\
+#define same_anchor_as_link(i,a,ta_same) (i >= 0 && a &&\
same_anchor_or_field(links[i].anchor_number,\
(links[i].type == WWW_FORM_LINK_TYPE) ? links[i].form : NULL,\
a->number,\
(a->link_type == INPUT_ANCHOR) ? a->input_field : NULL,\
- ta_skip))
-#define same_anchors(a1,a2) (a1 && a2 &&\
+ ta_same))
+#define same_anchors(a1,a2,ta_same) (a1 && a2 &&\
same_anchor_or_field(a1->number,\
(a1->link_type == INPUT_ANCHOR) ? a1->input_field : NULL,\
a2->number,\
(a2->link_type == INPUT_ANCHOR) ? a2->input_field : NULL,\
- ta_skip))
+ ta_same))
+
+/*
+ * Are there more textarea lines belonging to the same textarea before
+ * (direction < 0) or after (direction > 0) the current one?
+ * On entry, curlink must be the index in links[] of a textarea field. - kw
+ */
+PUBLIC BOOL HText_TAHasMoreLines ARGS2(
+ int, curlink,
+ int, direction)
+{
+ TextAnchor *a;
+ TextAnchor *prev_a = NULL;
+
+ if (!HTMainText)
+ return(NO);
+ if (direction < 0) {
+ for (a = HTMainText->first_anchor; a; prev_a = a, a = a->next) {
+ if (a->link_type == INPUT_ANCHOR &&
+ links[curlink].form == a->input_field) {
+ return same_anchors(a, prev_a, TRUE);
+ }
+ if (links[curlink].anchor_number &&
+ a->number >= links[curlink].anchor_number)
+ break;
+ }
+ return NO;
+ } else {
+ for (a = HTMainText->first_anchor; a; a = a->next) {
+ if (a == HTMainText->last_anchor)
+ break;
+ if (a->link_type == INPUT_ANCHOR &&
+ links[curlink].form == a->input_field) {
+ return same_anchors(a, a->next, TRUE);
+ }
+ if (links[curlink].anchor_number &&
+ a->number >= links[curlink].anchor_number)
+ break;
+ }
+ return NO;
+ }
+}
/*
* HTGetLinkOrFieldStart - moving to previous or next link or form field.
@@ -4409,8 +6176,8 @@ PUBLIC int HTGetLinkOrFieldStart ARGS5(
* and don't count towards nlinks. - KW
*/
if ((a->show_anchor) &&
- (a->link_type != INPUT_ANCHOR ||
- a->input_field->type != F_HIDDEN_TYPE)) {
+ !(a->link_type == INPUT_ANCHOR
+ && a->input_field->type == F_HIDDEN_TYPE)) {
if (a->line_num == prev_anchor_line) {
anchors_this_line++;
} else {
@@ -4424,7 +6191,7 @@ PUBLIC int HTGetLinkOrFieldStart ARGS5(
prev_anchor_line = a->line_num;
}
- if (!same_anchors(current.anc, a)) {
+ if (!same_anchors(current.anc, a, ta_skip)) {
previous.anc = current.anc;
previous.prev_anchor_line = current.prev_anchor_line;
previous.anchors_this_line = current.anchors_this_line;
@@ -4437,7 +6204,7 @@ PUBLIC int HTGetLinkOrFieldStart ARGS5(
current.anchors_this_group++;
}
if (curlink >= 0) {
- if (same_anchor_as_link(curlink,a)) {
+ if (same_anchor_as_link(curlink,a, ta_skip)) {
if (direction == -1) {
group_to_go = &previous;
break;
@@ -4446,7 +6213,7 @@ PUBLIC int HTGetLinkOrFieldStart ARGS5(
break;
}
} else if (direction > 0 &&
- same_anchor_as_link(curlink,previous.anc)) {
+ same_anchor_as_link(curlink,previous.anc, ta_skip)) {
group_to_go = &current;
break;
}
@@ -4541,13 +6308,6 @@ PUBLIC int HTGetLinkOrFieldStart ARGS5(
if (*go_line <= group_to_go->prev_anchor_line)
*go_line = group_to_go->prev_anchor_line + 1;
-#if 0
- if (*go_line > HTMainText->top_of_screen &&
- *go_line < HTMainText->top_of_screen+(display_lines) &&
- HTMainText->top_of_screen+(display_lines) <= a->line_num &&
- HTMainText->top_of_screen+2*(display_lines) <= HTMainText->Lines)
- *go_line = HTMainText->top_of_screen+(display_lines);
-#endif
if (*go_line < 0)
*go_line = 0;
if (linknum)
@@ -4564,7 +6324,7 @@ PUBLIC int HTGetLinkOrFieldStart ARGS5(
* for the first hit with the string indicated by target. If
* there is no hit, FALSE is returned. If there is a hit, then
* a copy of the line starting at that first hit is loaded into
- * *data with all IsSpecial characters stripped, it's offset and
+ * *data with all IsSpecial characters stripped, its offset and
* the printable target length (without IsSpecial, or extra CJK
* or utf8 characters) are loaded into *offset and *tLen, and
* TRUE is returned. - FM
@@ -4576,7 +6336,7 @@ PUBLIC BOOL HText_getFirstTargetInLine ARGS7(
int *, offset,
int *, tLen,
char **, data,
- char *, target)
+ CONST char *, target)
{
HTLine *line;
char *LineData;
@@ -4594,7 +6354,7 @@ PUBLIC BOOL HText_getFirstTargetInLine ARGS7(
/*
* Find the line and set up its data and offset - FM
*/
- for (i = 0, line = text->last_line->next;
+ for (i = 0, line = FirstHTLine(text);
i < line_num && (line != text->last_line);
i++, line = line->next) {
if (line->next == NULL) {
@@ -4612,18 +6372,12 @@ PUBLIC BOOL HText_getFirstTargetInLine ARGS7(
* strip any special characters from the loaded line
* data, and return TRUE. - FM
*/
- if ((case_sensitive ?
- (cp = LYno_attr_mbcs_strstr(LineData,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL :
- (cp = LYno_attr_mbcs_case_strstr(LineData,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL) &&
- (LineOffset + LenNeeded) < LYcols) {
+ if (((cp = LYno_attr_mb_strstr(LineData,
+ target,
+ utf_flag, YES,
+ &HitOffset,
+ &LenNeeded)) != NULL) &&
+ (LineOffset + LenNeeded) < DISPLAY_COLS) {
/*
* We had a hit so load the results,
* remove IsSpecial characters from
@@ -4662,7 +6416,7 @@ PUBLIC CONST char * HText_getTitle NOARGS
HTAnchor_title(HTMainText->node_anchor) : 0);
}
-#ifdef USE_HASH
+#ifdef USE_COLOR_STYLE
PUBLIC CONST char *HText_getStyle NOARGS
{
return(HTMainText ?
@@ -4700,25 +6454,23 @@ PUBLIC void HTCheckFnameForCompression ARGS3(
{
char *fn = *fname;
char *dot = NULL, *cp = NULL;
+ char *suffix;
CONST char *ct = NULL;
CONST char *ce = NULL;
- BOOLEAN method = 0;
+ CompressFileType method = cftNone;
+ CompressFileType second;
/*
* Make sure we have a string and anchor. - FM
*/
- if (!(fn && *fn && anchor))
+ if (!(fn && anchor))
return;
/*
* Make sure we have a file, not directory, name. -FM
*/
- if ((cp = strrchr(fn, '/')) != NULL) {
- fn = (cp +1);
- if (*fn == '\0') {
- return;
- }
- }
+ if (*(fn = LYPathLeaf(fn)) == '\0')
+ return;
/*
* Check the anchor's content_type and content_encoding
@@ -4726,32 +6478,32 @@ PUBLIC void HTCheckFnameForCompression ARGS3(
*/
ct = HTAnchor_content_type(anchor);
ce = HTAnchor_content_encoding(anchor);
- if (ce == NULL) {
+ if (ce == NULL && ct != 0) {
/*
* No Content-Encoding, so check
* the Content-Type. - FM
*/
- if (!strncasecomp((ct ? ct : ""), "application/gzip", 16) ||
- !strncasecomp((ct ? ct : ""), "application/x-gzip", 18)) {
- method = 1;
- } else if (!strncasecomp((ct ? ct : ""),
- "application/compress", 20) ||
- !strncasecomp((ct ? ct : ""),
- "application/x-compress", 22)) {
- method = 2;
- }
- } else if (!strcasecomp(ce, "gzip") ||
- !strcasecomp(ce, "x-gzip")) {
- /*
- * It's gzipped. - FM
- */
- method = 1;
- } else if (!strcasecomp(ce, "compress") ||
- !strcasecomp(ce, "x-compress")) {
- /*
- * It's Unix compressed. - FM
- */
- method = 2;
+ if (!strncasecomp(ct, "application/gzip", 16) ||
+ !strncasecomp(ct, "application/x-gzip", 18)) {
+ method = cftGzip;
+ } else if (!strncasecomp(ct, "application/compress", 20) ||
+ !strncasecomp(ct, "application/x-compress", 22)) {
+ method = cftCompress;
+ } else if (!strncasecomp(ct, "application/bzip2", 17) ||
+ !strncasecomp(ct, "application/x-bzip2", 19)) {
+ method = cftBzip2;
+ }
+ } else if (ce != 0) {
+ if (!strcasecomp(ce, "gzip") ||
+ !strcasecomp(ce, "x-gzip")) {
+ method = cftGzip;
+ } else if (!strcasecomp(ce, "compress") ||
+ !strcasecomp(ce, "x-compress")) {
+ method = cftCompress;
+ } else if (!strcasecomp(ce, "bzip2") ||
+ !strcasecomp(ce, "x-bzip2")) {
+ method = cftBzip2;
+ }
}
/*
@@ -4759,117 +6511,96 @@ PUBLIC void HTCheckFnameForCompression ARGS3(
* pointer, but strip_ok is not set, there is nothing left
* to do. - kw
*/
- if (method == 0 && !strip_ok)
+ if ((method == cftNone) && !strip_ok)
return;
/*
+ * Treat .tgz specially
+ */
+ if ((dot = strrchr(fn, '.')) != NULL
+ && !strcasecomp(dot, ".tgz")) {
+ if (method == cftNone) {
+ strcpy(dot, ".tar");
+ }
+ return;
+ }
+
+ /*
* Seek the last dot, and check whether
* we have a gzip or compress suffix. - FM
*/
if ((dot = strrchr(fn, '.')) != NULL) {
- if (!strcasecomp(dot, ".tgz") ||
- !strcasecomp(dot, ".gz") ||
- !strcasecomp(dot, ".Z")) {
- if (!method) {
+ if (HTCompressFileType(fn, ".", &cp) != cftNone) {
+ if (method == cftNone) {
/*
* It has a suffix which signifies a gzipped
* or compressed file for us, but the anchor
* claims otherwise, so tweak the suffix. - FM
*/
- cp = (dot + 1);
*dot = '\0';
- if (!strcasecomp(cp, "tgz")) {
- StrAllocCat(*fname, ".tar");
- }
}
return;
}
- if (strlen(dot) > 4) {
- cp = ((dot + strlen(dot)) - 3);
- if (!strcasecomp(cp, "-gz") ||
- !strcasecomp(cp, "_gz")) {
- if (!method) {
- /*
- * It has a tail which signifies a gzipped
- * file for us, but the anchor claims otherwise,
- * so tweak the suffix. - FM
- */
- *dot = '\0';
- } else {
- /*
- * The anchor claims it's gzipped, and we
- * believe it, so force this tail to the
- * conventional suffix. - FM
- */
-#ifdef VMS
- *cp = '-';
-#else
- *cp = '.';
-#endif /* VMS */
- cp++;
- *cp = TOLOWER(*cp);
- cp++;
- *cp = TOLOWER(*cp);
- }
- return;
- }
- }
- if (strlen(dot) > 3) {
- cp = ((dot + strlen(dot)) - 2);
- if (!strcasecomp(cp, "-Z") ||
- !strcasecomp(cp, "_Z")) {
- if (!method) {
- /*
- * It has a tail which signifies a compressed
- * file for us, but the anchor claims otherwise,
- * so tweak the suffix. - FM
- */
- *dot = '\0';
- } else {
- /*
- * The anchor claims it's compressed, and
- * we believe it, so force this tail to the
- * conventional suffix. - FM
- */
+ if ((second = HTCompressFileType(fn, "-_", &cp)) != cftNone) {
+ if (method == cftNone) {
+ /*
+ * It has a tail which signifies a gzipped
+ * file for us, but the anchor claims otherwise,
+ * so tweak the suffix. - FM
+ */
+ if (cp == dot+1)
+ cp--;
+ *cp = '\0';
+ } else {
+ /*
+ * The anchor claims it's gzipped, and we
+ * believe it, so force this tail to the
+ * conventional suffix. - FM
+ */
#ifdef VMS
- *cp = '-';
+ *cp = '-';
#else
- *cp = '.';
+ *cp = '.';
#endif /* VMS */
- cp++;
- *cp = TOUPPER(*cp);
- }
- return;
+ if (second == cftCompress)
+ LYUpperCase(cp);
+ else
+ LYLowerCase(cp);
}
+ return;
}
}
- if (!method) {
- /*
- * Don't know what compression method
- * was used, if any, so we won't do
- * anything. - FM
- */
- return;
+
+ switch (method) {
+ default:
+ suffix = "";
+ break;
+ case cftCompress:
+ suffix = ".Z";
+ break;
+ case cftGzip:
+ suffix = ".gz";
+ break;
+ case cftBzip2:
+ suffix = ".bz2";
+ break;
}
/*
* Add the appropriate suffix. - FM
*/
- if (!dot) {
- StrAllocCat(*fname, ((method == 1) ? ".gz" : ".Z"));
- return;
- }
- dot++;
- if (*dot == '\0') {
- StrAllocCat(*fname, ((method == 1) ? "gz" : "Z"));
- return;
- }
+ if (*suffix) {
+ if (!dot) {
+ StrAllocCat(*fname, suffix);
+ } else if (*++dot == '\0') {
+ StrAllocCat(*fname, suffix + 1);
+ } else {
+ StrAllocCat(*fname, suffix);
#ifdef VMS
- StrAllocCat(*fname, ((method == 1) ? "-gz" : "-Z"));
-#else
- StrAllocCat(*fname, ((method == 1) ? ".gz" : ".Z"));
+ (*fname)[strlen(*fname) - strlen(suffix)] = '-';
#endif /* !VMS */
- return;
+ }
+ }
}
/*
@@ -4913,10 +6644,11 @@ PUBLIC void HText_pageDisplay ARGS2(
{
#ifdef DISP_PARTIAL
if (debug_display_partial || (LYTraceLogFP != NULL)) {
- CTRACE(tfp, "GridText: HText_pageDisplay at line %d started\n", line_num);
+ CTRACE((tfp, "GridText: HText_pageDisplay at line %d started\n", line_num));
}
if (display_partial) {
+ int stop_before = -1;
/*
** Garbage is reported from forms input fields in incremental mode.
** So we start HText_trimHightext() to forget this side effect.
@@ -4926,7 +6658,9 @@ PUBLIC void HText_pageDisplay ARGS2(
** (FALSE = indicate that we are in partial mode)
** Multiple calls of HText_trimHightext works without problem now.
*/
- HText_trimHightext(HTMainText, FALSE);
+ if (HTMainText && HTMainText->stbl)
+ stop_before = Stbl_getStartLineDeep(HTMainText->stbl);
+ HText_trimHightext(HTMainText, FALSE, stop_before);
}
#endif
@@ -4934,14 +6668,14 @@ PUBLIC void HText_pageDisplay ARGS2(
#ifdef DISP_PARTIAL
if (display_partial && debug_display_partial)
- sleep(MessageSecs);
+ LYSleepMsg();
#endif
is_www_index = HTAnchor_isIndex(HTMainAnchor);
#ifdef DISP_PARTIAL
if (debug_display_partial || (LYTraceLogFP != NULL)) {
- CTRACE(tfp, "GridText: HText_pageDisplay finished\n");
+ CTRACE((tfp, "GridText: HText_pageDisplay finished\n"));
}
#endif
}
@@ -4981,8 +6715,8 @@ PUBLIC int HText_LinksInLines ARGS3(
if (Anchor_ptr->line_num >= start &&
Anchor_ptr->line_num < end &&
Anchor_ptr->show_anchor &&
- (Anchor_ptr->link_type != INPUT_ANCHOR ||
- Anchor_ptr->input_field->type != F_HIDDEN_TYPE))
+ !(Anchor_ptr->link_type == INPUT_ANCHOR
+ && Anchor_ptr->input_field->type == F_HIDDEN_TYPE))
++total;
if (Anchor_ptr == text->last_anchor)
break;
@@ -5013,15 +6747,15 @@ PUBLIC int HText_sourceAnchors ARGS1(
PUBLIC BOOL HText_canScrollUp ARGS1(
HText *, text)
{
- return (text->top_of_screen != 0);
+ return (BOOL) (text->top_of_screen != 0);
}
PUBLIC BOOL HText_canScrollDown NOARGS
{
HText * text = HTMainText;
- return (text != 0)
- && ((text->top_of_screen + display_lines) < text->Lines+1);
+ return (BOOL) ((text != 0)
+ && ((text->top_of_screen + display_lines) < text->Lines+1));
}
/* Scroll actions
@@ -5057,29 +6791,10 @@ PUBLIC void HText_scrollBottom ARGS1(
/* Bring to front and highlight it
*/
-PRIVATE int line_for_char ARGS2(
- HText *, text,
- int, char_num)
-{
- int line_number = 0;
- int characters = 0;
- HTLine * line = text->last_line->next;
- for (;;) {
- if (line == text->last_line) return 0; /* Invalid */
- characters = characters + line->size + 1;
- if (characters > char_num) return line_number;
- line_number ++;
- line = line->next;
- }
-}
-
PUBLIC BOOL HText_select ARGS1(
HText *, text)
{
if (text != HTMainText) {
- HTMainText = text;
- HTMainAnchor = text->node_anchor;
-
/*
* Reset flag for whereis search string - cannot be true here
* since text is not our HTMainText. - kw
@@ -5097,13 +6812,34 @@ PUBLIC BOOL HText_select ARGS1(
}
#endif /* DISP_PARTIAL */
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+ /* text->UCLYhndl is not reset by META, so use a more circumvent way */
+ if ( text->node_anchor->UCStages->s[UCT_STAGE_HTEXT].LYhndl
+ != current_char_set )
+ Switch_Display_Charset(text->node_anchor->UCStages->s[UCT_STAGE_HTEXT].LYhndl, SWITCH_DISPLAY_CHARSET_MAYBE);
+#endif
+ if (HTMainText) {
+ if (HText_hasUTF8OutputSet(HTMainText) &&
+ HTLoadedDocumentEightbit() &&
+ LYCharSet_UC[current_char_set].enc == UCT_ENC_UTF8) {
+ text->had_utf8 = HTMainText->has_utf8;
+ } else {
+ text->had_utf8 = NO;
+ }
+ HTMainText->has_utf8 = NO;
+ text->has_utf8 = NO;
+ }
+
+ HTMainText = text;
+ HTMainAnchor = text->node_anchor;
+
/*
* Make this text the most current in the loaded texts list. - FM
*/
if (loaded_texts && HTList_removeObject(loaded_texts, text))
HTList_addObject(loaded_texts, text);
- /* let lynx do it */
- /* display_page(text, text->top_of_screen, ""); */
+ /* let lynx do it */
+ /* display_page(text, text->top_of_screen, ""); */
}
return YES;
}
@@ -5165,13 +6901,13 @@ PUBLIC BOOL HTFindPoundSelector ARGS1(
www_search_result = a->line_num+1;
- CTRACE(tfp,
- "HText: Selecting anchor [%d] at character %d, line %d\n",
- a->number, a->start, www_search_result);
- if (!strcmp(selector, LYToolbarName))
+ CTRACE((tfp,
+ "HText: Selecting anchor [%d] at line %d\n",
+ a->number, www_search_result));
+ if (!strcmp(selector, LYToolbarName)) {
--www_search_result;
-
- return(YES);
+ }
+ return(YES);
}
}
@@ -5196,7 +6932,7 @@ PUBLIC BOOL HText_selectAnchor ARGS2(
if (a->anchor == anchor) break;
}
if (!a) {
- CTRACE(tfp, "HText: No such anchor in this text!\n");
+ CTRACE((tfp, "HText: No such anchor in this text!\n"));
return NO;
}
@@ -5206,10 +6942,10 @@ PUBLIC BOOL HText_selectAnchor ARGS2(
}
{
- int l = line_for_char(text, a->start);
- CTRACE(tfp,
- "HText: Selecting anchor [%d] at character %d, line %d\n",
- a->number, a->start, l);
+ int l = a->line_num;
+ CTRACE((tfp,
+ "HText: Selecting anchor [%d] at line %d\n",
+ a->number, l));
if ( !text->stale &&
(l >= text->top_of_screen) &&
@@ -5311,14 +7047,14 @@ PUBLIC HTAnchor * HText_referenceSelected ARGS1(
PUBLIC int HText_getTopOfScreen NOARGS
{
- HText * text = HTMainText;
- return text != 0 ? text->top_of_screen : 0;
+ HText * text = HTMainText;
+ return text != 0 ? text->top_of_screen : 0;
}
PUBLIC int HText_getLines ARGS1(
HText *, text)
{
- return text->Lines;
+ return text->Lines;
}
PUBLIC HTAnchor * HText_linkSelTo ARGS2(
@@ -5354,35 +7090,33 @@ PUBLIC void HTSearchQueries_free NOARGS
PUBLIC void HTAddSearchQuery ARGS1(
char *, query)
{
- char *new;
+ char *new_query = NULL;
char *old;
HTList *cur;
if (!(query && *query))
return;
- if ((new = (char *)calloc(1, (strlen(query) + 1))) == NULL)
- outofmem(__FILE__, "HTAddSearchQuery");
- strcpy(new, query);
+ StrAllocCopy(new_query, query);
if (!search_queries) {
search_queries = HTList_new();
#ifdef LY_FIND_LEAKS
atexit(HTSearchQueries_free);
#endif
- HTList_addObject(search_queries, new);
+ HTList_addObject(search_queries, new_query);
return;
}
cur = search_queries;
while (NULL != (old = (char *)HTList_nextObject(cur))) {
- if (!strcmp(old, new)) {
+ if (!strcmp(old, new_query)) {
HTList_removeObject(search_queries, old);
FREE(old);
break;
}
}
- HTList_addObject(search_queries, new);
+ HTList_addObject(search_queries, new_query);
return;
}
@@ -5405,7 +7139,7 @@ PUBLIC int do_www_search ARGS1(
* Use its query as the default.
*/
PreviousSearch = TRUE;
- strcpy(searchstring, ++cp);
+ LYstrncpy(searchstring, ++cp, sizeof(searchstring)-1);
for (cp=searchstring; *cp; cp++)
if (*cp == '+')
*cp = ' ';
@@ -5435,7 +7169,7 @@ PUBLIC int do_www_search ARGS1(
_statusline(EDIT_CURRENT_QUERY);
QueryTotal = (search_queries ? HTList_count(search_queries) : 0);
recall = (((PreviousSearch && QueryTotal >= 2) ||
- (!PreviousSearch && QueryTotal >= 1)) ? RECALL : NORECALL);
+ (!PreviousSearch && QueryTotal >= 1)) ? RECALL_URL : NORECALL);
QueryNum = QueryTotal;
get_query:
if ((ch=LYgetstr(searchstring, VISIBLE,
@@ -5461,7 +7195,7 @@ get_query:
QueryNum = 0;
if ((cp=(char *)HTList_objectAt(search_queries,
QueryNum)) != NULL) {
- strcpy(searchstring, cp);
+ LYstrncpy(searchstring, cp, sizeof(searchstring)-1);
if (*temp && !strcmp(temp, searchstring)) {
_statusline(EDIT_CURRENT_QUERY);
} else if ((*temp && QueryTotal == 2) ||
@@ -5492,7 +7226,7 @@ get_query:
QueryNum = QueryTotal - 1;
if ((cp=(char *)HTList_objectAt(search_queries,
QueryNum)) != NULL) {
- strcpy(searchstring, cp);
+ LYstrncpy(searchstring, cp, sizeof(searchstring)-1);
if (*temp && !strcmp(temp, searchstring)) {
_statusline(EDIT_CURRENT_QUERY);
} else if ((*temp && QueryTotal == 2) ||
@@ -5545,11 +7279,9 @@ get_query:
StrAllocCat(tmpaddress, "?");
StrAllocCat(tmpaddress, searchstring);
user_message(WWW_WAIT_MESSAGE, tmpaddress);
-#ifndef VMS
-#ifdef SYSLOG_REQUESTED_URLS
- syslog(LOG_INFO|LOG_LOCAL5, "%s", tmpaddress);
-#endif /* SYSLOG_REQUESTED_URLS */
-#endif /* !VMS */
+#if !defined(VMS) && defined(SYSLOG_REQUESTED_URLS)
+ LYSyslog(tmpaddress);
+#endif /* !VMS && SYSLOG_REQUESTED_URLS */
FREE(tmpaddress);
if (cp)
*cp = '?';
@@ -5570,7 +7302,7 @@ get_query:
StrAllocCopy(doc->address, cp_freeme);
FREE(cp_freeme);
- CTRACE(tfp,"\ndo_www_search: newfile: %s\n",doc->address);
+ CTRACE((tfp,"\ndo_www_search: newfile: %s\n",doc->address));
/*
* Yah, the search succeeded.
@@ -5588,6 +7320,33 @@ get_query:
return(NOT_FOUND);
}
+PRIVATE void write_offset ARGS2(
+ FILE *, fp,
+ HTLine *, line)
+{
+ int i;
+
+ if (line->data[0]) {
+ for (i = 0; i < (int)line->offset; i++) {
+ fputc(' ', fp);
+ }
+ }
+}
+
+PRIVATE void write_hyphen ARGS1(
+ FILE *, fp)
+{
+ if (dump_output_immediately &&
+ LYRawMode &&
+ LYlowest_eightbit[current_char_set] <= 173 &&
+ (LYCharSet_UC[current_char_set].enc == UCT_ENC_8859 ||
+ (LYCharSet_UC[current_char_set].like8859 & UCT_R_8859SPECL)) != 0) {
+ fputc(0xad, fp); /* the iso8859 byte for SHY */
+ } else {
+ fputc('-', fp);
+ }
+}
+
/*
* Print the contents of the file in HTMainText to
* the file descriptor fp.
@@ -5596,54 +7355,60 @@ get_query:
*/
PUBLIC void print_wwwfile_to_fd ARGS2(
FILE *, fp,
- int, is_reply)
+ BOOLEAN, is_reply)
{
register int i;
int first = TRUE;
HTLine * line;
+#ifndef NO_DUMP_WITH_BACKSPACES
+ HText* text = HTMainText;
+ BOOL in_b = FALSE;
+ BOOL in_u = FALSE;
+ BOOL bs = (BOOL)(!is_reply
+ && text != 0
+ && with_backspaces
+ && HTCJK == NOCJK
+ && !text->T.output_utf8);
+#endif
if (!HTMainText)
return;
- line = HTMainText->last_line->next;
+ line = FirstHTLine(HTMainText);
for (;; line = line->next) {
- if (!first
- && line->data[0] != LY_SOFT_NEWLINE)
+ if (!first && line->data[0] != LY_SOFT_NEWLINE) {
fputc('\n',fp);
- first = FALSE;
-
- /*
- * Add news-style quotation if requested. - FM
- */
- if (is_reply) {
- fputc('>',fp);
+ /*
+ * Add news-style quotation if requested. - FM
+ */
+ if (is_reply) {
+ fputc('>',fp);
+ }
}
- /*
- * Add offset.
- */
- for (i = 0; i < (int)line->offset; i++) {
- fputc(' ', fp);
- }
+ first = FALSE;
+ write_offset(fp, line);
/*
* Add data.
*/
for (i = 0; line->data[i] != '\0'; i++) {
if (!IsSpecialAttrChar(line->data[i])) {
+#ifndef NO_DUMP_WITH_BACKSPACES
+ if (in_b) {
+ fputc(line->data[i], fp);
+ fputc('\b',fp);
+ fputc(line->data[i], fp);
+ } else if (in_u) {
+ fputc('_',fp);
+ fputc('\b',fp);
+ fputc(line->data[i], fp);
+ } else
+#endif
fputc(line->data[i], fp);
} else if (line->data[i] == LY_SOFT_HYPHEN &&
line->data[i + 1] == '\0') { /* last char on line */
- if (dump_output_immediately &&
- LYRawMode &&
- LYlowest_eightbit[current_char_set] <= 173 &&
- (LYCharSet_UC[current_char_set].enc == UCT_ENC_8859 ||
- LYCharSet_UC[current_char_set].like8859 &
- UCT_R_8859SPECL)) {
- fputc(0xad, fp); /* the iso8859 byte for SHY */
- } else {
- fputc('-', fp);
- }
+ write_hyphen(fp);
} else if (dump_output_immediately && use_underscore) {
switch (line->data[i]) {
case LY_UNDERLINE_START_CHAR:
@@ -5655,6 +7420,27 @@ PUBLIC void print_wwwfile_to_fd ARGS2(
break;
}
}
+#ifndef NO_DUMP_WITH_BACKSPACES
+ else if (bs) {
+ switch (line->data[i]) {
+ case LY_UNDERLINE_START_CHAR:
+ if (!in_b)
+ in_u = TRUE; /*favor bold over underline*/
+ break;
+ case LY_UNDERLINE_END_CHAR:
+ in_u = FALSE;
+ break;
+ case LY_BOLD_START_CHAR:
+ if (in_u)
+ in_u = FALSE; /* turn it off*/
+ in_b = TRUE;
+ break;
+ case LY_BOLD_END_CHAR:
+ in_b = FALSE;
+ break;
+ }
+ }
+#endif
}
if (line == HTMainText->last_line)
@@ -5686,23 +7472,17 @@ PUBLIC void print_crawl_to_fd ARGS3(
if (!HTMainText)
return;
- line = HTMainText->last_line->next;
+ line = FirstHTLine(HTMainText);
fprintf(fp, "THE_URL:%s\n", thelink);
if (thetitle != NULL) {
fprintf(fp, "THE_TITLE:%s\n", thetitle);
}
for (;; line = line->next) {
- if (!first
- && line->data[0] != LY_SOFT_NEWLINE)
+ if (!first && line->data[0] != LY_SOFT_NEWLINE)
fputc('\n',fp);
first = FALSE;
- /*
- * Add offset.
- */
- for (i = 0; i < (int)line->offset; i++) {
- fputc(' ', fp);
- }
+ write_offset(fp, line);
/*
* Add data.
@@ -5712,17 +7492,8 @@ PUBLIC void print_crawl_to_fd ARGS3(
fputc(line->data[i], fp);
} else if (line->data[i] == LY_SOFT_HYPHEN &&
line->data[i + 1] == '\0') { /* last char on line */
- if (dump_output_immediately &&
- LYRawMode &&
- LYlowest_eightbit[current_char_set] <= 173 &&
- (LYCharSet_UC[current_char_set].enc == UCT_ENC_8859 ||
- LYCharSet_UC[current_char_set].like8859 &
- UCT_R_8859SPECL)) {
- fputc(0xad, fp); /* the iso8859 byte for SHY */
- } else {
- fputc('-', fp);
- }
- }
+ write_hyphen(fp);
+ }
}
if (line == HTMainText->last_line) {
@@ -5736,7 +7507,7 @@ PUBLIC void print_crawl_to_fd ARGS3(
*/
if ((nolist == FALSE) &&
(keypad_mode == LINKS_ARE_NUMBERED ||
- keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED)) {
+ keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED)) {
printlist(fp,FALSE);
}
@@ -5756,7 +7527,7 @@ PRIVATE void adjust_search_result ARGS3(
int nl_closest = -1;
int goal = SEARCH_GOAL_LINE;
int max_offset;
- BOOL on_screen = (tentative_result > HTMainText->top_of_screen &&
+ BOOL on_screen = (BOOL) (tentative_result > HTMainText->top_of_screen &&
tentative_result <= HTMainText->top_of_screen+display_lines);
if (goal < 1)
goal = 1;
@@ -5816,199 +7587,238 @@ PRIVATE void adjust_search_result ARGS3(
}
}
-/*
- John Bley, April 1, 1999 (No joke)
- www_user_search_internals was spawned from www_user_search to
- remove a cut-n-paste coding hack: basically, this entire function
- was duplicated at the two points that www_user_search now calls it.
- And, because www_user_search has a return value defined as modification
- of the screen and some global values, and since it used an awkward for(;;)
- construct, this method has to distinguish between when it's "really"
- returning and when it's just falling through via a break; in the
- infinite-for-loop. So, basically, we have a large amount of arguments
- since this loop used to be directly in www_user_search, and we return
- 1 to say we're "really" returning and 0 to indicate we fell through.
- Also, due to exactly one difference between the first pass of this
- code and the second pass, we have the "firstpass" argument, which is
- true iff it's the first pass.
-
- I hate cut-n-paste coding.
+PRIVATE BOOL anchor_has_target ARGS2(
+ TextAnchor *, a,
+ char *, target)
+{
+ OptionType * option;
+ char *stars = NULL, *cp;
+
+ /*
+ * Search the hightext string, and hightext2 if present,
+ * taking the case_sensitive setting into account. - FM
+ */
+ if (LYno_attr_strstr(a->hightext, target)
+ || LYno_attr_strstr(a->hightext2, target)) {
+ return TRUE;
+ }
+
+ /*
+ * Search the relevant form fields, taking the
+ * case_sensitive setting into account. - FM
+ */
+ if ((a->input_field != NULL && a->input_field->value != NULL) &&
+ a->input_field->type != F_HIDDEN_TYPE) {
+ if (a->input_field->type == F_PASSWORD_TYPE) {
+ /*
+ * Check the actual, hidden password, and then
+ * the displayed string. - FM
+ */
+ if (LYno_attr_strstr(a->input_field->value, target)) {
+ return TRUE;
+ }
+ StrAllocCopy(stars, a->input_field->value);
+ for (cp = stars; *cp != '\0'; cp++)
+ *cp = '*';
+ if (LYno_attr_strstr(stars, target)) {
+ FREE(stars);
+ return TRUE;
+ }
+ FREE(stars);
+ } else if (a->input_field->type == F_OPTION_LIST_TYPE) {
+ /*
+ * Search the option strings that are displayed
+ * when the popup is invoked. - FM
+ */
+ option = a->input_field->select_list;
+ while (option != NULL) {
+ if (LYno_attr_strstr(option->name, target)) {
+ return TRUE;
+ }
+ option = option->next;
+ }
+ } else if (a->input_field->type == F_RADIO_TYPE) {
+ /*
+ * Search for checked or unchecked parens. - FM
+ */
+ if (a->input_field->num_value) {
+ cp = checked_radio;
+ } else {
+ cp = unchecked_radio;
+ }
+ if (LYno_attr_strstr(cp, target)) {
+ return TRUE;
+ }
+ } else if (a->input_field->type == F_CHECKBOX_TYPE) {
+ /*
+ * Search for checked or unchecked square brackets. - FM
+ */
+ if (a->input_field->num_value) {
+ cp = checked_box;
+ } else {
+ cp = unchecked_box;
+ }
+ if (LYno_attr_strstr(cp, target)) {
+ return TRUE;
+ }
+ } else {
+ /*
+ * Check the values intended for display.
+ * May have been found already via the
+ * hightext search, but make sure here
+ * that the entire value is searched. - FM
+ */
+ if (LYno_attr_strstr(a->input_field->value, target)) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+PRIVATE TextAnchor *line_num_to_anchor ARGS1(
+ int, line_num)
+{
+ TextAnchor *a;
+
+ if (HTMainText != 0) {
+ a = HTMainText->first_anchor;
+ while (a != 0 && a->line_num < line_num) {
+ a = a->next;
+ }
+ } else {
+ a = 0;
+ }
+ return a;
+}
+
+PRIVATE int line_num_in_text ARGS2(
+ HText *, text,
+ HTLine *, line)
+{
+ int result = 1;
+ HTLine *temp = FirstHTLine(text);
+
+ while (temp != line) {
+ temp = temp->next;
+ ++result;
+ }
+ return result;
+}
+
+/* Computes the 'prev' pointers on demand, and returns the one for the given
+ * anchor.
*/
-PRIVATE int www_user_search_internals ARGS8(
- int, firstpass,
+PRIVATE TextAnchor *get_prev_anchor ARGS1(
+ TextAnchor *, a)
+{
+ TextAnchor *p, *q;
+
+ if (a->prev == 0) {
+ if ((p = HTMainText->first_anchor) != 0) {
+ while ((q = p->next) != 0) {
+ q->prev = p;
+ p = q;
+ }
+ }
+ }
+ return a->prev;
+}
+
+PRIVATE int www_search_forward ARGS5(
int, start_line,
document *, doc,
char *, target,
- TextAnchor *, a,
HTLine *, line,
- int *, count,
- int *, tentative_result)
+ int, count)
{
- OptionType * option;
- char *stars = NULL, *cp;
+ int wrapped = 0;
+ TextAnchor *a = line_num_to_anchor(count - 1);
+ int tentative_result = -1;
for (;;) {
- while ((a != NULL) && a->line_num == (*count - 1)) {
+ while ((a != NULL) && a->line_num == (count - 1)) {
if (a->show_anchor &&
- (a->link_type != INPUT_ANCHOR ||
- a->input_field->type != F_HIDDEN_TYPE)) {
- if (((a->hightext != NULL && case_sensitive == TRUE) &&
- LYno_attr_char_strstr(a->hightext, target)) ||
- ((a->hightext != NULL && case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(a->hightext, target))) {
- adjust_search_result(doc, *count, start_line);
- return 1;
- }
- if (((a->hightext2 != NULL && case_sensitive == TRUE) &&
- LYno_attr_char_strstr(a->hightext2, target)) ||
- ((a->hightext2 != NULL && case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(a->hightext2, target))) {
- adjust_search_result(doc, *count, start_line);
+ !(a->link_type == INPUT_ANCHOR
+ && a->input_field->type == F_HIDDEN_TYPE)) {
+ if (anchor_has_target(a, target)) {
+ adjust_search_result(doc, count, start_line);
return 1;
}
-
- /*
- * Search the relevant form fields, taking the
- * case_sensitive setting into account. - FM
- */
- if ((a->input_field != NULL && a->input_field->value != NULL) &&
- a->input_field->type != F_HIDDEN_TYPE) {
- if (a->input_field->type == F_PASSWORD_TYPE) {
- /*
- * Check the actual, hidden password, and then
- * the displayed string. - FM
- */
- if (((case_sensitive == TRUE) &&
- LYno_attr_char_strstr(a->input_field->value,
- target)) ||
- ((case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(a->input_field->value,
- target))) {
- adjust_search_result(doc, *count, start_line);
- return 1;
- }
- StrAllocCopy(stars, a->input_field->value);
- for (cp = stars; *cp != '\0'; cp++)
- *cp = '*';
- if (((case_sensitive == TRUE) &&
- LYno_attr_char_strstr(stars, target)) ||
- ((case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(stars, target))) {
- FREE(stars);
- adjust_search_result(doc, *count, start_line);
- return 1;
- }
- FREE(stars);
- } else if (a->input_field->type == F_OPTION_LIST_TYPE) {
- /*
- * Search the option strings that are displayed
- * when the popup is invoked. - FM
- */
- option = a->input_field->select_list;
- while (option != NULL) {
- if (((option->name != NULL &&
- case_sensitive == TRUE) &&
- LYno_attr_char_strstr(option->name,
- target)) ||
- ((option->name != NULL &&
- case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(option->name,
- target))) {
- adjust_search_result(doc, *count, start_line);
- return 1;
- }
- option = option->next;
- }
- } else if (a->input_field->type == F_RADIO_TYPE) {
- /*
- * Search for checked or unchecked parens. - FM
- */
- if (a->input_field->num_value) {
- cp = checked_radio;
- } else {
- cp = unchecked_radio;
- }
- if (((case_sensitive == TRUE) &&
- LYno_attr_char_strstr(cp, target)) ||
- ((case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(cp, target))) {
- adjust_search_result(doc, *count, start_line);
- return 1;
- }
- } else if (a->input_field->type == F_CHECKBOX_TYPE) {
- /*
- * Search for checked or unchecked
- * square brackets. - FM
- */
- if (a->input_field->num_value) {
- cp = checked_box;
- } else {
- cp = unchecked_box;
- }
- if (((case_sensitive == TRUE) &&
- LYno_attr_char_strstr(cp, target)) ||
- ((case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(cp, target))) {
- adjust_search_result(doc, *count, start_line);
- return 1;
- }
- } else {
- /*
- * Check the values intended for display.
- * May have been found already via the
- * hightext search, but make sure here
- * that the entire value is searched. - FM
- */
- if (((case_sensitive == TRUE) &&
- LYno_attr_char_strstr(a->input_field->value,
- target)) ||
- ((case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(a->input_field->value,
- target))) {
- adjust_search_result(doc, *count, start_line);
- return 1;
- }
- }
- }
}
a = a->next;
}
- if (a != NULL && a->line_num <= (*count - 1)) {
- a = a->next;
- }
- if (case_sensitive && LYno_attr_char_strstr(line->data, target)) {
- *tentative_result = *count;
- break;
- } else if (!case_sensitive &&
- LYno_attr_char_case_strstr(line->data, target)) {
- *tentative_result = *count;
+ if (LYno_attr_strstr(line->data, target)) {
+ tentative_result = count;
break;
- /* Note: this is where the two passes differ */
- } else if (firstpass && line == HTMainText->last_line) {
- /* next line */
+ } else if ((count == start_line && wrapped) || wrapped > 1) {
+ HTUserMsg2(STRING_NOT_FOUND, target);
+ return -1;
+ } else if (line == HTMainText->last_line) {
+ count = 0;
+ wrapped++;
+ }
+ line = line->next;
+ count++;
+ }
+ if (tentative_result > 0) {
+ adjust_search_result(doc, tentative_result, start_line);
+ }
+ return 0;
+}
+
+PRIVATE int www_search_backward ARGS5(
+ int, start_line,
+ document *, doc,
+ char *, target,
+ HTLine *, line,
+ int, count)
+{
+ int wrapped = 0;
+ TextAnchor *a = line_num_to_anchor(count - 1);
+ int tentative_result = -1;
+
+ for (;;) {
+ while ((a != NULL) && a->line_num == (count - 1)) {
+ if (a->show_anchor &&
+ !(a->link_type == INPUT_ANCHOR
+ && a->input_field->type == F_HIDDEN_TYPE)) {
+ if (anchor_has_target(a, target)) {
+ adjust_search_result(doc, count, start_line);
+ return 1;
+ }
+ }
+ a = get_prev_anchor(a);
+ }
+
+ if (LYno_attr_strstr(line->data, target)) {
+ tentative_result = count;
break;
- } else if (!firstpass && *count > start_line) {
+ } else if ((count == start_line && wrapped) || wrapped > 1) {
HTUserMsg2(STRING_NOT_FOUND, target);
- return 1; /* end */
- } else { /* end */
- line = line->next;
- (*count)++;
+ return -1;
+ } else if (line == FirstHTLine(HTMainText)) {
+ count = line_num_in_text(HTMainText, LastHTLine(HTMainText)) + 1;
+ wrapped++;
}
+ line = line->prev;
+ count--;
+ }
+ if (tentative_result > 0) {
+ adjust_search_result(doc, tentative_result, start_line);
}
- /* No, man, we just fell through. You want to call us again. */
return 0;
}
-PUBLIC void www_user_search ARGS3(
+PUBLIC void www_user_search ARGS4(
int, start_line,
document *, doc,
- char *, target)
+ char *, target,
+ int, direction)
{
HTLine * line;
int count;
- int tentative_result = -1;
- TextAnchor *a;
if (!HTMainText) {
return;
@@ -6017,41 +7827,24 @@ PUBLIC void www_user_search ARGS3(
/*
* Advance to the start line.
*/
- line = HTMainText->last_line->next;
- for (count = 1; count <= start_line; line = line->next, count++) {
- if (line == HTMainText->last_line) {
- line = HTMainText->last_line->next; /* set to first line */
- count = 1;
- break;
+ line = FirstHTLine(HTMainText);
+ if (start_line + direction > 0) {
+ for (count = 1; count < start_line + direction; line = line->next, count++) {
+ if (line == HTMainText->last_line) {
+ line = FirstHTLine(HTMainText);
+ count = 1;
+ break;
+ }
}
- }
- a = HTMainText->first_anchor;
- while (a && a->line_num < count - 1) {
- a = a->next;
- }
- if (www_user_search_internals(1, start_line, doc, target,
- a, line, &count, &tentative_result) == 1) {
- return; /* Return the www_user_search_internals result */
+ } else {
+ line = HTMainText->last_line;
+ count = line_num_in_text(HTMainText, line);
}
- if (tentative_result > 0) {
- adjust_search_result(doc, tentative_result, start_line);
- return;
- }
- /* That didn't work, search from the beginning instead */
- line = HTMainText->last_line->next; /* set to first line */
- count = 1;
- a = HTMainText->first_anchor;
- while (a && a->line_num < count - 1) {
- a = a->next;
- }
- if (www_user_search_internals(0, start_line, doc, target,
- a, line, &count, &tentative_result) == 1) {
- return; /* Return the www_user_search_internals result */
- }
- if (tentative_result > 0) {
- adjust_search_result(doc, tentative_result, start_line);
- }
+ if (direction >= 0)
+ www_search_forward(start_line, doc, target, line, count);
+ else
+ www_search_backward(start_line, doc, target, line, count);
}
PUBLIC void user_message ARGS2(
@@ -6065,7 +7858,7 @@ PUBLIC void user_message ARGS2(
return;
}
- HTSprintf(&temp, message, (argument == 0) ? "" : argument);
+ HTSprintf0(&temp, message, (argument == 0) ? "" : argument);
statusline(temp);
@@ -6157,98 +7950,117 @@ PUBLIC void HTuncache_current_document NOARGS
FREE(htmain_anchor->UCStages);
}
}
- CTRACE(tfp, "\rHTuncache.. freeing document for '%s'%s\n",
+ CTRACE((tfp, "\nHTuncache.. freeing document for '%s'%s\n",
((htmain_anchor &&
htmain_anchor->address) ?
htmain_anchor->address : "unknown anchor"),
((htmain_anchor &&
htmain_anchor->post_data) ?
- " with POST data" : ""));
+ " with POST data" : "")));
HTList_removeObject(loaded_texts, HTMainText);
HText_free(HTMainText);
HTMainText = NULL;
} else {
- CTRACE(tfp, "HTuncache.. HTMainText already is NULL!\n");
+ CTRACE((tfp, "HTuncache.. HTMainText already is NULL!\n"));
}
}
#ifdef SOURCE_CACHE
+
+PRIVATE HTProtocol scm = { "source-cache-mem", 0, 0 }; /* dummy - kw */
+
PUBLIC BOOLEAN HTreparse_document NOARGS
{
BOOLEAN ok = FALSE;
- if (!HTMainText || LYCacheSource == SOURCE_CACHE_NONE ||
+ if (!HTMainAnchor || LYCacheSource == SOURCE_CACHE_NONE ||
(LYCacheSource == SOURCE_CACHE_FILE &&
- !HTMainText->source_cache_file) ||
+ !HTMainAnchor->source_cache_file) ||
(LYCacheSource == SOURCE_CACHE_MEMORY &&
- !HTMainText->source_cache_chunk))
+ !HTMainAnchor->source_cache_chunk))
return FALSE;
- if (LYCacheSource == SOURCE_CACHE_FILE && HTMainText->source_cache_file) {
+ if (LYCacheSource == SOURCE_CACHE_FILE && HTMainAnchor->source_cache_file) {
FILE * fp;
HTFormat format;
int ret;
- CTRACE(tfp, "Reparsing source cache file %s\n",
- HTMainText->source_cache_file);
+ CTRACE((tfp, "SourceCache: Reparsing file %s\n",
+ HTMainAnchor->source_cache_file));
+
+ /*
+ * This magic FREE(anchor->UCStages) call
+ * stolen from HTuncache_current_document() above.
+ */
+ if (!(HTOutputFormat && HTOutputFormat == WWW_SOURCE)) {
+ FREE(HTMainAnchor->UCStages);
+ }
/*
* This is more or less copied out of HTLoadFile(), except we don't
* get a content encoding. This may be overkill. -dsb
*/
- if (HTMainText->node_anchor->content_type) {
- format = HTAtom_for(HTMainText->node_anchor->content_type);
+ if (HTMainAnchor->content_type) {
+ format = HTAtom_for(HTMainAnchor->content_type);
} else {
- format = HTFileFormat(HTMainText->source_cache_file, NULL, NULL);
- format = HTCharsetFormat(format, HTMainText->node_anchor,
+ format = HTFileFormat(HTMainAnchor->source_cache_file, NULL, NULL);
+ format = HTCharsetFormat(format, HTMainAnchor,
UCLYhndl_for_unspec);
/* not UCLYhndl_HTFile_for_unspec - we are talking about remote
* documents...
*/
}
- CTRACE(tfp, " Content type is \"%s\"\n", format->name);
+ CTRACE((tfp, " Content type is \"%s\"\n", format->name));
- /*
- * Pass the source cache filename on to the next HText. Mark it
- * NULL here so that it won't get deleted by HText_free().
- */
- source_cache_filename = HTMainText->source_cache_file;
- HTMainText->source_cache_file = NULL;
-
- fp = fopen(source_cache_filename, "r");
+ fp = fopen(HTMainAnchor->source_cache_file, "r");
if (!fp) {
- CTRACE(tfp, " Cannot read file %s\n", source_cache_filename);
- FREE(source_cache_filename);
+ CTRACE((tfp, " Cannot read file %s\n", HTMainAnchor->source_cache_file));
+ LYRemoveTemp(HTMainAnchor->source_cache_file);
+ FREE(HTMainAnchor->source_cache_file);
return FALSE;
}
-#ifdef DISP_PARTIAL
- display_partial = display_partial_flag; /* restore */
- Newline_partial = Newline; /* initialize */
-#endif
+
if (HText_HaveUserChangedForms()) {
/*
* Issue a warning. Will not restore changed forms, currently.
*/
HTAlert(RELOADING_FORM);
}
- ret = HTParseFile(format, HTOutputFormat, HTMainText->node_anchor,
- fp, NULL);
- fclose(fp);
- ok = (ret == HT_LOADED);
- if (!ok) {
- FREE(source_cache_filename);
+ /* Set HTMainAnchor->protocol or HTMainAnchor->physical to convince
+ * the SourceCacheWriter to not regenerate the cache file (which
+ * would be an unnecessary "loop"). - kw
+ */
+ HTAnchor_setProtocol(HTMainAnchor, &HTFile);
+ ret = HTParseFile(format, HTOutputFormat, HTMainAnchor, fp, NULL);
+ LYCloseInput(fp);
+ if (ret == HT_PARTIAL_CONTENT) {
+ HTInfoMsg(gettext("Loading incomplete."));
+ CTRACE((tfp, "SourceCache: `%s' has been accessed, partial content.\n",
+ HTLoadedDocumentURL()));
}
+ ok = (BOOL) (ret == HT_LOADED || ret == HT_PARTIAL_CONTENT);
}
if (LYCacheSource == SOURCE_CACHE_MEMORY &&
- HTMainText->source_cache_chunk) {
+ HTMainAnchor->source_cache_chunk) {
HTFormat format = WWW_HTML;
int ret;
- CTRACE(tfp, "Reparsing from source memory cache %p\n",
- (void *)HTMainText->source_cache_chunk);
+ CTRACE((tfp, "SourceCache: Reparsing from memory chunk %p\n",
+ (void *)HTMainAnchor->source_cache_chunk));
/*
+ * This magic FREE(anchor->UCStages) call
+ * stolen from HTuncache_current_document() above.
+ */
+ if (!(HTOutputFormat && HTOutputFormat == WWW_SOURCE)) {
+ FREE(HTMainAnchor->UCStages);
+ }
+
+ if (HTMainAnchor->content_type) {
+ format = HTAtom_for(HTMainAnchor->content_type);
+ } else {
+ /*
* This is only done to make things aligned with SOURCE_CACHE_NONE and
* SOURCE_CACHE_FILE when switching to source mode since the original
* document's charset will be LYPushAssumed() and then LYPopAssumed().
@@ -6256,67 +8068,48 @@ PUBLIC BOOLEAN HTreparse_document NOARGS
* user-visible benefits, seems just '=' Info Page will show source's
* effective charset as "(assumed)".
*/
- format = HTCharsetFormat(format, HTMainText->node_anchor,
- UCLYhndl_for_unspec);
+ format = HTCharsetFormat(format, HTMainAnchor,
+ UCLYhndl_for_unspec);
+ }
/* not UCLYhndl_HTFile_for_unspec - we are talking about remote documents... */
- /*
- * Pass the source cache HTChunk on to the next HText. Clear it
- * here so that it won't get deleted by HText_free().
- */
- source_cache_chunk = HTMainText->source_cache_chunk;
- HTMainText->source_cache_chunk = NULL;
-
-#ifdef DISP_PARTIAL
- display_partial = display_partial_flag; /* restore */
- Newline_partial = Newline; /* initialize */
-#endif
if (HText_HaveUserChangedForms()) {
/*
* Issue a warning. Will not restore changed forms, currently.
*/
HTAlert(RELOADING_FORM);
}
- ret = HTParseMem(format, HTOutputFormat, HTMainText->node_anchor,
- source_cache_chunk, NULL);
- ok = (ret == HT_LOADED);
- if (!ok) {
- HTChunkFree(source_cache_chunk);
- source_cache_chunk = NULL;
- }
+ /* Set HTMainAnchor->protocol or HTMainAnchor->physical to convince
+ * the SourceCacheWriter to not regenerate the cache chunk (which
+ * would be an unnecessary "loop"). - kw
+ */
+ HTAnchor_setProtocol(HTMainAnchor, &scm); /* cheating -
+ anything != &HTTP or &HTTPS would do - kw */
+ ret = HTParseMem(format, HTOutputFormat, HTMainAnchor,
+ HTMainAnchor->source_cache_chunk, NULL);
+ ok = (BOOL) (ret == HT_LOADED);
}
- CTRACE(tfp, "Reparse %s\n", (ok ? "succeeded" : "failed"));
-
- if (ok) {
- from_source_cache = TRUE; /* flag for mainloop events */
- }
+ CTRACE((tfp, "Reparse %s\n", (ok ? "succeeded" : "failed")));
return ok;
}
PUBLIC BOOLEAN HTcan_reparse_document NOARGS
{
- if (!HTMainText || LYCacheSource == SOURCE_CACHE_NONE ||
+ if (!HTMainAnchor || LYCacheSource == SOURCE_CACHE_NONE ||
(LYCacheSource == SOURCE_CACHE_FILE &&
- !HTMainText->source_cache_file) ||
+ !HTMainAnchor->source_cache_file) ||
(LYCacheSource == SOURCE_CACHE_MEMORY &&
- !HTMainText->source_cache_chunk))
+ !HTMainAnchor->source_cache_chunk))
return FALSE;
- if (LYCacheSource == SOURCE_CACHE_FILE && HTMainText->source_cache_file) {
- FILE * fp;
-
- fp = fopen(HTMainText->source_cache_file, "r");
- if (!fp) {
- return FALSE;
- }
- fclose(fp);
- return TRUE;
+ if (LYCacheSource == SOURCE_CACHE_FILE && HTMainAnchor->source_cache_file) {
+ return LYCanReadFile(HTMainAnchor->source_cache_file);
}
if (LYCacheSource == SOURCE_CACHE_MEMORY &&
- HTMainText->source_cache_chunk) {
+ HTMainAnchor->source_cache_chunk) {
return TRUE;
}
@@ -6325,12 +8118,12 @@ PUBLIC BOOLEAN HTcan_reparse_document NOARGS
PRIVATE void trace_setting_change ARGS3(
CONST char *, name,
- BOOLEAN, prev_setting,
- BOOLEAN, new_setting)
+ int, prev_setting,
+ int, new_setting)
{
if (prev_setting != new_setting)
- CTRACE(tfp, "HTdocument_settings_changed: %s setting has changed (was %s, now %s)\n",
- name, prev_setting ? "ON" : "OFF", new_setting ? "ON" : "OFF");
+ CTRACE((tfp, "HTdocument_settings_changed: %s setting has changed (was %d, now %d)\n",
+ name, prev_setting, new_setting));
}
PUBLIC BOOLEAN HTdocument_settings_changed NOARGS
@@ -6339,11 +8132,11 @@ PUBLIC BOOLEAN HTdocument_settings_changed NOARGS
* Annoying Hack(TM): If we don't have a source cache, we can't
* reparse anyway, so pretend the settings haven't changed.
*/
- if (!HTMainText || LYCacheSource == SOURCE_CACHE_NONE ||
+ if (!HTMainAnchor || !HTMainText || LYCacheSource == SOURCE_CACHE_NONE ||
(LYCacheSource == SOURCE_CACHE_FILE &&
- !HTMainText->source_cache_file) ||
+ !HTMainAnchor->source_cache_file) ||
(LYCacheSource == SOURCE_CACHE_MEMORY &&
- !HTMainText->source_cache_chunk))
+ !HTMainAnchor->source_cache_chunk))
return FALSE;
if (TRACE) {
@@ -6355,6 +8148,9 @@ PUBLIC BOOLEAN HTdocument_settings_changed NOARGS
trace_setting_change("PSEUDO_INLINE_ALTS",
HTMainText->pseudo_inline_alts,
pseudo_inline_alts);
+ trace_setting_change("VERBOSE_IMG",
+ HTMainText->verbose_img,
+ verbose_img);
trace_setting_change("RAW_MODE", HTMainText->raw_mode,
LYUseDefaultRawMode);
trace_setting_change("HISTORICAL_COMMENTS",
@@ -6365,21 +8161,25 @@ PUBLIC BOOLEAN HTdocument_settings_changed NOARGS
trace_setting_change("SOFT_DQUOTES",
HTMainText->soft_dquotes, soft_dquotes);
trace_setting_change("OLD_DTD", HTMainText->old_dtd, Old_DTD);
- if (HTMainText->lines != LYlines || HTMainText->cols != LYcols)
- CTRACE(tfp,
+ trace_setting_change("KEYPAD_MODE",
+ HTMainText->keypad_mode, keypad_mode);
+ if (HTMainText->disp_lines != LYlines || HTMainText->disp_cols != DISPLAY_COLS)
+ CTRACE((tfp,
"HTdocument_settings_changed: Screen size has changed (was %dx%d, now %dx%d)\n",
- HTMainText->cols, HTMainText->lines, LYcols, LYlines);
+ HTMainText->disp_cols, HTMainText->disp_lines, DISPLAY_COLS, LYlines));
}
return (HTMainText->clickable_images != clickable_images ||
HTMainText->pseudo_inline_alts != pseudo_inline_alts ||
+ HTMainText->verbose_img != verbose_img ||
HTMainText->raw_mode != LYUseDefaultRawMode ||
HTMainText->historical_comments != historical_comments ||
- HTMainText->minimal_comments != minimal_comments ||
+ (HTMainText->minimal_comments != minimal_comments &&
+ !historical_comments) ||
HTMainText->soft_dquotes != soft_dquotes ||
HTMainText->old_dtd != Old_DTD ||
- HTMainText->lines != LYlines ||
- HTMainText->cols != LYcols);
+ HTMainText->keypad_mode != keypad_mode ||
+ HTMainText->disp_cols != DISPLAY_COLS);
}
#endif
@@ -6492,6 +8292,14 @@ PUBLIC int HText_LastLineSize ARGS2(
return HText_TrueLineSize(text->last_line, text, IgnoreSpaces);
}
+PUBLIC int HText_LastLineOffset ARGS1(
+ HText *, text)
+{
+ if (!text || !text->last_line)
+ return 0;
+ return text->last_line->offset;
+}
+
PUBLIC int HText_PreviousLineSize ARGS2(
HText *, text,
BOOL, IgnoreSpaces)
@@ -6518,13 +8326,13 @@ PRIVATE int HText_TrueLineSize ARGS3(
if (IgnoreSpaces) {
for (i = 0; i < line->size; i++) {
- if (!IsSpecialAttrChar((unsigned char)line->data[i]) &&
+ if (!IsSpecialAttrChar(UCH(line->data[i])) &&
(!(text && text->T.output_utf8) ||
- (unsigned char)line->data[i] < 128 ||
- ((unsigned char)(line->data[i] & 0xc0) == 0xc0)) &&
- !isspace((unsigned char)line->data[i]) &&
- (unsigned char)line->data[i] != HT_NON_BREAK_SPACE &&
- (unsigned char)line->data[i] != HT_EN_SPACE) {
+ UCH(line->data[i]) < 128 ||
+ (UCH((line->data[i] & 0xc0)) == 0xc0)) &&
+ !isspace(UCH(line->data[i])) &&
+ UCH(line->data[i]) != HT_NON_BREAK_SPACE &&
+ UCH(line->data[i]) != HT_EN_SPACE) {
true_size++;
}
}
@@ -6532,8 +8340,8 @@ PRIVATE int HText_TrueLineSize ARGS3(
for (i = 0; i < line->size; i++) {
if (!IsSpecialAttrChar(line->data[i]) &&
(!(text && text->T.output_utf8) ||
- (unsigned char)line->data[i] < 128 ||
- ((unsigned char)(line->data[i] & 0xc0) == 0xc0))) {
+ UCH(line->data[i]) < 128 ||
+ (UCH(line->data[i] & 0xc0) == 0xc0))) {
true_size++;
}
}
@@ -6583,8 +8391,6 @@ PUBLIC void HText_RemovePreviousLine ARGS1(
previous = line->prev;
previous->next = text->last_line;
text->last_line->prev = previous;
- text->chars -= ((data && *data == '\0') ?
- 1 : strlen(line->data) + 1);
text->Lines--;
FREE(line);
}
@@ -6614,10 +8420,10 @@ PUBLIC int HText_getCurrentColumn ARGS1(
PUBLIC int HText_getMaximumColumn ARGS1(
HText *, text)
{
- int column = (LYcols-2);
+ int column = (DISPLAY_COLS-2);
if (text) {
- column = ((int)text->style->rightIndent ? (LYcols-2) :
- ((LYcols-1) - (int)text->style->rightIndent));
+ column = ((int)text->style->rightIndent ? (DISPLAY_COLS-2) :
+ ((DISPLAY_COLS-1) - (int)text->style->rightIndent));
}
return column;
}
@@ -6650,7 +8456,7 @@ PUBLIC void HText_setTabID ARGS2(
cur = last;
}
if (!Tab) { /* New name. Create a new node */
- Tab = (HTTabID *)calloc(1, sizeof(HTTabID));
+ Tab = typecalloc(HTTabID);
if (Tab == NULL)
outofmem(__FILE__, "HText_setTabID");
HTList_addObject(cur, Tab);
@@ -6839,7 +8645,7 @@ PUBLIC void HText_beginForm ARGS5(
* This will be appended to the forms list kept by the HText object
* if and when we reach a HText_endForm. - kw
*/
- newform = (PerFormInfo *)calloc(1, sizeof(PerFormInfo));
+ newform = typecalloc(PerFormInfo);
if (newform == NULL)
outofmem(__FILE__,"HText_beginForm");
newform->number = HTFormNumber;
@@ -6847,14 +8653,14 @@ PUBLIC void HText_beginForm ARGS5(
PerFormInfo_free(HTCurrentForm); /* shouldn't happen here - kw */
HTCurrentForm = newform;
- CTRACE(tfp, "BeginForm: action:%s Method:%d%s%s%s%s%s%s\n",
+ CTRACE((tfp, "BeginForm: action:%s Method:%d%s%s%s%s%s%s\n",
HTFormAction, HTFormMethod,
(HTFormTitle ? " Title:" : ""),
(HTFormTitle ? HTFormTitle : ""),
(HTFormEnctype ? " Enctype:" : ""),
(HTFormEnctype ? HTFormEnctype : ""),
(HTFormAcceptCharset ? " Accept-charset:" : ""),
- (HTFormAcceptCharset ? HTFormAcceptCharset : ""));
+ (HTFormAcceptCharset ? HTFormAcceptCharset : "")));
}
PUBLIC void HText_endForm ARGS1(
@@ -6912,7 +8718,7 @@ PUBLIC void HText_endForm ARGS1(
HTList_appendObject(text->forms, HTCurrentForm);
HTCurrentForm = NULL;
} else {
- CTRACE(tfp, "endForm: HTCurrentForm is missing!\n");
+ CTRACE((tfp, "endForm: HTCurrentForm is missing!\n"));
}
FREE(HTCurSelectGroup);
@@ -6932,38 +8738,38 @@ PUBLIC void HText_beginSelect ARGS4(
BOOLEAN, multiple,
char *, size)
{
- /*
- * Save the group name.
- */
- StrAllocCopy(HTCurSelectGroup, name);
- HTCurSelectGroupCharset = name_cs;
+ /*
+ * Save the group name.
+ */
+ StrAllocCopy(HTCurSelectGroup, name);
+ HTCurSelectGroupCharset = name_cs;
- /*
- * If multiple then all options are actually checkboxes.
- */
- if (multiple)
- HTCurSelectGroupType = F_CHECKBOX_TYPE;
- /*
- * If not multiple then all options are radio buttons.
- */
- else
- HTCurSelectGroupType = F_RADIO_TYPE;
+ /*
+ * If multiple then all options are actually checkboxes.
+ */
+ if (multiple)
+ HTCurSelectGroupType = F_CHECKBOX_TYPE;
+ /*
+ * If not multiple then all options are radio buttons.
+ */
+ else
+ HTCurSelectGroupType = F_RADIO_TYPE;
/*
* Length of an option list.
*/
StrAllocCopy(HTCurSelectGroupSize, size);
- CTRACE(tfp,"HText_beginSelect: name=%s type=%d size=%s\n",
+ CTRACE((tfp,"HText_beginSelect: name=%s type=%d size=%s\n",
((HTCurSelectGroup == NULL) ?
"<NULL>" : HTCurSelectGroup),
HTCurSelectGroupType,
((HTCurSelectGroupSize == NULL) ?
- "<NULL>" : HTCurSelectGroupSize));
- CTRACE(tfp,"HText_beginSelect: name_cs=%d \"%s\"\n",
+ "<NULL>" : HTCurSelectGroupSize)));
+ CTRACE((tfp,"HText_beginSelect: name_cs=%d \"%s\"\n",
HTCurSelectGroupCharset,
(HTCurSelectGroupCharset >= 0 ?
- LYCharSet_UC[HTCurSelectGroupCharset].MIMEname : "<UNKNOWN>"));
+ LYCharSet_UC[HTCurSelectGroupCharset].MIMEname : "<UNKNOWN>")));
}
/*
@@ -6988,7 +8794,7 @@ PUBLIC int HText_getOptionNum ARGS1(
for (op = a->input_field->select_list; op; op = op->next)
n++;
- CTRACE(tfp, "HText_getOptionNum: Got number '%d'.\n", n);
+ CTRACE((tfp, "HText_getOptionNum: Got number '%d'.\n", n));
return(n);
}
@@ -7005,7 +8811,7 @@ PRIVATE char * HText_skipOptionNumPrefix ARGS1(
/*
* Check if we are in the correct keypad mode.
*/
- if (keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED) {
+ if (keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED) {
/*
* Skip the option number embedded in the option name so the
* extra chars won't mess up cgi scripts processing the value.
@@ -7017,8 +8823,8 @@ PRIVATE char * HText_skipOptionNumPrefix ARGS1(
char *cp = opname;
if ((cp && *cp && *cp++ == '(') &&
- *cp && isdigit(*cp++)) {
- while (*cp && isdigit(*cp))
+ *cp && isdigit(UCH(*cp++))) {
+ while (*cp && isdigit(UCH(*cp)))
++cp;
if (*cp && *cp++ == ')') {
int i = (cp - opname);
@@ -7065,21 +8871,21 @@ PUBLIC char * HText_setLastOptionValue ARGS7(
if (!(text && text->last_anchor &&
text->last_anchor->link_type == INPUT_ANCHOR)) {
- CTRACE(tfp, "HText_setLastOptionValue: invalid call! value:%s!\n",
- (value ? value : "<NULL>"));
+ CTRACE((tfp, "HText_setLastOptionValue: invalid call! value:%s!\n",
+ (value ? value : "<NULL>")));
return NULL;
}
- CTRACE(tfp, "Entering HText_setLastOptionValue: value:%s, checked:%s\n",
- value, (checked ? "on" : "off"));
+ CTRACE((tfp, "Entering HText_setLastOptionValue: value:%s, checked:%s\n",
+ value, (checked ? "on" : "off")));
/*
* Strip end spaces, newline is also whitespace.
*/
if (*value) {
cp = &value[strlen(value)-1];
- while ((cp >= value) && (isspace((unsigned char)*cp) ||
- IsSpecialAttrChar((unsigned char)*cp)))
+ while ((cp >= value) && (isspace(UCH(*cp)) ||
+ IsSpecialAttrChar(UCH(*cp))))
cp--;
*(cp+1) = '\0';
}
@@ -7088,20 +8894,20 @@ PUBLIC char * HText_setLastOptionValue ARGS7(
* Find first non space
*/
cp = value;
- while (isspace((unsigned char)*cp) ||
- IsSpecialAttrChar((unsigned char)*cp))
+ while (isspace(UCH(*cp)) ||
+ IsSpecialAttrChar(UCH(*cp)))
cp++;
if (HTCurSelectGroupType == F_RADIO_TYPE &&
LYSelectPopups &&
- keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED) {
+ keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED) {
/*
* Collapse any space between the popup option
* prefix and actual value. - FM
*/
if ((cp1 = HText_skipOptionNumPrefix(cp)) > cp) {
i = 0, j = (cp1 - cp);
- while (isspace((unsigned char)cp1[i]) ||
- IsSpecialAttrChar((unsigned char)cp1[i])) {
+ while (isspace(UCH(cp1[i])) ||
+ IsSpecialAttrChar(UCH(cp1[i]))) {
i++;
}
if (i > 0) {
@@ -7148,15 +8954,15 @@ PUBLIC char * HText_setLastOptionValue ARGS7(
* No option items yet.
*/
if (text->last_anchor->input_field->type != F_OPTION_LIST_TYPE) {
- CTRACE(tfp, "HText_setLastOptionValue: last input_field not F_OPTION_LIST_TYPE (%d)\n",
- F_OPTION_LIST_TYPE);
- CTRACE(tfp, " but %d, ignoring!\n",
- text->last_anchor->input_field->type);
+ CTRACE((tfp, "HText_setLastOptionValue: last input_field not F_OPTION_LIST_TYPE (%d)\n",
+ F_OPTION_LIST_TYPE));
+ CTRACE((tfp, " but %d, ignoring!\n",
+ text->last_anchor->input_field->type));
return NULL;
}
new_ptr = text->last_anchor->input_field->select_list =
- (OptionType *)calloc(1, sizeof(OptionType));
+ typecalloc(OptionType);
if (new_ptr == NULL)
outofmem(__FILE__, "HText_setLastOptionValue");
@@ -7164,12 +8970,11 @@ PUBLIC char * HText_setLastOptionValue ARGS7(
} else {
while (op_ptr->next) {
number++;
- op_ptr=op_ptr->next;
+ op_ptr = op_ptr->next;
}
number++; /* add one more */
- op_ptr->next = new_ptr =
- (OptionType *)calloc(1, sizeof(OptionType));
+ op_ptr->next = new_ptr = typecalloc(OptionType);
if (new_ptr == NULL)
outofmem(__FILE__, "HText_setLastOptionValue");
}
@@ -7182,22 +8987,26 @@ PUBLIC char * HText_setLastOptionValue ARGS7(
* changed the string. - kw
*/
cp = value;
- while (isspace((unsigned char)*cp) ||
- IsSpecialAttrChar((unsigned char)*cp))
+ while (isspace(UCH(*cp)) ||
+ IsSpecialAttrChar(UCH(*cp)))
cp++;
for (i = 0, j = 0; cp[i]; i++) {
if (cp[i] == HT_NON_BREAK_SPACE ||
cp[i] == HT_EN_SPACE) {
cp[j++] = ' ';
} else if (cp[i] != LY_SOFT_HYPHEN &&
- !IsSpecialAttrChar((unsigned char)cp[i])) {
+ !IsSpecialAttrChar(UCH(cp[i]))) {
cp[j++] = cp[i];
}
}
cp[j] = '\0';
if (HTCJK != NOCJK) {
if (cp &&
- (tmp = (unsigned char *)calloc(1, strlen(cp)+1))) {
+ (tmp = typecallocn(unsigned char, strlen(cp)+1)) != 0) {
+#ifdef SH_EX
+ if (tmp == NULL)
+ outofmem(__FILE__, "HText_setLastOptionValue");
+#endif
if (kanji_code == EUC) {
TO_EUC((unsigned char *)cp, tmp);
val_cs = current_char_set;
@@ -7291,24 +9100,24 @@ PUBLIC char * HText_setLastOptionValue ARGS7(
}
if (TRACE) {
- fprintf(tfp,"HText_setLastOptionValue:%s value=%s",
+ CTRACE((tfp, "HText_setLastOptionValue:%s value=%s",
(order == LAST_ORDER) ? " LAST_ORDER" : "",
- value);
- fprintf(tfp," val_cs=%d \"%s\"",
+ value));
+ CTRACE((tfp," val_cs=%d \"%s\"",
val_cs,
(val_cs >= 0 ?
- LYCharSet_UC[val_cs].MIMEname : "<UNKNOWN>"));
+ LYCharSet_UC[val_cs].MIMEname : "<UNKNOWN>")));
if (submit_value) {
- fprintf(tfp, " (submit_val_cs %d \"%s\") submit_value%s=%s\n",
+ CTRACE((tfp, " (submit_val_cs %d \"%s\") submit_value%s=%s\n",
submit_val_cs,
(submit_val_cs >= 0 ?
LYCharSet_UC[submit_val_cs].MIMEname : "<UNKNOWN>"),
(HTCurSelectGroupType == F_CHECKBOX_TYPE) ?
"(ignored)" : "",
- submit_value);
+ submit_value));
}
else {
- fprintf(tfp,"\n");
+ CTRACE((tfp,"\n"));
}
}
return(ret_Value);
@@ -7324,20 +9133,18 @@ PUBLIC int HText_beginInput ARGS3(
BOOL, underline,
InputFieldData *, I)
{
-
- TextAnchor * a = (TextAnchor *) calloc(1, sizeof(*a));
- FormInfo * f = (FormInfo *) calloc(1, sizeof(*f));
+ TextAnchor * a = typecalloc(TextAnchor);
+ FormInfo * f = typecalloc(FormInfo);
CONST char *cp_option = NULL;
char *IValue = NULL;
unsigned char *tmp = NULL;
int i, j;
- CTRACE(tfp,"Entering HText_beginInput\n");
+ CTRACE((tfp, "GridText: Entering HText_beginInput\n"));
if (a == NULL || f == NULL)
outofmem(__FILE__, "HText_beginInput");
- a->start = text->chars + text->last_line->size;
a->inUnderline = underline;
a->line_num = text->Lines;
a->line_pos = text->last_line->size;
@@ -7415,7 +9222,7 @@ PUBLIC int HText_beginInput ARGS3(
if (I->value)
StrAllocCopy(IValue, I->value);
if (IValue && HTCJK != NOCJK) {
- if ((tmp = (unsigned char *)calloc(1, (strlen(IValue) + 1)))) {
+ if ((tmp = typecallocn(unsigned char, strlen(IValue) + 1)) != 0) {
if (kanji_code == EUC) {
TO_EUC((unsigned char *)IValue, tmp);
I->value_cs = current_char_set;
@@ -7469,7 +9276,7 @@ PUBLIC int HText_beginInput ARGS3(
* Leave at zero for option lists.
*/
if (f->size == 0 && cp_option == NULL) {
- f->size = 20; /* default */
+ f->size = 20; /* default */
}
} else {
f->size = 20; /* default */
@@ -7521,6 +9328,7 @@ PUBLIC int HText_beginInput ARGS3(
f->type = F_RANGE_TYPE;
} else if (!strcasecomp(I->type,"file")) {
f->type = F_FILE_TYPE;
+ CTRACE((tfp, "ok, got a file uploader\n"));
} else if (!strcasecomp(I->type,"keygen")) {
f->type = F_KEYGEN_TYPE;
} else {
@@ -7551,8 +9359,8 @@ PUBLIC int HText_beginInput ARGS3(
/*
* Error! NAME must be present.
*/
- CTRACE(tfp,
- "GridText: No name present in input field; not displaying\n");
+ CTRACE((tfp,
+ "GridText: No name present in input field; not displaying\n"));
FREE(a);
FREE(f);
FREE(IValue);
@@ -7631,7 +9439,7 @@ PUBLIC int HText_beginInput ARGS3(
} else if (f->type == F_RADIO_TYPE || f->type == F_CHECKBOX_TYPE) {
f->size=3;
if (IValue == NULL)
- StrAllocCopy(f->value, (f->type == F_CHECKBOX_TYPE ? "on" : ""));
+ StrAllocCopy(f->value, (f->type == F_CHECKBOX_TYPE ? "on" : ""));
}
FREE(IValue);
@@ -7669,20 +9477,22 @@ PUBLIC int HText_beginInput ARGS3(
* for types that are not yet implemented.
*/
case F_HIDDEN_TYPE:
+#ifndef EXP_FILE_UPLOAD
case F_FILE_TYPE:
+#endif
case F_RANGE_TYPE:
case F_KEYGEN_TYPE:
a->number = 0;
break;
default:
- if (keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED)
+ if (keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED)
a->number = ++(text->last_anchor_number);
else
a->number = 0;
break;
}
- if (keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED && a->number > 0) {
+ if (keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED && a->number > 0) {
char marker[16];
if (f->type != F_OPTION_LIST_TYPE)
@@ -7698,7 +9508,6 @@ PUBLIC int HText_beginInput ARGS3(
* Add option list designation char.
*/
HText_appendCharacter(text, '[');
- a->start = text->chars + text->last_line->size;
a->line_num = text->Lines;
a->line_pos = text->last_line->size;
}
@@ -7723,16 +9532,18 @@ PUBLIC int HText_beginInput ARGS3(
* text entry lines can be long, and will be scrolled
* horizontally within the editing window. - FM
*/
- MaximumSize = (LYcols - 1) -
+ MaximumSize = (WRAP_COLS(text) - 1) -
(int)text->style->leftIndent -
(int)text->style->rightIndent;
- /*
- * If we are numbering form links, take that into
- * account as well. - FM
- */
- if (keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED)
- MaximumSize -= ((a->number/10) + 3);
+ /* If we are numbering form links, place is taken by [nn] */
+ if (keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED)
+ MaximumSize -= (a->number >= 10 /*Buggy if 1e6 links, sowhat?*/
+ ? (a->number >= 100
+ ? (a->number >= 1000
+ ? (a->number >= 10000
+ ? (a->number >= 100000
+ ? 6 : 5) : 4) : 3) : 2) : 1) + 2;
if (f->size > MaximumSize)
f->size = MaximumSize;
@@ -7751,8 +9562,8 @@ PUBLIC int HText_beginInput ARGS3(
* are types with small placeholders, and/or are a
* type which is handled via a popup window. - FM
*/
- if (f->size > LYcols-10)
- f->size = LYcols-10; /* maximum */
+ if (f->size > WRAP_COLS(text)-10)
+ f->size = WRAP_COLS(text)-10; /* maximum */
break;
}
@@ -7778,27 +9589,27 @@ PUBLIC int HText_beginInput ARGS3(
text->forms = HTList_new();
}
} else {
- CTRACE(tfp, "beginInput: HTCurrentForm is missing!\n");
+ CTRACE((tfp, "beginInput: HTCurrentForm is missing!\n"));
}
- CTRACE(tfp, "Input link: name=%s\nvalue=%s\nsize=%d\n",
+ CTRACE((tfp, "Input link: name=%s\nvalue=%s\nsize=%d\n",
f->name,
((f->value != NULL) ? f->value : ""),
- f->size);
- CTRACE(tfp, "Input link: name_cs=%d \"%s\" (from %d \"%s\")\n",
+ f->size));
+ CTRACE((tfp, "Input link: name_cs=%d \"%s\" (from %d \"%s\")\n",
f->name_cs,
(f->name_cs >= 0 ?
LYCharSet_UC[f->name_cs].MIMEname : "<UNKNOWN>"),
I->name_cs,
(I->name_cs >= 0 ?
- LYCharSet_UC[I->name_cs].MIMEname : "<UNKNOWN>"));
- CTRACE(tfp, " value_cs=%d \"%s\" (from %d \"%s\")\n",
+ LYCharSet_UC[I->name_cs].MIMEname : "<UNKNOWN>")));
+ CTRACE((tfp, " value_cs=%d \"%s\" (from %d \"%s\")\n",
f->value_cs,
(f->value_cs >= 0 ?
LYCharSet_UC[f->value_cs].MIMEname : "<UNKNOWN>"),
I->value_cs,
(I->value_cs >= 0 ?
- LYCharSet_UC[I->value_cs].MIMEname : "<UNKNOWN>"));
+ LYCharSet_UC[I->value_cs].MIMEname : "<UNKNOWN>")));
/*
* Return the SIZE of the input field.
@@ -7905,7 +9716,15 @@ PRIVATE int find_best_target_cs ARGS3(
return (-1);
}
-PUBLIC void HText_SubmitForm ARGS4(
+/*
+ * HText_SubmitForm - generate submit data from form fields.
+ * For mailto forms, send the data.
+ * For other methods, set fields in structure pointed to by doc
+ * appropriately for next request.
+ * Returns 1 if *doc set appropriately for next request,
+ * 0 otherwise. - kw
+ */
+PUBLIC int HText_SubmitForm ARGS4(
FormInfo *, submit_item,
document *, doc,
char *, link_name,
@@ -7925,6 +9744,7 @@ PUBLIC void HText_SubmitForm ARGS4(
BOOLEAN SemiColon = FALSE;
char *Boundary = NULL;
char *MultipartContentType = NULL;
+ char *content_type_out = NULL;
int target_cs = -1;
CONST char *out_csname;
CONST char *target_csname = NULL;
@@ -7939,18 +9759,18 @@ PUBLIC void HText_SubmitForm ARGS4(
char *copied_val_used = NULL;
char *copied_name_used = NULL;
- CTRACE(tfp, "FIXME:SubmitForm\n");
+ CTRACE((tfp, "SubmitForm\n link_name=%s\n link_value=%s\n", link_name, link_value));
if (!HTMainText)
- return;
+ return 0;
thisform = HTList_objectAt(HTMainText->forms, form_number - 1);
/* Sanity check */
if (!thisform) {
- CTRACE(tfp, "SubmitForm: form %d not in HTMainText's list!\n",
- form_number);
+ CTRACE((tfp, "SubmitForm: form %d not in HTMainText's list!\n",
+ form_number));
} else if (thisform->number != form_number) {
- CTRACE(tfp, "SubmitForm: failed sanity check, %d!=%d !\n",
- thisform->number, form_number);
+ CTRACE((tfp, "SubmitForm: failed sanity check, %d!=%d !\n",
+ thisform->number, form_number));
thisform = NULL;
}
@@ -7961,10 +9781,10 @@ PUBLIC void HText_SubmitForm ARGS4(
if ((submit_item->submit_method == URL_MAIL_METHOD) &&
strncmp(submit_item->submit_action, "mailto:", 7)) {
HTAlert(BAD_FORM_MAILTO);
- return;
+ return 0;
}
} else {
- return;
+ return 0;
}
/*
@@ -8051,7 +9871,8 @@ PUBLIC void HText_SubmitForm ARGS4(
anchor_ptr = HTMainText->first_anchor;
while (anchor_ptr) {
if (anchor_ptr->link_type == INPUT_ANCHOR) {
- if (anchor_ptr->input_field->number == form_number) {
+ if (anchor_ptr->input_field->number == form_number &&
+ !anchor_ptr->input_field->disabled) {
char *p;
char * val;
@@ -8065,7 +9886,7 @@ PUBLIC void HText_SubmitForm ARGS4(
p && *p && !(field_has_8bit && field_has_special);
p++)
if ((*p == HT_NON_BREAK_SPACE) ||
- (*p == HT_EN_SPACE) ||
+ (*p == HT_EN_SPACE) ||
(*p == LY_SOFT_HYPHEN)) {
field_has_special = YES;
} else if ((*p & 0x80) != 0) {
@@ -8164,20 +9985,21 @@ PUBLIC void HText_SubmitForm ARGS4(
} else {
/*
* We are submitting POST content to a server,
- * so load the post_content_type element. - FM
+ * so load content_type_out. This will be put in
+ * the post_content_type element if all goes well. - FM, kw
*/
if (SemiColon == TRUE) {
- StrAllocCopy(doc->post_content_type,
+ StrAllocCopy(content_type_out,
"application/sgml-form-urlencoded");
} else if (PlainText == TRUE) {
- StrAllocCopy(doc->post_content_type,
+ StrAllocCopy(content_type_out,
"text/plain");
} else if (Boundary != NULL) {
- StrAllocCopy(doc->post_content_type,
+ StrAllocCopy(content_type_out,
"multipart/form-data; boundary=");
- StrAllocCat(doc->post_content_type, Boundary);
+ StrAllocCat(content_type_out, Boundary);
} else {
- StrAllocCopy(doc->post_content_type,
+ StrAllocCopy(content_type_out,
"application/x-www-form-urlencoded");
}
@@ -8208,8 +10030,8 @@ PUBLIC void HText_SubmitForm ARGS4(
strcmp(target_csname, "iso-8859-1"))) ||
(!HTMainText->node_anchor->charset &&
target_cs != UCLYhndl_for_unspec)) {
- StrAllocCat(doc->post_content_type, "; charset=");
- StrAllocCat(doc->post_content_type, target_csname);
+ StrAllocCat(content_type_out, "; charset=");
+ StrAllocCat(content_type_out, target_csname);
}
}
} else {
@@ -8217,12 +10039,11 @@ PUBLIC void HText_SubmitForm ARGS4(
_user_message(
CANNOT_TRANSCODE_FORM,
target_csname ? target_csname : "UNKNOWN");
- sleep(AlertSecs);
+ LYSleepAlert();
}
}
}
-
out_csname = target_csname;
/*
@@ -8234,7 +10055,8 @@ PUBLIC void HText_SubmitForm ARGS4(
*/
while (anchor_ptr) {
if (anchor_ptr->link_type == INPUT_ANCHOR) {
- if (anchor_ptr->input_field->number == form_number) {
+ if (anchor_ptr->input_field->number == form_number &&
+ !anchor_ptr->input_field->disabled) {
char *p;
int out_cs;
form_ptr = anchor_ptr->input_field;
@@ -8250,29 +10072,37 @@ PUBLIC void HText_SubmitForm ARGS4(
case F_IMAGE_SUBMIT_TYPE:
if (!(form_ptr->name && *form_ptr->name != '\0' &&
!strcmp(form_ptr->name, link_name))) {
- CTRACE(tfp,
- "SubmitForm: skipping submit field with ");
- CTRACE(tfp, "name \"%s\" for link_name \"%s\", %s.\n",
+ CTRACE((tfp,
+ "SubmitForm: skipping submit field with "));
+ CTRACE((tfp, "name \"%s\" for link_name \"%s\", %s.\n",
form_ptr->name ? form_ptr->name : "???",
link_name ? link_name : "???",
(form_ptr->name && *form_ptr->name) ?
- "not current link" : "no field name");
+ "not current link" : "no field name"));
break;
}
if (!(form_ptr->type == F_TEXT_SUBMIT_TYPE ||
(form_ptr->value && *form_ptr->value != '\0' &&
!strcmp(form_ptr->value, link_value)))) {
- if (TRACE) {
- fprintf(tfp,
- "SubmitForm: skipping submit field with ");
- fprintf(tfp,
- "name \"%s\" for link_name \"%s\", %s!\n",
- form_ptr->name ? form_ptr->name : "???",
- link_name ? link_name : "???",
- "values are different");
- }
+ CTRACE((tfp,
+ "SubmitForm: skipping submit field with "));
+ CTRACE((tfp,
+ "name \"%s\" for link_name \"%s\", %s!\n",
+ form_ptr->name ? form_ptr->name : "???",
+ link_name ? link_name : "???",
+ "values are different"));
break;
}
+ /* FALLTHRU */
+
+#ifdef EXP_FILE_UPLOAD
+ case F_FILE_TYPE:
+ CTRACE((tfp, "I'd submit %s (from %s), but you've not finished it\n", form_ptr->value, form_ptr->name));
+ name_used = (form_ptr->name ? form_ptr->name : "");
+ val_used = (form_ptr->value ? form_ptr->value : "");
+ break;
+#endif
+
/* fall through */
case F_RADIO_TYPE:
case F_CHECKBOX_TYPE:
@@ -8315,7 +10145,7 @@ PUBLIC void HText_SubmitForm ARGS4(
success = LYUCTranslateBackFormData(&copied_val_used,
form_ptr->value_cs,
target_cs, PlainText);
- CTRACE(tfp, "SubmitForm: field \"%s\" %d %s -> %d %s %s\n",
+ CTRACE((tfp, "SubmitForm: field \"%s\" %d %s -> %d %s %s\n",
form_ptr->name ? form_ptr->name : "",
form_ptr->value_cs,
form_ptr->value_cs >= 0 ?
@@ -8323,15 +10153,15 @@ PUBLIC void HText_SubmitForm ARGS4(
"???",
target_cs,
target_csname ? target_csname : "???",
- success ? "OK" : "FAILED");
+ success ? "OK" : "FAILED"));
if (success) {
val_used = copied_val_used;
}
} else { /* We can use the value directly. */
- CTRACE(tfp, "SubmitForm: field \"%s\" %d %s OK\n",
+ CTRACE((tfp, "SubmitForm: field \"%s\" %d %s OK\n",
form_ptr->name ? form_ptr->name : "",
target_cs,
- target_csname ? target_csname : "???");
+ target_csname ? target_csname : "???"));
success = YES;
}
if (!success) {
@@ -8340,7 +10170,7 @@ PUBLIC void HText_SubmitForm ARGS4(
_user_message(
CANNOT_TRANSCODE_FORM,
target_csname ? target_csname : "UNKNOWN");
- sleep(AlertSecs);
+ LYSleepAlert();
}
out_cs = form_ptr->value_cs;
} else {
@@ -8405,7 +10235,7 @@ PUBLIC void HText_SubmitForm ARGS4(
success = LYUCTranslateBackFormData(&copied_name_used,
form_ptr->name_cs,
target_cs, PlainText);
- CTRACE(tfp, "SubmitForm: name \"%s\" %d %s -> %d %s %s\n",
+ CTRACE((tfp, "SubmitForm: name \"%s\" %d %s -> %d %s %s\n",
form_ptr->name ? form_ptr->name : "",
form_ptr->name_cs,
form_ptr->name_cs >= 0 ?
@@ -8413,7 +10243,7 @@ PUBLIC void HText_SubmitForm ARGS4(
"???",
target_cs,
target_csname ? target_csname : "???",
- success ? "OK" : "FAILED");
+ success ? "OK" : "FAILED"));
if (success) {
name_used = copied_name_used;
}
@@ -8427,10 +10257,10 @@ PUBLIC void HText_SubmitForm ARGS4(
}
}
} else { /* We can use the name directly. */
- CTRACE(tfp, "SubmitForm: name \"%s\" %d %s OK\n",
+ CTRACE((tfp, "SubmitForm: name \"%s\" %d %s OK\n",
form_ptr->name ? form_ptr->name : "",
target_cs,
- target_csname ? target_csname : "???");
+ target_csname ? target_csname : "???"));
success = YES;
if (Boundary) {
StrAllocCopy(copied_name_used, name_used);
@@ -8442,7 +10272,7 @@ PUBLIC void HText_SubmitForm ARGS4(
_user_message(
CANNOT_TRANSCODE_FORM,
target_csname ? target_csname : "UNKNOWN");
- sleep(AlertSecs);
+ LYSleepAlert();
}
}
if (Boundary) {
@@ -8464,8 +10294,9 @@ PUBLIC void HText_SubmitForm ARGS4(
break;
default:
- CTRACE(tfp, "SubmitForm: What type is %d?\n",
- form_ptr->type);
+ CTRACE((tfp, "SubmitForm: What type is %d?\n",
+ form_ptr->type));
+ break;
}
switch(form_ptr->type) {
@@ -8473,12 +10304,93 @@ PUBLIC void HText_SubmitForm ARGS4(
case F_RESET_TYPE:
break;
+#ifdef EXP_FILE_UPLOAD
+ case F_FILE_TYPE:
+ {
+ int cdisp_name_startpos = 0;
+ FILE *fd;
+ int bytes;
+ char buffer[257];
+
+ CTRACE((tfp, "Ok, about to convert %s to mime/thingy\n", form_ptr->value));
+ if (first_one) {
+ if (Boundary) {
+ HTSprintf(&query, "--%s\r\n", Boundary);
+ }
+ first_one = FALSE;
+ } else {
+ if (PlainText) {
+ HTSprintf(&query, "\n");
+ } else if (SemiColon) {
+ HTSprintf(&query, ";");
+ } else if (Boundary) {
+ HTSprintf(&query, "\r\n--%s\r\n", Boundary);
+ } else {
+ HTSprintf(&query, "&");
+ }
+ }
+
+ if (PlainText) {
+ StrAllocCopy(escaped1, name_used);
+ } else if (Boundary) {
+ StrAllocCopy(escaped1,
+ "Content-Disposition: form-data; name=");
+ cdisp_name_startpos = strlen(escaped1);
+ StrAllocCat(escaped1, name_used);
+ StrAllocCat(escaped1, "; filename=\"");
+ StrAllocCat(escaped1, val_used);
+ StrAllocCat(escaped1, "\"");
+ if (MultipartContentType) {
+ StrAllocCat(escaped1, MultipartContentType);
+ StrAllocCat(escaped1, "\r\nContent-Transfer-Encoding: base64");
+ }
+ StrAllocCat(escaped1, "\r\n\r\n");
+ } else {
+ escaped1 = HTEscapeSP(name_used, URL_XALPHAS);
+ }
+
+ if ((fd = fopen(val_used, BIN_R)) == 0) {
+ /* We can't open the file, what do we do? */
+ HTAlert(gettext("Can't open file for uploading"));
+ goto exit_disgracefully;
+ }
+ StrAllocCopy(escaped2, "");
+ while ((bytes = fread(buffer, sizeof(char), 45, fd)) != 0) {
+ char base64buf[128];
+ base64_encode(base64buf, buffer, bytes);
+ StrAllocCat(escaped2, base64buf);
+ }
+ if (ferror(fd)) {
+ /* We got an error reading the file, what do we do? */
+ HTAlert(gettext("Short read from file, problem?"));
+ LYCloseInput(fd);
+ goto exit_disgracefully;
+ }
+ LYCloseInput(fd);
+ /* we need to modify the mime-type here - rp */
+ /* Note: could use LYGetFileInfo for that and for
+ other headers that should be transmitted - kw */
+
+ HTSprintf(&query,
+ "%s%s%s%s%s",
+ escaped1,
+ (Boundary ? "" : "="),
+ (PlainText ? "\n" : ""),
+ escaped2,
+ ((PlainText && *escaped2) ?
+ "\n" : ""));
+ FREE(escaped1);
+ FREE(escaped2);
+ }
+ break;
+#endif /* EXP_FILE_UPLOAD */
+
case F_SUBMIT_TYPE:
case F_TEXT_SUBMIT_TYPE:
case F_IMAGE_SUBMIT_TYPE:
/*
* If it has a non-zero length name (e.g., because
- * it's IMAGE_SUBMIT_TYPE to be handled homologously
+ * its IMAGE_SUBMIT_TYPE is to be handled homologously
* to an image map, or a SUBMIT_TYPE in a set of
* multiple submit buttons, or a single type="text"
* that's been converted to a TEXT_SUBMIT_TYPE),
@@ -8665,7 +10577,7 @@ PUBLIC void HText_SubmitForm ARGS4(
if (Boundary) {
HTSprintf(&query, "--%s\r\n", Boundary);
}
- first_one=FALSE;
+ first_one = FALSE;
} else {
if (PlainText) {
StrAllocCat(query, "\n");
@@ -8704,7 +10616,7 @@ PUBLIC void HText_SubmitForm ARGS4(
} else {
/*
* This is a continuation of a previous textarea
- * add %0a (\n) and the escaped string.
+ * add %0d%0a (\r\n) and the escaped string.
*/
if (escaped2[0] != '\0') {
if (previous_blanks) {
@@ -8716,7 +10628,7 @@ PUBLIC void HText_SubmitForm ARGS4(
} else if (Boundary) {
HTSprintf(&query, "%s\r\n", escaped2);
} else {
- HTSprintf(&query, "%%0a%s", escaped2);
+ HTSprintf(&query, "%%0d%%0a%s", escaped2);
}
} else {
if (PlainText) {
@@ -8724,7 +10636,7 @@ PUBLIC void HText_SubmitForm ARGS4(
} else if (Boundary) {
StrAllocCat(previous_blanks, "\r\n");
} else {
- StrAllocCat(previous_blanks, "%0a");
+ StrAllocCat(previous_blanks, "%0d%0a");
}
}
}
@@ -8809,17 +10721,19 @@ PUBLIC void HText_SubmitForm ARGS4(
}
FREE(previous_blanks);
+ CTRACE((tfp, "QUERY (%d) >> \n%s\n", strlen(query), query));
+
if (submit_item->submit_method == URL_MAIL_METHOD) {
HTUserMsg2(gettext("Submitting %s"), submit_item->submit_action);
- CTRACE(tfp, "\nGridText - mailto_address: %s\n",
- (submit_item->submit_action+7));
- CTRACE(tfp, "GridText - mailto_subject: %s\n",
+ CTRACE((tfp, "\nGridText - mailto_address: %s\n",
+ (submit_item->submit_action+7)));
+ CTRACE((tfp, "GridText - mailto_subject: %s\n",
((submit_item->submit_title &&
*submit_item->submit_title) ?
(submit_item->submit_title) :
(HText_getTitle() ?
- HText_getTitle() : "")));
- CTRACE(tfp,"GridText - mailto_content: %s\n",query);
+ HText_getTitle() : ""))));
+ CTRACE((tfp,"GridText - mailto_content: %s\n",query));
mailform((submit_item->submit_action+7),
((submit_item->submit_title &&
*submit_item->submit_title) ?
@@ -8827,27 +10741,42 @@ PUBLIC void HText_SubmitForm ARGS4(
(HText_getTitle() ?
HText_getTitle() : "")),
query,
- doc->post_content_type);
+ content_type_out);
FREE(query);
- FREE(doc->post_content_type);
- return;
+ FREE(content_type_out);
+ return 0;
} else {
_statusline(SUBMITTING_FORM);
}
if (submit_item->submit_method == URL_POST_METHOD || Boundary) {
StrAllocCopy(doc->post_data, query);
- CTRACE(tfp,"GridText - post_data: %s\n",doc->post_data);
+ FREE(doc->post_content_type);
+ doc->post_content_type = content_type_out; /* don't free c_t_out */
+ CTRACE((tfp,"GridText - post_data: %s\n",doc->post_data));
StrAllocCopy(doc->address, submit_item->submit_action);
FREE(query);
- return;
+ return 1;
} else { /* GET_METHOD */
StrAllocCopy(doc->address, query);
FREE(doc->post_data);
FREE(doc->post_content_type);
+ FREE(content_type_out);
FREE(query);
- return;
+ return 1;
}
+#ifdef EXP_FILE_UPLOAD
+exit_disgracefully:
+ FREE(escaped1);
+ FREE(escaped2);
+ FREE(previous_blanks);
+ FREE(copied_name_used);
+ FREE(copied_val_used);
+ FREE(MultipartContentType);
+ FREE(query);
+ FREE(content_type_out);
+ return 0;
+#endif
}
PUBLIC void HText_DisableCurrentForm NOARGS
@@ -8937,7 +10866,7 @@ PUBLIC BOOLEAN HText_HaveUserChangedForms NOARGS
TextAnchor * anchor_ptr;
if (HTMainText == 0)
- return FALSE;
+ return FALSE;
/*
* Go through list of anchors to check if any value was changed.
@@ -9094,7 +11023,7 @@ PUBLIC void HText_setToolbar ARGS1(
PUBLIC BOOL HText_hasToolbar ARGS1(
HText *, text)
{
- return ((text && text->toolbar) ? TRUE : FALSE);
+ return (BOOL) ((text && text->toolbar) ? TRUE : FALSE);
}
PUBLIC void HText_setNoCache ARGS1(
@@ -9108,13 +11037,13 @@ PUBLIC void HText_setNoCache ARGS1(
PUBLIC BOOL HText_hasNoCacheSet ARGS1(
HText *, text)
{
- return ((text && text->no_cache) ? TRUE : FALSE);
+ return (BOOL) ((text && text->no_cache) ? TRUE : FALSE);
}
PUBLIC BOOL HText_hasUTF8OutputSet ARGS1(
HText *, text)
{
- return ((text && text->T.output_utf8) ? TRUE : FALSE);
+ return (BOOL) ((text && text->T.output_utf8) ? TRUE : FALSE);
}
/*
@@ -9132,6 +11061,8 @@ PUBLIC void HText_setKcode ARGS3(
CONST char *, charset,
LYUCcharset *, p_in)
{
+ BOOL explicit;
+
if (!text)
return;
@@ -9141,6 +11072,7 @@ PUBLIC void HText_setKcode ARGS3(
if (!charset && !p_in) {
return;
}
+ explicit = charset ? TRUE : FALSE;
/*
** If no explicit charset string, use the implied one. - kw
*/
@@ -9160,14 +11092,21 @@ PUBLIC void HText_setKcode ARGS3(
** so check the charset value and set the text->kcode element
** appropriately. - FM
*/
- if (!strcmp(charset, "shift_jis") ||
- !strcmp(charset, "x-shift-jis")) {
+ /* If charset isn't specified explicitely nor assumed,
+ * p_in->MIMEname would be set as display charset.
+ * So text->kcode sholud be set as SJIS or EUC here only if charset
+ * is specified explicitely, otherwise text->kcode would cause
+ * mishandling Japanese strings. -- TH
+ */
+ if (explicit && (!strcmp(charset, "shift_jis") ||
+ !strcmp(charset, "x-sjis") || /* 1997/11/28 (Fri) 18:11:33 */
+ !strcmp(charset, "x-shift-jis")))
+ {
text->kcode = SJIS;
- } else if ((p_in && (p_in->enc == UCT_ENC_CJK)) ||
+ } else if (explicit && ((p_in && (p_in->enc == UCT_ENC_CJK)) ||
+ !strcmp(charset, "x-euc") || /* 1997/11/28 (Fri) 18:11:24 */
!strcmp(charset, "euc-jp") ||
!strncmp(charset, "x-euc-", 6) ||
- !strcmp(charset, "iso-2022-jp") ||
- !strcmp(charset, "iso-2022-jp-2") ||
!strcmp(charset, "euc-kr") ||
!strcmp(charset, "iso-2022-kr") ||
!strcmp(charset, "big5") ||
@@ -9175,7 +11114,7 @@ PUBLIC void HText_setKcode ARGS3(
!strcmp(charset, "euc-cn") ||
!strcmp(charset, "gb2312") ||
!strncmp(charset, "cn-gb", 5) ||
- !strcmp(charset, "iso-2022-cn")) {
+ !strcmp(charset, "iso-2022-cn"))) {
text->kcode = EUC;
} else {
/*
@@ -9188,6 +11127,16 @@ PUBLIC void HText_setKcode ARGS3(
HTCJK = NOCJK;
}
}
+ if (explicit)
+ text->specified_kcode = text->kcode;
+ else {
+ if (UCAssume_MIMEcharset) {
+ if (!strcmp(UCAssume_MIMEcharset, "euc-jp"))
+ text->kcode = text->specified_kcode = EUC;
+ else if (!strcmp(UCAssume_MIMEcharset, "shift_jis"))
+ text->kcode = text->specified_kcode = SJIS;
+ }
+ }
return;
}
@@ -9322,6 +11271,8 @@ PUBLIC BOOL HText_AreDifferent ARGS2(
return(FALSE);
}
+#define CanTrimTextArea(c) \
+ (LYtrimInputFields ? isspace(c) : ((c) == '\r' || (c) == '\n'))
/*
* Cleanup new lines coming into a TEXTAREA from an external editor, or a
@@ -9349,7 +11300,7 @@ PRIVATE void cleanup_line_for_textarea ARGS2(
* Whack off trailing whitespace from the line.
*/
for (i = len, p = line + (len - 1); i != 0; p--, i--) {
- if (isspace (*p))
+ if (CanTrimTextArea(UCH(*p)))
*p = '\0';
else
break;
@@ -9403,17 +11354,18 @@ PRIVATE void cleanup_line_for_textarea ARGS2(
* multibyte character set support, consider yourself to have been
* warned.]
*/
- for (p = line, s = tbuf; *s != '\0'; p++, s++)
+ for (p = line, s = tbuf; *s != '\0'; p++, s++) {
#ifndef EBCDIC
- *p = (((unsigned char)*s < (unsigned char)' ') ||
- ((unsigned char)*s == (unsigned char)'\177') ||
- (((unsigned char)*s > (unsigned char)'\177') &&
- ((unsigned char)*s <
- (unsigned char)LYlowest_eightbit[current_char_set])))
- ? SPLAT : *s;
+ *p = ((UCH(*s) < UCH(' ')) ||
+ (UCH(*s) == UCH('\177')) ||
+ ((UCH(*s) > UCH('\177')) &&
+ (UCH(*s) <
+ UCH(LYlowest_eightbit[current_char_set]))))
+ ? (char) SPLAT : *s;
#else
- *p = ((unsigned char)*s < (unsigned char)' ') ? SPLAT : *s;
+ *p = (UCH(*s) < UCH(' ')) ? SPLAT : *s;
#endif
+ }
*p = '\0';
}
@@ -9469,6 +11421,7 @@ PRIVATE int increment_tagged_htline ARGS6(
int n;
int new_n;
int pre_n;
+ int post_n;
int fixup = 0;
@@ -9518,7 +11471,7 @@ PRIVATE int increment_tagged_htline ARGS6(
plx = TRUE;
break;
}
- if (isdigit (*t++) != 0) {
+ if (isdigit(UCH(*t++))) {
n++;
continue;
} else {
@@ -9537,7 +11490,7 @@ PRIVATE int increment_tagged_htline ARGS6(
* nn), one of which is the [tag], and the other being part of
* a document. In such a case, the 1st [nn] string will get
* incremented; the 2nd one won't, which makes it a 50-50 chance
- * of being correct, if and when such an unlikely juxitposition
+ * of being correct, if and when such an unlikely juxtaposition
* of text ever occurs. Further validation tests of the [nnn]
* string are probably not possible, since little of the actual
* anchor-associated-text is retained in the TextAnchor or the
@@ -9559,7 +11512,7 @@ PRIVATE int increment_tagged_htline ARGS6(
/*
* If the number of digits in an existing [tag] increased
* (eg, [99] --> [100], etc), we need to "adjust" its
- * horizontal position, and that of all subsequant tags
+ * horizontal position, and that of all subsequent tags
* that may be on the same line. PITA.
*
* [This seems to work as long as a tag isn't a line
@@ -9577,7 +11530,7 @@ PRIVATE int increment_tagged_htline ARGS6(
* Dunno how to fix that behavior ATT, but at least the
* tag numbers themselves are correct. -KED /\oo/\ ]
*/
- if (new_n -= n) {
+ if ((new_n -= n) != 0) {
nxt_anchor = st_anchor;
while ((nxt_anchor) &&
(nxt_anchor->line_num == a->line_num)) {
@@ -9587,7 +11540,7 @@ PRIVATE int increment_tagged_htline ARGS6(
if (st_anchor) st_anchor = st_anchor->next;
}
}
- }
+ }
/*
* Unfortunately, valid [tag] strings *can* be split across two
@@ -9600,9 +11553,11 @@ PRIVATE int increment_tagged_htline ARGS6(
*
* We use lxbuf[] to deal with the two lines involved.
*/
- if (plx) {
+ pre_n = strlen (p); /* count of 1st part chars in this line */
+ post_n = strlen(ht->next->data);
+ if (plx
+ && (pre_n + post_n + 2 < (int) sizeof(lxbuf))) {
strcpy (lx, p); /* <- 1st part of a possible lx'ing tag */
- pre_n = strlen (p); /* count of 1st part chars in this line */
strcat (lx, ht->next->data); /* tack on NEXT line */
t = lx;
@@ -9613,7 +11568,7 @@ PRIVATE int increment_tagged_htline ARGS6(
* Go hunting again for just digits, followed by tag end ']'.
*/
while (*t != ']') {
- if (isdigit (*t++) != 0) {
+ if (isdigit(UCH(*t++))) {
n++;
continue;
} else {
@@ -9628,7 +11583,9 @@ PRIVATE int increment_tagged_htline ARGS6(
* above], and if it matches, increment it into the buffer,
* along with the 2nd line's text.
*/
- if ((valid) && (n > 0)) {
+ if ((valid)
+ && (n > 0)
+ && (n + post_n + 2) < MAX_LINE) {
val = atoi (lx);
if ((val == *old_val) || (*old_val == 0)) {
if (*old_val != 0)
@@ -9706,7 +11663,7 @@ PRIVATE void insert_new_textarea_anchor ARGS2(
* YAS (Yet Another Struct), but there are too many structs{}
* floating around in here, as it is. IMNSHO.]
*/
- for (htline = HTMainText->last_line->next, i = 0;
+ for (htline = FirstHTLine(HTMainText), i = 0;
anchor->line_num != i; i++) {
htline = htline->next;
if (htline == HTMainText->last_line)
@@ -9717,16 +11674,15 @@ PRIVATE void insert_new_textarea_anchor ARGS2(
* Clone and initialize the struct's needed to add a new TEXTAREA
* anchor.
*/
- if (((a = (TextAnchor *) calloc (1, sizeof(*a))) == 0) ||
- ((f = (FormInfo *) calloc (1, sizeof(*f))) == 0) ||
- ((l = (HTLine *) calloc (1, LINE_SIZE(MAX_LINE))) == 0))
+ if (((a = typecalloc(TextAnchor)) == 0) ||
+ ((f = typecalloc(FormInfo)) == 0) ||
+ ((l = allocHTLine(MAX_LINE)) == 0))
outofmem(__FILE__, "insert_new_textarea_anchor");
/* Init all the fields in the new TextAnchor. */
/* [anything "special" needed based on ->show_anchor value ?] */
a->next = anchor->next;
a->number = anchor->number;
- a->start = anchor->start + anchor->input_field->size + 1;
a->line_pos = anchor->line_pos;
a->extent = anchor->extent;
a->line_num = anchor->line_num + 1;
@@ -9750,21 +11706,21 @@ PRIVATE void insert_new_textarea_anchor ARGS2(
f->maxlength = anchor->input_field->maxlength;
f->no_cache = anchor->input_field->no_cache;
f->disabled = anchor->input_field->disabled;
+ f->value_cs = current_char_set; /* use current setting - kw */
/* Init all the fields in the new HTLine (but see the #if). */
l->next = htline->next;
l->prev = htline;
l->offset = htline->offset;
l->size = htline->size;
- l->split_after = htline->split_after;
- l->bullet = htline->bullet;
- l->expansion_line = TRUE;
#if defined(USE_COLOR_STYLE)
/* dup styles[] if needed [no need in TEXTAREA (?); leave 0's] */
l->numstyles = htline->numstyles;
+ /*we fork the pointers!*/
+ l->styles = htline->styles;
#endif
strcpy (l->data, htline->data);
- if (keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED) {
+ if (keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED) {
a->number++;
increment_tagged_htline (l, a, &lx, &curr_tag, 1, CHOP);
}
@@ -9808,23 +11764,22 @@ PRIVATE void insert_new_textarea_anchor ARGS2(
* --KED 02/13/99
*/
PRIVATE void update_subsequent_anchors ARGS4(
- int, n,
+ int, newlines,
TextAnchor *, start_anchor,
- HTLine *, start_htline,
+ HTLine *, start_htline,
int, start_tag)
{
TextAnchor *anchor;
HTLine *htline = start_htline;
- int form_chars_added = (start_anchor->input_field->size + 1) * n;
- int line_adj = 0;
- int tag_adj = 0;
- int lx = 0;
- int hang = 0; /* for HANG detection of a nasty intermittent */
+ int line_adj = 0;
+ int tag_adj = 0;
+ int lx = 0;
+ int hang = 0; /* for HANG detection of a nasty intermittent */
int hang_detect = 100000; /* ditto */
- CTRACE(tfp, "GridText: adjusting struct's to add %d new line(s)\n", n);
+ CTRACE((tfp, "GridText: adjusting struct's to add %d new line(s)\n", newlines));
/*
* Update numeric fields of the rest of the anchors.
@@ -9836,11 +11791,10 @@ PRIVATE void update_subsequent_anchors ARGS4(
*/
anchor = start_anchor->next; /* begin updating with the NEXT anchor */
while (anchor) {
- if ((keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED) &&
+ if ((keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED) &&
(anchor->number != 0))
- anchor->number += n;
- anchor->line_num += n;
- anchor->start += form_chars_added;
+ anchor->number += newlines;
+ anchor->line_num += newlines;
anchor = anchor->next;
}
@@ -9874,31 +11828,31 @@ PRIVATE void update_subsequent_anchors ARGS4(
* relocating an anchor to the following line, when [tag] digits
* expansion pushes things too far in that direction.]
*/
- if (keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED) {
+ if (keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED) {
anchor = start_anchor->next;
- while (htline != HTMainText->last_line->next) {
+ while (htline != FirstHTLine(HTMainText)) {
while (anchor) {
- if ((anchor->number - n) == start_tag)
+ if ((anchor->number - newlines) == start_tag)
break;
- /*** A HANG (infinite loop) *has* occurred here, with */
- /*** the values of anchor and anchor->next being the */
- /*** the same, OR with anchor->number "magically" and */
- /*** suddenly taking on an anchor-pointer-like value. */
- /*** */
- /*** The same code and same doc have both passed and */
- /*** failed at different times, which indicates some */
- /*** sort of content/html dependency, or some kind of */
- /*** a "race" condition, but I'll be damned if I can */
- /*** find it after tons of CTRACE's, printf()'s, gdb */
- /*** breakpoints and watchpoints, etc. */
- /*** */
- /*** I have added a hang detector (with error msg and */
- /*** beep) here, to break the loop and warn the user, */
- /*** until it can be isolated and fixed. */
- /*** */
- /*** [One UGLY intermittent .. gak ..! 02/22/99 KED] */
+ /*** A HANG (infinite loop) *has* occurred here, with */
+ /*** the values of anchor and anchor->next being the */
+ /*** the same, OR with anchor->number "magically" and */
+ /*** suddenly taking on an anchor-pointer-like value. */
+ /*** */
+ /*** The same code and same doc have both passed and */
+ /*** failed at different times, which indicates some */
+ /*** sort of content/html dependency, or some kind of */
+ /*** a "race" condition, but I'll be damned if I can */
+ /*** find it after tons of CTRACE's, printf()'s, gdb */
+ /*** breakpoints and watchpoints, etc. */
+ /*** */
+ /*** I have added a hang detector (with error msg and */
+ /*** beep) here, to break the loop and warn the user, */
+ /*** until it can be isolated and fixed. */
+ /*** */
+ /*** [One UGLY intermittent .. gak ..! 02/22/99 KED] */
hang++;
if ((anchor == anchor->next) || (hang >= hang_detect))
@@ -9909,7 +11863,8 @@ PRIVATE void update_subsequent_anchors ARGS4(
if (anchor) {
line_adj = increment_tagged_htline (htline, anchor, &lx,
- &start_tag, n, NOCHOP);
+ &start_tag, newlines,
+ NOCHOP);
htline->size += line_adj;
tag_adj += line_adj;
@@ -9922,28 +11877,24 @@ PRIVATE void update_subsequent_anchors ARGS4(
}
}
-exit:
+finish:
/*
* Fixup various global variables.
*/
- nlinks += n;
- HTMainText->Lines += n;
- HTMainText->last_anchor_number += n;
- HTMainText->chars += (form_chars_added + tag_adj);
+ nlinks += newlines;
+ HTMainText->Lines += newlines;
+ HTMainText->last_anchor_number += newlines;
more = HText_canScrollDown();
- CTRACE(tfp, "GridText: TextAnchor and HTLine struct's adjusted\n");
+ CTRACE((tfp, "GridText: TextAnchor and HTLine struct's adjusted\n"));
return;
-hang_detected: /* uglyness has happened; inform user and do the best we can */
+hang_detected: /* ugliness has happened; inform user and do the best we can */
- printf ("\007"); /* beep the user */
- fflush (NULL);
- HTAlert ("Hang Detect: TextAnchor struct corrupted - suggest aborting!");
- HTAlert ("Hang Detect: TextAnchor struct corrupted - suggest aborting!");
- goto exit;
+ HTAlert(gettext("Hang Detect: TextAnchor struct corrupted - suggest aborting!"));
+ goto finish;
}
@@ -9972,6 +11923,7 @@ PUBLIC int HText_ExtEditForm ARGS1(
TextAnchor *start_anchor = NULL;
TextAnchor *end_anchor = NULL;
BOOLEAN firstanchor = TRUE;
+ BOOLEAN wrapalert = FALSE;
char ed_offset[10];
int start_line = 0;
@@ -9987,16 +11939,17 @@ PUBLIC int HText_ExtEditForm ARGS1(
HTLine *htline = NULL;
char *ebuf;
- char *tbuf = NULL;
char *line;
char *lp;
char *cp;
- int match_tag = 0;
+ int match_tag = 0;
int newlines = 0;
- int len;
+ int len, len0, len_in;
+ int wanted_fieldlen_wrap = -1; /* not yet asked; 0 means don't. */
+ char *skip_at = NULL;
+ int skip_num = 0, i;
-
- CTRACE(tfp, "GridText: entered HText_ExtEditForm()\n");
+ CTRACE((tfp, "GridText: entered HText_ExtEditForm()\n"));
ed_temp = (char *) malloc (LY_MAXPATH);
if ((fp = LYOpenTemp (ed_temp, "", "w")) == 0) {
@@ -10051,8 +12004,8 @@ PUBLIC int HText_ExtEditForm ARGS1(
}
LYCloseTempFP (fp);
- CTRACE(tfp, "GridText: TEXTAREA name=|%s| dumped to tempfile\n", areaname);
- CTRACE(tfp, "GridText: invoking editor (%s) on tempfile\n", editor);
+ CTRACE((tfp, "GridText: TEXTAREA name=|%s| dumped to tempfile\n", areaname));
+ CTRACE((tfp, "GridText: invoking editor (%s) on tempfile\n", editor));
/*
* Go edit the TEXTAREA temp file, with the initial editor line
@@ -10061,27 +12014,11 @@ PUBLIC int HText_ExtEditForm ARGS1(
*/
ed_offset[0] = 0; /* pre-ANSI compilers don't initialize aggregates - TD */
if (((entry_line - start_line) > 0) && editor_can_position())
-#ifdef VMS
- sprintf (ed_offset, "-%d", ((entry_line - start_line) + 1));
- HTSprintf0 (&tbuf, "%s %s %s", editor, ed_temp, ed_offset);
-#else
- sprintf (ed_offset, "+%d", ((entry_line - start_line) + 1));
- HTSprintf0 (&tbuf, "%s %s %s", editor, ed_offset, ed_temp);
-#endif
+ sprintf (ed_offset, "%d", ((entry_line - start_line) + 1));
- LYSystem (tbuf); /* finally the editor is called */
+ edit_temporary_file(ed_temp, ed_offset, NULL);
-#ifdef UNIX
- /*
- * Delete backup file, if that's your style.
- */
- HTSprintf0 (&tbuf, "%s~", ed_temp);
- if (stat (tbuf, &stat_info) == 0)
- remove (tbuf);
-#endif
- FREE(tbuf);
-
- CTRACE(tfp, "GridText: returned from editor (%s)\n", editor);
+ CTRACE((tfp, "GridText: returned from editor (%s)\n", editor));
/*
* Read back the edited temp file into our buffer.
@@ -10090,21 +12027,34 @@ PUBLIC int HText_ExtEditForm ARGS1(
!S_ISREG(stat_info.st_mode) ||
((size = stat_info.st_size) == 0)) {
size = 0;
- ebuf = (char *) calloc (1, 1);
+ ebuf = typecalloc (char);
+ if (!ebuf)
+ outofmem(__FILE__, "HText_ExtEditForm");
} else {
- ebuf = (char *) calloc (size + 1, (sizeof(char)));
+ ebuf = typecallocn(char, size + 1);
+ if (!ebuf) {
+ /*
+ * This could be huge - don't exit if we don't have enough
+ * memory for it. With some luck, the user may be even able
+ * to recover the file manually from the temp space while
+ * the lynx session is not over. - kw
+ */
+ free(ed_temp);
+ HTAlwaysAlert(NULL, MEMORY_EXHAUSTED_FILE);
+ return 0;
+ }
fp = fopen (ed_temp, "r");
size = fread (ebuf, 1, size, fp);
- fclose (fp);
+ LYCloseInput (fp);
+ ebuf[size] = '\0'; /* Terminate! - kw */
}
- if (ebuf == 0)
- outofmem(__FILE__, "HText_ExtEditForm");
/*
* Nuke any blank lines from the end of the edited data.
*/
- while ((size != 0) && (isspace (ebuf[size-1]) || (ebuf[size-1] == '\0')))
+ while ((size != 0)
+ && (CanTrimTextArea(UCH(ebuf[size-1])) || (ebuf[size-1] == '\0')))
ebuf[--size] = '\0';
/*
@@ -10116,21 +12066,111 @@ PUBLIC int HText_ExtEditForm ARGS1(
outofmem(__FILE__, "HText_ExtEditForm");
anchor_ptr = start_anchor;
+ if (anchor_ptr->input_field->size <= 4 ||
+ anchor_ptr->input_field->size >= MAX_LINE)
+ wanted_fieldlen_wrap = 0;
- len = 0;
+ len = len_in = 0;
lp = ebuf;
while ((line_cnt <= orig_cnt) || (*lp) || ((len != 0) && (*lp == '\0'))) {
+ if (skip_at) {
+ len0 = skip_at - lp;
+ strncpy(line, lp, len0);
+ line[len0] = '\0';
+ lp = skip_at + skip_num;
+ skip_at = NULL;
+ skip_num = 0;
+ } else {
+ len0 = 0;
+ }
+ line[len0] = '\0';
+
if ((cp = strchr (lp, '\n')) != 0)
- len = cp - lp;
+ len = len_in = cp - lp;
else
- len = strlen (lp);
+ len = len_in = strlen (lp);
+
+
+ if (wanted_fieldlen_wrap < 0 && !wrapalert &&
+ len0+len >= start_anchor->input_field->size &&
+ (cp = strchr(lp, ' ')) != NULL &&
+ (cp-lp) < start_anchor->input_field->size - 1) {
+ LYFixCursesOn("ask for confirmation:");
+ LYerase(); /* don't show previous state */
+ if (HTConfirmDefault(gettext("Wrap lines to fit displayed area?"),
+ NO)) {
+ wanted_fieldlen_wrap = start_anchor->input_field->size - 1;
+ } else {
+ wanted_fieldlen_wrap = 0;
+ }
+ }
+ if (wanted_fieldlen_wrap > 0 && len0+len > wanted_fieldlen_wrap) {
+ for (i = wanted_fieldlen_wrap-len0;
+ i+len0 >= wanted_fieldlen_wrap/4; i--) {
+ if (isspace(UCH(lp[i]))) {
+ len = i + 1;
+ cp = lp + i;
+ if (cp[1] != '\n' &&
+ isspace(UCH(cp[1])) &&
+ !isspace(UCH(cp[2]))) {
+ len++;
+ cp++;
+ }
+ if (!isspace(UCH(cp[1]))) {
+ while (*cp && *cp != '\r' && *cp != '\n' &&
+ (cp - lp) <= len + (3 * wanted_fieldlen_wrap/4))
+ cp++; /* search for next line break */
+ if (*cp == '\r' && cp[1] == '\n')
+ cp++;
+ if (*cp == '\n' &&
+ (cp[1] == '\r' || cp[1] == '\n' ||
+ !isspace(UCH(cp[1])))) {
+ *cp = ' ';
+ while (isspace(UCH(*(cp-1)))) {
+ skip_num++;
+ cp--;
+ }
+ skip_at = cp;
+ }
+ }
+ break;
+ }
+ }
+ }
+ if (wanted_fieldlen_wrap > 0 && len0+len > wanted_fieldlen_wrap) {
+ i = len-1;
+ while (len0+i+1 > wanted_fieldlen_wrap &&
+ isspace(UCH(lp[i])))
+ i--;
+ if (len0+i+1 > wanted_fieldlen_wrap)
+ len = wanted_fieldlen_wrap - len0;
+ }
- strncpy (line, lp, len);
- *(line + len) = '\0';
+ if (len0+len >= MAX_LINE) {
+ if (!wrapalert) {
+ LYFixCursesOn("show alert:");
+ HTAlert(gettext("Very long lines have been wrapped!"));
+ wrapalert = TRUE;
+ }
+ /*
+ * First try to find a space character for wrapping - kw
+ */
+ for (i = MAX_LINE - len0 - 1; i > 0; i--) {
+ if (isspace(UCH(lp[i]))) {
+ len = i;
+ break;
+ }
+ }
+ if (len0+len >= MAX_LINE)
+ len = MAX_LINE - len0 - 1;
+ }
- cleanup_line_for_textarea (line, len);
+ strncat (line, lp, len);
+ *(line + len0+len) = '\0';
+
+ cleanup_line_for_textarea (line, len0+len);
/*
* If there are more lines in the edit buffer than were in the
@@ -10152,7 +12192,7 @@ PUBLIC int HText_ExtEditForm ARGS1(
* Keep track of 1st blank line in any trailing blank lines, for
* later cursor repositioning.
*/
- if (len > 0)
+ if (len0+len > 0)
exit_line = 0;
else if (exit_line == 0)
exit_line = anchor_ptr->line_num;
@@ -10161,7 +12201,7 @@ PUBLIC int HText_ExtEditForm ARGS1(
* And do the next line of edited text, for the next anchor ...
*/
lp += len;
- if (*lp) lp++;
+ if (*lp && isspace(UCH(*lp))) lp++;
end_anchor = anchor_ptr;
anchor_ptr = anchor_ptr->next;
@@ -10172,7 +12212,7 @@ PUBLIC int HText_ExtEditForm ARGS1(
line_cnt++;
}
- CTRACE(tfp, "GridText: edited text inserted into lynx struct's\n");
+ CTRACE((tfp, "GridText: edited text inserted into lynx struct's\n"));
/*
* If we've added any new lines/anchors, we need to adjust various
@@ -10190,7 +12230,7 @@ PUBLIC int HText_ExtEditForm ARGS1(
LYRemoveTemp (ed_temp);
FREE(ed_temp);
- CTRACE(tfp, "GridText: exiting HText_ExtEditForm()\n");
+ CTRACE((tfp, "GridText: exiting HText_ExtEditForm()\n"));
/*
* Return the offset needed to move the cursor from its current
@@ -10210,7 +12250,7 @@ PUBLIC int HText_ExtEditForm ARGS1(
*/
PUBLIC void HText_ExpandTextarea ARGS2(
struct link *, form_link,
- int, newlines)
+ int, newlines)
{
TextAnchor *anchor_ptr;
TextAnchor *end_anchor = NULL;
@@ -10226,7 +12266,7 @@ PUBLIC void HText_ExpandTextarea ARGS2(
int i;
- CTRACE(tfp, "GridText: entered HText_ExpandTextarea()\n");
+ CTRACE((tfp, "GridText: entered HText_ExpandTextarea()\n"));
if (newlines < 1) return;
@@ -10256,7 +12296,7 @@ PUBLIC void HText_ExpandTextarea ARGS2(
!strcmp (anchor_ptr->input_field->name, areaname)) {
if (firstanchor)
- firstanchor = FALSE;
+ firstanchor = FALSE;
end_anchor = anchor_ptr;
@@ -10283,8 +12323,8 @@ PUBLIC void HText_ExpandTextarea ARGS2(
match_tag = end_anchor->next->number;
}
- CTRACE(tfp, "GridText: %d blank line(s) added to TEXTAREA name=|%s|\n",
- newlines, areaname);
+ CTRACE((tfp, "GridText: %d blank line(s) added to TEXTAREA name=|%s|\n",
+ newlines, areaname));
/*
* We need to adjust various things in all anchor bearing lines
@@ -10292,15 +12332,15 @@ PUBLIC void HText_ExpandTextarea ARGS2(
*/
update_subsequent_anchors (newlines, end_anchor, htline, match_tag);
- CTRACE(tfp, "GridText: exiting HText_ExpandTextarea()\n");
+ CTRACE((tfp, "GridText: exiting HText_ExpandTextarea()\n"));
return;
}
/*
- * Insert the contents of a file into a TEXTAREA between the cursorline,
- * and the line preceeding it.
+ * Insert the contents of a file into a TEXTAREA between the cursor line,
+ * and the line preceding it.
*
* Returns the number of lines that the cursor should be moved so that it
* will end up on the 1st line in the TEXTAREA following the inserted file
@@ -10321,6 +12361,7 @@ PUBLIC int HText_InsertFile ARGS1(
TextAnchor *prev_anchor = NULL;
TextAnchor *end_anchor = NULL;
BOOLEAN firstanchor = TRUE;
+ BOOLEAN truncalert = FALSE;
FormInfo *form = form_link->form;
char *areaname = form->name;
@@ -10337,22 +12378,29 @@ PUBLIC int HText_InsertFile ARGS1(
char *lp;
char *cp;
int entry_line = form_link->anchor_line_num;
+ int file_cs;
int match_tag = 0;
int newlines = 0;
int len;
int i;
- CTRACE(tfp, "GridText: entered HText_InsertFile()\n");
+ CTRACE((tfp, "GridText: entered HText_InsertFile()\n"));
/*
* Get the filename of the insert file.
*/
if (!(fn = GetFileName())) {
HTInfoMsg (FILE_INSERT_CANCELLED);
- CTRACE(tfp, "GridText: file insert cancelled - no filename provided\n");
+ CTRACE((tfp, "GridText: file insert cancelled - no filename provided\n"));
return (0);
}
+ if (no_dotfiles || !show_dotfiles) {
+ if (*LYPathLeaf(fn) == '.') {
+ HTUserMsg(FILENAME_CANNOT_BE_DOT);
+ return (0);
+ }
+ }
/*
* Read it into our buffer (abort on 0-length file).
@@ -10360,20 +12408,44 @@ PUBLIC int HText_InsertFile ARGS1(
if ((stat (fn, &stat_info) < 0) ||
((size = stat_info.st_size) == 0)) {
HTInfoMsg (FILE_INSERT_0_LENGTH);
- CTRACE(tfp, "GridText: file insert aborted - file=|%s|- was 0-length\n",
- fn);
+ CTRACE((tfp, "GridText: file insert aborted - file=|%s|- was 0-length\n",
+ fn));
FREE(fn);
return (0);
} else {
- if ((fbuf = (char *) calloc (size + 1, (sizeof(char)))) == NULL)
- outofmem(__FILE__, "HText_InsertFile");
+ if ((fbuf = typecallocn(char, size + 1)) == NULL) {
+ /*
+ * This could be huge - don't exit if we don't have enough
+ * memory for it. - kw
+ */ /*outofmem(__FILE__, "HText_InsertFile");*/
+ free(fn);
+ HTAlert(MEMORY_EXHAUSTED_FILE);
+ return 0;
+ }
+
+ /* Try to make the same assumption for the charset of the inserted
+ * file as we would for normal loading of that file, i.e. taking
+ * assume_local_charset and suffix mappings into account.
+ * If there is a mismatch with the display character set, characters
+ * may be displayed wrong, too bad; but the user has a chance to
+ * correct this by editing the lines, which will update f->value_cs
+ * again. - kw
+ */
+ LYGetFileInfo(fn, 0, 0, 0, 0, 0, &file_cs);
fp = fopen (fn, "r");
+ if (!fp) {
+ free(fbuf);
+ free(fn);
+ HTAlert(FILE_CANNOT_OPEN_R);
+ return 0;
+ }
size = fread (fbuf, 1, size, fp);
- fclose (fp);
+ LYCloseInput (fp);
FREE(fn);
+ fbuf[size] = '\0'; /* Terminate! - kw */
}
@@ -10420,23 +12492,22 @@ PUBLIC int HText_InsertFile ARGS1(
* line). Beware of the differences ... some are a bit subtle to
* notice.]
*/
- for (htline = HTMainText->last_line->next, i = 0;
+ for (htline = FirstHTLine(HTMainText), i = 0;
anchor_ptr->line_num != i; i++) {
htline = htline->next;
if (htline == HTMainText->last_line)
break;
}
- if (((a = (TextAnchor *) calloc (1, sizeof(*a))) == 0) ||
- ((f = (FormInfo *) calloc (1, sizeof(*f))) == 0) ||
- ((l = (HTLine *) calloc (1, LINE_SIZE(MAX_LINE))) == 0))
+ if (((a = typecalloc(TextAnchor)) == 0) ||
+ ((f = typecalloc(FormInfo)) == 0) ||
+ ((l = allocHTLine(MAX_LINE)) == 0))
outofmem(__FILE__, "HText_InsertFile");
/* Init all the fields in the new TextAnchor. */
/* [anything "special" needed based on ->show_anchor value ?] */
a->next = anchor_ptr;
a->number = anchor_ptr->number;
- a->start = anchor_ptr->start;
a->line_pos = anchor_ptr->line_pos;
a->extent = anchor_ptr->extent;
a->line_num = anchor_ptr->line_num;
@@ -10460,16 +12531,16 @@ PUBLIC int HText_InsertFile ARGS1(
f->maxlength = anchor_ptr->input_field->maxlength;
f->no_cache = anchor_ptr->input_field->no_cache;
f->disabled = anchor_ptr->input_field->disabled;
+ f->value_cs = (file_cs >= 0) ? file_cs : current_char_set;
/* Init all the fields in the new HTLine (but see the #if). */
l->offset = htline->offset;
l->size = htline->size;
- l->split_after = htline->split_after;
- l->bullet = htline->bullet;
- l->expansion_line = TRUE;
#if defined(USE_COLOR_STYLE)
/* dup styles[] if needed [no need in TEXTAREA (?); leave 0's] */
l->numstyles = htline->numstyles;
+ /*we fork the pointers!*/
+ l->styles = htline->styles;
#endif
strcpy (l->data, htline->data);
@@ -10486,11 +12557,11 @@ PUBLIC int HText_InsertFile ARGS1(
if (prev_anchor)
prev_anchor->next = a;
- htline = htline->prev;
- l->next = htline->next;
- l->prev = htline;
- htline->next->prev = l;
- htline->next = l;
+ htline = htline->prev;
+ l->next = htline->next;
+ l->prev = htline;
+ htline->next->prev = l;
+ htline->next = l;
/*
* update_subsequent_anchors() expects htline to point to 1st potential
@@ -10525,6 +12596,15 @@ PUBLIC int HText_InsertFile ARGS1(
else
len = strlen (lp);
+ if (len >= MAX_LINE) {
+ if (!truncalert) {
+ HTAlert(gettext("Very long lines have been truncated!"));
+ truncalert = TRUE;
+ }
+ len = MAX_LINE - 1;
+ if (lp[len])
+ lp[len+1] = '\0'; /* prevent next iteration */
+ }
strncpy (line, lp, len);
*(line + len) = '\0';
@@ -10546,6 +12626,13 @@ PUBLIC int HText_InsertFile ARGS1(
StrAllocCopy(anchor_ptr->input_field->value, line);
/*
+ * insert_new_textarea_anchor always uses current_char_set,
+ * we may want something else, so fix it up. - kw
+ */
+ if (file_cs >= 0)
+ anchor_ptr->input_field->value_cs = file_cs;
+
+ /*
* And do the next line of insert text, for the next anchor ...
*/
lp += len;
@@ -10556,7 +12643,7 @@ PUBLIC int HText_InsertFile ARGS1(
anchor_ptr = anchor_ptr->next;
}
- CTRACE(tfp, "GridText: file inserted into lynx struct's\n");
+ CTRACE((tfp, "GridText: file inserted into lynx struct's\n"));
/*
* Now adjust various things in all anchor-bearing lines following the
@@ -10564,14 +12651,13 @@ PUBLIC int HText_InsertFile ARGS1(
*/
update_subsequent_anchors (newlines, end_anchor, htline, match_tag);
-
/*
* Cleanup time.
*/
FREE(line);
FREE(fbuf);
- CTRACE(tfp, "GridText: exiting HText_InsertFile()\n");
+ CTRACE((tfp, "GridText: exiting HText_InsertFile()\n"));
return (newlines);
}
@@ -10628,7 +12714,7 @@ PRIVATE void redraw_part_of_line ARGS4(
while (current_style < line->numstyles &&
i >= (int) (CStyle.horizpos + line->offset + 1))
{
- LynxChangeStyle (CStyle.style,CStyle.direction,CStyle.previous);
+ LynxChangeStyle (CStyle.style,CStyle.direction);
current_style++;
}
#endif
@@ -10637,7 +12723,7 @@ PRIVATE void redraw_part_of_line ARGS4(
#ifndef USE_COLOR_STYLE
case LY_UNDERLINE_START_CHAR:
if (dump_output_immediately && use_underscore) {
- addch('_');
+ LYaddch('_');
i++;
} else {
start_underline();
@@ -10646,7 +12732,7 @@ PRIVATE void redraw_part_of_line ARGS4(
case LY_UNDERLINE_END_CHAR:
if (dump_output_immediately && use_underscore) {
- addch('_');
+ LYaddch('_');
i++;
} else {
stop_underline();
@@ -10664,12 +12750,12 @@ PRIVATE void redraw_part_of_line ARGS4(
#endif
case LY_SOFT_NEWLINE:
if (!dump_output_immediately)
- addch('+');
+ LYaddch('+');
break;
case LY_SOFT_HYPHEN:
if (*data != '\0' ||
- isspace((unsigned char)LastDisplayChar) ||
+ isspace(UCH(LastDisplayChar)) ||
LastDisplayChar == '-') {
/*
* Ignore the soft hyphen if it is not the last
@@ -10689,10 +12775,11 @@ PRIVATE void redraw_part_of_line ARGS4(
buffer[0] = '-';
i++;
}
+ /* FALLTHRU */
default:
i++;
- if (text->T.output_utf8 && !isascii(buffer[0])) {
+ if (text->T.output_utf8 && !isascii(UCH(buffer[0]))) {
if ((*buffer & 0xe0) == 0xc0) {
utf_extra = 1;
} else if ((*buffer & 0xf0) == 0xe0) {
@@ -10720,17 +12807,17 @@ PRIVATE void redraw_part_of_line ARGS4(
if (utf_extra) {
strncpy(&buffer[1], data, utf_extra);
buffer[utf_extra+1] = '\0';
- addstr(buffer);
+ LYaddstr(buffer);
buffer[1] = '\0';
data += utf_extra;
utf_extra = 0;
- } else if (HTCJK != NOCJK && !isascii(buffer[0])) {
+ } else if (HTCJK != NOCJK && !isascii(UCH(buffer[0]))) {
/*
* For CJK strings, by Masanobu Kimura.
*/
buffer[1] = *data;
data++;
- addstr(buffer);
+ LYaddstr(buffer);
buffer[1] = '\0';
/*
* For now, load 'M' into LastDisplayChar,
@@ -10745,7 +12832,7 @@ PRIVATE void redraw_part_of_line ARGS4(
*/
LastDisplayChar = 'M';
} else {
- addstr(buffer);
+ LYaddstr(buffer);
LastDisplayChar = buffer[0];
}
} /* end of switch */
@@ -10758,7 +12845,7 @@ PRIVATE void redraw_part_of_line ARGS4(
while (current_style < line->numstyles)
{
- LynxChangeStyle (CStyle.style, CStyle.direction, CStyle.previous);
+ LynxChangeStyle (CStyle.style, CStyle.direction);
current_style++;
}
@@ -10768,6 +12855,569 @@ PRIVATE void redraw_part_of_line ARGS4(
}
#endif /* defined(USE_COLOR_STYLE) && !defined(NO_HILIT_FIX) */
+#ifndef USE_COLOR_STYLE
+/*
+ * Function move_to_glyph is called from LYMoveToLink and does all
+ * the real work for it.
+ * The pair LYMoveToLink()/move_to_glyph() is similar to the pair
+ * redraw_lines_of_link()/redraw_part_of_line(), some key differences:
+ * LYMoveToLink/move_to_glyph redraw_*
+ * -----------------------------------------------------------------
+ * - used without color style - used with color style
+ * - handles showing WHEREIS target - WHEREIS handled elsewhere
+ * - handles only one line - handles first two lines for
+ * hypertext anchors
+ * - right columns position for UTF-8
+ * by redrawing as necessary
+ * - currently used for highlight - currently used for highlight
+ * ON and OFF OFF
+ *
+ * Eventually the two sets of function should be unified, and should handle
+ * UTF-8 positioning, both lines of hypertext anchors, and WHEREIS in all
+ * cases. If possible. The complex WHEREIS target logic in highlight()
+ * could then be completely removed. - kw
+ */
+PRIVATE void move_to_glyph ARGS10(
+ int, YP,
+ int, XP,
+ int, XP_draw_min,
+ char *, data,
+ int, datasize,
+ unsigned, offset,
+ CONST char *, target,
+ char *, hightext,
+ int, flags,
+ BOOL, utf_flag)
+{
+ register int i;
+ char buffer[7];
+ CONST char *end_of_data;
+ size_t utf_extra = 0;
+#if defined(SHOW_WHEREIS_TARGETS)
+ CONST char *cp_tgt;
+ int i_start_tgt=0, i_after_tgt;
+ int HitOffset, LenNeeded;
+#endif /* SHOW_WHEREIS_TARGETS */
+ BOOL intarget = NO, inunderline = NO, inbold = NO;
+ BOOL drawing = NO, inU = NO, hadutf8 = NO;
+ BOOL incurlink = NO, drawingtarget = NO, flag = NO;
+ char *sdata = data;
+ char LastDisplayChar = ' ';
+ int XP_link = XP;
+ int linkvlen;
+
+ int len;
+
+ if (flags & 1)
+ flag = YES;
+ if (flags & 2)
+ inU = YES;
+ /* Set up the multibyte character buffer */
+ buffer[0] = buffer[1] = buffer[2] = '\0';
+ /*
+ * Add offset, making sure that we do not
+ * go over the COLS limit on the display.
+ */
+ i = (int)offset;
+ if (i > (int)DISPLAY_COLS - 1)
+ i = (int)DISPLAY_COLS - 1;
+
+ linkvlen = hightext ? LYmbcsstrlen(hightext, utf_flag, YES) : 0;
+
+ /*
+ * Scan through the data, making sure that we do not
+ * go over the COLS limit on the display etc.
+ */
+ len = datasize;
+ end_of_data = data + len;
+
+#if defined(SHOW_WHEREIS_TARGETS)
+ /*
+ * If the target overlaps with the part of this line that
+ * we are drawing, it will be emphasized.
+ */
+ i_after_tgt = i;
+ if (target) {
+ cp_tgt = LYno_attr_mb_strstr(sdata,
+ target,
+ utf_flag, YES,
+ &HitOffset,
+ &LenNeeded);
+ if (cp_tgt) {
+ if ((int)offset + LenNeeded >= DISPLAY_COLS ||
+ ((int)offset + HitOffset >= XP + linkvlen)) {
+ cp_tgt = NULL;
+ } else {
+ i_start_tgt = i + HitOffset;
+ i_after_tgt = i + LenNeeded;
+ }
+ }
+ } else {
+ cp_tgt = NULL;
+ }
+#endif /* SHOW_WHEREIS_TARGETS */
+
+
+ /*
+ * Iterate through the line data from the start, keeping track of
+ * the display ("glyph") position in i. Drawing will be turned
+ * on when either the first UTF-8 sequence (that occurs after
+ * XP_draw_min) is found, or when we reach the link itself (if
+ * highlight is non-NULL). - kw
+ */
+ while ((i < DISPLAY_COLS - 1) && data < end_of_data && (*data != '\0')) {
+
+ if (data && hightext && i >= XP && !incurlink) {
+
+ /*
+ * We reached the position of link itself, and hightext is
+ * non-NULL. We switch data from being a pointer into the HTLine
+ * to being a pointer into hightext. Normally (as long as this
+ * routine is applied to normal hyperlink anchors) the text in
+ * hightext will be identical to that part of the HTLine that
+ * data was already pointing to, except that special attribute
+ * chars LY_BOLD_START_CHAR etc. have been stripped out (see
+ * HText_trimHightext). So the switching should not result in
+ * any different display, but it ensures that it doesn't go
+ * unnoticed if somehow hightext got messed up somewhere else.
+ * This is also useful in preparation for using this function
+ * for something else than normal hyperlink anchors, i.e. form
+ * fields.
+ * Turn on drawing here or make sure it gets turned on before the
+ * next actual normal character is handled. - kw
+ */
+ data = hightext;
+ len = strlen(hightext);
+ end_of_data = hightext + len;
+ XP += linkvlen; /* from now on XP includes hightext chars */
+ incurlink = YES;
+#ifdef SHOW_WHEREIS_TARGETS
+ if (cp_tgt) {
+ if (flag && i_after_tgt >= XP)
+ i_after_tgt = XP - 1;
+ }
+#endif
+ /*
+ * The logic of where to set intarget drawingtarget etc.
+ * and when to react to it should be cleaned up (here and
+ * further below). For now this seems to work but isn't
+ * very clear. The complications arise from reproducing
+ * the behavior (previously done in highlight()) for target
+ * strings that fall into or overlap a link: use target
+ * emphasis for the target string, except for the first
+ * and last character of the anchor text if the anchor is
+ * highlighted as "current link". - kw
+ */
+ if (!drawing) {
+#ifdef SHOW_WHEREIS_TARGETS
+ if (intarget) {
+ if (i_after_tgt > i) {
+ LYmove(YP, i);
+ if (flag) {
+ drawing = YES;
+ drawingtarget = NO;
+ if (inunderline) inU = YES;
+ lynx_start_link_color (flag, inU);
+ } else {
+ drawing = YES;
+ drawingtarget = YES;
+ LYstartTargetEmphasis();
+ }
+ }
+ }
+#endif /* SHOW_WHEREIS_TARGETS */
+ } else {
+#ifdef SHOW_WHEREIS_TARGETS
+ if (intarget && i_after_tgt > i) {
+ if (flag && (data == hightext)) {
+ drawingtarget = NO;
+ LYstopTargetEmphasis();
+ }
+ } else if (!intarget)
+#endif /* SHOW_WHEREIS_TARGETS */
+ {
+ if (inunderline) inU = YES;
+ if (inunderline) stop_underline();
+ if (inbold) stop_bold();
+ lynx_start_link_color (flag, inU);
+ }
+
+ }
+ }
+ if (i >= XP || data >= end_of_data)
+ break;
+ if ((buffer[0] = *data) == '\0')
+ break;
+
+
+#if defined(SHOW_WHEREIS_TARGETS)
+ /*
+ * Look for a subsequent occurrence of the target string,
+ * if we had a previous one and have now stepped past it. - kw
+ */
+ if (cp_tgt && i >= i_after_tgt) {
+ if (intarget) {
+
+ if (incurlink && flag && i == XP - 1)
+ cp_tgt = NULL;
+ else
+ cp_tgt = LYno_attr_mb_strstr(sdata,
+ target,
+ utf_flag, YES,
+ &HitOffset,
+ &LenNeeded);
+ if (cp_tgt) {
+ i_start_tgt = i + HitOffset;
+ i_after_tgt = i + LenNeeded;
+ if (incurlink) {
+ if (flag && i_start_tgt == XP_link)
+ i_start_tgt++;
+ if (flag && i_start_tgt == XP - 1)
+ i_start_tgt++;
+ if (flag && i_after_tgt >= XP)
+ i_after_tgt = XP - 1;
+ if (flag && i_start_tgt >= XP)
+ cp_tgt = NULL;
+ } else if (i_start_tgt == XP) {
+ if (flag)
+ i_start_tgt++;
+ }
+ }
+ if (!cp_tgt || i_start_tgt != i) {
+ intarget = NO;
+ if (drawing) {
+ if (drawingtarget) {
+ drawingtarget = NO;
+ LYstopTargetEmphasis();
+ if (incurlink) {
+ lynx_start_link_color (flag, inU);
+ }
+ }
+ if (!incurlink) {
+ if (inbold) start_bold();
+ if (inunderline) start_underline();
+ }
+ }
+ }
+ }
+ }
+#endif /* SHOW_WHEREIS_TARGETS */
+
+ /*
+ * Advance data to point to the next input char (for the
+ * next round). Advance sdata, used for searching for a
+ * target string, so that they stays in synch. As long
+ * as we are not within the highlight text, data and sdata
+ * have identical values. After we have switched data to
+ * point into hightext, sdata remains a pointer into the
+ * HTLine (so that we don't miss a partial target match at
+ * the end of the anchor text). So sdata has to sometimes
+ * skip additional special attribute characters that are
+ * not present in highlight in order to stay in synch. - kw
+ */
+ data++;
+ if (*sdata) {
+ do sdata++;
+ while (incurlink && *sdata && sdata != data &&
+ IsSpecialAttrChar(*(sdata-1)));
+ }
+
+ switch (buffer[0]) {
+
+ case LY_UNDERLINE_START_CHAR:
+ if (!drawing || !incurlink) inunderline = YES;
+ if (drawing && !intarget && !incurlink)
+ start_underline();
+ break;
+
+ case LY_UNDERLINE_END_CHAR:
+ inunderline = NO;
+ if (drawing && !intarget && !incurlink)
+ stop_underline();
+ break;
+
+ case LY_BOLD_START_CHAR:
+ if (!drawing || !incurlink) inbold = YES;
+ if (drawing && !intarget && !incurlink)
+ start_bold();
+ break;
+
+ case LY_BOLD_END_CHAR:
+ inbold = NO;
+ if (drawing && !intarget && !incurlink)
+ stop_bold();
+ break;
+
+ case LY_SOFT_NEWLINE:
+ if (drawing) {
+ LYaddch('+');
+ }
+ i++;
+ break;
+
+ case LY_SOFT_HYPHEN:
+ if (*data != '\0' ||
+ isspace(UCH(LastDisplayChar)) ||
+ LastDisplayChar == '-') {
+ /*
+ * Ignore the soft hyphen if it is not the last
+ * character in the line. Also ignore it if it
+ * first character following the margin, or if it
+ * is preceded by a white character (we loaded 'M'
+ * into LastDisplayChar if it was a multibyte
+ * character) or hyphen, though it should have
+ * been excluded by HText_appendCharacter() or by
+ * split_line() in those cases. - FM
+ */
+ break;
+ } else {
+ /*
+ * Make it a hard hyphen and fall through. - FM
+ */
+ buffer[0] = '-';
+ }
+ /* FALLTHRU */
+
+ default:
+ /*
+ * We have got an actual normal displayable character, or
+ * the start of one. Before proceeding check whether
+ * drawing needs to be turned on now. - kw
+ */
+#if defined(SHOW_WHEREIS_TARGETS)
+ if (incurlink && intarget && flag && i_after_tgt > i) {
+ if (i == XP - 1) {
+ i_after_tgt = i;
+ } else if (i == XP - 2 && HTCJK != NOCJK &&
+ !isascii(UCH(buffer[0]))) {
+ i_after_tgt = i;
+ cp_tgt = NULL;
+ if (drawing) {
+ if (drawingtarget) {
+ LYstopTargetEmphasis();
+ drawingtarget = NO;
+ lynx_start_link_color (flag, inU);
+ }
+ }
+ }
+ }
+ if (cp_tgt && i >= i_start_tgt && sdata > cp_tgt) {
+ if (!intarget ||
+ (intarget && incurlink && !drawingtarget)) {
+
+ if (incurlink && drawing &&
+ !(flag &&
+ (i == XP_link || i == XP - 1))) {
+ lynx_stop_link_color (flag, inU);
+ }
+ if (incurlink && !drawing) {
+ LYmove(YP, i);
+ if (inunderline) inU = YES;
+ if (flag && (i == XP_link || i == XP - 1)) {
+ lynx_start_link_color (flag, inU);
+ drawingtarget = NO;
+ } else {
+ LYstartTargetEmphasis();
+ drawingtarget = YES;
+ }
+ drawing = YES;
+ } else if (incurlink && drawing &&
+ intarget && !drawingtarget &&
+ (flag &&
+ (i == XP_link))) {
+ if (inunderline) inU = YES;
+ lynx_start_link_color (flag, inU);
+ } else if (drawing &&
+ !(flag &&
+ (i == XP_link || (incurlink && i == XP - 1)))) {
+ LYstartTargetEmphasis();
+ drawingtarget = YES;
+ }
+ intarget = YES;
+ }
+ } else
+#endif /* SHOW_WHEREIS_TARGETS */
+ if (incurlink) {
+ if (!drawing) {
+ LYmove(YP, i);
+ if (inunderline) inU = YES;
+ lynx_start_link_color (flag, inU);
+ drawing = YES;
+ }
+ }
+
+ i++;
+ if (utf_flag && !isascii(UCH(buffer[0]))) {
+ hadutf8 = YES;
+ 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) {
+ /*
+ * Shouldn't happen.
+ */
+ utf_extra = 0;
+ }
+ LastDisplayChar = 'M';
+ }
+ if (utf_extra) {
+ strncpy(&buffer[1], data, utf_extra);
+ buffer[utf_extra+1] = '\0';
+ if (!drawing && i >= XP_draw_min) {
+ LYmove(YP, i - 1);
+ drawing = YES;
+#if defined(SHOW_WHEREIS_TARGETS)
+ if (intarget) {
+ drawingtarget = YES;
+ LYstartTargetEmphasis();
+ } else
+#endif /* SHOW_WHEREIS_TARGETS */
+ {
+ if (inbold)
+ start_bold();
+ if (inunderline)
+ start_underline();
+ }
+ }
+ LYaddstr(buffer);
+ buffer[1] = '\0';
+ sdata += utf_extra; data += utf_extra;
+ utf_extra = 0;
+ } else if (HTCJK != NOCJK && !isascii(UCH(buffer[0]))) {
+ /*
+ * For CJK strings, by Masanobu Kimura.
+ */
+ if (drawing && (i < DISPLAY_COLS - 1)) {
+ buffer[1] = *data;
+ LYaddstr(buffer);
+ buffer[1] = '\0';
+ }
+ i++;
+ sdata++; data++;
+ /*
+ * For now, load 'M' into LastDisplayChar,
+ * but we should check whether it's white
+ * and if so, use ' '. I don't know if
+ * there actually are white CJK characters,
+ * and we're loading ' ' for multibyte
+ * spacing characters in this code set,
+ * but this will become an issue when
+ * the development code set's multibyte
+ * character handling is used. - FM
+ */
+ LastDisplayChar = 'M';
+ } else {
+ if (drawing) {
+ LYaddstr(buffer);
+ }
+ LastDisplayChar = buffer[0];
+ }
+ } /* end of switch */
+ } /* end of while */
+
+ if (!drawing) {
+ LYmove(YP, i);
+ lynx_start_link_color (flag, inU);
+ } else {
+#if defined(SHOW_WHEREIS_TARGETS)
+ if (drawingtarget) {
+ LYstopTargetEmphasis();
+ lynx_start_link_color (flag, inU);
+ }
+#endif /* SHOW_WHEREIS_TARGETS */
+ if (hadutf8) {
+ LYtouchline(YP);
+ }
+ }
+ return;
+}
+#endif /* !USE_COLOR_STYLE */
+
+#ifndef USE_COLOR_STYLE
+/*
+ * Move cursor position to a link's place in the display.
+ * The "moving to" is done by scanning through the line's
+ * character data in the corresponding HTLine of HTMainText,
+ * and starting to draw when a UTF-8 encoded non-ASCII character
+ * is encountered before the link (with some protection against
+ * overwriting form fields). This refreshing of preceding data is
+ * necessary for preventing curses's or slang's display logic from
+ * getting too clever; their logic counts character positions wrong
+ * since they don't know about multi-byte characters that take up
+ * only one screen position. So we have to make them forget their
+ * idea of what's in a screen line drawn previously.
+ * If hightext is non-NULL, it should be the anchor text for a normal
+ * link as stored in a links[] element, and the anchor text will be
+ * drawn too, with appropriate attributes. - kw
+ */
+PUBLIC void LYMoveToLink ARGS6(
+ int, cur,
+ CONST char *, target,
+ char *, hightext,
+ int, flag,
+ BOOL, inU,
+ BOOL, utf_flag)
+{
+#define pvtTITLE_HEIGHT 1
+ HTLine* todr;
+ int i, n=0;
+ int XP_draw_min = 0;
+ int flags = ((flag == ON) ? 1 : 0) | (inU ? 2 : 0);
+
+ /*
+ * We need to protect changed form text fields preceding this
+ * link on the same line against overwriting. - kw
+ */
+ for (i = cur-1; i >= 0; i++) {
+ if (links[i].ly < links[cur].ly)
+ break;
+ if (links[i].type == WWW_FORM_LINK_TYPE) {
+ XP_draw_min = links[i].ly + links[i].form->size;
+ break;
+ }
+ }
+
+ /* Find the right HTLine. */
+ if (!HTMainText) {
+ todr = NULL;
+ } else if (HTMainText->stale) {
+ todr = FirstHTLine(HTMainText);
+ n = links[cur].ly - pvtTITLE_HEIGHT + HTMainText->top_of_screen;
+ } else {
+ todr = HTMainText->top_of_screen_line;
+ n = links[cur].ly - pvtTITLE_HEIGHT;
+ }
+ for (i = 0; i < n && todr; i++) {
+ todr = (todr == HTMainText->last_line) ? NULL : todr->next;
+ }
+ if (todr) {
+ if (target && *target == '\0') target = NULL;
+ move_to_glyph(links[cur].ly, links[cur].lx, XP_draw_min,
+ todr->data, todr->size, todr->offset,
+ target, hightext, flags, utf_flag);
+ } else {
+ /* This should not happen. */
+ move_to_glyph(links[cur].ly, links[cur].lx, XP_draw_min,
+ "", 0, links[cur].lx,
+ target, hightext, flags, utf_flag);
+ /* LYmove(links[cur].ly, links[cur].lx); */
+ }
+}
+#endif /* !USE_COLOR_STYLE */
+
/*
This is used only if compiled with lss support. It's called to draw
regular link (1st two lines of link) when it's being unhighlighted in
@@ -10790,16 +13440,16 @@ PUBLIC void redraw_lines_of_link ARGS1(
lines_back = display_lines - (links[cur].ly-pvtTITLE_HEIGHT);
}
todr1 = HTMainText->next_line;
- while (lines_back--)
+ while (lines_back-- > 0)
todr1 = todr1->prev;
todr2 = (links[cur].hightext2 && links[cur].ly < display_lines) ?
todr1->next : 0;
- move(links[cur].ly, links[cur].lx);
+ LYmove(links[cur].ly, links[cur].lx);
redraw_part_of_line (todr1, links[cur].hightext,
strlen(links[cur].hightext), HTMainText);
if (todr2) {
- move(links[cur].ly+1,links[cur].hightext2_offset);
+ LYmove(links[cur].ly+1,links[cur].hightext2_offset);
redraw_part_of_line (todr2, links[cur].hightext2,
strlen(links[cur].hightext2), HTMainText);
}
@@ -10811,15 +13461,43 @@ PUBLIC void redraw_lines_of_link ARGS1(
return;
}
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
PUBLIC void HTMark_asSource NOARGS
{
if (HTMainText)
- HTMainText->source = TRUE;
+ HTMainText->source = TRUE;
}
#endif
+PUBLIC HTkcode HText_getKcode ARGS1(
+ HText *, text)
+{
+ return text->kcode;
+}
+
+PUBLIC void HText_updateKcode ARGS2(
+ HText *, text,
+ HTkcode, kcode)
+{
+ text->kcode = kcode;
+}
+
+PUBLIC HTkcode HText_getSpecifiedKcode ARGS1(
+ HText *, text)
+{
+ return text->specified_kcode;
+}
+
+PUBLIC void HText_updateSpecifiedKcode ARGS2(
+ HText *, text,
+ HTkcode, kcode)
+{
+ text->specified_kcode = kcode;
+}
+
PUBLIC int HTMainText_Get_UCLYhndl NOARGS
{
- return (HTMainText ? HTMainText->node_anchor->UCStages->s[0].C.UChndl : 0);
+ return (HTMainText ?
+ HTAnchor_getUCLYhndl(HTMainText->node_anchor, UCT_STAGE_MIME)
+ : -1);
}
diff --git a/gnu/usr.bin/lynx/src/GridText.h b/gnu/usr.bin/lynx/src/GridText.h
index 1eeba7b2304..24be45f6ad0 100644
--- a/gnu/usr.bin/lynx/src/GridText.h
+++ b/gnu/usr.bin/lynx/src/GridText.h
@@ -10,35 +10,7 @@
#include <HTForms.h>
#endif /* HTFORMS_H */
-#ifndef HT_NON_BREAK_SPACE
-#define HT_NON_BREAK_SPACE ((char)1) /* remember it */
-#endif /* !HT_NON_BREAK_SPACE */
-#ifndef HT_EN_SPACE
-#define HT_EN_SPACE ((char)2) /* remember it */
-#endif /* !HT_EN_SPACE */
-#define LY_UNDERLINE_START_CHAR '\003'
-#define LY_UNDERLINE_END_CHAR '\004'
-
-/* Turn about is fair play ASCII platforms use EBCDIC tab;
- EBCDIC platforms use ASCII tab for LY_BOLD_START_CHAR.
-*/
-#ifdef EBCDIC
-#define LY_BOLD_START_CHAR '\011'
-#else
-#define LY_BOLD_START_CHAR '\005'
-#endif
-
-#define LY_BOLD_END_CHAR '\006'
-#ifndef LY_SOFT_HYPHEN
-#define LY_SOFT_HYPHEN ((char)7)
-#endif /* !LY_SOFT_HYPHEN */
-#define LY_SOFT_NEWLINE ((char)8)
-
-#ifdef EBCDIC
-#define IsSpecialAttrChar(a) (((a) > '\002') && ((a) <= '\011') && ((a)!='\t'))
-#else
-#define IsSpecialAttrChar(a) (((a) > '\002') && ((a) <= '\010'))
-#endif
+#include <HTFont.h>
#define TABSTOP 8
#define SPACES " " /* must be at least TABSTOP spaces long */
@@ -89,8 +61,6 @@ extern char * HTCurSelectGroupSize;
extern HText * HTMainText; /* Equivalent of main window */
extern HTParentAnchor * HTMainAnchor; /* Anchor for HTMainText */
-extern int WWW_TraceFlag;
-
#if defined(VMS) && defined(VAXC) && !defined(__DECC)
extern int HTVirtualMemorySize;
#endif /* VMS && VAXC && !__DECC */
@@ -134,11 +104,11 @@ extern CONST char * HText_getContentBase NOPARAMS;
extern CONST char * HText_getContentLocation NOPARAMS;
extern CONST char * HText_getMessageID NOPARAMS;
extern CONST char * HText_getRevTitle NOPARAMS;
-#ifdef USE_HASH
+#ifdef USE_COLOR_STYLE
extern CONST char * HText_getStyle NOPARAMS;
#endif
extern void HText_setMainTextOwner PARAMS((CONST char * owner));
-extern void print_wwwfile_to_fd PARAMS((FILE * fp, int is_reply));
+extern void print_wwwfile_to_fd PARAMS((FILE * fp, BOOLEAN is_reply));
extern BOOL HText_select PARAMS((HText *text));
extern BOOL HText_POSTReplyLoaded PARAMS((document *doc));
extern BOOL HTFindPoundSelector PARAMS((char *selector));
@@ -150,6 +120,9 @@ extern int HTGetLinkInfo PARAMS((
int * linknum,
char ** hightext,
char ** lname));
+extern BOOL HText_TAHasMoreLines PARAMS((
+ int curlink,
+ int direction));
extern int HTGetLinkOrFieldStart PARAMS((
int curlink,
int * go_line,
@@ -163,7 +136,7 @@ extern BOOL HText_getFirstTargetInLine PARAMS((
int * offset,
int * tLen,
char ** data,
- char * target));
+ CONST char * target));
extern int HTisDocumentSource NOPARAMS;
extern void HTuncache_current_document NOPARAMS;
#ifdef SOURCE_CACHE
@@ -185,6 +158,7 @@ extern BOOL HTLoadedDocumentEightbit NOPARAMS;
extern void HText_setNodeAnchorBookmark PARAMS((CONST char *bookmark));
extern char * HTLoadedDocumentBookmark NOPARAMS;
extern int HText_LastLineSize PARAMS((HText *me, BOOL IgnoreSpaces));
+extern int HText_LastLineOffset PARAMS((HText *me));
extern int HText_PreviousLineSize PARAMS((HText *me, BOOL IgnoreSpaces));
extern void HText_NegateLineOne PARAMS((HText *text));
extern BOOL HText_inLineOne PARAMS((HText *text));
@@ -196,6 +170,18 @@ extern int HText_getTabIDColumn PARAMS((HText *text, CONST char *name));
extern int HText_HiddenLinkCount PARAMS((HText *text));
extern char * HText_HiddenLinkAt PARAMS((HText *text, int number));
+/* "simple table" stuff */
+extern int HText_endStblTABLE PARAMS((HText *));
+extern void HText_cancelStbl PARAMS((HText *));
+extern void HText_endStblCOLGROUP PARAMS((HText *));
+extern void HText_endStblTD PARAMS((HText *));
+extern void HText_endStblTR PARAMS((HText *));
+extern void HText_startStblCOL PARAMS((HText *, int, short, BOOL));
+extern void HText_startStblRowGroup PARAMS((HText *, short));
+extern void HText_startStblTABLE PARAMS((HText *, short));
+extern void HText_startStblTD PARAMS((HText *, int, int, short, BOOL));
+extern void HText_startStblTR PARAMS((HText *, short));
+
/* forms stuff */
extern void HText_beginForm PARAMS((
char * action,
@@ -213,18 +199,15 @@ extern char * HText_setLastOptionValue PARAMS((
HText * text,
char * value,
char * submit_value,
- int order,
+ int order,
BOOLEAN checked,
- int val_cs,
- int submit_val_cs));
+ int val_cs,
+ int submit_val_cs));
extern int HText_beginInput PARAMS((
HText * text,
BOOL underline,
InputFieldData *I));
-extern void HText_trimHightext PARAMS((
- HText * text,
- BOOLEAN final));
-extern void HText_SubmitForm PARAMS((
+extern int HText_SubmitForm PARAMS((
FormInfo * submit_item,
document * doc,
char * link_name,
@@ -244,7 +227,11 @@ extern void user_message PARAMS((
#define _user_message(msg, arg) mustshow = TRUE, user_message(msg, arg)
-extern void www_user_search PARAMS((int start_line, document *doc, char *target));
+extern void www_user_search PARAMS((
+ int start_line,
+ document * doc,
+ char * target,
+ int direction));
extern void print_crawl_to_fd PARAMS((
FILE * fp,
@@ -279,11 +266,30 @@ extern int HText_InsertFile PARAMS((
struct link * form_link));
extern void redraw_lines_of_link PARAMS((int cur));
+extern void LYMoveToLink PARAMS((
+ int cur,
+ CONST char * target,
+ char * hightext,
+ int flag,
+ BOOL inU,
+ BOOL utf_flag));
-#ifdef USE_PSRC
+
+#ifdef USE_PRETTYSRC
extern void HTMark_asSource NOPARAMS;
#endif
extern int HTMainText_Get_UCLYhndl NOPARAMS;
+#include <HTCJK.h>
+
+#ifdef KANJI_CODE_OVERRIDE
+extern HTkcode last_kcode;
+#endif
+
+extern HTkcode HText_getKcode PARAMS((HText * text));
+extern void HText_updateKcode PARAMS((HText * text, HTkcode kcode));
+extern HTkcode HText_getSpecifiedKcode PARAMS((HText * text));
+extern void HText_updateSpecifiedKcode PARAMS((HText * text, HTkcode kcode));
+
#endif /* LYGRIDTEXT_H */
diff --git a/gnu/usr.bin/lynx/src/HTAlert.c b/gnu/usr.bin/lynx/src/HTAlert.c
index a3a902c2887..b32d0cbbc88 100644
--- a/gnu/usr.bin/lynx/src/HTAlert.c
+++ b/gnu/usr.bin/lynx/src/HTAlert.c
@@ -22,18 +22,36 @@
#include <LYLeaks.h>
+#include <HTParse.h>
+
+#undef timezone /* U/Win defines this in time.h, hides implementation detail */
+
+#if defined(HAVE_FTIME) && defined(HAVE_SYS_TIMEB_H)
+#include <sys/timeb.h>
+#endif
+
+/*
+ * 'napms()' is preferable to 'sleep()' in any case because it does not
+ * interfere with output, but also because it can be less than a second.
+ */
+#ifdef HAVE_NAPMS
+#define LYSleep(n) napms(n)
+#else
+#define LYSleep(n) sleep(n)
+#endif
+
/* Issue a message about a problem. HTAlert()
** --------------------------------
*/
PUBLIC void HTAlert ARGS1(
CONST char *, Msg)
{
- CTRACE(tfp, "\nAlert!: %s\n\n", Msg);
+ CTRACE((tfp, "\nAlert!: %s\n\n", Msg));
CTRACE_FLUSH(tfp);
_user_message(ALERT_FORMAT, Msg);
LYstore_message2(ALERT_FORMAT, Msg);
- sleep(AlertSecs);
+ LYSleepAlert();
}
PUBLIC void HTAlwaysAlert ARGS2(
@@ -48,16 +66,18 @@ PUBLIC void HTAlwaysAlert ARGS2(
"%s %s!\n",
extra_prefix, Msg);
fflush(stdout);
- sleep(AlertSecs);
+ LYstore_message2(ALERT_FORMAT, Msg);
+ LYSleepAlert();
} else {
fprintf(((TRACE) ? stdout : stderr),
ALERT_FORMAT,
(Msg == 0) ? "" : Msg);
fflush(stdout);
- sleep(AlertSecs);
+ LYstore_message2(ALERT_FORMAT, Msg);
+ LYSleepAlert();
fprintf(((TRACE) ? stdout : stderr), "\n");
}
- CTRACE(tfp, "\nAlert!: %s\n\n", Msg);
+ CTRACE((tfp, "\nAlert!: %s\n\n", Msg));
CTRACE_FLUSH(tfp);
}
}
@@ -70,9 +90,9 @@ PUBLIC void HTInfoMsg ARGS1(
{
_statusline(Msg);
if (Msg && *Msg) {
- CTRACE(tfp, "Info message: %s\n", Msg);
+ CTRACE((tfp, "Info message: %s\n", Msg));
LYstore_message(Msg);
- sleep(InfoSecs);
+ LYSleep(InfoSecs);
}
}
@@ -84,9 +104,9 @@ PUBLIC void HTUserMsg ARGS1(
{
_statusline(Msg);
if (Msg && *Msg) {
- CTRACE(tfp, "User message: %s\n", Msg);
+ CTRACE((tfp, "User message: %s\n", Msg));
LYstore_message(Msg);
- sleep(MessageSecs);
+ LYSleepMsg();
}
}
@@ -96,11 +116,11 @@ PUBLIC void HTUserMsg2 ARGS2(
{
_user_message(Msg2, Arg);
if (Msg2 && *Msg2) {
- CTRACE(tfp, "User message: ");
- CTRACE(tfp, Msg2, Arg);
- CTRACE(tfp, "\n");
+ CTRACE((tfp, "User message: "));
+ CTRACE((tfp, Msg2, Arg));
+ CTRACE((tfp, "\n"));
LYstore_message2(Msg2, Arg);
- sleep(MessageSecs);
+ LYSleepMsg();
}
}
@@ -112,7 +132,45 @@ PUBLIC void HTProgress ARGS1(
{
statusline(Msg);
LYstore_message(Msg);
- CTRACE(tfp, "%s\n", Msg);
+ CTRACE((tfp, "%s\n", Msg));
+#if defined(SH_EX) && defined(WIN_EX) /* 1997/10/11 (Sat) 12:51:02 */
+ {
+ if (debug_delay != 0)
+ Sleep(debug_delay); /* XXX msec */
+ }
+#endif
+}
+
+PRIVATE char *sprint_bytes ARGS3(
+ char *, s,
+ long, n,
+ char *, was_units)
+{
+ static long kb_units = 1024;
+ static char *bunits;
+ static char *kbunits;
+ char *u;
+
+ if (!bunits) {
+ bunits = gettext("bytes");
+ kbunits = gettext("KB");
+ }
+
+ u = kbunits;
+ if ( (LYTransferRate == rateKB || LYTransferRate == rateEtaKB_maybe)
+ && (n >= 10 * kb_units) )
+ sprintf(s, "%ld", n/kb_units);
+ else if ((LYTransferRate == rateKB || LYTransferRate == rateEtaKB_maybe)
+ && (n > 999)) /* Avoid switching between 1016b/s and 1K/s */
+ sprintf(s, "%.2g", ((double)n)/kb_units);
+ else {
+ sprintf(s, "%ld", n);
+ u = bunits;
+ }
+
+ if (!was_units || was_units != u)
+ sprintf(s + strlen(s), " %s", u);
+ return u;
}
/* Issue a read-progress message. HTReadProgress()
@@ -122,68 +180,111 @@ PUBLIC void HTReadProgress ARGS2(
long, bytes,
long, total)
{
- static long kb_units = 1024;
- static time_t first, last;
- static long bytes_last;
+ static long bytes_last, total_last;
static long transfer_rate = 0;
- long divisor;
- char line[80];
+ static char *line = NULL;
+ char bytesp[80], totalp[80], transferp[80];
+ int renew = 0;
+ char *was_units;
+
+#ifdef HAVE_GETTIMEOFDAY
+ struct timeval tv;
+ double now;
+ static double first, last, last_active;
+ gettimeofday(&tv, (struct timezone *)0);
+ now = tv.tv_sec + tv.tv_usec/1000000. ;
+#else
+#if defined(HAVE_FTIME) && defined(HAVE_SYS_TIMEB_H)
+ static double now, first, last, last_active;
+ struct timeb tb;
+
+ ftime(&tb);
+ now = tb.time + (double)tb.millitm / 1000;
+#else
time_t now = time((time_t *)0); /* once per second */
- static char *units = "bytes";
+ static time_t first, last, last_active;
+#endif
+#endif
+
+ if (!LYShowTransferRate)
+ LYTransferRate = rateOFF;
if (bytes == 0) {
- first = last = now;
+ first = last = last_active = now;
bytes_last = bytes;
- } else if ((bytes > 0) &&
+ } else if (bytes < 0) { /* stalled */
+ bytes = bytes_last;
+ total = total_last;
+ }
+ if ((bytes > 0) &&
(now != first))
- /* 1 sec delay for transfer_rate calculation :-( */ {
+ /* 1 sec delay for transfer_rate calculation without g-t-o-d */ {
if (transfer_rate <= 0) /* the very first time */
- transfer_rate = (bytes) / (now - first); /* bytes/sec */
+ transfer_rate = (long)((bytes) / (now - first)); /* bytes/sec */
+ total_last = total;
/*
* Optimal refresh time: every 0.2 sec, use interpolation. Transfer
* rate is not constant when we have partial content in a proxy, so
* interpolation lies - will check every second at least for sure.
*/
+#ifdef HAVE_GETTIMEOFDAY
+ if (now >= last + 0.2)
+ renew = 1;
+#else
if (((bytes - bytes_last) > (transfer_rate / 5)) || (now != last)) {
-
+ renew = 1;
bytes_last += (transfer_rate / 5); /* until we got next second */
-
+ }
+#endif
+ if (renew) {
if (now != last) {
last = now;
+ if (bytes_last != bytes)
+ last_active = now;
bytes_last = bytes;
- transfer_rate = (bytes_last) / (last - first); /* more accurate here */
- }
-
- units = gettext("bytes");
- divisor = 1;
- if (LYshow_kb_rate
- && (total >= kb_units || bytes >= kb_units)) {
- units = gettext("KB");
- divisor = kb_units;
- bytes /= divisor;
- if (total > 0) total /= divisor;
+ transfer_rate = (long)(bytes / (now - first)); /* more accurate here */
}
- if (total > 0)
- sprintf (line, gettext("Read %ld of %ld %s of data"), bytes, total, units);
+ if (total > 0)
+ was_units = sprint_bytes(totalp, total, 0);
else
- sprintf (line, gettext("Read %ld %s of data"), bytes, units);
- if ((transfer_rate > 0)
- && (!LYshow_kb_rate || (bytes * divisor >= kb_units)))
- sprintf (line + strlen(line), gettext(", %ld %s/sec."), transfer_rate / divisor, units);
+ was_units = 0;
+ sprint_bytes(bytesp, bytes, was_units);
+
+ if (total > 0)
+ HTSprintf0 (&line, gettext("Read %s of %s of data"), bytesp, totalp);
else
- sprintf (line + strlen(line), ".");
- if (total < 0) {
- if (total < -1)
- strcat(line, gettext(" (Press 'z' to abort)"));
+ HTSprintf0 (&line, gettext("Read %s of data"), bytesp);
+
+ if (LYTransferRate != rateOFF
+ && transfer_rate > 0) {
+ sprint_bytes(transferp, transfer_rate, 0);
+ HTSprintf (&line, gettext(", %s/sec"), transferp);
}
+#ifdef EXP_READPROGRESS
+ if (LYTransferRate == rateEtaBYTES
+ || LYTransferRate == rateEtaKB) {
+ if (now - last_active >= 5)
+ HTSprintf (&line, gettext(" (stalled for %ld sec)"), (long)(now - last_active));
+ if (total > 0 && transfer_rate)
+ HTSprintf (&line, gettext(", ETA %ld sec"), (long)((total - bytes)/transfer_rate));
+ }
+#endif
+
+ StrAllocCat (line, ".");
+ if (total < -1)
+ StrAllocCat(line, gettext(" (Press 'z' to abort)"));
+
/* do not store the message for history page. */
statusline(line);
- CTRACE(tfp, "%s\n", line);
+ CTRACE((tfp, "%s\n", line));
}
}
+#ifdef LY_FIND_LEAKS
+ FREE(line);
+#endif
}
PRIVATE BOOL conf_cancelled = NO; /* used by HTConfirm only - kw */
@@ -200,54 +301,195 @@ PUBLIC BOOL HTLastConfirmCancelled NOARGS
#define DFT_CONFIRM ~(YES|NO)
-/* Seek confirmation. HTConfirm()
-** ------------------
+/* Seek confirmation with default answer. HTConfirmDefault()
+** --------------------------------------
*/
-PUBLIC BOOL HTConfirmDefault ARGS2(CONST char *, Msg, int, Dft)
+PUBLIC int HTConfirmDefault ARGS2(CONST char *, Msg, int, Dft)
{
+/* Meta-note: don't move the following note from its place right
+ in front of the first gettext(). As it is now, it should
+ automatically appear in generated lynx.pot files. - kw
+ */
+
+/* NOTE TO TRANSLATORS: If you provide a translation for "yes", lynx
+ * will take the first byte of the translation as a positive response
+ * to Yes/No questions. If you provide a translation for "no", lynx
+ * will take the first byte of the translation as a negative response
+ * to Yes/No questions. For both, lynx will also try to show the
+ * first byte in the prompt as a character, instead of (y) or (n),
+ * respectively. This will not work right for multibyte charsets!
+ * Don't translate "yes" and "no" for CJK character sets (or translate
+ * them to "yes" and "no"). For a translation using UTF-8, don't
+ * translate if the translation would begin with anything but a 7-bit
+ * (US_ASCII) character. That also means do not translate if the
+ * translation would begin with anything but a 7-bit character, if
+ * you use a single-byte character encoding (a charset like ISO-8859-n)
+ * but anticipate that the message catalog may be used re-encoded in
+ * UTF-8 form.
+ * For translations using other character sets, you may also wish to
+ * leave "yes" and "no" untranslated, if using (y) and (n) is the
+ * preferred behavior.
+ * Lynx will also accept y Y n N as responses unless there is a conflict
+ * with the first letter of the "yes" or "no" translation.
+ */
char *msg_yes = gettext("yes");
char *msg_no = gettext("no");
int result = -1;
+ /* If they're not really distinct in the first letter, revert to English */
+ if (TOUPPER(*msg_yes) == TOUPPER(*msg_no)) {
+ msg_yes = "yes";
+ msg_no = "no";
+ }
+
conf_cancelled = NO;
if (dump_output_immediately) { /* Non-interactive, can't respond */
+ if (Dft == DFT_CONFIRM) {
+ CTRACE((tfp, "Confirm: %s (%c/%c) ", Msg, *msg_yes, *msg_no));
+ } else {
+ CTRACE((tfp, "Confirm: %s (%c) ", Msg, (Dft == YES) ? *msg_yes : *msg_no));
+ }
+ CTRACE((tfp, "- NO, not interactive.\n"));
result = NO;
} else {
char *msg = NULL;
+ char fallback_y = 'y'; /* English letter response as fallback */
+ char fallback_n = 'n'; /* English letter response as fallback */
+
+ if (fallback_y == *msg_yes || fallback_y == *msg_no)
+ fallback_y = '\0'; /* conflict or duplication, don't use */
+ if (fallback_n == *msg_yes || fallback_n == *msg_no)
+ fallback_n = '\0'; /* conflict or duplication, don't use */
if (Dft == DFT_CONFIRM)
HTSprintf0(&msg, "%s (%c/%c) ", Msg, *msg_yes, *msg_no);
else
HTSprintf0(&msg, "%s (%c) ", Msg, (Dft == YES) ? *msg_yes : *msg_no);
+ if (LYTraceLogFP) {
+ CTRACE((tfp, "Confirm: %s", msg));
+ }
_statusline(msg);
FREE(msg);
while (result < 0) {
- int c = LYgetch();
+ int c = LYgetch_single();
#ifdef VMS
if (HadVMSInterrupt) {
HadVMSInterrupt = FALSE;
- c = *msg_no;
+ c = TOUPPER(*msg_no);
}
#endif /* VMS */
- if (c == 7 || c == 3) { /* remember we had ^G or ^C */
- conf_cancelled = YES;
+ if (c == TOUPPER(*msg_yes)) {
+ result = YES;
+ } else if (c == TOUPPER(*msg_no)) {
result = NO;
- } else if (TOUPPER(c) == TOUPPER(*msg_yes)) {
+ } else if (fallback_y && c == fallback_y) {
result = YES;
- } else if (TOUPPER(c) == TOUPPER(*msg_no)) {
- return(NO);
+ } else if (fallback_n && c == fallback_n) {
+ result = NO;
+ } else if (LYCharIsINTERRUPT(c)) { /* remember we had ^G or ^C */
+ conf_cancelled = YES;
+ result = NO;
} else if (Dft != DFT_CONFIRM) {
- return(Dft);
+ result = Dft;
+ break;
}
}
+ CTRACE((tfp, "- %s%s.\n",
+ (result != NO) ? "YES" : "NO",
+ conf_cancelled ? ", cancelled" : ""));
}
return (result);
}
+/* Seek confirmation. HTConfirm()
+** ------------------
+*/
PUBLIC BOOL HTConfirm ARGS1(CONST char *, Msg)
{
- return HTConfirmDefault(Msg, DFT_CONFIRM);
+ return (BOOL) HTConfirmDefault(Msg, DFT_CONFIRM);
+}
+
+/*
+ * Ask a post resubmission prompt with some indication of what would
+ * be resubmitted, useful especially for going backward in history.
+ * Try to use parts of the address or, if given, the title, depending
+ * on how much fits on the statusline.
+ * if_imgmap and if_file indicate how to handle an address that is
+ * a "LYNXIMGMAP:", or a "file:" URL (presumably the List Page file),
+ * respectively: 0: auto-deny, 1: auto-confirm, 2: prompt.
+ * - kw
+ */
+
+PUBLIC BOOL confirm_post_resub ARGS4(
+ CONST char*, address,
+ CONST char*, title,
+ int, if_imgmap,
+ int, if_file)
+{
+ size_t len1;
+ CONST char *msg = CONFIRM_POST_RESUBMISSION_TO;
+ char buf[240];
+ char *temp = NULL;
+ BOOL res;
+ size_t maxlen = LYcols - 6;
+ if (!address) {
+ return(NO);
+ } else if (!strncmp(address, "LYNXIMGMAP:", 11)) {
+ if (if_imgmap <= 0)
+ return(NO);
+ else if (if_imgmap == 1)
+ return(YES);
+ else
+ msg = CONFIRM_POST_LIST_RELOAD;
+ } else if (!strncmp(address, "file:", 5)) {
+ if (if_file <= 0)
+ return(NO);
+ else if (if_file == 1)
+ return(YES);
+ else
+ msg = CONFIRM_POST_LIST_RELOAD;
+ } else if (dump_output_immediately) {
+ return(NO);
+ }
+ if (maxlen >= sizeof(buf))
+ maxlen = sizeof(buf) - 1;
+ if ((len1 = strlen(msg)) +
+ strlen(address) <= maxlen) {
+ sprintf(buf, msg, address);
+ return HTConfirm(buf);
+ }
+ if (len1 + strlen(temp = HTParse(address, "",
+ PARSE_ACCESS+PARSE_HOST+PARSE_PATH
+ +PARSE_PUNCTUATION)) <= maxlen) {
+ sprintf(buf, msg, temp);
+ res = HTConfirm(buf);
+ FREE(temp);
+ return(res);
+ }
+ FREE(temp);
+ if (title && (len1 + strlen(title) <= maxlen)) {
+ sprintf(buf, msg, title);
+ return HTConfirm(buf);
+ }
+ if (len1 + strlen(temp = HTParse(address, "",
+ PARSE_ACCESS+PARSE_HOST
+ +PARSE_PUNCTUATION)) <= maxlen) {
+ sprintf(buf, msg, temp);
+ res = HTConfirm(buf);
+ FREE(temp);
+ return(res);
+ }
+ FREE(temp);
+ if ((temp = HTParse(address, "", PARSE_HOST)) && *temp &&
+ len1 + strlen(temp) <= maxlen) {
+ sprintf(buf, msg, temp);
+ res = HTConfirm(buf);
+ FREE(temp);
+ return(res);
+ }
+ FREE(temp);
+ return HTConfirm(CONFIRM_POST_RESUBMISSION);
}
/* Prompt for answer and get text back. HTPrompt()
@@ -464,28 +706,27 @@ PUBLIC void HTPromptUsernameAndPassword ARGS4(
** TRUE if the cookie should be set.
*/
PUBLIC BOOL HTConfirmCookie ARGS4(
- void *, dp,
+ domain_entry *, de,
CONST char *, server,
CONST char *, name,
CONST char *, value)
{
- domain_entry *de;
- int ch, namelen, valuelen, space_free;
+ int ch;
+ char *prompt = ADVANCED_COOKIE_CONFIRMATION;
- if ((de = (domain_entry *)dp) == NULL)
+ if (de == NULL)
return FALSE;
-#ifdef ENHANCED_COOKIES
/* If the user has specified a list of domains to allow or deny
** from the config file, then they'll already have de->bv set to
** ACCEPT_ALWAYS or REJECT_ALWAYS so we can relax and let the
- ** default cookie handling code cope with this fine. I hope.
+ ** default cookie handling code cope with this fine.
*/
-#endif
+
/*
** If the user has specified a constant action, don't prompt at all.
*/
- if (de->bv == ACCEPT_ALWAYS || de->bv == FROM_FILE)
+ if (de->bv == ACCEPT_ALWAYS)
return TRUE;
if (de->bv == REJECT_ALWAYS)
return FALSE;
@@ -502,42 +743,77 @@ PUBLIC BOOL HTConfirmCookie ARGS4(
/*
** Estimate how much of the cookie we can show.
*/
- if (de != NULL) {
- if (de->bv == ACCEPT_ALWAYS)
- return TRUE;
- if (de->bv == REJECT_ALWAYS)
- return FALSE;
- }
- space_free = (((LYcols - 1)
- - strlen(ADVANCED_COOKIE_CONFIRMATION))
- - strlen(server));
- if (space_free < 0)
- space_free = 0;
- namelen = strlen(name);
- valuelen = strlen(value);
- if ((namelen + valuelen) > space_free) {
- /*
- ** Argh... there isn't enough space on our single line for
- ** the whole cookie. Reduce them both by a percentage.
- ** This should be smarter.
- */
- int percentage; /* no float */
- percentage = (100 * space_free) / (namelen + valuelen);
- namelen = (percentage * namelen) / 100;
- valuelen = (percentage * valuelen) / 100;
- }
if(!LYAcceptAllCookies) {
+ int namelen, valuelen, space_free, percentage;
char *message = 0;
- HTSprintf(&message, ADVANCED_COOKIE_CONFIRMATION,
- server, namelen, name, valuelen, value);
+
+ space_free = ((LYcols - 1)
+ - (strlen(prompt)
+ - 10) /* %s and %.*s and %.*s chars */
+ - strlen(server));
+ if (space_free < 0)
+ space_free = 0;
+ namelen = strlen(name);
+ valuelen = strlen(value);
+ if ((namelen + valuelen) > space_free) {
+ /*
+ ** Argh... there isn't enough space on our single line for
+ ** the whole cookie. Reduce them both by a percentage.
+ ** This should be smarter.
+ */
+ percentage = (100 * space_free) / (namelen + valuelen);
+ namelen = (percentage * namelen) / 100;
+ valuelen = (percentage * valuelen) / 100;
+ }
+ HTSprintf(&message, prompt, server, namelen, name, valuelen, value);
_statusline(message);
FREE(message);
}
while (1) {
- if(!LYAcceptAllCookies) {
- ch = LYgetch();
- } else {
+ if(LYAcceptAllCookies) {
ch = 'A';
+ } else {
+ ch = LYgetch_single();
+#if defined(LOCALE) && defined(HAVE_GETTEXT) && !defined(gettext)
+ /*
+ * Special-purpose workaround for gettext support (we should do
+ * this in a more general way -- after 2.8.3).
+ *
+ * NOTE TO TRANSLATORS: If the prompt has been rendered into
+ * another language, and if yes/no are distinct, assume the
+ * translator can make an ordered list in parentheses with one
+ * capital letter for each as we assumed in HTConfirmDefault().
+ * The list has to be in the same order as in the original message,
+ * and the four capital letters chosen to not match those in the
+ * original unless they have the same position.
+ *
+ * Example:
+ * (Y/N/Always/neVer) - English (original)
+ * (O/N/Toujours/Jamais) - French
+ */
+ {
+#define L_PAREN '('
+#define R_PAREN ')'
+ char *p;
+ char *s = "YNAV\007\003"; /* see ADVANCED_COOKIE_CONFIRMATION */
+
+ if (strchr(s, ch) == 0
+ && isalpha(ch)
+ && (p = strrchr(prompt, L_PAREN)) != 0) {
+
+ while (*p != R_PAREN && *p != 0 && isalpha(UCH(*s))) {
+ if (*p == ch) {
+ ch = *s;
+ break;
+ } else {
+ if (isalpha(UCH(*p)) && (*p == TOUPPER(*p)))
+ s++;
+ p++;
+ }
+ }
+ }
+ }
+#endif
}
#ifdef VMS
if (HadVMSInterrupt) {
@@ -545,7 +821,7 @@ PUBLIC BOOL HTConfirmCookie ARGS4(
ch = 'N';
}
#endif /* VMS */
- switch(TOUPPER(ch)) {
+ switch(ch) {
case 'A':
/*
** Set to accept all cookies for this domain.
@@ -555,11 +831,10 @@ PUBLIC BOOL HTConfirmCookie ARGS4(
return TRUE;
case 'N':
- case 7: /* Ctrl-G */
- case 3: /* Ctrl-C */
/*
** Reject the cookie.
*/
+ reject:
HTUserMsg(REJECTING_COOKIE);
return FALSE;
@@ -579,6 +854,8 @@ PUBLIC BOOL HTConfirmCookie ARGS4(
return TRUE;
default:
+ if (LYCharIsINTERRUPT(ch))
+ goto reject;
continue;
}
}
@@ -637,15 +914,15 @@ PUBLIC int HTConfirmPostRedirect ARGS2(
if (user_mode == NOVICE_MODE) {
on_screen = 2;
- move(LYlines-2, 0);
+ LYmove(LYlines-2, 0);
HTSprintf0(&StatusInfo, SERVER_ASKED_FOR_REDIRECTION, server_status);
- addstr(StatusInfo);
- clrtoeol();
- move(LYlines-1, 0);
+ LYaddstr(StatusInfo);
+ LYclrtoeol();
+ LYmove(LYlines-1, 0);
HTSprintf0(&url, "URL: %.*s",
(LYcols < 250 ? LYcols-6 : 250), Redirecting_url);
- addstr(url);
- clrtoeol();
+ LYaddstr(url);
+ LYclrtoeol();
if (server_status == 301) {
_statusline(PROCEED_GET_CANCEL);
} else {
@@ -671,8 +948,8 @@ PUBLIC int HTConfirmPostRedirect ARGS2(
case 1:
_statusline(show_POST_url);
}
- c = LYgetch();
- switch (TOUPPER(c)) {
+ c = LYgetch_single();
+ switch (c) {
case 'P':
/*
** Proceed with 301 or 307 redirect of POST
@@ -730,3 +1007,40 @@ PUBLIC int HTConfirmPostRedirect ARGS2(
FREE(url);
return (result);
}
+
+#define okToSleep() (!crawl && !traversal && LYCursesON)
+
+/*
+ * Sleep for the given message class's time.
+ */
+PUBLIC void LYSleepAlert NOARGS
+{
+ if (okToSleep())
+ LYSleep(AlertSecs);
+}
+
+PUBLIC void LYSleepInfo NOARGS
+{
+ if (okToSleep())
+ LYSleep(InfoSecs);
+}
+
+PUBLIC void LYSleepMsg NOARGS
+{
+ if (okToSleep())
+ LYSleep(MessageSecs);
+}
+
+/*
+ * LYstrerror emulates the ANSI strerror() function.
+ */
+#ifdef LYStrerror
+ /* defined as macro in .h file. */
+#else
+PUBLIC char *LYStrerror ARGS1(int, code)
+{
+ static char temp[80];
+ sprintf(temp, "System errno is %d.\r\n", code);
+ return temp;
+}
+#endif /* HAVE_STRERROR */
diff --git a/gnu/usr.bin/lynx/src/HTAlert.h b/gnu/usr.bin/lynx/src/HTAlert.h
index f9559036c40..87ac615e202 100644
--- a/gnu/usr.bin/lynx/src/HTAlert.h
+++ b/gnu/usr.bin/lynx/src/HTAlert.h
@@ -8,9 +8,7 @@
#ifndef HTALERT_H
#define HTALERT_H 1
-#ifndef HTUTILS_H
-#include <HTUtils.h>
-#endif
+#include <LYCookie.h>
#define ALERT_PREFIX_LEN 5
@@ -62,7 +60,7 @@ extern BOOL HTLastConfirmCancelled NOPARAMS;
** If the user enters 'YES', returns TRUE, returns FALSE
** otherwise.
*/
-extern BOOL HTConfirmDefault PARAMS ((CONST char * Msg, int Dft));
+extern int HTConfirmDefault PARAMS ((CONST char * Msg, int Dft));
/* Display a message, then wait for 'yes' or 'no'.
@@ -76,6 +74,11 @@ extern BOOL HTConfirmDefault PARAMS ((CONST char * Msg, int Dft));
*/
extern BOOL HTConfirm PARAMS ((CONST char * Msg));
+extern BOOL confirm_post_resub PARAMS((
+ CONST char* address,
+ CONST char* title,
+ int if_imgmap,
+ int if_file));
/* Prompt for password without echoing the reply
*/
@@ -124,7 +127,7 @@ extern void HTPromptUsernameAndPassword PARAMS((
** TRUE if the cookie should be set.
*/
extern BOOL HTConfirmCookie PARAMS((
- void * dp,
+ domain_entry * dp,
CONST char * server,
CONST char * name,
CONST char * value));
@@ -145,4 +148,16 @@ extern int HTConfirmPostRedirect PARAMS((
CONST char * Redirecting_url,
int server_status));
+
+extern void LYSleepAlert NOPARAMS;
+extern void LYSleepInfo NOPARAMS;
+extern void LYSleepMsg NOPARAMS;
+
+#ifdef HAVE_STRERROR
+#define LYStrerror strerror
+#else
+extern char *LYStrerror PARAMS((
+ int code));
+#endif /* HAVE_STRERROR */
+
#endif /* HTALERT_H */
diff --git a/gnu/usr.bin/lynx/src/HTFWriter.c b/gnu/usr.bin/lynx/src/HTFWriter.c
index 7211c3ef1e5..629857e572d 100644
--- a/gnu/usr.bin/lynx/src/HTFWriter.c
+++ b/gnu/usr.bin/lynx/src/HTFWriter.c
@@ -13,6 +13,14 @@
#include <HTFWriter.h>
#include <HTSaveToFile.h>
+#ifdef WIN_EX
+#include <HTParse.h>
+#endif
+
+#if _WIN_CC
+extern int exec_command(char * cmd, int wait_flag); /* xsystem.c */
+#endif
+
#include <HTFormat.h>
#include <UCDefs.h>
#include <HTAlert.h>
@@ -24,10 +32,15 @@
#include <LYGlobalDefs.h>
#include <LYClean.h>
#include <GridText.h>
+#include <LYExtern.h>
#include <LYexit.h>
#include <LYLeaks.h>
#include <LYKeymap.h>
+#ifdef EXP_PERSISTENT_COOKIES
+#include <LYCookie.h>
+#endif
+
PUBLIC char * WWW_Download_File=NULL; /* contains the name of the temp file
** which is being downloaded into
*/
@@ -80,7 +93,9 @@ struct _HTStream {
*/
PRIVATE void HTFWriter_put_character ARGS2(HTStream *, me, char, c)
{
- putc(c, me->fp);
+ if (me->fp) {
+ putc(c, me->fp);
+ }
}
/* String handling
@@ -90,7 +105,9 @@ PRIVATE void HTFWriter_put_character ARGS2(HTStream *, me, char, c)
*/
PRIVATE void HTFWriter_put_string ARGS2(HTStream *, me, CONST char*, s)
{
- fputs(s, me->fp);
+ if (me->fp) {
+ fputs(s, me->fp);
+ }
}
/* Buffer write. Buffers can (and should!) be big.
@@ -98,7 +115,9 @@ PRIVATE void HTFWriter_put_string ARGS2(HTStream *, me, CONST char*, s)
*/
PRIVATE void HTFWriter_write ARGS3(HTStream *, me, CONST char*, s, int, l)
{
- fwrite(s, 1, l, me->fp);
+ if (me->fp) {
+ fwrite(s, 1, l, me->fp);
+ }
}
@@ -113,14 +132,20 @@ PRIVATE void HTFWriter_write ARGS3(HTStream *, me, CONST char*, s, int, l)
*/
PRIVATE void HTFWriter_free ARGS1(HTStream *, me)
{
- FILE *fp = NULL;
int len;
char *path = NULL;
char *addr = NULL;
int status;
BOOL use_gzread = NO;
+ BOOLEAN found = FALSE;
+#ifdef WIN_EX
+ HANDLE cur_handle;
+
+ cur_handle = GetForegroundWindow();
+#endif
- fflush(me->fp);
+ if (me->fp)
+ fflush(me->fp);
if (me->end_command) { /* Temp file */
LYCloseTempFP(me->fp);
#ifdef VMS
@@ -148,30 +173,31 @@ PRIVATE void HTFWriter_free ARGS1(HTStream *, me)
* a temporary file for uncompression. - FM
*/
if (me->anchor->FileCache != NULL) {
- BOOL skip_loadfile = (me->viewer_command != NULL);
+ BOOL skip_loadfile = (BOOL) (me->viewer_command != NULL);
/*
* Save the path with the "gz" or "Z" suffix trimmed,
* and remove any previous uncompressed copy. - FM
*/
StrAllocCopy(path, me->anchor->FileCache);
- if ((len = strlen(path)) > 3) {
- if (!strcasecomp(&path[len-3], "bz2")) {
- path[len-4] = '\0';
- remove(path);
- } else if (!strcasecomp(&path[len-2], "gz")) {
+ if ((len = strlen(path)) > 3 &&
+ !strcasecomp(&path[len-2], "gz")) {
#ifdef USE_ZLIB
- if (!skip_loadfile) {
- use_gzread = YES;
- } else
+ if (!skip_loadfile) {
+ use_gzread = YES;
+ } else
#endif /* USE_ZLIB */
- {
- path[len-3] = '\0';
- remove(path);
- }
- } else if (!strcasecomp(&path[len-1], "Z")) {
- path[len-2] = '\0';
+ {
+ path[len-3] = '\0';
remove(path);
}
+#ifdef BZIP2_PATH
+ } else if (len > 4 && !strcasecomp(&path[len-3], "bz2")) {
+ path[len-4] = '\0';
+ remove(path);
+#endif /* BZIP2_PATH */
+ } else if (len > 2 && !strcasecomp(&path[len-1], "Z")) {
+ path[len-2] = '\0';
+ remove(path);
}
if (!use_gzread) {
if (!dump_output_immediately) {
@@ -185,21 +211,19 @@ PRIVATE void HTFWriter_free ARGS1(HTStream *, me)
*/
if (me->end_command && me->end_command[0])
LYSystem(me->end_command);
- fp = fopen(me->anchor->FileCache, "r");
+ found = LYCanReadFile(me->anchor->FileCache);
}
- if (fp != NULL) {
+ if (found) {
/*
* It's still there with the "gz" or "Z" suffix,
* so the uncompression failed. - FM
*/
- fclose(fp);
- fp = NULL;
if (!dump_output_immediately) {
lynx_force_repaint();
- refresh();
+ LYrefresh();
}
HTAlert(ERROR_UNCOMPRESSING_TEMP);
- remove(me->anchor->FileCache);
+ LYRemoveTemp(me->anchor->FileCache);
FREE(me->anchor->FileCache);
} else {
/*
@@ -294,16 +318,29 @@ PRIVATE void HTFWriter_free ARGS1(HTStream *, me)
* Tell user what's happening. - FM
*/
HTProgress(me->end_command);
+#ifndef WIN_EX
stop_curses();
+#endif
}
+#if _WIN_CC
+ exec_command(me->end_command, FALSE);
+#else
LYSystem(me->end_command);
-
+#endif
if (me->remove_command) {
/* NEVER REMOVE THE FILE unless during an abort!!!*/
FREE(me->remove_command);
}
- if (!dump_output_immediately)
+ if (!dump_output_immediately) {
+#ifdef WIN_EX
+ if (focus_window) {
+ HTInfoMsg("Set focus1");
+ status = SetForegroundWindow(cur_handle);
+ }
+#else
start_curses();
+#endif
+ }
} else
status = HTLoadFile(addr,
me->anchor,
@@ -337,16 +374,30 @@ PRIVATE void HTFWriter_free ARGS1(HTStream *, me)
* Tell user what's happening. - FM
*/
_HTProgress(me->end_command);
+#ifndef WIN_EX
stop_curses();
+#endif
}
+#if _WIN_CC
+ exec_command(me->end_command, FALSE);
+#else
LYSystem(me->end_command);
+#endif
if (me->remove_command) {
/* NEVER REMOVE THE FILE unless during an abort!!!*/
FREE(me->remove_command);
}
- if (!dump_output_immediately)
+ if (!dump_output_immediately) {
+#ifdef WIN_EX
+ if (focus_window) {
+ HTInfoMsg("Set focus2");
+ status = SetForegroundWindow(cur_handle);
+ }
+#else
start_curses();
+#endif
+ }
} else {
/*
* It's a file we saved to disk for handling
@@ -356,6 +407,16 @@ PRIVATE void HTFWriter_free ARGS1(HTStream *, me)
/* NEVER REMOVE THE FILE unless during an abort!!!*/
FREE(me->remove_command);
}
+ if (!dump_output_immediately) {
+#ifdef WIN_EX
+ if (focus_window) {
+ HTInfoMsg("Set focus3");
+ status = SetForegroundWindow(cur_handle);
+ }
+#else
+ start_curses();
+#endif
+ }
}
FREE(me->end_command);
}
@@ -365,7 +426,15 @@ PRIVATE void HTFWriter_free ARGS1(HTStream *, me)
if (me->anchor->FileCache)
remove(me->anchor->FileCache);
FREE(me);
- exit_immediately(0);
+#ifdef EXP_PERSISTENT_COOKIES
+ /*
+ * We want to save cookies picked up when in source
+ * mode. ...
+ */
+ if (persistent_cookies)
+ LYStoreCookies(LYCookieSaveFile);
+#endif /* EXP_PERSISTENT_COOKIES */
+ exit_immediately(EXIT_SUCCESS);
}
FREE(me);
@@ -379,11 +448,11 @@ PRIVATE void HTFWriter_abort ARGS2(
HTStream *, me,
HTError, e GCC_UNUSED)
{
- CTRACE(tfp,"HTFWriter_abort called\n");
+ CTRACE((tfp,"HTFWriter_abort called\n"));
LYCloseTempFP(me->fp);
FREE(me->viewer_command);
if (me->end_command) { /* Temp file */
- CTRACE(tfp, "HTFWriter: Aborting: file not executed.\n");
+ CTRACE((tfp, "HTFWriter: Aborting: file not executed or saved.\n"));
FREE(me->end_command);
if (me->remove_command) {
LYSystem(me->remove_command);
@@ -418,7 +487,7 @@ PUBLIC HTStream* HTFWriter_new ARGS1(FILE *, fp)
if (!fp)
return NULL;
- me = (HTStream*)calloc(sizeof(*me),1);
+ me = typecalloc(HTStream);
if (me == NULL)
outofmem(__FILE__, "HTFWriter_new");
me->isa = &HTFWriter;
@@ -432,11 +501,93 @@ PUBLIC HTStream* HTFWriter_new ARGS1(FILE *, fp)
return me;
}
+PRIVATE void chrcat ARGS2(
+ char *, result,
+ int, ch)
+{
+ result += strlen(result);
+ *result++ = (char)ch;
+ *result = 0;
+}
+
/* Make system command from template
** ---------------------------------
**
** See mailcap spec for description of template.
*/
+PRIVATE char *mailcap_substitute ARGS3(
+ HTParentAnchor *, anchor,
+ HTPresentation *, pres,
+ char *, fnam)
+{
+ int pass;
+ int skip;
+ size_t need = 0;
+ char *result = 0;
+ char *s;
+ char *repl;
+
+ for (pass = 0; pass < 2; pass++) {
+ for (s = pres->command; *s; s++) {
+ if (*s == '%') {
+ repl = 0;
+ skip = 0;
+ if (s[1] == 't') {
+ repl = pres->rep->name;
+ skip = 1;
+ } else if (s[1] == 's') {
+ repl = fnam;
+ skip = 1;
+ } else if (!strncasecomp(s+1, "{charset}", 9)) {
+ repl = anchor->charset;
+ skip = 9;
+ } else if (!strncasecomp(s+1, "{encoding}", 10)) {
+ repl = anchor->content_encoding;
+ skip = 10;
+ }
+ if (skip != 0) {
+ if (repl == 0)
+ repl = "";
+ if (pass) {
+ strcat(result, repl);
+ } else {
+ need += strlen(repl);
+ }
+ s += skip;
+ } else {
+ if (pass) {
+ chrcat(result, *s);
+ } else {
+ need++;
+ }
+ }
+ } else {
+ if (pass) {
+ chrcat(result, *s);
+ } else {
+ need++;
+ }
+ }
+ }
+ if (pass == 0) {
+ if ((result = malloc(need + 1)) == 0)
+ outofmem(__FILE__, "mailcap_substitute");
+ *result = 0;
+ }
+ }
+#if defined(UNIX)
+ /* if we don't have a "%s" token, expect to provide the file via stdin */
+ if (strstr(pres->command, "%s") == 0) {
+ char *prepend = 0;
+ char *format = "( %s ) < %s";
+ HTSprintf(&prepend, "( %s", pres->command); /* ...avoid quoting */
+ HTAddParam(&prepend, format, 2, fnam); /* ...to quote if needed */
+ FREE(result);
+ result = prepend;
+ }
+#endif
+ return result;
+}
#ifndef VMS
#define REMOVE_COMMAND "/bin/rm -f %s"
@@ -466,7 +617,6 @@ PUBLIC HTStream* HTSaveAndExecute ARGS3(
LYCancelledFetch = TRUE;
return(NULL);
}
-
#if defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
if (pres->quality == 999.0) { /* exec link */
if (dump_output_immediately) {
@@ -477,11 +627,12 @@ PUBLIC HTStream* HTSaveAndExecute ARGS3(
HTAlert(EXECUTION_DISABLED);
return HTPlainPresent(pres, anchor, sink);
}
- if (!local_exec)
+ if (!local_exec) {
if (local_exec_on_local_files &&
(LYJumpFileURL ||
!strncmp(anchor->address,"file://localhost",16))) {
/* allow it to continue */
+ ;
} else {
char *buf = 0;
@@ -491,6 +642,7 @@ PUBLIC HTStream* HTSaveAndExecute ARGS3(
FREE(buf);
return HTPlainPresent(pres, anchor, sink);
}
+ }
}
#endif /* EXEC_LINKS || EXEC_SCRIPTS */
@@ -498,7 +650,7 @@ PUBLIC HTStream* HTSaveAndExecute ARGS3(
return(HTSaveToFile(pres, anchor, sink));
}
- me = (HTStream*)calloc(sizeof(*me),1);
+ me = typecalloc(HTStream);
if (me == NULL)
outofmem(__FILE__, "HTSaveAndExecute");
me->isa = &HTFWriter;
@@ -508,8 +660,59 @@ PUBLIC HTStream* HTSaveAndExecute ARGS3(
me->sink = sink;
if (LYCachedTemp(fnam, &(anchor->FileCache))) {
- me->fp = LYNewBinFile (fnam);
+ /* This used to be LYNewBinFile(fnam); changed to a different call
+ * so that the open fp gets registered in the list keeping track of
+ * temp files, equivalent to when LYOpenTemp() gets called below.
+ * This avoids a file descriptor leak caused by LYCloseTempFP()
+ * not being able to find the fp. The ".bin" suffix is expected
+ * to not be used, it's only for fallback in unusual error cases. - kw
+ */
+ me->fp = LYOpenTempRewrite(fnam, ".bin", BIN_W);
} else {
+#if defined(WIN_EX) && !defined(__CYGWIN__) /* 1998/01/04 (Sun) */
+ if (!strncmp(anchor->address,"file://localhost",16)) {
+
+ /* 1998/01/23 (Fri) 17:38:26 */
+ unsigned char *cp, *view_fname;
+
+#define IS_SJIS_HI1(hi) ((0x81<=hi)&&(hi<=0x9F)) /* 1st lev. */
+#define IS_SJIS_HI2(hi) ((0xE0<=hi)&&(hi<=0xEF)) /* 2nd lev. */
+
+ me->fp = NULL;
+
+ view_fname = fnam + 3;
+ LYstrncpy(view_fname, anchor->address + 17, sizeof(fnam) - 5);
+ HTUnEscape(view_fname);
+
+ if (strchr(view_fname, ':')==NULL) {
+ fnam[0] = windows_drive[0];
+ fnam[1] = windows_drive[1];
+ fnam[2] = '/';
+ view_fname = fnam;
+ }
+
+ /* 1998/04/21 (Tue) 11:04:16 */
+ cp = view_fname;
+ while (*cp) {
+ if (IS_SJIS_HI1(*cp) || IS_SJIS_HI2(*cp)) {
+ cp += 2;
+ continue;
+ } else if (*cp == '/') {
+ *cp = '\\';
+ }
+ cp++;
+ }
+ if (strchr(view_fname, ' '))
+ view_fname = (unsigned char *) quote_pathname(view_fname);
+
+ StrAllocCopy(me->viewer_command, pres->command);
+
+ me->end_command = mailcap_substitute(anchor, pres, view_fname);
+ me->remove_command = NULL;
+
+ return me;
+ }
+#endif
/*
* Check for a suffix.
* Save the file under a suitably suffixed name.
@@ -521,11 +724,13 @@ PUBLIC HTStream* HTSaveAndExecute ARGS3(
} else if (!strcasecomp(pres->rep->name,
"application/octet-stream")) {
suffix = ".bin";
- } else if ((suffix = HTFileSuffix(pres->rep, anchor->content_encoding)) == 0
- || *suffix != '.') {
+ } else if (
+ (suffix = HTFileSuffix(pres->rep, anchor->content_encoding)) == 0
+ || *suffix != '.')
+ {
suffix = HTML_SUFFIX;
}
- me->fp = LYOpenTemp(fnam, suffix, "wb");
+ me->fp = LYOpenTemp(fnam, suffix, BIN_W);
}
if (!me->fp) {
@@ -538,9 +743,7 @@ PUBLIC HTStream* HTSaveAndExecute ARGS3(
/*
* Make command to process file.
*/
- me->end_command = 0;
- HTAddParam(&(me->end_command), pres->command, 1, fnam);
- HTEndParam(&(me->end_command), pres->command, 1);
+ me->end_command = mailcap_substitute(anchor, pres, fnam);
/*
* Make command to delete file.
@@ -582,7 +785,7 @@ PUBLIC HTStream* HTSaveToFile ARGS3(
int c = 0;
BOOL IsBinary = TRUE;
- ret_obj = (HTStream*)calloc(sizeof(* ret_obj),1);
+ ret_obj = typecalloc(HTStream);
if (ret_obj == NULL)
outofmem(__FILE__, "HTSaveToFile");
ret_obj->isa = &HTFWriter;
@@ -614,7 +817,7 @@ PUBLIC HTStream* HTSaveToFile ARGS3(
return(NULL);
}
- if (((cp=strchr(pres->rep->name, ';')) != NULL) &&
+ if (((cp = strchr(pres->rep->name, ';')) != NULL) &&
strstr((cp+1), "charset") != NULL) {
_user_message(MSG_DOWNLOAD_OR_CANCEL, pres->rep->name);
} else if (*(pres->rep->name) != '\0') {
@@ -623,8 +826,8 @@ PUBLIC HTStream* HTSaveToFile ARGS3(
_statusline(CANNOT_DISPLAY_FILE_D_OR_C);
}
- while(TOUPPER(c)!='C' && TOUPPER(c)!='D' && c!=7) {
- c=LYgetch();
+ while (c != 'D' && c != 'C' && !LYCharIsINTERRUPT(c)) {
+ c = LYgetch_single();
#ifdef VMS
/*
* 'C'ancel on Control-C or Control-Y and
@@ -640,7 +843,7 @@ PUBLIC HTStream* HTSaveToFile ARGS3(
/*
* Cancel on 'C', 'c' or Control-G or Control-C.
*/
- if (TOUPPER(c)=='C' || c==7 || c==3) {
+ if (c == 'C' || LYCharIsINTERRUPT(c)) {
_statusline(CANCELLING_FILE);
LYCancelDownload = TRUE;
FREE(ret_obj);
@@ -652,7 +855,14 @@ PUBLIC HTStream* HTSaveToFile ARGS3(
* Set up a 'D'ownload.
*/
if (LYCachedTemp(fnam, &(anchor->FileCache))) {
- ret_obj->fp = LYNewBinFile (fnam);
+ /* This used to be LYNewBinFile(fnam); changed to a different call
+ * so that the open fp gets registered in the list keeping track of
+ * temp files, equivalent to when LYOpenTemp() gets called below.
+ * This avoids a file descriptor leak caused by LYCloseTempFP()
+ * not being able to find the fp. The ".bin" suffix is expected
+ * to not be used, it's only for fallback in unusual error cases. - kw
+ */
+ ret_obj->fp = LYOpenTempRewrite(fnam, ".bin", BIN_W);
} else {
/*
* Check for a suffix.
@@ -670,7 +880,7 @@ PUBLIC HTStream* HTSaveToFile ARGS3(
|| *suffix != '.') {
suffix = HTML_SUFFIX;
}
- ret_obj->fp = LYOpenTemp(fnam, suffix, "wb");
+ ret_obj->fp = LYOpenTemp(fnam, suffix, BIN_W);
}
if (!ret_obj->fp) {
@@ -754,9 +964,16 @@ Prepend_BASE:
fprintf(ret_obj->fp,
"<!-- X-URL: %s -->\n", anchor->address);
- if (anchor->date && *anchor->date)
- fprintf(ret_obj->fp,
+ if (anchor->date && *anchor->date) {
+ fprintf(ret_obj->fp,
"<!-- Date: %s -->\n", anchor->date);
+ if (anchor->last_modified && *anchor->last_modified
+ && strcmp(anchor->last_modified, anchor->date)
+ && strcmp(anchor->last_modified, "Thu, 01 Jan 1970 00:00:01 GMT")) {
+ fprintf(ret_obj->fp,
+ "<!-- Last-Modified: %s -->\n", anchor->last_modified);
+ }
+ }
fprintf(ret_obj->fp,
"<BASE HREF=\"%s\">\n\n", (temp ? temp : anchor->address));
FREE(temp);
@@ -807,7 +1024,6 @@ PUBLIC HTStream* HTCompressed ARGS3(
char *uncompress_mask = NULL;
char *compress_suffix = "";
CONST char *middle;
- FILE *fp = NULL;
/*
* Deal with any inappropriate invocations of this function,
@@ -832,12 +1048,7 @@ PUBLIC HTStream* HTCompressed ARGS3(
* We have a presentation mapping for it. - FM
*/
can_present = TRUE;
- if (!strcasecomp(anchor->content_encoding, "x-bzip2") ||
- !strcasecomp(anchor->content_encoding, "bzip")) {
- StrAllocCopy(uncompress_mask, BZIP2_PATH);
- StrAllocCat(uncompress_mask, " -d %s");
- compress_suffix = "bz2";
- } else if (!strcasecomp(anchor->content_encoding, "x-gzip") ||
+ if (!strcasecomp(anchor->content_encoding, "x-gzip") ||
!strcasecomp(anchor->content_encoding, "gzip")) {
/*
* It's compressed with the modern gzip. - FM
@@ -845,6 +1056,13 @@ PUBLIC HTStream* HTCompressed ARGS3(
StrAllocCopy(uncompress_mask, GZIP_PATH);
StrAllocCat(uncompress_mask, " -d --no-name %s");
compress_suffix = "gz";
+#ifdef BZIP2_PATH
+ } else if (!strcasecomp(anchor->content_encoding, "x-bzip2") ||
+ !strcasecomp(anchor->content_encoding, "bzip2")) {
+ StrAllocCopy(uncompress_mask, BZIP2_PATH);
+ StrAllocCat(uncompress_mask, " -d %s");
+ compress_suffix = "bz2";
+#endif /* BZIP2_PATH */
} else if (!strcasecomp(anchor->content_encoding, "x-compress") ||
!strcasecomp(anchor->content_encoding, "compress")) {
/*
@@ -870,7 +1088,15 @@ PUBLIC HTStream* HTCompressed ARGS3(
* and pass it back to be handled as that type. - FM
*/
if (strchr(anchor->content_encoding, '/') == NULL) {
- StrAllocCopy(type, "application/");
+ /*
+ * Use "x-" prefix, none of the types we are likely to
+ * construct here are official. That is we generate
+ * "application/x-gzip" and so on. - kw
+ */
+ if (!strncasecomp(anchor->content_encoding, "x-", 2))
+ StrAllocCopy(type, "application/");
+ else
+ StrAllocCopy(type, "application/x-");
StrAllocCat(type, anchor->content_encoding);
} else {
StrAllocCopy(type, anchor->content_encoding);
@@ -886,7 +1112,7 @@ PUBLIC HTStream* HTCompressed ARGS3(
* Set up the stream structure for uncompressing and then
* handling based on the uncompressed Content-Type.- FM
*/
- me = (HTStream*)calloc(sizeof(*me),1);
+ me = typecalloc(HTStream);
if (me == NULL)
outofmem(__FILE__, "HTCompressed");
me->isa = &HTFWriter;
@@ -902,10 +1128,7 @@ PUBLIC HTStream* HTCompressed ARGS3(
* Remove any old versions of the file. - FM
*/
if (anchor->FileCache) {
- while ((fp = fopen(anchor->FileCache, "r")) != NULL) {
- fclose(fp);
- remove(anchor->FileCache);
- }
+ LYRemoveTemp(anchor->FileCache);
FREE(anchor->FileCache);
}
@@ -950,7 +1173,7 @@ PUBLIC HTStream* HTCompressed ARGS3(
/*
* Open the file for receiving the compressed input stream. - FM
*/
- me->fp = LYOpenTemp (fnam, temp, "wb");
+ me->fp = LYOpenTemp (fnam, temp, BIN_W);
if (!me->fp) {
HTAlert(CANNOT_OPEN_TEMP);
FREE(uncompress_mask);
@@ -1021,7 +1244,7 @@ PUBLIC HTStream* HTDumpToStdout ARGS3(
HTStream *, sink GCC_UNUSED)
{
HTStream * ret_obj;
- ret_obj = (HTStream*)calloc(sizeof(* ret_obj),1);
+ ret_obj = typecalloc(HTStream);
if (ret_obj == NULL)
outofmem(__FILE__, "HTDumpToStdout");
ret_obj->isa = &HTFWriter;
diff --git a/gnu/usr.bin/lynx/src/HTFont.h b/gnu/usr.bin/lynx/src/HTFont.h
index 9e7a920209f..9404b88f606 100644
--- a/gnu/usr.bin/lynx/src/HTFont.h
+++ b/gnu/usr.bin/lynx/src/HTFont.h
@@ -8,14 +8,6 @@
typedef long int HTMLFont; /* For now */
-#ifndef HT_NON_BREAK_SPACE
-#define HT_NON_BREAK_SPACE ((char)1) /* For now */
-#endif /* !HT_NON_BREAK_SPACE */
-#ifndef HT_EN_SPACE
-#define HT_EN_SPACE ((char)2) /* For now */
-#endif /* !HT_EN_SPACE */
-
-
#define HT_FONT 0
#define HT_CAPITALS 1
#define HT_BOLD 2
@@ -26,4 +18,32 @@ typedef long int HTMLFont; /* For now */
#define HT_BLACK 0
#define HT_WHITE 1
+/*
+** Lynx internal character representations.
+*/
+#define HT_NON_BREAK_SPACE ((char)1)
+#define HT_EN_SPACE ((char)2)
+#define LY_UNDERLINE_START_CHAR '\003'
+#define LY_UNDERLINE_END_CHAR '\004'
+
+/* Turn about is fair play ASCII platforms use EBCDIC tab;
+ EBCDIC platforms use ASCII tab for LY_BOLD_START_CHAR.
+*/
+#ifdef EBCDIC
+#define LY_BOLD_START_CHAR '\011'
+#else
+#define LY_BOLD_START_CHAR '\005'
+#endif
+
+#define LY_BOLD_END_CHAR '\006'
+#define LY_SOFT_HYPHEN ((char)7)
+#define LY_SOFT_NEWLINE ((char)8)
+
+#ifdef EBCDIC
+#define IsSpecialAttrChar(a) (((a) > '\002') && ((a) <= '\011') && ((a)!='\t'))
+#else
+#define IsSpecialAttrChar(a) (((a) > '\002') && ((a) <= '\010'))
+#endif
+
+
#endif /* HTFONT_H */
diff --git a/gnu/usr.bin/lynx/src/HTForms.h b/gnu/usr.bin/lynx/src/HTForms.h
index ff7bc96271c..cdfa3688d71 100644
--- a/gnu/usr.bin/lynx/src/HTForms.h
+++ b/gnu/usr.bin/lynx/src/HTForms.h
@@ -6,9 +6,21 @@
#endif /* LYSTRUCTS_H */
/* in LYForms.c */
+
+/* change_form_link calls change_form_link_ex with all its args and FALSE as
+ last arg */
extern int change_form_link PARAMS((struct link *form_link,
- document *newdoc, BOOLEAN *refresh_screen,
- char *link_name, char *link_value));
+ document *newdoc, BOOLEAN *refresh_screen,
+ char *link_name, char *link_value,
+ BOOLEAN use_last_tfpos,
+ BOOLEAN immediate_submit));
+
+extern int change_form_link_ex PARAMS((struct link *form_link,
+ document *newdoc, BOOLEAN *refresh_screen,
+ char *link_name, char *link_value,
+ BOOLEAN use_last_tfpos,
+ BOOLEAN immediate_submit,
+ BOOLEAN draw_only));
/* InputFieldData is used to pass the info between
* HTML.c and Gridtext.c in HText_beginInput()
@@ -27,15 +39,15 @@ typedef struct _InputFieldData {
CONST char *maxlength;
CONST char *md;
CONST char *min;
- CONST char *name;
+ CONST char *name;
CONST char *size;
CONST char *src;
CONST char *type;
char *value;
CONST char *width;
- int name_cs; /* charset handle for name */
- int value_cs; /* charset handle for value */
- CONST char *accept_cs;
+ int name_cs; /* charset handle for name */
+ int value_cs; /* charset handle for value */
+ CONST char *accept_cs;
} InputFieldData;
/* The OptionType structure is for a linked list of option entries
@@ -66,18 +78,18 @@ typedef struct _FormInfo {
int hrange; /* high numerical range */
int lrange; /* low numerical range */
OptionType * select_list; /* array of option choices */
- char * submit_action; /* form's action */
- int submit_method; /* form's method */
- char * submit_enctype; /* form's entype */
+ char * submit_action; /* form's action */
+ int submit_method; /* form's method */
+ char * submit_enctype; /* form's entype */
char * submit_title; /* form's title */
BOOL no_cache; /* Always resubmit? */
char * cp_submit_value; /* option value to submit */
- char * orig_submit_value; /* original submit value */
+ char * orig_submit_value; /* original submit value */
int size_l; /* The length of the option list */
int disabled; /* If YES, can't change values */
- int name_cs;
- int value_cs;
- char * accept_cs;
+ int name_cs;
+ int value_cs;
+ char * accept_cs;
} FormInfo;
/*
@@ -93,12 +105,12 @@ typedef struct _PerFormInfo
int number; /* form number, see GridText.c */
/* except for the last two, the followign fields aren't actually used.. */
int disabled; /* If YES, can't change values */
- struct _PerFormInfo * next; /* pointer to next form in doc */
- int nfields; /* number of fields */
- FormInfo * first_field;
- FormInfo * last_field; /* pointer to last field in form */
- char * accept_cs;
- char * thisacceptcs; /* used during submit */
+ struct _PerFormInfo * next; /* pointer to next form in doc */
+ int nfields; /* number of fields */
+ FormInfo * first_field;
+ FormInfo * last_field; /* pointer to last field in form */
+ char * accept_cs;
+ char * thisacceptcs; /* used during submit */
} PerFormInfo;
#define HYPERTEXT_ANCHOR 1
@@ -120,6 +132,9 @@ typedef struct _PerFormInfo
#define F_IMAGE_SUBMIT_TYPE 13
#define F_KEYGEN_TYPE 14
+#define F_TEXTLIKE(type) ((type)==F_TEXT_TYPE || (type)==F_TEXT_SUBMIT_TYPE ||\
+ (type)==F_PASSWORD_TYPE || (type)==F_TEXTAREA_TYPE)
+
#define WWW_FORM_LINK_TYPE 1
#define WWW_LINK_TYPE 2
#define WWW_INTERN_LINK_TYPE 6 /* can be used as a bitflag... - kw */
@@ -134,4 +149,8 @@ typedef struct _PerFormInfo
#define MIDDLE_ORDER 2
#define LAST_ORDER 3
+/* in LYForms.c */
+extern void show_formlink_statusline PARAMS((CONST FormInfo * form,
+ int for_what));
+
#endif /* HTFORMS_H */
diff --git a/gnu/usr.bin/lynx/src/HTInit.c b/gnu/usr.bin/lynx/src/HTInit.c
index e08d9b63499..47be396a139 100644
--- a/gnu/usr.bin/lynx/src/HTInit.c
+++ b/gnu/usr.bin/lynx/src/HTInit.c
@@ -33,8 +33,6 @@ PRIVATE int HTLoadExtensionsConfigFile PARAMS((char *fn));
PUBLIC void HTFormatInit NOARGS
{
- FILE *fp = NULL;
-
#ifdef NeXT
HTSetPresentation("application/postscript", "open %s", 1.0, 2.0, 0.0, 0);
HTSetPresentation("image/x-tiff", "open %s", 2.0, 2.0, 0.0, 0);
@@ -45,15 +43,17 @@ PUBLIC void HTFormatInit NOARGS
if (LYgetXDisplay() != 0) { /* Must have X11 */
HTSetPresentation("application/postscript", "ghostview %s&",
1.0, 3.0, 0.0, 0);
- HTSetPresentation("image/gif", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
- HTSetPresentation("image/x-xbm", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
- HTSetPresentation("image/x-xbitmap", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
- HTSetPresentation("image/x-png", XLoadImageCommand, 2.0, 3.0, 0.0, 0);
- HTSetPresentation("image/png", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
- HTSetPresentation("image/x-rgb", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
- HTSetPresentation("image/x-tiff", XLoadImageCommand, 2.0, 3.0, 0.0, 0);
- HTSetPresentation("image/tiff", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
- HTSetPresentation("image/jpeg", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
+ if (XLoadImageCommand && *XLoadImageCommand) {
+ HTSetPresentation("image/gif", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
+ HTSetPresentation("image/x-xbm", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
+ HTSetPresentation("image/x-xbitmap",XLoadImageCommand,1.0, 3.0, 0.0, 0);
+ HTSetPresentation("image/x-png", XLoadImageCommand, 2.0, 3.0, 0.0, 0);
+ HTSetPresentation("image/png", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
+ HTSetPresentation("image/x-rgb", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
+ HTSetPresentation("image/x-tiff", XLoadImageCommand, 2.0, 3.0, 0.0, 0);
+ HTSetPresentation("image/tiff", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
+ HTSetPresentation("image/jpeg", XLoadImageCommand, 1.0, 3.0, 0.0, 0);
+ }
HTSetPresentation("video/mpeg", "mpeg_play %s &", 1.0, 3.0, 0.0, 0);
}
@@ -62,9 +62,9 @@ PUBLIC void HTFormatInit NOARGS
#ifdef EXEC_SCRIPTS
/* set quality to 999.0 for protected exec applications */
#ifndef VMS
- HTSetPresentation("application/x-csh", "csh %s", 999.0, 3.0, 0.0, 0);
- HTSetPresentation("application/x-sh", "sh %s", 999.0, 3.0, 0.0, 0);
- HTSetPresentation("application/x-ksh", "ksh %s", 999.0, 3.0, 0.0, 0);
+ HTSetPresentation("application/x-csh", "csh %s", 999.0, 3.0, 0.0, 0);
+ HTSetPresentation("application/x-sh", "sh %s", 999.0, 3.0, 0.0, 0);
+ HTSetPresentation("application/x-ksh", "ksh %s", 999.0, 3.0, 0.0, 0);
#else
HTSetPresentation("application/x-VMS_script", "@%s", 999.0, 3.0, 0.0, 0);
#endif /* not VMS */
@@ -73,6 +73,12 @@ PUBLIC void HTFormatInit NOARGS
/*
* Add our header handlers.
*/
+ HTSetConversion("message/x-http-redirection", "*",
+ HTMIMERedirect, 2.0, 0.0, 0.0, 0);
+ HTSetConversion("message/x-http-redirection", "www/present",
+ HTMIMERedirect, 2.0, 0.0, 0.0, 0);
+ HTSetConversion("message/x-http-redirection", "www/debug",
+ HTMIMERedirect, 1.0, 0.0, 0.0, 0);
HTSetConversion("www/mime", "www/present", HTMIMEConvert, 1.0, 0.0, 0.0, 0);
HTSetConversion("www/mime", "www/download", HTMIMEConvert, 1.0, 0.0, 0.0, 0);
HTSetConversion("www/mime", "www/source", HTMIMEConvert, 1.0, 0.0, 0.0, 0);
@@ -81,8 +87,6 @@ PUBLIC void HTFormatInit NOARGS
/*
* Add our compressed file handlers.
*/
- HTSetConversion("www/compressed", "www/present",
- HTCompressed, 1.0, 0.0, 0.0, 0);
HTSetConversion("www/compressed", "www/download",
HTCompressed, 1.0, 0.0, 0.0, 0);
HTSetConversion("www/compressed", "www/present",
@@ -153,8 +157,7 @@ PUBLIC void HTFormatInit NOARGS
/*
* Load the local maps.
*/
- if ((fp = fopen(personal_type_map,"r")) != NULL) {
- fclose(fp);
+ if (LYCanReadFile(personal_type_map)) {
/* These should override everything else. */
HTLoadTypesConfigFile(personal_type_map);
} else {
@@ -168,6 +171,12 @@ PUBLIC void HTFormatInit NOARGS
*/
HTReorderPresentation(WWW_PLAINTEXT, WWW_PRESENT);
HTReorderPresentation(WWW_HTML, WWW_PRESENT);
+
+ /*
+ * Analyze the list, and set 'get_accept' for those whose representations
+ * are not redundant.
+ */
+ HTFilterPresentations();
}
PUBLIC void HTPreparsedFormatInit NOARGS
@@ -228,6 +237,7 @@ PRIVATE char *GetCommand ARGS2(
char *s2;
int quoted = 0;
+ s = LYSkipBlanks(s);
/* marca -- added + 1 for error case -- oct 24, 1993. */
s2 = malloc(strlen(s)*2 + 1); /* absolute max, if all % signs */
if (!s2)
@@ -303,7 +313,7 @@ PRIVATE int ProcessMailcapEntry ARGS2(
}
FREE(LineBuf);
- s = LYSkipBlanks(rawentry);
+ t = s = LYSkipBlanks(rawentry);
if (!*s) {
/* totally blank entry -- quietly ignore */
FREE(rawentry);
@@ -311,18 +321,18 @@ PRIVATE int ProcessMailcapEntry ARGS2(
}
s = strchr(rawentry, ';');
if (s == NULL) {
- CTRACE(tfp, "ProcessMailcapEntry: Ignoring invalid mailcap entry: %s\n",
- rawentry);
+ CTRACE((tfp, "ProcessMailcapEntry: Ignoring invalid mailcap entry: %s\n",
+ rawentry));
FREE(rawentry);
return(0);
}
*s++ = '\0';
- if (!strncasecomp(rawentry, "text/html", 9) ||
- !strncasecomp(rawentry, "text/plain", 10)) {
+ if (!strncasecomp(t, "text/html", 9) ||
+ !strncasecomp(t, "text/plain", 10)) {
--s;
*s = ';';
- CTRACE(tfp, "ProcessMailcapEntry: Ignoring mailcap entry: %s\n",
- rawentry);
+ CTRACE((tfp, "ProcessMailcapEntry: Ignoring mailcap entry: %s\n",
+ rawentry));
FREE(rawentry);
return(0);
}
@@ -335,11 +345,9 @@ PRIVATE int ProcessMailcapEntry ARGS2(
mc->testcommand = NULL;
mc->label = NULL;
mc->printcommand = NULL;
- mc->contenttype = (char *)malloc(1 + strlen(rawentry));
- if (!mc->contenttype)
- ExitWithError(MEMORY_EXHAUSTED_ABORT);
- strcpy(mc->contenttype, rawentry);
- mc->quality = 1.0;
+ mc->contenttype = NULL;
+ StrAllocCopy(mc->contenttype, rawentry);
+ mc->quality = (float) 1.0;
mc->maxbytes = 0;
t = GetCommand(s, &mc->command);
if (!t) {
@@ -354,6 +362,7 @@ PRIVATE int ProcessMailcapEntry ARGS2(
eq = strchr(arg, '=');
if (eq) {
*eq++ = '\0';
+ eq = LYSkipBlanks(eq);
}
if (arg && *arg) {
arg = Cleanse(arg);
@@ -364,8 +373,8 @@ PRIVATE int ProcessMailcapEntry ARGS2(
} else if (eq && !strcmp(arg, "test")) {
mc->testcommand = NULL;
StrAllocCopy(mc->testcommand, eq);
- CTRACE(tfp, "ProcessMailcapEntry: Found testcommand:%s\n",
- mc->testcommand);
+ CTRACE((tfp, "ProcessMailcapEntry: Found testcommand:%s\n",
+ mc->testcommand));
} else if (eq && !strcmp(arg, "description")) {
mc->label = eq;
} else if (eq && !strcmp(arg, "label")) {
@@ -376,17 +385,17 @@ PRIVATE int ProcessMailcapEntry ARGS2(
/* no support for now. What does this do anyways? */
/* ExceptionalNewline(mc->contenttype, atoi(eq)); */
} else if (eq && !strcmp(arg, "q")) {
- mc->quality = atof(eq);
+ mc->quality = (float)atof(eq);
if (mc->quality > 0.000 && mc->quality < 0.001)
- mc->quality = 0.001;
+ mc->quality = (float) 0.001;
} else if (eq && !strcmp(arg, "mxb")) {
mc->maxbytes = atol(eq);
if (mc->maxbytes < 0)
mc->maxbytes = 0;
} else if (strcmp(arg, "notes")) { /* IGNORE notes field */
if (*arg)
- CTRACE(tfp, "ProcessMailcapEntry: Ignoring mailcap flag '%s'.\n",
- arg);
+ CTRACE((tfp, "ProcessMailcapEntry: Ignoring mailcap flag '%s'.\n",
+ arg));
}
}
@@ -398,8 +407,8 @@ assign_presentation:
FREE(rawentry);
if (PassesTest(mc)) {
- CTRACE(tfp, "ProcessMailcapEntry Setting up conversion %s : %s\n",
- mc->contenttype, mc->command);
+ CTRACE((tfp, "ProcessMailcapEntry Setting up conversion %s : %s\n",
+ mc->contenttype, mc->command));
HTSetPresentation(mc->contenttype, mc->command,
mc->quality, 3.0, 0.0, mc->maxbytes);
}
@@ -427,16 +436,18 @@ PRIVATE void BuildCommand ARGS5(
*to++ = '%';
break;
case 'n':
+ /* FALLTHRU */
case 'F':
- CTRACE(tfp, "BuildCommand: Bad mailcap \"test\" clause: %s\n",
- controlstring);
+ CTRACE((tfp, "BuildCommand: Bad mailcap \"test\" clause: %s\n",
+ controlstring));
+ /* FALLTHRU */
case 's':
if (TmpFileLen && TmpFileName) {
if ((to - *pBuf) + TmpFileLen + 1 > Bufsize) {
*to = '\0';
- CTRACE(tfp, "BuildCommand: Too long mailcap \"test\" clause,\n");
- CTRACE(tfp, " ignoring: %s%s...\n",
- *pBuf, TmpFileName);
+ CTRACE((tfp, "BuildCommand: Too long mailcap \"test\" clause,\n"));
+ CTRACE((tfp, " ignoring: %s%s...\n",
+ *pBuf, TmpFileName));
**pBuf = '\0';
return;
}
@@ -445,9 +456,9 @@ PRIVATE void BuildCommand ARGS5(
}
break;
default:
- CTRACE(tfp,
+ CTRACE((tfp,
"BuildCommand: Ignoring unrecognized format code in mailcap file '%%%c'.\n",
- *from);
+ *from));
break;
}
} else if (*from == '%') {
@@ -457,9 +468,9 @@ PRIVATE void BuildCommand ARGS5(
}
if (to >= *pBuf + Bufsize) {
(*pBuf)[Bufsize - 1] = '\0';
- CTRACE(tfp, "BuildCommand: Too long mailcap \"test\" clause,\n");
- CTRACE(tfp, " ignoring: %s...\n",
- *pBuf);
+ CTRACE((tfp, "BuildCommand: Too long mailcap \"test\" clause,\n"));
+ CTRACE((tfp, " ignoring: %s...\n",
+ *pBuf));
**pBuf = '\0';
return;
}
@@ -499,15 +510,11 @@ PRIVATE int RememberTestResult ARGS3(
return cur->result;
return -1;
case RTR_add:
- cur = calloc(1, sizeof(struct cmdlist_s));
+ cur = typecalloc(struct cmdlist_s);
if (cur == NULL)
outofmem(__FILE__, "RememberTestResult");
cur->next = cmdlist;
- cur->cmd = (char *)malloc(strlen(cmd) + 1);
- if(cur->cmd)
- strcpy(cur->cmd, cmd);
- else
- ExitWithError("Out of memory");
+ StrAllocCopy(cur->cmd, cmd);
cur->result = result;
cmdlist = cur;
break;
@@ -530,25 +537,27 @@ PRIVATE int PassesTest ARGS1(
/*
* Save overhead of system() calls by faking these. - FM
*/
- if (0 == strcasecomp(mc->testcommand, "test -n \"$DISPLAY\"")) {
+ if (0 == strcmp(mc->testcommand, "test \"$DISPLAY\"") ||
+ 0 == strcmp(mc->testcommand, "test \"$DISPLAY\" != \"\"") ||
+ 0 == strcasecomp(mc->testcommand, "test -n \"$DISPLAY\"")) {
FREE(mc->testcommand);
- CTRACE(tfp, "PassesTest: Testing for XWINDOWS environment.\n");
+ CTRACE((tfp, "PassesTest: Testing for XWINDOWS environment.\n"));
if (LYgetXDisplay() != NULL) {
- CTRACE(tfp, "PassesTest: Test passed!\n");
+ CTRACE((tfp, "PassesTest: Test passed!\n"));
return(0 == 0);
} else {
- CTRACE(tfp, "PassesTest: Test failed!\n");
+ CTRACE((tfp, "PassesTest: Test failed!\n"));
return(-1 == 0);
}
}
if (0 == strcasecomp(mc->testcommand, "test -z \"$DISPLAY\"")) {
FREE(mc->testcommand);
- CTRACE(tfp, "PassesTest: Testing for NON_XWINDOWS environment.\n");
+ CTRACE((tfp, "PassesTest: Testing for NON_XWINDOWS environment.\n"));
if (LYgetXDisplay() == NULL) {
- CTRACE(tfp,"PassesTest: Test passed!\n");
+ CTRACE((tfp,"PassesTest: Test passed!\n"));
return(0 == 0);
} else {
- CTRACE(tfp,"PassesTest: Test failed!\n");
+ CTRACE((tfp,"PassesTest: Test failed!\n"));
return(-1 == 0);
}
}
@@ -558,8 +567,8 @@ PRIVATE int PassesTest ARGS1(
*/
if (0 == strcasecomp(mc->testcommand, "test -n \"$LYNX_VERSION\"")){
FREE(mc->testcommand);
- CTRACE(tfp, "PassesTest: Testing for LYNX environment.\n");
- CTRACE(tfp, "PassesTest: Test passed!\n");
+ CTRACE((tfp, "PassesTest: Testing for LYNX environment.\n"));
+ CTRACE((tfp, "PassesTest: Test passed!\n"));
return(0 == 0);
} else
/*
@@ -567,8 +576,8 @@ PRIVATE int PassesTest ARGS1(
*/
if (0 == strcasecomp(mc->testcommand, "test -z \"$LYNX_VERSION\"")) {
FREE(mc->testcommand);
- CTRACE(tfp, "PassesTest: Testing for non-LYNX environment.\n");
- CTRACE(tfp, "PassesTest: Test failed!\n");
+ CTRACE((tfp, "PassesTest: Testing for non-LYNX environment.\n"));
+ CTRACE((tfp, "PassesTest: Test failed!\n"));
return(-1 == 0);
}
@@ -592,7 +601,7 @@ PRIVATE int PassesTest ARGS1(
mc->testcommand,
TmpFileName,
strlen(TmpFileName));
- CTRACE(tfp, "PassesTest: Executing test command: %s\n", cmd);
+ CTRACE((tfp, "PassesTest: Executing test command: %s\n", cmd));
result = LYSystem(cmd);
FREE(cmd);
LYRemoveTemp(TmpFileName);
@@ -606,9 +615,9 @@ PRIVATE int PassesTest ARGS1(
FREE(mc->testcommand);
if (result) {
- CTRACE(tfp,"PassesTest: Test failed!\n");
+ CTRACE((tfp,"PassesTest: Test failed!\n"));
} else {
- CTRACE(tfp,"PassesTest: Test passed!\n");
+ CTRACE((tfp,"PassesTest: Test passed!\n"));
}
return(result == 0);
@@ -620,18 +629,18 @@ PRIVATE int ProcessMailcapFile ARGS1(
struct MailcapEntry mc;
FILE *fp;
- CTRACE(tfp, "ProcessMailcapFile: Loading file '%s'.\n",
- file);
- if ((fp = fopen(file, "r")) == NULL) {
- CTRACE(tfp, "ProcessMailcapFile: Could not open '%s'.\n",
- file);
+ CTRACE((tfp, "ProcessMailcapFile: Loading file '%s'.\n",
+ file));
+ if ((fp = fopen(file, TXT_R)) == NULL) {
+ CTRACE((tfp, "ProcessMailcapFile: Could not open '%s'.\n",
+ file));
return(-1 == 0);
}
while (fp && !feof(fp)) {
ProcessMailcapEntry(fp, &mc);
}
- fclose(fp);
+ LYCloseInput(fp);
RememberTestResult(RTR_forget, NULL, 0);
return(0 == 0);
}
@@ -640,12 +649,15 @@ PRIVATE int ExitWithError ARGS1(
char *, txt)
{
if (txt)
- fprintf(tfp, "metamail: %s\n", txt);
- exit_immediately(-1);
+ fprintf(tfp, "Lynx: %s\n", txt);
+ exit_immediately(EXIT_FAILURE);
return(-1);
}
-#define reverse_mailcap 1
+/* Reverse the entries from each mailcap after it has been read, so that
+ * earlier entries have precedence. Set to 0 to get traditional lynx
+ * behavior, which means that the last match wins. - kw */
+static int reverse_mailcap = 1;
PRIVATE int HTLoadTypesConfigFile ARGS1(
char *, fn)
@@ -688,16 +700,43 @@ PRIVATE int HTLoadTypesConfigFile ARGS1(
** which are of the same format but are originals or regenerated,
** with different values.
*/
-
+/*
+ * Additional notes: the encoding parameter may be taken into account when
+ * looking for a match; for that purpose "7bit", "8bit", and "binary" are
+ * equivalent.
+ * Use of mixed case and of pseudo MIME types with embedded spaces should
+ * be avoided. It was once necessary for getting the fancy strings into
+ * type labels in FTP directory listings, but that can now be done with
+ * the description field (using HTSetSuffix5). AFAIK the only effect of
+ * such "fancy" (and mostly invalid) types that cannot be reproduced by
+ * using a description fields is some statusline messages in SaveToFile
+ * (HTFWriter.c). And showing the user an invalid MIME type as the
+ * 'Content-type:' is not such a hot idea anyway, IMO. Still, if you
+ * want it, it is still possible (even in lynx.cfg now), but use of it
+ * in the defaults below has been reduced.
+ * Case variations rely on peculiar behavior of HTAtom.c for matching.
+ * They lead to surprising behavior, Lynx retains the case of a string
+ * in the form first encountered after starting up. So while later suffix
+ * rules generally override or modify earlier ones, the case used for a
+ * MIME time is determined by the first suffix rule (or other occurrence).
+ * Matching in HTAtom_for is effectively case insensitive, except for the
+ * first character of the string which is treated as case-sensitive by the
+ * hash function there; best not to rely on that, rather convert MIME types
+ * to lowercase on input as is already done in most places (And HTAtom could
+ * become consistently case-sensitive, as in newer W3C libwww).
+ * - kw 1999-10-12
+ */
PUBLIC void HTFileInit NOARGS
{
- FILE *fp;
-
- CTRACE(tfp, "HTFileInit: Loading default (HTInit) extension maps.\n");
+#ifdef BUILTIN_SUFFIX_MAPS
+ if (LYUseBuiltinSuffixes)
+ {
+ CTRACE((tfp, "HTFileInit: Loading default (HTInit) extension maps.\n"));
/* default suffix interpretation */
- HTSetSuffix("*", "text/plain", "7bit", 1.0);
- HTSetSuffix("*.*", "text/plain", "7bit", 1.0);
+ HTSetSuffix("*", "text/plain", "8bit", 1.0);
+ HTSetSuffix("*.*", "text/plain", "8bit", 1.0);
+
#ifdef EXEC_SCRIPTS
/*
@@ -713,7 +752,15 @@ PUBLIC void HTFileInit NOARGS
#endif /* !VMS */
#endif /* EXEC_SCRIPTS */
-
+ /*
+ * Some of the old incarnation of the mappings is preserved
+ * and can be had by defining TRADITIONAL_SUFFIXES. This
+ * is for some cases where I felt the old rules might be preferred
+ * by someone, for some reason. It's not done consistently.
+ * A lot more of this stuff could probably be changed too or
+ * omitted, now that nearly the equivalent functionality is
+ * available in lynx.cfg. - kw 1999-10-12
+ */
HTSetSuffix(".saveme", "application/x-Binary", "binary", 1.0);
HTSetSuffix(".dump", "application/x-Binary", "binary", 1.0);
HTSetSuffix(".bin", "application/x-Binary", "binary", 1.0);
@@ -726,59 +773,104 @@ PUBLIC void HTFileInit NOARGS
HTSetSuffix(".AXP_exe", "application/x-Executable", "binary", 1.0);
HTSetSuffix(".VAX-exe", "application/x-Executable", "binary", 1.0);
HTSetSuffix(".VAX_exe", "application/x-Executable", "binary", 1.0);
- HTSetSuffix(".exe", "application/x-Executable", "binary", 1.0);
+ HTSetSuffix5(".exe", "application/octet-stream", "binary", "Executable", 1.0);
+#ifdef TRADITIONAL_SUFFIXES
HTSetSuffix(".exe.Z", "application/x-Comp. Executable",
"binary", 1.0);
-
HTSetSuffix(".Z", "application/UNIX Compressed", "binary", 1.0);
-
HTSetSuffix(".tar_Z", "application/UNIX Compr. Tar", "binary", 1.0);
HTSetSuffix(".tar.Z", "application/UNIX Compr. Tar", "binary", 1.0);
+#else
+ HTSetSuffix5(".Z", "application/x-compress", "binary", "UNIX Compressed", 1.0);
+ HTSetSuffix5(".Z", NULL, "compress", "UNIX Compressed", 1.0);
+ HTSetSuffix5(".exe.Z", "application/octet-stream", "compress",
+ "Executable", 1.0);
+ HTSetSuffix5(".tar_Z", "application/x-tar", "compress",
+ "UNIX Compr. Tar", 1.0);
+ HTSetSuffix5(".tar.Z", "application/x-tar", "compress",
+ "UNIX Compr. Tar", 1.0);
+#endif
+#ifdef TRADITIONAL_SUFFIXES
HTSetSuffix("-gz", "application/GNU Compressed", "binary", 1.0);
HTSetSuffix("_gz", "application/GNU Compressed", "binary", 1.0);
HTSetSuffix(".gz", "application/GNU Compressed", "binary", 1.0);
HTSetSuffix5(".tar.gz", "application/x-tar", "binary", "GNU Compr. Tar", 1.0);
HTSetSuffix5(".tgz", "application/x-tar", "gzip", "GNU Compr. Tar", 1.0);
+#else
+ HTSetSuffix5("-gz", "application/x-gzip", "binary", "GNU Compressed", 1.0);
+ HTSetSuffix5("_gz", "application/x-gzip", "binary", "GNU Compressed", 1.0);
+ HTSetSuffix5(".gz", "application/x-gzip", "binary", "GNU Compressed", 1.0);
+ HTSetSuffix5("-gz", NULL, "gzip", "GNU Compressed", 1.0);
+ HTSetSuffix5("_gz", NULL, "gzip", "GNU Compressed", 1.0);
+ HTSetSuffix5(".gz", NULL, "gzip", "GNU Compressed", 1.0);
+
+ HTSetSuffix5(".tar.gz", "application/x-tar", "gzip", "GNU Compr. Tar", 1.0);
+ HTSetSuffix5(".tgz", "application/x-tar", "gzip", "GNU Compr. Tar", 1.0);
+#endif
+#ifdef TRADITIONAL_SUFFIXES
HTSetSuffix(".src", "application/x-WAIS-source", "8bit", 1.0);
HTSetSuffix(".wsrc", "application/x-WAIS-source", "8bit", 1.0);
+#else
+ HTSetSuffix5(".wsrc", "application/x-wais-source", "8bit", "WAIS-source", 1.0);
+#endif
- HTSetSuffix(".zip", "application/x-Zip File", "binary", 1.0);
+ HTSetSuffix5(".zip", "application/zip", "binary", "Zip File", 1.0);
HTSetSuffix(".bz2", "application/x-bzip2", "binary", 1.0);
+ HTSetSuffix(".bz2", "application/bzip2", "binary", 1.0);
+
+#ifdef TRADITIONAL_SUFFIXES
HTSetSuffix(".uu", "application/x-UUencoded", "8bit", 1.0);
HTSetSuffix(".hqx", "application/x-Binhex", "8bit", 1.0);
HTSetSuffix(".o", "application/x-Prog. Object", "binary", 1.0);
HTSetSuffix(".a", "application/x-Prog. Library", "binary", 1.0);
+#else
+ HTSetSuffix5(".uu", "application/x-uuencoded", "7bit", "UUencoded", 1.0);
+
+ HTSetSuffix5(".hqx", "application/mac-binhex40", "8bit", "Mac BinHex", 1.0);
+
+ HTSetSuffix5(".o", "application/octet-stream", "binary", "Prog. Object", 0.5);
+ HTSetSuffix5(".a", "application/octet-stream", "binary", "Prog. Library", 0.5);
+ HTSetSuffix5(".so", "application/octet-stream", "binary", "Shared Lib", 0.5);
+#endif
HTSetSuffix5(".oda", "application/oda", "binary", "ODA", 1.0);
HTSetSuffix5(".pdf", "application/pdf", "binary", "PDF", 1.0);
- HTSetSuffix(".eps", "application/Postscript", "8bit", 1.0);
- HTSetSuffix(".ai", "application/Postscript", "8bit", 1.0);
- HTSetSuffix(".ps", "application/Postscript", "8bit", 1.0);
+ HTSetSuffix5(".eps", "application/postscript", "8bit", "Postscript", 1.0);
+ HTSetSuffix5(".ai", "application/postscript", "8bit", "Postscript", 1.0);
+ HTSetSuffix5(".ps", "application/postscript", "8bit", "Postscript", 1.0);
- HTSetSuffix(".rtf", "application/RTF", "8bit", 1.0);
+ HTSetSuffix5(".rtf", "application/rtf", "8bit", "RTF", 1.0);
- HTSetSuffix(".dvi", "application/x-DVI", "8bit", 1.0);
+ HTSetSuffix5(".dvi", "application/x-dvi", "8bit", "DVI", 1.0);
- HTSetSuffix(".hdf", "application/x-HDF", "8bit", 1.0);
+ HTSetSuffix5(".hdf", "application/x-hdf", "8bit", "HDF", 1.0);
HTSetSuffix(".cdf", "application/x-netcdf", "8bit", 1.0);
HTSetSuffix(".nc", "application/x-netcdf", "8bit", 1.0);
+#ifdef TRADITIONAL_SUFFIXES
HTSetSuffix(".latex", "application/x-Latex", "8bit", 1.0);
HTSetSuffix(".tex", "application/x-Tex", "8bit", 1.0);
HTSetSuffix(".texinfo", "application/x-Texinfo", "8bit", 1.0);
HTSetSuffix(".texi", "application/x-Texinfo", "8bit", 1.0);
+#else
+ HTSetSuffix5(".latex", "application/x-latex", "8bit", "LaTeX", 1.0);
+ HTSetSuffix5(".tex", "text/x-tex", "8bit", "TeX", 1.0);
+ HTSetSuffix5(".texinfo", "application/x-texinfo", "8bit", "Texinfo", 1.0);
+ HTSetSuffix5(".texi", "application/x-texinfo", "8bit", "Texinfo", 1.0);
+#endif
+#ifdef TRADITIONAL_SUFFIXES
HTSetSuffix(".t", "application/x-Troff", "8bit", 1.0);
HTSetSuffix(".tr", "application/x-Troff", "8bit", 1.0);
HTSetSuffix(".roff", "application/x-Troff", "8bit", 1.0);
@@ -786,51 +878,80 @@ PUBLIC void HTFileInit NOARGS
HTSetSuffix(".man", "application/x-Troff-man", "8bit", 1.0);
HTSetSuffix(".me", "application/x-Troff-me", "8bit", 1.0);
HTSetSuffix(".ms", "application/x-Troff-ms", "8bit", 1.0);
+#else
+ HTSetSuffix5(".t", "application/x-troff", "8bit", "Troff", 1.0);
+ HTSetSuffix5(".tr", "application/x-troff", "8bit", "Troff", 1.0);
+ HTSetSuffix5(".roff", "application/x-troff", "8bit", "Troff", 1.0);
+
+ HTSetSuffix5(".man", "application/x-troff-man", "8bit", "Man Page", 1.0);
+ HTSetSuffix5(".me", "application/x-troff-me", "8bit", "Troff me", 1.0);
+ HTSetSuffix5(".ms", "application/x-troff-ms", "8bit", "Troff ms", 1.0);
+#endif
HTSetSuffix(".zoo", "application/x-Zoo File", "binary", 1.0);
+#if defined(TRADITIONAL_SUFFIXES) || defined(VMS)
HTSetSuffix(".bak", "application/x-VMS BAK File", "binary", 1.0);
HTSetSuffix(".bkp", "application/x-VMS BAK File", "binary", 1.0);
HTSetSuffix(".bck", "application/x-VMS BAK File", "binary", 1.0);
- HTSetSuffix(".bkp_gz", "application/x-GNU BAK File", "binary", 1.0);
- HTSetSuffix(".bkp-gz", "application/x-GNU BAK File", "binary", 1.0);
- HTSetSuffix(".bck_gz", "application/x-GNU BAK File", "binary", 1.0);
- HTSetSuffix(".bck-gz", "application/x-GNU BAK File", "binary", 1.0);
+ HTSetSuffix5(".bkp_gz", "application/octet-stream", "gzip", "GNU BAK File", 1.0);
+ HTSetSuffix5(".bkp-gz", "application/octet-stream", "gzip", "GNU BAK File", 1.0);
+ HTSetSuffix5(".bck_gz", "application/octet-stream", "gzip", "GNU BAK File", 1.0);
+ HTSetSuffix5(".bck-gz", "application/octet-stream", "gzip", "GNU BAK File", 1.0);
- HTSetSuffix(".bkp-Z", "application/x-Comp. BAK File", "binary", 1.0);
- HTSetSuffix(".bkp_Z", "application/x-Comp. BAK File", "binary", 1.0);
- HTSetSuffix(".bck-Z", "application/x-Comp. BAK File", "binary", 1.0);
- HTSetSuffix(".bck_Z", "application/x-Comp. BAK File", "binary", 1.0);
+ HTSetSuffix5(".bkp-Z", "application/octet-stream", "compress", "Comp. BAK File", 1.0);
+ HTSetSuffix5(".bkp_Z", "application/octet-stream", "compress", "Comp. BAK File", 1.0);
+ HTSetSuffix5(".bck-Z", "application/octet-stream", "compress", "Comp. BAK File", 1.0);
+ HTSetSuffix5(".bck_Z", "application/octet-stream", "compress", "Comp. BAK File", 1.0);
+#else
+ HTSetSuffix5(".bak", NULL, "binary", "Backup", 0.5);
+ HTSetSuffix5(".bkp", "application/octet-stream", "binary", "VMS BAK File", 1.0);
+ HTSetSuffix5(".bck", "application/octet-stream", "binary", "VMS BAK File", 1.0);
+#endif
+#if defined(TRADITIONAL_SUFFIXES) || defined(VMS)
HTSetSuffix(".hlb", "application/x-VMS Help Libr.", "binary", 1.0);
HTSetSuffix(".olb", "application/x-VMS Obj. Libr.", "binary", 1.0);
HTSetSuffix(".tlb", "application/x-VMS Text Libr.", "binary", 1.0);
HTSetSuffix(".obj", "application/x-VMS Prog. Obj.", "binary", 1.0);
HTSetSuffix(".decw$book", "application/x-DEC BookReader", "binary", 1.0);
HTSetSuffix(".mem", "application/x-RUNOFF-MANUAL", "8bit", 1.0);
+#else
+ HTSetSuffix5(".hlb", "application/octet-stream", "binary", "VMS Help Libr.", 1.0);
+ HTSetSuffix5(".olb", "application/octet-stream", "binary", "VMS Obj. Libr.", 1.0);
+ HTSetSuffix5(".tlb", "application/octet-stream", "binary", "VMS Text Libr.", 1.0);
+ HTSetSuffix5(".obj", "application/octet-stream", "binary", "Prog. Object", 1.0);
+ HTSetSuffix5(".decw$book", "application/octet-stream", "binary", "DEC BookReader", 1.0);
+ HTSetSuffix5(".mem", "text/x-runoff-manual", "8bit", "RUNOFF-MANUAL", 1.0);
+#endif
HTSetSuffix(".vsd", "application/visio", "binary", 1.0);
- HTSetSuffix(".lha", "application/x-lha File", "binary", 1.0);
- HTSetSuffix(".lzh", "application/x-lzh File", "binary", 1.0);
-
- HTSetSuffix(".sea", "application/x-sea File", "binary", 1.0);
- HTSetSuffix(".sit", "application/x-sit File", "binary", 1.0);
-
- HTSetSuffix(".dms", "application/x-dms File", "binary", 1.0);
-
- HTSetSuffix(".iff", "application/x-iff File", "binary", 1.0);
+ HTSetSuffix5(".lha", "application/x-lha", "binary", "lha File", 1.0);
+ HTSetSuffix5(".lzh", "application/x-lzh", "binary", "lzh File", 1.0);
+ HTSetSuffix5(".sea", "application/x-sea", "binary", "sea File", 1.0);
+#ifdef TRADITIONAL_SUFFIXES
+ HTSetSuffix5(".sit", "application/x-sit", "binary", "sit File", 1.0);
+#else
+ HTSetSuffix5(".sit", "application/x-stuffit", "binary", "StuffIt", 1.0);
+#endif
+ HTSetSuffix5(".dms", "application/x-dms", "binary", "dms File", 1.0);
+ HTSetSuffix5(".iff", "application/x-iff", "binary", "iff File", 1.0);
HTSetSuffix(".bcpio", "application/x-bcpio", "binary", 1.0);
HTSetSuffix(".cpio", "application/x-cpio", "binary", 1.0);
+#ifdef TRADITIONAL_SUFFIXES
HTSetSuffix(".gtar", "application/x-gtar", "binary", 1.0);
+#endif
HTSetSuffix(".shar", "application/x-shar", "8bit", 1.0);
HTSetSuffix(".share", "application/x-share", "8bit", 1.0);
+#ifdef TRADITIONAL_SUFFIXES
HTSetSuffix(".sh", "application/x-sh", "8bit", 1.0); /* xtra */
+#endif
HTSetSuffix(".sv4cpio", "application/x-sv4cpio", "binary", 1.0);
HTSetSuffix(".sv4crc", "application/x-sv4crc", "binary", 1.0);
@@ -901,11 +1022,35 @@ PUBLIC void HTFileInit NOARGS
HTSetSuffix(".htm", "text/html", "8bit", 1.0);
HTSetSuffix(".html", "text/html", "8bit", 1.0);
+ } else { /* LYSuffixRules */
+ /*
+ * Note that even .html -> text/html, .htm -> text/html are omitted
+ * if default maps are compiled in but then skipped because of a
+ * configuration file directive. Whoever changes the config file
+ * in this way can easily also add the SUFFIX rules there. - kw
+ */
+ CTRACE((tfp, "HTFileInit: Skipping all default (HTInit) extension maps!\n"));
+ } /* LYSuffixRules */
+
+#else /* BUILTIN_SUFFIX_MAPS */
+
+ CTRACE((tfp, "HTFileInit: Default (HTInit) extension maps not compiled in.\n"));
+ /*
+ * The followin two are still used if BUILTIN_SUFFIX_MAPS was
+ * undefined. Without one of them, lynx would always need to
+ * have a mapping specified in a lynx.cfg or mime.types file
+ * to be usable for local HTML files at all. That includes
+ * many of the generated user interface pages. - kw
+ */
+ HTSetSuffix(".htm", "text/html", "8bit", 1.0);
+ HTSetSuffix(".html", "text/html", "8bit", 1.0);
+#endif /* BUILTIN_SUFFIX_MAPS */
+
+
/* These should override the default extensions as necessary. */
HTLoadExtensionsConfigFile(global_extension_map);
- if ((fp = fopen(personal_extension_map,"r")) != NULL) {
- fclose(fp);
+ if (LYCanReadFile(personal_extension_map)) {
/* These should override everything else. */
HTLoadExtensionsConfigFile(personal_extension_map);
} else {
@@ -945,7 +1090,7 @@ PRIVATE int HTGetLine ARGS3(
if (s[i] == CR) {
r = fgetc(f);
if (r == LF)
- s[i] = r;
+ s[i] = (char) r;
else if (r != EOF)
ungetc(r, f);
}
@@ -990,10 +1135,10 @@ PRIVATE int HTLoadExtensionsConfigFile ARGS1(
FILE *f;
int count = 0;
- CTRACE(tfp, "HTLoadExtensionsConfigFile: Loading file '%s'.\n", fn);
+ CTRACE((tfp, "HTLoadExtensionsConfigFile: Loading file '%s'.\n", fn));
- if ((f = fopen(fn,"r")) == NULL) {
- CTRACE(tfp, "HTLoadExtensionsConfigFile: Could not open '%s'.\n", fn);
+ if ((f = fopen(fn, TXT_R)) == NULL) {
+ CTRACE((tfp, "HTLoadExtensionsConfigFile: Could not open '%s'.\n", fn));
return count;
}
@@ -1001,23 +1146,19 @@ PRIVATE int HTLoadExtensionsConfigFile ARGS1(
HTGetWord(word, line, ' ', '\t');
if (line[0] == '\0' || word[0] == '#')
continue;
- ct = (char *)malloc(sizeof(char) * (strlen(word) + 1));
- if (!ct)
- outofmem(__FILE__, "HTLoadExtensionsConfigFile");
- strcpy(ct,word);
+ ct = NULL;
+ StrAllocCopy(ct, word);
LYLowerCase(ct);
while(line[0]) {
HTGetWord(word, line, ' ', '\t');
if (word[0] && (word[0] != ' ')) {
- char *ext = (char *)malloc(sizeof(char) * (strlen(word)+1+1));
- if (!ext)
- outofmem(__FILE__, "HTLoadExtensionsConfigFile");
+ char *ext = NULL;
- sprintf(ext, ".%s", word);
+ HTSprintf0(&ext, ".%s", word);
LYLowerCase(ext);
- CTRACE (tfp, "SETTING SUFFIX '%s' to '%s'.\n", ext, ct);
+ CTRACE((tfp, "SETTING SUFFIX '%s' to '%s'.\n", ext, ct));
if (strstr(ct, "tex") != NULL ||
strstr(ct, "postscript") != NULL ||
@@ -1034,7 +1175,7 @@ PRIVATE int HTLoadExtensionsConfigFile ARGS1(
}
FREE(ct);
}
- fclose(f);
+ LYCloseInput(f);
return count;
}
diff --git a/gnu/usr.bin/lynx/src/HTML.c b/gnu/usr.bin/lynx/src/HTML.c
index 2635b10690a..d27f1844f86 100644
--- a/gnu/usr.bin/lynx/src/HTML.c
+++ b/gnu/usr.bin/lynx/src/HTML.c
@@ -35,7 +35,6 @@
#include <LYCharSets.h>
#include <HTAlert.h>
-#include <HTFont.h>
#include <HTForms.h>
#include <HTNestedList.h>
#include <GridText.h>
@@ -49,7 +48,7 @@
#include <LYCurses.h>
#endif /* VMS */
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
#include <LYPrettySrc.h>
#endif
@@ -78,13 +77,14 @@
#include <HTAccess.h>
#endif
+#include <LYJustify.h>
+
#include <LYexit.h>
#include <LYLeaks.h>
#define STACKLEVEL(me) ((me->stack + MAX_NESTING - 1) - me->sp)
extern BOOL HTPassEightBitRaw;
-extern HTCJKlang HTCJK;
extern BOOLEAN HT_Is_Gopher_URL;
@@ -94,10 +94,13 @@ extern int LYcols;
struct _HTStream {
CONST HTStreamClass * isa;
#ifdef SOURCE_CACHE
+ HTParentAnchor * anchor;
FILE * fp;
+ char * filename;
HTChunk * chunk;
CONST HTStreamClass * actions;
HTStream * target;
+ int status;
#else
/* .... */
#endif
@@ -107,7 +110,8 @@ PRIVATE HTStyleSheet * styleSheet = NULL; /* Application-wide */
/* Module-wide style cache
*/
-PRIVATE HTStyle *styles[HTML_ELEMENTS+31]; /* adding 24 nested list styles */
+PRIVATE HTStyle *styles[HTML_ELEMENTS+LYNX_HTML_EXTRA_ELEMENTS];
+ /* adding 24 nested list styles */
/* and 3 header alignment styles */
/* and 3 div alignment styles */
PRIVATE HTStyle *default_style = NULL;
@@ -121,11 +125,11 @@ PRIVATE int i_prior_style = -1;
/*
* Private function....
*/
-PRIVATE void HTML_end_element PARAMS((HTStructured *me,
+PRIVATE int HTML_end_element PARAMS((HTStructured *me,
int element_number,
char **include));
-PRIVATE void HTML_start_element PARAMS((
+PRIVATE int HTML_start_element PARAMS((
HTStructured * me,
int element_number,
CONST BOOL* present,
@@ -149,12 +153,10 @@ PRIVATE char* MakeNewMapValue PARAMS((CONST char ** value, CONST char* mapstr));
#define SET_SKIP_STACK(el_num) if (HTML_dtd.tags[el_num].contents != SGML_EMPTY) \
{ me->skip_stack++; }
-extern int hash_code PARAMS((char* i));
-
PUBLIC void strtolower ARGS1(char*, i)
{
- if (!i) return;
- while (*i) { *i=tolower(*i); i++; }
+ if (!i) return;
+ while (*i) { *i=(char)tolower(*i); i++; }
}
/* Flattening the style structure
@@ -204,6 +206,17 @@ PRIVATE void change_paragraph_style ARGS2(HTStructured *, me, HTStyle *,style)
me->in_word = NO;
}
+PUBLIC BOOL LYBadHTML ARGS1(
+ HTStructured *, me)
+{
+ if (!TRACE && !me->inBadHTML) {
+ HTUserMsg(BAD_HTML_USE_TRACE);
+ me->inBadHTML = TRUE;
+ return FALSE;
+ }
+ return TRUE;
+}
+
/*_________________________________________________________________________
**
** A C T I O N R O U T I N E S
@@ -230,7 +243,7 @@ PUBLIC void HTML_put_character ARGS2(HTStructured *, me, char, c)
* Ignore all non-MAP content when just
* scanning a document for MAPs. - FM
*/
- if (LYMapsOnly)
+ if (LYMapsOnly && me->sp[0].tag_number != HTML_OBJECT)
return;
/*
@@ -435,18 +448,18 @@ PUBLIC void HTML_put_character ARGS2(HTStructured *, me, char, c)
*/
PUBLIC void HTML_put_string ARGS2(HTStructured *, me, CONST char *, s)
{
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
char* translated_string = NULL;
#endif
- if (LYMapsOnly || s == NULL)
+ if (s == NULL || (LYMapsOnly && me->sp[0].tag_number != HTML_OBJECT))
return;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_convert_string) {
StrAllocCopy(translated_string,s);
TRANSLATE_AND_UNESCAPE_ENTITIES(&translated_string, TRUE, FALSE);
s = (CONST char *) translated_string;
- };
+ }
#endif
switch (me->sp[0].tag_number) {
@@ -500,6 +513,18 @@ PUBLIC void HTML_put_string ARGS2(HTStructured *, me, CONST char *, s)
* by the cases above (HTML_PRE or similar may not be the
* last element pushed on the style stack). - kw
*/
+#ifdef USE_PRETTYSRC
+ if (psrc_view) {
+ /*
+ * We do this so that a raw '\r' in the string will not be
+ * interpreted as an internal request to break a line - passing
+ * '\r' to HText_appendText is treated by it as a request to
+ * insert a blank line - VH
+ */
+ for(; *s; ++s)
+ HTML_put_character(me, *s);
+ } else
+#endif
HText_appendText(me->text, s);
break;
} else {
@@ -534,7 +559,7 @@ PUBLIC void HTML_put_string ARGS2(HTStructured *, me, CONST char *, s)
if (me->in_word) {
if (HText_getLastChar(me->text) != ' ')
HText_appendCharacter(me->text, ' ');
- me->in_word = NO;
+ me->in_word = NO;
}
}
@@ -569,7 +594,7 @@ PUBLIC void HTML_put_string ARGS2(HTStructured *, me, CONST char *, s)
} /* for */
}
} /* end switch */
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_convert_string) {
psrc_convert_string = FALSE;
FREE(translated_string);
@@ -585,10 +610,10 @@ PUBLIC void HTML_write ARGS3(HTStructured *, me, CONST char*, s, int, l)
CONST char* p;
CONST char* e = s+l;
- if (LYMapsOnly)
+ if (LYMapsOnly && me->sp[0].tag_number != HTML_OBJECT)
return;
- for (p = s; s < e; p++)
+ for (p = s; p < e; p++)
HTML_put_character(me, *p);
}
@@ -642,8 +667,8 @@ PUBLIC void HTML_write ARGS3(HTStructured *, me, CONST char*, s, int, l)
"internal". The flag is set before we start messing around with the
string (resolution of relative URLs etc.). This variable only used
locally here, don't confuse with LYinternal_flag which is for
- for overriding non-caching similar to LYoverride_no_cache. - kw */
-#define CHECK_FOR_INTERN(s) intern_flag = (s && (*s=='#' || *s=='\0')) ? TRUE : FALSE;
+ overriding non-caching similar to LYoverride_no_cache. - kw */
+#define CHECK_FOR_INTERN(flag,s) flag = (s && (*s=='#' || *s=='\0')) ? TRUE : FALSE
/* Last argument to pass to HTAnchor_findChildAndLink() calls,
just an abbreviation. - kw */
@@ -651,7 +676,7 @@ PUBLIC void HTML_write ARGS3(HTStructured *, me, CONST char*, s, int, l)
#else /* !DONT_TRACK_INTERNAL_LINKS */
-#define CHECK_FOR_INTERN(s) /* do nothing */ ;
+#define CHECK_FOR_INTERN(flag,s) /* do nothing */ ;
#define INTERN_LT (HTLinkType *)NULL
#endif /* DONT_TRACK_INTERNAL_LINKS */
@@ -669,15 +694,15 @@ static int hcode;
#endif
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
PRIVATE void HTMLSRC_apply_markup ARGS4(
HTStructured *, context,
- HTlexem, lexem,
+ HTlexeme, lexeme,
BOOL, start,
int, tag_charset)
{
- HT_tagspec* ts = *( ( start ? lexem_start : lexem_end ) + lexem);
+ HT_tagspec* ts = *( ( start ? lexeme_start : lexeme_end ) + lexeme);
while (ts) {
#ifdef USE_COLOR_STYLE
@@ -688,7 +713,7 @@ PRIVATE void HTMLSRC_apply_markup ARGS4(
force_classname = TRUE;
}
#endif
- CTRACE(tfp,ts->start ? "SRCSTART %d\n" : "SRCSTOP %d\n",(int)lexem);
+ CTRACE((tfp,ts->start ? "SRCSTART %d\n" : "SRCSTOP %d\n",(int)lexeme));
if (ts->start)
HTML_start_element(
context,
@@ -707,18 +732,174 @@ PRIVATE void HTMLSRC_apply_markup ARGS4(
}
# define START TRUE
# define STOP FALSE
+
+#if defined(__STDC__) || _WIN_CC
# define PSRCSTART(x) HTMLSRC_apply_markup(me,HTL_##x,START,tag_charset)
# define PSRCSTOP(x) HTMLSRC_apply_markup(me,HTL_##x,STOP,tag_charset)
+#else
+# define PSRCSTART(x) HTMLSRC_apply_markup(me,HTL_/**/x,START,tag_charset)
+# define PSRCSTOP(x) HTMLSRC_apply_markup(me,HTL_/**/x,STOP,tag_charset)
+#endif
# define PUTC(x) HTML_put_character(me,x)
# define PUTS(x) HTML_put_string(me,x)
-#endif /* USE_PSRC*/
+#endif /* USE_PRETTYSRC*/
+
+PRIVATE void LYStartArea ARGS5(
+ HTStructured *, obj,
+ CONST char *, href,
+ CONST char *, alt,
+ CONST char *, title,
+ int, tag_charset)
+{
+ BOOL new_present[HTML_AREA_ATTRIBUTES];
+ CONST char * new_value[HTML_AREA_ATTRIBUTES];
+ int i;
+
+ for (i = 0; i < HTML_AREA_ATTRIBUTES; i++)
+ new_present[i] = NO;
+
+ if (alt) {
+ new_present[HTML_AREA_ALT] = YES;
+ new_value[HTML_AREA_ALT] = (CONST char *)alt;
+ }
+ if (title && *title) {
+ new_present[HTML_AREA_TITLE] = YES;
+ new_value[HTML_AREA_TITLE] = (CONST char *)title;
+ }
+ if (href) {
+ new_present[HTML_AREA_HREF] = YES;
+ new_value[HTML_AREA_HREF] = (CONST char *)href;
+ }
+
+ (*obj->isa->start_element)(obj, HTML_AREA, new_present, new_value,
+ tag_charset, 0);
+}
+
+PRIVATE void LYHandleFIG ARGS10(
+ HTStructured *, me,
+ CONST BOOL*, present,
+ CONST char **, value,
+ BOOL, isobject,
+ BOOL, imagemap,
+ CONST char *, id,
+ CONST char *, src,
+ BOOL, convert,
+ BOOL, start,
+ BOOL *, intern_flag GCC_UNUSED)
+{
+ if (start == TRUE) {
+ me->inFIG = TRUE;
+ if (me->inA) {
+ SET_SKIP_STACK(HTML_A);
+ HTML_end_element(me, HTML_A, NULL);
+ }
+ if (!isobject) {
+ LYEnsureDoubleSpace(me);
+ LYResetParagraphAlignment(me);
+ me->inFIGwithP = TRUE;
+ } else {
+ me->inFIGwithP = FALSE;
+ HTML_put_character(me, ' '); /* space char may be ignored */
+ }
+ if (id && *id) {
+ if (present && convert) {
+ CHECK_ID(HTML_FIG_ID);
+ } else
+ LYHandleID(me, id);
+ }
+ me->in_word = NO;
+ me->inP = FALSE;
+
+ if (clickable_images && src && src != '\0') {
+ char *href = NULL;
+ StrAllocCopy(href, src);
+ CHECK_FOR_INTERN(*intern_flag,href);
+ LYLegitimizeHREF(me, &href, TRUE, TRUE);
+ if (*href) {
+ char *temp = NULL;
+ /*
+ * Check whether a base tag is in effect. - FM
+ */
+ if ((me->inBASE && *href != '#') &&
+ (temp = HTParse(href, me->base_href, PARSE_ALL)) &&
+ *temp != '\0')
+ /*
+ * Use reference related to the base.
+ */
+ StrAllocCopy(href, temp);
+ FREE(temp);
+
+ /*
+ * Check whether to fill in localhost. - FM
+ */
+ LYFillLocalFileURL(&href,
+ ((*href != '#' &&
+ me->inBASE) ?
+ me->base_href : me->node_anchor->address));
+
+ me->CurrentA = HTAnchor_findChildAndLink(
+ me->node_anchor, /* Parent */
+ NULL, /* Tag */
+ href, /* Addresss */
+ INTERN_LT); /* Type */
+ HText_beginAnchor(me->text, me->inUnderline, me->CurrentA);
+ if (me->inBoldH == FALSE)
+ HText_appendCharacter(me->text, LY_BOLD_START_CHAR);
+ HTML_put_string(me, (isobject ?
+ (imagemap ? "(IMAGE)" : "(OBJECT)") : "[FIGURE]"));
+ if (me->inBoldH == FALSE)
+ HText_appendCharacter(me->text, LY_BOLD_END_CHAR);
+ HText_endAnchor(me->text, 0);
+ HTML_put_character(me, '-');
+ HTML_put_character(me, ' '); /* space char may be ignored */
+ me->in_word = NO;
+ }
+ FREE(href);
+ }
+ } else { /* handle end tag */
+ if (me->inFIGwithP) {
+ LYEnsureDoubleSpace(me);
+ } else {
+ HTML_put_character(me, ' '); /* space char may be ignored */
+ }
+ LYResetParagraphAlignment(me);
+ me->inFIGwithP = FALSE;
+ me->inFIG = FALSE;
+ change_paragraph_style(me, me->sp->style); /* Often won't really change */
+ if (me->List_Nesting_Level >= 0) {
+ UPDATE_STYLE;
+ HText_NegateLineOne(me->text);
+ }
+ }
+}
+
+PRIVATE void clear_objectdata ARGS1(
+ HTStructured *, me)
+{
+ if (me) {
+ HTChunkClear(&me->object);
+ me->object_started = FALSE;
+ me->object_declare = FALSE;
+ me->object_shapes = FALSE;
+ me->object_ismap = FALSE;
+ FREE(me->object_usemap);
+ FREE(me->object_id);
+ FREE(me->object_title);
+ FREE(me->object_data);
+ FREE(me->object_type);
+ FREE(me->object_classid);
+ FREE(me->object_codebase);
+ FREE(me->object_codetype);
+ FREE(me->object_name);
+ }
+}
/* Start Element
** -------------
*/
-PRIVATE void HTML_start_element ARGS6(
+PRIVATE int HTML_start_element ARGS6(
HTStructured *, me,
int, element_number,
CONST BOOL*, present,
@@ -736,17 +917,20 @@ PRIVATE void HTML_start_element ARGS6(
char *I_value = NULL;
char *I_name = NULL;
char *temp = NULL;
- int dest_char_set = UCLYhndl_for_unrec;
+ int dest_char_set = -1;
HTParentAnchor *dest = NULL; /* An anchor's destination */
BOOL dest_ismap = FALSE; /* Is dest an image map script? */
- BOOL UseBASE = TRUE; /* Resoved vs. BASE if present? */
+ BOOL UseBASE = TRUE; /* Resolved vs. BASE if present? */
HTChildAnchor *ID_A = NULL; /* HTML_foo_ID anchor */
int url_type = 0, i = 0;
char *cp = NULL;
- int ElementNumber = element_number;
+ HTMLElement ElementNumber = element_number;
BOOL intern_flag = FALSE;
+ short stbl_align = HT_ALIGN_NONE;
+ int status = HT_OK;
#ifdef USE_COLOR_STYLE
char* class_name;
+ int class_used = 0;
# if OPT_SCN
# if !OMIT_SCN_KEEPING
char* Style_className_end_was = Style_className_end+1;
@@ -755,34 +939,34 @@ PRIVATE void HTML_start_element ARGS6(
# endif
#endif
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view && !sgml_in_psrc_was_initialized) {
if (!psrc_nested_call) {
HTTag * tag = &HTML_dtd.tags[element_number];
char buf[200];
CONST char* p;
if (psrc_first_tag) {
- psrc_first_tag=FALSE;
+ psrc_first_tag = FALSE;
/* perform the special actions on the begining of the document.
It's assumed that all lynx modules start generating html
from tag (ie not a text) so we are able to trap this moment
and initialize.
*/
- psrc_nested_call=TRUE;
- HTML_start_element(me,HTML_BODY, NULL,NULL,tag_charset,NULL);
- HTML_start_element(me,HTML_PRE, NULL,NULL,tag_charset,NULL);
+ psrc_nested_call = TRUE;
+ HTML_start_element(me, HTML_BODY, NULL, NULL, tag_charset, NULL);
+ HTML_start_element(me, HTML_PRE, NULL, NULL, tag_charset, NULL);
PSRCSTART(entire);
- psrc_nested_call=FALSE;
+ psrc_nested_call = FALSE;
}
- psrc_nested_call=TRUE;
+ psrc_nested_call = TRUE;
/*write markup for tags and exit*/
PSRCSTART(abracket); PUTC('<'); PSRCSTOP(abracket);
PSRCSTART(tag);
if (tagname_transform!=0)
PUTS(tag->name);
else {
- strcpy(buf,tag->name);
+ LYstrncpy(buf, tag->name, sizeof(buf)-1);
LYLowerCase(buf);
PUTS(buf);
}
@@ -794,14 +978,14 @@ PRIVATE void HTML_start_element ARGS6(
if (attrname_transform!=0)
PUTS(tag->attributes[i].name);
else {
- strcpy(buf,tag->attributes[i].name);
+ LYstrncpy(buf, tag->attributes[i].name, sizeof(buf)-1);
LYLowerCase(buf);
PUTS(buf);
}
if (value[i]) {
char q='"';
/*0 in dquotes, 1 - in quotes, 2 mixed*/
- char kind= ( !strchr(value[i], '"') ?
+ char kind= (char) ( !strchr(value[i], '"') ?
0 :
!strchr(value[i], '\'') ?
q='\'',1 :
@@ -839,16 +1023,17 @@ PRIVATE void HTML_start_element ARGS6(
PSRCSTOP(tag);
PSRCSTART(abracket); PUTC('>'); PSRCSTOP(abracket);
psrc_nested_call=FALSE;
- return;
+ return HT_OK;
} /*if (!psrc_nested_call) */
/*fall through*/
}
-#endif /* USE_PSRC */
+#endif /* USE_PRETTYSRC */
if (LYMapsOnly) {
if (!(ElementNumber == HTML_MAP || ElementNumber == HTML_AREA ||
- ElementNumber == HTML_BASE)) {
- return;
+ ElementNumber == HTML_BASE || ElementNumber == HTML_OBJECT ||
+ ElementNumber == HTML_A)) {
+ return HT_OK;
}
} else if (!me->text) {
UPDATE_STYLE;
@@ -859,9 +1044,9 @@ PRIVATE void HTML_start_element ARGS6(
int j = ((tag_charset < 0) ? me->UCLYhndl : tag_charset);
if ((me->tag_charset != j) || (j < 0 /* for trace entry */)) {
- CTRACE(tfp, "me->tag_charset: %d -> %d", me->tag_charset, j );
- CTRACE(tfp, " (me->UCLYhndl: %d, tag_charset: %d)\n",
- me->UCLYhndl, tag_charset);
+ CTRACE((tfp, "me->tag_charset: %d -> %d", me->tag_charset, j ));
+ CTRACE((tfp, " (me->UCLYhndl: %d, tag_charset: %d)\n",
+ me->UCLYhndl, tag_charset));
me->tag_charset = j;
}
}
@@ -874,7 +1059,6 @@ PRIVATE void HTML_start_element ARGS6(
#else
# if !OMIT_SCN_KEEPING
*Style_className_end=';';
- /*strcpy(Style_className_end+1,HTML_dtd.tags[element_number].name);*/
memcpy(Style_className_end+1,
HTML_dtd.tags[element_number].name,
HTML_dtd.tags[element_number].name_len+1);
@@ -892,23 +1076,25 @@ PRIVATE void HTML_start_element ARGS6(
force_current_tag_style = FALSE;
}
+ CTRACE2(TRACE_STYLE, (tfp, "CSS.elt:<%s>\n", HTML_dtd.tags[element_number].name));
- if (current_tag_style == -1) {
+ if (current_tag_style == -1) { /* Append class_name */
#if !OPT_SCN
strcpy (myHash, HTML_dtd.tags[element_number].name);
#else
- hcode=hash_code_lowercase_on_fly(HTML_dtd.tags[element_number].name);
+ hcode = hash_code_lowercase_on_fly(HTML_dtd.tags[element_number].name);
#endif
if (class_name[0])
{
+ int ohcode = hcode;
+ char *oend = Style_className_end;
#if !OPT_SCN
+ int len = strlen(myHash);
+ sprintf(myHash, ".%.*s", (int)sizeof(myHash) - len - 2, class_name);
HTSprintf (&Style_className, ".%s", class_name);
- strcat (myHash, ".");
- strcat (myHash, class_name);
#else
-
# if !OMIT_SCN_KEEPING
- int l=strlen(class_name);
+ int l = strlen(class_name);
*Style_className_end = '.';
memcpy(Style_className_end+1, class_name, l+1 );
Style_className_end += l+1;
@@ -917,7 +1103,20 @@ PRIVATE void HTML_start_element ARGS6(
hcode = hash_code_aggregate_char('.', hcode);
hcode = hash_code_aggregate_lower_str(class_name, hcode);
#endif
+ if (!hashStyles[hcode].name) { /* None such -> classless version */
+ hcode = ohcode;
+ *oend = '\0';
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.start_element: <%s> (class <%s> not configured), hcode=%d.\n",
+ HTML_dtd.tags[element_number].name, class_name, hcode));
+ } else {
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.start_element: <%s>.<%s>, hcode=%d.\n",
+ HTML_dtd.tags[element_number].name, class_name, hcode));
+ class_used = 1;
+ }
}
+
#if !OPT_SCN
strtolower(myHash);
hcode = hash_code(myHash);
@@ -927,52 +1126,45 @@ PRIVATE void HTML_start_element ARGS6(
#if !OPT_SCN
if (TRACE)
{
- fprintf(tfp, "CSSTRIM:%s -> %d", myHash, hcode);
- if (hashStyles[hcode].code!=hcode)
- {
- char *rp=strrchr(myHash, '.');
- fprintf(tfp, " (undefined) %s\n", myHash);
- if (rp)
- {
+ CTRACE((tfp, "CSSTRIM:%s -> %d", myHash, hcode));
+ if (hashStyles[hcode].code != hcode) {
+ char *rp = strrchr(myHash, '.');
+ CTRACE((tfp, " (undefined) %s\n", myHash));
+ if (rp) {
int hcd;
- *rp='\0'; /* trim the class */
+ *rp = '\0'; /* trim the class */
hcd = hash_code(myHash);
- fprintf(tfp, "CSS:%s -> %d", myHash, hcd);
+ CTRACE((tfp, "CSS:%s -> %d", myHash, hcd));
if (hashStyles[hcd].code!=hcd)
- fprintf(tfp, " (undefined) %s\n", myHash);
+ CTRACE((tfp, " (undefined) %s\n", myHash));
else
- fprintf(tfp, " ca=%d\n", hashStyles[hcd].color);
+ CTRACE((tfp, " ca=%d\n", hashStyles[hcd].color));
}
+ } else {
+ CTRACE((tfp, " ca=%d\n", hashStyles[hcode].color));
}
- else
- fprintf(tfp, " ca=%d\n", hashStyles[hcode].color);
}
#endif
-
- /* seems that this condition is always true - HV */
- if (displayStyles[element_number + STARTAT].color > -2) /* actually set */
- {
- CTRACE(tfp, "CSSTRIM: start_element: top <%s>\n", HTML_dtd.tags[element_number].name);
- HText_characterStyle(me->text, hcode, 1);
- }
} else { /* (current_tag_style!=-1) */
if (class_name[0]) {
#if !OPT_SCN
+ int len = strlen(myHash);
+ sprintf(myHash, ".%.*s", (int)sizeof(myHash) - len - 2, class_name);
HTSprintf (&Style_className, ".%s", class_name);
- strcat (myHash, ".");
- strcat (myHash, class_name);
#else
# if !OMIT_SCN_KEEPING
int l = strlen(class_name);
- *Style_className_end='.';
- memcpy(Style_className_end+1,class_name, l+1 );
- Style_className_end+=l+1;
+ *Style_className_end = '.';
+ memcpy(Style_className_end+1,class_name, l + 1 );
+ Style_className_end += l + 1;
# endif
#endif
class_string[0] = '\0';
}
hcode = current_tag_style;
- HText_characterStyle(me->text, hcode , 1);
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.start_element: <%s>, hcode=%d.\n",
+ HTML_dtd.tags[element_number].name, hcode));
current_tag_style = -1;
}
@@ -985,8 +1177,37 @@ PRIVATE void HTML_start_element ARGS6(
# endif
#endif
+#if OPT_SCN && !OMIT_SCN_KEEPING /* Can be done in other cases too... */
+ if (!class_used && ElementNumber == HTML_INPUT) { /* For some other too? */
+ CONST char *type = "";
+ char *oend = Style_className_end;
+ int l, ohcode = hcode;
+
+ if (present && present[HTML_INPUT_TYPE] && value[HTML_INPUT_TYPE])
+ type = value[HTML_INPUT_TYPE];
+ l = strlen(type);
+
+ *Style_className_end = '.';
+ memcpy(Style_className_end+1, "type.", 5 );
+ memcpy(Style_className_end+6, type, l+1 );
+ Style_className_end += l+6;
+ hcode = hash_code_aggregate_lower_str(".type.", hcode);
+ hcode = hash_code_aggregate_lower_str(type, hcode);
+ if (!hashStyles[hcode].name) { /* None such -> classless version */
+ hcode = ohcode;
+ *oend = '\0';
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.start_element: type <%s> not configured.\n",
+ type));
+ } else {
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.start_element: <%s>.type.<%s>, hcode=%d.\n",
+ HTML_dtd.tags[element_number].name, type, hcode));
+ }
+ }
+#endif /* OPT_SCN && !OMIT_SCN_KEEPING */
-
+ HText_characterStyle(me->text, hcode, 1);
#endif /* USE_COLOR_STYLE */
/*
@@ -1008,8 +1229,8 @@ PRIVATE void HTML_start_element ARGS6(
StrAllocCopy(base, value[HTML_BASE_HREF]);
if (!(url_type = LYLegitimizeHREF(me, &base, TRUE, TRUE))) {
- CTRACE(tfp, "HTML: BASE '%s' is not an absolute URL.\n",
- (base ? base : ""));
+ CTRACE((tfp, "HTML: BASE '%s' is not an absolute URL.\n",
+ (base ? base : "")));
if (me->inBadBASE == FALSE)
HTAlert(BASE_NOT_ABSOLUTE);
me->inBadBASE = TRUE;
@@ -1113,7 +1334,7 @@ PRIVATE void HTML_start_element ARGS6(
intern_flag = FALSE;
#endif
if (present && present[HTML_LINK_HREF]) {
- CHECK_FOR_INTERN(value[HTML_LINK_HREF]);
+ CHECK_FOR_INTERN(intern_flag,value[HTML_LINK_HREF]);
/*
* Prepare to do housekeeping on the reference. - FM
*/
@@ -1174,7 +1395,7 @@ PRIVATE void HTML_start_element ARGS6(
me->node_anchor->address));
}
HTAnchor_setOwner(me->node_anchor, href);
- CTRACE(tfp, "HTML: DOC OWNER '%s' found\n", href);
+ CTRACE((tfp, "HTML: DOC OWNER '%s' found\n", href));
FREE(href);
/*
@@ -1204,53 +1425,23 @@ PRIVATE void HTML_start_element ARGS6(
present[HTML_LINK_REL] && value[HTML_LINK_REL]) {
/*
* Ignore style sheets, for now. - FM
+ *
+ * lss and css have different syntax - lynx shouldn't try to
+ * parse them now (it tries to parse them as lss, so it exits
+ * with error message on the 1st non-empty line) - VH
*/
-/* lss and css has different syntax - lynx shouldn't try to
- parse them now (it tries to parse them as lss, so it exits with
- error message the 1st non-empty line) - HVV
-*/
#ifndef USE_COLOR_STYLE
if (!strcasecomp(value[HTML_LINK_REL], "StyleSheet") ||
!strcasecomp(value[HTML_LINK_REL], "Style")) {
- CTRACE(tfp, "HTML: StyleSheet link found.\n");
-#ifdef LINKEDSTYLES
- if (href && *href != '\0')
- {
- int res = -999;
- if ((url_type = is_url(href)) == 0 ||
- (url_type == FILE_URL_TYPE && LYisLocalFile(href))) {
- if (url_type == FILE_URL_TYPE) {
- temp = HTParse(href, "", PARSE_PATH+PARSE_PUNCTUATION);
- HTUnEscape(temp);
- if (temp && *temp != '\0') {
- res = style_readFromFile(temp);
- if (res != 0)
- StrAllocCopy(href, temp);
- }
- FREE(temp);
- } else {
- res = style_readFromFile(href);
- }
- }
- CTRACE(tfp, "CSS: StyleSheet=%s %d\n", href, res);
- if (res == 0)
- HTAnchor_setStyle (me->node_anchor, href);
- }
- else {
- CTRACE(tfp,
- " non-local StyleSheets not yet implemented.\n");
- }
-#else
- CTRACE(tfp,
- " StyleSheets not yet implemented.\n");
-#endif
+ CTRACE2(TRACE_STYLE, (tfp, "HTML: StyleSheet link found.\n"));
+ CTRACE2(TRACE_STYLE, (tfp, " StyleSheets not yet implemented.\n"));
FREE(href);
break;
}
#endif /* ! USE_COLOR_STYLE */
/*
- * Ignore anything not registered in the the 28-Mar-95
+ * Ignore anything not registered in the 28-Mar-95
* IETF HTML 3.0 draft and W3C HTML 3.2 draft, or not
* appropriate for Lynx banner links in the expired
* Maloney and Quin relrev draft. We'll make this more
@@ -1315,9 +1506,17 @@ PRIVATE void HTML_start_element ARGS6(
StrAllocCopy(temp, "RelTitle: ");
StrAllocCat(temp, value[HTML_LINK_REL]);
}
+#ifndef DISABLE_BIBP
+ } else if (!strcasecomp(value[HTML_LINK_REL], "citehost")) {
+ /* Citehost determination for bibp links. - RDC */
+ HTAnchor_setCitehost(me->node_anchor, href);
+ CTRACE((tfp, "HTML: citehost '%s' found\n", href));
+ FREE(href);
+ break;
+#endif
} else {
- CTRACE(tfp, "HTML: LINK with REL=\"%s\" ignored.\n",
- value[HTML_LINK_REL]);
+ CTRACE((tfp, "HTML: LINK with REL=\"%s\" ignored.\n",
+ value[HTML_LINK_REL]));
FREE(href);
break;
}
@@ -1335,8 +1534,8 @@ PRIVATE void HTML_start_element ARGS6(
} else if (!strcasecomp(value[HTML_LINK_REL], "Index")) {
StrAllocCopy(href, indexfile);
} else {
- CTRACE(tfp, "HTML: LINK with REL=\"%s\" and no HREF ignored.\n",
- value[HTML_LINK_REL]);
+ CTRACE((tfp, "HTML: LINK with REL=\"%s\" and no HREF ignored.\n",
+ value[HTML_LINK_REL]));
break;
}
StrAllocCopy(title, value[HTML_LINK_REL]);
@@ -1391,16 +1590,18 @@ PRIVATE void HTML_start_element ARGS6(
)) != NULL) {
if (pdoctitle && !HTAnchor_title(dest))
HTAnchor_setTitle(dest, *pdoctitle);
- dest = NULL;
+
+ /* Don't allow CHARSET attribute to change *this* document's
+ charset assumption. - kw */
+ if (dest == me->node_anchor)
+ dest = NULL;
if (present[HTML_LINK_CHARSET] &&
value[HTML_LINK_CHARSET] && *value[HTML_LINK_CHARSET] != '\0') {
dest_char_set = UCGetLYhndl_byMIME(value[HTML_LINK_CHARSET]);
if (dest_char_set < 0)
dest_char_set = UCLYhndl_for_unrec;
- if (dest_char_set < 0) /* recover if not defined :-( */
- dest_char_set = UCLYhndl_for_unspec; /* always >= 0 */
}
- if (dest)
+ if (dest && dest_char_set >= 0)
HTAnchor_setUCInfoStage(dest, dest_char_set,
UCT_STAGE_PARSER,
UCT_SETBY_LINK);
@@ -1417,6 +1618,12 @@ PRIVATE void HTML_start_element ARGS6(
HText_beginAnchor(me->text, me->inUnderline, ID_A);
HText_endAnchor(me->text, 0);
HText_setToolbar(me->text);
+ } else {
+ /*
+ * Add collapsible space to separate link from previous
+ * generated links. - kw
+ */
+ HTML_put_character(me, ' ');
}
HText_beginAnchor(me->text, me->inUnderline, me->CurrentA);
if (me->inBoldH == FALSE)
@@ -1427,7 +1634,8 @@ PRIVATE void HTML_start_element ARGS6(
{
char *tmp = 0;
HTSprintf0(&tmp, "link.%s.%s", value[HTML_LINK_CLASS], title);
- CTRACE(tfp, "CSSTRIM:link=%s\n", tmp);
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.link: using style <%s>\n", tmp));
HText_characterStyle(me->text, hash_code(tmp), 1);
HTML_put_string(me, title);
@@ -1519,8 +1727,6 @@ PRIVATE void HTML_start_element ARGS6(
break;
case HTML_NEXTID:
- /* if (present && present[NEXTID_N] && value[NEXTID_N])
- HText_setNextId(me->text, atoi(value[NEXTID_N])); */
break;
case HTML_STYLE:
@@ -1559,7 +1765,7 @@ PRIVATE void HTML_start_element ARGS6(
if (present && present[HTML_FRAME_SRC] &&
value[HTML_FRAME_SRC] && *value[HTML_FRAME_SRC] != '\0') {
StrAllocCopy(href, value[HTML_FRAME_SRC]);
- CHECK_FOR_INTERN(href);
+ CHECK_FOR_INTERN(intern_flag,href);
url_type = LYLegitimizeHREF(me, &href, TRUE, TRUE);
/*
@@ -1591,6 +1797,7 @@ PRIVATE void HTML_start_element ARGS6(
NULL, /* Tag */
href, /* Addresss */
INTERN_LT); /* Type */
+ CAN_JUSTIFY_PUSH(FALSE);
LYEnsureSingleSpace(me);
if (me->inUnderline == FALSE)
HText_appendCharacter(me->text, LY_UNDERLINE_START_CHAR);
@@ -1598,6 +1805,7 @@ PRIVATE void HTML_start_element ARGS6(
if (me->inUnderline == FALSE)
HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);
HTML_put_character(me, ' ');
+
me->in_word = NO;
CHECK_ID(HTML_FRAME_ID);
HText_beginAnchor(me->text, me->inUnderline, me->CurrentA);
@@ -1609,6 +1817,7 @@ PRIVATE void HTML_start_element ARGS6(
HText_appendCharacter(me->text, LY_BOLD_END_CHAR);
HText_endAnchor(me->text, 0);
LYEnsureSingleSpace(me);
+ CAN_JUSTIFY_POP;
} else {
CHECK_ID(HTML_FRAME_ID);
}
@@ -1631,7 +1840,7 @@ PRIVATE void HTML_start_element ARGS6(
if (present && present[HTML_IFRAME_SRC] &&
value[HTML_IFRAME_SRC] && *value[HTML_IFRAME_SRC] != '\0') {
StrAllocCopy(href, value[HTML_IFRAME_SRC]);
- CHECK_FOR_INTERN(href);
+ CHECK_FOR_INTERN(intern_flag,href);
url_type = LYLegitimizeHREF(me, &href, TRUE, TRUE);
/*
@@ -1662,6 +1871,7 @@ PRIVATE void HTML_start_element ARGS6(
href, /* Addresss */
INTERN_LT); /* Type */
LYEnsureDoubleSpace(me);
+ CAN_JUSTIFY_PUSH_F
LYResetParagraphAlignment(me);
if (me->inUnderline == FALSE)
HText_appendCharacter(me->text, LY_UNDERLINE_START_CHAR);
@@ -1669,6 +1879,7 @@ PRIVATE void HTML_start_element ARGS6(
if (me->inUnderline == FALSE)
HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);
HTML_put_character(me, ' ');
+
me->in_word = NO;
CHECK_ID(HTML_IFRAME_ID);
HText_beginAnchor(me->text, me->inUnderline, me->CurrentA);
@@ -1680,6 +1891,7 @@ PRIVATE void HTML_start_element ARGS6(
HText_appendCharacter(me->text, LY_BOLD_END_CHAR);
HText_endAnchor(me->text, 0);
LYEnsureSingleSpace(me);
+ CAN_JUSTIFY_POP;
} else {
CHECK_ID(HTML_IFRAME_ID);
}
@@ -1690,7 +1902,7 @@ PRIVATE void HTML_start_element ARGS6(
case HTML_MARQUEE:
change_paragraph_style(me, styles[HTML_BANNER]);
UPDATE_STYLE;
- if (me->sp->tag_number == ElementNumber)
+ if (me->sp->tag_number == (int) ElementNumber)
LYEnsureDoubleSpace(me);
/*
* Treat this as a toolbar if we don't have one
@@ -1716,15 +1928,37 @@ PRIVATE void HTML_start_element ARGS6(
if (me->Division_Level < (MAX_NESTING - 1)) {
me->Division_Level++;
} else {
- CTRACE(tfp,
+ CTRACE((tfp,
"HTML: ****** Maximum nesting of %d divisions exceeded!\n",
- MAX_NESTING);
+ MAX_NESTING));
}
+ if (me->inP)
+ LYEnsureSingleSpace(me); /* always at least break line - kw */
if (ElementNumber == HTML_CENTER) {
me->DivisionAlignments[me->Division_Level] = HT_CENTER;
change_paragraph_style(me, styles[HTML_DCENTER]);
UPDATE_STYLE;
me->current_default_alignment = styles[HTML_DCENTER]->alignment;
+ } else if (me->List_Nesting_Level >= 0 &&
+ !(present && present[HTML_DIV_ALIGN] &&
+ value[HTML_DIV_ALIGN] &&
+ (!strcasecomp(value[HTML_DIV_ALIGN], "center") ||
+ !strcasecomp(value[HTML_DIV_ALIGN], "right")))) {
+ if (present && present[HTML_DIV_ALIGN])
+ me->current_default_alignment = HT_LEFT;
+ else if (me->Division_Level == 0)
+ me->current_default_alignment = HT_LEFT;
+ else if (me->sp[0].tag_number == HTML_UL ||
+ me->sp[0].tag_number == HTML_OL ||
+ me->sp[0].tag_number == HTML_MENU ||
+ me->sp[0].tag_number == HTML_DIR ||
+ me->sp[0].tag_number == HTML_LI ||
+ me->sp[0].tag_number == HTML_LH ||
+ me->sp[0].tag_number == HTML_DD)
+ me->current_default_alignment = HT_LEFT;
+ LYHandlePlike(me, present, value, include, HTML_DIV_ALIGN, TRUE);
+ me->DivisionAlignments[me->Division_Level] = (short)
+ me->current_default_alignment;
} else if (present && present[HTML_DIV_ALIGN] &&
value[HTML_DIV_ALIGN] && *value[HTML_DIV_ALIGN]) {
if (!strcasecomp(value[HTML_DIV_ALIGN], "center")) {
@@ -1779,7 +2013,8 @@ PRIVATE void HTML_start_element ARGS6(
(me->sp[0].tag_number == HTML_UL ||
me->sp[0].tag_number == HTML_OL ||
me->sp[0].tag_number == HTML_MENU ||
- me->sp[0].tag_number == HTML_DIR)) {
+ me->sp[0].tag_number == HTML_DIR ||
+ me->sp[0].tag_number == HTML_LI)) {
if (HTML_dtd.tags[HTML_LH].contents == SGML_EMPTY) {
ElementNumber = HTML_LH;
} else {
@@ -1844,7 +2079,8 @@ PRIVATE void HTML_start_element ARGS6(
break;
case HTML_P:
- LYHandleP(me, present, value, include, TRUE);
+ LYHandlePlike(me, present, value, include, HTML_P_ALIGN, TRUE);
+ CHECK_ID(HTML_P_ID);
break;
case HTML_BR:
@@ -1925,7 +2161,7 @@ PRIVATE void HTML_start_element ARGS6(
width = LYcols - 1 -
me->new_style->leftIndent - me->new_style->rightIndent;
if (present && present[HTML_HR_WIDTH] && value[HTML_HR_WIDTH] &&
- isdigit(*value[HTML_HR_WIDTH]) &&
+ isdigit(UCH(*value[HTML_HR_WIDTH])) &&
value[HTML_HR_WIDTH][strlen(value[HTML_HR_WIDTH])-1] == '%') {
char *percent = NULL;
int Percent, Width;
@@ -1985,11 +2221,19 @@ PRIVATE void HTML_start_element ARGS6(
case HTML_TAB:
if (!present) { /* Bad tag. Must have at least one attribute. - FM */
- CTRACE(tfp, "HTML: TAB tag has no attributes. Ignored.\n");
+ CTRACE((tfp, "HTML: TAB tag has no attributes. Ignored.\n"));
break;
}
+ /*
+ * If page author is using TAB within a TABLE, it's probably
+ * formatted specifically to work well for Lynx without simple
+ * table tracking code. Cancel tracking, it would only make
+ * things worse. - kw
+ */
+ HText_cancelStbl(me->text);
UPDATE_STYLE;
+ CANT_JUSTIFY_THIS_LINE;
if (present[HTML_TAB_ALIGN] && value[HTML_TAB_ALIGN] &&
(strcasecomp(value[HTML_TAB_ALIGN], "left") ||
!(present[HTML_TAB_TO] || present[HTML_TAB_INDENT]))) {
@@ -1998,7 +2242,7 @@ PRIVATE void HTML_start_element ARGS6(
* the ALIGN and DP attributes implemented. - FM
*/
HTML_put_character(me, ' ');
- CTRACE(tfp, "HTML: ALIGN not 'left'. Using space instead of TAB.\n");
+ CTRACE((tfp, "HTML: ALIGN not 'left'. Using space instead of TAB.\n"));
} else if (!LYoverride_default_alignment(me) &&
me->current_default_alignment != HT_LEFT) {
@@ -2009,13 +2253,13 @@ PRIVATE void HTML_start_element ARGS6(
* that the alignment be HT_LEFT. - FM
*/
HTML_put_character(me, ' ');
- CTRACE(tfp, "HTML: Not HT_LEFT. Using space instead of TAB.\n");
+ CTRACE((tfp, "HTML: Not HT_LEFT. Using space instead of TAB.\n"));
} else if ((present[HTML_TAB_TO] &&
value[HTML_TAB_TO] && *value[HTML_TAB_TO]) ||
(present[HTML_TAB_INDENT] &&
value[HTML_TAB_INDENT] &&
- isdigit(*value[HTML_TAB_INDENT]))) {
+ isdigit(UCH(*value[HTML_TAB_INDENT])))) {
int column, target = -1;
int enval = 2;
@@ -2031,7 +2275,7 @@ PRIVATE void HTML_start_element ARGS6(
}
} else if (!(temp && *temp) && present[HTML_TAB_INDENT] &&
value[HTML_TAB_INDENT] &&
- isdigit(*value[HTML_TAB_INDENT])) {
+ isdigit(UCH(*value[HTML_TAB_INDENT]))) {
/*
* The INDENT value is in "en" (enval per column) units.
* Divide it by enval, rounding odd values up. - FM
@@ -2045,10 +2289,11 @@ PRIVATE void HTML_start_element ARGS6(
* or right, just add a collapsible space, otherwise, add the
* appropriate number of spaces. - FM
*/
+
if (target < column ||
target > HText_getMaximumColumn(me->text)) {
HTML_put_character(me, ' ');
- CTRACE(tfp, "HTML: Column out of bounds. Using space instead of TAB.\n");
+ CTRACE((tfp, "HTML: Column out of bounds. Using space instead of TAB.\n"));
} else {
for (i = column; i < target; i++)
HText_appendCharacter(me->text, ' ');
@@ -2117,15 +2362,15 @@ PRIVATE void HTML_start_element ARGS6(
* Can't display both underline and bold at same time.
*/
if (me->inBoldA == TRUE || me->inBoldH == TRUE) {
- CTRACE(tfp, "Underline Level is %d\n", me->Underline_Level);
+ CTRACE((tfp, "Underline Level is %d\n", me->Underline_Level));
break;
}
if (me->inUnderline == FALSE) {
HText_appendCharacter(me->text, LY_UNDERLINE_START_CHAR);
me->inUnderline = TRUE;
- CTRACE(tfp,"Beginning underline\n");
+ CTRACE((tfp,"Beginning underline\n"));
} else {
- CTRACE(tfp,"Underline Level is %d\n", me->Underline_Level);
+ CTRACE((tfp,"Underline Level is %d\n", me->Underline_Level));
}
break;
@@ -2139,13 +2384,23 @@ PRIVATE void HTML_start_element ARGS6(
case HTML_KBD:
case HTML_SAMP:
case HTML_SMALL:
- case HTML_SUB:
- case HTML_SUP:
case HTML_TT:
case HTML_VAR:
CHECK_ID(HTML_GEN_ID);
break; /* ignore */
+ case HTML_SUP:
+ if (isxdigit(UCH(HText_getLastChar(me->text)))) {
+ HText_appendCharacter(me->text, '^');
+ }
+ CHECK_ID(HTML_GEN_ID);
+ break;
+
+ case HTML_SUB:
+ HText_appendCharacter(me->text, '[');
+ CHECK_ID(HTML_GEN_ID);
+ break;
+
case HTML_DEL:
case HTML_S:
case HTML_STRIKE:
@@ -2195,8 +2450,11 @@ PRIVATE void HTML_start_element ARGS6(
** PRE block is received. - FM
*/
me->inPRE = FALSE;
+ /* FALLTHRU */
case HTML_LISTING: /* Literal text */
+ /* FALLTHRU */
case HTML_XMP:
+ /* FALLTHRU */
case HTML_PLAINTEXT:
change_paragraph_style(me, styles[ElementNumber]);
UPDATE_STYLE;
@@ -2209,7 +2467,7 @@ PRIVATE void HTML_start_element ARGS6(
case HTML_BQ:
change_paragraph_style(me, styles[ElementNumber]);
UPDATE_STYLE;
- if (me->sp->tag_number == ElementNumber)
+ if (me->sp->tag_number == (int) ElementNumber)
LYEnsureDoubleSpace(me);
CHECK_ID(HTML_BQ_ID);
break;
@@ -2217,7 +2475,7 @@ PRIVATE void HTML_start_element ARGS6(
case HTML_NOTE:
change_paragraph_style(me, styles[ElementNumber]);
UPDATE_STYLE;
- if (me->sp->tag_number == ElementNumber)
+ if (me->sp->tag_number == (int) ElementNumber)
LYEnsureDoubleSpace(me);
CHECK_ID(HTML_NOTE_ID);
{
@@ -2249,8 +2507,10 @@ PRIVATE void HTML_start_element ARGS6(
if (me->inUnderline == FALSE)
HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);
HTML_put_character(me, ' ');
+ CAN_JUSTIFY_START;
FREE(note);
}
+ CAN_JUSTIFY_START;
me->inLABEL = TRUE;
me->in_word = NO;
me->inP = FALSE;
@@ -2259,7 +2519,7 @@ PRIVATE void HTML_start_element ARGS6(
case HTML_ADDRESS:
change_paragraph_style(me, styles[ElementNumber]);
UPDATE_STYLE;
- if (me->sp->tag_number == ElementNumber)
+ if (me->sp->tag_number == (int) ElementNumber)
LYEnsureDoubleSpace(me);
CHECK_ID(HTML_ADDRESS_ID);
break;
@@ -2281,6 +2541,7 @@ PRIVATE void HTML_start_element ARGS6(
}
UPDATE_STYLE; /* update to the new style */
CHECK_ID(HTML_DL_ID);
+
break;
case HTML_DLC:
@@ -2525,97 +2786,107 @@ PRIVATE void HTML_start_element ARGS6(
HText_appendParagraph(me->text);
me->sp->style->alignment = HT_LEFT;
CHECK_ID(HTML_LI_ID);
- if (me->sp[0].tag_number == HTML_OL) {
- char number_string[20];
- int counter, seqnum;
- char seqtype;
-
- counter = me->List_Nesting_Level < 11 ?
- me->List_Nesting_Level : 11;
- if (present && present[HTML_LI_TYPE] && value[HTML_LI_TYPE]) {
- if (*value[HTML_LI_TYPE] == '1') {
- me->OL_Type[counter] = '1';
- } else if (*value[HTML_LI_TYPE] == 'A') {
- me->OL_Type[counter] = 'A';
- } else if (*value[HTML_LI_TYPE] == 'a') {
- me->OL_Type[counter] = 'a';
- } else if (*value[HTML_LI_TYPE] == 'I') {
- me->OL_Type[counter] = 'I';
- } else if (*value[HTML_LI_TYPE] == 'i') {
- me->OL_Type[counter] = 'i';
+ {
+ int surrounding_tag_number = me->sp[0].tag_number;
+ /*
+ * No, a LI should never occur directly within another LI,
+ * but this may result from incomplete error recovery.
+ * So check one more surrounding level in this case. - kw
+ */
+ if (surrounding_tag_number == HTML_LI &&
+ me->sp < (me->stack + MAX_NESTING - 1))
+ surrounding_tag_number = me->sp[1].tag_number;
+ if (surrounding_tag_number == HTML_OL) {
+ char number_string[20];
+ int counter, seqnum;
+ char seqtype;
+
+ counter = me->List_Nesting_Level < 11 ?
+ me->List_Nesting_Level : 11;
+ if (present && present[HTML_LI_TYPE] && value[HTML_LI_TYPE]) {
+ if (*value[HTML_LI_TYPE] == '1') {
+ me->OL_Type[counter] = '1';
+ } else if (*value[HTML_LI_TYPE] == 'A') {
+ me->OL_Type[counter] = 'A';
+ } else if (*value[HTML_LI_TYPE] == 'a') {
+ me->OL_Type[counter] = 'a';
+ } else if (*value[HTML_LI_TYPE] == 'I') {
+ me->OL_Type[counter] = 'I';
+ } else if (*value[HTML_LI_TYPE] == 'i') {
+ me->OL_Type[counter] = 'i';
+ }
}
- }
- if (present && present[HTML_LI_VALUE] &&
- ((value[HTML_LI_VALUE] != NULL) &&
- (*value[HTML_LI_VALUE] != '\0')) &&
- ((isdigit(*value[HTML_LI_VALUE])) ||
- (*value[HTML_LI_VALUE] == '-' &&
- isdigit(*(value[HTML_LI_VALUE] + 1))))) {
- seqnum = atoi(value[HTML_LI_VALUE]);
- if (seqnum <= OL_VOID)
- seqnum = OL_VOID + 1;
- seqtype = me->OL_Type[counter];
- if (seqtype != '1' && seqnum < 1)
- seqnum = 1;
- me->OL_Counter[counter] = seqnum + 1;
- } else if (me->OL_Counter[counter] >= OL_VOID) {
- seqnum = me->OL_Counter[counter]++;
- seqtype = me->OL_Type[counter];
- if (seqtype != '1' && seqnum < 1) {
- seqnum = 1;
+ if (present && present[HTML_LI_VALUE] &&
+ ((value[HTML_LI_VALUE] != NULL) &&
+ (*value[HTML_LI_VALUE] != '\0')) &&
+ ((isdigit(UCH(*value[HTML_LI_VALUE]))) ||
+ (*value[HTML_LI_VALUE] == '-' &&
+ isdigit(UCH(*(value[HTML_LI_VALUE] + 1)))))) {
+ seqnum = atoi(value[HTML_LI_VALUE]);
+ if (seqnum <= OL_VOID)
+ seqnum = OL_VOID + 1;
+ seqtype = me->OL_Type[counter];
+ if (seqtype != '1' && seqnum < 1)
+ seqnum = 1;
me->OL_Counter[counter] = seqnum + 1;
- }
- } else {
- seqnum = me->Last_OL_Count + 1;
- seqtype = me->Last_OL_Type;
- for (i = (counter - 1); i >= 0; i--) {
- if (me->OL_Counter[i] > OL_VOID) {
- seqnum = me->OL_Counter[i]++;
- seqtype = me->OL_Type[i];
- i = 0;
+ } else if (me->OL_Counter[counter] >= OL_VOID) {
+ seqnum = me->OL_Counter[counter]++;
+ seqtype = me->OL_Type[counter];
+ if (seqtype != '1' && seqnum < 1) {
+ seqnum = 1;
+ me->OL_Counter[counter] = seqnum + 1;
+ }
+ } else {
+ seqnum = me->Last_OL_Count + 1;
+ seqtype = me->Last_OL_Type;
+ for (i = (counter - 1); i >= 0; i--) {
+ if (me->OL_Counter[i] > OL_VOID) {
+ seqnum = me->OL_Counter[i]++;
+ seqtype = me->OL_Type[i];
+ i = 0;
+ }
}
}
- }
- if (seqtype == 'A') {
- sprintf(number_string, LYUppercaseA_OL_String(seqnum));
- } else if (seqtype == 'a') {
- sprintf(number_string, LYLowercaseA_OL_String(seqnum));
- } else if (seqtype == 'I') {
- sprintf(number_string, LYUppercaseI_OL_String(seqnum));
- } else if (seqtype == 'i') {
- sprintf(number_string, LYLowercaseI_OL_String(seqnum));
- } else {
- sprintf(number_string, "%2d.", seqnum);
- }
- me->Last_OL_Count = seqnum;
- me->Last_OL_Type = seqtype;
- /*
- * Hack, because there is no append string!
- */
- for (i = 0; number_string[i] != '\0'; i++)
- if (number_string[i] == ' ')
- HTML_put_character(me, HT_NON_BREAK_SPACE);
- else
- HTML_put_character(me, number_string[i]);
+ if (seqtype == 'A') {
+ sprintf(number_string, LYUppercaseA_OL_String(seqnum));
+ } else if (seqtype == 'a') {
+ sprintf(number_string, LYLowercaseA_OL_String(seqnum));
+ } else if (seqtype == 'I') {
+ sprintf(number_string, LYUppercaseI_OL_String(seqnum));
+ } else if (seqtype == 'i') {
+ sprintf(number_string, LYLowercaseI_OL_String(seqnum));
+ } else {
+ sprintf(number_string, "%2d.", seqnum);
+ }
+ me->Last_OL_Count = seqnum;
+ me->Last_OL_Type = seqtype;
+ /*
+ * Hack, because there is no append string!
+ */
+ for (i = 0; number_string[i] != '\0'; i++)
+ if (number_string[i] == ' ')
+ HTML_put_character(me, HT_NON_BREAK_SPACE);
+ else
+ HTML_put_character(me, number_string[i]);
- /*
- * Use HTML_put_character so that any other spaces
- * coming through will be collapsed. We'll use
- * nbsp, so it won't break at the spacing character
- * if there are no spaces in the subsequent text up
- * to the right margin, but will declare it as a
- * normal space to ensure collapsing if a normal
- * space does immediately follow it. - FM
- */
- HTML_put_character(me, HT_NON_BREAK_SPACE);
- HText_setLastChar(me->text, ' ');
- } else if (me->sp[0].tag_number == HTML_UL) {
- /*
- * Hack, because there is no append string!
- */
- HTML_put_character(me, HT_NON_BREAK_SPACE);
- HTML_put_character(me, HT_NON_BREAK_SPACE);
- switch(me->List_Nesting_Level % 7) {
+ /*
+ * Use HTML_put_character so that any other spaces
+ * coming through will be collapsed. We'll use
+ * nbsp, so it won't break at the spacing character
+ * if there are no spaces in the subsequent text up
+ * to the right margin, but will declare it as a
+ * normal space to ensure collapsing if a normal
+ * space does immediately follow it. - FM
+ */
+ HTML_put_character(me, HT_NON_BREAK_SPACE);
+ HText_setLastChar(me->text, ' ');
+ } else if (surrounding_tag_number == HTML_UL) {
+ /*
+ * Hack, because there is no append string!
+ */
+ HTML_put_character(me, HT_NON_BREAK_SPACE);
+ HTML_put_character(me, HT_NON_BREAK_SPACE);
+ switch(me->List_Nesting_Level % 7) {
case 0:
HTML_put_character(me, '*');
break;
@@ -2638,26 +2909,28 @@ PRIVATE void HTML_start_element ARGS6(
HTML_put_character(me, '=');
break;
+ }
+ /*
+ * Keep using HTML_put_character so that any other
+ * spaces coming through will be collapsed. We use
+ * nbsp, so we won't wrap at the spacing character
+ * if there are no spaces in the subsequent text up
+ * to the right margin, but will declare it as a
+ * normal space to ensure collapsing if a normal
+ * space does immediately follow it. - FM
+ */
+ HTML_put_character(me, HT_NON_BREAK_SPACE);
+ HText_setLastChar(me->text, ' ');
+ } else {
+ /*
+ * Hack, because there is no append string!
+ */
+ HTML_put_character(me, HT_NON_BREAK_SPACE);
+ HTML_put_character(me, HT_NON_BREAK_SPACE);
+ HText_setLastChar(me->text, ' ');
}
- /*
- * Keep using HTML_put_character so that any other
- * spaces coming through will be collapsed. We use
- * nbsp, so we won't wrap at the spacing character
- * if there are no spaces in the subsequent text up
- * to the right margin, but will declare it as a
- * normal space to ensure collapsing if a normal
- * space does immediately follow it. - FM
- */
- HTML_put_character(me, HT_NON_BREAK_SPACE);
- HText_setLastChar(me->text, ' ');
- } else {
- /*
- * Hack, because there is no append string!
- */
- HTML_put_character(me, HT_NON_BREAK_SPACE);
- HTML_put_character(me, HT_NON_BREAK_SPACE);
- HText_setLastChar(me->text, ' ');
}
+ CAN_JUSTIFY_START;
me->in_word = NO;
me->inP = FALSE;
break;
@@ -2687,7 +2960,7 @@ PRIVATE void HTML_start_element ARGS6(
case HTML_FN:
change_paragraph_style(me, styles[ElementNumber]);
UPDATE_STYLE;
- if (me->sp->tag_number == ElementNumber)
+ if (me->sp->tag_number == (int) ElementNumber)
LYEnsureDoubleSpace(me);
CHECK_ID(HTML_FN_ID);
if (me->inUnderline == FALSE)
@@ -2696,12 +2969,32 @@ PRIVATE void HTML_start_element ARGS6(
if (me->inUnderline == FALSE)
HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);
HTML_put_character(me, ' ');
+ CAN_JUSTIFY_START
me->inLABEL = TRUE;
me->in_word = NO;
me->inP = FALSE;
break;
case HTML_A:
+ /*
+ * If we are looking for client-side image maps,
+ * then handle an A within a MAP that has a COORDS
+ * attribute as an AREA tag. Unfortunately we lose
+ * the anchor text this way for the LYNXIMGMAP, we
+ * would have to do much more parsing to collect it.
+ * After potentially handling the A as AREA, always return
+ * immediately if only looking for image maps, without
+ * pushing anything on the style stack. - kw
+ */
+ if (me->map_address && present && present[HTML_A_COORDS])
+ LYStartArea(me,
+ present[HTML_A_HREF] ? value[HTML_A_HREF] : NULL,
+ NULL,
+ present[HTML_A_TITLE] ? value[HTML_A_TITLE] : NULL,
+ tag_charset);
+ if (LYMapsOnly) {
+ return HT_OK;
+ }
/*
* A may have been declared SGML_EMPTY in HTMLDTD.c, and
* SGML_character() in SGML.c may check for an A end
@@ -2744,7 +3037,7 @@ PRIVATE void HTML_start_element ARGS6(
if (present[HTML_A_ISMAP])
intern_flag = FALSE;
else
- CHECK_FOR_INTERN(value[HTML_A_HREF]);
+ CHECK_FOR_INTERN(intern_flag,value[HTML_A_HREF]);
#endif
/*
* Prepare to do housekeeping on the reference. - FM
@@ -2805,14 +3098,15 @@ PRIVATE void HTML_start_element ARGS6(
StrAllocCopy(temp, value[HTML_A_TYPE]);
if (!intern_flag && href &&
!strcasecomp(value[HTML_A_TYPE], HTAtom_name(LINK_INTERNAL)) &&
- 0 != strcmp(me->node_anchor->address, LYlist_temp_url()) &&
+ !LYIsUIPage3(me->node_anchor->address, UIP_LIST_PAGE, 0) &&
+ !LYIsUIPage3(me->node_anchor->address, UIP_ADDRLIST_PAGE, 0) &&
0 != strncmp(me->node_anchor->address, "LYNXIMGMAP:", 11)) {
/* Some kind of spoof?
** Found TYPE="internal link" but not in a valid context
** where we have written it. - kw
*/
- CTRACE(tfp, "HTML: Found invalid HREF=\"%s\" TYPE=\"%s\"!\n",
- href, temp);
+ CTRACE((tfp, "HTML: Found invalid HREF=\"%s\" TYPE=\"%s\"!\n",
+ href, temp));
FREE(temp);
}
}
@@ -2852,8 +3146,6 @@ PRIVATE void HTML_start_element ARGS6(
dest_char_set = UCGetLYhndl_byMIME(temp);
if (dest_char_set < 0) {
dest_char_set = UCLYhndl_for_unrec;
- if (dest_char_set < 0) /* recover if not defined :-( */
- dest_char_set = UCLYhndl_for_unspec; /* always >= 0 */
}
}
if (title != NULL || dest_ismap == TRUE || dest_char_set >= 0) {
@@ -2865,7 +3157,9 @@ PRIVATE void HTML_start_element ARGS6(
HTAnchor_setTitle(dest, title);
if (dest && dest_ismap)
dest->isISMAPScript = TRUE;
- if (dest) {
+ /* Don't allow CHARSET attribute to change *this* document's
+ charset assumption. - kw */
+ if (dest && dest != me->node_anchor && dest_char_set >= 0) {
/*
** Load the anchor's chartrans structures.
** This should be done more intelligently
@@ -2888,7 +3182,7 @@ PRIVATE void HTML_start_element ARGS6(
me->inUnderline, me->CurrentA);
if (me->inBoldA == TRUE && me->inBoldH == FALSE)
HText_appendCharacter(me->text, LY_BOLD_START_CHAR);
-#ifdef NOTUSED_FOTEMODS
+#if defined(NOTUSED_FOTEMODS)
/*
* Close an HREF-less NAMED-ed now if we aren't making their
* content bold, and let the check in HTML_end_element() deal
@@ -2896,9 +3190,16 @@ PRIVATE void HTML_start_element ARGS6(
*/
if (href == NULL && me->inBoldA == FALSE) {
SET_SKIP_STACK(HTML_A);
- HTML_end_element(me, HTML_A, &include);
+ HTML_end_element(me, HTML_A, include);
}
-#endif /* NOTUSED_FOTEMODS */
+#else
+ /*Close an HREF-less NAMED-ed now if force_empty_hrefless_a was
+ requested - VH*/
+ if (href == NULL && force_empty_hrefless_a) {
+ SET_SKIP_STACK(HTML_A);
+ HTML_end_element(me, HTML_A, include);
+ }
+#endif
FREE(href);
break;
@@ -2915,13 +3216,13 @@ PRIVATE void HTML_start_element ARGS6(
)) != NULL) {
if (dest->isISMAPScript == TRUE) {
dest_ismap = TRUE;
- CTRACE(tfp, "HTML: '%s' is an ISMAP script\n",
- dest->address);
+ CTRACE((tfp, "HTML: '%s' is an ISMAP script\n",
+ dest->address));
} else if (present && present[HTML_IMG_ISMAP]) {
dest_ismap = TRUE;
dest->isISMAPScript = TRUE;
- CTRACE(tfp, "HTML: Designating '%s' as an ISMAP script\n",
- dest->address);
+ CTRACE((tfp, "HTML: Designating '%s' as an ISMAP script\n",
+ dest->address));
}
}
}
@@ -2935,7 +3236,7 @@ PRIVATE void HTML_start_element ARGS6(
if (present && present[HTML_IMG_USEMAP] &&
value[HTML_IMG_USEMAP] && *value[HTML_IMG_USEMAP]) {
StrAllocCopy(map_href, value[HTML_IMG_USEMAP]);
- CHECK_FOR_INTERN(map_href);
+ CHECK_FOR_INTERN(intern_flag,map_href);
url_type = LYLegitimizeHREF(me, &map_href, TRUE, TRUE);
/*
* If map_href ended up zero-length or otherwise doesn't
@@ -3109,10 +3410,10 @@ PRIVATE void HTML_start_element ARGS6(
FREE(temp);
}
- CTRACE(tfp, "HTML IMG: USEMAP=%d ISMAP=%d ANCHOR=%d PARA=%d\n",
+ CTRACE((tfp, "HTML IMG: USEMAP=%d ISMAP=%d ANCHOR=%d PARA=%d\n",
map_href ? 1 : 0,
(dest_ismap == TRUE) ? 1 : 0,
- me->inA, me->inP);
+ me->inA, me->inP));
/*
* Check for an ID attribute. - FM
@@ -3438,6 +3739,16 @@ PRIVATE void HTML_start_element ARGS6(
}
/*
+ * Generate a target anchor in this place in the containing
+ * document. MAP can now contain block markup, if it doesn't
+ * contain any AREAs (or A anchors with COORDS converted to AREAs)
+ * the current location can be used as a fallback for following
+ * a USEMAP link. - kw
+ */
+ if (!LYMapsOnly)
+ LYHandleID(me, id_string);
+
+ /*
* Load map_address. - FM
*/
if (id_string) {
@@ -3478,7 +3789,7 @@ PRIVATE void HTML_start_element ARGS6(
* Resolve the HREF. - FM
*/
StrAllocCopy(href, value[HTML_AREA_HREF]);
- CHECK_FOR_INTERN(href);
+ CHECK_FOR_INTERN(intern_flag,href);
url_type = LYLegitimizeHREF(me, &href, TRUE, TRUE);
/*
@@ -3582,70 +3893,19 @@ PRIVATE void HTML_start_element ARGS6(
break;
case HTML_FIG:
- me->inFIG = TRUE;
- if (me->inA) {
- SET_SKIP_STACK(HTML_A);
- HTML_end_element(me, HTML_A, include);
- }
- if (!present ||
- (present && !present[HTML_FIG_ISOBJECT])) {
- LYEnsureDoubleSpace(me);
- LYResetParagraphAlignment(me);
- me->inFIGwithP = TRUE;
- } else {
- me->inFIGwithP = FALSE;
- HTML_put_character(me, ' '); /* space char may be ignored */
- }
- CHECK_ID(HTML_FIG_ID);
- me->in_word = NO;
- me->inP = FALSE;
-
- if (clickable_images && present && present[HTML_FIG_SRC] &&
- value[HTML_FIG_SRC] && *value[HTML_FIG_SRC] != '\0') {
- StrAllocCopy(href, value[HTML_FIG_SRC]);
- CHECK_FOR_INTERN(href);
- url_type = LYLegitimizeHREF(me, &href, TRUE, TRUE);
- if (*href) {
- /*
- * Check whether a base tag is in effect. - FM
- */
- if ((me->inBASE && *href != '#') &&
- (temp = HTParse(href, me->base_href, PARSE_ALL)) &&
- *temp != '\0')
- /*
- * Use reference related to the base.
- */
- StrAllocCopy(href, temp);
- FREE(temp);
-
- /*
- * Check whether to fill in localhost. - FM
- */
- LYFillLocalFileURL(&href,
- ((*href != '#' &&
- me->inBASE) ?
- me->base_href : me->node_anchor->address));
-
- me->CurrentA = HTAnchor_findChildAndLink(
- me->node_anchor, /* Parent */
- NULL, /* Tag */
- href, /* Addresss */
- INTERN_LT); /* Type */
- HText_beginAnchor(me->text, me->inUnderline, me->CurrentA);
- if (me->inBoldH == FALSE)
- HText_appendCharacter(me->text, LY_BOLD_START_CHAR);
- HTML_put_string(me, (present[HTML_FIG_ISOBJECT] ?
- (present[HTML_FIG_IMAGEMAP] ?
- "(IMAGE)" : "(OBJECT)") : "[FIGURE]"));
- if (me->inBoldH == FALSE)
- HText_appendCharacter(me->text, LY_BOLD_END_CHAR);
- HText_endAnchor(me->text, 0);
- HTML_put_character(me, '-');
- HTML_put_character(me, ' '); /* space char may be ignored */
- me->in_word = NO;
- }
- FREE(href);
- }
+ if (present)
+ LYHandleFIG(me, present, value,
+ present[HTML_FIG_ISOBJECT],
+ present[HTML_FIG_IMAGEMAP],
+ present[HTML_FIG_ID] ? value[HTML_FIG_ID] : NULL,
+ present[HTML_FIG_SRC] ? value[HTML_FIG_SRC] : NULL,
+ YES, TRUE, &intern_flag);
+ else
+ LYHandleFIG(me, NULL, NULL,
+ 0,
+ 0,
+ NULL,
+ NULL, YES, TRUE, &intern_flag);
break;
case HTML_OBJECT:
@@ -3752,9 +4012,81 @@ PRIVATE void HTML_start_element ARGS6(
}
}
/*
- * Set flag that we are accumulating OBJECT content. - FM
+ * If we can determine now that we are not going to do anything
+ * special to the OBJECT element's SGML contents, like skipping
+ * it completely or collecting it up in order to add something
+ * after it, then generate any output that should be emitted in the
+ * place of the OBJECT start tag NOW, then don't initialize special
+ * handling but return, letting our SGML parser know that further
+ * content is to be parsed normally not literally. We could defer
+ * this until we have collected the contents and then recycle the
+ * contents (as was previously always done), but that has a higher
+ * chance of completely losing content in case of nesting errors
+ * in the input, incomplete transmissions, etc. - kw
*/
- me->object_started = TRUE;
+ if ((!present ||
+ (me->object_declare == FALSE && me->object_name == NULL &&
+ me->object_shapes == FALSE && me->object_usemap == NULL))) {
+ if (!LYMapsOnly) {
+ if (!clickable_images || me->object_data == NULL ||
+ !(me->object_data != NULL &&
+ me->object_classid == NULL &&
+ me->object_codebase == NULL &&
+ me->object_codetype == NULL))
+ FREE(me->object_data);
+ if (me->object_data) {
+ HTStartAnchor5(me,
+ me->object_id ? value[HTML_OBJECT_ID]
+ : NULL,
+ value[HTML_OBJECT_DATA],
+ value[HTML_OBJECT_TYPE],
+ tag_charset);
+ if ((me->object_type != NULL) &&
+ !strncasecomp(me->object_type, "image/", 6))
+ HTML_put_string(me, "(IMAGE)");
+ else
+ HTML_put_string(me, "(OBJECT)");
+ HTML_end_element(me,HTML_A,NULL);
+ } else if (me->object_id)
+ LYHandleID(me, me->object_id);
+ }
+ clear_objectdata(me);
+ /*
+ * We do NOT want the HTML_put_* functions that are going
+ * to be called for the OBJECT's character content to
+ * add to the chunk, so we don't push on the stack.
+ * Instead we keep a counter for open OBJECT tags that
+ * are treated this way, so HTML_end_element can skip
+ * handling the corresponding end tag that is going to
+ * arrive unexpectedly as far as our stack is concerned.
+ */
+ status = HT_PARSER_OTHER_CONTENT;
+ if (me->sp[0].tag_number == HTML_FIG &&
+ me->objects_figged_open > 0) {
+ ElementNumber = HTML_OBJECT_M;
+ } else {
+ me->objects_mixed_open++;
+ SET_SKIP_STACK(HTML_OBJECT);
+ }
+ } else if (me->object_declare == FALSE && me->object_name == NULL &&
+ me->object_shapes == TRUE) {
+ LYHandleFIG(me, present, value,
+ 1,
+ 1 || me->object_ismap,
+ me->object_id,
+ (me->object_data && !me->object_classid) ? value[HTML_OBJECT_DATA] : NULL,
+ NO, TRUE, &intern_flag);
+ clear_objectdata(me);
+ status = HT_PARSER_OTHER_CONTENT;
+ me->objects_figged_open++;
+ ElementNumber = HTML_FIG;
+
+ } else {
+ /*
+ * Set flag that we are accumulating OBJECT content. - FM
+ */
+ me->object_started = TRUE;
+ }
}
break;
@@ -3763,7 +4095,7 @@ PRIVATE void HTML_start_element ARGS6(
present && present[HTML_OVERLAY_SRC] &&
value[HTML_OVERLAY_SRC] && *value[HTML_OVERLAY_SRC] != '\0') {
StrAllocCopy(href, value[HTML_OVERLAY_SRC]);
- CHECK_FOR_INTERN(href);
+ CHECK_FOR_INTERN(intern_flag,href);
url_type = LYLegitimizeHREF(me, &href, TRUE, TRUE);
if (*href) {
/*
@@ -3968,7 +4300,7 @@ PRIVATE void HTML_start_element ARGS6(
if (clickable_images && present && present[HTML_BGSOUND_SRC] &&
value[HTML_BGSOUND_SRC] && *value[HTML_BGSOUND_SRC] != '\0') {
StrAllocCopy(href, value[HTML_BGSOUND_SRC]);
- CHECK_FOR_INTERN(href);
+ CHECK_FOR_INTERN(intern_flag,href);
url_type = LYLegitimizeHREF(me, &href, TRUE, TRUE);
if (*href == '\0') {
FREE(href);
@@ -4082,7 +4414,7 @@ PRIVATE void HTML_start_element ARGS6(
if (clickable_images && present && present[HTML_EMBED_SRC] &&
value[HTML_EMBED_SRC] && *value[HTML_EMBED_SRC] != '\0') {
StrAllocCopy(href, value[HTML_EMBED_SRC]);
- CHECK_FOR_INTERN(href);
+ CHECK_FOR_INTERN(intern_flag,href);
url_type = LYLegitimizeHREF(me, &href, TRUE, TRUE);
if (*href != '\0') {
/*
@@ -4157,6 +4489,7 @@ PRIVATE void HTML_start_element ARGS6(
if (me->inUnderline == FALSE)
HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);
HTML_put_character(me, ' ');
+ CAN_JUSTIFY_START;
if (me->inFIG)
/*
@@ -4188,6 +4521,7 @@ PRIVATE void HTML_start_element ARGS6(
if (me->inUnderline == FALSE)
HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);
HTML_put_character(me, ' ');
+ CAN_JUSTIFY_START;
if (me->inFIG)
/*
@@ -4227,7 +4561,7 @@ PRIVATE void HTML_start_element ARGS6(
* that one now. - FM
*/
if (me->inFORM) {
- CTRACE(tfp, "HTML: Missing FORM end tag. Faking it!\n");
+ CTRACE((tfp, "HTML: Missing FORM end tag. Faking it!\n"));
SET_SKIP_STACK(HTML_FORM);
HTML_end_element(me, HTML_FORM, include);
}
@@ -4236,6 +4570,7 @@ PRIVATE void HTML_start_element ARGS6(
* Set to know we are in a new form.
*/
me->inFORM = TRUE;
+ EMIT_IFDEF_EXP_JUSTIFY_ELTS(form_in_htext = TRUE);
if (present && present[HTML_FORM_ACCEPT_CHARSET]) {
accept_cs = value[HTML_FORM_ACCEPT_CHARSET] ?
@@ -4401,13 +4736,9 @@ PRIVATE void HTML_start_element ARGS6(
* Make sure we're in a form.
*/
if (!me->inFORM) {
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: BUTTON tag not within FORM tag\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp,
+ "Bad HTML: BUTTON tag not within FORM tag\n"));
/*
* We'll process it, since the chances of a crash are
* small, and we probably do have a form started. - FM
@@ -4532,10 +4863,10 @@ PRIVATE void HTML_start_element ARGS6(
*/
for (i = 0; I.value[i]; i++) {
HTML_put_character(me,
- (I.value[i] == ' ' ?
- HT_NON_BREAK_SPACE : I.value[i]));
+ (char)(I.value[i] == ' ' ?
+ HT_NON_BREAK_SPACE : I.value[i]));
}
- while (i < chars) {
+ while (i++ < chars) {
HTML_put_character(me, HT_NON_BREAK_SPACE);
}
}
@@ -4558,7 +4889,8 @@ PRIVATE void HTML_start_element ARGS6(
BOOL HaveSRClink = FALSE;
char* ImageSrc = NULL;
BOOL IsSubmitOrReset = FALSE;
-
+ HTkcode kcode = 0;
+ HTkcode specified_kcode = 0;
/* init */
I.align=NULL; I.accept=NULL; I.checked=NO; I.class=NULL;
I.disabled=NO; I.error=NULL; I.height= NULL; I.id=NULL;
@@ -4609,12 +4941,13 @@ PRIVATE void HTML_start_element ARGS6(
if (me->inFORM)
HText_DisableCurrentForm();
#endif /* NOTDEFINED */
- CTRACE(tfp, "HTML: Ignoring TYPE=\"range\"\n");
+ CTRACE((tfp, "HTML: Ignoring TYPE=\"range\"\n"));
break;
} else if (!strcasecomp(I.type, "file")) {
if (present[HTML_INPUT_ACCEPT])
I.accept = value[HTML_INPUT_ACCEPT];
+#ifdef EXP_FILE_UPLOAD
/*
* Not yet implemented.
*/
@@ -4627,12 +4960,14 @@ PRIVATE void HTML_start_element ARGS6(
HText_appendCharacter(me->text,
LY_UNDERLINE_END_CHAR);
}
+#else
+ CTRACE((tfp, "Attempting to fake as: %s\n", I.type));
+#endif /* EXP_FILE_UPLOAD */
#ifdef NOTDEFINED
if (me->inFORM)
HText_DisableCurrentForm();
#endif /* NOTDEFINED */
- CTRACE(tfp, "HTML: Ignoring TYPE=\"file\"\n");
- break;
+ CTRACE((tfp, "HTML: Ignoring TYPE=\"file\"\n"));
} else if (!strcasecomp(I.type, "button")) {
/*
@@ -4647,13 +4982,9 @@ PRIVATE void HTML_start_element ARGS6(
* Check if we're in a form. - FM
*/
if (!me->inFORM) {
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: INPUT tag not within FORM tag\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp,
+ "Bad HTML: INPUT tag not within FORM tag\n"));
/*
* We'll process it, since the chances of a crash are
* small, and we probably do have a form started. - FM
@@ -4662,24 +4993,21 @@ PRIVATE void HTML_start_element ARGS6(
*/
}
+ CTRACE((tfp, "Ok, we're trying type=[%s]\n", NONNULL(I.type)));
+
/*
* Check for an unclosed TEXTAREA.
*/
if (me->inTEXTAREA) {
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: Missing TEXTAREA end tag.\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: Missing TEXTAREA end tag.\n"));
}
/*
* Check for an unclosed SELECT, try to close it if found.
*/
if (me->inSELECT) {
- CTRACE(tfp, "HTML: Missing SELECT end tag, faking it...\n");
+ CTRACE((tfp, "HTML: Missing SELECT end tag, faking it...\n"));
if (me->sp->tag_number != HTML_SELECT) {
SET_SKIP_STACK(HTML_SELECT);
}
@@ -4774,9 +5102,15 @@ PRIVATE void HTML_start_element ARGS6(
}
FREE(href);
}
+ CTRACE((tfp, "2.Ok, we're trying type=[%s] (present=%p)\n", NONNULL(I.type), present));
+ /* text+file don't go in here */
if ((UseALTasVALUE == TRUE) ||
(present && present[HTML_INPUT_VALUE] &&
- value[HTML_INPUT_VALUE] && *value[HTML_INPUT_VALUE])) {
+ value[HTML_INPUT_VALUE] &&
+ (*value[HTML_INPUT_VALUE] ||
+ (I.type && (!strcasecomp(I.type, "checkbox") ||
+ !strcasecomp(I.type, "radio")))))) {
+
/*
* Convert any HTML entities or decimal escaping. - FM
*/
@@ -4793,13 +5127,20 @@ PRIVATE void HTML_start_element ARGS6(
HTMLSetCharacterHandling(current_char_set);
}
+ CTRACE((tfp, "3.Ok, we're trying type=[%s]\n", NONNULL(I.type)));
if (!I.type)
me->UsePlainSpace = TRUE;
else if (!strcasecomp(I.type, "text") ||
+#ifdef EXP_FILE_UPLOAD
+ !strcasecomp(I.type, "file") ||
+#endif
!strcasecomp(I.type, "submit") ||
!strcasecomp(I.type, "image") ||
- !strcasecomp(I.type, "reset"))
+ !strcasecomp(I.type, "reset")) {
+ CTRACE((tfp, "normal field type: %s\n", NONNULL(I.type)));
me->UsePlainSpace = TRUE;
+ }
+
StrAllocCopy(I_value,
((UseALTasVALUE == TRUE) ?
value[HTML_INPUT_ALT] :
@@ -4807,12 +5148,14 @@ PRIVATE void HTML_start_element ARGS6(
if (me->UsePlainSpace && !me->HiddenValue) {
I.value_cs = current_char_set;
}
+ CTRACE((tfp, "4.Ok, we're trying type=[%s]\n", NONNULL(I.type)));
TRANSLATE_AND_UNESCAPE_ENTITIES6(
&I_value,
ATTR_CS_IN,
I.value_cs,
- (me->UsePlainSpace && !me->HiddenValue),
- me->UsePlainSpace, me->HiddenValue);
+ (BOOL)(me->UsePlainSpace && !me->HiddenValue),
+ me->UsePlainSpace,
+ me->HiddenValue);
I.value = I_value;
if (me->UsePlainSpace == TRUE) {
/*
@@ -4895,6 +5238,9 @@ PRIVATE void HTML_start_element ARGS6(
I.md = value[HTML_INPUT_MD];
chars = HText_beginInput(me->text, me->inUnderline, &I);
+#ifndef EXP_FILE_UPLOAD
+ CTRACE((tfp, "I.%s have %d chars, or something\n", NONNULL(I.type), chars));
+#endif
/*
* Submit and reset buttons have values which don't change,
* so HText_beginInput() sets I.value to the string which
@@ -4958,7 +5304,7 @@ PRIVATE void HTML_start_element ARGS6(
* ignore them. Note that if we somehow get tripped
* up and a wrap still does occur before all 6 of the
* underscores are output, the wrapped ones won't be
- * treated as part of the editing window, nor be
+ * treated as part of the editing window, nor be
* highlighted when not editing (Yuk!). - FM
*/
for (i = 0; i < 6; i++) {
@@ -4967,6 +5313,9 @@ PRIVATE void HTML_start_element ARGS6(
}
HText_setIgnoreExcess(me->text, TRUE);
}
+#ifndef EXP_FILE_UPLOAD
+ CTRACE((tfp, "I.%s, %d\n", NONNULL(I.type), IsSubmitOrReset));
+#endif
if (IsSubmitOrReset == FALSE) {
/*
* This is not a submit or reset button,
@@ -4976,6 +5325,12 @@ PRIVATE void HTML_start_element ARGS6(
for (; chars > 0; chars--)
HTML_put_character(me, '_');
} else {
+ if (HTCJK == JAPANESE) {
+ kcode = HText_getKcode(me->text);
+ HText_updateKcode(me->text, kanji_code);
+ specified_kcode = HText_getSpecifiedKcode(me->text);
+ HText_updateSpecifiedKcode(me->text, kanji_code);
+ }
if (me->sp[0].tag_number == HTML_PRE ||
!me->sp->style->freeFormat) {
/*
@@ -5010,11 +5365,16 @@ PRIVATE void HTML_start_element ARGS6(
*/
for (i = 0; I.value[i]; i++)
HTML_put_character(me,
- (I.value[i] == ' ' ?
- HT_NON_BREAK_SPACE : I.value[i]));
- while (i < chars)
+ (char)(I.value[i] == ' '
+ ? HT_NON_BREAK_SPACE
+ : I.value[i]));
+ while (i++ < chars)
HTML_put_character(me, HT_NON_BREAK_SPACE);
}
+ if (HTCJK == JAPANESE) {
+ HText_updateKcode(me->text, kcode);
+ HText_updateSpecifiedKcode(me->text, specified_kcode);
+ }
}
HText_setIgnoreExcess(me->text, FALSE);
FREE(ImageSrc);
@@ -5028,13 +5388,8 @@ PRIVATE void HTML_start_element ARGS6(
* Make sure we're in a form.
*/
if (!me->inFORM) {
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: TEXTAREA start tag not within FORM tag\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: TEXTAREA start tag not within FORM tag\n"));
/*
* Too likely to cause a crash, so we'll ignore it. - FM
*/
@@ -5074,14 +5429,24 @@ PRIVATE void HTML_start_element ARGS6(
if (present && present[HTML_TEXTAREA_COLS] &&
value[HTML_TEXTAREA_COLS] &&
- isdigit((unsigned char)*value[HTML_TEXTAREA_COLS]))
+ isdigit(UCH(*value[HTML_TEXTAREA_COLS])))
StrAllocCopy(me->textarea_cols, value[HTML_TEXTAREA_COLS]);
- else
- StrAllocCopy(me->textarea_cols, "60");
+ else {
+ int width;
+ width = LYcols - 1 -
+ me->new_style->leftIndent - me->new_style->rightIndent;
+ if (dump_output_immediately) /* don't waste too much for this */
+ width = HTMIN(width, 60);
+ if (width > 1 && (width-1)*6 < MAX_LINE - 3 -
+ me->new_style->leftIndent - me->new_style->rightIndent)
+ HTSprintf0(&me->textarea_cols, "%d", width);
+ else
+ StrAllocCopy(me->textarea_cols, "60");
+ }
if (present && present[HTML_TEXTAREA_ROWS] &&
value[HTML_TEXTAREA_ROWS] &&
- isdigit((unsigned char)*value[HTML_TEXTAREA_ROWS]))
+ isdigit(UCH(*value[HTML_TEXTAREA_ROWS])))
me->textarea_rows = atoi(value[HTML_TEXTAREA_ROWS]);
else
me->textarea_rows = 4;
@@ -5118,13 +5483,8 @@ PRIVATE void HTML_start_element ARGS6(
* Check for an already open SELECT block. - FM
*/
if (me->inSELECT) {
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: SELECT start tag in SELECT element. Faking SELECT end tag. *****\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: SELECT start tag in SELECT element. Faking SELECT end tag. *****\n"));
if (me->sp->tag_number != HTML_SELECT) {
SET_SKIP_STACK(HTML_SELECT);
}
@@ -5151,13 +5511,8 @@ PRIVATE void HTML_start_element ARGS6(
* Make sure we're in a select tag.
*/
if (!me->inSELECT) {
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: OPTION tag not within SELECT tag\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: OPTION tag not within SELECT tag\n"));
/*
* Too likely to cause a crash, so we'll ignore it. - FM
@@ -5327,7 +5682,7 @@ PRIVATE void HTML_start_element ARGS6(
*/
if (HTCurSelectGroupType == F_RADIO_TYPE &&
LYSelectPopups &&
- keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED) {
+ keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED) {
char marker[8];
int opnum = HText_getOptionNum(me->text);
@@ -5345,11 +5700,25 @@ PRIVATE void HTML_start_element ARGS6(
case HTML_TABLE:
/*
- * Not implemented. Just treat as a division
+ * Not fully implemented. Just treat as a division
* with respect to any ALIGN attribute, with
* a default of HT_LEFT, or leave as a PRE
* block if we are presently in one. - FM
+ *
+ * Also notify simple table tracking code unless
+ * in a preformatted section, or (currently) non-left
+ * alignment.
+ *
+ * If page author is using a TABLE within PRE, it's probably
+ * formatted specifically to work well for Lynx without simple
+ * table tracking code. Cancel tracking, it would only make
+ * things worse. - kw
*/
+#ifdef EXP_NESTED_TABLES
+ if (!nested_tables)
+#endif
+ HText_cancelStbl(me->text);
+
if (me->inA) {
SET_SKIP_STACK(HTML_A);
HTML_end_element(me, HTML_A, include);
@@ -5367,42 +5736,67 @@ PRIVATE void HTML_start_element ARGS6(
if (me->Division_Level < (MAX_NESTING - 1)) {
me->Division_Level++;
} else {
- CTRACE(tfp,
+ CTRACE((tfp,
"HTML: ****** Maximum nesting of %d divisions/tables exceeded!\n",
- MAX_NESTING);
+ MAX_NESTING));
}
if (present && present[HTML_TABLE_ALIGN] &&
value[HTML_TABLE_ALIGN] && *value[HTML_TABLE_ALIGN]) {
if (!strcasecomp(value[HTML_TABLE_ALIGN], "center")) {
+#ifdef SH_EX /* 1998/10/09 (Fri) 15:20:09 */
+ if (no_table_center) {
+ me->DivisionAlignments[me->Division_Level] = HT_LEFT;
+ change_paragraph_style(me, styles[HTML_DLEFT]);
+ UPDATE_STYLE;
+ me->current_default_alignment =
+ styles[HTML_DLEFT]->alignment;
+ } else {
+ me->DivisionAlignments[me->Division_Level] = HT_CENTER;
+ change_paragraph_style(me, styles[HTML_DCENTER]);
+ UPDATE_STYLE;
+ me->current_default_alignment =
+ styles[HTML_DCENTER]->alignment;
+ }
+#else
me->DivisionAlignments[me->Division_Level] = HT_CENTER;
change_paragraph_style(me, styles[HTML_DCENTER]);
UPDATE_STYLE;
me->current_default_alignment = styles[HTML_DCENTER]->alignment;
+#endif
+ stbl_align = HT_CENTER;
+
} else if (!strcasecomp(value[HTML_TABLE_ALIGN], "right")) {
me->DivisionAlignments[me->Division_Level] = HT_RIGHT;
change_paragraph_style(me, styles[HTML_DRIGHT]);
UPDATE_STYLE;
me->current_default_alignment = styles[HTML_DRIGHT]->alignment;
+ stbl_align = HT_RIGHT;
} else {
me->DivisionAlignments[me->Division_Level] = HT_LEFT;
change_paragraph_style(me, styles[HTML_DLEFT]);
UPDATE_STYLE;
me->current_default_alignment = styles[HTML_DLEFT]->alignment;
+ if (!strcasecomp(value[HTML_TABLE_ALIGN], "left") ||
+ !strcasecomp(value[HTML_TABLE_ALIGN], "justify"))
+ stbl_align = HT_LEFT;
}
} else {
me->DivisionAlignments[me->Division_Level] = HT_LEFT;
change_paragraph_style(me, styles[HTML_DLEFT]);
UPDATE_STYLE;
me->current_default_alignment = styles[HTML_DLEFT]->alignment;
+ /* stbl_align remains HT_ALIGN_NONE */
}
CHECK_ID(HTML_TABLE_ID);
+ HText_startStblTABLE(me->text, stbl_align);
break;
case HTML_TR:
/*
- * Not yet implemented. Just start a new row,
+ * Not fully implemented. Just start a new row,
* if needed, act on an ALIGN attribute if present,
* and check for an ID link. - FM
+ * Also notify simple table tracking code. - kw
*/
if (me->inA) {
SET_SKIP_STACK(HTML_A);
@@ -5422,6 +5816,7 @@ PRIVATE void HTML_start_element ARGS6(
if (!strcmp(me->sp->style->name, "Preformatted")) {
CHECK_ID(HTML_TR_ID);
me->inP = FALSE;
+/* HText_cancelStbl(me->text); seems unnecessary here - kw */
break;
}
if (LYoverride_default_alignment(me)) {
@@ -5432,29 +5827,42 @@ PRIVATE void HTML_start_element ARGS6(
!strcmp(me->sp->style->name, "Preformatted")))) {
me->sp->style->alignment = HT_LEFT;
} else {
- me->sp->style->alignment = me->current_default_alignment;
+ me->sp->style->alignment = (short) me->current_default_alignment;
}
if (present && present[HTML_TR_ALIGN] && value[HTML_TR_ALIGN]) {
if (!strcasecomp(value[HTML_TR_ALIGN], "center") &&
- !(me->List_Nesting_Level >= 0 && !me->inP))
+ !(me->List_Nesting_Level >= 0 && !me->inP)) {
+#ifdef SH_EX
+ if (no_table_center)
+ me->sp->style->alignment = HT_LEFT;
+ else
+ me->sp->style->alignment = HT_CENTER;
+#else
me->sp->style->alignment = HT_CENTER;
- else if (!strcasecomp(value[HTML_TR_ALIGN], "right") &&
- !(me->List_Nesting_Level >= 0 && !me->inP))
+#endif
+ stbl_align = HT_CENTER;
+ } else if (!strcasecomp(value[HTML_TR_ALIGN], "right") &&
+ !(me->List_Nesting_Level >= 0 && !me->inP)) {
me->sp->style->alignment = HT_RIGHT;
- else if (!strcasecomp(value[HTML_TR_ALIGN], "left") ||
- !strcasecomp(value[HTML_TR_ALIGN], "justify"))
+ stbl_align = HT_RIGHT;
+ } else if (!strcasecomp(value[HTML_TR_ALIGN], "left") ||
+ !strcasecomp(value[HTML_TR_ALIGN], "justify")) {
me->sp->style->alignment = HT_LEFT;
+ stbl_align = HT_LEFT;
+ }
}
CHECK_ID(HTML_TR_ID);
me->inP = FALSE;
+ HText_startStblTR(me->text, stbl_align);
break;
case HTML_THEAD:
case HTML_TFOOT:
case HTML_TBODY:
+ HText_endStblTR(me->text);
/*
- * Not yet implemented. Just check for an ID link. - FM
+ * Not fully implemented. Just check for an ID link. - FM
*/
if (me->inA) {
SET_SKIP_STACK(HTML_A);
@@ -5465,13 +5873,26 @@ PRIVATE void HTML_start_element ARGS6(
HTML_end_element(me, HTML_U, include);
}
UPDATE_STYLE;
+ if (me->inTABLE) {
+ if (present && present[HTML_TR_ALIGN] && value[HTML_TR_ALIGN]) {
+ if (!strcasecomp(value[HTML_TR_ALIGN], "center")) {
+ stbl_align = HT_CENTER;
+ } else if (!strcasecomp(value[HTML_TR_ALIGN], "right")) {
+ stbl_align = HT_RIGHT;
+ } else if (!strcasecomp(value[HTML_TR_ALIGN], "left") ||
+ !strcasecomp(value[HTML_TR_ALIGN], "justify")) {
+ stbl_align = HT_LEFT;
+ }
+ }
+ HText_startStblRowGroup(me->text, stbl_align);
+ }
CHECK_ID(HTML_TR_ID);
break;
case HTML_COL:
case HTML_COLGROUP:
/*
- * Not yet implemented. Just check for an ID link. - FM
+ * Not fully implemented. Just check for an ID link. - FM
*/
if (me->inA) {
SET_SKIP_STACK(HTML_A);
@@ -5482,27 +5903,29 @@ PRIVATE void HTML_start_element ARGS6(
HTML_end_element(me, HTML_U, include);
}
UPDATE_STYLE;
+ if (me->inTABLE) {
+ int span = 1;
+ if (present && present[HTML_COL_SPAN] &&
+ value[HTML_COL_SPAN] &&
+ isdigit(UCH(*value[HTML_COL_SPAN])))
+ span = atoi(value[HTML_COL_SPAN]);
+ if (present && present[HTML_COL_ALIGN] && value[HTML_COL_ALIGN]) {
+ if (!strcasecomp(value[HTML_COL_ALIGN], "center")) {
+ stbl_align = HT_CENTER;
+ } else if (!strcasecomp(value[HTML_COL_ALIGN], "right")) {
+ stbl_align = HT_RIGHT;
+ } else if (!strcasecomp(value[HTML_COL_ALIGN], "left") ||
+ !strcasecomp(value[HTML_COL_ALIGN], "justify")) {
+ stbl_align = HT_LEFT;
+ }
+ }
+ HText_startStblCOL(me->text, span, stbl_align,
+ (BOOL)(ElementNumber == HTML_COLGROUP));
+ }
CHECK_ID(HTML_COL_ID);
break;
case HTML_TH:
- if (me->inA) {
- SET_SKIP_STACK(HTML_A);
- HTML_end_element(me, HTML_A, include);
- }
- if (me->Underline_Level > 0) {
- SET_SKIP_STACK(HTML_U);
- HTML_end_element(me, HTML_U, include);
- }
- UPDATE_STYLE;
- CHECK_ID(HTML_TD_ID);
- /*
- * Not yet implemented. Just add a collapsible space and break. - FM
- */
- HTML_put_character(me, ' ');
- me->in_word = NO;
- break;
-
case HTML_TD:
if (me->inA) {
SET_SKIP_STACK(HTML_A);
@@ -5515,9 +5938,33 @@ PRIVATE void HTML_start_element ARGS6(
UPDATE_STYLE;
CHECK_ID(HTML_TD_ID);
/*
- * Not yet implemented. Just add a collapsible space and break. - FM
+ * Not fully implemented. Just add a collapsible space and break. - FM
+ * Also notify simple table tracking code. - kw
*/
HTML_put_character(me, ' ');
+ {
+ int colspan = 1, rowspan = 1;
+ if (present && present[HTML_TD_COLSPAN] &&
+ value[HTML_TD_COLSPAN] &&
+ isdigit(UCH(*value[HTML_TD_COLSPAN])))
+ colspan = atoi(value[HTML_TD_COLSPAN]);
+ if (present && present[HTML_TD_ROWSPAN] &&
+ value[HTML_TD_ROWSPAN] &&
+ isdigit(UCH(*value[HTML_TD_ROWSPAN])))
+ rowspan = atoi(value[HTML_TD_ROWSPAN]);
+ if (present && present[HTML_TD_ALIGN] && value[HTML_TD_ALIGN]) {
+ if (!strcasecomp(value[HTML_TD_ALIGN], "center")) {
+ stbl_align = HT_CENTER;
+ } else if (!strcasecomp(value[HTML_TD_ALIGN], "right")) {
+ stbl_align = HT_RIGHT;
+ } else if (!strcasecomp(value[HTML_TD_ALIGN], "left") ||
+ !strcasecomp(value[HTML_TD_ALIGN], "justify")) {
+ stbl_align = HT_LEFT;
+ }
+ }
+ HText_startStblTD(me->text, colspan, rowspan, stbl_align,
+ (BOOL)(ElementNumber == HTML_TH));
+ }
me->in_word = NO;
break;
@@ -5535,49 +5982,55 @@ PRIVATE void HTML_start_element ARGS6(
} /* end switch */
- if (HTML_dtd.tags[ElementNumber].contents != SGML_EMPTY) {
+ if (ElementNumber >= HTML_ELEMENTS ||
+ HTML_dtd.tags[ElementNumber].contents != SGML_EMPTY) {
if (me->skip_stack > 0) {
- CTRACE(tfp, "HTML:begin_element: internal call (level %d), leaving on stack - %s\n",
- me->skip_stack, me->sp->style->name);
+ CTRACE((tfp,
+ "HTML:begin_element: internal call (level %d), leaving on stack - `%s'\n",
+ me->skip_stack, NONNULL(me->sp->style->name)));
me->skip_stack--;
- return;
+ return status;
}
if (me->sp == me->stack) {
if (me->stack_overrun == FALSE) {
- if (TRACE) {
- fprintf(tfp,
+ HTAlert(HTML_STACK_OVERRUN);
+ CTRACE((tfp,
"HTML: ****** Maximum nesting of %d tags exceeded!\n",
- MAX_NESTING);
-
- } else {
- HTAlert(HTML_STACK_OVERRUN);
- }
+ MAX_NESTING));
me->stack_overrun = TRUE;
}
- return;
+ return HT_ERROR;
}
- CTRACE(tfp,"HTML:begin_element[%d]: adding style to stack - %s\n",
- (int) STACKLEVEL(me),
- me->new_style->name);
+ CTRACE((tfp, "HTML:begin_element[%d]: adding style to stack - %s (%s)\n",
+ (int) STACKLEVEL(me),
+ NONNULL(me->new_style->name),
+ HTML_dtd.tags[ElementNumber].name));
(me->sp)--;
me->sp[0].style = me->new_style; /* Stack new style */
me->sp[0].tag_number = ElementNumber;
+#ifdef EXP_JUSTIFY_ELTS
+ if (wait_for_this_stacked_elt < 0 &&
+ HTML_dtd.tags[ElementNumber].can_justify == FALSE)
+ wait_for_this_stacked_elt = me->stack - me->sp + MAX_NESTING;
+#endif
}
+#ifdef EXP_JUSTIFY_ELTS
+ if (in_DT && ElementNumber == HTML_DD)
+ in_DT = FALSE;
+ else if (ElementNumber == HTML_DT)
+ in_DT = TRUE;
+#endif
+
#if defined(USE_COLOR_STYLE)
/* end really empty tags straight away */
-#define REALLY_EMPTY(e) ((HTML_dtd.tags[e].contents == SGML_EMPTY) && \
- !(HTML_dtd.tags[e].flags & Tgf_nreie))
- if (REALLY_EMPTY(element_number))
+ if (ReallyEmptyTagNum(element_number))
{
- CTRACE(tfp, "STYLE:begin_element:ending EMPTY element style\n");
-#if !defined(USE_HASH)
- HText_characterStyle(me->text, element_number+STARTAT, STACK_OFF);
-#else
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.begin_element:ending \"EMPTY\" element style\n"));
HText_characterStyle(me->text, HCODE_TO_STACK_OFF(hcode), STACK_OFF);
-#endif /* USE_HASH */
#if !OPT_SCN
TrimColorClass(HTML_dtd.tags[element_number].name,
@@ -5592,6 +6045,7 @@ PRIVATE void HTML_start_element ARGS6(
#endif
}
#endif /* USE_COLOR_STYLE */
+ return status;
}
/* End Element
@@ -5608,16 +6062,20 @@ PRIVATE void HTML_start_element ARGS6(
** (internal code errors apart) good nesting. The parser checks
** incoming code errors, not this module.
*/
-PRIVATE void HTML_end_element ARGS3(
+PRIVATE int HTML_end_element ARGS3(
HTStructured *, me,
int, element_number,
char **, include)
{
int i = 0;
+ int status = HT_OK;
char *temp = NULL, *cp = NULL;
BOOL BreakFlag = FALSE;
+ BOOL intern_flag = FALSE;
+ BOOL skip_stack_requested = FALSE;
+ EMIT_IFDEF_EXP_JUSTIFY_ELTS(BOOL reached_awaited_stacked_elt = FALSE);
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if (psrc_view && !sgml_in_psrc_was_initialized) {
if (!psrc_nested_call) {
HTTag * tag = &HTML_dtd.tags[element_number];
@@ -5630,37 +6088,42 @@ PRIVATE void HTML_end_element ARGS3(
if (tagname_transform!=0)
PUTS(tag->name);
else {
- strcpy(buf,tag->name);
+ LYstrncpy(buf, tag->name, sizeof(buf)-1);
LYLowerCase(buf);
PUTS(buf);
}
PSRCSTOP(tag);
PSRCSTART(abracket); PUTC('>'); PSRCSTOP(abracket);
psrc_nested_call=FALSE;
- return;
+ return HT_OK;
}
/*fall through*/
}
#endif
-#ifdef CAREFUL /* parser assumed to produce good nesting */
- if (element_number != me->sp[0].tag_number &&
+ if ((me->sp >= (me->stack + MAX_NESTING - 1) ||
+ element_number != me->sp[0].tag_number) &&
HTML_dtd.tags[element_number].contents != SGML_EMPTY) {
- CTRACE(tfp,
- "HTMLText: end of element %s when expecting end of %s\n",
+ CTRACE((tfp,
+ "HTML: end of element %s when expecting end of %s\n",
HTML_dtd.tags[element_number].name,
- HTML_dtd.tags[me->sp->tag_number].name);
+ (me->sp == me->stack + MAX_NESTING - 1) ? "none" :
+ (me->sp->tag_number < 0) ? "*invalid tag*" :
+ (me->sp->tag_number >= HTML_ELEMENTS) ? "special tag" :
+ HTML_dtd.tags[me->sp->tag_number].name));
+#ifdef CAREFUL /* parser assumed to produce good nesting */
/* panic */
- }
#endif /* CAREFUL */
+ }
/*
* If we're seeking MAPs, skip everything that's
* not a MAP or AREA tag. - FM
*/
if (LYMapsOnly) {
- if (!(element_number == HTML_MAP || element_number == HTML_AREA)) {
- return;
+ if (!(element_number == HTML_MAP || element_number == HTML_AREA ||
+ element_number == HTML_OBJECT)) {
+ return HT_OK;
}
}
@@ -5669,13 +6132,15 @@ PRIVATE void HTML_end_element ARGS3(
* SGML_EMPTY in HTMLDTD.c. - FM & KW
*/
if (HTML_dtd.tags[element_number].contents != SGML_EMPTY) {
+ skip_stack_requested = (BOOL) (me->skip_stack > 0);
if ((element_number != me->sp[0].tag_number) &&
me->skip_stack <= 0 &&
HTML_dtd.tags[HTML_LH].contents != SGML_EMPTY &&
(me->sp[0].tag_number == HTML_UL ||
me->sp[0].tag_number == HTML_OL ||
me->sp[0].tag_number == HTML_MENU ||
- me->sp[0].tag_number == HTML_DIR) &&
+ me->sp[0].tag_number == HTML_DIR ||
+ me->sp[0].tag_number == HTML_LI) &&
(element_number == HTML_H1 ||
element_number == HTML_H2 ||
element_number == HTML_H3 ||
@@ -5689,10 +6154,33 @@ PRIVATE void HTML_end_element ARGS3(
*/
BreakFlag = TRUE;
}
+ if (me->skip_stack == 0 && element_number == HTML_OBJECT &&
+ me->sp[0].tag_number == HTML_OBJECT_M &&
+ (me->sp < (me->stack + MAX_NESTING - 1)))
+ me->sp[0].tag_number = HTML_OBJECT;
if (me->skip_stack > 0) {
- CTRACE(tfp, "HTML:end_element: Internal call (level %d), leaving on stack - %s\n",
- me->skip_stack, me->sp->style->name);
+ CTRACE2(TRACE_STYLE,
+ (tfp, "HTML:end_element: Internal call (level %d), leaving on stack - %s\n",
+ me->skip_stack, NONNULL(me->sp->style->name)));
me->skip_stack--;
+ } else if (element_number == HTML_OBJECT &&
+ me->sp[0].tag_number != HTML_OBJECT &&
+ me->sp[0].tag_number != HTML_OBJECT_M &&
+ me->objects_mixed_open > 0 &&
+ !(me->objects_figged_open > 0 &&
+ me->sp[0].tag_number == HTML_FIG)) {
+ /*
+ * Ignore non-corresponding OBJECT tags that we
+ * didn't push because the SGML parser was supposed
+ * to go on parsing the contents non-literally. - kw
+ */
+ CTRACE2(TRACE_STYLE,
+ (tfp, "HTML:end_element[%d]: %s (level %d), %s - %s\n",
+ (int) STACKLEVEL(me),
+ "Special OBJECT handling", me->objects_mixed_open,
+ "leaving on stack",
+ NONNULL(me->sp->style->name)));
+ me->objects_mixed_open--;
} else if (me->stack_overrun == TRUE &&
element_number != me->sp[0].tag_number) {
/*
@@ -5706,7 +6194,7 @@ PRIVATE void HTML_end_element ARGS3(
* offer reasonable protection against crashes
* if an overrun does occur. - FM
*/
- return;
+ return HT_OK; /* let's pretend... */
} else if (element_number == HTML_SELECT &&
me->sp[0].tag_number != HTML_SELECT) {
/*
@@ -5715,13 +6203,14 @@ PRIVATE void HTML_end_element ARGS3(
* to deal with markup which amounts to a nested
* SELECT, or an out of order FORM end tag. - FM
*/
- return;
+ return HT_OK;
} else if ((element_number != me->sp[0].tag_number) &&
HTML_dtd.tags[HTML_LH].contents == SGML_EMPTY &&
(me->sp[0].tag_number == HTML_UL ||
me->sp[0].tag_number == HTML_OL ||
me->sp[0].tag_number == HTML_MENU ||
- me->sp[0].tag_number == HTML_DIR) &&
+ me->sp[0].tag_number == HTML_DIR ||
+ me->sp[0].tag_number == HTML_LI) &&
(element_number == HTML_H1 ||
element_number == HTML_H2 ||
element_number == HTML_H3 ||
@@ -5733,30 +6222,55 @@ PRIVATE void HTML_end_element ARGS3(
* an HTML_LH, which we've declared as
* SGML_EMPTY, so just return. - FM
*/
- return;
+ return HT_OK;
} else if (me->sp < (me->stack + MAX_NESTING - 1)) {
+#ifdef EXP_JUSTIFY_ELTS
+ if (wait_for_this_stacked_elt == me->stack - me->sp + MAX_NESTING)
+ reached_awaited_stacked_elt = TRUE;
+#endif
+ if (element_number == HTML_OBJECT) {
+ if (me->sp[0].tag_number == HTML_FIG &&
+ me->objects_figged_open > 0) {
+ /*
+ * It's an OBJECT for which we substituted a FIG,
+ * so pop the FIG and pretend that's what we are
+ * being called for. - kw
+ */
+ CTRACE2(TRACE_STYLE,
+ (tfp, "HTML:end_element[%d]: %s (level %d), %s - %s\n",
+ (int) STACKLEVEL(me),
+ "Special OBJECT->FIG handling",
+ me->objects_figged_open,
+ "treating as end FIG",
+ NONNULL(me->sp->style->name)));
+ me->objects_figged_open--;
+ element_number = HTML_FIG;
+ }
+ }
(me->sp)++;
- CTRACE(tfp, "HTML:end_element[%d]: Popped style off stack - %s\n",
- (int) STACKLEVEL(me),
- me->sp->style->name);
+ CTRACE2(TRACE_STYLE,
+ (tfp, "HTML:end_element[%d]: Popped style off stack - %s\n",
+ (int) STACKLEVEL(me),
+ NONNULL(me->sp->style->name)));
} else {
- CTRACE(tfp,
- "Stack underflow error! Tried to pop off more styles than exist in stack\n");
+ CTRACE2(TRACE_STYLE, (tfp,
+ "Stack underflow error! Tried to pop off more styles than exist in stack\n"));
}
}
- if (BreakFlag == TRUE)
- return;
+ if (BreakFlag == TRUE) {
+#ifdef EXP_JUSTIFY_ELTS
+ if (reached_awaited_stacked_elt)
+ wait_for_this_stacked_elt=-1;
+#endif
+ return HT_OK; /* let's pretend... */
+ }
/*
* Check for unclosed TEXTAREA. - FM
*/
if (me->inTEXTAREA && element_number != HTML_TEXTAREA) {
- if (TRACE) {
- fprintf(tfp, "Bad HTML: Missing TEXTAREA end tag\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: Missing TEXTAREA end tag\n"));
}
if (!me->text && !LYMapsOnly) {
@@ -5770,24 +6284,21 @@ PRIVATE void HTML_end_element ARGS3(
case HTML_HTML:
if (me->inA || me->inSELECT || me->inTEXTAREA) {
- if (TRACE) {
- fprintf(tfp,
+ if (LYBadHTML(me))
+ CTRACE((tfp,
"Bad HTML: %s%s%s%s%s not closed before HTML end tag *****\n",
me->inSELECT ? "SELECT" : "",
(me->inSELECT && me->inTEXTAREA) ? ", " : "",
me->inTEXTAREA ? "TEXTAREA" : "",
((me->inSELECT || me->inTEXTAREA) && me->inA) ? ", " : "",
- me->inA ? "A" : "");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ me->inA ? "A" : ""));
}
break;
case HTML_HEAD:
if (me->inBASE &&
- !strcmp(me->node_anchor->address, LYlist_temp_url())) {
+ (LYIsUIPage3(me->node_anchor->address, UIP_LIST_PAGE, 0) ||
+ LYIsUIPage3(me->node_anchor->address, UIP_ADDRLIST_PAGE, 0))) {
/* If we are parsing the List Page, and have a BASE after
* we are done with the HEAD element, propagate it back
* to the node_anchor object. The base should have been
@@ -5817,9 +6328,11 @@ PRIVATE void HTML_end_element ARGS3(
* charset routines. - FM
*/
if (me->node_anchor->bookmark && *me->node_anchor->bookmark) {
- if ((LYMultiBookmarks == TRUE) ||
+ if ((LYMultiBookmarks != MBM_OFF) ||
((bookmark_page && *bookmark_page) &&
strcmp(me->node_anchor->bookmark, bookmark_page))) {
+ if (!include)
+ include = &me->xinclude;
for (i = 0; i <= MBM_V_MAXFILES; i++) {
if (MBM_A_subbookmark[i] &&
!strcmp(MBM_A_subbookmark[i],
@@ -5857,8 +6370,9 @@ PRIVATE void HTML_end_element ARGS3(
* we'll just ignore. - FM
*/
HTChunkTerminate(&me->style_block);
- CTRACE(tfp, "HTML: STYLE content =\n%s\n",
- me->style_block.data);
+ CTRACE2(TRACE_STYLE,
+ (tfp, "HTML: STYLE content =\n%s\n",
+ me->style_block.data));
HTChunkClear(&me->style_block);
break;
@@ -5868,25 +6382,21 @@ PRIVATE void HTML_end_element ARGS3(
* we'll just ignore. - FM
*/
HTChunkTerminate(&me->script);
- CTRACE(tfp, "HTML: SCRIPT content =\n%s\n",
- me->script.data);
+ CTRACE((tfp, "HTML: SCRIPT content =\n%s\n",
+ me->script.data));
HTChunkClear(&me->script);
break;
case HTML_BODY:
if (me->inA || me->inSELECT || me->inTEXTAREA) {
- if (TRACE) {
- fprintf(tfp,
+ if (LYBadHTML(me))
+ CTRACE((tfp,
"Bad HTML: %s%s%s%s%s not closed before BODY end tag *****\n",
me->inSELECT ? "SELECT" : "",
(me->inSELECT && me->inTEXTAREA) ? ", " : "",
me->inTEXTAREA ? "TEXTAREA" : "",
((me->inSELECT || me->inTEXTAREA) && me->inA) ? ", " : "",
- me->inA ? "A" : "");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ me->inA ? "A" : ""));
}
break;
@@ -5923,14 +6433,23 @@ PRIVATE void HTML_end_element ARGS3(
case HTML_DIV:
if (me->Division_Level >= 0)
me->Division_Level--;
- if (me->Division_Level >= 0)
- me->sp->style->alignment =
+ if (me->Division_Level >= 0) {
+ if (me->sp->style->alignment !=
+ me->DivisionAlignments[me->Division_Level]) {
+ if (me->inP)
+ LYEnsureSingleSpace(me);
+ me->sp->style->alignment =
me->DivisionAlignments[me->Division_Level];
+ }
+ }
change_paragraph_style(me, me->sp->style);
- UPDATE_STYLE;
+ if (me->style_change) {
+ actually_set_style(me);
+ if (me->List_Nesting_Level >= 0)
+ HText_NegateLineOne(me->text);
+ } else if (me->inP)
+ LYEnsureSingleSpace(me);
me->current_default_alignment = me->sp->style->alignment;
- if (me->List_Nesting_Level >= 0)
- HText_NegateLineOne(me->text);
break;
case HTML_H1: /* header styles */
@@ -5967,9 +6486,9 @@ PRIVATE void HTML_end_element ARGS3(
break;
case HTML_P:
- LYHandleP(me,
+ LYHandlePlike(me,
(CONST BOOL*)0, (CONST char **)0,
- include,
+ include, 0,
FALSE);
break;
@@ -6000,9 +6519,9 @@ PRIVATE void HTML_end_element ARGS3(
if (me->inUnderline && me->Underline_Level < 1) {
HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);
me->inUnderline = FALSE;
- CTRACE(tfp, "Ending underline\n");
+ CTRACE((tfp, "Ending underline\n"));
} else {
- CTRACE(tfp, "Underline Level is %d\n", me->Underline_Level);
+ CTRACE((tfp, "Underline Level is %d\n", me->Underline_Level));
}
break;
@@ -6016,12 +6535,15 @@ PRIVATE void HTML_end_element ARGS3(
case HTML_KBD:
case HTML_SAMP:
case HTML_SMALL:
- case HTML_SUB:
case HTML_SUP:
case HTML_TT:
case HTML_VAR:
break;
+ case HTML_SUB:
+ HText_appendCharacter(me->text, ']');
+ break;
+
case HTML_DEL:
case HTML_S:
case HTML_STRIKE:
@@ -6067,8 +6589,11 @@ PRIVATE void HTML_end_element ARGS3(
* Set to know that we are no longer in a PRE block.
*/
me->inPRE = FALSE;
+ /* FALLTHRU */
case HTML_LISTING: /* Literal text */
+ /* FALLTHRU */
case HTML_XMP:
+ /* FALLTHRU */
case HTML_PLAINTEXT:
if (me->comment_start)
HText_appendText(me->text, me->comment_start);
@@ -6093,13 +6618,21 @@ PRIVATE void HTML_end_element ARGS3(
case HTML_OL:
me->OL_Counter[me->List_Nesting_Level < 11 ?
me->List_Nesting_Level : 11] = OL_VOID;
+ /* FALLTHRU */
case HTML_DL:
+ /* FALLTHRU */
case HTML_UL:
+ /* FALLTHRU */
case HTML_MENU:
+ /* FALLTHRU */
case HTML_DIR:
me->List_Nesting_Level--;
- CTRACE(tfp, "HTML_end_element: Reducing List Nesting Level to %d\n",
- me->List_Nesting_Level);
+ CTRACE((tfp, "HTML_end_element: Reducing List Nesting Level to %d\n",
+ me->List_Nesting_Level));
+#ifdef EXP_JUSTIFY_ELTS
+ if (element_number == HTML_DL)
+ in_DT = FALSE; /*close the term that was without definition. */
+#endif
change_paragraph_style(me, me->sp->style); /* Often won't really change */
UPDATE_STYLE;
if (me->List_Nesting_Level >= 0)
@@ -6132,7 +6665,12 @@ PRIVATE void HTML_end_element ARGS3(
* Set to know that we are no longer in an anchor.
*/
me->inA = FALSE;
-
+#ifdef MARK_HIDDEN_LINKS
+ if (hidden_link_marker && *hidden_link_marker &&
+ HText_isAnchorBlank(me->text, me->CurrentANum) ) {
+ HText_appendText(me->text,hidden_link_marker);
+ }
+#endif
UPDATE_STYLE;
if (me->inBoldA == TRUE && me->inBoldH == FALSE)
HText_appendCharacter(me->text, LY_BOLD_END_CHAR);
@@ -6166,19 +6704,11 @@ PRIVATE void HTML_end_element ARGS3(
break;
case HTML_FIG:
- if (me->inFIGwithP) {
- LYEnsureDoubleSpace(me);
- } else {
- HTML_put_character(me, ' '); /* space char may be ignored */
- }
- LYResetParagraphAlignment(me);
- me->inFIGwithP = FALSE;
- me->inFIG = FALSE;
- change_paragraph_style(me, me->sp->style); /* Often won't really change */
- if (me->List_Nesting_Level >= 0) {
- UPDATE_STYLE;
- HText_NegateLineOne(me->text);
- }
+ LYHandleFIG(me, NULL, NULL,
+ 0,
+ 0,
+ NULL,
+ NULL, NO, FALSE, &intern_flag);
break;
case HTML_OBJECT:
@@ -6187,7 +6717,8 @@ PRIVATE void HTML_end_element ARGS3(
*/
{
int s = 0, e = 0;
- char *start = NULL, *first_end = NULL;
+ char *start = NULL, *first_end = NULL, *last_end = NULL;
+ char *first_map = NULL, *last_map = NULL;
BOOL have_param = FALSE;
char *data = NULL;
@@ -6203,61 +6734,102 @@ PRIVATE void HTML_end_element ARGS3(
if (!strncmp(cp, "<!--", 4)) {
data = LYFindEndOfComment(cp);
cp = data;
- } else if (s == 0 && !strncasecomp(cp, "<PARAM", 6)) {
+ } else if (s == 0 && !strncasecomp(cp, "<PARAM", 6) &&
+ !IsNmChar(cp[6])) {
have_param = TRUE;
- } else if (!strncasecomp(cp, "<OBJECT", 7)) {
+ } else if (!strncasecomp(cp, "<OBJECT", 7) &&
+ !IsNmChar(cp[7])) {
if (s == 0)
start = cp;
s++;
- } else if (!strncasecomp(cp, "</OBJECT", 8)) {
+ } else if (!strncasecomp(cp, "</OBJECT", 8) &&
+ !IsNmChar(cp[8])) {
if (e == 0)
first_end = cp;
+ last_end = cp;
e++;
+ } else if (!strncasecomp(cp, "<MAP", 4) &&
+ !IsNmChar(cp[4])) {
+ if (!first_map)
+ first_map = cp;
+ last_map = cp;
+ } else if (!strncasecomp(cp, "</MAP", 5) &&
+ !IsNmChar(cp[5])) {
+ last_map = cp;
}
data = ++cp;
}
+ if (s < e) {
+ /*
+ * We had more end tags than start tags, so
+ * we have bad HTML or otherwise misparsed. - FM
+ */
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: Unmatched OBJECT start and end tags. Discarding content:\n%s\n",
+ me->object.data));
+ goto End_Object;
+ }
if (s > e) {
+ if (!me->object_declare && !me->object_name &&
+ !(me->object_shapes && !LYMapsOnly) &&
+ !(me->object_usemap != NULL && !LYMapsOnly) &&
+ !(clickable_images && !LYMapsOnly &&
+ me->object_data != NULL &&
+ !have_param &&
+ me->object_classid == NULL &&
+ me->object_codebase == NULL &&
+ me->object_codetype == NULL)) {
+ /*
+ * We have nested OBJECT tags, and not yet all of the
+ * end tags, but have a case where the content needs
+ * to be parsed again (not dropped) and where we don't
+ * want to output anything special at the point when we
+ * *do* have accumulated all the end tags. So recycle
+ * the incomplete contents now, and signal the SGML
+ * parser that it should not regard the current OBJECT
+ * ended but should treat its contents as mixed.
+ * Normally these cases would have already handled
+ * in the real start_element call, so this block may
+ * not be necessary. - kw
+ */
+ CTRACE((tfp, "%s:\n%s\n",
+ "HTML: Nested OBJECT tags. Recycling incomplete contents",
+ me->object.data));
+ status = HT_PARSER_OTHER_CONTENT;
+ me->object.size--;
+ HTChunkPuts(&me->object, "</OBJECT>");
+ if (!include) /* error, should not happen */
+ include = &me->xinclude;
+ StrnAllocCat(*include, me->object.data, me->object.size);
+ clear_objectdata(me);
+ /* an internal fake call to keep our stack happy: */
+ HTML_start_element(me, HTML_OBJECT, NULL,NULL,
+ me->tag_charset, include);
+ break;
+ }
/*
* We have nested OBJECT tags, and not yet all of the
- * end tags, so restore an end tag to the content, and
- * pass a dummy start tag to the SGML parser so that it
- * will resume the accumulation of OBJECT content. - FM
+ * end tags, and we want the end tags. So restore an
+ * end tag to the content, and signal to the SGML parser
+ * that it should resume the accumulation of OBJECT content
+ * (after calling back to start_element) in a way that
+ * is equivalent to passing it a dummy start tag. - FM, kw
*/
- CTRACE(tfp, "HTML: Nested OBJECT tags. Recycling.\n");
- if (*include == NULL) {
- StrAllocCopy(*include, "<OBJECT>");
- } else {
- if (0 && strstr(*include, me->object.data) == NULL) {
- StrAllocCat(*include, "<OBJECT>");
- }
- }
+ CTRACE((tfp, "HTML: Nested OBJECT tags. Recycling.\n"));
+ status = HT_PARSER_REOPEN_ELT;
me->object.size--;
HTChunkPuts(&me->object, "</OBJECT>");
- change_paragraph_style(me, me->sp->style);
+ if (!LYMapsOnly)
+ change_paragraph_style(me, me->sp->style);
break;
}
- if (s < e) {
- /*
- * We had more end tags than start tags, so
- * we have bad HTML or otherwise misparsed. - FM
- */
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: Unmatched OBJECT start and end tags. Discarding content:\n%s\n",
- me->object.data);
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
- goto End_Object;
- }
/*
* OBJECT start and end tags are fully matched,
* assuming we weren't tripped up by comments
* or quoted attributes. - FM
*/
- CTRACE(tfp, "HTML:OBJECT content:\n%s\n", me->object.data);
+ CTRACE((tfp, "HTML:OBJECT content:\n%s\n", me->object.data));
/*
* OBJECTs with DECLARE should be saved but
@@ -6268,9 +6840,9 @@ PRIVATE void HTML_end_element ARGS3(
* the content (sigh 8-). - FM
*/
if (me->object_declare == TRUE) {
- if (me->object_id && *me->object_id)
+ if (me->object_id && *me->object_id && !LYMapsOnly)
LYHandleID(me, me->object_id);
- CTRACE(tfp, "HTML: DECLAREd OBJECT. Ignoring!\n");
+ CTRACE((tfp, "HTML: DECLAREd OBJECT. Ignoring!\n"));
goto End_Object;
}
@@ -6280,10 +6852,10 @@ PRIVATE void HTML_end_element ARGS3(
* present, and discard the content until we
* have code to handle these. (sigh 8-). - FM
*/
- if (me->object_name != NULL) {
+ if (me->object_name != NULL && !LYMapsOnly) {
if (me->object_id && *me->object_id)
LYHandleID(me, me->object_id);
- CTRACE(tfp, "HTML: NAMEd OBJECT. Ignoring!\n");
+ CTRACE((tfp, "HTML: NAMEd OBJECT. Ignoring!\n"));
goto End_Object;
}
@@ -6299,37 +6871,54 @@ PRIVATE void HTML_end_element ARGS3(
* to have succeeded are met. We'll hope that
* it did succeed. - FM
*/
- *first_end = '\0';
- data = NULL;
- StrAllocCopy(data, start);
- if (e > 1) {
- for (i = e; i > 1; i--) {
- StrAllocCat(data, "</OBJECT><OBJECT>");
+ if (LYMapsOnly) {
+ /*
+ * Well we don't need to do this any more,
+ * nested objects should either not get here
+ * any more at all or can be handled fine by
+ * other code below. Leave in place for now
+ * as a special case for LYMapsOnly. - kw
+ */
+ if (LYMapsOnly && (!last_map || last_map < first_end))
+ *first_end = '\0';
+ else
+ e = 0;
+ data = NULL;
+ if (LYMapsOnly && (!first_map || first_map > start))
+ StrAllocCopy(data, start);
+ else
+ StrAllocCopy(data, me->object.data);
+ if (e > 0) {
+ for (i = e; i > 0; i--) {
+ StrAllocCat(data, "</OBJECT>");
+ }
}
+ if (!include) /* error, should not happen */
+ include = &me->xinclude;
+ StrAllocCat(*include, data);
+ CTRACE((tfp, "HTML: Recycling nested OBJECT%s.\n",
+ (s > 1) ? "s" : ""));
+ FREE(data);
+ goto End_Object;
}
- StrAllocCat(data, "</OBJECT>");
- StrAllocCat(*include, data);
- CTRACE(tfp, "HTML: Recycling nested OBJECT%s.\n",
- (e > 1) ? "s" : "");
- FREE(data);
- goto End_Object;
} else {
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: Unmatched OBJECT start and end tags. Discarding content.\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: Unmatched OBJECT start and end tags. Discarding content.\n"));
goto End_Object;
}
}
/*
- * If it's content has SHAPES, convert it to FIG. - FM
+ * If its content has SHAPES, convert it to FIG. - FM
+ *
+ * This is now handled in our start_element without using
+ * include if the SGML parser cooperates, so this block
+ * may be unnecessary. - kw
*/
- if (me->object_shapes == TRUE) {
- CTRACE(tfp, "HTML: OBJECT has SHAPES. Converting to FIG.\n");
+ if (me->object_shapes == TRUE && !LYMapsOnly) {
+ CTRACE((tfp, "HTML: OBJECT has SHAPES. Converting to FIG.\n"));
+ if (!include) /* error, should not happen */
+ include = &me->xinclude;
StrAllocCat(*include, "<FIG ISOBJECT IMAGEMAP");
if (me->object_ismap == TRUE)
StrAllocCat(*include, " IMAGEMAP");
@@ -6356,9 +6945,11 @@ PRIVATE void HTML_end_element ARGS3(
* If it has a USEMAP attribute and didn't have SHAPES,
* convert it to IMG. - FM
*/
- if (me->object_usemap != NULL) {
- CTRACE(tfp, "HTML: OBJECT has USEMAP. Converting to IMG.\n");
+ if (me->object_usemap != NULL && !LYMapsOnly) {
+ CTRACE((tfp, "HTML: OBJECT has USEMAP. Converting to IMG.\n"));
+ if (!include) /* error, should not happen */
+ include = &me->xinclude;
StrAllocCat(*include, "<IMG ISOBJECT");
if (me->object_id != NULL) {
/*
@@ -6402,20 +6993,70 @@ PRIVATE void HTML_end_element ARGS3(
} else {
StrAllocCat(*include, ">");
}
+ /*
+ * Add the content if it has <MAP, since that may
+ * be the MAP this usemap points to. But if we have
+ * nested objects, try to eliminate portions that
+ * cannot contribute to the quest for MAP. This is
+ * not perfect, we may get too much content; this seems
+ * preferable over losing too much. - kw
+ */
+ if (first_map) {
+ if (s == 0) {
+ StrAllocCat(*include, me->object.data);
+ CTRACE((tfp, "HTML: MAP found, recycling object contents.\n"));
+ goto End_Object;
+ }
+ /* s > 0 and s == e */
+ data = NULL;
+ if (last_map < start) {
+ *start = '\0';
+ i = 0;
+ } else if (last_map < first_end) {
+ *first_end = '\0';
+ i = e;
+ } else if (last_map < last_end) {
+ *last_end = '\0';
+ i = 1;
+ } else {
+ i = 0;
+ }
+ if (first_map > last_end) {
+ /* fake empty object to keep stacks stack happy */
+ StrAllocCopy(data, "<OBJECT><");
+ StrAllocCat(data, last_end + 1);
+ i = 0;
+ } else if (first_map > start) {
+ StrAllocCopy(data, start);
+ } else {
+ StrAllocCopy(data, me->object.data);
+ }
+ for (; i > 0; i--) {
+ StrAllocCat(data, "</OBJECT>");
+ }
+ CTRACE((tfp, "%s:\n%s\n",
+ "HTML: MAP and nested OBJECT tags. Recycling parts",
+ data));
+ StrAllocCat(*include, data);
+ FREE(data);
+ }
goto End_Object;
}
/*
* Add an ID link if needed. - FM
*/
- if (me->object_id && *me->object_id)
+ if (me->object_id && *me->object_id && !LYMapsOnly)
LYHandleID(me, me->object_id);
/*
* Add the OBJECTs content if not empty. - FM
*/
- if (me->object.size > 1)
+ if (me->object.size > 1) {
+ if (!include) /* error, should not happen */
+ include = &me->xinclude;
StrAllocCat(*include, me->object.data);
+ }
/*
* Create a link to the DATA, if desired, and
@@ -6426,7 +7067,8 @@ PRIVATE void HTML_end_element ARGS3(
* it a try. - FM
*/
if (clickable_images) {
- if (me->object_data != NULL &&
+ if (!LYMapsOnly &&
+ me->object_data != NULL &&
!have_param &&
me->object_classid == NULL &&
me->object_codebase == NULL &&
@@ -6439,6 +7081,8 @@ PRIVATE void HTML_end_element ARGS3(
* an image or not, and set the link name
* accordingly. - FM
*/
+ if (!include) /* error, should not happen */
+ include = &me->xinclude;
if (me->inA)
StrAllocCat(*include, "</A>");
StrAllocCat(*include, " -<A HREF=\"");
@@ -6459,22 +7103,10 @@ PRIVATE void HTML_end_element ARGS3(
* Re-intialize all of the OBJECT elements. - FM
*/
End_Object:
- HTChunkClear(&me->object);
- me->object_started = FALSE;
- me->object_declare = FALSE;
- me->object_shapes = FALSE;
- me->object_ismap = FALSE;
- FREE(me->object_usemap);
- FREE(me->object_id);
- FREE(me->object_title);
- FREE(me->object_data);
- FREE(me->object_type);
- FREE(me->object_classid);
- FREE(me->object_codebase);
- FREE(me->object_codetype);
- FREE(me->object_name);
+ clear_objectdata(me);
- change_paragraph_style(me, me->sp->style); /* Often won't really change */
+ if (!LYMapsOnly)
+ change_paragraph_style(me, me->sp->style); /* Often won't really change */
break;
case HTML_APPLET:
@@ -6513,13 +7145,10 @@ End_Object:
* globals in GridText.c are initialized. - FM
*/
if (!me->inFORM) {
- if (TRACE) {
- fprintf(tfp, "Bad HTML: Unmatched FORM end tag\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: Unmatched FORM end tag\n"));
}
+ EMIT_IFDEF_EXP_JUSTIFY_ELTS(form_in_htext = FALSE);
/*
* Check if we still have a SELECT element open.
@@ -6533,13 +7162,8 @@ End_Object:
* parser's stack) to close the SELECT. - kw
*/
if (me->inSELECT) {
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: Open SELECT at FORM end. Faking SELECT end tag. *****\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: Open SELECT at FORM end. Faking SELECT end tag. *****\n"));
if (me->sp->tag_number != HTML_SELECT) {
SET_SKIP_STACK(HTML_SELECT);
}
@@ -6591,12 +7215,8 @@ End_Object:
* Make sure we had a textarea start tag.
*/
if (!me->inTEXTAREA) {
- if (TRACE) {
- fprintf(tfp, "Bad HTML: Unmatched TEXTAREA end tag\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: Unmatched TEXTAREA end tag\n"));
break;
}
@@ -6630,7 +7250,6 @@ End_Object:
* Finish the data off.
*/
HTChunkTerminate(&me->textarea);
- data = me->textarea.data;
FREE(temp);
I.type = "textarea";
@@ -6643,19 +7262,50 @@ End_Object:
I.id = me->textarea_id;
/*
- * SGML unescape any character references in TEXTAREA
- * content, then parse it into individual lines
- * to be handled as a series of INPUT fields (ugh!).
+ * Transform the TEXTAREA content as needed, then parse
+ * it into individual lines to be handled as a series
+ * series of INPUT fields (ugh!).
* Any raw 8-bit or multibyte characters already have been
* handled in relation to the display character set
* in SGML_character().
+ *
+ * If TEXTAREA is handled as SGML_LITTERAL (the old way),
+ * we need to SGML-unescape any character references and NCRs
+ * here. Otherwise this will already have happened in the
+ * SGML.c parsing. - kw
*/
me->UsePlainSpace = TRUE;
- TRANSLATE_AND_UNESCAPE_ENTITIES5(&me->textarea.data,
+ if (HTML_dtd.tags[element_number].contents == SGML_LITTERAL) {
+ TRANSLATE_AND_UNESCAPE_ENTITIES6(&me->textarea.data,
+ me->UCLYhndl,
+ current_char_set,
+ NO,
+ me->UsePlainSpace, me->HiddenValue);
+ } else {
+ /*
+ * This shouldn't have anything to do, normally, but
+ * just in case...
+ * There shouldn't be lynx special character codes in
+ * the chunk ("DTD" flag Tgf_nolyspcl tells SGML.c not
+ * to generate them). If there were, we could set the
+ * last parameter ('Back') below to YES, which would
+ * take them out of the data.
+ * The data may however contain non break space, soft
+ * hyphen, or en space etc., in the me->UCLYhndl character
+ * encoding. If that's a problem, perhaps for the (line
+ * or other) editor, setting 'Back' to YES should also
+ * help to always convert them to plain spaces (or drop
+ * them). - kw
+ */
+ TRANSLATE_HTML7(&me->textarea.data,
me->UCLYhndl,
current_char_set,
- me->UsePlainSpace, me->HiddenValue);
+ NO,
+ me->UsePlainSpace, me->HiddenValue,
+ NO);
+ }
+ data = me->textarea.data;
/*
* Trim any trailing newlines and
@@ -6695,7 +7345,7 @@ End_Object:
int j;
for (j = 0; temp && temp[j]; j++) {
if (temp[j] == '\r')
- temp[j] = (temp[j+1] ? ' ' : '\0');
+ temp[j] = (char) (temp[j+1] ? ' ' : '\0');
}
I.value = temp;
chars = HText_beginInput(me->text, me->inUnderline, &I);
@@ -6728,7 +7378,7 @@ End_Object:
int j;
for (j = 0; temp && temp[j]; j++) {
if (temp[j] == '\r')
- temp[j] = (temp[j+1] ? ' ' : '\0');
+ temp[j] = (char) (temp[j+1] ? ' ' : '\0');
}
I.value = temp;
chars = HText_beginInput(me->text, me->inUnderline, &I);
@@ -6770,12 +7420,8 @@ End_Object:
* Make sure we had a select start tag.
*/
if (!me->inSELECT) {
- if (TRACE) {
- fprintf(tfp, "Bad HTML: Unmatched SELECT end tag *****\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: Unmatched SELECT end tag *****\n"));
break;
}
@@ -6793,13 +7439,9 @@ End_Object:
* Make sure we're in a form.
*/
if (!me->inFORM) {
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: SELECT end tag not within FORM element *****\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp,
+ "Bad HTML: SELECT end tag not within FORM element *****\n"));
/*
* Hopefully won't crash, so we'll ignore it. - kw
*/
@@ -6855,8 +7497,21 @@ End_Object:
for (; ptr && *ptr != '\0'; ptr++) {
if (*ptr == ' ')
HText_appendCharacter(me->text,HT_NON_BREAK_SPACE);
- else
+ else {
+ HTkcode kcode = 0;
+ HTkcode specified_kcode = 0;
+ if (HTCJK == JAPANESE) {
+ kcode = HText_getKcode(me->text);
+ HText_updateKcode(me->text, kanji_code);
+ specified_kcode = HText_getSpecifiedKcode(me->text);
+ HText_updateSpecifiedKcode(me->text, kanji_code);
+ }
HText_appendCharacter(me->text,*ptr);
+ if (HTCJK == JAPANESE) {
+ HText_updateKcode(me->text, kcode);
+ HText_updateSpecifiedKcode(me->text, specified_kcode);
+ }
+ }
}
/*
* Add end option character.
@@ -6883,7 +7538,11 @@ End_Object:
break;
case HTML_TABLE:
+#ifdef EXP_NESTED_TABLES
+ if (!nested_tables)
+#endif
me->inTABLE = FALSE;
+
if (!strcmp(me->sp->style->name, "Preformatted")) {
break;
}
@@ -6894,6 +7553,13 @@ End_Object:
me->DivisionAlignments[me->Division_Level];
change_paragraph_style(me, me->sp->style);
UPDATE_STYLE;
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables) {
+ me->inTABLE = HText_endStblTABLE(me->text);
+ } else
+#endif
+ HText_endStblTABLE(me->text);
+
me->current_default_alignment = me->sp->style->alignment;
if (me->List_Nesting_Level >= 0)
HText_NegateLineOne(me->text);
@@ -6901,6 +7567,7 @@ End_Object:
/* These TABLE related elements may now not be SGML_EMPTY. - kw */
case HTML_TR:
+ HText_endStblTR(me->text);
if (HText_LastLineSize(me->text, FALSE)) {
HText_setLastChar(me->text, ' '); /* absorb next white space */
HText_appendCharacter(me->text, '\r');
@@ -6914,12 +7581,13 @@ End_Object:
break;
case HTML_COLGROUP:
+ if (me->inTABLE)
+ HText_endStblCOLGROUP(me->text);
break;
case HTML_TH:
- break;
-
case HTML_TD:
+ HText_endStblTD(me->text);
break;
/* More stuff that may now not be SGML_EMPTY any more: */
@@ -6959,29 +7627,42 @@ End_Object:
break;
} /* switch */
+
+#ifdef EXP_JUSTIFY_ELTS
+ if (reached_awaited_stacked_elt)
+ wait_for_this_stacked_elt=-1;
+#endif
+
+ if (me->xinclude) {
+ HText_appendText(me->text, " *** LYNX ERROR ***\rUnparsed data:\r");
+ HText_appendText(me->text, me->xinclude);
+ FREE(me->xinclude);
+ }
+
#ifdef USE_COLOR_STYLE
+ if (!skip_stack_requested) { /*don't emit stylechanges if skipped stack element - VH*/
#if !OPT_SCN
- TrimColorClass(HTML_dtd.tags[element_number].name,
- Style_className, &hcode);
+ TrimColorClass(HTML_dtd.tags[element_number].name,
+ Style_className, &hcode);
#else
# if !OMIT_SCN_KEEPING
- FastTrimColorClass(HTML_dtd.tags[element_number].name,
- HTML_dtd.tags[element_number].name_len,
- Style_className,
- &Style_className_end, &hcode);
+ FastTrimColorClass(HTML_dtd.tags[element_number].name,
+ HTML_dtd.tags[element_number].name_len,
+ Style_className,
+ &Style_className_end, &hcode);
# endif
#endif
- if (!REALLY_EMPTY(element_number))
- {
- CTRACE(tfp, "STYLE:end_element: ending non-EMPTY style\n");
-#if !defined(USE_HASH)
- HText_characterStyle(me->text, element_number+STARTAT, STACK_OFF);
-#else
- HText_characterStyle(me->text, HCODE_TO_STACK_OFF(hcode), STACK_OFF);
-#endif /* USE_HASH */
+ if (!ReallyEmptyTagNum(element_number))
+ {
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.end_element: ending non-\"EMPTY\" style <%s...>\n",
+ HTML_dtd.tags[element_number].name));
+ HText_characterStyle(me->text, HCODE_TO_STACK_OFF(hcode), STACK_OFF);
+ }
}
#endif /* USE_COLOR_STYLE */
+ return status;
}
/* Expanding entities
@@ -7024,6 +7705,8 @@ PRIVATE void HTML_free ARGS1(HTStructured *, me)
*/
FREE(me->base_href);
FREE(me->map_address);
+ clear_objectdata(me);
+ FREE(me->xinclude);
FREE(me);
return;
}
@@ -7052,11 +7735,12 @@ PRIVATE void HTML_free ARGS1(HTStructured *, me)
HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);
me->inUnderline = FALSE;
me->Underline_Level = 0;
- CTRACE(tfp,"HTML_free: Ending underline\n");
+ CTRACE((tfp, "HTML_free: Ending underline\n"));
}
if (me->inA) {
HTML_end_element(me, HTML_A, &include);
me->inA = FALSE;
+ CTRACE((tfp, "HTML_free: Ending HTML_A\n"));
}
if (me->inFONT) {
HTML_end_element(me, HTML_FONT, &include);
@@ -7072,20 +7756,16 @@ PRIVATE void HTML_free ARGS1(HTStructured *, me)
* forcing a close of a still-open form, something must
* have gone very wrong. - kw
*/
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: SELECT or OPTION not ended properly *****\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp,
+ "Bad HTML: SELECT or OPTION not ended properly *****\n"));
HTChunkTerminate(&me->option);
/*
* Output the left-over data as text, maybe it was invalid
* markup meant to be shown somewhere. - kw
*/
- CTRACE(tfp, "HTML_free: ***** leftover option data: %s\n",
- me->option.data);
+ CTRACE((tfp, "HTML_free: ***** leftover option data: %s\n",
+ me->option.data));
HTML_put_string(me, me->option.data);
HTChunkClear(&me->option);
}
@@ -7095,20 +7775,16 @@ PRIVATE void HTML_free ARGS1(HTStructured *, me)
* forcing a close of a still-open form, something must
* have gone very wrong. - kw
*/
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: TEXTAREA not used properly *****\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp,
+ "Bad HTML: TEXTAREA not used properly *****\n"));
HTChunkTerminate(&me->textarea);
/*
* Output the left-over data as text, maybe it was invalid
* markup meant to be shown somewhere. - kw
*/
- CTRACE(tfp, "HTML_free: ***** leftover textarea data: %s\n",
- me->textarea.data);
+ CTRACE((tfp, "HTML_free: ***** leftover textarea data: %s\n",
+ me->textarea.data));
HTML_put_string(me, me->textarea.data);
HTChunkClear(&me->textarea);
}
@@ -7129,6 +7805,11 @@ PRIVATE void HTML_free ARGS1(HTStructured *, me)
HTML_put_character(me, ']');
HTML_end_element(me, HTML_P, &include);
}
+ if (me->xinclude) {
+ HText_appendText(me->text, " *** LYNX ERROR ***\rUnparsed data:\r");
+ HText_appendText(me->text, me->xinclude);
+ FREE(me->xinclude);
+ }
/*
* Now call the cleanup function. - FM
@@ -7141,17 +7822,13 @@ PRIVATE void HTML_free ARGS1(HTStructured *, me)
* forcing a close of a still-open form, something must
* have gone very wrong. - kw
*/
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: SELECT or OPTION not ended properly *****\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp,
+ "Bad HTML: SELECT or OPTION not ended properly *****\n"));
if (TRACE) {
HTChunkTerminate(&me->option);
- fprintf(tfp, "HTML_free: ***** leftover option data: %s\n",
- me->option.data);
+ CTRACE((tfp, "HTML_free: ***** leftover option data: %s\n",
+ me->option.data));
}
HTChunkClear(&me->option);
}
@@ -7161,17 +7838,13 @@ PRIVATE void HTML_free ARGS1(HTStructured *, me)
* forcing a close of a still-open form, something must
* have gone very wrong. - kw
*/
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: TEXTAREA not used properly *****\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp,
+ "Bad HTML: TEXTAREA not used properly *****\n"));
if (TRACE) {
HTChunkTerminate(&me->textarea);
- fprintf(tfp, "HTML_free: ***** leftover textarea data: %s\n",
- me->textarea.data);
+ CTRACE((tfp, "HTML_free: ***** leftover textarea data: %s\n",
+ me->textarea.data));
}
HTChunkClear(&me->textarea);
}
@@ -7200,6 +7873,7 @@ PRIVATE void HTML_free ARGS1(HTStructured *, me)
FREE(me->base_href);
FREE(me->map_address);
FREE(me->LastOptionValue);
+ clear_objectdata(me);
FREE(me);
}
@@ -7243,11 +7917,10 @@ PRIVATE void HTML_abort ARGS2(HTStructured *, me, HTError, e)
* have gone very wrong. - kw
*/
if (TRACE) {
- fprintf(tfp,
- "HTML_abort: SELECT or OPTION not ended properly *****\n");
+ CTRACE((tfp, "HTML_abort: SELECT or OPTION not ended properly *****\n"));
HTChunkTerminate(&me->option);
- fprintf(tfp, "HTML_abort: ***** leftover option data: %s\n",
- me->option.data);
+ CTRACE((tfp, "HTML_abort: ***** leftover option data: %s\n",
+ me->option.data));
}
HTChunkClear(&me->option);
}
@@ -7258,11 +7931,10 @@ PRIVATE void HTML_abort ARGS2(HTStructured *, me, HTError, e)
* have gone very wrong. - kw
*/
if (TRACE) {
- fprintf(tfp,
- "HTML_abort: TEXTAREA not used properly *****\n");
+ CTRACE((tfp, "HTML_abort: TEXTAREA not used properly *****\n"));
HTChunkTerminate(&me->textarea);
- fprintf(tfp, "HTML_abort: ***** leftover textarea data: %s\n",
- me->textarea.data);
+ CTRACE((tfp, "HTML_abort: ***** leftover textarea data: %s\n",
+ me->textarea.data));
}
HTChunkClear(&me->textarea);
}
@@ -7295,6 +7967,8 @@ PRIVATE void HTML_abort ARGS2(HTStructured *, me, HTError, e)
FREE(me->textarea_cols);
FREE(me->textarea_id);
FREE(me->LastOptionValue);
+ FREE(me->xinclude);
+ clear_objectdata(me);
FREE(me);
}
@@ -7418,10 +8092,10 @@ PUBLIC HTStructured* HTML_new ARGS3(
return HTMLGenerator(intermediate);
fprintf(stderr, "\n** Internal error: can't parse HTML to %s\n",
HTAtom_name(format_out));
- exit_immediately (-1);
+ exit_immediately (EXIT_FAILURE);
}
- me = (HTStructured*) calloc(sizeof(*me),1);
+ me = typecalloc(HTStructured);
if (me == NULL)
outofmem(__FILE__, "HTML_new");
@@ -7441,15 +8115,9 @@ PUBLIC HTStructured* HTML_new ARGS3(
me->base_href = NULL;
me->map_address = NULL;
- me->title.size = 0;
- me->title.growby = 128;
- me->title.allocated = 0;
- me->title.data = NULL;
+ HTChunkInit(&me->title, 128);
- me->object.size = 0;
- me->object.growby = 128;
- me->object.allocated = 0;
- me->object.data = NULL;
+ HTChunkInit(&me->object, 128);
me->object_started = FALSE;
me->object_declare = FALSE;
me->object_shapes = FALSE;
@@ -7464,19 +8132,13 @@ PUBLIC HTStructured* HTML_new ARGS3(
me->object_usemap = NULL;
me->object_name = NULL;
- me->option.size = 0;
- me->option.growby = 128;
- me->option.allocated = 0;
- me->option.data = NULL;
+ HTChunkInit(&me->option, 128);
me->first_option = TRUE;
me->LastOptionValue = NULL;
me->LastOptionChecked = FALSE;
me->select_disabled = FALSE;
- me->textarea.size = 0;
- me->textarea.growby = 128;
- me->textarea.allocated = 0;
- me->textarea.data = NULL;
+ HTChunkInit(&me->textarea, 128);
me->textarea_name = NULL;
me->textarea_name_cs = -1;
me->textarea_accept_cs = NULL;
@@ -7485,20 +8147,11 @@ PUBLIC HTStructured* HTML_new ARGS3(
me->textarea_disabled = NO;
me->textarea_id = NULL;
- me->math.size = 0;
- me->math.growby = 128;
- me->math.allocated = 0;
- me->math.data = NULL;
+ HTChunkInit(&me->math, 128);
- me->style_block.size = 0;
- me->style_block.growby = 128;
- me->style_block.allocated = 0;
- me->style_block.data = NULL;
+ HTChunkInit(&me->style_block, 128);
- me->script.size = 0;
- me->script.growby = 128;
- me->script.allocated = 0;
- me->script.data = NULL;
+ HTChunkInit(&me->script, 128);
me->text = 0;
me->style_change = YES; /* Force check leading to text creation */
@@ -7564,53 +8217,6 @@ PUBLIC HTStructured* HTML_new ARGS3(
class_string[0] = '\0';
#endif
-#ifdef NOTUSED_FOTEMODS
- /*
- ** If the anchor already has stage info, make sure that it is
- ** appropriate for the current display charset. HTMIMEConvert()
- ** does this for the http and https schemes, and HTCharsetFormat()
- ** does it for the file and and ftp schemes, be we need to do it,
- ** if necessary, for the gateway schemes. - FM
- */
- if (me->node_anchor->UCStages) {
- if (HTAnchor_getUCLYhndl(me->node_anchor,
- UCT_STAGE_STRUCTURED) != current_char_set) {
- /*
- ** We are reloading due to a change in the display character
- ** set. Free the stage info and let the stage info creation
- ** mechanisms create a new UCStages structure appropriate for
- ** the current display character set. - FM
- */
- FREE(anchor->UCStages);
- } else if (HTAnchor_getUCLYhndl(me->node_anchor,
- UCT_STAGE_MIME) == current_char_set) {
- /*
- ** The MIME stage is set to the current display character
- ** set. If it is CJK, and HTCJK does not point to a CJK
- ** character set, assume we are reloading due to a raw
- ** mode toggle and reset the MIME and PARSER stages to
- ** an ISO Latin 1 default. - FM
- */
- LYUCcharset *p_in = HTAnchor_getUCInfoStage(me->node_anchor,
- UCT_STAGE_MIME);
- if (p_in->enc == UCT_ENC_CJK && HTCJK == NOCJK) {
- HTAnchor_resetUCInfoStage(me->node_anchor, LATIN1,
- UCT_STAGE_MIME,
- UCT_SETBY_DEFAULT);
- HTAnchor_setUCInfoStage(me->node_anchor, LATIN1,
- UCT_STAGE_MIME,
- UCT_SETBY_DEFAULT);
- HTAnchor_resetUCInfoStage(me->node_anchor, LATIN1,
- UCT_STAGE_PARSER,
- UCT_SETBY_DEFAULT);
- HTAnchor_setUCInfoStage(me->node_anchor, LATIN1,
- UCT_STAGE_PARSER,
- UCT_SETBY_DEFAULT);
- }
- }
- }
-#endif /* NOTUSED_FOTEMODS */
-
/*
** Create a chartrans stage info structure for the anchor,
** if it does not exist already (in which case the default
@@ -7647,11 +8253,6 @@ PUBLIC HTStructured* HTML_new ARGS3(
UCT_STAGE_STRUCTURED);
me->outUCLYhndl = HTAnchor_getUCLYhndl(me->node_anchor,
UCT_STAGE_STRUCTURED);
-#ifdef NOTUSED_FOTEMODS
- UCSetTransParams(&me->T,
- me->inUCLYhndl, me->inUCI,
- me->outUCLYhndl, me->outUCI);
-#endif
me->target = stream;
if (stream)
@@ -7661,15 +8262,74 @@ PUBLIC HTStructured* HTML_new ARGS3(
}
#ifdef SOURCE_CACHE
+
+/*
+ * A flag set by a file write error. Used for only generating an alert
+ * the first time such an error happens, since Lynx should still be usable
+ * if the temp space becomes full, and an alert each time a cache file
+ * cannot be written would be annoying. Reset when lynx.cfg is being
+ * reloaded (user may change SOURCE_CACHE setting). - kw
+ */
+PUBLIC BOOLEAN source_cache_file_error = FALSE;
+
/*
* Pass-thru cache HTStream
*/
-PRIVATE void CacheThru_free ARGS1(
+PRIVATE void CacheThru_do_free ARGS1(
HTStream *, me)
{
- if (me->fp)
+ if (me->anchor->source_cache_file) {
+ CTRACE((tfp, "SourceCacheWriter: Removing previous file %s\n",
+ me->anchor->source_cache_file));
+ LYRemoveTemp(me->anchor->source_cache_file);
+ FREE(me->anchor->source_cache_file);
+ }
+ if (me->anchor->source_cache_chunk) {
+ CTRACE((tfp, "SourceCacheWriter: Removing previous memory chunk %p\n",
+ (void *)me->anchor->source_cache_chunk));
+ HTChunkFree(me->anchor->source_cache_chunk);
+ me->anchor->source_cache_chunk = NULL;
+ }
+ if (me->fp) {
+ fflush(me->fp);
+ if (ferror(me->fp))
+ me->status = HT_ERROR;
LYCloseTempFP(me->fp);
+ if (me->status == HT_OK) {
+ me->anchor->source_cache_file = me->filename;
+ CTRACE((tfp,
+ "SourceCacheWriter: Committing file %s for URL %s to anchor\n",
+ me->filename, HTAnchor_address((HTAnchor *)me->anchor)));
+ } else {
+ if (source_cache_file_error == FALSE) {
+ HTAlert(gettext("Source cache error - disk full?"));
+ source_cache_file_error = TRUE;
+ }
+ LYRemoveTemp(me->filename);
+ me->anchor->source_cache_file = NULL;
+ }
+ } else if (me->status != HT_OK) {
+ if (me->chunk) {
+ CTRACE((tfp, "SourceCacheWriter: memory chunk %p had errors.\n",
+ me->chunk));
+ HTChunkFree(me->chunk);
+ me->chunk = NULL;
+ }
+ HTAlert(gettext("Source cache error - not enough memory!"));
+ }
+ if (me->chunk) {
+ me->anchor->source_cache_chunk = me->chunk;
+ CTRACE((tfp,
+ "SourceCacheWriter: Committing memory chunk %p for URL %s to anchor\n",
+ (void *)me->chunk, HTAnchor_address((HTAnchor *)me->anchor)));
+ }
+}
+
+PRIVATE void CacheThru_free ARGS1(
+ HTStream *, me)
+{
+ CacheThru_do_free(me);
(*me->actions->_free)(me->target);
FREE(me);
}
@@ -7680,6 +8340,22 @@ PRIVATE void CacheThru_abort ARGS2(
{
if (me->fp)
LYCloseTempFP(me->fp);
+ if (LYCacheSourceForAborted == SOURCE_CACHE_FOR_ABORTED_DROP) {
+ if (me->filename) {
+ CTRACE((tfp, "SourceCacheWriter: Removing active file %s\n",
+ me->filename));
+ LYRemoveTemp(me->filename);
+ FREE(me->filename);
+ }
+ if (me->chunk) {
+ CTRACE((tfp, "SourceCacheWriter: Removing active memory chunk %p\n",
+ (void *)me->chunk));
+ HTChunkFree(me->chunk);
+ }
+ } else {
+ me->status = HT_OK; /*fake it*/
+ CacheThru_do_free(me);
+ }
(*me->actions->_abort)(me->target, e);
FREE(me);
}
@@ -7688,10 +8364,15 @@ PRIVATE void CacheThru_put_character ARGS2(
HTStream *, me,
char, c_in)
{
- if (me->fp)
- fputc(c_in, me->fp);
- else
- HTChunkPutc(me->chunk, c_in);
+ if (me->status == HT_OK) {
+ if (me->fp) {
+ fputc(c_in, me->fp);
+ } else if (me->chunk) {
+ HTChunkPutc(me->chunk, c_in);
+ if (me->chunk->allocated == 0)
+ me->status = HT_ERROR;
+ }
+ }
(*me->actions->put_character)(me->target, c_in);
}
@@ -7699,10 +8380,15 @@ PRIVATE void CacheThru_put_string ARGS2(
HTStream *, me,
CONST char *, str)
{
- if (me->fp)
- fputs(str, me->fp);
- else
- HTChunkPuts(me->chunk, str);
+ if (me->status == HT_OK) {
+ if (me->fp) {
+ fputs(str, me->fp);
+ } else if (me->chunk) {
+ HTChunkPuts(me->chunk, str);
+ if (me->chunk->allocated == 0 && *str)
+ me->status = HT_ERROR;
+ }
+ }
(*me->actions->put_string)(me->target, str);
}
@@ -7711,10 +8397,17 @@ PRIVATE void CacheThru_write ARGS3(
CONST char *, str,
int, l)
{
- if (me->fp)
- fwrite(str, 1, l, me->fp);
- else
- HTChunkPutb(me->chunk, str, l);
+ if (me->status == HT_OK) {
+ if (me->fp) {
+ fwrite(str, 1, l, me->fp);
+ if (ferror(me->fp))
+ me->status = HT_ERROR;
+ } else if (me->chunk) {
+ HTChunkPutb(me->chunk, str, l);
+ if (me->chunk->allocated == 0 && l != 0)
+ me->status = HT_ERROR;
+ }
+ }
(*me->actions->put_block)(me->target, str, l);
}
@@ -7746,7 +8439,7 @@ PRIVATE HTStream* CacheThru_new ARGS2(
/* Only remote HTML documents may benefits from HTreparse_document(), */
/* oh, assume http protocol: */
if (strcmp(p->name, "http") != 0) {
- CTRACE(tfp, "Protocol is \"%s\"; not caching\n", p->name);
+ CTRACE((tfp, "SourceCacheWriter: Protocol is \"%s\"; not caching\n", p->name));
return target;
}
#else
@@ -7758,17 +8451,18 @@ PRIVATE HTStream* CacheThru_new ARGS2(
outofmem(__FILE__, "CacheThru_new");
stream->isa = &PassThruCache;
+ stream->anchor = anchor;
stream->fp = NULL;
+ stream->filename = NULL;
stream->chunk = NULL;
stream->target = target;
stream->actions = target->isa;
+ stream->status = HT_OK;
if (LYCacheSource == SOURCE_CACHE_FILE) {
- if (source_cache_filename) {
- CTRACE(tfp, "Reusing source cache file %s\n",
- source_cache_filename);
- FREE(stream);
- return target;
+ if (anchor->source_cache_file) {
+ CTRACE((tfp, "SourceCacheWriter: If successful, will replace source cache file %s\n",
+ anchor->source_cache_file));
}
/*
@@ -7777,39 +8471,43 @@ PRIVATE HTStream* CacheThru_new ARGS2(
* don't get munged; this way, the file should (knock on wood)
* contain exactly what came in from the network.
*/
- if (!(stream->fp = LYOpenTemp(filename, HTML_SUFFIX, "wb"))) {
- CTRACE(tfp, "Cannot get source cache file for URL %s\n",
- HTAnchor_address((HTAnchor *)anchor));
+ if (!(stream->fp = LYOpenTemp(filename, HTML_SUFFIX, BIN_W))) {
+ CTRACE((tfp, "SourceCacheWriter: Cannot open source cache file for URL %s\n",
+ HTAnchor_address((HTAnchor *)anchor)));
FREE(stream);
return target;
}
- /*
- * Yes, this is a Gross And Disgusting Hack(TM), I know...
- */
- StrAllocCopy(source_cache_filename, filename);
+ StrAllocCopy(stream->filename, filename);
- CTRACE(tfp, "Caching source for URL %s in file %s\n",
- HTAnchor_address((HTAnchor *)anchor), filename);
+ CTRACE((tfp, "SourceCacheWriter: Caching source for URL %s in file %s\n",
+ HTAnchor_address((HTAnchor *)anchor), filename));
}
if (LYCacheSource == SOURCE_CACHE_MEMORY) {
- if (source_cache_chunk) {
- CTRACE(tfp, "Reusing source memory cache %p\n",
- (void *)source_cache_chunk);
- FREE(stream);
- return target;
+ if (anchor->source_cache_chunk) {
+ CTRACE((tfp,
+ "SourceCacheWriter: If successful, will replace memory chunk %p\n",
+ (void *)anchor->source_cache_chunk));
}
- /* I think this is right... */
- source_cache_chunk = stream->chunk = HTChunkCreate(128);
- CTRACE(tfp, "Caching source for URL %s in memory cache %p\n",
- HTAnchor_address((HTAnchor *)anchor), (void *)stream->chunk);
+#ifdef SAVE_TIME_NOT_SPACE
+ stream->chunk = HTChunkCreateMayFail(4096, 1);
+#else
+ stream->chunk = HTChunkCreateMayFail(128, 1);
+#endif
+ if (!stream->chunk) /* failed already? pretty bad... - kw */
+ stream->status = HT_ERROR;
+
+ CTRACE((tfp, "SourceCacheWriter: Caching source for URL %s in memory chunk %p\n",
+ HTAnchor_address((HTAnchor *)anchor), (void *)stream->chunk));
}
return stream;
}
+#else
+#define CacheThru_new(anchor, target) target
#endif
/* HTConverter for HTML to plain text
@@ -7825,13 +8523,9 @@ PUBLIC HTStream* HTMLToPlain ARGS3(
HTParentAnchor *, anchor,
HTStream *, sink)
{
-#ifdef SOURCE_CACHE
return CacheThru_new(anchor,
SGML_new(&HTML_dtd, anchor,
HTML_new(anchor, pres->rep_out, sink)));
-#else
- return SGML_new(&HTML_dtd, anchor, HTML_new(anchor, pres->rep_out, sink));
-#endif
}
/* HTConverter for HTML source to plain text
@@ -7890,13 +8584,9 @@ PUBLIC HTStream* HTMLParsedPresent ARGS3(
}
if (!intermediate)
return NULL;
-#ifdef SOURCE_CACHE
return CacheThru_new(anchor,
SGML_new(&HTML_dtd, anchor,
HTMLGenerator(intermediate)));
-#else
- return SGML_new(&HTML_dtd, anchor, HTMLGenerator(intermediate));
-#endif
}
/* HTConverter for HTML to C code
@@ -7906,7 +8596,7 @@ PUBLIC HTStream* HTMLParsedPresent ARGS3(
** is commented out.
** This will convert from HTML to presentation or plain text.
**
-** It is registered in HTInit.c, but never actually used by lynx.
+** It is registered in HTInit.c, but normally not used by lynx.
** - kw 1999-03-15
*/
PUBLIC HTStream* HTMLToC ARGS3(
@@ -7915,18 +8605,15 @@ PUBLIC HTStream* HTMLToC ARGS3(
HTStream *, sink)
{
HTStructured * html;
-
- (*sink->isa->put_string)(sink, "/* "); /* Before even title */
+ if (sink)
+ (*sink->isa->put_string)(sink, "/* "); /* Before even title */
html = HTML_new(anchor, WWW_PLAINTEXT, sink);
html->comment_start = "/* ";
html->comment_end = " */\n"; /* Must start in col 1 for cpp */
-/* HTML_put_string(html,html->comment_start); */
-#ifdef SOURCE_CACHE
+ if (!sink)
+ HTML_put_string(html,html->comment_start);
return CacheThru_new(anchor,
SGML_new(&HTML_dtd, anchor, html));
-#else
- return SGML_new(&HTML_dtd, anchor, html);
-#endif
}
/* Presenter for HTML
@@ -7943,13 +8630,9 @@ PUBLIC HTStream* HTMLPresent ARGS3(
HTParentAnchor *, anchor,
HTStream *, sink GCC_UNUSED)
{
-#ifdef SOURCE_CACHE
return CacheThru_new(anchor,
SGML_new(&HTML_dtd, anchor,
HTML_new(anchor, WWW_PRESENT, NULL)));
-#else
- return SGML_new(&HTML_dtd, anchor, HTML_new(anchor, WWW_PRESENT, NULL));
-#endif
}
#endif /* !GUI */
@@ -8000,7 +8683,29 @@ PRIVATE char * MakeNewTitle ARGS2(CONST char **, value, int, src_type)
} else {
StrAllocCat(newtitle, ptr + 1);
}
+#ifdef SH_EX /* 1998/04/02 (Thu) 16:02:00 */
+
+ /* for proxy server 1998/12/19 (Sat) 11:53:30 */
+ if (AS_casecomp(newtitle + 1, "internal-gopher-menu") == 0) {
+ StrAllocCopy(newtitle, "+");
+ } else if (AS_casecomp(newtitle + 1, "internal-gopher-unknown") == 0) {
+ StrAllocCopy(newtitle, " ");
+ } else {
+ /* normal title */
+ ptr = strrchr(newtitle, '.');
+ if (ptr) {
+ if (AS_casecomp(ptr, ".gif") == 0)
+ *ptr = '\0';
+ else if (AS_casecomp(ptr, ".jpg") == 0)
+ *ptr = '\0';
+ else if (AS_casecomp(ptr, ".jpeg") == 0)
+ *ptr = '\0';
+ }
+ StrAllocCat(newtitle, "]");
+ }
+#else
StrAllocCat(newtitle, "]");
+#endif
return newtitle;
}
@@ -8027,7 +8732,7 @@ PRIVATE char * MakeNewMapValue ARGS2(CONST char **, value, CONST char*, mapstr)
StrAllocCopy(newtitle, "[");
StrAllocCat(newtitle,mapstr); /* ISMAP or USEMAP */
- if ( verbose_img ) {
+ if ( verbose_img && value[HTML_IMG_SRC] && *value[HTML_IMG_SRC] ) {
StrAllocCat(newtitle,":");
ptr = strrchr(value[HTML_IMG_SRC], '/');
if (!ptr) {
diff --git a/gnu/usr.bin/lynx/src/HTML.h b/gnu/usr.bin/lynx/src/HTML.h
index 690743247ed..81cbfbcc08f 100644
--- a/gnu/usr.bin/lynx/src/HTML.h
+++ b/gnu/usr.bin/lynx/src/HTML.h
@@ -20,13 +20,22 @@
#define ATTR_CS_IN me->tag_charset
#define TRANSLATE_AND_UNESCAPE_ENTITIES(s, p, h) \
- LYUCFullyTranslateString(s, ATTR_CS_IN, current_char_set, YES, p, h, st_HTML)
+ LYUCTranslateHTMLString(s, ATTR_CS_IN, current_char_set, YES, p, h, st_HTML)
#define TRANSLATE_AND_UNESCAPE_ENTITIES5(s,cs_from,cs_to,p,h) \
- LYUCFullyTranslateString(s, cs_from, cs_to, YES, p, h, st_HTML)
+ LYUCTranslateHTMLString(s, cs_from, cs_to, YES, p, h, st_HTML)
#define TRANSLATE_AND_UNESCAPE_ENTITIES6(s,cs_from,cs_to,spcls,p,h) \
- LYUCFullyTranslateString(s, cs_from, cs_to, spcls, p, h, st_HTML)
+ LYUCTranslateHTMLString(s, cs_from, cs_to, spcls, p, h, st_HTML)
+
+#define TRANSLATE_HTML(s,p,h) \
+ LYUCFullyTranslateString(s, me->UCLYhndl, current_char_set, NO, YES, p, h, NO, st_HTML)
+
+#define TRANSLATE_HTML5(s,cs_from,cs_to,p,h) \
+ LYUCFullyTranslateString(s, cs_from, cs_to, NO, YES, p, h, NO, st_HTML)
+
+#define TRANSLATE_HTML7(s,cs_from,cs_to,spcls,p,h,Back) \
+ LYUCFullyTranslateString(s, cs_from, cs_to, NO, spcls, p, h, Back, st_HTML)
/*
* Strings from attributes which should be converted to some kind
@@ -34,9 +43,9 @@
* esp. URLs (incl. #fragments) and HTML NAME and ID stuff.
*/
#define TRANSLATE_AND_UNESCAPE_TO_STD(s) \
- LYUCFullyTranslateString(s, ATTR_CS_IN, ATTR_CS_IN, NO, NO, YES, st_URL)
+ LYUCTranslateHTMLString(s, ATTR_CS_IN, ATTR_CS_IN, NO, NO, YES, st_URL)
#define UNESCAPE_FIELDNAME_TO_STD(s) \
- LYUCFullyTranslateString(s, ATTR_CS_IN, ATTR_CS_IN, NO, NO, YES, st_HTML)
+ LYUCTranslateHTMLString(s, ATTR_CS_IN, ATTR_CS_IN, NO, NO, YES, st_HTML)
extern CONST HTStructuredClass HTMLPresentation;
@@ -84,6 +93,8 @@ struct _HTStructured {
char * object_codebase;
char * object_codetype;
char * object_name;
+ int objects_mixed_open,
+ objects_figged_open;
HTChunk option; /* Grow by 128 */
BOOL first_option; /* First OPTION in SELECT? */
char * LastOptionValue;
@@ -161,6 +172,7 @@ struct _HTStructured {
BOOL needBoldH;
+ char * xinclude; /* if no include strin address passed */
/*
** UCI and UCLYhndl give the UCInfo and charset registered for
** the HTML parser in the node_anchor's UCStages structure. It
@@ -204,6 +216,7 @@ struct _HTStructured {
};
extern HTStyle *LYstyles PARAMS((int style_number));
+extern BOOL LYBadHTML PARAMS((HTStructured *me));
/*
* Semi-Private functions. - FM
diff --git a/gnu/usr.bin/lynx/src/HTNestedList.h b/gnu/usr.bin/lynx/src/HTNestedList.h
index 32a3049bc9c..75d83a70eb1 100644
--- a/gnu/usr.bin/lynx/src/HTNestedList.h
+++ b/gnu/usr.bin/lynx/src/HTNestedList.h
@@ -37,4 +37,9 @@
#define HTML_DLEFT HTML_ELEMENTS+29
#define HTML_DRIGHT HTML_ELEMENTS+30
+
+#define HTML_OBJECT_M HTML_ELEMENTS+31
+
+#define LYNX_HTML_EXTRA_ELEMENTS 31
+
#endif /* HTNESTEDLIST_H */
diff --git a/gnu/usr.bin/lynx/src/LYBookmark.c b/gnu/usr.bin/lynx/src/LYBookmark.c
index 5c4de52e23a..f5a5d911a13 100644
--- a/gnu/usr.bin/lynx/src/LYBookmark.c
+++ b/gnu/usr.bin/lynx/src/LYBookmark.c
@@ -11,6 +11,7 @@
#include <LYCharSets.h> /* need for LYHaveCJKCharacterSet */
#include <LYCurses.h>
#include <GridText.h>
+#include <HTCJK.h>
#ifdef VMS
#include <nam.h>
@@ -24,6 +25,24 @@ PUBLIC char *MBM_A_subdescript[MBM_V_MAXFILES+1];
PRIVATE BOOLEAN is_mosaic_hotlist = FALSE;
PRIVATE char * convert_mosaic_bookmark_file PARAMS((char *filename_buffer));
+PUBLIC int LYindex2MBM ARGS1(int, n)
+{
+ static char MBMcodes[MBM_V_MAXFILES+2] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ return n >= 0 && n <= MBM_V_MAXFILES ? MBMcodes[n] : '?';
+}
+
+PUBLIC int LYMBM2index ARGS1(int, ch)
+{
+ if ((ch = TOUPPER(ch)) > 0) {
+ char *letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+ char *result = strchr(letters, ch);
+ if (result != 0
+ && (result - letters) <= MBM_V_MAXFILES)
+ return (result - letters);
+ }
+ return -1;
+}
+
PRIVATE void
show_bookmark_not_defined NOARGS
{
@@ -91,39 +110,32 @@ PUBLIC char * get_bookmark_filename ARGS1(
LYAddPathToHome(filename_buffer,
sizeof(filename_buffer),
BookmarkPage);
- CTRACE(tfp, "\nget_bookmark_filename: SEEKING %s\n AS %s\n\n",
- BookmarkPage, filename_buffer);
- if ((fp = fopen(filename_buffer,"r")) != NULL) {
- goto success;
- }
-
- /*
- * Failure.
- */
- return(NULL);
-
-success:
- /*
- * We now have the file open.
- * Check if it is a mosaic hotlist.
- */
- if (LYSafeGets(&string_buffer, fp) != 0
- && !strncmp(string_buffer, "ncsa-xmosaic-hotlist-format-1", 29)) {
- char *newname;
+ CTRACE((tfp, "\nget_bookmark_filename: SEEKING %s\n AS %s\n\n",
+ BookmarkPage, filename_buffer));
+ if ((fp = fopen(filename_buffer, TXT_R)) != NULL) {
/*
- * It is a mosaic hotlist file.
+ * We now have the file open.
+ * Check if it is a mosaic hotlist.
*/
- is_mosaic_hotlist = TRUE;
- newname = convert_mosaic_bookmark_file(filename_buffer);
- LYLocalFileToURL(URL, newname);
- } else {
- is_mosaic_hotlist = FALSE;
- LYLocalFileToURL(URL, filename_buffer);
- }
- FREE(string_buffer);
- fclose(fp);
+ if (LYSafeGets(&string_buffer, fp) != 0
+ && !strncmp(string_buffer, "ncsa-xmosaic-hotlist-format-1", 29)) {
+ char *newname;
+ /*
+ * It is a mosaic hotlist file.
+ */
+ is_mosaic_hotlist = TRUE;
+ newname = convert_mosaic_bookmark_file(filename_buffer);
+ LYLocalFileToURL(URL, newname);
+ } else {
+ is_mosaic_hotlist = FALSE;
+ LYLocalFileToURL(URL, filename_buffer);
+ }
+ FREE(string_buffer);
+ LYCloseInput(fp);
- return(filename_buffer); /* bookmark file exists */
+ return(filename_buffer); /* bookmark file exists */
+ }
+ return(NULL);
} /* big end */
@@ -143,11 +155,11 @@ PRIVATE char * convert_mosaic_bookmark_file ARGS1(
LYRemoveTemp(newfile);
if ((nfp = LYOpenTemp(newfile, HTML_SUFFIX, "w")) == NULL) {
LYMBM_statusline(NO_TEMP_FOR_HOTLIST);
- sleep(AlertSecs);
+ LYSleepAlert();
return ("");
}
- if ((fp = fopen(filename_buffer, "r")) == NULL)
+ if ((fp = fopen(filename_buffer, TXT_R)) == NULL)
return (""); /* should always open */
fprintf(nfp,"<head>\n<title>%s</title>\n</head>\n",MOSAIC_BOOKMARK_TITLE);
@@ -162,6 +174,11 @@ PRIVATE char * convert_mosaic_bookmark_file ARGS1(
endline = &buf[strlen(buf)-1];
if(*endline == '\n')
*endline = '\0';
+#ifdef DOSPATH /* 1998/01/10 (Sat) 15:41:35 */
+ endline = strchr(buf, '\r');
+ if (endline == NULL)
+ *endline = '\0';
+#endif
if((line % 2) == 0) { /* even lines */
if(*buf != '\0') {
strtok(buf," "); /* kill everything after the space */
@@ -175,7 +192,7 @@ PRIVATE char * convert_mosaic_bookmark_file ARGS1(
line++;
}
LYCloseTempFP(nfp);
- fclose(fp);
+ LYCloseInput(fp);
return(newfile);
}
@@ -200,6 +217,7 @@ PUBLIC void save_bookmark_link ARGS2(
char *bookmark_URL = NULL;
char filename_buffer[LY_MAXPATH];
char string_buffer[BUFSIZ];
+ char tmp_buffer[BUFSIZ];
char *Address = NULL;
char *Title = NULL;
int i, c;
@@ -237,7 +255,7 @@ PUBLIC void save_bookmark_link ARGS2(
FREE(bookmark_URL);
return;
}
- strcpy(filename_buffer, filename);
+ LYstrncpy(filename_buffer, filename, sizeof(filename_buffer)-1);
}
/*
@@ -253,13 +271,13 @@ PUBLIC void save_bookmark_link ARGS2(
* If the link will be added to the same
* bookmark file, get confirmation. - FM
*/
- if (LYMultiBookmarks == TRUE &&
+ if (LYMultiBookmarks != MBM_OFF &&
strstr(HTLoadedDocumentURL(),
(*BookmarkPage == '.' ?
(BookmarkPage+1) : BookmarkPage)) != NULL) {
LYMBM_statusline(MULTIBOOKMARKS_SELF);
- c = LYgetch();
- if (TOUPPER(c) != 'L') {
+ c = LYgetch_single();
+ if (c != 'L') {
FREE(bookmark_URL);
return;
}
@@ -269,13 +287,27 @@ PUBLIC void save_bookmark_link ARGS2(
* Allow user to change the title. - FM
*/
do {
- LYstrncpy(string_buffer, title, sizeof(string_buffer)-1);
+ if (HTCJK == JAPANESE) {
+ switch(kanji_code) {
+ case EUC:
+ TO_EUC((CONST unsigned char *) title, (unsigned char *) tmp_buffer);
+ break;
+ case SJIS:
+ TO_SJIS((CONST unsigned char *) title, (unsigned char *) tmp_buffer);
+ break;
+ default:
+ break;
+ }
+ LYstrncpy(string_buffer, tmp_buffer, sizeof(string_buffer)-1);
+ } else {
+ LYstrncpy(string_buffer, title, sizeof(string_buffer)-1);
+ }
convert_to_spaces(string_buffer, FALSE);
LYMBM_statusline(TITLE_PROMPT);
LYgetstr(string_buffer, VISIBLE, sizeof(string_buffer), NORECALL);
if (*string_buffer == '\0') {
LYMBM_statusline(CANCELLED);
- sleep(MessageSecs);
+ LYSleepMsg();
FREE(bookmark_URL);
return;
}
@@ -290,7 +322,7 @@ PUBLIC void save_bookmark_link ARGS2(
* from display character set which may need changing.
* Do NOT convert any 8-bit chars if we have CJK display. - LP
*/
- StrAllocCopy(Title, string_buffer);
+ LYformTitle(&Title, string_buffer);
LYEntify(&Title, TRUE);
if (UCSaveBookmarksInUnicode &&
have8bit(Title) && (!LYHaveCJKCharacterSet)) {
@@ -312,11 +344,11 @@ PUBLIC void save_bookmark_link ARGS2(
sizeof(filename_buffer),
BookmarkPage);
}
- CTRACE(tfp, "\nsave_bookmark_link: SEEKING %s\n AS %s\n\n",
- BookmarkPage, filename_buffer);
- if ((fp = fopen(filename_buffer, (first_time ? "w" : "a+"))) == NULL) {
+ CTRACE((tfp, "\nsave_bookmark_link: SEEKING %s\n AS %s\n\n",
+ BookmarkPage, filename_buffer));
+ if ((fp = fopen(filename_buffer, (first_time ? TXT_W : TXT_A))) == NULL) {
LYMBM_statusline(BOOKMARK_OPEN_FAILED);
- sleep(AlertSecs);
+ LYSleepAlert();
FREE(Title);
FREE(bookmark_URL);
return;
@@ -333,10 +365,23 @@ PUBLIC void save_bookmark_link ARGS2(
* Once and forever...
*/
if (first_time) {
- fprintf(fp,"<head>\n");
+ fprintf(fp, "<head>\n");
+#if defined(SH_EX) && !defined(_WINDOWS) /* 1997/12/11 (Thu) 19:13:40 */
+ if (HTCJK != JAPANESE)
+ LYAddMETAcharsetToFD(fp, -1);
+ else
+ fprintf(fp, "<META %s %s>\n",
+ "http-equiv=\"content-type\"",
+ "content=\"text/html;charset=iso-2022-jp\"");
+#else
LYAddMETAcharsetToFD(fp, -1);
+#endif /* !_WINDOWS */
fprintf(fp,"<title>%s</title>\n</head>\n", BOOKMARK_TITLE);
- fprintf(fp, "%s<br>\n%s\n\n<!--\n%s\n-->\n\n<p>\n<ol>",
+#ifdef _WINDOWS
+ fprintf(fp,
+ gettext(" You can delete links by the 'R' key<br>\n<ol>\n"));
+#else
+ fprintf(fp, "%s<br>\n%s\n\n<!--\n%s\n-->\n\n<p>\n<ol>\n",
gettext("\
You can delete links using the remove bookmark command. It is usually\n\
the 'R' key but may have been remapped by you or your system\n\
@@ -349,6 +394,7 @@ Note: if you edit this file manually\n\
you should not change the format within the lines\n\
or add other HTML markup.\n\
Make sure any bookmark link is saved as a single line."));
+#endif /* _WINDOWS */
}
/*
@@ -364,7 +410,7 @@ Note: if you edit this file manually\n\
} else {
fprintf(fp,"<LI><a href=\"%s\">%s</a>\n", Address, Title);
}
- fclose(fp);
+ LYCloseOutput(fp);
SetDefaultMode(O_BINARY);
/*
@@ -400,7 +446,7 @@ Note: if you edit this file manually\n\
FREE(Address);
FREE(bookmark_URL);
LYMBM_statusline(OPERATION_DONE);
- sleep(MessageSecs);
+ LYSleepMsg();
}
/*
@@ -420,31 +466,36 @@ PUBLIC void remove_bookmark_link ARGS2(
#ifdef VMS
char filename_buffer[NAM$C_MAXRSS+12];
char newfile[NAM$C_MAXRSS+12];
+#define keep_tempfile FALSE
#else
char filename_buffer[LY_MAXPATH];
char newfile[LY_MAXPATH];
+ BOOLEAN keep_tempfile = FALSE;
+#ifdef UNIX
struct stat stat_buf;
mode_t mode;
+ BOOLEAN regular = FALSE;
+#endif /* UNIX */
#endif /* VMS */
char homepath[LY_MAXPATH];
- CTRACE(tfp, "remove_bookmark_link: deleting link number: %d\n", cur);
+ CTRACE((tfp, "remove_bookmark_link: deleting link number: %d\n", cur));
if (!cur_bookmark_page)
return;
LYAddPathToHome(filename_buffer,
sizeof(filename_buffer),
cur_bookmark_page);
- CTRACE(tfp, "\nremove_bookmark_link: SEEKING %s\n AS %s\n\n",
- cur_bookmark_page, filename_buffer);
- if ((fp = fopen(filename_buffer, "r")) == NULL) {
+ CTRACE((tfp, "\nremove_bookmark_link: SEEKING %s\n AS %s\n\n",
+ cur_bookmark_page, filename_buffer));
+ if ((fp = fopen(filename_buffer, TXT_R)) == NULL) {
HTAlert(BOOKMARK_OPEN_FAILED_FOR_DEL);
return;
}
LYAddPathToHome(homepath, sizeof(homepath), "");
if ((nfp = LYOpenScratch(newfile, homepath)) == 0) {
- fclose(fp);
+ LYCloseInput(fp);
HTAlert(BOOKSCRA_OPEN_FAILED_FOR_DEL);
return;
}
@@ -454,10 +505,11 @@ PUBLIC void remove_bookmark_link ARGS2(
* Explicitly preserve bookmark file mode on Unix. - DSL
*/
if (stat(filename_buffer, &stat_buf) == 0) {
+ regular = (S_ISREG(stat_buf.st_mode) && stat_buf.st_nlink == 1);
mode = ((stat_buf.st_mode & 0777) | 0600); /* make it writable */
(void) chmod(newfile, mode);
if ((nfp = LYReopenTemp(newfile)) == NULL) {
- (void) fclose(fp);
+ (void) LYCloseInput(fp);
HTAlert(BOOKTEMP_REOPEN_FAIL_FOR_DEL);
return;
}
@@ -476,15 +528,19 @@ PUBLIC void remove_bookmark_link ARGS2(
}
} else {
- char *cp;
+ char *cp, *cp2;
BOOLEAN retain;
int seen;
n = -1;
while (LYSafeGets(&buf, fp) != NULL) {
+ int keep_ol = FALSE;
retain = TRUE;
seen = 0;
cp = buf;
+ if ((cur == 0) && (cp2 = LYstrstr(cp,"<ol><LI>")))
+ keep_ol = TRUE; /* Do not erase, this corrects a bug in an
+ older version */
while (n < cur && (cp = LYstrstr(cp, "<a href="))) {
seen++;
if (++n == cur) {
@@ -493,7 +549,9 @@ PUBLIC void remove_bookmark_link ARGS2(
HTAlert(BOOKMARK_LINK_NOT_ONE_LINE);
goto failure;
}
- CTRACE(tfp, "remove_bookmark_link: skipping link %d\n", n);
+ CTRACE((tfp, "remove_bookmark_link: skipping link %d\n", n));
+ if (keep_ol)
+ fprintf(nfp,"<ol>\n");
retain = FALSE;
}
cp += 8;
@@ -503,11 +561,16 @@ PUBLIC void remove_bookmark_link ARGS2(
}
}
- CTRACE(tfp, "remove_bookmark_link: files: %s %s\n",
- newfile, filename_buffer);
+ FREE(buf);
+ CTRACE((tfp, "remove_bookmark_link: files: %s %s\n",
+ newfile, filename_buffer));
- fclose(fp);
+ LYCloseInput(fp);
fp = NULL;
+ if (fflush(nfp) == EOF) {
+ CTRACE((tfp, "fflush(nfp): %s", LYStrerror(errno)));
+ goto failure;
+ }
LYCloseTempFP(nfp);
nfp = NULL;
#ifdef DOSPATH
@@ -520,12 +583,39 @@ PUBLIC void remove_bookmark_link ARGS2(
* can preserve the original ownership of the file, provided that
* it is writable by the current process.
* Changed to copy 1998-04-26 -- gil
+ * But if the copy fails, for example because the filesystem is full,
+ * we are left with a corrupt bookmark file. Changed back to use
+ * the previous mechanism [try rename(), then mv for EXDEV], except
+ * in usual cases (not a regular file e.g., symbolic link, or has hard
+ * links). This will let bookmarks survive a filesystem full condition
+ * in the "normal" case (bookmark is on same filesystem as home directory,
+ * is a regular file, has no additional hard links).
+ * If we first tried LYCopyFile, and that fails, also fall back to trying
+ * the other stuff. That gives a chance to recover in case the LYCopyFile
+ * left a corrupt target file.
+ * If there is an error, and that error may mean that the bookmark file
+ * has been corrupted, don't remove the temporary newfile (which should
+ * always be uncorrupted) in place, it may still be used to recover
+ * manually. If this applies, produce an additional message to that
+ * effect. The temp file will still be removed by normal program exit
+ * cleanup. - kw 1999-11-12
*/
- if (LYCopyFile(newfile, filename_buffer) == 0)
- return;
- HTAlert(BOOKTEMP_COPY_FAIL);
-#else /* !UNIX */
+ if (!regular) {
+ if (LYCopyFile(newfile, filename_buffer) == 0) {
+ LYRemoveTemp(newfile);
+ return;
+ }
+ LYSleepAlert(); /* give a chance to see error from cp - kw */
+ HTUserMsg(BOOKTEMP_COPY_FAIL);
+ keep_tempfile = TRUE;
+ }
+#endif /* UNIX */
+
if (rename(newfile, filename_buffer) != -1) {
+#ifdef UNIX
+ if (regular)
+ chmod(filename_buffer, stat_buf.st_mode & 07777);
+#endif /* UNIX */
HTSYS_purge(filename_buffer);
return;
} else {
@@ -535,22 +625,41 @@ PUBLIC void remove_bookmark_link ARGS2(
* Check if this is the case and do something appropriate.
* Used to be ODD_RENAME
*/
-#ifdef _WINDOWS
+#if defined(_WINDOWS) || defined(WIN_EX)
+#if defined(WIN_EX)
+ if (GetLastError() == ERROR_NOT_SAME_DEVICE)
+#else /* !_WIN_EX */
if (errno == ENOTSAM)
-#else
- if (errno == EXDEV)
-#endif /* WINDOWS */
+#endif /* _WIN_EX */
{
+ if (rename(newfile, filename_buffer) != 0) {
+ if (LYCopyFile(newfile, filename_buffer) == 0)
+ remove(newfile);
+ }
+ }
+#else
+ if (errno == EXDEV) {
static CONST char MV_FMT[] = "%s %s %s";
char *buffer = 0;
HTAddParam(&buffer, MV_FMT, 1, MV_PATH);
HTAddParam(&buffer, MV_FMT, 2, newfile);
HTAddParam(&buffer, MV_FMT, 3, filename_buffer);
HTEndParam(&buffer, MV_FMT, 3);
- LYSystem(buffer);
- FREE(buffer);
- return;
+ if (LYSystem(buffer) == 0) {
+#ifdef UNIX
+ if (regular)
+ chmod(filename_buffer, stat_buf.st_mode & 07777);
+#endif /* UNIX */
+ FREE(buffer);
+ return;
+ } else {
+ FREE(buffer);
+ keep_tempfile = TRUE;
+ goto failure;
+ }
}
+ CTRACE((tfp, "rename(): %s", LYStrerror(errno)));
+#endif /* _WINDOWS */
#endif /* !VMS */
#ifdef VMS
@@ -561,15 +670,21 @@ PUBLIC void remove_bookmark_link ARGS2(
if (TRACE)
perror("renaming the file");
}
-#endif /* UNIX */
+
failure:
FREE(buf);
HTAlert(BOOKMARK_DEL_FAILED);
- LYCloseTempFP(nfp);
+ if (nfp)
+ LYCloseTempFP(nfp);
if (fp != NULL)
- fclose(fp);
- LYRemoveTemp(newfile);
+ LYCloseInput(fp);
+ if (keep_tempfile) {
+ HTUserMsg2(gettext("File may be recoverable from %s during this session"),
+ newfile);
+ } else {
+ LYRemoveTemp(newfile);
+ }
}
/*
@@ -582,7 +697,7 @@ PUBLIC int select_multi_bookmarks NOARGS
/*
* If not enabled, pick the "default" (0).
*/
- if (LYMultiBookmarks == FALSE || LYHaveSubBookmarks() == FALSE) {
+ if (LYMultiBookmarks == MBM_OFF || LYHaveSubBookmarks() == FALSE) {
if (MBM_A_subbookmark[0]) /* If it exists! */
return(0);
else
@@ -594,18 +709,17 @@ PUBLIC int select_multi_bookmarks NOARGS
* the 2 redraws of the screen, if LYMBMAdvnced is TRUE. '=' will
* still show the screen and let them do it the "long" way.
*/
- if (LYMBMAdvanced && user_mode == ADVANCED_MODE) {
+ if (LYMultiBookmarks == MBM_ADVANCED && user_mode == ADVANCED_MODE) {
LYMBM_statusline(MULTIBOOKMARKS_SELECT);
get_advanced_choice:
c = LYgetch();
#ifdef VMS
if (HadVMSInterrupt) {
HadVMSInterrupt = FALSE;
- c = 7;
+ c = LYCharINTERRUPT2;
}
#endif /* VMS */
- if (LYisNonAlnumKeyname(c, LYK_PREV_DOC) ||
- c == 7 || c == 3) {
+ if (LYisNonAlnumKeyname(c, LYK_PREV_DOC) || LYCharIsINTERRUPT(c)) {
/*
* Treat left-arrow, ^G, or ^C as cancel.
*/
@@ -616,7 +730,7 @@ get_advanced_choice:
* Refresh the screen.
*/
lynx_force_repaint();
- refresh();
+ LYrefresh();
goto get_advanced_choice;
}
if (LYisNonAlnumKeyname(c, LYK_ACTIVATE)) {
@@ -637,8 +751,7 @@ get_advanced_choice:
* Convert to an array index, act on it if valid.
* Otherwise, get another keystroke.
*/
- c = TOUPPER(c) - 'A';
- if (c < 0 || c > MBM_V_MAXFILES) {
+ if ((c = LYMBM2index(c)) < 0) {
goto get_advanced_choice;
}
}
@@ -659,20 +772,18 @@ get_advanced_choice:
*/
PUBLIC int select_menu_multi_bookmarks NOARGS
{
- int c, MBM_tmp_count, MBM_allow;
+ int c, d, MBM_tmp_count, MBM_allow;
int MBM_screens, MBM_from, MBM_to, MBM_current;
/*
* If not enabled, pick the "default" (0).
*/
- if (LYMultiBookmarks == FALSE)
+ if (LYMultiBookmarks == MBM_OFF)
return(0);
/*
* Filip M. Gieszczykiewicz (filipg@paranoia.com) & FM
* ---------------------------------------------------
- * LYMultiBookmarks - TRUE when multi_support enabled.
- *
* MBM_A_subbookmark[n] - Hold values of the respective
* "multi_bookmarkn" in the lynxrc file.
*
@@ -708,137 +819,128 @@ PUBLIC int select_menu_multi_bookmarks NOARGS
MBM_current = 1; /* Gotta start somewhere :-) */
-draw_bookmark_choices:
- MBM_from = MBM_allow * MBM_current - MBM_allow;
- if (MBM_from < 0)
- MBM_from = 0; /* 0 is default bookmark... */
- if (MBM_current != 1)
- MBM_from++;
+ for (;;) {
+ MBM_from = MBM_allow * MBM_current - MBM_allow;
+ if (MBM_from < 0)
+ MBM_from = 0; /* 0 is default bookmark... */
+ if (MBM_current != 1)
+ MBM_from++;
- MBM_to = (MBM_allow * MBM_current);
- if (MBM_to > MBM_V_MAXFILES)
- MBM_to = MBM_V_MAXFILES;
+ MBM_to = (MBM_allow * MBM_current);
+ if (MBM_to > MBM_V_MAXFILES)
+ MBM_to = MBM_V_MAXFILES;
- /*
- * Display menu of bookmarks. NOTE that we avoid printw()'s
- * to increase the chances that any non-ASCII or multibyte/CJK
- * characters will be handled properly. - FM
- */
- clear();
- move(1, 5);
- lynx_start_h1_color ();
- if (MBM_screens > 1) {
- char *shead_buffer = 0;
- HTSprintf0(&shead_buffer,
- MULTIBOOKMARKS_SHEAD_MASK, MBM_current, MBM_screens);
- addstr(shead_buffer);
- FREE(shead_buffer);
- } else {
- addstr(MULTIBOOKMARKS_SHEAD);
- }
-
- lynx_stop_h1_color ();
-
- MBM_tmp_count = 0;
- for (c = MBM_from; c <= MBM_to; c++) {
- move(3+MBM_tmp_count, 5);
- addch((unsigned char)(c + 'A'));
- addstr(" : ");
- if (MBM_A_subdescript[c])
- addstr(MBM_A_subdescript[c]);
- move(3+MBM_tmp_count,36);
- addch('(');
- if (MBM_A_subbookmark[c])
- addstr(MBM_A_subbookmark[c]);
- addch(')');
- MBM_tmp_count++;
- }
-
- /*
- * Don't need to show it if it all fits on one screen!
- */
- if (MBM_screens > 1) {
- move(LYlines-2, 0);
- addstr("'");
- standout();
- addstr("[");
- standend();
- addstr("' ");
- addstr(PREVIOUS);
- addstr(", '");
- standout();
- addstr("]");
- standend();
- addstr("' ");
- addstr(NEXT_SCREEN);
- }
-
- LYMBM_statusline(MULTIBOOKMARKS_SAVE);
-get_bookmark_choice:
- c = LYgetch();
-#ifdef VMS
- if (HadVMSInterrupt) {
- HadVMSInterrupt = FALSE;
- c = 7;
- }
-#endif /* VMS */
-
- if (LYisNonAlnumKeyname(c, LYK_PREV_DOC) ||
- c == 7 || c == 3) {
/*
- * Treat left-arrow, ^G, or ^C as cancel.
+ * Display menu of bookmarks. NOTE that we avoid printw()'s
+ * to increase the chances that any non-ASCII or multibyte/CJK
+ * characters will be handled properly. - FM
*/
- return(-2);
- }
+ LYclear();
+ LYmove(1, 5);
+ lynx_start_h1_color ();
+ if (MBM_screens > 1) {
+ char *shead_buffer = 0;
+ HTSprintf0(&shead_buffer,
+ MULTIBOOKMARKS_SHEAD_MASK, MBM_current, MBM_screens);
+ LYaddstr(shead_buffer);
+ FREE(shead_buffer);
+ } else {
+ LYaddstr(MULTIBOOKMARKS_SHEAD);
+ }
- if (LYisNonAlnumKeyname(c, LYK_REFRESH)) {
- /*
- * Refresh the screen.
- */
- lynx_force_repaint();
- refresh();
- goto get_bookmark_choice;
- }
+ lynx_stop_h1_color ();
+
+ MBM_tmp_count = 0;
+ for (c = MBM_from; c <= MBM_to; c++) {
+ LYmove(3+MBM_tmp_count, 5);
+ LYaddch(LYindex2MBM(c));
+ LYaddstr(" : ");
+ if (MBM_A_subdescript[c])
+ LYaddstr(MBM_A_subdescript[c]);
+ LYmove(3+MBM_tmp_count,36);
+ LYaddch('(');
+ if (MBM_A_subbookmark[c])
+ LYaddstr(MBM_A_subbookmark[c]);
+ LYaddch(')');
+ MBM_tmp_count++;
+ }
- if (LYisNonAlnumKeyname(c, LYK_ACTIVATE)) {
/*
- * Assume default bookmark file on ENTER or right-arrow.
+ * Don't need to show it if it all fits on one screen!
*/
- return(MBM_A_subbookmark[0] ? 0 : -1);
- }
+ if (MBM_screens > 1) {
+ LYmove(LYlines-2, 0);
+ LYaddstr("'");
+ start_bold();
+ LYaddstr("[");
+ stop_bold();
+ LYaddstr("' ");
+ LYaddstr(PREVIOUS);
+ LYaddstr(", '");
+ start_bold();
+ LYaddstr("]");
+ stop_bold();
+ LYaddstr("' ");
+ LYaddstr(NEXT_SCREEN);
+ }
- /*
- * Next range, if available.
- */
- if ((c == ']' || LYisNonAlnumKeyname(c, LYK_NEXT_PAGE)) &&
- MBM_screens > 1) {
- if (++MBM_current > MBM_screens)
- MBM_current = 1;
- goto draw_bookmark_choices;
- }
+ LYMBM_statusline(MULTIBOOKMARKS_SAVE);
- /*
- * Previous range, if available.
- */
- if ((c == '[' || LYisNonAlnumKeyname(c, LYK_PREV_PAGE)) &&
- MBM_screens > 1) {
- if (--MBM_current <= 0)
- MBM_current = MBM_screens;
- goto draw_bookmark_choices;
- }
+ for (;;) {
+ c = LYgetch();
+#ifdef VMS
+ if (HadVMSInterrupt) {
+ HadVMSInterrupt = FALSE;
+ c = 7;
+ }
+#endif /* VMS */
- c = TOUPPER(c) - 'A';
- /*
- * See if we have a bookmark like that.
- */
- if (c < 0 || c > MBM_V_MAXFILES) {
- goto get_bookmark_choice;
- } else if (!MBM_A_subbookmark[c]) {
- show_bookmark_not_defined();
- LYMBM_statusline(MULTIBOOKMARKS_SAVE);
- goto get_bookmark_choice;
- } else {
- return(c);
+ if ((d = LYMBM2index(c)) >= 0) {
+ /*
+ * See if we have a bookmark like that.
+ */
+ if (MBM_A_subbookmark[d] != NULL)
+ return(d);
+
+ show_bookmark_not_defined();
+ LYMBM_statusline(MULTIBOOKMARKS_SAVE);
+ } else if (LYisNonAlnumKeyname(c, LYK_PREV_DOC) ||
+ c == 7 || c == 3) {
+ /*
+ * Treat left-arrow, ^G, or ^C as cancel.
+ */
+ return(-2);
+ } else if (LYisNonAlnumKeyname(c, LYK_REFRESH)) {
+ /*
+ * Refresh the screen.
+ */
+ lynx_force_repaint();
+ LYrefresh();
+ } else if (LYisNonAlnumKeyname(c, LYK_ACTIVATE)) {
+ /*
+ * Assume default bookmark file on ENTER or right-arrow.
+ */
+ return(MBM_A_subbookmark[0] ? 0 : -1);
+ } else if ((c == ']' || LYisNonAlnumKeyname(c, LYK_NEXT_PAGE)) &&
+ MBM_screens > 1) {
+ /*
+ * Next range, if available.
+ */
+ if (++MBM_current > MBM_screens)
+ MBM_current = 1;
+ break;
+ }
+
+ else if ((c == '[' || LYisNonAlnumKeyname(c, LYK_PREV_PAGE)) &&
+ MBM_screens > 1) {
+ /*
+ * Previous range, if available.
+ */
+ if (--MBM_current <= 0)
+ MBM_current = MBM_screens;
+ break;
+ }
+ }
}
}
@@ -862,7 +964,7 @@ PUBLIC BOOLEAN LYHaveSubBookmarks NOARGS
/*
* This function passes a string to _statusline(), making
* sure it is at the bottom of the screen if LYMultiBookmarks
- * is TRUE, otherwise, letting it go to the normal statusline
+ * is not MBM_OFF, otherwise, letting it go to the normal statusline
* position based on the current user mode. We want to use
* _statusline() so that any multibyte/CJK characters in the
* string will be handled properly. - FM
@@ -870,7 +972,7 @@ PUBLIC BOOLEAN LYHaveSubBookmarks NOARGS
PUBLIC void LYMBM_statusline ARGS1(
char *, text)
{
- if (LYMultiBookmarks == TRUE && user_mode == NOVICE_MODE) {
+ if (LYMultiBookmarks != MBM_OFF && user_mode == NOVICE_MODE) {
LYStatusLine = (LYlines - 1);
_statusline(text);
LYStatusLine = -1;
@@ -889,7 +991,7 @@ PRIVATE BOOLEAN havevisible ARGS1(CONST char *, Title)
long unicode;
for ( ; *p; p++) {
- c = (unsigned char)(TOASCII(*p));
+ c = UCH(TOASCII(*p));
if (c > 32 && c < 127)
return(TRUE);
if (c <= 32 || c == 127)
@@ -916,7 +1018,7 @@ PRIVATE BOOLEAN have8bit ARGS1(CONST char *, Title)
CONST char *p = Title;
for ( ; *p; p++) {
- if ((unsigned char)*p > 127)
+ if (UCH(*p) > 127)
return(TRUE);
}
return(FALSE); /* if we came here */
@@ -955,7 +1057,7 @@ PRIVATE char* title_convert8bit ARGS1(CONST char *, Title)
for ( ; *p; p++) {
char temp[2];
LYstrncpy(temp, p, sizeof(temp)-1);
- if ((unsigned char)*temp <= 127) {
+ if (UCH(*temp) <= 127) {
StrAllocCat(comment, temp);
StrAllocCat(ncr, temp);
} else {
@@ -980,7 +1082,7 @@ PRIVATE char* title_convert8bit ARGS1(CONST char *, Title)
* skip '>'.
*/
for (q = p0 = comment; *p0; p0++) {
- if ((unsigned char)(TOASCII(*p0)) >= 32 &&
+ if (UCH(TOASCII(*p0)) >= 32 &&
*p0 != '>' &&
(q == comment || *p0 != '-' || *(q-1) != '-')) {
*q++ = *p0;
@@ -1000,3 +1102,21 @@ PRIVATE char* title_convert8bit ARGS1(CONST char *, Title)
FREE(ncr);
return(buf);
}
+
+/*
+ * Since this is the "Default Bookmark File", we save it as a global, and as
+ * the first MBM_A_subbookmark entry.
+ */
+PUBLIC void set_default_bookmark_page ARGS1(
+ char *, value)
+{
+ if (value != 0) {
+ if (bookmark_page == 0
+ || strcmp(bookmark_page, value)) {
+ StrAllocCopy(bookmark_page, value);
+ }
+ StrAllocCopy(BookmarkPage, bookmark_page);
+ StrAllocCopy(MBM_A_subbookmark[0], bookmark_page);
+ StrAllocCopy(MBM_A_subdescript[0], MULTIBOOKMARKS_DEFAULT);
+ }
+}
diff --git a/gnu/usr.bin/lynx/src/LYBookmark.h b/gnu/usr.bin/lynx/src/LYBookmark.h
index e4898c71ca8..681777e5f5d 100644
--- a/gnu/usr.bin/lynx/src/LYBookmark.h
+++ b/gnu/usr.bin/lynx/src/LYBookmark.h
@@ -6,13 +6,16 @@
#include <LYStructs.h>
#endif /* LYSTRUCTS_H */
+extern BOOLEAN LYHaveSubBookmarks NOPARAMS;
extern char * get_bookmark_filename PARAMS((char **name));
-extern void save_bookmark_link PARAMS((char *address, char *title));
-extern void remove_bookmark_link PARAMS((int cur, char *cur_bookmark_page));
-extern int select_multi_bookmarks NOPARAMS;
+extern int LYMBM2index PARAMS((int ch));
+extern int LYindex2MBM PARAMS((int n));
extern int select_menu_multi_bookmarks NOPARAMS;
-extern BOOLEAN LYHaveSubBookmarks NOPARAMS;
+extern int select_multi_bookmarks NOPARAMS;
extern void LYMBM_statusline PARAMS((char *text));
+extern void remove_bookmark_link PARAMS((int cur, char *cur_bookmark_page));
+extern void save_bookmark_link PARAMS((char *address, char *title));
+extern void set_default_bookmark_page PARAMS((char * value));
#endif /* LYBOOKMARK_H */
diff --git a/gnu/usr.bin/lynx/src/LYCgi.c b/gnu/usr.bin/lynx/src/LYCgi.c
index 9e0bfce059f..cbd8ed05c1e 100644
--- a/gnu/usr.bin/lynx/src/LYCgi.c
+++ b/gnu/usr.bin/lynx/src/LYCgi.c
@@ -45,10 +45,7 @@
#include <LYLocal.h>
#include <LYLeaks.h>
-
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
+#include <www_wait.h>
struct _HTStream
{
@@ -68,7 +65,7 @@ PRIVATE char *post_len = NULL;
PRIVATE void add_environment_value PARAMS((char *env_value));
-#define PERROR(msg) CTRACE(tfp, "LYNXCGI: %s: %s\n", msg, LYStrerror(errno))
+#define PERROR(msg) CTRACE((tfp, "LYNXCGI: %s: %s\n", msg, LYStrerror(errno)))
#ifdef LY_FIND_LEAKS
PRIVATE void free_alloced_lynxcgi NOARGS
@@ -137,14 +134,7 @@ PUBLIC void add_lynxcgi_environment ARGS1(
if (env_value != NULL) {
char *add_value = NULL;
- add_value = (char *)malloc(strlen(variable_name) +
- strlen(env_value) + 2);
- if (add_value == NULL) {
- outofmem(__FILE__, "LYCgi");
- }
- strcpy(add_value, variable_name);
- strcat(add_value, "=");
- strcat(add_value, env_value);
+ HTSprintf0(&add_value, "%s=%s", variable_name, env_value);
add_environment_value(add_value);
remember_alloced(add_value);
}
@@ -208,7 +198,7 @@ PRIVATE int LYLoadCGI ARGS4(
while (statrv < 0 || (statrv = stat(pgm_buff, &stat_buf)) < 0) {
if ((cp=strrchr(pgm_buff, '/')) != NULL) {
*cp = '\0';
- statrv = 999; /* force new stat() - kw */
+ statrv = 1; /* force new stat() - kw */
} else {
PERROR("strrchr(pgm_buff, '/') returned NULL");
break;
@@ -220,10 +210,15 @@ PRIVATE int LYLoadCGI ARGS4(
PERROR("stat() of pgm_buff failed");
} else {
/* Found PATH_INFO data. Strip it off of pgm and into path_info. */
- StrAllocCopy(path_info, pgm+strlen(pgm_buff));
+ StrAllocCopy(path_info, pgm + strlen(pgm_buff));
+ /* The following is safe since pgm_buff was derived from pgm
+ by stripping stuff off its end and by HTUnEscaping, so we
+ know we have enough memory allocated for pgm. Note that
+ pgm_args may still point into that memory, so we cannot
+ reallocate pgm here. - kw */
strcpy(pgm, pgm_buff);
- CTRACE(tfp, "LYNXCGI: stat() of %s succeeded, path_info=\"%s\".\n",
- pgm_buff, path_info);
+ CTRACE((tfp, "LYNXCGI: stat() of %s succeeded, path_info=\"%s\".\n",
+ pgm_buff, path_info));
}
FREE(pgm_buff);
}
@@ -238,8 +233,13 @@ PRIVATE int LYLoadCGI ARGS4(
PERROR("stat() failed");
status = -4;
- } else if (!(S_ISREG(stat_buf.st_mode) &&
- stat_buf.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH))) {
+ } else
+#ifdef _WINDOWS /* 1998/01/14 (Wed) 09:16:04 */
+#define isExecutable(mode) (mode & (S_IXUSR))
+#else
+#define isExecutable(mode) (mode & (S_IXUSR|S_IXGRP|S_IXOTH))
+#endif
+ if (!(S_ISREG(stat_buf.st_mode) && isExecutable(stat_buf.st_mode))) {
/*
* Not a runnable file, See if we can load it using "file:" code.
*/
@@ -251,8 +251,8 @@ PRIVATE int LYLoadCGI ARGS4(
* to confusing to know just what file is loaded. - kw
*/
if (path_info) {
- CTRACE(tfp, "%s is not a file and %s not an executable, giving up.\n",
- orig_pgm, pgm);
+ CTRACE((tfp, "%s is not a file and %s not an executable, giving up.\n",
+ orig_pgm, pgm));
FREE(path_info);
FREE(pgm);
FREE(orig_pgm);
@@ -262,7 +262,7 @@ PRIVATE int LYLoadCGI ARGS4(
LYLocalFileToURL (&new_arg, orig_pgm);
- CTRACE(tfp, "%s is not an executable file, passing the buck.\n", arg);
+ CTRACE((tfp, "%s is not an executable file, passing the buck.\n", arg));
status = HTLoadFile(new_arg, anAnchor, format_out, sink);
FREE(new_arg);
@@ -392,10 +392,10 @@ PRIVATE int LYLoadCGI ARGS4(
close(fd1[0]);
/* We have form data to push across the pipe */
- CTRACE(tfp, "LYNXCGI: Doing post, content-type '%s'\n",
- anAnchor->post_content_type);
- CTRACE(tfp, "LYNXCGI: Writing:\n%s----------------------------------\n",
- anAnchor->post_data);
+ CTRACE((tfp, "LYNXCGI: Doing post, content-type '%s'\n",
+ anAnchor->post_content_type));
+ CTRACE((tfp, "LYNXCGI: Writing:\n%s----------------------------------\n",
+ anAnchor->post_data));
remaining = strlen(anAnchor->post_data);
while ((written = write(fd1[1],
anAnchor->post_data + total_written,
@@ -412,16 +412,16 @@ PRIVATE int LYLoadCGI ARGS4(
PERROR("write() of POST data failed");
break;
}
- CTRACE(tfp, "LYNXCGI: Wrote %d bytes of POST data.\n",
- written);
+ CTRACE((tfp, "LYNXCGI: Wrote %d bytes of POST data.\n",
+ written));
total_written += written;
remaining -= written;
if (remaining == 0)
break;
}
if (remaining != 0) {
- CTRACE(tfp, "LYNXCGI: %d bytes remain unwritten!\n",
- remaining);
+ CTRACE((tfp, "LYNXCGI: %d bytes remain unwritten!\n",
+ remaining));
}
close(fd1[1]);
}
@@ -441,7 +441,7 @@ PRIVATE int LYLoadCGI ARGS4(
break;
}
HTReadProgress(total_chars += chars, 0);
- CTRACE(tfp, "LYNXCGI: Rx: %.*s\n", chars, buf);
+ CTRACE((tfp, "LYNXCGI: Rx: %.*s\n", chars, buf));
(*target->isa->put_block)(target, buf, chars);
}
@@ -647,7 +647,8 @@ PRIVATE int LYLoadCGI ARGS4(
format_out,
sink, anAnchor);
- HTSprintf0(&buf, "<head>\n<title>%s</title>\n</head>\n<body>\n", gettext("Good Advice"));
+ HTSprintf0(&buf, "<html>\n<head>\n<title>%s</title>\n</head>\n<body>\n",
+ gettext("Good Advice"));
(*target->isa->put_block)(target, buf, strlen(buf));
HTSprintf0(&buf, "<h1>%s</h1>\n", gettext("Good Advice"));
@@ -667,7 +668,7 @@ PRIVATE int LYLoadCGI ARGS4(
gettext("It provides state of the art CGI script support.\n"));
(*target->isa->put_block)(target, buf, strlen(buf));
- HTSprintf0(&buf,"</body>\n");
+ HTSprintf0(&buf,"</body>\n</html>\n");
(*target->isa->put_block)(target, buf, strlen(buf));
(*target->isa->_free)(target);
diff --git a/gnu/usr.bin/lynx/src/LYCharSets.c b/gnu/usr.bin/lynx/src/LYCharSets.c
index e58cc37e1cc..4e96b57641f 100644
--- a/gnu/usr.bin/lynx/src/LYCharSets.c
+++ b/gnu/usr.bin/lynx/src/LYCharSets.c
@@ -6,7 +6,6 @@
#include <UCMap.h>
#include <UCDefs.h>
#include <LYCharSets.h>
-#include <HTFont.h>
#include <GridText.h>
#include <LYCurses.h>
#include <LYStrings.h>
@@ -17,11 +16,10 @@ extern BOOL HTPassEightBitRaw;
extern BOOL HTPassEightBitNum;
extern BOOL HTPassHighCtrlRaw;
extern BOOL HTPassHighCtrlNum;
-extern HTCJKlang HTCJK;
PUBLIC HTkcode kanji_code = NOKANJI;
PUBLIC BOOLEAN LYHaveCJKCharacterSet = FALSE;
PUBLIC BOOLEAN DisplayCharsetMatchLocale = TRUE;
-PUBLIC BOOL force_old_UCLYhndl_on_reload;
+PUBLIC BOOL force_old_UCLYhndl_on_reload = FALSE;
PUBLIC int forced_UCLYhdnl;
extern void UCInit NOARGS;
extern int UCInitialized;
@@ -30,6 +28,19 @@ PUBLIC int current_char_set = -1; /* will be intitialized later in LYMain.c */
PUBLIC CONST char** p_entity_values = NULL; /* Pointer, for HTML_put_entity()*/
/* obsolete and probably not used(???) */
/* will be initialized in HTMLUseCharacterSet */
+#ifdef EXP_CHARSET_CHOICE
+PUBLIC charset_subset_t charset_subsets[MAXCHARSETS];
+PUBLIC BOOL custom_display_charset = FALSE;
+PUBLIC BOOL custom_assumed_doc_charset = FALSE;
+#ifndef ALL_CHARSETS_IN_O_MENU_SCREEN
+PUBLIC int display_charset_map[MAXCHARSETS];
+PUBLIC int assumed_doc_charset_map[MAXCHARSETS];
+
+PUBLIC CONST char* display_charset_choices[MAXCHARSETS+1];
+PUBLIC CONST char* assumed_charset_choices[MAXCHARSETS+1];
+PUBLIC int displayed_display_charset_idx;
+#endif
+#endif /* EXP_CHARSET_CHOICE */
/*
* New character sets now declared with UCInit() in UCdomap.c
@@ -406,19 +417,19 @@ PUBLIC void HTMLSetCharacterHandling ARGS1(int,i)
if (i == chndl)
LYRawMode = LYUseDefaultRawMode;
else
- LYRawMode = (!LYUseDefaultRawMode);
+ LYRawMode = (BOOL) (!LYUseDefaultRawMode);
- HTPassEightBitNum =
+ HTPassEightBitNum = (BOOL) (
((LYCharSet_UC[i].codepoints & UCT_CP_SUPERSETOF_LAT1) ||
- (LYCharSet_UC[i].like8859 & UCT_R_HIGH8BIT));
+ (LYCharSet_UC[i].like8859 & UCT_R_HIGH8BIT)));
if (LYRawMode) {
- HTPassEightBitRaw = (LYlowest_eightbit[i] <= 160);
+ HTPassEightBitRaw = (BOOL) (LYlowest_eightbit[i] <= 160);
} else {
HTPassEightBitRaw = FALSE;
}
if (LYRawMode || i == chndl) {
- HTPassHighCtrlRaw = (LYlowest_eightbit[i] <= 130);
+ HTPassHighCtrlRaw = (BOOL) (LYlowest_eightbit[i] <= 130);
} else {
HTPassHighCtrlRaw = FALSE;
}
@@ -448,10 +459,10 @@ PUBLIC void HTMLSetCharacterHandling ARGS1(int,i)
/* for any CJK: */
if (!LYUseDefaultRawMode)
HTCJK = NOCJK;
- LYRawMode = (HTCJK != NOCJK) ? TRUE : FALSE;
+ LYRawMode = (BOOL) ((HTCJK != NOCJK) ? TRUE : FALSE);
HTPassEightBitRaw = FALSE;
HTPassEightBitNum = FALSE;
- HTPassHighCtrlRaw = (HTCJK != NOCJK) ? TRUE : FALSE;
+ HTPassHighCtrlRaw = (BOOL) ((HTCJK != NOCJK) ? TRUE : FALSE);
HTPassHighCtrlNum = FALSE;
}
@@ -484,18 +495,18 @@ PUBLIC void HTMLSetCharacterHandling ARGS1(int,i)
}
#endif /* USE_SLANG */
- ena_csi((LYlowest_eightbit[current_char_set] > 155));
+ ena_csi((BOOLEAN)(LYlowest_eightbit[current_char_set] > 155));
/* some diagnostics */
if (TRACE) {
if (LYRawMode_flag != LYRawMode)
- CTRACE(tfp, "HTMLSetCharacterHandling: LYRawMode changed %s -> %s\n",
+ CTRACE((tfp, "HTMLSetCharacterHandling: LYRawMode changed %s -> %s\n",
(LYRawMode_flag ? "ON" : "OFF"),
- (LYRawMode ? "ON" : "OFF"));
+ (LYRawMode ? "ON" : "OFF")));
if (UCLYhndl_for_unspec_flag != UCLYhndl_for_unspec)
- CTRACE(tfp, "HTMLSetCharacterHandling: UCLYhndl_for_unspec changed %d -> %d\n",
+ CTRACE((tfp, "HTMLSetCharacterHandling: UCLYhndl_for_unspec changed %d -> %d\n",
UCLYhndl_for_unspec_flag,
- UCLYhndl_for_unspec);
+ UCLYhndl_for_unspec));
}
return;
@@ -542,7 +553,7 @@ PUBLIC void Set_HTCJK ARGS2(
*/
PRIVATE void HTMLSetRawModeDefault ARGS1(int,i)
{
- LYDefaultRawMode = (LYCharSet_UC[i].enc == UCT_ENC_CJK);
+ LYDefaultRawMode = (BOOL) (LYCharSet_UC[i].enc == UCT_ENC_CJK);
return;
}
@@ -561,7 +572,7 @@ PUBLIC void HTMLSetUseDefaultRawMode ARGS2(
if (i == chndl)
LYUseDefaultRawMode = modeflag;
else
- LYUseDefaultRawMode = (!modeflag);
+ LYUseDefaultRawMode = (BOOL) (!modeflag);
} else /* CJK encoding: */
LYUseDefaultRawMode = modeflag;
@@ -574,7 +585,7 @@ PUBLIC void HTMLSetUseDefaultRawMode ARGS2(
*/
PRIVATE void HTMLSetHaveCJKCharacterSet ARGS1(int,i)
{
- LYHaveCJKCharacterSet = (LYCharSet_UC[i].enc == UCT_ENC_CJK);
+ LYHaveCJKCharacterSet = (BOOL) (LYCharSet_UC[i].enc == UCT_ENC_CJK);
return;
}
@@ -608,7 +619,12 @@ PRIVATE void HTMLSetDisplayCharsetMatchLocale ARGS1(int,i)
match = TRUE; /* guess, but see below */
#if !defined(LOCALE)
- match = FALSE;
+ if (LYCharSet_UC[i].enc != UCT_ENC_UTF8)
+ /*
+ * Leave true for utf-8 display - the code doesn't deal
+ * very well with this case. - kw
+ */
+ match = FALSE;
#else
if (UCForce8bitTOUPPER) {
/*
@@ -829,7 +845,7 @@ PUBLIC CONST char * HTMLGetEntityName ARGS1(
UCode_t, code)
{
#define IntValue code
- int MaxValue = ((sizeof(LYEntityNames)/sizeof(char **)) - 1);
+ int MaxValue = (TABLESIZE(LYEntityNames) - 1);
if (IntValue < 0 || IntValue > MaxValue) {
return "";
@@ -859,7 +875,7 @@ PUBLIC UCode_t HTMLGetEntityUCValue ARGS1(
UCode_t value = 0;
size_t i, high, low;
int diff = 0;
- size_t number_of_unicode_entities = sizeof(unicode_entities)/sizeof(unicode_entities[0]);
+ size_t number_of_unicode_entities = TABLESIZE(unicode_entities);
/*
* Make sure we have a non-zero length name. - FM
@@ -904,9 +920,43 @@ PUBLIC void HTMLUseCharacterSet ARGS1(int, i)
* Initializer, calls initialization function for the
* CHARTRANS handling. - KW
*/
-PUBLIC int LYCharSetsDeclared NOPARAMS
+PUBLIC int LYCharSetsDeclared NOARGS
{
UCInit();
return UCInitialized;
}
+
+#ifdef EXP_CHARSET_CHOICE
+PUBLIC void init_charset_subsets NOARGS
+{
+ int i,n;
+ int cur_display = 0;
+ int cur_assumed = 0;
+
+ /* add them to displayed values */
+ charset_subsets[UCLYhndl_for_unspec].hide_assumed = FALSE;
+ charset_subsets[current_char_set].hide_display = FALSE;
+
+#ifndef ALL_CHARSETS_IN_O_MENU_SCREEN
+ /*all this stuff is for supporting old menu screen... */
+ for (i = 0; i < LYNumCharsets; ++i){
+ if (charset_subsets[i].hide_display == FALSE) {
+ n = cur_display++;
+ if (i == current_char_set)
+ displayed_display_charset_idx = n;
+ display_charset_map[n] = i;
+ display_charset_choices[n] = LYchar_set_names[i];
+ }
+ if (charset_subsets[i].hide_assumed == FALSE) {
+ n = cur_assumed++;
+ assumed_doc_charset_map[n] = i;
+ assumed_charset_choices[n] = LYCharSet_UC[i].MIMEname;
+ charset_subsets[i].assumed_idx = n;
+ }
+ display_charset_choices[cur_display] = NULL;
+ assumed_charset_choices[cur_assumed] = NULL;
+ }
+#endif
+}
+#endif /* EXP_CHARSET_CHOICE */
diff --git a/gnu/usr.bin/lynx/src/LYCharSets.h b/gnu/usr.bin/lynx/src/LYCharSets.h
index 1f21db0f50a..709c016012d 100644
--- a/gnu/usr.bin/lynx/src/LYCharSets.h
+++ b/gnu/usr.bin/lynx/src/LYCharSets.h
@@ -14,6 +14,9 @@
extern BOOLEAN LYHaveCJKCharacterSet;
extern BOOLEAN DisplayCharsetMatchLocale;
+#include <HTCJK.h>
+extern HTkcode kanji_code;
+
/*
* currently active character set (internal handler)
*/
@@ -47,8 +50,76 @@ extern CONST char * HTMLGetEntityName PARAMS((UCode_t code));
** the code. Note that unicode number in general may have
** several equivalent entity names because of synonyms.
*/
-
-
extern BOOL force_old_UCLYhndl_on_reload;
extern int forced_UCLYhdnl;
+
+#ifndef EXP_CHARSET_CHOICE
+# define ALL_CHARSETS_IN_O_MENU_SCREEN 1
+#endif
+
+#ifdef EXP_CHARSET_CHOICE
+typedef struct {
+ BOOL hide_display; /* if FALSE, show in "display-charset" menu */
+ BOOL hide_assumed; /* if FALSE, show in "assumed-charset" menu */
+#ifndef ALL_CHARSETS_IN_O_MENU_SCREEN
+ int assumed_idx; /* only this field is needed */
+#endif
+} charset_subset_t;
+/* each element corresponds to charset in LYCharSets */
+extern charset_subset_t charset_subsets[];
+/* all zeros by default - i.e., all charsets allowed */
+
+extern BOOL custom_display_charset; /* whether the charset choices for display
+ charset were requested by user via lynx.cfg. It will remain FALSE if no
+ "display_charset_choice" settings were encountered in lynx.cfg */
+extern BOOL custom_assumed_doc_charset; /* similar to custom_display_charset */
+
+#ifndef ALL_CHARSETS_IN_O_MENU_SCREEN
+
+/* this stuff is initialized after reading lynx.cfg and .lynxrc */
+
+/* these arrays maps index of charset shown in menu to the index in LYCharsets[]*/
+extern int display_charset_map[];
+extern int assumed_doc_charset_map[];
+
+/* these arrays are NULL terminated */
+extern CONST char* display_charset_choices[];
+extern CONST char* assumed_charset_choices[];
+
+extern int displayed_display_charset_idx;
+
+#endif
+/* this will be called after lynx.cfg and .lynxrc are read */
+extern void init_charset_subsets NOPARAMS;
+#endif /* EXP_CHARSET_CHOICE */
+
+#if !defined(NO_AUTODETECT_DISPLAY_CHARSET)
+# ifdef __EMX__
+# define CAN_AUTODETECT_DISPLAY_CHARSET
+# ifdef EXP_CHARTRANS_AUTOSWITCH
+# define CAN_SWITCH_DISPLAY_CHARSET
+# endif
+# endif
+#endif
+
+#ifdef CAN_AUTODETECT_DISPLAY_CHARSET
+extern int auto_display_charset;
+#endif
+
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+enum switch_display_charset_t {
+ SWITCH_DISPLAY_CHARSET_MAYBE,
+ SWITCH_DISPLAY_CHARSET_REALLY,
+ SWITCH_DISPLAY_CHARSET_SIZECHANGE
+};
+extern int Switch_Display_Charset PARAMS((int ord, enum switch_display_charset_t really));
+extern int Find_Best_Display_Charset PARAMS((int ord));
+extern char *charsets_directory;
+extern char *charset_switch_rules;
+extern int switch_display_charsets;
+extern int auto_other_display_charset;
+extern int codepages[2];
+extern int real_charsets[2]; /* Non "auto-" charsets for the codepages */
+#endif
+
#endif /* LYCHARSETS_H */
diff --git a/gnu/usr.bin/lynx/src/LYCharUtils.c b/gnu/usr.bin/lynx/src/LYCharUtils.c
index 717409ce3bb..8c5ae7df415 100644
--- a/gnu/usr.bin/lynx/src/LYCharUtils.c
+++ b/gnu/usr.bin/lynx/src/LYCharUtils.c
@@ -25,7 +25,6 @@
#include <LYCharSets.h>
#include <HTAlert.h>
-#include <HTFont.h>
#include <HTForms.h>
#include <HTNestedList.h>
#include <GridText.h>
@@ -43,8 +42,6 @@ extern BOOL HTPassEightBitRaw;
extern BOOL HTPassEightBitNum;
extern BOOL HTPassHighCtrlRaw;
extern BOOL HTPassHighCtrlNum;
-extern HTkcode kanji_code;
-extern HTCJKlang HTCJK;
/*
* Used for nested lists. - FM
@@ -65,6 +62,12 @@ PUBLIC void LYEntify ARGS2(
char *p = *str;
char *q = NULL, *cp = NULL;
int amps = 0, lts = 0, gts = 0;
+#ifdef CJK_EX
+ enum _state
+ { S_text, S_esc, S_dollar, S_paren,
+ S_nonascii_text, S_dollar_paren } state = S_text;
+ int in_sjis = 0;
+#endif
if (p == NULL || *p == '\0')
return;
@@ -108,11 +111,94 @@ PUBLIC void LYEntify ARGS2(
/*
* Allocate space and convert. - FM
*/
- q = (char *)calloc(1,
- (strlen(*str) + (4 * amps) + (3 * lts) + (3 * gts) + 1));
+ q = typecallocn(char,
+ (strlen(*str) + (4 * amps) + (3 * lts) + (3 * gts) + 1));
if ((cp = q) == NULL)
outofmem(__FILE__, "LYEntify");
for (p = *str; *p; p++) {
+#ifdef CJK_EX
+ if (HTCJK != NOCJK) {
+ switch(state) {
+ case S_text:
+ if (*p == '\033') {
+ state = S_esc;
+ *q++ = *p;
+ continue;
+ }
+ break;
+
+ case S_esc:
+ if (*p == '$') {
+ state = S_dollar;
+ *q++ = *p;
+ continue;
+ } else if (*p == '(') {
+ state = S_paren;
+ *q++ = *p;
+ continue;
+ } else {
+ state = S_text;
+ *q++ = *p;
+ continue;
+ }
+
+ case S_dollar:
+ if (*p == '@' || *p == 'B' || *p == 'A') {
+ state = S_nonascii_text;
+ *q++ = *p;
+ continue;
+ } else if (*p == '(') {
+ state = S_dollar_paren;
+ *q++ = *p;
+ continue;
+ } else {
+ state = S_text;
+ *q++ = *p;
+ continue;
+ }
+
+ case S_dollar_paren:
+ if (*p == 'C') {
+ state = S_nonascii_text;
+ *q++ = *p;
+ continue;
+ } else {
+ state = S_text;
+ *q++ = *p;
+ continue;
+ }
+
+ case S_paren:
+ if (*p == 'B' || *p == 'J' || *p =='T') {
+ state = S_text;
+ *q++ = *p;
+ continue;
+ } else if (*p == 'I') {
+ state = S_nonascii_text;
+ *q++ = *p;
+ continue;
+ }
+ /* FALLTHRU */
+
+ case S_nonascii_text:
+ if (*p == '\033')
+ state = S_esc;
+ *q++ = *p;
+ continue;
+
+ default:
+ break;
+ }
+ if (*(p+1) != '\0' &&
+ (IS_EUC(UCH(*p), UCH(*(p+1))) ||
+ IS_SJIS(UCH(*p), UCH(*(p+1)), in_sjis) ||
+ IS_BIG5(UCH(*p), UCH(*(p+1))))) {
+ *q++ = *p++;
+ *q++ = *p;
+ continue;
+ }
+ }
+#endif
if (*p == '&') {
*q++ = '&';
*q++ = 'a';
@@ -133,8 +219,9 @@ PUBLIC void LYEntify ARGS2(
*q++ = *p;
}
}
- StrAllocCopy(*str, cp);
- FREE(cp);
+ *q = '\0';
+ FREE(*str);
+ *str = cp;
}
/*
@@ -150,7 +237,7 @@ PUBLIC void LYTrimHead ARGS1(
if (!str || *str == '\0')
return;
- while (str[i] != '\0' && WHITE(str[i]) && (unsigned char)str[i] != (unsigned char)CH_ESC) /* S/390 -- gil -- 1669 */
+ while (str[i] != '\0' && WHITE(str[i]) && UCH(str[i]) != UCH(CH_ESC)) /* S/390 -- gil -- 1669 */
i++;
if (i > 0) {
for (j = 0; str[i] != '\0'; i++) {
@@ -271,7 +358,7 @@ PUBLIC char *LYFindEndOfComment ARGS1(
return cp;
if (*cp == '-') {
state = start1;
- } else if (!(WHITE(*cp) && (unsigned char)*cp != (unsigned char)CH_ESC)) { /* S/390 -- gil -- 1686 */
+ } else if (!(WHITE(*cp) && UCH(*cp) != UCH(CH_ESC))) { /* S/390 -- gil -- 1686 */
/*
* Invalid comment, so return the first
* '>' from the start of the string. - FM
@@ -304,7 +391,7 @@ PUBLIC char *LYFindEndOfComment ARGS1(
*/
PUBLIC void LYFillLocalFileURL ARGS2(
char **, href,
- CONST char *, base)
+ CONST char *, base)
{
char * temp = NULL;
@@ -367,7 +454,8 @@ PUBLIC void LYFillLocalFileURL ARGS2(
char curdir[LY_MAXPATH];
temp2 = wwwName(Current_Dir(curdir));
#endif /* VMS */
- LYAddHtmlSep(href);
+ if (!LYIsHtmlSep(*temp2))
+ LYAddHtmlSep(href);
/*
* Check for pathological cases - current dir has chars which
* MUST BE URL-escaped - kw
@@ -387,7 +475,7 @@ PUBLIC void LYFillLocalFileURL ARGS2(
* a listing for the login directory. - FM
*/
if (!strcmp(*href, "file://localhost/"))
- StrAllocCat(*href, (HTVMS_wwwName((char *)Home_Dir())+1));
+ StrAllocCat(*href, (HTVMS_wwwName(Home_Dir())+1));
#endif /* VMS */
FREE(temp);
@@ -421,7 +509,7 @@ PUBLIC void LYFillLocalFileURL ARGS2(
** - LP
*/
PUBLIC void LYAddMETAcharsetToFD ARGS2(
- FILE *, fd,
+ FILE *, fd,
int, disp_chndl)
{
if (disp_chndl == -1)
@@ -525,11 +613,12 @@ PUBLIC char *LYLowercaseA_OL_String ARGS1(
/*
** This function returns OL TYPE="I" strings in the
** range of " I." (1) to "MMM." (3000).- FM
+** Maximum length: 16 -TD
*/
PUBLIC char *LYUppercaseI_OL_String ARGS1(
int, seqnum)
{
- static char OLstring[8];
+ static char OLstring[20];
int Arabic = seqnum;
if (Arabic >= 3000) {
@@ -659,11 +748,12 @@ PUBLIC char *LYUppercaseI_OL_String ARGS1(
/*
** This function returns OL TYPE="i" strings in
** range of " i." (1) to "mmm." (3000).- FM
+** Maximum length: 16 -TD
*/
PUBLIC char *LYLowercaseI_OL_String ARGS1(
int, seqnum)
{
- static char OLstring[8];
+ static char OLstring[20];
int Arabic = seqnum;
if (Arabic >= 3000) {
@@ -794,7 +884,7 @@ PUBLIC char *LYLowercaseI_OL_String ARGS1(
** This function initializes the Ordered List counter. - FM
*/
PUBLIC void LYZero_OL_Counter ARGS1(
- HTStructured *, me)
+ HTStructured *, me)
{
int i;
@@ -816,7 +906,7 @@ PUBLIC void LYZero_OL_Counter ARGS1(
** This function is used by the HTML Structured object. - KW
*/
PUBLIC void LYGetChartransInfo ARGS1(
- HTStructured *, me)
+ HTStructured *, me)
{
me->UCLYhndl = HTAnchor_getUCLYhndl(me->node_anchor,
UCT_STAGE_STRUCTURED);
@@ -839,624 +929,6 @@ PUBLIC void LYGetChartransInfo ARGS1(
UCT_STAGE_STRUCTURED);
}
-#ifdef NOTUSED_FOTEMODS
-/*
-** This function reallocates an allocated string and converts
-** characters for the current display character set. It assumes
-** that invalid control characters have been dealt with by the
-** SGML (or other initial) parser of the document input stream
-** (i.e., are present only if elements or global flags have been
-** set to allow them), and that otherwise this is a copy of the
-** string with the charset of the input stream. It handles Lynx
-** special characters based on the 'me' structure's element values
-** (the me->UsePlainSpace and me->HiddenValue elements, and its
-** chartrans related elements), and calls to other functions which
-** return structure element values. HTChunk functions are used to
-** keep memory allocations at a minimum. - FM
-*/
-PUBLIC void LYExpandString ARGS2(
- HTStructured *, me,
- char **, str)
-{
- char *p = *str;
- HTChunk *s;
- BOOLEAN plain_space, hidden;
- char c;
- unsigned char c_unsign;
- char saved_char_in = '\0';
- BOOLEAN chk;
- UCode_t code, uck;
- char replace_buf [64];
- char utf_buf[8], utf_count = 0;
- char *utf_buf_p = utf_buf;
- UCode_t utf_char = 0, value;
- CONST char *name;
- int i, j, high, low, diff = 0;
-
- /*
- ** Don't do anything if we have no structure
- ** or string, or are in CJK mode. - FM
- */
- if (!me || !p || *p == '\0' ||
- HTCJK != NOCJK)
- return;
-
- /*
- ** Set "convenience copies" of me structure
- ** elements. - FM
- */
- plain_space = me->UsePlainSpace;
- hidden = me->HiddenValue;
-
- /*
- ** Check for special input charsets - FM
- */
- if (!strcmp(me->inUCI->MIMEname, "x-transparent")) {
- /*
- ** Conversions not intended. - FM
- */
- return;
- }
- if (!strcmp(me->inUCI->MIMEname, "mnemonic") ||
- !strcmp(me->inUCI->MIMEname, "mnemonic+ascii+0")) {
- /*
- ** All ASCII representations of Unicode characters,
- ** and we have no reverse translation code for the
- ** multibyte characters, so punt. - FM
- */
- return;
- }
- if (me->inUCLYhndl < 0 || me->outUCLYhndl < 0) {
- /*
- ** The chartrans procedure failed, so we don't
- ** do anything, and hope for the best. - FM
- */
- CTRACE(tfp, "LYExpandString: Bad in (%d) or out (%d) handle(s).\n",
- me->inUCLYhndl, me->outUCLYhndl);
- return;
- }
-
- /*
- ** Zero the UTF-8 multibytes buffer. - FM
- */
- utf_buf[0] = utf_buf[6] = utf_buf[7] = '\0';
-
- /*
- ** Set up an HTChunk for accumulating the expanded copy
- ** of the string, so that allocations are done in 128
- ** byte increments, only as required. - FM
- */
- s = HTChunkCreate(128);
-
- /*
- ** Check each character in the original string,
- ** and add the characters or substitutions to
- ** our clean copy. - FM
- */
- for (i = 0; p[i]; i++) {
- /*
- ** Make sure the character is handled as Unicode
- ** whenever that's appropriate. - FM
- */
- c = p[i];
- c_unsign = (unsigned char)c;
- code = (UCode_t)c_unsign;
- saved_char_in = '\0';
- /*
- ** Combine any UTF-8 multibytes into Unicode
- ** to check for special characters. - FM
- */
- if (me->T.decode_utf8) {
- /*
- ** Our input charset is UTF-8, so check
- ** for non-ASCII characters. - FM
- */
- if (TOASCII(c_unsign) > 127) { /* S/390 -- gil -- 1703 */
- /*
- ** We have an octet from a multibyte character. - FM
- */
- if (utf_count > 0 && (c & 0xc0) == 0x80) {
- /*
- ** Adjust the UCode_t value, add the octet
- ** to the buffer, and decrement the byte
- ** count. - FM
- */
- utf_char = (utf_char << 6) | (c & 0x3f);
- utf_count--;
- *utf_buf_p = c;
- utf_buf_p++;
- if (utf_count == 0) {
- /*
- ** We have all of the bytes, so terminate
- ** the buffer and set 'code' to the UCode_t
- ** value. - FM
- */
- *utf_buf_p = '\0';
- code = utf_char;
- /*
- ** Set up the monobyte character
- ** values or non-character flags
- ** and fall through. - FM
- */
- if (code > 0 && code < 256) {
- c = ((char)(code & 0xff));
- c_unsign = (unsigned char)c;
- }
- } else {
- /*
- ** Get the next byte. - FM
- */
- continue;
- }
- } else {
- /*
- ** Start handling a new multibyte character. - FM
- */
- utf_buf[0] = c;
- utf_buf_p = &utf_buf[1];
- if ((c & 0xe0) == 0xc0) {
- utf_count = 1;
- utf_char = (c & 0x1f);
- } else if ((c & 0xf0) == 0xe0) {
- utf_count = 2;
- utf_char = (c & 0x0f);
- } else if ((c & 0xf8) == 0xf0) {
- utf_count = 3;
- utf_char = (c & 0x07);
- } else if ((c & 0xfc) == 0xf8) {
- utf_count = 4;
- utf_char = (c & 0x03);
- } else if ((c & 0xfe) == 0xfc) {
- utf_count = 5;
- utf_char = (c & 0x01);
- } else {
- /*
- ** We got garbage, even though it should
- ** have been filtered out by the SGML or
- ** input stream parser, so we'll ignore
- ** it. - FM
- */
- utf_count = 0;
- utf_buf[0] = '\0';
- utf_buf_p = utf_buf;
- }
- /*
- ** Get the next byte. - FM
- */
- continue;
- }
- } else if (utf_count > 0) {
- /*
- ** Got an ASCII character when expecting
- ** UTF-8 multibytes, so ignore the buffered
- ** multibyte characters and fall through with
- ** the current ASCII character. - FM
- */
- utf_count = 0;
- utf_buf[0] = '\0';
- utf_buf_p = utf_buf;
- code = (UCode_t)c_unsign;
- } else {
- /*
- ** Got a valid ASCII character, so fall
- ** through with it. - FM
- */
- code = (UCode_t)c_unsign;
- }
- }
- /*
- ** Convert characters from non-UTF-8 charsets
- ** to Unicode (if appropriate). - FM
- */
- if (!(me->T.decode_utf8 &&
- (unsigned char)p[i] > 127)) {
-#ifdef NOTDEFINED
- if (me->T.strip_raw_char_in)
- saved_char_in = c;
-#endif /* NOTDEFINED */
- if (me->T.trans_to_uni &&
- (code >= LYlowest_eightbit[me->inUCLYhndl] ||
- (code < 32 && code != 0 &&
- me->T.trans_C0_to_uni))) {
- /*
- ** Convert the octet to Unicode. - FM
- */
- code = (UCode_t)UCTransToUni(c, me->inUCLYhndl);
- if (code > 0) {
- saved_char_in = c;
- if (code < 256) {
- c = ((char)(code & 0xff));
- c_unsign = (unsigned char)c;
- }
- }
- } else if (code < ' ' && code != 0 && /* S/390 -- gil -- 1720 */
- me->T.trans_C0_to_uni) {
- /*
- ** Quote from SGML.c:
- ** "This else if may be too ugly to keep. - KW"
- */
- if (me->T.trans_from_uni &&
- (((code = UCTransToUni(c, me->inUCLYhndl)) >= ' ') || /* S/390 -- gil -- 1737 */
- (me->T.transp &&
- (code = UCTransToUni(c, me->inUCLYhndl)) > 0))) {
- saved_char_in = c;
- if (code < 256) {
- c = ((char)(code & 0xff));
- c_unsign = (unsigned char)c;
- }
- } else {
- uck = -1;
- if (me->T.transp) {
- uck = UCTransCharStr(replace_buf, 60, c,
- me->inUCLYhndl,
- me->inUCLYhndl, NO);
- }
- if (!me->T.transp || uck < 0) {
- uck = UCTransCharStr(replace_buf, 60, c,
- me->inUCLYhndl,
- me->outUCLYhndl, YES);
- }
- if (uck == 0) {
- continue;
- } else if (uck < 0) {
- utf_buf[0] = '\0';
- code = (unsigned char)c;
- } else {
- c = replace_buf[0];
- if (c && replace_buf[1]) {
- HTChunkPuts(s, replace_buf);
- continue;
- }
- }
- utf_buf[0] = '\0';
- code = (unsigned char)c;
- } /* Next line end of ugly stuff for C0. - KW */
- } else {
- utf_buf[0] = '\0';
- code = (unsigned char)c;
- }
- }
- /*
- ** Ignore low ISO 646 7-bit control characters
- ** if they sneaked through (should have been
- ** filtered by the parser). - FM
- */
- if (code < ' ' && /* S/390 -- gil -- 1754 */
- c != 9 && c != 10 && c != 13) {
- continue;
- }
- /*
- ** Ignore 127 if we don't have HTPassHighCtrlRaw
- ** and it sneaked through (should have been
- ** filtered by the parser). - FM
- */
- if (TOASCII(c) == 127 && /* S/390 -- gil -- 1771 */
- !(me->T.transp ||
- code >= LYlowest_eightbit[me->inUCLYhndl])) {
- continue;
- }
- /*
- ** Ignore 8-bit control characters 128 - 159 if we don't
- ** have HTPassHighCtrlRaw set and they sneaked through
- ** (should have been filtered by the parser). - FM
- */
- if (TOASCII(code) > 127 && TOASCII(code) < 160 && /* S/390 -- gil -- 1788 */
- !(me->T.transp ||
- code >= LYlowest_eightbit[me->inUCLYhndl])) {
- continue;
- }
- /*
- ** For 160 (nbsp), substitute Lynx special character
- ** (or a space if plain_space or hidden is set) if
- ** HTPassHighCtrlRaw is not set. - FM
- */
- if (code == CH_NBSP) { /* S/390 -- gil -- 1805 */
- if (!me->T.pass_160_173_raw) {
- if (plain_space || hidden) {
- HTChunkPutc(s, ' ');
- } else {
- HTChunkPutc(s, HT_NON_BREAK_SPACE);
- }
- } else if (!me->T.output_utf8) {
- HTChunkPutc(s, ((char)(code & 0xff)));
- } else if (me->T.decode_utf8 && *utf_buf) {
- HTChunkPuts(s, utf_buf);
- utf_buf[0] == '\0';
- utf_buf_p = utf_buf;
- } else {
- HTChunkPutUtf8Char(s, code);
- }
- continue;
- }
- /*
- ** For 173 (shy), substitute Lynx special character
- ** (or skip it if plain_space or hidden is set) if
- ** HTPassHighCtrlRaw is not set. - FM
- */
- if (code == CH_SHY) { /* S/390 -- gil -- 1822 */
- if (!me->T.pass_160_173_raw) {
- if (!(plain_space || hidden)) {
- HTChunkPutc(s, LY_SOFT_HYPHEN);
- }
- } else if (!me->T.output_utf8) {
- HTChunkPutc(s, ((char)(code & 0xff)));
- } else if (me->T.decode_utf8 && *utf_buf) {
- HTChunkPuts(s, utf_buf);
- utf_buf[0] == '\0';
- utf_buf_p = utf_buf;
- } else {
- HTChunkPutUtf8Char(s, code);
- }
- continue;
- }
- /*
- ** For 8194 (ensp), 8195 (emsp), or 8201 (thinsp), use
- ** an ASCII space (32) if plain_space or hidden is TRUE,
- ** otherwise use the Lynx special character. - FM
- */
- if (code == 8194 || code == 8195 || code == 8201) {
- if (plain_space || hidden) {
- HTChunkPutc(s, ' ');
- } else {
- HTChunkPutc(s, HT_EN_SPACE);
- }
- if (me->T.decode_utf8 && *utf_buf) {
- utf_buf[0] == '\0';
- utf_buf_p = utf_buf;
- }
- continue;
- }
- /*
- ** If we want the raw character, pass it now. - FM
- */
- if (me->T.use_raw_char_in && saved_char_in) {
- HTChunkPutc(s, saved_char_in);
- continue;
- }
- /*
- ** Seek a translation from the chartrans tables.
- */
- if ((chk = (me->T.trans_from_uni && code >= 160)) &&
- (uck = UCTransUniChar(code, me->outUCLYhndl)) >= 32 &&
- uck < 256 &&
- (uck < 127 ||
- uck >= LYlowest_eightbit[me->outUCLYhndl])) {
- HTChunkPutc(s, ((char)(uck & 0xff)));
- continue;
- } else if (chk &&
- (uck == -4 ||
- (me->T.repl_translated_C0 &&
- uck > 0 && uck < ' ')) && /* S/390 -- gil -- 1839 */
- /*
- ** Not found; look for replacement string.
- */
- (uck = UCTransUniCharStr(replace_buf,
- 60, code,
- me->outUCLYhndl,
- 0) >= 0)) {
- /*
- ** Got a replacement string.
- */
- HTChunkPuts(s, replace_buf);
- continue;
- }
- /*
- ** If we want raw UTF-8, output that now. - FM
- */
- if (me->T.output_utf8 &&
- TOASCII(code) > 127 && code <= 0x7fffffffL) { /* S/390 -- gil -- 1856 */
- if (me->T.decode_utf8 && *utf_buf) {
- HTChunkPuts(s, utf_buf);
- utf_buf[0] == '\0';
- utf_buf_p = utf_buf;
- } else {
- HTChunkPutUtf8Char(s, code);
- }
- continue;
- }
- /*
- ** If it's any other (> 160) 8-bit character
- ** and we have not set HTPassEightBitRaw
- ** nor have the "ISO Latin 1" character set selected,
- ** back translate for our character set. - FM
- */
- if (code > 160 && code < 256 &&
- me->outUCLYhndl != LATIN1 &&
- (!(HTPassEightBitRaw ||
- (me->T.do_8bitraw && !me->T.trans_from_uni)))) {
- value = (code - 160);
- name = HTMLGetEntityName(value);
- for (low = 0, high = HTML_dtd.number_of_entities;
- high > low;
- diff < 0 ? (low = j+1) : (high = j)) {
- /*
- ** Binary search.
- */
- j = (low + (high-low)/2);
- diff = strcmp(HTML_dtd.entity_names[j], name);
- if (diff == 0) {
- HTChunkPuts(s, LYCharSets[me->outUCLYhndl][j]);
- break;
- }
- }
- if (diff == 0) {
- continue;
- }
- }
- /*
- ** If it's ASCII at this point, use it. - FM
- */
- if (TOASCII(code) < 127 && code > 0) { /* S/390 -- gil -- 1873 */
- HTChunkPutc(s, ((char)(code & 0xff)));
- continue;
- }
- /*
- ** At this point, if we should have translated, the
- ** translation has failed. We should have sent UTF-8
- ** output to the parser already, but what the heck,
- ** try again. - FM
- */
- if (me->T.output_utf8 && *utf_buf) {
- HTChunkPuts(s, utf_buf);
- utf_buf[0] == '\0';
- utf_buf_p = utf_buf;
- continue;
- }
-#ifdef NOTDEFINED
- /*
- ** Check for a strippable koi8-r 8-bit character. - FM
- */
- if (me->T.strip_raw_char_in &&
- (unsigned char)saved_char_in >= 192 &&
- (unsigned char)saved_char_in < 255 &&
- saved_char_in) {
- /*
- ** KOI8 special: strip high bit, gives (somewhat) readable
- ** ASCII or KOI7 - it was constructed that way! - KW
- */
- HTChunkPutc(s, (saved_char_in & 0x7f));
- continue;
- }
-#endif /* NOTDEFINED */
- /*
- ** Ignore 8204 (zwnj), 8205 (zwj)
- ** 8206 (lrm), and 8207 (rlm),
- ** if we get to here. - FM
- */
- if (code == 8204 || code == 8205 ||
- code == 8206 || code == 8207) {
- CTRACE(tfp, "LYExpandString: Ignoring '%ld'.\n", code);
- if (me->T.decode_utf8 && *utf_buf) {
- utf_buf[0] == '\0';
- utf_buf_p = utf_buf;
- }
- continue;
- }
- /*
- ** If we don't actually want the character,
- ** make it safe and output that now. - FM
- */
- if ((c_unsign > 0 &&
- c_unsign < LYlowest_eightbit[me->outUCLYhndl]) ||
- (me->T.trans_from_uni && !HTPassEightBitRaw)) {
- /*
- ** If we do not have the "7-bit approximations" as our
- ** output character set (in which case we did it already)
- ** seek a translation for that. Otherwise, or if the
- ** translation fails, use UHHH notation. - FM
- */
- if ((chk = (me->outUCLYhndl !=
- UCGetLYhndl_byMIME("us-ascii"))) &&
- (uck = UCTransUniChar(code,
- UCGetLYhndl_byMIME("us-ascii")))
- >= ' ' && TOASCII(uck) < 127) { /* S/390 -- gil -- 1890 */
- /*
- ** Got an ASCII character (yippey). - FM
- */
- c = ((char)(uck & 0xff));
- HTChunkPutc(s, c);
- continue;
- } else if ((uck == -4) &&
- (uck = UCTransUniCharStr(replace_buf,
- 60, code,
- UCGetLYhndl_byMIME("us-ascii"),
- 0) >= 0)) {
- /*
- ** Got a replacement string (yippey). - FM
- */
- HTChunkPuts(s, replace_buf);
- continue;
- } else {
- /*
- ** Out of luck, so use the UHHH notation (ugh). - FM
- */
- sprintf(replace_buf, "U%.2lX", TOASCII(code)); /* S/390 -- gil -- 1907 */
- HTChunkPuts(s, replace_buf);
- continue;
- }
- }
- /*
- ** If we get to here and have a monobyte character,
- ** pass it. - FM
- */
- if (c_unsign > 0 && c_unsign < 256) {
- HTChunkPutc(s, c);
- }
- }
-
- /*
- ** Terminate the expanded string,
- ** replace the original, and free
- ** the chunk. - FM
- */
- HTChunkTerminate(s);
- StrAllocCopy(*str, s->data);
- HTChunkFree(s);
-}
-#endif /* NOTUSED_FOTEMODS */
-
-/*
-** Get UCS character code for one character from UTF-8 encoded string.
-**
-** On entry:
-** *ppuni should point to beginning of UTF-8 encoding character
-** On exit:
-** *ppuni is advanced to point to the last byte of UTF-8 sequence,
-** if there was a valid one; otherwise unchanged.
-** returns the UCS value
-** returns negative value on error (invalid UTF-8 sequence)
-*/
-PRIVATE UCode_t UCGetUniFromUtf8String ARGS1(char **, ppuni)
-{
- UCode_t uc_out = 0;
- char * p = *ppuni;
- int utf_count, i;
- if (!(**ppuni&0x80))
- return (UCode_t) **ppuni; /* ASCII range character */
- else if (!(**ppuni&0x40))
- return (-1); /* not a valid UTF-8 start */
- if ((*p & 0xe0) == 0xc0) {
- utf_count = 1;
- } else if ((*p & 0xf0) == 0xe0) {
- utf_count = 2;
- } else if ((*p & 0xf8) == 0xf0) {
- utf_count = 3;
- } else if ((*p & 0xfc) == 0xf8) {
- utf_count = 4;
- } else if ((*p & 0xfe) == 0xfc) {
- utf_count = 5;
- } else { /* garbage */
- return (-1);
- }
- for (p = *ppuni, i = 0; i < utf_count ; i++) {
- if ((*(++p) & 0xc0) != 0x80)
- return (-1);
- }
- p = *ppuni;
- switch (utf_count) {
- case 1:
- uc_out = (((*p&0x1f) << 6) | (*(p+1)&0x3f));
- break;
- case 2:
- uc_out = (((((*p&0x0f) << 6) | (*(p+1)&0x3f)) << 6) | (*(p+2)&0x3f));
- break;
- case 3:
- uc_out = (((((((*p&0x07) << 6) | (*(p+1)&0x3f)) << 6) | (*(p+2)&0x3f)) << 6)
- | (*(p+3)&0x3f));
- break;
- case 4:
- uc_out = (((((((((*p&0x03) << 6) | (*(p+1)&0x3f)) << 6) | (*(p+2)&0x3f)) << 6)
- | (*(p+3)&0x3f)) << 6) | (*(p+4)&0x3f));
- break;
- case 5:
- uc_out = (((((((((((*p&0x01) << 6) | (*(p+1)&0x3f)) << 6) | (*(p+2)&0x3f)) << 6)
- | (*(p+3)&0x3f)) << 6) | (*(p+4)&0x3f)) << 6) | (*(p+5)&0x3f));
- break;
- }
- *ppuni = p + utf_count;
- return uc_out;
-}
-
/*
* Given an UCS character code, will fill buffer passed in as q with
* the code's UTF-8 encoding.
@@ -1593,7 +1065,7 @@ PRIVATE CONST char *hex = "0123456789ABCDEF";
** BOOLEAN isURL));
*/
-PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
+PUBLIC char ** LYUCFullyTranslateString ARGS9(
char **, str,
int, cs_from,
int, cs_to,
@@ -1631,6 +1103,12 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
enum _parsing_what
{ P_text, P_utf8, P_hex, P_decimal, P_named
} what = P_text;
+#ifdef KANJI_CODE_OVERRIDE
+ static unsigned char sjis_1st = '\0';
+#ifdef CONV_JISX0201KANA_JISX0208KANA
+ unsigned char sjis_str[3];
+#endif
+#endif
/*
** Make sure we have a non-empty string. - FM
@@ -1647,17 +1125,18 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
/*
** Don't do byte translation
** if original AND target character sets
- ** are both iso-8859-1,
+ ** are both iso-8859-1 (and we are not called to back-translate),
** or if we are in CJK mode.
*/
- no_bytetrans = ((cs_to <= 0 && cs_from == cs_to) ||
- HTCJK != NOCJK);
-
+ if (HTCJK != NOCJK) {
+ no_bytetrans = TRUE;
+ } else if (cs_to <= 0 && cs_from == cs_to && (!Back || cs_to < 0)) {
+ no_bytetrans = TRUE;
+ } else {
/* No need to translate or examine the string any further */
- if (!no_bytetrans)
- no_bytetrans = (!use_lynx_specials && !Back &&
- UCNeedNotTranslate(cs_from, cs_to));
-
+ no_bytetrans = (BOOL) (!use_lynx_specials && !Back &&
+ UCNeedNotTranslate(cs_from, cs_to));
+ }
/*
** Save malloc/calloc overhead in simple case - kw
*/
@@ -1683,14 +1162,14 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
UCTransParams_clear(&T);
UCSetTransParams(&T, cs_from, &LYCharSet_UC[cs_from],
cs_to, &LYCharSet_UC[cs_to]);
- from_is_utf8 = (LYCharSet_UC[cs_from].enc == UCT_ENC_UTF8);
+ from_is_utf8 = (BOOL) (LYCharSet_UC[cs_from].enc == UCT_ENC_UTF8);
output_utf8 = T.output_utf8;
repl_translated_C0 = T.repl_translated_C0;
puni = p;
} else if (do_ent) {
- output_utf8 = (LYCharSet_UC[cs_to].enc == UCT_ENC_UTF8 ||
+ output_utf8 = (BOOL) (LYCharSet_UC[cs_to].enc == UCT_ENC_UTF8 ||
HText_hasUTF8OutputSet(HTMainText));
- repl_translated_C0 = (LYCharSet_UC[cs_to].enc == UCT_ENC_8BIT_C0);
+ repl_translated_C0 = (BOOL) (LYCharSet_UC[cs_to].enc == UCT_ENC_8BIT_C0);
}
lowest_8 = LYlowest_eightbit[cs_to];
@@ -1730,7 +1209,27 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
while (*p || (state != S_text && state != S_nonascii_text)) {
switch(state) {
case S_text:
- code = (unsigned char)(*p);
+ code = UCH(*p);
+#ifdef KANJI_CODE_OVERRIDE
+ if (HTCJK == JAPANESE && last_kcode == SJIS) {
+ if (sjis_1st == '\0' && (IS_SJIS_HI1(code)||IS_SJIS_HI2(code))){
+ sjis_1st = UCH(code);
+ } else if (sjis_1st && IS_SJIS_LO(code)) {
+ sjis_1st = '\0';
+ } else {
+#ifdef CONV_JISX0201KANA_JISX0208KANA
+ if (0xA1 <= code && code <= 0xDF) {
+ sjis_str[2] = '\0';
+ JISx0201TO0208_SJIS(UCH(code),
+ sjis_str, sjis_str + 1);
+ REPLACE_STRING(sjis_str);
+ p++;
+ continue;
+ }
+#endif
+ }
+ }
+#endif
if (*p == '\033') {
if ((HTCJK != NOCJK && !hidden) || stype != st_HTML) {
state = S_esc;
@@ -1771,6 +1270,7 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
} else {
state = S_text;
}
+ break;
case S_dollar:
if (*p == '@' || *p == 'B' || *p == 'A') {
@@ -1849,21 +1349,31 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
state = S_got_outchar;
break;
} else {
- *p = 160;
code = 160;
if (LYCharSet_UC[cs_to].enc == UCT_ENC_8859 ||
(LYCharSet_UC[cs_to].like8859 & UCT_R_8859SPECL)) {
state = S_got_outchar;
break;
+ } else if (!(LYCharSet_UC[cs_from].enc == UCT_ENC_8859
+ ||(LYCharSet_UC[cs_from].like8859 & UCT_R_8859SPECL))) {
+ state = S_check_uni;
+ break;
+ } else {
+ *(unsigned char *)p = UCH(160);
}
}
} else if ((*p) == LY_SOFT_HYPHEN) {
- *p = 173;
code = 173;
if (LYCharSet_UC[cs_to].enc == UCT_ENC_8859 ||
(LYCharSet_UC[cs_to].like8859 & UCT_R_8859SPECL)) {
state = S_got_outchar;
break;
+ } else if (!(LYCharSet_UC[cs_from].enc == UCT_ENC_8859
+ ||(LYCharSet_UC[cs_from].like8859 & UCT_R_8859SPECL))) {
+ state = S_check_uni;
+ break;
+ } else {
+ *(unsigned char *)p = UCH(173);
}
} else if (code < 127 || T.transp) {
state = S_got_outchar;
@@ -1871,7 +1381,7 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
}
rev_c = UCReverseTransChar(*p, cs_to, cs_from);
if (rev_c > 127) {
- *p = rev_c;
+ *p = (char) rev_c;
code = rev_c;
state = S_got_outchar;
break;
@@ -1886,7 +1396,7 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
puni = p;
code = UCGetUniFromUtf8String(&puni);
if (code <= 0) {
- code = (unsigned char)(*p);
+ code = UCH(*p);
} else {
what = P_utf8;
}
@@ -1905,24 +1415,16 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
code = UCTransToUni(*p, cs_from);
if (code <= 0) {
/* What else can we do? */
- code = (unsigned char)(*p);
+ code = UCH(*p);
}
-#ifdef NOTUSED_FOTEMODS
- } else if (T.strip_raw_char_in &&
- (unsigned char)(*p) >= 0xc0 &&
- (unsigned char)(*p) < 255) {
- code = ((*p & 0x7f));
- state = S_got_outchar;
- break;
-#endif /* NOTUSED_FOTEMODS */
} else if (!T.trans_from_uni) {
state = S_got_outchar;
break;
}
/*
- ** Substitute Lynx special character for
- ** 160 (nbsp) if use_lynx_specials is set.
- */
+ ** Substitute Lynx special character for
+ ** 160 (nbsp) if use_lynx_specials is set.
+ */
if (use_lynx_specials && !Back &&
(code == 160 || code == 173)) {
code = ((code==160 ? HT_NON_BREAK_SPACE : LY_SOFT_HYPHEN));
@@ -1942,17 +1444,17 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
*/
if (*pp == '#' && len > 2 &&
(*(pp+1) == 'x' || *(pp+1) == 'X') &&
- (unsigned char)*(pp+2) < 127 &&
- isxdigit((unsigned char)*(pp+2))) {
+ UCH(*(pp+2)) < 127 &&
+ isxdigit(UCH(*(pp+2)))) {
what = P_hex;
state = S_ncr;
} else if (*pp == '#' && len > 2 &&
- (unsigned char)*(pp+1) < 127 &&
- isdigit((unsigned char)*(pp+1))) {
+ UCH(*(pp+1)) < 127 &&
+ isdigit(UCH(*(pp+1)))) {
what = P_decimal;
state = S_ncr;
- } else if ((unsigned char)*pp < 127 &&
- isalpha((unsigned char)*pp)) {
+ } else if (UCH(*pp) < 127 &&
+ isalpha(UCH(*pp))) {
what = P_named;
state = S_named;
} else {
@@ -1970,9 +1472,9 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
p += 2;
}
cp = p;
- while (*p && (unsigned char)*p < 127 &&
- (what == P_hex ? isxdigit((unsigned char)*p) :
- isdigit((unsigned char)*p))) {
+ while (*p && UCH(*p) < 127 &&
+ (what == P_hex ? isxdigit(UCH(*p)) :
+ isdigit(UCH(*p)))) {
p++;
}
/*
@@ -2172,15 +1674,29 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
** otherwise use the Lynx special character. - FM
*/
if (code == 160) {
- if (hidden) {
- ;
- } else if (plain_space) {
+ if (plain_space) {
code = ' ';
- } else {
+ state = S_got_outchar;
+ break;
+ } else if (use_lynx_specials) {
code = HT_NON_BREAK_SPACE;
+ state = S_got_outchar;
+ break;
+ } else if ((hidden && !Back) ||
+ (LYCharSet_UC[cs_to].codepoints & UCT_CP_SUPERSETOF_LAT1) ||
+ LYCharSet_UC[cs_to].enc == UCT_ENC_8859 ||
+ (LYCharSet_UC[cs_to].like8859 &
+ UCT_R_8859SPECL)) {
+ state = S_got_outchar;
+ break;
+ } else if (
+ (LYCharSet_UC[cs_to].repertoire & UCT_REP_SUPERSETOF_LAT1)) {
+ ; /* nothing, may be translated later */
+ } else {
+ code = ' ';
+ state = S_got_outchar;
+ break;
}
- state = S_got_outchar;
- break;
}
/*
** For 173 (shy), use that value if it's
@@ -2201,7 +1717,7 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
} else if (hidden || Back) {
state = S_got_outchar;
break;
- } else {
+ } else if (use_lynx_specials) {
code = LY_SOFT_HYPHEN;
state = S_got_outchar;
break;
@@ -2260,7 +1776,7 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
*/
} else if (code == 8204 || code == 8205 ||
code == 8206 || code == 8207) {
- CTRACE(tfp, "LYUCFullyTranslateString: Ignoring '%ld'.\n", code);
+ CTRACE((tfp, "LYUCFullyTranslateString: Ignoring '%ld'.\n", code));
replace_buf[0] = '\0';
state = S_got_outstring;
break;
@@ -2289,6 +1805,22 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
*/
state = S_got_outchar;
break;
+
+ /* The following disabled section doesn't make sense
+ ** any more. It used to make sense in the past, when
+ ** S_check_named would look in "old style" tables
+ ** in addition to what it does now.
+ ** Disabling of going to S_check_name here prevents
+ ** endless looping between S_check_uni and S_check_names
+ ** states, which could occur here for Latin 1 codes
+ ** for some cs_to if they had no translation in that
+ ** cs_to. Normally all cs_to *should* now have valid
+ ** translations via UCTransUniChar or UCTransUniCharStr
+ ** for all Latin 1 codes, so that we would not get here
+ ** anyway, and no loop could occur. Still, if we *do*
+ ** get here, FALL THROUGH to case S_recover now. - kw
+ */
+#if 0
/*
** If we get to here, convert and handle
** the character as a named entity. - FM
@@ -2297,54 +1829,47 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
name = HTMLGetEntityName(code - 160);
state = S_check_name;
break;
+#endif
}
case S_recover:
if (what == P_decimal || what == P_hex) {
- /*
- ** Illegal or not yet handled value.
- ** Return "&#" verbatim and continue
- ** from there. - FM
- */
- *q++ = '&';
- *q++ = '#';
- if (what == P_hex)
- *q++ = 'x';
- if (cpe != '\0')
- *(p-1) = cpe;
- p = cp;
- state = S_done;
+ /*
+ ** Illegal or not yet handled value.
+ ** Return "&#" verbatim and continue
+ ** from there. - FM
+ */
+ *q++ = '&';
+ *q++ = '#';
+ if (what == P_hex)
+ *q++ = 'x';
+ if (cpe != '\0')
+ *(p-1) = cpe;
+ p = cp;
+ state = S_done;
} else if (what == P_named) {
*cp = cpe;
*q++ = '&';
state = S_done;
-#ifdef NOTUSED_FOTEMODS
- } else if (T.strip_raw_char_in &&
- (unsigned char)(*p) >= 0xc0 &&
- (unsigned char)(*p) < 255) {
- code = (((*p) & 0x7f));
- state = S_got_outchar;
-#endif /* NOTUSED_FOTEMODS */
} else if (!T.output_utf8 && stype == st_HTML && !hidden &&
!(HTPassEightBitRaw &&
- (unsigned char)(*p) >= lowest_8)) {
+ UCH(*p) >= lowest_8)) {
sprintf(replace_buf, "U%.2lX", code);
state = S_got_outstring;
} else {
puni = p;
- code = (unsigned char)(*p);
+ code = UCH(*p);
state = S_got_outchar;
}
break;
case S_named:
cp = ++p;
- while (*cp && (unsigned char)*cp < 127 &&
- isalnum((unsigned char)*cp))
+ while (*cp && UCH(*cp) < 127 &&
+ isalnum(UCH(*cp)))
cp++;
cpe = *cp;
*cp = '\0';
-/* ppuni = cp - 1; */
name = p;
state = S_check_name;
break;
@@ -2479,7 +2004,7 @@ PRIVATE char ** LYUCFullyTranslateString_1 ARGS9(
#undef REPLACE_CHAR
#undef REPLACE_STRING
-PUBLIC BOOL LYUCFullyTranslateString ARGS7(
+PUBLIC BOOL LYUCTranslateHTMLString ARGS7(
char **, str,
int, cs_from,
int, cs_to,
@@ -2490,7 +2015,7 @@ PUBLIC BOOL LYUCFullyTranslateString ARGS7(
{
BOOL ret = YES;
/* May reallocate *str even if cs_to == 0 */
- if (!LYUCFullyTranslateString_1(str, cs_from, cs_to, TRUE,
+ if (!LYUCFullyTranslateString(str, cs_from, cs_to, TRUE,
use_lynx_specials, plain_space, hidden,
NO, stype)) {
ret = NO;
@@ -2506,17 +2031,17 @@ PUBLIC BOOL LYUCTranslateBackFormData ARGS4(
{
char ** ret;
/* May reallocate *str */
- ret = (LYUCFullyTranslateString_1(str, cs_from, cs_to, FALSE,
+ ret = (LYUCFullyTranslateString(str, cs_from, cs_to, FALSE,
NO, plain_space, YES,
YES, st_HTML));
- return (ret != NULL);
+ return (BOOL) (ret != NULL);
}
/*
** This function processes META tags in HTML streams. - FM
*/
PUBLIC void LYHandleMETA ARGS4(
- HTStructured *, me,
+ HTStructured *, me,
CONST BOOL*, present,
CONST char **, value,
char **, include GCC_UNUSED)
@@ -2536,7 +2061,7 @@ PUBLIC void LYHandleMETA ARGS4(
value[HTML_META_HTTP_EQUIV] && *value[HTML_META_HTTP_EQUIV]) {
StrAllocCopy(http_equiv, value[HTML_META_HTTP_EQUIV]);
convert_to_spaces(http_equiv, TRUE);
- LYUCFullyTranslateString(&http_equiv, me->tag_charset, me->tag_charset,
+ LYUCTranslateHTMLString(&http_equiv, me->tag_charset, me->tag_charset,
NO, NO, YES, st_other);
LYTrimHead(http_equiv);
LYTrimTail(http_equiv);
@@ -2548,7 +2073,7 @@ PUBLIC void LYHandleMETA ARGS4(
value[HTML_META_NAME] && *value[HTML_META_NAME]) {
StrAllocCopy(name, value[HTML_META_NAME]);
convert_to_spaces(name, TRUE);
- LYUCFullyTranslateString(&name, me->tag_charset, me->tag_charset,
+ LYUCTranslateHTMLString(&name, me->tag_charset, me->tag_charset,
NO, NO, YES, st_other);
LYTrimHead(name);
LYTrimTail(name);
@@ -2577,10 +2102,10 @@ PUBLIC void LYHandleMETA ARGS4(
FREE(content);
}
}
- CTRACE(tfp, "LYHandleMETA: HTTP-EQUIV=\"%s\" NAME=\"%s\" CONTENT=\"%s\"\n",
+ CTRACE((tfp, "LYHandleMETA: HTTP-EQUIV=\"%s\" NAME=\"%s\" CONTENT=\"%s\"\n",
(http_equiv ? http_equiv : "NULL"),
(name ? name : "NULL"),
- (content ? content : "NULL"));
+ (content ? content : "NULL")));
/*
* Make sure we have META name/value pairs to handle. - FM
@@ -2594,7 +2119,7 @@ PUBLIC void LYHandleMETA ARGS4(
*/
if (!strcasecomp((http_equiv ? http_equiv : ""), "Pragma") ||
!strcasecomp((http_equiv ? http_equiv : ""), "Cache-Control")) {
- LYUCFullyTranslateString(&content, me->tag_charset, me->tag_charset,
+ LYUCTranslateHTMLString(&content, me->tag_charset, me->tag_charset,
NO, NO, YES, st_other);
LYTrimHead(content);
LYTrimTail(content);
@@ -2638,9 +2163,9 @@ PUBLIC void LYHandleMETA ARGS4(
cp++;
while (*cp != '\0' && WHITE(*cp))
cp++;
- if (isdigit((unsigned char)*cp)) {
+ if (isdigit(UCH(*cp))) {
cp0 = cp;
- while (isdigit((unsigned char)*cp))
+ while (isdigit(UCH(*cp)))
cp++;
if (*cp0 == '0' && cp == (cp0 + 1)) {
me->node_anchor->no_cache = TRUE;
@@ -2668,7 +2193,7 @@ PUBLIC void LYHandleMETA ARGS4(
* Date header from a server when making the
* comparison. - FM
*/
- LYUCFullyTranslateString(&content, me->tag_charset, me->tag_charset,
+ LYUCTranslateHTMLString(&content, me->tag_charset, me->tag_charset,
NO, NO, YES, st_other);
LYTrimHead(content);
LYTrimTail(content);
@@ -2692,7 +2217,7 @@ PUBLIC void LYHandleMETA ARGS4(
me->node_anchor->no_cache = TRUE;
HText_setNoCache(me->text);
}
- } else if (LYmktime(content, FALSE) <= 0) {
+ } else if (LYmktime(content, FALSE) == 0) {
/*
* We don't have a Date header, and
* the value is in past for us. - FM
@@ -2711,7 +2236,7 @@ PUBLIC void LYHandleMETA ARGS4(
!strcasecomp((http_equiv ? http_equiv : ""), "Content-Type")) {
LYUCcharset * p_in = NULL;
LYUCcharset * p_out = NULL;
- LYUCFullyTranslateString(&content, me->tag_charset, me->tag_charset,
+ LYUCTranslateHTMLString(&content, me->tag_charset, me->tag_charset,
NO, NO, YES, st_other);
LYTrimHead(content);
LYTrimTail(content);
@@ -2737,6 +2262,29 @@ PUBLIC void LYHandleMETA ARGS4(
*cp4 = '\0';
cp4 = cp3;
chndl = UCGetLYhndl_byMIME(cp3);
+
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+ /* Allow a switch to a more suitable display charset */
+ if (Switch_Display_Charset (chndl, SWITCH_DISPLAY_CHARSET_MAYBE)) {
+ /* UCT_STAGE_STRUCTURED and UCT_STAGE_HTEXT
+ should have the same setting for UCInfoStage. */
+ int structured = HTAnchor_getUCInfoStage(me->node_anchor,
+ UCT_STAGE_STRUCTURED);
+ me->outUCLYhndl = current_char_set;
+ HTAnchor_setUCInfoStage(me->node_anchor,
+ current_char_set,
+ UCT_STAGE_HTEXT,
+ UCT_SETBY_MIME); /* highest priorty! */
+ HTAnchor_setUCInfoStage(me->node_anchor,
+ current_char_set,
+ UCT_STAGE_STRUCTURED,
+ UCT_SETBY_MIME); /* highest priorty! */
+ me->outUCI = HTAnchor_getUCInfoStage(me->node_anchor,
+ UCT_STAGE_HTEXT);
+ /* The SGML stage will be reset in change_chartrans_handling */
+ }
+#endif
+
if (UCCanTranslateFromTo(chndl, current_char_set)) {
chartrans_ok = YES;
StrAllocCopy(me->node_anchor->charset, cp4);
@@ -2828,14 +2376,14 @@ PUBLIC void LYHandleMETA ARGS4(
* of match.
*/
BOOL given_is_8859
- = (!strncmp(cp4, "iso-8859-", 9) &&
- isdigit((unsigned char)cp4[9]));
+ = (BOOL) (!strncmp(cp4, "iso-8859-", 9) &&
+ isdigit(UCH(cp4[9])));
BOOL given_is_8859like
- = (given_is_8859 || !strncmp(cp4, "windows-", 8) ||
+ = (BOOL) (given_is_8859 || !strncmp(cp4, "windows-", 8) ||
!strncmp(cp4, "cp12", 4) ||
!strncmp(cp4, "cp-12", 5));
BOOL given_and_display_8859like
- = (given_is_8859like &&
+ = (BOOL) (given_is_8859like &&
(strstr(LYchar_set_names[current_char_set],
"ISO-8859") ||
strstr(LYchar_set_names[current_char_set],
@@ -2844,7 +2392,7 @@ PUBLIC void LYHandleMETA ARGS4(
if (given_is_8859) {
cp1 = &cp4[10];
while (*cp1 &&
- isdigit((unsigned char)(*cp1)))
+ isdigit(UCH((*cp1))))
cp1++;
*cp1 = '\0';
}
@@ -2858,9 +2406,9 @@ PUBLIC void LYHandleMETA ARGS4(
FREE(cp3);
if (me->node_anchor->charset) {
- CTRACE(tfp,
+ CTRACE((tfp,
"LYHandleMETA: New charset: %s\n",
- me->node_anchor->charset);
+ me->node_anchor->charset));
}
}
/*
@@ -2878,9 +2426,9 @@ PUBLIC void LYHandleMETA ARGS4(
* Look for the Seconds field. - FM
*/
cp = LYSkipBlanks(content);
- if (*cp && isdigit(*cp)) {
+ if (*cp && isdigit(UCH(*cp))) {
cp1 = cp;
- while (*cp1 && isdigit(*cp1))
+ while (*cp1 && isdigit(UCH(*cp1)))
cp1++;
if (*cp1)
*cp1++ = '\0';
@@ -2894,10 +2442,10 @@ PUBLIC void LYHandleMETA ARGS4(
while (*cp1) {
if (!strncasecomp(cp1, "URL", 3)) {
cp = (cp1 + 3);
- while (*cp && (*cp == '=' || isspace((unsigned char)*cp)))
+ while (*cp && (*cp == '=' || isspace(UCH(*cp))))
cp++;
cp1 = cp;
- while (*cp1 && !isspace((unsigned char)*cp1))
+ while (*cp1 && !isspace(UCH(*cp1)))
cp1++;
*cp1 = '\0';
if (*cp)
@@ -2957,11 +2505,15 @@ PUBLIC void LYHandleMETA ARGS4(
/*
* Check for an anchor in http or https URLs. - FM
*/
+#ifndef DONT_TRACK_INTERNAL_LINKS
+ /* id_string seems to be used wrong below if given.
+ not that it matters much. avoid setting it here. - kw */
if ((strncmp(href, "http", 4) == 0) &&
(cp = strrchr(href, '#')) != NULL) {
StrAllocCopy(id_string, cp);
*cp = '\0';
}
+#endif
if (me->inA) {
/*
* Ugh! The META tag, which is a HEAD element,
@@ -3084,11 +2636,12 @@ free_META_copies:
** current paragraph and subsequent text when a P
** end tag is present or not in the markup. - FM
*/
-PUBLIC void LYHandleP ARGS5(
- HTStructured *, me,
+PUBLIC void LYHandlePlike ARGS6(
+ HTStructured *, me,
CONST BOOL*, present,
CONST char **, value,
char **, include GCC_UNUSED,
+ int, align_idx,
BOOL, start)
{
if (TRUE) {
@@ -3151,29 +2704,29 @@ PUBLIC void LYHandleP ARGS5(
if (LYoverride_default_alignment(me)) {
me->sp->style->alignment = LYstyles(me->sp[0].tag_number)->alignment;
- } else if (me->List_Nesting_Level >= 0 ||
+ } else if ((me->List_Nesting_Level >= 0 &&
+ strncmp(me->sp->style->name, "Div", 3)) ||
((me->Division_Level < 0) &&
(!strcmp(me->sp->style->name, "Normal") ||
!strcmp(me->sp->style->name, "Preformatted")))) {
me->sp->style->alignment = HT_LEFT;
} else {
- me->sp->style->alignment = me->current_default_alignment;
+ me->sp->style->alignment = (short) me->current_default_alignment;
}
if (start) {
- if (present && present[HTML_P_ALIGN] && value[HTML_P_ALIGN]) {
- if (!strcasecomp(value[HTML_P_ALIGN], "center") &&
+ if (present && present[align_idx] && value[align_idx]) {
+ if (!strcasecomp(value[align_idx], "center") &&
!(me->List_Nesting_Level >= 0 && !me->inP))
me->sp->style->alignment = HT_CENTER;
- else if (!strcasecomp(value[HTML_P_ALIGN], "right") &&
+ else if (!strcasecomp(value[align_idx], "right") &&
!(me->List_Nesting_Level >= 0 && !me->inP))
me->sp->style->alignment = HT_RIGHT;
- else if (!strcasecomp(value[HTML_P_ALIGN], "left") ||
- !strcasecomp(value[HTML_P_ALIGN], "justify"))
+ else if (!strcasecomp(value[align_idx], "left") ||
+ !strcasecomp(value[align_idx], "justify"))
me->sp->style->alignment = HT_LEFT;
}
- CHECK_ID(HTML_P_ID);
}
/*
@@ -3193,7 +2746,7 @@ PUBLIC void LYHandleP ARGS5(
** an end tag. - FM
*/
PUBLIC void LYHandleSELECT ARGS5(
- HTStructured *, me,
+ HTStructured *, me,
CONST BOOL*, present,
CONST char **, value,
char **, include GCC_UNUSED,
@@ -3215,13 +2768,9 @@ PUBLIC void LYHandleSELECT ARGS5(
* Make sure we're in a form.
*/
if (!me->inFORM) {
- if (TRACE) {
- fprintf(tfp,
- "Bad HTML: SELECT start tag not within FORM tag\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp,
+ "Bad HTML: SELECT start tag not within FORM tag\n"));
/*
* We should have covered all crash possibilities with the
@@ -3238,12 +2787,8 @@ PUBLIC void LYHandleSELECT ARGS5(
* Check for unclosed TEXTAREA.
*/
if (me->inTEXTAREA) {
- if (TRACE) {
- fprintf(tfp, "Bad HTML: Missing TEXTAREA end tag\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: Missing TEXTAREA end tag\n"));
}
/*
@@ -3266,15 +2811,11 @@ PUBLIC void LYHandleSELECT ARGS5(
me->select_disabled = TRUE;
if (present && present[HTML_SELECT_SIZE] &&
value[HTML_SELECT_SIZE] && *value[HTML_SELECT_SIZE]) {
-#ifdef NOTDEFINED
- StrAllocCopy(size, value[HTML_SELECT_SIZE]);
-#else
/*
* Let the size be determined by the number of OPTIONs. - FM
*/
- CTRACE(tfp, "LYHandleSELECT: Ignoring SIZE=\"%s\" for SELECT.\n",
- value[HTML_SELECT_SIZE]);
-#endif /* NOTDEFINED */
+ CTRACE((tfp, "LYHandleSELECT: Ignoring SIZE=\"%s\" for SELECT.\n",
+ value[HTML_SELECT_SIZE]));
}
if (me->inBoldH == TRUE &&
@@ -3322,12 +2863,8 @@ PUBLIC void LYHandleSELECT ARGS5(
* Make sure we had a select start tag.
*/
if (!me->inSELECT) {
- if (TRACE) {
- fprintf(tfp, "Bad HTML: Unmatched SELECT end tag\n");
- } else if (!me->inBadHTML) {
- HTUserMsg(BAD_HTML_USE_TRACE);
- me->inBadHTML = TRUE;
- }
+ if (LYBadHTML(me))
+ CTRACE((tfp, "Bad HTML: Unmatched SELECT end tag\n"));
return;
}
@@ -3424,7 +2961,7 @@ PUBLIC void LYHandleSELECT ARGS5(
** URLs. - FM
*/
PUBLIC int LYLegitimizeHREF ARGS4(
- HTStructured *, me,
+ HTStructured *, me,
char **, href,
BOOL, force_slash,
BOOL, strip_dots)
@@ -3449,7 +2986,13 @@ PUBLIC int LYLegitimizeHREF ARGS4(
*pound = '\0';
convert_to_spaces(fragment, FALSE);
}
- LYRemoveBlanks(*href);
+ /*
+ * No blanks really belong in the HREF, but if it refers to an actual
+ * file, it may actually have blanks in the name. Try to accommodate.
+ */
+ convert_to_spaces(*href, FALSE);
+ LYTrimLeading(*href);
+ LYTrimTrailing(*href);
if (fragment != NULL) {
StrAllocCat(*href, fragment);
FREE(fragment);
@@ -3457,7 +3000,7 @@ PUBLIC int LYLegitimizeHREF ARGS4(
}
if (*(*href) == '\0')
return(url_type);
- LYUCFullyTranslateString(href, me->tag_charset, me->tag_charset,
+ LYUCTranslateHTMLString(href, me->tag_charset, me->tag_charset,
NO, NO, YES, st_URL);
url_type = is_url(*href);
if (!url_type && force_slash &&
@@ -3505,17 +3048,15 @@ PUBLIC int LYLegitimizeHREF ARGS4(
!strncmp(path, "/..", 3)) {
cp = (path + 3);
if (LYIsHtmlSep(*cp) || *cp == '\0') {
- if ((me->inBASE ?
- me->base_href[4] : me->node_anchor->address[4]) == 's') {
+ if ((me->inBASE
+ ? me->base_href[4]
+ : me->node_anchor->address[4]) == 's') {
str = "s";
}
- if (TRACE) {
- fprintf(tfp,
- "LYLegitimizeHREF: Bad value '%s' for http%s URL.\n",
- *href, str);
- fprintf(tfp,
- " Stripping lead dots.\n");
- } else if (!me->inBadHREF) {
+ CTRACE((tfp, "LYLegitimizeHREF: Bad value '%s' for http%s URL.\n",
+ *href, str));
+ CTRACE((tfp, " Stripping lead dots.\n"));
+ if (!me->inBadHREF) {
HTUserMsg(BAD_PARTIAL_REFERENCE);
me->inBadHREF = TRUE;
}
@@ -3550,7 +3091,7 @@ PUBLIC int LYLegitimizeHREF ARGS4(
** any BASE tag in the HTML stream, itself. - FM
*/
PUBLIC void LYCheckForContentBase ARGS1(
- HTStructured *, me)
+ HTStructured *, me)
{
char *cp = NULL;
BOOL present[HTML_BASE_ATTRIBUTES];
@@ -3618,7 +3159,7 @@ PUBLIC void LYCheckForContentBase ARGS1(
** or ID attribute was present in the tag. - FM
*/
PUBLIC void LYCheckForID ARGS4(
- HTStructured *, me,
+ HTStructured *, me,
CONST BOOL *, present,
CONST char **, value,
int, attribute)
@@ -3635,7 +3176,7 @@ PUBLIC void LYCheckForID ARGS4(
* Translate any named or numeric character references. - FM
*/
StrAllocCopy(temp, value[attribute]);
- LYUCFullyTranslateString(&temp, me->tag_charset, me->tag_charset,
+ LYUCTranslateHTMLString(&temp, me->tag_charset, me->tag_charset,
NO, NO, YES, st_URL);
/*
@@ -3660,8 +3201,8 @@ PUBLIC void LYCheckForID ARGS4(
** does not need checking for character references. - FM
*/
PUBLIC void LYHandleID ARGS2(
- HTStructured *, me,
- char *, id)
+ HTStructured *, me,
+ CONST char *, id)
{
HTChildAnchor *ID_A = NULL;
@@ -3771,7 +3312,7 @@ PUBLIC void LYResetParagraphAlignment ARGS1(
!strcmp(me->sp->style->name, "Preformatted")))) {
me->sp->style->alignment = HT_LEFT;
} else {
- me->sp->style->alignment = me->current_default_alignment;
+ me->sp->style->alignment = (short) me->current_default_alignment;
}
return;
}
@@ -3848,7 +3389,7 @@ PUBLIC BOOLEAN LYCommentHacks ARGS2(
char *messageid = NULL;
char *p;
for (cp = comment+17; *cp; cp++) {
- if ((unsigned char)*cp >= 127 || !isgraph((unsigned char)*cp)) {
+ if (UCH(*cp) >= 127 || !isgraph(UCH(*cp))) {
break;
}
}
@@ -3858,10 +3399,10 @@ PUBLIC BOOLEAN LYCommentHacks ARGS2(
cp = comment + 17;
StrAllocCopy(messageid, cp);
/* This should be ok - message-id should only contain 7-bit ASCII */
- if (!LYUCFullyTranslateString(&messageid, 0, 0, NO, NO, YES, st_URL))
+ if (!LYUCTranslateHTMLString(&messageid, 0, 0, NO, NO, YES, st_URL))
return FALSE;
for (p = messageid; *p; p++) {
- if ((unsigned char)*p >= 127 || !isgraph((unsigned char)*p)) {
+ if (UCH(*p) >= 127 || !isgraph(UCH(*p))) {
break;
}
}
@@ -3892,7 +3433,7 @@ PUBLIC BOOLEAN LYCommentHacks ARGS2(
char *subject = NULL;
char *p;
for (cp = comment+14; *cp; cp++) {
- if ((unsigned char)*cp >= 127 || !isprint((unsigned char)*cp)) {
+ if (UCH(*cp) >= 127 || !isprint(UCH(*cp))) {
return FALSE;
}
}
@@ -3910,10 +3451,10 @@ PUBLIC BOOLEAN LYCommentHacks ARGS2(
* header in raw form, but don't have MIME encoding implemented.
* Someone may want to do more about this... - kw
*/
- if (!LYUCFullyTranslateString(&subject, 0, 0, NO, YES, NO, st_HTML))
+ if (!LYUCTranslateHTMLString(&subject, 0, 0, NO, YES, NO, st_HTML))
return FALSE;
for (p = subject; *p; p++) {
- if ((unsigned char)*p >= 127 || !isprint((unsigned char)*p)) {
+ if (UCH(*p) >= 127 || !isprint(UCH(*p))) {
FREE(subject);
return FALSE;
}
@@ -3936,3 +3477,39 @@ PUBLIC BOOLEAN LYCommentHacks ARGS2(
return FALSE;
}
+
+ /*
+ * Create the Title with any left-angle-brackets
+ * converted to &lt; entities and any ampersands
+ * converted to &amp; entities. - FM
+ *
+ * Convert 8-bit letters to &#xUUUU to avoid dependencies
+ * from display character set which may need changing.
+ * Do NOT convert any 8-bit chars if we have CJK display. - LP
+ */
+void LYformTitle ARGS2(
+ char **, dst,
+ CONST char *, src)
+{
+ if (HTCJK == JAPANESE) {
+ char *tmp_buffer = NULL;
+ if ((tmp_buffer = (char *) malloc (strlen(src)+1)) == 0)
+ outofmem(__FILE__, "LYformTitle");
+ switch(kanji_code) { /* 1997/11/22 (Sat) 09:28:00 */
+ case EUC:
+ TO_EUC((CONST unsigned char *) src, (unsigned char *) tmp_buffer);
+ break;
+ case SJIS:
+ TO_SJIS((CONST unsigned char *) src, (unsigned char *) tmp_buffer);
+ break;
+ default:
+ CTRACE((tfp, "\nLYformTitle: kanji_code is an unexpected value."));
+ strcpy(tmp_buffer, src);
+ break;
+ }
+ StrAllocCopy(*dst, tmp_buffer);
+ FREE(tmp_buffer);
+ } else {
+ StrAllocCopy(*dst, src);
+ }
+}
diff --git a/gnu/usr.bin/lynx/src/LYCharUtils.h b/gnu/usr.bin/lynx/src/LYCharUtils.h
index dc5a6c7febf..4ca2000014e 100644
--- a/gnu/usr.bin/lynx/src/LYCharUtils.h
+++ b/gnu/usr.bin/lynx/src/LYCharUtils.h
@@ -14,22 +14,32 @@ typedef enum {
st_other
} CharUtil_st;
-extern BOOL LYUCFullyTranslateString PARAMS((
- char ** str,
+extern char** LYUCFullyTranslateString PARAMS((
+ char ** str,
int cs_from,
int cs_to,
+ BOOLEAN do_ent,
BOOL use_lynx_specials,
- BOOLEAN plain_space,
- BOOLEAN hidden,
+ BOOLEAN plain_space,
+ BOOLEAN hidden,
+ BOOL Back,
+ CharUtil_st stype));
+extern BOOL LYUCTranslateHTMLString PARAMS((
+ char ** str,
+ int cs_from,
+ int cs_to,
+ BOOL use_lynx_specials,
+ BOOLEAN plain_space,
+ BOOLEAN hidden,
CharUtil_st stype));
extern BOOL LYUCTranslateBackFormData PARAMS((
- char ** str,
+ char ** str,
int cs_from,
int cs_to,
- BOOLEAN plain_space));
+ BOOLEAN plain_space));
extern void LYEntify PARAMS((
- char ** str,
- BOOLEAN isTITLE));
+ char ** str,
+ BOOLEAN isTITLE));
extern void LYTrimHead PARAMS((
char * str));
extern void LYTrimTail PARAMS((
@@ -37,14 +47,17 @@ extern void LYTrimTail PARAMS((
extern char *LYFindEndOfComment PARAMS((
char * str));
extern void LYFillLocalFileURL PARAMS((
- char ** href,
+ char ** href,
CONST char * base));
extern void LYAddMETAcharsetToFD PARAMS((
FILE * fd,
int disp_chndl));
+extern void LYformTitle PARAMS((
+ char ** dst,
+ CONST char * src));
#ifdef Lynx_HTML_Handler
-extern int OL_CONTINUE; /* flag for whether CONTINUE is set */
+extern int OL_CONTINUE; /* flag for whether CONTINUE is set */
extern int OL_VOID; /* flag for whether a count is set */
extern void LYZero_OL_Counter PARAMS((
HTStructured * me));
@@ -62,22 +75,23 @@ extern void LYHandleMETA PARAMS((
HTStructured * me,
CONST BOOL* present,
CONST char ** value,
- char ** include));
-extern void LYHandleP PARAMS((
+ char ** include));
+extern void LYHandlePlike PARAMS((
HTStructured * me,
CONST BOOL* present,
CONST char ** value,
- char ** include,
+ char ** include,
+ int align_idx,
BOOL start));
extern void LYHandleSELECT PARAMS((
HTStructured * me,
CONST BOOL* present,
CONST char ** value,
- char ** include,
+ char ** include,
BOOL start));
extern int LYLegitimizeHREF PARAMS((
HTStructured * me,
- char ** href,
+ char ** href,
BOOL force_slash,
BOOL strip_dots));
extern void LYCheckForContentBase PARAMS((
@@ -89,7 +103,7 @@ extern void LYCheckForID PARAMS((
int attribute));
extern void LYHandleID PARAMS((
HTStructured * me,
- char * id));
+ CONST char * id));
extern BOOLEAN LYoverride_default_alignment PARAMS((
HTStructured * me));
extern void LYEnsureDoubleSpace PARAMS((
@@ -100,7 +114,10 @@ extern void LYResetParagraphAlignment PARAMS((
HTStructured * me));
extern BOOLEAN LYCheckForCSI PARAMS((
HTParentAnchor * anchor,
- char ** url));
+ char ** url));
+
#endif /* Lynx_HTML_Handler */
+#define LYUCTranslateBackHeaderText LYUCTranslateBackFormData
+
#endif /* LYCHARUTILS_H */
diff --git a/gnu/usr.bin/lynx/src/LYCharVals.h b/gnu/usr.bin/lynx/src/LYCharVals.h
index 18da1245f4b..4d0a94102dd 100644
--- a/gnu/usr.bin/lynx/src/LYCharVals.h
+++ b/gnu/usr.bin/lynx/src/LYCharVals.h
@@ -11,19 +11,23 @@
*/
#ifndef CH_ESC
#ifdef EBCDIC
-#define CH_DEL 0x07
-#define CH_ESC 0x27
-#define CH_ESC_PAR 0x27
-#define CH_HICTL 0x3f
-#define CH_NBSP 0x41
-#define CH_SHY 0xca
+#define CH_DEL 0x07
+#define CH_ESC 0x27
+#define CH_ESC_PAR 0x27
+#define CH_HICTL 0x3f
+#define CH_NBSP 0x41
+#define CH_SHY 0xca
+#define LYCharINTERRUPT1 0x03 /* Control-C */
+#define LYCharINTERRUPT2 0x2f /* Control-G */
#else /* EBCDIC */
-#define CH_ESC 0033
-#define CH_DEL 0177
-#define CH_ESC_PAR 0233
-#define CH_HICTL 0237
-#define CH_NBSP 0240
-#define CH_SHY 0255
+#define CH_ESC 0033
+#define CH_DEL 0177
+#define CH_ESC_PAR 0233
+#define CH_HICTL 0237
+#define CH_NBSP 0240
+#define CH_SHY 0255
+#define LYCharINTERRUPT1 0003 /* Control-C */
+#define LYCharINTERRUPT2 0007 /* Control-G */
#endif /* EBCDIC */
#endif /* CH_ESC */
diff --git a/gnu/usr.bin/lynx/src/LYClean.c b/gnu/usr.bin/lynx/src/LYClean.c
index 82714231530..2b6d72f16db 100644
--- a/gnu/usr.bin/lynx/src/LYClean.c
+++ b/gnu/usr.bin/lynx/src/LYClean.c
@@ -26,12 +26,12 @@ PUBLIC void cleanup_sig ARGS1(
#ifdef IGNORE_CTRL_C
if (sig == SIGINT) {
- /*
- * Need to rearm the signal.
- */
- signal(SIGINT, cleanup_sig);
- sigint = TRUE;
- return;
+ /*
+ * Need to rearm the signal.
+ */
+ signal(SIGINT, cleanup_sig);
+ sigint = TRUE;
+ return;
}
#endif /* IGNORE_CTRL_C */
@@ -43,7 +43,6 @@ PUBLIC void cleanup_sig ARGS1(
* Reassert the AST.
*/
(void) signal(SIGINT, cleanup_sig);
- HadVMSInterrupt = TRUE;
if (!LYCursesON)
return;
@@ -51,7 +50,7 @@ PUBLIC void cleanup_sig ARGS1(
* Refresh screen to get rid of "cancel" message, then query.
*/
lynx_force_repaint();
- refresh();
+ LYrefresh();
/*
* Ask if exit is intended.
@@ -61,6 +60,7 @@ PUBLIC void cleanup_sig ARGS1(
} else {
c = HTConfirmDefault(REALLY_EXIT_N, NO);
}
+ HadVMSInterrupt = TRUE;
if (LYQuitDefaultYes == TRUE) {
if (c == NO) {
return;
@@ -127,7 +127,7 @@ PUBLIC void cleanup_sig ARGS1(
(void) signal(SIGTSTP, SIG_DFL);
#endif /* SIGTSTP */
if (sig != 0) {
- exit(0);
+ exit(EXIT_SUCCESS);
}
}
@@ -139,8 +139,8 @@ PUBLIC void cleanup_files NOARGS
{
LYCleanupTemp();
- if (rmdir(lynx_temp_space))
- perror("Could not remove the temp-directory");
+ if (lynx_temp_space != NULL && rmdir(lynx_temp_space))
+ perror("Could not remove the temp-directory");
FREE(lynx_temp_space);
}
@@ -166,22 +166,20 @@ PUBLIC void cleanup NOARGS
#endif /* !VMS */
if (LYCursesON) {
- move(LYlines-1, 0);
- clrtoeol();
+ LYmove(LYlines-1, 0);
+ LYclrtoeol();
lynx_stop_all_colors ();
- refresh();
+ LYrefresh();
stop_curses();
}
#ifdef EXP_CHARTRANS_AUTOSWITCH
-#ifdef LINUX
/*
* Currently implemented only for LINUX: Restore original font.
*/
UCChangeTerminalCodepage(-1, (LYUCcharset*)0);
-#endif /* LINUX */
#endif /* EXP_CHARTRANS_AUTOSWITCH */
#ifdef EXP_PERSISTENT_COOKIES
@@ -193,7 +191,7 @@ PUBLIC void cleanup NOARGS
* out as well.
*/
if (persistent_cookies)
- LYStoreCookies (LYCookieFile);
+ LYStoreCookies (LYCookieSaveFile);
#endif
cleanup_files();
diff --git a/gnu/usr.bin/lynx/src/LYCookie.c b/gnu/usr.bin/lynx/src/LYCookie.c
index 288385da794..b9a77f3d2e2 100644
--- a/gnu/usr.bin/lynx/src/LYCookie.c
+++ b/gnu/usr.bin/lynx/src/LYCookie.c
@@ -74,6 +74,9 @@
#define max_cookies_global 500
#define max_cookies_buffer 4096
+/* default for new domains, one of the invcheck_behaviour_t values: */
+#define DEFAULT_INVCHECK_BV INVCHECK_QUERY
+
/*
** The first level of the cookie list is a list indexed by the domain
** string; cookies with the same domain will be placed in the same
@@ -129,7 +132,7 @@ PRIVATE void MemAllocCopy ARGS3(
return;
}
- temp = (char *)calloc(1, ((end - start) + 1));
+ temp = typecallocn(char, (end - start) + 1);
if (temp == NULL)
outofmem(__FILE__, "MemAllocCopy");
LYstrncpy(temp, start, (end - start));
@@ -139,7 +142,7 @@ PRIVATE void MemAllocCopy ARGS3(
PRIVATE cookie * newCookie NOARGS
{
- cookie *p = (cookie *)calloc(1, sizeof(cookie));
+ cookie *p = typecalloc(cookie);
if (p == NULL)
outofmem(__FILE__, "newCookie");
@@ -238,17 +241,17 @@ PRIVATE BOOLEAN port_matches ARGS2(
{
CONST char *number = list;
- if (!(number && isdigit(*number)))
+ if (!(number && isdigit(UCH(*number))))
return(FALSE);
while (*number != '\0') {
if (atoi(number) == port) {
return(TRUE);
}
- while (isdigit(*number)) {
+ while (isdigit(UCH(*number))) {
number++;
}
- while (*number != '\0' && !isdigit(*number)) {
+ while (*number != '\0' && !isdigit(UCH(*number))) {
number++;
}
}
@@ -257,6 +260,42 @@ PRIVATE BOOLEAN port_matches ARGS2(
}
/*
+ * Returns the length of the given path ignoring trailing slashes.
+ */
+PRIVATE int ignore_trailing_slash ARGS1(CONST char *, a)
+{
+ int len = strlen(a);
+ while (len > 1 && a[len-1] == '/')
+ --len;
+ return len;
+}
+
+/*
+ * Check if the path 'a' is a prefix of path 'b', ignoring trailing slashes
+ * in either, since they denote an empty component.
+ */
+PRIVATE BOOL is_prefix ARGS2(CONST char *, a, CONST char *, b)
+{
+ int len_a = ignore_trailing_slash(a);
+ int len_b = ignore_trailing_slash(b);
+
+ if (len_a > len_b) {
+ return FALSE;
+ } else {
+ if (strncmp(a, b, len_a) != 0) {
+ return FALSE;
+ }
+ if (len_a < len_b && (len_a > 1 || a[0] != '/')) {
+ if (b[len_a] != '\0'
+ && b[len_a] != '/') {
+ return FALSE;
+ }
+ }
+ }
+ return TRUE;
+}
+
+/*
** Store a cookie somewhere in the domain list. - AK & FM
*/
PRIVATE void store_cookie ARGS3(
@@ -271,6 +310,9 @@ PRIVATE void store_cookie ARGS3(
CONST char *ptr;
domain_entry *de = NULL;
BOOL Replacement = FALSE;
+ int invprompt_reasons = 0; /* what is wrong with this cookie - kw */
+#define FAILS_COND1 0x01
+#define FAILS_COND4 0x02
if (co == NULL)
return;
@@ -294,7 +336,7 @@ PRIVATE void store_cookie ARGS3(
for (hl = domain_list; hl != NULL; hl = hl->next) {
de = (domain_entry *)hl->object;
if ((de != NULL && de->domain != NULL) &&
- !strcmp(co->domain, de->domain)) {
+ !strcasecomp(co->domain, de->domain)) {
cookie_list = de->cookie_list;
break;
}
@@ -315,33 +357,22 @@ PRIVATE void store_cookie ARGS3(
* then we want to bypass this check. The user should be queried
* if set to INVCHECK_QUERY.
*/
- if (strncmp(co->path, path, co->pathlen) != 0) {
- if((de != NULL && de->invcheck_bv != INVCHECK_LOOSE)
- || de == NULL) {
- if(de != NULL && de->invcheck_bv == INVCHECK_STRICT) {
- CTRACE(tfp, "store_cookie: Rejecting because '%s' is not a prefix of '%s'.\n",
- co->path, path);
- freeCookie(co);
- co = NULL;
- return;
- } else if ((de != NULL
- && de->invcheck_bv == INVCHECK_QUERY)
- || de == NULL) {
- char *msg = 0;
- HTSprintf0(&msg,
- INVALID_COOKIE_PATH_CONFIRMATION,
- co->path, path);
- if (!HTConfirm(msg)) {
- CTRACE(tfp, "store_cookie: Rejecting because '%s' is not a prefix of '%s'.\n",
- co->path, path);
- freeCookie(co);
- co = NULL;
- FREE(msg);
- return;
- } else {
- FREE(msg);
- }
- }
+ if (!is_prefix(co->path, path)) {
+ invcheck_behaviour_t invcheck_bv = (de ? de->invcheck_bv
+ : DEFAULT_INVCHECK_BV);
+ switch (invcheck_bv) {
+ case INVCHECK_LOOSE:
+ break; /* continue as if nothing were wrong */
+
+ case INVCHECK_QUERY:
+ invprompt_reasons |= FAILS_COND1;
+ break; /* will prompt later if we get that far */
+
+ case INVCHECK_STRICT:
+ CTRACE((tfp, "store_cookie: Rejecting because '%s' is not a prefix of '%s'.\n",
+ co->path, path));
+ freeCookie(co);
+ return;
}
}
/*
@@ -353,10 +384,9 @@ PRIVATE void store_cookie ARGS3(
* The hostname does not contain a dot.
*/
if (strchr(hostname, '.') == NULL) {
- CTRACE(tfp, "store_cookie: Rejecting because '%s' has no dot.\n",
- hostname);
+ CTRACE((tfp, "store_cookie: Rejecting because '%s' has no dot.\n",
+ hostname));
freeCookie(co);
- co = NULL;
return;
}
@@ -368,18 +398,16 @@ PRIVATE void store_cookie ARGS3(
* value otherwise qualified. - FM
*/
if (co->domain[0] != '.' || co->domain[1] == '\0') {
- CTRACE(tfp, "store_cookie: Rejecting domain '%s'.\n",
- co->domain);
+ CTRACE((tfp, "store_cookie: Rejecting domain '%s'.\n",
+ co->domain));
freeCookie(co);
- co = NULL;
return;
}
ptr = strchr((co->domain + 1), '.');
if (ptr == NULL || ptr[1] == '\0') {
- CTRACE(tfp, "store_cookie: Rejecting domain '%s'.\n",
- co->domain);
+ CTRACE((tfp, "store_cookie: Rejecting domain '%s'.\n",
+ co->domain));
freeCookie(co);
- co = NULL;
return;
}
@@ -388,10 +416,9 @@ PRIVATE void store_cookie ARGS3(
* not domain-match the Domain attribute.
*/
if (!host_matches(hostname, co->domain)) {
- CTRACE(tfp, "store_cookie: Rejecting domain '%s' for host '%s'.\n",
- co->domain, hostname);
+ CTRACE((tfp, "store_cookie: Rejecting domain '%s' for host '%s'.\n",
+ co->domain, hostname));
freeCookie(co);
- co = NULL;
return;
}
@@ -406,62 +433,86 @@ PRIVATE void store_cookie ARGS3(
*/
ptr = ((hostname + strlen(hostname)) - strlen(co->domain));
if (strchr(hostname, '.') < ptr) {
- if((de != NULL && de->invcheck_bv != INVCHECK_LOOSE)
- || de == NULL) {
- if(de != NULL && de->invcheck_bv == INVCHECK_STRICT) {
- CTRACE(tfp, "store_cookie: Rejecting domain '%s' for host '%s'.\n",
- co->domain,
- hostname);
- freeCookie(co);
- co = NULL;
- return;
- } else if ((de != NULL
- && de->invcheck_bv == INVCHECK_QUERY)
- || de == NULL) {
- char *msg = 0;
- HTSprintf0(&msg,
- INVALID_COOKIE_DOMAIN_CONFIRMATION,
- co->domain,
- hostname);
- if (!HTConfirm(msg)) {
- CTRACE(tfp, "store_cookie: Rejecting domain '%s' for host '%s'.\n",
+ invcheck_behaviour_t invcheck_bv = (de ? de->invcheck_bv
+ : DEFAULT_INVCHECK_BV);
+ switch (invcheck_bv) {
+ case INVCHECK_LOOSE:
+ break; /* continue as if nothing were wrong */
+
+ case INVCHECK_QUERY:
+ invprompt_reasons |= FAILS_COND4;
+ break; /* will prompt later if we get that far */
+
+ case INVCHECK_STRICT:
+ CTRACE((tfp, "store_cookie: Rejecting because '%s' is not a prefix of '%s'.\n",
+ co->path, path));
+ freeCookie(co);
+ return;
+ }
+ }
+ }
+
+ /*
+ * If we found reasons for issuing an invalid cookie confirmation
+ * prompt, do that now. Rejection by the user here is the last
+ * chance to completely ignore this cookie; after it passes this
+ * hurdle, it may at least supersede a previous cookie (even if
+ * it finally gets rejected). - kw
+ */
+ if (invprompt_reasons) {
+ char *msg = 0;
+ if (invprompt_reasons & FAILS_COND4) {
+ HTSprintf0(&msg,
+ INVALID_COOKIE_DOMAIN_CONFIRMATION,
+ co->domain,
+ hostname);
+ if (!HTConfirmDefault(msg, NO)) {
+ CTRACE((tfp, "store_cookie: Rejecting domain '%s' for host '%s'.\n",
co->domain,
- hostname);
- freeCookie(co);
- co = NULL;
- FREE(msg);
- return;
- }
- FREE(msg);
- }
- }
+ hostname));
+ freeCookie(co);
+ FREE(msg);
+ return;
+ }
}
+ if (invprompt_reasons & FAILS_COND1) {
+ HTSprintf0(&msg,
+ INVALID_COOKIE_PATH_CONFIRMATION,
+ co->path, path);
+ if (!HTConfirmDefault(msg, NO)) {
+ CTRACE((tfp, "store_cookie: Rejecting because '%s' is not a prefix of '%s'.\n",
+ co->path, path));
+ freeCookie(co);
+ FREE(msg);
+ return;
+ }
+ }
+ FREE(msg);
}
if (hl == NULL) {
/*
* Domain not found; add a new entry for this domain.
*/
- de = (domain_entry *)calloc(1, sizeof(domain_entry));
+ de = typecalloc(domain_entry);
if (de == NULL)
outofmem(__FILE__, "store_cookie");
#if 0 /* was: ifdef EXP_PERSISTENT_COOKIES */
/*
- * Ok, this is a problem. The first cookie for a domain
- * effectively sets the policy for that whole domain - for
- * something like Netlink, where there are lots of websites
- * under www.netlink.co.uk, this isn't sensible. However,
- * taking this sort of decision down to cookie level also
- * isn't sensible. Perhaps something based on the domain
- * and the path in conjunction makes more sense? - RP
+ * The default behavior for this new domain could be set
+ * differently if the cookie comes from a file, as the
+ * code had it originally, but there doesn't seem to be
+ * a good reason for it any more; setting more permissive
+ * behavior for individual domains is now possible via
+ * configuration options. - kw
*/
if (persistent_cookies
&& (co->flags & COOKIE_FLAG_FROM_FILE))
- de->bv = FROM_FILE;
+ de->bv = ACCEPT_ALWAYS; /* ?? */
else
#endif
de->bv = QUERY_USER;
- de->invcheck_bv = INVCHECK_QUERY; /* should this go here? */
+ de->invcheck_bv = DEFAULT_INVCHECK_BV; /* should this go here? */
cookie_list = de->cookie_list = HTList_new();
StrAllocCopy(de->domain, co->domain);
HTList_appendObject(domain_list, de);
@@ -490,7 +541,7 @@ PRIVATE void store_cookie ARGS3(
* Check if this cookie matches the one we're inserting.
*/
} else if ((c2) &&
- !strcmp(co->domain, c2->domain) &&
+ !strcasecomp(co->domain, c2->domain) &&
!strcmp(co->path, c2->path) &&
!strcmp(co->name, c2->name)) {
HTList_removeObject(cookie_list, c2);
@@ -532,7 +583,7 @@ PRIVATE void store_cookie ARGS3(
* Don't add the cookie if we're over the domain's limit. - FM
*/
} else if (HTList_count(cookie_list) > max_cookies_domain) {
- CTRACE(tfp, "store_cookie: Domain's cookie limit exceeded! Rejecting cookie.\n");
+ CTRACE((tfp, "store_cookie: Domain's cookie limit exceeded! Rejecting cookie.\n"));
freeCookie(co);
co = NULL;
@@ -540,15 +591,20 @@ PRIVATE void store_cookie ARGS3(
* Don't add the cookie if we're over the total cookie limit. - FM
*/
} else if (total_cookies > max_cookies_global) {
- CTRACE(tfp, "store_cookie: Total cookie limit exceeded! Rejecting cookie.\n");
+ CTRACE((tfp, "store_cookie: Total cookie limit exceeded! Rejecting cookie.\n"));
freeCookie(co);
co = NULL;
/*
* Don't add the cookie if the value is NULL. - BJP
*/
- } else if (co->value[0] == '\0') {
- CTRACE(tfp, "store_cookie: Value is NULL! Not storing cookie.\n");
+ /*
+ * Presence of value is now needed (indicated normally by '='),
+ * but it can now be an empty string.
+ * - kw 1999-06-24
+ */
+ } else if (co->value == NULL) { /* should not happen - kw */
+ CTRACE((tfp, "store_cookie: Value is NULL! Not storing cookie.\n"));
freeCookie(co);
co = NULL;
@@ -591,8 +647,8 @@ PRIVATE void store_cookie ARGS3(
** include in a Cookie: request header. - AK & FM
*/
PRIVATE char * scan_cookie_sublist ARGS6(
- CONST char *, hostname,
- CONST char *, path,
+ char *, hostname,
+ char *, path,
int, port,
HTList *, sublist,
char *, header,
@@ -609,22 +665,24 @@ PRIVATE char * scan_cookie_sublist ARGS6(
co = (cookie *)hl->object;
next = hl->next;
- if (co) {
- CTRACE(tfp, "Checking cookie %p %s=%s\n",
+ if ((co) && /* speed-up host_matches() and limit trace output */
+ (LYstrstr(hostname, co->domain) != NULL))
+ {
+ CTRACE((tfp, "Checking cookie %p %s=%s\n",
hl,
(co->name ? co->name : "(no name)"),
- (co->value ? co->value : "(no value)"));
- CTRACE(tfp, "\t%s %s %d %s %s %d%s\n",
+ (co->value ? co->value : "(no value)")));
+ CTRACE((tfp, "\t%s %s %d %s %s %d%s\n",
hostname,
(co->domain ? co->domain : "(no domain)"),
host_matches(hostname, co->domain),
path, co->path,
(co->pathlen > 0)
- ? strncmp(path, co->path, co->pathlen)
+ ? !is_prefix(co->path, path)
: 0,
(co->flags & COOKIE_FLAG_SECURE)
? " secure"
- : "");
+ : ""));
}
/*
* Check if this cookie has expired, and if so, delete it.
@@ -642,7 +700,7 @@ PRIVATE char * scan_cookie_sublist ARGS6(
*/
if (((co != NULL) &&
host_matches(hostname, co->domain)) &&
- (co->pathlen == 0 || !strncmp(path, co->path, co->pathlen))) {
+ (co->pathlen == 0 || is_prefix(co->path, path))) {
/*
* Skip if the secure flag is set and we don't have
* a secure connection. HTTP.c presently treats only
@@ -738,7 +796,7 @@ PRIVATE char * scan_cookie_sublist ARGS6(
StrAllocCat(header, "\"");
len += (strlen(co->path) + 10);
}
- if (co->PortList && isdigit((unsigned char)*co->PortList)) {
+ if (co->PortList && isdigit(UCH(*co->PortList))) {
/*
* Append the port attribute. - FM
*/
@@ -811,7 +869,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
*/
p = (SetCookie2 ? SetCookie2 : "");
if (SetCookie && *p) {
- CTRACE(tfp, "LYProcessSetCookies: Using Set-Cookie2 header.\n");
+ CTRACE((tfp, "LYProcessSetCookies: Using Set-Cookie2 header.\n"));
}
while (NumCookies <= max_cookies_domain && *p) {
attr_start = attr_end = value_start = value_end = NULL;
@@ -820,7 +878,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
* Get the attribute name.
*/
attr_start = p;
- while (*p != '\0' && !isspace((unsigned char)*p) &&
+ while (*p != '\0' && !isspace(UCH(*p)) &&
*p != '=' && *p != ';' && *p != ',')
p++;
attr_end = p;
@@ -859,7 +917,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
!strncasecomp(attr_start, "Expires", 7)) {
int spaces = 6;
value_start = p;
- if (isdigit((unsigned char)*p)) {
+ if (isdigit(UCH(*p))) {
/*
* No alphabetic day field. - FM
*/
@@ -868,18 +926,18 @@ PRIVATE void LYProcessSetCookies ARGS6(
/*
* Skip the alphabetic day field. - FM
*/
- while (*p != '\0' && isalpha((unsigned char)*p)) {
+ while (*p != '\0' && isalpha(UCH(*p))) {
p++;
}
- while (*p == ',' || isspace((unsigned char)*p)) {
+ while (*p == ',' || isspace(UCH(*p))) {
p++;
}
spaces--;
}
while (*p != '\0' && *p != ';' && *p != ',' && spaces) {
p++;
- if (isspace((unsigned char)*p)) {
- while (isspace((unsigned char)*(p + 1)))
+ if (isspace(UCH(*p))) {
+ while (isspace(UCH(*(p + 1))))
p++;
spaces--;
} else if (*p == '-') {
@@ -896,14 +954,14 @@ PRIVATE void LYProcessSetCookies ARGS6(
*/
} else if ((attr_end - attr_start) == 4 &&
!strncasecomp(attr_start, "port", 4) &&
- isdigit((unsigned char)*p)) {
+ isdigit(UCH(*p))) {
/*
* The value starts as an unquoted number.
*/
CONST char *cp, *cp1;
value_start = p;
while (1) {
- while (isdigit((unsigned char)*p))
+ while (isdigit(UCH(*p)))
p++;
value_end = p;
p = LYSkipCBlanks(p);
@@ -911,9 +969,9 @@ PRIVATE void LYProcessSetCookies ARGS6(
break;
if (*p == ',') {
cp = LYSkipCBlanks(p + 1);
- if (*cp != '\0' && isdigit((unsigned char)*cp)) {
+ if (*cp != '\0' && isdigit(UCH(*cp))) {
cp1 = cp;
- while (isdigit((unsigned char)*cp1))
+ while (isdigit(UCH(*cp1)))
cp1++;
cp1 = LYSkipCBlanks(cp1);
if (*cp1 == '\0' || *cp1 == ',' || *cp1 == ';') {
@@ -929,27 +987,38 @@ PRIVATE void LYProcessSetCookies ARGS6(
* Trim trailing spaces.
*/
if ((value_end > value_start) &&
- isspace((unsigned char)*(value_end - 1))) {
+ isspace(UCH(*(value_end - 1)))) {
value_end--;
while ((value_end > (value_start + 1)) &&
- isspace((unsigned char)*value_end) &&
- isspace((unsigned char)*(value_end - 1))) {
+ isspace(UCH(*value_end)) &&
+ isspace(UCH(*(value_end - 1)))) {
value_end--;
}
}
break;
}
} else if (*p == '"') {
+ BOOLEAN escaped = FALSE;
/*
- * It's a quoted string.
+ * It looks like quoted string.
*/
p++;
value_start = p;
- while (*p != '\0' && *p != '"')
+ while (*p != '\0' && (*p != '"' || escaped)) {
+ escaped = (BOOL) (!escaped && *p == '\\');
p++;
- value_end = p;
- if (*p == '"')
+ }
+ if (p != value_start && *p == '"' && !escaped) {
+ value_end = p;
p++;
+ Quoted = TRUE;
+ } else {
+ value_start--;
+ value_end = p;
+ if (*p)
+ p++;
+ Quoted = FALSE;
+ }
} else {
/*
* Otherwise, it's an unquoted string.
@@ -962,11 +1031,11 @@ PRIVATE void LYProcessSetCookies ARGS6(
* Trim trailing spaces.
*/
if ((value_end > value_start) &&
- isspace((unsigned char)*(value_end - 1))) {
+ isspace(UCH(*(value_end - 1)))) {
value_end--;
while ((value_end > (value_start + 1)) &&
- isspace((unsigned char)*value_end) &&
- isspace((unsigned char)*(value_end - 1))) {
+ isspace(UCH(*value_end)) &&
+ isspace(UCH(*(value_end - 1)))) {
value_end--;
}
}
@@ -987,13 +1056,18 @@ PRIVATE void LYProcessSetCookies ARGS6(
BOOLEAN known_attr = NO;
char *value = NULL;
- if (value_end > value_start) {
+ if (value_start && value_end >= value_start) {
+ /*
+ * Presence of value is now needed (indicated normally by '=')
+ * to start a cookie, but it can now be an empty string.
+ * - kw 1999-06-24
+ */
int value_len = (value_end - value_start);
if (value_len > max_cookies_buffer) {
value_len = max_cookies_buffer;
}
- value = (char *)calloc(1, value_len + 1);
+ value = typecallocn(char, value_len + 1);
if (value == NULL)
outofmem(__FILE__, "LYProcessSetCookies");
LYstrncpy(value, value_start, value_len);
@@ -1058,8 +1132,8 @@ PRIVATE void LYProcessSetCookies ARGS6(
url_type == HTTPS_URL_TYPE)) {
length += strlen(cur_cookie->commentURL);
} else {
- CTRACE(tfp, "LYProcessSetCookies: Rejecting commentURL value '%s'\n",
- cur_cookie->commentURL);
+ CTRACE((tfp, "LYProcessSetCookies: Rejecting commentURL value '%s'\n",
+ cur_cookie->commentURL));
FREE(cur_cookie->commentURL);
}
}
@@ -1085,12 +1159,12 @@ PRIVATE void LYProcessSetCookies ARGS6(
if (ptr != NULL && ptr[1] != '\0') {
ptr = value;
while (*ptr == '.' ||
- isdigit((unsigned char)*ptr))
+ isdigit(UCH(*ptr)))
ptr++;
if (*ptr != '\0') {
- CTRACE(tfp,
+ CTRACE((tfp,
"LYProcessSetCookies: Adding lead dot for domain value '%s'\n",
- value);
+ value));
StrAllocCopy(cur_cookie->domain, ".");
StrAllocCat(cur_cookie->domain, value);
} else {
@@ -1125,7 +1199,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
cur_cookie->PortList == NULL) {
char *cp = value;
while ((*cp != '\0') &&
- (isdigit((unsigned char)*cp) ||
+ (isdigit(UCH(*cp)) ||
*cp == ',' || *cp == ' ')) {
cp++;
}
@@ -1174,9 +1248,9 @@ PRIVATE void LYProcessSetCookies ARGS6(
cur_cookie->expires = (time_t)0;
} else {
cur_cookie->expires = (time(NULL) + temp);
- CTRACE(tfp, "LYSetCookie: expires %ld, %s",
+ CTRACE((tfp, "LYSetCookie: expires %ld, %s",
(long) cur_cookie->expires,
- ctime(&cur_cookie->expires));
+ ctime(&cur_cookie->expires)));
}
MaxAgeAttrSet = TRUE;
}
@@ -1196,9 +1270,9 @@ PRIVATE void LYProcessSetCookies ARGS6(
cur_cookie->flags |= COOKIE_FLAG_EXPIRES_SET;
cur_cookie->expires = LYmktime(value, FALSE);
if (cur_cookie->expires > 0) {
- CTRACE(tfp, "LYSetCookie: expires %ld, %s",
+ CTRACE((tfp, "LYSetCookie: expires %ld, %s",
(long) cur_cookie->expires,
- ctime(&cur_cookie->expires));
+ ctime(&cur_cookie->expires)));
}
}
}
@@ -1218,8 +1292,11 @@ PRIVATE void LYProcessSetCookies ARGS6(
* no value? This seems to be needed for sites that reset a
* cookie by nulling out the value. If this causes problems,
* we can go back to the original behavior above. - BJP
+ *
+ * Presence of value is now needed (indicated normally by '='),
+ * but it can now be an empty string. - kw 1999-06-24
*/
- if (!known_attr) {
+ if (!known_attr && value && value_end >= value_start) {
/*
* If we've started a cookie, and it's not too big,
* save it in the CombinedCookies list. - FM
@@ -1234,16 +1311,16 @@ PRIVATE void LYProcessSetCookies ARGS6(
}
HTList_appendObject(CombinedCookies, cur_cookie);
} else if (cur_cookie != NULL) {
- CTRACE(tfp,
+ CTRACE((tfp,
"LYProcessSetCookies: Rejecting Set-Cookie2: %s=%s\n",
(cur_cookie->name ?
cur_cookie->name : "[no name]"),
(cur_cookie->value ?
- cur_cookie->value : "[no value]"));
- CTRACE(tfp,
+ cur_cookie->value : "[no value]")));
+ CTRACE((tfp,
invalidport ?
" due to excessive length!\n"
- : " due to invalid port!\n");
+ : " due to invalid port!\n"));
if (invalidport) {
NumCookies --;
}
@@ -1285,23 +1362,23 @@ PRIVATE void LYProcessSetCookies ARGS6(
}
HTList_appendObject(CombinedCookies, cur_cookie);
} else if (cur_cookie != NULL && !invalidport) {
- CTRACE(tfp, "LYProcessSetCookies: Rejecting Set-Cookie2: %s=%s\n",
+ CTRACE((tfp, "LYProcessSetCookies: Rejecting Set-Cookie2: %s=%s\n",
(cur_cookie->name ? cur_cookie->name : "[no name]"),
- (cur_cookie->value ? cur_cookie->value : "[no value]"));
- CTRACE(tfp, " due to excessive %s%s%s\n",
+ (cur_cookie->value ? cur_cookie->value : "[no value]")));
+ CTRACE((tfp, " due to excessive %s%s%s\n",
(length > max_cookies_buffer ? "length" : ""),
(length > max_cookies_buffer &&
NumCookies > max_cookies_domain
? " and "
: ""),
- (NumCookies > max_cookies_domain ? "number!\n" : "!\n"));
+ (NumCookies > max_cookies_domain ? "number!\n" : "!\n")));
freeCookie(cur_cookie);
cur_cookie = NULL;
} else if (cur_cookie != NULL) { /* invalidport */
- CTRACE(tfp, "LYProcessSetCookies: Rejecting Set-Cookie2: %s=%s\n",
+ CTRACE((tfp, "LYProcessSetCookies: Rejecting Set-Cookie2: %s=%s\n",
(cur_cookie->name ? cur_cookie->name : "[no name]"),
- (cur_cookie->value ? cur_cookie->value : "[no value]"));
- CTRACE(tfp, " due to invalid port!\n");
+ (cur_cookie->value ? cur_cookie->value : "[no value]")));
+ CTRACE((tfp, " due to invalid port!\n"));
NumCookies --;
freeCookie(cur_cookie);
cur_cookie = NULL;
@@ -1316,7 +1393,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
cur_cookie = NULL;
p = ((SetCookie && !(SetCookie2 && *SetCookie2)) ? SetCookie : "");
if (SetCookie2 && *p) {
- CTRACE(tfp, "LYProcessSetCookies: Using Set-Cookie header.\n");
+ CTRACE((tfp, "LYProcessSetCookies: Using Set-Cookie header.\n"));
}
while (NumCookies <= max_cookies_domain && *p) {
attr_start = attr_end = value_start = value_end = NULL;
@@ -1325,7 +1402,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
* Get the attribute name.
*/
attr_start = p;
- while (*p != '\0' && !isspace((unsigned char)*p) &&
+ while (*p != '\0' && !isspace(UCH(*p)) &&
*p != '=' && *p != ';' && *p != ',')
p++;
attr_end = p;
@@ -1360,7 +1437,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
!strncasecomp(attr_start, "Expires", 7)) {
int spaces = 6;
value_start = p;
- if (isdigit((unsigned char)*p)) {
+ if (isdigit(UCH(*p))) {
/*
* No alphabetic day field. - FM
*/
@@ -1369,18 +1446,18 @@ PRIVATE void LYProcessSetCookies ARGS6(
/*
* Skip the alphabetic day field. - FM
*/
- while (*p != '\0' && isalpha((unsigned char)*p)) {
+ while (*p != '\0' && isalpha(UCH(*p))) {
p++;
}
- while (*p == ',' || isspace((unsigned char)*p)) {
+ while (*p == ',' || isspace(UCH(*p))) {
p++;
}
spaces--;
}
while (*p != '\0' && *p != ';' && *p != ',' && spaces) {
p++;
- if (isspace((unsigned char)*p)) {
- while (isspace((unsigned char)*(p + 1)))
+ if (isspace(UCH(*p))) {
+ while (isspace(UCH(*(p + 1))))
p++;
spaces--;
} else if (*p == '-') {
@@ -1397,14 +1474,14 @@ PRIVATE void LYProcessSetCookies ARGS6(
*/
} else if ((attr_end - attr_start) == 4 &&
!strncasecomp(attr_start, "port", 4) &&
- isdigit((unsigned char)*p)) {
+ isdigit(UCH(*p))) {
/*
* The value starts as an unquoted number.
*/
CONST char *cp, *cp1;
value_start = p;
while (1) {
- while (isdigit((unsigned char)*p))
+ while (isdigit(UCH(*p)))
p++;
value_end = p;
p = LYSkipCBlanks(p);
@@ -1412,9 +1489,9 @@ PRIVATE void LYProcessSetCookies ARGS6(
break;
if (*p == ',') {
cp = LYSkipCBlanks(p + 1);
- if (*cp != '\0' && isdigit((unsigned char)*cp)) {
+ if (*cp != '\0' && isdigit(UCH(*cp))) {
cp1 = cp;
- while (isdigit((unsigned char)*cp1))
+ while (isdigit(UCH(*cp1)))
cp1++;
cp1 = LYSkipCBlanks(cp1);
if (*cp1 == '\0' || *cp1 == ',' || *cp1 == ';') {
@@ -1430,28 +1507,38 @@ PRIVATE void LYProcessSetCookies ARGS6(
* Trim trailing spaces.
*/
if ((value_end > value_start) &&
- isspace((unsigned char)*(value_end - 1))) {
+ isspace(UCH(*(value_end - 1)))) {
value_end--;
while ((value_end > (value_start + 1)) &&
- isspace((unsigned char)*value_end) &&
- isspace((unsigned char)*(value_end - 1))) {
+ isspace(UCH(*value_end)) &&
+ isspace(UCH(*(value_end - 1)))) {
value_end--;
}
}
break;
}
} else if (*p == '"') {
+ BOOLEAN escaped = FALSE;
/*
- * It's a quoted string.
+ * It looks like quoted string.
*/
p++;
value_start = p;
- while (*p != '\0' && *p != '"')
+ while (*p != '\0' && (*p != '"' || escaped)) {
+ escaped = (BOOL) (!escaped && *p == '\\');
p++;
- value_end = p;
- if (*p == '"')
+ }
+ if (p != value_start && *p == '"' && !escaped) {
+ value_end = p;
p++;
- Quoted = TRUE;
+ Quoted = TRUE;
+ } else {
+ value_start--;
+ value_end = p;
+ if (*p)
+ p++;
+ Quoted = FALSE;
+ }
} else {
/*
* Otherwise, it's an unquoted string.
@@ -1464,11 +1551,11 @@ PRIVATE void LYProcessSetCookies ARGS6(
* Trim trailing spaces.
*/
if ((value_end > value_start) &&
- isspace((unsigned char)*(value_end - 1))) {
+ isspace(UCH(*(value_end - 1)))) {
value_end--;
while ((value_end > (value_start + 1)) &&
- isspace((unsigned char)*value_end) &&
- isspace((unsigned char)*(value_end - 1))) {
+ isspace(UCH(*value_end)) &&
+ isspace(UCH(*(value_end - 1)))) {
value_end--;
}
}
@@ -1489,15 +1576,20 @@ PRIVATE void LYProcessSetCookies ARGS6(
BOOLEAN known_attr = NO;
char *value = NULL;
- if (value_end > value_start) {
+ if (value_start && value_end >= value_start) {
+ /*
+ * Presence of value is now needed (indicated normally by '=')
+ * to start a cookie, but it can now be an empty string.
+ * - kw 1999-06-24
+ */
int value_len = (value_end - value_start);
if (value_len > max_cookies_buffer) {
value_len = max_cookies_buffer;
}
- value = (char *)calloc(1, value_len + 1);
+ value = typecallocn(char, value_len + 1);
if (value == NULL)
- outofmem(__FILE__, "LYProcessSetCookie");
+ outofmem(__FILE__, "LYProcessSetCookies");
LYstrncpy(value, value_start, value_len);
}
if (len == 6 && !strncasecomp(attr_start, "secure", 6)) {
@@ -1560,8 +1652,8 @@ PRIVATE void LYProcessSetCookies ARGS6(
url_type == HTTPS_URL_TYPE)) {
length += strlen(cur_cookie->commentURL);
} else {
- CTRACE(tfp, "LYProcessSetCookies: Rejecting commentURL value '%s'\n",
- cur_cookie->commentURL);
+ CTRACE((tfp, "LYProcessSetCookies: Rejecting commentURL value '%s'\n",
+ cur_cookie->commentURL));
FREE(cur_cookie->commentURL);
}
}
@@ -1587,12 +1679,12 @@ PRIVATE void LYProcessSetCookies ARGS6(
if (ptr != NULL && ptr[1] != '\0') {
ptr = value;
while (*ptr == '.' ||
- isdigit((unsigned char)*ptr))
+ isdigit(UCH(*ptr)))
ptr++;
if (*ptr != '\0') {
- CTRACE(tfp,
+ CTRACE((tfp,
"LYProcessSetCookies: Adding lead dot for domain value '%s'\n",
- value);
+ value));
StrAllocCopy(cur_cookie->domain, ".");
StrAllocCat(cur_cookie->domain, value);
} else {
@@ -1627,7 +1719,7 @@ PRIVATE void LYProcessSetCookies ARGS6(
cur_cookie->PortList == NULL) {
char *cp = value;
while ((*cp != '\0') &&
- (isdigit((unsigned char)*cp) ||
+ (isdigit(UCH(*cp)) ||
*cp == ',' || *cp == ' ')) {
cp++;
}
@@ -1705,8 +1797,11 @@ PRIVATE void LYProcessSetCookies ARGS6(
* no value? This seems to be needed for sites that reset a
* cookie by nulling out the value. If this causes problems,
* we can go back to the original behavior above. - BJP
+ *
+ * Presence of value is now needed (indicated normally by '='),
+ * but it can now be an empty string. - kw 1999-06-24
*/
- if (!known_attr) {
+ if (!known_attr && value && value_end >= value_start) {
/*
* If we've started a cookie, and it's not too big,
* save it in the CombinedCookies list. - FM
@@ -1725,12 +1820,12 @@ PRIVATE void LYProcessSetCookies ARGS6(
}
HTList_appendObject(CombinedCookies, cur_cookie);
} else if (cur_cookie != NULL) {
- CTRACE(tfp, "LYProcessSetCookies: Rejecting Set-Cookie: %s=%s\n",
+ CTRACE((tfp, "LYProcessSetCookies: Rejecting Set-Cookie: %s=%s\n",
(cur_cookie->name ?
cur_cookie->name : "[no name]"),
(cur_cookie->value ?
- cur_cookie->value : "[no value]"));
- CTRACE(tfp, " due to excessive length!\n");
+ cur_cookie->value : "[no value]")));
+ CTRACE((tfp, " due to excessive length!\n"));
freeCookie(cur_cookie);
cur_cookie = NULL;
}
@@ -1768,13 +1863,13 @@ PRIVATE void LYProcessSetCookies ARGS6(
}
HTList_appendObject(CombinedCookies, cur_cookie);
} else if (cur_cookie != NULL) {
- CTRACE(tfp, "LYProcessSetCookies: Rejecting Set-Cookie: %s=%s\n",
+ CTRACE((tfp, "LYProcessSetCookies: Rejecting Set-Cookie: %s=%s\n",
(cur_cookie->name ? cur_cookie->name : "[no name]"),
- (cur_cookie->value ? cur_cookie->value : "[no value]"));
- CTRACE(tfp, " due to excessive %s%s%s\n",
+ (cur_cookie->value ? cur_cookie->value : "[no value]")));
+ CTRACE((tfp, " due to excessive %s%s%s\n",
(length > max_cookies_buffer ? "length" : ""),
(length > max_cookies_buffer && NumCookies > max_cookies_domain ? " and " : ""),
- (NumCookies > max_cookies_domain ? "number!\n" : "!\n"));
+ (NumCookies > max_cookies_domain ? "number!\n" : "!\n")));
freeCookie(cur_cookie);
cur_cookie = NULL;
}
@@ -1785,19 +1880,19 @@ PRIVATE void LYProcessSetCookies ARGS6(
*/
cl = CombinedCookies;
while (NULL != (co = (cookie *)HTList_nextObject(cl))) {
- CTRACE(tfp, "LYProcessSetCookie: attr=value pair: '%s=%s'\n",
+ CTRACE((tfp, "LYProcessSetCookie: attr=value pair: '%s=%s'\n",
(co->name ? co->name : "[no name]"),
- (co->value ? co->value : "[no value]"));
+ (co->value ? co->value : "[no value]")));
if (co->expires > 0) {
- CTRACE(tfp, " expires: %ld, %s\n",
+ CTRACE((tfp, " expires: %ld, %s\n",
(long)co->expires,
- ctime(&co->expires));
+ ctime(&co->expires)));
}
if (!strncasecomp(address, "https:", 6) &&
LYForceSSLCookiesSecure == TRUE &&
!(co->flags & COOKIE_FLAG_SECURE)) {
co->flags |= COOKIE_FLAG_SECURE;
- CTRACE(tfp, " Forced the 'secure' flag on.\n");
+ CTRACE((tfp, " Forced the 'secure' flag on.\n"));
}
store_cookie(co, hostname, path);
}
@@ -1837,15 +1932,7 @@ PUBLIC void LYSetCookie ARGS3(
} else if (!strncasecomp(address, "https:", 6)) {
port = 443;
}
- if (((path = HTParse(address, "",
- PARSE_PATH|PARSE_PUNCTUATION)) != NULL) &&
- (ptr = strrchr(path, '/')) != NULL) {
- if (ptr == path) {
- *(ptr+1) = '\0'; /* Leave a single '/' alone */
- } else {
- *ptr = '\0';
- }
- }
+ path = HTParse(address, "", PARSE_PATH|PARSE_PUNCTUATION);
if (!(SetCookie && *SetCookie) &&
!(SetCookie2 && *SetCookie2)) {
/*
@@ -1855,19 +1942,19 @@ PUBLIC void LYSetCookie ARGS3(
*/
BadHeaders = TRUE;
}
- CTRACE(tfp, "LYSetCookie called with host '%s', path '%s',\n",
+ CTRACE((tfp, "LYSetCookie called with host '%s', path '%s',\n",
(hostname ? hostname : ""),
- (path ? path : ""));
+ (path ? path : "")));
if (SetCookie) {
- CTRACE(tfp, " and Set-Cookie: '%s'\n",
- (SetCookie ? SetCookie : ""));
+ CTRACE((tfp, " and Set-Cookie: '%s'\n",
+ (SetCookie ? SetCookie : "")));
}
if (SetCookie2) {
- CTRACE(tfp, " and Set-Cookie2: '%s'\n",
- (SetCookie2 ? SetCookie2 : ""));
+ CTRACE((tfp, " and Set-Cookie2: '%s'\n",
+ (SetCookie2 ? SetCookie2 : "")));
}
if (LYSetCookies == FALSE || BadHeaders == TRUE) {
- CTRACE(tfp, " Ignoring this Set-Cookie/Set-Cookie2 request.\n");
+ CTRACE((tfp, " Ignoring this Set-Cookie/Set-Cookie2 request.\n"));
}
/*
@@ -1893,8 +1980,8 @@ PUBLIC void LYSetCookie ARGS3(
** if needed. - AK & FM
*/
PUBLIC char * LYCookie ARGS4(
- CONST char *, hostname,
- CONST char *, path,
+ char *, hostname,
+ char *, path,
int, port,
BOOL, secure)
{
@@ -1902,10 +1989,10 @@ PUBLIC char * LYCookie ARGS4(
HTList *hl = domain_list, *next = NULL;
domain_entry *de;
- CTRACE(tfp, "LYCookie: Searching for '%s:%d', '%s'.\n",
- (hostname ? hostname : "(null)"),
+ CTRACE((tfp, "LYCookie: Searching for '%s:%d', '%s'.\n",
+ NONNULL(hostname),
port,
- (path ? path : "(null)"));
+ NONNULL(path)));
/*
* Search the cookie_list elements in the domain_list
@@ -1924,7 +2011,7 @@ PUBLIC char * LYCookie ARGS4(
*/
header = scan_cookie_sublist(hostname, path, port,
de->cookie_list, header, secure);
- } else if (de->bv == QUERY_USER && de->invcheck_bv == INVCHECK_QUERY) {
+ } else if (de->bv == QUERY_USER && de->invcheck_bv == DEFAULT_INVCHECK_BV) {
/*
* No cookies in this domain, and no default
* accept/reject choice was set by the user,
@@ -1971,11 +2058,11 @@ PUBLIC void LYLoadCookies ARGS1 (
};
time_t expires;
- cookie_handle = fopen(cookie_file, "r+");
+ cookie_handle = fopen(cookie_file, TXT_R);
if (!cookie_handle)
return;
- CTRACE(tfp, "LYLoadCookies: reading cookies from %s\n", cookie_file);
+ CTRACE((tfp, "LYLoadCookies: reading cookies from %s\n", cookie_file));
number_of_file_cookies = 0;
while (LYSafeGets(&buf, cookie_handle) != 0) {
@@ -1998,7 +2085,10 @@ PUBLIC void LYLoadCookies ARGS1 (
while(buf[i] != '\n' && buf[i] != 0) {
i++;
}
- buf[i] = '\0';
+ if (buf[i] == '\n') {
+ buf[i++] = '\t'; /* add sep after line if enough space - kw */
+ buf[i] = '\0';
+ }
/*
* Tokenise the cookie line into its component parts -
@@ -2010,12 +2100,18 @@ PUBLIC void LYLoadCookies ARGS1 (
* 'fixed' by using strsep instead of strtok. No idea
* what kind of platform problems this might introduce. - RP
*/
- CTRACE(tfp, "LYLoadCookies: tokenising %s\n", buf);
+ /*
+ * This fails when the path is blank
+ *
+ * sscanf(buf, "%s\t%s\t%s\t%s\t%d\t%s\t%[ -~]",
+ * domain, what, path, secure, &expires, name, value);
+ */
+ CTRACE((tfp, "LYLoadCookies: tokenising %s\n", buf));
tok_ptr = buf;
tok_out = LYstrsep(&tok_ptr, "\t");
for (tok_loop = 0; tok_out && tok_values[tok_loop].s; tok_loop++) {
- CTRACE(tfp, "\t%d:%p:%p:[%s]\n",
- tok_loop, tok_values[tok_loop].s, tok_out, tok_out);
+ CTRACE((tfp, "\t%d:%p:%p:[%s]\n",
+ tok_loop, tok_values[tok_loop].s, tok_out, tok_out));
LYstrncpy(tok_values[tok_loop].s, tok_out, tok_values[tok_loop].n);
/*
* It looks like strtok ignores a leading delimiter,
@@ -2025,23 +2121,30 @@ PUBLIC void LYLoadCookies ARGS1 (
*/
tok_out = LYstrsep(&tok_ptr, "\t");
}
- expires = atol(expires_a);
- /*
- * This fails when the path is blank
- *
- * sscanf(buf, "%s\t%s\t%s\t%s\t%d\t%s\t%[ -~]",
- * domain, what, path, secure, &expires, name, value);
- */
+ if (tok_values[tok_loop].s) {
+ /* tok_out in above loop must have been NULL prematurely - kw */
+ CTRACE((tfp, "*** wrong format: not enough tokens, ignoring line!\n"));
+ continue;
+ }
- CTRACE(tfp, "expires:\t%s\n", ctime(&expires));
-/* CTRACE(tfp, "%s\t%s\t%s\t%s\t%ld\t%s\t%s\tREADCOOKIE\n", */
-/* domain, what, path, secure, (long) expires, name, value); */
+ expires = atol(expires_a);
+ CTRACE((tfp, "expires:\t%s\n", ctime(&expires)));
+/* CTRACE((tfp, "%s\t%s\t%s\t%s\t%ld\t%s\t%s\tREADCOOKIE\n", */
+/* domain, what, path, secure, (long) expires, name, value)); */
moo = newCookie();
StrAllocCopy(moo->domain, domain);
StrAllocCopy(moo->path, path);
StrAllocCopy(moo->name, name);
- StrAllocCopy(moo->value, value);
+ if (value && value[0] == '"' &&
+ value[1] && value[strlen(value)-1] == '"' &&
+ value[strlen(value)-2] != '\\') {
+ value[strlen(value)-1] = '\0';
+ StrAllocCopy(moo->value, value+1);
+ moo->quoted = TRUE;
+ } else {
+ StrAllocCopy(moo->value, value);
+ }
moo->pathlen = strlen(moo->path);
/*
* Justification for following flags:
@@ -2091,22 +2194,24 @@ PUBLIC void LYLoadCookies ARGS1 (
*/
store_cookie(moo, domain, path);
}
- fclose (cookie_handle);
+ LYCloseInput (cookie_handle);
}
/* rjp - experimental persistent cookie support */
PUBLIC void LYStoreCookies ARGS1 (
char *, cookie_file)
{
-#if 0
- char *buf = NULL;
-#endif
HTList *dl, *cl;
domain_entry *de;
cookie *co;
FILE *cookie_handle;
time_t now = time(NULL); /* system specific? - RP */
+ if (!strcmp(cookie_file, "/dev/null")) {
+ /* We give /dev/null the Unix meaning, regardless of OS */
+ return;
+ }
+
/*
* Check whether we have something to do. - FM
*/
@@ -2118,7 +2223,7 @@ PUBLIC void LYStoreCookies ARGS1 (
return;
}
- CTRACE(tfp, "LYStoreCookies: save cookies to %s on exit\n", cookie_file);
+ CTRACE((tfp, "LYStoreCookies: save cookies to %s on exit\n", cookie_file));
cookie_handle = LYNewTxtFile (cookie_file);
if (cookie_handle == NULL) return;
@@ -2130,24 +2235,6 @@ PUBLIC void LYStoreCookies ARGS1 (
*/
continue;
-#if 0
- switch (de->bv) {
- case (ACCEPT_ALWAYS):
- HTSprintf0(&buf, COOKIES_ALWAYS_ALLOWED);
- break;
- case (REJECT_ALWAYS):
- HTSprintf0(&buf, COOKIES_NEVER_ALLOWED);
- break;
- case (QUERY_USER):
- HTSprintf0(&buf, COOKIES_ALLOWED_VIA_PROMPT);
- break;
- case (FROM_FILE): /* not used any more - kw */
- HTSprintf0(&buf, gettext("(From Cookie Jar)"));
- break;
- }
- /* FIXME: buf unused */
-#endif
-
/*
* Show the domain's cookies. - FM
*/
@@ -2158,29 +2245,33 @@ PUBLIC void LYStoreCookies ARGS1 (
if ((co = (cookie *)cl->object) == NULL)
continue;
- CTRACE(tfp, "LYStoreCookies: %ld cf %ld ", (long) now, (long) co->expires);
+ CTRACE((tfp, "LYStoreCookies: %ld cf %ld ", (long) now, (long) co->expires));
if ((co->flags & COOKIE_FLAG_DISCARD)) {
- CTRACE(tfp, "not stored - DISCARD\n");
+ CTRACE((tfp, "not stored - DISCARD\n"));
continue;
} else if (!(co->flags & COOKIE_FLAG_EXPIRES_SET)) {
- CTRACE(tfp, "not stored - no expiration time\n");
+ CTRACE((tfp, "not stored - no expiration time\n"));
continue;
} else if (co->expires <= now) {
- CTRACE(tfp, "not stored - EXPIRED\n");
+ CTRACE((tfp, "not stored - EXPIRED\n"));
continue;
}
- fprintf(cookie_handle, "%s\t%s\t%s\t%s\t%ld\t%s\t%s\n",
+ fprintf(cookie_handle, "%s\t%s\t%s\t%s\t%ld\t%s\t%s%s%s\n",
de->domain,
- "FALSE", co->path,
+ (de->domain[0] == '.') ? "TRUE" : "FALSE",
+ co->path,
co->flags & COOKIE_FLAG_SECURE ? "TRUE" : "FALSE",
- (long) co->expires, co->name, co->value);
+ (long) co->expires, co->name,
+ (co->quoted ? "\"" : ""),
+ co->value,
+ (co->quoted ? "\"" : ""));
- CTRACE(tfp, "STORED\n");
+ CTRACE((tfp, "STORED\n"));
}
}
- fclose(cookie_handle);
+ LYCloseOutput(cookie_handle);
HTSYS_purge(cookie_file);
}
@@ -2227,7 +2318,8 @@ PRIVATE int LYHandleCookies ARGS4 (
*/
if (HTList_isEmpty(domain_list)) {
HTProgress(COOKIE_JAR_IS_EMPTY);
- sleep(MessageSecs);
+ LYSleepMsg();
+ HTNoDataOK = 1;
return(HT_NO_DATA);
}
@@ -2263,7 +2355,7 @@ PRIVATE int LYHandleCookies ARGS4 (
* First object in the list always is empty. - FM
*/
continue;
- if (!strcmp(domain, de->domain)) {
+ if (!strcasecomp(domain, de->domain)) {
FREE(domain);
/*
* We found the domain. Check
@@ -2288,6 +2380,7 @@ PRIVATE int LYHandleCookies ARGS4 (
if (HTConfirm(DELETE_COOKIE_CONFIRMATION) == FALSE)
{
FREE(lynxID);
+ HTNoDataOK = 1;
return(HT_NO_DATA);
}
HTList_removeObject(de->cookie_list, co);
@@ -2312,7 +2405,8 @@ PRIVATE int LYHandleCookies ARGS4 (
} else {
HTProgress(COOKIE_EATEN);
}
- sleep(MessageSecs);
+ LYSleepMsg();
+ HTNoDataOK = 1;
break;
}
}
@@ -2328,15 +2422,16 @@ PRIVATE int LYHandleCookies ARGS4 (
} else {
_statusline(DELETE_COOKIES_SET_ALLOW_OR_CANCEL);
}
+ HTNoDataOK = 1;
while (1) {
- ch = LYgetch();
+ ch = LYgetch_single();
#ifdef VMS
if (HadVMSInterrupt) {
HadVMSInterrupt = FALSE;
ch = 'C';
}
#endif /* VMS */
- switch(TOUPPER(ch)) {
+ switch(ch) {
case 'A':
/*
* Set to accept all cookies
@@ -2348,11 +2443,10 @@ PRIVATE int LYHandleCookies ARGS4 (
return(HT_NO_DATA);
case 'C':
- case 7: /* Ctrl-G */
- case 3: /* Ctrl-C */
/*
* Cancelled. - FM
*/
+ reject:
HTUserMsg(CANCELLED);
return(HT_NO_DATA);
@@ -2368,7 +2462,7 @@ PRIVATE int LYHandleCookies ARGS4 (
HTList_removeObject(domain_list, de);
FREE(de);
HTProgress(DOMAIN_EATEN);
- sleep(MessageSecs);
+ LYSleepMsg();
break;
}
Delete_all_cookies_in_domain:
@@ -2389,7 +2483,7 @@ Delete_all_cookies_in_domain:
cl = next;
}
HTProgress(DOMAIN_COOKIES_EATEN);
- sleep(MessageSecs);
+ LYSleepMsg();
/*
* If a default accept/reject
* choice is set, we're done. - FM
@@ -2408,7 +2502,7 @@ Delete_all_cookies_in_domain:
HTList_removeObject(domain_list, de);
FREE(de);
HTProgress(DOMAIN_EATEN);
- sleep(MessageSecs);
+ LYSleepMsg();
}
break;
@@ -2436,6 +2530,8 @@ Delete_all_cookies_in_domain:
return(HT_NO_DATA);
default:
+ if (LYCharIsINTERRUPT(ch))
+ goto reject;
continue;
}
break;
@@ -2451,7 +2547,7 @@ Delete_all_cookies_in_domain:
* atexit may be called multiple times. - kw
*/
HTProgress(ALL_COOKIES_EATEN);
- sleep(MessageSecs);
+ LYSleepMsg();
}
FREE(domain);
FREE(lynxID);
@@ -2483,7 +2579,7 @@ Delete_all_cookies_in_domain:
#define PUTS(buf) (*target->isa->put_block)(target, buf, strlen(buf))
- HTSprintf0(&buf, "<HEAD>\n<TITLE>%s</title>\n</HEAD>\n<BODY>\n",
+ HTSprintf0(&buf, "<html>\n<head>\n<title>%s</title>\n</head>\n<body>\n",
COOKIE_JAR_TITLE);
PUTS(buf);
HTSprintf0(&buf, "<h1>%s (%s)%s<a href=\"%s%s\">%s</a></h1>\n",
@@ -2492,12 +2588,12 @@ Delete_all_cookies_in_domain:
helpfilepath, COOKIE_JAR_HELP, COOKIE_JAR_TITLE);
PUTS(buf);
- HTSprintf0(&buf, "<NOTE>%s\n", ACTIVATE_TO_GOBBLE);
+ HTSprintf0(&buf, "<note>%s\n", ACTIVATE_TO_GOBBLE);
PUTS(buf);
- HTSprintf0(&buf, "%s</NOTE>\n", OR_CHANGE_ALLOW);
+ HTSprintf0(&buf, "%s</note>\n", OR_CHANGE_ALLOW);
PUTS(buf);
- HTSprintf0(&buf, "<DL COMPACT>\n");
+ HTSprintf0(&buf, "<dl compact>\n");
PUTS(buf);
for (dl = domain_list; dl != NULL; dl = dl->next) {
de = dl->object;
@@ -2510,7 +2606,7 @@ Delete_all_cookies_in_domain:
/*
* Show the domain link and 'allow' setting. - FM
*/
- HTSprintf0(&buf, "<DT>%s<DD><A HREF=\"LYNXCOOKIE://%s/\">Domain=%s</A>\n",
+ HTSprintf0(&buf, "<dt>%s<dd><a href=\"LYNXCOOKIE://%s/\">Domain=%s</a>\n",
de->domain, de->domain, de->domain);
PUTS(buf);
switch (de->bv) {
@@ -2523,11 +2619,6 @@ Delete_all_cookies_in_domain:
case (QUERY_USER):
HTSprintf0(&buf, COOKIES_ALLOWED_VIA_PROMPT);
break;
- case (FROM_FILE):
-#if 0 /* not used any more - kw */
- HTSprintf0(&buf, COOKIES_READ_FROM_FILE);
-#endif
- break;
}
PUTS(buf);
HTSprintf0(&buf, "\n");
@@ -2558,7 +2649,7 @@ Delete_all_cookies_in_domain:
} else {
StrAllocCopy(value, NO_VALUE);
}
- HTSprintf0(&buf, "<DD><A HREF=\"LYNXCOOKIE://%s/%s\">%s=%s</A>\n",
+ HTSprintf0(&buf, "<dd><a href=\"LYNXCOOKIE://%s/%s\">%s=%s</a>\n",
de->domain, co->lynxID, name, value);
FREE(name);
FREE(value);
@@ -2578,7 +2669,7 @@ Delete_all_cookies_in_domain:
} else {
StrAllocCopy(path, "/");
}
- HTSprintf0(&buf, "<DD>Path=%s\n<DD>Port: %d Secure: %s Discard: %s\n",
+ HTSprintf0(&buf, "<dd>Path=%s\n<dd>Port: %d Secure: %s Discard: %s\n",
path, co->port,
((co->flags & COOKIE_FLAG_SECURE) ? "YES" : "NO"),
((co->flags & COOKIE_FLAG_DISCARD) ? "YES" : "NO"));
@@ -2589,7 +2680,7 @@ Delete_all_cookies_in_domain:
* Show the list of acceptable ports, if present. - FM
*/
if (co->PortList) {
- HTSprintf0(&buf, "<DD>PortList=\"%s\"\n", co->PortList);
+ HTSprintf0(&buf, "<dD>PortList=\"%s\"\n", co->PortList);
PUTS(buf);
}
@@ -2602,7 +2693,7 @@ Delete_all_cookies_in_domain:
StrAllocCopy(Title, co->commentURL);
LYEntify(&Title, TRUE);
HTSprintf0(&buf,
- "<DD>CommentURL: <A href=\"%s\">%s</A>\n",
+ "<dd>CommentURL: <a href=\"%s\">%s</a>\n",
Address,
Title);
FREE(Address);
@@ -2616,7 +2707,7 @@ Delete_all_cookies_in_domain:
if (co->comment) {
StrAllocCopy(comment, co->comment);
LYEntify(&comment, TRUE);
- HTSprintf0(&buf, "<DD>Comment: %s\n", comment);
+ HTSprintf0(&buf, "<dd>Comment: %s\n", comment);
FREE(comment);
PUTS(buf);
}
@@ -2624,7 +2715,7 @@ Delete_all_cookies_in_domain:
/*
* Show the Maximum Gobble Date. - FM
*/
- HTSprintf0(&buf, "<DD><EM>%s</EM> %s%s",
+ HTSprintf0(&buf, "<dd><em>%s</em> %s%s",
gettext("Maximum Gobble Date:"),
((co->flags & COOKIE_FLAG_EXPIRES_SET)
?
@@ -2634,10 +2725,10 @@ Delete_all_cookies_in_domain:
"" : "\n"));
PUTS(buf);
}
- HTSprintf0(&buf, "</DT>\n");
+ HTSprintf0(&buf, "</dt>\n");
PUTS(buf);
}
- HTSprintf0(&buf, "</DL>\n</BODY>\n");
+ HTSprintf0(&buf, "</dl>\n</body>\n</html>\n");
PUTS(buf);
/*
@@ -2659,18 +2750,21 @@ Delete_all_cookies_in_domain:
PUBLIC void cookie_domain_flag_set ARGS2(
char *, domainstr,
- int, flag)
+ int, flag)
{
domain_entry *de = NULL;
domain_entry *de2 = NULL;
HTList *hl = NULL;
- char **str = (char **)calloc(1, sizeof(domainstr));
+ char **str = typecalloc(char *);
char *dstr = NULL;
char *strsmall = NULL;
int isexisting = FALSE;
- if (str == NULL)
- outofmem(__FILE__, "cookie_set_invcheck");
+ if (str == NULL) {
+ HTAlwaysAlert(gettext("Internal"),
+ gettext("cookie_domain_flag_set error, aborting program"));
+ exit_immediately(EXIT_FAILURE);
+ }
/*
* Is this the first domain we're handling? If so, initialize
@@ -2691,6 +2785,11 @@ PUBLIC void cookie_domain_flag_set ARGS2(
while ((strsmall = LYstrsep(str, ",")) != 0) {
+ if (*strsmall == '\0')
+ /* Never add a domain for empty string. It would actually
+ * make more sense to use strtok here. - kw */
+ continue;
+
/*
* Check the list of existing domains to see if this is a
* re-setting of an already existing domains -- if so, just
@@ -2700,7 +2799,7 @@ PUBLIC void cookie_domain_flag_set ARGS2(
for (hl = domain_list; hl != NULL; hl = hl->next) {
de2 = (domain_entry *)hl->object;
if ((de2 != NULL && de2->domain != NULL) &&
- !strcmp(strsmall, de2->domain)) {
+ !strcasecomp(strsmall, de2->domain)) {
isexisting = TRUE;
break;
} else {
@@ -2709,23 +2808,20 @@ PUBLIC void cookie_domain_flag_set ARGS2(
}
if(!isexisting) {
- de = (domain_entry *)calloc(1, sizeof(domain_entry));
+ de = typecalloc(domain_entry);
if (de == NULL)
outofmem(__FILE__, "cookie_domain_flag_set");
switch(flag) {
case (FLAG_ACCEPT_ALWAYS): de->bv = ACCEPT_ALWAYS;
- de->invcheck_bv = INVCHECK_QUERY;
+ de->invcheck_bv = DEFAULT_INVCHECK_BV;
break;
case (FLAG_REJECT_ALWAYS): de->bv = REJECT_ALWAYS;
- de->invcheck_bv = INVCHECK_QUERY;
+ de->invcheck_bv = DEFAULT_INVCHECK_BV;
break;
case (FLAG_QUERY_USER): de->bv = QUERY_USER;
- de->invcheck_bv = INVCHECK_QUERY;
- break;
- case (FLAG_FROM_FILE): de->bv = FROM_FILE;
- de->invcheck_bv = INVCHECK_QUERY;
+ de->invcheck_bv = DEFAULT_INVCHECK_BV;
break;
case (FLAG_INVCHECK_QUERY): de->invcheck_bv = INVCHECK_QUERY;
de->bv = QUERY_USER;
@@ -2749,8 +2845,6 @@ PUBLIC void cookie_domain_flag_set ARGS2(
break;
case (FLAG_QUERY_USER): de2->bv = QUERY_USER;
break;
- case (FLAG_FROM_FILE): de2->bv = FROM_FILE;
- break;
case (FLAG_INVCHECK_QUERY): de2->invcheck_bv = INVCHECK_QUERY;
break;
case (FLAG_INVCHECK_STRICT): de2->invcheck_bv = INVCHECK_STRICT;
@@ -2766,6 +2860,46 @@ PUBLIC void cookie_domain_flag_set ARGS2(
FREE(dstr);
}
+/*
+ * If any COOKIE_{ACCEPT,REJECT}_DOMAINS have been defined, process them.
+ * These are comma delimited lists of domains. - BJP
+ *
+ * And for query/strict/loose invalid cookie checking. - BJP
+ */
+PUBLIC void LYConfigCookies NOARGS
+{
+ static CONST struct {
+ char **domain;
+ int flag;
+ int once;
+ } table[] = {
+ { &LYCookieSAcceptDomains, FLAG_ACCEPT_ALWAYS, TRUE },
+ { &LYCookieSRejectDomains, FLAG_REJECT_ALWAYS, TRUE },
+ { &LYCookieSStrictCheckDomains, FLAG_INVCHECK_STRICT, TRUE },
+ { &LYCookieSLooseCheckDomains, FLAG_INVCHECK_LOOSE, TRUE },
+ { &LYCookieSQueryCheckDomains, FLAG_INVCHECK_QUERY, TRUE },
+ { &LYCookieAcceptDomains, FLAG_ACCEPT_ALWAYS, FALSE },
+ { &LYCookieRejectDomains, FLAG_REJECT_ALWAYS, FALSE },
+ { &LYCookieStrictCheckDomains, FLAG_INVCHECK_STRICT, FALSE },
+ { &LYCookieLooseCheckDomains, FLAG_INVCHECK_LOOSE, FALSE },
+ { &LYCookieQueryCheckDomains, FLAG_INVCHECK_QUERY, FALSE },
+ };
+ unsigned n;
+
+ for (n = 0; n < TABLESIZE(table); n++) {
+ if (*(table[n].domain) != NULL) {
+ cookie_domain_flag_set(*(table[n].domain), table[n].flag);
+ /*
+ * Discard the value for system settings after we've used them.
+ * The local settings will be merged with the contents of .lynxrc
+ */
+ if (table[n].once) {
+ FREE(*(table[n].domain));
+ }
+ }
+ }
+}
+
#ifdef GLOBALDEF_IS_MACRO
#define _LYCOOKIE_C_GLOBALDEF_1_INIT { "LYNXCOOKIE",LYHandleCookies,0}
GLOBALDEF (HTProtocol,LYLynxCookies,_LYCOOKIE_C_GLOBALDEF_1_INIT);
diff --git a/gnu/usr.bin/lynx/src/LYCookie.h b/gnu/usr.bin/lynx/src/LYCookie.h
index b811e371c91..f038ed2d112 100644
--- a/gnu/usr.bin/lynx/src/LYCookie.h
+++ b/gnu/usr.bin/lynx/src/LYCookie.h
@@ -7,10 +7,10 @@
#include <HTList.h>
-typedef enum {ACCEPT_ALWAYS, REJECT_ALWAYS, QUERY_USER, FROM_FILE} behaviour;
+typedef enum {ACCEPT_ALWAYS, REJECT_ALWAYS, QUERY_USER} behaviour_t;
typedef enum {INVCHECK_QUERY,
INVCHECK_STRICT,
- INVCHECK_LOOSE} invcheck_behaviour;
+ INVCHECK_LOOSE} invcheck_behaviour_t;
typedef enum {FLAG_ACCEPT_ALWAYS,
FLAG_REJECT_ALWAYS,
FLAG_QUERY_USER,
@@ -21,8 +21,8 @@ typedef enum {FLAG_ACCEPT_ALWAYS,
struct _domain_entry {
char * domain; /* Domain for which these cookies are valid */
- behaviour bv;
- invcheck_behaviour invcheck_bv;
+ behaviour_t bv;
+ invcheck_behaviour_t invcheck_bv;
HTList * cookie_list;
};
typedef struct _domain_entry domain_entry;
@@ -32,23 +32,17 @@ extern void LYSetCookie PARAMS((
CONST char * SetCookie2,
CONST char * address));
extern char *LYCookie PARAMS((
- CONST char * hostname,
- CONST char * partialpath,
+ char * hostname,
+ char * partialpath,
int port,
BOOL secure));
extern void LYStoreCookies PARAMS((
char * cookie_file));
extern void LYLoadCookies PARAMS((
char * cookie_file));
-extern void cookie_add_acceptlist PARAMS((
- char * acceptdomains));
-extern void cookie_add_rejectlist PARAMS((
- char * rejectdomains));
-extern void cookie_set_invcheck PARAMS((
- char * domains,
- invcheck_behaviour setting));
extern void cookie_domain_flag_set PARAMS((
char * domainstr,
int flag));
+extern void LYConfigCookies NOPARAMS;
#endif /* LYCOOKIES_H */
diff --git a/gnu/usr.bin/lynx/src/LYCurses.c b/gnu/usr.bin/lynx/src/LYCurses.c
index c6c08a2e6ad..89351326de8 100644
--- a/gnu/usr.bin/lynx/src/LYCurses.c
+++ b/gnu/usr.bin/lynx/src/LYCurses.c
@@ -4,7 +4,6 @@
#include <LYStyle.h>
#include <LYUtils.h>
#include <LYGlobalDefs.h>
-#include <LYMainLoop.h>
#include <LYSignal.h>
#include <LYClean.h>
#include <LYReadCFG.h>
@@ -15,6 +14,10 @@
#include <LYexit.h>
#include <LYLeaks.h>
+#ifdef VMS
+#include <LYMainLoop.h>
+#endif
+
#if defined(VMS) && defined(__GNUC__)
#include <gnu_hacks.h>
#undef LINES
@@ -34,12 +37,24 @@ extern int _NOSHARE(COLS);
int lynx_has_color = FALSE;
#endif
+#ifdef HAVE_XCURSES
+char *XCursesProgramName = "Lynx";
+#endif
+
#if defined(USE_COLOR_STYLE) && !USE_COLOR_TABLE
#define COLOR_BKGD ((s_normal != NOSTYLE) ? hashStyles[s_normal].color : A_NORMAL)
#else
#define COLOR_BKGD ((COLOR_PAIRS >= 9) ? COLOR_PAIR(9) : A_NORMAL)
#endif
+#ifdef USE_CURSES_PADS
+WINDOW *LYwin = 0;
+int LYshiftWin = 0;
+int LYwideLines = FALSE;
+int LYtableCols = 0; /* in 1/12 of screen width */
+BOOL LYuseCursesPads = TRUE; /* use pads for left/right shifting */
+#endif
+
/*
* These are routines to start and stop curses and to cleanup
* the screen at the end.
@@ -48,19 +63,23 @@ int lynx_has_color = FALSE;
PRIVATE int dumbterm PARAMS((char *terminal));
BOOLEAN LYCursesON = FALSE;
+#if defined(USE_BLINK) && defined(__EMX__)
+PRIVATE void make_blink_boldbg NOARGS;
+#endif
+
#if USE_COLOR_TABLE || defined(USE_SLANG)
-PRIVATE int Current_Attr;
+PUBLIC int Current_Attr, Masked_Attr;
#endif
#define OMIT_SCN_KEEPING 0 /* whether to omit keeping of Style_className
in HTML.c when lss support is on. 1 to increase performance. The value
must correspond to the value of macro OMIT_SCN_KEEPING defined in HTML.c*/
-
#ifdef USE_SLANG
PUBLIC unsigned int Lynx_Color_Flags = 0;
PUBLIC BOOLEAN FullRefresh = FALSE;
PUBLIC int curscr = 0;
+
#ifdef SLANG_MBCS_HACK
/*
* Will be set by size_change. - KW
@@ -69,7 +88,6 @@ PUBLIC int PHYSICAL_SLtt_Screen_Cols = 10;
#endif /* SLANG_MBCS_HACK */
-
PUBLIC void LY_SLrefresh NOARGS
{
if (FullRefresh) {
@@ -106,18 +124,37 @@ PUBLIC void LYaddAttr ARGS1(
int, a)
{
Current_Attr |= a;
- SLsmg_set_color(Current_Attr);
+ SLsmg_set_color(Current_Attr & ~Masked_Attr);
}
PUBLIC void LYsubAttr ARGS1(
int, a)
{
Current_Attr &= ~a;
- SLsmg_set_color(Current_Attr);
+ SLsmg_set_color(Current_Attr & ~Masked_Attr);
+}
+
+PRIVATE void lynx_setup_attrs NOARGS
+{
+ static int monoattr[] = {
+ 0,
+ SLTT_BOLD_MASK,
+ SLTT_REV_MASK,
+ SLTT_REV_MASK | SLTT_BOLD_MASK,
+ SLTT_ULINE_MASK,
+ SLTT_ULINE_MASK | SLTT_BOLD_MASK,
+ SLTT_ULINE_MASK | SLTT_REV_MASK,
+ SLTT_ULINE_MASK | SLTT_BOLD_MASK | SLTT_REV_MASK
+ };
+ int n;
+
+ for (n = 1; n <= 7; n++)
+ SLtt_set_mono(n, NULL, (monoattr[n] & ~Masked_Attr));
}
PUBLIC void lynx_setup_colors NOARGS
{
+ CTRACE((tfp, "lynx_setup_colors\n"));
SLtt_set_color(0, NULL, DEFAULT_FG, DEFAULT_BG);
SLtt_set_color(1, NULL, "blue", DEFAULT_BG); /* bold */
SLtt_set_color(2, NULL, "yellow", "blue"); /* reverse */
@@ -129,17 +166,10 @@ PUBLIC void lynx_setup_colors NOARGS
SLtt_set_color(5, NULL, "blue", DEFAULT_BG); /* bold-underline */
SLtt_set_color(6, NULL, "red", DEFAULT_BG); /* reverse-underline */
SLtt_set_color(7, NULL, "magenta", "cyan"); /* reverse-underline-bold */
-
/*
* Now set monochrome attributes.
*/
- SLtt_set_mono(1, NULL, SLTT_BOLD_MASK);
- SLtt_set_mono(2, NULL, SLTT_REV_MASK);
- SLtt_set_mono(3, NULL, SLTT_REV_MASK | SLTT_BOLD_MASK);
- SLtt_set_mono(4, NULL, SLTT_ULINE_MASK);
- SLtt_set_mono(5, NULL, SLTT_ULINE_MASK | SLTT_BOLD_MASK);
- SLtt_set_mono(6, NULL, SLTT_ULINE_MASK | SLTT_REV_MASK);
- SLtt_set_mono(7, NULL, SLTT_ULINE_MASK | SLTT_BOLD_MASK | SLTT_REV_MASK);
+ lynx_setup_attrs();
}
PRIVATE void sl_suspend ARGS1(
@@ -160,7 +190,7 @@ PRIVATE void sl_suspend ARGS1(
SLang_init_tty(3, 0, 1);
#endif /* SLANG_VERSION > 9929 */
signal(SIGTSTP, sl_suspend);
-#if !defined(_WINDOWS) && !defined(__DJGPP__)
+#if defined(REAL_UNIX_SYSTEM) && !defined(__CYGWIN__)
SLtty_set_suspend_state(1);
#endif
if (sig == SIGTSTP)
@@ -177,50 +207,114 @@ PRIVATE void sl_suspend ARGS1(
lynx_enable_mouse (1);
#endif /* !VMS */
#endif /* SIGSTOP */
- return;
+ return;
}
+#else
-#else /* Not slang: */
+#ifdef FANCY_CURSES
+
+#ifndef VMS
+/* definitions for the mono attributes we can use */
+static struct {
+ char *name;
+ int code;
+} Mono_Attrs[7] =
+{
+ { "normal", A_NORMAL },
+ { "bold", A_BOLD },
+ { "reverse", A_REVERSE },
+ { "underline", A_UNDERLINE },
+ { "standout", A_STANDOUT },
+ { "blink", A_BLINK },
+ { "dim", A_DIM },
+};
+
+PUBLIC int string_to_attr ARGS1(
+ char *, name)
+{
+ unsigned i;
+
+ for (i = 0; i < TABLESIZE(Mono_Attrs); i++) {
+ if (!strcasecomp(Mono_Attrs[i].name, name)) {
+ return Mono_Attrs[i].code;
+ }
+ }
+ return 0;
+}
+#endif /* VMS */
+
+#ifdef USE_COLOR_STYLE
+PRIVATE char *attr_to_string ARGS1(
+ int, code)
+{
+ static char result[sizeof(Mono_Attrs) + 80];
+ unsigned i;
+ int pair = PAIR_NUMBER(code);
+ int bold = (pair != 0 && (code & A_BOLD) != 0);
+
+ if (bold)
+ code &= ~A_BOLD;
+
+ *result = 0;
+ for (i = 0; i < TABLESIZE(Mono_Attrs); i++) {
+ if (Mono_Attrs[i].code & code) {
+ if (*result)
+ strcat(result, "+");
+ strcat(result, Mono_Attrs[i].name);
+ }
+ }
+ if (pair != 0) {
+ short f, b;
+ if (pair_content(pair, &f, &b) != ERR) {
+ CONST char *fg = lookup_color(bold ? f+COLORS : f);
+ CONST char *bg = lookup_color(b);
+ if (*result)
+ strcat(result, "+");
+ sprintf(result + strlen(result), "%s/%s", fg, bg);
+ }
+ }
+ return result;
+}
+#endif /* USE_COLOR_STYLE */
+#endif /* FANCY_CURSES */
+#endif /* USE_SLANG */
-#ifdef VMS
/*
-** This function boxes windows with graphic characters for
-** VMS curses. Pass it the window, it's height, and it's
-** width. - FM
+** This function boxes windows for (n)curses.
*/
-PUBLIC void VMSbox ARGS3(
+PUBLIC void LYbox ARGS2(
WINDOW *, win,
- int, height,
- int, width)
+ BOOLEAN, formfield GCC_UNUSED)
{
+#ifdef USE_SLANG
+ SLsmg_draw_box(win->top_y, win->left_x, win->height, win->width + 4);
+#else
+#ifdef VMS
+ /*
+ * This should work for VAX-C and DEC-C, since they both have the same
+ * win._max_y and win._max_x members -TD
+ *
+ * (originally VMSbox by FM)
+ */
int i;
wmove(win, 0, 0);
waddstr(win, "\033)0\016l");
- for (i = 1; i < width; i++)
- waddch(win, 'q');
+ for (i = 1; i < win->_max_x; i++)
+ waddch(win, 'q');
waddch(win, 'k');
- for (i = 1; i < height-1; i++) {
+ for (i = 1; i < win->_max_y-1; i++) {
wmove(win, i, 0);
waddch(win, 'x');
- wmove(win, i, width-1);
+ wmove(win, i, win->_max_x-1);
waddch(win, 'x');
}
wmove(win, i, 0);
waddch(win, 'm');
- for (i = 1; i < width; i++)
- waddch(win, 'q');
+ for (i = 1; i < win->_max_x; i++)
+ waddch(win, 'q');
waddstr(win, "j\017");
-}
-#else
-/*
-** This function boxes windows for non-VMS (n)curses.
-** Pass it the window. - FM
-*/
-PUBLIC void LYbox ARGS2(
- WINDOW *, win,
- BOOLEAN, formfield GCC_UNUSED)
-{
+#else /* !VMS */
/*
* If the terminal is in UTF-8 mode, it probably cannot understand
* box drawing characters as (n)curses handles them. (This may also
@@ -243,6 +337,7 @@ PUBLIC void LYbox ARGS2(
* specify our own ASCII characters for the corners and call
* wborder() instead of box(). - kw
*/
+ LynxWChangeStyle(win, s_menu_frame, STACK_ON);
#ifdef HAVE_WBORDER
if (!boxvert || !boxhori)
box(win, boxvert, boxhori);
@@ -253,13 +348,15 @@ PUBLIC void LYbox ARGS2(
#else
box(win, boxvert, boxhori);
#endif
+ LynxWChangeStyle(win, s_menu_frame, STACK_OFF);
#ifdef CSS
if (formfield)
wcurses_css(win, "frame", ABS_OFF);
#endif
-}
#endif /* VMS */
+ wrefresh(win);
#endif /* USE_SLANG */
+}
#if defined(USE_COLOR_STYLE)
/* Ok, explanation of the USE_COLOR_STYLE styles. The basic styles (ie non
@@ -271,46 +368,59 @@ PUBLIC HTCharStyle displayStyles[DSTYLE_ELEMENTS];
/*
* set a style's attributes - RP
*/
-PUBLIC void setStyle ARGS4(int,style,int,color,int,cattr,int,mono)
+PUBLIC void setStyle ARGS4(
+ int, style,
+ int, color,
+ int, cattr,
+ int, mono)
{
- displayStyles[style].color=color;
- displayStyles[style].cattr=cattr;
- displayStyles[style].mono=mono;
+ displayStyles[style].color = color;
+ displayStyles[style].cattr = cattr;
+ displayStyles[style].mono = mono;
}
-PUBLIC void setHashStyle ARGS5(int,style,int,color,int,cattr,int,mono,char*,element)
+PUBLIC void setHashStyle ARGS5(
+ int, style,
+ int, color,
+ int, cattr,
+ int, mono,
+ char *, element)
{
- bucket* ds=&hashStyles[style];
- CTRACE(tfp, "CSS(SET): <%s> hash=%d, ca=%d, ma=%d\n", element, style, color, mono);
- ds->color=color;
- ds->cattr=cattr;
- ds->mono=mono;
- ds->code=style;
+ bucket* ds = &hashStyles[style];
+
+ CTRACE2(TRACE_STYLE, (tfp, "CSS(SET): <%s> hash=%d, ca=%#x, ma=%#x\n", element, style, color, mono));
+
+ ds->color = color;
+ ds->cattr = cattr;
+ ds->mono = mono;
+ ds->code = style;
FREE(ds->name);
- ds->name=malloc(sizeof(char)*(strlen(element)+2));
- if(!ds->name)
- outofmem(__FILE__, "setHashStyle");
- strcpy(ds->name, element);
+ StrAllocCopy(ds->name, element);
}
/*
* set the curses attributes to be color or mono - RP
*/
-PRIVATE int LYAttrset ARGS3(WINDOW*,win,int,color,int,mono)
+PRIVATE int LYAttrset ARGS3(
+ WINDOW *, win,
+ int, color,
+ int, mono)
{
- CTRACE(tfp, "CSS:LYAttrset (%#x, %#x)\n", color, mono);
- if (lynx_has_color && LYShowColor >= SHOW_COLOR_ON && color > -1)
- {
- wattrset(win,color);
- return color;
- }
- if (mono > -1)
- {
- wattrset(win,mono);
- return mono;
- }
- wattrset(win,A_NORMAL);
+ if (lynx_has_color
+ && LYShowColor >= SHOW_COLOR_ON
+ && color >= 0) {
+ CTRACE2(TRACE_STYLE, (tfp, "CSS:LYAttrset color (%s)\n", attr_to_string(color)));
+ wattrset(win, color);
+ return color;
+ } else if (mono >= 0) {
+ CTRACE2(TRACE_STYLE, (tfp, "CSS:LYAttrset mono (%s)\n", attr_to_string(mono)));
+ wattrset(win, mono);
+ return mono;
+ } else {
+ CTRACE2(TRACE_STYLE, (tfp, "CSS:LYAttrset (A_NORMAL)\n"));
+ wattrset(win, A_NORMAL);
return A_NORMAL;
+ }
}
PUBLIC void curses_w_style ARGS3(
@@ -320,130 +430,145 @@ PUBLIC void curses_w_style ARGS3(
{
#if OMIT_SCN_KEEPING
# define SPECIAL_STYLE /*(CSHASHSIZE+1) */ 88888
- /* if TRACEs are not compiled in, this macro is redundant - we neend't valid
- 'ds' to stack off. */
+/* if TRACEs are not compiled in, this macro is redundant - we needn't valid
+'ds' to stack off. */
#endif
- int YP,XP;
+ int YP,XP;
#if !OMIT_SCN_KEEPING
- bucket* ds= (style == NOSTYLE ? &nostyle_bucket : &hashStyles[style]);
+ bucket* ds= (style == NOSTYLE ? &nostyle_bucket : &hashStyles[style]);
#else
- bucket* ds= (style == NOSTYLE ? &nostyle_bucket :
- (style== SPECIAL_STYLE ? &special_bucket :&hashStyles[style]) );
+ bucket* ds= (style == NOSTYLE ? &nostyle_bucket :
+ (style== SPECIAL_STYLE ? &special_bucket :&hashStyles[style]) );
#endif
- if (!ds->name)
- {
- CTRACE(tfp, "CSS.CS:Style %d not configured\n",style);
+ if (!ds->name) {
+ CTRACE2(TRACE_STYLE, (tfp, "CSS.CS:Style %d not configured\n",style));
#if !OMIT_SCN_KEEPING
- return;
+ return;
#endif
- }
+ }
- CTRACE(tfp, "CSS.CS:<%s%s> (%d)\n",(dir?"":"/"),ds->name,ds->code);
+ CTRACE2(TRACE_STYLE, (tfp, "CSS.CS:<%s%s> (%d)\n",(dir?"":"/"),ds->name,ds->code));
- getyx (win, YP, XP);
+ getyx (win, YP, XP);
- if (style == s_normal && dir)
- {
- wattrset(win,A_NORMAL);
- if (win==stdscr) cached_styles[YP][XP]=s_normal;
- return;
- }
+ if (style == s_normal && dir) {
+ wattrset(win,A_NORMAL);
+ if (win == LYwin) cached_styles[YP][XP] = s_normal;
+ return;
+ }
- switch (dir)
- {
- /* ABS_OFF is the same as STACK_OFF for the moment */
- case STACK_OFF:
- if (last_colorattr_ptr) {
- int last_attr = last_styles[--last_colorattr_ptr];
- LYAttrset(win,last_attr,last_attr);
- }
- else
- LYAttrset(win,A_NORMAL,-1);
- return;
-
- case STACK_ON: /* remember the current attributes */
- if (last_colorattr_ptr > 127) {
- CTRACE(tfp,"........... %s (0x%x) %s\r\n",
- "attribute cache FULL, dropping last",
- last_styles[last_colorattr_ptr],
- "in LynxChangeStyle(curses_w_style)");
- last_colorattr_ptr--;
- }
- last_styles[last_colorattr_ptr++] = getattrs(stdscr);
- /* don't cache style changes for active links */
+ switch (dir)
+ {
+ /* ABS_OFF is the same as STACK_OFF for the moment */
+ case STACK_OFF:
+ if (last_colorattr_ptr) {
+ int last_attr = last_styles[--last_colorattr_ptr];
+ LYAttrset(win,last_attr,last_attr);
+ }
+ else
+ LYAttrset(win,A_NORMAL,-1);
+ break;
+
+ case STACK_ON: /* remember the current attributes */
+ if (last_colorattr_ptr > 127) {
+ CTRACE2(TRACE_STYLE, (tfp,"........... %s (0x%x) %s\r\n",
+ "attribute cache FULL, dropping last",
+ last_styles[last_colorattr_ptr],
+ "in LynxChangeStyle(curses_w_style)"));
+ last_colorattr_ptr--;
+ }
+ last_styles[last_colorattr_ptr++] = getattrs(win);
+ /* don't cache style changes for active links */
#if OMIT_SCN_KEEPING
- /* since we don't compute the hcode
- to stack off in HTML.c, we don't know whether this style is
- configured. So, we shouldn't simply return on stacking on on
- unconfigured styles, we should push curr attrs on stack. -HV
- */
- if (!ds->name) return;
+ /* since we don't compute the hcode to stack off in HTML.c, we
+ * don't know whether this style is configured. So, we
+ * shouldn't simply return on stacking on unconfigured
+ * styles, we should push curr attrs on stack. -HV
+ */
+ if (!ds->name) break;
#endif
- if (style != s_alink)
- {
- CTRACE(tfp, "CACHED: <%s> @(%d,%d)\n", ds->name, YP, XP);
- if (win==stdscr) cached_styles[YP][XP]=style;
- }
- LYAttrset(win, ds->color, ds->mono);
- return;
-
- case ABS_ON: /* change without remembering the previous style */
- /* don't cache style changes for active links */
- if (style != s_alink)
- {
- CTRACE(tfp, "CACHED: <%s> @(%d,%d)\n", ds->name, YP, XP);
- if (win==stdscr) cached_styles[YP][XP]=style;
- }
- LYAttrset(win, ds->color, ds->mono);
- return;
+ /* FALL THROUGH */
+ case ABS_ON: /* change without remembering the previous style */
+ /* don't cache style changes for active links and edits */
+ if ( style != s_alink
+ && style != s_curedit
+ && style != s_aedit
+ && style != s_aedit_sel
+ && style != s_aedit_pad
+ && style != s_aedit_arr ) {
+ CTRACE2(TRACE_STYLE, (tfp, "CACHED: <%s> @(%d,%d)\n", ds->name, YP, XP));
+ if (win == LYwin) cached_styles[YP][XP] = style;
}
+ LYAttrset(win, ds->color, ds->mono);
+ break;
+ }
}
/*
* wrapper function to set on-screen styles - RP
*/
-PUBLIC void wcurses_css ARGS3(WINDOW *,win,char*,name,int,dir)
+PUBLIC void wcurses_css ARGS3(
+ WINDOW *, win,
+ char*, name,
+ int, dir)
{
- int try_again=1;
- while (try_again)
- {
- int tmpHash=hash_code(name);
- CTRACE(tfp, "CSSTRIM:trying to set [%s] style - ", name);
- if (tmpHash==NOSTYLE) {
- char *class=strrchr(name, '.');
- CTRACE(tfp, "undefined, trimming at %p\n", class);
- if (class) *class='\0';
- else try_again=0;
- } else {
- CTRACE(tfp, "ok (%d)\n", hash_code(name));
- curses_w_style(win, hash_code(name), dir);
- try_again=0;
- }
+ int try_again = 1;
+
+ while (try_again) {
+ int tmpHash = hash_code(name);
+ CTRACE2(TRACE_STYLE, (tfp, "CSSTRIM:trying to set [%s] style - ", name));
+ if (tmpHash == NOSTYLE) {
+ char *class = strrchr(name, '.');
+ CTRACE2(TRACE_STYLE, (tfp, "undefined, trimming at %p\n", class));
+ if (class) *class = '\0';
+ else try_again = 0;
+ } else {
+ CTRACE2(TRACE_STYLE, (tfp, "ok (%d)\n", hash_code(name)));
+ curses_w_style(win, hash_code(name), dir);
+ try_again = 0;
}
+ }
}
-PUBLIC void curses_css ARGS2(char *,name,int,dir)
+PUBLIC void curses_css ARGS2(
+ char *, name,
+ int, dir)
{
- wcurses_css(stdscr, name, dir);
+ wcurses_css(LYwin, name, dir);
}
PUBLIC void curses_style ARGS2(
int, style,
int, dir)
{
- curses_w_style(stdscr, style, dir);
+ curses_w_style(LYwin, style, dir);
}
+#endif /* USE_COLOR_STYLE */
-#ifdef NOT_USED
-void attribute ARGS2(int,style,int,dir)
+PRIVATE BOOL lynx_called_initscr = FALSE;
+
+#if HAVE_USE_DEFAULT_COLORS && USE_DEFAULT_COLORS
+/*
+ * If we find a "default" color while reading the config-file, set default
+ * colors on the screen.
+ */
+PUBLIC int lynx_default_colors NOARGS
{
- curses_style(style, dir, 0);
+ int code = 0;
+ if (lynx_called_initscr) {
+ code = -1;
+ if (!default_color_reset && use_default_colors() == OK) {
+ default_fg = DEFAULT_COLOR;
+ default_bg = DEFAULT_COLOR;
+ code = 1;
+ }
+ }
+ return code;
}
-#endif
-#endif /* USE_COLOR_STYLE */
+#endif /* HAVE_USE_DEFAULT_COLORS && USE_DEFAULT_COLORS */
#if USE_COLOR_TABLE && defined(COLOR_CURSES)
/*
@@ -454,7 +579,6 @@ void attribute ARGS2(int,style,int,dir)
* special case of initialization before 'initscr()' is called.
* 1997/1/19 - T.E.Dickey <dickey@clark.net>
*/
-PRIVATE int lynx_called_initscr;
PRIVATE struct {
int fg, bg;
@@ -488,15 +612,6 @@ PRIVATE void LYsetWAttr ARGS1(WINDOW *, win)
int code = 0;
int attr = A_NORMAL;
int offs = 1;
- static int NoColorVideo = -1;
-
-#ifdef UNIX
- if (NoColorVideo < 0) {
- NoColorVideo = tigetnum("ncv");
- }
- if (NoColorVideo < 0)
- NoColorVideo = 0;
-#endif /* UNIX */
if (Current_Attr & A_BOLD)
code |= 1;
@@ -506,25 +621,13 @@ PRIVATE void LYsetWAttr ARGS1(WINDOW *, win)
code |= 4;
attr = lynx_color_cfg[code].attr;
- /*
- * no_color_video isn't implemented (97/4/14) in ncurses 4.1, but may
- * be in SVr4 (which would make this redundant for the latter).
- */
- if ((Current_Attr & A_BOLD) && !(NoColorVideo & 33)) {
- attr |= A_BOLD;
- }
-
- if ((Current_Attr == A_UNDERLINE) && !(NoColorVideo & 2)) {
- attr |= A_UNDERLINE;
- }
-
if (code+offs < COLOR_PAIRS) {
attr |= COLOR_PAIR(code+offs);
}
- wattrset(win, attr);
+ wattrset(win, attr & ~Masked_Attr);
} else {
- wattrset(win, Current_Attr);
+ wattrset(win, Current_Attr & ~Masked_Attr);
}
}
@@ -532,6 +635,8 @@ PRIVATE void lynx_map_color ARGS1(int, n)
{
int m;
+ CTRACE((tfp, "lynx_map_color(%d)\n", n));
+
lynx_color_pairs[n+1].fg = lynx_color_cfg[n].fg;
lynx_color_pairs[n+1].bg = lynx_color_cfg[n].bg;
@@ -545,12 +650,12 @@ PRIVATE void lynx_map_color ARGS1(int, n)
for (m = 0; m <= 16; m += 8) {
int pair = n + m + 1;
if (pair < COLOR_PAIRS)
- init_pair(pair,
- lynx_color_pairs[pair].fg,
- lynx_color_pairs[pair].bg);
+ init_pair((short)pair,
+ (short)lynx_color_pairs[pair].fg,
+ (short)lynx_color_pairs[pair].bg);
}
if (n == 0 && LYShowColor >= SHOW_COLOR_ON)
- bkgd(COLOR_BKGD | ' ');
+ wbkgd(LYwin, COLOR_BKGD | ' ');
}
}
@@ -575,7 +680,7 @@ PUBLIC int lynx_chg_color ARGS3(
PUBLIC void lynx_set_color ARGS1(int, a)
{
if (lynx_has_color && LYShowColor >= SHOW_COLOR_ON) {
- attrset(lynx_color_cfg[a].attr
+ wattrset(LYwin, lynx_color_cfg[a].attr
| (((a+1) < COLOR_PAIRS)
? COLOR_PAIR(a+1)
: A_NORMAL));
@@ -595,19 +700,21 @@ PRIVATE void lynx_init_colors NOARGS
if (lynx_has_color) {
size_t n, m;
+ CTRACE((tfp, "lynx_init_colors\n"));
+
lynx_color_cfg[0].fg = default_fg;
lynx_color_cfg[0].bg = default_bg;
- for (n = 0; n < sizeof(lynx_color_cfg)/sizeof(lynx_color_cfg[0]); n++) {
+ for (n = 0; n < TABLESIZE(lynx_color_cfg); n++) {
for (m = 0; m <= 16; m += 8) {
int pair = n + m + 1;
if (pair < COLOR_PAIRS)
- init_pair(pair,
- lynx_color_pairs[pair].fg,
- lynx_color_pairs[pair].bg);
+ init_pair((short)pair,
+ (short)lynx_color_pairs[pair].fg,
+ (short)lynx_color_pairs[pair].bg);
}
if (n == 0 && LYShowColor >= SHOW_COLOR_ON)
- bkgd(COLOR_BKGD | ' ');
+ wbkgd(LYwin, COLOR_BKGD | ' ');
}
} else if (LYShowColor != SHOW_COLOR_NEVER) {
LYShowColor = SHOW_COLOR_OFF;
@@ -617,54 +724,59 @@ PRIVATE void lynx_init_colors NOARGS
PUBLIC void lynx_setup_colors NOARGS
{
int n;
+ CTRACE((tfp, "lynx_setup_colors\n"));
for (n = 0; n < 8; n++)
lynx_map_color(n);
}
#endif /* USE_COLOR_TABLE */
-#ifdef NOTUSED
-#if defined (DJGPP) && !defined (USE_SLANG)
-/*
- * Sorry about making a completely new function,
- * but the real one is messy! WB
- */
-PUBLIC void start_curses NOARGS
+PUBLIC void LYnoVideo ARGS1(
+ int, a)
{
- static BOOLEAN first_time = TRUE;
-
- if(first_time)
- {
- initscr(); /* start curses */
- first_time = FALSE;
- cbreak();
- keypad(stdscr, TRUE);
- fflush(stdin);
- fflush(stdout);
- if (has_colors()) {
- lynx_has_color = TRUE;
- start_color();
- }
- lynx_init_colors();
- lynx_called_initscr = TRUE;
-
- /* Inform pdcurses that we're interested in knowing when mouse buttons
- * are clicked. Maybe someday pdcurses will support it.
- */
- if (LYUseMouse)
- lynx_enable_mouse (1);
-
- } else
- sock_init();
-
- LYCursesON = TRUE;
- CTRACE(tfp, "start_curses: done.\n");
- clear();
- noecho();
-}
+ CTRACE((tfp, "LYnoVideo(%d)\n", a));
+#ifdef USE_SLANG
+ if (a & 1) Masked_Attr |= SLTT_BOLD_MASK;
+ if (a & 2) Masked_Attr |= SLTT_REV_MASK;
+ if (a & 4) Masked_Attr |= SLTT_ULINE_MASK;
+ lynx_setup_attrs();
#else
-#endif /* defined (DJGPP) && !defined (USE_SLANG) */
-#endif /* NOTUSED */
+#if USE_COLOR_TABLE
+ if (a & 1) Masked_Attr |= A_BOLD;
+ if (a & 2) Masked_Attr |= A_REVERSE;
+ if (a & 4) Masked_Attr |= A_UNDERLINE;
+#endif
+#endif
+}
+#if !defined(VMS) && !defined(USE_SLANG)
+/*
+ * If newterm is not defined, assume a curses subset which
+ * supports only initscr. --gil
+ */
+#if defined(HAVE_NEWTERM) && defined(HAVE_DELSCREEN) && !(defined(NCURSES) && defined(HAVE_RESIZETERM))
+static SCREEN *LYscreen = NULL;
+#define LYDELSCR() { \
+if (recent_sizechange) { \
+ delscreen(LYscreen); \
+ LYscreen = NULL; } }
+/*
+ * Surrogates for newterm annd delscreen
+ */
+#else /* HAVE_NEWTERM */
+static WINDOW *LYscreen = NULL;
+#undef newterm
+#define newterm(type, out, in) (initscr())
+#define LYDELSCR() /* nothing */
+#endif /* HAVE_NEWTERM */
+#else /* !defined(VMS) && !defined(USE_SLANG) */
+/*
+ * Provide last recourse definitions of LYscreen and LYDELSCR for
+ * stop_curses, which only tests LYscreen for zero/nonzero but
+ * never uses it as a pointer or L-value.
+ */
+#define LYscreen TRUE
+#define LYDELSCR() /* nothing */
+#endif /* !defined(VMS) && !defined(USE_SLANG) */
PUBLIC void start_curses NOARGS
{
@@ -672,22 +784,31 @@ PUBLIC void start_curses NOARGS
static int slinit;
if (LYCursesON) {
- CTRACE(tfp, "start_curses: Hmm, already ON.\n");
+ CTRACE((tfp, "start_curses: Hmm, already ON.\n"));
return;
}
if (slinit == 0) {
+#if defined(USE_KEYMAPS)
+ if (-1 == lynx_initialize_keymaps ())
+ exit (EXIT_FAILURE);
+#else
SLtt_get_terminfo();
-#if defined(__DJGPP__) && !defined(DJGPP_KEYHANDLER)
+#endif
+#if (defined(__DJGPP__) && !defined(DJGPP_KEYHANDLER)) || defined(__CYGWIN__)
SLkp_init ();
#endif /* __DJGPP__ && !DJGPP_KEYHANDLER */
-#ifdef UNIX
+#if defined(REAL_UNIX_SYSTEM) && !defined(__CYGWIN__)
#if SLANG_VERSION >= 9935
SLang_TT_Read_FD = fileno(stdin);
#endif /* SLANG_VERSION >= 9935 */
-#endif /* UNIX */
+#endif /* REAL_UNIX_SYSTEM && !__CYGWIN__ */
+#if !defined(USE_KEYMAPS) && defined(ENHANCED_LINEEDIT) && defined(ESCDELAY)
+ /* way to get ESC that's not part of a recognized sequence through */
+ ESCDELAY = 2000;
+#endif
/*
* Check whether a saved show_color:off override is in effect. - kw
*/
@@ -718,22 +839,24 @@ PUBLIC void start_curses NOARGS
}
size_change(0);
-#if defined(VMS) || defined(UNIX)
- SLtt_add_color_attribute(4, SLTT_ULINE_MASK);
- SLtt_add_color_attribute(5, SLTT_ULINE_MASK);
+#if (defined(VMS) || defined(REAL_UNIX_SYSTEM)) && !defined(__CYGWIN__)
+ if ((Masked_Attr & SLTT_ULINE_MASK) == 0) {
+ SLtt_add_color_attribute(4, SLTT_ULINE_MASK);
+ SLtt_add_color_attribute(5, SLTT_ULINE_MASK);
+ }
/*
* If set, the blink escape sequence will turn on high
* intensity background (rxvt and maybe Linux console).
*/
- if (LYShowColor && (Lynx_Color_Flags & SL_LYNX_USE_BLINK)) {
- SLtt_Blink_Mode = 1;
- } else {
- SLtt_Blink_Mode = 0;
- }
-#endif /* VMS || UNIX */
+ SLtt_Blink_Mode = term_blink_is_boldbg;
+#endif /* (VMS || REAL_UNIX_SYSTEM) && !__CYGWIN__ */
}
#ifdef __DJGPP__
+#ifdef WATT32
+ _eth_init();
+#else
else sock_init();
+#endif /* WATT32 */
#endif /* __DJGPP__ */
slinit = 1;
@@ -751,10 +874,13 @@ PUBLIC void start_curses NOARGS
SLsmg_Display_Eight_Bit = 191; /* may print ctrl chars otherwise - kw */
scrollok(0,0);
SLsmg_Backspace_Moves = 1;
+#if SLANG_VERSION > 10306
+ SLsmg_touch_screen ();
+#endif
#ifndef VMS
-#if !defined(_WINDOWS) && !defined(__DJGPP__)
+#if defined(REAL_UNIX_SYSTEM) && !defined(__CYGWIN__)
SLtty_set_suspend_state(1);
-#endif /* !_WINDOWS */
+#endif /* REAL_UNIX_SYSTEM && !__CYGWIN__ */
#ifdef SIGTSTP
if (!no_suspend)
signal(SIGTSTP, sl_suspend);
@@ -762,10 +888,10 @@ PUBLIC void start_curses NOARGS
signal(SIGINT, cleanup_sig);
#endif /* !VMS */
- lynx_enable_mouse (1);
-
-#else /* Using curses: */
+ lynx_enable_mouse (1);
+#else /* USE_SLANG; Now using curses: */
+ int keypad_on = 0;
#ifdef VMS
/*
@@ -775,25 +901,75 @@ PUBLIC void start_curses NOARGS
initscr(); /* start curses */
#else /* Unix: */
- static BOOLEAN first_time = TRUE;
-
- if (first_time) {
+ if (!LYscreen) {
/*
* If we're not VMS then only do initscr() one time,
* and one time only!
*/
- if (initscr() == NULL) { /* start curses */
+#if defined(HAVE_NEWTERM)
+#if !(defined(NCURSES) && !defined(HAVE_RESIZETERM))
+ BOOLEAN savesize;
+
+ savesize = recent_sizechange;
+ size_change(0);
+ recent_sizechange = savesize; /* avoid extra redraw */
+#if defined(__MVS__)
+ {
+ /*
+ * The requirement to do this may be a bug in OS/390.
+ *
+ * Put screen geometry in environment variables used by
+ * XOpen curses before calling newterm(). I believe this
+ * completes work left unfinished by AJL & FM -- gil
+ */
+ static char lines_putenv[] = "LINES=abcde",
+ cols_putenv[] = "COLUMNS=abcde";
+
+ sprintf(lines_putenv + 6, "%d", LYlines & 0xfff);
+ sprintf(cols_putenv + 8, "%d", LYcols & 0xfff);
+ putenv(lines_putenv);
+ putenv(cols_putenv);
+ CTRACE((tfp, "start_curses putenv %s, %s\n", lines_putenv, cols_putenv));
+ }
+#endif /* defined(__MVS__) */
+#endif /* !(defined(NCURSES) && defined(HAVE_RESIZETERM)) */
+ if (!(LYscreen = newterm(NULL,stdout,stdin))) { /* start curses */
fprintf(tfp, "%s\n",
gettext("Terminal initialisation failed - unknown terminal type?"));
- exit_immediately (-1);
+ exit_immediately (EXIT_FAILURE);
}
+#else
+ initscr();
+#endif /* HAVE_NEWTERM */
+ lynx_called_initscr = TRUE;
+
#if defined(SIGWINCH) && defined(NCURSES_VERSION)
size_change(0);
recent_sizechange = FALSE; /* prevent mainloop drawing 1st doc twice */
#endif /* SIGWINCH */
+
+#ifdef USE_CURSES_PADS
+ if (LYuseCursesPads) {
+ LYwin = newpad(LYlines, MAX_COLS);
+ LYshiftWin = 0;
+ LYwideLines = FALSE;
+ } else {
+ LYwin = stdscr;
+ }
+#endif
+
#if defined(USE_KEYMAPS) && defined(NCURSES_VERSION)
- if (-1 == lynx_initialize_keymaps ())
- exit (-1);
+# if HAVE_KEYPAD
+ /* Need to switch keypad on before initializing keymaps, otherwise
+ when the keypad is switched on, some keybindings may be overriden. */
+ keypad(LYwin,TRUE);
+ keypad_on = 1;
+# endif /* HAVE_KEYPAD */
+
+ if (-1 == lynx_initialize_keymaps ()) {
+ endwin();
+ exit (EXIT_FAILURE);
+ }
#endif
/*
@@ -819,26 +995,49 @@ PUBLIC void start_curses NOARGS
if (has_colors()) {
lynx_has_color = TRUE;
start_color();
-#if HAVE_USE_DEFAULT_COLORS
- if (use_default_colors() == OK) {
- default_fg = DEFAULT_COLOR;
- default_bg = DEFAULT_COLOR;
+#if USE_DEFAULT_COLORS
+#ifdef EXP_ASSUMED_COLOR
+ /*
+ * Adjust the color mapping table to match the ASSUMED_COLOR
+ * setting in lynx.cfg
+ */
+ if (assume_default_colors(default_fg, default_bg) != OK) {
+ default_fg = COLOR_WHITE;
+ default_bg = COLOR_BLACK;
}
-#endif /* HAVE_USE_DEFAULT_COLORS */
+ if (default_fg >= 0 || default_bg >= 0) {
+ unsigned n;
+ for (n = 0; n < TABLESIZE(lynx_color_cfg); n++) {
+ if (default_fg >= 0 && lynx_color_cfg[n].fg < 0)
+ lynx_color_cfg[n].fg = default_fg;
+ if (default_bg >= 0 && lynx_color_cfg[n].bg < 0)
+ lynx_color_cfg[n].bg = default_bg;
+ CTRACE((tfp, "color_cfg[%d] = %d/%d\n", n,
+ lynx_color_cfg[n].fg,
+ lynx_color_cfg[n].bg));
+ }
+ lynx_setup_colors();
+ }
+#else
+ lynx_default_colors();
+#endif /* EXP_ASSUMED_COLOR */
+#endif /* USE_DEFAULT_COLORS */
}
#endif /* USE_COLOR_STYLE || USE_COLOR_TABLE */
#ifdef USE_COLOR_STYLE
parse_userstyles();
#endif
- first_time = FALSE;
#if USE_COLOR_TABLE
lynx_init_colors();
- lynx_called_initscr = TRUE;
#endif /* USE_COLOR_TABLE */
}
#ifdef __DJGPP__
+#ifdef WATT32
+ _eth_init();
+#else
else sock_init();
+#endif /* WATT32 */
#endif /* __DJGPP__ */
#endif /* not VMS */
@@ -859,29 +1058,37 @@ PUBLIC void start_curses NOARGS
noecho();
#if HAVE_KEYPAD
- keypad(stdscr,TRUE);
+ if (!keypad_on)
+ keypad(LYwin,TRUE);
#endif /* HAVE_KEYPAD */
- lynx_enable_mouse (1);
+ lynx_enable_mouse (1);
fflush(stdin);
fflush(stdout);
fflush(stderr);
#endif /* USE_SLANG */
-#ifdef _WINDOWS
- clear();
+#if defined(WIN_EX)
+ LYclear();
+#endif
+
+#if defined(USE_BLINK) && defined(__EMX__)
+ if (term_blink_is_boldbg) /* Now actually make it so! */
+ make_blink_boldbg();
#endif
LYCursesON = TRUE;
- CTRACE(tfp, "start_curses: done.\n");
-}
+ CTRACE((tfp, "start_curses: done.\n"));
+} /* end of start_curses() */
PUBLIC void lynx_enable_mouse ARGS1(int,state)
{
+#ifdef USE_MOUSE
+/***********************************************************************/
-#ifdef __BORLANDC__
+#if defined(WIN_EX)
/* modify lynx_enable_mouse() for pdcurses configuration so that mouse support
is disabled unless -use_mouse is specified. This is ifdef'd with
__BORLANDC__ for the time being (WB).
@@ -899,25 +1106,22 @@ PUBLIC void lynx_enable_mouse ARGS1(int,state)
if (LYUseMouse == 0)
return;
-#ifdef USE_SLANG_MOUSE
+
+#if defined(USE_SLANG)
SLtt_set_mouse_mode (state, 0);
SLtt_flush_output ();
#else
-#ifdef NCURSES_MOUSE_VERSION
-#if defined(__BORLANDC__) && defined(__PDCURSES__)
+#if defined(WIN_EX) && defined(PDCURSES)
if (state)
{
SetConsoleMode(hConIn, ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT);
FlushConsoleInputBuffer(hConIn);
}
#else
- /* Inform ncurses that we're interested in knowing when mouse
- * button 1 is clicked. We cannot just specify
- * BUTTON1_CLICKED | BUTTON3_CLICKED, since ncurses will try hard
- * to translate other events to single-clicks.
- * Compensate for small value of maxclick in ncurses. */
+#if defined(NCURSES)
if (state) {
+ /* Compensate for small value of maxclick in ncurses. */
static int was = 0;
if (!was) {
@@ -927,26 +1131,112 @@ PUBLIC void lynx_enable_mouse ARGS1(int,state)
if (old < 200) /* Default 166 */
mouseinterval(300);
}
- mousemask(ALL_MOUSE_EVENTS, NULL);
+ /* Inform ncurses which mouse events we're interested in.
+ * We shouldn't need to include BUTTONn_PRESSED and BUTTONn_RELEASED
+ * events, since ncurses should translate them to click events. - kw
+ * However, if we do not include them, then ncurses effectively
+ * ignores mouseinterval(), thus translates *any* sequence of
+ * press/release to a click, which leads to inconveniences.
+ * We special-case these events in LYStrings.c.
+ */
+ mousemask(BUTTON_CTRL | BUTTON_ALT
+ | BUTTON1_PRESSED | BUTTON1_RELEASED
+ | BUTTON1_CLICKED
+ | BUTTON1_DOUBLE_CLICKED | BUTTON1_TRIPLE_CLICKED
+ | BUTTON2_PRESSED | BUTTON2_RELEASED
+ | BUTTON2_CLICKED
+ | BUTTON3_PRESSED | BUTTON3_RELEASED
+ | BUTTON3_CLICKED
+ | BUTTON3_DOUBLE_CLICKED | BUTTON3_TRIPLE_CLICKED,
+ NULL);
} else
mousemask(0, NULL);
-#endif /* __BORLANDC__ and __PDCURSES__ */
-#endif /* NCURSES_MOUSE_VERSION */
+#endif /* NCURSES */
+#endif /* WIN_EX and PDCURSES */
-#if defined(DJGPP) && !defined(USE_SLANG)
+#if defined(PDCURSES)
if (state)
- mouse_set(BUTTON1_CLICKED | BUTTON2_CLICKED | BUTTON3_CLICKED);
+ mouse_set(
+ BUTTON1_CLICKED | BUTTON1_PRESSED | BUTTON1_RELEASED |
+ BUTTON2_CLICKED | BUTTON2_PRESSED | BUTTON2_RELEASED |
+ BUTTON3_CLICKED | BUTTON3_PRESSED | BUTTON3_RELEASED);
+#endif
+#endif /* NOT USE_SLANG */
+
+/***********************************************************************/
+#endif /* USE_MOUSE */
+}
+
+/*
+ * SVr4 curses (and ncurses) initialize the terminal I/O to raw mode, and
+ * simulate other modes in the library. This means that when running, it
+ * simulates the OCRNL setting. Normally that is not a problem. However, when
+ * spawning a subprocess (e.g., xli), the subprocess may write to the screen.
+ * Fine so far - curses resets the terminal I/O to the normal state on exit.
+ * But the subprocess's messages can still be coming to the screen when lynx
+ * returns to the screen mode. This function delays restoring OCRNL until
+ * after the first getch() call.
+ *
+ * The OCRNL setting is controlled by nl()/nonl() of course - but we do not
+ * want to give up that optimization since it would be a bit slower. (Note -
+ * slang does not use this optimization; if it did, the same screen glitch
+ * would occur).
+ *
+ * FIXME: for simplicity, only ncurses is implemented here - the TTY and
+ * SET_TTY definitions are ncurses-specific. The same effect could be done for
+ * other curses implementations, since the "cur_term->Nttyb" part is common to
+ * SVr4 curses.
+ */
+PUBLIC void lynx_nl2crlf ARGS1(int, normal GCC_UNUSED)
+{
+#if defined(NCURSES_VERSION_PATCH) && defined(SET_TTY) && defined(TERMIOS) && defined(ONLCR)
+ static TTY saved_tty;
+ static int did_save = FALSE;
+ static int waiting = FALSE;
+ static int can_fix = TRUE;
+
+ if (!did_save) {
+ saved_tty = cur_term->Nttyb;
+ did_save = TRUE;
+#if NCURSES_VERSION_PATCH < 20010529
+ /* workaround for optimizer bug with nonl() */
+ if ((tigetstr("cud1") != 0 && *tigetstr("cud1") == '\n')
+ || (tigetstr("ind") != 0 && *tigetstr("ind") == '\n'))
+ can_fix = FALSE;
+#endif
+ }
+ if (can_fix) {
+ if (normal) {
+ if (!waiting) {
+ cur_term->Nttyb.c_oflag |= ONLCR;
+ waiting = TRUE;
+ nonl();
+ }
+ } else {
+ if (waiting) {
+ cur_term->Nttyb = saved_tty;
+ SET_TTY(fileno(stdout), &saved_tty);
+ waiting = FALSE;
+ nl();
+ LYrefresh();
+ }
+ }
+ }
#endif
-#endif /* NOT USE_SLANG_MOUSE */
}
PUBLIC void stop_curses NOARGS
{
- echo();
-#ifdef DJGPP
+ if (LYCursesON)
+ echo();
+#ifdef __DJGPP__
+#ifdef WATT32
+ _eth_release();
+#else
sock_exit();
-#endif
-#if defined (DOSPATH) && !defined(USE_SLANG)
+#endif /* WATT32 */
+#endif /* __DJGPP__ */
+#if defined(DOSPATH) && !(defined(USE_SLANG) || _WIN_CC)
clrscr();
#else
@@ -955,16 +1245,30 @@ PUBLIC void stop_curses NOARGS
* 05-28-94 Lynx 2-3-1 Garrett Arch Blythe
*/
if(LYCursesON == TRUE) {
- lynx_enable_mouse (0);
- endwin(); /* stop curses */
+ lynx_nl2crlf(TRUE);
+ lynx_enable_mouse (0);
+#if (!defined(WIN_EX) || defined(__CYGWIN__)) /* @@@ */
+ if(LYscreen || lynx_called_initscr) {
+ endwin(); /* stop curses */
+ LYDELSCR();
+ }
+#endif
}
+#ifdef SH_EX
+ {
+ int i;
+ for (i=0; i <= 3; i++) {
+ fprintf(stdout, "\r\n");
+ }
+ }
+#endif
fflush(stdout);
-#endif /* DJGPP */
+#endif /* defined(DOSPATH) && !(defined(USE_SLANG) || _WIN_CC) */
fflush(stderr);
LYCursesON = FALSE;
- CTRACE(tfp, "stop_curses: done.\n");
+ CTRACE((tfp, "stop_curses: done.\n"));
#if defined(SIGTSTP) && defined(USE_SLANG)
#ifndef VMS
@@ -983,7 +1287,7 @@ PUBLIC void stop_curses NOARGS
* Check terminal type, start curses & setup terminal.
*/
PUBLIC BOOLEAN setup ARGS1(
- char *, terminal)
+ char *, terminal)
{
int c;
int status;
@@ -1013,7 +1317,7 @@ PUBLIC BOOLEAN setup ARGS1(
* -dump, so force that mode here. - FM
*/
dump_output_immediately = TRUE;
- LYcols = 80;
+ LYcols = DFT_COLS;
if (keypad_mode == NUMBERS_AS_ARROWS)
keypad_mode = LINKS_ARE_NUMBERED;
status = mainloop();
@@ -1028,7 +1332,6 @@ PUBLIC BOOLEAN setup ARGS1(
LYLowerCase(term);
printf("%s%s\n", gettext("Terminal ="), term);
- sleep(InfoSecs);
if ((strlen(term) < 5) ||
strncmp(term, "vt", 2) || !isdigit(term[2])) {
printf("%s\n",
@@ -1045,12 +1348,8 @@ PUBLIC BOOLEAN setup ARGS1(
ttopen();
start_curses();
- LYlines = LINES;
- LYcols = COLS;
- if (LYlines <= 0)
- LYlines = 24;
- if (LYcols <= 0)
- LYcols = 80;
+ LYlines = LYscreenHeight();
+ LYcols = LYscreenWidth();
return(TRUE);
}
@@ -1061,38 +1360,16 @@ PUBLIC BOOLEAN setup ARGS1(
* Check terminal type, start curses & setup terminal.
*/
PUBLIC BOOLEAN setup ARGS1(
- char *, terminal)
+ char *, terminal)
{
char *term_putenv = NULL;
char *buffer = NULL;
char *cp;
-#if defined(HAVE_SIZECHANGE) && !defined(USE_SLANG) && defined(NOTDEFINED)
-/*
- * Hack to deal with a problem in sysV curses, that screen can't be
- * resized to greater than the size used by initscr, which can only
- * be called once. So set environment variables LINES and COLUMNS
- * to some suitably large size to force initscr to allocate enough
- * space. Later we get the real window size for setting LYlines
- * and LYcols. - AJL & FM
- *
- * Has problems, so we don't use this hack, but the code is here
- * if someone wants to play with it some more. - FM
- */
- char *lines_putenv = NULL;
- char *cols_putenv = NULL;
-
- if (getenv("LINES") == NULL && getenv("COLUMNS") == NULL) {
- StrAllocCopy(lines_putenv, "LINES=120");
- (void) putenv(lines_putenv);
- StrAllocCopy(cols_putenv, "COLUMNS=240");
- (void) putenv(cols_putenv);
- }
-#endif /* HAVE_SIZECHANGE && !USE_SLANG && NOTDEFINED */
- /*
- * If the display was not set by a command line option then
- * see if it is available from the environment .
- */
+ /*
+ * If the display was not set by a command line option then
+ * see if it is available from the environment .
+ */
if ((cp = LYgetXDisplay()) != NULL) {
StrAllocCopy(x_display, cp);
} else {
@@ -1125,7 +1402,7 @@ PUBLIC BOOLEAN setup ARGS1(
(void) putenv(term_putenv);
printf("\n%s %s\n", gettext("TERMINAL TYPE IS SET TO"), getenv("TERM"));
- sleep(MESSAGESECS);
+ LYSleepMsg();
}
start_curses();
@@ -1137,41 +1414,28 @@ PUBLIC BOOLEAN setup ARGS1(
if (strncmp((CONST char*)ttytype, "dec-vt", 6) == 0) {
(void) setterm(ttytype + 4);
}
-#endif /* HAVE_TTYTYPE */
-#if defined(HAVE_SIZECHANGE) && !defined(USE_SLANG) && defined(NOTDEFINED)
- if (lines_putenv != NULL) {
- /*
- * Use SIGWINCH handler to set the true window size. - AJL && FM
- *
- * Has problems, so we don't use this hack, but the code is here
- * if someone wants to play with it some more. - FM
- */
- size_change(0);
- lines_putenv[6] = '\0';
- (void) putenv(lines_putenv);
- cols_putenv[8] = '\0';
- (void) putenv(cols_putenv);
- FREE(lines_putenv);
- FREE(cols_putenv);
- } else {
- LYlines = LINES;
- LYcols = COLS;
+ /*
+ * Account for lossage on the 'sun' terminal type (80x24) Sun text
+ * console driver. It only supports reverse video, but all SGR
+ * sequences produce that same reverse video, and the terminfo
+ * entry lists different SGRs for 'bold' and 'rev'. As a result,
+ * the current link is indistinguishable from all other links.
+ * The workaround here is to disable the 'rev' capability.
+ */
+ if ((strncmp((CONST char *)ttytype, "sun", 3) == 0)) {
+ LYnoVideo(2);
}
-#else
- LYlines = LINES;
- LYcols = COLS;
-#endif /* HAVE_SIZECHANGE && !USE_SLANG && USE_NOTDEFINED */
- if (LYlines <= 0)
- LYlines = 24;
- if (LYcols <= 0)
- LYcols = 80;
+#endif /* HAVE_TTYTYPE */
+
+ LYlines = LYscreenHeight();
+ LYcols = LYscreenWidth();
return(1);
}
PRIVATE int dumbterm ARGS1(
- char *, terminal)
+ char *, terminal)
{
int dumb = FALSE;
@@ -1204,7 +1468,7 @@ PUBLIC void LYaddWAttr ARGS2(
PUBLIC void LYaddAttr ARGS1(
int, a)
{
- LYaddWAttr(stdscr, a);
+ LYaddWAttr(LYwin, a);
}
PUBLIC void LYsubWAttr ARGS2(
@@ -1218,13 +1482,79 @@ PUBLIC void LYsubWAttr ARGS2(
PUBLIC void LYsubAttr ARGS1(
int, a)
{
- LYsubWAttr(stdscr, a);
+ LYsubWAttr(LYwin, a);
}
#endif /* USE_COLOR_TABLE */
#endif /* !USE_COLOR_STYLE */
#endif /* FANCY_CURSES */
#endif /* VMS */
+/* 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
+PUBLIC void LYpaddstr ARGS3(
+ WINDOW *, the_window,
+ int, width,
+ CONST char *, the_string)
+{
+ int y, x;
+ getyx(the_window, y, x);
+ if (width + x >= LYcols)
+ width = LYcols - x - 1;
+ LYwaddnstr(the_window, the_string, width);
+ width -= strlen(the_string);
+ while (width-- > 0)
+ waddstr(the_window, " ");
+}
+#endif
+
+PUBLIC WINDOW *LYstartPopup ARGS4(
+ int, top_y,
+ int, left_x,
+ int, height,
+ int, width)
+{
+ WINDOW *form_window = 0;
+#ifdef USE_SLANG
+ static WINDOW fake_window;
+ SLsmg_fill_region(top_y, left_x - 1, height, width + 4, ' ');
+ form_window = &fake_window;
+ form_window->top_y = top_y;
+ form_window->left_x = left_x;
+ form_window->height = height;
+ form_window->width = width;
+#else
+ if (!(form_window = newwin(height, width + 4, top_y, left_x - 1)) &&
+ !(form_window = newwin(height, 0, top_y, 0))) {
+ HTAlert(POPUP_FAILED);
+ } else {
+ LYsubwindow(form_window);
+# ifdef USE_COLOR_STYLE
+ {
+ long b;
+
+ /* Get a proper value for the attribute */
+ LynxWChangeStyle(form_window, s_menu_bg, STACK_ON);
+ b = getattrs(form_window);
+ LynxWChangeStyle(form_window, s_menu_bg, STACK_OFF);
+ wbkgd(form_window, b | ' ');
+ /* wbkgdset does not make a lot of sense with USE_COLOR_STYLE
+ since it *forces* attributes on all the cells in the window.
+ Undo the change done in LYsubwindow, since we set our styles.
+ */
+ wbkgdset(form_window, (b & ~(A_BOLD|A_BLINK)) | ' ');
+ }
+# endif
+ }
+#endif /* USE_SLANG */
+ return form_window;
+}
+
PUBLIC void LYstartTargetEmphasis NOARGS
{
#ifdef USE_COLOR_STYLE
@@ -1255,6 +1585,61 @@ PUBLIC void LYstopTargetEmphasis NOARGS
#endif /* FANCY_CURSES || USE_SLANG */
}
+/*
+ * Accommodate the different flavors of touchline
+ */
+PUBLIC void LYtouchline ARGS1(
+ int, row)
+{
+#if defined(HAVE_WREDRAWLN) && !defined(NCURSES_VERSION)
+ wredrawln(LYwin, row, 1);
+#else
+#if defined(HAVE_TOUCHLINE)
+ /* touchline() is not available on VMS before version 7.0, and then only on
+ * Alpha, since prior ports of curses were broken. BSD touchline() has a
+ * 4th parameter since it is used internally by touchwin().
+ */
+#if defined(HAVE_BSD_TOUCHLINE)
+ touchline(LYwin, row, 0, COLS);
+#else
+ touchline(LYwin, row, 1);
+#endif
+#else
+#if !defined(USE_SLANG)
+ touchwin(LYwin);
+#else
+ SLsmg_touch_lines(row, 1);
+#endif
+#endif
+#endif
+}
+
+/*
+ * There's no guarantee that a library won't temporarily write on its input.
+ * Be safe and copy it when we have const-data.
+ */
+PUBLIC void LYwaddnstr ARGS3(
+ WINDOW *, w,
+ CONST char *, s,
+ size_t, len)
+{
+#ifdef USE_COLOR_STYLE
+ if (TRACE) {
+ int y, x;
+ LYGetYX(y, x);
+ CTRACE2(TRACE_STYLE, (tfp, "[%2d,%2d] LYwaddnstr(%.*s)\n", y, x, (int) len, s));
+ }
+#endif
+ while (len > 0) {
+ char temp[MAX_LINE];
+ size_t use = (len >= MAX_LINE) ? MAX_LINE - 1 : len;
+ memcpy(temp, s, use);
+ temp[use] = 0;
+ waddstr(w, temp);
+ len -= use;
+ }
+}
+
#ifdef VMS
/*
* Cut-down termio --
@@ -1318,11 +1703,11 @@ PUBLIC void LYstopTargetEmphasis NOARGS
#define EFN 0 /* Event flag */
-static unsigned char buffer[20]; /* Input buffer */
-static int in_pos, in_len; /* For escape sequences */
+static unsigned char buffer[20]; /* Input buffer */
+static int in_pos, in_len; /* For escape sequences */
static int oldmode[3]; /* Old TTY mode bits */
static int newmode[3]; /* New TTY mode bits */
-static short iochan; /* TTY I/O channel */
+static short iochan; /* TTY I/O channel */
static $DESCRIPTOR(term_nam_dsc,"TT"); /* Descriptor for iochan */
static unsigned long mask = LIB$M_CLI_CTRLY|LIB$M_CLI_CTRLT; /* ^Y and ^T */
static unsigned long old_msk; /* Saved control mask */
@@ -1331,7 +1716,7 @@ BOOLEAN DidCleanup = FALSE; /* Exit handler flag */
static char VersionVMS[20]; /* Version of VMS */
PUBLIC int VMSVersion ARGS2(
- char *, VerString,
+ char *, VerString,
int, VerLen)
{
unsigned long status, itm_cod = SYI$_VERSION;
@@ -1651,12 +2036,12 @@ void (*func)();
*/
#ifdef __DECC
PRIVATE unsigned int DCLspawn_exception ARGS2(
- void *, sigarr,
- void *, mecharr)
+ void *, sigarr,
+ void *, mecharr)
#else
PRIVATE int DCLspawn_exception ARGS2(
- void *, sigarr,
- void *, mecharr)
+ void *, sigarr,
+ void *, mecharr)
#endif /* __DECC */
{
int status;
@@ -1666,7 +2051,7 @@ PRIVATE int DCLspawn_exception ARGS2(
}
PRIVATE int spawn_DCLprocess ARGS1(
- char *, command)
+ char *, command)
{
int status;
unsigned long Status = 0;
@@ -1716,7 +2101,7 @@ PRIVATE int spawn_DCLprocess ARGS1(
}
PUBLIC int DCLsystem ARGS1(
- char *, command)
+ char *, command)
{
int status;
extern void controlc();
@@ -1731,29 +2116,118 @@ PUBLIC int DCLsystem ARGS1(
}
#endif /* VMS */
-PUBLIC void lynx_force_repaint NOARGS
+/*
+ * Return the physical screen dimensions that we're allowed to use.
+ */
+PUBLIC int LYscreenHeight NOARGS
{
-#if defined(COLOR_CURSES)
- chtype a;
- if (LYShowColor >= SHOW_COLOR_ON)
- a = COLOR_BKGD;
- else
- a = A_NORMAL;
- bkgdset(a | ' ');
-#ifndef USE_COLOR_STYLE
- bkgd(a | ' ');
+ int result = LINES;
+ if (result <= 0)
+ result = DFT_ROWS;
+ return result;
+}
+
+PUBLIC int LYscreenWidth NOARGS
+{
+ int result = COLS;
+#if defined(PDCURSES_EXP) && defined(WIN_EX) && defined(CJK_EX) /* 1999/08/26 (Thu) 17:53:38 */
+ {
+ extern int current_codepage; /* PDCurses lib. */
+
+ if (current_codepage == 932)
+ result--;
+ }
#endif
- attrset(a);
-#endif /* COLOR_CURSES */
+ if (result <= 0)
+ result = DFT_COLS;
+ return result;
+}
+
+/*
+ * The functions ifdef'd with USE_CURSES_PADS are implemented that way so we
+ * don't break the slang configuration.
+ */
+PUBLIC void LYclear NOARGS
+{
+#ifdef USE_CURSES_PADS
+ wclear(LYwin);
+#else
+ clear();
+#endif
+}
+
+PUBLIC void LYclrtoeol NOARGS
+{
+#ifdef USE_CURSES_PADS
+ wclrtoeol(LYwin);
+#else
+ clrtoeol();
+#endif
+}
+
+PUBLIC void LYerase NOARGS
+{
+#ifdef USE_CURSES_PADS
+ werase(LYwin);
+#else
+ erase();
+#endif
+}
+
+PUBLIC void LYmove ARGS2(int, y, int, x)
+{
+#ifdef USE_CURSES_PADS
+ wmove(LYwin, y, x);
+#else
+ move(y, x);
+#endif
+}
+
+PUBLIC void LYrefresh NOARGS
+{
+#ifdef USE_CURSES_PADS
+ if (LYwin != stdscr) {
+ /*
+ * Workaround for special case where lynx is prompting for a mailto,
+ * and has a subject line that is wider than the screen. The
+ * wnoutrefresh() call resets newscr's position to match stdscr's,
+ * which happens to be the window's origin because we were not updating
+ * that, and other stray wmove's in lynx fail because the coordinate
+ * is on/after the right margin. Force things to look ok here.
+ */
+ int y, x;
+ getyx(LYwin, y, x);
+ if (x >= LYcols) x = LYcols-1;
+ wmove(stdscr, y, x);
+
+ wnoutrefresh(stdscr);
+ pnoutrefresh(LYwin, 0, LYshiftWin, 0, 0, LYlines, LYscreenWidth()-1);
+ doupdate();
+ } else {
+ refresh();
+ }
+#else
+ refresh();
+#endif
+}
+
+PUBLIC void lynx_force_repaint NOARGS
+{
clearok(curscr, TRUE);
}
PUBLIC void lynx_start_title_color NOARGS
{
+#ifdef SH_EX
+ start_reverse();
+#endif
}
PUBLIC void lynx_stop_title_color NOARGS
{
+#ifdef SH_EX
+ stop_reverse();
+#endif
}
PUBLIC void lynx_start_link_color ARGS2(
@@ -1793,7 +2267,7 @@ PUBLIC void lynx_stop_link_color ARGS2(
int, pending GCC_UNUSED)
{
#ifdef USE_COLOR_STYLE
- LynxChangeStyle(flag == ON ? s_alink : s_a, ABS_OFF, 0);
+ LynxChangeStyle(flag == ON ? s_alink : s_a, ABS_OFF);
#else
if (flag) {
stop_reverse();
@@ -1821,16 +2295,16 @@ PUBLIC void lynx_stop_link_color ARGS2(
PUBLIC void lynx_stop_target_color NOARGS
{
- stop_underline();
- stop_reverse();
- stop_bold();
+ stop_underline();
+ stop_reverse();
+ stop_bold();
}
PUBLIC void lynx_start_target_color NOARGS
{
- start_bold();
- start_reverse();
- start_underline();
+ start_bold();
+ start_reverse();
+ start_underline();
}
@@ -1856,39 +2330,83 @@ PUBLIC void lynx_stop_status_color NOARGS
PUBLIC void lynx_start_h1_color NOARGS
{
- if (bold_H1 || bold_headers)
- start_bold();
+ if (bold_H1 || bold_headers)
+ start_bold();
}
PUBLIC void lynx_stop_h1_color NOARGS
{
- if (bold_H1 || bold_headers)
- stop_bold();
+ if (bold_H1 || bold_headers)
+ stop_bold();
}
PUBLIC void lynx_start_prompt_color NOARGS
{
- start_reverse ();
+ start_reverse ();
}
PUBLIC void lynx_stop_prompt_color NOARGS
{
- stop_reverse ();
+ stop_reverse ();
}
PUBLIC void lynx_start_radio_color NOARGS
{
- start_bold ();
+ start_bold ();
}
PUBLIC void lynx_stop_radio_color NOARGS
{
- stop_bold ();
+ stop_bold ();
}
PUBLIC void lynx_stop_all_colors NOARGS
{
- stop_underline ();
- stop_reverse ();
- stop_bold ();
+ stop_underline ();
+ stop_reverse ();
+ stop_bold ();
}
+
+/*
+ * If LYShowCursor is ON, move the cursor to the left of the current option, so
+ * that blind users, who are most likely to have LYShowCursor ON, will have
+ * it's string spoken or passed to the braille interface as each option is made
+ * current. Otherwise, move it to the bottom, right column of the screen, to
+ * "hide" the cursor as for the main document, and let sighted users rely on
+ * the current option's highlighting or color without the distraction of a
+ * blinking cursor in the window. - FM
+ */
+PUBLIC void LYstowCursor ARGS3(
+ WINDOW *, win,
+ int, row,
+ int, col)
+{
+#ifdef USE_SLANG
+ if (LYShowCursor)
+ SLsmg_gotorc(win->top_y + row, win->left_x + col);
+ else
+ LYHideCursor();
+ SLsmg_refresh();
+#else
+ if (LYShowCursor)
+ wmove(win, row, col);
+ else
+ LYHideCursor();
+ wrefresh(win);
+#endif /* USE_SLANG */
+}
+
+#if defined(USE_BLINK) && defined(__EMX__) /* Can't put it earler due to BOOLEAN conflict */
+# define BOOLEAN os2BOOLEAN
+# define INCL_VIO
+# include "os2.h"
+PRIVATE void make_blink_boldbg NOARGS
+{
+ VIOINTENSITY buf; /* VIO windows have it anyway, */
+ /* but FS session need a switch */
+ buf.cb = sizeof(buf);
+ buf.type = 2; /* VIOINTENSITY request */
+ buf.fs = 1; /* Intensity == boldbg */
+ VioSetState(&buf,0);
+}
+#endif
diff --git a/gnu/usr.bin/lynx/src/LYCurses.h b/gnu/usr.bin/lynx/src/LYCurses.h
index bf0dc01414b..7a0390cea29 100644
--- a/gnu/usr.bin/lynx/src/LYCurses.h
+++ b/gnu/usr.bin/lynx/src/LYCurses.h
@@ -6,6 +6,27 @@
#endif
/*
+ * Because we have to configure PDCURSES last, we may get bogus definitions
+ * from the system curses library - cancel these now.
+ */
+#ifdef HAVE_XCURSES
+
+#undef ASSUME_DEFAULT_COLORS
+#undef COLOR_CURSES
+#undef FANCY_CURSES
+#undef HAVE_CBREAK
+#undef HAVE_RESIZETERM
+#undef HAVE_USE_DEFAULT_COLORS
+#undef NCURSES
+#undef USE_DEFAULT_COLORS
+
+#define HAVE_CBREAK 1
+#define COLOR_CURSES 1
+#define FANCY_CURSES 1
+
+#endif
+
+/*
* The simple color scheme maps the 8 combinations of bold/underline/reverse
* to the standard 8 ANSI colors (with some variations based on context).
*/
@@ -25,11 +46,69 @@
#endif /* FALSE */
#ifdef USE_SLANG
-#if defined(UNIX) && !defined(unix)
-#define unix
-#endif /* UNIX && !unix */
#include <slang.h>
+#undef WINDOW
+typedef struct {
+ int top_y;
+ int left_x;
+ int height;
+ int width;
+} WINDOW;
+
+/* slang doesn't really do windows... */
+#define waddch(w,c) LYaddch(c)
+#define waddstr(w,s) addstr(s)
+#define wmove(win, row, col) SLsmg_gotorc((win)->top_y + (row), (win)->left_x + (col));
+
+#ifndef SLSMG_UARROW_CHAR
+#define SLSMG_UARROW_CHAR '^'
+#endif
+
+#ifndef SLSMG_DARROW_CHAR
+#define SLSMG_DARROW_CHAR 'v'
+#endif
+
+#ifndef SLSMG_LARROW_CHAR
+#define SLSMG_LARROW_CHAR '<'
+#endif
+
+#ifndef SLSMG_RARROW_CHAR
+#define SLSMG_RARROW_CHAR '>'
+#endif
+
+#ifndef SLSMG_CKBRD_CHAR
+#define SLSMG_CKBRD_CHAR '#'
+#endif
+
+#ifndef SLSMG_BLOCK_CHAR
+#define SLSMG_BLOCK_CHAR '#'
+#endif
+
+#ifndef ACS_UARROW
+#define ACS_UARROW SLSMG_UARROW_CHAR
+#endif
+
+#ifndef ACS_DARROW
+#define ACS_DARROW SLSMG_DARROW_CHAR
+#endif
+
+#ifndef ACS_LARROW
+#define ACS_LARROW SLSMG_LARROW_CHAR
+#endif
+
+#ifndef ACS_RARROW
+#define ACS_RARROW SLSMG_RARROW_CHAR
+#endif
+
+#ifndef ACS_CKBOARD
+#define ACS_CKBOARD SLSMG_CKBRD_CHAR
+#endif
+
+#ifndef ACS_BLOCK
+#define ACS_BLOCK SLSMG_BLOCK_CHAR
+#endif
+
#else /* Using curses: */
#ifdef VMS
@@ -74,17 +153,42 @@
#undef PENDIN
#endif
+#if defined(_MSC_VER)
+#undef MOUSE_MOVED /* conflict between PDCURSES and _WIN32 */
+#endif /* _MSC_VER */
+
+/*
+ * Do this to build with glibc 2.1.3 (apparently it was not used to build a
+ * system before release).
+ */
+#include <signal.h>
+
+#undef CS /* some BSD versions of curses use this */
+#define CS curses_CS /* ...but we don't */
+
+#ifdef ERR
+#undef ERR /* all versions of curses define this */
+#endif
+
#ifdef HAVE_CONFIG_H
-# ifdef HAVE_NCURSES_H
-# include <ncurses.h>
+# ifdef HAVE_NCURSES_NCURSES_H
+# include <ncurses/ncurses.h>
# else
-# ifdef HAVE_CURSESX_H
-# include <cursesX.h> /* Ultrix */
+# ifdef HAVE_NCURSES_H
+# include <ncurses.h>
# else
-# ifdef HAVE_JCURSES_H
-# include <jcurses.h> /* sony_news */
+# ifdef HAVE_CURSESX_H
+# include <cursesX.h> /* Ultrix */
# else
-# include <curses.h> /* default */
+# ifdef HAVE_JCURSES_H
+# include <jcurses.h> /* sony_news */
+# else
+# ifdef HAVE_XCURSES
+# include <xcurses.h> /* PDCurses' UNIX port */
+# else
+# include <curses.h> /* default */
+# endif
+# endif
# endif
# endif
# endif
@@ -93,30 +197,88 @@
# define getbkgd(w) wgetbkgd(w) /* workaround pre-1.9.9g bug */
# endif
-# ifdef NCURSES
-extern void LYsubwindow PARAMS((WINDOW * param));
-# endif /* NCURSES */
+# ifdef FANCY_CURSES
+# if defined(NCURSES) && defined(HAVE_NCURSES_TERM_H)
+# include <ncurses/term.h>
+# else
+# if defined(HAVE_TERM_H)
+# include <term.h>
+# endif
+# endif
+# endif
-#if defined(NCURSES_VERSION) && defined(HAVE_DEFINE_KEY)
-#include <term.h>
-#define USE_KEYMAPS 1
-#endif
+# if defined(NCURSES_VERSION) && defined(HAVE_DEFINE_KEY)
+# define USE_KEYMAPS 1
+# endif
#else
# if defined(VMS) && defined(__GNUC__)
# include <LYGCurses.h>
-# else
-# include <curses.h> /* everything else */
+# else
+# include <curses.h> /* everything else */
# endif /* VMS && __GNUC__ */
#endif /* HAVE_CONFIG_H */
-#ifdef VMS
-extern void VMSbox PARAMS((WINDOW *win, int height, int width));
+/*
+ * PDCurses' mouse code does nothing in the DJGPP configuration.
+ */
+#if defined(PDCURSES) && !defined(__DJGPP__) && !defined(HAVE_XCURSES)
+#define USE_MOUSE 1
+#endif
+
+/*
+ * Pick up the native ncurses name:
+ */
+#if defined(NCURSES_MOUSE_VERSION)
+#define USE_MOUSE 1
+#endif
+
+/*
+ * If we have pads, use them to implement left/right scrolling.
+ */
+#if defined(HAVE_NEWPAD) && defined(HAVE_PNOUTREFRESH)
+#define USE_CURSES_PADS 1
+#endif
+
+/*
+ * ncurses 1.9.9e won't work for pads, but 4.2 does (1.9.9g doesn't have a
+ * convenient ifdef, though it would work).
+ */
+#if defined(NCURSES_VERSION) && !defined(NCURSES_VERSION_MAJOR)
+#undef USE_CURSES_PADS
+#endif
+
+#endif /* USE_SLANG */
+
+#ifdef USE_SLANG
+#define LYstopPopup() /* nothing */
#else
+extern void LYsubwindow PARAMS((WINDOW * param));
+#define LYstopPopup() LYsubwindow(0)
+#endif /* NCURSES */
+
extern void LYbox PARAMS((WINDOW *win, BOOLEAN formfield));
-#endif /* VMS */
-#endif /* USE_SLANG */
+extern WINDOW *LYstartPopup PARAMS((int top_y, int left_x, int height, int width));
+
+/*
+ * Useful macros not in PDCurses or very old ncurses headers.
+ */
+#if !defined(HAVE_GETATTRS) && !defined(getattrs)
+#define getattrs(win) ((win)->_attrs)
+#endif
+#if !defined(HAVE_GETBEGX) && !defined(getbegx)
+#define getbegx(win) ((win)->_begx)
+#endif
+#if !defined(HAVE_GETBEGY) && !defined(getbegy)
+#define getbegy(win) ((win)->_begy)
+#endif
+#if !defined(HAVE_GETBKGD) && !defined(getbkgd)
+#define getbkgd(win) ((win)->_bkgd)
+#endif
+#if defined(PDCURSES)
+#define HAVE_GETBKGD 1 /* can use fallback definition */
+#endif
/* Both slang and curses: */
#ifndef TRUE
@@ -146,14 +308,47 @@ extern void LYbox PARAMS((WINDOW *win, BOOLEAN formfield));
#undef HAVE_KEYPAD /* avoid confusion with bogus 'keypad()' */
#endif
-extern int LYlines; /* replaces LINES */
-extern int LYcols; /* replaces COLS */
+extern int LYlines; /* replaces LINES */
+extern int LYcols; /* replaces COLS */
+
+#ifdef USE_CURSES_PADS
+extern WINDOW *LYwin;
+extern int LYshiftWin;
+extern int LYwideLines;
+extern int LYtableCols;
+extern BOOL LYuseCursesPads;
+#else
+#define LYwin stdscr
+#define LYshiftWin 0
+#define LYwideLines 0
+#define LYtableCols 0
+#endif
+
+#if defined(USE_COLOR_TABLE) || defined(USE_SLANG)
+extern int Current_Attr;
+extern int Masked_Attr;
+#endif
-extern void start_curses NOPARAMS;
-extern void stop_curses NOPARAMS;
extern BOOLEAN setup PARAMS((char *terminal));
+extern int LYscreenHeight NOPARAMS;
+extern int LYscreenWidth NOPARAMS;
+extern void LYclear NOPARAMS;
+extern void LYclrtoeol NOPARAMS;
+extern void LYerase NOPARAMS;
+extern void LYmove PARAMS((int y, int x));
+extern void LYnoVideo PARAMS((int mask));
+extern void LYpaddstr PARAMS((WINDOW *w, int width, CONST char *s));
+extern void LYrefresh NOPARAMS;
extern void LYstartTargetEmphasis NOPARAMS;
extern void LYstopTargetEmphasis NOPARAMS;
+extern void LYtouchline PARAMS((int row));
+extern void LYwaddnstr PARAMS((WINDOW *w, CONST char *s, size_t len));
+extern void start_curses NOPARAMS;
+extern void stop_curses NOPARAMS;
+
+#define LYaddstr(s) LYwaddnstr(LYwin, s, strlen(s))
+#define LYaddnstr(s,len) LYwaddnstr(LYwin, s, len)
+#define LYwaddstr(w,s) LYwaddnstr(w, s, strlen(s))
#ifdef VMS
extern int DCLsystem (char *command);
@@ -167,14 +362,14 @@ extern void VMSsignal PARAMS((int sig, void (*func)()));
#if defined(USE_COLOR_STYLE)
extern void curses_css PARAMS((char * name, int dir));
extern void curses_style PARAMS((int style, int dir));
-extern void curses_w_style PARAMS((WINDOW* win, int style, int dir));
extern void setHashStyle PARAMS((int style, int color, int cattr, int mono, char* element));
extern void setStyle PARAMS((int style, int color, int cattr, int mono));
extern void wcurses_css PARAMS((WINDOW * win, char* name, int dir));
-#define LynxChangeStyle(style,dir,previous) curses_style(style,dir)
+extern void curses_w_style PARAMS((WINDOW* win, int style, int dir));
+# define LynxChangeStyle(style,dir) curses_style(style,dir)
+# define LynxWChangeStyle(win,style,dir) curses_w_style(win,style,dir)
#else
-extern int slang_style PARAMS((int style, int dir, int previous));
-#define LynxChangeStyle(style,dir,previous) slang_style(style,dir,previous)
+# define LynxWChangeStyle(win,style,dir) (void)1
#endif /* USE_COLOR_STYLE */
#if USE_COLOR_TABLE
@@ -185,18 +380,18 @@ extern unsigned int Lynx_Color_Flags;
#endif
#ifdef USE_SLANG
+#define SHOW_WHEREIS_TARGETS 1
#if !defined(VMS) && !defined(DJGPP)
-#define USE_SLANG_MOUSE 1
+#define USE_MOUSE 1
#endif
-#if !defined(__DJGPP__)
+#if !defined(__DJGPP__) && !defined(__CYGWIN__)
#define USE_KEYMAPS 1
#endif
#define SL_LYNX_USE_COLOR 1
-#define SL_LYNX_USE_BLINK 2
-#define SL_LYNX_OVERRIDE_COLOR 4
+#define SL_LYNX_OVERRIDE_COLOR 2
#define start_bold() LYaddAttr(1)
#define start_reverse() LYaddAttr(2)
@@ -212,9 +407,6 @@ extern unsigned int Lynx_Color_Flags;
/*
* Map some curses functions to slang functions.
*/
-#ifndef WINDOW
-#define WINDOW void
-#endif
#define stdscr NULL
#ifdef SLANG_MBCS_HACK
extern int PHYSICAL_SLtt_Screen_Cols;
@@ -239,9 +431,14 @@ extern void LY_SLerase NOPARAMS;
#define scrollok(a,b) SLsmg_Newline_Moves = ((b) ? 1 : -1)
#endif
-#define addch SLsmg_write_char
+#define LYaddch(ch) SLsmg_write_char(ch)
+#define addch_raw(ch) do { \
+ SLsmg_Char_Type buf; \
+ buf = (ch) | (Current_Attr << 4); \
+ SLsmg_write_raw (&buf, 1); \
+ } while (0)
#define echo()
-#define printw SLsmg_printf
+#define printw SLsmg_printf
extern int curscr;
extern BOOLEAN FullRefresh;
@@ -257,7 +454,7 @@ extern void LY_SLrefresh NOPARAMS;
#ifdef VMS
extern void VTHome NOPARAMS;
-#define endwin() clear(),refresh(),SLsmg_reset_smg(),VTHome()
+#define endwin() LYclear(),refresh(),SLsmg_reset_smg(),VTHome()
#else
#define endwin SLsmg_reset_smg(),SLang_reset_tty
#endif /* VMS */
@@ -265,6 +462,7 @@ extern void VTHome NOPARAMS;
#else /* Define curses functions: */
#ifdef FANCY_CURSES
+#define SHOW_WHEREIS_TARGETS 1
#ifdef VMS
/*
@@ -284,13 +482,14 @@ extern void VTHome NOPARAMS;
#define stop_underline() clrattr(_UNDERLINE)
#endif /* UNDERLINE_LINKS */
#define start_reverse() setattr(_REVERSE)
-#define wstart_reverse(a) wsetattr(a, _REVERSE)
-#define wstop_underline(a) wclrattr(a, _UNDERLINE)
+#define wstart_reverse(w) wsetattr(w, _REVERSE)
#define stop_reverse() clrattr(_REVERSE)
-#define wstop_reverse(a) wclrattr(a, _REVERSE)
+#define wstop_reverse(w) wclrattr(w, _REVERSE)
#else /* Not VMS: */
+extern int string_to_attr PARAMS((char *name));
+
/*
* For Unix FANCY_FANCY curses we interpose
* our own functions to add or subtract the
@@ -309,17 +508,22 @@ extern int lynx_chg_color PARAMS((int, int, int));
#undef standend
#define standend() lynx_standout(FALSE)
#else
-#define LYaddAttr attrset
-#define LYaddWAttr wattrset
-#define LYsubAttr attroff
-#define LYsubWAttr wattroff
+#define LYaddAttr(attr) LYaddWAttr(LYwin,attr)
+#define LYaddWAttr(win,attr) wattron(win,attr)
+#define LYsubAttr(attr) LYsubWAttr(LYwin,attr)
+#define LYsubWAttr(win,attr) wattroff(win,attr)
#endif
#ifdef UNDERLINE_LINKS
#define start_bold() LYaddAttr(A_UNDERLINE)
#define stop_bold() LYsubAttr(A_UNDERLINE)
+#ifdef __CYGWIN__ /* 1999/02/25 (Thu) 01:09:45 */
+#define start_underline() /* LYaddAttr(A_BOLD) */
+#define stop_underline() /* LYsubAttr(A_BOLD) */
+#else
#define start_underline() LYaddAttr(A_BOLD)
#define stop_underline() LYsubAttr(A_BOLD)
+#endif /* __CYGWIN__ */
#else /* not UNDERLINE_LINKS: */
#define start_bold() LYaddAttr(A_BOLD)
#define stop_bold() LYsubAttr(A_BOLD)
@@ -330,17 +534,19 @@ extern int lynx_chg_color PARAMS((int, int, int));
#endif /* USE_COLOR_STYLE */
#define stop_underline() LYsubAttr(A_UNDERLINE)
#endif /* UNDERLINE_LINKS */
+
#if defined(SNAKE) && defined(HP_TERMINAL)
-#define start_reverse() LYaddWAttr(stdscr, A_DIM)
-#define wstart_reverse(a) LYaddWAttr(a, A_DIM)
-#define stop_reverse() LYsubWAttr(stdscr, A_DIM)
-#define wstop_reverse(a) LYsubWAttr(a, A_DIM)
+#define start_reverse() LYaddWAttr(LYwin, A_DIM)
+#define wstart_reverse(w) LYaddWAttr(w, A_DIM)
+#define stop_reverse() LYsubWAttr(LYwin, A_DIM)
+#define wstop_reverse(w) LYsubWAttr(w, A_DIM)
#else
#define start_reverse() LYaddAttr(A_REVERSE)
-#define wstart_reverse(a) LYaddWAttr(a, A_REVERSE)
+#define wstart_reverse(w) LYaddWAttr(w, A_REVERSE)
#define stop_reverse() LYsubAttr(A_REVERSE)
-#define wstop_reverse(a) LYsubWAttr(a, A_REVERSE)
+#define wstop_reverse(w) LYsubWAttr(w, A_REVERSE)
#endif /* SNAKE && HP_TERMINAL */
+
#endif /* VMS */
#else /* Not FANCY_CURSES: */
@@ -368,20 +574,52 @@ FANCY_CURSES. Check your config.log to see why the FANCY_CURSES test failed.
#define wstop_reverse(a) wstandend(a)
#endif /* FANCY_CURSES */
+
+#ifndef ACS_UARROW
+#define ACS_UARROW '^'
+#endif
+
+#ifndef ACS_DARROW
+#define ACS_DARROW 'V'
+#endif
+
+#ifndef ACS_LARROW
+#define ACS_LARROW '{'
+#endif
+
+#ifndef ACS_RARROW
+#define ACS_RARROW '}'
+#endif
+
+#define LYaddch(ch) waddch(LYwin, ch)
+
+#define addch_raw(ch) LYaddch(ch)
+
#endif /* USE_SLANG */
#ifdef USE_SLANG
#define LYGetYX(y, x) y = SLsmg_get_row(), x = SLsmg_get_column()
#else
#ifdef getyx
-#define LYGetYX(y, x) getyx(stdscr, y, x)
+#define LYGetYX(y, x) getyx(LYwin, y, x)
#else
-#define LYGetYX(y, x) y = stdscr->_cury, x = stdscr->_curx
+#define LYGetYX(y, x) y = LYwin->_cury, x = LYwin->_curx
#endif /* getyx */
#endif /* USE_SLANG */
+/*
+ * If the screen library allows us to specify "default" color, allow user to
+ * control it.
+ */
+#if USE_DEFAULT_COLORS
+#if USE_SLANG || (HAVE_ASSUME_DEFAULT_COLORS && !defined(USE_COLOR_STYLE))
+#define EXP_ASSUMED_COLOR 1
+#endif
+#endif
+
extern void lynx_enable_mouse PARAMS((int));
extern void lynx_force_repaint NOPARAMS;
+extern void lynx_nl2crlf PARAMS((int normal));
extern void lynx_start_title_color NOPARAMS;
extern void lynx_stop_title_color NOPARAMS;
extern void lynx_start_link_color PARAMS((int flag, int pending));
@@ -406,8 +644,8 @@ extern void lynx_stop_all_colors NOPARAMS;
* Note: EMX has no corresponding variable like _fmode on DOS, but it does
* have setmode.
*/
-#if defined(_WINDOWS) || defined(DJGPP) || defined(__EMX__)
-#define SetOutputMode(mode) setmode(fileno(stdout), mode)
+#if defined(_WINDOWS) || defined(DJGPP) || defined(__EMX__) || defined(WIN_EX)
+#define SetOutputMode(mode) fflush(stdout), setmode(fileno(stdout), mode)
#else
#define SetOutputMode(mode) /* nothing */
#endif
@@ -418,4 +656,16 @@ extern void lynx_stop_all_colors NOPARAMS;
#define SetDefaultMode(mode) /* nothing */
#endif
+/*
+ * Very old versions of curses cannot put the cursor on the lower right corner.
+ * Adjust our "hidden" cursor position accordingly.
+ */
+#if defined(FANCY_CURSES) || defined(USE_SLANG)
+#define LYHideCursor() LYmove((LYlines - 1), (LYcols - 1))
+#else
+#define LYHideCursor() LYmove((LYlines - 1), (LYcols - 2))
+#endif
+
+extern void LYstowCursor PARAMS((WINDOW * win, int row, int col));
+
#endif /* LYCURSES_H */
diff --git a/gnu/usr.bin/lynx/src/LYDownload.c b/gnu/usr.bin/lynx/src/LYDownload.c
index eaf1690b43b..f211652e689 100644
--- a/gnu/usr.bin/lynx/src/LYDownload.c
+++ b/gnu/usr.bin/lynx/src/LYDownload.c
@@ -25,7 +25,7 @@ PUBLIC BOOLEAN LYDidRename = FALSE;
PRIVATE char LYValidDownloadFile[LY_MAXPATH] = "\0";
PUBLIC void LYDownload ARGS1(
- char *, line)
+ char *, line)
{
char *Line = NULL, *method, *file, *sug_file = NULL;
int method_number;
@@ -34,8 +34,7 @@ PUBLIC void LYDownload ARGS1(
char buffer[LY_MAXPATH];
char command[LY_MAXPATH];
char *cp;
- lynx_html_item_type *download_command = 0;
- FILE *fp;
+ lynx_list_item_type *download_command = 0;
int ch, recall;
int FnameTotal;
int FnameNum;
@@ -61,25 +60,25 @@ PUBLIC void LYDownload ARGS1(
StrAllocCopy(Line, line);
/*
- * Parse out the sug_file, Method and the File.
+ * Parse out the File, sug_file, and the Method.
*/
- if ((sug_file = (char *)strstr(Line, "SugFile=")) != NULL) {
- *(sug_file-1) = '\0';
+ if ((file = strstr(Line, "/File=")) == NULL)
+ goto failed;
+ *file = '\0';
+ /*
+ * Go past "File=".
+ */
+ file += 6;
+
+ if ((sug_file = strstr(file + 1, "/SugFile=")) != NULL) {
+ *sug_file = '\0';
/*
* Go past "SugFile=".
*/
- sug_file += 8;
+ sug_file += 9;
HTUnEscape(sug_file);
}
- if ((file = (char *)strstr(Line, "File=")) == NULL)
- goto failed;
- *(file-1) = '\0';
- /*
- * Go past "File=".
- */
- file += 5;
-
/*
* Make sure that the file string is the one from
* the last displayed download options menu. - FM
@@ -88,16 +87,30 @@ PUBLIC void LYDownload ARGS1(
goto failed;
}
-#ifdef DIRED_SUPPORT
+#if defined(DIRED_SUPPORT)
/* FIXME: use HTLocalName */
- if (!strncmp(file, "file://localhost", 16))
+ if (!strncmp(file, "file://localhost", 16)) {
+#ifdef __DJGPP__
+ file += 17;
+ file = HTDOS_name(file);
+#else
file += 16;
+#endif /* __DJGPP__ */
+ }
else if (!strncmp(file, "file:", 5))
file += 5;
HTUnEscape(file);
+#else
+#if defined(_WINDOWS) /* 1997/10/15 (Wed) 16:27:38 */
+ if (!strncmp(file, "file://localhost/", 17))
+ file += 17;
+ else if (!strncmp(file, "file:/", 6))
+ file += 6;
+ HTUnEscape(file);
+#endif /* _WINDOWS */
#endif /* DIRED_SUPPORT */
- if ((method = (char *)strstr(Line, "Method=")) == NULL)
+ if ((method = strstr(Line, "Method=")) == NULL)
goto failed;
/*
* Go past "Method=".
@@ -109,7 +122,7 @@ PUBLIC void LYDownload ARGS1(
* Set up the sug_filenames recall buffer.
*/
FnameTotal = (sug_filenames ? HTList_count(sug_filenames) : 0);
- recall = ((FnameTotal >= 1) ? RECALL : NORECALL);
+ recall = ((FnameTotal >= 1) ? RECALL_URL : NORECALL);
FnameNum = FnameTotal;
if (method_number < 0) {
@@ -151,7 +164,7 @@ check_recall:
} else if ((cp = (char *)HTList_objectAt(
sug_filenames,
FnameNum)) != NULL) {
- strcpy(buffer, cp);
+ LYstrncpy(buffer, cp, sizeof(buffer)-1);
if (FnameTotal == 1) {
_statusline(EDIT_THE_PREV_FILENAME);
} else {
@@ -184,7 +197,7 @@ check_recall:
} else if ((cp = (char *)HTList_objectAt(
sug_filenames,
FnameNum)) != NULL) {
- strcpy(buffer, cp);
+ LYstrncpy(buffer, cp, sizeof(buffer)-1);
if (FnameTotal == 1) {
_statusline(EDIT_THE_PREV_FILENAME);
} else {
@@ -233,14 +246,9 @@ check_recall:
/*
* See if we can write to it.
*/
- CTRACE(tfp, "LYDownload: filename is %s", buffer);
+ CTRACE((tfp, "LYDownload: filename is %s\n", buffer));
- if ((fp = fopen(buffer, "w")) != NULL) {
- fclose(fp);
- remove(buffer);
- } else {
- HTAlert(CANNOT_WRITE_TO_FILE);
- _statusline(NEW_FILENAME_PROMPT);
+ if (! LYCanWriteFile(buffer)) {
FirstRecall = TRUE;
FnameNum = FnameTotal;
goto retry;
@@ -252,12 +260,12 @@ check_recall:
/*
* Try rename() first. - FM
*/
- CTRACE(tfp, "command: rename(%s, %s)\n", file, buffer);
+ CTRACE((tfp, "command: rename(%s, %s)\n", file, buffer));
if (rename(file, buffer)) {
/*
* Failed. Use spawned COPY_COMMAND. - FM
*/
- CTRACE(tfp, " FAILED!\n");
+ CTRACE((tfp, " FAILED!\n"));
LYCopyFile(file, buffer);
} else {
/*
@@ -332,7 +340,7 @@ check_recall:
} else if ((cp = (char *)HTList_objectAt(
sug_filenames,
FnameNum)) != NULL) {
- strcpy(buffer, cp);
+ LYstrncpy(buffer, cp, sizeof(buffer)-1);
if (FnameTotal == 1) {
_statusline(EDIT_THE_PREV_FILENAME);
} else {
@@ -365,7 +373,7 @@ check_recall:
} else if ((cp = (char *)HTList_objectAt(
sug_filenames,
FnameNum)) != NULL) {
- strcpy(buffer, cp);
+ LYstrncpy(buffer, cp, sizeof(buffer)-1);
if (FnameTotal == 1) {
_statusline(EDIT_THE_PREV_FILENAME);
} else {
@@ -396,7 +404,11 @@ check_recall:
if (!strncasecomp(buffer, "nl:", 3) ||
!strncasecomp(buffer, "/nl/", 4))
#else
+#if defined(DOSPATH) /* 1997/10/15 (Wed) 16:41:30 */
+ if (!strcmp(buffer, "nul"))
+#else
if (!strcmp(buffer, "/dev/null"))
+#endif /* DOSPATH */
#endif /* VMS */
{
goto cancelled;
@@ -422,7 +434,7 @@ check_recall:
goto failed;
}
- CTRACE(tfp, "command: %s\n", the_command);
+ CTRACE((tfp, "command: %s\n", the_command));
stop_curses();
LYSystem(the_command);
FREE(the_command);
@@ -467,13 +479,13 @@ cancelled:
*/
PUBLIC int LYdownload_options ARGS2(
char **, newfile,
- char *, data_file)
+ char *, data_file)
{
- static char tempfile[LY_MAXPATH];
+ static char tempfile[LY_MAXPATH] = "\0";
char *downloaded_url = NULL;
char *sug_filename = NULL;
FILE *fp0;
- lynx_html_item_type *cur_download;
+ lynx_list_item_type *cur_download;
int count;
/*
@@ -482,8 +494,13 @@ PUBLIC int LYdownload_options ARGS2(
StrAllocCopy(sug_filename, *newfile);
change_sug_filename(sug_filename);
- LYRemoveTemp(tempfile);
- if ((fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w")) == NULL) {
+ if (LYReuseTempfiles) {
+ fp0 = LYOpenTempRewrite(tempfile, HTML_SUFFIX, BIN_W);
+ } else {
+ LYRemoveTemp(tempfile);
+ fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, BIN_W);
+ }
+ if (fp0 == NULL) {
HTAlert(CANNOT_OPEN_TEMP);
return(-1);
}
@@ -500,12 +517,12 @@ PUBLIC int LYdownload_options ARGS2(
fprintf(fp0, "<pre>\n");
fprintf(fp0, "<em>%s</em> %s\n",
- gettext("Downloaded link:"),
+ gettext("Downloaded link:"),
downloaded_url);
FREE(downloaded_url);
fprintf(fp0, "<em>%s</em> %s\n",
- gettext("Suggested file name:"),
+ gettext("Suggested file name:"),
sug_filename);
fprintf(fp0, "\n%s\n",
@@ -514,7 +531,7 @@ PUBLIC int LYdownload_options ARGS2(
: gettext("Download options:"));
if (!no_disk_save && !child_lynx) {
-#ifdef DIRED_SUPPORT
+#if defined(DIRED_SUPPORT)
/*
* Disable save to disk option for local files.
*/
@@ -549,6 +566,7 @@ PUBLIC int LYdownload_options ARGS2(
fprintf(fp0, "</pre>\n");
EndInternalPage(fp0);
LYCloseTempFP(fp0);
+ LYRegisterUIPage(*newfile, UIP_DOWNLOAD_OPTIONS);
/*
* Free off temp copy.
diff --git a/gnu/usr.bin/lynx/src/LYEdit.c b/gnu/usr.bin/lynx/src/LYEdit.c
index 8e2ab7a9a23..3c7a725ce01 100644
--- a/gnu/usr.bin/lynx/src/LYEdit.c
+++ b/gnu/usr.bin/lynx/src/LYEdit.c
@@ -13,15 +13,30 @@
PUBLIC BOOLEAN editor_can_position NOARGS
{
+ static CONST char *table[] = {
#ifdef VMS
- return (strstr(editor, "sedt") || strstr(editor, "SEDT"));
+ "sedt",
+ "SEDT"
#else
- return (strstr(editor, "emacs") || strstr(editor, "vi") ||
- strstr(editor, "pico") || strstr(editor, "jove") ||
- strstr(editor, "jed") || strstr(editor, "joe") ||
- strstr(editor, "jstar") || strstr(editor, "jmacs") ||
- strstr(editor, "rjoe") || strstr(editor, "jpico"));
+ "emacs",
+ "jed",
+ "jmacs",
+ "joe",
+ "jove",
+ "jpico",
+ "jstar",
+ "pico",
+ "rjoe",
+ "vi"
#endif
+ };
+ unsigned n;
+ for (n = 0; n < TABLESIZE(table); n++) {
+ if (strstr(editor, table[n]) != 0) {
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/*
@@ -38,16 +53,24 @@ PUBLIC int edit_current_file ARGS3(
int, lineno)
{
int result = FALSE;
- int params = 1;
- char *format = "%s %s";
- char *command = NULL;
char *filename = NULL;
- char *colon, *number_sign;
+#if !(defined(VMS) || defined(DOSPATH) || defined(__EMX__))
+ char *colon;
+#endif
+ char *number_sign;
char position[80];
+#if defined(VMS) || defined(CANT_EDIT_UNWRITABLE_FILES)
FILE *fp;
+#endif
+#if defined(__CYGWIN__) && defined(DOSPATH)
+ unsigned char temp_buff[LY_MAXPATH];
+#endif
+
+ CTRACE((tfp, "edit_current_file(newfile=%s, cur=%d, lineno=%d)\n",
+ newfile, cur, lineno));
/*
- * If its a remote file then we can't edit it.
+ * If it's a remote file then we can't edit it.
*/
if (!LYisLocalFile(newfile)) {
HTUserMsg(CANNOT_EDIT_REMOTE_FILES);
@@ -67,32 +90,46 @@ PUBLIC int edit_current_file ARGS3(
*
* On VMS, only try the path.
*/
-#if !defined (VMS) && !defined (DOSPATH) && !defined (__EMX__)
+#if defined (VMS) || defined (DOSPATH) || defined (__EMX__)
+ filename = HTParse(newfile, "", PARSE_PATH+PARSE_PUNCTUATION);
+ HTUnEscape(filename);
+ StrAllocCopy(filename, HTSYS_name(filename));
+ if (!LYCanReadFile(filename)) {
+#ifdef SH_EX
+ HTUserMsg2(COULD_NOT_EDIT_FILE, filename);
+#else
+ HTAlert(COULD_NOT_ACCESS_FILE);
+#endif
+ CTRACE((tfp, "filename: '%s'\n", filename));
+ goto done;
+ }
+#else /* !(VMS || !DOSPATH || !__EMX__) == UNIX */
+#ifdef SH_EX /* Speed Up! */
+ if (strncmp(newfile, "file://localhost/", 16) == 0)
+ colon = newfile + 16;
+ else
+ colon = strchr(newfile, ':');
+#else
colon = strchr(newfile, ':');
+#endif
StrAllocCopy(filename, (colon + 1));
HTUnEscape(filename);
- if ((fp = fopen(filename, "r")) == NULL) {
+ if (!LYCanReadFile(filename)) {
FREE(filename);
-#endif /* !VMS */
filename = HTParse(newfile, "", PARSE_PATH+PARSE_PUNCTUATION);
HTUnEscape(filename);
- StrAllocCopy(filename, HTSYS_name(filename));
- if ((fp = fopen(filename, "r")) == NULL)
- {
+ if (!LYCanReadFile(HTSYS_name(filename))) {
HTAlert(COULD_NOT_ACCESS_FILE);
- CTRACE(tfp, "filename: '%s'\n", filename);
goto done;
}
-#if !defined (VMS) && !defined (DOSPATH) && !defined (__EMX__)
}
-#endif /* !VMS */
- fclose(fp);
+#endif /* !(VMS || !DOSPATH || !__EMX__) */
#if defined(VMS) || defined(CANT_EDIT_UNWRITABLE_FILES)
/*
* Don't allow editing if user lacks append access.
*/
- if ((fp = fopen(filename, "a")) == NULL)
+ if ((fp = fopen(filename, TXT_A)) == NULL)
{
HTUserMsg(NOAUTH_TO_EDIT_FILE);
goto done;
@@ -118,46 +155,134 @@ PUBLIC int edit_current_file ARGS3(
if (lineno > 0)
sprintf(position, "%d", lineno);
+ edit_temporary_file(filename, position, NULL);
+ result = TRUE;
+
+done:
+ /*
+ * Restore the fragment if there was one. - FM
+ */
+ if (number_sign)
+ *number_sign = '#';
+
+ FREE(filename);
+ CTRACE((tfp, "edit_current_file returns %d\n", result));
+ return (result);
+}
+
+PUBLIC void edit_temporary_file ARGS3(
+ char *, filename,
+ char *, position,
+ char *, message)
+{
+#ifdef UNIX
+ struct stat stat_info;
+#endif
+ char *format = "%s %s";
+ char *command = NULL;
+ char *editor_arg = "";
+ int params = 1;
+ int rv;
+
+ if (strstr(editor, "pico")) {
+ editor_arg = " -t"; /* No prompt for filename to use */
+ }
if (editor_can_position() && *position) {
#ifdef VMS
- format = "%s %s -%s";
+ format = "%s %s -%s%s";
HTAddXpand(&command, format, params++, editor);
HTAddParam(&command, format, params++, filename);
HTAddParam(&command, format, params++, position);
+ HTAddParam(&command, format, params++, editor_arg);
HTEndParam(&command, format, params);
#else
- format = "%s +%s %s";
+ format = "%s +%s%s %s";
HTAddXpand(&command, format, params++, editor);
HTAddParam(&command, format, params++, position);
+ HTAddParam(&command, format, params++, editor_arg);
HTAddParam(&command, format, params++, filename);
HTEndParam(&command, format, params);
#endif
- } else {
+ }
+#ifdef DOSPATH
+ else if (strncmp(editor, "VZ", 2)==0) {
+ /* for Vz editor */
+ format = "%s %s -%s";
+ HTAddXpand(&command, format, params++, editor);
+ HTAddParam(&command, format, params++, HTDOS_short_name(filename));
+ HTAddParam(&command, format, params++, position);
+ HTEndParam(&command, format, params);
+ } else if (strncmp(editor, "edit", 4)==0) {
+ /* for standard editor */
HTAddXpand(&command, format, params++, editor);
+ HTAddParam(&command, format, params++, HTDOS_short_name(filename));
+ HTEndParam(&command, format, params);
+ }
+#endif
+ else {
+#ifdef _WINDOWS
+ if (strchr(editor, ' '))
+ HTAddXpand(&command, format, params++, HTDOS_short_name(editor));
+ else
+ HTAddXpand(&command, format, params++, editor);
+#else
+#if defined(__CYGWIN__) && defined(DOSPATH)
+ if (strchr(editor, ' ')) {
+ cygwin_conv_to_full_posix_path(HTDOS_short_name(editor), temp_buff);
+ HTAddXpand(&command, format, params++, temp_buff);
+ } else {
+ HTAddXpand(&command, format, params++, editor);
+ }
+#else
+ HTAddXpand(&command, format, params++, editor);
+#endif /* __CYGWIN__ */
+#endif
HTAddParam(&command, format, params++, filename);
HTEndParam(&command, format, params);
}
+ if (message != NULL) {
+ _statusline(message);
+ }
- CTRACE(tfp, "LYEdit: %s\n", command);
+ CTRACE((tfp, "LYEdit: %s\n", command));
CTRACE_SLEEP(MessageSecs);
- /*
- * Invoke the editor. - FM
- */
stop_curses();
- LYSystem(command);
- start_curses();
- result = TRUE;
-
-done:
+#ifdef UNIX
+ set_errno(0);
+#endif
+ if ((rv = LYSystem(command)) != 0) { /* Spawn Editor */
+ start_curses();
+ /*
+ * If something went wrong, we should probably return soon;
+ * currently we don't, but at least put out a message. - kw
+ */
+ {
+#ifdef UNIX
+ int rvhi = (rv >> 8);
+ CTRACE((tfp, "ExtEditForm: system() returned %d (0x%x), %s\n",
+ rv, rv, errno ? LYStrerror(errno) : "reason unknown"));
+ LYFixCursesOn("show error warning:");
+ if (rv != -1 && (rv && 0xff) && !rvhi) {
+ HTAlwaysAlert(NULL, gettext("Editor killed by signal"));
+ } else if (!(rv == -1 || (rvhi == 127 && errno))) {
+ HTUserMsg2(gettext("Editor returned with error status, %s"),
+ errno ? LYStrerror(errno) : gettext("reason unknown."));
+ } else
+#endif
+ HTAlwaysAlert(NULL, ERROR_SPAWNING_EDITOR);
+ }
+ } else {
+ start_curses();
+ }
+#ifdef UNIX
/*
- * Restore the fragment if there was one. - FM
+ * Delete backup file, if that's your style.
*/
- if (number_sign)
- *number_sign = '#';
-
+ HTSprintf0 (&command, "%s~", filename);
+ if (stat (command, &stat_info) == 0)
+ remove (command);
+#endif
FREE(command);
- FREE(filename);
- return (result);
}
diff --git a/gnu/usr.bin/lynx/src/LYEdit.h b/gnu/usr.bin/lynx/src/LYEdit.h
index 84fec84a281..7aa95815de1 100644
--- a/gnu/usr.bin/lynx/src/LYEdit.h
+++ b/gnu/usr.bin/lynx/src/LYEdit.h
@@ -5,8 +5,8 @@
#include <HTUtils.h>
#endif
-extern int edit_current_file PARAMS((char *newfile, int cur, int lineno));
-
extern BOOLEAN editor_can_position NOPARAMS;
+extern int edit_current_file PARAMS((char *newfile, int cur, int lineno));
+extern void edit_temporary_file PARAMS((char * filename, char * position, char * message));
#endif /* LYEDIT_H */
diff --git a/gnu/usr.bin/lynx/src/LYEditmap.c b/gnu/usr.bin/lynx/src/LYEditmap.c
index d7ebebb7363..6ddffe04c3d 100644
--- a/gnu/usr.bin/lynx/src/LYEditmap.c
+++ b/gnu/usr.bin/lynx/src/LYEditmap.c
@@ -3,15 +3,36 @@
*/
#include <HTUtils.h>
+#include <LYGlobalDefs.h>
#include <LYStrings.h>
-#include <LYKeymap.h> /* only for KEYMAP_SIZE - kw */
+#include <LYKeymap.h> /* KEYMAP_SIZE, LKC_*, LYK_* - kw */
+
+/* * * * * LynxEditactionCodes * * * * */
+#ifdef EXP_ALT_BINDINGS
+
+/* Last valid index for the (lynxkeycode+modifier -> lynxeditactioncode)
+ * tables. Currently all three tables are the same. - kw
+ */
+#define LAST_MOD1_LKC 0x111
+#define LAST_MOD2_LKC 0x111
+#define LAST_MOD3_LKC 0x111
+
+/* Get (lynxkeycode+modifier -> lynxeditactioncode) mapping, intermediate.
+ */
+#define LKC_TO_LEC_M1(c) ((c)>LAST_MOD1_LKC? LYE_UNMOD: Mod1Binding[c])
+#define LKC_TO_LEC_M2(c) ((c)>LAST_MOD2_LKC? LYE_UNMOD: Mod2Binding[c])
+#define LKC_TO_LEC_M3(c) ((c)>LAST_MOD3_LKC? LYE_UNMOD: Mod3Binding[c])
+
+#endif /* EXP_ALT_BINDINGS */
PUBLIC int current_lineedit = 0; /* Index into LYLineEditors[] */
+PUBLIC int escape_bound = 0; /* User wanted Escape to perform actions? */
+
/*
* See LYStrings.h for the LYE definitions.
*/
-PRIVATE char DefaultEditBinding[KEYMAP_SIZE-1]={
+PRIVATE LYEditCode DefaultEditBinding[KEYMAP_SIZE-1]={
LYE_NOP, LYE_BOL, LYE_DELPW, LYE_ABORT,
/* nul ^A ^B ^C */
@@ -28,10 +49,14 @@ LYE_NOP, LYE_ENTER, LYE_FORWW, LYE_ABORT,
LYE_BACKW, LYE_NOP, LYE_DELN, LYE_NOP,
/* ^P XON ^R XOFF */
+#ifdef CAN_CUT_AND_PASTE
+LYE_UPPER, LYE_ERASE, LYE_LKCMD, LYE_PASTE,
+#else
LYE_UPPER, LYE_ERASE, LYE_LKCMD, LYE_NOP,
+#endif
/* ^T ^U ^V ^W */
-LYE_ERASE, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_SETM1, LYE_NOP, LYE_NOP, LYE_NOP,
/* ^X ^Y ^Z ESC */
LYE_NOP, LYE_NOP, LYE_SWMAP, LYE_DELEL,
@@ -69,8 +94,12 @@ LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+#ifdef CJK_EX /* 1997/11/03 (Mon) 20:30:54 */
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+#else
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_AIX,
/* 97 AIX */
+#endif
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
@@ -109,12 +138,12 @@ LYE_FORM_PASS, LYE_FORM_PASS, LYE_BOL, LYE_EOL,
#if (defined(_WINDOWS) || defined(__DJGPP__))
-LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_FORM_PASS, LYE_NOP, LYE_NOP, LYE_NOP,
/* F1 */
#else
-LYE_NOP, LYE_TAB, LYE_BOL, LYE_EOL,
+LYE_FORM_PASS, LYE_TAB, LYE_BOL, LYE_EOL,
/* F1 Do key Find key Select key */
#endif /* _WINDOWS || __DJGPP__ */
@@ -249,7 +278,7 @@ LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
/* Why the difference for tab? - kw */
#ifdef EXP_ALT_BINDINGS
-PRIVATE char BetterEditBinding[KEYMAP_SIZE-1]={
+PRIVATE LYEditCode BetterEditBinding[KEYMAP_SIZE-1]={
LYE_NOP, LYE_BOL, LYE_BACK, LYE_ABORT,
/* nul ^A ^B ^C */
@@ -266,10 +295,14 @@ LYE_NOP, LYE_ENTER, LYE_FORWW, LYE_ABORT,
LYE_BACKW, LYE_NOP, LYE_DELPW, LYE_NOP,
/* ^P XON ^R XOFF */
+#ifdef CAN_CUT_AND_PASTE
+LYE_DELNW, LYE_ERASE, LYE_LKCMD, LYE_PASTE,
+#else
LYE_DELNW, LYE_ERASE, LYE_LKCMD, LYE_NOP,
+#endif
/* ^T ^U ^V ^W */
-LYE_DELBL, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_SETM1, LYE_NOP, LYE_NOP, LYE_NOP,
/* ^X ^Y ^Z ESC */
LYE_NOP, LYE_NOP, LYE_UPPER, LYE_LOWER,
@@ -307,8 +340,12 @@ LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+#ifdef CJK_EX /* 1997/11/03 (Mon) 20:30:54 */
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+#else
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_AIX,
/* 97 AIX */
+#endif
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
@@ -338,7 +375,7 @@ LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
-/* 100..10E function key definitions in LYStrings.h */
+/* 100..10F function key definitions in LYStrings.h */
LYE_FORM_PASS, LYE_FORM_PASS, LYE_FORW, LYE_BACK,
/* UPARROW DNARROW RTARROW LTARROW */
@@ -347,12 +384,12 @@ LYE_FORM_PASS, LYE_FORM_PASS, LYE_BOL, LYE_EOL,
#if (defined(_WINDOWS) || defined(__DJGPP__))
-LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_FORM_PASS, LYE_NOP, LYE_NOP, LYE_NOP,
/* F1 */
#else
-LYE_NOP, LYE_TAB, LYE_BOL, LYE_EOL,
+LYE_FORM_PASS, LYE_TAB, LYE_BOL, LYE_EOL,
/* F1 Do key Find key Select key */
#endif /* _WINDOWS || __DJGPP__ */
@@ -475,38 +512,787 @@ LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
/* 290..293 */
LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
};
-#endif
+
+/* kw */ /* Default except: ^B=cursor-backward[+],^F=cursor-forward[+], */
+ /* ^K=delete-to-EOL[+][++],^X=Modifier Prefix, */
+ /* ^[ (ESC)=Modifier Prefix, */
+ /* ^R=BACKW, ^S=FORWW, */
+ /* ^T=transpose-chars, */
+ /* ^U=delete-to-BOL, ^W=delete-prev-word, */
+ /* ^@ (NUL)=SETMARK, ^Y=YANK, */
+ /* ^_=ABORT (undo), */
+ /* ^P=FORM_PASS, ^N=FORM_PASS, */
+ /* ^O=FORM_PASS, ^L=FORM_PASS, */
+ /* ^\=FORM_PASS, ^]=FORM_PASS, */
+ /* ^Z=FORM_PASS, F1=FORM_PASS, */
+ /* ^E=EOL[++], Remove=DELN */
+ /* [+]: same as BetterEditBinding */
+ /* [++]: additionally set double-key modifier */
+
+/* Default where BetterEditBinding deviates: ^^=SWMAP, */
+ /* tab=LYE_TAB */
+
+/* Some functions for which the modifier binding is preferred: */
+ /* M-bs,M-del=delete-prev-word, M-d=delete-next-word, */
+ /* M-b=BACKW, M-f=FORWW, */
+
+PRIVATE LYEditCode BashlikeEditBinding[KEYMAP_SIZE-1]={
+
+LYE_SETMARK, LYE_BOL, LYE_BACK, LYE_ABORT,
+/* nul ^A ^B ^C */
+
+LYE_DELN, LYE_EOL|LYE_DF, LYE_FORW, LYE_ABORT,
+/* ^D ^E ^F ^G */
+
+LYE_DELP, LYE_TAB, LYE_ENTER, LYE_DELEL|LYE_DF,
+/* bs tab nl ^K */
+
+LYE_FORM_PASS, LYE_ENTER, LYE_FORM_PASS, LYE_FORM_PASS,
+/* ^L cr ^N ^O */
+
+LYE_FORM_PASS, LYE_NOP, LYE_BACKW, LYE_FORWW,
+/* ^P XON ^R ^S/XOFF */
+
+LYE_TPOS, LYE_DELBL, LYE_LKCMD, LYE_DELPW,
+/* ^T ^U ^V ^W */
+
+LYE_SETM1, LYE_YANK, LYE_FORM_PASS, LYE_SETM2,
+/* ^X ^Y ^Z ESC */
+
+LYE_FORM_PASS, LYE_FORM_PASS, LYE_SWMAP, LYE_ABORT,
+/* ^\ ^] ^^ ^_ */
+
+/* sp .. RUBOUT */
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_DELP,
+
+/* 80..9F ISO-8859-1 8-bit escape characters. */
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_AIX,
+/* 97 AIX */
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+
+/* A0..FF (permissible ISO-8859-1) 8-bit characters. */
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+LYE_CHAR, LYE_CHAR, LYE_CHAR, LYE_CHAR,
+
+/* 100..10F function key definitions in LYStrings.h */
+LYE_FORM_PASS, LYE_FORM_PASS, LYE_FORW, LYE_BACK,
+/* UPARROW DNARROW RTARROW LTARROW */
+
+LYE_FORM_PASS, LYE_FORM_PASS, LYE_BOL, LYE_EOL,
+/* PGDOWN PGUP HOME END */
+
+#if (defined(_WINDOWS) || defined(__DJGPP__))
+
+LYE_FORM_PASS, LYE_NOP, LYE_NOP, LYE_NOP,
+/* F1 */
+
+#else
+
+LYE_FORM_PASS, LYE_TAB, LYE_BOL, LYE_EOL,
+/* F1 Do key Find key Select key */
+
+#endif /* _WINDOWS || __DJGPP__ */
+
+LYE_NOP, LYE_DELN, LYE_NOP, LYE_FORM_PASS,
+/* Insert key Remove key DO_NOTHING Back tab */
+
+/* 110..18F */
+#if (defined(_WINDOWS) || defined(__DJGPP__)) && defined(USE_SLANG) && !defined(DJGPP_KEYHANDLER)
+
+LYE_DELP, LYE_ENTER, LYE_NOP, LYE_NOP,
+/* Backspace Enter */
+
+#else
+
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+
+#endif /* USE_SLANG &&(_WINDOWS || __DJGPP) && !DJGPP_KEYHANDLER */
+
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+/* MOUSE_KEY */
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+/* 190..20F */
+
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+/* 210..28F */
+
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+/* 290..293 */
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+};
+
+/* Oh no, not another one of those tables...
+ *
+ * If modifier bit is set in a lynxkeycode, it is first looked up
+ * here. Note the type different from the previous tables (short
+ * vs. char), since we want to hold larger values. OTOH we can
+ * keep the size shorter, everything beyond the end is effectively
+ * LYE_UNMOD (ignore modifier) by virtue of the LKC_TO_LEC_M1
+ * macro.
+ *
+ * Currently this table isn't specific to the current_lineedit value,
+ * it is shared by all alternative "Bindings" to save space.
+ * However, if the modifier flag is set only by a LYE_SETMn
+ * lynxeditaction, this table can have effect only for those Bindings
+ * that map a lynxkeycode to LYE_SETMn. ( This doesn't apply if
+ * the modifier is already being set in LYgetch(). ) - kw
+ */
+PRIVATE short Mod1Binding[LAST_MOD1_LKC+1]={
+
+LYE_NOP, LYE_BOL, LYE_BACKW, LYE_UNMOD,
+/* nul ^A ^B ^C */
+
+LYE_FORM_LAC|LYK_NEXT_LINK,
+ LYE_FORM_LAC|LYK_EDIT_TEXTAREA,
+ LYE_FORWW, LYE_ABORT,
+/* ^D ^E ^F ^G */
+
+LYE_DELPW, LYE_UNMOD, LYE_ENTER, LYE_FORM_LAC|LYK_LPOS_NEXT_LINK,
+/* bs tab nl ^K */
+
+LYE_FORM_PASS, LYE_ENTER, LYE_FORWW, LYE_UNMOD,
+/* ^L cr ^N ^O */
+
+LYE_BACKW, LYE_NOP, LYE_BACKW, LYE_NOP,
+/* ^P XON ^R ^S/XOFF */
+
+LYE_NOP, LYE_FORM_PASS, LYE_NOP, LYE_KILLREG,
+/* ^T ^U ^V ^W */
+
+LYE_XPMARK, LYE_UNMOD, LYE_FORM_PASS, LYE_NOP,
+/* ^X ^Y ^Z ESC */
+
+LYE_FORM_PASS, LYE_FORM_PASS, LYE_UNMOD, LYE_NOP,
+/* ^\ ^] ^^ ^_ */
+
+/* sp .. ? */
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_FORM_PASS,
+
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_FORM_LAC|LYK_HOME,
+ LYE_UNMOD, LYE_FORM_LAC|LYK_END,
+ LYE_UNMOD,
+
+/* @, A .. Z, [, \, ], ^, _ */
+LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR,
+LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR,
+LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR,
+LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR,
+LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR,
+LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR,
+LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR,
+LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR, LYE_C1CHAR,
+
+/* `, a .. z, {, |, }, ~, RUBOUT */
+LYE_UNMOD, LYE_BOL, LYE_BACKW, LYE_UNMOD,
+LYE_DELNW, LYE_FORM_LAC|LYK_EDIT_TEXTAREA,
+ LYE_FORWW, LYE_FORM_LAC|LYK_GROW_TEXTAREA,
+LYE_CHAR, LYE_FORM_LAC|LYK_INSERT_FILE,
+ LYE_CHAR, LYE_ERASE,
+LYE_LOWER, LYE_CHAR, LYE_FORM_PASS, LYE_UNMOD,
+LYE_CHAR, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_UPPER, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_DELPW,
+
+/* 80..9F ISO-8859-1 8-bit escape characters. */
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+LYE_NOP, LYE_NOP, LYE_NOP, LYE_NOP,
+
+/* A0..FF (permissible ISO-8859-1) 8-bit characters. */
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+
+/* 100..10F function key definitions in LYStrings.h */
+LYE_UNMOD, LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+/* UPARROW DNARROW RTARROW LTARROW */
+
+LYE_UNMOD, LYE_UNMOD, LYE_FORM_PASS, LYE_FORM_PASS,
+/* PGDOWN PGUP HOME END */
+
+#if (defined(_WINDOWS) || defined(__DJGPP__))
+
+LYE_FORM_LAC|LYK_DWIMHELP,
+ LYE_UNMOD, LYE_UNMOD, LYE_UNMOD,
+/* F1 */
+
+#else
+
+LYE_FORM_LAC|LYK_DWIMHELP,
+ LYE_UNMOD, LYE_FORM_LAC|LYK_WHEREIS, LYE_FORM_LAC|LYK_NEXT,
+/* F1 Do key Find key Select key */
+
+#endif /* _WINDOWS || __DJGPP__ */
+
+LYE_UNMOD, LYE_NOP, LYE_UNMOD, LYE_UNMOD,
+/* Insert key Remove key DO_NOTHING Back tab */
+
+/* 110..111 */
+#if (defined(_WINDOWS) || defined(__DJGPP__)) && defined(USE_SLANG) && !defined(DJGPP_KEYHANDLER)
+
+LYE_DELPW, LYE_UNMOD,
+/* Backspace Enter */
+
+#else
+
+LYE_UNMOD, LYE_UNMOD,
+
+#endif /* USE_SLANG &&(_WINDOWS || __DJGPP) && !DJGPP_KEYHANDLER */
+};
+
+/* Two more tables here, but currently they are all the same.
+ In other words, we are cheating to save space, until there
+ is a need for different tables. - kw */
+PRIVATE short *Mod2Binding = Mod1Binding;
+PRIVATE short *Mod3Binding = Mod1Binding;
+
+#endif /* EXP_ALT_BINDINGS */
/*
* Add the array name to LYLineEditors
*/
-PUBLIC char * LYLineEditors[]={
+PUBLIC LYEditCode * LYLineEditors[]={
DefaultEditBinding, /* You can't please everyone, so you ... DW */
#ifdef EXP_ALT_BINDINGS
BetterEditBinding, /* No, you certainly can't ... /ked 10/27/98*/
+ BashlikeEditBinding, /* and one more... - kw 1999-02-15 */
#endif
};
/*
* Add the name that the user will see below.
- * The order of LYLineEditors and LyLineditNames MUST be the same
+ * The order of LYLineEditors and LYLineditNames MUST be the same.
*/
PUBLIC char * LYLineeditNames[]={
"Default Binding",
#ifdef EXP_ALT_BINDINGS
"Alternate Bindings",
+ "Bash-like Bindings",
#endif
(char *) 0
};
/*
+ * Add the URL (relative to helpfilepath) used for context-dependent
+ * help on form field editing.
+ *
+ * The order must correspond to that of LYLineditNames.
+ */
+PUBLIC CONST char * LYLineeditHelpURLs[]={
+ EDIT_HELP,
+#ifdef EXP_ALT_BINDINGS
+ ALT_EDIT_HELP,
+ BASHLIKE_EDIT_HELP,
+#endif
+ (char *) 0
+};
+
+PUBLIC int EditBinding ARGS1(
+ int, xlkc)
+{
+ int editaction, xleac = LYE_UNMOD;
+ int c = xlkc & LKC_MASK;
+
+ if (xlkc == -1)
+ return LYE_NOP; /* maybe LYE_ABORT? or LYE_FORM_LAC|LYK_UNKNOWN? */
+#ifdef NOT_ASCII
+ if (c < 256) {
+ c = TOASCII(c);
+ }
+#endif
+#ifdef EXP_ALT_BINDINGS
+ /*
+ * Get intermediate code from one of the lynxkeycode+modifier
+ * tables if applicable, otherwise get the lynxeditactioncode
+ * directly.
+ * If we have more than one modifier bits, the first currently
+ * wins. - kw
+ */
+ if (xlkc & LKC_ISLECLAC) {
+ return LKC2_TO_LEC(xlkc);
+ } else if (xlkc & LKC_MOD1) {
+ xleac = LKC_TO_LEC_M1(c);
+ } else if (xlkc & LKC_MOD2) {
+ xleac = LKC_TO_LEC_M2(c);
+ } else if (xlkc & LKC_MOD3) {
+ xleac = LKC_TO_LEC_M3(c);
+ } else {
+ xleac = UCH(LYLineEditors[current_lineedit][c]);
+ }
+#endif
+ /*
+ * If we have an intermediate code that says "same as without
+ * modifier", look that up now; otherwise we are already done. - kw
+ */
+ if (xleac == LYE_UNMOD) {
+ editaction = LYLineEditors[current_lineedit][c];
+ } else {
+ editaction = xleac;
+ }
+ return editaction;
+}
+
+/*
+ * Install lec as the lynxeditaction for lynxkeycode xlkc.
+ * func must be present in the revmap table.
+ * For normal (non-modifier) lynxkeycodes, select_edi selects which
+ * of the alternative line-editor binding tables is modified. If
+ * select_edi is positive, only the table given by it is modified
+ * (the DefaultEditBinding table is numbered 1). If select_edi is 0,
+ * all tables are modified. If select_edi is negative, all tables
+ * except the one given by abs(select_edi) are modified.
+ * returns TRUE if the mapping was made, FALSE if not.
+ * Note that this remapping cannot be undone (as might be desirable
+ * as a result of re-parsing lynx.cfg), we don't remember the
+ * original editaction from the Bindings tables anywhere. - kw
+ */
+PUBLIC BOOL LYRemapEditBinding ARGS3(
+ int, xlkc,
+ int, lec,
+ int, select_edi)
+{
+ int j;
+ int c = xlkc & LKC_MASK;
+ BOOLEAN success = FALSE;
+ if (xlkc < 0 || (xlkc&LKC_ISLAC) || c >= KEYMAP_SIZE + 1)
+ return FALSE;
+#ifdef EXP_ALT_BINDINGS
+ if (xlkc & LKC_MOD1) {
+ if (c > LAST_MOD1_LKC)
+ return FALSE;
+ else
+ Mod1Binding[c] = (short) lec;
+ return TRUE;
+ } else if (xlkc & LKC_MOD2) {
+ if (c > LAST_MOD2_LKC)
+ return FALSE;
+ else
+ Mod2Binding[c] = (short) lec;
+ return TRUE;
+ } else if (xlkc & LKC_MOD3) {
+ if (c > LAST_MOD3_LKC)
+ return FALSE;
+ else
+ Mod3Binding[c] = (short) lec;
+ return TRUE;
+ } else
+#endif /* EXP_ALT_BINDINGS */
+ {
+#ifndef UCHAR_MAX
+#define UCHAR_MAX 255
+#endif
+ if ((unsigned int)lec > UCHAR_MAX)
+ return FALSE; /* cannot do, doesn't fit in a char - kw */
+ if (select_edi > 0) {
+ if ((unsigned int)select_edi < TABLESIZE(LYLineEditors)) {
+ LYLineEditors[select_edi - 1][c] = (LYEditCode) lec;
+ success = TRUE;
+ }
+ } else {
+ for (j = 0; LYLineeditNames[j]; j++) {
+ success = TRUE;
+ if (select_edi < 0 && j + 1 + select_edi == 0)
+ continue;
+ LYLineEditors[j][c] = (LYEditCode) lec;
+ }
+ }
+ }
+ return success;
+}
+
+/*
+ * Macro to walk through lkc-indexed tables up to imax, in the (ASCII) order
+ * 97 - 122 ('a' - 'z'),
+ * 32 - 96 (' ' - '`', includes 'A' - 'Z'),
+ * 123 - 126 ('{' - '~'),
+ * 0 - 31 (^@ - ^_),
+ * 256 - imax,
+ * 127 - 255
+ */
+#define NEXT_I(i,imax) ((i==122) ? 32 : (i==96) ? 123 : (i==126) ? 0 :\
+ (i==31) ? 256 : (i==imax) ? 127 :\
+ (i==255) ? (-1) :i+1)
+#define FIRST_I 97
+
+PUBLIC int LYKeyForEditAction ARGS1(
+ int, lec)
+{
+ int editaction, i;
+ for (i = FIRST_I; i >= 0; i = NEXT_I(i,KEYMAP_SIZE-2)) {
+ editaction = LYLineEditors[current_lineedit][i];
+ if (editaction == lec) {
+#ifdef NOT_ASCII
+ if (i < 256) {
+ return FROMASCII(i);
+ } else
+#endif
+ return i;
+ }
+ }
+ return (-1);
+}
+
+/*
+ * Given a lynxactioncode, return a key (lynxkeycode) or sequence
+ * of two keys that results in the given action while forms-editing.
+ * The main keycode is returned as function value, possibly with modifier
+ * bits set; in addition, if applicable, a key that sets the required
+ * modifier flag is returned in *pmodkey if (pmodkey!=NULL).
+ * Non-lineediting bindings that would require typing LYE_LKCMD (default ^V)
+ * to activate are not checked here, the caller should do that separately if
+ * required. If no key is bound by current line-editor bindings to the
+ * action, -1 is returned.
+ * This is all a bit long - it is general enough to continue to work
+ * should the three Mod<N>Binding[] become different tables. - kw
+ */
+PUBLIC int LYEditKeyForAction ARGS2(
+ int, lac,
+ int *, pmodkey)
+{
+ int editaction, i, c;
+ int mod1found = -1, mod2found = -1, mod3found = -1;
+
+ if (pmodkey)
+ *pmodkey = -1;
+ for (i = FIRST_I; i >= 0; i = NEXT_I(i,KEYMAP_SIZE-2)) {
+ editaction = LYLineEditors[current_lineedit][i];
+#ifdef NOT_ASCII
+ if (i < 256) {
+ c = FROMASCII(i);
+ } else
+#endif
+ c = i;
+ if (editaction == (lac | LYE_FORM_LAC))
+ return c;
+ if (editaction == LYE_FORM_PASS) {
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ if (lynx_edit_mode && !no_dired_support && lac &&
+ LKC_TO_LAC(key_override,c) == lac)
+ return c;
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+ if (LKC_TO_LAC(keymap,c) == lac)
+ return c;
+ }
+ if (editaction == LYE_TAB) {
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ if (lynx_edit_mode && !no_dired_support && lac &&
+ LKC_TO_LAC(key_override,'\t') == lac)
+ return c;
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+ if (LKC_TO_LAC(keymap,'\t') == lac)
+ return c;
+ }
+ if (editaction == LYE_SETM1 && mod1found < 0)
+ mod1found = i;
+ if (editaction == LYE_SETM2 && mod2found < 0)
+ mod2found = i;
+ if ((editaction & LYE_DF) && mod3found < 0)
+ mod3found = i;
+ }
+#ifdef EXP_ALT_BINDINGS
+ if (mod3found >= 0) {
+ for (i = mod3found; i >= 0; i = NEXT_I(i,LAST_MOD3_LKC)) {
+ editaction = LYLineEditors[current_lineedit][i];
+ if (!(editaction & LYE_DF))
+ continue;
+ editaction = Mod3Binding[i];
+#ifdef NOT_ASCII
+ if (i < 256) {
+ c = FROMASCII(i);
+ } else
+#endif
+ c = i;
+ if (pmodkey)
+ *pmodkey = c;
+ if (editaction == (lac | LYE_FORM_LAC))
+ return (c|LKC_MOD3);
+ if (editaction == LYE_FORM_PASS) {
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ if (lynx_edit_mode && !no_dired_support && lac &&
+ LKC_TO_LAC(key_override,c) == lac)
+ return (c|LKC_MOD3);
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+ if (LKC_TO_LAC(keymap,c) == lac)
+ return (c|LKC_MOD3);
+ }
+ if (editaction == LYE_TAB) {
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ if (lynx_edit_mode && !no_dired_support && lac &&
+ LKC_TO_LAC(key_override,'\t') == lac)
+ return (c|LKC_MOD3);
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+ if (LKC_TO_LAC(keymap,'\t') == lac)
+ return (c|LKC_MOD3);
+ }
+ }
+ }
+ if (mod1found >= 0) {
+ if (pmodkey) {
+#ifdef NOT_ASCII
+ if (mod1found < 256) {
+ *pmodkey = FROMASCII(mod1found);
+ } else
+#endif
+ *pmodkey = mod1found;
+ }
+ for (i = FIRST_I; i >= 0; i = NEXT_I(i,LAST_MOD1_LKC)) {
+ editaction = Mod1Binding[i];
+#ifdef NOT_ASCII
+ if (i < 256) {
+ c = FROMASCII(i);
+ } else
+#endif
+ c = i;
+ if (editaction == (lac | LYE_FORM_LAC))
+ return (c|LKC_MOD1);
+ if (editaction == LYE_FORM_PASS) {
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ if (lynx_edit_mode && !no_dired_support && lac &&
+ LKC_TO_LAC(key_override,c) == lac)
+ return (c|LKC_MOD1);
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+ if (LKC_TO_LAC(keymap,c) == lac)
+ return (c|LKC_MOD1);
+ }
+ if (editaction == LYE_TAB) {
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ if (lynx_edit_mode && !no_dired_support && lac &&
+ LKC_TO_LAC(key_override,'\t') == lac)
+ return (c|LKC_MOD1);
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+ if (LKC_TO_LAC(keymap,'\t') == lac)
+ return (c|LKC_MOD1);
+ }
+ }
+ }
+ if (mod2found >= 0) {
+ if (pmodkey) {
+#ifdef NOT_ASCII
+ if (mod1found < 256) {
+ *pmodkey = FROMASCII(mod1found);
+ } else
+#endif
+ *pmodkey = mod1found;
+ }
+ for (i = FIRST_I; i >= 0; i = NEXT_I(i,LAST_MOD2_LKC)) {
+ editaction = Mod2Binding[i];
+#ifdef NOT_ASCII
+ if (i < 256) {
+ c = FROMASCII(i);
+ } else
+#endif
+ c = i;
+ if (editaction == (lac | LYE_FORM_LAC))
+ return (c|LKC_MOD2);
+ if (editaction == LYE_FORM_PASS) {
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ if (lynx_edit_mode && !no_dired_support && lac &&
+ LKC_TO_LAC(key_override,c) == lac)
+ return (c|LKC_MOD2);
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+ if (LKC_TO_LAC(keymap,c) == lac)
+ return (c|LKC_MOD2);
+ }
+ if (editaction == LYE_TAB) {
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ if (lynx_edit_mode && !no_dired_support && lac &&
+ LKC_TO_LAC(key_override,'\t') == lac)
+ return (c|LKC_MOD2);
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+ if (LKC_TO_LAC(keymap,'\t') == lac)
+ return (c|LKC_MOD2);
+ }
+ }
+ }
+#endif /* EXP_ALT_BINDINGS */
+ if (pmodkey)
+ *pmodkey = -1;
+ return (-1);
+}
+
+/*
* Dummy initializer 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 LYEditmapDeclared NOPARAMS
+PUBLIC int LYEditmapDeclared NOARGS
{
int status = 1;
diff --git a/gnu/usr.bin/lynx/src/LYExtern.c b/gnu/usr.bin/lynx/src/LYExtern.c
index 5fb378407c3..47476faf910 100644
--- a/gnu/usr.bin/lynx/src/LYExtern.c
+++ b/gnu/usr.bin/lynx/src/LYExtern.c
@@ -24,36 +24,362 @@
#include <LYExtern.h>
#include <LYLeaks.h>
#include <LYCurses.h>
+#include <LYReadCFG.h>
+#include <LYStrings.h>
-void run_external ARGS1(char *, cmd)
+#ifdef WIN_EX
+/* ASCII char -> HEX digit */
+#define ASC2HEXD(x) (((x) >= '0' && (x) <= '9') ? \
+ ((x) - '0') : (toupper(x) - 'A' + 10))
+
+
+/* Decodes the forms %xy in a URL to the character the hexadecimal
+ code of which is xy. xy are hexadecimal digits from
+ [0123456789ABCDEF] (case-insensitive). If x or y are not hex-digits
+ or '%' is near '\0', the whole sequence is inserted literally. */
+
+
+static char *decode_string(char *s)
+{
+ char *save_s;
+ char *p = s;
+
+ save_s = s;
+ for (; *s; s++, p++) {
+ if (*s != '%')
+ *p = *s;
+ else {
+ /* Do nothing if at the end of the string. Or if the chars
+ are not hex-digits. */
+ if (!*(s + 1) || !*(s + 2)
+ || !(isxdigit(*(s + 1)) && isxdigit(*(s + 2)))) {
+ *p = *s;
+ continue;
+ }
+ *p = (char)((ASC2HEXD(*(s + 1)) << 4) + ASC2HEXD(*(s + 2)));
+ s += 2;
+ }
+ }
+ *p = '\0';
+ return save_s;
+}
+#endif /* WIN_EX */
+
+#ifdef WIN_EX
+/*
+ * Quote the path to make it safe for shell command processing.
+ *
+ * We use a simple technique which involves quoting the entire
+ * string using single quotes, escaping the real single quotes
+ * with double quotes. This may be gross but it seems to work.
+ */
+PUBLIC char * quote_pathname ARGS1(
+ char *, pathname)
+{
+ char * result = NULL;
+
+ if (strchr(pathname, ' ') != NULL) {
+ HTSprintf0(&result, "\"%s\"", pathname);
+ } else {
+ StrAllocCopy(result, pathname);
+ }
+ return result;
+}
+#endif /* WIN_EX */
+
+
+PRIVATE void format ARGS3(
+ char **, result,
+ char *, fmt,
+ char *, parm)
+{
+ *result = NULL;
+ HTAddParam(result, fmt, 1, parm);
+ HTEndParam(result, fmt, 1);
+}
+
+/*
+ * Format the given command into a buffer, returning the resulting string.
+ *
+ * It is too dangerous to leave any URL that may come along unquoted. They
+ * often contain '&', ';', and '?' chars, and who knows what else may occur.
+ * Prevent spoofing of the shell. Dunno how this needs to be modified for VMS
+ * or DOS. - kw
+ */
+PRIVATE char *format_command ARGS2(
+ char *, command,
+ char *, param)
+{
+#ifdef WIN_EX
+ char pram_string[LY_MAXPATH];
+#endif
+ char *cmdbuf = NULL;
+
+#if (defined(VMS) || defined(DOSPATH) || defined(__EMX__)) && !defined(WIN_EX)
+ format(&cmdbuf, command, param);
+#else /* Unix or DOS/Win: */
+#if defined(WIN_EX)
+ if (*param != '\"' && strchr(param, ' ') != NULL) {
+ char *cp = quote_pathname(param);
+ format(&cmdbuf, command, cp);
+ FREE(cp);
+ } else {
+ LYstrncpy(pram_string, param, sizeof(pram_string)-1);
+ decode_string(pram_string);
+ param = pram_string;
+
+ if (strnicmp("mailto:", param, 7) == 0) {
+ format(&cmdbuf, command, param + 7);
+ } else if (strnicmp("telnet://", param, 9) == 0) {
+ char host[sizeof(pram_string)];
+ int last_pos;
+
+ strcpy(host, param + 9);
+ last_pos = strlen(host) - 1;
+ if (last_pos > 1 && host[last_pos] == '/')
+ host[last_pos] = '\0';
+
+ format(&cmdbuf, command, host);
+ } else if (strnicmp("file://localhost/", param, 17) == 0) {
+ char e_buff[LY_MAXPATH], *p;
+
+ p = param + 17;
+ *e_buff = 0;
+ if (strchr(p, ':') == NULL) {
+ sprintf(e_buff, "%.3s/", windows_drive);
+ }
+ strncat(e_buff, p, sizeof(e_buff) - strlen(e_buff) - 1);
+ p = strrchr(e_buff, '.');
+ if (p) {
+ p = strchr(p, '#');
+ if (p) {
+ *p = '\0';
+ }
+ }
+ if (*e_buff != '\"' && strchr(e_buff, ' ') != NULL) {
+ p = quote_pathname(e_buff);
+ LYstrncpy(e_buff, p, sizeof(e_buff)-1);
+ FREE(p);
+ }
+
+ /* Less ==> short filename,
+ * less ==> long filename
+ */
+ if (isupper(command[0])) {
+ format(&cmdbuf,
+ command, HTDOS_short_name(e_buff));
+ } else {
+ format(&cmdbuf, command, e_buff);
+ }
+ } else {
+ format(&cmdbuf, command, param);
+ }
+ }
+#else /* Unix */
+ {
+ format(&cmdbuf, command, param);
+ }
+#endif
+#endif /* VMS */
+ return cmdbuf;
+}
+
+/*
+ * Find the EXTERNAL command which matches the given name 'param'. If there is
+ * more than one possibility, make a popup menu of the matching commands and
+ * allow the user to select one. Return the selected command.
+ */
+PRIVATE char *lookup_external ARGS2(
+ char *, param,
+ BOOL, only_overriders)
{
- char *the_command = 0;
- lynx_html_item_type *ext = 0;
+ int pass, num_disabled, num_matched, num_choices, cur_choice;
+ int length = 0;
+ char *cmdbuf = NULL;
+ char **choices = 0;
+ lynx_list_item_type *ptr = 0;
- for (ext = externals; ext != NULL; ext = ext->next) {
+ for (pass = 0; pass < 2; pass++) {
+ num_disabled = 0;
+ num_matched = 0;
+ num_choices = 0;
+ for (ptr = externals; ptr != 0; ptr = ptr->next) {
- if (ext->command != 0
- && !strncasecomp(ext->name, cmd, strlen(ext->name))) {
+ if (match_item_by_name(ptr, param, only_overriders)) {
+ ++num_matched;
+ CTRACE((tfp, "EXTERNAL: '%s' <==> '%s'\n", ptr->name, param));
+ if (no_externals && !ptr->always_enabled && !only_overriders) {
+ ++num_disabled;
+ } else {
+ if (pass == 0) {
+ length++;
+ } else if (pass != 0) {
+ cmdbuf = format_command(ptr->command, param);
+ if (length > 1)
+ choices[num_choices] = cmdbuf;
+ }
+ num_choices++;
+ }
+ }
+ }
+ if (length > 1) {
+ if (pass == 0) {
+ choices = typecallocn(char *, length + 1);
+ } else {
+ choices[num_choices] = 0;
+ }
+ }
+ }
- if (no_externals && !ext->always_enabled) {
- HTUserMsg(EXTERNALS_DISABLED);
+ if (num_disabled != 0
+ && num_disabled == num_matched) {
+ HTUserMsg(EXTERNALS_DISABLED);
+ } else if (num_choices > 1) {
+ int old_y, old_x;
+#ifdef USE_SLANG
+ old_y = SLsmg_get_row();
+ old_x = SLsmg_get_column();
+#else
+ getyx(LYwin, old_y, old_x);
+#endif
+ cur_choice = LYhandlePopupList(
+ -1,
+ 0,
+ old_x,
+ (CONST char **)choices,
+ -1,
+ -1,
+ FALSE,
+ TRUE,
+ FALSE);
+#ifdef USE_SLANG
+ SLsmg_gotorc(old_y, old_x);
+#else
+ wmove(LYwin, old_y, old_x);
+#endif
+ CTRACE((tfp, "selected choice %d of %d\n", cur_choice, num_choices));
+ if (cur_choice < 0) {
+ HTInfoMsg(CANCELLED);
+ cmdbuf = 0;
+ }
+ for (pass = 0; choices[pass] != 0; pass++) {
+ if (pass == cur_choice) {
+ cmdbuf = choices[pass];
} else {
+ FREE(choices[pass]);
+ }
+ }
+ FREE(choices);
+ }
+ return cmdbuf;
+}
+
+BOOL run_external ARGS2(
+ char *, param,
+ BOOL, only_overriders)
+{
+#ifdef WIN_EX
+ int status;
+ extern int xsystem(char *cmd);
+#endif
+ int redraw_flag = TRUE;
+ char *cmdbuf = NULL;
+ BOOL found = FALSE;
+ int confirmed = TRUE;
+
+ if (externals == NULL)
+ return 0;
+
+#ifdef WIN_EX /* 1998/01/26 (Mon) 09:16:13 */
+ if (param == NULL) {
+ HTInfoMsg("External command is null");
+ return 0;
+ }
+#endif
- HTAddParam(&the_command, ext->command, 1, cmd);
- HTEndParam(&the_command, ext->command, 1);
+ cmdbuf = lookup_external(param, only_overriders);
+ if (cmdbuf != 0 && *cmdbuf != '\0') {
+#ifdef WIN_EX /* 1997/10/17 (Fri) 14:07:50 */
+ int len;
+ char buff[LY_MAXPATH];
- HTUserMsg(the_command);
+ CTRACE((tfp, "Lynx EXTERNAL: '%s'\n", cmdbuf));
+#ifdef WIN_GUI /* 1997/11/06 (Thu) 14:17:15 */
+ confirmed = MessageBox(GetForegroundWindow(), cmdbuf,
+ "Lynx (EXTERNAL COMMAND EXEC)",
+ MB_ICONQUESTION | MB_SETFOREGROUND | MB_OKCANCEL)
+ != IDCANCEL;
+#else
+ confirmed = HTConfirm(LYElideString(cmdbuf, 40)) != NO;
+#endif
+ if (confirmed) {
+ len = strlen(cmdbuf);
+ if (len > 255) {
+ sprintf(buff, "Lynx: command line too long (%d > 255)", len);
+#ifdef WIN_GUI /* 1997/11/06 (Thu) 14:17:02 */
+ MessageBox(GetForegroundWindow(), buff,
+ "Lynx (EXTERNAL COMMAND EXEC)",
+ MB_ICONEXCLAMATION | MB_SETFOREGROUND | MB_OK);
+ SetConsoleTitle("Lynx for Win32");
+#else
+ HTConfirm(LYElideString(buff, 40));
+#endif
+ confirmed = FALSE;
+ } else {
+ SetConsoleTitle(cmdbuf);
+ }
+ }
+ if (strnicmp(cmdbuf, "start ", 6) == 0)
+ redraw_flag = FALSE;
+ else
+ redraw_flag = TRUE;
+#else
+ HTUserMsg(cmdbuf);
+#endif
+ found = TRUE;
+ if (confirmed) {
+ if (redraw_flag) {
stop_curses();
- LYSystem(the_command);
- FREE(the_command);
- start_curses();
+ fflush(stdout);
}
- break;
+ /* command running. */
+#ifdef WIN_EX /* 1997/10/17 (Fri) 14:07:50 */
+#ifdef __CYGWIN__
+ status = system(cmdbuf);
+#else
+ status = xsystem(cmdbuf);
+#endif
+ if (status != 0) {
+ sprintf(buff,
+ "EXEC code = %04x (%2d, %2d)\r\n"
+ "'%s'",
+ status, (status / 256), (status & 0xff),
+ cmdbuf);
+#ifdef SH_EX /* WIN_GUI for ERROR only */
+ MessageBox(GetForegroundWindow(), buff,
+ "Lynx (EXTERNAL COMMAND EXEC)",
+ MB_ICONSTOP | MB_SETFOREGROUND | MB_OK);
+#else
+ HTConfirm(LYElideString(buff, 40));
+#endif /* 1 */
+ }
+#else /* Not WIN_EX */
+ LYSystem(cmdbuf);
+#endif /* WIN_EX */
+
+#if defined(WIN_EX)
+ SetConsoleTitle("Lynx for Win32");
+#endif
+ if (redraw_flag) {
+ fflush(stdout);
+ start_curses();
+ }
}
}
- return;
+ FREE(cmdbuf);
+ return found;
}
-#endif /* USE_EXTERNALS */
+#endif /* USE_EXTERNALS */
diff --git a/gnu/usr.bin/lynx/src/LYExtern.h b/gnu/usr.bin/lynx/src/LYExtern.h
index 094f4ddc6bf..51bf855f059 100644
--- a/gnu/usr.bin/lynx/src/LYExtern.h
+++ b/gnu/usr.bin/lynx/src/LYExtern.h
@@ -5,6 +5,11 @@
#include <LYStructs.h>
#endif /* LYSTRUCTS_H */
-void run_external PARAMS((char * c));
+/*returns TRUE if something matching was executed*/
+BOOL run_external PARAMS((char * c, BOOL only_overriders));
+
+#ifdef WIN_EX
+extern char * quote_pathname PARAMS((char * pathname));
+#endif
#endif /* EXTERNALS_H */
diff --git a/gnu/usr.bin/lynx/src/LYForms.c b/gnu/usr.bin/lynx/src/LYForms.c
index 399f61df7e7..928b16633db 100644
--- a/gnu/usr.bin/lynx/src/LYForms.c
+++ b/gnu/usr.bin/lynx/src/LYForms.c
@@ -6,10 +6,9 @@
#include <GridText.h>
#include <LYCharSets.h>
#include <UCAux.h>
+#include <LYGlobalDefs.h>
#include <LYUtils.h>
-#include <LYStructs.h> /* includes HTForms.h */
#include <LYStrings.h>
-#include <LYGlobalDefs.h>
#include <LYKeymap.h>
#include <LYClean.h>
@@ -20,41 +19,73 @@
#include <LYHash.h>
#endif
-extern HTCJKlang HTCJK;
+#if defined(VMS) && !defined(USE_SLANG)
+#define CTRL_W_HACK DO_NOTHING
+#else
+#define CTRL_W_HACK 23 /* CTRL-W refresh without clearok */
+#endif /* VMS && !USE_SLANG */
PRIVATE int form_getstr PARAMS((
- struct link * form_link));
-PRIVATE int popup_options PARAMS((
- int cur_selection,
- OptionType * list,
- int ly,
- int lx,
- int width,
- int i_length,
- int disabled));
+ struct link * form_link,
+ BOOLEAN use_last_tfpos,
+ BOOLEAN redraw_only));
-PUBLIC int change_form_link ARGS5(
+/*
+ * Returns an array of pointers to the given list
+ */
+PRIVATE char ** options_list ARGS1(
+ OptionType *, opt_ptr)
+{
+ char **result = 0;
+ size_t len;
+ int pass;
+ OptionType *tmp_ptr;
+
+ for (pass = 0; pass < 2; pass++) {
+ for (tmp_ptr = opt_ptr, len = 0; tmp_ptr != 0; tmp_ptr = tmp_ptr->next) {
+ if (pass != 0)
+ result[len] = tmp_ptr->name;
+ len++;
+ }
+ if (pass == 0) {
+ len++;
+ result = typecallocn(char *, len);
+ } else {
+ result[len] = 0;
+ }
+ }
+
+ return result;
+}
+
+PUBLIC int change_form_link_ex ARGS8(
struct link *, form_link,
document *, newdoc,
BOOLEAN *, refresh_screen,
char *, link_name,
- char *, link_value)
+ char *, link_value,
+ BOOLEAN, use_last_tfpos,
+ BOOLEAN, immediate_submit,
+ BOOLEAN, redraw_only)
{
FormInfo *form = form_link->form;
+ int newdoc_changed = 0;
int c = DO_NOTHING;
int OrigNumValue;
+ char **my_data = 0;
- /*
- * If there is no form to perform action on, don't do anything.
- */
- if (form == NULL) {
- return(c);
- }
+ /*
+ * If there is no form to perform action on, don't do anything.
+ */
+ if (form == NULL) {
+ return(c);
+ }
+ my_data = options_list(form->select_list);
/*
* Move to the link position.
*/
- move(form_link->ly, form_link->lx);
+ LYmove(form_link->ly, form_link->lx);
switch(form->type) {
case F_CHECKBOX_TYPE:
@@ -70,7 +101,7 @@ PUBLIC int change_form_link ARGS5(
break;
case F_OPTION_LIST_TYPE:
- if (!form->select_list) {
+ if (form->select_list == 0) {
HTAlert(BAD_HTML_NO_POPUP);
c = DO_NOTHING;
break;
@@ -78,26 +109,33 @@ PUBLIC int change_form_link ARGS5(
if (form->disabled == YES) {
int dummy;
- dummy = popup_options(form->num_value, form->select_list,
- form_link->ly, form_link->lx, form->size,
- form->size_l, form->disabled);
-#if defined(FANCY_CURSES) || defined(USE_SLANG)
+ dummy = LYhandlePopupList(form->num_value,
+ form_link->ly,
+ form_link->lx,
+ (CONST char **)my_data,
+ form->size,
+ form->size_l,
+ form->disabled,
+ FALSE,
+ FALSE);
+#if CTRL_W_HACK != DO_NOTHING
if (!enable_scrollback)
-#if defined(VMS) && !defined(USE_SLANG)
- c = DO_NOTHING;
-#else
- c = 23; /* CTRL-W refresh without clearok */
-#endif /* VMS && !USE_SLANG */
+ c = CTRL_W_HACK; /* CTRL-W refresh without clearok */
else
-#endif /* FANCY_CURSES || USE_SLANG */
+#endif
c = 12; /* CTRL-L for repaint */
break;
}
OrigNumValue = form->num_value;
- form->num_value = popup_options(form->num_value, form->select_list,
- form_link->ly, form_link->lx, form->size,
- form->size_l, form->disabled);
-
+ form->num_value = LYhandlePopupList(form->num_value,
+ form_link->ly,
+ form_link->lx,
+ (CONST char **)my_data,
+ form->size,
+ form->size_l,
+ form->disabled,
+ FALSE,
+ FALSE);
{
OptionType * opt_ptr = form->select_list;
int i;
@@ -116,18 +154,13 @@ PUBLIC int change_form_link ARGS5(
*/
form->value_cs = opt_ptr->value_cs;
}
-#if defined(FANCY_CURSES) || defined(USE_SLANG)
+#if CTRL_W_HACK != DO_NOTHING
if (!enable_scrollback)
-#if defined(VMS) && !defined(USE_SLANG)
- if (form->num_value == OrigNumValue)
- c = DO_NOTHING;
- else
-#endif /* VMS && !USE_SLANG*/
- c = 23; /* CTRL-W refresh without clearok */
+ c = CTRL_W_HACK; /* CTRL-W refresh without clearok */
else
-#endif /* FANCY_CURSES || USE_SLANG */
- c = 12; /* CTRL-L for repaint */
- break;
+#endif
+ c = 12; /* CTRL-L for repaint */
+ break;
case F_RADIO_TYPE:
if (form->disabled == YES)
@@ -154,8 +187,8 @@ PUBLIC int change_form_link ARGS5(
*/
!strcmp(links[i].form->name, form->name) &&
links[i].form->num_value) {
- move(links[i].ly, links[i].lx);
- addstr(unchecked_radio);
+ LYmove(links[i].ly, links[i].lx);
+ LYaddstr(unchecked_radio);
links[i].hightext = unchecked_radio;
}
}
@@ -171,10 +204,11 @@ PUBLIC int change_form_link ARGS5(
}
break;
+ case F_FILE_TYPE:
case F_TEXT_TYPE:
case F_TEXTAREA_TYPE:
case F_PASSWORD_TYPE:
- c = form_getstr(form_link);
+ c = form_getstr(form_link, use_last_tfpos, redraw_only);
if (form->type == F_PASSWORD_TYPE)
form_link->hightext = STARS(strlen(form->value));
else
@@ -189,14 +223,55 @@ PUBLIC int change_form_link ARGS5(
break;
case F_TEXT_SUBMIT_TYPE:
- c = form_getstr(form_link);
+ if (redraw_only) {
+ c = form_getstr(form_link, use_last_tfpos, TRUE);
+ break;
+ }
+ if (!immediate_submit)
+ c = form_getstr(form_link, use_last_tfpos, FALSE);
if (form->disabled == YES &&
- (c == '\r' || c == '\n')) {
- c = '\t';
+ (c == '\r' || c == '\n' || immediate_submit)) {
+ if (peek_mouse_link() >= 0)
+ c = LAC_TO_LKC0(LYK_ACTIVATE);
+ else
+ c = '\t';
break;
}
- if (c == '\r' || c == '\n') {
+ /*
+ * If immediate_submit is set, we didn't enter the line editor
+ * above, and will now try to call HText_SubmitForm() directly.
+ * If immediate_submit is not set, c is the lynxkeycode returned
+ * from line editing. Then if c indicates that a key was pressed
+ * that means we should submit, but with some extra considerations
+ * (i.e. NOCACHE, DOWNLOAD, different from simple Enter), or if
+ * we should act on some *other* link selected with the mouse,
+ * we'll just return c and leave it to mainloop() to do the
+ * right thing; if everything checks out, it should call this
+ * function again, with immediate_submit set.
+ * If c indicates that line editing ended with Enter, we still
+ * defer to mainloop() for further checking if the submit
+ * action URL could require more checks than we do here.
+ * Only in the remaining cases do we proceed to call
+ * HText_SubmitForm() directly before returning. - kw
+ */
+ if (immediate_submit ||
+ ((c == '\r' || c == '\n' || c == LAC_TO_LKC0(LYK_SUBMIT)) &&
+ peek_mouse_link() == -1)) {
form_link->hightext = form->value;
+#ifdef TEXT_SUBMIT_CONFIRM_WANTED
+ if (!immediate_submit && (c == '\r' || c == '\n') &&
+ !HTConfirmDefault(NO_SUBMIT_BUTTON_QUERY), YES) {
+ /* User was prompted and declined; if canceled with ^G
+ * let mainloop stay on this field, otherwise move on to
+ * the next field or link. - kw
+ */
+ if (HTLastConfirmCancelled())
+ c = DO_NOTHING;
+ else
+ c = LAC_TO_LKC(LYK_NEXT_LINK);
+ break;
+ }
+#endif
if (!form->submit_action || *form->submit_action == '\0') {
HTUserMsg(NO_FORM_ACTION);
c = DO_NOTHING;
@@ -205,13 +280,20 @@ PUBLIC int change_form_link ARGS5(
HTAlert(FORM_MAILTO_DISALLOWED);
c = DO_NOTHING;
break;
+ } else if (!immediate_submit &&
+ ((no_file_url &&
+ !strncasecomp(form->submit_action, "file:", 5)) ||
+ !strncasecomp(form->submit_action, "lynx", 4))) {
+ c = LAC_TO_LKC0(LYK_SUBMIT);
+ break;
} else {
if (form->no_cache &&
form->submit_method != URL_MAIL_METHOD) {
LYforce_no_cache = TRUE;
reloading = TRUE;
}
- HText_SubmitForm(form, newdoc, link_name, form->value);
+ newdoc_changed =
+ HText_SubmitForm(form, newdoc, link_name, form->value);
}
if (form->submit_method == URL_MAIL_METHOD) {
*refresh_screen = TRUE;
@@ -238,7 +320,8 @@ PUBLIC int change_form_link ARGS5(
LYforce_no_cache = TRUE;
reloading = TRUE;
}
- HText_SubmitForm(form, newdoc, link_name, link_value);
+ newdoc_changed =
+ HText_SubmitForm(form, newdoc, link_name, link_value);
if (form->submit_method == URL_MAIL_METHOD)
*refresh_screen = TRUE;
else {
@@ -250,11 +333,47 @@ PUBLIC int change_form_link ARGS5(
}
+ if (newdoc_changed) {
+ c = LKC_DONE;
+ } else {
+ /*
+ * These flags may have been set in mainloop, anticipating that
+ * a request will be submitted. But if we haven't filled in
+ * newdoc, that won't actually be the case, so unset them. - kw
+ */
+ LYforce_no_cache = FALSE;
+ reloading = FALSE;
+ }
+ FREE(my_data);
return(c);
}
-PRIVATE int form_getstr ARGS1(
- struct link *, form_link)
+PUBLIC int change_form_link ARGS7(
+ struct link *, form_link,
+ document *, newdoc,
+ BOOLEAN *, refresh_screen,
+ char *, link_name,
+ char *, link_value,
+ BOOLEAN, use_last_tfpos,
+ BOOLEAN, immediate_submit)
+{
+ /*pass all our args and FALSE as last arg*/
+ return change_form_link_ex(form_link,newdoc,refresh_screen,link_name,
+ link_value,use_last_tfpos,immediate_submit, FALSE /*redraw_only*/ );
+}
+
+PRIVATE int LastTFPos = -1; /* remember last text field position */
+
+PRIVATE void LYSetLastTFPos ARGS1(
+ int, pos)
+{
+ LastTFPos = pos;
+}
+
+PRIVATE int form_getstr ARGS3(
+ struct link *, form_link,
+ BOOLEAN, use_last_tfpos,
+ BOOLEAN, redraw_only)
{
FormInfo *form = form_link->form;
char *value = form->value;
@@ -263,7 +382,11 @@ PRIVATE int form_getstr ARGS1(
int max_length;
int startcol, startline;
BOOL HaveMaxlength = FALSE;
- int action, repeat, non_first = 0;
+ int action, repeat;
+ int last_xlkc = -1;
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ BOOL refresh_mb = TRUE;
+#endif
EditFieldData MyEdit;
BOOLEAN Edited = FALSE; /* Value might be updated? */
@@ -296,29 +419,8 @@ PRIVATE int form_getstr ARGS1(
* If we can edit it, report that we are using the tail. - FM
*/
HTUserMsg(FORM_VALUE_TOO_LONG);
- switch(form->type) {
- case F_PASSWORD_TYPE:
- statusline(FORM_LINK_PASSWORD_MESSAGE);
- break;
- case F_TEXT_SUBMIT_TYPE:
- if (form->submit_method == URL_MAIL_METHOD) {
- statusline(FORM_LINK_TEXT_SUBMIT_MAILTO_MSG);
- } else if (form->no_cache) {
- statusline(FORM_LINK_TEXT_RESUBMIT_MESSAGE);
- } else {
- statusline(FORM_LINK_TEXT_SUBMIT_MESSAGE);
- }
- break;
- case F_TEXT_TYPE:
- statusline(FORM_LINK_TEXT_MESSAGE);
- break;
- case F_TEXTAREA_TYPE:
- statusline(FORM_LINK_TEXTAREA_MESSAGE);
- break;
- default:
- break;
- }
- move(startline, startcol);
+ show_formlink_statusline(form, redraw_only? FOR_PANEL : FOR_INPUT);
+ LYmove(startline, startcol);
}
}
@@ -327,8 +429,43 @@ PRIVATE int form_getstr ARGS1(
*/
LYSetupEdit(&MyEdit, value, max_length, (far_col - startcol));
MyEdit.pad = '_';
- MyEdit.hidden = (form->type == F_PASSWORD_TYPE);
+ MyEdit.hidden = (BOOL) (form->type == F_PASSWORD_TYPE);
+ if (use_last_tfpos && LastTFPos >= 0 && LastTFPos < MyEdit.strlen) {
+#if defined(TEXTFIELDS_MAY_NEED_ACTIVATION) && defined(INACTIVE_INPUT_STYLE_VH)
+ if (redraw_only) {
+ if (!(MyEdit.strlen >= MyEdit.dspwdth &&
+ LastTFPos >= MyEdit.dspwdth - MyEdit.margin)) {
+ MyEdit.pos = LastTFPos;
+ if (MyEdit.strlen >= MyEdit.dspwdth)
+ textinput_redrawn = FALSE;
+ }
+ } else
+#endif /* TEXTFIELDS_MAY_NEED_ACTIVATION && INACTIVE_INPUT_STYLE_VH */
+ MyEdit.pos = LastTFPos;
+#ifdef ENHANCED_LINEEDIT
+ if (MyEdit.pos == 0)
+ MyEdit.mark = -1 - MyEdit.strlen; /* Do not show the region. */
+#endif
+ }
+ /* Try to prepare for setting position based on the last mouse event */
+#if defined(TEXTFIELDS_MAY_NEED_ACTIVATION) && defined(INACTIVE_INPUT_STYLE_VH)
+ if (!redraw_only) {
+ if (peek_mouse_levent()) {
+ if (!use_last_tfpos && !textinput_redrawn) {
+ MyEdit.pos = 0;
+ }
+ }
+ textinput_redrawn = FALSE;
+ }
+#else
+ if (peek_mouse_levent()) {
+ if (!use_last_tfpos)
+ MyEdit.pos = 0;
+ }
+#endif /* TEXTFIELDS_MAY_NEED_ACTIVATION && INACTIVE_INPUT_STYLE_VH */
LYRefreshEdit(&MyEdit);
+ if (redraw_only)
+ return 0; /*return value won't be analysed*/
/*
* And go for it!
@@ -336,20 +473,45 @@ PRIVATE int form_getstr ARGS1(
for (;;) {
again:
repeat = -1;
- get_mouse_link(); /* Reset mouse_link. */
- /* Try to set position basing on the last mouse event */
- if (!non_first++)
- peek_mouse_levent();
-
- ch = LYgetch_for(FOR_INPUT);
+ get_mouse_link(); /* Reset mouse_link. */
+
+ ch = LYgetch_input();
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ if (!refresh_mb
+ && (EditBinding(ch) != LYE_CHAR)
+#ifndef WIN_EX
+ && (EditBinding(ch) != LYE_AIX)
+#endif
+ )
+ goto again;
+#endif /* SUPPORT_MULTIBYTE_EDIT */
#ifdef VMS
if (HadVMSInterrupt) {
HadVMSInterrupt = FALSE;
- ch = 7;
+ ch = LYCharINTERRUPT2;
}
#endif /* VMS */
-# ifdef NCURSES_MOUSE_VERSION
+
+ action = 0;
+#ifdef USE_MOUSE
+# if defined(NCURSES) || defined(PDCURSES)
+ if (ch != -1 && (ch & LKC_ISLAC) && !(ch & LKC_ISLECLAC)) /* already lynxactioncode? */
+ break; /* @@@ maybe move these 2 lines outside ifdef -kw */
if (ch == MOUSE_KEY) { /* Need to process ourselves */
+#if defined(PDCURSES)
+ int curx, cury;
+
+ request_mouse_pos();
+ LYGetYX(cury, curx);
+ if (MOUSE_Y_POS == cury) {
+ repeat = MOUSE_X_POS - curx;
+ if (repeat < 0) {
+ action = LYE_BACK;
+ repeat = - repeat;
+ } else
+ action = LYE_FORW;
+ }
+#else
MEVENT event;
int curx, cury;
@@ -358,38 +520,149 @@ again:
if (event.y == cury) {
repeat = event.x - curx;
if (repeat < 0) {
- ch = LTARROW;
+ action = LYE_BACK;
repeat = - repeat;
} else
- ch = RTARROW;
+ action = LYE_FORW;
+ }
+#endif /* PDCURSES */
+ else {
+ /* Mouse event passed to us as MOUSE_KEY, and apparently
+ * not on this field's line? Something is not as it
+ * should be...
+ * A call to statusline() may have happened, possibly from
+ * within a mouse menu. Let's at least make sure here
+ * that the cursor position gets restored. - kw
+ */
+ MyEdit.dirty = TRUE;
+ }
+ last_xlkc = -1;
+ } else
+# endif /* NCURSES || PDCURSES */
+#endif /* USE_MOUSE */
+
+ {
+ if (!(ch & LKC_ISLECLAC))
+ ch |= MyEdit.current_modifiers;
+ MyEdit.current_modifiers = 0;
+ if (last_xlkc != -1) {
+ if (ch == last_xlkc)
+ ch |= LKC_MOD3;
+ last_xlkc = -1; /* consumed */
}
}
-# endif /* defined NCURSES_MOUSE_VERSION */
if (peek_mouse_link() != -1)
break;
+
+ if (!action)
+ action = EditBinding(ch);
+ if ((action & LYE_DF) && !(action & LYE_FORM_LAC)) {
+ last_xlkc = ch;
+ action &= ~LYE_DF;
+ } else {
+ last_xlkc = -1;
+ }
+
+ if (action == LYE_SETM1) {
+ /*
+ * Set flag for modifier 1.
+ */
+ MyEdit.current_modifiers |= LKC_MOD1;
+ continue;
+ }
+ if (action == LYE_SETM2) {
+ /*
+ * Set flag for modifier 2.
+ */
+ MyEdit.current_modifiers |= LKC_MOD2;
+ continue;
+ }
/*
* Filter out global navigation keys that should not be passed
* to line editor, and LYK_REFRESH.
*/
- action = EditBinding(ch);
if (action == LYE_ENTER)
break;
if (action == LYE_FORM_PASS)
break;
+ if (action & LYE_FORM_LAC) {
+ ch = (action & LAC_MASK) | LKC_ISLAC;
+ break;
+ }
if (action == LYE_LKCMD) {
_statusline(ENTER_LYNX_COMMAND);
ch = LYgetch();
#ifdef VMS
if (HadVMSInterrupt) {
HadVMSInterrupt = FALSE;
- ch = 7;
+ ch = LYCharINTERRUPT2;
}
#endif /* VMS */
break;
}
+
+#ifdef CAN_CUT_AND_PASTE /* 1998/10/01 (Thu) 19:19:22 */
+ if (action == LYE_PASTE) {
+ unsigned char *s = get_clip_grab(), *e;
+ char *buf = NULL;
+ int len;
+
+ if (!s)
+ break;
+ len = strlen(s);
+ e = s + len;
+
+ if (len > 0) {
+ unsigned char *e1 = s;
+
+ while (e1 < e) {
+ if (*e1 < ' ') { /* Stop here? */
+ if (e1 > s)
+ LYEditInsert(&MyEdit, s, e1 - s, -1, TRUE);
+ s = e1;
+ if (*e1 == '\t') { /* Replace by space */
+ LYEditInsert(&MyEdit, " ", 1, -1, TRUE);
+ s = ++e1;
+ } else
+ break;
+ } else
+ ++e1;
+ }
+ if (e1 > s)
+ LYEditInsert(&MyEdit, s, e1 - s, -1, TRUE);
+ while (e1 < e && *e1 == '\r')
+ e1++;
+ if (e1 + 1 < e && *e1 == '\n')
+ StrAllocCopy(buf, e1 + 1); /* Survive _release() */
+ get_clip_release();
+ if (MyEdit.strlen >= max_length) {
+ HaveMaxlength = TRUE;
+ } else if (HaveMaxlength &&
+ MyEdit.strlen < max_length) {
+ HaveMaxlength = FALSE;
+ _statusline(ENTER_TEXT_ARROWS_OR_TAB);
+ }
+ if (strcmp(value, MyEdit.buffer) != 0) {
+ Edited = TRUE;
+ }
+ if (buf) {
+ put_clip(buf);
+ FREE(buf);
+ ch = '\n'; /* Sometimes moves to the next line */
+ break;
+ }
+ LYRefreshEdit(&MyEdit);
+ } else {
+ HTInfoMsg("Clipboard empty or Not text data.");
+ continue;
+ }
+ }
+#endif
+#ifndef WIN_EX
if (action == LYE_AIX &&
(HTCJK == NOCJK && LYlowest_eightbit[current_char_set] > 0x97))
break;
+#endif
if (action == LYE_TAB) {
ch = (int)('\t');
break;
@@ -397,29 +670,37 @@ again:
if (action == LYE_ABORT) {
return(DO_NOTHING);
}
- if (keymap[ch + 1] == LYK_REFRESH)
+ if (action == LYE_STOP) {
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ textfields_need_activation = TRUE;
+ break;
+#else
+#ifdef ENHANCED_LINEEDIT
+ if (MyEdit.mark >= 0)
+ MyEdit.mark = -1 - MyEdit.strlen; /* Disable. */
+#endif
+#endif
+ }
+ if (action == LYE_NOP && LKC_TO_LAC(keymap,ch) == LYK_REFRESH)
break;
+#ifdef SH_EX
+/* ASATAKU emacskey hack 1997/08/26 (Tue) 09:19:23 */
+ if (emacs_keys &&
+ (EditBinding(ch) == LYE_FORWW || EditBinding(ch) == LYE_BACKW))
+ goto breakfor;
+/* ASATAKU emacskey hack */
+#endif
switch (ch) {
-#ifdef NOTDEFINED /* The first four are mapped to LYE_FORM_PASS now */
- case DNARROW:
- case UPARROW:
- case PGUP:
- case PGDOWN:
- case HOME:
- case END_KEY:
- case FIND_KEY:
- case SELECT_KEY:
- goto breakfor;
-#endif /* NOTDEFINED */
-
- /*
+ default:
+ /* [ 1999/04/14 (Wed) 15:01:33 ]
* Left arrrow in column 0 deserves special treatment here,
* else you can get trapped in a form without submit button!
*/
- case LTARROW:
- if (MyEdit.pos == 0 && repeat == -1) {
+ if (action == LYE_BACK && MyEdit.pos == 0 && repeat == -1) {
int c = YES; /* Go back immediately if no changes */
- if (strcmp(MyEdit.buffer, value)) {
+ if (textfield_prompt_at_left_edge) {
+ c = HTConfirmDefault(PREV_DOC_QUERY, NO);
+ } else if (strcmp(MyEdit.buffer, value)) {
c = HTConfirmDefault(PREV_DOC_QUERY, NO);
}
if (c == YES) {
@@ -431,18 +712,77 @@ again:
_statusline(ENTER_TEXT_ARROWS_OR_TAB);
}
}
- /* fall through */
-
- default:
- if (form->disabled == YES)
- goto again;
+ if (form->disabled == YES) {
+ /*
+ * Allow actions that don't modify the contents even
+ * in disabled form fields, so the user can scroll
+ * through the line for reading if necessary. - kw
+ */
+ switch(action) {
+ case LYE_BOL:
+ case LYE_EOL:
+ case LYE_FORW:
+ case LYE_FORW_RL:
+ case LYE_BACK:
+ case LYE_BACK_LL:
+ case LYE_FORWW:
+ case LYE_BACKW:
+#ifdef EXP_KEYBOARD_LAYOUT
+ case LYE_SWMAP:
+#endif
+#ifdef ENHANCED_LINEEDIT
+ case LYE_SETMARK:
+ case LYE_XPMARK:
+#endif
+ break;
+ default:
+ goto again;
+ }
+ }
/*
* Make sure the statusline uses editmode help.
*/
if (repeat < 0)
repeat = 1;
- while (repeat--)
- LYLineEdit(&MyEdit, ch, TRUE);
+ while (repeat--) {
+ int rc = LYEdit1(&MyEdit, ch, action & ~LYE_DF, TRUE);
+
+ if (rc < 0) {
+ ch = -rc;
+ /* FORW_RL and BACK_LL may require special attention.
+ BACK_LL wanted to switch to the previous link on
+ the same line. However, if there is no such link,
+ then we would either disactivate the form
+ (with -tna), or will reenter the form, thus we jump
+ to the end of the line; both are counterintuitive.
+ Unfortunately, we do not have access to curdoc.link,
+ so we deduce it ourselves. We don't have the info
+ to do it inside LYLineEdit().
+ This should work for prompts too. */
+ if ( (action != LYE_BACK_LL && action != LYE_FORW_RL)
+ || ((form_link - links) >= 0
+ && (form_link - links) < nlinks
+ && (action==LYE_FORW_RL
+ ? (form_link - links) < nlinks - 1
+ : (form_link - links) > 0)
+ && form_link[action==LYE_FORW_RL ? 1 : -1].ly
+ == form_link->ly))
+ goto breakfor;
+ }
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ if (rc == 0) {
+ if (HTCJK != NOCJK && (0x80 <= ch)
+ && (ch <= 0xfe) && refresh_mb)
+ refresh_mb = FALSE;
+ else
+ refresh_mb = TRUE;
+ } else {
+ if (!refresh_mb) {
+ LYEdit1(&MyEdit, 0, LYE_DELP, TRUE);
+ }
+ }
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+ }
if (MyEdit.strlen >= max_length) {
HaveMaxlength = TRUE;
} else if (HaveMaxlength &&
@@ -453,12 +793,14 @@ again:
if (strcmp(value, MyEdit.buffer)) {
Edited = TRUE;
}
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ if (refresh_mb)
+#endif
LYRefreshEdit(&MyEdit);
+ LYSetLastTFPos(MyEdit.pos);
}
}
-#ifdef NOTDEFINED
-breakfor:
-#endif /* NOTDEFINED */
+ breakfor:
if (Edited) {
char *p;
@@ -480,6 +822,7 @@ breakfor:
HTUserMsg(FORM_TAIL_COMBINED_WITH_HEAD);
}
+ /* 2.8.4pre.3 - most browsers appear to preserve trailing spaces -VH */
/*
* Remove trailing spaces
*
@@ -488,10 +831,12 @@ breakfor:
* their hard earned spaces. Better deal with trailing spaces
* when submitting the form????
*/
- p = &(form->value[strlen(form->value)]);
- while ((p != form->value) && (p[-1] == ' '))
- p--;
- *p = '\0';
+ if (LYtrimInputFields) {
+ p = &(form->value[strlen(form->value)]);
+ while ((p != form->value) && (p[-1] == ' '))
+ p--;
+ *p = '\0';
+ }
/*
* If the field has been changed, assume that it is now in
@@ -509,1054 +854,189 @@ breakfor:
}
/*
-** This function prompts for an option or page number.
-** If a 'g' or 'p' suffix is included, that will be
-** loaded into c. Otherwise, c is zeroed. - FM & LE
-*/
-PRIVATE int get_popup_option_number ARGS2(
- int *, c,
- int *, rel)
+ * Display statusline info tailored for the current form field.
+ */
+PUBLIC void show_formlink_statusline ARGS2(
+ CONST FormInfo *, form,
+ int, for_what)
{
- char temp[120];
- char *p = temp;
- int num;
-
- /*
- * Load the c argument into the prompt buffer.
- */
- temp[0] = *c;
- temp[1] = '\0';
- _statusline(SELECT_OPTION_NUMBER);
-
- /*
- * Get the number, possibly with a suffix, from the user.
- */
- if (LYgetstr(temp, VISIBLE, sizeof(temp), NORECALL) < 0 || *temp == 0) {
- HTInfoMsg(CANCELLED);
- *c = '\0';
- *rel = '\0';
- return(0);
- }
-
- *rel = '\0';
- num = atoi(p);
- while ( isdigit(*p) )
- ++p;
- switch ( *p ) {
- case '+': case '-':
- /* 123+ or 123- */
- *rel = *p++; *c = *p;
+ switch(form->type) {
+ case F_PASSWORD_TYPE:
+ if (form->disabled == YES)
+ statusline(FORM_LINK_PASSWORD_UNM_MSG);
+ else
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (for_what == FOR_PANEL)
+ statusline(FORM_LINK_PASSWORD_MESSAGE_INA);
+ else
+#endif
+ statusline(FORM_LINK_PASSWORD_MESSAGE);
break;
- default:
- *c = *p++;
- *rel = *p;
- case 0:
+ case F_OPTION_LIST_TYPE:
+ if (form->disabled == YES)
+ statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
+ else
+ statusline(FORM_LINK_OPTION_LIST_MESSAGE);
break;
- }
-
- /*
- * If we had a 'g' or 'p' suffix, load it into c.
- * Otherwise, zero c. Then return the number.
- */
- if ( *p == 'g' || *p == 'G' ) {
- *c = 'g';
- } else if (*p == 'p' || *p == 'P' ) {
- *c = 'p';
- } else {
- *c = '\0';
- }
- if ( *rel != '+' && *rel != '-' )
- *rel = 0;
- return num;
-}
-
-/* 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, " ");
-}
+ case F_CHECKBOX_TYPE:
+ if (form->disabled == YES)
+ statusline(FORM_LINK_CHECKBOX_UNM_MSG);
+ else
+ statusline(FORM_LINK_CHECKBOX_MESSAGE);
+ break;
+ case F_RADIO_TYPE:
+ if (form->disabled == YES)
+ statusline(FORM_LINK_RADIO_UNM_MSG);
+ else
+ statusline(FORM_LINK_RADIO_MESSAGE);
+ break;
+ case F_TEXT_SUBMIT_TYPE:
+ if (form->disabled == YES) {
+ statusline(FORM_LINK_TEXT_SUBMIT_UNM_MSG);
+ } else if (form->submit_method ==
+ URL_MAIL_METHOD) {
+ if (no_mail)
+ statusline(FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG);
+ else
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (for_what == FOR_PANEL)
+ statusline(FORM_TEXT_SUBMIT_MAILTO_MSG_INA);
+ else
#endif
-
-
-PRIVATE int popup_options ARGS7(
- int, cur_selection,
- OptionType *, list,
- int, ly,
- int, lx,
- int, width,
- int, i_length,
- int, disabled)
-{
- /*
- * Revamped to handle within-tag VALUE's, if present,
- * and to position the popup window appropriately,
- * taking the user_mode setting into account. -- FM
- */
- int c = 0, cmd = 0, i = 0, j = 0, rel = 0;
- int orig_selection = cur_selection;
-#ifndef USE_SLANG
- WINDOW * form_window;
-#endif /* !USE_SLANG */
- int num_options = 0, top, bottom, length = -1;
- OptionType * opt_ptr = list;
- int window_offset = 0;
- int lines_to_show;
- int npages;
- static char prev_target[512]; /* Search string buffer */
- static char prev_target_buffer[512]; /* Next search buffer */
- static BOOL first = TRUE;
- char *cp;
- int ch = 0, recall;
- int QueryTotal;
- int QueryNum;
- BOOLEAN FirstRecall = TRUE;
- OptionType * tmp_ptr;
- BOOLEAN ReDraw = FALSE;
- int number;
-
- /*
- * Initialize the search string buffer. - FM
- */
- if (first) {
- *prev_target_buffer = '\0';
- first = FALSE;
- }
- *prev_target = '\0';
- QueryTotal = (search_queries ? HTList_count(search_queries) : 0);
- recall = ((QueryTotal >= 1) ? RECALL : NORECALL);
- QueryNum = QueryTotal;
-
- /*
- * Set lines_to_show based on the user_mode global.
- */
- if (user_mode == NOVICE_MODE)
- lines_to_show = LYlines-4;
- else
- lines_to_show = LYlines-2;
-
- /*
- * Counting the number of options to be displayed.
- * num_options ranges 0...n
- */
- for (; opt_ptr->next; num_options++, opt_ptr = opt_ptr->next)
- ; /* null body */
-
- /*
- * Let's assume for the sake of sanity that ly is the number
- * corresponding to the line the selection box is on.
- * Let's also assume that cur_selection is the number of the
- * item that should be initially selected, as 0 beign the
- * first item.
- * So what we have, is the top equal to the current screen line
- * subtracting the cur_selection + 1 (the one must be for the
- * top line we will draw in a box). If the top goes under 0,
- * consider it 0.
- */
- top = ly - (cur_selection + 1);
- if (top < 0)
- top = 0;
-
- /*
- * Check and see if we need to put the i_length parameter up to
- * the number of real options.
- */
- if (!i_length) {
- i_length = num_options;
- } else {
- /*
- * Otherwise, it is really one number too high.
- */
- i_length--;
- }
-
- /*
- * The bottom is the value of the top plus the number of options
- * to view plus 3 (one for the top line, one for the bottom line,
- * and one to offset the 0 counted in the num_options).
- */
- bottom = top + i_length + 3;
-
- /*
- * Hmm... If the bottom goes beyond the number of lines available,
- */
- if (bottom > lines_to_show) {
- /*
- * Position the window at the top if we have more
- * options than will fit in the window.
- */
- if (i_length+3 > lines_to_show) {
- top = 0;
- bottom = top + i_length+3;
- if (bottom > lines_to_show)
- bottom = lines_to_show + 1;
+ statusline(FORM_LINK_TEXT_SUBMIT_MAILTO_MSG);
+ } else if (form->no_cache) {
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (for_what == FOR_PANEL)
+ statusline(FORM_TEXT_RESUBMIT_MESSAGE_INA);
+ else
+#endif
+ statusline(FORM_LINK_TEXT_RESUBMIT_MESSAGE);
} else {
- /*
- * Try to position the window so that the selected option will
- * appear where the selection box currently is positioned.
- * It could end up too high, at this point, but we'll move it
- * down latter, if that has happened.
- */
- top = (lines_to_show + 1) - (i_length + 3);
- bottom = (lines_to_show + 1);
- }
- }
-
- /*
- * This is really fun, when the length is 4, it means 0-4, or 5.
- */
- length = (bottom - top) - 2;
-
- /*
- * Move the window down if it's too high.
- */
- if (bottom < ly + 2) {
- bottom = ly + 2;
- if (bottom > lines_to_show + 1)
- bottom = lines_to_show + 1;
- top = bottom - length - 2;
- }
-
- /*
- * Set up the overall window, including the boxing characters ('*'),
- * if it all fits. Otherwise, set up the widest window possible. - FM
- */
-#ifdef USE_SLANG
- SLsmg_fill_region(top, lx - 1, bottom - top, width + 4, ' ');
-#else
- if (!(form_window = newwin(bottom - top, width + 4, top, lx - 1)) &&
- !(form_window = newwin(bottom - top, 0, top, 0))) {
- HTAlert(POPUP_FAILED);
- return(orig_selection);
- }
- scrollok(form_window, TRUE);
-#ifdef PDCURSES
- keypad(form_window, TRUE);
-#endif /* PDCURSES */
-#ifdef NCURSES
- LYsubwindow(form_window);
+ char *submit_str = NULL;
+ char *xkey_info = key_for_func_ext(LYK_NOCACHE, for_what);
+ if (xkey_info && *xkey_info) {
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (for_what == FOR_PANEL)
+ HTSprintf0(&submit_str, FORM_TEXT_SUBMIT_MESSAGE_INA_X,
+ xkey_info);
+ else
#endif
-#if defined(HAVE_GETBKGD) /* not defined in ncurses 1.8.7 */
- wbkgd(form_window, getbkgd(stdscr));
- wbkgdset(form_window, getbkgd(stdscr));
+ HTSprintf0(&submit_str, FORM_LINK_TEXT_SUBMIT_MESSAGE_X,
+ xkey_info);
+ statusline(submit_str);
+ FREE(submit_str);
+ } else {
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (for_what == FOR_PANEL)
+ statusline(FORM_LINK_TEXT_SUBMIT_MESSAGE_INA);
+ else
#endif
-#endif /* USE_SLANG */
-
- /*
- * Set up the window_offset for options.
- * cur_selection ranges from 0...n
- * length ranges from 0...m
- */
- if (cur_selection >= length) {
- window_offset = cur_selection - length + 1;
- }
-
- /*
- * Compute the number of popup window pages. - FM
- */
- npages = ((num_options + 1) > length) ?
- (((num_options + 1) + (length - 1))/(length))
- : 1;
-/*
- * OH! I LOVE GOTOs! hack hack hack
- * 07-11-94 GAB
- * MORE hack hack hack
- * 09-05-94 FM
- */
-redraw:
- opt_ptr = list;
-
- /*
- * Display the boxed options.
- */
- for (i = 0; i <= num_options; i++, opt_ptr = opt_ptr->next) {
- if (i >= window_offset && i - window_offset < length) {
-#ifdef USE_SLANG
- SLsmg_gotorc(top + ((i + 1) - window_offset), (lx - 1 + 2));
- SLsmg_write_nstring(opt_ptr->name, width);
-#else
- wmove(form_window, ((i + 1) - window_offset), 2);
- paddstr(form_window, width, opt_ptr->name);
-#endif /* USE_SLANG */
+ statusline(FORM_LINK_TEXT_SUBMIT_MESSAGE);
+ }
+ FREE(xkey_info);
}
- }
-#ifdef USE_SLANG
- SLsmg_draw_box(top, (lx - 1), (bottom - top), (width + 4));
-#else
-#ifdef VMS
- VMSbox(form_window, (bottom - top), (width + 4));
-#else
- LYbox(form_window, TRUE);
-#endif /* VMS */
- wrefresh(form_window);
-#endif /* USE_SLANG */
- opt_ptr = NULL;
+ break;
+ case F_SUBMIT_TYPE:
+ case F_IMAGE_SUBMIT_TYPE:
+ if (form->disabled == YES) {
+ statusline(FORM_LINK_SUBMIT_DIS_MSG);
+ } else if (form->submit_method ==
+ URL_MAIL_METHOD) {
+ if (no_mail) {
+ statusline(FORM_LINK_SUBMIT_MAILTO_DIS_MSG);
+ } else {
+ if(user_mode == ADVANCED_MODE) {
+ char *submit_str = NULL;
- /*
- * Loop on user input.
- */
- while (cmd != LYK_ACTIVATE) {
+ StrAllocCopy(submit_str, FORM_LINK_SUBMIT_MAILTO_PREFIX);
+ StrAllocCat(submit_str, form->submit_action);
+ statusline(submit_str);
+ FREE(submit_str);
+ } else {
+ statusline(FORM_LINK_SUBMIT_MAILTO_MSG);
+ }
+ }
+ } else if (form->no_cache) {
+ if(user_mode == ADVANCED_MODE) {
+ char *submit_str = NULL;
+
+ StrAllocCopy(submit_str, FORM_LINK_RESUBMIT_PREFIX);
+ StrAllocCat(submit_str, form->submit_action);
+ statusline(submit_str);
+ FREE(submit_str);
+ } else {
+ statusline(FORM_LINK_RESUBMIT_MESSAGE);
+ }
+ } else {
+ if(user_mode == ADVANCED_MODE) {
+ char *submit_str = NULL;
- /*
- * Unreverse cur selection.
- */
- if (opt_ptr != NULL) {
-#ifdef USE_SLANG
- SLsmg_gotorc((top + ((i + 1) - window_offset)), (lx - 1 + 2));
- SLsmg_write_nstring(opt_ptr->name, width);
-#else
- wmove(form_window, ((i + 1) - window_offset), 2);
- paddstr(form_window, width, opt_ptr->name);
-#endif /* USE_SLANG */
+ StrAllocCopy(submit_str, FORM_LINK_SUBMIT_PREFIX);
+ StrAllocCat(submit_str, form->submit_action);
+ statusline(submit_str);
+ FREE(submit_str);
+ } else {
+ statusline(FORM_LINK_SUBMIT_MESSAGE);
+ }
}
-
- opt_ptr = list;
-
- for (i = 0; i < cur_selection; i++, opt_ptr = opt_ptr->next)
- ; /* null body */
-
-#ifdef USE_SLANG
- SLsmg_set_color(2);
- SLsmg_gotorc((top + ((i + 1) - window_offset)), (lx - 1 + 2));
- SLsmg_write_nstring(opt_ptr->name, width);
- SLsmg_set_color(0);
- /*
- * If LYShowCursor is ON, move the cursor to the left
- * of the current option, so that blind users, who are
- * most likely to have LYShowCursor ON, will have it's
- * string spoken or passed to the braille interface as
- * each option is made current. Otherwise, move it to
- * the bottom, right column of the screen, to "hide"
- * the cursor as for the main document, and let sighted
- * users rely on the current option's highlighting or
- * color without the distraction of a blinking cursor
- * in the window. - FM
- */
- if (LYShowCursor)
- SLsmg_gotorc((top + ((i + 1) - window_offset)), (lx - 1 + 1));
+ break;
+ case F_RESET_TYPE:
+ if (form->disabled == YES)
+ statusline(FORM_LINK_RESET_DIS_MSG);
else
- SLsmg_gotorc((LYlines - 1), (LYcols - 1));
- SLsmg_refresh();
-#else
- wmove(form_window, ((i + 1) - window_offset), 2);
- wstart_reverse(form_window);
- paddstr(form_window, width, opt_ptr->name);
- wstop_reverse(form_window);
- /*
- * If LYShowCursor is ON, move the cursor to the left
- * of the current option, so that blind users, who are
- * most likely to have LYShowCursor ON, will have it's
- * string spoken or passed to the braille interface as
- * each option is made current. Otherwise, leave it to
- * the right of the current option, since we can't move
- * it out of the window, and let sighted users rely on
- * the highlighting of the current option without the
- * distraction of a blinking cursor preceding it. - FM
- */
- if (LYShowCursor)
- wmove(form_window, ((i + 1) - window_offset), 1);
- wrefresh(form_window);
-#endif /* USE_SLANG */
-
- c = LYgetch_for(FOR_CHOICE);
- if (c == 3 || c == 7) { /* Control-C or Control-G */
- cmd = LYK_QUIT;
-#ifndef USE_SLANG
- } else if (c == MOUSE_KEY) {
- if ((cmd = fancy_mouse(form_window, i + 1 + window_offset, &cur_selection)) < 0)
- goto redraw;
- if (cmd == LYK_ACTIVATE)
- break;
+ statusline(FORM_LINK_RESET_MESSAGE);
+ break;
+ case F_FILE_TYPE:
+ if (form->disabled == YES)
+ statusline(FORM_LINK_FILE_UNM_MSG);
+ else
+ statusline(FORM_LINK_FILE_MESSAGE);
+ break;
+ case F_TEXT_TYPE:
+ if (form->disabled == YES)
+ statusline(FORM_LINK_TEXT_UNM_MSG);
+ else
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (for_what == FOR_PANEL)
+ statusline(FORM_LINK_TEXT_MESSAGE_INA);
+ else
#endif
+ statusline(FORM_LINK_TEXT_MESSAGE);
+ break;
+ case F_TEXTAREA_TYPE:
+ if (form->disabled == YES) {
+ statusline(FORM_LINK_TEXT_UNM_MSG);
} else {
- cmd = keymap[c+1];
- }
-#ifdef VMS
- if (HadVMSInterrupt) {
- HadVMSInterrupt = FALSE;
- cmd = LYK_QUIT;
- }
-#endif /* VMS */
-
- switch(cmd) {
- case LYK_F_LINK_NUM:
- c = '\0';
- 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:
- /*
- * Get a number from the user, possibly with
- * a 'g' or 'p' suffix (which will be loaded
- * into c). - FM & LE
- */
- number = get_popup_option_number((int *)&c,(int *)&rel);
-
- /* handle + or - suffix */
- CTRACE(tfp,"got popup option number %d, ",number);
- CTRACE(tfp,"rel='%c', c='%c', cur_selection=%d\n",
- rel,c,cur_selection);
- if ( c == 'p' ) {
- int curpage = ((cur_selection + 1) > length) ?
- (((cur_selection + 1) + (length - 1))/(length))
- : 1;
- CTRACE(tfp," curpage=%d\n",curpage);
- if ( rel == '+' )
- number = curpage + number;
- else if ( rel == '-' )
- number = curpage - number;
- } else if ( rel == '+' ) {
- number = cur_selection + number + 1;
- } else if ( rel == '-' ) {
- number = cur_selection - number + 1;
- }
- if ( rel ) CTRACE(tfp,"new number=%d\n",number);
- /*
- * Check for a 'p' suffix. - FM
- */
- if (c == 'p') {
- /*
- * Treat 1 or less as the first page. - FM
- */
- if (number <= 1) {
- if (window_offset == 0) {
- HTUserMsg(ALREADY_AT_OPTION_BEGIN);
- if (disabled) {
- _statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
- } else {
- _statusline(FORM_LINK_OPTION_LIST_MESSAGE);
- }
- break;
- }
- window_offset = 0;
- cur_selection = 0;
- if (disabled) {
- _statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
- } else {
- _statusline(FORM_LINK_OPTION_LIST_MESSAGE);
- }
- goto redraw;
- }
-
- /*
- * Treat a number equal to or greater than the
- * number of pages as the last page. - FM
- */
- if (number >= npages) {
- if (window_offset >= ((num_options - length) + 1)) {
- HTUserMsg(ALREADY_AT_OPTION_END);
- if (disabled) {
- _statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
- } else {
- _statusline(FORM_LINK_OPTION_LIST_MESSAGE);
- }
- break;
- }
- window_offset = ((npages - 1) * length);
- if (window_offset > (num_options - length)) {
- window_offset = (num_options - length + 1);
- }
- if (cur_selection < window_offset)
- cur_selection = window_offset;
- if (disabled) {
- _statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
- } else {
- _statusline(FORM_LINK_OPTION_LIST_MESSAGE);
- }
- goto redraw;
- }
-
- /*
- * We want an intermediate page. - FM
- */
- if (((number - 1) * length) == window_offset) {
- char *msg = 0;
- HTSprintf0(&msg, ALREADY_AT_OPTION_PAGE, number);
- HTUserMsg(msg);
- FREE(msg);
- if (disabled) {
- _statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
- } else {
- _statusline(FORM_LINK_OPTION_LIST_MESSAGE);
- }
- break;
- }
- cur_selection = window_offset = ((number - 1) * length);
- if (disabled) {
- _statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
- } else {
- _statusline(FORM_LINK_OPTION_LIST_MESSAGE);
- }
- goto redraw;
-
- }
-
- /*
- * Check for a positive number, which signifies
- * that an option should be sought. - FM
- */
- if (number > 0) {
- /*
- * Decrement the number so as to correspond
- * with our cur_selection values. - FM
- */
- number--;
-
- /*
- * If the number is in range and had no legal
- * suffix, select the indicated option. - FM
- */
- if (number <= num_options && c == '\0') {
- cur_selection = number;
- cmd = LYK_ACTIVATE;
- break;
- }
-
- /*
- * Verify that we had a 'g' suffix,
- * and act on the number. - FM
- */
- if (c == 'g') {
- if (cur_selection == number) {
- /*
- * The option already is current. - FM
- */
- char *msg = 0;
- HTSprintf0(&msg, OPTION_ALREADY_CURRENT, (number + 1));
- HTUserMsg(msg);
- FREE(msg);
- if (disabled) {
- _statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
- } else {
- _statusline(FORM_LINK_OPTION_LIST_MESSAGE);
- }
- break;
- }
-
- if (number <= num_options) {
- /*
- * The number is in range and had a 'g'
- * suffix, so make it the current option,
- * scrolling if needed. - FM
- */
- j = (number - cur_selection);
- cur_selection = number;
- if ((j > 0) &&
- (cur_selection - window_offset) >= length) {
- window_offset += j;
- if (window_offset > (num_options - length + 1))
- window_offset = (num_options - length + 1);
- } else if ((cur_selection - window_offset) < 0) {
- window_offset -= abs(j);
- if (window_offset < 0)
- window_offset = 0;
- }
- if (disabled) {
- _statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
- } else {
- _statusline(FORM_LINK_OPTION_LIST_MESSAGE);
- }
- goto redraw;
- }
-
- /*
- * Not in range. - FM
- */
- HTUserMsg(BAD_OPTION_NUM_ENTERED);
- }
- }
-
- /*
- * Restore the popup statusline. - FM
- */
- if (disabled) {
- _statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
- } else {
- _statusline(FORM_LINK_OPTION_LIST_MESSAGE);
- }
- break;
-
- case LYK_PREV_LINK:
- case LYK_FASTBACKW_LINK:
- case LYK_UP_LINK:
-
- if (cur_selection > 0)
- cur_selection--;
-
- /*
- * Scroll the window up if necessary.
- */
- if ((cur_selection - window_offset) < 0) {
- window_offset--;
- goto redraw;
- }
- break;
-
- case LYK_NEXT_LINK:
- case LYK_FASTFORW_LINK:
- case LYK_DOWN_LINK:
- if (cur_selection < num_options)
- cur_selection++;
-
- /*
- * Scroll the window down if necessary
- */
- if ((cur_selection - window_offset) >= length) {
- window_offset++;
- goto redraw;
- }
- break;
-
- case LYK_NEXT_PAGE:
- /*
- * Okay, are we on the last page of the list?
- * If not then,
- */
- if (window_offset != (num_options - length + 1)) {
- /*
- * Modify the current selection to not be a
- * coordinate in the list, but a coordinate
- * on the item selected in the window.
- */
- cur_selection -= window_offset;
-
- /*
- * Page down the proper length for the list.
- * If simply to far, back up.
- */
- window_offset += length;
- if (window_offset > (num_options - length)) {
- window_offset = (num_options - length + 1);
- }
-
- /*
- * Readjust the current selection to be a
- * list coordinate rather than window.
- * Redraw this thing.
- */
- cur_selection += window_offset;
- goto redraw;
- }
- else if (cur_selection < num_options) {
- /*
- * Already on last page of the list so just
- * redraw it with the last item selected.
- */
- cur_selection = num_options;
- }
- break;
-
- case LYK_PREV_PAGE:
- /*
- * Are we on the first page of the list?
- * If not then,
- */
- if (window_offset != 0) {
- /*
- * Modify the current selection to not be a
- * list coordinate, but a window coordinate.
- */
- cur_selection -= window_offset;
-
- /*
- * Page up the proper length.
- * If too far, back up.
- */
- window_offset -= length;
- if (window_offset < 0) {
- window_offset = 0;
- }
-
- /*
- * Readjust the current selection.
- */
- cur_selection += window_offset;
- goto redraw;
- } else if (cur_selection > 0) {
- /*
- * Already on the first page so just
- * back up to the first item.
- */
- cur_selection = 0;
- }
- break;
-
- case LYK_HOME:
- cur_selection = 0;
- if (window_offset > 0) {
- window_offset = 0;
- goto redraw;
- }
- break;
-
- case LYK_END:
- cur_selection = num_options;
- if (window_offset != (num_options - length + 1)) {
- window_offset = (num_options - length + 1);
- goto redraw;
- }
- break;
-
- case LYK_DOWN_TWO:
- cur_selection += 2;
- if (cur_selection > num_options)
- cur_selection = num_options;
-
- /*
- * Scroll the window down if necessary.
- */
- if ((cur_selection - window_offset) >= length) {
- window_offset += 2;
- if (window_offset > (num_options - length + 1))
- window_offset = (num_options - length + 1);
- goto redraw;
- }
- break;
-
- case LYK_UP_TWO:
- cur_selection -= 2;
- if (cur_selection < 0)
- cur_selection = 0;
-
- /*
- * Scroll the window up if necessary.
- */
- if ((cur_selection - window_offset) < 0) {
- window_offset -= 2;
- if (window_offset < 0)
- window_offset = 0;
- goto redraw;
- }
- break;
-
- case LYK_DOWN_HALF:
- cur_selection += (length/2);
- if (cur_selection > num_options)
- cur_selection = num_options;
-
- /*
- * Scroll the window down if necessary.
- */
- if ((cur_selection - window_offset) >= length) {
- window_offset += (length/2);
- if (window_offset > (num_options - length + 1))
- window_offset = (num_options - length + 1);
- goto redraw;
- }
- break;
-
- case LYK_UP_HALF:
- cur_selection -= (length/2);
- if (cur_selection < 0)
- cur_selection = 0;
-
- /*
- * Scroll the window up if necessary.
- */
- if ((cur_selection - window_offset) < 0) {
- window_offset -= (length/2);
- if (window_offset < 0)
- window_offset = 0;
- goto redraw;
- }
- break;
-
- case LYK_REFRESH:
- lynx_force_repaint();
- refresh();
- break;
-
- case LYK_NEXT:
- if (recall && *prev_target_buffer == '\0') {
- /*
- * We got a 'n'ext command with no prior query
- * specified within the popup window. See if
- * one was entered when the popup was retracted,
- * and if so, assume that's what's wanted. Note
- * that it will become the default within popups,
- * unless another is entered within a popup. If
- * the within popup default is to be changed at
- * that point, use WHEREIS ('/') and enter it,
- * or the up- or down-arrow keys to seek any of
- * the previously entered queries, regardless of
- * whether they were entered within or outside
- * of a popup window. - FM
- */
- if ((cp = (char *)HTList_objectAt(search_queries,
- 0)) != NULL) {
- strcpy(prev_target_buffer, cp);
- QueryNum = 0;
- FirstRecall = FALSE;
- }
- }
- strcpy(prev_target, prev_target_buffer);
- case LYK_WHEREIS:
- if (*prev_target == '\0' ) {
- _statusline(ENTER_WHEREIS_QUERY);
- if ((ch = LYgetstr(prev_target, VISIBLE,
- sizeof(prev_target_buffer),
- recall)) < 0) {
- /*
- * User cancelled the search via ^G. - FM
- */
- HTInfoMsg(CANCELLED);
- goto restore_popup_statusline;
- }
- }
-
-check_recall:
- if (*prev_target == '\0' &&
- !(recall && (ch == UPARROW || ch == DNARROW))) {
- /*
- * No entry. Simply break. - FM
- */
- HTInfoMsg(CANCELLED);
- goto restore_popup_statusline;
- }
-
- if (recall && ch == UPARROW) {
- if (FirstRecall) {
- /*
- * Use the current string or
- * last query in the list. - FM
- */
- FirstRecall = FALSE;
- if (*prev_target_buffer) {
- for (QueryNum = (QueryTotal - 1);
- QueryNum > 0; QueryNum--) {
- if ((cp = (char *)HTList_objectAt(
- search_queries,
- QueryNum)) != NULL &&
- !strcmp(prev_target_buffer, cp)) {
- break;
- }
- }
- } else {
- QueryNum = 0;
- }
- } else {
- /*
- * Go back to the previous query in the list. - FM
- */
- QueryNum++;
- }
- if (QueryNum >= QueryTotal)
- /*
- * Roll around to the last query in the list. - FM
- */
- QueryNum = 0;
- if ((cp = (char *)HTList_objectAt(search_queries,
- QueryNum)) != NULL) {
- strcpy(prev_target, cp);
- if (*prev_target_buffer &&
- !strcmp(prev_target_buffer, prev_target)) {
- _statusline(EDIT_CURRENT_QUERY);
- } else if ((*prev_target_buffer && QueryTotal == 2) ||
- (!(*prev_target_buffer) &&
- QueryTotal == 1)) {
- _statusline(EDIT_THE_PREV_QUERY);
- } else {
- _statusline(EDIT_A_PREV_QUERY);
- }
- if ((ch = LYgetstr(prev_target, VISIBLE,
- sizeof(prev_target_buffer), recall)) < 0) {
- /*
- * User cancelled the search via ^G. - FM
- */
- HTInfoMsg(CANCELLED);
- goto restore_popup_statusline;
- }
- goto check_recall;
- }
- } else if (recall && ch == DNARROW) {
- if (FirstRecall) {
- /*
- * Use the current string or
- * first query in the list. - FM
- */
- FirstRecall = FALSE;
- if (*prev_target_buffer) {
- for (QueryNum = 0;
- QueryNum < (QueryTotal - 1); QueryNum++) {
- if ((cp = (char *)HTList_objectAt(
- search_queries,
- QueryNum)) != NULL &&
- !strcmp(prev_target_buffer, cp)) {
- break;
- }
- }
- } else {
- QueryNum = (QueryTotal - 1);
- }
- } else {
- /*
- * Advance to the next query in the list. - FM
- */
- QueryNum--;
- }
- if (QueryNum < 0)
- /*
- * Roll around to the first query in the list. - FM
- */
- QueryNum = (QueryTotal - 1);
- if ((cp = (char *)HTList_objectAt(search_queries,
- QueryNum)) != NULL) {
- strcpy(prev_target, cp);
- if (*prev_target_buffer &&
- !strcmp(prev_target_buffer, prev_target)) {
- _statusline(EDIT_CURRENT_QUERY);
- } else if ((*prev_target_buffer &&
- QueryTotal == 2) ||
- (!(*prev_target_buffer) &&
- QueryTotal == 1)) {
- _statusline(EDIT_THE_PREV_QUERY);
- } else {
- _statusline(EDIT_A_PREV_QUERY);
- }
- if ((ch = LYgetstr(prev_target, VISIBLE,
- sizeof(prev_target_buffer),
- recall)) < 0) {
- /*
- * User cancelled the search via ^G. - FM
- */
- HTInfoMsg(CANCELLED);
- goto restore_popup_statusline;
- }
- goto check_recall;
- }
- }
- /*
- * Replace the search string buffer with the new target. - FM
- */
- strcpy(prev_target_buffer, prev_target);
- HTAddSearchQuery(prev_target_buffer);
-
- /*
- * Start search at the next option. - FM
- */
- for (j = 1, tmp_ptr = opt_ptr->next;
- tmp_ptr != NULL; tmp_ptr = tmp_ptr->next, j++) {
- if (case_sensitive) {
- if (strstr(tmp_ptr->name, prev_target_buffer) != NULL)
- break;
- } else {
- if (LYstrstr(tmp_ptr->name, prev_target_buffer) != NULL)
- break;
- }
- }
- if (tmp_ptr != NULL) {
- /*
- * We have a hit, so make that option the current. - FM
- */
- cur_selection += j;
- /*
- * Scroll the window down if necessary.
- */
- if ((cur_selection - window_offset) >= length) {
- window_offset += j;
- if (window_offset > (num_options - length + 1))
- window_offset = (num_options - length + 1);
- ReDraw = TRUE;
- }
- goto restore_popup_statusline;
- }
-
- /*
- * If we started at the beginning, it can't be present. - FM
- */
- if (cur_selection == 0) {
- HTUserMsg2(STRING_NOT_FOUND, prev_target_buffer);
- goto restore_popup_statusline;
- }
-
- /*
- * Search from the beginning to the current option. - FM
- */
- for (j = 0, tmp_ptr = list;
- j < cur_selection; tmp_ptr = tmp_ptr->next, j++) {
- if (case_sensitive) {
- if (strstr(tmp_ptr->name, prev_target_buffer) != NULL)
- break;
- } else {
- if (LYstrstr(tmp_ptr->name, prev_target_buffer) != NULL)
- break;
- }
- }
- if (j < cur_selection) {
- /*
- * We have a hit, so make that option the current. - FM
- */
- j = (cur_selection - j);
- cur_selection -= j;
- /*
- * Scroll the window up if necessary.
- */
- if ((cur_selection - window_offset) < 0) {
- window_offset -= j;
- if (window_offset < 0)
- window_offset = 0;
- ReDraw = TRUE;
- }
- goto restore_popup_statusline;
- }
-
- /*
- * Didn't find it in the preceding options either. - FM
- */
- HTUserMsg2(STRING_NOT_FOUND, prev_target_buffer);
-
-restore_popup_statusline:
- /*
- * Restore the popup statusline and
- * reset the search variables. - FM
- */
- if (disabled)
- _statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
+ char *submit_str = NULL;
+ char *xkey_info = NULL;
+ if (!no_editor && editor && editor) {
+ xkey_info = key_for_func_ext(LYK_EDIT_TEXTAREA, for_what);
+#ifdef TEXTAREA_AUTOEXTEDIT
+ if (!xkey_info)
+ xkey_info = key_for_func_ext(LYK_DWIMEDIT, for_what);
+#endif
+ }
+ if (xkey_info && *xkey_info) {
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (for_what == FOR_PANEL)
+ HTSprintf0(&submit_str, FORM_LINK_TEXTAREA_MESSAGE_INA_E,
+ xkey_info);
else
- _statusline(FORM_LINK_OPTION_LIST_MESSAGE);
- *prev_target = '\0';
- QueryTotal = (search_queries ? HTList_count(search_queries)
- : 0);
- recall = ((QueryTotal >= 1) ? RECALL : NORECALL);
- QueryNum = QueryTotal;
- if (ReDraw == TRUE) {
- ReDraw = FALSE;
- goto redraw;
- }
- break;
-
- case LYK_QUIT:
- case LYK_ABORT:
- case LYK_PREV_DOC:
- cur_selection = orig_selection;
- cmd = LYK_ACTIVATE; /* to exit */
- break;
+#endif
+ HTSprintf0(&submit_str, FORM_LINK_TEXTAREA_MESSAGE_E,
+ xkey_info);
+ statusline(submit_str);
+ FREE(submit_str);
+ } else {
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (for_what == FOR_PANEL)
+ statusline(FORM_LINK_TEXTAREA_MESSAGE_INA);
+ else
+#endif
+ statusline(FORM_LINK_TEXTAREA_MESSAGE);
+ }
+ FREE(xkey_info);
}
-
+ break;
}
-#ifndef USE_SLANG
- delwin(form_window);
-#ifdef NCURSES
- LYsubwindow(0);
-#endif
-#endif /* !USE_SLANG */
-
- return(disabled ? orig_selection : cur_selection);
}
diff --git a/gnu/usr.bin/lynx/src/LYGetFile.c b/gnu/usr.bin/lynx/src/LYGetFile.c
index 0850a8ae266..3ea3e2b9f34 100644
--- a/gnu/usr.bin/lynx/src/LYGetFile.c
+++ b/gnu/usr.bin/lynx/src/LYGetFile.c
@@ -14,7 +14,6 @@
#include <LYGetFile.h>
#include <LYPrint.h>
#include <LYOptions.h>
-#include <LYHistory.h>
#include <LYStrings.h>
#include <LYClean.h>
#include <LYDownload.h>
@@ -28,23 +27,50 @@
#include <LYLocal.h>
#endif /* DIRED_SUPPORT */
#include <LYReadCFG.h>
+#include <LYHistory.h>
+#include <LYPrettySrc.h>
#include <LYexit.h>
#include <LYLeaks.h>
-#ifndef VMS
-#ifdef SYSLOG_REQUESTED_URLS
-#include <syslog.h>
-#endif /* SYSLOG_REQUESTED_URLS */
-#endif /* !VMS */
+PRIVATE int fix_httplike_urls PARAMS((document *doc, UrlTypes type));
-PRIVATE int fix_http_urls PARAMS((document *doc));
-extern char * WWW_Download_File;
#ifdef VMS
extern BOOLEAN LYDidRename;
#endif /* VMS */
-PUBLIC BOOLEAN getfile ARGS1(
+#ifdef VMS
+#define STRNADDRCOMP strncasecomp
+#else
+#define STRNADDRCOMP strncmp
+#endif /* !VMS */
+
+PUBLIC int HTNoDataOK = 0;
+
+/*
+ * getfile is the main mechanism to load a new document (or a previously
+ * loaded one whose rendering is cached in a HText structure) from
+ * mainloop, nearly everything goes through it.
+ * It should return one of the values
+ * NORMAL - requested document loaded successfully, usually [always?]
+ * its rendering is available as HTMainText. It can be an
+ * HTTP error message page or similar, we make no
+ * distinction here.
+ * NOT_FOUND - requested document cannot be accessed, and the reason
+ * is a real error (as may be caused by an invalid link),
+ * not just that lynx disallows access because of some
+ * permission restrictions, and we have no error page
+ * to show for it either.
+ * NULLFILE - requested document not loaded into HTMainText, either
+ * some interactive protocol was requested (like telnet),
+ * or lynx does not allow access.
+ * The distinction between NOT_FOUND and NULLFILE is not very crucial,
+ * but getting it right prevents mainloop from exiting with the wrong
+ * message if it happens for the first file, and from logging (or not
+ * logging) errors inappropriately with -traversal, and from sending
+ * bogus error mail with MAIL_SYSTEM_ERROR_LOGGING:TRUE. - kw
+ */
+PUBLIC int getfile ARGS1(
document *, doc)
{
int url_type = 0;
@@ -56,7 +82,7 @@ PUBLIC BOOLEAN getfile ARGS1(
* Reset LYCancelDownload to prevent unwanted delayed effect. - KW
*/
if (LYCancelDownload) {
- CTRACE(tfp, "getfile: resetting LYCancelDownload to FALSE\n");
+ CTRACE((tfp, "getfile: resetting LYCancelDownload to FALSE\n"));
LYCancelDownload = FALSE;
}
@@ -65,6 +91,14 @@ PUBLIC BOOLEAN getfile ARGS1(
*/
LYFakeZap(NO);
+ /*
+ * Reset redirection counter to prevent bogus TOO_MANY_REDIRECTIONS
+ * in rare situations if the previous cycle got to the limit, but
+ * did not fail for that reason because the URL of the final location
+ * was handled specially, not via HTLoadAbsolute. - kw
+ */
+ redirection_attempts = 0;
+
Try_Redirected_URL:
/*
* Load the WWWDoc struct in case we need to use it.
@@ -77,6 +111,11 @@ Try_Redirected_URL:
WWWDoc.safe = doc->safe;
/*
+ * Reset HTPermitRedir, it has done its job if it was set. - kw
+ */
+ HTPermitRedir = FALSE;
+
+ /*
* Reset WWW_Download_File just in case.
*/
FREE(WWW_Download_File);
@@ -86,7 +125,20 @@ Try_Redirected_URL:
*/
redirect_post_content = FALSE;
- CTRACE(tfp,"getfile: getting %s\n\n",doc->address);
+ /*
+ * This flag is a hack to allow us to pass on the fact
+ * that 'no data' may not really be an error although
+ * HTLoadAbsolute returned NO. There should be a better
+ * way... HT_NO_DATA should always mean 'not data but
+ * not an error', and be passed on to us as that, but
+ * current usage if HT_NO_DATA vs HT_NOT_LOADED has
+ * to be reviewed everywhere.
+ * Anyway, some protocol module can set it to say
+ * 'I really mean it', we have to reset it here. - kw
+ */
+ HTNoDataOK = 0;
+
+ CTRACE((tfp,"getfile: getting %s\n\n",doc->address));
/*
* Protect against denial of service attacks
@@ -124,7 +176,7 @@ Try_Redirected_URL:
FREE(temp);
return(NULLFILE);
}
- } else if (isdigit((unsigned char)*cp)) {
+ } else if (isdigit(UCH(*cp))) {
HTAlert(URL_PORT_BAD);
FREE(temp);
return(NULLFILE);
@@ -148,16 +200,19 @@ Try_Redirected_URL:
url_type == LYNXKEYMAP_URL_TYPE ||
url_type == LYNXIMGMAP_URL_TYPE ||
url_type == LYNXCOOKIE_URL_TYPE ||
- 0==strncasecomp(WWWDoc.address, helpfilepath,
+ url_type == LYNXMESSAGES_URL_TYPE ||
+ (url_type == LYNXOPTIONS_URL_TYPE &&
+ WWWDoc.post_data) ||
+ 0==STRNADDRCOMP(WWWDoc.address, helpfilepath,
strlen(helpfilepath)) ||
(lynxlistfile != NULL &&
- 0==strncasecomp(WWWDoc.address, lynxlistfile,
+ 0==STRNADDRCOMP(WWWDoc.address, lynxlistfile,
strlen(lynxlistfile))) ||
(lynxlinksfile != NULL &&
- 0==strncasecomp(WWWDoc.address, lynxlinksfile,
+ 0==STRNADDRCOMP(WWWDoc.address, lynxlinksfile,
strlen(lynxlinksfile))) ||
(lynxjumpfile != NULL &&
- 0==strncasecomp(WWWDoc.address, lynxjumpfile,
+ 0==STRNADDRCOMP(WWWDoc.address, lynxjumpfile,
strlen(lynxjumpfile))))) {
HTUserMsg(NOT_HTTP_URL_OR_ACTION);
return(NULLFILE);
@@ -181,6 +236,7 @@ Try_Redirected_URL:
url_type == LYNXOPTIONS_URL_TYPE ||
url_type == LYNXCFG_URL_TYPE ||
url_type == LYNXCOMPILE_OPTS_URL_TYPE ||
+ url_type == LYNXMESSAGES_URL_TYPE ||
url_type == LYNXDOWNLOAD_URL_TYPE ||
url_type == MAILTO_URL_TYPE ||
url_type == NEWSPOST_URL_TYPE ||
@@ -193,13 +249,13 @@ Try_Redirected_URL:
url_type == LYNXCGI_URL_TYPE)) ||
(WWWDoc.bookmark != NULL &&
*WWWDoc.bookmark != '\0') ||
- 0==strncasecomp(WWWDoc.address, helpfilepath,
+ 0==STRNADDRCOMP(WWWDoc.address, helpfilepath,
strlen(helpfilepath)) ||
(lynxlistfile != NULL &&
- 0==strncasecomp(WWWDoc.address, lynxlistfile,
+ 0==STRNADDRCOMP(WWWDoc.address, lynxlistfile,
strlen(lynxlistfile))) ||
(lynxjumpfile != NULL &&
- 0==strncasecomp(WWWDoc.address, lynxjumpfile,
+ 0==STRNADDRCOMP(WWWDoc.address, lynxjumpfile,
strlen(lynxjumpfile))))) {
HTUserMsg(NOT_IN_STARTING_REALM);
return(NULLFILE);
@@ -215,21 +271,18 @@ Try_Redirected_URL:
url_type != PROXY_URL_TYPE &&
url_type != LYNXOPTIONS_URL_TYPE &&
!(url_type == FILE_URL_TYPE &&
- *(LYlist_temp_url()) &&
- !strncmp(WWWDoc.address, LYlist_temp_url(),
- strlen(LYlist_temp_url())))) {
- CTRACE(tfp, "getfile: dropping post_data!\n");
+ (LYIsUIPage(WWWDoc.address, UIP_LIST_PAGE) ||
+ LYIsUIPage(WWWDoc.address, UIP_ADDRLIST_PAGE)))) {
+ CTRACE((tfp, "getfile: dropping post_data!\n"));
HTAlert(IGNORED_POST);
FREE(doc->post_data);
FREE(doc->post_content_type);
WWWDoc.post_data = NULL;
WWWDoc.post_content_type = NULL;
}
-#ifndef VMS
-#ifdef SYSLOG_REQUESTED_URLS
- syslog(LOG_INFO|LOG_LOCAL5, "%s", doc->address);
-#endif /* SYSLOG_REQUESTED_URLS */
-#endif /* !VMS */
+#if !defined(VMS) && defined(SYSLOG_REQUESTED_URLS)
+ LYSyslog (doc->address);
+#endif
if (url_type == UNKNOWN_URL_TYPE ||
url_type == AFS_URL_TYPE ||
url_type == PROSPERO_URL_TYPE) {
@@ -249,20 +302,22 @@ Try_Redirected_URL:
return(postoptions(doc));
#endif
- } else if (url_type == LYNXCFG_URL_TYPE) {
+ } else if (url_type == LYNXCFG_URL_TYPE &&
+ !no_lynxcfg_info) {
+ /* @@@ maybe we should generate a specific error message
+ if attempted but restricted. - kw */
/* show/change/reload lynx.cfg settings */
return(lynx_cfg_infopage(doc));
#if defined(HAVE_CONFIG_H) && !defined(NO_CONFIG_INFO)
- } else if (url_type == LYNXCOMPILE_OPTS_URL_TYPE) {
+ } else if (url_type == LYNXCOMPILE_OPTS_URL_TYPE &&
+ !no_compileopts_info) {
+ /* @@@ maybe we should generate a specific error message
+ if attempted but restricted or not supported. - kw */
/* show compile-time settings */
return(lynx_compile_opts(doc));
#endif
- } else if (url_type == LYNXMESSAGES_URL_TYPE) {
- /* show list of recent statusline messages */
- return(LYshow_statusline_messages(doc));
-
#ifndef DISABLE_NEWS
} else if (url_type == NEWSPOST_URL_TYPE ||
url_type == NEWSREPLY_URL_TYPE ||
@@ -272,6 +327,11 @@ Try_Redirected_URL:
if (no_newspost) {
HTUserMsg(NEWSPOSTING_DISABLED);
return(NULLFILE);
+ } else if (!news_ok && (
+ url_type == NEWSPOST_URL_TYPE ||
+ url_type == NEWSREPLY_URL_TYPE)) {
+ HTUserMsg(NEWS_DISABLED);
+ return(NULLFILE);
} else {
HTLoadAbsolute(&WWWDoc);
return(NULLFILE);
@@ -290,18 +350,12 @@ Try_Redirected_URL:
*/
LYDidRename = FALSE;
return(NULLFILE);
- } else {
- return(NORMAL);
}
-#else
- return(NORMAL);
#endif /* VMS */
+ return(NORMAL);
} else if (url_type == LYNXDIRED_URL_TYPE) {
#ifdef DIRED_SUPPORT
- if (no_dired_support) {
- HTUserMsg(DIRED_DISABLED);
- return(NULLFILE);
- } else {
+ if (!no_dired_support) {
local_dired(doc);
WWWDoc.address = doc->address;
WWWDoc.post_data = doc->post_data;
@@ -314,12 +368,50 @@ Try_Redirected_URL:
return(NOT_FOUND);
return(NORMAL);
}
-#else
+#endif /* DIRED_SUPPORT */
HTUserMsg(DIRED_DISABLED);
return(NULLFILE);
-#endif /* DIRED_SUPPORT */
+ }
- } else if (url_type == LYNXHIST_URL_TYPE) {
+ if (LYNoRefererHeader == FALSE &&
+ LYNoRefererForThis == FALSE) {
+ char *ref_url = HTLoadedDocumentURL();
+ if (!strncmp(ref_url, "LYNXIMGMAP:", 11))
+ ref_url += 11;
+ if (no_filereferer == TRUE &&
+ !strncmp(ref_url, "file:", 5)) {
+ LYNoRefererForThis = TRUE;
+ }
+ if (LYNoRefererForThis == FALSE &&
+ (cp = strchr(ref_url, '?')) != NULL &&
+ strchr(cp, '=') != NULL) {
+ /*
+ * Don't send a Referer header if the URL is
+ * the reply from a form with method GET, in
+ * case the content has personal data (e.g.,
+ * a password or credit card number) which
+ * would become visible in logs. - FM
+ *
+ * Changed 1999-11-01 to be controlled by
+ * REFERER_WITH_QUERY option. - kw
+ */
+ if (LYRefererWithQuery == 'S') { /* SEND */
+ StrAllocCopy(LYRequestReferer, ref_url);
+ } else if (LYRefererWithQuery == 'P') { /* PARTIAL */
+ FREE(LYRequestReferer); /* just to be sure */
+ LYRequestReferer = HTParse(ref_url, "",
+ PARSE_ACCESS|PARSE_HOST|PARSE_STRICTPATH|PARSE_PUNCTUATION);
+ } else { /* Everyhting else - don't send Referer */
+ LYNoRefererForThis = TRUE;
+ }
+ cp = NULL;
+ } else if (LYNoRefererForThis == FALSE) {
+ StrAllocCopy(LYRequestReferer, ref_url);
+ }
+ } else {
+ StrAllocCopy(LYRequestReferer, HTLoadedDocumentURL());
+ }
+ if (url_type == LYNXHIST_URL_TYPE) {
/*
* 'doc' will change to the new file
* if we had a successful LYpop_num(),
@@ -346,6 +438,9 @@ Try_Redirected_URL:
}
#endif
+#ifdef DIRED_SUPPORT
+ lynx_edit_mode = FALSE;
+#endif /* DIRED_SUPPORT */
if (!HTLoadAbsolute(&WWWDoc)) {
return(NOT_FOUND);
}
@@ -365,7 +460,7 @@ Try_Redirected_URL:
exec_ok(HTLoadedDocumentURL(),
doc->address+9, EXEC_PATH))) {
- char *p, addressbuf[1024];
+ char *p = NULL;
/*
* Bug puts slash on end if none is in the string.
@@ -375,17 +470,17 @@ Try_Redirected_URL:
== (int)strlen(doc->address) - 1)
doc->address[strlen(doc->address)-1] = '\0';
- p = doc->address;
/*
* Convert '~' to $HOME.
*/
if ((cp = strchr(doc->address, '~'))) {
- strncpy(addressbuf, doc->address, cp-doc->address);
- addressbuf[cp - doc->address] = '\0';
- p = wwwName(Home_Dir());
- strcat(addressbuf, p);
- strcat(addressbuf, cp+1);
- p = addressbuf;
+ HTSprintf0(&p, "%.*s%s%s",
+ cp - doc->address,
+ doc->address,
+ wwwName(Home_Dir()),
+ cp + 1);
+ } else {
+ StrAllocCopy(p, doc->address);
}
/*
* Show URL before executing it.
@@ -399,6 +494,8 @@ Try_Redirected_URL:
LYSystem(p+11);
else
LYSystem(p+9);
+ FREE(p);
+
if (url_type != LYNXPROG_URL_TYPE) {
/*
* Make sure user gets to see screen output.
@@ -408,13 +505,15 @@ Try_Redirected_URL:
#endif /* !VMS */
printf("\n%s", RETURN_TO_LYNX);
fflush(stdout);
- LYgetch();
+ (void) LYgetch();
#ifdef VMS
HadVMSInterrupt = FALSE;
#endif /* VMS */
}
- start_curses();
- LYAddVisitedLink(doc);
+ if (!dump_output_immediately) {
+ start_curses();
+ LYAddVisitedLink(doc);
+ }
} else {
char *buf = 0;
@@ -473,11 +572,13 @@ Try_Redirected_URL:
* so check if that's allowed.
*/
} else if (local_host_only &&
- url_type != NEWS_URL_TYPE &&
url_type != LYNXKEYMAP_URL_TYPE &&
url_type != LYNXIMGMAP_URL_TYPE &&
url_type != LYNXCOOKIE_URL_TYPE &&
+ url_type != LYNXMESSAGES_URL_TYPE &&
url_type != LYNXCGI_URL_TYPE &&
+ !(url_type == NEWS_URL_TYPE &&
+ strncmp(doc->address, "news://", 7)) &&
!(LYisLocalHost(doc->address) ||
LYisLocalAlias(doc->address))) {
HTUserMsg(ACCESS_ONLY_LOCALHOST);
@@ -489,39 +590,76 @@ Try_Redirected_URL:
} else if (url_type == TELNET_URL_TYPE ||
url_type == TN3270_URL_TYPE ||
url_type == TELNET_GOPHER_URL_TYPE) {
+ char * proxy;
if (!telnet_ok) {
HTUserMsg(TELNET_DISABLED);
+ return(NULLFILE);
} else if (no_telnet_port && strchr(doc->address+7, ':')) {
HTUserMsg(TELNET_PORT_SPECS_DISABLED);
+ return(NULLFILE);
+ /*
+ * Detect weird case where interactive protocol would
+ * be proxied, and to a non-interactive protocol at that.
+ */
+ } else if ((proxy = (char *)getenv(
+ (url_type==TN3270_URL_TYPE) ? "tn3270_proxy" :
+ (url_type==TELNET_GOPHER_URL_TYPE) ? "gopher_proxy" :
+ "telnet_proxy")) != NULL &&
+ *proxy != '\0' &&
+ !override_proxy(doc->address) &&
+ (strncmp(proxy, "telnet:", 7) &&
+ strncmp(proxy, "tn3270:", 7) &&
+ strncmp(proxy, "rlogin:", 7))) {
+ /* Do nothing, fall through to generic code - kw */
} else {
stop_curses();
HTLoadAbsolute(&WWWDoc);
- start_curses();
- fflush(stdout);
- LYAddVisitedLink(doc);
+ if (!dump_output_immediately) {
+ start_curses();
+ fflush(stdout);
+ LYAddVisitedLink(doc);
+ }
+ return(NULLFILE);
}
- return(NULLFILE);
/*
* Disable www news access if not news_ok.
*/
#ifndef DISABLE_NEWS
- } else if (url_type == NEWS_URL_TYPE && !news_ok) {
+ } else if (!news_ok && (
+ url_type == NEWS_URL_TYPE ||
+ url_type == NNTP_URL_TYPE)) {
HTUserMsg(NEWS_DISABLED);
return(NULLFILE);
#endif
} else if (url_type == RLOGIN_URL_TYPE) {
+ char * proxy;
if (!rlogin_ok) {
HTUserMsg(RLOGIN_DISABLED);
+ return(NULLFILE);
+ /*
+ * Detect weird case where interactive protocol would
+ * be proxied, and to a non-interactive protocol at that.
+ */
+ } else if ((proxy = (char *)getenv(
+ "rlogin_proxy")) != NULL &&
+ *proxy != '\0' &&
+ !override_proxy(doc->address) &&
+ (strncmp(proxy, "telnet:", 7) &&
+ strncmp(proxy, "tn3270:", 7) &&
+ strncmp(proxy, "rlogin:", 7))) {
+ /* Do nothing, fall through to generic code - kw */
} else {
stop_curses();
HTLoadAbsolute(&WWWDoc);
fflush(stdout);
- start_curses();
- LYAddVisitedLink(doc);
+ if (!dump_output_immediately) {
+ start_curses();
+ LYAddVisitedLink(doc);
+ }
+ return(NULLFILE);
}
- return(NULLFILE);
/*
* If its a gopher index type and there isn't a search
@@ -568,10 +706,15 @@ Try_Redirected_URL:
WWWDoc.isHEAD = doc->isHEAD;
WWWDoc.safe = doc->safe;
status = HTLoadAbsolute(&WWWDoc);
+#ifdef DIRED_SUPPORT
+ } else {
+ lynx_edit_mode = FALSE;
+#endif /* DIRED_SUPPORT */
}
return(status);
- } else {
+ }
+ {
if (url_type == FTP_URL_TYPE && !ftp_ok) {
HTUserMsg(FTP_DISABLED);
@@ -586,8 +729,8 @@ Try_Redirected_URL:
if ((cp=strchr(doc->address+9, '/')) != NULL &&
0==strncmp(++cp, "hGET%20/", 8)) {
StrAllocCopy(tmp, "http://");
- CTRACE(tfp, "getfile: URL '%s'\n",
- doc->address);
+ CTRACE((tfp, "getfile: URL '%s'\n",
+ doc->address));
*cp = '\0';
StrAllocCat(tmp, doc->address+9);
/*
@@ -600,8 +743,8 @@ Try_Redirected_URL:
if (strlen(cp+7) > 1)
StrAllocCat(tmp, cp+8);
StrAllocCopy(doc->address, tmp);
- CTRACE(tfp, " changed to '%s'\n",
- doc->address);
+ CTRACE((tfp, " changed to '%s'\n",
+ doc->address));
FREE(tmp);
url_type = HTTP_URL_TYPE;
}
@@ -610,11 +753,36 @@ Try_Redirected_URL:
url_type == HTTPS_URL_TYPE ||
url_type == FTP_URL_TYPE ||
url_type == CSO_URL_TYPE)
- fix_http_urls(doc);
+ fix_httplike_urls(doc, url_type);
WWWDoc.address = doc->address; /* possible reload */
#ifdef DIRED_SUPPORT
lynx_edit_mode = FALSE;
#endif /* DIRED_SUPPORT */
+#ifndef DISABLE_BIBP
+ if (url_type == BIBP_URL_TYPE) {
+ char *bibpTmp = NULL;
+ if (!BibP_bibhost_checked)
+ LYCheckBibHost();
+ if (BibP_bibhost_available) {
+ StrAllocCopy(bibpTmp, BibP_bibhost);
+ } else if (HTMainAnchor && HTAnchor_citehost(HTMainAnchor)) {
+ StrAllocCopy(bibpTmp, HTAnchor_citehost(HTMainAnchor));
+ } else {
+ StrAllocCopy(bibpTmp, BibP_globalserver);
+ }
+ if (HTMainAnchor && HTAnchor_citehost(HTMainAnchor)) {
+ StrAllocCat(bibpTmp, "bibp1.0/resolve?citehost=");
+ StrAllocCat(bibpTmp, HTAnchor_citehost(HTMainAnchor));
+ StrAllocCat(bibpTmp, "&usin=");
+ } else {
+ StrAllocCat(bibpTmp, "bibp1.0/resolve?usin=");
+ }
+ StrAllocCat(bibpTmp, doc->address+5); /* USIN after bibp: */
+ StrAllocCopy(doc->address, bibpTmp);
+ WWWDoc.address = doc->address;
+ FREE(bibpTmp);
+ }
+#endif /* !DISABLE_BIBP */
if (url_type == FILE_URL_TYPE) {
/*
@@ -632,8 +800,8 @@ Try_Redirected_URL:
char *cp1 = strstr(doc->address, "/~");
char *cp2;
- CTRACE(tfp, "getfile: URL '%s'\n",
- doc->address);
+ CTRACE((tfp, "getfile: URL '%s'\n",
+ doc->address));
*cp1 = '\0';
cp1 += 2;
StrAllocCopy(temp, doc->address);
@@ -647,39 +815,24 @@ Try_Redirected_URL:
}
StrAllocCopy(doc->address, temp);
FREE(temp);
- CTRACE(tfp, " changed to '%s'\n",
- doc->address);
+ CTRACE((tfp, " changed to '%s'\n",
+ doc->address));
WWWDoc.address = doc->address;
}
FREE(cp);
}
CTRACE_SLEEP(MessageSecs);
user_message(WWW_WAIT_MESSAGE, doc->address);
+
if (TRACE) {
#ifdef USE_SLANG
if (LYCursesON) {
- addstr("*\n");
- refresh();
+ LYaddstr("*\n");
+ LYrefresh();
}
#endif /* USE_SLANG */
- fprintf(tfp,"\n");
- }
- if ((LYNoRefererHeader == FALSE &&
- LYNoRefererForThis == FALSE) &&
- (url_type == HTTP_URL_TYPE ||
- url_type == HTTPS_URL_TYPE) &&
- (cp = strchr(HTLoadedDocumentURL(), '?')) != NULL &&
- strchr(cp, '=') != NULL) {
- /*
- * Don't send a Referer header if the URL is
- * the reply from a form with method GET, in
- * case the content has personal data (e.g.,
- * a password or credit card number) which
- * would become visible in logs. - FM
- */
- LYNoRefererForThis = TRUE;
+ CTRACE((tfp, "\n"));
}
- cp = NULL;
if (!HTLoadAbsolute(&WWWDoc)) {
/*
* Check for redirection.
@@ -716,7 +869,8 @@ Try_Redirected_URL:
FREE(temp);
}
url_type = is_url(use_this_url_instead);
- if (url_type == LYNXDOWNLOAD_URL_TYPE ||
+ if (!HTPermitRedir &&
+ (url_type == LYNXDOWNLOAD_URL_TYPE ||
url_type == LYNXEXEC_URL_TYPE ||
url_type == LYNXPROG_URL_TYPE ||
#ifdef DIRED_SUPPORT
@@ -728,6 +882,7 @@ Try_Redirected_URL:
url_type == LYNXCOMPILE_OPTS_URL_TYPE ||
url_type == LYNXHIST_URL_TYPE ||
url_type == LYNXCOOKIE_URL_TYPE ||
+ url_type == LYNXMESSAGES_URL_TYPE ||
(LYValidate &&
url_type != HTTP_URL_TYPE &&
url_type != HTTPS_URL_TYPE) ||
@@ -735,6 +890,10 @@ Try_Redirected_URL:
url_type == FILE_URL_TYPE) ||
(no_goto_lynxcgi &&
url_type == LYNXCGI_URL_TYPE) ||
+#ifndef DISABLE_BIBP
+ (no_goto_bibp &&
+ url_type == BIBP_URL_TYPE) ||
+#endif
(no_goto_cso &&
url_type == CSO_URL_TYPE) ||
(no_goto_finger &&
@@ -766,7 +925,7 @@ Try_Redirected_URL:
(no_goto_tn3270 &&
url_type == TN3270_URL_TYPE) ||
(no_goto_wais &&
- url_type == WAIS_URL_TYPE)) {
+ url_type == WAIS_URL_TYPE))) {
/*
* Some schemes are not acceptable from
* server redirections. - KW & FM
@@ -775,7 +934,7 @@ Try_Redirected_URL:
if (LYCursesON) {
_user_message(WWW_ILLEGAL_URL_MESSAGE,
use_this_url_instead);
- sleep(AlertSecs);
+ LYSleepAlert();
} else {
fprintf(stderr,
WWW_ILLEGAL_URL_MESSAGE,
@@ -795,16 +954,16 @@ Try_Redirected_URL:
* be positioned at the top of that document,
* so there's no harm done. - FM
*/
- CTRACE(tfp,
+ CTRACE((tfp,
"getfile: Adding fragment '%s' to redirection URL.\n",
- pound);
+ pound));
StrAllocCat(use_this_url_instead, pound);
}
CTRACE_SLEEP(MessageSecs);
_user_message(WWW_USING_MESSAGE,
use_this_url_instead);
- sleep(InfoSecs);
- CTRACE(tfp, "\n");
+ LYSleepInfo();
+ CTRACE((tfp, "\n"));
StrAllocCopy(doc->address,
use_this_url_instead);
FREE(use_this_url_instead);
@@ -823,19 +982,21 @@ Try_Redirected_URL:
*/
goto Try_Redirected_URL;
}
+ if (HTNoDataOK)
+ return(NULLFILE);
return(NOT_FOUND);
}
lynx_mode = NORMAL_LYNX_MODE;
/*
- * Some URL's don't actually return a document
+ * Some URL's don't actually return a document;
* compare doc->address with the document that is
- * actually loaded and return NULL if not
+ * actually loaded and return NULLFILE if not
* loaded. If www_search_result is not -1
* then this is a reference to a named anchor
- * within the same document. Do NOT return
- * NULL.
+ * within the same document; do NOT return
+ * NULLFILE in that case.
*/
{
char *pound;
@@ -923,11 +1084,14 @@ Try_Redirected_URL:
return(NULLFILE);
} else {
- /*
- * May set www_search_result.
- */
- if (pound != NULL)
+ if (pound != NULL) {
+ if (!HTMainText) /* this should not happen... */
+ return(NULLFILE); /* but it can. - kw */
+ /*
+ * May set www_search_result.
+ */
HTFindPoundSelector(pound+1);
+ }
return(NORMAL);
}
}
@@ -935,12 +1099,48 @@ Try_Redirected_URL:
} else {
CTRACE_SLEEP(MessageSecs);
HTUserMsg2(WWW_BAD_ADDR_MESSAGE, doc->address);
- CTRACE(tfp,"\n");
+ CTRACE((tfp,"\n"));
return(NULLFILE);
}
}
/*
+ * Set source mode for the next retrieval via getfile or HTreparse_document.
+ * mode == -1: force normal presentation
+ * mode == 1: force source presentation
+ * mode == 0: reset to normal if it was set to source
+ * - kw
+ */
+PUBLIC void srcmode_for_next_retrieval ARGS1(
+ int, mode)
+{
+ if (mode < 0) {
+ HTOutputFormat = WWW_PRESENT;
+#ifdef USE_PRETTYSRC
+ psrc_view = FALSE;
+#endif
+
+ } else if (mode == 0) {
+ if (HTOutputFormat == WWW_SOURCE)
+ HTOutputFormat = WWW_PRESENT;
+#ifdef USE_PRETTYSRC
+ else if (LYpsrc)
+ psrc_view = FALSE;
+#endif
+
+ } else {
+#ifdef USE_PRETTYSRC
+ if (LYpsrc)
+ psrc_view = TRUE;
+ else
+ HTOutputFormat = WWW_SOURCE;
+#else
+ HTOutputFormat = WWW_SOURCE;
+#endif
+ }
+}
+
+/*
* The user wants to select a link or page by number.
* If follow_link_number returns DO_LINK_STUFF do_link
* will be run immediately following its execution.
@@ -969,8 +1169,8 @@ PUBLIC int follow_link_number ARGS4(
BOOL want_go;
int curline = *num; /* passed in from mainloop() */
- CTRACE(tfp,"follow_link_number(%d,%d,...)\n",c,cur);
- temp[0] = c;
+ CTRACE((tfp,"follow_link_number(%d,%d,...)\n",c,cur));
+ temp[0] = (char) c;
temp[1] = '\0';
*num = -1;
_statusline(FOLLOW_LINK_NUMBER);
@@ -982,7 +1182,7 @@ PUBLIC int follow_link_number ARGS4(
return(DO_NOTHING);
}
*num = atoi(p);
- while ( isdigit(*p) )
+ while ( isdigit(UCH(*p)) )
++p;
c = *p; /* reuse c; 0 or g or p or + or - */
switch ( c ) {
@@ -992,17 +1192,22 @@ PUBLIC int follow_link_number ARGS4(
break;
default:
rel = *++p;
+ break;
case 0:
break;
}
/* don't currently check for errors typing suffix */
- CTRACE(tfp," temp=%s, *num=%d, rel='%c'\n",temp,*num,rel);
+ CTRACE((tfp," temp=%s, *num=%d, rel='%c'\n",temp,*num,rel));
/*
* Check if we had a 'p' or 'P' following the number as
* a flag for displaying the page with that number. - FM
*/
- if ( c == 'p' || c == 'P' ) {
+ if (( c == 'p' || c == 'P') && display_lines == 0) {
+ CTRACE((tfp," curline=%d, LYlines=%d, display too small!\n",
+ curline,LYlines));
+ return(PRINT_ERROR);
+ } else if ( c == 'p' || c == 'P' ) {
int nlines = HText_getNumOfLines();
int npages = ((nlines + 1) > display_lines) ?
(((nlines + 1) + (display_lines - 1))/(display_lines))
@@ -1010,8 +1215,8 @@ PUBLIC int follow_link_number ARGS4(
int curpage = ((curline + 1) > display_lines) ?
(((curline + 1) + (display_lines - 1))/(display_lines))
: 1;
- CTRACE(tfp," nlines=%d, npages=%d, curline=%d, curpage=%d\n",
- nlines,npages,curline,curpage);
+ CTRACE((tfp," nlines=%d, npages=%d, curline=%d, curpage=%d\n",
+ nlines,npages,curline,curpage));
if (*num < 1)
*num = rel ? 0 : 1;
if ( rel == '+' )
@@ -1029,7 +1234,7 @@ PUBLIC int follow_link_number ARGS4(
* Check if we want to make the link corresponding to the
* number the current link, rather than ACTIVATE-ing it.
*/
- want_go = ( c == 'g' || c == 'G' );
+ want_go = (BOOL) ( c == 'g' || c == 'G' );
/* If rel, add or subtract num from current link, or
* nearest previous/subsequent link if current link is not on screen.
@@ -1204,6 +1409,7 @@ PUBLIC BOOLEAN exec_ok ARGS3(
{
struct trust *tp;
CONST char *cp;
+ CONST char *allowed_extra_chars;
int Type = type;
/*
@@ -1255,13 +1461,12 @@ PUBLIC BOOLEAN exec_ok ARGS3(
/*
* Security: reject on strange character.
*/
+ if (Type == CGI_PATH)
+ allowed_extra_chars = " _-:./@~$&+=\t";
+ else
+ allowed_extra_chars = " _-:./@~$+=\t";
for (cp = linktext; *cp != '\0'; cp++) {
- if (!isalnum(*cp) &&
- *cp != '_' && *cp != '-' && *cp != ' ' &&
- *cp != ':' && *cp != '.' && *cp != '/' &&
- *cp != '@' && *cp != '~' && *cp != '$' &&
- *cp != '&' && *cp != '+' && *cp != '=' &&
- *cp != '\t') {
+ if (!isalnum(UCH(*cp)) && !strchr(allowed_extra_chars, *cp)) {
char *buf = 0;
HTSprintf0(&buf,
@@ -1282,13 +1487,8 @@ check_tp_for_entry:
if (strstr(command,"//") == linktext) {
command += 2;
}
-#ifdef VMS
- if (strncasecomp(source, tp->src, strlen(tp->src)) == 0 &&
- strncasecomp(command, tp->path, strlen(tp->path)) == 0)
-#else
- if (strncmp(source, tp->src, strlen(tp->src)) == 0 &&
- strncmp(command, tp->path, strlen(tp->path)) == 0)
-#endif /* VMS */
+ if (STRNADDRCOMP(source, tp->src, strlen(tp->src)) == 0 &&
+ STRNADDRCOMP(command, tp->path, strlen(tp->path)) == 0)
return TRUE;
}
tp = tp->next;
@@ -1305,15 +1505,24 @@ check_tp_for_entry:
}
#endif /* EXEC_LINKS || LYNXCGI_LINKS */
-PRIVATE int fix_http_urls ARGS1(
- document *, doc)
+PRIVATE int fix_httplike_urls ARGS2(
+ document *, doc,
+ UrlTypes, type)
{
char *slash;
/*
+ * If there's a fragment present, our simplistic methods won't
+ * work. - kw
+ */
+ if (strchr(doc->address, '#'))
+ return 0;
+
+#ifndef DISABLE_FTP
+ /*
* If it's an ftp URL with a trailing slash, trim it off.
*/
- if (!strncmp(doc->address, "ftp", 3) &&
+ if (type == FTP_URL_TYPE &&
LYIsHtmlSep(doc->address[strlen(doc->address)-1])) {
char * proxy;
char *path = HTParse(doc->address, "", PARSE_PATH|PARSE_PUNCTUATION);
@@ -1339,11 +1548,12 @@ PRIVATE int fix_http_urls ARGS1(
/*
* If we get to here, trim the trailing slash. - FM
*/
- CTRACE(tfp, "fix_http_urls: URL '%s'\n", doc->address);
+ CTRACE((tfp, "fix_httplike_urls: URL '%s'\n", doc->address));
LYTrimHtmlSep(doc->address);
- CTRACE(tfp, " changed to '%s'\n", doc->address);
+ CTRACE((tfp, " changed to '%s'\n", doc->address));
CTRACE_SLEEP(MessageSecs);
}
+#endif /* DISABLE_FTP */
/*
* If there isn't a slash besides the two at the beginning, append one.
@@ -1352,10 +1562,31 @@ PRIVATE int fix_http_urls ARGS1(
if (!LYIsHtmlSep(*(slash-1)) || *(slash-2) != ':') {
return(0);
}
+ if (type == HTTP_URL_TYPE ||
+ type == HTTPS_URL_TYPE) {
+ if ((slash-2) - strchr(doc->address, ':')) {
+ /*
+ * Turns out we were not looking at the right slash after all,
+ * there must have been more than one "://" which is valid
+ * at least for http URLs (later occurrences can be part of
+ * a query string, for example), so leave this alone, too. - kw
+ */
+ return(0);
+ }
+ if (strchr(doc->address, '?')) {
+ /*
+ * If there is a question mark that appears to be part
+ * of the hostname, don't append anything either. Leave
+ * it to HTParse to interpret the question mark as ending
+ * the hostname. - kw
+ */
+ return(0);
+ }
+ }
}
- CTRACE(tfp, "fix_http_urls: URL '%s'\n", doc->address);
+ CTRACE((tfp, "fix_httplike_urls: URL '%s'\n", doc->address));
LYAddHtmlSep(&(doc->address));
- CTRACE(tfp, " changed to '%s'\n",doc->address);
+ CTRACE((tfp, " changed to '%s'\n", doc->address));
CTRACE_SLEEP(MessageSecs);
return(1);
diff --git a/gnu/usr.bin/lynx/src/LYGetFile.h b/gnu/usr.bin/lynx/src/LYGetFile.h
index 93239e83e01..4acd0c4a515 100644
--- a/gnu/usr.bin/lynx/src/LYGetFile.h
+++ b/gnu/usr.bin/lynx/src/LYGetFile.h
@@ -7,7 +7,8 @@
#define NORMAL 1
#define NULLFILE 3
-extern BOOLEAN getfile PARAMS((document *doc));
+extern int getfile PARAMS((document *doc));
+extern void srcmode_for_next_retrieval PARAMS((int));
extern int follow_link_number PARAMS((
int c,
int cur,
@@ -16,6 +17,8 @@ extern int follow_link_number PARAMS((
extern void add_trusted PARAMS((char *str, int type));
extern BOOLEAN exec_ok PARAMS((CONST char *source, CONST char *linkpath, int type));
+extern char * WWW_Download_File;
+
/* values for follow_link_number() */
#define DO_LINK_STUFF 1
#define DO_GOTOLINK_STUFF 2
diff --git a/gnu/usr.bin/lynx/src/LYGlobalDefs.h b/gnu/usr.bin/lynx/src/LYGlobalDefs.h
index c25136ecf91..a800b37fb1a 100644
--- a/gnu/usr.bin/lynx/src/LYGlobalDefs.h
+++ b/gnu/usr.bin/lynx/src/LYGlobalDefs.h
@@ -11,13 +11,20 @@
#include <LYStructs.h>
#endif /* LYSTRUCTS_H */
-#ifdef HAVE_CONFIG_H
+/* Of the following definitions, currently unused are and could
+ be removed (at least):
+ CURRENT_KEYMAP_HELP
+*/
+#if defined(HAVE_CONFIG_H) && defined(HAVE_LYHELP_H)
#include <LYHelp.h>
#else
+#define ALT_EDIT_HELP "keystrokes/alt_edit_help.html"
+#define BASHLIKE_EDIT_HELP "keystrokes/bashlike_edit_help.html"
#define COOKIE_JAR_HELP "Lynx_users_guide.html#Cookies"
#define CURRENT_KEYMAP_HELP "keystrokes/keystroke_help.html"
#define DIRED_MENU_HELP "keystrokes/dired_help.html"
#define DOWNLOAD_OPTIONS_HELP "Lynx_users_guide.html#RemoteSource"
+#define EDIT_HELP "keystrokes/edit_help.html"
#define HISTORY_PAGE_HELP "keystrokes/history_help.html"
#define LIST_PAGE_HELP "keystrokes/follow_help.html"
#define LYNXCFG_HELP "lynx.cfg"
@@ -31,6 +38,8 @@
#include <HTChunk.h>
#endif
+#include <LYMail.h> /* to get ifdef's for mail-variables */
+
#ifdef SOCKS
extern BOOLEAN socks_flag;
#endif /* SOCKS */
@@ -39,7 +48,7 @@ extern BOOLEAN socks_flag;
extern BOOLEAN sigint;
#endif /* IGNORE_CTRL_C */
-#ifdef VMS
+#if USE_VMS_MAILER
extern char *mail_adrs;
extern BOOLEAN UseFixedRecords; /* convert binary files to FIXED 512 records */
#endif /* VMS */
@@ -65,6 +74,7 @@ extern BOOLEAN prev_lynx_edit_mode;
#ifdef OK_PERMIT
extern BOOLEAN no_change_exec_perms;
#endif /* OK_PERMIT */
+extern int LYAutoUncacheDirLists;
#endif /* DIRED_SUPPORT */
extern int HTCacheSize; /* the number of documents cached in memory */
@@ -85,7 +95,7 @@ extern char *LYCgiDocumentRoot; /* DOCUMENT_ROOT in the lynxcgi env */
/* Values to which keypad_mode can be set */
#define NUMBERS_AS_ARROWS 0
#define LINKS_ARE_NUMBERED 1
-#define LINKS_AND_FORM_FIELDS_ARE_NUMBERED 2
+#define LINKS_AND_FIELDS_ARE_NUMBERED 2
#define HIDDENLINKS_MERGE 0
#define HIDDENLINKS_SEPARATE 1
@@ -97,114 +107,140 @@ extern char *LYCgiDocumentRoot; /* DOCUMENT_ROOT in the lynxcgi env */
extern BOOLEAN LYUseNoviceLineTwo; /* True if TOGGLE_HELP is not mapped */
#define MAX_LINE 1024 /* Hope that no window is larger than this */
+#define MAX_COLS 999 /* we don't expect wider than this */
+#define DFT_COLS 80 /* ...and normally only this */
+#define DFT_ROWS 24 /* ...corresponding nominal height */
+
extern char star_string[MAX_LINE + 1]; /* from GridText.c */
#define STARS(n) \
((n) >= MAX_LINE ? star_string : &star_string[(MAX_LINE-1)] - (n))
-#define SHOW_COLOR_UNKNOWN (-1)
-#define SHOW_COLOR_NEVER 0
-#define SHOW_COLOR_OFF 1
-#define SHOW_COLOR_ON 2
-#define SHOW_COLOR_ALWAYS 3
+typedef enum {
+ SHOW_COLOR_UNKNOWN = 0
+ , SHOW_COLOR_NEVER
+ , SHOW_COLOR_OFF
+ , SHOW_COLOR_ON
+ , SHOW_COLOR_ALWAYS
+} enumShowColor;
+
extern int LYShowColor; /* Show color or monochrome? */
-extern int LYChosenShowColor; /* extended color/monochrome choice */
extern int LYrcShowColor; /* ... as read or last written */
+typedef enum {
+ MBM_OFF = 0
+ , MBM_STANDARD
+ , MBM_ADVANCED
+} enumMultiBookmarks;
+
#if !defined(NO_OPTION_FORMS) && !defined(NO_OPTION_MENU)
extern BOOLEAN LYUseFormsOptions; /* use Forms-based options menu */
#else
#define LYUseFormsOptions FALSE /* simplify ifdef'ing in LYMainLoop.c */
#endif
+
+typedef enum {
+ rateOFF = 0
+ , rateBYTES = 1
+ , rateKB
+#ifdef EXP_READPROGRESS
+ , rateEtaBYTES
+ , rateEtaKB
+#endif
+} TransferRate;
+
+#ifdef EXP_READPROGRESS
+# define rateEtaKB_maybe rateEtaKB
+#else
+# define rateEtaKB_maybe rateKB
+#endif
+
+extern BOOLEAN LYCursesON; /* start_curses()->TRUE, stop_curses()->FALSE */
+extern BOOLEAN LYJumpFileURL; /* URL from the jump file shortcuts? */
+extern BOOLEAN LYNewsPosting; /* News posting supported if TRUE */
extern BOOLEAN LYShowCursor; /* Show the cursor or hide it? */
-extern BOOLEAN verbose_img; /* display filenames of images? */
+extern BOOLEAN LYShowTransferRate;
extern BOOLEAN LYUseDefShoCur; /* Command line -show_cursor toggle */
-extern BOOLEAN LYCursesON; /* start_curses()->TRUE, stop_curses()->FALSE */
extern BOOLEAN LYUserSpecifiedURL; /* URL from a goto or document? */
-extern BOOLEAN LYJumpFileURL; /* URL from the jump file shortcuts? */
-extern BOOLEAN jump_buffer; /* TRUE if offering default shortcut */
+extern BOOLEAN LYforce_HTML_mode;
+extern BOOLEAN LYforce_no_cache;
+extern BOOLEAN LYinternal_flag; /* don't need fresh copy, was internal link */
+extern BOOLEAN LYoverride_no_cache; /* don't need fresh copy, from history */
+extern BOOLEAN LYresubmit_posts;
+extern BOOLEAN LYtrimInputFields;
+extern BOOLEAN bold_H1;
+extern BOOLEAN bold_headers;
+extern BOOLEAN bold_name_anchors;
+extern BOOLEAN case_sensitive; /* TRUE to turn on case sensitive search */
+extern BOOLEAN check_mail; /* TRUE to report unread/new mail messages */
+extern BOOLEAN child_lynx; /* TRUE to exit with an arrow */
+extern BOOLEAN dump_output_immediately;
+extern BOOLEAN emacs_keys; /* TRUE to turn on emacs-like key movement */
+extern BOOLEAN error_logging; /* TRUE to mail error messages */
+extern BOOLEAN ftp_ok;
+extern BOOLEAN ftp_passive; /* TRUE if we want to use passive mode ftp */
extern BOOLEAN goto_buffer; /* TRUE if offering default goto URL */
-extern char *LYRequestTitle; /* newdoc.title in calls to getfile() */
-extern char *jumpprompt; /* The default jump statusline prompt */
-extern int more; /* is there more document to display? */
-extern int display_lines; /* number of lines in the display */
-extern int www_search_result;
-extern char *checked_box; /* form boxes */
-extern char *unchecked_box; /* form boxes */
-extern char *checked_radio; /* form radio buttons */
-extern char *unchecked_radio; /* form radio buttons */
-extern char *empty_string;
+extern BOOLEAN is_www_index;
+extern BOOLEAN jump_buffer; /* TRUE if offering default shortcut */
+extern BOOLEAN long_url_ok;
+extern BOOLEAN lynx_mode;
+extern BOOLEAN more; /* is there more document to display? */
+extern BOOLEAN news_ok;
+extern BOOLEAN recent_sizechange;
+extern BOOLEAN rlogin_ok;
+extern BOOLEAN system_editor; /* True if locked-down editor */
+extern BOOLEAN telnet_ok;
+extern BOOLEAN verbose_img; /* display filenames of images? */
+extern BOOLEAN vi_keys; /* TRUE to turn on vi-like key movement */
+extern char *LYRequestReferer; /* Referer, may be set in getfile() */
+extern char *LYRequestTitle; /* newdoc.title in calls to getfile() */
extern char *LynxHome;
-extern char *original_dir;
-extern char *startfile;
+extern char *LynxSigFile; /* Signature file, in or off home */
+extern char *checked_box; /* form boxes */
+extern char *checked_radio; /* form radio buttons */
+extern char *empty_string;
extern char *helpfile;
extern char *helpfilepath;
+extern char *jumpprompt; /* The default jump statusline prompt */
+extern char *language;
+extern char *lynx_cfg_file; /* location of active lynx.cfg file */
+extern char *lynx_cmd_logfile; /* file to write keystroke commands, if any */
+extern char *lynx_cmd_script; /* file to read keystroke commands, if any */
+extern char *lynx_save_space;
+extern char *lynx_temp_space;
extern char *lynxjumpfile;
-extern char *lynxlistfile;
extern char *lynxlinksfile;
-extern char *x_display;
-extern char *language;
+extern char *lynxlistfile;
+extern char *original_dir;
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 *startfile;
extern char *system_mail;
extern char *system_mail_flags;
-extern char *lynx_cfg_file; /* location of active lynx.cfg file */
-extern char *lynx_temp_space;
-extern char *lynx_save_space;
-extern BOOLEAN LYforce_HTML_mode;
-extern BOOLEAN LYforce_no_cache;
-extern BOOLEAN LYoverride_no_cache; /* don't need fresh copy, from history */
-extern BOOLEAN LYinternal_flag; /* don't need fresh copy, was internal link */
-extern BOOLEAN LYresubmit_posts;
-extern BOOLEAN LYshow_kb_rate; /* show KB/sec in HTReadProgress */
-extern int user_mode; /* novice or advanced */
-extern BOOLEAN is_www_index;
-extern BOOLEAN dump_output_immediately;
+extern char *unchecked_box; /* form boxes */
+extern char *unchecked_radio; /* form radio buttons */
+extern char *x_display;
+extern int LYTransferRate; /* see enum TransferRate */
+extern int display_lines; /* number of lines in the display */
extern int dump_output_width;
-extern BOOLEAN lynx_mode;
-extern BOOLEAN bold_headers;
-extern BOOLEAN bold_H1;
-extern BOOLEAN bold_name_anchors;
-extern BOOLEAN recent_sizechange;
-extern BOOLEAN telnet_ok;
-extern BOOLEAN news_ok;
-extern BOOLEAN ftp_ok;
-extern BOOLEAN ftp_passive; /* TRUE if we want to use passive mode ftp */
-extern BOOLEAN ftp_local_passive;
-extern char *ftp_lasthost;
-extern BOOLEAN rlogin_ok;
-extern BOOLEAN system_editor; /* True if locked-down editor */
-extern BOOLEAN child_lynx; /* TRUE to exit with an arrow */
-extern BOOLEAN error_logging; /* TRUE to mail error messages */
-extern BOOLEAN check_mail; /* TRUE to report unread/new mail messages */
-extern BOOLEAN vi_keys; /* TRUE to turn on vi-like key movement */
-extern BOOLEAN emacs_keys; /* TRUE to turn on emacs-like key movement */
-extern int keypad_mode; /* is set to either NUMBERS_AS_ARROWS *
- * or LINKS_ARE_NUMBERED */
-extern BOOLEAN case_sensitive; /* TRUE to turn on case sensitive search */
-extern BOOLEAN no_inside_telnet; /* this and following are restrictions */
-extern BOOLEAN no_outside_telnet;
-extern BOOLEAN no_telnet_port;
-extern BOOLEAN no_inside_news;
-extern BOOLEAN no_outside_news;
-extern BOOLEAN no_inside_ftp;
-extern BOOLEAN no_outside_ftp;
-extern BOOLEAN no_inside_rlogin;
-extern BOOLEAN no_outside_rlogin;
-extern BOOLEAN no_suspend;
-extern BOOLEAN no_editor;
-extern BOOLEAN no_shell;
+extern int keypad_mode; /* NUMBERS_AS_ARROWS or LINKS_ARE_NUMBERED */
+extern int lynx_temp_subspace;
+extern int user_mode; /* novice or advanced */
+extern int www_search_result;
+
+extern BOOLEAN exec_frozen;
+extern BOOLEAN had_restrictions_all; /* parsed these restriction options */
+extern BOOLEAN had_restrictions_default; /* flags to note whether we have... */
extern BOOLEAN no_bookmark;
-extern BOOLEAN no_multibook;
extern BOOLEAN no_bookmark_exec;
-extern BOOLEAN no_option_save;
-extern BOOLEAN no_download;
-extern BOOLEAN no_print; /* TRUE to disable printing */
+extern BOOLEAN no_chdir;
+extern BOOLEAN no_compileopts_info;
extern BOOLEAN no_disk_save;
+extern BOOLEAN no_dotfiles;
+extern BOOLEAN no_download;
+extern BOOLEAN no_editor;
extern BOOLEAN no_exec;
-extern BOOLEAN no_lynxcgi;
-extern BOOLEAN exec_frozen;
+extern BOOLEAN no_file_url;
extern BOOLEAN no_goto;
+extern BOOLEAN no_goto_configinfo;
extern BOOLEAN no_goto_cso;
extern BOOLEAN no_goto_file;
extern BOOLEAN no_goto_finger;
@@ -223,14 +259,31 @@ extern BOOLEAN no_goto_snews;
extern BOOLEAN no_goto_telnet;
extern BOOLEAN no_goto_tn3270;
extern BOOLEAN no_goto_wais;
+extern BOOLEAN no_inside_ftp;
+extern BOOLEAN no_inside_news;
+extern BOOLEAN no_inside_rlogin;
+extern BOOLEAN no_inside_telnet; /* this and following are restrictions */
extern BOOLEAN no_jump;
-extern BOOLEAN no_file_url;
-extern BOOLEAN no_newspost;
+extern BOOLEAN no_lynxcfg_info;
+extern BOOLEAN no_lynxcfg_xinfo;
+extern BOOLEAN no_lynxcgi;
extern BOOLEAN no_mail;
-extern BOOLEAN no_dotfiles;
+extern BOOLEAN no_multibook;
+extern BOOLEAN no_newspost;
+extern BOOLEAN no_option_save;
+extern BOOLEAN no_outside_ftp;
+extern BOOLEAN no_outside_news;
+extern BOOLEAN no_outside_rlogin;
+extern BOOLEAN no_outside_telnet;
+extern BOOLEAN no_print; /* TRUE to disable printing */
+extern BOOLEAN no_shell;
+extern BOOLEAN no_suspend;
+extern BOOLEAN no_telnet_port;
extern BOOLEAN no_useragent;
+
extern BOOLEAN no_statusline;
extern BOOLEAN no_filereferer;
+extern char LYRefererWithQuery; /* 'S', 'P', or 'D' */
extern BOOLEAN local_host_only;
extern BOOLEAN override_no_download;
extern BOOLEAN show_dotfiles; /* From rcfile if no_dotfiles is false */
@@ -253,17 +306,21 @@ extern BOOLEAN nolist;
extern BOOLEAN historical_comments;
extern BOOLEAN minimal_comments;
extern BOOLEAN soft_dquotes;
+
#ifdef SOURCE_CACHE
-extern char * source_cache_filename;
-extern HTChunk * source_cache_chunk;
-extern BOOLEAN from_source_cache; /* mutable */
+extern BOOLEAN source_cache_file_error;
extern int LYCacheSource;
#define SOURCE_CACHE_NONE 0
#define SOURCE_CACHE_FILE 1
#define SOURCE_CACHE_MEMORY 2
+
+extern int LYCacheSourceForAborted;
+#define SOURCE_CACHE_FOR_ABORTED_KEEP 1
+#define SOURCE_CACHE_FOR_ABORTED_DROP 0
#endif
+
extern BOOLEAN LYCancelDownload;
-extern BOOLEAN LYRestricted;
+extern BOOLEAN LYRestricted; /* whether we had -anonymous option */
extern BOOLEAN LYValidate;
extern BOOLEAN LYPermitURL;
extern BOOLEAN enable_scrollback; /* Clear screen before displaying new page */
@@ -271,13 +328,11 @@ extern BOOLEAN keep_mime_headers; /* Include mime headers and *
* force source dump */
extern BOOLEAN no_url_redirection; /* Don't follow URL redirections */
#ifdef DISP_PARTIAL
-extern BOOLEAN display_partial; /* Display document during download */
-extern int Newline_partial; /* -//- "current" newline position */
+extern BOOLEAN display_partial; /* Display document while loading */
extern int NumOfLines_partial; /* -//- "current" number of lines */
extern int partial_threshold;
extern BOOLEAN debug_display_partial; /* show with MessageSecs delay */
extern BOOLEAN display_partial_flag; /* permanent flag, not mutable */
-extern int Newline; /* original newline position, from mainloop() */
#endif
extern char *form_post_data; /* User data for post form */
extern char *form_get_data; /* User data for get form */
@@ -288,6 +343,7 @@ extern BOOLEAN HEAD_request; /* Do a HEAD request */
extern BOOLEAN scan_for_buried_news_references;
extern BOOLEAN bookmark_start; /* Use bookmarks as startfile */
extern BOOLEAN clickable_images;
+extern BOOLEAN nested_tables;
extern BOOLEAN pseudo_inline_alts;
extern BOOLEAN crawl;
extern BOOLEAN traversal;
@@ -323,9 +379,8 @@ extern char *URLDomainSuffixes;
extern BOOLEAN startfile_ok;
extern BOOLEAN LYSelectPopups; /* Cast popups to radio buttons? */
extern BOOLEAN LYUseDefSelPop; /* Command line -popup toggle */
-extern BOOLEAN LYMultiBookmarks; /* Multi bookmark support on? */
+extern int LYMultiBookmarks; /* Multi bookmark support on? */
extern BOOLEAN LYMBMBlocked; /* Force MBM support off? */
-extern BOOLEAN LYMBMAdvanced; /* MBM statusline for ADVANCED? */
extern int LYStatusLine; /* Line for statusline() or -1 */
extern BOOLEAN LYCollapseBRs; /* Collapse serial BRs? */
extern BOOLEAN LYSetCookies; /* Process Set-Cookie headers? */
@@ -340,41 +395,146 @@ extern char *LYCookieSRejectDomains; /* domains to reject all cookies */
extern char *LYCookieSStrictCheckDomains;/* domains to check strictly */
extern char *LYCookieSLooseCheckDomains;/* domains to check loosely */
extern char *LYCookieSQueryCheckDomains;/* domains to check w/a query */
+
+#ifndef DISABLE_BIBP
+extern BOOLEAN no_goto_bibp;
+extern char *BibP_globalserver; /* global server for bibp: links */
+extern char *BibP_bibhost; /* local server for bibp: links */
+extern BOOLEAN BibP_bibhost_checked; /* bibhost has been checked */
+extern BOOLEAN BibP_bibhost_available; /* bibhost is responding */
+#endif
+
#ifdef EXP_PERSISTENT_COOKIES
extern BOOLEAN persistent_cookies;
-extern char *LYCookieFile; /* file to store cookies in */
+extern char *LYCookieFile; /* cookie read file */
+extern char *LYCookieSaveFile; /* cookie save file */
#endif /* EXP_PERSISTENT_COOKIES */
+
extern char *XLoadImageCommand; /* Default image viewer for X */
+
#ifdef USE_EXTERNALS
extern BOOLEAN no_externals; /* don't allow the use of externals */
#endif
+
extern BOOLEAN LYNoISMAPifUSEMAP; /* Omit ISMAP link if MAP present? */
extern int LYHiddenLinks;
-extern BOOL Old_DTD;
+extern int Old_DTD;
#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];
-extern FILE *LYTraceLogFP; /* Pointer for TRACE log */
-extern char *LYTraceLogPath; /* Path for TRACE log */
-extern BOOLEAN LYUseTraceLog; /* Use a TRACE log? */
-extern BOOLEAN LYSeekFragMAPinCur;
-extern BOOLEAN LYSeekFragAREAinCur;
-extern BOOLEAN LYStripDotDotURLs; /* Try to fix ../ in some URLs? */
extern BOOLEAN LYForceSSLCookiesSecure;
extern BOOLEAN LYNoCc;
+extern BOOLEAN LYNonRestartingSIGWINCH;
extern BOOLEAN LYPreparsedSource; /* Show source as preparsed? */
extern BOOLEAN LYPrependBaseToSource;
extern BOOLEAN LYPrependCharsetToSource;
extern BOOLEAN LYQuitDefaultYes;
+extern BOOLEAN LYReuseTempfiles;
+extern BOOLEAN LYSeekFragAREAinCur;
+extern BOOLEAN LYSeekFragMAPinCur;
+extern BOOLEAN LYStripDotDotURLs; /* Try to fix ../ in some URLs? */
+extern BOOLEAN LYUseBuiltinSuffixes;
+extern BOOLEAN dont_wrap_pre;
+extern char *MBM_A_subbookmark[MBM_V_MAXFILES+1];
+extern char *MBM_A_subdescript[MBM_V_MAXFILES+1];
+
+#ifdef MISC_EXP
+extern int LYNoZapKey; /* 0: off (do 'z' checking), 1: full, 2: initially */
+#endif
+
+#ifdef EXP_JUSTIFY_ELTS
+extern BOOL ok_justify;
+extern int justify_max_void_percent;
+#endif
+
+#ifndef NO_DUMP_WITH_BACKSPACES
+extern BOOLEAN with_backspaces;
+#endif
+
+#ifndef NO_LYNX_TRACE
+extern FILE *LYTraceLogFP; /* Pointer for TRACE log */
+extern char *LYTraceLogPath; /* Path for TRACE log */
+#endif
+extern BOOLEAN LYUseTraceLog; /* Use a TRACE log? */
+
+extern BOOL force_empty_hrefless_a;
+extern int connect_timeout;
+
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+extern BOOL textfields_need_activation;
+extern BOOL textfields_activation_option;
+#ifdef INACTIVE_INPUT_STYLE_VH
+extern BOOL textinput_redrawn;
+#endif
+#else
+#define textfields_need_activation FALSE
+#endif /* TEXTFIELDS_MAY_NEED_ACTIVATION */
+
+extern BOOLEAN textfield_prompt_at_left_edge;
+
#ifndef VMS
extern BOOLEAN LYNoCore;
+extern BOOLEAN restore_sigpipe_for_children;
#endif /* !VMS */
+extern int HTNoDataOK; /* HT_NO_DATA-is-ok hack */
+extern BOOLEAN FileInitAlreadyDone;
+
+#ifdef WIN_EX
+/* LYMain.c */
+extern BOOLEAN focus_window;
+extern BOOLEAN system_is_NT;
+extern char windows_drive[4];
+extern int lynx_timeout;
+#endif /* _WINDOWS */
+
+#ifdef SH_EX
+extern BOOLEAN show_cfg;
+#ifdef WIN_EX
+extern int debug_delay;
+#endif
+extern BOOLEAN no_table_center;
+#endif
+
+#if USE_BLAT_MAILER
+extern BOOLEAN mail_is_blat;
+#endif
+
+#if defined(__CYGWIN__)
+extern void cygwin_conv_to_full_win32_path(char *posix, char *dos);
+extern void cygwin_conv_to_full_posix_path(char *dos, char *posix);
+extern int setmode(int handle, int amode);
+#endif
+
+#if !defined(__CYGWIN__) && defined(__CYGWIN32__)
+#define __CYGWIN__
+
+#define cygwin_conv_to_full_win32_path(p, q) \
+ cygwin32_conv_to_full_win32_path(p, q)
+
+#define cygwin_conv_to_full_posix_path(p, q) \
+ cygwin32_conv_to_full_posix_path(p, q)
+#endif
+
+#ifdef USE_SCROLLBAR
+/* GridText.c */
+extern BOOLEAN LYsb;
+extern BOOLEAN LYsb_arrow;
+extern int LYsb_begin;
+extern int LYsb_end;
+#endif
+
+#ifdef MARK_HIDDEN_LINKS
+extern char* hidden_link_marker;
+#endif
+
+#ifdef USE_BLINK
+extern BOOLEAN term_blink_is_boldbg;
+#endif
+
#endif /* LYGLOBALDEFS_H */
diff --git a/gnu/usr.bin/lynx/src/LYHash.c b/gnu/usr.bin/lynx/src/LYHash.c
index a40f392b92d..13d2e6a152c 100644
--- a/gnu/usr.bin/lynx/src/LYHash.c
+++ b/gnu/usr.bin/lynx/src/LYHash.c
@@ -5,55 +5,32 @@
#ifdef USE_COLOR_STYLE
-#ifdef NOT_USED
-
-PUBLIC int hash_table[CSHASHSIZE]; /* 32K should be big enough */
-
-PUBLIC int hash_code_rp ARGS1(char*,string)
-{
- char* hash_ptr = string;
- int hash_tmp = 0xC00A | ((*hash_ptr) << 4);
-
- while (*hash_ptr++)
- {
- hash_tmp ^= (((*hash_ptr)<<4) ^ ((*hash_ptr)<<12));
- hash_tmp >>= 1;
- }
- return (hash_tmp % CSHASHSIZE);
-}
-#endif
-
/*
* This is the same function as the private HASH_FUNCTION() in HTAnchor.c,
* but with a different value for HASH_SIZE.
*/
-#ifdef NOT_USED
-#define HASH_SIZE 8193 /* Arbitrary prime. Memory/speed tradeoff */
-#else
#define HASH_SIZE CSHASHSIZE
-#endif
-
-#define HASH_OF(h, v) ((int)((h) * 3 + (unsigned char)(v)) % HASH_SIZE)
+#define HASH_OF(h, v) ((int)((h) * 3 + UCH(v)) % HASH_SIZE)
-PUBLIC int hash_code ARGS1 (char*, string)
+PUBLIC int hash_code ARGS1 (CONST char*, string)
{
int hash;
- unsigned char *p;
+ CONST char *p;
- for (p = (unsigned char *)string, hash = 0; *p; p++)
+ for (p = string, hash = 0; *p; p++)
hash = HASH_OF(hash,*p);
return hash;
}
-PUBLIC int hash_code_lowercase_on_fly ARGS1 (char*, string)
+PUBLIC int hash_code_lowercase_on_fly ARGS1 (CONST char*, string)
{
int hash;
- unsigned char *p;
+ CONST char *p;
- for (p = (unsigned char *)string, hash = 0; *p; p++)
- hash = HASH_OF(hash,tolower(*(char *)p));
+ for (p = string, hash = 0; *p; p++)
+ hash = HASH_OF(hash,tolower(*p));
return hash;
}
@@ -63,13 +40,13 @@ PUBLIC int hash_code_aggregate_char ARGS2 (char, c,int,hash)
return HASH_OF(hash,c);
}
-PUBLIC int hash_code_aggregate_lower_str ARGS2 (char*, string,int,hash_was)
+PUBLIC int hash_code_aggregate_lower_str ARGS2 (CONST char*, string,int,hash_was)
{
int hash;
- unsigned char *p;
+ CONST char *p;
- for (p = (unsigned char *)string, hash = hash_was ; *p; p++)
- hash = HASH_OF(hash,tolower(*(char *)p));
+ for (p = string, hash = hash_was ; *p; p++)
+ hash = HASH_OF(hash,tolower(*p));
return hash;
}
diff --git a/gnu/usr.bin/lynx/src/LYHash.h b/gnu/usr.bin/lynx/src/LYHash.h
index 7945051c3ff..80ecbece76d 100644
--- a/gnu/usr.bin/lynx/src/LYHash.h
+++ b/gnu/usr.bin/lynx/src/LYHash.h
@@ -17,35 +17,53 @@ struct _hashbucket {
typedef struct _hashbucket bucket;
#if !defined(CSHASHSIZE)
-#ifdef NOT_USED
-#define CSHASHSIZE 32768
-#else
#define CSHASHSIZE 8193
#endif
-#endif
#define NOSTYLE -1
extern bucket hashStyles[CSHASHSIZE];
-extern int hash_code PARAMS((char* string));
+extern int hash_code PARAMS((CONST char* string));
extern bucket special_bucket;/*it's used when OMIT_SCN_KEEPING is 1 in HTML.c
and LYCurses.c. */
extern bucket nostyle_bucket;/*initialized properly - to be used in CTRACE when
- NOSTYLE is passed as 'style' to curses_w_style */
+ NOSTYLE is passed as 'style' to curses_w_style */
-extern int hash_code_lowercase_on_fly PARAMS((char* string));
+extern int hash_code_lowercase_on_fly PARAMS((CONST char* string));
extern int hash_code_aggregate_char PARAMS((char c,int hash));
-extern int hash_code_aggregate_lower_str PARAMS((char* c,int hash_was));
+extern int hash_code_aggregate_lower_str PARAMS((CONST char* c, int hash_was));
+extern int s_a;
+extern int s_aedit;
+extern int s_aedit_arr;
+extern int s_aedit_pad;
+extern int s_aedit_sel;
+extern int s_alert;
+extern int s_alink;
+extern int s_curedit;
+extern int s_forw_backw;
+extern int s_normal;
+extern int s_prompt_edit;
+extern int s_prompt_edit_arr;
+extern int s_prompt_edit_pad;
+extern int s_prompt_sel;
+extern int s_status;
+extern int s_title;
+extern int s_whereis;
+extern int s_menu_frame;
+extern int s_menu_bg;
+extern int s_menu_number;
+extern int s_menu_entry;
+extern int s_menu_active;
+extern int s_menu_sb;
-#ifdef NOT_USED
-extern int hash_table[CSHASHSIZE]; /* 32K should be big enough */
+#ifdef USE_SCROLLBAR
+extern int s_sb_aa;
+extern int s_sb_bar;
+extern int s_sb_bg;
+extern int s_sb_naa;
#endif
-extern int s_alink, s_a, s_status,
- s_label, s_value, s_high,
- s_normal, s_alert, s_title,
- s_whereis;
#define CACHEW 128
#define CACHEH 64
diff --git a/gnu/usr.bin/lynx/src/LYHistory.c b/gnu/usr.bin/lynx/src/LYHistory.c
index 65c3874cd0c..b012e230387 100644
--- a/gnu/usr.bin/lynx/src/LYHistory.c
+++ b/gnu/usr.bin/lynx/src/LYHistory.c
@@ -14,7 +14,10 @@
#include <LYShowInfo.h>
#include <LYStrings.h>
#include <LYCharUtils.h>
-#include <LYGetFile.h>
+#include <LYCharSets.h>
+#ifdef DISP_PARTIAL
+#include <LYMainLoop.h>
+#endif
#ifdef DIRED_SUPPORT
#include <LYUpload.h>
@@ -23,8 +26,19 @@
#include <LYexit.h>
#include <LYLeaks.h>
+#include <HTCJK.h>
PUBLIC HTList * Visited_Links = NULL; /* List of safe popped docs. */
+PUBLIC int Visited_Links_As = VISITED_LINKS_AS_LATEST | VISITED_LINKS_REVERSE;
+PRIVATE VisitedLink *PrevVisitedLink = NULL; /* NULL on auxillary */
+PRIVATE VisitedLink *PrevActiveVisitedLink = NULL; /* Last non-auxillary */
+PRIVATE VisitedLink Latest_first;
+PRIVATE VisitedLink Latest_last;
+PRIVATE VisitedLink *Latest_tree;
+PRIVATE VisitedLink *First_tree;
+PRIVATE VisitedLink *Last_by_first;
+
+int nhist_extra;
#ifdef LY_FIND_LEAKS
/*
@@ -35,6 +49,8 @@ PRIVATE void Visited_Links_free NOARGS
VisitedLink *vl;
HTList *cur = Visited_Links;
+ PrevVisitedLink = NULL;
+ PrevActiveVisitedLink = NULL;
if (!cur)
return;
@@ -45,10 +61,27 @@ PRIVATE void Visited_Links_free NOARGS
}
HTList_delete(Visited_Links);
Visited_Links = NULL;
+ Latest_last.prev_latest = &Latest_first;
+ Latest_first.next_latest = &Latest_last;
+ Last_by_first = Latest_tree = First_tree = 0;
return;
}
#endif /* LY_FIND_LEAKS */
+#ifdef DEBUG
+PRIVATE void trace_history ARGS1(
+ CONST char *, tag)
+{
+ if (TRACE) {
+ CTRACE((tfp, "HISTORY %s %d/%d (%d extra)\n",
+ tag, nhist, MAXHIST, nhist_extra));
+ CTRACE_FLUSH(tfp);
+ }
+}
+#else
+#define trace_history(tag) /* nothing */
+#endif /* DEBUG */
+
/*
* Utility for listing visited links, making any repeated
* links the most current in the list. - FM
@@ -57,11 +90,13 @@ PUBLIC void LYAddVisitedLink ARGS1(
document *, doc)
{
VisitedLink *new;
- VisitedLink *old;
HTList *cur;
+ char *title = (doc->title ? doc->title : NO_TITLE);
- if (!(doc->address && *doc->address))
+ if (!(doc->address && *doc->address)) {
+ PrevVisitedLink = NULL;
return;
+ }
/*
* Exclude POST or HEAD replies, and bookmark, menu
@@ -70,88 +105,208 @@ PUBLIC void LYAddVisitedLink ARGS1(
if (doc->post_data || doc->isHEAD || doc->bookmark ||
(/* special url or a temp file */
(!strncmp(doc->address, "LYNX", 4) ||
- !strncmp(doc->address, "file://localhost/", 17))
- && (
- !strcmp((doc->title ? doc->title : ""), HISTORY_PAGE_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), PRINT_OPTIONS_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), DOWNLOAD_OPTIONS_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), OPTIONS_TITLE) ||
+ !strncmp(doc->address, "file://localhost/", 17)))) {
+ int related = 1; /* First approximation only */
+
+ if ( LYIsUIPage(doc->address, UIP_HISTORY) ||
+ LYIsUIPage(doc->address, UIP_VLINKS) ||
+ LYIsUIPage(doc->address, UIP_SHOWINFO) ||
+ !strncmp(doc->address, "LYNXMESSAGES:", 13) ||
+ (related = 0) ||
#ifdef DIRED_SUPPORT
- !strcmp((doc->title ? doc->title : ""), DIRED_MENU_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), UPLOAD_OPTIONS_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), PERMIT_OPTIONS_TITLE) ||
+ LYIsUIPage(doc->address, UIP_DIRED_MENU) ||
+ LYIsUIPage(doc->address, UIP_UPLOAD_OPTIONS) ||
+ LYIsUIPage(doc->address, UIP_PERMIT_OPTIONS) ||
#endif /* DIRED_SUPPORT */
- !strcmp((doc->title ? doc->title : ""), CURRENT_KEYMAP_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), LIST_PAGE_TITLE) ||
+ LYIsUIPage(doc->address, UIP_PRINT_OPTIONS) ||
+ LYIsUIPage(doc->address, UIP_DOWNLOAD_OPTIONS) ||
+ LYIsUIPage(doc->address, UIP_OPTIONS_MENU) ||
+ !strncmp(doc->address, "LYNXKEYMAP:", 11) ||
+ LYIsUIPage(doc->address, UIP_LIST_PAGE) ||
#ifdef EXP_ADDRLIST_PAGE
- !strcmp((doc->title ? doc->title : ""), ADDRLIST_PAGE_TITLE) ||
+ LYIsUIPage(doc->address, UIP_ADDRLIST_PAGE) ||
#endif
- !strcmp((doc->title ? doc->title : ""), SHOWINFO_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), STATUSLINES_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), CONFIG_DEF_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), LYNXCFG_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), COOKIE_JAR_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), VISITED_LINKS_TITLE) ||
- !strcmp((doc->title ? doc->title : ""), LYNX_TRACELOG_TITLE)))) {
- return;
+ LYIsUIPage(doc->address, UIP_CONFIG_DEF) ||
+ LYIsUIPage(doc->address, UIP_LYNXCFG) ||
+ !strncmp(doc->address, "LYNXCOOKIE:", 11) ||
+ LYIsUIPage(doc->address, UIP_TRACELOG) ) {
+ if (!related)
+ PrevVisitedLink = NULL;
+ return;
+ }
}
- if ((new = (VisitedLink *)calloc(1, sizeof(*new))) == NULL)
- outofmem(__FILE__, "LYAddVisitedLink");
- StrAllocCopy(new->address, doc->address);
- StrAllocCopy(new->title, (doc->title ? doc->title : NO_TITLE));
-
if (!Visited_Links) {
Visited_Links = HTList_new();
#ifdef LY_FIND_LEAKS
atexit(Visited_Links_free);
#endif
- HTList_addObject(Visited_Links, new);
- return;
+ Latest_last.prev_latest = &Latest_first;
+ Latest_first.next_latest = &Latest_last;
+ Latest_last.next_latest = NULL; /* Find bugs quick! */
+ Latest_first.prev_latest = NULL;
+ Last_by_first = Latest_tree = First_tree = NULL;
}
cur = Visited_Links;
- while (NULL != (old = (VisitedLink *)HTList_nextObject(cur))) {
- if (!strcmp((old->address ? old->address : ""),
- (new->address ? new->address : "")) &&
- !strcmp((old->title ? new->title : ""),
- (new->title ? new->title : ""))) {
- FREE(old->address);
- FREE(old->title);
- HTList_removeObject(Visited_Links, old);
- FREE(old);
- break;
+ while (NULL != (new = (VisitedLink *)HTList_nextObject(cur))) {
+ if (!strcmp((new->address ? new->address : ""),
+ (doc->address ? doc->address : ""))) {
+ PrevVisitedLink = PrevActiveVisitedLink = new;
+ /* Already visited. Update the last-visited info. */
+ if (new->next_latest == &Latest_last) /* optimization */
+ return;
+
+ /* Remove from "latest" chain */
+ new->prev_latest->next_latest = new->next_latest;
+ new->next_latest->prev_latest = new->prev_latest;
+
+ /* Insert at the end of the "latest" chain */
+ Latest_last.prev_latest->next_latest = new;
+ new->prev_latest = Latest_last.prev_latest;
+ new->next_latest = &Latest_last;
+ Latest_last.prev_latest = new;
+ return;
}
}
- HTList_addObject(Visited_Links, new);
+
+ if ((new = typecalloc(VisitedLink)) == NULL)
+ outofmem(__FILE__, "LYAddVisitedLink");
+ StrAllocCopy(new->address, doc->address);
+ LYformTitle(&(new->title), title);
+
+ /* First-visited chain */
+ HTList_appendObject(Visited_Links, new); /* At end */
+ new->prev_first = Last_by_first;
+ Last_by_first = new;
+
+ /* Tree structure */
+ if (PrevVisitedLink) {
+ VisitedLink *a = PrevVisitedLink;
+ VisitedLink *b = a->next_tree;
+ int l = PrevVisitedLink->level;
+
+ /* Find last on the deeper levels */
+ while (b && b->level > l)
+ a = b, b = b->next_tree;
+
+ if (!b) /* a == Latest_tree */
+ Latest_tree = new;
+ new->next_tree = a->next_tree;
+ a->next_tree = new;
+
+ new->level = PrevVisitedLink->level + 1;
+ } else {
+ if (Latest_tree)
+ Latest_tree->next_tree = new;
+ new->level = 0;
+ new->next_tree = NULL;
+ Latest_tree = new;
+ }
+ PrevVisitedLink = PrevActiveVisitedLink = new;
+ if (!First_tree)
+ First_tree = new;
+
+ /* "latest" chain */
+ Latest_last.prev_latest->next_latest = new;
+ new->prev_latest = Latest_last.prev_latest;
+ new->next_latest = &Latest_last;
+ Latest_last.prev_latest = new;
return;
}
/*
* Returns true if this is a page that we would push onto the stack if not
- * forced.
+ * forced. If docurl is NULL, only the title is considered; otherwise
+ * also check the URL whether it is (likely to be) a generated special
+ * page.
*/
-PUBLIC BOOLEAN LYwouldPush ARGS1(
- char *, title)
+PUBLIC BOOLEAN LYwouldPush ARGS2(
+ CONST char *, title,
+ CONST char *, docurl)
{
- return (!strcmp(title, HISTORY_PAGE_TITLE)
- || !strcmp(title, PRINT_OPTIONS_TITLE)
- || !strcmp(title, DOWNLOAD_OPTIONS_TITLE)
+ BOOLEAN rc = FALSE;
+
+ /*
+ * All non-pushable generated pages have URLs that begin with
+ * "file://localhost/" and end with HTML_SUFFIX. - kw
+ */
+ if (docurl) {
+ size_t ulen;
+ if (strncmp(docurl, "file://localhost/", 17) != 0 ||
+ (ulen = strlen(docurl)) <= strlen(HTML_SUFFIX) ||
+ strcmp(docurl + ulen - strlen(HTML_SUFFIX), HTML_SUFFIX) != 0) {
+ /*
+ * If it is not a local HTML file, it may be a Web page that
+ * accidentally has the same title. So return TRUE now. - kw
+ */
+ return TRUE;
+ }
+ }
+
+ if (docurl) {
+ rc = (BOOLEAN)
+ ! (LYIsUIPage(docurl, UIP_HISTORY)
+ || LYIsUIPage(docurl, UIP_PRINT_OPTIONS)
+ || LYIsUIPage(docurl, UIP_DOWNLOAD_OPTIONS)
+#ifdef DIRED_SUPPORT
+ || LYIsUIPage(docurl, UIP_DIRED_MENU)
+ || LYIsUIPage(docurl, UIP_UPLOAD_OPTIONS)
+ || LYIsUIPage(docurl, UIP_PERMIT_OPTIONS)
+#endif /* DIRED_SUPPORT */
+ );
+ } else {
+ rc = (BOOLEAN)
+ ! (!strcmp(title, HISTORY_PAGE_TITLE)
+ || !strcmp(title, PRINT_OPTIONS_TITLE)
+ || !strcmp(title, DOWNLOAD_OPTIONS_TITLE)
#ifdef DIRED_SUPPORT
- || !strcmp(title, DIRED_MENU_TITLE)
- || !strcmp(title, UPLOAD_OPTIONS_TITLE)
- || !strcmp(title, PERMIT_OPTIONS_TITLE)
+ || !strcmp(title, DIRED_MENU_TITLE)
+ || !strcmp(title, UPLOAD_OPTIONS_TITLE)
+ || !strcmp(title, PERMIT_OPTIONS_TITLE)
#endif /* DIRED_SUPPORT */
- )
- ? FALSE
- : TRUE;
+ );
+ }
+ return rc;
+}
+
+/*
+ * Free the information in the last history entry.
+ */
+PRIVATE void clean_extra NOARGS
+{
+ trace_history("clean_extra");
+ nhist += nhist_extra;
+ while (nhist_extra > 0) {
+ nhist--;
+ FREE(history[nhist].title);
+ FREE(history[nhist].address);
+ FREE(history[nhist].post_data);
+ FREE(history[nhist].post_content_type);
+ FREE(history[nhist].bookmark);
+ nhist_extra--;
+ }
+ trace_history("...clean_extra");
+}
+
+/* What is the relationship to are_different() from the mainloop?! */
+PRIVATE int are_identical ARGS2(
+ histstruct *, doc,
+ document *, doc1)
+{
+ return ( STREQ(doc1->address, doc->address)
+ && !strcmp(doc1->post_data ? doc1->post_data : "",
+ doc->post_data ? doc->post_data : "")
+ && !strcmp(doc1->bookmark ? doc1->bookmark : "",
+ doc->bookmark ? doc->bookmark : "")
+ && doc1->isHEAD == doc->isHEAD );
}
/*
* Push the current filename, link and line number onto the history list.
*/
-PUBLIC void LYpush ARGS2(
+PUBLIC int LYpush ARGS2(
document *, doc,
BOOLEAN, force_push)
{
@@ -159,7 +314,7 @@ PUBLIC void LYpush ARGS2(
* Don't push NULL file names.
*/
if (*doc->address == '\0')
- return;
+ return 0;
/*
* Check whether this is a document we
@@ -169,51 +324,62 @@ PUBLIC void LYpush ARGS2(
/*
* Don't push the history, printer, or download lists.
*/
- if (!LYwouldPush(doc->title)) {
+ if (!LYwouldPush(doc->title, doc->address)) {
if (!LYforce_no_cache)
LYoverride_no_cache = TRUE;
- return;
+ return 0;
}
}
/*
* If file is identical to one before it, don't push it.
*/
- if (nhist> 1 &&
- STREQ(history[nhist-1].address, doc->address) &&
- !strcmp(history[nhist-1].post_data ?
- history[nhist-1].post_data : "",
- doc->post_data ?
- doc->post_data : "") &&
- !strcmp(history[nhist-1].bookmark ?
- history[nhist-1].bookmark : "",
- doc->bookmark ?
- doc->bookmark : "") &&
- history[nhist-1].isHEAD == doc->isHEAD) {
+ if ( nhist > 1 && are_identical(&(history[nhist-1]), doc)) {
if (history[nhist-1].internal_link == doc->internal_link) {
/* But it is nice to have the last position remembered!
- kw */
history[nhist-1].link = doc->link;
history[nhist-1].line = doc->line;
- return;
+ return 0;
}
}
+
+ /*
+ * If file is identical to the current document, just move the pointer.
+ */
+ if ( nhist_extra >= 1 && are_identical(&(history[nhist]), doc)) {
+ history[nhist].link = doc->link;
+ history[nhist].line = doc->line;
+ nhist_extra--;
+ nhist++;
+ trace_history("LYpush: just move the cursor");
+ return 1;
+ }
+
+ clean_extra();
+
/*
* OK, push it if we have stack space.
*/
if (nhist < MAXHIST) {
history[nhist].link = doc->link;
history[nhist].line = doc->line;
+
history[nhist].title = NULL;
- StrAllocCopy(history[nhist].title, doc->title);
+ LYformTitle(&(history[nhist].title), doc->title);
+
history[nhist].address = NULL;
StrAllocCopy(history[nhist].address, doc->address);
+
history[nhist].post_data = NULL;
StrAllocCopy(history[nhist].post_data, doc->post_data);
+
history[nhist].post_content_type = NULL;
StrAllocCopy(history[nhist].post_content_type, doc->post_content_type);
+
history[nhist].bookmark = NULL;
StrAllocCopy(history[nhist].bookmark, doc->bookmark);
+
history[nhist].isHEAD = doc->isHEAD;
history[nhist].safe = doc->safe;
@@ -293,25 +459,26 @@ PUBLIC void LYpush ARGS2(
history[nhist].intern_seq_start =
history[nhist-1].intern_seq_start >= 0 ?
history[nhist-1].intern_seq_start : nhist-1;
- CTRACE(tfp, "\nLYpush: pushed as internal link, OK\n");
+ CTRACE((tfp, "\nLYpush: pushed as internal link, OK\n"));
}
}
}
if (!history[nhist].internal_link) {
- CTRACE(tfp, "\nLYpush: push as internal link requested, %s\n",
- "but didn't check out!");
+ CTRACE((tfp, "\nLYpush: push as internal link requested, %s\n",
+ "but didn't check out!"));
}
}
- CTRACE(tfp, "\nLYpush[%d]: address:%s\n title:%s\n",
- nhist, doc->address, doc->title);
+ CTRACE((tfp, "\nLYpush[%d]: address:%s\n title:%s\n",
+ nhist, doc->address, doc->title));
nhist++;
} else {
if (LYCursesON) {
HTAlert(MAXHIST_REACHED);
}
- CTRACE(tfp, "\nLYpush: MAXHIST reached for:\n address:%s\n title:%s\n",
- doc->address, doc->title);
+ CTRACE((tfp, "\nLYpush: MAXHIST reached for:\n address:%s\n title:%s\n",
+ doc->address, doc->title));
}
+ return 1;
}
/*
@@ -321,6 +488,7 @@ PUBLIC void LYpop ARGS1(
document *, doc)
{
if (nhist > 0) {
+ clean_extra();
nhist--;
doc->link = history[nhist].link;
doc->line = history[nhist].line;
@@ -339,14 +507,69 @@ PUBLIC void LYpop ARGS1(
doc->internal_link = history[nhist].internal_link;
#ifdef DISP_PARTIAL
/* assume we pop the 'doc' to show it soon... */
- Newline_partial = doc->line; /* reinitialize */
+ LYSetNewline(doc->line); /* reinitialize */
#endif /* DISP_PARTIAL */
- CTRACE(tfp, "LYpop[%d]: address:%s\n title:%s\n",
- nhist, doc->address, doc->title);
+ CTRACE((tfp, "LYpop[%d]: address:%s\n title:%s\n",
+ nhist, doc->address, doc->title));
+ }
+}
+
+/*
+ * Move to the previous filename, link and line number from the history list.
+ */
+PUBLIC void LYhist_prev ARGS1(
+ document *, doc)
+{
+ trace_history("LYhist_prev");
+ if (nhist > 0 && (nhist_extra || nhist < MAXHIST)) {
+ nhist--;
+ nhist_extra++;
+ LYpop_num(nhist, doc);
+ trace_history("...LYhist_prev");
+ }
+}
+
+/*
+ * Called before calling LYhist_prev().
+ */
+PUBLIC void LYhist_prev_register ARGS1(
+ document *, doc)
+{
+ trace_history("LYhist_prev_register");
+ if (nhist > 1) {
+ if (nhist_extra) { /* Make something to return back */
+ /* Store the new position */
+ history[nhist].link = doc->link;
+ history[nhist].line = doc->line;
+ } else if (nhist < MAXHIST) { /* push will fail */
+ if (LYpush(doc, 0)) {
+ nhist--;
+ nhist_extra++;
+ }
+ }
+ trace_history("...LYhist_prev_register");
}
}
/*
+ * Move to the next filename, link and line number from the history list.
+ */
+PUBLIC int LYhist_next ARGS2(
+ document *, doc,
+ document *, newdoc)
+{
+ if (nhist_extra <= 1) /* == 1 when we are the last one */
+ return 0;
+ /* Store the new position */
+ history[nhist].link = doc->link;
+ history[nhist].line = doc->line;
+ nhist++;
+ nhist_extra--;
+ LYpop_num(nhist, newdoc);
+ return 1;
+}
+
+/*
* Pop the specified hist entry, link and line number from the history
* list but don't actually remove the entry, just return it.
* (This procedure is badly named :)
@@ -355,7 +578,7 @@ PUBLIC void LYpop_num ARGS2(
int, number,
document *, doc)
{
- if (number >= 0 && nhist > number) {
+ if (number >= 0 && nhist + nhist_extra > number) {
doc->link = history[number].link;
doc->line = history[number].line;
StrAllocCopy(doc->title, history[number].title);
@@ -368,7 +591,7 @@ PUBLIC void LYpop_num ARGS2(
doc->internal_link = history[number].internal_link; /* ?? */
#ifdef DISP_PARTIAL
/* assume we pop the 'doc' to show it soon... */
- Newline_partial = doc->line; /* reinitialize */
+ LYSetNewline(doc->line); /* reinitialize */
#endif /* DISP_PARTIAL */
}
}
@@ -379,13 +602,18 @@ PUBLIC void LYpop_num ARGS2(
PUBLIC int showhistory ARGS1(
char **, newfile)
{
- static char tempfile[LY_MAXPATH];
+ static char tempfile[LY_MAXPATH] = "\0";
char *Title = NULL;
int x = 0;
FILE *fp0;
- LYRemoveTemp(tempfile);
- if ((fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w")) == NULL) {
+ if (LYReuseTempfiles) {
+ fp0 = LYOpenTempRewrite(tempfile, HTML_SUFFIX, "w");
+ } else {
+ LYRemoveTemp(tempfile);
+ fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w");
+ }
+ if (fp0 == NULL) {
HTAlert(CANNOT_OPEN_TEMP);
return(-1);
}
@@ -397,13 +625,13 @@ PUBLIC int showhistory ARGS1(
BeginInternalPage(fp0, HISTORY_PAGE_TITLE, HISTORY_PAGE_HELP);
- fprintf(fp0, "<tr align=right> <a href=\"LYNXMESSAGES:\">[%s]</a> </tr>\n",
+ fprintf(fp0, "<p align=right> <a href=\"LYNXMESSAGES:\">[%s]</a>\n",
STATUSLINES_TITLE);
fprintf(fp0, "<pre>\n");
fprintf(fp0, "<em>%s</em>\n", gettext("You selected:"));
- for (x = nhist-1; x >= 0; x--) {
+ for (x = nhist + nhist_extra - 1; x >= 0; x--) {
/*
* The number of the document in the hist stack,
* its title in a link, and its address. - FM
@@ -460,17 +688,26 @@ PUBLIC BOOLEAN historytarget ARGS1(
BOOLEAN treat_as_intern = FALSE;
if ((!newdoc || !newdoc->address) ||
- strlen(newdoc->address) < 10 || !isdigit(*(newdoc->address+9)))
+ strlen(newdoc->address) < 10 || !isdigit(UCH(*(newdoc->address+9))))
return(FALSE);
- if ((number = atoi(newdoc->address+9)) > nhist || number < 0)
+ if ((number = atoi(newdoc->address+9)) > nhist + nhist_extra || number < 0)
return(FALSE);
/*
* Optimization: assume we came from the History Page,
* so never return back - always a new version next time.
+ * But check first whether HTMainText is really the History
+ * Page document - in some obscure situations this may not be
+ * the case. If HTMainText seems to be a History Page document,
+ * also check that it really hasn't been pushed. - LP, kw
*/
- HTuncache_current_document(); /* don't waste the cache */
+ if (HTMainText && nhist > 0 &&
+ !strcmp(HTLoadedDocumentTitle(), HISTORY_PAGE_TITLE) &&
+ LYIsUIPage3(HTLoadedDocumentURL(), UIP_HISTORY, 0) &&
+ strcmp(HTLoadedDocumentURL(), history[nhist-1].address)) {
+ HTuncache_current_document(); /* don't waste the cache */
+ }
LYpop_num(number, newdoc);
if (((newdoc->internal_link &&
@@ -526,46 +763,117 @@ PUBLIC BOOLEAN historytarget ARGS1(
}
/*
- * This procedure outputs the Visited Links
- * list into a temporary file. - FM
+ * This procedure outputs the Visited Links list into a temporary file. - FM
+ * Returns links's number to make active (1-based), or 0 if not required.
*/
PUBLIC int LYShowVisitedLinks ARGS1(
char **, newfile)
{
- static char tempfile[LY_MAXPATH];
+ static char tempfile[LY_MAXPATH] = "\0";
char *Title = NULL;
char *Address = NULL;
- int x;
+ int x, tot;
FILE *fp0;
VisitedLink *vl;
HTList *cur = Visited_Links;
+ int offset;
+ int ret = 0;
+ char *arrow, *post_arrow;
if (!cur)
return(-1);
- LYRemoveTemp(tempfile);
- if ((fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w")) == NULL) {
+ if (LYReuseTempfiles) {
+ fp0 = LYOpenTempRewrite(tempfile, HTML_SUFFIX, "w");
+ } else {
+ LYRemoveTemp(tempfile);
+ fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w");
+ }
+ if (fp0 == NULL) {
HTAlert(CANNOT_OPEN_TEMP);
return(-1);
}
LYLocalFileToURL(newfile, tempfile);
+ LYRegisterUIPage(*newfile, UIP_VLINKS);
LYforce_HTML_mode = TRUE; /* force this file to be HTML */
LYforce_no_cache = TRUE; /* force this file to be new */
BeginInternalPage(fp0, VISITED_LINKS_TITLE, VISITED_LINKS_HELP);
+ fprintf(fp0, "<form action=\"LYNXOPTIONS:\" method=\"post\">\n");
+ fprintf(fp0, "<select name=\"visited_pages_type\">\n");
+ fprintf(fp0, " <option value=\"first_visited\" %s>Sort By First Visited\n",
+ (Visited_Links_As == VISITED_LINKS_AS_FIRST_V ? "selected" : ""));
+ fprintf(fp0, " <option value=\"first_visited_reversed\" %s>Reverse Sort By First Visited\n",
+ (Visited_Links_As == (VISITED_LINKS_AS_FIRST_V|VISITED_LINKS_REVERSE) ? "selected" : ""));
+ fprintf(fp0, " <option value=\"visit_tree\" %s>View As Visit Tree\n",
+ (Visited_Links_As == VISITED_LINKS_AS_TREE ? "selected" : ""));
+ fprintf(fp0, " <option value=\"last_visited\" %s>Sort By Last Visited\n",
+ (Visited_Links_As == VISITED_LINKS_AS_LATEST ? "selected" : ""));
+ fprintf(fp0, " <option value=\"last_visited_reversed\" %s>Reverse Sort By Last Visited\n",
+ (Visited_Links_As == (VISITED_LINKS_AS_LATEST|VISITED_LINKS_REVERSE)
+ ? "selected" : ""));
+ fprintf(fp0, "</select>\n");
+ fprintf(fp0, "<input type=\"submit\" value=\"Accept Changes\">\n");
+ fprintf(fp0, "</form>\n");
+ fprintf(fp0, "<P>\n");
+
fprintf(fp0, "<pre>\n");
fprintf(fp0, "<em>%s</em>\n",
gettext("You visited (POSTs, bookmark, menu and list files excluded):"));
- x = HTList_count(Visited_Links);
- while (NULL != (vl = (VisitedLink *)HTList_nextObject(cur))) {
+ if (Visited_Links_As & VISITED_LINKS_REVERSE)
+ tot = x = HTList_count(Visited_Links);
+ else
+ tot = x = -1;
+
+ if (Visited_Links_As & VISITED_LINKS_AS_TREE) {
+ vl = First_tree;
+ } else if (Visited_Links_As & VISITED_LINKS_AS_LATEST) {
+ if (Visited_Links_As & VISITED_LINKS_REVERSE)
+ vl = Latest_last.prev_latest;
+ else
+ vl = Latest_first.next_latest;
+ if (vl == &Latest_last || vl == &Latest_first)
+ vl = NULL;
+ } else {
+ if (Visited_Links_As & VISITED_LINKS_REVERSE)
+ vl = Last_by_first;
+ else
+ vl = (VisitedLink *)HTList_nextObject(cur);
+ }
+ while (NULL != vl) {
/*
* The number of the document (most recent highest),
* its title in a link, and its address. - FM
*/
- x--;
+ post_arrow = arrow = "";
+ if (Visited_Links_As & VISITED_LINKS_REVERSE)
+ x--;
+ else
+ x++;
+ if (vl == PrevActiveVisitedLink) {
+ if (Visited_Links_As & VISITED_LINKS_REVERSE)
+ ret = tot - x + 2;
+ else
+ ret = x + 3;
+ }
+ if (vl == PrevActiveVisitedLink) {
+ post_arrow = "<A NAME=current></A>";
+ /* Otherwise levels 0 and 1 look the same when with arrow: */
+ arrow = (vl->level && (Visited_Links_As & VISITED_LINKS_AS_TREE))
+ ? "==>" : "=>";
+ StrAllocCat(*newfile, "#current");
+ }
+ if (Visited_Links_As & VISITED_LINKS_AS_TREE) {
+ offset = 2 * vl->level;
+ if (offset > 24)
+ offset = (offset + 24)/2;
+ if (offset > LYcols * 3/4)
+ offset = LYcols * 3/4;
+ } else
+ offset = (x > 99 ? 0 : x < 10 ? 2 : 1);
if (vl->title != NULL && *vl->title != '\0') {
StrAllocCopy(Title, vl->title);
LYEntify(&Title, TRUE);
@@ -580,13 +888,13 @@ PUBLIC int LYShowVisitedLinks ARGS1(
StrAllocCopy(Address, vl->address);
LYEntify(&Address, FALSE);
fprintf(fp0,
- "%s<em>%d</em>. <tab id=t%d><a href=\"%s\">%s</a>\n",
- (x > 99 ? "" : x < 10 ? " " : " "),
+ "%-*s%s<em>%d</em>. <tab id=t%d><a href=\"%s\">%s</a>\n",
+ offset, arrow, post_arrow,
x, x, Address, Title);
} else {
fprintf(fp0,
- "%s<em>%d</em>. <tab id=t%d><em>%s</em>\n",
- (x > 99 ? "" : x < 10 ? " " : " "),
+ "%-*s%s<em>%d</em>. <tab id=t%d><em>%s</em>\n",
+ offset, arrow, post_arrow,
x, x, Title);
}
if (Address != NULL) {
@@ -595,6 +903,21 @@ PUBLIC int LYShowVisitedLinks ARGS1(
}
fprintf(fp0, "<tab to=t%d>%s\n", x,
((Address != NULL) ? Address : gettext("(no address)")));
+ if (Visited_Links_As & VISITED_LINKS_AS_TREE)
+ vl = vl->next_tree;
+ else if (Visited_Links_As & VISITED_LINKS_AS_LATEST) {
+ if (Visited_Links_As & VISITED_LINKS_REVERSE)
+ vl = vl->prev_latest;
+ else
+ vl = vl->next_latest;
+ if (vl == &Latest_last || vl == &Latest_first)
+ vl = NULL;
+ } else {
+ if (Visited_Links_As & VISITED_LINKS_REVERSE)
+ vl = vl->prev_first;
+ else
+ vl = (VisitedLink *)HTList_nextObject(cur);
+ }
}
fprintf(fp0,"</pre>\n");
EndInternalPage(fp0);
@@ -602,7 +925,7 @@ PUBLIC int LYShowVisitedLinks ARGS1(
LYCloseTempFP(fp0);
FREE(Title);
FREE(Address);
- return(0);
+ return(ret);
}
@@ -632,7 +955,7 @@ PRIVATE void to_stack ARGS1(char *, str)
/*
* Cycle buffer:
*/
- if (topOfStack == STATUSBUFSIZE) {
+ if (topOfStack >= STATUSBUFSIZE) {
topOfStack = 0;
}
@@ -648,67 +971,12 @@ PRIVATE void to_stack ARGS1(char *, str)
atexit(free_messages_stack);
}
#endif
-}
-
-
-/*
- * Status line messages list, LYNXMESSAGES:/ internal page,
- * called from getfile() cyrcle.
- */
-PUBLIC int LYshow_statusline_messages ARGS1(
- document *, newdoc)
-{
- static char tempfile[LY_MAXPATH];
- static char *info_url;
- DocAddress WWWDoc; /* need on exit */
- FILE *fp0;
- int i;
-
- LYRemoveTemp(tempfile);
- if ((fp0 = LYOpenTemp (tempfile, HTML_SUFFIX, "w")) == 0) {
- HTAlert(CANNOT_OPEN_TEMP);
- return(NOT_FOUND);
- }
- LYLocalFileToURL(&info_url, tempfile);
-
- LYforce_no_cache = TRUE; /* don't cache this doc */
-
- BeginInternalPage (fp0, STATUSLINES_TITLE, NULL);
- fprintf(fp0, "<pre>\n");
- fprintf(fp0, "<ol>\n");
-
- /* print messages in reverse order: */
- i = topOfStack;
- while (--i >= 0) {
- if (buffstack[i] != NULL)
- fprintf(fp0, "<li> <em>%s</em>\n", buffstack[i]);
- }
- i = STATUSBUFSIZE;
- while (--i >= topOfStack) {
- if (buffstack[i] != NULL)
- fprintf(fp0, "<li> <em>%s</em>\n", buffstack[i]);
+ if (topOfStack >= STATUSBUFSIZE) {
+ topOfStack = 0;
}
-
- fprintf(fp0, "</ol>\n");
- fprintf(fp0, "</pre>\n");
- EndInternalPage(fp0);
- LYCloseTempFP(fp0);
-
-
- /* exit to getfile() cyrcle */
- StrAllocCopy(newdoc->address, info_url);
- WWWDoc.address = newdoc->address;
- WWWDoc.post_data = newdoc->post_data;
- WWWDoc.post_content_type = newdoc->post_content_type;
- WWWDoc.bookmark = newdoc->bookmark;
- WWWDoc.isHEAD = newdoc->isHEAD;
- WWWDoc.safe = newdoc->safe;
-
- if (!HTLoadAbsolute(&WWWDoc))
- return(NOT_FOUND);
- return(NORMAL);
}
+
/*
* Dump statusline messages into the buffer.
* Called from mainloop() when exit immediately with an error:
@@ -726,7 +994,7 @@ PUBLIC void LYstatusline_messages_on_exit ARGS1(
* probably a single message but let's do it.
*/
i = topOfStack - 1;
- while (++i <= STATUSBUFSIZE) {
+ while (++i < STATUSBUFSIZE) {
if (buffstack[i] != NULL) {
StrAllocCat(*buf, buffstack[i]);
StrAllocCat(*buf, "\n");
@@ -749,7 +1017,7 @@ PUBLIC void LYstore_message2 ARGS2(
if (message != NULL) {
char *temp = NULL;
- HTSprintf(&temp, message, (argument == 0) ? "" : argument);
+ HTSprintf0(&temp, message, (argument == 0) ? "" : argument);
to_stack(temp);
}
}
@@ -763,3 +1031,108 @@ PUBLIC void LYstore_message ARGS1(
to_stack(temp);
}
}
+
+/* LYLoadMESSAGES
+** --------------
+** Create a text/html stream with a list of recent statusline messages.
+** LYNXMESSAGES:/ internal page.
+** [implementation based on LYLoadKeymap()].
+*/
+
+struct _HTStream
+{
+ HTStreamClass * isa;
+};
+
+PRIVATE int LYLoadMESSAGES ARGS4 (
+ CONST char *, arg GCC_UNUSED,
+ HTParentAnchor *, anAnchor,
+ HTFormat, format_out,
+ HTStream*, sink)
+{
+ HTFormat format_in = WWW_HTML;
+ HTStream *target = NULL;
+ char *buf = NULL;
+ int nummsg = 0;
+
+ int i;
+ char *temp = NULL;
+
+ i = STATUSBUFSIZE;
+ while (--i >= 0) {
+ if (buffstack[i] != NULL)
+ nummsg++;
+ }
+
+ /*
+ * Set up the stream. - FM
+ */
+ target = HTStreamStack(format_in, format_out, sink, anAnchor);
+
+ if (!target || target == NULL) {
+ HTSprintf0(&buf, CANNOT_CONVERT_I_TO_O,
+ HTAtom_name(format_in), HTAtom_name(format_out));
+ HTAlert(buf);
+ FREE(buf);
+ return(HT_NOT_LOADED);
+ }
+ anAnchor->no_cache = TRUE;
+
+#define PUTS(buf) (*target->isa->put_block)(target, buf, strlen(buf))
+
+ HTSprintf0(&buf, "<html>\n<head>\n");
+ PUTS(buf);
+ /*
+ * This page is a list of messages in display character set.
+ */
+ HTSprintf0(&buf, "<META %s content=\"text/html;charset=%s\">\n",
+ "http-equiv=\"content-type\"",
+ LYCharSet_UC[current_char_set].MIMEname);
+ PUTS(buf);
+ HTSprintf0(&buf, "<title>%s</title>\n</head>\n<body>\n",
+ STATUSLINES_TITLE);
+ PUTS(buf);
+
+ if (nummsg != 0) {
+ HTSprintf0(&buf, "<ol>\n");
+ PUTS(buf);
+ /* print messages in reverse order: */
+ i = topOfStack;
+ while (--i >= 0) {
+ if (buffstack[i] != NULL) {
+ StrAllocCopy(temp, buffstack[i]);
+ LYEntify(&temp, TRUE);
+ HTSprintf0(&buf, "<li value=%d> <em>%s</em>\n", nummsg, temp);
+ nummsg--;
+ PUTS(buf);
+ }
+ }
+ i = STATUSBUFSIZE;
+ while (--i >= topOfStack) {
+ if (buffstack[i] != NULL) {
+ StrAllocCopy(temp, buffstack[i]);
+ LYEntify(&temp, TRUE);
+ HTSprintf0(&buf, "<li value=%d> <em>%s</em>\n", nummsg, temp);
+ nummsg--;
+ PUTS(buf);
+ }
+ }
+ FREE(temp);
+ HTSprintf0(&buf, "</ol>\n</body>\n</html>\n");
+ } else {
+ HTSprintf0(&buf, "<p>%s\n</body>\n</html>\n",
+ gettext("(No messages yet)"));
+ }
+ PUTS(buf);
+
+ (*target->isa->_free)(target);
+ FREE(buf);
+ return(HT_LOADED);
+}
+
+#ifdef GLOBALDEF_IS_MACRO
+#define _LYMESSAGES_C_GLOBALDEF_1_INIT { "LYNXMESSAGES", LYLoadMESSAGES, 0}
+GLOBALDEF (HTProtocol,LYLynxStatusMessages,_LYMESSAGES_C_GLOBALDEF_1_INIT);
+#else
+GLOBALDEF PUBLIC HTProtocol LYLynxStatusMessages = {"LYNXMESSAGES", LYLoadMESSAGES, 0};
+#endif /* GLOBALDEF_IS_MACRO */
diff --git a/gnu/usr.bin/lynx/src/LYHistory.h b/gnu/usr.bin/lynx/src/LYHistory.h
index 751568062c5..5d061a24b2d 100644
--- a/gnu/usr.bin/lynx/src/LYHistory.h
+++ b/gnu/usr.bin/lynx/src/LYHistory.h
@@ -5,18 +5,21 @@
#include <LYStructs.h>
#endif /* LYSTRUCTS_H */
-extern BOOLEAN LYwouldPush PARAMS((char *title));
+extern BOOLEAN LYwouldPush PARAMS((CONST char *title, CONST char *docurl));
extern BOOLEAN historytarget PARAMS((document *newdoc));
extern int LYShowVisitedLinks PARAMS((char **newfile));
+extern int LYhist_next PARAMS((document *doc, document *newdoc));
+extern int LYpush PARAMS((document *doc, BOOLEAN force_push));
extern int showhistory PARAMS((char **newfile));
extern void LYAddVisitedLink PARAMS((document *doc));
+extern void LYhist_prev PARAMS((document *doc));
+extern void LYhist_prev_register PARAMS((document *doc));
extern void LYpop PARAMS((document *doc));
extern void LYpop_num PARAMS((int number, document *doc));
-extern void LYpush PARAMS((document *doc, BOOLEAN force_push));
-
-extern void LYstore_message2 PARAMS((CONST char *message, CONST char *argument));
-extern void LYstore_message PARAMS((CONST char *message));
-extern int LYshow_statusline_messages PARAMS((document *newdoc));
extern void LYstatusline_messages_on_exit PARAMS((char **buf));
+extern void LYstore_message PARAMS((CONST char *message));
+extern void LYstore_message2 PARAMS((CONST char *message, CONST char *argument));
+
+extern int nhist_extra;
#endif /* LYHISTORY_H */
diff --git a/gnu/usr.bin/lynx/src/LYJump.c b/gnu/usr.bin/lynx/src/LYJump.c
index 5b185d0c756..478ddfc9f4a 100644
--- a/gnu/usr.bin/lynx/src/LYJump.c
+++ b/gnu/usr.bin/lynx/src/LYJump.c
@@ -9,6 +9,10 @@
#include <LYLeaks.h>
+#ifdef _WINDOWS
+#include <stdlib.h> /* bsearch() */
+#endif
+
#ifdef VMS
#include <fab.h>
#endif /* VMS */
@@ -53,16 +57,14 @@ PUBLIC void LYJumpTable_free NOARGS
*/
PUBLIC void LYAddJumpShortcut ARGS2(HTList *, historyp, char *,shortcut)
{
- char *new;
+ char *new = NULL;
char *old;
HTList *cur = historyp;
if (!historyp || !(shortcut && *shortcut))
return;
- if ((new = (char *)calloc(1, (strlen(shortcut) + 1))) == NULL)
- outofmem(__FILE__, "LYAddJumpShortcut");
- strcpy(new, shortcut);
+ StrAllocCopy(new, shortcut);
while (NULL != (old = (char *)HTList_nextObject(cur))) {
if (!strcmp(old, new)) {
@@ -84,7 +86,7 @@ PUBLIC BOOL LYJumpInit ARGS1 (char *, config)
/*
* Create a JumpTable structure.
*/
- jtp = (struct JumpTable *) calloc(1, sizeof(*jtp));
+ jtp = typecalloc(struct JumpTable);
if (jtp == NULL) {
outofmem(__FILE__, "LYJumpInit");
}
@@ -144,7 +146,7 @@ PUBLIC BOOL LYJumpInit ARGS1 (char *, config)
StrAllocCopy(JThead->msg, jumpprompt);
if (!jumpfile)
StrAllocCopy(jumpfile, JThead->file);
- jtp = (struct JumpTable *) calloc(1, sizeof(*jtp));
+ jtp = typecalloc(struct JumpTable);
if (jtp == NULL) {
outofmem(__FILE__, "LYJumpInit");
}
@@ -155,7 +157,7 @@ PUBLIC BOOL LYJumpInit ARGS1 (char *, config)
* Complete the initialization of config.
*/
if (cp) {
- jtp->key = remap(cp, "JUMP"); /* key is present, (re)map it */
+ jtp->key = remap(cp, "JUMP", FALSE); /* key is present, (re)map it */
cp = strtok(NULL, "\n"); /* get prompt, if present */
if (cp && *cp)
StrAllocCopy(jtp->msg, cp); /* prompt is present, load it */
@@ -211,11 +213,11 @@ PUBLIC char *LYJump ARGS1(int, key)
ShortcutTotal = (jtp->history ? HTList_count(jtp->history) : 0);
if (jump_buffer && *buf) {
- recall = ((ShortcutTotal > 1) ? RECALL : NORECALL);
+ recall = ((ShortcutTotal > 1) ? RECALL_URL : NORECALL);
ShortcutNum = 0;
FirstShortcutRecall = FALSE;
} else {
- recall = ((ShortcutTotal >= 1) ? RECALL : NORECALL);
+ recall = ((ShortcutTotal >= 1) ? RECALL_URL : NORECALL);
ShortcutNum = ShortcutTotal;
FirstShortcutRecall = TRUE;
}
@@ -255,11 +257,8 @@ check_recall:
HTUserMsg(RANDOM_URL_DISALLOWED);
return NULL;
}
- StrAllocCopy(temp, "Go ");
- StrAllocCat(temp, bp);
- strcpy(buf, temp);
- FREE(temp);
- return(bp=buf);
+ sprintf(buf, "Go %.*s", (int)sizeof(buf) - 4, bp);
+ return (bp = buf);
}
#endif /* PERMIT_GOTO_FROM_JUMP */
@@ -283,7 +282,7 @@ check_recall:
ShortcutNum = 0;
if ((cp=(char *)HTList_objectAt(jtp->history,
ShortcutNum)) != NULL) {
- strcpy(buf, cp);
+ LYstrncpy(buf, cp, sizeof(buf)-1);
if (jump_buffer && jtp->shortcut &&
!strcmp(buf, jtp->shortcut)) {
_statusline(EDIT_CURRENT_SHORTCUT);
@@ -323,7 +322,7 @@ check_recall:
ShortcutNum = ShortcutTotal - 1;
if ((cp=(char *)HTList_objectAt(jtp->history,
ShortcutNum)) != NULL) {
- strcpy(buf, cp);
+ LYstrncpy(buf, cp, sizeof(buf)-1);
if (jump_buffer && jtp->shortcut &&
!strcmp(buf, jtp->shortcut)) {
_statusline(EDIT_CURRENT_SHORTCUT);
@@ -350,7 +349,7 @@ check_recall:
jtp->nel, sizeof(JumpDatum), LYCompare);
if (!found) {
user_message("Unknown target '%s'", buf);
- sleep(AlertSecs);
+ LYSleepAlert();
}
StrAllocCopy(jtp->shortcut, bp);
@@ -379,7 +378,7 @@ PRIVATE unsigned LYRead_Jumpfile ARGS1(struct JumpTable *,jtp)
}
/* allocate storage to read entire file */
- if ((mp=(char *)calloc(1, st.st_size + 1)) == NULL) {
+ if ((mp= typecallocn(char, st.st_size + 1)) == NULL) {
HTAlert(OUTOF_MEM_FOR_JUMP_FILE);
return 0;
}
@@ -423,8 +422,9 @@ PRIVATE unsigned LYRead_Jumpfile ARGS1(struct JumpTable *,jtp)
FREE(mp);
return 0;
} else
- while(fgets(mp+strlen(mp), 1024, fp) != NULL) ;
- fclose(fp);
+ while(fgets(mp+strlen(mp), 1024, fp) != NULL)
+ ;
+ LYCloseInput(fp);
}
#endif /* VMS */
diff --git a/gnu/usr.bin/lynx/src/LYJustify.h b/gnu/usr.bin/lynx/src/LYJustify.h
new file mode 100644
index 00000000000..61de5df187c
--- /dev/null
+++ b/gnu/usr.bin/lynx/src/LYJustify.h
@@ -0,0 +1,79 @@
+/* Justification for lynx - implemented by Vlad Harchev <hvv@hippo.ru>
+ 11 July 1999
+*/
+
+#ifndef LYJUSTIFY_H
+#define LYJUSTIFY_H
+
+#include <HTUtils.h>
+
+#ifdef EXP_JUSTIFY_ELTS
+
+extern BOOL ok_justify;
+extern BOOL can_justify_here;
+extern BOOL can_justify_here_saved;
+
+extern BOOL can_justify_this_line;
+extern int wait_for_this_stacked_elt;
+extern BOOL form_in_htext;
+
+ /*this is the element with SGML_EMPTY content, so it won't
+ get on the stack, so we can't trap it with wait_for_this_stacked_elt */
+extern BOOL in_DT;
+
+/*disabled by default*/
+/*#define DEBUG_JUSTIFY*/
+#ifdef DEBUG_JUSTIFY
+extern BOOL can_justify_stack_depth;/* can be 0 or 1 if all code is correct*/
+# define CAN_JUSTIFY_STACK_INC ++can_justify_stack_depth;\
+ assert(can_justify_stack_depth < 2 && can_justify_stack_depth >=0 );
+# define CAN_JUSTIFY_STACK_DEC --can_justify_stack_depth;\
+ assert(can_justify_stack_depth < 2 && can_justify_stack_depth >=0 );
+#else
+# define CAN_JUSTIFY_STACK_INC /* nothing */
+# define CAN_JUSTIFY_STACK_DEC /* nothing */
+#endif
+
+#define CAN_JUSTIFY_PUSH(x) can_justify_here_saved=can_justify_here;\
+ can_justify_here=(x); CAN_JUSTIFY_STACK_INC
+#define CAN_JUSTIFY_POP can_justify_here=can_justify_here_saved;\
+ CAN_JUSTIFY_STACK_INC
+#define CAN_JUSTIFY_SET(x) can_justify_here=(x);
+
+/*
+ * This is used to indicate that starting from the current offset in current
+ * line justification can take place (in order the gap between some prefix and
+ * the word not to be enlarged.
+ * For example, when forming OL,
+ * 1.21 foo
+ * ^justification can start here so that gap between 1.21 and "foo"
+ * will not be enlarged.
+ * This is a macro (that uses 'me').
+ */
+#define CAN_JUSTIFY_START mark_justify_start_position(me->text);
+#define CANT_JUSTIFY_THIS_LINE can_justify_this_line = FALSE
+#define EMIT_IFDEF_EXP_JUSTIFY_ELTS(x) x
+ /*defined in order not to wrap single line of code into #ifdef/#endif */
+
+extern void ht_justify_cleanup NOPARAMS;
+extern void mark_justify_start_position PARAMS((void* text));
+
+#else /* ! EXP_JUSTIFY_ELTS */
+
+/*
+ * define empty macros so that they can be used without wrapping them in
+ * #ifdef EXP_JUSTIFY_ELTS/#endif
+ */
+
+#define CAN_JUSTIFY_PUSH(x)
+#define CAN_JUSTIFY_POP
+#define CAN_JUSTIFY_SET(x)
+#define CAN_JUSTIFY_START
+#define CANT_JUSTIFY_THIS_LINE
+#define EMIT_IFDEF_EXP_JUSTIFY_ELTS(x)
+
+#endif /* EXP_JUSTIFY_ELTS */
+
+#define CAN_JUSTIFY_PUSH_F CAN_JUSTIFY_PUSH(FALSE)
+
+#endif /* LYJUSTIFY_H */
diff --git a/gnu/usr.bin/lynx/src/LYKeymap.c b/gnu/usr.bin/lynx/src/LYKeymap.c
index b7dd523af86..708f0e6330f 100644
--- a/gnu/usr.bin/lynx/src/LYKeymap.c
+++ b/gnu/usr.bin/lynx/src/LYKeymap.c
@@ -1,10 +1,12 @@
#include <HTUtils.h>
#include <LYUtils.h>
-#include <LYKeymap.h>
#include <LYGlobalDefs.h>
+#include <LYKeymap.h>
+#include <LYCharSets.h> /* for LYlowest_eightbit - kw */
#include <HTAccess.h>
#include <HTFormat.h>
#include <HTAlert.h>
+#include <LYStrings.h> /* for USE_KEYMAP stuff - kw */
#include <LYLeaks.h>
@@ -17,7 +19,7 @@
#ifdef EXP_KEYBOARD_LAYOUT
PUBLIC int current_layout = 0; /* Index into LYKbLayouts[] */
-PUBLIC LYKeymap_t * LYKbLayouts[]={
+PUBLIC LYKbLayout_t * LYKbLayouts[]={
kb_layout_rot13,
kb_layout_jcuken,
kb_layout_yawerty
@@ -29,16 +31,26 @@ PUBLIC char * LYKbLayoutNames[]={
"YAWERTY Cyrillic, for DEC LK201 kbd",
(char *) 0
};
-#endif
-
-PRIVATE CONST DocAddress keymap_anchor = {"LYNXKEYMAP", NULL, NULL,
- NULL, FALSE, FALSE};
+#endif /* EXP_KEYBOARD_LAYOUT */
struct _HTStream
{
HTStreamClass * isa;
};
+/* * * Tables mapping LynxKeyCodes to LynxActionCodes * * */
+
+/*
+ * Lynxkeycodes include all single-byte keys as well as codes
+ * for function keys and some special purposes. See LYStrings.h.
+ * Extended lynxkeycode values can also contain flags for modifiers
+ * and other purposes, but here only the base values are mapped to
+ * lynxactioncodes. They are called `keystrokes' in lynx.cfg.
+ *
+ * Lynxactioncodes (confusingly, constants are named LYK_foo and
+ * typed as LYKeymapCode) specify key `functions', see LYKeymap.h.
+ */
+
/* the character gets 1 added to it before lookup,
* so that EOF maps to 0
*/
@@ -56,11 +68,23 @@ LYK_ABORT, LYK_END, LYK_NEXT_PAGE, 0,
LYK_HISTORY, LYK_FASTFORW_LINK, LYK_ACTIVATE, LYK_COOKIE_JAR,
/* bs */ /* ht */ /* nl */ /* ^K */
+#ifdef KANJI_CODE_OVERRIDE
+LYK_CHG_KCODE, LYK_ACTIVATE, LYK_DOWN_TWO, 0,
+/* ^L */ /* cr */ /* ^N */ /* ^O */
+
+#else
LYK_REFRESH, LYK_ACTIVATE, LYK_DOWN_TWO, 0,
/* ^L */ /* cr */ /* ^N */ /* ^O */
+#endif
+
+#ifdef SH_EX /* 1998/10/02 (Fri) 08:48:44 */
+LYK_UP_TWO, LYK_CHG_CENTER, LYK_RELOAD, LYK_TO_CLIPBOARD,
+/* ^P */ /* XON */ /* ^R */ /* ^S */
+#else
LYK_UP_TWO, 0, LYK_RELOAD, 0,
/* ^P */ /* XON */ /* ^R */ /* XOFF */
+#endif
LYK_TRACE_TOGGLE, 0, LYK_SWITCH_DTD, LYK_REFRESH,
/* ^T */ /* ^U */ /* ^V */ /* ^W */
@@ -74,19 +98,14 @@ LYK_TRACE_TOGGLE, 0, LYK_SWITCH_DTD, LYK_REFRESH,
LYK_NEXT_PAGE, LYK_SHELL, LYK_SOFT_DQUOTES, LYK_TOOLBAR,
/* sp */ /* ! */ /* " */ /* # */
-0, 0, 0, LYK_HISTORICAL,
+LYK_LAST_LINK, 0, 0, LYK_HISTORICAL,
/* $ */ /* % */ /* & */ /* ' */
LYK_UP_HALF, LYK_DOWN_HALF, LYK_IMAGE_TOGGLE, LYK_NEXT_PAGE,
/* ( */ /* ) */ /* * */ /* + */
-#ifndef USE_EXTERNALS
-LYK_NEXT_PAGE, LYK_PREV_PAGE, 0, LYK_WHEREIS,
-/* , */ /* - */ /* . */ /* / */
-#else
-LYK_NEXT_PAGE, LYK_PREV_PAGE, LYK_EXTERN, LYK_WHEREIS,
+LYK_EXTERN_PAGE, LYK_PREV_PAGE, LYK_EXTERN_LINK, LYK_WHEREIS,
/* , */ /* - */ /* . */ /* / */
-#endif
LYK_F_LINK_NUM, LYK_1, LYK_2, LYK_3,
/* 0 */ /* 1 */ /* 2 */ /* 3 */
@@ -94,32 +113,27 @@ LYK_F_LINK_NUM, LYK_1, LYK_2, LYK_3,
LYK_4, LYK_5, LYK_6, LYK_7,
/* 4 */ /* 5 */ /* 6 */ /* 7 */
-LYK_8, LYK_9, 0, LYK_TRACE_LOG,
+LYK_8, LYK_9, LYK_COMMAND, LYK_TRACE_LOG,
/* 8 */ /* 9 */ /* : */ /* ; */
LYK_UP_LINK, LYK_INFO, LYK_DOWN_LINK, LYK_HELP,
/* < */ /* = */ /* > */ /* ? */
+#ifndef SUPPORT_CHDIR
LYK_RAW_TOGGLE, LYK_ADDRLIST, LYK_PREV_PAGE, LYK_COMMENT,
/* @ */ /* A */ /* B */ /* C */
-
-LYK_DOWNLOAD, LYK_ELGOTO,
-/* D */ /* E */
-
-#if defined(DIRED_SUPPORT) || defined(VMS)
-LYK_DIRED_MENU,
#else
-0,
-#endif /* DIRED_SUPPORT || VMS */
-/* F */
+LYK_RAW_TOGGLE, LYK_ADDRLIST, LYK_PREV_PAGE, LYK_CHDIR,
+/* @ */ /* A */ /* B */ /* C */
+#endif
-LYK_ECGOTO,
-/* G */
+LYK_DOWNLOAD, LYK_ELGOTO, LYK_DIRED_MENU, LYK_ECGOTO,
+/* D */ /* E */ /* F */ /* G */
LYK_HELP, LYK_INDEX, LYK_JUMP, LYK_KEYMAP,
/* H */ /* I */ /* J */ /* K */
-LYK_LIST, LYK_MAIN_MENU, LYK_NEXT, LYK_OPTIONS,
+LYK_LIST, LYK_MAIN_MENU, LYK_PREV, LYK_OPTIONS,
/* L */ /* M */ /* N */ /* O */
LYK_PRINT, LYK_ABORT, LYK_DEL_BOOKMARK, LYK_INDEX_SEARCH,
@@ -131,24 +145,14 @@ LYK_TAG_LINK, LYK_PREV_DOC, LYK_VLINKS, 0,
LYK_NOCACHE, 0, LYK_INTERRUPT, LYK_INLINE_TOGGLE,
/* X */ /* Y */ /* Z */ /* [ */
-LYK_SOURCE, LYK_HEAD, 0, LYK_CLEAR_AUTH,
+LYK_SOURCE, LYK_HEAD, LYK_FIRST_LINK, LYK_CLEAR_AUTH,
/* \ */ /* ] */ /* ^ */ /* _ */
LYK_MINIMAL, LYK_ADD_BOOKMARK, LYK_PREV_PAGE, LYK_COMMENT,
/* ` */ /* a */ /* b */ /* c */
-LYK_DOWNLOAD, LYK_EDIT,
-/* d */ /* e */
-
-#if defined(DIRED_SUPPORT) || defined(VMS)
-LYK_DIRED_MENU,
-#else
-0,
-#endif /* DIRED_SUPPORT || VMS */
-/* f */
-
-LYK_GOTO,
-/* g */
+LYK_DOWNLOAD, LYK_EDIT, LYK_DIRED_MENU, LYK_GOTO,
+/* d */ /* e */ /* f */ /* g */
LYK_HELP, LYK_INDEX, LYK_JUMP, LYK_KEYMAP,
/* h */ /* i */ /* j */ /* k */
@@ -162,20 +166,12 @@ LYK_PRINT, LYK_QUIT, LYK_DEL_BOOKMARK, LYK_INDEX_SEARCH,
LYK_TAG_LINK, LYK_PREV_DOC, LYK_VIEW_BOOKMARK, 0,
/* t */ /* u */ /* v */ /* w */
-LYK_NOCACHE, 0, LYK_INTERRUPT, 0,
+LYK_NOCACHE, 0, LYK_INTERRUPT, LYK_SHIFT_LEFT,
/* x */ /* y */ /* z */ /* { */
-#if (defined(_WINDOWS) || defined(__DJGPP__))
-
-LYK_PIPE, 0, 0, 0,
-/* | */ /* } */ /* ~ */
-
-#else
-
-LYK_PIPE, 0, 0, LYK_HISTORY,
+LYK_LINEWRAP_TOGGLE, LYK_SHIFT_RIGHT, LYK_NESTED_TABLES, LYK_HISTORY,
/* | */ /* } */ /* ~ */ /* del */
-#endif /* _WINDOWS || __DJGPP__ */
/* 80..9F (illegal ISO-8859-1) 8-bit characters. */
0, 0, 0, 0,
@@ -220,28 +216,23 @@ LYK_PREV_LINK, LYK_NEXT_LINK, LYK_ACTIVATE, LYK_PREV_DOC,
LYK_NEXT_PAGE, LYK_PREV_PAGE, LYK_HOME, LYK_END,
/* PGDOWN */ /* PGUP */ /* HOME */ /* END */
-#if (defined(_WINDOWS) || defined(__DJGPP__))
+#if (defined(_WINDOWS) || defined(__DJGPP__) || defined(__CYGWIN__))
-LYK_HELP, 0, 0, 0,
+LYK_DWIMHELP, 0, 0, 0,
/* F1*/
#else
-LYK_HELP, LYK_ACTIVATE, LYK_HOME, LYK_END,
+LYK_DWIMHELP, LYK_ACTIVATE, LYK_HOME, LYK_END,
/* F1*/ /* Do key */ /* Find key */ /* Select key */
-#endif /* _WINDOWS || __DJGPP__ */
+#endif /* _WINDOWS || __DJGPP__ || __CYGWIN__ */
LYK_UP_TWO, LYK_DOWN_TWO, LYK_DO_NOTHING, LYK_FASTBACKW_LINK,
/* Insert key */ /* Remove key */ /* DO_NOTHING*/ /* Back tab */
/* 110..18F */
-#if (defined(_WINDOWS) || defined(__DJGPP__)) && defined(USE_SLANG) && !defined(DJGPP_KEYHANDLER)
- LYK_HISTORY, LYK_ACTIVATE, 0, 0,
- /* Backspace */ /* Enter */
-#else
0, 0, 0, 0,
-#endif /* USE_SLANG &&(_WINDOWS || __DJGPP) && !DJGPP_KEYHANDLER */
0, 0, 0, 0,
0, LYK_DO_NOTHING, 0, 0,
/* 0x11d: MOUSE_KEY */
@@ -291,7 +282,7 @@ LYK_UP_TWO, LYK_DOWN_TWO, LYK_DO_NOTHING, LYK_FASTBACKW_LINK,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
-#if (defined(_WINDOWS) || defined(__DJGPP__)) && !defined(USE_SLANG) /* PDCurses */
+#if (defined(_WINDOWS) || defined(__DJGPP__) || defined(__CYGWIN__)) && !defined(USE_SLANG) /* PDCurses */
LYK_ABORT, 0, 0, 0,
/* ALT_X */
0, 0, 0, 0,
@@ -311,7 +302,7 @@ LYK_UP_TWO, LYK_DOWN_TWO, LYK_DO_NOTHING, LYK_FASTBACKW_LINK,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
-#endif /* (_WINDOWS || __DJGPP__) && !USE_SLANG */
+#endif /* (_WINDOWS || __DJGPP__ || __CYGWIN__) && !USE_SLANG */
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
@@ -424,9 +415,13 @@ LYKeymap_t key_override[KEYMAP_SIZE] = {
0, 0, 0, 0,
/* < */ /* = */ /* > */ /* ? */
-
+#ifndef SUPPORT_CHDIR
0, 0, 0, LYK_CREATE,
/* @ */ /* A */ /* B */ /* C */
+#else
+ 0, 0, 0, LYK_CHDIR,
+/* @ */ /* A */ /* B */ /* C */
+#endif
0, 0, LYK_DIRED_MENU, 0,
/* D */ /* E */ /* F */ /* G */
@@ -629,205 +624,776 @@ LYK_TAG_LINK, LYK_UPLOAD, 0, 0,
};
#endif /* DIRED_SUPPORT && OK_OVERRIDE */
-struct rmap {
- CONST char *name;
- CONST char *doc;
-};
-
+#define DATA(code, name, doc) { code, name, doc }
/* The order of this array must match the LYKeymapCode enum in LYKeymap.h */
-PRIVATE struct rmap revmap[] = {
-{ "UNMAPPED", NULL },
-{ "1", NULL },
-{ "2", NULL },
-{ "3", NULL },
-{ "4", NULL },
-{ "5", NULL },
-{ "6", NULL },
-{ "7", NULL },
-{ "8", NULL },
-{ "9", NULL },
-{ "SOURCE", "toggle source/presentation for current document" },
-{ "RELOAD", "reload the current document" },
-{ "PIPE", "pipe the current document to an external command" },
-{ "QUIT", "quit the browser" },
-{ "ABORT", "quit the browser unconditionally" },
-{ "NEXT_PAGE", "view the next page of the document" },
-{ "PREV_PAGE", "view the previous page of the document" },
-{ "UP_TWO", "go back two lines in the document" },
-{ "DOWN_TWO", "go forward two lines in the document" },
-{ "UP_HALF", "go back half a page in the document" },
-{ "DOWN_HALF", "go forward half a page in the document" },
-{ "REFRESH", "refresh the screen to clear garbled text" },
-{ "HOME", "go to the beginning of the current document" },
-{ "END", "go to the end of the current document" },
-{ "PREV_LINK", "make the previous link current" },
-{ "NEXT_LINK", "make the next link current" },
-{ "FASTBACKW_LINK", "previous link or text area, only stops on links" },
-{ "FASTFORW_LINK", "next link or text area, only stops on links" },
-{ "UP_LINK", "move up the page to a previous link" },
-{ "DOWN_LINK", "move down the page to another link" },
-{ "RIGHT_LINK", "move right to another link" },
-{ "LEFT_LINK", "move left to a previous link" },
-{ "HISTORY", "display stack of currently-suspended documents" },
-{ "PREV_DOC", "go back to the previous document" },
-{ "ACTIVATE", "go to the document given by the current link" },
-{ "GOTO", "go to a document given as a URL" },
-{ "ECGOTO", "edit the current document's URL and go to it" },
-{ "HELP", "display help on using the browser" },
-{ "INDEX", "display an index of potentially useful documents" },
-{ "NOCACHE", "force submission of form or link with no-cache" },
-{ "INTERRUPT", "interrupt network connection or transmission" },
-{ "MAIN_MENU", "return to the first screen (home page)" },
-{ "OPTIONS", "display and change option settings" },
-{ "INDEX_SEARCH", "allow searching of an index" },
-{ "WHEREIS", "search within the current document" },
-{ "NEXT", "search for the next occurence" },
-{ "COMMENT", "send a comment to the author of the current document" },
-{ "EDIT", "edit the current document or a form's textarea" },
-{ "INFO", "display information on the current document and link" },
-{ "PRINT", "display choices for printing the current document" },
-{ "ADD_BOOKMARK", "add to your personal bookmark list" },
-{ "DEL_BOOKMARK", "delete from your personal bookmark list" },
-{ "VIEW_BOOKMARK", "view your personal bookmark list" },
-{ "VLINKS", "list links visited during the current Lynx session" },
-{ "SHELL", "escape from the browser to the system" },
-{ "DOWNLOAD", "download the current link to your computer" },
-{ "TRACE_TOGGLE", "toggle tracing of browser operations" },
-{ "TRACE_LOG", "view trace log if started in the current session" },
-{ "IMAGE_TOGGLE", "toggle handling of all images as links" },
-{ "INLINE_TOGGLE", "toggle pseudo-ALTs for inlines with no ALT string" },
-{ "HEAD", "send a HEAD request for the current document or link" },
-{ "DO_NOTHING", NULL },
-{ "TOGGLE_HELP", "show other commands in the novice help menu" },
-{ "JUMP", "go directly to a target document or action" },
-{ "KEYMAP", "display the current key map" },
-{ "LIST", "list the references (links) in the current document" },
-{ "TOOLBAR", "go to Toolbar or Banner in the current document" },
-{ "HISTORICAL", "toggle historical vs. valid/minimal comment parsing" },
-{ "MINIMAL", "toggle minimal vs. valid comment parsing" },
-{ "SOFT_DQUOTES", "toggle valid vs. soft double-quote parsing" },
-{ "RAW_TOGGLE", "toggle raw 8-bit translations or CJK mode ON or OFF" },
-{ "COOKIE_JAR", "examine the Cookie Jar" },
-{ "F_LINK_NUM", "invoke the 'Follow link (or page) number:' prompt" },
-{ "CLEAR_AUTH", "clear all authorization info for this session" },
-{ "SWITCH_DTD", "switch between two ways of parsing HTML" },
-{ "ELGOTO", "edit the current link's URL or ACTION and go to it" },
-{ "CHANGE_LINK", "force reset of the current link on the page" },
-{ "EDITTEXTAREA", "use an external editor to edit a form's textarea" },
-{ "GROWTEXTAREA", "add 5 new blank lines to the bottom of a textarea" },
-{ "INSERTFILE", "insert file into a textarea (just above cursorline)" },
+PRIVATE Kcmd revmap[] = {
+ DATA(
+ LYK_UNKNOWN, "UNMAPPED",
+ NULL ),
+ DATA(
+ LYK_COMMAND, "COMMAND",
+ "prompt for, execute a command" ),
+ DATA(
+ LYK_1, "1",
+ NULL ),
+ DATA(
+ LYK_2, "2",
+ NULL ),
+ DATA(
+ LYK_3, "3",
+ NULL ),
+ DATA(
+ LYK_4, "4",
+ NULL ),
+ DATA(
+ LYK_5, "5",
+ NULL ),
+ DATA(
+ LYK_6, "6",
+ NULL ),
+ DATA(
+ LYK_7, "7",
+ NULL ),
+ DATA(
+ LYK_8, "8",
+ NULL ),
+ DATA(
+ LYK_9, "9",
+ NULL ),
+ DATA(
+ LYK_SOURCE, "SOURCE",
+ "toggle source/presentation for current document" ),
+ DATA(
+ LYK_RELOAD, "RELOAD",
+ "reload the current document" ),
+ DATA(
+ LYK_QUIT, "QUIT",
+ "quit the browser" ),
+ DATA(
+ LYK_ABORT, "ABORT",
+ "quit the browser unconditionally" ),
+ DATA(
+ LYK_NEXT_PAGE, "NEXT_PAGE",
+ "view the next page of the document" ),
+ DATA(
+ LYK_PREV_PAGE, "PREV_PAGE",
+ "view the previous page of the document" ),
+ DATA(
+ LYK_UP_TWO, "UP_TWO",
+ "go back two lines in the document" ),
+ DATA(
+ LYK_DOWN_TWO, "DOWN_TWO",
+ "go forward two lines in the document" ),
+ DATA(
+ LYK_UP_HALF, "UP_HALF",
+ "go back half a page in the document" ),
+ DATA(
+ LYK_DOWN_HALF, "DOWN_HALF",
+ "go forward half a page in the document" ),
+ DATA(
+ LYK_REFRESH, "REFRESH",
+ "refresh the screen to clear garbled text" ),
+ DATA(
+ LYK_HOME, "HOME",
+ "go to the beginning of the current document" ),
+ DATA(
+ LYK_END, "END",
+ "go to the end of the current document" ),
+ DATA(
+ LYK_FIRST_LINK, "FIRST_LINK",
+ "make the first link on the line current" ),
+ DATA(
+ LYK_LAST_LINK, "LAST_LINK",
+ "make the last link on the line current" ),
+ DATA(
+ LYK_PREV_LINK, "PREV_LINK",
+ "make the previous link current" ),
+ DATA(
+ LYK_NEXT_LINK, "NEXT_LINK",
+ "make the next link current" ),
+ DATA(
+ LYK_LPOS_PREV_LINK, "LPOS_PREV_LINK",
+ "make previous link current, same column for input" ),
+ DATA(
+ LYK_LPOS_NEXT_LINK, "LPOS_NEXT_LINK",
+ "make next link current, same column for input" ),
+ DATA(
+ LYK_FASTBACKW_LINK, "FASTBACKW_LINK",
+ "previous link or text area, only stops on links" ),
+ DATA(
+ LYK_FASTFORW_LINK, "FASTFORW_LINK",
+ "next link or text area, only stops on links" ),
+ DATA(
+ LYK_UP_LINK, "UP_LINK",
+ "move up the page to a previous link" ),
+ DATA(
+ LYK_DOWN_LINK, "DOWN_LINK",
+ "move down the page to another link" ),
+ DATA(
+ LYK_RIGHT_LINK, "RIGHT_LINK",
+ "move right to another link" ),
+ DATA(
+ LYK_LEFT_LINK, "LEFT_LINK",
+ "move left to a previous link" ),
+ DATA(
+ LYK_HISTORY, "HISTORY",
+ "display stack of currently-suspended documents" ),
+ DATA(
+ LYK_PREV_DOC, "PREV_DOC",
+ "go back to the previous document" ),
+ DATA(
+ LYK_NEXT_DOC, "NEXT_DOC",
+ "undo going back to the previous document" ),
+ DATA(
+ LYK_ACTIVATE, "ACTIVATE",
+ "go to the document given by the current link" ),
+ DATA(
+ LYK_SUBMIT, "MOUSE_SUBMIT",
+ "DO NOT MAP: follow current link, submit" ),
+ DATA(
+ LYK_GOTO, "GOTO",
+ "go to a document given as a URL" ),
+ DATA(
+ LYK_ECGOTO, "ECGOTO",
+ "edit the current document's URL and go to it" ),
+ DATA(
+ LYK_HELP, "HELP",
+ "display help on using the browser" ),
+ DATA(
+ LYK_DWIMHELP, "DWIMHELP",
+ "display help page that may depend on context" ),
+ DATA(
+ LYK_INDEX, "INDEX",
+ "display an index of potentially useful documents" ),
+ DATA(
+ LYK_NOCACHE, "NOCACHE",
+ "force submission of form or link with no-cache" ),
+ DATA(
+ LYK_INTERRUPT, "INTERRUPT",
+ "interrupt network connection or transmission" ),
+ DATA(
+ LYK_MAIN_MENU, "MAIN_MENU",
+ "return to the first screen (home page)" ),
+ DATA(
+ LYK_OPTIONS, "OPTIONS",
+ "display and change option settings" ),
+ DATA(
+ LYK_INDEX_SEARCH, "INDEX_SEARCH",
+ "allow searching of an index" ),
+ DATA(
+ LYK_WHEREIS, "WHEREIS",
+ "search within the current document" ),
+ DATA(
+ LYK_PREV, "PREV",
+ "search for the previous occurence" ),
+ DATA(
+ LYK_NEXT, "NEXT",
+ "search for the next occurence" ),
+ DATA(
+ LYK_COMMENT, "COMMENT",
+ "send a comment to the author of the current document" ),
+ DATA(
+ LYK_EDIT, "EDIT",
+ "edit the current document or a form's textarea" ),
+ DATA(
+ LYK_INFO, "INFO",
+ "display information on the current document and link" ),
+ DATA(
+ LYK_PRINT, "PRINT",
+ "display choices for printing the current document" ),
+ DATA(
+ LYK_ADD_BOOKMARK, "ADD_BOOKMARK",
+ "add to your personal bookmark list" ),
+ DATA(
+ LYK_DEL_BOOKMARK, "DEL_BOOKMARK",
+ "delete from your personal bookmark list" ),
+ DATA(
+ LYK_VIEW_BOOKMARK, "VIEW_BOOKMARK",
+ "view your personal bookmark list" ),
+ DATA(
+ LYK_VLINKS, "VLINKS",
+ "list links visited during the current Lynx session" ),
+ DATA(
+ LYK_SHELL, "SHELL",
+ "escape from the browser to the system" ),
+ DATA(
+ LYK_DOWNLOAD, "DOWNLOAD",
+ "download the current link to your computer" ),
+ DATA(
+ LYK_TRACE_TOGGLE, "TRACE_TOGGLE",
+ "toggle tracing of browser operations" ),
+ DATA(
+ LYK_TRACE_LOG, "TRACE_LOG",
+ "view trace log if started in the current session" ),
+ DATA(
+ LYK_IMAGE_TOGGLE, "IMAGE_TOGGLE",
+ "toggle handling of all images as links" ),
+ DATA(
+ LYK_INLINE_TOGGLE, "INLINE_TOGGLE",
+ "toggle pseudo-ALTs for inlines with no ALT string" ),
+ DATA(
+ LYK_HEAD, "HEAD",
+ "send a HEAD request for the current document or link" ),
+ DATA(
+ LYK_DO_NOTHING, "DO_NOTHING",
+ NULL ),
+ DATA(
+ LYK_TOGGLE_HELP, "TOGGLE_HELP",
+ "show other commands in the novice help menu" ),
+ DATA(
+ LYK_JUMP, "JUMP",
+ "go directly to a target document or action" ),
+ DATA(
+ LYK_KEYMAP, "KEYMAP",
+ "display the current key map" ),
+ DATA(
+ LYK_LIST, "LIST",
+ "list the references (links) in the current document" ),
+ DATA(
+ LYK_TOOLBAR, "TOOLBAR",
+ "go to Toolbar or Banner in the current document" ),
+ DATA(
+ LYK_HISTORICAL, "HISTORICAL",
+ "toggle historical vs. valid/minimal comment parsing" ),
+ DATA(
+ LYK_MINIMAL, "MINIMAL",
+ "toggle minimal vs. valid comment parsing" ),
+ DATA(
+ LYK_SOFT_DQUOTES, "SOFT_DQUOTES",
+ "toggle valid vs. soft double-quote parsing" ),
+ DATA(
+ LYK_RAW_TOGGLE, "RAW_TOGGLE",
+ "toggle raw 8-bit translations or CJK mode ON or OFF" ),
+ DATA(
+ LYK_COOKIE_JAR, "COOKIE_JAR",
+ "examine the Cookie Jar" ),
+ DATA(
+ LYK_F_LINK_NUM, "F_LINK_NUM",
+ "invoke the 'Follow link (or page) number:' prompt" ),
+ DATA(
+ LYK_CLEAR_AUTH, "CLEAR_AUTH",
+ "clear all authorization info for this session" ),
+ DATA(
+ LYK_SWITCH_DTD, "SWITCH_DTD",
+ "switch between two ways of parsing HTML" ),
+ DATA(
+ LYK_ELGOTO, "ELGOTO",
+ "edit the current link's URL or ACTION and go to it" ),
+ DATA(
+ LYK_CHANGE_LINK, "CHANGE_LINK",
+ "force reset of the current link on the page" ),
+ DATA(
+ LYK_DWIMEDIT, "DWIMEDIT",
+ "use external editor for context-dependent purpose" ),
+ DATA(
+ LYK_EDIT_TEXTAREA, "EDITTEXTAREA",
+ "use an external editor to edit a form's textarea" ),
+ DATA(
+ LYK_GROW_TEXTAREA, "GROWTEXTAREA",
+ "add 5 new blank lines to the bottom of a textarea" ),
+ DATA(
+ LYK_INSERT_FILE, "INSERTFILE",
+ "insert file into a textarea (just above cursorline)" ),
#ifdef EXP_ADDRLIST_PAGE
-{ "ADDRLIST", "like LIST command, but always shows the links URL's" },
+ DATA(
+ LYK_ADDRLIST, "ADDRLIST",
+ "like LIST command, but always shows the links' URLs" ),
#endif
#ifdef USE_EXTERNALS
-{ "EXTERN", "run external program with url" },
+ DATA(
+ LYK_EXTERN_LINK, "EXTERN_LINK",
+ "run external program with current link" ),
+ DATA(
+ LYK_EXTERN_PAGE, "EXTERN_PAGE",
+ "run external program with current page" ),
#endif
#ifdef VMS
-{ "DIRED_MENU", "invoke File/Directory Manager, if available" },
+ DATA(
+ LYK_DIRED_MENU, "DIRED_MENU",
+ "invoke File/Directory Manager, if available" ),
#else
#ifdef DIRED_SUPPORT
-{ "DIRED_MENU", "display a full menu of file operations" },
-{ "CREATE", "create a new file or directory" },
-{ "REMOVE", "remove a file or directory" },
-{ "MODIFY", "modify the name or location of a file or directory" },
-{ "TAG_LINK", "tag a file or directory for later action" },
-{ "UPLOAD", "upload from your computer to the current directory" },
-{ "INSTALL", "install file or tagged files into a system area" },
+ DATA(
+ LYK_DIRED_MENU, "DIRED_MENU",
+ "display a full menu of file operations" ),
+ DATA(
+ LYK_CREATE, "CREATE",
+ "create a new file or directory" ),
+ DATA(
+ LYK_REMOVE, "REMOVE",
+ "remove a file or directory" ),
+ DATA(
+ LYK_MODIFY, "MODIFY",
+ "modify the name or location of a file or directory" ),
+ DATA(
+ LYK_TAG_LINK, "TAG_LINK",
+ "tag a file or directory for later action" ),
+ DATA(
+ LYK_UPLOAD, "UPLOAD",
+ "upload from your computer to the current directory" ),
+ DATA(
+ LYK_INSTALL, "INSTALL",
+ "install file or tagged files into a system area" ),
#endif /* DIRED_SUPPORT */
+#ifdef SH_EX /* 1999/01/01 (Fri) 01:18:12 */
+ DATA(
+ LYK_CHG_CENTER, "CHANGE_CENTER",
+ "toggle center alignment in HTML TABLE" ),
+#endif
+#ifdef KANJI_CODE_OVERRIDE
+ DATA(
+ LYK_CHG_KCODE, "CHANGE_KCODE",
+ "Change Kanji code" ),
+#endif
#endif /* VMS */
-{ NULL, "" }
+#ifdef SUPPORT_CHDIR
+ DATA(
+ LYK_CHDIR, "CHDIR",
+ "change current directory" ),
+#endif
+#ifdef USE_CURSES_PADS
+ DATA(
+ LYK_SHIFT_LEFT, "SHIFT_LEFT",
+ "shift the screen left" ),
+ DATA(
+ LYK_SHIFT_RIGHT, "SHIFT_RIGHT",
+ "shift the screen right" ),
+ DATA(
+ LYK_LINEWRAP_TOGGLE, "LINEWRAP_TOGGLE",
+ "toggle linewrap on/off" ),
+#endif
+#ifdef CAN_CUT_AND_PASTE
+ DATA(
+ LYK_PASTE_URL, "PASTE_URL",
+ "Goto the URL in the clipboard" ),
+ DATA(
+ LYK_TO_CLIPBOARD, "TO_CLIPBOARD",
+ "link's URL to Clip Board" ),
+#endif
+#ifdef EXP_NESTED_TABLES
+ DATA(
+ LYK_NESTED_TABLES, "NESTED_TABLES",
+ "toggle nested-table parsing on/off" ),
+#endif
+ DATA(
+ LYK_UNKNOWN, NULL,
+ "" )
+};
+#undef DATA
+
+PRIVATE CONST struct {
+ int key;
+ CONST char *name;
+} named_keys[] = {
+ { '\t', "<tab>" },
+ { '\r', "<return>" },
+ { CH_ESC, "ESC" },
+ { ' ', "<space>" },
+ { '<', "<" },
+ { '>', ">" },
+ { 0177, "<delete>" },
+ { UPARROW, "Up Arrow" },
+ { DNARROW, "Down Arrow" },
+ { RTARROW, "Right Arrow" },
+ { LTARROW, "Left Arrow" },
+ { PGDOWN, "Page Down" },
+ { PGUP, "Page Up" },
+ { HOME, "Home" },
+ { END_KEY, "End" },
+ { F1, "F1" },
+ { DO_KEY, "Do key" },
+ { FIND_KEY, "Find key" },
+ { SELECT_KEY, "Select key" },
+ { INSERT_KEY, "Insert key" },
+ { REMOVE_KEY, "Remove key" },
+ { DO_NOTHING, "(DO_NOTHING)" },
+ { BACKTAB_KEY, "Back Tab" },
+ { MOUSE_KEY, "mouse pseudo key" },
+};
+
+struct emap {
+ CONST char *name;
+ CONST int code;
+ CONST char *descr;
};
-PRIVATE CONST char *funckey[] = {
- "Up Arrow",
- "Down Arrow",
- "Right Arrow",
- "Left Arrow",
- "Page Down",
- "Page Up",
- "Home",
- "End",
- "F1",
- "Do key",
- "Find key",
- "Select key",
- "Insert key",
- "Remove key",
- "(DO_NOTHING)", /* should normally not appear in list */
- "Back Tab",
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- "mouse pseudo key", /* normally not mapped to keymap[] action? */
+PRIVATE struct emap ekmap[] = {
+ {"NOP", LYE_NOP, "Do Nothing"},
+ {"CHAR", LYE_CHAR, "Insert printable char"},
+ {"ENTER", LYE_ENTER, "Input complete, return char/lynxkeycode"},
+ {"TAB", LYE_TAB, "Input complete, return TAB"},
+ {"STOP", LYE_STOP, "Input deactivated"},
+ {"ABORT", LYE_ABORT, "Input cancelled"},
+
+ {"PASS", LYE_FORM_PASS, "In fields: input complete, or Do Nothing"},
+
+ {"DELN", LYE_DELN, "Delete next/curr char"},
+ {"DELP", LYE_DELP, "Delete prev char"},
+ {"DELNW", LYE_DELNW, "Delete next word"},
+ {"DELPW", LYE_DELPW, "Delete prev word"},
+
+ {"ERASE", LYE_ERASE, "Erase the line"},
+
+ {"BOL", LYE_BOL, "Go to begin of line"},
+ {"EOL", LYE_EOL, "Go to end of line"},
+ {"FORW", LYE_FORW, "Cursor forwards"},
+ {"FORW_RL", LYE_FORW_RL, "Cursor forwards or right link"},
+ {"BACK", LYE_BACK, "Cursor backwards"},
+ {"BACK_LL", LYE_BACK_LL, "Cursor backwards or left link"},
+ {"FORWW", LYE_FORWW, "Word forward"},
+ {"BACKW", LYE_BACKW, "Word back"},
+
+ {"LOWER", LYE_LOWER, "Lower case the line"},
+ {"UPPER", LYE_UPPER, "Upper case the line"},
+
+ {"LKCMD", LYE_LKCMD, "Invoke command prompt"},
+
+ {"AIX", LYE_AIX, "Hex 97"},
+
+ {"DELBL", LYE_DELBL, "Delete back to BOL"},
+ {"DELEL", LYE_DELEL, "Delete thru EOL"},
+
+ {"SWMAP", LYE_SWMAP, "Switch input keymap"},
+
+ {"TPOS", LYE_TPOS, "Transpose characters"},
+
+ {"SETM1", LYE_SETM1, "Set modifier 1 flag"},
+ {"SETM2", LYE_SETM2, "Set modifier 2 flag"},
+ {"UNMOD", LYE_UNMOD, "Fall back to no-modifier command"},
+
+ {"C1CHAR", LYE_C1CHAR, "Insert C1 char if printable"},
+
+ {"SETMARK", LYE_SETMARK, "emacs-like set-mark-command"},
+ {"XPMARK", LYE_XPMARK, "emacs-like exchange-point-and-mark"},
+ {"KILLREG", LYE_KILLREG, "emacs-like kill-region"},
+ {"YANK", LYE_YANK, "emacs-like yank"},
+#ifdef CAN_CUT_AND_PASTE
+ {"PASTE", LYE_PASTE, "ClipBoard to Lynx"},
+#endif
};
-PRIVATE char *pretty ARGS1 (int, c)
+/*
+ * Build a list of Lynx's commands, for use in the tab-completion in LYgetstr.
+ */
+PUBLIC HTList *LYcommandList NOARGS
{
- static char buf[30];
+ static HTList *myList = NULL;
+
+ if (myList == NULL) {
+ unsigned j;
+ myList = HTList_new();
+ for (j = 0; revmap[j].name != 0; j++) {
+ if (revmap[j].doc != 0)
+ HTList_addObject(myList, (char *)revmap[j].name);
+ }
+ }
+ return myList;
+}
- if (c == '\t')
- sprintf(buf, "&lt;tab&gt; ");
- else if (c == '\r')
- sprintf(buf, "&lt;return&gt; ");
- else if (c == ' ')
- sprintf(buf, "&lt;space&gt; ");
- else if (c == '<')
- sprintf(buf, "&lt; ");
- else if (c == '>')
- sprintf(buf, "&gt; ");
- else if (c == 0177)
- sprintf(buf, "&lt;delete&gt; ");
- else if (c > ' ' && c <= 0377)
- sprintf(buf, "%c", c);
+/*
+ * Find the given keycode.
+ */
+PUBLIC Kcmd * LYKeycodeToKcmd ARGS1(
+ LYKeymapCode, code)
+{
+ unsigned j;
+ Kcmd *result = 0;
+
+ if (code > LYK_UNKNOWN) {
+ for (j = 0; revmap[j].name != 0; j++) {
+ if (revmap[j].code == code) {
+ result = revmap + j;
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+/*
+ * Find the given command-name, accepting an abbreviation if it is unique.
+ */
+PUBLIC Kcmd * LYStringToKcmd ARGS1(
+ CONST char *, name)
+{
+ unsigned need = strlen(name);
+ unsigned j;
+ BOOL exact = FALSE;
+ Kcmd *result = 0;
+ Kcmd *maybe = 0;
+
+ if (name != 0 && *name != 0) {
+ for (j = 0; revmap[j].name != 0; j++) {
+ if (!strcasecomp(revmap[j].name, name)) {
+ result = revmap + j;
+ break;
+ } else if (!exact
+ && !strncasecomp(revmap[j].name, name, need)) {
+ if (maybe == 0) {
+ maybe = revmap + j;
+ } else {
+ if (revmap[j].name[need] != 0
+ && maybe->name[need] != 0) {
+ maybe = 0;
+ exact = TRUE;
+ }
+ }
+ }
+ }
+ }
+ return (result != 0) ? result : maybe;
+}
+
+PUBLIC char *LYKeycodeToString ARGS2 (
+ int, c,
+ BOOLEAN, upper8)
+{
+ static char buf[30];
+ unsigned n;
+ BOOLEAN named = FALSE;
+
+ for (n = 0; n < TABLESIZE(named_keys); n++) {
+ if (named_keys[n].key == c) {
+ named = TRUE;
+ strcpy(buf, named_keys[n].name);
+ break;
+ }
+ }
+
+ if (!named) {
+ if (c > ' '
+ && c < 0177)
+ sprintf(buf, "%c", c);
+ else if (upper8
+ && c > ' '
+ && c <= 0377
+ && c <= LYlowest_eightbit[current_char_set])
+ sprintf(buf, "%c", c);
else if (c < ' ')
- sprintf(buf, "^%c", c|0100);
- else if (c >= 0400 && (c - 0400) < (int) TABLESIZE(funckey)
- && funckey[c-0400])
- sprintf(buf, "%s", funckey[c-0400]);
+ sprintf(buf, "^%c", c|0100);
else if (c >= 0400)
- sprintf(buf, "%#x", c);
+ sprintf(buf, "key-%#x", c);
else
- return 0;
+ return 0;
+ }
+ return buf;
+}
+
+PUBLIC int LYStringToKeycode ARGS1 (
+ char *, src)
+{
+ unsigned n;
+ int key = -1;
+ int len = strlen(src);
+
+ if (len == 1)
+ key = *src;
+ else if (len == 2 && *src == '^')
+ key = src[1] & 0x1f;
+ else if (len > 6 && !strncasecomp(src, "key-", 4)) {
+ char *dst = 0;
+ key = strtol(src + 4, &dst, 0);
+ if (dst == 0 || *dst != 0)
+ key = -1;
+ }
+ if (key < 0) {
+ for (n = 0; n < TABLESIZE(named_keys); n++) {
+ if (!strcasecomp(named_keys[n].name, src)) {
+ key = named_keys[n].key;
+ break;
+ }
+ }
+ }
+ return key;
+}
+
+#define PRETTY_LEN 11
+PRIVATE char *pretty_html ARGS1 (int, c)
+{
+ char *src = LYKeycodeToString(c, TRUE);
+
+ if (src != 0) {
+ static CONST struct {
+ int code;
+ CONST char *name;
+ } table[] = {
+ { '<', "&lt;" },
+ { '>', "&gt;" },
+ { '"', "&quot;" },
+ { '&', "&amp;" }
+ };
+
+ static char buf[30];
+ char *dst = buf;
+ int adj = 0;
+ unsigned n;
+ BOOLEAN found;
+
+ while ((c = *src++) != 0) {
+ found = FALSE;
+ for (n = 0; n < TABLESIZE(table); n++) {
+ if (c == table[n].code) {
+ found = TRUE;
+ strcpy(dst, table[n].name);
+ adj += strlen(dst) - 1;
+ dst += strlen(dst);
+ break;
+ }
+ }
+ if (!found) {
+ *dst++ = (char) c;
+ }
+ }
+ adj -= (dst - buf) - PRETTY_LEN;
+ while (adj-- > 0)
+ *dst++ = ' ';
+ *dst = 0;
return buf;
+ }
+
+ return 0;
}
PRIVATE char * format_binding ARGS2(
LYKeymap_t *, table,
int, i)
{
- unsigned the_key = table[i];
+ LYKeymap_t the_key = table[i];
char *buf = 0;
char *formatted;
-
- if (the_key != 0
- && the_key < TABLESIZE(revmap)
- && revmap[the_key].name != 0
- && revmap[the_key].doc != 0
- && (formatted = pretty(i-1)) != 0) {
- HTSprintf0(&buf, "%-11s %-13s %s\n", formatted,
- revmap[the_key].name,
- revmap[the_key].doc);
+ Kcmd *rmap = LYKeycodeToKcmd(the_key);
+
+ if (rmap != 0
+ && rmap->name != 0
+ && rmap->doc != 0
+ && (formatted = pretty_html(i-1)) != 0) {
+ HTSprintf0(&buf, "%-*s %-13s %s\n",
+ PRETTY_LEN, formatted,
+ rmap->name,
+ rmap->doc);
return buf;
}
return 0;
}
-PRIVATE void print_binding ARGS2(HTStream *, target, int, i)
+/* if both is true, produce an additional line for the corresponding
+ uppercase key if its binding is different. - kw */
+PRIVATE void print_binding ARGS3(
+ HTStream *, target,
+ int, i,
+ BOOLEAN, both)
{
char *buf;
+ LYKeymapCode lac1 = LYK_UNKNOWN; /* 0 */
+
#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
if (prev_lynx_edit_mode && !no_dired_support &&
- (buf = format_binding(key_override, i)) != 0) {
+ (lac1 = key_override[i]) != LYK_UNKNOWN) {
+ if ((buf = format_binding(key_override, i)) != 0) {
+ (*target->isa->put_block)(target, buf, strlen(buf));
+ FREE(buf);
+ }
+ } else
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+ if ((buf = format_binding(keymap, i)) != 0) {
+ lac1 = keymap[i];
(*target->isa->put_block)(target, buf, strlen(buf));
FREE(buf);
+ }
+
+ if (!both)
+ return;
+ i -= ' '; /* corresponding uppercase key */
+
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ if (prev_lynx_edit_mode && !no_dired_support && key_override[i]) {
+ if (key_override[i] != lac1 &&
+ (buf = format_binding(key_override, i)) != 0) {
+ (*target->isa->put_block)(target, buf, strlen(buf));
+ FREE(buf);
+ }
} else
#endif /* DIRED_SUPPORT && OK_OVERRIDE */
- if ((buf = format_binding(keymap, i)) != 0) {
+ if (keymap[i] != lac1 && (buf = format_binding(keymap, i)) != 0) {
(*target->isa->put_block)(target, buf, strlen(buf));
FREE(buf);
}
}
+/*
+ * Return lynxactioncode whose name is the string func.
+ * returns -1 if not found. - kw
+ */
+PUBLIC int lacname_to_lac ARGS1(
+ CONST char *, func)
+{
+ Kcmd *mp = LYStringToKcmd(func);
+
+ return (mp != 0) ? (int) mp->code : -1;
+}
+
+/*
+ * Return editactioncode whose name is the string func.
+ * func must be present in the ekmap table.
+ * returns -1 if not found. - kw
+ */
+PUBLIC int lecname_to_lec ARGS1(
+ CONST char *, func)
+{
+ int i;
+ struct emap *mp;
+
+ if (func != NULL && *func != '\0') {
+ for (i = 0, mp = ekmap; (*mp).name != NULL; mp++, i++) {
+ if (strcmp((*mp).name, func) == 0) {
+ return (*mp).code;
+ }
+ }
+ }
+ return (-1);
+}
+
+/*
+ * Return lynxkeycode represented by string src.
+ * returns -1 if not valid.
+ * This is simpler than what map_string_to_keysym() does for
+ * USE_KEYMAP, but compatible with revmap() used for processing
+ * KEYMAP options in the configuration file. - kw
+ */
+PUBLIC int lkcstring_to_lkc ARGS1(
+ CONST char *, src)
+{
+ int c = -1;
+
+ if (strlen(src) == 1)
+ c = *src;
+ else if (strlen(src) == 2 && *src == '^')
+ c = src[1] & 037;
+ else if (strlen(src) >= 2 && isdigit(UCH(*src))) {
+ if (sscanf(src, "%i", &c) != 1)
+ return (-1);
+#ifdef USE_KEYMAPS
+ } else {
+ map_string_to_keysym(src, &c);
+#ifndef USE_SLANG
+ if (c >= 0) {
+ if ((c&LKC_MASK) > 255 && !(c & LKC_ISLKC))
+ return (-1); /* Don't accept untranslated curses KEY_* */
+ else
+ c &= ~LKC_ISLKC;
+ }
+#endif
+#endif
+ }
+ if (c == CH_ESC)
+ escape_bound = 1;
+ if (c < -1)
+ return (-1);
+ else
+ return c;
+}
+
PRIVATE int LYLoadKeymap ARGS4 (
CONST char *, arg GCC_UNUSED,
HTParentAnchor *, anAnchor,
@@ -852,38 +1418,29 @@ PRIVATE int LYLoadKeymap ARGS4 (
}
anAnchor->no_cache = TRUE;
- HTSprintf0(&buf, "<head>\n<title>%s</title>\n</head>\n<body>\n",
+#define PUTS(buf) (*target->isa->put_block)(target, buf, strlen(buf))
+
+ HTSprintf0(&buf, "<html>\n<head>\n<title>%s</title>\n</head>\n<body>\n",
CURRENT_KEYMAP_TITLE);
- (*target->isa->put_block)(target, buf, strlen(buf));
- HTSprintf0(&buf, "<h1>%s (%s)%s<a href=\"%s%s\">%s</a></h1>\n",
- LYNX_NAME, LYNX_VERSION,
- HELP_ON_SEGMENT,
- helpfilepath, CURRENT_KEYMAP_HELP, CURRENT_KEYMAP_TITLE);
- (*target->isa->put_block)(target, buf, strlen(buf));
+ PUTS(buf);
HTSprintf0(&buf, "<pre>\n");
- (*target->isa->put_block)(target, buf, strlen(buf));
+ PUTS(buf);
for (i = 'a'+1; i <= 'z'+1; i++) {
- print_binding(target, i);
- if (keymap[i - ' '] != keymap[i]) {
- print_binding(target, i-' '); /* uppercase mapping is different */
- }
+ print_binding(target, i, TRUE);
}
for (i = 1; i < KEYMAP_SIZE; i++) {
/*
- * LYK_PIPE not implemented yet.
- *
* Don't show CHANGE_LINK if mouse not enabled.
*/
- if ((i >= 0400 || i <= ' ' || !isalpha(i-1)) &&
- strcmp(revmap[keymap[i]].name, "PIPE") &&
- (LYUseMouse || strcmp(revmap[keymap[i]].name, "CHANGE_LINK"))) {
- print_binding(target, i);
+ if ((i >= 0200 || i <= ' ' || !isalpha(i-1)) &&
+ (LYUseMouse || (keymap[i] != LYK_CHANGE_LINK))) {
+ print_binding(target, i, FALSE);
}
}
- HTSprintf0(&buf,"</pre>\n</body>\n");
- (*target->isa->put_block)(target, buf, strlen(buf));
+ HTSprintf0(&buf,"</pre>\n</body>\n</html>\n");
+ PUTS(buf);
(*target->isa->_free)(target);
FREE(buf);
@@ -898,34 +1455,53 @@ GLOBALDEF PUBLIC HTProtocol LYLynxKeymap = {"LYNXKEYMAP", LYLoadKeymap, 0};
#endif /* GLOBALDEF_IS_MACRO */
/*
- * install func as the mapping for key.
- * func must be present in the revmap table.
- * returns TRUE if the mapping was made, FALSE if not.
+ * Install func as the mapping for key.
+ * If for_dired is TRUE, install it in the key_override[] table
+ * for Dired mode, otherwise in the general keymap[] table.
+ * If DIRED_SUPPORT or OK_OVERRIDE is not defined, don't do anything
+ * when for_dired is requested.
+ * returns lynxkeycode value != 0 if the mapping was made, 0 if not.
*/
-PUBLIC int remap ARGS2(
- char *, key,
- char *, func)
+PUBLIC int remap ARGS3(
+ char *, key,
+ char *, func,
+ BOOLEAN, for_dired)
{
- int i;
- struct rmap *mp;
- int c = 0;
-
- if (func == NULL)
- return 0;
- if (strlen(key) == 1)
- c = *key;
- else if (strlen(key) == 2 && *key == '^')
- c = key[1] & 037;
- else if (strlen(key) >= 2 && isdigit(*key))
- if (sscanf(key, "%i", &c) != 1)
- return 0;
- for (i = 0, mp = revmap; (*mp).name != NULL; mp++, i++) {
- if (strcmp((*mp).name, func) == 0) {
- keymap[c+1] = i;
- return c;
- }
- }
- return 0;
+ Kcmd *mp;
+ int c;
+
+#if !defined(DIRED_SUPPORT) || !defined(OK_OVERRIDE)
+ if (for_dired)
+ return 0;
+#endif
+ if (func == NULL)
+ return 0;
+ c = lkcstring_to_lkc(key);
+ if (c <= -1)
+ return 0;
+ else if (c >= 0) {
+ /* Remapping of key actions is supported only for basic
+ * lynxkeycodes, without modifiers etc.! If we get somehow
+ * called for an invalid lynxkeycode, fail or silently ignore
+ * modifiers. - kw
+ */
+ if (c & (LKC_ISLECLAC|LKC_ISLAC))
+ return 0;
+ if ((c & LKC_MASK) != c)
+ c &= LKC_MASK;
+ }
+ if (c + 1 >= KEYMAP_SIZE)
+ return 0;
+ if ((mp = LYStringToKcmd(func)) != 0) {
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ if (for_dired)
+ key_override[c+1] = mp->code;
+ else
+#endif
+ keymap[c+1] = (LYKeymap_t) mp->code;
+ return (c ? c : (int) LAC_TO_LKC0(mp->code)); /* don't return 0, successful */
+ }
+ return 0;
}
@@ -935,7 +1511,7 @@ PUBLIC void set_vms_keys NOARGS
keymap['$'+1] = LYK_SHELL;
}
-static char saved_vi_keys[4];
+static LYKeymap_t saved_vi_keys[4];
static BOOLEAN did_vi_keys;
PUBLIC void set_vi_keys NOARGS
@@ -965,7 +1541,7 @@ PUBLIC void reset_vi_keys NOARGS
did_vi_keys = FALSE;
}
-static char saved_emacs_keys[4];
+static LYKeymap_t saved_emacs_keys[4];
static BOOLEAN did_emacs_keys;
PUBLIC void set_emacs_keys NOARGS
@@ -995,7 +1571,7 @@ PUBLIC void reset_emacs_keys NOARGS
did_emacs_keys = FALSE;
}
-static char saved_number_keys[9];
+static LYKeymap_t saved_number_keys[9];
static BOOLEAN did_number_keys;
PUBLIC void set_numbers_as_arrows NOARGS
@@ -1049,19 +1625,6 @@ PUBLIC void reset_numbers_as_arrows NOARGS
did_number_keys = FALSE;
}
-PUBLIC int lookup_keymap ARGS1(
- int, func)
-{
- size_t i;
-
- for (i = 1; i < KEYMAP_SIZE; i++) {
- if (LYisNonAlnumKeyname(i, func)) {
- return i;
- }
- }
- return -1;
-}
-
PUBLIC char *key_for_func ARGS1 (
int, func)
{
@@ -1070,7 +1633,7 @@ PUBLIC char *key_for_func ARGS1 (
char *formatted;
if ((i = LYReverseKeymap(func)) >= 0) {
- formatted = pretty(i);
+ formatted = LYKeycodeToString(i, TRUE);
StrAllocCopy(buf, formatted != 0 ? formatted : "?");
} else if (buf == 0) {
StrAllocCopy(buf, "");
@@ -1079,19 +1642,142 @@ PUBLIC char *key_for_func ARGS1 (
}
/*
+ * Given one or two keys as lynxkeycodes, returns an allocated string
+ * representing the key(s) suitable for statusline messages, or NULL
+ * if no valid lynxkeycode is passed in (i.e., lkc_first < 0 or some other
+ * failure). The caller must free the string. - kw
+ */
+PUBLIC char *fmt_keys ARGS2(
+ int, lkc_first,
+ int, lkc_second)
+{
+ char *buf = NULL;
+ BOOLEAN quotes = FALSE;
+ char *fmt_first;
+ char *fmt_second;
+ if (lkc_first < 0)
+ return NULL;
+ fmt_first = LYKeycodeToString(lkc_first, TRUE);
+ if (fmt_first && strlen(fmt_first) == 1 && *fmt_first != '\'') {
+ quotes = TRUE;
+ }
+ if (quotes) {
+ if (lkc_second < 0) {
+ HTSprintf0(&buf, "'%s'", fmt_first);
+ return buf;
+ } else {
+ HTSprintf0(&buf, "'%s", fmt_first);
+ }
+ } else {
+ StrAllocCopy(buf, fmt_first);
+ }
+ if (lkc_second >= 0) {
+ fmt_second = LYKeycodeToString(lkc_second, TRUE);
+ if (!fmt_second) {
+ FREE(buf);
+ return NULL;
+ }
+ HTSprintf(&buf, "%s%s%s",
+ ((strlen(fmt_second) > 2 && *fmt_second != '<') ||
+ (strlen(buf) > 2 && buf[strlen(buf)-1] != '>')) ? " " : "",
+ fmt_second, quotes ? "'" : "");
+ }
+ return buf;
+}
+
+/*
+ * This function returns the (int)ch mapped to the
+ * LYK_foo value passed to it as an argument. It is like
+ * LYReverseKeymap, only the order of search is different;
+ * e.g., small ASCII letters will be returned in preference to
+ * capital ones. Cf. LYKeyForEditAction, LYEditKeyForAction in
+ * LYEditmap.c which use the same order to find a best key.
+ * In addition, this function takes the dired override map into
+ * account while LYReverseKeymap doesn't.
+ * The caller must free the returned string. - kw
+ */
+#define FIRST_I 97
+#define NEXT_I(i,imax) ((i==122) ? 32 : (i==96) ? 123 : (i==126) ? 0 :\
+ (i==31) ? 256 : (i==imax) ? 127 :\
+ (i==255) ? (-1) :i+1)
+PRIVATE int best_reverse_keymap ARGS1(
+ int, lac)
+{
+ int i, c;
+
+ for (i = FIRST_I; i >= 0; i = NEXT_I(i,KEYMAP_SIZE-2)) {
+#ifdef NOT_ASCII
+ if (i < 256) {
+ c = FROMASCII(i);
+ } else
+#endif
+ c = i;
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ if (lynx_edit_mode && !no_dired_support && lac &&
+ LKC_TO_LAC(key_override,c) == lac)
+ return c;
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+ if (LKC_TO_LAC(keymap,c) == lac) {
+ return c;
+ }
+ }
+
+ return(-1);
+}
+
+/*
+ * This function returns a string representing a key mapped
+ * to a LYK_foo function, or NULL if not found. The string
+ * may represent a pair of keys. if context_code is FOR_INPUT,
+ * an appropriate binding for use while in the (forms) line editor
+ * is sought. - kw
+ */
+PUBLIC char* key_for_func_ext ARGS2(
+ int, lac,
+ int, context_code)
+{
+ int lkc, modkey = -1;
+
+ if (context_code == FOR_INPUT) {
+ lkc = LYEditKeyForAction(lac, &modkey);
+ if (lkc >= 0) {
+ if (lkc & (LKC_MOD1|LKC_MOD2|LKC_MOD3)) {
+ return fmt_keys(modkey, lkc & ~(LKC_MOD1|LKC_MOD2|LKC_MOD3));
+ } else {
+ return fmt_keys(lkc, -1);
+ }
+ }
+ }
+ lkc = best_reverse_keymap(lac);
+ if (lkc < 0)
+ return NULL;
+ if (context_code == FOR_INPUT) {
+ modkey = LYKeyForEditAction(LYE_LKCMD);
+ if (modkey < 0)
+ return NULL;
+ return fmt_keys(modkey, lkc);
+ } else {
+ return fmt_keys(lkc, -1);
+ }
+}
+
+/*
* This function returns TRUE if the ch is non-alphanumeric
- * and maps to key_name (LYK_foo in the keymap[] array). - FM
+ * and maps to KeyName (LYK_foo in the keymap[] array). - FM
*/
PUBLIC BOOL LYisNonAlnumKeyname ARGS2(
int, ch,
- int, key_name)
+ int, KeyName)
{
- if ((ch >= '0' && ch <= '9') ||
- (ch >= 'A' && ch <= 'z') ||
- ch < 0 || ch >= KEYMAP_SIZE)
+ if (ch < 0 || ch >= KEYMAP_SIZE)
+ return (FALSE);
+ if (ch > 0
+ && strchr("0123456789\
+ABCDEFGHIJKLMNOPQRSTUVWXYZ\
+abcdefghijklmnopqrstuvwxyz", ch) != NULL)
return (FALSE);
- return(keymap[ch+1] == key_name);
+ return (BOOL) (keymap[ch+1] == KeyName);
}
/*
@@ -1099,12 +1785,12 @@ PUBLIC BOOL LYisNonAlnumKeyname ARGS2(
* LYK_foo value passed to it as an argument. - FM
*/
PUBLIC int LYReverseKeymap ARGS1(
- int, key_name)
+ int, KeyName)
{
int i;
for (i = 1; i < KEYMAP_SIZE; i++) {
- if (keymap[i] == key_name) {
+ if (keymap[i] == KeyName) {
return(i - 1);
}
}
diff --git a/gnu/usr.bin/lynx/src/LYKeymap.h b/gnu/usr.bin/lynx/src/LYKeymap.h
index c7e3b634fd6..18db17c0dbc 100644
--- a/gnu/usr.bin/lynx/src/LYKeymap.h
+++ b/gnu/usr.bin/lynx/src/LYKeymap.h
@@ -1,15 +1,22 @@
#ifndef LYKEYMAP_H
#define LYKEYMAP_H
-#ifndef HTUTILS_H
#include <HTUtils.h>
-#endif
+#include <HTList.h>
+#include <LYCurses.h>
-extern BOOLEAN LYisNonAlnumKeyname PARAMS((int ch, int key_name));
+extern BOOLEAN LYisNonAlnumKeyname PARAMS((int ch, int KeyName));
+extern HTList *LYcommandList NOPARAMS;
+extern char *LYKeycodeToString PARAMS((int c, BOOLEAN upper8));
+extern char *fmt_keys PARAMS((int lkc_first, int lkc_second));
extern char *key_for_func PARAMS((int func));
-extern int LYReverseKeymap PARAMS((int key_name));
-extern int lookup_keymap PARAMS((int code));
-extern int remap PARAMS((char *key, char *func));
+extern char *key_for_func_ext PARAMS((int lac, int context_code));
+extern int LYReverseKeymap PARAMS((int KeyName));
+extern int LYStringToKeycode PARAMS((char *src));
+extern int lacname_to_lac PARAMS((CONST char *func));
+extern int lecname_to_lec PARAMS((CONST char *func));
+extern int lkcstring_to_lkc PARAMS((CONST char *src));
+extern int remap PARAMS((char *key, char *func, BOOLEAN for_dired));
extern void print_keymap PARAMS((char **newfile));
extern void reset_emacs_keys NOPARAMS;
extern void reset_numbers_as_arrows NOPARAMS;
@@ -29,8 +36,9 @@ typedef unsigned short LYKeymap_t;
extern LYKeymap_t keymap[KEYMAP_SIZE]; /* main keymap matrix */
#ifdef EXP_KEYBOARD_LAYOUT
+typedef unsigned short LYKbLayout_t;
extern int current_layout;
-extern LYKeymap_t * LYKbLayouts[];
+extern LYKbLayout_t * LYKbLayouts[];
extern char * LYKbLayoutNames[];
extern int LYSetKbLayout PARAMS((char *layout_id));
#endif
@@ -39,9 +47,69 @@ extern int LYSetKbLayout PARAMS((char *layout_id));
extern LYKeymap_t key_override[];
#endif
-/* The order of this enum must match the 'revmap[]' array in LYKeymap.c */
+/* * * LynxKeyCodes * * */
+#define LKC_ISLECLAC 0x8000 /* flag: contains lynxaction + editaction */
+#define LKC_MOD1 0x4000 /* a modifier bit - currently for ^x-map */
+#define LKC_MOD2 0x2000 /* another one - currently for esc-map */
+#define LKC_MOD3 0x1000 /* another one - currently for double-map */
+#define LKC_ISLAC 0x0800 /* flag: lynxkeycode already lynxactioncode */
+
+/* Used to distinguish internal Lynx keycodes of (say) extended ncurses once. */
+#define LKC_ISLKC 0x0400 /* flag: already lynxkeycode (not native) */
+ /* 0x0400 is MOUSE_KEYSYM for slang in LYStrings.c */
+#define LKC_MASK 0x07FF /* mask for lynxkeycode proper */
+
+#define LKC_DONE 0x07FE /* special value - operation done, not-a-key */
+
+/* * * LynxActionCodes * * */
+#define LAC_SHIFT 8 /* shift for lynxactioncode - must not
+ overwrite any assigned LYK_* values */
+#define LAC_MASK ((1<<LAC_SHIFT)-1)
+ /* mask for lynxactioncode - must cover all
+ assigned LYK_* values */
+
+/* Return lkc masking single actioncode, given an lkc masking a lac + lec */
+#define LKC2_TO_LKC(c) (((c) == -1 || !((c) & LKC_ISLECLAC)) ? (c) : \
+ (((c) & LAC_MASK) | LKC_ISLAC))
+
+/* Return lynxeditactioncode, given an lkc masking a lac + lec */
+#define LKC2_TO_LEC(c) (((c) == -1 || !((c) & LKC_ISLECLAC)) ? (c) : \
+ ((((c)&~LKC_ISLECLAC)>>LAC_SHIFT) & LAC_MASK))
+
+/* Convert lynxkeycode to lynxactioncode. Modifiers are dropped. */
+#define LKC_TO_LAC(ktab,c) (((c) == -1) ? ktab[0] : \
+ ((c) & (LKC_ISLECLAC|LKC_ISLAC)) ? ((c) & LAC_MASK) : \
+ ktab[((c) & LKC_MASK) + 1])
+
+
+/* Mask lynxactioncode as a lynxkeycode. */
+#define LAC_TO_LKC0(a) ((a)|LKC_ISLAC)
+
+/* Mask a lynxactioncode and an editactioncode as a lynxkeycode. */
+#define LACLEC_TO_LKC0(a,b) ((a)|((b)<<LAC_SHIFT)|LKC_ISLECLAC)
+
+/* Convert lynxactioncode to a lynxkeycode, attempting reverse mapping. */
+#define LAC_TO_LKC(a) ((LYReverseKeymap(a)>=0)?LYReverseKeymap(a):LAC_TO_LKC0(a))
+
+/* Simplify a lynxkeycode:
+ attempt reverse mapping if a single masked lynxactioncode, drop modifiers. */
+#define LKC_TO_C(c) ((c&LKC_ISLECLAC)? c : (c&LKC_ISLAC)? LAC_TO_LKC(c&LAC_MASK) : (c&LKC_MASK))
+
+#define LKC_HAS_ESC_MOD(c) (c >= 0 && !(c&LKC_ISLECLAC) && (c&LKC_MOD2))
+
+
+/* * The defined LynxActionCodes * */
+
+/* Variables for holding and passing around lynxactioncodes are
+ * generally of type int, the types LYKeymap_t and LYKeymapCodes
+ * are currently only used for the definitions. That could change. - kw
+ *
+ * The values in this enum are indexed against the command names in the
+ * 'revmap[]' array in LYKeymap.c
+ */
typedef enum {
LYK_UNKNOWN=0
+ , LYK_COMMAND
, LYK_1
, LYK_2
, LYK_3
@@ -53,7 +121,6 @@ typedef enum {
, LYK_9
, LYK_SOURCE
, LYK_RELOAD
- , LYK_PIPE
, LYK_QUIT
, LYK_ABORT
, LYK_NEXT_PAGE
@@ -65,8 +132,12 @@ typedef enum {
, LYK_REFRESH
, LYK_HOME
, LYK_END
+ , LYK_FIRST_LINK
+ , LYK_LAST_LINK
, LYK_PREV_LINK
, LYK_NEXT_LINK
+ , LYK_LPOS_PREV_LINK
+ , LYK_LPOS_NEXT_LINK
, LYK_FASTBACKW_LINK
, LYK_FASTFORW_LINK
, LYK_UP_LINK
@@ -75,10 +146,13 @@ typedef enum {
, LYK_LEFT_LINK
, LYK_HISTORY
, LYK_PREV_DOC
+ , LYK_NEXT_DOC
, LYK_ACTIVATE
+ , LYK_SUBMIT /* mostly like LYK_ACTIVATE, for mouse use, don't map */
, LYK_GOTO
, LYK_ECGOTO
, LYK_HELP
+ , LYK_DWIMHELP
, LYK_INDEX
, LYK_NOCACHE
, LYK_INTERRUPT
@@ -86,6 +160,7 @@ typedef enum {
, LYK_OPTIONS
, LYK_INDEX_SEARCH
, LYK_WHEREIS
+ , LYK_PREV
, LYK_NEXT
, LYK_COMMENT
, LYK_EDIT
@@ -118,6 +193,7 @@ typedef enum {
, LYK_SWITCH_DTD
, LYK_ELGOTO
, LYK_CHANGE_LINK
+ , LYK_DWIMEDIT
, LYK_EDIT_TEXTAREA
, LYK_GROW_TEXTAREA
, LYK_INSERT_FILE
@@ -129,7 +205,11 @@ typedef enum {
#endif
#ifdef USE_EXTERNALS
- , LYK_EXTERN
+ , LYK_EXTERN_LINK
+ , LYK_EXTERN_PAGE
+#else
+#define LYK_EXTERN_LINK LYK_UNKNOWN
+#define LYK_EXTERN_PAGE LYK_UNKNOWN
#endif /* !defined(USE_EXTERNALS) */
#if defined(VMS) || defined(DIRED_SUPPORT)
@@ -149,7 +229,54 @@ typedef enum {
#define LYK_TAG_LINK LYK_UNKNOWN
#endif /* DIRED_SUPPORT */
-} LYKeymapCodes;
+#ifdef SH_EX
+ , LYK_CHG_CENTER
+#endif /* SH_EX */
+
+#ifdef KANJI_CODE_OVERRIDE
+ , LYK_CHG_KCODE
+#endif
+
+#ifdef SUPPORT_CHDIR
+ , LYK_CHDIR
+#endif
+
+#ifdef USE_CURSES_PADS
+ , LYK_SHIFT_LEFT
+ , LYK_SHIFT_RIGHT
+ , LYK_LINEWRAP_TOGGLE
+#else
+#define LYK_SHIFT_LEFT LYK_UNKNOWN
+#define LYK_SHIFT_RIGHT LYK_UNKNOWN
+#define LYK_LINEWRAP_TOGGLE LYK_UNKNOWN
+#endif
+
+#ifdef CAN_CUT_AND_PASTE
+ , LYK_PASTE_URL
+ , LYK_TO_CLIPBOARD
+#else
+#define LYK_PASTE_URL LYK_UNKNOWN
+#define LYK_TO_CLIPBOARD LYK_UNKNOWN
+#endif
+
+#ifdef EXP_NESTED_TABLES
+ , LYK_NESTED_TABLES
+#else
+#define LYK_NESTED_TABLES LYK_UNKNOWN
+#endif
+
+} LYKeymapCode;
+
+/*
+ * Symbol table for internal commands.
+ */
+typedef struct {
+ LYKeymapCode code;
+ CONST char *name;
+ CONST char *doc;
+} Kcmd;
+extern Kcmd * LYKeycodeToKcmd PARAMS((LYKeymapCode code));
+extern Kcmd * LYStringToKcmd PARAMS((CONST char * name));
#endif /* LYKEYMAP_H */
diff --git a/gnu/usr.bin/lynx/src/LYLeaks.c b/gnu/usr.bin/lynx/src/LYLeaks.c
index 504954a367c..6f188ebeeb6 100644
--- a/gnu/usr.bin/lynx/src/LYLeaks.c
+++ b/gnu/usr.bin/lynx/src/LYLeaks.c
@@ -116,20 +116,19 @@ PUBLIC void LYLeaks NOARGS
fprintf(Fp_leakagesink, "%s\t%p\n",
gettext("Pointer:"),
ALp_head->vp_Alloced);
- fprintf(Fp_leakagesink, "%s:\t",
+ fprintf(Fp_leakagesink, "%s\t",
gettext("Contains:"));
for (i_counter = 0;
i_counter < ALp_head->st_Bytes &&
i_counter < MAX_CONTENT_LENGTH;
i_counter++) {
- if (isprint(value[i_counter])) {
+ if (isprint(UCH(value[i_counter]))) {
fprintf(Fp_leakagesink, "%c", value[i_counter]);
} else {
fprintf(Fp_leakagesink, "|");
}
}
fprintf(Fp_leakagesink, "\n");
- FREE(ALp_head->vp_Alloced);
fprintf(Fp_leakagesink, "%s\t%d\n",
gettext("ByteSize:"),
(int)(ALp_head->st_Bytes));
@@ -151,6 +150,8 @@ PUBLIC void LYLeaks NOARGS
gettext("LineCount:"),
ALp_head->SL_realloc.ssi_LineNumber);
}
+ fflush(Fp_leakagesink);
+ FREE(ALp_head->vp_Alloced);
}
/*
@@ -208,8 +209,7 @@ PUBLIC void *LYLeakMalloc ARGS3(
* Further allocate memory to store the information.
* Just return on failure to allocate more.
*/
- AllocationList *ALp_new =
- (AllocationList *)calloc(1, sizeof(AllocationList));
+ AllocationList *ALp_new = typecalloc(AllocationList);
if (ALp_new == NULL) {
return(vp_malloc);
@@ -234,6 +234,75 @@ PUBLIC void *LYLeakMalloc ARGS3(
}
/*
+** Purpose: Add information about new allocation to the list,
+** after a call to malloc or calloc or an equivalent
+** function which may or may not have already created
+** a list entry.
+** Arguments: vp_malloc The pointer to newly allocate memory.
+** Arguments: st_bytes The size of the allocation requested
+** in bytes.
+** cp_File The file from which the request for
+** allocation came from.
+** ssi_Line The line number in cp_File where the
+** allocation request came from.
+** Return Value: void * A pointer to the allocated memory or NULL on
+** failure.
+** Remarks/Portability/Dependencies/Restrictions:
+** If no memory is allocated, then no entry is added to the
+** allocation list.
+** Revision History:
+** 1999-02-08 created, modelled after LYLeakMalloc - kw
+*/
+PUBLIC AllocationList *LYLeak_mark_malloced ARGS4(
+ void *, vp_malloced,
+ size_t, st_bytes,
+ CONST char *, cp_File,
+ CONST short, ssi_Line)
+{
+ AllocationList *ALp_new = NULL;
+ /*
+ * The actual allocation has already been done!
+ *
+ * Only on successful allocation do we track any information.
+ */
+ if (vp_malloced != NULL) {
+ /*
+ * See if there is already an entry. If so, just
+ * update the source location info.
+ */
+ ALp_new = FindInList(vp_malloced);
+ if (ALp_new) {
+ ALp_new->SL_memory.cp_FileName = cp_File;
+ ALp_new->SL_memory.ssi_LineNumber = ssi_Line;
+ return(ALp_new);
+ }
+ /*
+ * Further allocate memory to store the information.
+ * Just return on failure to allocate more.
+ */
+ ALp_new = typecalloc(AllocationList);
+
+ if (ALp_new == NULL) {
+ return(NULL);
+ }
+ /*
+ * Copy over the relevant information.
+ */
+ ALp_new->vp_Alloced = vp_malloced;
+ ALp_new->st_Bytes = st_bytes;
+ ALp_new->SL_memory.cp_FileName = cp_File;
+ ALp_new->SL_memory.ssi_LineNumber = ssi_Line;
+
+ /*
+ * Add the new item to the allocation list.
+ */
+ AddToList(ALp_new);
+ }
+
+ return(ALp_new);
+}
+
+/*
** Purpose: Capture allocations by calloc (stdlib.h) and
** save relevant information in a list.
** Arguments: st_number The number of items to allocate.
@@ -268,8 +337,7 @@ PUBLIC void *LYLeakCalloc ARGS4(
* Allocate memory for the item to be in the list.
* If unable, just return.
*/
- AllocationList *ALp_new =
- (AllocationList *)calloc(1, sizeof(AllocationList));
+ AllocationList *ALp_new = typecalloc(AllocationList);
if (ALp_new == NULL) {
return(vp_calloc);
@@ -343,12 +411,10 @@ PUBLIC void *LYLeakRealloc ARGS4(
* Track the invalid pointer value and then exit.
* If unable to allocate, just exit.
*/
- auto AllocationList *ALp_new =
- (AllocationList *)calloc(1,
- sizeof(AllocationList));
+ auto AllocationList *ALp_new = typecalloc(AllocationList);
if (ALp_new == NULL) {
- exit(-1);
+ exit(EXIT_FAILURE);
}
/*
@@ -365,7 +431,7 @@ PUBLIC void *LYLeakRealloc ARGS4(
* Exit.
*/
AddToList(ALp_new);
- exit(-1);
+ exit(EXIT_FAILURE);
}
/*
@@ -389,6 +455,61 @@ PUBLIC void *LYLeakRealloc ARGS4(
}
/*
+** Purpose: Add information about reallocated memory to the list,
+** after a call to realloc or an equivalent
+** function which has not already created or updated
+** a list entry.
+** Arguments: ALp_old List entry for previously allocated
+** block of memory to resize. If NULL,
+** mark_realloced works just like
+** mark_malloced.
+** vp_realloced The new pointer, after resizing.
+** st_newBytes The new size of the chunk of memory.
+** cp_File The file to record.
+** ssi_Line The line to record.
+** Return Value: Pointer to new or updated list entry
+** for this memory block.
+** NULL on allocation error.
+** Revision History:
+** 1999-02-11 created kw
+*/
+#if defined(LY_FIND_LEAKS) && defined(LY_FIND_LEAKS_EXTENDED)
+PRIVATE AllocationList *mark_realloced ARGS5(
+ AllocationList *, ALp_old,
+ void *, vp_realloced,
+ size_t, st_newBytes,
+ CONST char *, cp_File,
+ CONST short, ssi_Line)
+{
+ /*
+ * If there is no list entry for the old allocation, treat this
+ * as if a new allocation had happened.
+ */
+ if (ALp_old == NULL) {
+ return(LYLeak_mark_malloced(
+ vp_realloced, st_newBytes, cp_File, ssi_Line));
+ }
+
+ /*
+ * ALp_old represents the memory block before reallocation.
+ * Assume that if we get here, there isn't yet a list entry
+ * for the new, possibly different, address after realloc,
+ * that is our list hasn't been updated - so we're going to
+ * do that now.
+ */
+
+ if (vp_realloced != NULL) {
+ ALp_old->vp_Alloced = vp_realloced;
+ ALp_old->st_Bytes = st_newBytes;
+ ALp_old->SL_realloc.cp_FileName = cp_File;
+ ALp_old->SL_realloc.ssi_LineNumber = ssi_Line;
+ }
+
+ return(ALp_old);
+}
+#endif /* not LY_FIND_LEAKS and LY_FIND_LEAKS_EXTENDED */
+
+/*
** Purpose: Capture all requests to free information and also
** remove items from the allocation list.
** Arguments: vp_Alloced The memory to free.
@@ -421,12 +542,10 @@ PUBLIC void LYLeakFree ARGS3(
* Create the final entry before exiting marking this error.
* If unable to allocate more memory just exit.
*/
- AllocationList *ALp_new =
- (AllocationList *)calloc(1,
- sizeof(AllocationList));
+ AllocationList *ALp_new = typecalloc(AllocationList);
if (ALp_new == NULL) {
- exit(-1);
+ exit(EXIT_FAILURE);
}
/*
@@ -466,9 +585,9 @@ PUBLIC char * LYLeakSACopy ARGS4(
CONST short, ssi_Line)
{
if (src != NULL && src == *dest) {
- CTRACE(tfp,
+ CTRACE((tfp,
"LYLeakSACopy: *dest equals src, contains \"%s\"\n",
- src);
+ src));
return *dest;
}
if (*dest) {
@@ -497,9 +616,9 @@ PUBLIC char * LYLeakSACat ARGS4(
{
if (src && *src) {
if (src == *dest) {
- CTRACE(tfp,
+ CTRACE((tfp,
"LYLeakSACat: *dest equals src, contains \"%s\"\n",
- src);
+ src));
return *dest;
}
if (*dest) {
@@ -523,6 +642,228 @@ PUBLIC char * LYLeakSACat ARGS4(
return *dest;
}
+#if defined(LY_FIND_LEAKS) && defined(LY_FIND_LEAKS_EXTENDED)
+PUBLIC CONST char * leak_cp_File_hack = __FILE__;
+PUBLIC short leak_ssi_Line_hack = __LINE__;
+
+/*
+** Purpose: A wrapper around StrAllocVsprintf (the workhorse of
+** HTSprintf/HTSprintf0, implemented in HTString.c) that
+** tries to make sure that our allocation list is always
+** properly updated, whether StrAllocVsprintf itself was
+** compiled with memory tracking or not (or even a mixture,
+** like tracking the freeing but not the new allocation).
+** Some source files can be compiled with LY_FIND_LEAKS_EXTENDED
+** in effect while others only have LY_FIND_LEAKS in effect,
+** and as long as HTString.c is complied with memory tracking
+** (of either kind) string objects allocated by HTSprintf/
+** HTSprintf0 (or otherwise) can be passed around among them and
+** manipulated both ways.
+** Arguments: dest As for StrAllocVsprintf.
+** cp_File The source file of the caller (i.e. the
+** caller of HTSprintf/HTSprintf0, hopefully).
+** ssi_Line The line of cp_File calling.
+** inuse,fmt,ap As for StrAllocVsprintf.
+** Return Value: The char pointer to resulting string, as set
+** by StrAllocVsprintf, or
+** NULL if dest==0 (wrong use!).
+** Remarks/Portability/Dependencies/Restrictions:
+** The price for generality is severe inefficiency: several
+** list lookups are done to be on the safe side.
+** We don't get he real allocation size, only a minimum based
+** on the string length of the result. So the amount of memory
+** leakage may get underestimated.
+** If *dest is an invalid pointer value on entry (i.e. was not
+** tracked), the program will exit after one last entry is added
+** to the allocation list.
+** If StrAllocVsprintf fails to return a valid string via the
+** indirect string pointer (its first parameter), invalid memory
+** access will result and the program will probably terminate
+** with a signal. This can happen if, on entry, *dest is NULL
+** and fmt is empty or NULL, so just Don't Do That.
+** Revision History:
+** 1999-02-11 created kw
+** 1999-10-15 added comments kw
+*/
+PRIVATE char * LYLeakSAVsprintf ARGS6(
+ char **, dest,
+ CONST char *, cp_File,
+ CONST short, ssi_Line,
+ size_t, inuse,
+ CONST char *, fmt,
+ va_list *, ap)
+{
+ AllocationList *ALp_old;
+ void *vp_oldAlloced;
+
+ CONST char * old_cp_File = __FILE__;
+ short old_ssi_Line = __LINE__;
+
+ if (!dest)
+ return NULL;
+
+ vp_oldAlloced = *dest;
+ if (!vp_oldAlloced) {
+ StrAllocVsprintf(dest, inuse, fmt, ap);
+ LYLeak_mark_malloced(*dest, strlen(*dest) + 1, cp_File, ssi_Line);
+ return(*dest);
+ } else {
+ void * vp_realloced;
+ ALp_old = FindInList(vp_oldAlloced);
+ if (ALp_old == NULL) {
+ /*
+ * Track the invalid pointer value and then exit.
+ * If unable to allocate, just exit.
+ */
+ auto AllocationList *ALp_new = typecalloc(AllocationList);
+
+ if (ALp_new == NULL) {
+ exit(EXIT_FAILURE);
+ }
+
+ /*
+ * Set the information up; no need to allocate file name
+ * since it is a static string.
+ */
+ ALp_new->vp_Alloced = NULL;
+ ALp_new->vp_BadRequest = vp_oldAlloced;
+ ALp_new->SL_realloc.cp_FileName = cp_File;
+ ALp_new->SL_realloc.ssi_LineNumber = ssi_Line;
+
+ /*
+ * Add the item to the list.
+ * Exit.
+ */
+ AddToList(ALp_new);
+ exit(EXIT_FAILURE);
+ }
+
+ old_cp_File = ALp_old->SL_memory.cp_FileName;
+ old_ssi_Line = ALp_old->SL_memory.ssi_LineNumber;
+ /*
+ * DO THE REAL WORK, by calling StrAllocVsprintf.
+ * If result is not NULL, record the information.
+ */
+ StrAllocVsprintf(dest, inuse, fmt, ap);
+ vp_realloced = (void *)*dest;
+ if (vp_realloced != NULL) {
+ AllocationList *ALp_new = FindInList(vp_realloced);
+ if (!ALp_new) {
+ /* Look up again, list may have changed! - kw */
+ ALp_old = FindInList(vp_oldAlloced);
+ if (ALp_old == NULL) {
+ LYLeak_mark_malloced(*dest, strlen(*dest) + 1, cp_File, ssi_Line);
+ return(*dest);
+ }
+ mark_realloced(ALp_old, *dest, strlen(*dest) + 1, cp_File, ssi_Line);
+ return(*dest);
+ }
+ if (vp_realloced == vp_oldAlloced) {
+ ALp_new->SL_memory.cp_FileName = old_cp_File;
+ ALp_new->SL_memory.ssi_LineNumber = old_ssi_Line;
+ ALp_new->SL_realloc.cp_FileName = cp_File;
+ ALp_new->SL_realloc.ssi_LineNumber = ssi_Line;
+ return(*dest);
+ }
+ /* Look up again, list may have changed! - kw */
+ ALp_old = FindInList(vp_oldAlloced);
+ if (ALp_old == NULL) {
+ ALp_new->SL_memory.cp_FileName = old_cp_File;
+ ALp_new->SL_memory.ssi_LineNumber = old_ssi_Line;
+ ALp_new->SL_realloc.cp_FileName = cp_File;
+ ALp_new->SL_realloc.ssi_LineNumber = ssi_Line;
+ } else {
+ ALp_new->SL_memory.cp_FileName = old_cp_File;
+ ALp_new->SL_memory.ssi_LineNumber = old_ssi_Line;
+ ALp_new->SL_realloc.cp_FileName = cp_File;
+ ALp_new->SL_realloc.ssi_LineNumber = ssi_Line;
+ }
+ }
+ return(*dest);
+ }
+}
+
+/* Note: the following may need updating if HTSprintf in HTString.c
+ * is changed. - kw */
+#if ANSI_VARARGS
+PRIVATE char * LYLeakHTSprintf (char **pstr, CONST char *fmt, ...)
+#else
+PRIVATE char * LYLeakHTSprintf (va_alist)
+ va_dcl
+#endif
+{
+ char *str;
+ size_t inuse = 0;
+ va_list ap;
+ LYva_start(ap,fmt);
+ {
+#if !ANSI_VARARGS
+ char ** pstr = va_arg(ap, char **);
+ CONST char * fmt = va_arg(ap, CONST char *);
+#endif
+ if (pstr != 0 && *pstr != 0)
+ inuse = strlen(*pstr);
+ str = LYLeakSAVsprintf(pstr, leak_cp_File_hack, leak_ssi_Line_hack,
+ inuse, fmt, &ap);
+ }
+ va_end(ap);
+ return str;
+}
+
+/* Note: the following may need updating if HTSprintf0 in HTString.c
+ * is changed. - kw */
+#if ANSI_VARARGS
+PRIVATE char * LYLeakHTSprintf0 (char **pstr, CONST char *fmt, ...)
+#else
+PRIVATE char * LYLeakHTSprintf0 (va_alist)
+ va_dcl
+#endif
+{
+ char *str;
+ va_list ap;
+ LYva_start(ap,fmt);
+ {
+#if !ANSI_VARARGS
+ char ** pstr = va_arg(ap, char **);
+ CONST char * fmt = va_arg(ap, CONST char *);
+#endif
+ str = LYLeakSAVsprintf(pstr, leak_cp_File_hack, leak_ssi_Line_hack,
+ 0, fmt, &ap);
+ }
+ va_end(ap);
+ return str;
+}
+
+/*
+ * HTSprintf and HTSprintf0 will be defined such that they effectively
+ * call one of the following two functions that store away a copy to
+ * the File & Line info in temporary hack variables, and then call
+ * the real function (which is returned here as a function pointer)
+ * to the regular HTSprintf/HTSprintf0 arguments.
+ * It's probably a bit inefficient, but that shouldn't be noticeable
+ * compared to all the time that memory tracking takes up for list
+ * traversal. - kw
+ */
+PUBLIC HTSprintflike *Get_htsprintf_fn ARGS2(
+ CONST char *, cp_File,
+ CONST short, ssi_Line)
+{
+ leak_cp_File_hack = cp_File;
+ leak_ssi_Line_hack = ssi_Line;
+ return &LYLeakHTSprintf;
+}
+
+PUBLIC HTSprintflike *Get_htsprintf0_fn ARGS2(
+ CONST char *, cp_File,
+ CONST short, ssi_Line)
+{
+ leak_cp_File_hack = cp_File;
+ leak_ssi_Line_hack = ssi_Line;
+ return &LYLeakHTSprintf0;
+}
+
+#endif /* not LY_FIND_LEAKS and LY_FIND_LEAKS_EXTENDED */
+
/*
** Purpose: Add a new allocation item to the list.
** Arguments: ALp_new The new item to add.
diff --git a/gnu/usr.bin/lynx/src/LYList.c b/gnu/usr.bin/lynx/src/LYList.c
index f1e111ff3b6..fcc1ad7441a 100644
--- a/gnu/usr.bin/lynx/src/LYList.c
+++ b/gnu/usr.bin/lynx/src/LYList.c
@@ -13,6 +13,7 @@
#include <LYClean.h>
#include <LYGlobalDefs.h>
#include <LYCharUtils.h>
+#include <LYCharSets.h>
#ifdef DIRED_SUPPORT
#include <LYUpload.h>
@@ -32,17 +33,6 @@
** Clear: we only get addresses.
*/
-static char *list_filename = 0;
-
-/*
- * Returns the name of the file used for the List Page, if one has
- * been created, as a full URL; otherwise, returns an empty string.
- * - kw
- */
-PUBLIC char * LYlist_temp_url NOARGS
-{
- return list_filename ? list_filename : "";
-}
PUBLIC int showlist ARGS2(
document *, newdoc,
@@ -51,6 +41,7 @@ PUBLIC int showlist ARGS2(
int cnt;
int refs, hidden_links;
static char tempfile[LY_MAXPATH];
+ static BOOLEAN last_titles = TRUE;
FILE *fp0;
char *Address = NULL, *Title = NULL, *cp = NULL;
char *LinkTitle = NULL; /* Rel stored as property of link, not of dest */
@@ -69,15 +60,22 @@ PUBLIC int showlist ARGS2(
return(-1);
}
- LYRemoveTemp(tempfile);
- if ((fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w")) == NULL) {
+ if (LYReuseTempfiles && titles == last_titles) {
+ fp0 = LYOpenTempRewrite(tempfile, HTML_SUFFIX, "w");
+ } else {
+ LYRemoveTemp(tempfile);
+ fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w");
+ }
+ if (fp0 == NULL) {
HTUserMsg(CANNOT_OPEN_TEMP);
return(-1);
}
- LYLocalFileToURL(&list_filename, tempfile);
+ LYLocalFileToURL(&(newdoc->address), tempfile);
- StrAllocCopy(newdoc->address, list_filename);
+ LYRegisterUIPage(newdoc->address,
+ titles ? UIP_LIST_PAGE : UIP_ADDRLIST_PAGE);
+ last_titles = titles;
LYforce_HTML_mode = TRUE; /* force this file to be HTML */
LYforce_no_cache = TRUE; /* force this file to be new */
@@ -125,7 +123,7 @@ PUBLIC int showlist ARGS2(
* right in connection with always treating this file as
* HIDDENLINKS_MERGE in GridText.c - kw
*/
- if (keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED) {
+ if (keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED) {
HText_FormDescNumber(cnt, (char **)&desc);
fprintf(fp0,
"<li><a id=%d href=\"#%d\">form field</a> = <em>%s</em>\n",
@@ -169,7 +167,7 @@ PUBLIC int showlist ARGS2(
FREE(address);
LYEntify(&Address, TRUE);
if (title && *title) {
- StrAllocCopy(Title, title);
+ LYformTitle(&Title, title);
LYEntify(&Title, TRUE);
if (*Title) {
cp = strchr(Address, '#');
@@ -288,7 +286,7 @@ PUBLIC void printlist ARGS2(
* the list page match the numbering in the original document,
* but won't create a forward link to the form. - FM && LE
*/
- if (keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED) {
+ if (keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED) {
HText_FormDescNumber(cnt, (char **)&desc);
fprintf(fp, "%4d. form field = %s\n", cnt, desc);
}
diff --git a/gnu/usr.bin/lynx/src/LYList.h b/gnu/usr.bin/lynx/src/LYList.h
index 4288107bc64..3c8e4c4e58b 100644
--- a/gnu/usr.bin/lynx/src/LYList.h
+++ b/gnu/usr.bin/lynx/src/LYList.h
@@ -3,7 +3,6 @@
#include <LYStructs.h>
-extern char * LYlist_temp_url NOPARAMS;
extern int showlist PARAMS((document *newdoc, BOOLEAN titles));
extern void printlist PARAMS((FILE *fp, BOOLEAN titles));
diff --git a/gnu/usr.bin/lynx/src/LYLocal.c b/gnu/usr.bin/lynx/src/LYLocal.c
index 04a85fa27d6..4ef06fa24ae 100644
--- a/gnu/usr.bin/lynx/src/LYLocal.c
+++ b/gnu/usr.bin/lynx/src/LYLocal.c
@@ -43,41 +43,39 @@
#include <LYUpload.h>
#include <LYLocal.h>
#include <LYClean.h>
+#include <www_wait.h>
-#ifndef VMS
-#ifndef _WINDOWS
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
+#ifdef SUPPORT_CHDIR
+#include <LYMainLoop.h>
#endif
-#endif /*_WINDOWS */
-#endif /* VMS */
-#ifndef WEXITSTATUS
-# ifdef HAVE_TYPE_UNIONWAIT
-# define WEXITSTATUS(status) (status.w_retcode)
-# else
-# define WEXITSTATUS(status) (((status) & 0xff00) >> 8)
-# endif
-#endif
+#include <LYLeaks.h>
-#ifndef WTERMSIG
-# ifdef HAVE_TYPE_UNIONWAIT
-# define WTERMSIG(status) (status.w_termsig)
-# else
-# define WTERMSIG(status) ((status) & 0x7f)
-# endif
-#endif
+#undef USE_COMPRESS
-#include <LYLeaks.h>
+#ifdef __DJGPP__
+#define EXT_TAR_GZ ".tgz"
+#define EXT_TAR_Z ".taz"
+#define EXT_Z ".z"
+#else
+#define EXT_TAR_GZ ".tar.gz"
+#define EXT_TAR_Z ".tar.Z"
+#define EXT_Z ".Z"
+#endif
-PRIVATE int LYExecv PARAMS((
- char * path,
- char ** argv,
- char * msg));
+#ifndef DIRED_MAXBUF
+#define DIRED_MAXBUF 512
+#endif
#ifdef DIRED_SUPPORT
-PUBLIC char LYPermitFileURL[LY_MAXPATH] = "\0";
-PUBLIC char LYDiredFileURL[LY_MAXPATH] = "\0";
+
+#ifdef OK_INSTALL
+#ifdef FNAMES_8_3
+#define INSTALLDIRS_FILE "instdirs.htm"
+#else
+#define INSTALLDIRS_FILE ".installdirs.html"
+#endif /* FNAMES_8_3 */
+#endif /* OK_INSTALL */
PRIVATE char *get_filename PARAMS((
char * prompt,
@@ -85,19 +83,19 @@ PRIVATE char *get_filename PARAMS((
size_t bufsize));
#ifdef OK_PERMIT
-PRIVATE BOOLEAN permit_location PARAMS((
+PRIVATE int permit_location PARAMS((
char * destpath,
char * srcpath,
- char ** newpath));
+ char ** newpath));
#endif /* OK_PERMIT */
PRIVATE char *render_item PARAMS((
CONST char * s,
- char * path,
- char * dir,
+ CONST char * path,
+ CONST char * dir,
char * buf,
int bufsize,
- BOOLEAN url_syntax));
+ BOOLEAN url_syntax));
PRIVATE struct dired_menu *menu_head = NULL;
struct dired_menu {
@@ -118,23 +116,36 @@ struct dired_menu {
* configuration file via DIRED_MENU lines, then these default entries
* are discarded entirely.
*/
+#ifdef SUPPORT_CHDIR
+{ 0, "", "Change directory",
+ "", "LYNXDIRED://CHDIR", NULL },
+#endif
{ 0, "", "New File",
"(in current directory)", "LYNXDIRED://NEW_FILE%d", NULL },
{ 0, "", "New Directory",
"(in current directory)", "LYNXDIRED://NEW_FOLDER%d", NULL },
+#ifdef OK_INSTALL
{ DE_FILE, "", "Install",
-"(of current selection)", "LYNXDIRED://INSTALL_SRC%p", NULL },
+"selected file to new location", "LYNXDIRED://INSTALL_SRC%p", NULL },
+/* The following (installing a directory) doesn't work for me, at least
+ with the "install" from GNU fileutils 4.0. I leave it in anyway, in
+ case one compiles with INSTALL_PATH / INSTALL_ARGS defined to some
+ other command for which it works (like a script, or maybe "cp -a"). - kw
+*/
{ DE_DIR, "", "Install",
-"(of current selection)", "LYNXDIRED://INSTALL_SRC%p", NULL },
+"selected directory to new location", "LYNXDIRED://INSTALL_SRC%p", NULL },
+#endif /* OK_INSTALL */
{ 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 },
+#ifdef S_IFLNK
{ DE_SYMLINK, "", "Modify Name",
"(of selected symbolic link)", "LYNXDIRED://MODIFY_NAME%p", NULL },
+#endif /* S_IFLNK */
#ifdef OK_PERMIT
{ DE_FILE, "", "Modify File Permissions",
@@ -147,15 +158,19 @@ struct dired_menu {
"(of selected file)" , "LYNXDIRED://MODIFY_LOCATION%p", NULL },
{ DE_DIR, "", "Change Location",
"(of selected directory)", "LYNXDIRED://MODIFY_LOCATION%p", NULL },
+#ifdef S_IFLNK
{ DE_SYMLINK, "", "Change Location",
"(of selected symbolic link)", "LYNXDIRED://MODIFY_LOCATION%p", NULL },
+#endif /* S_IFLNK */
{ DE_FILE, "", "Remove File",
"(current selection)", "LYNXDIRED://REMOVE_SINGLE%p", NULL },
{ DE_DIR, "", "Remove Directory",
"(current selection)", "LYNXDIRED://REMOVE_SINGLE%p", NULL },
+#ifdef S_IFLNK
{ DE_SYMLINK, "", "Remove Symbolic Link",
"(current selection)", "LYNXDIRED://REMOVE_SINGLE%p", NULL },
+#endif /* S_IFLNK */
#if defined(OK_UUDECODE) && !defined(ARCHIVE_ONLY)
{ DE_FILE, "", "UUDecode",
@@ -163,7 +178,7 @@ struct dired_menu {
#endif /* OK_UUDECODE && !ARCHIVE_ONLY */
#if defined(OK_TAR) && !defined(ARCHIVE_ONLY)
-{ DE_FILE, ".tar.Z", "Expand",
+{ DE_FILE, EXT_TAR_Z, "Expand",
"(current selection)", "LYNXDIRED://UNTAR_Z%p", NULL },
#endif /* OK_TAR && !ARCHIVE_ONLY */
@@ -176,7 +191,7 @@ struct dired_menu {
#endif /* OK_TAR && OK_GZIP && !ARCHIVE_ONLY */
#ifndef ARCHIVE_ONLY
-{ DE_FILE, ".Z", "Uncompress",
+{ DE_FILE, EXT_Z, "Uncompress",
"(current selection)", "LYNXDIRED://DECOMPRESS%p", NULL },
#endif /* ARCHIVE_ONLY */
@@ -205,6 +220,11 @@ struct dired_menu {
"(using GNU gzip)", "LYNXDIRED://TAR_GZ%p", NULL },
#endif /* OK_TAR && OK_GZIP */
+#if defined(OK_TAR) && defined(USE_COMPRESS)
+{ DE_DIR, "", "Tar and compress",
+ "(using compress)", "LYNXDIRED://TAR_Z%p", NULL },
+#endif /* OK_TAR && USE_COMPRESS */
+
#ifdef OK_ZIP
{ DE_DIR, "", "Package and compress",
"(using zip)", "LYNXDIRED://ZIP%p", NULL },
@@ -215,7 +235,7 @@ struct dired_menu {
#ifdef OK_GZIP
{ DE_FILE, "", "Compress",
- "(using gzip)", "LYNXDIRED://GZIP%p", NULL },
+ "(using gzip)", "LYNXDIRED://GZIP%p", NULL },
#endif /* OK_GZIP */
#ifdef OK_ZIP
@@ -226,6 +246,11 @@ struct dired_menu {
{ DE_TAG, "", "Move all tagged items to another location.",
"", "LYNXDIRED://MOVE_TAGGED%d", NULL },
+#ifdef OK_INSTALL
+{ DE_TAG, "", "Install tagged files into another directory.",
+ "", "LYNXDIRED://INSTALL_SRC%00", NULL },
+#endif
+
{ DE_TAG, "", "Remove all tagged files and directories.",
"", "LYNXDIRED://REMOVE_TAGGED", NULL },
@@ -233,22 +258,24 @@ struct dired_menu {
"", "LYNXDIRED://CLEAR_TAGGED", NULL },
{ 0, NULL, NULL,
- NULL, NULL, NULL }
+ NULL, NULL, NULL }
};
-PRIVATE BOOLEAN cannot_stat ARGS1(char *, name)
+PRIVATE BOOLEAN cannot_stat ARGS1(CONST char *, name)
{
char *tmpbuf = 0;
- HTSprintf(&tmpbuf, gettext("Unable to get status of '%s'."), name);
+ HTSprintf0(&tmpbuf, gettext("Unable to get status of '%s'."), name);
HTAlert(tmpbuf);
FREE(tmpbuf);
return FALSE;
}
-PRIVATE BOOLEAN ok_stat ARGS2(char *, name, struct stat*, sb)
+#define OK_STAT(name, sb) (stat(name, sb) == 0)
+
+PRIVATE BOOLEAN ok_stat ARGS2(CONST char *, name, struct stat*, sb)
{
- CTRACE(tfp, "testing ok_stat(%s)\n", name);
- if (stat(name, sb) < 0) {
+ CTRACE((tfp, "testing ok_stat(%s)\n", name));
+ if (!OK_STAT(name, sb)) {
return cannot_stat(name);
}
return TRUE;
@@ -257,7 +284,7 @@ PRIVATE BOOLEAN ok_stat ARGS2(char *, name, struct stat*, sb)
#ifdef HAVE_LSTAT
PRIVATE BOOLEAN ok_lstat ARGS2(char *, name, struct stat*, sb)
{
- CTRACE(tfp, "testing ok_lstat(%s)\n", name);
+ CTRACE((tfp, "testing ok_lstat(%s)\n", name));
if (lstat(name, sb) < 0) {
return cannot_stat(name);
}
@@ -277,34 +304,160 @@ PRIVATE BOOLEAN ok_file_or_dir ARGS1(struct stat*, sb)
return TRUE;
}
-PRIVATE BOOLEAN ok_localname ARGS2(char*, dst, char*, src)
+#ifdef OK_INSTALL /* currently only used in local_install */
+PRIVATE BOOLEAN ok_localname ARGS2(char*, dst, CONST char*, src)
{
- char *s = HTfullURL_toFile(strip_trailing_slash(src));
struct stat dir_info;
- if (!ok_stat(s, &dir_info)
+ if (!ok_stat(src, &dir_info)
|| !ok_file_or_dir(&dir_info)) {
- FREE(s);
return FALSE;
}
- strcpy(dst, s);
- FREE(s);
+ if (strlen(src) >= DIRED_MAXBUF) {
+ CTRACE((tfp, "filename too long in ok_localname!\n"));
+ return FALSE;
+ }
+ strcpy(dst, src);
return TRUE;
}
+#endif /* OK_INSTALL */
+
+/*
+ * Execute DIRED command, return -1 or 0 on failure, 1 success.
+ */
+PRIVATE int LYExecv ARGS3(
+ char *, path,
+ char **, argv,
+ char *, msg)
+{
+ int rc = 0;
+#if defined(VMS)
+ CTRACE((tfp, "LYExecv: Called inappropriately!\n"));
+#else
+#if defined(_WINDOWS)
+ if (!strcmp(path, TOUCH_PATH)) {
+#if defined(__BORLANDC__) || defined(__MINGW32__)
+ int fd = _creat(argv[1], S_IREAD | S_IWRITE);
+#else /* Visual C++ */
+ int fd = _creat(argv[1], _S_IREAD | _S_IWRITE);
+#endif
+ if (fd >= 0) {
+ close(fd);
+ return(1);
+ }
+ } else if (!strcmp(path, RM_PATH)) {
+ rc = remove(argv[2]);
+ } else {
+ CTRACE((tfp, "LYExecv: Called inappropriately! (path=%s)\n", path));
+ }
+#else
+ int n;
+ char *tmpbuf = 0;
+#ifdef __DJGPP__
+ stop_curses();
+ HTSprintf0(&tmpbuf, "%s", path);
+ for (n = 1; argv[n] != 0; n++)
+ HTSprintf(&tmpbuf, " %s", argv[n]);
+ HTSprintf(&tmpbuf, "\n");
+ rc = LYSystem(tmpbuf) ? 0 : 1;
+#else
+ pid_t pid;
+#ifdef HAVE_TYPE_UNIONWAIT
+ union wait wstatus;
+#else
+ int wstatus;
+#endif
+
+ if (TRACE) {
+ CTRACE((tfp, "LYExecv path='%s'\n", path));
+ for (n = 0; argv[n] != 0; n++)
+ CTRACE((tfp, "argv[%d] = '%s'\n", n, argv[n]));
+ }
+ rc = 1; /* It will work */
+ stop_curses();
+ pid = fork(); /* fork and execute command */
+
+ switch (pid) {
+ case -1:
+ HTSprintf0(&tmpbuf, gettext("Unable to %s due to system error!"), msg);
+ rc = 0;
+ break; /* don't fall thru! - KW */
+
+ case 0: /* child */
+#ifdef USE_EXECVP
+ execvp(path, argv); /* this uses our $PATH */
+#else
+ execv(path, argv);
+#endif
+ exit(EXIT_FAILURE); /* execv failed, give wait() something to look at */
+ /*NOTREACHED*/
+
+ default: /* parent */
+#if !HAVE_WAITPID
+ while (wait(&wstatus) != pid)
+ ; /* do nothing */
+#else
+ while (-1 == waitpid(pid, &wstatus, 0)) { /* wait for child */
+#ifdef EINTR
+ if (errno == EINTR)
+ continue;
+#endif /* EINTR */
+#ifdef ERESTARTSYS
+ if (errno == ERESTARTSYS)
+ continue;
+#endif /* ERESTARTSYS */
+ break;
+ }
+#endif /* !HAVE_WAITPID */
+ if (WEXITSTATUS(wstatus) != 0 ||
+ WTERMSIG(wstatus) > 0) { /* error return */
+ HTSprintf0(&tmpbuf, gettext("Probable failure to %s due to system error!"),
+ msg);
+ rc = 0;
+ }
+ }
+#endif /* __DJGPP__ */
+
+ if (rc == 0) {
+ /*
+ * Screen may have message from the failed execv'd command.
+ * Give user time to look at it before screen refresh.
+ */
+ LYSleepAlert();
+ }
+ start_curses();
+ if (tmpbuf != 0) {
+ if (rc == 0)
+ HTAlert(tmpbuf);
+ FREE(tmpbuf);
+ }
+
+#endif /* _WINDOWS */
+#endif /* VMS */
+ return(rc);
+}
PRIVATE int move_file ARGS2(char *, source, char *, target)
{
int code;
+#ifdef WIN_EX /* 1999/01/02 (Sat) 23:24:20 */
+ if ((code = rename(source, target)) != 0)
+ if ((code = LYCopyFile(source, target)) >= 0)
+ code = remove(source);
+ if (code == 0)
+ code = 1;
+#else
char *msg = 0;
char *args[5];
- HTSprintf(&msg, gettext("move %s to %s"), source, target);
+ HTSprintf0(&msg, gettext("move %s to %s"), source, target);
args[0] = "mv";
args[1] = source;
args[2] = target;
args[3] = (char *) 0;
code = (LYExecv(MV_PATH, args, msg) <= 0) ? -1 : 1;
FREE(msg);
+#endif
return code;
}
@@ -312,7 +465,7 @@ PRIVATE BOOLEAN not_already_exists ARGS1(char *, name)
{
struct stat dir_info;
- if (stat(name, &dir_info) == -1) {
+ if (!OK_STAT(name, &dir_info)) {
if (errno != ENOENT) {
cannot_stat(name);
} else {
@@ -328,10 +481,10 @@ PRIVATE BOOLEAN not_already_exists ARGS1(char *, name)
return FALSE;
}
-PRIVATE BOOLEAN dir_has_same_owner ARGS2(struct stat *, info, uid_t, owner)
+PRIVATE BOOLEAN dir_has_same_owner ARGS2(struct stat *, info, int, owner)
{
if (S_ISDIR(info->st_mode)) {
- if (info->st_uid == owner) {
+ if ((int) info->st_uid == owner) {
return TRUE;
} else {
HTAlert(gettext("Destination has different owner! Request denied."));
@@ -345,7 +498,7 @@ PRIVATE BOOLEAN dir_has_same_owner ARGS2(struct stat *, info, uid_t, owner)
/*
* Remove all tagged files and directories.
*/
-PRIVATE BOOLEAN remove_tagged NOARGS
+PRIVATE int remove_tagged NOARGS
{
int ans;
BOOL will_clear = TRUE;
@@ -360,7 +513,7 @@ PRIVATE BOOLEAN remove_tagged NOARGS
if (HTList_isEmpty(tagged)) /* should never happen */
return 0;
- ans = HTConfirm(gettext("Remove all tagged files and directories "));
+ ans = HTConfirm(gettext("Remove all tagged files and directories?"));
count = 0;
tag = tagged;
@@ -388,6 +541,7 @@ PRIVATE BOOLEAN remove_tagged NOARGS
break;
}
++count;
+ FREE(testpath);
}
}
}
@@ -406,15 +560,15 @@ PRIVATE BOOLEAN remove_tagged NOARGS
* If a user has enough permissions to move a file somewhere, the same
* uid with Lynx & dired can do the same thing.
*/
-PRIVATE BOOLEAN modify_tagged ARGS1(
- char *, testpath)
+PRIVATE int modify_tagged ARGS1(
+ char *, testpath)
{
char *cp;
dev_t dev;
ino_t inode;
- uid_t owner;
+ int owner;
char tmpbuf[1024];
- char *savepath = NULL;
+ char *savepath;
char *srcpath = NULL;
struct stat dir_info;
int count = 0;
@@ -448,21 +602,28 @@ PRIVATE BOOLEAN modify_tagged ARGS1(
cp = HTList_lastObject(tagged);
testpath = NULL; /* Won't be needed any more in this function,
set to NULL as a flag. */
- if (!cp) /* Last resort, should never happen. */
- cp = "/";
}
if (testpath == NULL) {
/*
* Get the directory containing the file or subdir.
*/
- cp = HTfullURL_toFile(strip_trailing_slash(cp));
- savepath = HTParse(".", cp, PARSE_PATH+PARSE_PUNCTUATION);
+ if (cp) {
+ cp = strip_trailing_slash(cp);
+ cp = HTParse(".", cp, PARSE_PATH+PARSE_PUNCTUATION);
+ savepath = HTURLPath_toFile(cp, TRUE);
+ FREE(cp);
+ } else { /* Last resort, should never happen. */
+ savepath = HTURLPath_toFile(".", TRUE);
+ }
} else {
- cp = HTfullURL_toFile(cp);
- StrAllocCopy(savepath, cp);
+ if (!strncmp(cp, "file://localhost", 16)) {
+ cp += 16;
+ } else if (!strncmp(cp, "file:", 5)) {
+ cp += 5;
+ }
+ savepath = HTURLPath_toFile(cp, TRUE);
}
- FREE(cp);
if (!ok_stat(savepath, &dir_info)) {
FREE(savepath);
@@ -490,7 +651,7 @@ PRIVATE BOOLEAN modify_tagged ARGS1(
FREE(cp1);
return 0;
}
- strcpy(tmpbuf, cp1);
+ LYstrncpy(tmpbuf, cp1, sizeof(tmpbuf)-1);
FREE(cp1);
}
@@ -533,16 +694,14 @@ PRIVATE BOOLEAN modify_tagged ARGS1(
* Move all tagged items to the target location.
*/
while ((cp = (char *)HTList_nextObject(tag)) != NULL) {
- cp = HTfullURL_toFile(cp);
- StrAllocCopy(srcpath, cp);
+ srcpath = HTfullURL_toFile(cp);
if (move_file(srcpath, savepath) < 0) {
- FREE(cp);
if (count == 0)
count = -1;
break;
}
- FREE(cp);
+ FREE(srcpath);
++count;
}
clear_tags();
@@ -557,14 +716,14 @@ PRIVATE BOOLEAN modify_tagged ARGS1(
/*
* Modify the name of the specified item.
*/
-PRIVATE BOOLEAN modify_name ARGS1(
- char *, testpath)
+PRIVATE int modify_name ARGS1(
+ char *, testpath)
{
char *cp;
- char tmpbuf[512];
- char newpath[512];
- char savepath[512];
+ char tmpbuf[DIRED_MAXBUF];
+ char *newpath = NULL;
struct stat dir_info;
+ int code = 0;
/*
* Determine the status of the selected item.
@@ -588,40 +747,42 @@ PRIVATE BOOLEAN modify_name ARGS1(
/*
* Do not allow the user to also change the location at this time.
*/
- if (strchr(tmpbuf, '/') != NULL) {
- HTAlert(gettext("Illegal character \"/\" found! Request ignored."));
- } else if (strlen(tmpbuf) &&
- (cp = strrchr(testpath, '/')) != NULL) {
- strcpy(savepath,testpath);
- *(++cp) = '\0';
- strcpy(newpath,testpath);
- strcat(newpath,tmpbuf);
+ if (LYLastPathSep(tmpbuf) != 0) {
+ HTAlert(gettext("Illegal character (path-separator) found! Request ignored."));
+ } else if (strlen(tmpbuf)) {
+ if ((cp = LYLastPathSep(testpath)) != NULL)
+ HTSprintf0(&newpath, "%.*s%s", (cp - testpath + 1), testpath, tmpbuf);
+ else
+ StrAllocCopy(newpath, tmpbuf);
/*
* Make sure the destination does not already exist.
*/
if (not_already_exists(newpath)) {
- return move_file(savepath, newpath);
+ code = move_file(testpath, newpath);
}
+ FREE(newpath);
+
}
}
- return 0;
+ return code;
}
/*
* Change the location of a file or directory.
*/
-PRIVATE BOOLEAN modify_location ARGS1(
- char *, testpath)
+PRIVATE int modify_location ARGS1(
+ char *, testpath)
{
char *cp;
dev_t dev;
ino_t inode;
- uid_t owner;
+ int owner;
char tmpbuf[1024];
- char newpath[512];
- char savepath[512];
+ char *newpath = NULL;
+ char *savepath = NULL;
struct stat dir_info;
+ int code = 0;
/*
* Determine the status of the selected item.
@@ -645,28 +806,28 @@ PRIVATE BOOLEAN modify_location ARGS1(
if (get_filename(cp, tmpbuf, sizeof(tmpbuf)) == NULL)
return 0;
if (strlen(tmpbuf)) {
- strcpy(savepath, testpath);
- strcpy(newpath, testpath);
+ StrAllocCopy(savepath, testpath);
+ StrAllocCopy(newpath, testpath);
/*
* Allow ~/ references to the home directory.
*/
if (!strncmp(tmpbuf, "~/", 2)
|| !strcmp(tmpbuf,"~")) {
- strcpy(newpath, Home_Dir());
- strcat(newpath, (tmpbuf + 1));
- strcpy(tmpbuf, newpath);
+ StrAllocCopy(newpath, Home_Dir());
+ StrAllocCat(newpath, (tmpbuf + 1));
+ LYstrncpy(tmpbuf, newpath, sizeof(tmpbuf)-1);
}
- if (!LYIsPathSep(tmpbuf[0])) {
- if ((cp = strrchr(newpath,'/')) != NULL) {
- *++cp = '\0';
- strcat(newpath,tmpbuf);
- } else {
- HTAlert(gettext("Unexpected failure - unable to find trailing \"/\""));
- return 0;
- }
+ if (LYisAbsPath(tmpbuf)) {
+ StrAllocCopy(newpath, tmpbuf);
+ } else if ((cp = LYLastPathSep(newpath)) != NULL) {
+ *++cp = '\0';
+ StrAllocCat(newpath, tmpbuf);
} else {
- strcpy(newpath,tmpbuf);
+ HTAlert(gettext("Unexpected failure - unable to find trailing path separator"));
+ FREE(newpath);
+ FREE(savepath);
+ return 0;
}
/*
@@ -676,41 +837,41 @@ PRIVATE BOOLEAN modify_location ARGS1(
inode = dir_info.st_ino;
owner = dir_info.st_uid;
if (!ok_stat(newpath, &dir_info)) {
- return 0;
+ code = 0;
}
/*
* Make sure the source and target are not the same location.
*/
- if (dev == dir_info.st_dev && inode == dir_info.st_ino) {
+ else if (dev == dir_info.st_dev && inode == dir_info.st_ino) {
HTAlert(gettext("Source and destination are the same location! Request ignored!"));
- return 0;
- }
- if (dir_has_same_owner(&dir_info, owner)) {
- return move_file(savepath,newpath);
+ code = 0;
+ } else if (dir_has_same_owner(&dir_info, owner)) {
+ code = move_file(savepath,newpath);
}
+ FREE(newpath);
+ FREE(savepath);
}
- return 0;
+ return code;
}
/*
* Modify name or location of a file or directory on localhost.
*/
-PUBLIC BOOLEAN local_modify ARGS2(
+PUBLIC int local_modify ARGS2(
document *, doc,
char **, newpath)
{
- int c, ans;
+ int ans;
char *cp;
- char testpath[512]; /* a bit ridiculous */
+ char testpath[DIRED_MAXBUF]; /* a bit ridiculous */
int count;
if (!HTList_isEmpty(tagged)) {
cp = HTpartURL_toFile(doc->address);
- strcpy(testpath, cp);
- FREE(cp);
- count = modify_tagged(testpath);
+ count = modify_tagged(cp);
+ FREE(cp);
if (doc->link > (nlinks-count - 1))
doc->link = (nlinks-count - 1);
@@ -732,14 +893,17 @@ PUBLIC BOOLEAN local_modify ARGS2(
#ifdef OK_PERMIT
_statusline(gettext("Modify name, location, or permission (n, l, or p): "));
#else
- _statusline(gettext("Modify name, or location (n or l): "));
+ _statusline(gettext("Modify name or location (n or l): "));
#endif /* OK_PERMIT */
- c = LYgetch();
- ans = TOUPPER(c);
+ ans = LYgetch_single();
if (strchr("NLP", ans) != NULL) {
cp = HTfullURL_toFile(links[doc->link].lname);
- strcpy(testpath, cp);
+ if (strlen(cp) >= DIRED_MAXBUF) {
+ FREE(cp);
+ return 0;
+ }
+ LYstrncpy(testpath, cp, sizeof(testpath)-1);
FREE(cp);
if (ans == 'N') {
@@ -767,46 +931,46 @@ PUBLIC BOOLEAN local_modify ARGS2(
/*
* Create a new empty file in the current directory.
*/
-PRIVATE BOOLEAN create_file ARGS1(
- char *, current_location)
+PRIVATE int create_file ARGS1(
+ char *, current_location)
{
int code = FALSE;
- char tmpbuf[512];
- char testpath[512];
+ char tmpbuf[DIRED_MAXBUF];
+ char *testpath = NULL;
char *args[5];
char *bad_chars = ".~/";
if (get_filename(gettext("Enter name of file to create: "),
- tmpbuf, sizeof(tmpbuf)) == NULL) {
- return code;
- }
+ tmpbuf, sizeof(tmpbuf)) != NULL) {
- if (!no_dotfiles && show_dotfiles) {
- bad_chars = "~/";
- }
+ if (!no_dotfiles && show_dotfiles) {
+ bad_chars = "~/";
+ }
- if (strstr(tmpbuf, "//") != NULL) {
- HTAlert(gettext("Illegal redirection \"//\" found! Request ignored."));
- } else if (strlen(tmpbuf) && strchr(bad_chars, tmpbuf[0]) == NULL) {
- strcpy(testpath,current_location);
- LYAddPathSep0(testpath);
+ if (strstr(tmpbuf, "//") != NULL) {
+ HTAlert(gettext("Illegal redirection \"//\" found! Request ignored."));
+ } else if (strlen(tmpbuf) && strchr(bad_chars, tmpbuf[0]) == NULL) {
+ StrAllocCopy(testpath, current_location);
+ LYAddPathSep(&testpath);
- /*
- * Append the target filename to the current location.
- */
- strcat(testpath, tmpbuf);
+ /*
+ * Append the target filename to the current location.
+ */
+ StrAllocCat(testpath, tmpbuf);
- /*
- * Make sure the target does not already exist
- */
- if (not_already_exists(testpath)) {
- char *msg = 0;
- HTSprintf(&msg,gettext("create %s"),testpath);
- args[0] = "touch";
- args[1] = testpath;
- args[2] = (char *) 0;
- code = (LYExecv(TOUCH_PATH, args, msg) <= 0) ? -1 : 1;
- FREE(msg);
+ /*
+ * Make sure the target does not already exist
+ */
+ if (not_already_exists(testpath)) {
+ char *msg = 0;
+ HTSprintf0(&msg,gettext("create %s"),testpath);
+ args[0] = "touch";
+ args[1] = testpath;
+ args[2] = (char *) 0;
+ code = (LYExecv(TOUCH_PATH, args, msg) <= 0) ? -1 : 1;
+ FREE(msg);
+ }
+ FREE(testpath);
}
}
return code;
@@ -815,43 +979,43 @@ PRIVATE BOOLEAN create_file ARGS1(
/*
* Create a new directory in the current directory.
*/
-PRIVATE BOOLEAN create_directory ARGS1(
- char *, current_location)
+PRIVATE int create_directory ARGS1(
+ char *, current_location)
{
int code = FALSE;
- char tmpbuf[512];
- char testpath[512];
+ char tmpbuf[DIRED_MAXBUF];
+ char *testpath = NULL;
char *args[5];
char *bad_chars = ".~/";
if (get_filename(gettext("Enter name for new directory: "),
- tmpbuf, sizeof(tmpbuf)) == NULL) {
- return code;
- }
+ tmpbuf, sizeof(tmpbuf)) != NULL) {
- if (!no_dotfiles && show_dotfiles) {
- bad_chars = "~/";
- }
+ if (!no_dotfiles && show_dotfiles) {
+ bad_chars = "~/";
+ }
- if (strstr(tmpbuf, "//") != NULL) {
- HTAlert(gettext("Illegal redirection \"//\" found! Request ignored."));
- } else if (strlen(tmpbuf) && strchr(bad_chars, tmpbuf[0]) == NULL) {
- strcpy(testpath,current_location);
- LYAddPathSep0(testpath);
+ if (strstr(tmpbuf, "//") != NULL) {
+ HTAlert(gettext("Illegal redirection \"//\" found! Request ignored."));
+ } else if (strlen(tmpbuf) && strchr(bad_chars, tmpbuf[0]) == NULL) {
+ StrAllocCopy(testpath, current_location);
+ LYAddPathSep(&testpath);
- strcat(testpath, tmpbuf);
+ StrAllocCat(testpath, tmpbuf);
- /*
- * Make sure the target does not already exist.
- */
- if (not_already_exists(testpath)) {
- char *msg = 0;
- HTSprintf(&msg,"make directory %s",testpath);
- args[0] = "mkdir";
- args[1] = testpath;
- args[2] = (char *) 0;
- code = (LYExecv(MKDIR_PATH, args, msg) <= 0) ? -1 : 1;
- FREE(msg);
+ /*
+ * Make sure the target does not already exist.
+ */
+ if (not_already_exists(testpath)) {
+ char *msg = 0;
+ HTSprintf0(&msg,"make directory %s",testpath);
+ args[0] = "mkdir";
+ args[1] = testpath;
+ args[2] = (char *) 0;
+ code = (LYExecv(MKDIR_PATH, args, msg) <= 0) ? -1 : 1;
+ FREE(msg);
+ }
+ FREE(testpath);
}
}
return code;
@@ -860,21 +1024,24 @@ PRIVATE BOOLEAN create_directory ARGS1(
/*
* Create a file or a directory at the current location.
*/
-PUBLIC BOOLEAN local_create ARGS1(
+PUBLIC int local_create ARGS1(
document *, doc)
{
- int c, ans;
+ int ans;
char *cp;
- char testpath[512];
-
- _statusline(gettext("Create file or directory (f or d): "));
- c = LYgetch();
- ans = TOUPPER(c);
+ char testpath[DIRED_MAXBUF];
cp = HTfullURL_toFile(doc->address);
+ if (strlen(cp) >= DIRED_MAXBUF) {
+ FREE(cp);
+ return 0;
+ }
strcpy(testpath,cp);
FREE(cp);
+ _statusline(gettext("Create file or directory (f or d): "));
+ ans = LYgetch_single();
+
if (ans == 'F') {
return(create_file(testpath));
} else if (ans == 'D') {
@@ -887,8 +1054,8 @@ PUBLIC BOOLEAN local_create ARGS1(
/*
* Remove a single file or directory.
*/
-PRIVATE BOOLEAN remove_single ARGS1(
- char *, testpath)
+PRIVATE int remove_single ARGS1(
+ char *, testpath)
{
int code = 0;
char *cp;
@@ -903,7 +1070,7 @@ PRIVATE BOOLEAN remove_single ARGS1(
/*
* Locate the filename portion of the path.
*/
- if ((cp = strrchr(testpath, '/')) != NULL) {
+ if ((cp = LYLastPathSep(testpath)) != NULL) {
++cp;
} else {
cp = testpath;
@@ -913,23 +1080,23 @@ PRIVATE BOOLEAN remove_single ARGS1(
/*** Course, it's probably broken for screen sizes other 80, too ***/
if (strlen(cp) < 37) {
HTSprintf0(&tmpbuf,
- gettext("Remove '%s' and all of its contents: "), cp);
+ gettext("Remove '%s' and all of its contents?"), cp);
} else {
HTSprintf0(&tmpbuf,
- gettext("Remove directory and all of its contents: "));
+ gettext("Remove directory and all of its contents?"));
}
} else if (S_ISREG(dir_info.st_mode)) {
if (strlen(cp) < 60) {
- HTSprintf0(&tmpbuf, gettext("Remove file '%s': "), cp);
+ HTSprintf0(&tmpbuf, gettext("Remove file '%s'?"), cp);
} else {
- HTSprintf0(&tmpbuf, gettext("Remove file: "));
+ HTSprintf0(&tmpbuf, gettext("Remove file?"));
}
#ifdef S_IFLNK
} else if (S_ISLNK(dir_info.st_mode)) {
if (strlen(cp) < 50) {
- HTSprintf0(&tmpbuf, gettext("Remove symbolic link '%s': "), cp);
+ HTSprintf0(&tmpbuf, gettext("Remove symbolic link '%s'?"), cp);
} else {
- HTSprintf0(&tmpbuf, gettext("Remove symbolic link: "));
+ HTSprintf0(&tmpbuf, gettext("Remove symbolic link?"));
}
#endif
} else {
@@ -953,11 +1120,11 @@ PRIVATE BOOLEAN remove_single ARGS1(
/*
* Remove a file or a directory.
*/
-PUBLIC BOOLEAN local_remove ARGS1(
+PUBLIC int local_remove ARGS1(
document *, doc)
{
char *cp, *tp;
- char testpath[512];
+ char testpath[DIRED_MAXBUF];
int count, i;
if (!HTList_isEmpty(tagged)) {
@@ -973,6 +1140,10 @@ PUBLIC BOOLEAN local_remove ARGS1(
cp = links[doc->link].lname;
if (is_url(cp) == FILE_URL_TYPE) {
tp = HTfullURL_toFile(cp);
+ if (strlen(tp) >= DIRED_MAXBUF) {
+ FREE(tp);
+ return 0;
+ }
strcpy(testpath, tp);
FREE(tp);
@@ -989,35 +1160,30 @@ PUBLIC BOOLEAN local_remove ARGS1(
}
#ifdef OK_PERMIT
-/*
- * Table of permission strings and chmod values.
- * Makes the code a bit cleaner.
- */
-static struct {
- CONST char *string_mode; /* Key for value below */
- long permit_bits; /* Value for chmod/whatever */
-} permissions[] = {
- {"IRUSR", S_IRUSR},
- {"IWUSR", S_IWUSR},
- {"IXUSR", S_IXUSR},
- {"IRGRP", S_IRGRP},
- {"IWGRP", S_IWGRP},
- {"IXGRP", S_IXGRP},
- {"IROTH", S_IROTH},
- {"IWOTH", S_IWOTH},
- {"IXOTH", S_IXOTH},
- {NULL, 0} /* Don't include setuid and friends;
- use shell access for that. */
-};
PRIVATE char LYValidPermitFile[LY_MAXPATH] = "\0";
+PRIVATE long permit_bits ARGS1(char *, string_mode)
+{
+ if (!strcmp(string_mode, "IRUSR")) return S_IRUSR;
+ if (!strcmp(string_mode, "IWUSR")) return S_IWUSR;
+ if (!strcmp(string_mode, "IXUSR")) return S_IXUSR;
+ if (!strcmp(string_mode, "IRGRP")) return S_IRGRP;
+ if (!strcmp(string_mode, "IWGRP")) return S_IWGRP;
+ if (!strcmp(string_mode, "IXGRP")) return S_IXGRP;
+ if (!strcmp(string_mode, "IROTH")) return S_IROTH;
+ if (!strcmp(string_mode, "IWOTH")) return S_IWOTH;
+ if (!strcmp(string_mode, "IXOTH")) return S_IXOTH;
+ /* Don't include setuid and friends; use shell access for that. */
+ return 0;
+}
+
/*
* Handle DIRED permissions.
*/
-PRIVATE BOOLEAN permit_location ARGS3(
- char *, destpath,
- char *, srcpath,
+PRIVATE int permit_location ARGS3(
+ char *, destpath,
+ char *, srcpath,
char **, newpath)
{
#ifndef UNIX
@@ -1035,22 +1201,19 @@ PRIVATE BOOLEAN permit_location ARGS3(
* Create form.
*/
FILE *fp0;
- char local_src[LY_MAXPATH];
char * user_filename;
char * group_name;
- cp = HTfullURL_toFile(strip_trailing_slash(srcpath));
- strcpy(local_src, cp);
- FREE(cp);
+ srcpath = strip_trailing_slash(srcpath);
/*
* A couple of sanity tests.
*/
- if (!ok_lstat(local_src, &dir_info)
+ if (!ok_lstat(srcpath, &dir_info)
|| !ok_file_or_dir(&dir_info))
return 0;
- user_filename = LYPathLeaf(local_src);
+ user_filename = LYPathLeaf(srcpath);
LYRemoveTemp(tempfile);
if ((fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w")) == NULL) {
@@ -1062,11 +1225,11 @@ PRIVATE BOOLEAN permit_location ARGS3(
* Make the tempfile a URL.
*/
LYLocalFileToURL(newpath, tempfile);
- strcpy(LYPermitFileURL, *newpath);
+ LYRegisterUIPage(*newpath, UIP_PERMIT_OPTIONS);
group_name = HTAA_GidToName (dir_info.st_gid);
LYstrncpy(LYValidPermitFile,
- local_src,
+ srcpath,
(sizeof(LYValidPermitFile) - 1));
fprintf(fp0, "<Html><Head>\n<Title>%s</Title>\n</Head>\n<Body>\n",
@@ -1156,9 +1319,9 @@ PRIVATE BOOLEAN permit_location ARGS3(
HTAlert(INVALID_PERMIT_URL);
else
fprintf(stderr, "%s\n", INVALID_PERMIT_URL);
- CTRACE(tfp, "permit_location: called for <%s>.\n",
+ CTRACE((tfp, "permit_location: called for <%s>.\n",
(destpath ?
- destpath : "NULL URL pointer"));
+ destpath : "NULL URL pointer")));
return 0;
}
cp = destpath;
@@ -1171,10 +1334,14 @@ PRIVATE BOOLEAN permit_location ARGS3(
*cp++ = '\0'; /* Null terminate file name and
start working on the masks. */
- if ((destpath = HTfullURL_toFile(destpath)) == 0)
+ /* Will now operate only on filename part. */
+ if ((destpath = HTURLPath_toFile(destpath, TRUE)) == 0)
return(0);
-
- strcpy(tmpdst, destpath); /* operate only on filename */
+ if (strlen(destpath) >= LY_MAXPATH) {
+ FREE(destpath);
+ return(0);
+ }
+ strcpy(tmpdst, destpath);
FREE(destpath);
destpath = tmpdst;
@@ -1187,8 +1354,8 @@ PRIVATE BOOLEAN permit_location ARGS3(
HTAlert(INVALID_PERMIT_URL);
else
fprintf(stderr, "%s\n", INVALID_PERMIT_URL);
- CTRACE(tfp, "permit_location: called for file '%s'.\n",
- destpath);
+ CTRACE((tfp, "permit_location: called for file '%s'.\n",
+ destpath));
return 0;
}
@@ -1214,22 +1381,18 @@ PRIVATE BOOLEAN permit_location ARGS3(
*cr++ = '\0';
}
if (strncmp(cp, "mode=", 5) == 0) { /* Magic string. */
- int i;
-
- for(i = 0; permissions[i].string_mode != NULL; i++) {
- if (strcmp(permissions[i].string_mode, cp+5) == 0) {
- /*
- * If restricted, only change eXecute
- * permissions on directories.
- */
- if (!no_change_exec_perms ||
- strchr(cp+5,'X') == NULL ||
- S_ISDIR(dir_info.st_mode))
- new_mode |= permissions[i].permit_bits;
- break;
- }
- }
- if (permissions[i].string_mode == NULL) {
+ long mask = permit_bits(cp + 5);
+
+ if (mask != 0) {
+ /*
+ * If restricted, only change eXecute
+ * permissions on directories.
+ */
+ if (!no_change_exec_perms
+ || strchr(cp+5, 'X') == NULL
+ || S_ISDIR(dir_info.st_mode))
+ new_mode |= mask;
+ } else {
HTAlert(gettext("Invalid mode format."));
return 0;
}
@@ -1245,7 +1408,7 @@ PRIVATE BOOLEAN permit_location ARGS3(
/*
* Call chmod().
*/
- HTSprintf(&tmpbuf, "chmod %.4o %s", (unsigned int)new_mode, destpath);
+ HTSprintf0(&tmpbuf, "chmod %.4o %s", (unsigned int)new_mode, destpath);
sprintf(amode, "%.4o", (unsigned int)new_mode);
args[0] = "chmod";
args[1] = amode;
@@ -1272,25 +1435,25 @@ PUBLIC void tagflag ARGS2(
int, cur)
{
if (nlinks > 0) {
- move(links[cur].ly, 2);
+ LYmove(links[cur].ly, 2);
stop_reverse();
if (flag == ON) {
- addch('+');
+ LYaddch('+');
} else {
- addch(' ');
+ LYaddch(' ');
}
#if defined(FANCY_CURSES) || defined(USE_SLANG)
if (!LYShowCursor)
- move((LYlines - 1), (LYcols - 1)); /* get cursor out of the way */
+ LYHideCursor(); /* get cursor out of the way */
else
#endif /* FANCY CURSES || USE_SLANG */
/*
* Never hide the cursor if there's no FANCY CURSES.
*/
- move(links[cur].ly, links[cur].lx);
+ LYmove(links[cur].ly, links[cur].lx);
- refresh();
+ LYrefresh();
}
}
@@ -1319,17 +1482,71 @@ PRIVATE char * DirectoryOf ARGS1(
char *, pathname)
{
char *result = 0;
+ char *result1 = 0;
char *leaf;
StrAllocCopy(result, pathname);
leaf = LYPathLeaf(result);
if (leaf != result) {
*leaf = '\0';
- LYTrimPathSep(result);
+ if (!LYisRootPath(result))
+ LYTrimPathSep(result);
+ result1 = wwwName(result);
+ StrAllocCopy (result, result1);
}
return result;
}
+#ifdef __DJGPP__
+/*
+ * Convert filenames to acceptable 8+3 names when necessary. Make a copy of
+ * the parameter if we must modify it.
+ */
+PRIVATE char * LYonedot ARGS1(
+ char *, line)
+{
+ char *dot;
+ static char line1[LY_MAXPATH];
+
+ if (pathconf (line, _PC_NAME_MAX) <= 12) {
+ LYstrncpy(line1, line, sizeof(line1)-1);
+ for (;;) {
+ if ((dot = strrchr(line1, '.')) == 0
+ || LYLastPathSep(dot) != 0) {
+ break;
+ } else if (strlen(dot) == 1) {
+ *dot = 0;
+ } else {
+ *dot = '_';
+ }
+ }
+ return(line1);
+ }
+ return(line);
+}
+#else
+#define LYonedot(path) path
+#endif /* __DJGPP__ */
+
+PRIVATE char * match_op ARGS2(
+ CONST char *, prefix,
+ char *, data)
+{
+ int len = strlen(prefix);
+
+ if (!strncmp("LYNXDIRED://", data, 12)
+ && !strncmp(prefix, data + 12, (unsigned)len)) {
+ len += 12;
+#if defined(DOSPATH) || defined(__EMX__)
+ if (data[len] == '/') { /* this is normal */
+ len++;
+ }
+#endif
+ return data + len;
+ }
+ return 0;
+}
+
/*
* Perform file management operations for LYNXDIRED URL's.
* Attempt to be consistent. These are (pseudo) URLs - i.e., they should
@@ -1345,68 +1562,80 @@ PUBLIC int local_dired ARGS1(
{
char *line_url; /* will point to doc's address, which is a URL */
char *line = NULL; /* same as line_url, but HTUnEscaped, will be alloced */
+ char *arg = NULL; /* ...will point into line[] */
char *tp = NULL;
char *tmpbuf = NULL;
char *buffer = NULL;
char *dirname = NULL;
+ BOOL do_pop_doc = TRUE;
line_url = doc->address;
- CTRACE(tfp, "local_dired: called for <%s>.\n",
+ CTRACE((tfp, "local_dired: called for <%s>.\n",
(line_url ?
- line_url : gettext("NULL URL pointer")));
+ line_url : gettext("NULL URL pointer"))));
HTUnEscapeSome(line_url, "/"); /* don't mess too much with *doc */
StrAllocCopy(line, line_url);
HTUnEscape(line); /* _file_ (not URL) syntax, for those functions
that need it. Don't forget to FREE it. */
-
- if (!strncmp(line, "LYNXDIRED://NEW_FILE", 20)) {
- if (create_file(&line[20]) > 0)
+ if ((arg = match_op("CHDIR", line)) != 0) {
+#ifdef SUPPORT_CHDIR
+ handle_LYK_CHDIR();
+ do_pop_doc = FALSE;
+#endif
+ arg = "blah"; /* do something to avoid cc's complaints */
+ } else if ((arg = match_op("NEW_FILE", line)) != 0) {
+ if (create_file(arg) > 0)
LYforce_no_cache = TRUE;
- } else if (!strncmp(line, "LYNXDIRED://NEW_FOLDER", 22)) {
- if (create_directory(&line[22]) > 0)
+ } else if ((arg = match_op("NEW_FOLDER", line)) != 0) {
+ if (create_directory(arg) > 0)
LYforce_no_cache = TRUE;
- } else if (!strncmp(line, "LYNXDIRED://INSTALL_SRC", 23)) {
- local_install(NULL, &line[23], &tp);
- StrAllocCopy(doc->address, tp);
- FREE(tp);
+#ifdef OK_INSTALL
+ } else if ((arg = match_op("INSTALL_SRC", line)) != 0) {
+ local_install(NULL, arg, &tp);
+ if (tp) {
+ FREE(doc->address);
+ doc->address = tp;
+ }
FREE(line);
return 0;
- } else if (!strncmp(line, "LYNXDIRED://INSTALL_DEST", 24)) {
- local_install(&line[24], NULL, &tp);
+ } else if ((arg = match_op("INSTALL_DEST", line)) != 0) {
+ local_install(arg, NULL, &tp);
LYpop(doc);
- } else if (!strncmp(line, "LYNXDIRED://MODIFY_NAME", 23)) {
- if (modify_name(&line[23]) > 0)
- LYforce_no_cache = TRUE;
- } else if (!strncmp(line, "LYNXDIRED://MODIFY_LOCATION", 27)) {
- if (modify_location(&line[27]) > 0)
+#endif /* OK_INSTALL */
+ } else if ((arg = match_op("MODIFY_NAME", line)) != 0) {
+ if (modify_name(arg) > 0)
LYforce_no_cache = TRUE;
- } else if (!strncmp(line, "LYNXDIRED://MOVE_TAGGED", 23)) {
- if (modify_tagged(&line_url[23]) > 0)
+ } else if ((arg = match_op("MODIFY_LOCATION", line)) != 0) {
+ if (modify_location(arg) > 0)
+ LYforce_no_cache = TRUE;
+ } else if ((arg = match_op("MOVE_TAGGED", line_url)) != 0) {
+ if (modify_tagged(arg) > 0)
LYforce_no_cache = TRUE;
#ifdef OK_PERMIT
- } else if (!strncmp(line, "LYNXDIRED://PERMIT_SRC", 22)) {
- permit_location(NULL, &line[22], &tp);
- if (tp)
+ } else if ((arg = match_op("PERMIT_SRC", line)) != 0) {
+ permit_location(NULL, arg, &tp);
+ if (tp) {
/*
* One of the checks may have failed.
*/
- StrAllocCopy(doc->address, tp);
+ FREE(doc->address);
+ doc->address = tp;
+ }
FREE(line);
- FREE(tp);
return 0;
- } else if (!strncmp(line, "LYNXDIRED://PERMIT_LOCATION", 27)) {
- permit_location(&line_url[27], NULL, &tp);
+ } else if ((arg = match_op("PERMIT_LOCATION", line_url)) != 0) {
+ permit_location(arg, NULL, &tp);
#endif /* OK_PERMIT */
- } else if (!strncmp(line, "LYNXDIRED://REMOVE_SINGLE", 25)) {
- if (remove_single(&line[25]) > 0)
+ } else if ((arg = match_op("REMOVE_SINGLE", line)) != 0) {
+ if (remove_single(arg) > 0)
LYforce_no_cache = TRUE;
- } else if (!strncmp(line, "LYNXDIRED://REMOVE_TAGGED", 25)) {
+ } else if ((arg = match_op("REMOVE_TAGGED", line)) != 0) {
if (remove_tagged())
LYforce_no_cache = TRUE;
- } else if (!strncmp(line, "LYNXDIRED://CLEAR_TAGGED", 24)) {
+ } else if ((arg = match_op("CLEAR_TAGGED", line)) != 0) {
clear_tags();
- } else if (!strncmp(line, "LYNXDIRED://UPLOAD", 18)) {
+ } else if ((arg = match_op("UPLOAD", line)) != 0) {
/*
* They're written by LYUpload_options() HTUnEscaped;
* don't want to change that for now... so pass through
@@ -1417,7 +1646,7 @@ PUBLIC int local_dired ARGS1(
LYforce_no_cache = TRUE;
} else {
LYTrimPathSep(line);
- if (strrchr(line, '/') == NULL) {
+ if (LYLastPathSep(line) == NULL) {
FREE(line);
return 0;
}
@@ -1426,17 +1655,17 @@ PUBLIC int local_dired ARGS1(
* Construct the appropriate system command taking care to
* escape all path references to avoid spoofing the shell.
*/
- if (!strncmp(line, "LYNXDIRED://DECOMPRESS", 22)) {
+ if ((arg = match_op("DECOMPRESS", line)) != 0) {
#define FMT_UNCOMPRESS "%s %s"
HTAddParam(&buffer, FMT_UNCOMPRESS, 1, UNCOMPRESS_PATH);
- HTAddParam(&buffer, FMT_UNCOMPRESS, 2, line+22);
+ HTAddParam(&buffer, FMT_UNCOMPRESS, 2, arg);
HTEndParam(&buffer, FMT_UNCOMPRESS, 2);
#if defined(OK_UUDECODE) && !defined(ARCHIVE_ONLY)
- } else if (!strncmp(line, "LYNXDIRED://UUDECODE", 20)) {
+ } else if ((arg = match_op("UUDECODE", line)) != 0) {
#define FMT_UUDECODE "%s %s"
HTAddParam(&buffer, FMT_UUDECODE, 1, UUDECODE_PATH);
- HTAddParam(&buffer, FMT_UUDECODE, 2, line+20);
+ HTAddParam(&buffer, FMT_UUDECODE, 2, arg);
HTEndParam(&buffer, FMT_UUDECODE, 2);
HTAlert(gettext("Warning! UUDecoded file will exist in the directory you started Lynx."));
#endif /* OK_UUDECODE && !ARCHIVE_ONLY */
@@ -1444,112 +1673,112 @@ PUBLIC int local_dired ARGS1(
#ifdef OK_TAR
# ifndef ARCHIVE_ONLY
# ifdef OK_GZIP
- } else if (!strncmp(line, "LYNXDIRED://UNTAR_GZ", 20)) {
-#define FMT_UNTAR_GZ "%s -qdc %s | (cd %s; %s -xf -)"
- dirname = DirectoryOf(line+20);
- HTAddParam(&buffer, FMT_UNTAR_GZ, 1, GZIP_PATH);
- HTAddParam(&buffer, FMT_UNTAR_GZ, 2, line+20);
- HTAddParam(&buffer, FMT_UNTAR_GZ, 3, dirname);
+ } else if ((arg = match_op("UNTAR_GZ", line)) != 0) {
+#define FMT_UNTAR_GZ "cd %s; %s -qdc %s | %s -xf -"
+ dirname = DirectoryOf(arg);
+ HTAddParam(&buffer, FMT_UNTAR_GZ, 1, dirname);
+ HTAddParam(&buffer, FMT_UNTAR_GZ, 2, GZIP_PATH);
+ HTAddParam(&buffer, FMT_UNTAR_GZ, 3, arg);
HTAddParam(&buffer, FMT_UNTAR_GZ, 4, TAR_PATH);
HTEndParam(&buffer, FMT_UNTAR_GZ, 4);
# endif /* OK_GZIP */
- } else if (!strncmp(line, "LYNXDIRED://UNTAR_Z", 19)) {
-#define FMT_UNTAR_Z "%s %s | (cd %s; %s -xf -)"
- dirname = DirectoryOf(line+19);
- HTAddParam(&buffer, FMT_UNTAR_Z, 1, ZCAT_PATH);
- HTAddParam(&buffer, FMT_UNTAR_Z, 2, line+19);
- HTAddParam(&buffer, FMT_UNTAR_Z, 3, dirname);
+ } else if ((arg = match_op("UNTAR_Z", line)) != 0) {
+#define FMT_UNTAR_Z "cd %s; %s %s | %s -xf -"
+ dirname = DirectoryOf(arg);
+ HTAddParam(&buffer, FMT_UNTAR_Z, 1, dirname);
+ HTAddParam(&buffer, FMT_UNTAR_Z, 2, ZCAT_PATH);
+ HTAddParam(&buffer, FMT_UNTAR_Z, 3, arg);
HTAddParam(&buffer, FMT_UNTAR_Z, 4, TAR_PATH);
HTEndParam(&buffer, FMT_UNTAR_Z, 4);
- } else if (!strncmp(line, "LYNXDIRED://UNTAR", 17)) {
+ } else if ((arg = match_op("UNTAR", line)) != 0) {
#define FMT_UNTAR "cd %s; %s -xf %s"
- dirname = DirectoryOf(line+17);
+ dirname = DirectoryOf(arg);
HTAddParam(&buffer, FMT_UNTAR, 1, dirname);
HTAddParam(&buffer, FMT_UNTAR, 2, TAR_PATH);
- HTAddParam(&buffer, FMT_UNTAR, 3, line+17);
+ HTAddParam(&buffer, FMT_UNTAR, 3, arg);
HTEndParam(&buffer, FMT_UNTAR, 3);
# endif /* !ARCHIVE_ONLY */
# ifdef OK_GZIP
- } else if (!strncmp(line, "LYNXDIRED://TAR_GZ", 18)) {
-#define FMT_TAR_GZ "(cd %s; %s -cf - %s) | %s -qc >%s/%s.tar.gz"
- dirname = DirectoryOf(line+18);
+ } else if ((arg = match_op("TAR_GZ", line)) != 0) {
+#define FMT_TAR_GZ "cd %s; %s -cf - %s | %s -qc >%s%s"
+ dirname = DirectoryOf(arg);
HTAddParam(&buffer, FMT_TAR_GZ, 1, dirname);
HTAddParam(&buffer, FMT_TAR_GZ, 2, TAR_PATH);
- HTAddParam(&buffer, FMT_TAR_GZ, 3, LYPathLeaf(line+18));
+ HTAddParam(&buffer, FMT_TAR_GZ, 3, LYPathLeaf(arg));
HTAddParam(&buffer, FMT_TAR_GZ, 4, GZIP_PATH);
- HTAddParam(&buffer, FMT_TAR_GZ, 5, dirname);
- HTAddParam(&buffer, FMT_TAR_GZ, 6, LYPathLeaf(line+18));
+ HTAddParam(&buffer, FMT_TAR_GZ, 5, LYonedot(LYPathLeaf(arg)));
+ HTAddParam(&buffer, FMT_TAR_GZ, 6, EXT_TAR_GZ);
HTEndParam(&buffer, FMT_TAR_GZ, 6);
# endif /* OK_GZIP */
- } else if (!strncmp(line, "LYNXDIRED://TAR_Z", 17)) {
-#define FMT_TAR_Z "(cd %s; %s -cf - %s) | %s >%s/%s.tar.Z"
- dirname = DirectoryOf(line+17);
+ } else if ((arg = match_op("TAR_Z", line)) != 0) {
+#define FMT_TAR_Z "cd %s; %s -cf - %s | %s >%s%s"
+ dirname = DirectoryOf(arg);
HTAddParam(&buffer, FMT_TAR_Z, 1, dirname);
HTAddParam(&buffer, FMT_TAR_Z, 2, TAR_PATH);
- HTAddParam(&buffer, FMT_TAR_Z, 3, LYPathLeaf(line+17));
+ HTAddParam(&buffer, FMT_TAR_Z, 3, LYPathLeaf(arg));
HTAddParam(&buffer, FMT_TAR_Z, 4, COMPRESS_PATH);
- HTAddParam(&buffer, FMT_TAR_Z, 5, dirname);
- HTAddParam(&buffer, FMT_TAR_Z, 6, LYPathLeaf(line+17));
+ HTAddParam(&buffer, FMT_TAR_Z, 5, LYonedot(LYPathLeaf(arg)));
+ HTAddParam(&buffer, FMT_TAR_Z, 6, EXT_TAR_Z);
HTEndParam(&buffer, FMT_TAR_Z, 6);
- } else if (!strncmp(line, "LYNXDIRED://TAR", 15)) {
-#define FMT_TAR "(cd %s; %s -cf %s.tar %s)"
- dirname = DirectoryOf(line+15);
+ } else if ((arg = match_op("TAR", line)) != 0) {
+#define FMT_TAR "cd %s; %s -cf %s.tar %s"
+ dirname = DirectoryOf(arg);
HTAddParam(&buffer, FMT_TAR, 1, dirname);
HTAddParam(&buffer, FMT_TAR, 2, TAR_PATH);
- HTAddParam(&buffer, FMT_TAR, 3, LYPathLeaf(line+15));
- HTAddParam(&buffer, FMT_TAR, 4, LYPathLeaf(line+15));
+ HTAddParam(&buffer, FMT_TAR, 3, LYonedot(LYPathLeaf(arg)));
+ HTAddParam(&buffer, FMT_TAR, 4, LYPathLeaf(arg));
HTEndParam(&buffer, FMT_TAR, 4);
#endif /* OK_TAR */
#ifdef OK_GZIP
- } else if (!strncmp(line, "LYNXDIRED://GZIP", 16)) {
+ } else if ((arg = match_op("GZIP", line)) != 0) {
#define FMT_GZIP "%s -q %s"
HTAddParam(&buffer, FMT_GZIP, 1, GZIP_PATH);
- HTAddParam(&buffer, FMT_GZIP, 2, line+16);
+ HTAddParam(&buffer, FMT_GZIP, 2, arg);
HTEndParam(&buffer, FMT_GZIP, 2);
#ifndef ARCHIVE_ONLY
- } else if (!strncmp(line, "LYNXDIRED://UNGZIP", 18)) {
+ } else if ((arg = match_op("UNGZIP", line)) != 0) {
#define FMT_UNGZIP "%s -d %s"
HTAddParam(&buffer, FMT_UNGZIP, 1, GZIP_PATH);
- HTAddParam(&buffer, FMT_UNGZIP, 2, line+18);
+ HTAddParam(&buffer, FMT_UNGZIP, 2, arg);
HTEndParam(&buffer, FMT_UNGZIP, 2);
#endif /* !ARCHIVE_ONLY */
#endif /* OK_GZIP */
#ifdef OK_ZIP
- } else if (!strncmp(line, "LYNXDIRED://ZIP", 15)) {
+ } else if ((arg = match_op("ZIP", line)) != 0) {
#define FMT_ZIP "cd %s; %s -rq %s.zip %s"
- dirname = DirectoryOf(line+15);
+ dirname = DirectoryOf(arg);
HTAddParam(&buffer, FMT_ZIP, 1, dirname);
HTAddParam(&buffer, FMT_ZIP, 2, ZIP_PATH);
- HTAddParam(&buffer, FMT_ZIP, 3, line+15);
- HTAddParam(&buffer, FMT_ZIP, 4, LYPathLeaf(line+15));
+ HTAddParam(&buffer, FMT_ZIP, 3, LYonedot(LYPathLeaf(arg)));
+ HTAddParam(&buffer, FMT_ZIP, 4, LYPathLeaf(arg));
HTEndParam(&buffer, FMT_ZIP, 4);
#ifndef ARCHIVE_ONLY
- } else if (!strncmp(line, "LYNXDIRED://UNZIP", 17)) {
+ } else if ((arg = match_op("UNZIP", line)) != 0) {
#define FMT_UNZIP "cd %s; %s -q %s"
- dirname = DirectoryOf(line+17);
+ dirname = DirectoryOf(arg);
HTAddParam(&buffer, FMT_UNZIP, 1, dirname);
HTAddParam(&buffer, FMT_UNZIP, 2, UNZIP_PATH);
- HTAddParam(&buffer, FMT_UNZIP, 3, line+17);
+ HTAddParam(&buffer, FMT_UNZIP, 3, arg);
HTEndParam(&buffer, FMT_UNZIP, 3);
# endif /* !ARCHIVE_ONLY */
#endif /* OK_ZIP */
- } else if (!strncmp(line, "LYNXDIRED://COMPRESS", 20)) {
+ } else if ((arg = match_op("COMPRESS", line)) != 0) {
#define FMT_COMPRESS "%s %s"
HTAddParam(&buffer, FMT_COMPRESS, 1, COMPRESS_PATH);
- HTAddParam(&buffer, FMT_COMPRESS, 2, line+20);
+ HTAddParam(&buffer, FMT_COMPRESS, 2, arg);
HTEndParam(&buffer, FMT_COMPRESS, 2);
}
if (buffer != 0) {
- if (strlen(buffer) < 60) {
+ if ((int) strlen(buffer) < LYcols - 15) {
HTSprintf0(&tmpbuf, gettext("Executing %s "), buffer);
} else {
HTSprintf0(&tmpbuf,
@@ -1557,7 +1786,7 @@ PUBLIC int local_dired ARGS1(
}
_statusline(tmpbuf);
stop_curses();
- printf("%s\n", tmpbuf);
+ printf("%s\r\n", tmpbuf);
LYSystem(buffer);
#ifdef VMS
HadVMSInterrupt = FALSE;
@@ -1572,7 +1801,8 @@ PUBLIC int local_dired ARGS1(
FREE(buffer);
FREE(line);
FREE(tp);
- LYpop(doc);
+ if (do_pop_doc)
+ LYpop(doc);
return 0;
}
@@ -1584,11 +1814,11 @@ PUBLIC int dired_options ARGS2(
char **, newfile)
{
static char tempfile[LY_MAXPATH];
- char path[512], dir[512]; /* much too large */
- lynx_html_item_type *nxt;
+ char *path;
+ char *dir;
+ lynx_list_item_type *nxt;
struct stat dir_info;
FILE *fp0;
- char *cp = NULL;
char *dir_url;
char *path_url;
BOOLEAN nothing_tagged;
@@ -1606,29 +1836,26 @@ PUBLIC int dired_options ARGS2(
* Make the tempfile a URL.
*/
LYLocalFileToURL(newfile, tempfile);
- strcpy(LYDiredFileURL, *newfile);
-
- cp = HTpartURL_toFile(doc->address);
- strcpy(dir, cp);
- LYTrimPathSep(dir);
- FREE(cp);
+ LYRegisterUIPage(*newfile, UIP_DIRED_MENU);
if (doc->link > -1 && doc->link < (nlinks+1)) {
- cp = HTfullURL_toFile(links[doc->link].lname);
- strcpy(path, cp);
+ path = HTfullURL_toFile(links[doc->link].lname);
LYTrimPathSep(path);
- FREE(cp);
if (!ok_lstat(path, &dir_info)) {
LYCloseTempFP(fp0);
+ FREE(path);
return 0;
}
} else {
- path[0] = '\0';
+ StrAllocCopy(path, "");
}
- nothing_tagged = (HTList_isEmpty(tagged));
+ dir = HTfullURL_toFile(doc->address);
+ LYTrimPathSep(dir);
+
+ nothing_tagged = (BOOL) (HTList_isEmpty(tagged));
BeginInternalPage(fp0, DIRED_MENU_TITLE, DIRED_MENU_HELP);
@@ -1716,6 +1943,7 @@ PUBLIC int dired_options ARGS2(
FREE(dir_url);
FREE(path_url);
}
+ FREE(path);
if (uploaders != NULL) {
fprintf(fp0, "<p>Upload to current directory:<p>\n");
@@ -1727,6 +1955,7 @@ PUBLIC int dired_options ARGS2(
count, dir, nxt->name);
}
}
+ FREE(dir);
EndInternalPage(fp0);
LYCloseTempFP(fp0);
@@ -1740,9 +1969,9 @@ PUBLIC int dired_options ARGS2(
* Check DIRED filename.
*/
PRIVATE char *get_filename ARGS3(
- char *, prompt,
- char *, buf,
- size_t, bufsize)
+ char *, prompt,
+ char *, buf,
+ size_t, bufsize)
{
char *cp;
@@ -1756,7 +1985,7 @@ PRIVATE char *get_filename ARGS3(
}
if (no_dotfiles || !show_dotfiles) {
- cp = strrchr(buf, '/'); /* find last slash */
+ cp = LYLastPathSep(buf); /* find last slash */
if (cp)
cp += 1;
else
@@ -1769,80 +1998,247 @@ PRIVATE char *get_filename ARGS3(
return buf;
}
+#ifdef OK_INSTALL
+
+#define LYEXECV_MAX_ARGC 15
+/* these are quasi-constant once they have been allocated: */
+static char ** install_argp = NULL; /* args for execv install */
+static char * install_path = NULL; /* auxiliary */
+#ifdef LY_FIND_LEAKS
+PRIVATE void clear_install_path NOARGS
+{
+ FREE(install_argp);
+ FREE(install_path);
+}
+#endif /* LY_FIND_LEAKS */
+/*
+ * Fill in args array for execv (or execvp etc.) call, after first
+ * allocating it if necessary. No fancy parsing, cmd_args is just
+ * split at spaces. Leave room for reserve additional args to be
+ * added by caller.
+ * On success *argvp points to new args vector, *pathp is auxiliary.
+ * On success returns index of next argument, else -1.
+ * This is generic enough that it could be used for other calls than
+ * install, except the atexit call. Go through this trouble for install
+ * because INSTALL_ARGS may be significant, and someone may configure it
+ * with more than one significant flags. - kw
+ */
+PRIVATE int fill_argv_for_execv ARGS5(
+ char ***, argvp,
+ char **, pathp,
+ char *, cmd_path,
+ CONST char *, cmd_args,
+ int, reserve)
+{
+ int n = 0;
+
+ char **args;
+ char *cp;
+ if (*argvp == NULL) {
+ *argvp = typecallocn(char *, LYEXECV_MAX_ARGC+1);
+ if (!*argvp)
+ return(-1);
+#ifdef LY_FIND_LEAKS
+ atexit(clear_install_path);
+#endif
+ }
+ args = *argvp;
+ args[n++] = cmd_path;
+ if (cmd_args) {
+ StrAllocCopy(*pathp, cmd_args);
+ cp = strtok(*pathp, " ");
+ if (cp) {
+ while (cp && (n < LYEXECV_MAX_ARGC - reserve)) {
+ args[n++] = cp;
+ cp = strtok(NULL, " ");
+ }
+ if (cp && (n >= LYEXECV_MAX_ARGC - reserve)) {
+ CTRACE((tfp, "Too many args for '%s' in '%s'!\n",
+ NONNULL(cmd_path), cmd_args));
+ return(-1);
+ }
+ } else {
+ args[n++] = *pathp;
+ }
+ }
+ args[n] = (char *)0;
+ return(n);
+}
/*
* Install the specified file or directory.
*/
PUBLIC BOOLEAN local_install ARGS3(
- char *, destpath,
- char *, srcpath,
+ char *, destpath,
+ char *, srcpath,
char **, newpath)
{
char *tmpbuf = NULL;
- char savepath[512]; /* This will be the link that is to be installed. */
+ static char savepath[DIRED_MAXBUF]; /* This will be the link that
+ is to be installed. */
struct stat dir_info;
- char *args[6];
+ char **args;
HTList *tag;
+ char *cp = NULL;
+ char *tmpdest = NULL;
int count = 0;
- int n = 0, src; /* indices into 'args[]' */
+ int n = 0; /* indices into 'args[]' */
+ static int src = -1;
/*
* Determine the status of the selected item.
*/
if (srcpath) {
- if (!ok_localname(savepath, srcpath))
+ srcpath = strip_trailing_slash(srcpath);
+ if (is_url(srcpath)) {
+ char *local_src = HTfullURL_toFile(srcpath);
+ if (!ok_localname(savepath, local_src)) {
+ FREE(local_src);
+ return 0;
+ }
+ FREE(local_src);
+ } else if (!HTList_isEmpty(tagged) &&
+ srcpath[0] == '\0') {
+ savepath[0] = '\0'; /* will always use tagged list - kw */
+ } else if (!ok_localname(savepath, srcpath)) {
return 0;
-
+ }
LYforce_no_cache = TRUE;
LYLocalFileToURL(newpath, Home_Dir());
- StrAllocCat(*newpath, "/.installdirs.html");
+ LYAddHtmlSep(newpath);
+ StrAllocCat(*newpath, INSTALLDIRS_FILE);
+ LYRegisterUIPage(*newpath, UIP_INSTALL);
return 0;
}
+ /* deal with ~/ or /~/ at the beginning - kw */
+ if (destpath[0] == '~' &&
+ (destpath[1] == '/' || destpath[1] == '\0')) {
+ cp = &destpath[1];
+ } else if (destpath[0] == '/' && destpath[1] == '~' &&
+ (destpath[2] == '/' || destpath[2] == '\0')) {
+ cp = &destpath[2];
+ }
+ if (cp) {
+ /* If found, allocate new string, make destpath point to it - kw */
+ StrAllocCopy(tmpdest, Home_Dir());
+ if (cp[0] && cp[1]) {
+ LYAddPathSep(&tmpdest);
+ StrAllocCat(tmpdest, cp + 1);
+ }
+ destpath = tmpdest;
+ }
+
destpath = strip_trailing_slash(destpath);
if (!ok_stat(destpath, &dir_info)) {
+ FREE(tmpdest);
return 0;
} else if (!S_ISDIR(dir_info.st_mode)) {
HTAlert(gettext("The selected item is not a directory! Request ignored."));
+ FREE(tmpdest);
return 0;
} else if (0 /*directory not writable*/) {
HTAlert(gettext("Install in the selected directory not permitted."));
+ FREE(tmpdest);
return 0;
}
statusline(gettext("Just a moment, ..."));
- args[n++] = "install";
+
+ /* fill in the fixed args, if not already done - kw */
+ if (src > 0 && install_argp) {
+ n = src;
+ n++;
+ } else {
+ n = fill_argv_for_execv(&install_argp, &install_path,
+ "install",
#ifdef INSTALL_ARGS
- args[n++] = INSTALL_ARGS;
+ INSTALL_ARGS,
+#else
+ NULL,
#endif /* INSTALL_ARGS */
- src = n++;
+ 2);
+ if (n <= 0) {
+ src = 0;
+ HTAlert(gettext("Error buiding install args"));
+ FREE(tmpdest);
+ return 0;
+ }
+ src = n++;
+ }
+ args = install_argp;
+
args[n++] = destpath;
args[n] = (char *)0;
- HTSprintf(&tmpbuf, "install %s", destpath);
tag = tagged;
if (HTList_isEmpty(tagged)) {
+ /* simplistic detection of identical src and dest - kw */
+ if (!strcmp(savepath, destpath)) {
+ HTUserMsg2(gettext("Source and target are the same: %s"),
+ savepath);
+ FREE(tmpdest);
+ return(-1); /* don't do it */
+ } else if (!strncmp(savepath, destpath, strlen(destpath)) &&
+ LYIsPathSep(savepath[strlen(destpath)]) &&
+#ifdef DOSPATH
+ !strchr(savepath + strlen(destpath) + 1, '\\') &&
+#endif
+ !strchr(savepath + strlen(destpath) + 1, '/')) {
+ HTUserMsg2(gettext("Already in target directory: %s"),
+ savepath);
+ FREE(tmpdest);
+ return 0; /* don't do it */
+ }
args[src] = savepath;
- if (LYExecv(INSTALL_PATH, args, tmpbuf) <= 0)
+ HTSprintf0(&tmpbuf, "install %s in %s", savepath, destpath);
+ if (LYExecv(INSTALL_PATH, args, tmpbuf) <= 0) {
+ FREE(tmpbuf);
+ FREE(tmpdest);
return (-1);
+ }
count++;
} else {
char *name;
+ HTSprintf0(&tmpbuf, "install in %s", destpath);
while ((name = (char *)HTList_nextObject(tag))) {
int err;
args[src] = HTfullURL_toFile(name);
+
+ /* simplistic detection of identical src and dest - kw */
+ if (!strcmp(args[src], destpath)) {
+ HTUserMsg2(gettext("Source and target are the same: %s"),
+ args[src]);
+ FREE(args[src]);
+ continue; /* skip this source file */
+ } else if (!strncmp(args[src], destpath, strlen(destpath)) &&
+ LYIsPathSep(args[src][strlen(destpath)]) &&
+#ifdef DOSPATH
+ !strchr(args[src] + strlen(destpath) + 1, '\\') &&
+#endif
+ !strchr(args[src] + strlen(destpath) + 1, '/')) {
+ HTUserMsg2(gettext("Already in target directory: %s"),
+ args[src]);
+ FREE(args[src]);
+ continue; /* skip this source file */
+ }
err = (LYExecv(INSTALL_PATH, args, tmpbuf) <= 0);
FREE(args[src]);
- if (err)
+ if (err) {
+ FREE(tmpbuf);
+ FREE(tmpdest);
return ((count == 0) ? -1 : count);
+ }
count++;
}
clear_tags();
}
FREE(tmpbuf);
+ FREE(tmpdest);
HTInfoMsg(gettext("Installation complete"));
return count;
}
+#endif /* OK_INSTALL */
/*
* Clear DIRED tags.
@@ -1862,7 +2258,7 @@ PUBLIC void clear_tags NOARGS
* Handle DIRED menu item.
*/
PUBLIC void add_menu_item ARGS1(
- char *, str)
+ char *, str)
{
struct dired_menu *new, *mp;
char *cp;
@@ -1874,7 +2270,7 @@ PUBLIC void add_menu_item ARGS1(
if (menu_head == defmenu)
menu_head = NULL;
- new = (struct dired_menu *)calloc(1, sizeof(*new));
+ new = typecalloc(struct dired_menu);
if (new == NULL)
outofmem(__FILE__, "add_menu_item");
@@ -1889,8 +2285,10 @@ PUBLIC void add_menu_item ARGS1(
new->cond = DE_DIR;
} else if (strcasecomp(str, "file") == 0) {
new->cond = DE_FILE;
+#ifdef S_IFLNK
} else if (strcasecomp(str, "link") == 0) {
new->cond = DE_SYMLINK;
+#endif /* S_IFLNK */
}
/*
@@ -1921,18 +2319,34 @@ PUBLIC void add_menu_item ARGS1(
menu_head = new;
}
+PUBLIC void reset_dired_menu NOARGS
+{
+ if (menu_head != defmenu) {
+ struct dired_menu *mp, *mp_next = NULL;
+ for (mp = menu_head; mp != NULL; mp = mp_next) {
+ FREE(mp->sfx);
+ FREE(mp->link);
+ FREE(mp->rest);
+ FREE(mp->href);
+ mp_next = mp_next;
+ FREE(mp);
+ }
+ menu_head = NULL;
+ }
+}
+
/*
* Create URL for DIRED HREF value.
*/
PRIVATE char * render_item ARGS6(
- CONST char *, s,
- char *, path,
- char *, dir,
- char *, buf,
+ CONST char *, s,
+ CONST char *, path,
+ CONST char *, dir,
+ char *, buf,
int, bufsize,
BOOLEAN, url_syntax)
{
- char *cp;
+ CONST char *cp;
char *bp;
char overrun = '\0';
char *taglist = NULL;
@@ -1962,7 +2376,7 @@ PRIVATE char * render_item ARGS6(
*BP_INC = *cp++;
break;
case 'f':
- cp = strrchr(path, '/');
+ cp = LYLastPathSep(path);
if (cp)
cp++;
else
@@ -1996,7 +2410,7 @@ PRIVATE char * render_item ARGS6(
break;
default:
*BP_INC = '%';
- *BP_INC =*s;
+ *BP_INC = *s;
break;
}
} else {
@@ -2010,96 +2424,11 @@ PRIVATE char * render_item ARGS6(
s++;
}
if (overrun & url_syntax) {
- strcpy(buf,gettext("Temporary URL or list would be too long."));
- HTAlert(buf);
+ HTAlert(gettext("Temporary URL or list would be too long."));
bp = buf; /* set to start, will return empty string as URL */
}
*bp = '\0';
return buf;
}
-#endif /* DIRED_SUPPORT */
-
-/*
- * Execute DIRED command.
- */
-PRIVATE int LYExecv ARGS3(
- char *, path,
- char **, argv,
- char *, msg)
-{
-#if defined(VMS) || defined(_WINDOWS)
- CTRACE(tfp, "LYExecv: Called inappropriately!\n");
- return(0);
-#else
- int rc;
- char *tmpbuf = 0;
- pid_t pid;
-#ifdef HAVE_TYPE_UNIONWAIT
- union wait wstatus;
-#else
- int wstatus;
-#endif
-
- if (TRACE) {
- int n;
- CTRACE(tfp, "LYExecv path='%s'\n", path);
- for (n = 0; argv[n] != 0; n++)
- CTRACE(tfp, "argv[%d] = '%s'\n", n, argv[n]);
- }
- rc = 1; /* It will work */
- stop_curses();
- pid = fork(); /* fork and execute rm */
- switch (pid) {
- case -1:
- HTSprintf(&tmpbuf, gettext("Unable to %s due to system error!"), msg);
- rc = 0;
- break; /* don't fall thru! - KW */
- case 0: /* child */
-#ifdef USE_EXECVP
- execvp(path, argv); /* this uses our $PATH */
-#else
- execv(path, argv);
-#endif
- exit(-1); /* execv failed, give wait() something to look at */
- default: /* parent */
-#if !HAVE_WAITPID
- while (wait(&wstatus) != pid)
- ; /* do nothing */
-#else
- while (-1 == waitpid(pid, &wstatus, 0)) { /* wait for child */
-#ifdef EINTR
- if (errno == EINTR)
- continue;
-#endif /* EINTR */
-#ifdef ERESTARTSYS
- if (errno == ERESTARTSYS)
- continue;
-#endif /* ERESTARTSYS */
- break;
- }
-#endif /* !HAVE_WAITPID */
- if (WEXITSTATUS(wstatus) != 0 ||
- WTERMSIG(wstatus) > 0) { /* error return */
- HTSprintf(&tmpbuf, gettext("Probable failure to %s due to system error!"),
- msg);
- rc = 0;
- }
- }
-
- if (rc == 0) {
- /*
- * Screen may have message from the failed execv'd command.
- * Give user time to look at it before screen refresh.
- */
- sleep(AlertSecs);
- }
- start_curses();
- if (tmpbuf != 0) {
- HTAlert(tmpbuf);
- FREE(tmpbuf);
- }
-
- return(rc);
-#endif /* VMS */
-}
+#endif /* DIRED_SUPPORT */
diff --git a/gnu/usr.bin/lynx/src/LYLocal.h b/gnu/usr.bin/lynx/src/LYLocal.h
index 029718d1360..4a9f563698f 100644
--- a/gnu/usr.bin/lynx/src/LYLocal.h
+++ b/gnu/usr.bin/lynx/src/LYLocal.h
@@ -3,64 +3,27 @@
#ifdef DIRED_SUPPORT
-#ifdef VMS
-#include <types.h>
-#include <stat.h>
-#endif /* VMS */
-
-#ifndef S_IRWXU
-#define S_IRWXU 0000700 /* rwx, owner */
-#define S_IRUSR 0000400 /* read permission, owner */
-#define S_IWUSR 0000200 /* write permission, owner */
-#define S_IXUSR 0000100 /* execute/search permission, owner */
-#define S_IRWXG 0000070 /* rwx, group */
-#define S_IRGRP 0000040 /* read permission, group */
-#define S_IWGRP 0000020 /* write permission, grougroup */
-#define S_IXGRP 0000010 /* execute/search permission, group */
-#define S_IRWXO 0000007 /* rwx, other */
-#define S_IROTH 0000004 /* read permission, other */
-#define S_IWOTH 0000002 /* write permission, other */
-#define S_IXOTH 0000001 /* execute/search permission, other */
-#endif /* !S_IRWXU */
-
-#ifndef S_ISUID /* Unusual modes */
-#define S_ISUID 0x800 /* set user id on execution */
-#define S_ISGID 0x400 /* set group id on execution */
-#define S_ISVTX 0x200 /* save swapped text even after use */
-#endif /* !S_ISUID */
+#include <HTUtils.h>
/* Special return code for LYMainLoop.c */
#define PERMIT_FORM_RESULT (-99)
-extern char LYPermitFileURL[];
-extern char LYDiredFileURL[];
-extern char LYUploadFileURL[];
-
-extern BOOLEAN local_create PARAMS((document *doc));
-extern BOOLEAN local_modify PARAMS((document *doc, char **newpath));
-extern BOOLEAN local_remove PARAMS((document *doc));
+extern int local_create PARAMS((document *doc));
+extern int local_modify PARAMS((document *doc, char **newpath));
+extern int local_remove PARAMS((document *doc));
+#ifdef OK_INSTALL
extern BOOLEAN local_install PARAMS((char *destpath, char *srcpath, char **newpath));
+#endif
/* MainLoop needs to know about this one for atexit cleanup */
extern void clear_tags NOPARAMS;
-/* Define the PRIVATE routines in case they ever go PUBLIC
-
-extern BOOLEAN modify_name PARAMS((char *testpath));
-extern BOOLEAN modify_location PARAMS((char *testpath));
-extern BOOLEAN create_file PARAMS((char *testpath));
-extern BOOLEAN create_directory PARAMS((char *testpath));
-extern BOOLEAN modify_tagged PARAMS((char *testpath));
-extern BOOLEAN remove_tagged NOPARAMS;
-extern BOOLEAN remove_single PARAMS ((char *testpath));
-extern BOOLEAN is_a_file PARAMS((char *testname));
-*/
-extern void tagflag PARAMS((int flag, int cur));
-extern void showtags PARAMS((HTList *tag));
-extern int local_dired PARAMS((document *doc));
extern int dired_options PARAMS ((document *doc, char ** newfile));
-
+extern int local_dired PARAMS((document *doc));
extern void add_menu_item PARAMS((char *str));
+extern void reset_dired_menu NOPARAMS;
+extern void showtags PARAMS((HTList *tag));
+extern void tagflag PARAMS((int flag, int cur));
#endif /* DIRED_SUPPORT */
diff --git a/gnu/usr.bin/lynx/src/LYMail.c b/gnu/usr.bin/lynx/src/LYMail.c
index d4d6a8123a5..d5432c7f194 100644
--- a/gnu/usr.bin/lynx/src/LYMail.c
+++ b/gnu/usr.bin/lynx/src/LYMail.c
@@ -1,13 +1,3 @@
-/*
- * This file checked for sprintf() buffer overruns on 1998/05/06 by Bela
- * Lubkin <filbo@armory.com>. Please don't introduce any new ones...
- *
- * See comments marked "- BL" for two still-possible overruns in the VMS
- * code.
- *
- * Not yet checked for any other sort of buffer overrun.
- */
-
#include <HTUtils.h>
#include <HTParse.h>
#include <LYGlobalDefs.h>
@@ -19,17 +9,36 @@
#include <LYStrings.h>
#include <GridText.h>
#include <LYMail.h>
+#include <LYEdit.h>
#include <LYCharSets.h> /* to get current charset for mail header */
#include <LYLeaks.h>
+#define MAX_SUBJECT 70
+#define EMPTY(s) ((s) == 0 || *(s) == 0)
+#define NIL_OK(s) (((s) != 0) ? (s) : "<nil>")
+
BOOLEAN term_letter; /* Global variable for async i/o. */
-PRIVATE void terminate_letter PARAMS((int sig));
-PRIVATE void remove_tildes PARAMS((char *string));
+
+PRIVATE void terminate_letter ARGS1(int,sig GCC_UNUSED)
+{
+ term_letter = TRUE;
+ /* Reassert the AST */
+ signal(SIGINT, terminate_letter);
+#if USE_VMS_MAILER || defined(DOSPATH) || defined(WIN_EX)
+ /*
+ * Refresh the screen to get rid of the "interrupt" message.
+ */
+ if (!dump_output_immediately) {
+ lynx_force_repaint();
+ LYrefresh();
+ }
+#endif /* VMS */
+}
/* HTUnEscape with control-code nuking */
PRIVATE void SafeHTUnEscape ARGS1(
- char *, string)
+ char *, string)
{
int i;
int flg = FALSE;
@@ -39,7 +48,7 @@ PRIVATE void SafeHTUnEscape ARGS1(
{
/* FIXME: this is no longer explicitly 7-bit ASCII,
but are there portability problems? */
- if ((!LYIsASCII(string[i])) || !isprint(string[i]))
+ if ((!LYIsASCII(string[i])) || !isprint(UCH(string[i])))
{
string[i] = '?';
flg = TRUE;
@@ -49,40 +58,496 @@ PRIVATE void SafeHTUnEscape ARGS1(
HTAlert(MAILTO_SQUASH_CTL);
}
+PRIVATE void remove_tildes ARGS1(char *,string)
+{
+ /*
+ * Change the first character to
+ * a space if it is a '~'.
+ */
+ if (*string == '~')
+ *string = ' ';
+}
+
+PRIVATE void comma_append ARGS2(
+ char **, dst,
+ char *, src)
+{
+ if (*src) {
+ while (*src == ',' || isspace(UCH(*src)))
+ src++;
+ if (*src) {
+ if (EMPTY(*dst)) {
+ StrAllocCopy(*dst, src);
+ } else {
+ StrAllocCat(*dst, ",");
+ StrAllocCat(*dst, src);
+ }
+ }
+ }
+}
+
+PRIVATE void extract_field ARGS3(
+ char **, dst,
+ char *, src,
+ char *, keyword)
+{
+ int len = strlen(keyword);
+ char *cp, *cp1;
+
+ cp = (src + 1);
+ while (*cp != '\0') {
+ if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
+ !strncasecomp(cp, keyword, len)) {
+ cp += len;
+ if ((cp1 = strchr(cp, '&')) != NULL) {
+ *cp1 = '\0';
+ }
+ comma_append(dst, cp);
+ if (cp1) {
+ *cp1 = '&';
+ cp = cp1;
+ cp1 = NULL;
+ } else {
+ break;
+ }
+ }
+ cp++;
+ }
+ CTRACE((tfp, "extract_field(%s) = '%s'\n", keyword, NIL_OK(*dst)));
+}
+
+/*
+ * Seek and handle a subject=foo. - FM
+ */
+PRIVATE void extract_subject ARGS2(
+ char *, dst,
+ char *, src)
+{
+ CONST char *keyword = "subject=";
+ int len = strlen(keyword);
+ char *cp, *cp1;
+
+ cp = (src + 1);
+ while (*cp != '\0') {
+ if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
+ !strncasecomp(cp, keyword, len))
+ break;
+ cp++;
+ }
+ if (*cp) {
+ cp += len;
+ if ((cp1 = strchr(cp, '&')) != NULL) {
+ *cp1 = '\0';
+ }
+ if (*cp) {
+ strncpy(dst, cp, MAX_SUBJECT);
+ dst[MAX_SUBJECT] = '\0';
+ SafeHTUnEscape(dst);
+ }
+ if (cp1) {
+ *cp1 = '&';
+ cp1 = NULL;
+ }
+ }
+ CTRACE((tfp, "extract_subject(%s) = '%s'\n", keyword, NIL_OK(dst)));
+}
+
+/*
+ * Seek and handle body=foo fields. - FM
+ */
+PRIVATE void extract_body ARGS2(
+ char **, dst,
+ char *, src)
+{
+ CONST char *keyword = "body=";
+ int len = strlen(keyword);
+ int i;
+ char *cp, *cp0, *cp1, *temp = 0;
+
+ cp = (src + 1);
+ while (*cp != '\0') {
+ if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
+ !strncasecomp(cp, keyword, len)) {
+ cp += len;
+ if ((cp1 = strchr(cp, '&')) != NULL) {
+ *cp1 = '\0';
+ }
+ if (*cp) {
+ /*
+ * Break up the value into lines with
+ * a maximum length of 78. - FM
+ */
+ StrAllocCopy(temp, cp);
+ HTUnEscape(temp);
+ cp0 = temp;
+ while((cp = strchr(cp0, '\n')) != NULL) {
+ *cp = '\0';
+ if (cp > cp0) {
+ if (*(cp - 1) == '\r') {
+ *(cp - 1) = '\0';
+ }
+ }
+ i = 0;
+ len = strlen(cp0);
+ while (len > 78) {
+ HTSprintf(dst, "%.78s\n", &cp0[i]);
+ i += 78;
+ len = strlen(&cp0[i]);
+ }
+ HTSprintf(dst, "%s\n", &cp0[i]);
+ cp0 = (cp + 1);
+ }
+ i = 0;
+ len = strlen(cp0);
+ while (len > 78) {
+ HTSprintf(dst, "%.78s\n", &cp0[i]);
+ i += 78;
+ len = strlen(&cp0[i]);
+ }
+ if (len) {
+ HTSprintf(dst, "%s\n", &cp0[i]);
+ }
+ FREE(temp);
+ }
+ if (cp1) {
+ *cp1 = '&';
+ cp = cp1;
+ cp1 = NULL;
+ } else {
+ break;
+ }
+ }
+ cp++;
+ }
+ CTRACE((tfp, "extract_body(%s) = '%s'\n", keyword, NIL_OK(*dst)));
+}
+
+/*
+ * Convert any Explorer semi-colon Internet address separators to commas - FM
+ */
+PRIVATE BOOLEAN trim_comma ARGS1(
+ char *, address)
+{
+ if (address[(strlen(address) - 1)] == ',')
+ address[(strlen(address) - 1)] = '\0';
+ return (BOOL) (*address == '\0');
+}
+
+/*
+ * Convert any Explorer semi-colon Internet address separators to commas - FM
+ */
+PRIVATE BOOLEAN convert_explorer ARGS1(
+ char *, address)
+{
+ char *cp = address;
+ char *cp0;
+ char *cp1;
+
+ while ((cp1 = strchr(cp, '@')) != NULL) {
+ cp1++;
+ if ((cp0 = strchr(cp1, ';')) != NULL) {
+ *cp0 = ',';
+ cp1 = cp0 + 1;
+ }
+ cp = cp1;
+ }
+ return trim_comma(address);
+}
+
+/*
+ * reply_by_mail() prompts line-by-line for header information, allowing
+ * scrolling of the screen.
+ */
+PRIVATE int header_prompt ARGS3(
+ char *, label,
+ char **, result,
+ unsigned, limit)
+{
+ char buffer[LINESIZE];
+ int ok;
+
+ if (*result != 0) {
+ LYaddstr(CTRL_U_TO_ERASE);
+ LYstrncpy(buffer, *result, sizeof(buffer)-1);
+ } else
+ *buffer = 0;
+
+ if (limit > sizeof(buffer))
+ limit = sizeof(buffer);
+
+ LYaddstr(gettext(label));
+ LYaddstr(": ");
+ ok = (LYgetstr(buffer, VISIBLE, limit, NORECALL) >= 0
+ && !term_letter);
+ LYaddstr("\n");
+
+ if (ok) {
+ remove_tildes(buffer);
+ StrAllocCopy(*result, buffer);
+ }
+ term_letter = FALSE;
+ return ok;
+}
+
+PRIVATE void show_addresses ARGS1(
+ char *, addresses)
+{
+ char *cp = addresses;
+ char *cp1;
+
+ while ((cp1 = strchr(cp, ',')) != NULL) {
+ *cp1 = '\0';
+ while (*cp == ' ')
+ cp++;
+ if (*cp) {
+ LYaddstr(cp);
+ LYaddstr(",\n ");
+ }
+ *cp1 = ',';
+ cp = (cp1 + 1);
+ }
+ if (*cp) {
+ LYaddstr(cp);
+ }
+}
+
+#if USE_BLAT_MAILER
+
+/*
+syntax:
+Blat <filename> -t <recipient> [optional switches (see below)]
+
+<filename> : file with the message body
+-t <recipient>: recipient list (comma separated)
+-s <subj> : subject line
+-f <sender> : overrides the default sender address (must be known to server)
+-i <addr> : a 'From:' address, not necessarily known to the SMTP server.
+-c <recipient>: carbon copy recipient list (comma separated)
+-b <recipient>: blind carbon copy recipient list (comma separated)
+-h : displays this help.
+-mime : MIME Quoted-Printable Content-Transfer-Encoding.
+-q : supresses *all* output.
+-server <addr>: overrides the default SMTP server to be used.
+
+*/
+
+PRIVATE char *blat_cmd(
+ char *mail_cmd,
+ char *filename,
+ char *address,
+ char *subject,
+ char *ccaddr,
+ char *mail_addr)
+{
+ static char *b_cmd;
+
+#ifdef USE_ALT_BLAT_MAILER
+
+ HTSprintf0(&b_cmd, "%s %s -t \"%s\" -s \"%s\" %s%s%s%s",
+ mail_cmd,
+ filename,
+ address,
+ subject,
+ system_mail_flags,
+ ccaddr? " -c \"" : "",
+ ccaddr? ccaddr : "",
+ ccaddr? "\"" : "");
+
+#else /* !USE_ALT_BLAT_MAILER */
+
+ static char bl_cmd_file[512];
+ FILE *fp;
+#ifdef __CYGWIN__
+ char dosname[LY_MAXPATH];
+#endif
+
+ bl_cmd_file[0] = '\0';
+ if ((fp = LYOpenTemp(bl_cmd_file, ".blt", "w")) == NULL) {
+ HTAlert(FORM_MAILTO_FAILED);
+ return NULL;
+ }
+
+#ifdef __CYGWIN__
+ cygwin_conv_to_full_win32_path(filename, dosname);
+ fprintf(fp, "%s\n", dosname);
+#else
+ fprintf(fp, "%s\n", filename);
+#endif
+ fprintf(fp, "-t\n%s\n", address);
+ if (subject)
+ fprintf(fp, "-s\n%s\n", subject);
+ if (!EMPTY(mail_addr)) {
+ fprintf(fp, "-f\n%s\n", mail_addr);
+ }
+ if (!EMPTY(ccaddr)) {
+ fprintf(fp, "-c\n%s\n", ccaddr);
+ }
+ LYCloseOutput(fp);
+
+#ifdef __CYGWIN__
+ cygwin_conv_to_full_win32_path(bl_cmd_file, dosname);
+ HTSprintf0(&b_cmd, "%s \"@%s\"", mail_cmd, dosname);
+#else
+ HTSprintf0(&b_cmd, "%s @%s", mail_cmd, bl_cmd_file);
+#endif
+
+#endif /* USE_ALT_BLAT_MAILER */
+
+ return b_cmd;
+}
+
+#endif /* USE_BLAT_MAILER */
+
+#if USE_VMS_MAILER
+PUBLIC BOOLEAN LYMailPMDF(void)
+{
+ return !strncasecomp(system_mail, "PMDF SEND", 9);
+}
+
+/*
+ * Add all of the people in the address field to the command
+ */
+PRIVATE void vms_append_addrs (char **cmd, char *address, char *option)
+{
+ BOOLEAN first = TRUE;
+ char *cp;
+ char *address_ptr1;
+ char *address_ptr2;
+
+ address_ptr1 = address;
+ do {
+ if ((cp = strchr(address_ptr1, ',')) != NULL) {
+ address_ptr2 = (cp+1);
+ *cp = '\0';
+ } else {
+ address_ptr2 = NULL;
+ }
+
+ /*
+ * 4 letters is arbitrarily the smallest possible mail
+ * address, at least for lynx. That way extra spaces
+ * won't confuse the mailer and give a blank address.
+ */
+ if (strlen(address_ptr1) > 3) {
+ if (!first) {
+ StrAllocCat(*cmd, ",");
+ }
+ HTSprintf(cmd, mail_adrs, address_ptr1);
+ if (*option && LYMailPMDF())
+ StrAllocCat(*cmd, option);
+ first = FALSE;
+ }
+ address_ptr1 = address_ptr2;
+ } while (address_ptr1 != NULL);
+}
+
+PRIVATE void remove_quotes (char * string)
+{
+ while (*string != 0) {
+ if (strchr("\"&|", *string) != 0)
+ *string = ' ';
+ string++;
+ }
+}
+#else
+#if CAN_PIPE_TO_MAILER
+
+/*
+ * Open a pipe to the mailer
+ */
+PUBLIC FILE *LYPipeToMailer NOARGS
+{
+ char *buffer = NULL;
+ FILE *fp;
+
+ HTSprintf0(&buffer, "%s %s", system_mail, system_mail_flags);
+ fp = popen(buffer, "w");
+ CTRACE((tfp, "popen(%s) %s\n", buffer, fp != 0 ? "OK" : "FAIL"));
+ FREE(buffer);
+ return fp;
+}
+#else /* DOS, Win32, etc. */
+
+PUBLIC int LYSendMailFile ARGS5(
+ char *, the_address,
+ char *, the_filename,
+ char *, the_subject GCC_UNUSED,
+ char *, the_ccaddr GCC_UNUSED,
+ char *, message)
+{
+ char *cmd = NULL;
+ int code;
+
+#if USE_BLAT_MAILER
+ if (mail_is_blat)
+ StrAllocCopy(cmd,
+ blat_cmd(
+ system_mail,
+ the_filename,
+ the_address,
+ the_subject,
+ the_ccaddr,
+ personal_mail_address
+ )
+ );
+ else
+#endif
+ HTSprintf0(&cmd, "%s -t \"%s\" -F %s",
+ system_mail,
+ the_address,
+ the_filename);
+
+ stop_curses();
+ SetOutputMode(O_TEXT);
+ printf("%s\n\n$ %s\n\n%s",
+ *message ? message : gettext("Sending"),
+ cmd, PLEASE_WAIT);
+ code = LYSystem(cmd);
+ LYSleepMsg();
+ start_curses();
+ SetOutputMode( O_BINARY );
+
+ FREE(cmd);
+
+ return code;
+}
+#endif /* CAN_PIPE_TO_FILE */
+#endif /* USE_VMS_MAILER */
+
/*
** mailform() sends form content to the mailto address(es). - FM
*/
PUBLIC void mailform ARGS4(
- CONST char *, mailto_address,
- CONST char *, mailto_subject,
- CONST char *, mailto_content,
- CONST char *, mailto_type)
+ CONST char *, mailto_address,
+ CONST char *, mailto_subject,
+ CONST char *, mailto_content,
+ CONST char *, mailto_type)
{
FILE *fd;
char *address = NULL;
char *ccaddr = NULL;
char *keywords = NULL;
+ char *cp = NULL;
+ char self[MAX_SUBJECT + 10];
+ char subject[MAX_SUBJECT + 10];
char *searchpart = NULL;
- char *cp = NULL, *cp0 = NULL, *cp1 = NULL;
- char subject[80];
- char self[80];
- char cmd[512];
- int len, i, ch;
-#if defined(VMS) || defined(DOSPATH)
- char my_tmpfile[LY_MAXPATH];
+ char buf[512];
+ int ch, len, i;
+#if USE_VMS_MAILER
+ static char *cmd;
char *command = NULL;
-#ifdef VMS
- char *address_ptr1, *address_ptr2;
- BOOLEAN first = TRUE;
-#endif
- BOOLEAN isPMDF = FALSE;
+ BOOLEAN isPMDF = LYMailPMDF();
char hdrfile[LY_MAXPATH];
- FILE *hfd;
+#endif
+#if !CAN_PIPE_TO_MAILER
+ char my_tmpfile[LY_MAXPATH];
+#endif
- if (!strncasecomp(system_mail, "PMDF SEND", 9)) {
- isPMDF = TRUE;
- }
-#endif /* VMS */
+ CTRACE((tfp, "mailform(\"%s\", \"%s\", \"%s\", \"%s\")\n",
+ NIL_OK(mailto_address),
+ NIL_OK(mailto_subject),
+ NIL_OK(mailto_content),
+ NIL_OK(mailto_type)));
if (!mailto_address || !mailto_content) {
HTAlert(BAD_FORM_MAILTO);
@@ -106,123 +571,26 @@ PUBLIC void mailform ARGS4(
/*
* Seek and handle a subject=foo. - FM
*/
- while (*cp != '\0') {
- if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
- !strncasecomp(cp, "subject=", 8))
- break;
- cp++;
- }
- if (*cp) {
- cp += 8;
- if ((cp1 = strchr(cp, '&')) != NULL) {
- *cp1 = '\0';
- }
- if (*cp) {
- SafeHTUnEscape(subject);
- LYstrncpy(subject, cp, 70);
- }
- if (cp1) {
- *cp1 = '&';
- cp1 = NULL;
- }
- }
+ extract_subject(subject, searchpart);
/*
* Seek and handle to=address(es) fields.
* Appends to address. - FM
*/
- cp = (searchpart + 1);
- while (*cp != '\0') {
- if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
- !strncasecomp(cp, "to=", 3)) {
- cp += 3;
- if ((cp1 = strchr(cp, '&')) != NULL) {
- *cp1 = '\0';
- }
- while (*cp == ',' || isspace((unsigned char)*cp))
- cp++;
- if (*cp) {
- if (*address) {
- StrAllocCat(address, ",");
- }
- StrAllocCat(address, cp);
- }
- if (cp1) {
- *cp1 = '&';
- cp = cp1;
- cp1 = NULL;
- } else {
- break;
- }
- }
- cp++;
- }
+ extract_field(&address, searchpart, "to=");
/*
* Seek and handle cc=address(es) fields. Excludes
* Bcc=address(es) as unsafe. We may append our own
* cc (below) as a list for the actual mailing. - FM
*/
- cp = (searchpart + 1);
- while (*cp != '\0') {
- if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
- !strncasecomp(cp, "cc=", 3)) {
- cp += 3;
- if ((cp1 = strchr(cp, '&')) != NULL) {
- *cp1 = '\0';
- }
- while (*cp == ',' || isspace((unsigned char)*cp))
- cp++;
- if (*cp) {
- if (ccaddr == NULL) {
- StrAllocCopy(ccaddr, cp);
- } else {
- StrAllocCat(ccaddr, ",");
- StrAllocCat(ccaddr, cp);
- }
- }
- if (cp1) {
- *cp1 = '&';
- cp = cp1;
- cp1 = NULL;
- } else {
- break;
- }
- }
- cp++;
- }
+ extract_field(&ccaddr, searchpart, "cc=");
/*
* Seek and handle keywords=term(s) fields. - FM
*/
- cp = (searchpart + 1);
- while (*cp != '\0') {
- if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
- !strncasecomp(cp, "keywords=", 9)) {
- cp += 9;
- if ((cp1 = strchr(cp, '&')) != NULL) {
- *cp1 = '\0';
- }
- while (*cp == ',' || isspace((unsigned char)*cp))
- cp++;
- if (*cp) {
- if (keywords == NULL) {
- StrAllocCopy(keywords, cp);
- } else {
- StrAllocCat(keywords, cp);
- StrAllocCat(keywords, ", ");
- }
- }
- if (cp1) {
- *cp1 = '&';
- cp = cp1;
- cp1 = NULL;
- } else {
- break;
- }
- }
- cp++;
- }
+ extract_field(&keywords, searchpart, "keywords=");
+
if (keywords != NULL) {
if (*keywords != '\0') {
SafeHTUnEscape(keywords);
@@ -235,42 +603,12 @@ PUBLIC void mailform ARGS4(
}
}
- /*
- * Convert any Explorer semi-colon Internet address
- * separators to commas. - FM
- */
- cp = address;
- while ((cp1 = strchr(cp, '@')) != NULL) {
- cp1++;
- if ((cp0 = strchr(cp1, ';')) != NULL) {
- *cp0 = ',';
- cp1 = cp0 + 1;
- }
- cp = cp1;
- }
- if (address[(strlen(address) - 1)] == ',')
- address[(strlen(address) - 1)] = '\0';
- if (*address == '\0') {
- FREE(address);
- FREE(ccaddr);
- FREE(keywords);
+ if (convert_explorer(address)) {
HTAlert(BAD_FORM_MAILTO);
- return;
+ goto cleanup;
}
if (ccaddr != NULL) {
- cp = ccaddr;
- while ((cp1 = strchr(cp, '@')) != NULL) {
- cp1++;
- if ((cp0 = strchr(cp1, ';')) != NULL) {
- *cp0 = ',';
- cp1 = cp0 + 1;
- }
- cp = cp1;
- }
- if (ccaddr[(strlen(ccaddr) - 1)] == ',') {
- ccaddr[(strlen(ccaddr) - 1)] = '\0';
- }
- if (*ccaddr == '\0') {
+ if (convert_explorer(ccaddr)) {
FREE(ccaddr);
}
}
@@ -286,24 +624,20 @@ PUBLIC void mailform ARGS4(
/*
* Allow user to edit the default Subject - FM
*/
- if (subject[0] == '\0') {
- if (mailto_subject && *mailto_subject) {
- LYstrncpy(subject, mailto_subject, 70);
+ if (EMPTY(subject)) {
+ if (!EMPTY(mailto_subject)) {
+ LYstrncpy(subject, mailto_subject, MAX_SUBJECT);
} else {
- strcpy(subject, "mailto:");
- LYstrncpy((char*)&subject[7], address, 63);
+ sprintf(subject, "mailto:%.63s", address);
}
}
_statusline(SUBJECT_PROMPT);
- if ((ch = LYgetstr(subject, VISIBLE, 71, NORECALL)) < 0) {
+ if ((ch = LYgetstr(subject, VISIBLE, MAX_SUBJECT, NORECALL)) < 0) {
/*
* User cancelled via ^G. - FM
*/
HTInfoMsg(FORM_MAILTO_CANCELLED);
- FREE(address);
- FREE(ccaddr);
- FREE(keywords);
- return;
+ goto cleanup;
}
/*
@@ -311,19 +645,15 @@ PUBLIC void mailform ARGS4(
* entry, if permitted. - FM
*/
if (!LYNoCc) {
- sprintf(self, "%.79s", (personal_mail_address ?
- personal_mail_address : ""));
- self[79] = '\0';
+ sprintf(self, "%.*s", MAX_SUBJECT,
+ EMPTY(personal_mail_address) ? "" : personal_mail_address);
_statusline("Cc: ");
- if ((ch = LYgetstr(self, VISIBLE, sizeof(self), NORECALL)) < 0) {
+ if ((ch = LYgetstr(self, VISIBLE, MAX_SUBJECT, NORECALL)) < 0) {
/*
* User cancelled via ^G. - FM
*/
HTInfoMsg(FORM_MAILTO_CANCELLED);
- FREE(address);
- FREE(ccaddr);
- FREE(keywords);
- return;
+ goto cleanup;
}
remove_tildes(self);
if (ccaddr == NULL) {
@@ -334,32 +664,53 @@ PUBLIC void mailform ARGS4(
}
}
-#if defined(VMS) || defined(DOSPATH)
+#if CAN_PIPE_TO_MAILER
+ if ((fd = LYPipeToMailer()) == 0) {
+ HTAlert(FORM_MAILTO_FAILED);
+ goto cleanup;
+ }
+
+ if (!EMPTY(mailto_type)) {
+ fprintf(fd, "Mime-Version: 1.0\n");
+ fprintf(fd, "Content-Type: %s\n", mailto_type);
+ }
+ fprintf(fd, "To: %s\n", address);
+ if (!EMPTY(personal_mail_address))
+ fprintf(fd, "From: %s\n", personal_mail_address);
+ if (!EMPTY(ccaddr))
+ fprintf(fd, "Cc: %s\n", ccaddr);
+ fprintf(fd, "Subject: %s\n\n", subject);
+ if (!EMPTY(keywords))
+ fprintf(fd, "Keywords: %s\n", keywords);
+ _statusline(SENDING_FORM_CONTENT);
+#else /* e.g., VMS, DOSPATH */
if ((fd = LYOpenTemp(my_tmpfile, ".txt", "w")) == NULL) {
HTAlert(FORM_MAILTO_FAILED);
- FREE(address);
- FREE(ccaddr);
- FREE(keywords);
- return;
+ goto cleanup;
}
+#if USE_VMS_MAILER
if (isPMDF) {
+ FILE *hfd;
if ((hfd = LYOpenTemp(hdrfile, ".txt", "w")) == NULL) {
HTAlert(FORM_MAILTO_FAILED);
LYCloseTempFP(fd);
- FREE(address);
- FREE(ccaddr);
- FREE(keywords);
- return;
+ goto cleanup;
}
- }
-#ifdef VMS
- if (isPMDF) {
- if (mailto_type && *mailto_type) {
+ if (!EMPTY(mailto_type)) {
fprintf(hfd, "Mime-Version: 1.0\n");
fprintf(hfd, "Content-Type: %s\n", mailto_type);
- if (personal_mail_address && *personal_mail_address)
+ if (!EMPTY(personal_mail_address))
fprintf(hfd, "From: %s\n", personal_mail_address);
- }
+ }
+ /*
+ * For PMDF, put any keywords and the subject
+ * in the header file and close it. - FM
+ */
+ if (!EMPTY(keywords)) {
+ fprintf(hfd, "Keywords: %s\n", keywords);
+ }
+ fprintf(hfd, "Subject: %s\n\n", subject);
+ LYCloseTempFP(hfd);
} else if (mailto_type &&
!strncasecomp(mailto_type, "multipart/form-data", 19)) {
/*
@@ -369,42 +720,25 @@ PUBLIC void mailform ARGS4(
*/
fprintf(fd, "X-Content-Type: %s\n\n", mailto_type);
}
-#else
- 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);
+#else /* !VMS (DOS) */
+#if USE_BLAT_MAILER
+ if (mail_is_blat) {
+ if (strlen(subject) > MAX_SUBJECT)
+ subject[MAX_SUBJECT] = '\0';
+ } else
#endif
-
-#else
- sprintf(cmd, "%s %s", system_mail, system_mail_flags);
- if ((fd = popen(cmd, "w")) == NULL) {
- HTAlert(FORM_MAILTO_FAILED);
- FREE(address);
- FREE(ccaddr);
- FREE(keywords);
- return;
- }
-
- if (mailto_type && *mailto_type) {
- fprintf(fd, "Mime-Version: 1.0\n");
- fprintf(fd, "Content-Type: %s\n", mailto_type);
+ {
+ if (!EMPTY(mailto_type)) {
+ fprintf(fd, "Mime-Version: 1.0\n");
+ fprintf(fd, "Content-Type: %s\n", mailto_type);
+ }
+ fprintf(fd,"To: %s\n", address);
+ if (!EMPTY(personal_mail_address))
+ fprintf(fd,"From: %s\n", personal_mail_address);
+ fprintf(fd,"Subject: %.70s\n\n", subject);
}
- fprintf(fd, "To: %s\n", address);
- if (personal_mail_address && *personal_mail_address)
- fprintf(fd, "From: %s\n", personal_mail_address);
- if (ccaddr != NULL && *ccaddr != '\0')
- fprintf(fd, "Cc: %s\n", ccaddr);
- fprintf(fd, "Subject: %s\n\n", subject);
- if (keywords != NULL && *keywords != '\0')
- fprintf(fd, "Keywords: %s\n", keywords);
- _statusline(SENDING_FORM_CONTENT);
#endif /* VMS */
+#endif /* CAN_PIPE_TO_MAILER */
/*
* Break up the content into lines with a maximum length of 78.
@@ -417,9 +751,9 @@ PUBLIC void mailform ARGS4(
i = 0;
len = strlen(mailto_content);
while (len > 78) {
- strncpy(cmd, &mailto_content[i], 78);
- cmd[78] = '\0';
- fprintf(fd, "%s\n", cmd);
+ strncpy(buf, &mailto_content[i], 78);
+ buf[78] = '\0';
+ fprintf(fd, "%s\n", buf);
i += 78;
len = strlen(&mailto_content[i]);
}
@@ -429,39 +763,29 @@ PUBLIC void mailform ARGS4(
i = 0;
len = strlen(mailto_content);
while (len > 78) {
- strncpy(cmd, &mailto_content[i], 78);
- cmd[78] = '\0';
- fprintf(fd, "%s\n", cmd);
+ strncpy(buf, &mailto_content[i], 78);
+ buf[78] = '\0';
+ fprintf(fd, "%s\n", buf);
i += 78;
len = strlen(&mailto_content[i]);
}
if (len)
fprintf(fd, "%s\n", &mailto_content[i]);
-#ifdef UNIX
+#if CAN_PIPE_TO_MAILER
pclose(fd);
- sleep(MessageSecs);
-#endif /* UNIX */
-#if defined(VMS) || defined(DOSPATH)
+ LYSleepMsg();
+#else
LYCloseTempFP(fd);
-#ifdef VMS
+#if USE_VMS_MAILER
/*
* Set the mail command. - FM
*/
if (isPMDF) {
/*
- * For PMDF, put any keywords and the subject
- * in the header file and close it. - FM
- */
- if (keywords != NULL && *keywords != '\0') {
- fprintf(hfd, "Keywords: %s\n", keywords);
- }
- fprintf(hfd, "Subject: %s\n\n", subject);
- LYCloseTempFP(hfd);
- /*
* Now set up the command. - FM
*/
- sprintf(cmd,
+ HTSprintf0(&cmd,
"%s %s %s,%s ",
system_mail,
system_mail_flags,
@@ -473,10 +797,8 @@ PUBLIC void mailform ARGS4(
* command, and ignore any keywords to minimize risk
* of them making the line too long or having problem
* characters. - FM
- *
- * Possibly still a problem if user supplies long subject. - BL
*/
- sprintf(cmd,
+ HTSprintf0(&cmd,
"%s %s%s/subject=\"%s\" %s ",
system_mail,
system_mail_flags,
@@ -486,96 +808,32 @@ PUBLIC void mailform ARGS4(
}
StrAllocCopy(command, cmd);
- /*
- * Now add all the people in the address field. - FM
- */
- address_ptr1 = address;
- do {
- if ((cp = strchr(address_ptr1, ',')) != NULL) {
- address_ptr2 = (cp+1);
- *cp = '\0';
- } else {
- address_ptr2 = NULL;
- }
-
- /*
- * 4 letters is arbitrarily the smallest possible mail
- * address, at least for lynx. That way extra spaces
- * won't confuse the mailer and give a blank address.
- *
- * ignore addresses so long that they would overflow the
- * temporary buffer (i.e., about 500 chars). - BL
- */
- if (strlen(address_ptr1) > 3 &&
- strlen(address_ptr1) + strlen(mail_adrs) < sizeof(cmd)) {
- if (!first) {
- StrAllocCat(command, ",");
- }
- sprintf(cmd, mail_adrs, address_ptr1);
- StrAllocCat(command, cmd);
- first = FALSE;
- }
- address_ptr1 = address_ptr2;
- } while (address_ptr1 != NULL);
-
- /*
- * Now add all the people in the CC field. - FM
- */
- if (ccaddr != NULL && *ccaddr != '\0') {
- address_ptr1 = ccaddr;
- do {
- if ((cp = strchr(address_ptr1, ',')) != NULL) {
- address_ptr2 = (cp+1);
- *cp = '\0';
- } else {
- address_ptr2 = NULL;
- }
-
- /*
- * 4 letters is arbitrarily the smallest possible mail
- * address, at least for lynx. That way extra spaces
- * won't confuse the mailer and give a blank address.
- *
- * ignore addresses so long that they would overflow the
- * temporary buffer (i.e., about 500 chars). - BL
- */
- if (strlen(address_ptr1) > 3 &&
- strlen(address_ptr1) + strlen(mail_adrs) < sizeof(cmd)) {
- StrAllocCat(command, ",");
- sprintf(cmd, mail_adrs, address_ptr1);
- if (isPMDF) {
- strcat(cmd, "/CC");
- }
- StrAllocCat(command, cmd);
- }
- address_ptr1 = address_ptr2;
- } while (address_ptr1 != NULL);
+ vms_append_addrs(&command, address, "");
+ if (!EMPTY(ccaddr)) {
+ vms_append_addrs(&command, ccaddr, "/CC");
}
stop_curses();
printf("%s\n\n$ %s\n\n%s", SENDING_FORM_CONTENT, command, PLEASE_WAIT);
- LYSystem(command);
+ LYSystem(command); /* Mail (VMS) */
FREE(command);
- sleep(AlertSecs);
+ LYSleepAlert();
start_curses();
LYRemoveTemp(my_tmpfile);
- LYRemoveTemp(hdrfile);
+ if (isPMDF)
+ LYRemoveTemp(hdrfile);
#else /* DOSPATH */
- StrAllocCopy(command, system_mail);
- StrAllocCat(command, " -t \"");
- StrAllocCat(command, address);
- StrAllocCat(command, "\" -F ");
- StrAllocCat(command, my_tmpfile);
- stop_curses();
- printf("%s\n\n$ %s\n\n%s", SENDING_FORM_CONTENT, command, PLEASE_WAIT);
- LYSystem(command);
- FREE(command);
- sleep(MessageSecs);
- start_curses();
+ LYSendMailFile (
+ address,
+ my_tmpfile,
+ subject,
+ ccaddr,
+ SENDING_FORM_CONTENT);
LYRemoveTemp(my_tmpfile);
-#endif
-#endif /* VMS */
+#endif /* USE_VMS_MAILER */
+#endif /* CAN_PIPE_TO_MAILER */
+cleanup:
FREE(address);
FREE(ccaddr);
FREE(keywords);
@@ -595,143 +853,138 @@ PUBLIC void mailmsg ARGS4(
FILE *fd, *fp;
char *address = NULL;
char *searchpart = NULL;
- char *cmd = NULL, *cp, *cp0, *cp1;
-#if defined(VMS) || defined(DOSPATH)
+ char *cmd = NULL, *cp;
+#ifdef ALERTMAIL
+ BOOLEAN skip_parsing = FALSE;
+#endif
+#if !CAN_PIPE_TO_MAILER
+ char *ccaddr;
+ char subject[128];
char my_tmpfile[LY_MAXPATH];
- char *command = NULL;
-#ifdef VMS
- char *address_ptr1, *address_ptr2;
- BOOLEAN first = TRUE;
#endif
- BOOLEAN isPMDF = FALSE;
+#if USE_VMS_MAILER
+ BOOLEAN isPMDF = LYMailPMDF();
char hdrfile[LY_MAXPATH];
- FILE *hfd;
+ char *command = NULL;
- CTRACE(tfp, "mailmsg(%d, \"%s\", \"%s\", \"%s\")\n", cur,
- owner_address?owner_address:"<nil>",
- filename?filename:"<nil>",
- linkname?linkname:"<nil>");
+ CTRACE((tfp, "mailmsg(%d, \"%s\", \"%s\", \"%s\")\n", cur,
+ NIL_OK(owner_address),
+ NIL_OK(filename),
+ NIL_OK(linkname)));
- if (!strncasecomp(system_mail, "PMDF SEND", 9)) {
- isPMDF = TRUE;
- }
#endif /* VMS */
+#ifdef ALERTMAIL
+ if (owner_address == NULL) {
+ owner_address = ALERTMAIL;
+ skip_parsing = TRUE;
+ }
+#endif
+
if (owner_address == NULL || *owner_address == '\0') {
return;
}
- if ((cp = (char *)strchr(owner_address,'\n')) != NULL)
+ if ((cp = (char *)strchr(owner_address,'\n')) != NULL) {
+#ifdef ALERTMAIL
+ if (skip_parsing)
+ return; /* invalidly defined - ignore - kw */
+#else
*cp = '\0';
+#endif
+ }
+ if (!strncasecomp(owner_address, "lynx-dev@", 9)) {
+ /*
+ * Silently refuse sending bad link messages to lynx-dev.
+ */
+ return;
+ }
StrAllocCopy(address, owner_address);
+#ifdef ALERTMAIL
/*
- * Check for a ?searchpart. - FM
+ * If we are using a fixed address given by ALERTMAIL, it is
+ * supposed to already be in usable form, without URL-isms like
+ * ?-searchpart and URL-escaping. So skip some code. - kw
*/
- if ((cp = strchr(address, '?')) != NULL) {
- StrAllocCopy(searchpart, cp);
- *cp = '\0';
- cp = (searchpart + 1);
- if (*cp != '\0') {
- /*
- * Seek and handle to=address(es) fields.
- * Appends to address. We ignore any other
- * headers in the ?searchpart. - FM
- */
+ if (!skip_parsing)
+#endif
+ {
+ /*
+ * Check for a ?searchpart. - FM
+ */
+ if ((cp = strchr(address, '?')) != NULL) {
+ StrAllocCopy(searchpart, cp);
+ *cp = '\0';
cp = (searchpart + 1);
- while (*cp != '\0') {
- if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
- !strncasecomp(cp, "to=", 3)) {
- cp += 3;
- if ((cp1 = strchr(cp, '&')) != NULL) {
- *cp1 = '\0';
- }
- while (*cp == ',' || isspace((unsigned char)*cp))
- cp++;
- if (*cp) {
- if (*address) {
- StrAllocCat(address, ",");
- }
- StrAllocCat(address, cp);
- }
- if (cp1) {
- *cp1 = '&';
- cp = cp1;
- cp1 = NULL;
- } else {
- break;
- }
- }
- cp++;
+ if (*cp != '\0') {
+ /*
+ * Seek and handle to=address(es) fields.
+ * Appends to address. We ignore any other
+ * headers in the ?searchpart. - FM
+ */
+ extract_field(&address, searchpart, "to=");
}
}
- }
- /*
- * Convert any Explorer semi-colon Internet address
- * separators to commas. - FM
- */
- cp = address;
- while ((cp1 = strchr(cp, '@')) != NULL) {
- cp1++;
- if ((cp0 = strchr(cp1, ';')) != NULL) {
- *cp0 = ',';
- cp1 = cp0 + 1;
- }
- cp = cp1;
+ convert_explorer(address);
+
+ /*
+ * Unescape the address field. - FM
+ */
+ SafeHTUnEscape(address);
}
- /*
- * Unescape the address field. - FM
- */
- SafeHTUnEscape(address);
- if (address[(strlen(address) - 1)] == ',')
- address[(strlen(address) - 1)] = '\0';
- if (*address == '\0') {
+ if (trim_comma(address)) {
FREE(address);
- CTRACE(tfp, "mailmsg: No address in '%s'.\n",
- owner_address);
+ CTRACE((tfp, "mailmsg: No address in '%s'.\n", owner_address));
return;
}
-#ifdef UNIX
- HTSprintf0(&cmd, "%s %s", system_mail, system_mail_flags);
- if ((fd = popen(cmd, "w")) == NULL) {
+#if CAN_PIPE_TO_MAILER
+ if ((fd = LYPipeToMailer()) == 0) {
FREE(address);
- CTRACE(tfp, "mailmsg: '%s' failed.\n",
- cmd);
+ CTRACE((tfp, "mailmsg: '%s' failed.\n", cmd));
return;
}
fprintf(fd, "To: %s\n", address);
fprintf(fd, "Subject: Lynx Error in %s\n", filename);
- if (personal_mail_address != NULL && *personal_mail_address != '\0') {
+ if (!EMPTY(personal_mail_address)) {
fprintf(fd, "Cc: %s\n", personal_mail_address);
}
fprintf(fd, "X-URL: %s\n", filename);
- fprintf(fd, "X-Mailer: Lynx, Version %s\n\n", LYNX_VERSION);
-#endif /* UNIX */
-#if defined(VMS) || defined(DOSPATH)
+ fprintf(fd, "X-Mailer: %s, Version %s\n\n", LYNX_NAME, LYNX_VERSION);
+#else
if ((fd = LYOpenTemp(my_tmpfile, ".txt", "w")) == NULL) {
- CTRACE(tfp, "mailmsg: Could not fopen '%s'.\n",
- my_tmpfile);
+ CTRACE((tfp, "mailmsg: Could not fopen '%s'.\n", my_tmpfile));
FREE(address);
return;
}
+ sprintf(subject, "Lynx Error in %.56s", filename);
+ ccaddr = personal_mail_address;
+#if USE_VMS_MAILER
if (isPMDF) {
+ FILE *hfd;
if ((hfd = LYOpenTemp(hdrfile, ".txt", "w")) == NULL) {
- CTRACE(tfp, "mailmsg: Could not fopen '%s'.\n",
- hdrfile);
+ CTRACE((tfp, "mailmsg: Could not fopen '%s'.\n", hdrfile));
FREE(address);
return;
}
- if (personal_mail_address != NULL && *personal_mail_address != '\0') {
+ if (!EMPTY(personal_mail_address)) {
fprintf(fd, "Cc: %s\n", personal_mail_address);
}
fprintf(fd, "X-URL: %s\n", filename);
- fprintf(fd, "X-Mailer: Lynx, Version %s\n\n", LYNX_VERSION);
+ fprintf(fd, "X-Mailer: %s, Version %s\n\n", LYNX_NAME, LYNX_VERSION);
+ /*
+ * For PMDF, put the subject in the
+ * header file and close it. - FM
+ */
+ fprintf(hfd, "Subject: Lynx Error in %.56s\n\n", filename);
+ LYCloseTempFP(hfd);
}
-#endif /* VMS */
+#endif /* USE_VMS_MAILER */
+#endif /* CAN_PIPE_TO_MAILER */
fprintf(fd, gettext("The link %s :?: %s \n"),
links[cur].lname, links[cur].target);
@@ -741,28 +994,21 @@ PUBLIC void mailmsg ARGS4(
fprintf(fd, "%s\n\n", gettext("Thought you might want to know."));
fprintf(fd, "%s\n", gettext("This message was automatically generated by"));
- fprintf(fd, gettext("Lynx ver. %s"), LYNX_VERSION);
+ fprintf(fd, "%s %s", LYNX_NAME, LYNX_VERSION);
if ((LynxSigFile != NULL) &&
- (fp = fopen(LynxSigFile, "r")) != NULL) {
+ (fp = fopen(LynxSigFile, TXT_R)) != NULL) {
fputs("-- \n", fd);
while (LYSafeGets(&cmd, fp) != NULL)
fputs(cmd, fd);
- fclose(fp);
+ LYCloseInput(fp);
}
-#ifdef UNIX
+#if CAN_PIPE_TO_MAILER
pclose(fd);
-#endif /* UNIX */
-#if defined(VMS) || defined(DOSPATH)
+#else
LYCloseTempFP(fd);
-#ifdef VMS
+#if USE_VMS_MAILER
if (isPMDF) {
/*
- * For PMDF, put the subject in the
- * header file and close it. - FM
- */
- fprintf(hfd, "Subject: Lynx Error in %.56s\n\n", filename);
- LYCloseTempFP(hfd);
- /*
* Now set up the command. - FM
*/
HTSprintf0(&command,
@@ -783,32 +1029,9 @@ PUBLIC void mailmsg ARGS4(
filename,
my_tmpfile);
}
- address_ptr1 = address;
- do {
- if ((cp = strchr(address_ptr1, ',')) != NULL) {
- address_ptr2 = (cp+1);
- *cp = '\0';
- } else
- address_ptr2 = NULL;
-
- /*
- * 4 letters is arbitrarily the smallest possible mail
- * address, at least for lynx. That way extra spaces
- * won't confuse the mailer and give a blank address.
- *
- * ignore addresses so long that they would overflow the
- * temporary buffer (i.e., about 500 chars). - BL
- */
- if (!first) {
- StrAllocCat(command, ",");
- }
- HTSprintf0(&cmd, mail_adrs, address_ptr1);
- StrAllocCat(command, cmd);
- first = FALSE;
- address_ptr1 = address_ptr2;
- } while (address_ptr1 != NULL);
+ vms_append_addrs(&command, address, "");
- LYSystem(command);
+ LYSystem(command); /* VMS */
FREE(command);
FREE(cmd);
LYRemoveTemp(my_tmpfile);
@@ -816,16 +1039,15 @@ PUBLIC void mailmsg ARGS4(
LYRemoveTemp(hdrfile);
}
#else /* DOSPATH */
- StrAllocCopy(command, system_mail);
- StrAllocCat(command, " -t \"");
- StrAllocCat(command, address);
- StrAllocCat(command, "\" -F ");
- StrAllocCat(command, my_tmpfile);
- LYSystem(command);
- FREE(command);
+ LYSendMailFile (
+ address,
+ my_tmpfile,
+ subject,
+ ccaddr,
+ "");
LYRemoveTemp(my_tmpfile);
-#endif
-#endif /* VMS */
+#endif /* USE_VMS_MAILER */
+#endif /* CAN_PIPE_TO_MAILER */
if (traversal) {
FILE *ofp;
@@ -833,13 +1055,13 @@ PUBLIC void mailmsg ARGS4(
if ((ofp = LYAppendToTxtFile(TRAVERSE_ERRORS)) == NULL) {
if ((ofp = LYNewTxtFile(TRAVERSE_ERRORS)) == NULL) {
perror(NOOPEN_TRAV_ERR_FILE);
- exit_immediately(-1);
+ exit_immediately(EXIT_FAILURE);
}
}
fprintf(ofp, "%s\t%s \tin %s\n",
links[cur].lname, links[cur].target, filename);
- fclose(ofp);
+ LYCloseOutput(ofp);
}
FREE(address);
@@ -848,7 +1070,7 @@ PUBLIC void mailmsg ARGS4(
/*
** reply_by_mail() invokes sendmail on Unix or mail on VMS to send
-** a comment from the users to the owner
+** a comment from the users to the owner
*/
PUBLIC void reply_by_mail ARGS4(
char *, mail_address,
@@ -856,64 +1078,58 @@ PUBLIC void reply_by_mail ARGS4(
CONST char *, title,
CONST char *, refid)
{
- char user_input[1000];
+#ifndef NO_ANONYMOUS_EMAIL
+ static char *personal_name = NULL;
+#endif
+ char user_input[LINESIZE];
FILE *fd, *fp;
- char *address = NULL;
+ char *label = NULL;
+ char *from_address = NULL;
+ char *cc_address = NULL;
+ char *to_address = NULL;
+ char *the_subject = NULL;
char *ccaddr = NULL;
char *keywords = NULL;
char *searchpart = NULL;
char *body = NULL;
- char *cp = NULL, *cp0 = NULL, *cp1 = NULL;
- char *temp = NULL;
- int i, len;
+ char *cp = NULL, *cp1 = NULL;
+ int i;
int c = 0; /* user input */
- char my_tmpfile[LY_MAXPATH], cmd[512];
-#ifdef DOSPATH
- char tmpfile2[LY_MAXPATH];
-#endif
-#if defined(DOSPATH) || defined(VMS)
+ char my_tmpfile[LY_MAXPATH];
char *command = NULL;
-#endif
-#ifndef NO_ANONYMOUS_EMAIL
- static char *personal_name = NULL;
-#endif
- char subject[80];
-#ifdef VMS
- char *address_ptr1 = NULL, *address_ptr2 = NULL;
- BOOLEAN first = TRUE;
- BOOLEAN isPMDF = FALSE;
+ char default_subject[MAX_SUBJECT + 10];
+#if USE_VMS_MAILER
+ BOOLEAN isPMDF = LYMailPMDF();
char hdrfile[LY_MAXPATH];
- FILE *hfd;
-
- if (!strncasecomp(system_mail, "PMDF SEND", 9)) {
- isPMDF = TRUE;
- }
+ FILE *hfd = 0;
#else
- char buf[512];
+#if !CAN_PIPE_TO_MAILER
+ char tmpfile2[LY_MAXPATH];
+#endif
+ char buf[4096]; /* 512 */
char *header = NULL;
int n;
-#endif /* VMS */
+#endif /* USE_VMS_MAILER */
- CTRACE(tfp, "reply_by_mail(\"%s\", \"%s\", \"%s\", \"%s\")\n",
- mail_address?mail_address:"<nil>",
- filename?filename:"<nil>",
- title?title:"<nil>",
- refid?refid:"<nil>");
+ CTRACE((tfp, "reply_by_mail(\"%s\", \"%s\", \"%s\", \"%s\")\n",
+ NIL_OK(mail_address),
+ NIL_OK(filename),
+ NIL_OK(title),
+ NIL_OK(refid)));
term_letter = FALSE;
- if (mail_address && *mail_address) {
- StrAllocCopy(address, mail_address);
- } else {
+ if (EMPTY(mail_address)) {
HTAlert(NO_ADDRESS_IN_MAILTO_URL);
return;
}
+ StrAllocCopy(to_address, mail_address);
if ((fd = LYOpenTemp(my_tmpfile, ".txt", "w")) == NULL) {
HTAlert(MAILTO_URL_TEMPOPEN_FAILED);
return;
}
-#ifdef VMS
+#if USE_VMS_MAILER
if (isPMDF) {
if ((hfd = LYOpenTemp(hdrfile, ".txt", "w")) == NULL) {
HTAlert(MAILTO_URL_TEMPOPEN_FAILED);
@@ -921,12 +1137,12 @@ PUBLIC void reply_by_mail ARGS4(
}
}
#endif /* VMS */
- subject[0] = '\0';
+ default_subject[0] = '\0';
/*
* Check for a ?searchpart. - FM
*/
- if ((cp = strchr(address, '?')) != NULL) {
+ if ((cp = strchr(to_address, '?')) != NULL) {
StrAllocCopy(searchpart, cp);
*cp = '\0';
cp = (searchpart + 1);
@@ -934,125 +1150,26 @@ PUBLIC void reply_by_mail ARGS4(
/*
* Seek and handle a subject=foo. - FM
*/
- while (*cp != '\0') {
- if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
- !strncasecomp(cp, "subject=", 8))
- break;
- cp++;
- }
- if (*cp) {
- cp += 8;
- if ((cp1 = strchr(cp, '&')) != NULL) {
- *cp1 = '\0';
- }
- if (*cp) {
- strncpy(subject, cp, 70);
- subject[70] = '\0';
- SafeHTUnEscape(subject);
- }
- if (cp1) {
- *cp1 = '&';
- cp1 = NULL;
- }
- }
+ extract_subject(default_subject, searchpart);
/*
* Seek and handle to=address(es) fields.
* Appends to address. - FM
*/
- cp = (searchpart + 1);
- while (*cp != '\0') {
- if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
- !strncasecomp(cp, "to=", 3)) {
- cp += 3;
- if ((cp1 = strchr(cp, '&')) != NULL) {
- *cp1 = '\0';
- }
- while (*cp == ',' || isspace((unsigned char)*cp))
- cp++;
- if (*cp) {
- if (*address) {
- StrAllocCat(address, ",");
- }
- StrAllocCat(address, cp);
- }
- if (cp1) {
- *cp1 = '&';
- cp = cp1;
- cp1 = NULL;
- } else {
- break;
- }
- }
- cp++;
- }
+ extract_field(&to_address, searchpart, "to=");
/*
* Seek and handle cc=address(es) fields. Excludes
* Bcc=address(es) as unsafe. We may append our own
* cc (below) as a list for the actual mailing. - FM
*/
- cp = (searchpart + 1);
- while (*cp != '\0') {
- if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
- !strncasecomp(cp, "cc=", 3)) {
- cp += 3;
- if ((cp1 = strchr(cp, '&')) != NULL) {
- *cp1 = '\0';
- }
- while (*cp == ',' || isspace((unsigned char)*cp))
- cp++;
- if (*cp) {
- if (ccaddr == NULL) {
- StrAllocCopy(ccaddr, cp);
- } else {
- StrAllocCat(ccaddr, ",");
- StrAllocCat(ccaddr, cp);
- }
- }
- if (cp1) {
- *cp1 = '&';
- cp = cp1;
- cp1 = NULL;
- } else {
- break;
- }
- }
- cp++;
- }
+ extract_field(&ccaddr, searchpart, "cc=");
/*
* Seek and handle keywords=term(s) fields. - FM
*/
- cp = (searchpart + 1);
- while (*cp != '\0') {
- if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
- !strncasecomp(cp, "keywords=", 9)) {
- cp += 9;
- if ((cp1 = strchr(cp, '&')) != NULL) {
- *cp1 = '\0';
- }
- while (*cp == ',' || isspace((unsigned char)*cp))
- cp++;
- if (*cp) {
- if (keywords == NULL) {
- StrAllocCopy(keywords, cp);
- } else {
- StrAllocCat(keywords, cp);
- StrAllocCat(keywords, ", ");
- }
- StrAllocCat(keywords, cp);
- }
- if (cp1) {
- *cp1 = '&';
- cp = cp1;
- cp1 = NULL;
- } else {
- break;
- }
- }
- cp++;
- }
+ extract_field(&keywords, searchpart, "keywords=");
+
if (keywords != NULL) {
if (*keywords != '\0') {
SafeHTUnEscape(keywords);
@@ -1064,113 +1181,18 @@ PUBLIC void reply_by_mail ARGS4(
/*
* Seek and handle body=foo fields. - FM
*/
- cp = (searchpart + 1);
- while (*cp != '\0') {
- if ((*(cp - 1) == '?' || *(cp - 1) == '&') &&
- !strncasecomp(cp, "body=", 5)) {
- cp += 5;
- if ((cp1 = strchr(cp, '&')) != NULL) {
- *cp1 = '\0';
- }
- if (*cp) {
- /*
- * Break up the value into lines with
- * a maximum length of 78. - FM
- */
- StrAllocCopy(temp, cp);
- HTUnEscape(temp);
- cp0 = temp;
- while((cp = strchr(cp0, '\n')) != NULL) {
- *cp = '\0';
- if (cp > cp0) {
- if (*(cp - 1) == '\r') {
- *(cp - 1) = '\0';
- }
- }
- i = 0;
- len = strlen(cp0);
- while (len > 78) {
- strncpy(cmd, (char *)&cp0[i], 78);
- cmd[78] = '\0';
- strcat(cmd, "\n");
- StrAllocCat(body, cmd);
- i += 78;
- len = strlen((char *)&cp0[i]);
- }
- sprintf(cmd, "%s\n", (char *)&cp0[i]);
- StrAllocCat(body, cmd);
- cp0 = (cp + 1);
- }
- i = 0;
- len = strlen(cp0);
- while (len > 78) {
- strncpy(cmd, (char *)&cp0[i], 78);
- cmd[78] = '\0';
- strcat(cmd, "\n");
- StrAllocCat(body, cmd);
- i += 78;
- len = strlen((char *)&cp0[i]);
- }
- if (len) {
- sprintf(cmd, "%s\n", (char *)&cp0[i]);
- StrAllocCat(body, cmd);
- }
- FREE(temp);
- }
- if (cp1) {
- *cp1 = '&';
- cp = cp1;
- cp1 = NULL;
- } else {
- break;
- }
- }
- cp++;
- }
+ extract_body(&body, searchpart);
FREE(searchpart);
}
}
- /*
- * Convert any Explorer semi-colon Internet address
- * separators to commas. - FM
- */
- cp = address;
- while ((cp1 = strchr(cp, '@')) != NULL) {
- cp1++;
- if ((cp0 = strchr(cp1, ';')) != NULL) {
- *cp0 = ',';
- cp1 = cp0 + 1;
- }
- cp = cp1;
- }
- if (address[(strlen(address) - 1)] == ',')
- address[(strlen(address) - 1)] = '\0';
- if (*address == '\0') {
- FREE(address);
- FREE(ccaddr);
- FREE(keywords);
- FREE(body);
- LYCloseTempFP(fd); /* Close the tmpfile. */
- LYRemoveTemp(my_tmpfile); /* Delete the tmpfile. */
+ if (convert_explorer(to_address)) {
HTAlert(NO_ADDRESS_IN_MAILTO_URL);
- return;
+ goto cancelled;
}
if (ccaddr != NULL) {
- cp = ccaddr;
- while ((cp1 = strchr(cp, '@')) != NULL) {
- cp1++;
- if ((cp0 = strchr(cp1, ';')) != NULL) {
- *cp0 = ',';
- cp1 = cp0 + 1;
- }
- cp = cp1;
- }
- if (ccaddr[(strlen(ccaddr) - 1)] == ',') {
- ccaddr[(strlen(ccaddr) - 1)] = '\0';
- }
- if (*ccaddr == '\0') {
+ if (convert_explorer(ccaddr)) {
FREE(ccaddr);
}
}
@@ -1178,7 +1200,7 @@ PUBLIC void reply_by_mail ARGS4(
/*
* Unescape the address and ccaddr fields. - FM
*/
- SafeHTUnEscape(address);
+ SafeHTUnEscape(to_address);
if (ccaddr != NULL) {
SafeHTUnEscape(ccaddr);
}
@@ -1186,9 +1208,9 @@ PUBLIC void reply_by_mail ARGS4(
/*
* Set the default subject. - FM
*/
- if (subject[0] == '\0' && title && *title) {
- strncpy(subject, title, 70);
- subject[70] = '\0';
+ if (EMPTY(default_subject) && !EMPTY(title)) {
+ strncpy(default_subject, title, MAX_SUBJECT);
+ default_subject[MAX_SUBJECT] = '\0';
}
/*
@@ -1197,8 +1219,7 @@ PUBLIC void reply_by_mail ARGS4(
*/
signal(SIGINT, terminate_letter);
-
-#ifdef VMS
+#if USE_VMS_MAILER
if (isPMDF || !body) {
/*
* Put the X-URL and X-Mailer lines in the hdrfile
@@ -1206,24 +1227,22 @@ PUBLIC void reply_by_mail ARGS4(
*/
fprintf((isPMDF ? hfd : fd),
"X-URL: %s%s\n",
- (filename && *filename) ? filename : "mailto:",
- (filename && *filename) ? "" : address);
+ EMPTY(filename) ? "mailto:" : filename,
+ EMPTY(filename) ? to_address : "");
fprintf((isPMDF ? hfd : fd),
- "X-Mailer: Lynx, Version %s\n",LYNX_VERSION);
-#ifdef NO_ANONYMOUS_MAIL
+ "X-Mailer: %s, Version %s\n", LYNX_NAME, LYNX_VERSION);
+#ifdef NO_ANONYMOUS_EMAIL
if (!isPMDF) {
fprintf(fd, "\n");
}
-#endif /* NO_ANONYMOUS_MAIL */
+#endif /* NO_ANONYMOUS_EMAIL */
}
-#else /* Unix: */
+#else /* Unix/DOS/Windows */
/*
* Put the To: line in the header.
*/
#ifndef DOSPATH
- StrAllocCopy(header, "To: ");
- StrAllocCat(header, address);
- StrAllocCat(header, "\n");
+ HTSprintf(&header, "To: %s\n", to_address);
#endif
/*
@@ -1244,298 +1263,175 @@ PUBLIC void reply_by_mail ARGS4(
if (!LYHaveCJKCharacterSet &&
strncasecomp(LYCharSet_UC[current_char_set].MIMEname, "x-", 2)
!= 0) {
- sprintf(buf,"Content-Type: text/plain; charset=%s\n",
+ HTSprintf(&header, "Content-Type: text/plain; charset=%s\n",
LYCharSet_UC[current_char_set].MIMEname);
- StrAllocCat(header, buf);
}
StrAllocCat(header, "Content-Transfer-Encoding: 8bit\n");
}
/*
* Put the X-URL and X-Mailer lines in the header.
*/
- StrAllocCat(header, "X-URL: ");
- if (filename && *filename) {
- StrAllocCat(header, filename);
- }
- else {
- StrAllocCat(header, "mailto:");
- StrAllocCat(header, address);
+ if (!EMPTY(filename)) {
+ HTSprintf(&header, "X-URL: %s\n", filename);
+ } else {
+ HTSprintf(&header, "X-URL: mailto:%s\n", to_address);
}
- StrAllocCat(header, "\n");
- sprintf(buf, "X-Mailer: Lynx, Version %s\n", LYNX_VERSION);
- StrAllocCat(header, buf);
+ HTSprintf(&header, "X-Mailer: %s, Version %s\n", LYNX_NAME, LYNX_VERSION);
- if (refid && *refid) {
- StrAllocCat(header, "In-Reply-To: <");
- StrAllocCat(header, refid);
- StrAllocCat(header, ">\n");
+ if (!EMPTY(refid)) {
+ HTSprintf(&header, "In-Reply-To: <%s>\n", refid);
}
#endif /* VMS */
/*
* Clear the screen and inform the user.
*/
- clear();
- move(2,0);
- scrollok(stdscr, TRUE); /* Enable scrolling. */
+ LYclear();
+ LYmove(2,0);
+ scrollok(LYwin, TRUE); /* Enable scrolling. */
if (body)
- addstr(SENDING_MESSAGE_WITH_BODY_TO);
+ LYaddstr(SENDING_MESSAGE_WITH_BODY_TO);
else
- addstr(SENDING_COMMENT_TO);
- cp = address;
- while ((cp1 = strchr(cp, ',')) != NULL) {
- *cp1 = '\0';
- while (*cp == ' ')
- cp++;
- if (*cp) {
- addstr(cp);
- addstr(",\n ");
- }
- *cp1 = ',';
- cp = (cp1 + 1);
- }
- if (*cp) {
- addstr(cp);
- }
-#ifdef VMS
- if ((isPMDF == TRUE) &&
- (cp = ccaddr) != NULL)
-#else
- if ((cp = ccaddr) != NULL)
+ LYaddstr(SENDING_COMMENT_TO);
+ show_addresses(to_address);
+ if (
+#if USE_VMS_MAILER
+ (isPMDF == TRUE) &&
#endif /* VMS */
+ (cp = ccaddr) != NULL)
{
if (strchr(cp, ',') != NULL) {
- addstr(WITH_COPIES_TO);
+ LYaddstr(WITH_COPIES_TO);
} else {
- addstr(WITH_COPY_TO);
- }
- while ((cp1 = strchr(cp, ',')) != NULL) {
- *cp1 = '\0';
- while (*cp == ' ')
- cp++;
- if (*cp) {
- addstr(cp);
- addstr(",\n ");
- }
- *cp1 = ',';
- cp = (cp1 + 1);
- }
- if (*cp) {
- addstr(cp);
+ LYaddstr(WITH_COPY_TO);
}
+ show_addresses(ccaddr);
}
- addstr(CTRL_G_TO_CANCEL_SEND);
+ LYaddstr(CTRL_G_TO_CANCEL_SEND);
-#ifdef VMS
+#if USE_VMS_MAILER
if (isPMDF || !body) {
-#endif /* VMS */
+#endif /* USE_VMS_MAILER */
#ifndef NO_ANONYMOUS_EMAIL
/*
* Get the user's personal name.
*/
- addstr(ENTER_NAME_OR_BLANK);
- if (personal_name == NULL)
- *user_input = '\0';
- else {
- addstr(CTRL_U_TO_ERASE);
- strcpy(user_input, personal_name);
- }
-#ifdef VMS
+ LYaddstr(ENTER_NAME_OR_BLANK);
+#if USE_VMS_MAILER
if (isPMDF) {
- addstr(gettext("Personal_name: "));
+ label = "Personal_name: ";
} else {
- addstr(gettext("X_Personal_name: "));
+ label = "X-Personal_name: ";
}
#else
- addstr(gettext("Personal Name: "));
-#endif /* VMS */
- if (LYgetstr(user_input, VISIBLE, sizeof(user_input), NORECALL) < 0 ||
- term_letter) {
- addstr("\n");
- HTInfoMsg(COMMENT_REQUEST_CANCELLED);
- LYCloseTempFP(fd); /* Close the tmpfile. */
- scrollok(stdscr,FALSE); /* Stop scrolling. */
- goto cleanup;
- }
- addstr("\n");
- remove_tildes(user_input);
- StrAllocCopy(personal_name, user_input);
- term_letter = FALSE;
- if (*user_input) {
-#ifdef VMS
- fprintf((isPMDF ? hfd : fd),
- "X-Personal_name: %s\n",user_input);
+ label = "X-Personal_Name: ";
+#endif /* USE_VMS_MAILER */
+ if (!header_prompt(label, &personal_name, LINESIZE)) {
+ goto cancelled;
+ }
+ if (*personal_name) {
+#if USE_VMS_MAILER
+ fprintf((isPMDF ? hfd : fd), "%s: %s\n", label, personal_name);
#else
- StrAllocCat(header, "X-Personal_name: ");
- StrAllocCat(header, user_input);
- StrAllocCat(header, "\n");
+ HTSprintf(&header, "%s: %s\n", label, personal_name);
#endif /* VMS */
}
/*
* Get the user's return address.
*/
- addstr(ENTER_MAIL_ADDRESS_OR_OTHER);
- addstr(MEANS_TO_CONTACT_FOR_RESPONSE);
- if (personal_mail_address)
- addstr(CTRL_U_TO_ERASE);
-#ifdef VMS
+ LYaddstr(ENTER_MAIL_ADDRESS_OR_OTHER);
+ LYaddstr(MEANS_TO_CONTACT_FOR_RESPONSE);
+#if USE_VMS_MAILER
if (isPMDF) {
- addstr("From: ");
+ label = "From";
} else {
- addstr("X-From: ");
+ label = "X-From";
}
#else
- addstr("From: ");
+ label = "From";
#endif /* VMS */
/* Add the personal mail address if there is one. */
- sprintf(user_input, "%s", (personal_mail_address ?
- personal_mail_address : ""));
- if (LYgetstr(user_input, VISIBLE, sizeof(user_input), NORECALL) < 0 ||
- term_letter) {
- addstr("\n");
- HTInfoMsg(COMMENT_REQUEST_CANCELLED);
- LYCloseTempFP(fd); /* Close the tmpfile. */
- scrollok(stdscr,FALSE); /* Stop scrolling. */
- goto cleanup;
+ if (personal_mail_address)
+ StrAllocCopy(from_address, personal_mail_address);
+ if (!header_prompt(label, &from_address, LINESIZE)) {
+ goto cancelled;
}
- addstr("\n");
- remove_tildes(user_input);
-#ifdef VMS
- if (*user_input) {
- if (isPMDF) {
- fprintf(hfd, "From: %s\n", user_input);
- } else {
- fprintf(fd, "X-From: %s\n\n", user_input);
- }
- } else if (!isPMDF) {
+#if USE_VMS_MAILER
+ if (*from_address) {
+ fprintf(isPMDF ? hfd : fd, "%s: %s\n", label, from_address);
+ }
+ if (!isPMDF) {
fprintf(fd, "\n");
}
#else
- StrAllocCat(header, "From: ");
- StrAllocCat(header, user_input);
- StrAllocCat(header, "\n");
-#endif /* VMS */
+ HTSprintf(&header, "%s: %s\n", label, from_address);
+#endif /* USE_VMS_MAILER */
#endif /* !NO_ANONYMOUS_EMAIL */
-#ifdef VMS
+#if USE_VMS_MAILER
}
-#endif /* VMS */
+#endif /* USE_VMS_MAILER */
/*
* Get the subject line.
*/
- addstr(ENTER_SUBJECT_LINE);
- addstr(CTRL_U_TO_ERASE);
- addstr(SUBJECT_PROMPT);
- /* Add the default subject. */
- sprintf(user_input, "%.70s%.63s",
- (subject[0] != '\0') ?
- subject :
- ((filename && *filename) ?
- filename : "mailto:"),
- (subject[0] != '\0') ?
- "" :
- ((filename && *filename) ?
- "" : address));
- if (LYgetstr(user_input, VISIBLE, 71, NORECALL) < 0 ||
- term_letter) {
- addstr("\n");
- HTInfoMsg(COMMENT_REQUEST_CANCELLED);
- LYCloseTempFP(fd); /* Close the tmpfile. */
- scrollok(stdscr,FALSE); /* Stop scrolling. */
- goto cleanup;
+ LYaddstr(ENTER_SUBJECT_LINE);
+ label = "Subject";
+ if (*default_subject) {
+ StrAllocCopy(the_subject, default_subject);
+ } else if (!EMPTY(filename)) {
+ HTSprintf(&the_subject, "%s", filename);
+ } else {
+ HTSprintf(&the_subject, "mailto:%s", to_address);
+ }
+ if (!header_prompt(label, &the_subject, MAX_SUBJECT)) {
+ goto cancelled;
}
- addstr("\n");
- remove_tildes(user_input);
-#ifdef VMS
- sprintf(subject, "%.70s", user_input);
-#else
- StrAllocCat(header, "Subject: ");
- StrAllocCat(header, user_input);
- StrAllocCat(header, "\n");
-#endif /* VMS */
/*
* Offer a CC line, if permitted. - FM
*/
- user_input[0] = '\0';
if (!LYNoCc) {
- addstr(ENTER_ADDRESS_FOR_CC);
+ LYaddstr(ENTER_ADDRESS_FOR_CC);
+ LYaddstr(BLANK_FOR_NO_COPY);
if (personal_mail_address)
- addstr(CTRL_U_TO_ERASE);
- addstr(BLANK_FOR_NO_COPY);
- addstr("Cc: ");
- /*
- * Add the mail address if there is one.
- */
- sprintf(user_input, "%s", (personal_mail_address ?
- personal_mail_address : ""));
- if (LYgetstr(user_input, VISIBLE, sizeof(user_input), NORECALL) < 0 ||
- term_letter) {
- addstr("\n");
- HTInfoMsg(COMMENT_REQUEST_CANCELLED);
- LYCloseTempFP(fd); /* Close the tmpfile. */
- scrollok(stdscr, FALSE); /* Stop scrolling. */
- goto cleanup;
+ StrAllocCopy(cc_address, personal_mail_address);
+ if (!header_prompt("Cc", &cc_address, LINESIZE)) {
+ goto cancelled;
}
- addstr("\n");
+ comma_append(&ccaddr, cc_address);
}
- remove_tildes(user_input);
- if (*user_input) {
- cp = user_input;
- while (*cp == ',' || isspace((unsigned char)*cp))
- cp++;
- if (*cp) {
- if (ccaddr == NULL) {
- StrAllocCopy(ccaddr, cp);
- } else {
- StrAllocCat(ccaddr, ",");
- StrAllocCat(ccaddr, cp);
- }
- }
- }
-
-#ifdef DOSPATH
- if (*address) {
- StrAllocCat(header, "To: ");
- StrAllocCat(header, address);
- StrAllocCat(header, "\n");
+#if !USE_VMS_MAILER
+ HTSprintf(&header, "%s: %s\n", label, the_subject);
+#if !CAN_PIPE_TO_MAILER
+ if (*to_address) {
+ HTSprintf(&header, "To: %s\n", to_address);
}
#endif
-#ifndef VMS
/*
** Add the Cc: header. - FM
*/
- if (ccaddr != NULL && *ccaddr != '\0') {
- StrAllocCat(header, "Cc: ");
- StrAllocCat(header, ccaddr);
- StrAllocCat(header, "\n");
+ if (!EMPTY(ccaddr)) {
+ HTSprintf(&header, "Cc: %s\n", ccaddr);
}
/*
** Add the Keywords: header. - FM
*/
- if (keywords != NULL && *keywords != '\0') {
- StrAllocCat(header, "Keywords: ");
- StrAllocCat(header, keywords);
- StrAllocCat(header, "\n");
+ if (!EMPTY(keywords)) {
+ HTSprintf(&header, "Keywords: %s\n", keywords);
}
/*
* Terminate the header.
*/
- sprintf(buf, "\n");
- StrAllocCat(header, buf);
- CTRACE(tfp,"**header==\n%s",header);
+ StrAllocCat(header, "\n");
+ CTRACE((tfp,"**header==\n%s",header));
#endif /* !VMS */
- if (!no_editor && editor && *editor != '\0') {
- /*
- * Use an external editor for the message.
- */
- char *editor_arg = "";
+ if (!no_editor && !EMPTY(editor)) {
if (body) {
cp1 = body;
@@ -1548,120 +1444,93 @@ PUBLIC void reply_by_mail ARGS4(
/*
* Ask if the user wants to include the original message.
*/
- BOOLEAN is_preparsed = (LYPreparsedSource &&
+ BOOLEAN is_preparsed = (BOOL) (LYPreparsedSource &&
HTisDocumentSource());
if (HTConfirm(is_preparsed
? INC_PREPARSED_MSG_PROMPT
: INC_ORIG_MSG_PROMPT) == YES) {
- /*
- * The 1 will add the reply "> " in front of every line.
- */
- if (is_preparsed)
- print_wwwfile_to_fd(fd, 0);
- else
- print_wwwfile_to_fd(fd, 1);
+ print_wwwfile_to_fd(fd, (BOOL) !is_preparsed);
}
}
LYCloseTempFP(fd); /* Close the tmpfile. */
- scrollok(stdscr,FALSE); /* Stop scrolling. */
+ scrollok(LYwin,FALSE); /* Stop scrolling. */
- if (term_letter || c == 7 || c == 3)
+ if (term_letter || LYCharIsINTERRUPT(c))
goto cleanup;
/*
* Spawn the users editor on the mail file
*/
- if (strstr(editor, "pico")) {
- editor_arg = " -t"; /* No prompt for filename to use */
- }
- sprintf(user_input, "%s%s %s", editor, editor_arg, my_tmpfile);
- _statusline(SPAWNING_EDITOR_FOR_MAIL);
- stop_curses();
- if (LYSystem(user_input)) {
- start_curses();
- HTAlert(ERROR_SPAWNING_EDITOR);
- } else {
- start_curses();
- }
+ edit_temporary_file(my_tmpfile, "", SPAWNING_EDITOR_FOR_MAIL);
} else if (body) {
/*
* Let user review the body. - FM
*/
- clear();
- move(0,0);
- addstr(REVIEW_MESSAGE_BODY);
- refresh();
+ LYclear();
+ LYmove(0,0);
+ LYaddstr(REVIEW_MESSAGE_BODY);
+ LYrefresh();
cp1 = body;
i = (LYlines - 5);
while((cp = strchr(cp1, '\n')) != NULL) {
if (i <= 0) {
- addstr(RETURN_TO_CONTINUE);
- refresh();
+ LYaddstr(RETURN_TO_CONTINUE);
+ LYrefresh();
c = LYgetch();
- addstr("\n");
- if (term_letter || c == 7 || c == 3) {
- addstr(CANCELLED);
- sleep(InfoSecs);
- LYCloseTempFP(fd); /* Close the tmpfile. */
- scrollok(stdscr, FALSE); /* Stop scrolling. */
- goto cleanup;
+ LYaddstr("\n");
+ if (term_letter || LYCharIsINTERRUPT(c)) {
+ goto cancelled;
}
i = (LYlines - 2);
}
*cp++ = '\0';
fprintf(fd, "%s\n", cp1);
- addstr(cp1);
- addstr("\n");
+ LYaddstr(cp1);
+ LYaddstr("\n");
cp1 = cp;
i--;
}
while (i >= 0) {
- addstr("\n");
+ LYaddstr("\n");
i--;
}
- refresh();
+ LYrefresh();
LYCloseTempFP(fd); /* Close the tmpfile. */
- scrollok(stdscr,FALSE); /* Stop scrolling. */
+ scrollok(LYwin,FALSE); /* Stop scrolling. */
} else {
/*
* Use the internal line editor for the message.
*/
- addstr(ENTER_MESSAGE_BELOW);
- addstr(ENTER_PERIOD_WHEN_DONE_A);
- addstr(ENTER_PERIOD_WHEN_DONE_B);
- addstr("\n\n");
- refresh();
+ LYaddstr(ENTER_MESSAGE_BELOW);
+ LYaddstr(ENTER_PERIOD_WHEN_DONE_A);
+ LYaddstr(ENTER_PERIOD_WHEN_DONE_B);
+ LYaddstr("\n\n");
+ LYrefresh();
*user_input = '\0';
if (LYgetstr(user_input, VISIBLE, sizeof(user_input), NORECALL) < 0 ||
term_letter || STREQ(user_input, ".")) {
- HTInfoMsg(COMMENT_REQUEST_CANCELLED);
- LYCloseTempFP(fd); /* Close the tmpfile. */
- scrollok(stdscr,FALSE); /* Stop scrolling. */
- goto cleanup;
+ goto cancelled;
}
while (!STREQ(user_input, ".") && !term_letter) {
- addstr("\n");
+ LYaddstr("\n");
remove_tildes(user_input);
fprintf(fd, "%s\n", user_input);
*user_input = '\0';
if (LYgetstr(user_input, VISIBLE,
sizeof(user_input), NORECALL) < 0) {
- HTInfoMsg(COMMENT_REQUEST_CANCELLED);
- LYCloseTempFP(fd); /* Close the tmpfile. */
- scrollok(stdscr,FALSE); /* Stop scrolling. */
- goto cleanup;
+ goto cancelled;
}
}
fprintf(fd, "\n"); /* Terminate the message. */
LYCloseTempFP(fd); /* Close the tmpfile. */
- scrollok(stdscr,FALSE); /* Stop scrolling. */
+ scrollok(LYwin,FALSE); /* Stop scrolling. */
}
-#ifndef VMS
+#if !USE_VMS_MAILER
/*
* Ignore CTRL-C on this last question.
*/
@@ -1671,11 +1540,11 @@ PUBLIC void reply_by_mail ARGS4(
c = HTConfirm (body ? SEND_MESSAGE_PROMPT : SEND_COMMENT_PROMPT);
LYStatusLine = -1;
if (c != YES) {
- clear(); /* clear the screen */
+ LYclear(); /* clear the screen */
goto cleanup;
}
if ((body == NULL && LynxSigFile != NULL) &&
- (fp = fopen(LynxSigFile, "r")) != NULL) {
+ (fp = fopen(LynxSigFile, TXT_R)) != NULL) {
LYStatusLine = (LYlines - 1);
if (term_letter) {
_user_message(APPEND_SIG_FILE, LynxSigFile);
@@ -1688,23 +1557,24 @@ PUBLIC void reply_by_mail ARGS4(
}
LYStatusLine = -1;
if (c == YES) {
- if ((fd = fopen(my_tmpfile, "a")) != NULL) {
+ if ((fd = fopen(my_tmpfile, TXT_A)) != NULL) {
char *buffer = NULL;
fputs("-- \n", fd);
while (LYSafeGets(&buffer, fp) != NULL) {
fputs(buffer, fd);
}
- fclose(fd);
+ LYCloseOutput(fd);
+ FREE(buffer);
}
}
- fclose(fp);
+ LYCloseInput(fp);
}
- clear(); /* Clear the screen. */
+ LYclear(); /* Clear the screen. */
/*
* Send the message.
*/
-#ifdef VMS
+#if USE_VMS_MAILER
/*
* Set the mail command. - FM
*/
@@ -1713,16 +1583,15 @@ PUBLIC void reply_by_mail ARGS4(
* For PMDF, put any keywords and the subject
* in the header file and close it. - FM
*/
- if (keywords != NULL && *keywords != '\0') {
+ if (!EMPTY(keywords)) {
fprintf(hfd, "Keywords: %s\n", keywords);
}
- fprintf(hfd, "Subject: %s\n\n", subject);
+ fprintf(hfd, "Subject: %s\n\n", the_subject);
LYCloseTempFP(hfd);
/*
* Now set up the command. - FM
*/
- sprintf(cmd,
- "%s %s %s,%s ",
+ HTSprintf0(&command, "%s %s %s,%s ",
system_mail,
system_mail_flags,
hdrfile,
@@ -1733,191 +1602,108 @@ PUBLIC void reply_by_mail ARGS4(
* command, and ignore any keywords to minimize risk
* of them making the line too long or having problem
* characters. - FM
- *
- * Possibly still a problem if user supplies long subject. - BL
*/
- sprintf(cmd,
- "%s %s%s/subject=\"%s\" %s ",
+ HTSprintf0(&command, "%s %s%s/subject=\"%s\" %s ",
system_mail,
system_mail_flags,
(strncasecomp(system_mail, "MAIL", 4) ? "" : "/noself"),
- subject,
+ the_subject,
my_tmpfile);
}
- StrAllocCopy(command, cmd);
- /*
- * Now add all the people in the address field. - FM
- */
- address_ptr1 = address;
- do {
- if ((cp = strchr(address_ptr1, ',')) != NULL) {
- address_ptr2 = (cp+1);
- *cp = '\0';
- } else {
- address_ptr2 = NULL;
- }
-
- /*
- * 4 letters is arbitrarily the smallest possible mail
- * address, at least for lynx. That way extra spaces
- * won't confuse the mailer and give a blank address.
- *
- * ignore addresses so long that they would overflow the
- * temporary buffer (i.e., about 500 chars). - BL
- */
- if (strlen(address_ptr1) > 3 &&
- strlen(address_ptr1) + strlen(mail_adrs) < sizeof(cmd)) {
- if (!first) {
- StrAllocCat(command, ",");
- }
- sprintf(cmd, mail_adrs, address_ptr1);
- StrAllocCat(command, cmd);
- first = FALSE;
- }
- address_ptr1 = address_ptr2;
- } while (address_ptr1 != NULL);
-
- /*
- * Now add all the people in the CC field. - FM
- */
- if (ccaddr != NULL && *ccaddr != '\0') {
- address_ptr1 = ccaddr;
- do {
- if ((cp = strchr(address_ptr1, ',')) != NULL) {
- address_ptr2 = (cp+1);
- *cp = '\0';
- } else {
- address_ptr2 = NULL;
- }
-
- /*
- * 4 letters is arbitrarily the smallest possible mail
- * address, at least for lynx. That way extra spaces
- * won't confuse the mailer and give a blank address.
- *
- * ignore addresses so long that they would overflow the
- * temporary buffer (i.e., about 500 chars). - BL
- */
- if (strlen(address_ptr1) > 3 &&
- strlen(address_ptr1) + strlen(mail_adrs) < sizeof(cmd)) {
- StrAllocCat(command, ",");
- sprintf(cmd, mail_adrs, address_ptr1);
- if (isPMDF) {
- strcat(cmd, "/CC");
- }
- StrAllocCat(command, cmd);
- }
- address_ptr1 = address_ptr2;
- } while (address_ptr1 != NULL);
+ vms_append_addrs(&command, to_address, "");
+ if (!EMPTY(ccaddr)) {
+ vms_append_addrs(&command, ccaddr, "/CC");
}
stop_curses();
printf("%s\n\n$ %s\n\n%s", SENDING_COMMENT, command, PLEASE_WAIT);
- LYSystem(command);
+ LYSystem(command); /* SENDING COMMENT (VMS) */
FREE(command);
- sleep(AlertSecs);
+ LYSleepAlert();
start_curses();
- goto cleandown;
-#else /* Unix: */
+#else /* Unix/DOS/Windows */
/*
* Send the tmpfile into sendmail.
*/
_statusline(SENDING_YOUR_MSG);
- sprintf(cmd, "%s %s", system_mail, system_mail_flags);
-#ifdef DOSPATH
+#if CAN_PIPE_TO_MAILER
+ signal(SIGINT, SIG_IGN);
+ if ((fp = LYPipeToMailer()) == 0) {
+ HTInfoMsg(CANCELLED);
+ }
+ FREE(command);
+#else
if ((fp = LYOpenTemp(tmpfile2, ".txt", "w")) == NULL) {
HTAlert(MAILTO_URL_TEMPOPEN_FAILED);
- return;
}
+#endif /* CAN_PIPE_TO_MAILER */
+ if (fp != 0) {
+ fd = fopen(my_tmpfile, TXT_R);
+ if (fd == NULL) {
+ HTInfoMsg(CANCELLED);
+#if CAN_PIPE_TO_MAILER
+ pclose(fp);
#else
- signal(SIGINT, SIG_IGN);
- fp = popen(cmd, "w");
- if (fp == NULL) {
- HTInfoMsg(COMMENT_REQUEST_CANCELLED);
- goto cleanup;
- }
-#endif /* DOSPATH */
- fd = fopen(my_tmpfile, "r");
- if (fd == NULL) {
- HTInfoMsg(COMMENT_REQUEST_CANCELLED);
- pclose(fp);
- goto cleanup;
- }
- fputs(header, fp);
- while ((n = fread(buf, 1, sizeof(buf), fd)) != 0)
- fwrite(buf, 1, n, fp);
-#ifdef DOSPATH
- StrAllocCopy(command, system_mail);
- StrAllocCat(command, " -t \"");
- StrAllocCat(command, address);
- StrAllocCat(command, "\" -F ");
- StrAllocCat(command, tmpfile2);
- LYCloseTempFP(fp); /* Close the tmpfile. */
- stop_curses();
- printf("%s\n\n$ %s\n\n%s", SENDING_COMMENT, command, PLEASE_WAIT);
- LYSystem(command);
- FREE(command);
- sleep(MessageSecs);
- start_curses();
- LYRemoveTemp(tmpfile2); /* Delete the tmpfile. */
+ LYCloseTempFP(fp);
+#endif /* CAN_PIPE_TO_MAILER */
+ } else {
+#if USE_BLAT_MAILER
+ if (!mail_is_blat)
+ fputs(header, fp);
#else
- pclose(fp);
+ fputs(header, fp);
#endif
- LYCloseTempFP(fd); /* Close the tmpfile. */
-
- CTRACE(tfp, "%s\n", cmd);
-#endif /* VMS */
+ while ((n = fread(buf, 1, sizeof(buf), fd)) != 0) {
+ fwrite(buf, 1, n, fp);
+ }
+#if CAN_PIPE_TO_MAILER
+ pclose(fp);
+#else
+ LYCloseTempFP(fp); /* Close the tmpfile. */
+ LYSendMailFile (
+ to_address,
+ tmpfile2,
+ the_subject,
+ ccaddr,
+ SENDING_COMMENT);
+ LYRemoveTemp(tmpfile2); /* Delete the tmpfile. */
+#endif /* CAN_PIPE_TO_MAILER */
+ LYCloseInput(fd); /* Close the tmpfile. */
+ }
+ }
+#endif /* USE_VMS_MAILER */
+ goto cleanup;
/*
* Come here to cleanup and exit.
*/
+cancelled:
+ HTInfoMsg(CANCELLED);
+ LYCloseTempFP(fd); /* Close the tmpfile. */
+ scrollok(LYwin,FALSE); /* Stop scrolling. */
cleanup:
signal(SIGINT, cleanup_sig);
-#if !defined(VMS) && !defined(DOSPATH)
- FREE(header);
-#endif /* !VMS */
-
-#if defined(VMS) || defined(DOSPATH)
-cleandown:
-#endif /* VMS */
term_letter = FALSE;
-#ifdef VMS
+
+#if USE_VMS_MAILER
FREE(command);
+ while (LYRemoveTemp(my_tmpfile) == 0)
+ ; /* Delete the tmpfile(s). */
if (isPMDF) {
- LYRemoveTemp(hdrfile);
+ LYRemoveTemp(hdrfile); /* Delete the hdrfile. */
}
+#else
+ FREE(header);
+ LYRemoveTemp(my_tmpfile); /* Delete the tmpfile. */
#endif /* VMS */
- LYRemoveTemp(my_tmpfile);
- FREE(address);
+
+ FREE(from_address);
+ FREE(the_subject);
+ FREE(cc_address);
+ FREE(to_address);
FREE(ccaddr);
FREE(keywords);
FREE(body);
return;
}
-
-PRIVATE void terminate_letter ARGS1(int,sig GCC_UNUSED)
-{
- term_letter = TRUE;
- /* Reassert the AST */
- signal(SIGINT, terminate_letter);
-#if defined(VMS) || defined(DOSPATH)
- /*
- * Refresh the screen to get rid of the "interrupt" message.
- */
- if (!dump_output_immediately) {
- lynx_force_repaint();
- refresh();
- }
-#endif /* VMS */
-}
-
-PRIVATE void remove_tildes ARGS1(char *,string)
-{
- /*
- * Change the first character to
- * a space if it is a '~'.
- */
- if (*string == '~')
- *string = ' ';
-}
diff --git a/gnu/usr.bin/lynx/src/LYMail.h b/gnu/usr.bin/lynx/src/LYMail.h
index 00728e38e1c..ec88731816c 100644
--- a/gnu/usr.bin/lynx/src/LYMail.h
+++ b/gnu/usr.bin/lynx/src/LYMail.h
@@ -1,4 +1,3 @@
-
#ifndef LYMAIL_H
#define LYMAIL_H
@@ -6,15 +5,45 @@
#include <LYStructs.h>
#endif /* LYSTRUCTS_H */
+#ifdef SH_EX
+#define USE_BLAT_MAILER 1
+#else
+#define USE_BLAT_MAILER 0
+#endif
+
+#ifdef VMS
+#define USE_VMS_MAILER 1
+#else
+#define USE_VMS_MAILER 0
+#endif
+
+/*
+ * Ifdef's in case we have a working popen/pclose, useful for piping to the
+ * mail program.
+ */
+#if !defined(HAVE_POPEN) || USE_VMS_MAILER || defined(DOSPATH) || defined(__CYGWIN__)
+#define CAN_PIPE_TO_MAILER 0
+#else
+#define CAN_PIPE_TO_MAILER 1
+#endif
+
extern BOOLEAN term_letter;
+extern BOOLEAN LYMailPMDF NOPARAMS;
+extern FILE *LYPipeToMailer NOPARAMS;
+extern int LYSendMailFile PARAMS((
+ char * the_address,
+ char * the_filename,
+ char * the_subject,
+ char * the_ccaddr,
+ char * message));
extern void mailform PARAMS((
CONST char * mailto_address,
CONST char * mailto_subject,
CONST char * mailto_content,
CONST char * mailto_type));
extern void mailmsg PARAMS((
- int cur,
+ int cur,
char * owner_address,
char * filename,
char * linkname));
diff --git a/gnu/usr.bin/lynx/src/LYMain.c b/gnu/usr.bin/lynx/src/LYMain.c
index 7f3707c64af..c0770d32015 100644
--- a/gnu/usr.bin/lynx/src/LYMain.c
+++ b/gnu/usr.bin/lynx/src/LYMain.c
@@ -7,11 +7,13 @@
#include <UCMap.h>
#include <UCDefs.h>
#include <HTInit.h>
+#include <HTAlert.h>
#include <LYCurses.h>
#include <LYStyle.h>
#include <HTML.h>
#include <LYUtils.h>
#include <LYGlobalDefs.h>
+#include <LYOptions.h>
#include <LYSignal.h>
#include <LYGetFile.h>
#include <LYStrings.h>
@@ -27,22 +29,23 @@
#include <LYBookmark.h>
#include <LYCookie.h>
#include <LYPrettySrc.h>
+#include <LYShowInfo.h>
+
+#ifdef VMS
+#include <HTFTP.h>
+#endif /* !DECNET */
#ifdef __DJGPP__
#include <dos.h>
#include <dpmi.h>
+#include <io.h>
+#include <sys/stat.h>
#endif /* __DJGPP__ */
#ifdef __EMX__
#include <io.h>
#endif
-#ifndef VMS
-#ifdef SYSLOG_REQUESTED_URLS
-#include <syslog.h>
-#endif /* SYSLOG_REQUESTED_URLS */
-#endif /* !VMS */
-
#ifdef LOCALE
#undef gettext /* Solaris locale.h prototypes gettext() */
#include <locale.h>
@@ -73,8 +76,11 @@ PUBLIC BOOLEAN sigint = FALSE;
char init_ctrl_break[1];
#endif /* __DJGPP__ */
-#ifdef VMS
+#if USE_VMS_MAILER
PUBLIC char *mail_adrs = NULL; /* the mask for a VMS mail transport */
+#endif
+
+#ifdef VMS
/* create FIXED 512 binaries */
PUBLIC BOOLEAN UseFixedRecords = USE_FIXED_RECORDS;
#endif /* VMS */
@@ -106,6 +112,7 @@ PUBLIC BOOLEAN no_change_exec_perms = TRUE;
PUBLIC BOOLEAN no_change_exec_perms = FALSE;
#endif /* NO_CHANGE_EXECUTE_PERMS */
#endif /* OK_PERMIT */
+PUBLIC int LYAutoUncacheDirLists = 2; /* default dired uncaching behavior */
#endif /* DIRED_SUPPORT */
/* Number of docs cached in memory */
@@ -139,19 +146,18 @@ PUBLIC char *empty_string = "\0";
PUBLIC int display_lines; /* number of lines in display */
PUBLIC int www_search_result= -1;
/* linked list of printers */
-PUBLIC lynx_printer_item_type *printers = NULL;
+PUBLIC lynx_list_item_type *printers = NULL;
/* linked list of download options */
-PUBLIC lynx_html_item_type *downloaders = NULL;
+PUBLIC lynx_list_item_type *downloaders = NULL;
/* linked list of upload options */
#ifdef USE_EXTERNALS
-PUBLIC lynx_html_item_type *externals = NULL;
+PUBLIC lynx_list_item_type *externals = NULL;
/* linked list of external options */
#endif
-PUBLIC lynx_html_item_type *uploaders = NULL;
+PUBLIC lynx_list_item_type *uploaders = NULL;
PUBLIC int port_syntax = 1;
-PUBLIC int LYShowColor = SHOW_COLOR_UNKNOWN; /* to show or not to show */
-PUBLIC int LYChosenShowColor = SHOW_COLOR_UNKNOWN; /* whether to show and save */
-PUBLIC int LYrcShowColor = SHOW_COLOR_UNKNOWN; /* ... as last read or written */
+PUBLIC int LYShowColor = SHOW_COLOR_UNKNOWN; /* to show or not */
+PUBLIC int LYrcShowColor = SHOW_COLOR_UNKNOWN; /* ... last used */
#if !defined(NO_OPTION_FORMS) && !defined(NO_OPTION_MENU)
PUBLIC BOOLEAN LYUseFormsOptions = TRUE; /* use forms-based options menu */
#endif
@@ -162,14 +168,12 @@ PUBLIC BOOLEAN LYforce_no_cache = FALSE;
PUBLIC BOOLEAN LYoverride_no_cache = FALSE;/*override no-cache b/c history etc*/
PUBLIC BOOLEAN LYinternal_flag = FALSE; /* override no-cache b/c internal link*/
PUBLIC BOOLEAN LYresubmit_posts = ALWAYS_RESUBMIT_POSTS;
-PUBLIC BOOLEAN LYshow_kb_rate = TRUE;
+PUBLIC BOOLEAN LYtrimInputFields = FALSE;
PUBLIC BOOLEAN LYUserSpecifiedURL = TRUE;/* always TRUE the first time */
PUBLIC BOOLEAN LYJumpFileURL = FALSE; /* always FALSE the first time */
PUBLIC BOOLEAN jump_buffer = JUMPBUFFER; /* TRUE if offering default shortcut */
PUBLIC BOOLEAN goto_buffer = GOTOBUFFER; /* TRUE if offering default goto URL */
PUBLIC BOOLEAN ftp_passive = FTP_PASSIVE; /* TRUE if doing ftp in passive mode */
-PUBLIC BOOLEAN ftp_local_passive; /* TRUE for PASV for this server only */
-PUBLIC char *ftp_lasthost; /* host of last ftp transaction */
PUBLIC BOOLEAN recent_sizechange = FALSE;/* the window size changed recently? */
PUBLIC int user_mode = NOVICE_MODE;
PUBLIC BOOLEAN dump_output_immediately = FALSE;
@@ -183,7 +187,7 @@ PUBLIC BOOLEAN nolist = FALSE;
PUBLIC BOOLEAN historical_comments = FALSE;
PUBLIC BOOLEAN minimal_comments = FALSE;
PUBLIC BOOLEAN soft_dquotes = FALSE;
-PUBLIC BOOLEAN LYRestricted = FALSE;
+PUBLIC BOOLEAN LYRestricted = FALSE; /* whether we have -anonymous option */
PUBLIC BOOLEAN LYValidate = FALSE;
PUBLIC BOOLEAN LYPermitURL = FALSE;
PUBLIC BOOLEAN child_lynx = FALSE;
@@ -193,41 +197,31 @@ PUBLIC BOOLEAN vi_keys = VI_KEYS_ALWAYS_ON;
PUBLIC BOOLEAN emacs_keys = EMACS_KEYS_ALWAYS_ON;
PUBLIC int keypad_mode = DEFAULT_KEYPAD_MODE;
PUBLIC BOOLEAN case_sensitive = CASE_SENSITIVE_ALWAYS_ON;
+
PUBLIC BOOLEAN telnet_ok = TRUE;
#ifndef DISABLE_NEWS
PUBLIC BOOLEAN news_ok = TRUE;
#endif
PUBLIC BOOLEAN rlogin_ok = TRUE;
+PUBLIC BOOLEAN long_url_ok = FALSE;
PUBLIC BOOLEAN ftp_ok = TRUE;
PUBLIC BOOLEAN system_editor = FALSE;
-#ifdef USE_EXTERNALS
-PUBLIC BOOLEAN no_externals = FALSE;
-#endif
-PUBLIC BOOLEAN no_inside_telnet = FALSE;
-PUBLIC BOOLEAN no_outside_telnet = FALSE;
-PUBLIC BOOLEAN no_telnet_port = FALSE;
-#ifndef DISABLE_NEWS
-PUBLIC BOOLEAN no_inside_news = FALSE;
-PUBLIC BOOLEAN no_outside_news = FALSE;
-#endif
-PUBLIC BOOLEAN no_inside_ftp = FALSE;
-PUBLIC BOOLEAN no_outside_ftp = FALSE;
-PUBLIC BOOLEAN no_inside_rlogin = FALSE;
-PUBLIC BOOLEAN no_outside_rlogin = FALSE;
-PUBLIC BOOLEAN no_suspend = FALSE;
-PUBLIC BOOLEAN no_editor = FALSE;
-PUBLIC BOOLEAN no_shell = FALSE;
+
+PUBLIC BOOLEAN had_restrictions_default = FALSE;
+PUBLIC BOOLEAN had_restrictions_all = FALSE;
+
+PUBLIC BOOLEAN exec_frozen = FALSE;
PUBLIC BOOLEAN no_bookmark = FALSE;
-PUBLIC BOOLEAN no_multibook = FALSE;
PUBLIC BOOLEAN no_bookmark_exec = FALSE;
-PUBLIC BOOLEAN no_option_save = FALSE;
-PUBLIC BOOLEAN no_print = FALSE;
-PUBLIC BOOLEAN no_download = FALSE;
+PUBLIC BOOLEAN no_chdir = FALSE;
PUBLIC BOOLEAN no_disk_save = FALSE;
+PUBLIC BOOLEAN no_dotfiles = NO_DOT_FILES;
+PUBLIC BOOLEAN no_download = FALSE;
+PUBLIC BOOLEAN no_editor = FALSE;
PUBLIC BOOLEAN no_exec = FALSE;
-PUBLIC BOOLEAN no_lynxcgi = FALSE;
-PUBLIC BOOLEAN exec_frozen = FALSE;
+PUBLIC BOOLEAN no_file_url = FALSE;
PUBLIC BOOLEAN no_goto = FALSE;
+PUBLIC BOOLEAN no_goto_configinfo = FALSE;
PUBLIC BOOLEAN no_goto_cso = FALSE;
PUBLIC BOOLEAN no_goto_file = FALSE;
PUBLIC BOOLEAN no_goto_finger = FALSE;
@@ -239,157 +233,274 @@ PUBLIC BOOLEAN no_goto_lynxcgi = FALSE;
PUBLIC BOOLEAN no_goto_lynxexec = FALSE;
PUBLIC BOOLEAN no_goto_lynxprog = FALSE;
PUBLIC BOOLEAN no_goto_mailto = FALSE;
-#ifndef DISABLE_NEWS
-PUBLIC BOOLEAN no_goto_news = FALSE;
-PUBLIC BOOLEAN no_goto_nntp = FALSE;
-#endif
PUBLIC BOOLEAN no_goto_rlogin = FALSE;
-#ifndef DISABLE_NEWS
-PUBLIC BOOLEAN no_goto_snews = FALSE;
-#endif
PUBLIC BOOLEAN no_goto_telnet = FALSE;
PUBLIC BOOLEAN no_goto_tn3270 = FALSE;
PUBLIC BOOLEAN no_goto_wais = FALSE;
+PUBLIC BOOLEAN no_inside_ftp = FALSE;
+PUBLIC BOOLEAN no_inside_rlogin = FALSE;
+PUBLIC BOOLEAN no_inside_telnet = FALSE;
PUBLIC BOOLEAN no_jump = FALSE;
-PUBLIC BOOLEAN no_file_url = FALSE;
+PUBLIC BOOLEAN no_lynxcfg_info = FALSE;
+PUBLIC BOOLEAN no_lynxcgi = FALSE;
+PUBLIC BOOLEAN no_mail = FALSE;
+PUBLIC BOOLEAN no_multibook = FALSE;
+PUBLIC BOOLEAN no_option_save = FALSE;
+PUBLIC BOOLEAN no_outside_ftp = FALSE;
+PUBLIC BOOLEAN no_outside_rlogin = FALSE;
+PUBLIC BOOLEAN no_outside_telnet = FALSE;
+PUBLIC BOOLEAN no_print = FALSE;
+PUBLIC BOOLEAN no_shell = FALSE;
+PUBLIC BOOLEAN no_suspend = FALSE;
+PUBLIC BOOLEAN no_telnet_port = FALSE;
+PUBLIC BOOLEAN no_useragent = FALSE;
+
#ifndef DISABLE_NEWS
+PUBLIC BOOLEAN no_goto_news = FALSE;
+PUBLIC BOOLEAN no_goto_nntp = FALSE;
+PUBLIC BOOLEAN no_goto_snews = FALSE;
+PUBLIC BOOLEAN no_inside_news = FALSE;
PUBLIC BOOLEAN no_newspost = FALSE;
+PUBLIC BOOLEAN no_outside_news = FALSE;
#endif
-PUBLIC BOOLEAN no_mail = FALSE;
-PUBLIC BOOLEAN no_dotfiles = NO_DOT_FILES;
-PUBLIC BOOLEAN no_useragent = FALSE;
+
+#ifdef USE_EXTERNALS
+PUBLIC BOOLEAN no_externals = FALSE;
+#endif
+
+#ifndef NO_CONFIG_INFO
+PUBLIC BOOLEAN no_lynxcfg_xinfo = FALSE;
+#ifdef HAVE_CONFIG_H
+PUBLIC BOOLEAN no_compileopts_info = FALSE;
+#endif
+#endif
+
PUBLIC BOOLEAN no_statusline = FALSE;
-PUBLIC BOOLEAN no_filereferer = FALSE;
+PUBLIC BOOLEAN no_filereferer = TRUE;
+PUBLIC char LYRefererWithQuery = 'D'; /* 'D' for drop */
PUBLIC BOOLEAN local_host_only = FALSE;
PUBLIC BOOLEAN override_no_download = FALSE;
-PUBLIC BOOLEAN show_dotfiles = FALSE; /* From rcfile if no_dotfiles is false */
+PUBLIC BOOLEAN show_dotfiles = FALSE; /* From rcfile if no_dotfiles is false */
PUBLIC BOOLEAN LYforce_HTML_mode = FALSE;
-PUBLIC char *editor = NULL; /* the name of the current editor */
-PUBLIC char *jumpfile = NULL; /* the name of the default jumps file */
-PUBLIC char *jumpprompt = NULL; /* the default jumps prompt */
-PUBLIC char *bookmark_page = NULL; /* the name of the default bookmark page */
-PUBLIC char *BookmarkPage = NULL; /* the name of the current bookmark page */
-PUBLIC char *LynxHome = NULL; /* the default Home HREF. */
-PUBLIC char *homepage = NULL; /* home page or main screen */
-PUBLIC char *original_dir = NULL; /* the original directory */
-PUBLIC char *startfile = NULL; /* the first file */
-PUBLIC char *helpfile = NULL; /* the main help file */
-PUBLIC char *helpfilepath = NULL; /* the path to the help file set */
-PUBLIC char *lynxjumpfile = NULL; /* the current jump file URL */
-PUBLIC char *lynxlistfile = NULL; /* the current list file URL */
-PUBLIC char *lynxlinksfile = NULL; /* the current visited links file URL */
-PUBLIC char *startrealm = NULL; /* the startfile realm */
-PUBLIC char *indexfile = NULL; /* an index file if there is one */
-PUBLIC int outgoing_mail_charset = -1; /* translate mail to this charset */
-PUBLIC char *personal_mail_address = NULL; /* the users mail address */
-PUBLIC char *x_display = NULL; /* display environment variable */
-PUBLIC char *personal_type_map = NULL; /* .mailcap */
-PUBLIC char *global_type_map = NULL; /* global mailcap */
-PUBLIC char *global_extension_map = NULL; /* global mime.types */
-PUBLIC char *personal_extension_map = NULL;/* .mime.types */
-PUBLIC char *language = NULL; /* preferred language */
-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; /* Flags for sending mail */
-PUBLIC char *lynx_cfg_file = NULL; /* location of active lynx.cfg */
-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 */
-PUBLIC char *LYLocalDomain = NULL; /* treat as a local domain tail */
-PUBLIC BOOLEAN clickable_images = MAKE_LINKS_FOR_ALL_IMAGES;
-PUBLIC BOOLEAN pseudo_inline_alts = MAKE_PSEUDO_ALTS_FOR_INLINES;
-PUBLIC BOOLEAN crawl = FALSE; /* Do crawl? */
-PUBLIC BOOLEAN traversal = FALSE; /* Do traversals? */
-PUBLIC BOOLEAN check_realm = FALSE; /* Restrict to the starting realm? */
- /* Links beyond a displayed page with no links? */
-PUBLIC BOOLEAN more_links = FALSE;
-PUBLIC int ccount = 0; /* Starting number for lnk#.dat files in crawls */
-PUBLIC BOOLEAN LYCancelledFetch = FALSE; /* TRUE if cancelled binary fetch */
- /* Include mime headers with source dump */
-PUBLIC BOOLEAN keep_mime_headers = FALSE;
-PUBLIC BOOLEAN no_url_redirection = FALSE; /* Don't follow URL redirections */
-PUBLIC char *form_post_data = NULL; /* User data for post form */
-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 documents */
-PUBLIC char *authentication_info[2] = {NULL, NULL};
- /* Id:Password for protected proxy servers */
-PUBLIC char *proxyauth_info[2] = {NULL, NULL};
+
+#ifdef __DJGPP__
+PUBLIC BOOLEAN watt_debug = FALSE; /* WATT-32 debugging */
+#endif /* __DJGPP__ */
+
+#ifdef WIN_EX
+PUBLIC BOOLEAN focus_window = FALSE; /* 1998/10/05 (Mon) 17:18:42 */
+PUBLIC char windows_drive[4]; /* 1998/01/13 (Tue) 21:13:24 */
+#endif
+
+#ifdef _WINDOWS
+#define TIMEOUT 180 /* 1998/03/30 (Mon) 14:50:44 */
+PUBLIC int lynx_timeout = TIMEOUT;
+PUBLIC CRITICAL_SECTION critSec_DNS; /* 1998/09/03 (Thu) 22:01:56 */
+PUBLIC CRITICAL_SECTION critSec_READ; /* 1998/09/03 (Thu) 22:01:56 */
+#endif /* _WINDOWS */
+
+#if defined(WIN_EX)
+PUBLIC BOOLEAN system_is_NT = FALSE;
+#endif
+
+#ifdef SH_EX
+PUBLIC BOOLEAN show_cfg = FALSE;
+#ifdef WIN_EX
+PUBLIC int debug_delay = 0; /* 1998/10/06 (Tue) 08:41:20 */
+#endif
+PUBLIC BOOLEAN no_table_center = FALSE; /* 1998/10/09 (Fri) 15:12:49 */
+#endif /* SH_EX */
+
+#if USE_BLAT_MAILER
+PUBLIC BOOLEAN mail_is_blat = TRUE;
+#endif
+
+#ifdef USE_BLINK
+# ifdef __EMX__
+PUBLIC BOOLEAN term_blink_is_boldbg = TRUE;
+# else
+PUBLIC BOOLEAN term_blink_is_boldbg = FALSE;
+# endif
+#endif
+
PUBLIC BOOLEAN HEAD_request = FALSE;
-PUBLIC BOOLEAN scan_for_buried_news_references = TRUE;
-PUBLIC BOOLEAN LYRawMode;
+PUBLIC BOOLEAN LYAcceptAllCookies = ACCEPT_ALL_COOKIES; /* take all cookies? */
+PUBLIC BOOLEAN LYCancelledFetch = FALSE;/* TRUE if cancelled binary fetch */
+PUBLIC BOOLEAN LYCollapseBRs = COLLAPSE_BR_TAGS; /* Collapse serial BRs? */
PUBLIC BOOLEAN LYDefaultRawMode;
+PUBLIC BOOLEAN LYListNewsDates = LIST_NEWS_DATES;
+PUBLIC BOOLEAN LYListNewsNumbers = LIST_NEWS_NUMBERS;
+PUBLIC BOOLEAN LYMBMBlocked = BLOCK_MULTI_BOOKMARKS;
+PUBLIC BOOLEAN LYNewsPosting = NEWS_POSTING; /* News posting supported? */
+PUBLIC BOOLEAN LYNoFromHeader = TRUE; /* Never send From header? */
+PUBLIC BOOLEAN LYNoRefererForThis=FALSE;/* No Referer header for this URL? */
+PUBLIC BOOLEAN LYNoRefererHeader=FALSE; /* Never send Referer header? */
+PUBLIC BOOLEAN LYRawMode;
+PUBLIC BOOLEAN LYSelectPopups = USE_SELECT_POPUPS;
+PUBLIC BOOLEAN LYSetCookies = SET_COOKIES; /* Process Set-Cookie headers? */
+PUBLIC BOOLEAN LYUseDefSelPop = TRUE; /* Command line -popup toggle */
PUBLIC BOOLEAN LYUseDefaultRawMode = TRUE;
-PUBLIC char *UCAssume_MIMEcharset = NULL;
-PUBLIC BOOLEAN UCSaveBookmarksInUnicode = FALSE;
-PUBLIC BOOLEAN UCForce8bitTOUPPER = FALSE; /* override locale for case-conversion? */
-PUBLIC int LYlines = 24;
-PUBLIC int LYcols = 80;
-PUBLIC int dump_output_width = 0;
-PUBLIC linkstruct links[MAXLINKS];
-PUBLIC histstruct history[MAXHIST];
-PUBLIC int nlinks = 0; /* number of links in memory */
-PUBLIC int nhist = 0; /* number of history entries */
-PUBLIC int more = FALSE; /* is there more text to display? */
-PUBLIC int InfoSecs; /* Seconds to sleep() for Information messages */
-PUBLIC int MessageSecs; /* Seconds to sleep() for important Messages */
-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? */
-PUBLIC BOOLEAN LYListNewsNumbers = LIST_NEWS_NUMBERS;
-PUBLIC BOOLEAN LYListNewsDates = LIST_NEWS_DATES;
PUBLIC BOOLEAN LYisConfiguredForX = FALSE;
-PUBLIC char *URLDomainPrefixes = NULL;
-PUBLIC char *URLDomainSuffixes = NULL;
+PUBLIC BOOLEAN UCForce8bitTOUPPER = FALSE; /* override locale for case-conversion? */
+PUBLIC BOOLEAN UCSaveBookmarksInUnicode = FALSE;
+PUBLIC BOOLEAN bookmark_start = FALSE;
+PUBLIC BOOLEAN check_realm = FALSE; /* Restrict to the starting realm? */
+PUBLIC BOOLEAN clickable_images = MAKE_LINKS_FOR_ALL_IMAGES;
+PUBLIC BOOLEAN crawl = FALSE; /* Do crawl? */
+PUBLIC BOOLEAN keep_mime_headers = FALSE; /* Include mime headers with source dump */
+PUBLIC BOOLEAN more = FALSE; /* is there more text to display? */
+PUBLIC BOOLEAN more_links = FALSE; /* Links beyond a displayed page with no links? */
+PUBLIC BOOLEAN no_url_redirection = FALSE; /* Don't follow URL redirections */
+PUBLIC BOOLEAN pseudo_inline_alts = MAKE_PSEUDO_ALTS_FOR_INLINES;
+PUBLIC BOOLEAN scan_for_buried_news_references = TRUE;
PUBLIC BOOLEAN startfile_ok = FALSE;
-PUBLIC BOOLEAN LYSelectPopups = USE_SELECT_POPUPS;
-PUBLIC BOOLEAN LYUseDefSelPop = TRUE; /* Command line -popup toggle */
-PUBLIC BOOLEAN LYMultiBookmarks = MULTI_BOOKMARK_SUPPORT;
-PUBLIC BOOLEAN LYMBMBlocked = BLOCK_MULTI_BOOKMARKS;
-PUBLIC BOOLEAN LYMBMAdvanced = TRUE;
-PUBLIC int LYStatusLine = -1; /* Line for statusline() if > -1 */
-PUBLIC BOOLEAN LYCollapseBRs = COLLAPSE_BR_TAGS; /* Collapse serial BRs? */
-PUBLIC BOOLEAN LYSetCookies = SET_COOKIES; /* Process Set-Cookie headers? */
-PUBLIC BOOLEAN LYAcceptAllCookies = ACCEPT_ALL_COOKIES; /* take all cookies? */
+PUBLIC BOOLEAN startfile_stdin = FALSE;
+PUBLIC BOOLEAN traversal = FALSE; /* Do traversals? */
+PUBLIC char *BookmarkPage = NULL; /* the name of the current bookmark page */
PUBLIC char *LYCookieAcceptDomains = NULL; /* domains to accept all cookies */
-PUBLIC char *LYCookieRejectDomains = NULL; /* domains to reject all cookies */
-PUBLIC char *LYCookieStrictCheckDomains = NULL; /* check strictly */
PUBLIC char *LYCookieLooseCheckDomains = NULL; /* check loosely */
PUBLIC char *LYCookieQueryCheckDomains = NULL; /* check w/a query */
+PUBLIC char *LYCookieRejectDomains = NULL; /* domains to reject all cookies */
PUBLIC char *LYCookieSAcceptDomains = NULL; /* domains to accept all cookies */
-PUBLIC char *LYCookieSRejectDomains = NULL; /* domains to reject all cookies */
-PUBLIC char *LYCookieSStrictCheckDomains = NULL; /* check strictly */
PUBLIC char *LYCookieSLooseCheckDomains = NULL; /* check loosely */
PUBLIC char *LYCookieSQueryCheckDomains = NULL; /* check w/a query */
+PUBLIC char *LYCookieSRejectDomains = NULL; /* domains to reject all cookies */
+PUBLIC char *LYCookieSStrictCheckDomains = NULL; /* check strictly */
+PUBLIC char *LYCookieStrictCheckDomains = NULL; /* check strictly */
+PUBLIC char *LYHostName = NULL; /* treat as a local host name */
+PUBLIC char *LYLocalDomain = NULL; /* treat as a local domain tail */
+PUBLIC char *LYUserAgent = NULL; /* Lynx User-Agent header */
+PUBLIC char *LYUserAgentDefault = NULL; /* Lynx default User-Agent header */
+PUBLIC char *LynxHome = NULL; /* the default Home HREF. */
+PUBLIC char *LynxSigFile = NULL; /* Signature file, in or off home */
+PUBLIC char *UCAssume_MIMEcharset = NULL;
+PUBLIC char *URLDomainPrefixes = NULL;
+PUBLIC char *URLDomainSuffixes = NULL;
+PUBLIC char *authentication_info[2] = {NULL, NULL}; /* Id:Password for protected documents */
+PUBLIC char *bookmark_page = NULL; /* the name of the default bookmark page */
+PUBLIC char *editor = NULL; /* the name of the current editor */
+PUBLIC char *form_get_data = NULL; /* User data for get form */
+PUBLIC char *form_post_data = NULL; /* User data for post form */
+PUBLIC char *global_extension_map = NULL; /* global mime.types */
+PUBLIC char *global_type_map = NULL; /* global mailcap */
+PUBLIC char *helpfile = NULL; /* the main help file */
+PUBLIC char *helpfilepath = NULL; /* the path to the help file set */
+PUBLIC char *homepage = NULL; /* home page or main screen */
+PUBLIC char *http_error_file = NULL; /* Place HTTP status code in this file */
+PUBLIC char *indexfile = NULL; /* an index file if there is one */
+PUBLIC char *jumpfile = NULL; /* the name of the default jumps file */
+PUBLIC char *jumpprompt = NULL; /* the default jumps prompt */
+PUBLIC char *language = NULL; /* preferred language */
+PUBLIC char *lynx_cfg_file = NULL; /* location of active lynx.cfg */
+PUBLIC char *lynx_cmd_logfile; /* file to write keystroke commands, if any */
+PUBLIC char *lynx_cmd_script; /* file to read keystroke commands, if any */
+PUBLIC char *lynx_save_space = NULL; /* The prefix for save to disk paths */
+PUBLIC char *lynx_temp_space = NULL; /* The prefix for temporary file paths */
+PUBLIC char *lynxjumpfile = NULL; /* the current jump file URL */
+PUBLIC char *lynxlinksfile = NULL; /* the current visited links file URL */
+PUBLIC char *lynxlistfile = NULL; /* the current list file URL */
+PUBLIC char *original_dir = NULL; /* the original directory */
+PUBLIC char *personal_extension_map = NULL;/* .mime.types */
+PUBLIC char *personal_mail_address = NULL; /* the users mail address */
+PUBLIC char *personal_type_map = NULL; /* .mailcap */
+PUBLIC char *pref_charset = NULL; /* preferred character set */
+PUBLIC char *proxyauth_info[2] = {NULL, NULL}; /* Id:Password for protected proxy servers */
+PUBLIC char *startfile = NULL; /* the first file */
+PUBLIC char *startrealm = NULL; /* the startfile realm */
+PUBLIC char *system_mail = NULL; /* The path for sending mail */
+PUBLIC char *system_mail_flags = NULL; /* Flags for sending mail */
+PUBLIC char *x_display = NULL; /* display environment variable */
+PUBLIC histstruct history[MAXHIST];
+PUBLIC int AlertSecs; /* time-delay for HTAlert() messages */
+PUBLIC int InfoSecs; /* time-delay for Information messages */
+PUBLIC int LYMultiBookmarks = MULTI_BOOKMARK_SUPPORT;
+PUBLIC int LYStatusLine = -1; /* Line for statusline() if > -1 */
+PUBLIC int LYcols = DFT_COLS;
+PUBLIC int LYlines = DFT_ROWS;
+PUBLIC int MessageSecs; /* time-delay for important Messages */
+PUBLIC int ccount = 0; /* Starting number for lnk#.dat files in crawls */
+PUBLIC int dump_output_width = 0;
+PUBLIC int lynx_temp_subspace = 0; /* > 0 if we made temp-directory */
+PUBLIC int nhist = 0; /* number of history entries */
+PUBLIC int nlinks = 0; /* number of links in memory */
+PUBLIC int outgoing_mail_charset = -1; /* translate mail to this charset */
+PUBLIC linkstruct links[MAXLINKS];
+
+#ifndef DISABLE_BIBP
+PUBLIC BOOLEAN BibP_bibhost_available = FALSE; /* until check succeeds */
+PUBLIC BOOLEAN BibP_bibhost_checked = FALSE; /* until LYCheckBibHost */
+PUBLIC BOOLEAN no_goto_bibp = FALSE;
+PUBLIC char *BibP_bibhost = NULL; /* local server for bibp: links */
+PUBLIC char *BibP_globalserver = NULL; /* global server for bibp: links */
+#endif
+
#ifdef EXP_PERSISTENT_COOKIES
-BOOLEAN persistent_cookies = TRUE;
-PUBLIC char *LYCookieFile = NULL; /* default cookie file */
+PUBLIC BOOLEAN persistent_cookies = FALSE; /* disabled by default! */
+PUBLIC char *LYCookieFile = NULL; /* cookie read file */
+PUBLIC char *LYCookieSaveFile = NULL; /* cookie save file */
#endif /* EXP_PERSISTENT_COOKIES */
+
+#ifdef EXP_NESTED_TABLES
+PUBLIC BOOLEAN nested_tables =
+#if defined(USE_COLOR_STYLE)
+ TRUE
+#else
+ FALSE /* see 2001-08-15 */
+#endif
+ ;
+#endif
+
+PUBLIC BOOLEAN LYShowTransferRate = TRUE;
+PUBLIC int LYTransferRate = rateEtaKB_maybe;
+
PUBLIC char *XLoadImageCommand = NULL; /* Default image viewer for X */
PUBLIC BOOLEAN LYNoISMAPifUSEMAP = FALSE; /* Omit ISMAP link if MAP present? */
PUBLIC int LYHiddenLinks = HIDDENLINKS_SEPARATE; /* Show hidden links? */
-PUBLIC BOOL Old_DTD = NO;
+PUBLIC int Old_DTD = NO;
+PRIVATE BOOL DTD_recovery = NO;
+
+#ifndef NO_LYNX_TRACE
PUBLIC FILE *LYTraceLogFP = NULL; /* Pointer for TRACE log */
+#endif
PUBLIC char *LYTraceLogPath = NULL; /* Path for TRACE log */
PUBLIC BOOLEAN LYUseTraceLog = USE_TRACE_LOG; /* Use a TRACE log? */
+
PUBLIC BOOLEAN LYSeekFragMAPinCur = TRUE;
PUBLIC BOOLEAN LYSeekFragAREAinCur = TRUE;
-
PUBLIC BOOLEAN LYStripDotDotURLs = TRUE; /* Try to fix ../ in some URLs? */
PUBLIC BOOLEAN LYForceSSLCookiesSecure = FALSE;
PUBLIC BOOLEAN LYNoCc = FALSE;
-PUBLIC BOOLEAN LYPreparsedSource = FALSE; /* Show source as preparsed? */
+PUBLIC BOOLEAN LYPreparsedSource = FALSE; /* Show source as preparsed? */
PUBLIC BOOLEAN LYPrependBaseToSource = TRUE;
PUBLIC BOOLEAN LYPrependCharsetToSource = TRUE;
PUBLIC BOOLEAN LYQuitDefaultYes = QUIT_DEFAULT_YES;
+PUBLIC BOOLEAN dont_wrap_pre = FALSE;
+
+PUBLIC int connect_timeout = 18000; /*=180000*0.1 - used in HTDoConnect.*/
+
+#ifdef EXP_JUSTIFY_ELTS
+PUBLIC BOOL ok_justify = TRUE;
+PUBLIC int justify_max_void_percent = 35;
+#endif
+
+#ifndef NO_DUMP_WITH_BACKSPACES
+PUBLIC BOOLEAN with_backspaces = FALSE;
+#endif
+
+PUBLIC BOOL force_empty_hrefless_a = FALSE;
+
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+PUBLIC BOOL textfields_need_activation = FALSE;
+PUBLIC BOOL textfields_activation_option = FALSE;
+#endif
+
+PUBLIC BOOLEAN textfield_prompt_at_left_edge = FALSE;
+
+#ifdef MARK_HIDDEN_LINKS
+PUBLIC char* hidden_link_marker = NULL;
+#endif
#ifdef DISP_PARTIAL
PUBLIC BOOLEAN display_partial_flag = TRUE; /* Display document during download */
@@ -397,21 +508,26 @@ PUBLIC BOOLEAN debug_display_partial = FALSE; /* Show with MessageSecs delay */
PUBLIC int partial_threshold = -1; /* # of lines to be d/l'ed until we repaint */
#endif
-/* These are declared in cutil.h for current freeWAIS libraries. - FM */
-#ifdef DECLARE_WAIS_LOGFILES
-PUBLIC char *log_file_name = NULL; /* for WAIS log file name in libWWW */
-PUBLIC FILE *logfile = NULL; /* for WAIS log file output in libWWW */
-#endif /* DECLARE_WAIS_LOGFILES */
+PUBLIC BOOLEAN LYNonRestartingSIGWINCH = FALSE;
+PUBLIC BOOLEAN LYReuseTempfiles = FALSE;
+PUBLIC BOOLEAN LYUseBuiltinSuffixes = TRUE;
+
+#ifdef MISC_EXP
+PUBLIC int LYNoZapKey = 0; /* 0: off (do z checking), 1: full, 2: initially */
+#endif
#ifndef DISABLE_NEWS
extern int HTNewsChunkSize; /* Number of news articles per chunk (HTNews.c) */
extern int HTNewsMaxChunk; /* Max news articles before chunking (HTNews.c) */
#endif
+PUBLIC BOOLEAN FileInitAlreadyDone = FALSE;
+
PRIVATE BOOLEAN stack_dump = FALSE;
PRIVATE char *terminal = NULL;
PRIVATE char *pgm;
PRIVATE BOOLEAN number_links = FALSE;
+PRIVATE BOOLEAN number_fields = FALSE;
PRIVATE BOOLEAN LYPrependBase = FALSE;
PRIVATE HTList *LYStdinArgs = NULL;
@@ -420,25 +536,38 @@ PRIVATE HTList *LYStdinArgs = NULL;
#define EXTENDED_OPTION_LOGIC 1
#endif
+#ifndef EXTENDED_STARTFILE_RECALL
+/* if set then additional non-option args (before the last one) will be
+ made available for 'g'oto recall - kw */
+#define EXTENDED_STARTFILE_RECALL 1
+#endif
+
+#ifndef OPTNAME_ALLOW_DASHES
+/* if set, then will allow dashes and underscores to be used interchangeable
+ in commandline option's names - VH */
+#define OPTNAME_ALLOW_DASHES 1
+#endif
+
#if EXTENDED_OPTION_LOGIC
PRIVATE BOOLEAN no_options_further=FALSE; /* set to TRUE after '--' argument */
#endif
-
-PRIVATE void parse_arg PARAMS((char **arg, int *i));
-PRIVATE void print_help_and_exit PARAMS((int exit_status));
+PRIVATE BOOL parse_arg PARAMS((char **arg, unsigned mask, int *i));
+PRIVATE void print_help_and_exit PARAMS((int exit_status)) GCC_NORETURN;
+PRIVATE void print_help_strings PARAMS((CONST char * name, CONST char * help, CONST char * value, BOOLEAN option));
#ifndef VMS
PUBLIC BOOLEAN LYNoCore = NO_FORCED_CORE_DUMP;
+PUBLIC BOOLEAN restore_sigpipe_for_children = FALSE;
PRIVATE void FatalProblem PARAMS((int sig));
#endif /* !VMS */
-#if defined(USE_HASH)
- char *lynx_lss_file=NULL;
+#if defined(USE_COLOR_STYLE)
+PUBLIC char *lynx_lss_file = NULL;
#endif
#ifdef __DJGPP__
-PRIVATE int LY_set_ctrl_break(int setting)
+PRIVATE void LY_set_ctrl_break(int setting)
{
(void)signal(SIGINT, (setting ? SIG_DFL : SIG_IGN));
setcbrk(setting);
@@ -459,6 +588,20 @@ PRIVATE void reset_break(void)
}
#endif /* __DJGPP__ */
+#if defined(WIN_EX)
+PUBLIC int is_windows_nt(void)
+{
+ DWORD version;
+
+ version = GetVersion();
+ if ((version & 0x80000000) == 0)
+ return 1;
+ else
+ return 0;
+}
+#endif
+
+
#ifdef LY_FIND_LEAKS
PRIVATE void free_lynx_globals NOARGS
{
@@ -477,10 +620,13 @@ PRIVATE void free_lynx_globals NOARGS
#ifdef VMS
Define_VMSLogical("LYNX_VERSION", "");
- FREE(mail_adrs);
FREE(LYCSwingPath);
#endif /* VMS */
+#if USE_VMS_MAILER
+ FREE(mail_adrs);
+#endif
+
FREE(LynxHome);
FREE(homepage);
FREE(original_dir);
@@ -502,8 +648,13 @@ PRIVATE void free_lynx_globals NOARGS
FREE(LynxSigFile);
FREE(system_mail);
FREE(system_mail_flags);
+#ifndef DISABLE_BIBP
+ FREE(BibP_bibhost);
+ FREE(BibP_globalserver);
+#endif
#ifdef EXP_PERSISTENT_COOKIES
FREE(LYCookieFile);
+ FREE(LYCookieSaveFile);
#endif
FREE(LYCookieAcceptDomains);
FREE(LYCookieRejectDomains);
@@ -535,287 +686,401 @@ PRIVATE void free_lynx_globals NOARGS
#ifndef VMS
FREE(lynx_version_putenv_command);
#endif
- FREE(lynx_temp_space);
- FREE(LYTraceLogPath);
- FREE(lynx_cfg_file);
-#if defined(USE_HASH)
- FREE(lynx_lss_file);
-#endif
- FREE(UCAssume_MIMEcharset);
- {
- char *p = LYlist_temp_url();
- if (p && *p) {
- *p = '\0';
- FREE(p);
+ FREE(lynx_temp_space);
+ FREE(LYTraceLogPath);
+ FREE(lynx_cfg_file);
+ #if defined(USE_COLOR_STYLE)
+ FREE(lynx_lss_file);
+ #endif
+ FREE(UCAssume_MIMEcharset);
+ LYUIPages_free();
+ for (i = 0; i < nlinks; i++) {
+ FREE(links[i].lname);
+ }
+ nlinks = 0;
+ HTList_delete(LYcommandList());
+
+ return;
}
- }
- for (i = 0; i < nlinks; i++) {
- FREE(links[i].lname);
- }
- nlinks = 0;
+ #endif /* LY_FIND_LEAKS */
- return;
-}
-#endif /* LY_FIND_LEAKS */
+ /*
+ * This function frees the LYStdinArgs list. - FM
+ */
+ PRIVATE void LYStdinArgs_free NOARGS
+ {
+ char *argument;
+ HTList *cur = LYStdinArgs;
-/*
- * This function frees the LYStdinArgs list. - FM
- */
-PRIVATE void LYStdinArgs_free NOARGS
-{
- char *argument;
- HTList *cur = LYStdinArgs;
+ if (cur == NULL)
+ return;
- if (cur == NULL)
- return;
+ while (NULL != (argument = (char *)HTList_nextObject(cur))) {
+ FREE(argument);
+ }
+ HTList_delete(LYStdinArgs);
+ LYStdinArgs = NULL;
+ return;
+ }
- while (NULL != (argument = (char *)HTList_nextObject(cur))) {
- FREE(argument);
- }
- HTList_delete(LYStdinArgs);
- LYStdinArgs = NULL;
- return;
-}
+ PUBLIC void exit_immediately ARGS1(
+ int, code)
+ {
+ #ifndef NOSIGHUP
+ (void) signal(SIGHUP, SIG_DFL);
+ #endif /* NOSIGHUP */
+ (void) signal(SIGTERM, SIG_DFL);
+ #ifndef VMS
+ (void) signal(SIGINT, SIG_DFL);
+ #endif /* !VMS */
+ #ifdef SIGTSTP
+ if (no_suspend)
+ (void) signal(SIGTSTP, SIG_DFL);
+ #endif /* SIGTSTP */
+ exit(code);
+ }
-PUBLIC void exit_immediately ARGS1(
- int, code)
-{
-#ifndef NOSIGHUP
- (void) signal(SIGHUP, SIG_DFL);
-#endif /* NOSIGHUP */
- (void) signal(SIGTERM, SIG_DFL);
-#ifndef VMS
- (void) signal(SIGINT, SIG_DFL);
-#endif /* !VMS */
-#ifdef SIGTSTP
- if (no_suspend)
- (void) signal(SIGTSTP, SIG_DFL);
-#endif /* SIGTSTP */
- exit(code);
-}
+ #ifdef EBCDIC
+ char un_IBM1047[ 256 ] = "";
+ unsigned char IBM1047[ 256 ] = /* ATOE OEMVS311 */
+ {
+ 0x00,0x01,0x02,0x03,0x37,0x2d,0x2e,0x2f,0x16,0x05,0x15,0x0b,0x0c,0x0d,0x0e,0x0f,
+ 0x10,0x11,0x12,0x13,0x3c,0x3d,0x32,0x26,0x18,0x19,0x3f,0x27,0x1c,0x1d,0x1e,0x1f,
+ 0x40,0x5a,0x7f,0x7b,0x5b,0x6c,0x50,0x7d,0x4d,0x5d,0x5c,0x4e,0x6b,0x60,0x4b,0x61,
+ 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0x7a,0x5e,0x4c,0x7e,0x6e,0x6f,
+ 0x7c,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,
+ 0xd7,0xd8,0xd9,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xad,0xe0,0xbd,0x5f,0x6d,
+ 0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96,
+ 0x97,0x98,0x99,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xc0,0x4f,0xd0,0xa1,0x07,
+ 0x20,0x21,0x22,0x23,0x24,0x25,0x06,0x17,0x28,0x29,0x2a,0x2b,0x2c,0x09,0x0a,0x1b,
+ 0x30,0x31,0x1a,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3a,0x3b,0x04,0x14,0x3e,0xff,
+ 0x41,0xaa,0x4a,0xb1,0x9f,0xb2,0x6a,0xb5,0xbb,0xb4,0x9a,0x8a,0xb0,0xca,0xaf,0xbc,
+ 0x90,0x8f,0xea,0xfa,0xbe,0xa0,0xb6,0xb3,0x9d,0xda,0x9b,0x8b,0xb7,0xb8,0xb9,0xab,
+ 0x64,0x65,0x62,0x66,0x63,0x67,0x9e,0x68,0x74,0x71,0x72,0x73,0x78,0x75,0x76,0x77,
+ 0xac,0x69,0xed,0xee,0xeb,0xef,0xec,0xbf,0x80,0xfd,0xfe,0xfb,0xfc,0xba,0xae,0x59,
+ 0x44,0x45,0x42,0x46,0x43,0x47,0x9c,0x48,0x54,0x51,0x52,0x53,0x58,0x55,0x56,0x57,
+ 0x8c,0x49,0xcd,0xce,0xcb,0xcf,0xcc,0xe1,0x70,0xdd,0xde,0xdb,0xdc,0x8d,0x8e,0xdf
+ } ;
+
+ PRIVATE void FixCharacters(void)
+ {
+ int c;
+ int work1[256],
+ work2[256];
+
+ for (c = 0; c < 256; c++) {
+ un_IBM1047[IBM1047[c]] = c;
+ work1[c] = keymap[c+1];
+ work2[c] = key_override[c+1];
+ }
+ for (c = 0; c < 256; c++) {
+ keymap [IBM1047[c]+1] = work1[c];
+ key_override[IBM1047[c]+1] = work2[c];
+ }
+ }
+ #endif /* EBCDIC */
-#ifdef EBCDIC
- char un_IBM1047[ 256 ] = "";
-unsigned char IBM1047[ 256 ] = /* ATOE OEMVS311 */
-{
-0x00,0x01,0x02,0x03,0x37,0x2d,0x2e,0x2f,0x16,0x05,0x15,0x0b,0x0c,0x0d,0x0e,0x0f,
-0x10,0x11,0x12,0x13,0x3c,0x3d,0x32,0x26,0x18,0x19,0x3f,0x27,0x1c,0x1d,0x1e,0x1f,
-0x40,0x5a,0x7f,0x7b,0x5b,0x6c,0x50,0x7d,0x4d,0x5d,0x5c,0x4e,0x6b,0x60,0x4b,0x61,
-0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0x7a,0x5e,0x4c,0x7e,0x6e,0x6f,
-0x7c,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,
-0xd7,0xd8,0xd9,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xad,0xe0,0xbd,0x5f,0x6d,
-0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96,
-0x97,0x98,0x99,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xc0,0x4f,0xd0,0xa1,0x07,
-0x20,0x21,0x22,0x23,0x24,0x25,0x06,0x17,0x28,0x29,0x2a,0x2b,0x2c,0x09,0x0a,0x1b,
-0x30,0x31,0x1a,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3a,0x3b,0x04,0x14,0x3e,0xff,
-0x41,0xaa,0x4a,0xb1,0x9f,0xb2,0x6a,0xb5,0xbb,0xb4,0x9a,0x8a,0xb0,0xca,0xaf,0xbc,
-0x90,0x8f,0xea,0xfa,0xbe,0xa0,0xb6,0xb3,0x9d,0xda,0x9b,0x8b,0xb7,0xb8,0xb9,0xab,
-0x64,0x65,0x62,0x66,0x63,0x67,0x9e,0x68,0x74,0x71,0x72,0x73,0x78,0x75,0x76,0x77,
-0xac,0x69,0xed,0xee,0xeb,0xef,0xec,0xbf,0x80,0xfd,0xfe,0xfb,0xfc,0xba,0xae,0x59,
-0x44,0x45,0x42,0x46,0x43,0x47,0x9c,0x48,0x54,0x51,0x52,0x53,0x58,0x55,0x56,0x57,
-0x8c,0x49,0xcd,0xce,0xcb,0xcf,0xcc,0xe1,0x70,0xdd,0xde,0xdb,0xdc,0x8d,0x8e,0xdf
-} ;
-
-static void FixCharacters(void)
-{
- int c;
- int work1[256],
- work2[256];
+ PRIVATE int argncmp ARGS2(
+ char*, str,
+ char*, what)
+ {
+ if (str[0] == '-' && str[1] == '-' ) ++str;
+ #if OPTNAME_ALLOW_DASHES
+ return strncmp(str, what, strlen(what));
+ #else
+ ++str; ++what; /*skip leading dash in both strings*/
+ return !strn_dash_equ(str, what, strlen(what));
+ #endif
+ }
- for (c = 0; c < 256; c++) {
- un_IBM1047[IBM1047[c]] = c;
- work1[c] = keymap[c+1];
- work2[c] = key_override[c+1];
- }
- for (c = 0; c < 256; c++) {
- keymap [IBM1047[c]+1] = work1[c];
- key_override[IBM1047[c]+1] = work2[c];
- }
-}
-#endif /* EBCDIC */
+ PRIVATE void tildeExpand ARGS2(
+ char **, pathname,
+ BOOLEAN, embedded)
+ {
+ char *temp = *pathname;
+
+ if (embedded) {
+ if (temp != NULL) {
+ temp = strstr(*pathname, "/~");
+ if (temp != 0)
+ temp++;
+ else
+ temp = *pathname;
+ }
+ }
-/* these are used for matching commandline options. */
-PRIVATE int argcmp ARGS2(
- char*, str,
- char*, what)
-{
- if (str[0] == '-' && str[1] == '-' ) ++str;
- return strcmp(str,what);
-}
+ if (temp != NULL
+ && temp[0] == '~') {
+ if (temp[1] == '/'
+ && temp[2] != '\0') {
+ temp = NULL;
+ StrAllocCopy(temp, *pathname + 2);
+ StrAllocCopy(*pathname, wwwName(Home_Dir()));
+ LYAddPathSep(pathname);
+ StrAllocCat(*pathname, temp);
+ FREE(temp);
+ } else if (temp[1] == '\0') {
+ StrAllocCopy(*pathname, wwwName(Home_Dir()));
+ }
+ }
+ }
-PRIVATE int argncmp ARGS2(
- char*, str,
- char*, what)
-{
- if (str[0] == '-' && str[1] == '-' ) ++str;
- return strncmp(str, what, strlen(what));
-}
+ PRIVATE BOOL GetStdin ARGS2(
+ char **, buf,
+ BOOL, marker)
+ {
+ if (LYSafeGets(buf, stdin) != 0
+ && (!marker || strncmp(*buf, "---", 3) != 0)) {
+ LYTrimTrailing(*buf);
+ CTRACE((tfp, "...data: %s\n", *buf));
+ return TRUE;
+ }
+ CTRACE((tfp, "...mark: %s\n", *buf ? *buf : ""));
+ return FALSE;
+ }
-/*
- * Wow! Someone wants to start up Lynx.
- */
-PUBLIC int main ARGS2(
- int, argc,
- char **, argv)
-{
- int i; /* indexing variable */
- int status = 0; /* exit status */
- char *temp = NULL;
- char *cp;
- FILE *fp;
- char filename[LY_MAXPATH];
- BOOL LYGetStdinArgs = FALSE;
-
-#ifndef DISABLE_FTP
- /* malloc a sizeof(char) so 1st strcmp() won't dump in HTLoadFile() */
- ftp_lasthost = (char *)malloc(sizeof(char));
- *ftp_lasthost = NULL;
-#endif /* DISABLE_FTP */
-
-#ifdef NOT_ASCII
- FixCharacters();
-#endif /* NOT_ASCII */
+ #ifdef WIN32
+ PRIVATE BOOL cleanup_win32(DWORD fdwCtrlType)
+ {
+ switch (fdwCtrlType) {
+ case CTRL_CLOSE_EVENT:
+ cleanup_sig(-1);
+ return TRUE;
+ default:
+ return FALSE;
+ }
+ }
+ #endif
-#ifdef _WINDOWS
- WSADATA WSAData;
- {
- int err;
- WORD wVerReq;
+ /*
+ * Wow! Someone wants to start up Lynx.
+ */
+ PUBLIC int main ARGS2(
+ int, argc,
+ char **, argv)
+ {
+ int i; /* indexing variable */
+ int status = 0; /* exit status */
+ char *temp = NULL;
+ char *cp;
+ FILE *fp;
+ struct stat dir_info;
+ char filename[LY_MAXPATH];
+ BOOL LYGetStdinArgs = FALSE;
+ #ifdef _WINDOWS
+ WSADATA WSAData;
+ #endif /* _WINDOWS */
+ #ifdef USE_SSL
+ char SSLLibraryVersion[256];
+ char *SSLcp;
+ #endif /* USE_SSL */
- wVerReq = MAKEWORD(1,1);
+ /*
+ * Just in case someone has the idea to install lynx set-uid, let's try
+ * to discourage it.
+ */
+ #if defined(GETUID) && defined(SETUID)
+ setuid(getuid());
+ #endif
+
+ #ifdef NOT_ASCII
+ FixCharacters();
+ #endif /* NOT_ASCII */
+
+ #ifdef EXP_CHARSET_CHOICE
+ memset((char*)charset_subsets, 0, sizeof(charset_subset_t)*MAXCHARSETS);
+ #endif
+
+ #ifdef _WINDOWS
+ {
+ int err;
+ WORD wVerReq;
+
+ wVerReq = MAKEWORD(1, 1);
+
+ err = WSAStartup(wVerReq, &WSAData);
+ if (err != 0)
+ {
+ printf(gettext("No Winsock found, sorry."));
+ sleep(5);
+ return 1;
+ }
+ }
- err = WSAStartup(wVerReq, &WSAData);
- if (err != 0)
- {
- printf(gettext("No Winsock found, sorry."));
- sleep(5);
- return;
- }
- }
-#endif /* _WINDOWS */
+ /* 1998/09/03 (Thu) 22:02:32 */
+ InitializeCriticalSection(&critSec_DNS);
+ InitializeCriticalSection(&critSec_READ);
-#ifdef __DJGPP__
- if (LY_get_ctrl_break() == 0) {
- LY_set_ctrl_break(TRUE);
- init_ctrl_break[0] = 0;
- } else {
- init_ctrl_break[0] = 1;
- }
- atexit(reset_break);
- dbug_init();
- sock_init();
-#endif
+ #endif /* _WINDOWS */
- /*
- * To prevent corrupting binary data on DOS, MS-WINDOWS or OS/2
- * we open files and stdout in BINARY mode by default.
- * Where necessary we should open and (close!) TEXT mode.
- * (use LYNewTxtFile/LYAppendToTxtFile to open text files for writing)
- */
- SetDefaultMode(O_BINARY);
- SetOutputMode(O_BINARY);
+ #if defined(__CYGWIN__) && defined(DOSPATH)
+ if (strcmp(ttyname(fileno(stdout)), "/dev/conout") != 0) {
+ printf("please \"$CYGWIN=notty\"\n");
+ exit(EXIT_SUCCESS);
+ }
+ #endif
-#ifdef DOSPATH
- if (getenv("TERM")==NULL) putenv("TERM=vt100");
-#endif
+ #if defined(WIN_EX)
+ /* 1997/10/19 (Sun) 21:40:54 */
+ system_is_NT = (BOOL) is_windows_nt();
- LYShowColor = (SHOW_COLOR ? SHOW_COLOR_ON : SHOW_COLOR_OFF);
- /*
- * Set up the argument list.
- */
- pgm = argv[0];
- if ((cp = strrchr(pgm, '/')) != NULL) {
- pgm = cp + 1;
- }
+ /* 1998/01/13 (Tue) 21:13:47 */
+ GetWindowsDirectory(filename, sizeof filename);
+ windows_drive[0] = filename[0];
+ windows_drive[1] = filename[1];
+ windows_drive[2] = '\0';
+ #endif
- /*
- * Act on -help NOW, so we only output the help and exit. - FM
- */
- for (i = 1; i < argc; i++) {
- if (argncmp(argv[i], "-help") == 0) {
- parse_arg(&argv[i], &i);
- }
- }
-#ifdef LY_FIND_LEAKS
- /*
- * Register the final function to be executed when being exited.
- * Will display memory leaks if LY_FIND_LEAKS is defined.
- */
- atexit(LYLeaks);
- /*
- * Register the function which will free our allocated globals.
- */
- atexit(free_lynx_globals);
-#endif /* LY_FIND_LEAKS */
+ #ifdef __DJGPP__
+ if (LY_get_ctrl_break() == 0) {
+ LY_set_ctrl_break(TRUE);
+ init_ctrl_break[0] = 0;
+ } else {
+ init_ctrl_break[0] = 1;
+ }
+ atexit(reset_break);
+ #endif /* __DJGPP__ */
+ /*
+ * To prevent corrupting binary data on DOS, MS-WINDOWS or OS/2
+ * we open files and stdout in BINARY mode by default.
+ * Where necessary we should open and (close!) TEXT mode.
+ * (use LYNewTxtFile/LYAppendToTxtFile to open text files for writing)
+ */
+ SetDefaultMode(O_BINARY);
+ SetOutputMode(O_BINARY);
-#ifdef LOCALE
- /*
- * LOCALE support for international characters.
- */
- setlocale(LC_ALL, "");
-#endif /* LOCALE */
- /* Set the text message domain. */
-#ifdef HAVE_LIBINTL_H
-#ifndef __DJGPP__
- bindtextdomain ("lynx", LOCALEDIR);
-#endif /* !__DJGPP__ */
- textdomain ("lynx");
-#endif /* HAVE_LIBINTL_H */
+ #ifdef DOSPATH
+ if (getenv("TERM")==NULL) putenv("TERM=vt100");
+ #endif
- /*
- * Initialize our startup and global variables.
- */
-#ifdef ULTRIX
- /*
- * Need this for Ultrix.
- */
- terminal = getenv("TERM");
- if ((terminal == NULL) || !strncasecomp(terminal, "xterm", 5))
- terminal = "vt100";
-#endif /* ULTRIX */
- /*
- * Zero the links and history struct arrays.
- */
- memset((void *)links, 0, sizeof(linkstruct)*MAXLINKS);
- memset((void *)history, 0, sizeof(histstruct)*MAXHIST);
- /*
- * Zero the MultiBookmark arrays.
- */
- memset((void *)MBM_A_subbookmark, 0, sizeof(char)*(MBM_V_MAXFILES+1));
- memset((void *)MBM_A_subdescript, 0, sizeof(char)*(MBM_V_MAXFILES+1));
-#ifndef VMS
-#ifdef SYSLOG_REQUESTED_URLS
- openlog("lynx", LOG_PID, LOG_LOCAL5);
-#endif /* SYSLOG_REQUESTED_URLS */
- StrAllocCopy(list_format, LIST_FORMAT);
-#endif /* !VMS */
- InfoSecs = (int)INFOSECS;
- MessageSecs = (int)MESSAGESECS;
- AlertSecs = (int)ALERTSECS;
- StrAllocCopy(helpfile, HELPFILE);
- StrAllocCopy(startfile, STARTFILE);
- LYEscapeStartfile(&startfile);
- StrAllocCopy(indexfile, DEFAULT_INDEX_FILE);
- StrAllocCopy(global_type_map, GLOBAL_MAILCAP);
- StrAllocCopy(personal_type_map, PERSONAL_MAILCAP);
- StrAllocCopy(global_extension_map, GLOBAL_EXTENSION_MAP);
- StrAllocCopy(personal_extension_map, PERSONAL_EXTENSION_MAP);
- StrAllocCopy(language, PREFERRED_LANGUAGE);
- StrAllocCopy(pref_charset, PREFERRED_CHARSET);
- StrAllocCopy(system_mail, SYSTEM_MAIL);
- StrAllocCopy(system_mail_flags, SYSTEM_MAIL_FLAGS);
- StrAllocCopy(LYUserAgent, LYNX_NAME);
- StrAllocCat(LYUserAgent, "/");
- StrAllocCat(LYUserAgent, LYNX_VERSION);
- if (HTLibraryVersion) {
- StrAllocCat(LYUserAgent, " libwww-FM/");
- StrAllocCat(LYUserAgent, HTLibraryVersion);
- }
- StrAllocCopy(LYUserAgentDefault, LYUserAgent);
-#ifdef VMS
- Define_VMSLogical("LYNX_VERSION", LYNX_VERSION);
+ LYShowColor = (SHOW_COLOR ? SHOW_COLOR_ON : SHOW_COLOR_OFF);
+ /*
+ * Set up the argument list.
+ */
+ pgm = argv[0];
+ cp = NULL;
+ #ifdef DOSPATH
+ if ((cp = strrchr(pgm, '\\')) != NULL) {
+ pgm = cp + 1;
+ } else if (cp == NULL)
+ #endif
+ if ((cp = strrchr(pgm, '/')) != NULL) {
+ pgm = cp + 1;
+ }
+
+ /*
+ * Act on -help NOW, so we only output the help and exit. - FM
+ */
+ for (i = 1; i < argc; i++) {
+ if (argncmp(argv[i], "-help") == 0) {
+ parse_arg(&argv[i], 1, &i);
+ }
+ #ifdef SH_EX
+ if (strncmp(argv[i], "-show_cfg", 9) == 0) {
+ show_cfg = TRUE;
+ }
+ #endif
+ }
+
+ #ifdef LY_FIND_LEAKS
+ /*
+ * Register the final function to be executed when being exited.
+ * Will display memory leaks if LY_FIND_LEAKS is defined.
+ */
+ atexit(LYLeaks);
+ /*
+ * Register the function which will free our allocated globals.
+ */
+ atexit(free_lynx_globals);
+ #endif /* LY_FIND_LEAKS */
+
+
+ #ifdef LOCALE
+ /*
+ * LOCALE support for international characters.
+ */
+ setlocale(LC_ALL, "");
+ #endif /* LOCALE */
+ /* Set the text message domain. */
+ #ifdef HAVE_LIBINTL_H
+ #ifndef __DJGPP__
+ bindtextdomain ("lynx", LOCALEDIR);
+ #endif /* !__DJGPP__ */
+ textdomain ("lynx");
+ #endif /* HAVE_LIBINTL_H */
+
+ /*
+ * Initialize our startup and global variables.
+ */
+ #ifdef ULTRIX
+ /*
+ * Need this for Ultrix.
+ */
+ terminal = getenv("TERM");
+ if ((terminal == NULL) || !strncasecomp(terminal, "xterm", 5))
+ terminal = "vt100";
+ #endif /* ULTRIX */
+ /*
+ * Zero the links and history struct arrays.
+ */
+ memset((void *)links, 0, sizeof(linkstruct)*MAXLINKS);
+ memset((void *)history, 0, sizeof(histstruct)*MAXHIST);
+ /*
+ * Zero the MultiBookmark arrays.
+ */
+ memset((void *)MBM_A_subbookmark, 0, sizeof(char)*(MBM_V_MAXFILES+1));
+ memset((void *)MBM_A_subdescript, 0, sizeof(char)*(MBM_V_MAXFILES+1));
+ #ifndef VMS
+ StrAllocCopy(list_format, LIST_FORMAT);
+ #endif /* !VMS */
+
+ #ifdef HAVE_NAPMS
+ #define SECS2Secs(n) (1000 * (n))
+ #else
+ #define SECS2Secs(n) (n)
+ #endif
+ InfoSecs = SECS2Secs(INFOSECS);
+ MessageSecs = SECS2Secs(MESSAGESECS);
+ AlertSecs = SECS2Secs(ALERTSECS);
+
+ StrAllocCopy(helpfile, HELPFILE);
+ StrAllocCopy(startfile, STARTFILE);
+ LYEscapeStartfile(&startfile);
+ StrAllocCopy(indexfile, DEFAULT_INDEX_FILE);
+ StrAllocCopy(global_type_map, GLOBAL_MAILCAP);
+ StrAllocCopy(personal_type_map, PERSONAL_MAILCAP);
+ StrAllocCopy(global_extension_map, GLOBAL_EXTENSION_MAP);
+ StrAllocCopy(personal_extension_map, PERSONAL_EXTENSION_MAP);
+ StrAllocCopy(language, PREFERRED_LANGUAGE);
+ StrAllocCopy(pref_charset, PREFERRED_CHARSET);
+ StrAllocCopy(system_mail, SYSTEM_MAIL);
+ StrAllocCopy(system_mail_flags, SYSTEM_MAIL_FLAGS);
+ StrAllocCopy(LYUserAgent, LYNX_NAME);
+ StrAllocCat(LYUserAgent, "/");
+ StrAllocCat(LYUserAgent, LYNX_VERSION);
+ if (HTLibraryVersion) {
+ StrAllocCat(LYUserAgent, " libwww-FM/");
+ StrAllocCat(LYUserAgent, HTLibraryVersion);
+ }
+ #ifdef USE_SSL
+ StrAllocCat(LYUserAgent, " SSL-MM/1.4.1");
+ #ifdef OPENSSL_VERSION_TEXT
+ LYstrncpy(SSLLibraryVersion, OPENSSL_VERSION_TEXT, sizeof(SSLLibraryVersion)-1);
+ if ((SSLcp = strchr(SSLLibraryVersion, ' ')) != NULL) {
+ *SSLcp++ = '/';
+ if ((SSLcp = strchr(SSLcp, ' ')) != NULL) {
+ *SSLcp = '\0';
+ StrAllocCat(LYUserAgent, " ");
+ StrAllocCat(LYUserAgent, SSLLibraryVersion);
+ }
+ }
+ #endif /* OPENSSL_VERSION_TEXT */
+ #endif /* USE_SSL */
+ StrAllocCopy(LYUserAgentDefault, LYUserAgent);
+ #ifdef VMS
+ Define_VMSLogical("LYNX_VERSION", LYNX_VERSION);
#else
StrAllocCopy(lynx_version_putenv_command, "LYNX_VERSION=");
StrAllocCat(lynx_version_putenv_command, LYNX_VERSION);
@@ -833,9 +1098,9 @@ PUBLIC int main ARGS2(
#endif
#if defined (DOSPATH) || defined (__EMX__)
else if ((cp = getenv("TEMP")) != NULL)
- StrAllocCopy(lynx_temp_space, HTDOS_name(cp));
+ StrAllocCopy(lynx_temp_space, HTSYS_name(cp));
else if ((cp = getenv("TMP")) != NULL)
- StrAllocCopy(lynx_temp_space, HTDOS_name(cp));
+ StrAllocCopy(lynx_temp_space, HTSYS_name(cp));
#endif
else
#ifdef TEMP_SPACE
@@ -843,23 +1108,19 @@ PUBLIC int main ARGS2(
#else
{
printf(gettext("You MUST define a valid TMP or TEMP area!\n"));
- exit(-1);
+ exit(EXIT_FAILURE);
}
#endif
- if ((cp = strchr(lynx_temp_space, '~'))) {
- *(cp++) = '\0';
- StrAllocCopy(temp, lynx_temp_space);
- LYTrimPathSep(temp);
- StrAllocCat(temp, wwwName(Home_Dir()));
- StrAllocCat(temp, cp);
- StrAllocCopy(lynx_temp_space, temp);
- FREE(temp);
- }
+#ifdef WIN_EX /* for Windows 2000 ... 1999/08/23 (Mon) 08:24:35 */
+ if (access(lynx_temp_space, 0) != 0)
+#endif
+ tildeExpand(&lynx_temp_space, TRUE);
+
if ((cp = strstr(lynx_temp_space, "$USER")) != NULL) {
char *cp1;
- if ((cp1 = (char *)getenv("USER")) != NULL) {
+ if ((cp1 = getenv("USER")) != NULL) {
*cp = '\0';
StrAllocCopy(temp, lynx_temp_space);
*cp = '$';
@@ -870,8 +1131,9 @@ PUBLIC int main ARGS2(
FREE(temp);
}
}
- StrAllocCat(lynx_temp_space, "/lynx-XXXXXX");
+ StrAllocCat(lynx_temp_space, "/lynx-XXXXXXXXXX");
lynx_temp_space = mkdtemp(lynx_temp_space);
+
#ifdef VMS
LYLowerCase(lynx_temp_space);
if (strchr(lynx_temp_space, '/') != NULL) {
@@ -891,22 +1153,48 @@ PUBLIC int main ARGS2(
#else
LYAddPathSep(&lynx_temp_space);
#endif /* VMS */
+
+ if ((HTStat(lynx_temp_space, &dir_info) < 0
+#ifdef UNIX
+ && mkdir(lynx_temp_space, 0700) < 0
+#endif
+ )
+ || !S_ISDIR(dir_info.st_mode)) {
+ fprintf(stderr, "%s: %s\n",
+ lynx_temp_space,
+ gettext("No such directory"));
+ exit_immediately(EXIT_FAILURE);
+ }
+
#ifdef VMS
- StrAllocCopy(mail_adrs, MAIL_ADRS);
#ifdef CSWING_PATH
StrAllocCopy(LYCSwingPath, CSWING_PATH);
#endif /* CSWING_PATH */
#endif /* VMS */
+
+#if USE_VMS_MAILER
+#ifndef MAIL_ADRS
+#define MAIL_ADRS "\"IN%%\"\"%s\"\"\""
+#endif
+ StrAllocCopy(mail_adrs, MAIL_ADRS);
+#endif
+
#ifdef LYNX_HOST_NAME
StrAllocCopy(LYHostName, LYNX_HOST_NAME);
#else
StrAllocCopy(LYHostName, HTHostName());
#endif /* LYNX_HOST_NAME */
+
StrAllocCopy(LYLocalDomain, LOCAL_DOMAIN);
StrAllocCopy(URLDomainPrefixes, URL_DOMAIN_PREFIXES);
StrAllocCopy(URLDomainSuffixes, URL_DOMAIN_SUFFIXES);
StrAllocCopy(XLoadImageCommand, XLOADIMAGE_COMMAND);
+#ifndef DISABLE_BIBP
+ StrAllocCopy(BibP_globalserver, BIBP_GLOBAL_SERVER);
+ StrAllocCopy(BibP_bibhost, "http://bibhost/"); /* protocol specified. */
+#endif
+
/*
* Disable news posting if the compilation-based
* LYNewsPosting value is FALSE. This may be changed
@@ -914,7 +1202,7 @@ PUBLIC int main ARGS2(
* command line switch. - FM
*/
#ifndef DISABLE_NEWS
- no_newspost = (LYNewsPosting == FALSE);
+ no_newspost = (BOOL) (LYNewsPosting == FALSE);
#endif
/*
@@ -924,48 +1212,13 @@ PUBLIC int main ARGS2(
* file, if specified, NOW. Also, if we only want
* the help menu, output that and exit. - FM
*/
- for (i = 1; i < argc; i++) {
- if (argncmp(argv[i], "-trace") == 0) {
- WWW_TraceFlag = TRUE;
- } else if (argncmp(argv[i], "-tlog") == 0) {
- if (LYUseTraceLog) {
- LYUseTraceLog = FALSE;
- } else {
- LYUseTraceLog = TRUE;
- }
- } else if (argncmp(argv[i], "-anonymous") == 0) {
- if (!LYValidate)
- parse_restrictions("default");
- LYRestricted = TRUE;
- } else if (argcmp(argv[i], "-validate") == 0) {
- /*
- * Follow only http URLs.
- */
- LYValidate = TRUE;
-#ifdef SOCKS
- } else if (argncmp(argv[i], "-nosocks") == 0) {
- socks_flag = FALSE;
-#endif /* SOCKS */
- } else if (argncmp(argv[i], "-cfg") == 0) {
- if ((cp=strchr(argv[i],'=')) != NULL)
- StrAllocCopy(lynx_cfg_file, cp+1);
- else {
- StrAllocCopy(lynx_cfg_file, argv[i+1]);
- i++;
- }
-
-#if defined(USE_HASH)
- } else if (argncmp(argv[i], "-lss") == 0) {
- if ((cp=strchr(argv[i],'=')) != NULL)
- StrAllocCopy(lynx_lss_file, cp+1);
- else {
- StrAllocCopy(lynx_lss_file, argv[i+1]);
- i++;
- }
- CTRACE(tfp, "LYMain found -lss flag, lss file is %s\n",
- lynx_lss_file ? lynx_lss_file : "<NONE>");
+#ifndef NO_LYNX_TRACE
+ if (getenv("LYNX_TRACE") != 0) {
+ WWW_TraceFlag = TRUE;
+ }
#endif
- }
+ for (i = 1; i < argc; i++) {
+ parse_arg(&argv[i], 2, &i);
}
/*
@@ -980,146 +1233,28 @@ PUBLIC int main ARGS2(
* arguments. When interactive, the stdin input is terminated by
* by Control-D on Unix or Control-Z on VMS, and each argument
* is terminated by a RETURN. When the argument is -get_data or
- * -post_data, the data are terminate by a "___" string, alone
+ * -post_data, the data are terminated by a "---" string, alone
* on the line (also terminated by RETURN). - FM
*/
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "-") == 0) {
LYGetStdinArgs = TRUE;
+ break;
}
}
if (LYGetStdinArgs == TRUE) {
char *buf = NULL;
- while (LYSafeGets(&buf, stdin) != 0) {
- int j;
+ CTRACE((tfp, "processing stdin arguments\n"));
+ while (GetStdin(&buf, TRUE)) {
+ char *noargv[2];
- for (j = strlen(buf) - 1; j > 0 &&
- (buf[j] == CR || buf[j] == LF); j--) {
- buf[j] = '\0';
- }
+ noargv[0] = buf;
+ noargv[1] = NULL;
+ LYTrimTrailing(buf);
- if (argncmp(buf, "-trace") == 0) {
- WWW_TraceFlag = TRUE;
- } else if (argncmp(buf, "-tlog") == 0) {
- if (LYUseTraceLog) {
- LYUseTraceLog = FALSE;
- } else {
- LYUseTraceLog = TRUE;
- }
- } else if (argncmp(buf, "-anonymous") == 0) {
- if (!LYValidate && !LYRestricted)
- parse_restrictions("default");
- LYRestricted = TRUE;
- } else if (argcmp(buf, "-validate") == 0) {
- /*
- * Follow only http URLs.
- */
- LYValidate = TRUE;
-#ifdef SOCKS
- } else if (argncmp(buf, "-nosocks") == 0) {
- socks_flag = FALSE;
-#endif /* SOCKS */
- } else if (argncmp(buf, "-cfg") == 0) {
- if ((cp = strchr(buf,'=')) != NULL) {
- StrAllocCopy(lynx_cfg_file, cp+1);
- } else {
- cp = LYSkipNonBlanks(buf);
- cp = LYSkipBlanks(cp);
- if (*cp)
- StrAllocCopy(lynx_cfg_file, cp);
- }
-#if defined(USE_HASH)
- } else if (argncmp(buf, "-lss") == 0) {
- if ((cp = strchr(buf,'=')) != NULL) {
- StrAllocCopy(lynx_lss_file, cp+1);
- } else {
- cp = LYSkipNonBlanks(buf);
- cp = LYSkipBlanks(cp);
- if (*cp)
- StrAllocCopy(lynx_lss_file, cp);
- }
- CTRACE(tfp, "LYMain found -lss flag, lss file is %s\n",
- lynx_lss_file ? lynx_lss_file : "<NONE>");
-#endif
- } else if (argcmp(buf, "-get_data") == 0) {
- /*
- * User data for GET form.
- */
- char **get_data;
-
- /*
- * On Unix, conflicts with curses when interactive
- * so let's force a dump. - CL
- *
- * On VMS, mods have been made in LYCurses.c to deal
- * with potential conflicts, so don't force the dump
- * here. - FM
- */
-#ifndef VMS
- dump_output_immediately = TRUE;
- LYcols = 80;
-#endif /* VMS */
-
- StrAllocCopy(form_get_data, "?"); /* Prime the pump */
- get_data = &form_get_data;
-
- /*
- * Build GET data for later. Stop reading when we see
- * a line with "---" as its first three characters.
- */
- while (LYSafeGets(&buf, stdin) != 0 &&
- strncmp(buf, "---", 3) != 0) {
- int j2;
-
- /*
- * Strip line terminators.
- */
- for (j2 = strlen(buf) - 1; j2 >= 0 &&
- (buf[j2] == CR || buf[j2] == LF); j2--) {
- buf[j2] = '\0';
- }
- StrAllocCat(*get_data, buf);
- }
- } else if (argcmp(buf, "-post_data") == 0) {
- /*
- * User data for POST form.
- */
- char **post_data;
-
- /*
- * On Unix, conflicts with curses when interactive
- * so let's force a dump. - CL
- *
- * On VMS, mods have been made in LYCurses.c to deal
- * with potential conflicts, so don't force a dump
- * here. - FM
- */
-#ifndef VMS
- dump_output_immediately = TRUE;
- LYcols = 80;
-#endif /* VMS */
-
- post_data = &form_post_data;
-
- /*
- * Build post data for later. Stop reading when we see
- * a line with "---" as its first three characters.
- */
- while (LYSafeGets(&buf, stdin) != 0 &&
- strncmp(buf, "---", 3) != 0) {
- int j2;
-
- /*
- * Strip line terminators.
- */
- for (j2 = strlen(buf) - 1; j2 >= 0 &&
- (buf[j2] == CR || buf[j2] == LF); j2--) {
- buf[j2] = '\0';
- }
- StrAllocCat(*post_data, buf);
- }
- } else if (buf[0] != '\0') {
+ if (parse_arg(&noargv[0], 2, (int *)0) == FALSE
+ && buf[0] != '\0') {
char *argument = NULL;
if (LYStdinArgs == NULL) {
@@ -1130,8 +1265,12 @@ PUBLIC int main ARGS2(
}
StrAllocCopy(argument, buf);
HTList_appendObject(LYStdinArgs, argument);
+ CTRACE((tfp, "...StdinArg:%s\n", argument));
+ } else {
+ CTRACE((tfp, "...complete:%s\n", buf));
}
}
+ CTRACE((tfp, "...done with stdin arguments\n"));
FREE(buf);
}
@@ -1156,18 +1295,18 @@ PUBLIC int main ARGS2(
* a TRACE log NOW. - FM
*/
if (!LYValidate && !LYRestricted &&
- strlen((char *)ANONYMOUS_USER) > 0 &&
+ strlen(ANONYMOUS_USER) > 0 &&
#if defined (VMS) || defined (NOUSERS)
- !strcasecomp(((char *)getenv("USER")==NULL ? " " : getenv("USER")),
- ANONYMOUS_USER))
+ !strcasecomp((getenv("USER")==NULL ? " " : getenv("USER")),
+ ANONYMOUS_USER)
#else
#if HAVE_CUSERID
- STREQ((char *)cuserid((char *) NULL), ANONYMOUS_USER))
+ STREQ((char *)cuserid((char *) NULL), ANONYMOUS_USER)
#else
- STREQ(((char *)getlogin()==NULL ? " " : getlogin()), ANONYMOUS_USER))
+ STREQ(((char *)getlogin()==NULL ? " " : getlogin()), ANONYMOUS_USER)
#endif /* HAVE_CUSERID */
#endif /* VMS */
- {
+ ) {
parse_restrictions("default");
LYRestricted = TRUE;
LYUseTraceLog = FALSE;
@@ -1176,9 +1315,33 @@ PUBLIC int main ARGS2(
/*
* Set up the TRACE log path, and logging if appropriate. - FM
*/
- LYAddPathToHome(LYTraceLogPath = malloc(LY_MAXPATH), LY_MAXPATH, "Lynx.trace");
+#ifdef FNAMES_8_3
+ LYAddPathToHome(LYTraceLogPath =
+ malloc(LY_MAXPATH), LY_MAXPATH, "LY-TRACE.LOG");
+#else
+ LYAddPathToHome(LYTraceLogPath =
+ malloc(LY_MAXPATH), LY_MAXPATH, "Lynx.trace");
+#endif
+
LYOpenTraceLog();
+#ifdef EXP_CMD_LOGGING
+ /*
+ * Open command-script, if specified
+ */
+ if (lynx_cmd_script != 0) {
+ tildeExpand(&lynx_cmd_script, TRUE);
+ LYOpenCmdScript();
+ }
+ /*
+ * Open command-logging, if specified
+ */
+ if (lynx_cmd_logfile != 0) {
+ tildeExpand(&lynx_cmd_logfile, TRUE);
+ LYOpenCmdLogfile(argc, argv);
+ }
+#endif
+
/*
* Set up the default jump file stuff. - FM
*/
@@ -1186,16 +1349,12 @@ PUBLIC int main ARGS2(
#ifdef JUMPFILE
StrAllocCopy(jumpfile, JUMPFILE);
{
- temp = (char *)malloc(strlen(jumpfile) + 10);
- if (!temp) {
- outofmem(__FILE__, "main");
- } else {
- sprintf(temp, "JUMPFILE:%s", jumpfile);
- if (!LYJumpInit(temp)) {
- CTRACE(tfp, "Failed to register %s\n", temp);
- }
- FREE(temp);
+ temp = NULL;
+ HTSprintf0(&temp, "JUMPFILE:%s", jumpfile);
+ if (!LYJumpInit(temp)) {
+ CTRACE((tfp, "Failed to register %s\n", temp));
}
+ FREE(temp);
}
#endif /* JUMPFILE */
@@ -1216,39 +1375,19 @@ PUBLIC int main ARGS2(
if (!lynx_cfg_file)
StrAllocCopy(lynx_cfg_file, LYNX_CFG_FILE);
- /*
- * Convert a '~' in the configuration file path to $HOME.
- */
#ifndef _WINDOWS /* avoid the whole ~ thing for now */
- /* I think this should only be performed if lynx_cfg_file starts with ~/ */
- if ((lynx_cfg_file[0] == '~') && LYIsPathSep(lynx_cfg_file[1]))
- {
-#ifdef VMS
- StrAllocCopy(temp, HTVMS_wwwName((char *)Home_Dir()));
-#else
- StrAllocCopy(temp, Home_Dir());
-#endif /* VMS */
- StrAllocCat(temp, lynx_cfg_file + 1);
- StrAllocCopy(lynx_cfg_file, temp);
- FREE(temp);
- }
+ tildeExpand(&lynx_cfg_file, FALSE);
#endif
/*
* If the configuration file is not available,
* inform the user and exit.
*/
- if ((fp = fopen(lynx_cfg_file, "r")) == NULL) {
+ if (!LYCanReadFile(lynx_cfg_file)) {
fprintf(stderr, gettext("\nConfiguration file %s is not available.\n\n"),
lynx_cfg_file);
- exit(-1);
+ exit(EXIT_FAILURE);
}
- fclose(fp);
-
-#if defined(USE_KEYMAPS) && defined(USE_SLANG)
- if (-1 == lynx_initialize_keymaps ())
- exit (-1);
-#endif
/*
* Make sure we have the character sets declared.
@@ -1256,7 +1395,7 @@ PUBLIC int main ARGS2(
*/
if (!LYCharSetsDeclared()) {
fprintf(stderr, gettext("\nLynx character sets not declared.\n\n"));
- exit(-1);
+ exit(EXIT_FAILURE);
}
/*
* (**) in Lynx, UCLYhndl_HTFile_for_unspec and UCLYhndl_for_unrec may be
@@ -1267,23 +1406,28 @@ PUBLIC int main ARGS2(
/*
* Set up the compilation default character set. - FM
*/
+#ifdef CAN_AUTODETECT_DISPLAY_CHARSET
+ if (auto_display_charset >= 0)
+ current_char_set = auto_display_charset;
+ else
+#endif
current_char_set = safeUCGetLYhndl_byMIME(CHARACTER_SET);
/*
* Set up HTTP default for unlabeled charset (iso-8859-1).
*/
UCLYhndl_for_unspec = LATIN1;
StrAllocCopy(UCAssume_MIMEcharset,
- LYCharSet_UC[UCLYhndl_for_unspec].MIMEname);
+ LYCharSet_UC[UCLYhndl_for_unspec].MIMEname);
/*
* Make sure we have the edit map declared. - FM
*/
if (!LYEditmapDeclared()) {
fprintf(stderr, gettext("\nLynx edit map not declared.\n\n"));
- exit(-1);
+ exit(EXIT_FAILURE);
}
-#if defined(USE_HASH)
+#if defined(USE_COLOR_STYLE)
/*
* If no alternate lynx-style file was specified on
* the command line, see if it's in the environment.
@@ -1301,38 +1445,23 @@ PUBLIC int main ARGS2(
if (!lynx_lss_file)
StrAllocCopy(lynx_lss_file, LYNX_LSS_FILE);
- /*
- * Convert a '~' in the lynx-style file path to $HOME.
- */
- if ((cp = strchr(lynx_lss_file, '~'))) {
- *(cp++) = '\0';
- StrAllocCopy(temp, lynx_lss_file);
- LYTrimPathSep(temp);
-#ifdef VMS
- StrAllocCat(temp, HTVMS_wwwName((char *)Home_Dir()));
-#else
- StrAllocCat(temp, Home_Dir());
-#endif /* VMS */
- StrAllocCat(temp, cp);
- StrAllocCopy(lynx_lss_file, temp);
- FREE(temp);
- }
+ tildeExpand(&lynx_lss_file, TRUE);
+
/*
* If the lynx-style file is not available,
* inform the user and exit.
*/
- if ((fp = fopen(lynx_lss_file, "r")) == NULL) {
+ if (!LYCanReadFile(lynx_lss_file)) {
fprintf(stderr, gettext("\nLynx file %s is not available.\n\n"),
lynx_lss_file);
}
else
{
- fclose(fp);
style_readFromFile(lynx_lss_file);
}
-#endif /* USE_HASH */
+#endif /* USE_COLOR_STYLE */
-#if USE_COLOR_TABLE
+#ifdef USE_COLOR_TABLE
/*
* Set up default foreground and background colors.
*/
@@ -1352,17 +1481,17 @@ PUBLIC int main ARGS2(
/*
* Set the compilation default signature file. - FM
*/
- strcpy(filename, LYNX_SIG_FILE);
+ LYstrncpy(filename, LYNX_SIG_FILE, sizeof(filename)-1);
if (LYPathOffHomeOK(filename, sizeof(filename))) {
StrAllocCopy(LynxSigFile, filename);
LYAddPathToHome(filename, sizeof(filename), LynxSigFile);
StrAllocCopy(LynxSigFile, filename);
- CTRACE(tfp, "LYNX_SIG_FILE set to '%s'\n", LynxSigFile);
+ CTRACE((tfp, "LYNX_SIG_FILE set to '%s'\n", LynxSigFile));
} else {
- CTRACE(tfp, "LYNX_SIG_FILE '%s' is bad. Ignoring.\n", LYNX_SIG_FILE);
+ CTRACE((tfp, "LYNX_SIG_FILE '%s' is bad. Ignoring.\n", LYNX_SIG_FILE));
}
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
/*this is required for checking the tagspecs when parsing cfg file by
LYReadCFG.c:parse_html_src_spec -HV */
HTSwitchDTD(TRUE);
@@ -1375,7 +1504,7 @@ PUBLIC int main ARGS2(
/*
* Process the RC file.
*/
- read_rc();
+ read_rc(NULL);
/*
* Get WWW_HOME environment variable if it exists.
@@ -1398,7 +1527,7 @@ PUBLIC int main ARGS2(
* Process any command line arguments not already handled. - FM
*/
for (i = 1; i < argc; i++) {
- parse_arg(&argv[i], &i);
+ parse_arg(&argv[i], 4, &i);
}
/*
@@ -1411,16 +1540,74 @@ PUBLIC int main ARGS2(
my_args[1] = NULL;
while (NULL != (my_args[0] = (char *)HTList_nextObject(cur))) {
- parse_arg(my_args, (int *)0);
+ parse_arg(my_args, 4, (int *)0);
}
LYStdinArgs_free();
}
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+ if (current_char_set == auto_display_charset) /* Better: explicit option */
+ switch_display_charsets = 1;
+#endif
+
+#undef TTY_DEVICE
+#undef NUL_DEVICE
+
+#ifdef VMS
+#define TTY_DEVICE "tt:"
+#define NUL_DEVICE "nl:"
+#endif
+
+#ifdef _WINDOWS
+#define TTY_DEVICE "con"
+#define NUL_DEVICE "nul"
+#endif
+
+#ifndef TTY_DEVICE
+#define TTY_DEVICE "/dev/tty"
+#define NUL_DEVICE "/dev/null"
+#endif
+
+#if defined (TTY_DEVICE) || defined(HAVE_TTYNAME)
+ /*
+ * If we are told to read the startfile from standard input, do it now,
+ * after we have read all of the option data from standard input.
+ */
+ if (startfile_stdin) {
+ char result[LY_MAXPATH];
+ char *buf = NULL;
+ char *tty = NULL;
+# ifdef HAVE_TTYNAME
+ tty = ttyname(fileno(stderr));
+# endif
+ if (tty == NULL)
+ tty = isatty(fileno(stdin)) ? TTY_DEVICE : NUL_DEVICE;
+
+ CTRACE((tfp, "processing stdin startfile, tty=%s\n", tty));
+ if ((fp = LYOpenTemp (result, HTML_SUFFIX, "w")) != 0) {
+ StrAllocCopy(startfile, result);
+ while (GetStdin(&buf, FALSE)) {
+ fputs(buf, fp);
+ fputc('\n', fp);
+ }
+ FREE(buf);
+ LYCloseTempFP(fp);
+ }
+ CTRACE((tfp, "...done stdin startfile\n"));
+ if ((freopen(tty, "r", stdin)) == 0) {
+ CTRACE((tfp, "cannot open a terminal (%s)\n", tty));
+ if (!dump_output_immediately) {
+ fprintf(stderr, "cannot open a terminal (%s)\n", tty);
+ exit(1);
+ }
+ }
+ }
+#endif
/*
* Initialize other things based on the configuration read.
*/
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
if ( (!Old_DTD) != TRUE ) /* skip if they are already initialized -HV */
#endif
HTSwitchDTD(!Old_DTD);
@@ -1435,23 +1622,35 @@ PUBLIC int main ARGS2(
/*
* Sod it, this looks like a reasonable place to load the
* cookies file, probably. - RP
+ *
+ * And to set LYCookieSaveFile. - BJP
*/
if (persistent_cookies) {
if(LYCookieFile == NULL) {
- LYAddPathToHome(LYCookieFile = malloc(LY_MAXPATH), LY_MAXPATH, COOKIE_FILE);
+ LYAddPathToHome(LYCookieFile = malloc(LY_MAXPATH), LY_MAXPATH, COOKIE_FILE);
} else {
- if ((cp = strchr(LYCookieFile, '~'))) {
- temp = NULL;
- *(cp++) = '\0';
- StrAllocCopy(temp, cp);
- LYTrimPathSep(temp);
- StrAllocCopy(LYCookieFile, wwwName(Home_Dir()));
- StrAllocCat(LYCookieFile, temp);
- FREE(temp);
- }
+ tildeExpand(&LYCookieFile, FALSE);
}
LYLoadCookies(LYCookieFile);
}
+
+ /* tilde-expand LYCookieSaveFile */
+ if (LYCookieSaveFile != NULL) {
+ tildeExpand(&LYCookieSaveFile, FALSE);
+ }
+
+ /*
+ * In dump_output_immediately mode, LYCookieSaveFile defaults to
+ * /dev/null, otherwise it defaults to LYCookieFile.
+ */
+
+ if (LYCookieSaveFile == NULL) {
+ if (dump_output_immediately) {
+ StrAllocCopy(LYCookieSaveFile, "/dev/null");
+ } else {
+ StrAllocCopy(LYCookieSaveFile, LYCookieFile);
+ }
+ }
#endif
/*
@@ -1477,15 +1676,7 @@ PUBLIC int main ARGS2(
FREE(lynx_save_space);
}
if (lynx_save_space) {
- if ((cp = strchr(lynx_save_space, '~')) != NULL) {
- *(cp++) = '\0';
- StrAllocCopy(temp, lynx_save_space);
- LYTrimPathSep(temp);
- StrAllocCat(temp, wwwName(Home_Dir()));
- StrAllocCat(temp, cp);
- StrAllocCopy(lynx_save_space, temp);
- FREE(temp);
- }
+ tildeExpand(&lynx_save_space, TRUE);
#ifdef VMS
LYLowerCase(lynx_save_space);
if (strchr(lynx_save_space, '/') != NULL) {
@@ -1515,17 +1706,18 @@ PUBLIC int main ARGS2(
* file, if they overlap.
*/
HTFormatInit();
- HTFileInit();
+ if (!FileInitAlreadyDone)
+ HTFileInit();
-#ifndef VMS
-#ifdef SYSLOG_REQUESTED_URLS
- if (syslog_txt) {
- syslog(LOG_INFO, "Session start:%s", syslog_txt);
- } else {
- syslog(LOG_INFO, "Session start");
+ if (!LYCheckUserAgent()) {
+ HTAlwaysAlert(gettext("Warning:"), UA_NO_LYNX_WARNING);
}
-#endif /* SYSLOG_REQUESTED_URLS */
-#endif /* !VMS */
+#ifdef SH_EX
+ if (show_cfg) {
+ cleanup();
+ exit(EXIT_SUCCESS);
+ }
+#endif
#ifdef USE_SLANG
if (LYShowColor >= SHOW_COLOR_ON &&
@@ -1559,29 +1751,34 @@ PUBLIC int main ARGS2(
if (vi_keys)
set_vi_keys();
- if (number_links && keypad_mode == NUMBERS_AS_ARROWS)
- keypad_mode = LINKS_ARE_NUMBERED;
- if (keypad_mode == NUMBERS_AS_ARROWS)
+ if (crawl) {
+ /* No numbered links by default, as documented
+ in CRAWL.announce. - kw */
+ if (!number_links) {
+ keypad_mode = NUMBERS_AS_ARROWS;
+ }
+ }
+
+ if (keypad_mode == NUMBERS_AS_ARROWS) {
+ if (number_fields)
+ keypad_mode = LINKS_AND_FIELDS_ARE_NUMBERED;
+ if (number_links)
+ keypad_mode = LINKS_ARE_NUMBERED;
set_numbers_as_arrows();
+ }
/*
* Check the -popup command line toggle. - FM
*/
if (LYUseDefSelPop == FALSE) {
- if (LYSelectPopups == TRUE)
- LYSelectPopups = FALSE;
- else
- LYSelectPopups = TRUE;
+ LYSelectPopups = !LYSelectPopups;
}
/*
* Check the -show_cursor command line toggle. - FM
*/
if (LYUseDefShoCur == FALSE) {
- if (LYShowCursor == TRUE)
- LYShowCursor = FALSE;
- else
- LYShowCursor = TRUE;
+ LYShowCursor = !LYShowCursor;
}
/*
@@ -1600,7 +1797,7 @@ PUBLIC int main ARGS2(
if (no_multibook)
LYMBMBlocked = TRUE;
if (dump_output_immediately || LYMBMBlocked || no_multibook) {
- LYMultiBookmarks = FALSE;
+ LYMultiBookmarks = MBM_OFF;
LYMBMBlocked = TRUE;
no_multibook = TRUE;
}
@@ -1624,14 +1821,35 @@ PUBLIC int main ARGS2(
set_vms_keys();
#endif /* VMS */
+#if defined (__DJGPP__)
+ if (watt_debug)
+ dbug_init();
+ sock_init();
+
+ __system_flags =
+ __system_emulate_chdir | /* handle `cd' internally */
+ __system_handle_null_commands | /* ignore cmds with no effect */
+ __system_allow_long_cmds | /* handle commands > 126 chars */
+ __system_use_shell | /* use $SHELL if set */
+ __system_allow_multiple_cmds | /* allow `cmd1; cmd2; ...' */
+ __system_redirect; /* redirect internally */
+
+ /* This speeds up stat() tremendously */
+ _djstat_flags |= _STAT_INODE | _STAT_EXEC_MAGIC |_STAT_DIRSIZE;
+#endif /* __DJGPP__ */
+
/* trap interrupts */
+#ifdef WIN32
+ SetConsoleCtrlHandler((PHANDLER_ROUTINE) cleanup_win32, TRUE);
+#endif
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);
+ LYExtSignal(SIGWINCH, size_change);
#endif /* SIGWINCH */
#ifndef VMS
if (!TRACE && !dump_output_immediately && !stack_dump) {
@@ -1653,7 +1871,8 @@ PUBLIC int main ARGS2(
* more.
*/
#ifndef DOSPATH
- (void) signal(SIGPIPE, SIG_IGN);
+ if (signal(SIGPIPE, SIG_IGN) != SIG_IGN)
+ restore_sigpipe_for_children = TRUE;
#endif /* DOSPATH */
}
#endif /* !VMS */
@@ -1663,7 +1882,7 @@ PUBLIC int main ARGS2(
* Block Control-Z suspending if requested. - FM
*/
if (no_suspend)
- (void) signal(SIGTSTP,SIG_IGN);
+ (void) signal(SIGTSTP, SIG_IGN);
#endif /* SIGTSTP */
/*
@@ -1673,7 +1892,7 @@ PUBLIC int main ARGS2(
fprintf(stderr,
"The '-head' switch is for http HEAD requests and cannot be used for\n'%s'.\n",
startfile);
- exit_immediately(-1);
+ exit_immediately(EXIT_FAILURE);
}
/*
@@ -1683,7 +1902,7 @@ PUBLIC int main ARGS2(
fprintf(stderr,
"The '-mime_header' switch is for http URLs and cannot be used for\n'%s'.\n",
startfile);
- exit_immediately(-1);
+ exit_immediately(EXIT_FAILURE);
}
/*
@@ -1693,7 +1912,7 @@ PUBLIC int main ARGS2(
fprintf(stderr,
"The '-traversal' switch is for http URLs and cannot be used for\n'%s'.\n",
startfile);
- exit_immediately(-1);
+ exit_immediately(EXIT_FAILURE);
}
/*
@@ -1701,9 +1920,13 @@ PUBLIC int main ARGS2(
* Done here so that URL guessing in LYEnsureAbsoluteURL() can be
* interruptible (terminal is in raw mode, select() works). -BL
*/
-#ifdef USE_PSRC
- if (!dump_output_immediately)
- HTMLSRC_init_caches(); /* do it before terminal is initialized*/
+#ifdef USE_PRETTYSRC
+ if (!dump_output_immediately) {
+ HTMLSRC_init_caches(FALSE); /* do it before terminal is initialized*/
+#ifdef LY_FIND_LEAKS
+ atexit(html_src_clean_data);
+#endif
+ }
#endif
if (!dump_output_immediately) {
@@ -1743,29 +1966,29 @@ PUBLIC int main ARGS2(
*/
if (inlocaldomain()) {
#if !defined(HAVE_UTMP) || defined(VMS) /* not selective */
- telnet_ok = !no_inside_telnet && !no_outside_telnet && telnet_ok;
+ telnet_ok = (BOOL)(!no_inside_telnet && !no_outside_telnet && telnet_ok);
#ifndef DISABLE_NEWS
- news_ok = !no_inside_news && !no_outside_news && news_ok;
+ news_ok = (BOOL)(!no_inside_news && !no_outside_news && news_ok);
#endif
- ftp_ok = !no_inside_ftp && !no_outside_ftp && ftp_ok;
- rlogin_ok = !no_inside_rlogin && !no_outside_rlogin && rlogin_ok;
+ ftp_ok = (BOOL)(!no_inside_ftp && !no_outside_ftp && ftp_ok);
+ rlogin_ok = (BOOL)(!no_inside_rlogin && !no_outside_rlogin && rlogin_ok);
#else
- CTRACE(tfp,"LYMain.c: User in Local domain\n");
- telnet_ok = !no_inside_telnet && telnet_ok;
+ CTRACE((tfp, "LYMain: User in Local domain\n"));
+ telnet_ok = (BOOL)(!no_inside_telnet && telnet_ok);
#ifndef DISABLE_NEWS
- news_ok = !no_inside_news && news_ok;
+ news_ok = (BOOL)(!no_inside_news && news_ok);
#endif
- ftp_ok = !no_inside_ftp && ftp_ok;
- rlogin_ok = !no_inside_rlogin && rlogin_ok;
+ ftp_ok = (BOOL)(!no_inside_ftp && ftp_ok);
+ rlogin_ok = (BOOL)(!no_inside_rlogin && rlogin_ok);
#endif /* !HAVE_UTMP || VMS */
} else {
- CTRACE(tfp,"LYMain.c: User in REMOTE domain\n");
- telnet_ok = !no_outside_telnet && telnet_ok;
+ CTRACE((tfp, "LYMain: User in REMOTE domain\n"));
+ telnet_ok = (BOOL)(!no_outside_telnet && telnet_ok);
#ifndef DISABLE_NEWS
- news_ok = !no_outside_news && news_ok;
+ news_ok = (BOOL)(!no_outside_news && news_ok);
#endif
- ftp_ok = !no_outside_ftp && ftp_ok;
- rlogin_ok = !no_outside_rlogin && rlogin_ok;
+ ftp_ok = (BOOL)(!no_outside_ftp && ftp_ok);
+ rlogin_ok = (BOOL)(!no_outside_rlogin && rlogin_ok);
}
/*
@@ -1773,18 +1996,19 @@ PUBLIC int main ARGS2(
* are all allocated and synchronized. - FM
*/
if (!bookmark_page || *bookmark_page == '\0') {
- StrAllocCopy(bookmark_page, "lynx_bookmarks");
- StrAllocCat(bookmark_page, HTML_SUFFIX);
- StrAllocCopy(BookmarkPage, bookmark_page);
- StrAllocCopy(MBM_A_subbookmark[0], bookmark_page);
- StrAllocCopy(MBM_A_subdescript[0], "Default");
+ temp = NULL;
+ HTSprintf0(&temp, "lynx_bookmarks%s", HTML_SUFFIX);
+ set_default_bookmark_page(temp);
+ FREE(temp);
}
if (!BookmarkPage || *BookmarkPage == '\0') {
- StrAllocCopy(BookmarkPage, bookmark_page);
- StrAllocCopy(MBM_A_subbookmark[0], bookmark_page);
- StrAllocCopy(MBM_A_subdescript[0], MULTIBOOKMARKS_DEFAULT);
+ set_default_bookmark_page(bookmark_page);
}
+#if !defined(VMS) && defined(SYSLOG_REQUESTED_URLS)
+ LYOpenlog (syslog_txt);
+#endif
+
/*
* Here's where we do all the work.
*/
@@ -1793,13 +2017,17 @@ PUBLIC int main ARGS2(
* Finish setting up and start a
* NON-INTERACTIVE session. - FM
*/
- if (crawl && !number_links) {
+ if (crawl && !number_links && !number_fields) {
keypad_mode = NUMBERS_AS_ARROWS;
} else if (!nolist) {
if (keypad_mode == NUMBERS_AS_ARROWS) {
- keypad_mode = LINKS_ARE_NUMBERED;
+ if (number_fields)
+ keypad_mode = LINKS_AND_FIELDS_ARE_NUMBERED;
+ else
+ keypad_mode = LINKS_ARE_NUMBERED;
}
}
+
if (x_display != NULL && *x_display != '\0') {
LYisConfiguredForX = TRUE;
}
@@ -1808,9 +2036,10 @@ PUBLIC int main ARGS2(
}
status = mainloop();
if (!nolist &&
+ !crawl && /* For -crawl it has already been done! */
(keypad_mode == LINKS_ARE_NUMBERED ||
- keypad_mode == LINKS_AND_FORM_FIELDS_ARE_NUMBERED))
- printlist(stdout,FALSE);
+ keypad_mode == LINKS_AND_FIELDS_ARE_NUMBERED))
+ printlist(stdout, FALSE);
#ifdef EXP_PERSISTENT_COOKIES
/*
* We want to save cookies picked up when in immediate dump
@@ -1818,9 +2047,8 @@ PUBLIC int main ARGS2(
* this one. - BJP
*/
if (persistent_cookies)
- LYStoreCookies(LYCookieFile);
+ LYStoreCookies(LYCookieSaveFile);
#endif /* EXP_PERSISTENT_COOKIES */
- cleanup_files();
exit_immediately(status);
} else {
/*
@@ -1833,10 +2061,21 @@ PUBLIC int main ARGS2(
cache_tag_styles();
#endif
- ena_csi((LYlowest_eightbit[current_char_set] > 155));
- LYOpenCloset();
+#ifndef NO_DUMP_WITH_BACKSPACES
+ if (with_backspaces) {
+ /* we should warn about this somehow (nop for now) -VH */
+ with_backspaces = FALSE;
+ }
+#endif
+
+#ifndef ALL_CHARSETS_IN_O_MENU_SCREEN
+ init_charset_subsets();
+#endif
+
+ ena_csi((BOOLEAN)(LYlowest_eightbit[current_char_set] > 155));
status = mainloop();
- LYCloseCloset();
+ LYCloseCloset(RECALL_URL);
+ LYCloseCloset(RECALL_MAIL);
cleanup();
exit(status);
}
@@ -1847,18 +2086,20 @@ PUBLIC int main ARGS2(
/*
* Called by HTAccessInit to register any protocols supported by lynx.
* Protocols added by lynx:
- * LYNXKEYMAP, lynxcgi, LYNXIMGMAP, LYNXCOOKIE
+ * LYNXKEYMAP, lynxcgi, LYNXIMGMAP, LYNXCOOKIE, LYNXMESSAGES
*/
#ifdef GLOBALREF_IS_MACRO
extern GLOBALREF (HTProtocol, LYLynxKeymap);
extern GLOBALREF (HTProtocol, LYLynxCGI);
extern GLOBALREF (HTProtocol, LYLynxIMGmap);
extern GLOBALREF (HTProtocol, LYLynxCookies);
+extern GLOBALREF (HTProtocol, LYLynxStatusMessages);
#else
GLOBALREF HTProtocol LYLynxKeymap;
GLOBALREF HTProtocol LYLynxCGI;
GLOBALREF HTProtocol LYLynxIMGmap;
GLOBALREF HTProtocol LYLynxCookies;
+GLOBALREF HTProtocol LYLynxStatusMessages;
#endif /* GLOBALREF_IS_MACRO */
PUBLIC void LYRegisterLynxProtocols NOARGS
@@ -1867,42 +2108,120 @@ PUBLIC void LYRegisterLynxProtocols NOARGS
HTRegisterProtocol(&LYLynxCGI);
HTRegisterProtocol(&LYLynxIMGmap);
HTRegisterProtocol(&LYLynxCookies);
+ HTRegisterProtocol(&LYLynxStatusMessages);
}
#ifndef NO_CONFIG_INFO
/*
* Some stuff to reload lynx.cfg without restarting new lynx session,
* also load options menu items and command-line options
- * to make things consistent. Not implemented yet.
- * Warning: experimental, more main() reorganization required.
+ * to make things consistent.
*
* Called by user of interactive session by LYNXCFG://reload/ link.
+ *
+ * Warning: experimental, more main() reorganization required.
+ * *Known* exceptions: persistent cookies, cookie files.
+ *
+ * Some aspects of COLOR (with slang?).
+ * Viewer stuff, mailcap files
+ * SUFFIX, mime.types files
+ * RULESFILE/RULE
+ *
+ * All work "somewhat", but not exactly as the first time.
*/
PUBLIC void reload_read_cfg NOARGS
{
- if (LYRestricted) return; /* for sure */
+ char *tempfile;
+ FILE *rcfp;
+ /*
+ * no_option_save is always set for -anonymous and -validate.
+ * It is better to check for one or several specific restriction
+ * flags than for 'LYRestricted', which doesn't get set for
+ * individual restrictions or for -validate!
+ * However, no_option_save may not be the appropriate one to
+ * check - in that case, a new no_something should be added
+ * that gets automatically set for -anonymous and -validate
+ * (and whether it applies for -anonymous can be made installer-
+ * configurable in the usual way at the bottom of userdefs.h). - kw
+ *
+ */
+ if (no_option_save) {
+ /* current logic requires(?) that saving user preferences is
+ possible. Additional applicable restrictions are already
+ checked by caller. - kw */
+ return;
+ }
- /* save .lynxrc file in case we change something from Options Menu */
- if (!save_rc()) return; /* can not write the very own file :( */
+ /*
+ * Current user preferences are saved in a temporary file, to be
+ * read in again after lynx.cfg has been read. This avoids
+ * accidental changing of the preferences file. The regular
+ * preferences file doesn't even need to exist, and won't be
+ * created as a side effect of this function. Honoring the
+ * no_option_save restriction may thus be unnecessarily restrictive,
+ * but the check is currently still left in place. - kw
+ */
+ tempfile = typecallocn(char, LY_MAXPATH);
+ if (!tempfile) {
+ HTAlwaysAlert(NULL, NOT_ENOUGH_MEMORY);
+ return;
+ }
+ rcfp = LYOpenTemp(tempfile, ".rc" , "w");
+ if (rcfp == NULL) {
+ FREE(tempfile);
+ HTAlwaysAlert(NULL, CANNOT_OPEN_TEMP);
+ return;
+ }
+ if (!save_rc(rcfp)) {
+ HTAlwaysAlert(NULL, OPTIONS_NOT_SAVED);
+ LYRemoveTemp(tempfile);
+ FREE(tempfile);
+ return; /* can not write the very own file :( */
+ }
{
/* set few safe flags: */
-#ifdef PERSISTENT_COOKIES
+#ifdef EXP_PERSISTENT_COOKIES
BOOLEAN persistent_cookies_flag = persistent_cookies;
- char * LYCookieFile_flag = LYCookieFile;
+ char * LYCookieFile_flag = NULL;
+ char * LYCookieSaveFile_flag = NULL;
+ if (persistent_cookies) {
+ StrAllocCopy(LYCookieFile_flag, LYCookieFile);
+ StrAllocCopy(LYCookieSaveFile_flag, LYCookieSaveFile);
+ }
+#endif
+
+#ifdef EXP_CHARSET_CHOICE
+ custom_assumed_doc_charset = FALSE;
+ custom_display_charset = FALSE;
+ memset((char*)charset_subsets, 0, sizeof(charset_subset_t)*MAXCHARSETS);
+#endif
+
+#ifdef USE_PRETTYSRC
+ html_src_on_lynxcfg_reload();
+#endif
+ /* free downloaders, printers, environments, dired menu */
+ free_lynx_cfg();
+#ifdef SOURCE_CACHE
+ source_cache_file_error = FALSE; /* reset flag */
#endif
- free_lynx_cfg(); /* free downloaders, printers, not always environments */
/*
* Process the configuration file.
*/
read_cfg(lynx_cfg_file, "main program", 1, (FILE *)0);
/*
- * Process the RC file.
+ * Process the temporary RC file.
*/
- read_rc();
+ rcfp = fopen(tempfile, "r");
+ read_rc(rcfp);
+ LYRemoveTemp(tempfile);
+ FREE(tempfile); /* done with it - kw */
+#ifdef EXP_CHARSET_CHOICE
+ init_charset_subsets();
+#endif
/* We are not interested in startfile here */
/* but other things may be lost: */
@@ -1921,20 +2240,33 @@ PUBLIC void reload_read_cfg NOARGS
/*
* Initialize other things based on the configuration read.
*/
+ if (user_mode == NOVICE_MODE) {
+ display_lines = LYlines - 4;
+ } else {
+ display_lines = LYlines - 2;
+ }
/* Not implemented yet here,
* a major problem: file paths
* like lynx_save_space, LYCookieFile etc.
*/
-#ifdef PERSISTENT_COOKIES
+#ifdef EXP_PERSISTENT_COOKIES
/* restore old settings */
- if (persistent_cookies != persistent_cookies_flag) {
- persistent_cookies = persistent_cookies_flag;
- HTAlert(gettext("persistent cookies state will be changed in next session only."));
- }
- if (strcmp(LYCookieFile, LYCookieFile_flag)) {
- StrAllocCopy(LYCookieFile, LYCookieFile_flag);
- CTRACE(tfp, "cookies file can be changed in next session only, restored.\n")
- }
+ if (persistent_cookies != persistent_cookies_flag) {
+ persistent_cookies = persistent_cookies_flag;
+ HTAlert(gettext("persistent cookies state will be changed in next session only."));
+ }
+ if (persistent_cookies) {
+ if (strcmp(LYCookieFile, LYCookieFile_flag)) {
+ StrAllocCopy(LYCookieFile, LYCookieFile_flag);
+ CTRACE((tfp, "cookie file can be changed in next session only, restored.\n"));
+ }
+ if (strcmp(LYCookieSaveFile, LYCookieSaveFile_flag)) {
+ StrAllocCopy(LYCookieSaveFile, LYCookieSaveFile_flag);
+ CTRACE((tfp, "cookie save file can be changed in next session only, restored.\n"));
+ }
+ FREE(LYCookieFile_flag);
+ FREE(LYCookieSaveFile_flag);
+ }
#endif
}
@@ -1952,50 +2284,26 @@ PUBLIC void reload_read_cfg NOARGS
* Others are complicated and require a function call.
*/
-struct parse_args_type;
-typedef int (*ParseFunc) PARAMS((char *));
-
-typedef union {
- BOOLEAN * set_value;
- int * int_value;
- char ** str_value;
- ParseFunc fun_value;
-} ParseUnion;
-
-/*
- * Storing the four types of data in separate fields costs about 1K of data.
- * However, this provides usable type-checking. The initial version of the
- * parse_args_type used 'long' for all types, and dumped core when processing
- * "lynx -help". (The compiler was unable to detect some minor errors).
- */
-#ifdef PARSE_DEBUG
-#define ParseData BOOLEAN *set_value; int *int_value; char **str_value; ParseFunc fun_value
-#define PARSE_SET(n,t,v,h) {n,t, v, 0, 0, 0, h}
-#define PARSE_INT(n,t,v,h) {n,t, 0, v, 0, 0, h}
-#define PARSE_STR(n,t,v,h) {n,t, 0, 0, v, 0, h}
-#define PARSE_FUN(n,t,v,h) {n,t, 0, 0, 0, v, h}
-#else
-#define ParseData long value
-#define PARSE_SET(n,t,v,h) {n,t, (long) (v), h}
-#define PARSE_INT(n,t,v,h) {n,t, (long) (v), h}
-#define PARSE_STR(n,t,v,h) {n,t, (long) (v), h}
-#define PARSE_FUN(n,t,v,h) {n,t, (long) (v), h}
-#endif
+#define PARSE_SET(n,t,v,h) {n, t, UNION_SET(v), h}
+#define PARSE_INT(n,t,v,h) {n, t, UNION_INT(v), h}
+#define PARSE_STR(n,t,v,h) {n, t, UNION_STR(v), h}
+#define PARSE_FUN(n,t,v,h) {n, t, UNION_FUN(v), h}
+#define PARSE_NIL {NULL, 0, UNION_DEF(0), NULL}
typedef struct parse_args_type
{
CONST char *name;
int type;
-#define IGNORE_ARG 0x000
-#define TOGGLE_ARG 0x001
-#define SET_ARG 0x002
-#define UNSET_ARG 0x003
-#define FUNCTION_ARG 0x004
-#define LYSTRING_ARG 0x005
-#define INT_ARG 0x006
-#define STRING_ARG 0x007
-#define ARG_TYPE_MASK 0x0FF
-#define NEED_NEXT_ARG 0x100
+
+#define TOGGLE_ARG 0x0010
+#define SET_ARG 0x0020
+#define UNSET_ARG 0x0030
+#define FUNCTION_ARG 0x0040
+#define LYSTRING_ARG 0x0050
+#define INT_ARG 0x0060
+#define STRING_ARG 0x0070
+#define ARG_TYPE_MASK 0x0FF0
+#define NEED_NEXT_ARG 0x1000
#define NEED_INT_ARG (NEED_NEXT_ARG | INT_ARG)
#define NEED_LYSTRING_ARG (NEED_NEXT_ARG | LYSTRING_ARG)
@@ -2009,10 +2317,10 @@ typedef struct parse_args_type
ParseData;
CONST char *help_string;
}
-Parse_Args_Type;
+Config_Type;
/* -auth, -pauth */
-static int parse_authentication ARGS2(
+PRIVATE int parse_authentication ARGS2(
char *, next_arg,
char **, result)
{
@@ -2044,22 +2352,17 @@ static int parse_authentication ARGS2(
}
/* -anonymous */
-static int anonymous_fun ARGS1(
+PRIVATE int anonymous_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
- /*
- * Should already have been set, so we don't
- * override or replace any additional
- * restrictions from the command line. - FM
- */
- if (!LYRestricted)
- parse_restrictions("default");
- LYRestricted = TRUE;
- return 0;
+ if (!LYValidate && !LYRestricted)
+ parse_restrictions("default");
+ LYRestricted = TRUE;
+ return 0;
}
/* -assume_charset */
-static int assume_charset_fun ARGS1(
+PRIVATE int assume_charset_fun ARGS1(
char *, next_arg)
{
UCLYhndl_for_unspec = safeUCGetLYhndl_byMIME(next_arg);
@@ -2073,7 +2376,7 @@ static int assume_charset_fun ARGS1(
}
/* -assume_local_charset */
-static int assume_local_charset_fun ARGS1(
+PRIVATE int assume_local_charset_fun ARGS1(
char *, next_arg)
{
UCLYhndl_HTFile_for_unspec = safeUCGetLYhndl_byMIME(next_arg);
@@ -2081,7 +2384,7 @@ static int assume_local_charset_fun ARGS1(
}
/* -assume_unrec_charset */
-static int assume_unrec_charset_fun ARGS1(
+PRIVATE int assume_unrec_charset_fun ARGS1(
char *, next_arg)
{
UCLYhndl_for_unrec = safeUCGetLYhndl_byMIME(next_arg);
@@ -2089,7 +2392,7 @@ static int assume_unrec_charset_fun ARGS1(
}
/* -auth */
-static int auth_fun ARGS1(
+PRIVATE int auth_fun ARGS1(
char *, next_arg)
{
parse_authentication(next_arg, authentication_info);
@@ -2097,7 +2400,7 @@ static int auth_fun ARGS1(
}
/* -base */
-static int base_fun ARGS1(
+PRIVATE int base_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
/*
@@ -2115,18 +2418,8 @@ static int base_fun ARGS1(
return 0;
}
-#ifdef USE_SLANG
-/* -blink */
-static int blink_fun ARGS1(
- char *, next_arg GCC_UNUSED)
-{
- Lynx_Color_Flags |= SL_LYNX_USE_BLINK;
- return 0;
-}
-#endif
-
/* -cache */
-static int cache_fun ARGS1(
+PRIVATE int cache_fun ARGS1(
char *, next_arg)
{
if (next_arg != 0)
@@ -2140,7 +2433,7 @@ static int cache_fun ARGS1(
}
/* -child */
-static int child_fun ARGS1(
+PRIVATE int child_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
child_lynx = TRUE;
@@ -2150,7 +2443,7 @@ static int child_fun ARGS1(
#ifdef USE_SLANG
/* -color */
-static int color_fun ARGS1(
+PRIVATE int color_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
Lynx_Color_Flags |= SL_LYNX_USE_COLOR;
@@ -2162,39 +2455,100 @@ static int color_fun ARGS1(
}
#endif
+#ifdef MISC_EXP
+/* -convert_to */
+PRIVATE int convert_to_fun ARGS1(
+ char *, next_arg)
+{
+ if (next_arg != 0) {
+ char *outformat = NULL;
+ char *cp1, *cp2, *cp4;
+ int chndl;
+ StrAllocCopy(outformat, next_arg);
+ /* not lowercased, to allow for experimentation - kw */
+ /*LYLowerCase(outformat);*/
+ if ((cp1 = strchr(outformat, ';')) != NULL) {
+ if ((cp2 = LYstrstr(cp1, "charset")) != NULL) {
+ cp2 += 7;
+ while (*cp2 == ' ' || *cp2 == '=' || *cp2 == '\"')
+ cp2++;
+ for (cp4 = cp2; (*cp4 != '\0' && *cp4 != '\"' &&
+ *cp4 != ';' &&
+ !WHITE(*cp4)); cp4++)
+ ; /* do nothing */
+ *cp4 = '\0';
+ /* This is intentionally not the "safe" version,
+ to allow for experimentation. */
+ chndl = UCGetLYhndl_byMIME(cp2);
+ if (chndl < 0) chndl = UCLYhndl_for_unrec;
+ if (chndl < 0) {
+ fprintf(stderr,
+ gettext("Lynx: ignoring unrecognized charset=%s\n"), cp2);
+ } else {
+ current_char_set = chndl;
+ }
+ *cp1 = '\0'; /* truncate outformat */
+ }
+ }
+ HTOutputFormat = HTAtom_for(outformat);
+ FREE(outformat);
+ } else {
+ HTOutputFormat = NULL;
+ }
+ return 0;
+}
+#endif
+
/* -crawl */
-static int crawl_fun ARGS1(
+PRIVATE int crawl_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
crawl = TRUE;
- LYcols = 80;
+ LYcols = DFT_COLS;
return 0;
}
/* -display */
-static int display_fun ARGS1(
+PRIVATE int display_fun ARGS1(
char *, next_arg)
{
if (next_arg != 0) {
LYsetXDisplay(next_arg);
- if ((next_arg = LYgetXDisplay()) != 0)
- StrAllocCopy(x_display, next_arg);
}
return 0;
}
+/* -display_charset */
+PRIVATE int display_charset_fun ARGS1(
+ char *, next_arg)
+{
+ int i = UCGetLYhndl_byMIME(next_arg);
+
+#ifdef CAN_AUTODETECT_DISPLAY_CHARSET
+ if (i < 0 && !strcasecomp(next_arg, "auto"))
+ i = auto_display_charset;
+#endif
+ if (i < 0) { /* do nothing here: so fallback to lynx.cfg */
+ fprintf(stderr,
+ gettext("Lynx: ignoring unrecognized charset=%s\n"), next_arg);
+ }
+ else
+ current_char_set = i;
+ return 0;
+}
+
/* -dump */
-static int dump_output_fun ARGS1(
+PRIVATE int dump_output_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
dump_output_immediately = TRUE;
- LYcols = 80;
+ LYcols = DFT_COLS;
return 0;
}
/* -editor */
-static int editor_fun ARGS1(
+PRIVATE int editor_fun ARGS1(
char *, next_arg)
{
if (next_arg != 0)
@@ -2204,7 +2558,7 @@ static int editor_fun ARGS1(
}
/* -error_file */
-static int error_file_fun ARGS1(
+PRIVATE int error_file_fun ARGS1(
char *, next_arg)
{
/*
@@ -2218,7 +2572,7 @@ static int error_file_fun ARGS1(
#if defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
/* -exec */
-static int exec_fun ARGS1(
+PRIVATE int exec_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
#ifndef NEVER_ALLOW_REMOTE_EXEC
@@ -2231,7 +2585,7 @@ static int exec_fun ARGS1(
#endif
/* -get_data */
-static int get_data_fun ARGS1(
+PRIVATE int get_data_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
/*
@@ -2249,7 +2603,7 @@ static int get_data_fun ARGS1(
*/
#ifndef VMS
dump_output_immediately = TRUE;
- LYcols = 80;
+ LYcols = DFT_COLS;
#endif /* VMS */
StrAllocCopy(form_get_data, "?"); /* Prime the pump */
@@ -2259,14 +2613,7 @@ static int get_data_fun ARGS1(
* Build GET data for later. Stop reading when we see a line
* with "---" as its first three characters.
*/
- while (LYSafeGets(&buf, stdin) != 0 &&
- strncmp(buf, "---", 3) != 0) {
- int j;
-
- for (j = strlen(buf) - 1; j >= 0 && /* Strip line terminators */
- (buf[j] == CR || buf[j] == LF); j--)
- buf[j] = '\0';
-
+ while (GetStdin(&buf, TRUE)) {
StrAllocCat(*get_data, buf);
}
@@ -2274,7 +2621,7 @@ static int get_data_fun ARGS1(
}
/* -help */
-static int help_fun ARGS1(
+PRIVATE int help_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
print_help_and_exit (0);
@@ -2282,7 +2629,7 @@ static int help_fun ARGS1(
}
/* -hiddenlinks */
-static int hiddenlinks_fun ARGS1(
+PRIVATE int hiddenlinks_fun ARGS1(
char *, next_arg)
{
if (next_arg != 0) {
@@ -2302,7 +2649,7 @@ static int hiddenlinks_fun ARGS1(
}
/* -homepage */
-static int homepage_fun ARGS1(
+PRIVATE int homepage_fun ARGS1(
char *, next_arg)
{
if (next_arg != 0) {
@@ -2313,7 +2660,7 @@ static int homepage_fun ARGS1(
}
/* -mime_header */
-static int mime_header_fun ARGS1(
+PRIVATE int mime_header_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
/*
@@ -2323,13 +2670,13 @@ static int mime_header_fun ARGS1(
dump_output_immediately = TRUE;
HTOutputFormat = (LYPrependBase ?
HTAtom_for("www/download") : HTAtom_for("www/dump"));
- LYcols = 999;
+ LYcols = MAX_COLS;
return 0;
}
#ifndef DISABLE_NEWS
/* -newschunksize */
-static int newschunksize_fun ARGS1(
+PRIVATE int newschunksize_fun ARGS1(
char *, next_arg)
{
if (next_arg != 0) {
@@ -2345,7 +2692,7 @@ static int newschunksize_fun ARGS1(
}
/* -newsmaxchunk */
-static int newsmaxchunk_fun ARGS1(
+PRIVATE int newsmaxchunk_fun ARGS1(
char *, next_arg)
{
if (next_arg) {
@@ -2361,8 +2708,16 @@ static int newsmaxchunk_fun ARGS1(
}
#endif /* not DISABLE_NEWS */
+/* -nobold */
+PRIVATE int nobold_fun ARGS1(
+ char *, next_arg GCC_UNUSED)
+{
+ LYnoVideo(1);
+ return 0;
+}
+
/* -nobrowse */
-static int nobrowse_fun ARGS1(
+PRIVATE int nobrowse_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
HTDirAccess = HT_DIR_FORBID;
@@ -2370,7 +2725,7 @@ static int nobrowse_fun ARGS1(
}
/* -nocolor */
-static int nocolor_fun ARGS1(
+PRIVATE int nocolor_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
LYShowColor = SHOW_COLOR_NEVER;
@@ -2382,7 +2737,7 @@ static int nocolor_fun ARGS1(
}
/* -nopause */
-static int nopause_fun ARGS1(
+PRIVATE int nopause_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
InfoSecs = 0;
@@ -2391,8 +2746,39 @@ static int nopause_fun ARGS1(
return 0;
}
+/* -noreverse */
+PRIVATE int noreverse_fun ARGS1(
+ char *, next_arg GCC_UNUSED)
+{
+ LYnoVideo(2);
+ return 0;
+}
+
+/* -nounderline */
+PRIVATE int nounderline_fun ARGS1(
+ char *, next_arg GCC_UNUSED)
+{
+ LYnoVideo(4);
+ return 0;
+}
+
+#ifdef MISC_EXP
+/* -nozap */
+PRIVATE int nozap_fun ARGS1(
+ char *, next_arg)
+{
+ LYNoZapKey = 1; /* everything but "initially" treated as "full" - kw */
+ if (next_arg != 0) {
+ if (strcasecomp(next_arg, "initially") == 0)
+ LYNoZapKey = 2;
+
+ }
+ return 0;
+}
+#endif /* MISC_EXP */
+
/* -pauth */
-static int pauth_fun ARGS1(
+PRIVATE int pauth_fun ARGS1(
char *, next_arg)
{
parse_authentication(next_arg, proxyauth_info);
@@ -2400,7 +2786,7 @@ static int pauth_fun ARGS1(
}
/* -post_data */
-static int post_data_fun ARGS1(
+PRIVATE int post_data_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
/*
@@ -2418,7 +2804,7 @@ static int post_data_fun ARGS1(
*/
#ifndef VMS
dump_output_immediately = TRUE;
- LYcols = 80;
+ LYcols = DFT_COLS;
#endif /* VMS */
post_data = &form_post_data;
@@ -2427,116 +2813,204 @@ static int post_data_fun ARGS1(
* Build post data for later. Stop reading when we see a line with "---"
* as its first three characters.
*/
- while (LYSafeGets(&buf, stdin) != 0 &&
- strncmp(buf, "---", 3) != 0) {
- int j;
-
- for (j = strlen(buf) - 1; j >= 0 && /* Strip line terminators */
- (buf[j] == CR || buf[j] == LF); j--) {
- buf[j] = '\0';
- }
+ while (GetStdin(&buf, TRUE)) {
StrAllocCat(*post_data, buf);
}
return 0;
}
/* -restrictions */
-static int restrictions_fun ARGS1(
+PRIVATE int restrictions_fun ARGS1(
char *, next_arg)
{
- static CONST char *Usage[] = {
- ""
-," USAGE: lynx -restrictions=[option][,option][,option]"
-," List of Options:"
-," all restricts all options."
-," bookmark disallow changing the location of the bookmark file."
-," bookmark_exec disallow execution links via the bookmark file"
+ static CONST struct {
+ CONST char *name;
+ CONST char *help;
+ } table[] = {
+ { "all", "restricts all options." },
+ { "bookmark", "disallow changing the location of the bookmark file" },
+ { "bookmark_exec", "disallow execution links via the bookmark file" },
#if defined(DIRED_SUPPORT) && defined(OK_PERMIT)
-," change_exec_perms disallow changing the eXecute permission on files"
-," (but still allow it for directories) when local file"
-," management is enabled."
+ { "change_exec_perms", "\
+disallow changing the eXecute permission on files\n\
+(but still allow it for directories) when local file\n\
+management is enabled." },
#endif /* DIRED_SUPPORT && OK_PERMIT */
-," default same as commandline option -anonymous. Disables"
-," default services for anonymous users. Currently set to,"
-," all restricted except for: inside_telnet, outside_telnet,"
-," inside_news, inside_ftp, outside_ftp, inside_rlogin,"
-," outside_rlogin, goto, jump and mail. Defaults"
-," are settable within userdefs.h"
+#if defined(HAVE_CONFIG_H) && !defined(NO_CONFIG_INFO)
+ { "compileopts_info", "\
+disable info on options used to compile the binary" },
+#endif
+{ "default", "\
+same as commandline option -anonymous. Sets the\n\
+default service restrictions for anonymous users. Set to\n\
+all restricted, except for: inside_telnet, outside_telnet,\n\
+inside_ftp, outside_ftp, inside_rlogin, outside_rlogin,\n\
+inside_news, outside_news, telnet_port, jump, mail, print,\n\
+exec, and goto. The settings for these, as well as\n\
+additional goto restrictions for specific URL schemes\n\
+that are also applied, are derived from definitions\n\
+within userdefs.h." },
#ifdef DIRED_SUPPORT
-," dired_support disallow local file management"
+ { "dired_support", "disallow local file management" },
#endif /* DIRED_SUPPORT */
-," disk_save disallow saving to disk in the download and print menus"
-," dotfiles disallow access to, or creation of, hidden (dot) files"
-," download disallow downloaders in the download menu"
-," editor disallow editing"
-," exec disable execution scripts"
-," exec_frozen disallow the user from changing the execution link"
+ { "disk_save", "disallow saving to disk in the download and print menus" },
+ { "dotfiles", "disallow access to, or creation of, hidden (dot) files" },
+ { "download", "disallow some downloaders in the download menu" },
+ { "editor", "disallow editing" },
+ { "exec", "disable execution scripts" },
+ { "exec_frozen", "disallow the user from changing the execution link option" },
#ifdef USE_EXTERNALS
-," externals disable passing URLs to external programs"
+ { "externals", "disable passing URLs to some external programs" },
#endif
-," file_url disallow using G)oto, served links or bookmarks for"
-," file: URL's"
-," goto disable the 'g' (goto) command"
+ { "file_url", "\
+disallow using G)oto, served links or bookmarks for\n\
+file: URL's" },
+ { "goto", "disable the 'g' (goto) command" },
#if !defined(HAVE_UTMP) || defined(VMS) /* not selective */
-," inside_ftp disallow ftps for people coming from inside your"
-," domain (utmp required for selectivity)"
-," inside_news disallow USENET news posting for people coming from"
-," inside your domain (utmp required for selectivity)"
-," inside_rlogin disallow rlogins for people coming from inside your"
-," domain (utmp required for selectivity)"
-," inside_telnet disallow telnets for people coming from inside your"
-," domain (utmp required for selectivity)"
+ { "inside_ftp", "\
+disallow ftps coming from inside your\n\
+domain (utmp required for selectivity)" },
+ { "inside_news", "\
+disallow USENET news reading and posting coming\n\
+from inside your domain (utmp required for selectivity)" },
+ { "inside_rlogin", "\
+disallow rlogins coming from inside your\n\
+domain (utmp required for selectivity)" },
+ { "inside_telnet", "\
+disallow telnets coming from inside your\n\
+domain (utmp required for selectivity)" },
#else
-," inside_ftp disallow ftps for people coming from inside your domain"
-," inside_news disallow USENET news posting for people coming from inside"
-," your domain"
-," inside_rlogin disallow rlogins for people coming from inside your domain"
-," inside_telnet disallow telnets for people coming from inside your domain"
+ { "inside_ftp", "\
+disallow ftps coming from inside your domain" },
+ { "inside_news", "\
+disallow USENET news reading and posting coming\n\
+from inside your domain" },
+ { "inside_rlogin", "\
+disallow rlogins coming from inside your domain" },
+ { "inside_telnet", "\
+disallow telnets coming from inside your domain" },
#endif /* HAVE_UTMP || VMS */
-," jump disable the 'j' (jump) command"
-," mail disallow mail"
-," multibook disallow multiple bookmark files"
-," news_post disallow USENET News posting."
-," option_save disallow saving options in .lynxrc"
+ { "jump", "disable the 'j' (jump) command" },
+ { "lynxcfg_info", "\
+disable viewing of lynx.cfg configuration file info" },
+#ifndef NO_CONFIG_INFO
+ { "lynxcfg_xinfo", "\
+disable extended lynx.cfg viewing and reloading" },
+#endif
+ { "mail", "disallow mail" },
+ { "multibook", "disallow multiple bookmark files" },
+ { "news_post", "disallow USENET News posting." },
+ { "option_save", "disallow saving options in .lynxrc" },
#if !defined(HAVE_UTMP) || defined(VMS) /* not selective */
-," outside_ftp disallow ftps for people coming from outside your"
-," domain (utmp required for selectivity)"
-," outside_news disallow USENET news posting for people coming from"
-," outside your domain (utmp required for selectivity)"
-," outside_rlogin disallow rlogins for people coming from outside your"
-," domain (utmp required for selectivity)"
-," outside_telnet disallow telnets for people coming from outside your"
-," domain (utmp required for selectivity)"
+ { "outside_ftp", "\
+disallow ftps coming from outside your\n\
+domain (utmp required for selectivity)" },
+ { "outside_news", "\
+disallow USENET news reading and posting coming\n\
+from outside your domain (utmp required for selectivity)" },
+ { "outside_rlogin", "\
+disallow rlogins coming from outside your\n\
+domain (utmp required for selectivity)" },
+ { "outside_telnet", "\
+disallow telnets coming from outside your\n\
+domain (utmp required for selectivity)" },
#else
-," outside_ftp disallow ftps for people coming from outside your domain"
-," outside_news disallow USENET news posting for people coming from outside"
-," your domain"
-," outside_rlogin disallow rlogins for people coming from outside your domain"
-," outside_telnet disallow telnets for people coming from outside your domain"
+ { "outside_ftp", "\
+disallow ftp coming from outside your domain" },
+ { "outside_news", "\
+disallow USENET news reading and posting coming\n\
+from outside your domain" },
+ { "outside_rlogin", "\
+disallow rlogins coming from outside your domain" },
+ { "outside_telnet", "\
+disallow telnets coming from outside your domain" },
#endif /* !HAVE_UTMP || VMS */
-," print disallow most print options"
-," shell disallow shell escapes, and lynxexec, lynxprog or lynxcgi"
-," G)oto's"
-," suspend disallow Control-Z suspends with escape to shell"
-," telnet_port disallow specifying a port in telnet G)oto's"
-," useragent disallow modifications of the User-Agent header"
+ { "print", "disallow most print options" },
+ { "shell", "\
+disallow shell escapes, and lynxexec, lynxprog or lynxcgi\n\
+G)oto's" },
+ { "suspend", "disallow Control-Z suspends with escape to shell" },
+ { "telnet_port", "disallow specifying a port in telnet G)oto's" },
+ { "useragent", "disallow modifications of the User-Agent header" },
};
- size_t n;
+ static CONST char *Usage[] = {
+ ""
+,"USAGE: lynx -restrictions=[option][,option][,option]"
+,"List of Options:"
+," ? when used alone, list restrictions in effect."
- if (next_arg != 0) {
- parse_restrictions(next_arg);
- } else {
+ };
+ unsigned j, k, column = 0;
+ CONST char *name;
+ CONST char *value;
+ BOOLEAN found, first;
+
+ if (next_arg == 0 || *next_arg == '\0') {
SetOutputMode( O_TEXT );
- for (n = 0; n < sizeof(Usage)/sizeof(Usage[0]); n++)
- printf("%s\n", Usage[n]);
+ for (j = 0; j < TABLESIZE(Usage); j++) {
+ printf("%s\n", Usage[j]);
+ }
+ for (j = 0; j < TABLESIZE(table); j++) {
+ if (!strcmp(table[j].name, "all")
+ || !strcmp(table[j].name, "default")) {
+ value = NULL;
+ } else {
+ switch (find_restriction(table[j].name, -1)) {
+ case TRUE:
+ value = "on";
+ break;
+ case FALSE:
+ value = "off";
+ break;
+ default:
+ value = "?";
+ break;
+ }
+ }
+ print_help_strings (
+ table[j].name, table[j].help, value, FALSE);
+ }
+ first = TRUE;
+ for (j = 0; ; j++) {
+ found = FALSE;
+ if ((name = index_to_restriction(j)) == 0) {
+ break;
+ }
+ for (k = 0; k < TABLESIZE(table); k++) {
+ if (!strcmp(name, table[k].name)) {
+ found = TRUE;
+ }
+ }
+ if (!found) {
+ if (first) {
+ printf("Other restrictions (see the user's guide):\n");
+ }
+ printf("%s%s", column ? ", " : " ", name);
+ column += 2 + strlen(name);
+ if (column > 50) {
+ column = 0;
+ printf("\n");
+ }
+ first = FALSE;
+ }
+ }
+ if (column)
+ printf("\n");
SetOutputMode( O_BINARY );
- exit(0);
+ exit(EXIT_SUCCESS);
+ } else if (*next_arg == '?') {
+ SetOutputMode( O_TEXT );
+ print_restrictions_to_fd(stdout);
+ SetOutputMode( O_BINARY );
+ exit(EXIT_SUCCESS);
+ } else {
+ parse_restrictions(next_arg);
}
return 0;
}
/* -selective */
-static int selective_fun ARGS1(
+PRIVATE int selective_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
HTDirAccess = HT_DIR_SELECTIVE;
@@ -2544,42 +3018,59 @@ static int selective_fun ARGS1(
}
/* -source */
-static int source_fun ARGS1(
+PRIVATE int source_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
dump_output_immediately = TRUE;
HTOutputFormat = (LYPrependBase ?
HTAtom_for("www/download") : HTAtom_for("www/dump"));
- LYcols = 999;
+ LYcols = MAX_COLS;
return 0;
}
/* -traversal */
-static int traversal_fun ARGS1(
+PRIVATE int traversal_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
traversal = TRUE;
#ifdef USE_SLANG
- LYcols = 80;
+ LYcols = DFT_COLS;
#else
- LYcols = 999;
+ LYcols = MAX_COLS;
#endif /* USE_SLANG */
return 0;
}
/* -version */
-static int version_fun ARGS1(
+PRIVATE int version_fun ARGS1(
char *, next_arg GCC_UNUSED)
{
+#ifdef USE_SSL
+ char SSLLibraryVersion[256];
+ char *SSLcp;
+#endif
+
SetOutputMode( O_TEXT );
- printf("\n");
- printf(gettext("\n%s Version %s (%.*s)\n"),
+ printf(gettext("%s Version %s (%s)\n"),
LYNX_NAME, LYNX_VERSION,
- LYNX_DATE_LEN,
- LYNX_RELEASE ? LYNX_RELEASE_DATE : &LYNX_DATE[LYNX_DATE_OFF]
- );
+ LYVersionDate());
+#ifdef USE_SSL
+ printf("libwww-FM %s, SSL-MM 1.4.1", HTLibraryVersion);
+#ifdef OPENSSL_VERSION_TEXT
+ LYstrncpy(SSLLibraryVersion, OPENSSL_VERSION_TEXT, sizeof(SSLLibraryVersion)-1);
+ if ((SSLcp = strchr(SSLLibraryVersion, ' ')) != NULL) {
+ *SSLcp++ = ' ';
+ if ((SSLcp = strchr(SSLcp, ' ')) != NULL) {
+ *SSLcp = '\0';
+ printf(", %s", SSLLibraryVersion);
+ }
+ }
+#endif /* OPENSSL_VERSION_TEXT */
+ printf("\n");
+#endif /* USE_SSL */
+
#ifdef SYSTEM_NAME
#ifndef __DATE__
#define __DATE__ ""
@@ -2589,6 +3080,7 @@ static int version_fun ARGS1(
#endif
printf(gettext("Built on %s %s %s\n"), SYSTEM_NAME, __DATE__, __TIME__);
#endif
+
printf("\n");
printf(gettext(
"Copyrights held by the University of Kansas, CERN, and other contributors.\n"
@@ -2597,487 +3089,687 @@ static int version_fun ARGS1(
printf(gettext(
"See http://lynx.browser.org/ and the online help for more information.\n\n"
));
+#ifdef USE_SSL
+ printf("See http://www.moxienet.com/lynx/ for information about SSL for Lynx.\n");
+#ifdef OPENSSL_VERSION_TEXT
+ printf("See http://www.openssl.org/ for information about OpenSSL.\n");
+#endif /* OPENSSL_VERSION_TEXT */
+ printf("\n");
+#endif /* USE_SSL */
+
+#ifdef SH_EX
+#ifdef __CYGWIN__
+ printf("Compiled by CYGWIN (%s %s).\n", __DATE__, __TIME__);
+#else
+#ifdef __BORLANDC__
+ printf("Compiled by Borland C++ (%s %s).\n", __DATE__, __TIME__);
+#else
+#ifdef _MSC_VER
+ printf("Compiled by Microsoft Visual C++ (%s %s).\n", __DATE__, __TIME__);
+#else
+#ifdef __DJGPP__
+ printf("Compiled by DJGPP (%s %s).\n", __DATE__, __TIME__);
+#else
+ printf("Compiled at (%s %s).\n", __DATE__, __TIME__);
+#endif /* __DJGPP__ */
+#endif /* _MSC_VER */
+#endif /* __BORLANDC__ */
+#endif /* __CYGWIN__ */
+#endif /* SH_EX */
SetOutputMode( O_BINARY );
- exit(0);
+ exit(EXIT_SUCCESS);
/* NOT REACHED */
return 0;
}
/* -width */
-static int width_fun ARGS1(
+PRIVATE int width_fun ARGS1(
char *, next_arg)
{
if (next_arg != 0) {
int w = atoi(next_arg);
if (w > 0)
- dump_output_width = ((w < 999) ? w : 999);
+ dump_output_width = ((w < MAX_COLS) ? w : MAX_COLS);
}
return 0;
}
-/* NOTE: This table is sorted by name; the lookup relies on that. */
-static Parse_Args_Type Arg_Table [] =
+/* NOTE: This table is sorted by name to make the help message useful */
+PRIVATE Config_Type Arg_Table [] =
{
PARSE_SET(
- "accept_all_cookies", SET_ARG, &LYAcceptAllCookies,
- "\naccepts all cookies"
+ "accept_all_cookies", 4|SET_ARG, LYAcceptAllCookies,
+ "\naccept cookies without prompting if Set-Cookie handling\nis on"
),
PARSE_FUN(
- "anonymous", FUNCTION_ARG, anonymous_fun,
- "used to specify the anonymous account"
+ "anonymous", 2|FUNCTION_ARG, anonymous_fun,
+ "apply restrictions for anonymous account,\nsee also -restrictions"
),
PARSE_FUN(
- "assume_charset", NEED_FUNCTION_ARG, assume_charset_fun,
+ "assume_charset", 4|NEED_FUNCTION_ARG, assume_charset_fun,
"=MIMEname\ncharset for documents that don't specify it"
),
PARSE_FUN(
- "assume_local_charset", NEED_FUNCTION_ARG,assume_local_charset_fun,
+ "assume_local_charset", 4|NEED_FUNCTION_ARG,assume_local_charset_fun,
"=MIMEname\ncharset assumed for local files"
),
PARSE_FUN(
- "assume_unrec_charset", NEED_FUNCTION_ARG,assume_unrec_charset_fun,
+ "assume_unrec_charset", 4|NEED_FUNCTION_ARG,assume_unrec_charset_fun,
"=MIMEname\nuse this instead of unrecognized charsets"
),
PARSE_FUN(
- "auth", NEED_FUNCTION_ARG, auth_fun,
+ "auth", 4|NEED_FUNCTION_ARG, auth_fun,
"=id:pw\nauthentication information for protected documents"
),
PARSE_FUN(
- "base", FUNCTION_ARG, base_fun,
+ "base", 4|FUNCTION_ARG, base_fun,
"prepend a request URL comment and BASE tag to text/html\noutputs for -source dumps"
),
-#ifdef USE_SLANG
- PARSE_FUN(
- "blink", FUNCTION_ARG, blink_fun,
- "force high intensity bg colors in color mode"
+#ifndef DISABLE_BIBP
+ PARSE_STR(
+ "bibhost", 4|NEED_LYSTRING_ARG, BibP_bibhost,
+ "=URL\nlocal bibp server (default http://bibhost/)"
),
#endif
+#ifdef USE_BLINK
PARSE_SET(
- "book", SET_ARG, &bookmark_start,
+ "blink", 4|SET_ARG, term_blink_is_boldbg,
+ "enable bright background via the BLINK terminal attribute"
+ ),
+#endif
+ PARSE_SET(
+ "book", 4|SET_ARG, bookmark_start,
"use the bookmark page as the startfile"
),
PARSE_SET(
- "buried_news", TOGGLE_ARG, &scan_for_buried_news_references,
+ "buried_news", 4|TOGGLE_ARG, scan_for_buried_news_references,
"toggles scanning of news articles for buried references"
),
PARSE_FUN(
- "cache", NEED_FUNCTION_ARG, cache_fun,
+ "cache", 4|NEED_FUNCTION_ARG, cache_fun,
"=NUMBER\nNUMBER of documents cached in memory"
),
PARSE_SET(
- "case", SET_ARG, &case_sensitive,
+ "case", 4|SET_ARG, case_sensitive,
"enable case sensitive user searching"
),
+#ifdef SH_EX
+ PARSE_SET(
+ "center", 4|TOGGLE_ARG, no_table_center,
+ "Toggle center alignment in HTML TABLE"
+ ),
+#endif
PARSE_STR(
- "cfg", IGNORE_ARG|NEED_NEXT_ARG, 0,
+ "cfg", 2|NEED_LYSTRING_ARG, lynx_cfg_file,
"=FILENAME\nspecifies a lynx.cfg file other than the default"
),
PARSE_FUN(
- "child", FUNCTION_ARG, child_fun,
+ "child", 4|FUNCTION_ARG, child_fun,
"exit on left-arrow in startfile, and disable save to disk"
),
+#ifdef EXP_CMD_LOGGING
+ PARSE_STR(
+ "cmd_log", 2|NEED_LYSTRING_ARG, lynx_cmd_logfile,
+ "=FILENAME\nlog keystroke commands to the given file"
+ ),
+ PARSE_STR(
+ "cmd_script", 2|NEED_LYSTRING_ARG, lynx_cmd_script,
+ "=FILENAME\nread keystroke commands from the given file\n(see -cmd_log)"
+ ),
+#endif
#ifdef USE_SLANG
PARSE_FUN(
- "color", FUNCTION_ARG, color_fun,
+ "color", 4|FUNCTION_ARG, color_fun,
"force color mode on with standard bg colors"
),
#endif
- PARSE_SET(
- "cookies", TOGGLE_ARG, &LYSetCookies,
- "toggles handling of Set-Cookie headers"
+#ifndef __DJGPP__
+ PARSE_INT(
+ "connect_timeout", 4|NEED_INT_ARG, connect_timeout,
+ "=N\nset the N-second connection timeout"
+ ),
+#endif
+#ifdef MISC_EXP
+ PARSE_FUN(
+ "convert_to", 4|FUNCTION_ARG, convert_to_fun,
+ "=FORMAT\nconvert input, FORMAT is in MIME type notation\n(experimental)"
),
+#endif
#ifdef EXP_PERSISTENT_COOKIES
PARSE_STR(
- "cookie_file", LYSTRING_ARG, &LYCookieFile,
+ "cookie_file", 4|LYSTRING_ARG, LYCookieFile,
+ "=FILENAME\nspecifies a file to use to read cookies"
+ ),
+ PARSE_STR(
+ "cookie_save_file", 4|LYSTRING_ARG, LYCookieSaveFile,
"=FILENAME\nspecifies a file to use to store cookies"
),
#endif /* EXP_PERSISTENT_COOKIES */
+ PARSE_SET(
+ "cookies", 4|TOGGLE_ARG, LYSetCookies,
+ "toggles handling of Set-Cookie headers"
+ ),
#ifndef VMS
PARSE_SET(
- "core", TOGGLE_ARG, &LYNoCore,
+ "core", 4|TOGGLE_ARG, LYNoCore,
"toggles forced core dumps on fatal errors"
),
#endif
PARSE_FUN(
- "crawl", FUNCTION_ARG, crawl_fun,
+ "crawl", 4|FUNCTION_ARG, crawl_fun,
"with -traversal, output each page to a file\n\
with -dump, format output as with -traversal, but to stdout"
),
+#ifdef USE_CURSES_PADS
+ PARSE_SET(
+ "curses_pads", 4|TOGGLE_ARG, LYuseCursesPads,
+ "uses curses pad feature to support left/right shifting"
+ ),
+#endif
#ifdef DISP_PARTIAL
PARSE_SET(
- "debug_partial", TOGGLE_ARG, &debug_display_partial,
+ "debug_partial", 4|TOGGLE_ARG, debug_display_partial,
"incremental display stages with MessageSecs delay"
),
#endif
+#if defined(SH_EX) && defined(WIN_EX)
+ PARSE_INT(
+ "delay", 4|NEED_INT_ARG, debug_delay,
+ "=NNN\nset the NNN msec delay at statusline message"
+ ),
+#endif
PARSE_FUN(
- "display", NEED_FUNCTION_ARG, display_fun,
+ "display", 4|NEED_FUNCTION_ARG, display_fun,
"=DISPLAY\nset the display variable for X exec'ed programs"
),
PARSE_FUN(
- "dump", FUNCTION_ARG, dump_output_fun,
+ "display_charset", 4|NEED_FUNCTION_ARG, display_charset_fun,
+ "=MIMEname\ncharset for the terminal output"
+ ),
+ PARSE_SET(
+ "dont_wrap_pre", 4|SET_ARG, dont_wrap_pre,
+ "inhibit wrapping of text in <pre> when -dump'ing and\n\
+-crawl'ing, mark wrapped lines in interactive session"
+ ),
+ PARSE_FUN(
+ "dump", 4|FUNCTION_ARG, dump_output_fun,
"dump the first file to stdout and exit"
),
PARSE_FUN(
- "editor", NEED_FUNCTION_ARG, editor_fun,
+ "editor", 4|NEED_FUNCTION_ARG, editor_fun,
"=EDITOR\nenable edit mode with specified editor"
),
PARSE_SET(
- "emacskeys", SET_ARG, &emacs_keys,
+ "emacskeys", 4|SET_ARG, emacs_keys,
"enable emacs-like key movement"
),
PARSE_SET(
- "enable_scrollback", TOGGLE_ARG, &enable_scrollback,
+ "enable_scrollback", 4|TOGGLE_ARG, enable_scrollback,
"\ntoggles compatibility with comm programs' scrollback\n\
keys (may be incompatible with some curses packages)"
),
PARSE_FUN(
- "error_file", NEED_FUNCTION_ARG, error_file_fun,
+ "error_file", 4|NEED_FUNCTION_ARG, error_file_fun,
"=FILE\nwrite the HTTP status code here"
),
#if defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
#ifndef NEVER_ALLOW_REMOTE_EXEC
PARSE_FUN(
- "exec", FUNCTION_ARG, exec_fun,
+ "exec", 4|FUNCTION_ARG, exec_fun,
"enable local program execution"
),
#endif
- PARSE_SET(
- "locexec", SET_ARG, &local_exec_on_local_files,
- "enable local program execution from local files only"
- ),
- PARSE_SET(
- "noexec", UNSET_ARG, &local_exec,
- "disable local program execution (DEFAULT)"
- ),
#endif /* EXEC_LINKS || EXEC_SCRIPTS */
#ifdef VMS
PARSE_SET(
- "fileversions", SET_ARG, &HTVMSFileVersions,
+ "fileversions", 4|SET_ARG, HTVMSFileVersions,
"include all versions of files in local VMS directory\nlistings"
),
#endif
PARSE_SET(
- "force_html", SET_ARG, &LYforce_HTML_mode,
- "forces the first document to be interpreted as HTML"
+ "force_empty_hrefless_a", 4|SET_ARG, force_empty_hrefless_a,
+ "\nforce HREF-less 'A' elements to be empty (close them as\nsoon as they are seen)"
),
PARSE_SET(
- "force_secure", TOGGLE_ARG, &LYForceSSLCookiesSecure,
- "toggles forcing of the secure flag for SSL cookies"
+ "force_html", 4|SET_ARG, LYforce_HTML_mode,
+ "forces the first document to be interpreted as HTML"
),
PARSE_SET(
- "from", TOGGLE_ARG, &LYNoFromHeader,
- "toggle transmissions of From headers"
+ "force_secure", 4|TOGGLE_ARG, LYForceSSLCookiesSecure,
+ "toggles forcing of the secure flag for SSL cookies"
),
#if !defined(NO_OPTION_FORMS) && !defined(NO_OPTION_MENU)
PARSE_SET(
- "forms_options", TOGGLE_ARG, &LYUseFormsOptions,
+ "forms_options", 4|TOGGLE_ARG, LYUseFormsOptions,
"toggles forms-based vs old-style options menu"
),
#endif
PARSE_SET(
- "ftp", UNSET_ARG, &ftp_ok,
+ "from", 4|TOGGLE_ARG, LYNoFromHeader,
+ "toggle transmission of From headers"
+ ),
+ PARSE_SET(
+ "ftp", 4|UNSET_ARG, ftp_ok,
"disable ftp access"
),
PARSE_FUN(
- "get_data", FUNCTION_ARG, get_data_fun,
+ "get_data", 6|FUNCTION_ARG, get_data_fun,
"user data for get forms, read from stdin,\nterminated by '---' on a line"
),
PARSE_SET(
- "head", SET_ARG, &HEAD_request,
+ "head", 4|SET_ARG, HEAD_request,
"send a HEAD request"
),
PARSE_FUN(
- "help", FUNCTION_ARG, help_fun,
+ "help", 5|FUNCTION_ARG, help_fun,
"print this usage message"
),
PARSE_FUN(
- "hiddenlinks", NEED_FUNCTION_ARG, hiddenlinks_fun,
+ "hiddenlinks", 4|NEED_FUNCTION_ARG, hiddenlinks_fun,
"=[option]\nhidden links: options are merge, listonly, or ignore"
),
PARSE_SET(
- "historical", TOGGLE_ARG, &historical_comments,
- "toggles use of '>' or '-->' as a terminator for comments"
+ "historical", 4|TOGGLE_ARG, historical_comments,
+ "toggles use of '>' or '-->' as terminator for comments"
),
PARSE_FUN(
- "homepage", NEED_FUNCTION_ARG, homepage_fun,
+ "homepage", 4|NEED_FUNCTION_ARG, homepage_fun,
"=URL\nset homepage separate from start page"
),
PARSE_SET(
- "image_links", TOGGLE_ARG, &clickable_images,
+ "image_links", 4|TOGGLE_ARG, clickable_images,
"toggles inclusion of links for all images"
),
PARSE_STR(
- "index", NEED_LYSTRING_ARG, &indexfile,
+ "index", 4|NEED_LYSTRING_ARG, indexfile,
"=URL\nset the default index file to URL"
),
PARSE_SET(
- "ismap", TOGGLE_ARG, &LYNoISMAPifUSEMAP,
+ "ismap", 4|TOGGLE_ARG, LYNoISMAPifUSEMAP,
"toggles inclusion of ISMAP links when client-side\nMAPs are present"
),
+#ifdef EXP_JUSTIFY_ELTS
+ PARSE_SET(
+ "justify", 4|SET_ARG, ok_justify,
+ "do justification of text"
+ ),
+#endif
PARSE_INT(
- "link", NEED_INT_ARG, &ccount,
+ "link", 4|NEED_INT_ARG, ccount,
"=NUMBER\nstarting count for lnk#.dat files produced by -crawl"
),
PARSE_SET(
- "localhost", SET_ARG, &local_host_only,
+ "localhost", 4|SET_ARG, local_host_only,
"disable URLs that point to remote hosts"
),
-#if defined(USE_HASH)
+#if defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
+ PARSE_SET(
+ "locexec", 4|SET_ARG, local_exec_on_local_files,
+ "enable local program execution from local files only"
+ ),
+#endif /* EXEC_LINKS || EXEC_SCRIPTS */
+#if defined(USE_COLOR_STYLE)
PARSE_STR(
- "lss", IGNORE_ARG|NEED_NEXT_ARG, 0,
+ "lss", 2|NEED_LYSTRING_ARG, lynx_lss_file,
"=FILENAME\nspecifies a lynx.lss file other than the default"
),
#endif
PARSE_FUN(
- "mime_header", FUNCTION_ARG, mime_header_fun,
+ "mime_header", 4|FUNCTION_ARG, mime_header_fun,
"include mime headers and force source dump"
),
PARSE_SET(
- "minimal", TOGGLE_ARG, &minimal_comments,
+ "minimal", 4|TOGGLE_ARG, minimal_comments,
"toggles minimal versus valid comment parsing"
),
#ifndef DISABLE_NEWS
PARSE_FUN(
- "newschunksize", NEED_FUNCTION_ARG, newschunksize_fun,
+ "newschunksize", 4|NEED_FUNCTION_ARG, newschunksize_fun,
"=NUMBER\nnumber of articles in chunked news listings"
),
PARSE_FUN(
- "newsmaxchunk", NEED_FUNCTION_ARG, newsmaxchunk_fun,
+ "newsmaxchunk", 4|NEED_FUNCTION_ARG, newsmaxchunk_fun,
"=NUMBER\nmaximum news articles in listings before chunking"
),
#endif
+#if USE_BLAT_MAILER
+ PARSE_SET(
+ "noblat", 4|TOGGLE_ARG, mail_is_blat,
+ "select mail tool (`BLAT' ==> `sendmail')"
+ ),
+#endif
+ PARSE_FUN(
+ "nobold", 4|FUNCTION_ARG, nobold_fun,
+ "disable bold video-attribute"
+ ),
PARSE_FUN(
- "nobrowse", FUNCTION_ARG, nobrowse_fun,
+ "nobrowse", 4|FUNCTION_ARG, nobrowse_fun,
"disable directory browsing"
),
PARSE_SET(
- "nocc", SET_ARG, &LYNoCc,
+ "nocc", 4|SET_ARG, LYNoCc,
"disable Cc: prompts for self copies of mailings"
),
PARSE_FUN(
- "nocolor", FUNCTION_ARG, nocolor_fun,
+ "nocolor", 4|FUNCTION_ARG, nocolor_fun,
"turn off color support"
),
+#if defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
PARSE_SET(
- "nofilereferer", SET_ARG, &no_filereferer,
- "disable transmissions of Referer headers for file URLs"
+ "noexec", 4|UNSET_ARG, local_exec,
+ "disable local program execution (DEFAULT)"
),
+#endif /* EXEC_LINKS || EXEC_SCRIPTS */
PARSE_SET(
- "nolist", SET_ARG, &nolist,
+ "nofilereferer", 4|SET_ARG, no_filereferer,
+ "disable transmission of Referer headers for file URLs"
+ ),
+ PARSE_SET(
+ "nolist", 4|SET_ARG, nolist,
"disable the link list feature in dumps"
),
PARSE_SET(
- "nolog", UNSET_ARG, &error_logging,
+ "nolog", 4|UNSET_ARG, error_logging,
"disable mailing of error messages to document owners"
),
+#if HAVE_SIGACTION && defined(SIGWINCH)
+ PARSE_SET(
+ "nonrestarting_sigwinch", 4|SET_ARG, LYNonRestartingSIGWINCH,
+ "\nmake window size change handler non-restarting"
+ ),
+#endif /* HAVE_SIGACTION */
PARSE_FUN(
- "nopause", FUNCTION_ARG, nopause_fun,
+ "nopause", 4|FUNCTION_ARG, nopause_fun,
"disable forced pauses for statusline messages"
),
PARSE_SET(
- "noprint", SET_ARG, &no_print,
- "disable print functions"
+ "noprint", 4|SET_ARG, no_print,
+ "disable some print functions, like -restrictions=print"
),
PARSE_SET(
- "noredir", SET_ARG, &no_url_redirection,
+ "noredir", 4|SET_ARG, no_url_redirection,
"don't follow Location: redirection"
),
PARSE_SET(
- "noreferer", SET_ARG, &LYNoRefererHeader,
- "disable transmissions of Referer headers"
+ "noreferer", 4|SET_ARG, LYNoRefererHeader,
+ "disable transmission of Referer headers"
+ ),
+ PARSE_FUN(
+ "noreverse", 4|FUNCTION_ARG, noreverse_fun,
+ "disable reverse video-attribute"
),
#ifdef SOCKS
PARSE_SET(
- "nosocks", UNSET_ARG, &socks_flag,
+ "nosocks", 6|UNSET_ARG, socks_flag,
"don't use SOCKS proxy for this session"
),
#endif
PARSE_SET(
- "nostatus", SET_ARG, &no_statusline,
+ "nostatus", 4|SET_ARG, no_statusline,
"disable the miscellaneous information messages"
),
+ PARSE_FUN(
+ "nounderline", 4|FUNCTION_ARG, nounderline_fun,
+ "disable underline video-attribute"
+ ),
+#ifdef MISC_EXP
+ PARSE_FUN(
+ "nozap", 4|FUNCTION_ARG, nozap_fun,
+ "=DURATION (\"initially\" or \"full\") disable checks for 'z' key"
+ ),
+#endif
+ PARSE_SET(
+ "number_fields", 4|SET_ARG, number_fields,
+ "force numbering of links as well as form input fields"
+ ),
PARSE_SET(
- "number_links", SET_ARG, &number_links,
+ "number_links", 4|SET_ARG, number_links,
"force numbering of links"
),
#ifdef DISP_PARTIAL
PARSE_SET(
- "partial", TOGGLE_ARG, &display_partial_flag,
+ "partial", 4|TOGGLE_ARG, display_partial_flag,
"toggles display partial pages while downloading"
),
PARSE_INT(
- "partial_thres", NEED_INT_ARG, &partial_threshold,
+ "partial_thres", 4|NEED_INT_ARG, partial_threshold,
"[=NUMBER]\nnumber of lines to render before repainting display\n\
with partial-display logic"
),
#endif
PARSE_FUN(
- "pauth", NEED_FUNCTION_ARG, pauth_fun,
+ "pauth", 4|NEED_FUNCTION_ARG, pauth_fun,
"=id:pw\nauthentication information for protected proxy server"
),
PARSE_SET(
- "popup", UNSET_ARG, &LYUseDefSelPop,
+ "popup", 4|UNSET_ARG, LYUseDefSelPop,
"toggles handling of single-choice SELECT options via\npopup windows or as lists of radio buttons"
),
PARSE_FUN(
- "post_data", FUNCTION_ARG, post_data_fun,
+ "post_data", 6|FUNCTION_ARG, post_data_fun,
"user data for post forms, read from stdin,\nterminated by '---' on a line"
),
PARSE_SET(
- "preparsed", SET_ARG, &LYPreparsedSource,
+ "preparsed", 4|SET_ARG, LYPreparsedSource,
"show parsed text/html with -source and in source view\n\
to visualize how lynx behaves with invalid HTML"
),
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
PARSE_SET(
- "prettysrc", SET_ARG, &LYpsrc,
- "do syntax highlighting and hyperlink handling in source view"
+ "prettysrc", 4|SET_ARG, LYpsrc,
+ "do syntax highlighting and hyperlink handling in source\nview"
),
#endif
PARSE_SET(
- "print", UNSET_ARG, &no_print,
- "enable print functions (DEFAULT)"
+ "print", 4|UNSET_ARG, no_print,
+ "enable print functions (DEFAULT), opposite of -noprint"
),
PARSE_SET(
- "pseudo_inlines", TOGGLE_ARG, &pseudo_inline_alts,
+ "pseudo_inlines", 4|TOGGLE_ARG, pseudo_inline_alts,
"toggles pseudo-ALTs for inlines with no ALT string"
),
PARSE_SET(
- "raw", UNSET_ARG, &LYUseDefaultRawMode,
- "toggles default setting of 8-bit character translations\nor CJK mode for the startup character set"
+ "raw", 4|UNSET_ARG, LYUseDefaultRawMode,
+ "toggles default setting of 8-bit character translations\n\
+or CJK mode for the startup character set"
),
PARSE_SET(
- "realm", SET_ARG, &check_realm,
+ "realm", 4|SET_ARG, check_realm,
"restricts access to URLs in the starting realm"
),
PARSE_SET(
- "reload", SET_ARG, &reloading,
+ "reload", 4|SET_ARG, reloading,
"flushes the cache on a proxy server\n(only the first document affected)"
),
PARSE_FUN(
- "restrictions", FUNCTION_ARG, restrictions_fun,
+ "restrictions", 4|FUNCTION_ARG, restrictions_fun,
"=[options]\nuse -restrictions to see list"
),
PARSE_SET(
- "resubmit_posts", TOGGLE_ARG, &LYresubmit_posts,
+ "resubmit_posts", 4|TOGGLE_ARG, LYresubmit_posts,
"toggles forced resubmissions (no-cache) of forms with\n\
method POST when the documents they returned are sought\n\
with the PREV_DOC command or from the History List"
),
PARSE_SET(
- "rlogin", UNSET_ARG, &rlogin_ok,
+ "rlogin", 4|UNSET_ARG, rlogin_ok,
"disable rlogins"
),
+#ifdef USE_SCROLLBAR
+ PARSE_SET(
+ "scrollbar", 4|TOGGLE_ARG, LYsb,
+ "toggles showing scrollbar"
+ ),
+ PARSE_SET(
+ "scrollbar_arrow", 4|TOGGLE_ARG, LYsb_arrow,
+ "toggles showing arrows at ends of the scrollbar"
+ ),
+#endif
PARSE_FUN(
- "selective", FUNCTION_ARG, selective_fun,
+ "selective", 4|FUNCTION_ARG, selective_fun,
"require .www_browsable files to browse directories"
),
PARSE_SET(
- "show_cursor", TOGGLE_ARG, &LYUseDefShoCur,
+ "short_url", 4|SET_ARG, long_url_ok,
+ "enables examination of beginning and end of long URL in\nstatus line"
+ ),
+#ifdef SH_EX
+ PARSE_SET(
+ "show_cfg", 4|SET_ARG, show_cfg,
+ "Show `LYNX.CFG' setting"
+ ),
+#endif
+ PARSE_SET(
+ "show_cursor", 4|TOGGLE_ARG, LYUseDefShoCur,
"toggles hiding of the cursor in the lower right corner"
),
+#ifdef EXP_READPROGRESS
PARSE_SET(
- "soft_dquotes", TOGGLE_ARG, &soft_dquotes,
+ "show_rate", 4|TOGGLE_ARG, LYShowTransferRate,
+ "toggles display of transfer rate"
+ ),
+#endif
+ PARSE_SET(
+ "soft_dquotes", 4|TOGGLE_ARG, soft_dquotes,
"toggles emulation of the old Netscape and Mosaic bug which\n\
treated '>' as a co-terminator for double-quotes and tags"
),
PARSE_FUN(
- "source", FUNCTION_ARG, source_fun,
+ "source", 4|FUNCTION_ARG, source_fun,
"dump the source of the first file to stdout and exit"
),
PARSE_SET(
- "stack_dump", SET_ARG, &stack_dump,
+ "stack_dump", 4|SET_ARG, stack_dump,
"disable SIGINT cleanup handler"
),
PARSE_SET(
- "startfile_ok", SET_ARG, &startfile_ok,
+ "startfile_ok", 4|SET_ARG, startfile_ok,
"allow non-http startfile and homepage with -validate"
),
+ PARSE_SET(
+ "stdin", 4|SET_ARG, startfile_stdin,
+ "read startfile from standard input"
+ ),
#ifndef VMS
#ifdef SYSLOG_REQUESTED_URLS
PARSE_STR(
- "syslog", NEED_LYSTRING_ARG, &syslog_txt,
+ "syslog", 4|NEED_LYSTRING_ARG, syslog_txt,
"=text\ninformation for syslog call"
),
#endif
#endif
PARSE_SET(
- "tagsoup", SET_ARG, &Old_DTD,
+ "tagsoup", 4|SET_ARG, DTD_recovery,
"use TagSoup rather than SortaSGML parser"
),
PARSE_SET(
- "telnet", UNSET_ARG, &telnet_ok,
+ "telnet", 4|UNSET_ARG, telnet_ok,
"disable telnets"
),
PARSE_STR(
- "term", NEED_STRING_ARG, &terminal,
+ "term", 4|NEED_STRING_ARG, terminal,
"=TERM\nset terminal type to TERM"
),
+#ifdef _WINDOWS
+ PARSE_INT(
+ "timeout", 4|INT_ARG, lynx_timeout,
+ "=NUMBER\nset TCP/IP timeout"
+ ),
+#endif
PARSE_SET(
- "tlog", IGNORE_ARG, 0,
+ "tlog", 2|TOGGLE_ARG, LYUseTraceLog,
"toggles use of a Lynx Trace Log for the current session"
),
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ PARSE_SET(
+ "tna", 4|SET_ARG, textfields_activation_option,
+ "turn on \"Textfields Need Activation\" mode"
+ ),
+#endif
+#ifndef NO_LYNX_TRACE
PARSE_SET(
- "trace", IGNORE_ARG, 0,
+ "trace", 2|SET_ARG, WWW_TraceFlag,
"turns on Lynx trace mode"
),
+ PARSE_INT(
+ "trace_mask", 2|INT_ARG, WWW_TraceMask,
+ "customize Lynx trace mode"
+ ),
+#endif
PARSE_FUN(
- "traversal", FUNCTION_ARG, traversal_fun,
+ "traversal", 4|FUNCTION_ARG, traversal_fun,
"traverse all http links derived from startfile"
),
PARSE_SET(
- "underscore", TOGGLE_ARG, &use_underscore,
+ "trim_input_fields", 2|SET_ARG, LYtrimInputFields,
+ "trim input text/textarea fields in forms"
+ ),
+ PARSE_SET(
+ "underscore", 4|TOGGLE_ARG, use_underscore,
"toggles use of _underline_ format in dumps"
),
-#if defined(NCURSES_MOUSE_VERSION) || defined(USE_SLANG_MOUSE)
+#if defined(USE_MOUSE)
PARSE_SET(
- "use_mouse", SET_ARG, &LYUseMouse,
- "turn on xterm mouse support"
+ "use_mouse", 4|SET_ARG, LYUseMouse,
+ "turn on mouse support"
),
#endif
PARSE_STR(
- "useragent", NEED_LYSTRING_ARG, &LYUserAgent,
+ "useragent", 4|NEED_LYSTRING_ARG, LYUserAgent,
"=Name\nset alternate Lynx User-Agent header"
),
PARSE_SET(
- "validate", IGNORE_ARG, 0,
- "accept only http URLs (for validation)"
+ "validate", 2|SET_ARG, LYValidate,
+ "accept only http URLs (meant for validation)\nimplies more restrictions than -anonymous, but\ngoto is allowed for http and https"
),
PARSE_SET(
- "verbose", TOGGLE_ARG, &verbose_img,
+ "verbose", 4|TOGGLE_ARG, verbose_img,
"toggles [LINK], [IMAGE] and [INLINE] comments \nwith filenames of these images"
),
PARSE_FUN(
- "version", FUNCTION_ARG, version_fun,
+ "version", 4|FUNCTION_ARG, version_fun,
"print Lynx version information"
),
PARSE_SET(
- "vikeys", SET_ARG, &vi_keys,
+ "vikeys", 4|SET_ARG, vi_keys,
"enable vi-like key movement"
),
+#ifdef __DJGPP__
+ PARSE_SET(
+ "wdebug", 4|TOGGLE_ARG, watt_debug,
+ "enables Waterloo tcp/ip packet debug. Prints to watt\ndebugfile"
+ ),
+#endif /* __DJGPP__ */
PARSE_FUN(
- "width", NEED_FUNCTION_ARG, width_fun,
+ "width", 4|NEED_FUNCTION_ARG, width_fun,
"=NUMBER\nscreen width for formatting of dumps (default is 80)"
),
- {NULL, 0, 0, NULL}
+#ifndef NO_DUMP_WITH_BACKSPACES
+ PARSE_SET(
+ "with_backspaces", 4|SET_ARG, with_backspaces,
+ "emit backspaces in output if -dumping or -crawling\n(like 'man' does)"
+ ),
+#endif
+ PARSE_NIL
};
-static void print_help_strings ARGS3(
+PRIVATE void print_help_strings ARGS4(
CONST char *, name,
CONST char *, help,
- CONST char *, value)
+ CONST char *, value,
+ BOOLEAN, option)
{
int pad;
int c;
int first;
int field_width = 20;
- pad = field_width - (4 + (int) strlen (name));
+ pad = field_width - (2 + option + (int) strlen (name));
- fprintf (stdout, " -%s", name);
+ fprintf (stdout, " %s%s", option ? "-" : "", name);
if (*help != '=') {
pad--;
@@ -3116,9 +3808,9 @@ static void print_help_strings ARGS3(
fputc ('\n', stdout);
}
-static void print_help_and_exit ARGS1(int, exit_status)
+PRIVATE void print_help_and_exit ARGS1(int, exit_status)
{
- Parse_Args_Type *p;
+ Config_Type *p;
if (pgm == NULL) pgm = "lynx";
@@ -3126,24 +3818,25 @@ static void print_help_and_exit ARGS1(int, exit_status)
fprintf (stdout, gettext("USAGE: %s [options] [file]\n"), pgm);
fprintf (stdout, gettext("Options are:\n"));
+#ifdef VMS
print_help_strings("",
"receive the arguments from stdin (enclose\n\
-in double-quotes (\"-\") on VMS)", NULL);
+in double-quotes (\"-\") on VMS)", NULL, TRUE);
+#else
+ print_help_strings("", "receive options and arguments from stdin", NULL, TRUE);
+#endif /* VMS */
for (p = Arg_Table; p->name != 0; p++) {
char temp[LINESIZE], *value = temp;
-#ifdef PARSE_DEBUG
- Parse_Args_Type * q = p;
-#else
- ParseUnion *q = (ParseUnion *)(&(p->value));
-#endif
+ ParseUnionPtr q = ParseUnionOf(p);
+
switch (p->type & ARG_TYPE_MASK) {
case TOGGLE_ARG:
case SET_ARG:
- sprintf(temp, "%s", *(q->set_value) ? "on" : "off");
+ strcpy(temp, *(q->set_value) ? "on" : "off");
break;
case UNSET_ARG:
- sprintf(temp, "%s", *(q->set_value) ? "off" : "on");
+ strcpy(temp, *(q->set_value) ? "off" : "on");
break;
case INT_ARG:
sprintf(temp, "%d", *(q->int_value));
@@ -3157,7 +3850,7 @@ in double-quotes (\"-\") on VMS)", NULL);
value = 0;
break;
}
- print_help_strings(p->name, p->help_string, value);
+ print_help_strings(p->name, p->help_string, value, TRUE);
}
SetOutputMode( O_BINARY );
@@ -3173,48 +3866,75 @@ in double-quotes (\"-\") on VMS)", NULL);
* be pointed to that character. (+/- added for toggle processing - BL.)
* If a and b match, it returns 1. Otherwise 0 is returned.
*/
-static int arg_eqs_parse ARGS3(
+PRIVATE int arg_eqs_parse ARGS3(
CONST char *, a,
char *, b,
char **, c)
{
+ int result = -1;
+
*c = NULL;
- while (1) {
+ while (result < 0) {
if ((*a != *b)
|| (*a == 0)
|| (*b == 0)) {
if (*a == 0) {
switch (*b) {
+ case '\t': /* embedded blank when reading stdin */
+ case ' ':
+ *c = LYSkipBlanks(b);
+ result = 1;
+ break;
case '=':
+ case ':':
*c = b + 1;
- return 1;
- case '-': /* FALLTHRU */
+ result = 1;
+ break;
+ case '-':
+#if OPTNAME_ALLOW_DASHES
+ if (isalpha(UCH(b[1]))) {
+ result = 0;
+ break;
+ }
+#endif
+ /* FALLTHRU */
case '+':
*c = b;
- return 1;
+ result = 1;
+ break;
case 0:
- return 1;
+ result = 1;
+ break;
default:
- return 0;
+ result = 0;
+ break;
}
} else {
- return 0;
+#if OPTNAME_ALLOW_DASHES
+ if (!(*a == '_' && *b == '-'))
+#endif
+ result = 0;
}
}
a++;
b++;
- }
+ }
+ return result;
}
#define is_true(s) (*s == '1' || *s == '+' || !strcmp(s, "on"))
#define is_false(s) (*s == '0' || *s == '-' || !strcmp(s, "off"))
-PRIVATE void parse_arg ARGS2(
+PRIVATE BOOL parse_arg ARGS3(
char **, argv,
+ unsigned, mask,
int *, i)
{
- Parse_Args_Type *p;
+ Config_Type *p;
char *arg_name;
+#if EXTENDED_STARTFILE_RECALL
+ static BOOLEAN had_nonoption = FALSE;
+#endif
arg_name = argv[0];
@@ -3227,14 +3947,32 @@ PRIVATE void parse_arg ARGS2(
if (*arg_name != '-' || no_options_further == TRUE )
#endif
{
+#if EXTENDED_STARTFILE_RECALL
+ if (had_nonoption && !dump_output_immediately) {
+ HTAddGotoURL(startfile); /* startfile was set by a previous arg */
+ }
+ had_nonoption = TRUE;
+#endif
StrAllocCopy(startfile, arg_name);
LYEscapeStartfile(&startfile);
- return;
+#ifdef _WINDOWS /* 1998/01/14 (Wed) 20:11:17 */
+ HTUnEscape(startfile);
+ {
+ char *p;
+
+ p = startfile;
+ while (*p++) {
+ if (*p == '|')
+ *p = ':';
+ }
+ }
+#endif
+ return (BOOL)(i != 0);
}
#if EXTENDED_OPTION_LOGIC
if (strcmp(arg_name,"--") == 0) {
no_options_further = TRUE;
- return;
+ return TRUE;
}
#endif
@@ -3247,21 +3985,19 @@ PRIVATE void parse_arg ARGS2(
* special handling. - FM
*/
if (*arg_name == 0)
- return;
+ return TRUE;
/* allow GNU-style options with -- prefix*/
if (*arg_name == '-') ++arg_name;
+ CTRACE((tfp, "parse_arg(%s)\n", arg_name));
p = Arg_Table;
while (p->name != 0) {
-#ifdef PARSE_DEBUG
- Parse_Args_Type *q = p;
-#else
- ParseUnion *q = (ParseUnion *)(&(p->value));
-#endif
+ ParseUnionPtr q = ParseUnionOf(p);
ParseFunc fun;
char *next_arg = NULL;
+ char *temp_ptr = NULL;
if ((p->name[0] != *arg_name)
|| (0 == arg_eqs_parse (p->name, arg_name, &next_arg))) {
@@ -3269,10 +4005,19 @@ PRIVATE void parse_arg ARGS2(
continue;
}
- if ((p->type & NEED_NEXT_ARG) && (next_arg == 0)) {
- next_arg = argv[1];
- if ((i != 0) && (next_arg != 0))
- (*i)++;
+ if (p->type & NEED_NEXT_ARG) {
+ if (next_arg == 0) {
+ next_arg = argv[1];
+ if ((i != 0) && (next_arg != 0))
+ (*i)++;
+ }
+ CTRACE((tfp, "...arg:%s\n", next_arg != 0 ? next_arg : "<null>"));
+ }
+
+ /* ignore option if it's not our turn */
+ if ((p->type & mask) == 0) {
+ CTRACE((tfp, "...skip (mask %d/%d)\n", mask, p->type & 7));
+ return FALSE;
}
switch (p->type & ARG_TYPE_MASK) {
@@ -3283,7 +4028,7 @@ PRIVATE void parse_arg ARGS2(
if (next_arg == 0) {
switch (p->type & ARG_TYPE_MASK) {
case TOGGLE_ARG:
- *(q->set_value) = !(*(q->set_value));
+ *(q->set_value) = (BOOL) !(*(q->set_value));
break;
case SET_ARG:
*(q->set_value) = TRUE;
@@ -3316,25 +4061,24 @@ PRIVATE void parse_arg ARGS2(
case INT_ARG:
if ((q->int_value != 0) && (next_arg != 0))
- *(q->int_value) = atoi (next_arg);
+ *(q->int_value) = strtol (next_arg, &temp_ptr, 0);
break;
case STRING_ARG:
if ((q->str_value != 0) && (next_arg != 0))
*(q->str_value) = next_arg;
break;
-
- case IGNORE_ARG:
- break;
}
- return;
+ Old_DTD = DTD_recovery; /* BOOL != int */
+ return TRUE;
}
if (pgm == 0) pgm = "LYNX";
fprintf (stderr, gettext("%s: Invalid Option: %s\n"), pgm, argv[0]);
print_help_and_exit (-1);
+ return FALSE;
}
#ifndef VMS
@@ -3367,7 +4111,7 @@ PRIVATE void FatalProblem ARGS1(
* Deal with curses, if on, and clean up. - FM
*/
if (LYOutOfMemory && LYCursesON) {
- sleep(AlertSecs);
+ LYSleepAlert();
}
cleanup_sig(0);
#ifndef __linux__
@@ -3392,17 +4136,33 @@ have concise descriptions of the command and/or URL which causes\r\n\
the problem, the operating system name with version number, the\r\n\
TCPIP implementation, and any other relevant information.\r\n");
- fprintf(stderr, "\r\n\
+ if (!(sig == 0 && LYNoCore)) {
+ fprintf(stderr, "\r\n\
Do NOT mail the core file if one was generated.\r\n");
-
- fprintf(stderr, "\r\n\
+ }
+ if (sig != 0) {
+ fprintf(stderr, "\r\n\
Lynx now exiting with signal: %d\r\n\r\n", sig);
+#ifdef WIN_EX /* 1998/08/09 (Sun) 09:58:25 */
+ {
+ char *msg;
+ switch (sig) {
+ case SIGABRT: msg = "SIGABRT"; break;
+ case SIGFPE: msg = "SIGFPE"; break;
+ case SIGILL: msg = "SIGILL"; break;
+ case SIGSEGV: msg = "SIGSEGV"; break;
+ default: msg = "Not-def"; break;
+ }
+ fprintf(stderr, "signal code = %s\n", msg);
+ }
+#endif
+ }
/*
* Exit and possibly dump core.
*/
if (LYNoCore) {
- exit(-1);
+ exit(EXIT_FAILURE);
}
abort();
@@ -3414,7 +4174,7 @@ Lynx now exiting with signal: %d\r\n\r\n", sig);
/*
* Exit without dumping core.
*/
- exit(0);
+ exit(EXIT_SUCCESS);
}
}
#endif /* !VMS */
diff --git a/gnu/usr.bin/lynx/src/LYMainLoop.c b/gnu/usr.bin/lynx/src/LYMainLoop.c
index 31d120938dc..0be71bfcbe8 100644
--- a/gnu/usr.bin/lynx/src/LYMainLoop.c
+++ b/gnu/usr.bin/lynx/src/LYMainLoop.c
@@ -1,5 +1,6 @@
#include <HTUtils.h>
#include <HTAccess.h>
+#include <HTParse.h>
#include <HTList.h>
#include <HTML.h>
#include <HTFTP.h>
@@ -37,8 +38,111 @@
#include <LYCookie.h>
#include <LYMainLoop.h>
#include <LYPrettySrc.h>
+#include <GridText.h>
-#ifdef USE_EXTERNALS
+#ifdef KANJI_CODE_OVERRIDE
+#include <HTCJK.h>
+#endif
+
+#ifdef KANJI_CODE_OVERRIDE
+PUBLIC char *str_kcode(HTkcode code)
+{
+ char *p;
+ static char buff[8];
+
+ if (current_char_set == TRANSPARENT) {
+ p = "THRU";
+ } else if (!LYRawMode) {
+ p = "RAW";
+ } else {
+ switch (code) {
+ case NOKANJI:
+ p = "AUTO";
+ break;
+
+ case EUC:
+ p = "EUC+";
+ break;
+
+ case SJIS:
+ p = "SJIS";
+ break;
+
+ case JIS:
+ p = " JIS";
+ break;
+
+ default:
+ p = " ???";
+ break;
+ }
+ }
+
+#ifdef SH_EX /* 1999/05/25 (Tue) 11:12:05 */
+ if (no_table_center) {
+ buff[0] = '!';
+ strcpy(buff + 1, p);
+ } else {
+ strcpy(buff, p);
+ }
+#else
+ strcpy(buff, p);
+#endif
+
+ return buff;
+}
+#endif
+
+#ifdef WIN_EX
+
+PRIVATE char *str_sjis(char *to, char *from)
+{
+ if (!LYRawMode) {
+ strcpy(to, from);
+#ifdef KANJI_CODE_OVERRIDE
+ } else if (last_kcode == EUC) {
+ EUC_TO_SJIS(from, to);
+ } else if (last_kcode == SJIS) {
+ strcpy(to, from);
+#endif
+ } else {
+ TO_SJIS(from, to);
+ }
+ return to;
+}
+
+PRIVATE void set_ws_title(char * str)
+{
+ SetConsoleTitle(str);
+}
+
+#endif /* WIN_EX */
+
+
+#ifdef SH_EX /* 1998/10/30 (Fri) 10:06:47 */
+
+#define NOT_EQU 1
+
+PRIVATE int str_n_cmp(const char *p, const char *q, int n)
+{
+ if (n == 0)
+ return 0;
+
+ if (p == NULL)
+ return NOT_EQU;
+
+ if (q == NULL)
+ return NOT_EQU;
+
+ return strncmp(p, q, n);
+}
+
+#undef strncmp
+#define strncmp(p, q, r) str_n_cmp(p, q, r)
+
+#endif /* SH_EX */
+
+#if defined(USE_EXTERNALS) || defined(WIN_EX)
#include <LYExtern.h>
#endif
@@ -55,16 +159,21 @@
#include <LYLeaks.h>
+#ifndef DONT_TRACK_INTERNAL_LINKS
+#define NO_INTERNAL_OR_DIFFERENT(c,n) TRUE
+#define NONINTERNAL_OR_PHYS_DIFFERENT(p,n) (!curdoc.internal_link || \
+ are_phys_different(p,n))
+#else /* TRACK_INTERNAL_LINKS */
+#define NO_INTERNAL_OR_DIFFERENT(c,n) are_different(c,n)
+#define NONINTERNAL_OR_PHYS_DIFFERENT(p,n) are_different(p,n)
+#endif /* TRACK_INTERNAL_LINKS */
+
+
PRIVATE void exit_immediately_with_error_message PARAMS((int state, BOOLEAN first_file));
-PRIVATE void print_status_message PARAMS((CONST linkstruct curlink, char **cp));
-PRIVATE BOOL confirm_post_resub PARAMS((
- CONST char* address,
- CONST char* title,
- int if_imgmap,
- int if_file));
+PRIVATE void status_link PARAMS((char *curlink_name, BOOLEAN show_more, BOOLEAN show_indx));
+PRIVATE void show_main_statusline PARAMS((CONST linkstruct curlink, int for_what));
+PRIVATE void form_noviceline PARAMS((int));
PRIVATE int are_different PARAMS((document *doc1, document *doc2));
-PUBLIC void HTGotoURLs_free NOPARAMS;
-PUBLIC void HTAddGotoURL PARAMS((char *url));
#ifndef DONT_TRACK_INTERNAL_LINKS
PRIVATE int are_phys_different PARAMS((document *doc1, document *doc2));
@@ -84,20 +193,32 @@ PRIVATE int sametext ARGS2(
PUBLIC HTList * Goto_URLs = NULL; /* List of Goto URLs */
PUBLIC char * LYRequestTitle = NULL; /* newdoc.title in calls to getfile() */
+PUBLIC char * LYRequestReferer = NULL; /* Referer, may be set in getfile() */
+
+PRIVATE char prev_target[512];
#ifdef DISP_PARTIAL
-PUBLIC int Newline_partial = 0; /* required for display_partial mode */
-PUBLIC int NumOfLines_partial = -1; /* initialize to -1 the very first time */
-PUBLIC BOOLEAN display_partial = FALSE;
-PUBLIC int Newline = 0;
-#else
-PRIVATE int Newline = 0;
+PUBLIC BOOLEAN display_partial = FALSE; /* could be enabled in HText_new() */
+PUBLIC int NumOfLines_partial = 0; /* number of lines displayed in partial mode */
#endif
+PRIVATE int Newline = 0;
PRIVATE document newdoc;
PRIVATE document curdoc;
PRIVATE char *traversal_host = NULL;
PRIVATE char *traversal_link_to_add = NULL;
+PRIVATE char *owner_address = NULL; /* Holds the responsible owner's address */
+PRIVATE char *ownerS_address = NULL; /* Holds owner's address during source fetch */
+
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+PRIVATE BOOL textinput_activated = FALSE;
+#else
+#define textinput_activated TRUE /* a current text input is always active */
+#endif
+#ifdef INACTIVE_INPUT_STYLE_VH
+PUBLIC BOOL textinput_redrawn = FALSE;
+ /*must be public since used in highlight(..)*/
+#endif
#ifdef LY_FIND_LEAKS
/*
@@ -115,28 +236,26 @@ PRIVATE void free_mainloop_variables NOARGS
FREE(curdoc.post_data);
FREE(curdoc.post_content_type);
FREE(curdoc.bookmark);
-#ifdef USE_HASH
+#ifdef USE_COLOR_STYLE
FREE(curdoc.style);
FREE(newdoc.style);
#endif
FREE(traversal_host);
FREE(traversal_link_to_add);
+ FREE(owner_address);
+ FREE(ownerS_address);
#ifdef DIRED_SUPPORT
clear_tags();
+ reset_dired_menu();
#endif /* DIRED_SUPPORT */
+ FREE(WWW_Download_File); /* LYGetFile.c/HTFWriter.c */
+ FREE(LYRequestReferer);
return;
}
#endif /* LY_FIND_LEAKS */
-PUBLIC FILE *TraceFP NOARGS
-{
- if (LYTraceLogFP != 0) {
- return LYTraceLogFP;
- }
- return stderr;
-}
-
+#ifndef NO_LYNX_TRACE
PRIVATE void TracelogOpenFailed NOARGS
{
WWW_TraceFlag = FALSE;
@@ -144,12 +263,51 @@ PRIVATE void TracelogOpenFailed NOARGS
HTUserMsg(TRACELOG_OPEN_FAILED);
} else {
fprintf(stderr, "%s\n", TRACELOG_OPEN_FAILED);
- exit(-1);
+ exit(EXIT_FAILURE);
+ }
+}
+
+PRIVATE BOOLEAN LYReopenTracelog ARGS1(BOOLEAN *, trace_flag_ptr)
+{
+ CTRACE((tfp, "\nTurning off TRACE for fetch of log.\n"));
+ LYCloseTracelog();
+ if ((LYTraceLogFP = LYAppendToTxtFile(LYTraceLogPath)) == NULL) {
+ TracelogOpenFailed();
+ return FALSE;
}
+ if (TRACE) {
+ WWW_TraceFlag = FALSE;
+ *trace_flag_ptr = TRUE;
+ }
+ return TRUE;
+}
+
+PRIVATE void turn_trace_back_on ARGS1(BOOLEAN *, trace_flag_ptr)
+{
+ if (*trace_flag_ptr == TRUE) {
+ WWW_TraceFlag = TRUE;
+ *trace_flag_ptr = FALSE;
+ fprintf(tfp, "Turning TRACE back on.\n\n");
+ }
+}
+#else
+#define LYReopenTracelog(flag) TRUE
+#define turn_trace_back_on(flag) /*nothing*/
+#endif /* NO_LYNX_TRACE */
+
+PUBLIC FILE *TraceFP NOARGS
+{
+#ifndef NO_LYNX_TRACE
+ if (LYTraceLogFP != 0) {
+ return LYTraceLogFP;
+ }
+#endif /* NO_LYNX_TRACE */
+ return stderr;
}
PUBLIC BOOLEAN LYOpenTraceLog NOARGS
{
+#ifndef NO_LYNX_TRACE
if (TRACE && LYUseTraceLog && LYTraceLogFP == NULL) {
/*
* If we can't open it for writing, give up. Otherwise, on VMS close
@@ -173,51 +331,4928 @@ PUBLIC BOOLEAN LYOpenTraceLog NOARGS
fprintf(tfp, "\t\t%s (%s)\n\n", LYNX_TRACELOG_TITLE, LYNX_VERSION);
/*
* If TRACE is on, indicate whether the
- * anonymous restrictions are set. - FM
+ * anonymous restrictions are set. - FM, LP, kw
+ * This is only a summary for convenience - it doesn't
+ * take the case of individual -restrictions= options
+ * into account. - kw
*/
- if (LYRestricted) {
- CTRACE(tfp, "Anonymous restrictions are set.\n");
+ if (LYValidate) {
+ if (LYRestricted && had_restrictions_default) {
+ CTRACE((tfp, "Validate and some anonymous restrictions are set.\n"));
+ } else if (had_restrictions_default) {
+ CTRACE((tfp, "Validate restrictions set, restriction \"default\" was given.\n"));
+ } else if (LYRestricted) {
+ CTRACE((tfp, "Validate restrictions set, additional anonymous restrictions ignored.\n"));
+ } else {
+ CTRACE((tfp, "Validate restrictions are set.\n"));
+ }
+ /* But none of the above can actually happen, since there should
+ * never be a Trace Log with -validate. If it appears in a log
+ * file something went wrong! */
+ } else if (LYRestricted) {
+ if (had_restrictions_all) {
+ CTRACE((tfp, "Anonymous restrictions set, restriction \"all\" was given.\n"));
+ } else {
+ CTRACE((tfp, "Anonymous restrictions are set.\n"));
+ }
+ } else if (had_restrictions_all && had_restrictions_default) {
+ CTRACE((tfp, "Restrictions \"all\" and \"default\" were given.\n"));
+ } else if (had_restrictions_default) {
+ CTRACE((tfp, "Restriction \"default\" was given.\n"));
+ } else if (had_restrictions_all) {
+ CTRACE((tfp, "\"all\" restrictions are set.\n"));
}
}
+#endif /* NO_LYNX_TRACE */
return TRUE;
}
PUBLIC void LYCloseTracelog NOARGS
{
+#ifndef NO_LYNX_TRACE
if (LYTraceLogFP != 0) {
fflush(stdout);
fflush(stderr);
fclose(LYTraceLogFP);
LYTraceLogFP = 0;
}
+#endif /* NO_LYNX_TRACE */
}
-PRIVATE BOOLEAN LYReopenTracelog ARGS1(BOOLEAN *, trace_flag_ptr)
+PUBLIC void handle_LYK_TRACE_TOGGLE NOARGS
{
- CTRACE(tfp, "\nTurning off TRACE for fetch of log.\n");
- LYCloseTracelog();
- if ((LYTraceLogFP = LYAppendToTxtFile(LYTraceLogPath)) == NULL) {
- TracelogOpenFailed();
- return FALSE;
+#ifndef NO_LYNX_TRACE
+ WWW_TraceFlag = ! WWW_TraceFlag;
+ if (LYOpenTraceLog())
+ HTUserMsg(WWW_TraceFlag ? TRACE_ON : TRACE_OFF);
+#else
+ HTUserMsg(TRACE_DISABLED);
+#endif /* NO_LYNX_TRACE */
+}
+
+PUBLIC void LYSetNewline ARGS1(
+ int, value)
+{
+ Newline = value;
+}
+
+PUBLIC int LYGetNewline NOARGS
+{
+ return Newline;
+}
+
+#ifdef SOURCE_CACHE
+/*
+ * To reparse current html document under the different settings we call
+ * reparse_document() within mainloop refresh cycle, it relies upon 'curdoc'.
+ *
+ * From the other hand, regular requests for new document go to getfile()
+ * and rely upon 'newdoc'.
+ *
+ * To work around newdoc.line/curdoc.line/www_search_target/Newline message
+ * the following flag is introduced:
+ */
+PRIVATE BOOLEAN from_source_cache = FALSE;
+
+PRIVATE BOOLEAN reparse_document NOARGS
+{
+ BOOLEAN ok;
+ from_source_cache = TRUE; /* set for LYMainLoop_pageDisplay() */
+ if ((ok = HTreparse_document()) != FALSE) {
+ from_source_cache = TRUE; /* set for mainloop refresh */
+ return ok;
}
- if (TRACE) {
- WWW_TraceFlag = FALSE;
- *trace_flag_ptr = TRUE;
+ from_source_cache = FALSE;
+ return ok;
+}
+#endif /* SOURCE_CACHE */
+
+/*
+ * Prefer reparsing if we can, but reload if we must - to force regeneration
+ * of the display.
+ */
+PRIVATE BOOLEAN reparse_or_reload ARGS1(
+ int *, cmd)
+{
+#ifdef SOURCE_CACHE
+ if (HTcan_reparse_document()) {
+ reparse_document();
+ return FALSE;
}
+#endif
+ *cmd = LYK_RELOAD;
return TRUE;
}
-PRIVATE void do_change_link ARGS1(
- char *, prev_target)
+/*
+ * This is for traversal call from within partial mode in LYUtils.c
+ * and HTFormat.c It simply calls HText_pageDisplay() but utilizes
+ * LYMainLoop.c PRIVATE variables.
+ * Perhaps, this could adhere more logic from mainloop(), in the future.
+ */
+PUBLIC void LYMainLoop_pageDisplay ARGS1(
+ int, line_num)
{
+#ifdef DISP_PARTIAL
+#ifdef SOURCE_CACHE
+ /*
+ * reparse_document() acts on 'curdoc' which always on top of the
+ * history stack: no need to resolve #fragment position since
+ * we already know it (curdoc.line).
+ * So bypass here. Sorry for possible confusion...
+ */
+ if (!from_source_cache)
+#endif
+ /*
+ * Disable display_partial if requested URL has #fragment and we are not
+ * popped from the history stack so can't calculate correct newline
+ * position for fragment. Otherwise user got the new document from the
+ * first page and was moved to #fragment later after download completed,
+ * but only if s/he did not mess screen up by scrolling before... So fall
+ * down to old behavior here ... until we rewrite HTFindPoundSelector()
+ */
+ if (display_partial && newdoc.line == 1 && strchr(newdoc.address, '#')) {
+ display_partial = FALSE; /* restrict for this document */
+ return; /* no repaint */
+ }
+
+ /*
+ * Override Newline with a new value if user
+ * scrolled the document while loading (in LYUtils.c).
+ */
+#endif /* DISP_PARTIAL */
+ Newline = line_num;
+
+ HText_pageDisplay(Newline, prev_target);
+}
+
+
+PRIVATE void set_curdoc_link ARGS1(
+ int, nextlink)
+{
+ if (curdoc.link != nextlink
+ && nextlink >= 0
+ && nextlink < nlinks) {
+ if (curdoc.link >= 0 && curdoc.link < nlinks)
+ highlight(OFF, curdoc.link, prev_target);
+ curdoc.link = nextlink;
+ }
+}
+
+PRIVATE int do_change_link NOARGS
+{
+#ifdef USE_MOUSE
/* Is there a mouse-clicked link waiting? */
int mouse_tmp = get_mouse_link();
/* If yes, use it as the link */
if (mouse_tmp != -1) {
+ if (mouse_tmp < 0 || mouse_tmp >= nlinks) {
+ char *msgtmp = NULL;
+ HTSprintf0(&msgtmp,
+ gettext("Internal error: Invalid mouse link %d!"),
+ mouse_tmp);
+ HTAlert(msgtmp);
+ FREE(msgtmp);
+ return(-1); /* indicates unexpected error */
+ }
+ set_curdoc_link(mouse_tmp);
+ }
+#endif /* USE_MOUSE */
+ return(0); /* indicates OK */
+}
+
+#ifdef DIRED_SUPPORT
+#define DIRED_UNCACHE_1 if (LYAutoUncacheDirLists < 1) /*nothing*/ ;\
+ else HTuncache_current_document()
+#define DIRED_UNCACHE_2 if (LYAutoUncacheDirLists < 2) /*nothing*/ ;\
+ else HTuncache_current_document()
+#endif /* DIRED_SUPPORT */
+
+PRIVATE void do_check_goto_URL ARGS3(
+ char *, user_input_buffer,
+ char **, old_user_input,
+ BOOLEAN *, force_load)
+{
+ static BOOLEAN always = TRUE;
+ static struct {
+ CONST char *name;
+ BOOLEAN *flag;
+ } table[] = {
+ { "file:", &no_file_url },
+ { "file:", &no_goto_file },
+ { "lynxexec:", &no_goto_lynxexec },
+ { "lynxprog:", &no_goto_lynxprog },
+ { "lynxcgi:", &no_goto_lynxcgi },
+ { "cso:", &no_goto_cso },
+ { "finger:", &no_goto_finger },
+ { "ftp:", &no_goto_ftp },
+ { "gopher:", &no_goto_gopher },
+ { "http:", &no_goto_http },
+ { "https:", &no_goto_https },
+ { "mailto:", &no_goto_mailto },
+ { "rlogin:", &no_goto_rlogin },
+ { "telnet:", &no_goto_telnet },
+ { "tn3270:", &no_goto_tn3270 },
+ { "wais:", &no_goto_wais },
+#ifndef DISABLE_BIBP
+ { "bibp:", &no_goto_bibp },
+#endif
+#ifndef DISABLE_NEWS
+ { "news:", &no_goto_news },
+ { "nntp:", &no_goto_nntp },
+ { "snews:", &no_goto_snews },
+#endif
+#ifdef EXEC_LINKS
+ { "lynxexec:", &local_exec_on_local_files },
+ { "lynxprog:", &local_exec_on_local_files },
+#endif /* EXEC_LINKS */
+ { "LYNXCFG:", &no_goto_configinfo },
+ { "LYNXCOMPILEOPTS:", &no_goto_configinfo },
+ { "LYNXCOOKIE:", &always },
+ { "LYNXDIRED:", &always },
+ { "LYNXDOWNLOAD:", &always },
+ { "LYNXOPTIONS:", &always },
+ { "LYNXPRINT:", &always },
+ };
+ unsigned n;
+ BOOLEAN found = FALSE;
+
+ /* allow going to anchors*/
+ if (*user_input_buffer == '#' ) {
+ if ( user_input_buffer[1] &&
+ HTFindPoundSelector(user_input_buffer+1) ) {
+ /* HTFindPoundSelector will initialize www_search_result,
+ so we do nothing else. */
+ HTAddGotoURL(user_input_buffer);
+ }
+ } else {
+ /*
+ * If it's not a URL then make it one.
+ */
+ StrAllocCopy(*old_user_input, user_input_buffer);
+ LYFillLocalFileURL(old_user_input, "file://localhost");
+ LYEnsureAbsoluteURL(old_user_input, "", TRUE);
+ sprintf(user_input_buffer, "%.*s",
+ (int)(MAX_LINE - 1), *old_user_input);
+ FREE(*old_user_input);
+
+ for (n = 0; n < TABLESIZE(table); n++) {
+ if (*(table[n].flag)
+ && !strncmp(user_input_buffer, table[n].name, strlen(table[n].name))) {
+ found = TRUE;
+ HTUserMsg2(GOTO_XXXX_DISALLOWED, table[n].name);
+ break;
+ }
+ }
+ if (found) {
+ ;
+ } else if (LYValidate &&
+ strncmp(user_input_buffer, "http:", 5) &&
+ strncmp(user_input_buffer, "https:", 6)) {
+ HTUserMsg(GOTO_NON_HTTP_DISALLOWED);
+
+ } else {
+ StrAllocCopy(newdoc.address, user_input_buffer);
+ newdoc.isHEAD = FALSE;
+ /*
+ * Might be an anchor in the same doc from a POST
+ * form. If so, dont't free the content. -- FM
+ */
+ if (are_different(&curdoc, &newdoc)) {
+ /*
+ * Make a name for this new URL.
+ */
+ StrAllocCopy(newdoc.title, gettext("A URL specified by the user"));
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ *force_load = TRUE;
+#ifdef DIRED_SUPPORT
+ if (lynx_edit_mode) {
+ DIRED_UNCACHE_2;
+ }
+#endif /* DIRED_SUPPORT */
+ }
+ LYUserSpecifiedURL = TRUE;
+ HTAddGotoURL(newdoc.address);
+ }
+ }
+}
+
+/* returns FALSE if user cancelled input or URL was invalid, TRUE otherwise */
+PRIVATE BOOL do_check_recall ARGS7(
+ int, ch,
+ char *, user_input_buffer,
+ char **, old_user_input,
+ int, URLTotal,
+ int *, URLNum,
+ int, recall,
+ BOOLEAN *, FirstURLRecall)
+{
+ char *cp;
+ BOOL ret = FALSE;
+
+ if (*old_user_input == 0)
+ StrAllocCopy(*old_user_input, "");
+
+ for (;;) {
+#ifdef WIN_EX /* 1998/10/11 (Sun) 10:41:05 */
+ int len = strlen(user_input_buffer);
+ char last_2, last_1, last;
+
+ if (len >= 3) {
+
+ last_2 = user_input_buffer[len - 3];
+ last_1 = user_input_buffer[len - 2];
+ last = user_input_buffer[len - 1];
+
+ if (len < MAX_LINE - 1
+ && last_2 == '/'
+ && isalpha(last_1)
+ && last == ':')
+ LYAddHtmlSep0(user_input_buffer);
+
+ } else if (len == 2 && user_input_buffer[1] == ':') {
+ if (isalpha(UCH(user_input_buffer[0]))) {
+ LYAddHtmlSep0(user_input_buffer);
+ } else {
+ HTUserMsg2(WWW_ILLEGAL_URL_MESSAGE, user_input_buffer);
+ LYstrncpy(user_input_buffer, *old_user_input, MAX_LINE - 1);
+ FREE(*old_user_input);
+ ret = FALSE;
+ break;
+ }
+ }
+#endif
+ /*
+ * Get rid of leading spaces (and any other spaces).
+ */
+ LYTrimAllStartfile(user_input_buffer);
+ if (*user_input_buffer == '\0' &&
+ !(recall && (ch == UPARROW || ch == DNARROW))) {
+ LYstrncpy(user_input_buffer, *old_user_input, MAX_LINE - 1);
+ FREE(*old_user_input);
+ HTInfoMsg(CANCELLED);
+ ret = FALSE;
+ break;
+ }
+ if (recall && ch == UPARROW) {
+ if (*FirstURLRecall) {
+ /*
+ * Use last URL in the list. - FM
+ */
+ *FirstURLRecall = FALSE;
+ *URLNum = 0;
+ } else {
+ /*
+ * Go back to the previous URL in the list. - FM
+ */
+ *URLNum += 1;
+ }
+ if (*URLNum >= URLTotal)
+ /*
+ * Roll around to the last URL in the list. - FM
+ */
+ *URLNum = 0;
+ if ((cp = (char *)HTList_objectAt(Goto_URLs,
+ *URLNum)) != NULL) {
+ LYstrncpy(user_input_buffer, cp, MAX_LINE - 1);
+ if (goto_buffer
+ && **old_user_input
+ && !strcmp(*old_user_input, user_input_buffer)) {
+ _statusline(EDIT_CURRENT_GOTO);
+ } else if ((goto_buffer && URLTotal == 2) ||
+ (!goto_buffer && URLTotal == 1)) {
+ _statusline(EDIT_THE_PREV_GOTO);
+ } else {
+ _statusline(EDIT_A_PREV_GOTO);
+ }
+ if ((ch = LYgetstr(user_input_buffer, VISIBLE,
+ MAX_LINE,
+ recall)) < 0) {
+ /*
+ * User cancelled the Goto via ^G.
+ * Restore user_input_buffer and break. - FM
+ */
+ LYstrncpy(user_input_buffer, *old_user_input, MAX_LINE - 1);
+ FREE(*old_user_input);
+ HTInfoMsg(CANCELLED);
+ ret = FALSE;
+ break;
+ }
+ continue;
+ }
+ } else if (recall && ch == DNARROW) {
+ if (*FirstURLRecall) {
+ /*
+ * Use the first URL in the list. - FM
+ */
+ *FirstURLRecall = FALSE;
+ *URLNum = URLTotal - 1;
+ } else {
+ /*
+ * Advance to the next URL in the list. - FM
+ */
+ *URLNum -= 1;
+ }
+ if (*URLNum < 0)
+ /*
+ * Roll around to the first URL in the list. - FM
+ */
+ *URLNum = URLTotal - 1;
+ if ((cp=(char *)HTList_objectAt(Goto_URLs, *URLNum)) != NULL) {
+ LYstrncpy(user_input_buffer, cp, MAX_LINE - 1);
+ if (goto_buffer && **old_user_input &&
+ !strcmp(*old_user_input, user_input_buffer)) {
+ _statusline(EDIT_CURRENT_GOTO);
+ } else if ((goto_buffer && URLTotal == 2) ||
+ (!goto_buffer && URLTotal == 1)) {
+ _statusline(EDIT_THE_PREV_GOTO);
+ } else {
+ _statusline(EDIT_A_PREV_GOTO);
+ }
+ if ((ch = LYgetstr(user_input_buffer, VISIBLE,
+ MAX_LINE,
+ recall)) < 0) {
+ /*
+ * User cancelled the Goto via ^G.
+ * Restore user_input_buffer and break. - FM
+ */
+ LYstrncpy(user_input_buffer, *old_user_input, MAX_LINE - 1);
+ FREE(*old_user_input);
+ HTInfoMsg(CANCELLED);
+ ret = FALSE;
+ break;
+ }
+ continue;
+ }
+ } else {
+ ret = TRUE;
+ break;
+ }
+ }
+ return ret;
+}
+
+PRIVATE void do_cleanup_after_delete NOARGS
+{
+ HTuncache_current_document();
+ StrAllocCopy(newdoc.address, curdoc.address);
+ FREE(curdoc.address);
+ newdoc.line = curdoc.line;
+ if (curdoc.link == nlinks-1) {
+ /*
+ * We deleted the last link on the page. - FM
+ */
+ newdoc.link = curdoc.link-1;
+ } else {
+ newdoc.link = curdoc.link;
+ }
+}
+
+PRIVATE int find_link_near_col ARGS2(
+ int, col,
+ int, delta)
+{
+ int i;
+
+ for (i = curdoc.link; delta > 0 ? (i < nlinks) : (i >= 0); i += delta) {
+ if ( (links[i].ly - links[curdoc.link].ly) * delta > 0 ) {
+ int cy = links[i].ly, best = -1, dist = 1000000;
+
+ while ((delta > 0 ? (i < nlinks) : (i >= 0)) && cy == links[i].ly) {
+ int cx = links[i].lx;
+
+ if (links[i].hightext)
+ cx += strlen(links[i].hightext)/2;
+ cx -= col;
+ if (cx < 0)
+ cx = -cx;
+ if (cx < dist) {
+ dist = cx;
+ best = i;
+ }
+ i += delta;
+ }
+ return(best);
+ }
+ }
+ return(-1);
+}
+
+/*
+ * This is a special feature to traverse every http link derived from startfile
+ * and check for errors or create crawl output files. Only URL's that begin
+ * with "traversal_host" are searched - this keeps the search from crossing to
+ * other servers (a feature, not a bug!).
+ */
+PRIVATE int DoTraversal ARGS2(
+ int, c,
+ BOOLEAN *, crawl_ok)
+{
+ BOOLEAN rlink_rejected = FALSE;
+ BOOLEAN rlink_exists;
+ BOOLEAN rlink_allowed;
+
+ rlink_exists = (BOOL) (nlinks > 0 &&
+ links[curdoc.link].type != WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].lname != NULL);
+
+ if (rlink_exists) {
+ rlink_rejected = lookup_reject(links[curdoc.link].lname);
+ if (!rlink_rejected &&
+ traversal_host &&
+ links[curdoc.link].lname) {
+ if (strncmp(links[curdoc.link].lname, "LYNXIMGMAP:", 11)) {
+ rlink_allowed = (BOOL) !strncmp(traversal_host,
+ links[curdoc.link].lname,
+ strlen(traversal_host));
+ } else {
+ rlink_allowed = (BOOL) !strncmp(traversal_host,
+ links[curdoc.link].lname + 11,
+ strlen(traversal_host));
+ }
+ } else {
+ rlink_allowed = FALSE;
+ }
+ } else {
+ rlink_allowed = FALSE;
+ }
+ if (rlink_exists && rlink_allowed) {
+ if (lookup(links[curdoc.link].lname)) {
+ if (more_links ||
+ (curdoc.link > -1 && curdoc.link < nlinks -1))
+ c= DNARROW;
+ else {
+ if (STREQ(curdoc.title,"Entry into main screen") ||
+ (nhist <= 0 )) {
+ if (!dump_output_immediately) {
+ cleanup();
+ exit_immediately(EXIT_FAILURE);
+ }
+ return(-1);
+ }
+ c = LTARROW;
+ }
+ } else {
+ StrAllocCopy(traversal_link_to_add,
+ links[curdoc.link].lname);
+ if (strncmp(traversal_link_to_add, "LYNXIMGMAP:", 11))
+ *crawl_ok = TRUE;
+ c = RTARROW;
+ }
+ } else { /* no good right link, so only down and left arrow ok*/
+ if (rlink_exists /* && !rlink_rejected */)
+ /* uncomment in previous line to avoid duplicates - kw */
+ add_to_reject_list(links[curdoc.link].lname);
+ if (more_links ||
+ (curdoc.link > -1 && curdoc.link < nlinks-1))
+ c = DNARROW;
+ else {
+ /*
+ * curdoc.title doesn't always work, so
+ * bail out if the history list is empty.
+ */
+ if (STREQ(curdoc.title,"Entry into main screen") ||
+ (nhist <= 0 )) {
+ if (!dump_output_immediately) {
+ cleanup();
+ exit_immediately(EXIT_FAILURE);
+ }
+ return(-1);
+ }
+ c = LTARROW;
+ }
+ } /* right link not NULL or link to another site*/
+ return c;
+}
+
+#ifndef DONT_TRACK_INTERNAL_LINKS
+PRIVATE BOOLEAN check_history NOARGS
+{
+ CONST char *base;
+
+ if (!curdoc.post_data)
+ /*
+ * Normal case - List Page is not associated
+ * with post data. - kw
+ */
+ return TRUE;
+
+ if (nhist > 0
+ && !LYresubmit_posts
+ && curdoc.post_data
+ && history[nhist - 1].post_data
+ && !strcmp(curdoc.post_data, history[nhist - 1].post_data)
+ && (base = HText_getContentBase()) != 0) {
+ char *text = strncmp(history[nhist - 1].address, "LYNXIMGMAP:", 11)
+ ? history[nhist - 1].address
+ : history[nhist - 1].address + 11;
+ if (!strncmp(base, text, strlen(base))) {
+ /*
+ * Normal case - as best as we can check, the document at the top
+ * of the history stack seems to be the document the List Page is
+ * about (or a LYNXIMGMAP derived from it), and LYresubmit_posts is
+ * not set, so don't prompt here. If we actually have to repeat a
+ * POST because, against expectations, the underlying document
+ * isn't cached any more, HTAccess will prompt for confirmation,
+ * unless we had LYK_NOCACHE -kw
+ */
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+#endif
+
+PRIVATE int handle_LYK_ACTIVATE ARGS6(
+ int *, c,
+ int, cmd GCC_UNUSED,
+ BOOLEAN *, try_internal GCC_UNUSED,
+ BOOLEAN *, refresh_screen,
+ BOOLEAN *, force_load,
+ int, real_cmd)
+{
+ if (do_change_link() == -1) {
+ LYforce_no_cache = FALSE;
+ reloading = FALSE;
+ return 1; /* mouse stuff was confused, ignore - kw */
+ }
+ if (nlinks > 0) {
+ if (links[curdoc.link].type == WWW_FORM_LINK_TYPE) {
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (real_cmd == LYK_ACTIVATE && textfields_need_activation &&
+ F_TEXTLIKE(links[curdoc.link].form->type)) {
+
+ textinput_activated = TRUE;
+ show_main_statusline(links[curdoc.link], FOR_INPUT);
+ textfields_need_activation = textfields_activation_option;
+
+ return 0;
+ }
+#endif
+ /*
+ * Don't try to submit forms with bad actions. - FM
+ */
+ if (links[curdoc.link].form->type == F_SUBMIT_TYPE ||
+ links[curdoc.link].form->type == F_IMAGE_SUBMIT_TYPE ||
+ links[curdoc.link].form->type ==
+ F_TEXT_SUBMIT_TYPE) {
+ /*
+ * Do nothing if it's disabled. - FM
+ */
+ if (links[curdoc.link].form->disabled == YES) {
+ HTOutputFormat = WWW_PRESENT;
+ LYforce_no_cache = FALSE;
+ reloading = FALSE;
+ return 0;
+ }
+ /*
+ * Make sure we have an action. - FM
+ */
+ if (!links[curdoc.link].form->submit_action ||
+ *links[curdoc.link].form->submit_action
+ == '\0') {
+ HTUserMsg(NO_FORM_ACTION);
+ HTOutputFormat = WWW_PRESENT;
+ LYforce_no_cache = FALSE;
+ reloading = FALSE;
+ return 0;
+ }
+ /*
+ * Check for no_mail if the form action
+ * is a mailto URL. - FM
+ */
+ if (links[curdoc.link].form->submit_method
+ == URL_MAIL_METHOD && no_mail) {
+ HTAlert(FORM_MAILTO_DISALLOWED);
+ HTOutputFormat = WWW_PRESENT;
+ LYforce_no_cache = FALSE;
+ reloading = FALSE;
+ return 0;
+ }
+ /*
+ * Make sure this isn't a spoof in an account
+ * with restrictions on file URLs. - FM
+ */
+ if (no_file_url &&
+ !strncasecomp(
+ links[curdoc.link].form->submit_action,
+ "file:", 5)) {
+ HTAlert(FILE_ACTIONS_DISALLOWED);
+ HTOutputFormat = WWW_PRESENT;
+ LYforce_no_cache = FALSE;
+ reloading = FALSE;
+ return 0;
+ }
+ /*
+ * Make sure this isn't a spoof attempt
+ * via an internal URL. - FM
+ */
+ if (!strncasecomp(
+ links[curdoc.link].form->submit_action,
+ "LYNXCOOKIE:", 11) ||
+#ifdef DIRED_SUPPORT
+#ifdef OK_PERMIT
+ (!(strncasecomp(
+ links[curdoc.link].form->submit_action,
+ "LYNXDIRED:", 10)) &&
+ (no_dired_support ||
+ strncasecomp(
+ (links[curdoc.link].form->submit_action + 10),
+ "//PERMIT_LOCATION", 17) ||
+ !LYIsUIPage(curdoc.address, UIP_PERMIT_OPTIONS))) ||
+#else
+ !strncasecomp(
+ links[curdoc.link].form->submit_action,
+ "LYNXDIRED:", 10) ||
+#endif /* OK_PERMIT */
+#endif /* DIRED_SUPPORT */
+ !strncasecomp(
+ links[curdoc.link].form->submit_action,
+ "LYNXDOWNLOAD:", 13) ||
+ !strncasecomp(
+ links[curdoc.link].form->submit_action,
+ "LYNXHIST:", 9) ||
+ !strncasecomp(
+ links[curdoc.link].form->submit_action,
+ "LYNXKEYMAP:", 11) ||
+ !strncasecomp(
+ links[curdoc.link].form->submit_action,
+ "LYNXIMGMAP:", 11) ||
+ !strncasecomp(
+ links[curdoc.link].form->submit_action,
+ "LYNXPRINT:", 10) ||
+ !strncasecomp(
+ links[curdoc.link].form->submit_action,
+ "lynxexec:", 9) ||
+ !strncasecomp(
+ links[curdoc.link].form->submit_action,
+ "lynxprog:", 9)) {
+ HTAlert(SPECIAL_ACTION_DISALLOWED);
+ CTRACE((tfp, "LYMainLoop: Rejected '%s'\n",
+ links[curdoc.link].form->submit_action));
+ HTOutputFormat = WWW_PRESENT;
+ LYforce_no_cache = FALSE;
+ reloading = FALSE;
+ return 0;
+ }
+#ifdef NOTDEFINED /* We're disabling form inputs instead of using this. - FM */
+ /*
+ * Check for enctype and let user know we
+ * don't yet support multipart/form-data - FM
+ */
+ if (links[curdoc.link].form->submit_enctype) {
+ if (!strcmp(
+ links[curdoc.link].form->submit_enctype,
+ "multipart/form-data")) {
+ HTAlert(
+gettext("Enctype multipart/form-data not yet supported! Cannot submit."));
+ HTOutputFormat = WWW_PRESENT;
+ LYforce_no_cache = FALSE;
+ reloading = FALSE;
+ return 0;
+ }
+ }
+#endif /* NOTDEFINED */
+ if (check_realm) {
+ LYPermitURL = TRUE;
+ }
+ if (no_filereferer == TRUE &&
+ !strncmp(curdoc.address, "file:", 5)) {
+ LYNoRefererForThis = TRUE;
+ }
+ if (links[curdoc.link].form->submit_method
+ != URL_MAIL_METHOD) {
+ StrAllocCopy(newdoc.title,
+ links[curdoc.link].hightext);
+ }
+ }
+ /*
+ * Normally we don't get here for text input fields,
+ * but it can happen as a result of mouse positioning.
+ * In that case the statusline will not have updated
+ * info, so update it now. - kw
+ */
+
+ if (F_TEXTLIKE(links[curdoc.link].form->type)) {
+ show_formlink_statusline(links[curdoc.link].form,
+ (real_cmd==LYK_NOCACHE ||
+ real_cmd==LYK_DOWNLOAD ||
+ real_cmd==LYK_HEAD ||
+ (real_cmd==LYK_SUBMIT &&
+ !textinput_activated)) ?
+ FOR_PANEL : FOR_INPUT);
+ if (user_mode==NOVICE_MODE &&
+ textinput_activated &&
+ (real_cmd==LYK_ACTIVATE || real_cmd==LYK_SUBMIT)) {
+ form_noviceline(links[curdoc.link].form->disabled);
+ }
+ }
+
+ *c = change_form_link(&links[curdoc.link],
+ &newdoc, refresh_screen,
+ links[curdoc.link].form->name,
+ links[curdoc.link].form->value,
+ FALSE,
+ (BOOLEAN)(real_cmd==LYK_SUBMIT ||
+ real_cmd==LYK_NOCACHE ||
+ real_cmd==LYK_DOWNLOAD ||
+ real_cmd==LYK_HEAD));
+ if (*c != LKC_DONE || *refresh_screen) {
+ /*
+ * Cannot have been a submit field for which
+ * newdoc was filled in. - kw
+ */
+ if ((links[curdoc.link].form->type == F_SUBMIT_TYPE ||
+ links[curdoc.link].form->type == F_IMAGE_SUBMIT_TYPE ||
+ links[curdoc.link].form->type == F_TEXT_SUBMIT_TYPE) &&
+ links[curdoc.link].form->submit_method
+ != URL_MAIL_METHOD) {
+ /*
+ * Try to undo change of newdoc.title done above.
+ */
+ if (HText_getTitle()) {
+ StrAllocCopy(newdoc.title, HText_getTitle());
+ } else if (curdoc.title) {
+ StrAllocCopy(newdoc.title, curdoc.title);
+ }
+ }
+ } else {
+ if (HTOutputFormat == HTAtom_for("www/download") &&
+ newdoc.post_data != NULL &&
+ newdoc.safe == FALSE) {
+ if ((HText_POSTReplyLoaded(&newdoc) == TRUE) &&
+ HTConfirm(CONFIRM_POST_RESUBMISSION) == FALSE) {
+ HTInfoMsg(CANCELLED);
+ HTOutputFormat = WWW_PRESENT;
+ LYforce_no_cache = FALSE;
+ StrAllocCopy(newdoc.address, curdoc.address);
+ StrAllocCopy(newdoc.title, curdoc.title);
+ StrAllocCopy(newdoc.post_data, curdoc.post_data);
+ StrAllocCopy(newdoc.post_content_type,
+ curdoc.post_content_type);
+ StrAllocCopy(newdoc.bookmark, curdoc.bookmark);
+ newdoc.isHEAD = curdoc.isHEAD;
+ newdoc.safe = curdoc.safe;
+ newdoc.internal_link = curdoc.internal_link;
+ return 0;
+ }
+ }
+ /*
+ * Moved here from earlier to only apply when it
+ * should. Anyway, why should realm checking be
+ * overridden for form submissions, this seems to
+ * be an unnecessary loophole?? But that's the way
+ * it was, maybe there is some reason.
+ * However, at least make sure this doesn't weaken
+ * restrictions implied by -validate!
+ * - kw 1999-05-25
+ */
+ if (check_realm && !LYValidate) {
+ LYPermitURL = TRUE;
+ }
+ }
+ if (*c == LKC_DONE) {
+ *c = DO_NOTHING;
+ } else if (*c == 23) {
+ *c = DO_NOTHING;
+ *refresh_screen = TRUE;
+ } else {
+ /* Avoid getting stuck with repeatedly calling
+ ** handle_LYK_ACTIVATE(), instead of calling
+ ** change_form_link() directly from mainloop(),
+ ** for text input fields. - kw
+ */
+ switch (LKC_TO_C(*c)) {
+ case '\n':
+ case '\r':
+ default:
+ if ((real_cmd == LYK_ACTIVATE || real_cmd == LYK_SUBMIT) &&
+ F_TEXTLIKE(links[curdoc.link].form->type) &&
+ textinput_activated)
+ return 3;
+ break;
+ }
+ }
+ return 2;
+ } else {
+ /*
+ * Not a forms link.
+ *
+ * Make sure this isn't a spoof in an account
+ * with restrictions on file URLs. - FM
+ */
+ if (no_file_url &&
+ !strncmp(links[curdoc.link].lname, "file:", 5)) {
+ if (strncmp(curdoc.address, "file:", 5) &&
+ !((!strncmp(curdoc.address, "LYNXKEYMAP:", 11) ||
+ !strncmp(curdoc.address, "LYNXCOOKIE:", 11)) &&
+ !strncmp(links[curdoc.link].lname,
+ helpfilepath,
+ strlen(helpfilepath)))) {
+ HTAlert(FILE_SERVED_LINKS_DISALLOWED);
+ reloading = FALSE;
+ return 0;
+ } else if (curdoc.bookmark != NULL) {
+ HTAlert(FILE_BOOKMARKS_DISALLOWED);
+ reloading = FALSE;
+ return 0;
+ }
+ }
+ /*
+ * Make sure this isn't a spoof attempt
+ * via an internal URL in a non-internal
+ * document. - FM
+ */
+ if ((!strncmp(links[curdoc.link].lname,
+ "LYNXCOOKIE:", 11) &&
+ (strcmp((curdoc.title ? curdoc.title : ""),
+ COOKIE_JAR_TITLE) ||
+ strncmp(curdoc.address, "LYNXCOOKIE:", 11))) ||
+#ifdef DIRED_SUPPORT
+ (!strncmp(links[curdoc.link].lname,
+ "LYNXDIRED:", 10) &&
+ !LYIsUIPage(curdoc.address, UIP_DIRED_MENU) &&
+ !LYIsUIPage(curdoc.address, UIP_PERMIT_OPTIONS) &&
+#ifdef OK_INSTALL
+ !LYIsUIPage(curdoc.address, UIP_INSTALL) &&
+#endif /* OK_INSTALL */
+ !LYIsUIPage(curdoc.address, UIP_UPLOAD_OPTIONS)) ||
+#endif /* DIRED_SUPPORT */
+ (!strncmp(links[curdoc.link].lname,
+ "LYNXDOWNLOAD:", 13) &&
+ !LYIsUIPage(curdoc.address, UIP_DOWNLOAD_OPTIONS)) ||
+ (!strncmp(links[curdoc.link].lname,
+ "LYNXHIST:", 9) &&
+ !LYIsUIPage(curdoc.address, UIP_HISTORY) &&
+ !LYIsUIPage(curdoc.address, UIP_LIST_PAGE) &&
+ !LYIsUIPage(curdoc.address, UIP_ADDRLIST_PAGE)) ||
+ (!strncmp(links[curdoc.link].lname,
+ "LYNXPRINT:", 10) &&
+ !LYIsUIPage(curdoc.address, UIP_PRINT_OPTIONS))) {
+ HTAlert(SPECIAL_VIA_EXTERNAL_DISALLOWED);
+ HTOutputFormat = WWW_PRESENT;
+ LYforce_no_cache = FALSE;
+ reloading = FALSE;
+ return 0;
+ }
+
+#ifdef USE_EXTERNALS
+ if (run_external(links[curdoc.link].lname, TRUE))
+ {
+ *refresh_screen = TRUE;
+ return 0;
+ }
+#endif /* USE_EXTERNALS */
+
+ /*
+ * Follow a normal link or anchor.
+ */
+ StrAllocCopy(newdoc.address, links[curdoc.link].lname);
+ StrAllocCopy(newdoc.title, links[curdoc.link].hightext);
+#ifndef DONT_TRACK_INTERNAL_LINKS
+ /*
+ * For internal links, retain POST content if present.
+ * If we are on the List Page, prevent pushing it on
+ * the history stack. Otherwise set try_internal to
+ * signal that the top of the loop should attempt to
+ * reposition directly, without calling getfile. - kw
+ */
+ /*
+ * Might be an internal link anchor in the same doc.
+ * If so, take the try_internal shortcut if we didn't
+ * fall through from LYK_NOCACHE. - kw
+ */
+ newdoc.internal_link =
+ (links[curdoc.link].type == WWW_INTERN_LINK_TYPE);
+ if (newdoc.internal_link) {
+ /*
+ * Special case of List Page document with an
+ * internal link indication, which may really stand
+ * for an internal link within the document the
+ * List Page is about. - kw
+ */
+ if (LYIsListpageTitle(curdoc.title ? curdoc.title : "") &&
+ (LYIsUIPage(curdoc.address, UIP_LIST_PAGE) ||
+ LYIsUIPage(curdoc.address, UIP_ADDRLIST_PAGE))) {
+ if (check_history()) {
+ LYinternal_flag = TRUE;
+ } else {
+ HTLastConfirmCancelled(); /* reset flag */
+ if (!confirm_post_resub(newdoc.address,
+ newdoc.title,
+ (LYresubmit_posts &&
+ HText_POSTReplyLoaded(&newdoc)) ? 1 : 2,
+ 2)) {
+ if (HTLastConfirmCancelled() ||
+ (LYresubmit_posts &&
+ cmd != LYK_NOCACHE &&
+ !HText_POSTReplyLoaded(&newdoc))) {
+ /* cancel the whole thing */
+ LYforce_no_cache = FALSE;
+ reloading = FALSE;
+ StrAllocCopy(newdoc.address, curdoc.address);
+ StrAllocCopy(newdoc.title, curdoc.title);
+ newdoc.internal_link = curdoc.internal_link;
+ HTInfoMsg(CANCELLED);
+ return 1;
+ } else if (LYresubmit_posts &&
+ cmd != LYK_NOCACHE) {
+ /* If LYresubmit_posts is set, and the
+ answer was No, and the key wasn't
+ NOCACHE, and we have a cached copy,
+ then use it. - kw */
+ LYforce_no_cache = FALSE;
+ } else {
+ /* if No, but not ^C or ^G, drop
+ * the post data. Maybe the link
+ * wasn't meant to be internal after
+ * all, here we can recover from that
+ * assumption. - kw */
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ newdoc.internal_link = FALSE;
+ HTAlert(DISCARDING_POST_DATA);
+ }
+ }
+ }
+ /*
+ * Don't push the List Page if we follow an
+ * internal link given by it. - kw
+ */
+ FREE(curdoc.address);
+ } else if (cmd != LYK_NOCACHE) {
+ *try_internal = TRUE;
+ }
+ if (!(LYresubmit_posts && newdoc.post_data))
+ LYinternal_flag = TRUE;
+ /* We still set force_load so that history pushing
+ ** etc. will be done. - kw */
+ *force_load = TRUE;
+ return 1;
+ } else {
+ /*
+ * Free POST content if not an internal link. - kw
+ */
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ }
+#endif /* TRACK_INTERNAL_LINKS */
+ /*
+ * Might be an anchor in the same doc from a POST
+ * form. If so, don't free the content. -- FM
+ */
+ if (are_different(&curdoc, &newdoc)) {
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ if (!strncmp(newdoc.address, "LYNXMESSAGES:", 13))
+ LYforce_no_cache = TRUE;
+ }
+ if (!no_jump && lynxjumpfile && curdoc.address &&
+ !strcmp(lynxjumpfile, curdoc.address)) {
+ LYJumpFileURL = TRUE;
+ LYUserSpecifiedURL = TRUE;
+ } else if ((curdoc.title &&
+ (LYIsUIPage(curdoc.address, UIP_HISTORY) ||
+ !strcmp(curdoc.title, HISTORY_PAGE_TITLE))) ||
+ curdoc.bookmark != NULL ||
+ (lynxjumpfile &&
+ !strcmp(lynxjumpfile, curdoc.address))) {
+ LYUserSpecifiedURL = TRUE;
+ } else if (no_filereferer == TRUE &&
+ !strncmp(curdoc.address, "file:", 5)) {
+ LYNoRefererForThis = TRUE;
+ }
+ newdoc.link = 0;
+ *force_load = TRUE; /* force MainLoop to reload */
+#ifdef USE_PRETTYSRC
+ psrc_view = FALSE; /* we get here if link is not internal */
+#endif
+
+#if defined(DIRED_SUPPORT) && !defined(__DJGPP__)
+ if (lynx_edit_mode) {
+ DIRED_UNCACHE_2;
+ /*
+ * Unescaping any slash chars in the URL,
+ * but avoid double unescaping and too-early
+ * unescaping of other chars. - KW
+ */
+ HTUnEscapeSome(newdoc.address,"/");
+ /* avoid stripping final slash for root dir - kw */
+ if (strcasecomp(newdoc.address, "file://localhost/"))
+ strip_trailing_slash(newdoc.address);
+ }
+#endif /* DIRED_SUPPORT && !__DJGPP__ */
+ if (!strncmp(curdoc.address, "LYNXCOOKIE:", 11)) {
+ HTuncache_current_document();
+ }
+ }
+ }
+ return 0;
+}
+
+#ifdef EXP_ADDRLIST_PAGE
+PRIVATE BOOLEAN handle_LYK_ADDRLIST ARGS1(
+ int *, cmd)
+{
+ /*
+ * Don't do if already viewing list addresses page.
+ */
+ if (LYIsUIPage(curdoc.address, UIP_ADDRLIST_PAGE)) {
+ /*
+ * Already viewing list page, so get out.
+ */
+ *cmd = LYK_PREV_DOC;
+ return TRUE;
+ }
+
+ /*
+ * Print address list page to file.
+ */
+ if (showlist(&newdoc, FALSE) < 0)
+ return FALSE;
+ StrAllocCopy(newdoc.title, ADDRLIST_PAGE_TITLE);
+ /*
+ * showlist will set newdoc's other fields. It may leave
+ * post_data intact so the list can be used to follow
+ * internal links in the current document even if it is
+ * a POST response. - kw
+ */
+
+ if (LYValidate || check_realm) {
+ LYPermitURL = TRUE;
+ StrAllocCopy(lynxlistfile, newdoc.address);
+ }
+ return FALSE;
+}
+#endif /* EXP_ADDRLIST_PAGE */
+
+PRIVATE void handle_LYK_ADD_BOOKMARK ARGS3(
+ BOOLEAN *, refresh_screen,
+ int *, old_c,
+ int, real_c)
+{
+ int c;
+
+ if (LYValidate) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(BOOKMARKS_DISABLED);
+ }
+ return;
+ }
+
+ if (!LYIsUIPage(curdoc.address, UIP_HISTORY) &&
+ !LYIsUIPage(curdoc.address, UIP_SHOWINFO) &&
+ !LYIsUIPage(curdoc.address, UIP_PRINT_OPTIONS) &&
+#ifdef DIRED_SUPPORT
+ !LYIsUIPage(curdoc.address, UIP_DIRED_MENU) &&
+ !LYIsUIPage(curdoc.address, UIP_PERMIT_OPTIONS) &&
+ !LYIsUIPage(curdoc.address, UIP_UPLOAD_OPTIONS) &&
+#endif /* DIRED_SUPPORT */
+ !LYIsUIPage(curdoc.address, UIP_DOWNLOAD_OPTIONS) &&
+ strncmp(curdoc.address, "LYNXCOOKIE:", 11) &&
+ !LYIsUIPage(curdoc.address, UIP_OPTIONS_MENU) &&
+ ((nlinks <= 0) ||
+ (links[curdoc.link].lname != NULL &&
+ strncmp(links[curdoc.link].lname, "LYNXHIST:", 9) &&
+ strncmp(links[curdoc.link].lname, "LYNXPRINT:", 10) &&
+ strncmp(links[curdoc.link].lname, "LYNXDIRED:", 10) &&
+ strncmp(links[curdoc.link].lname, "LYNXDOWNLOAD:", 13) &&
+ strncmp(links[curdoc.link].lname, "LYNXCOOKIE:", 11) &&
+ strncmp(links[curdoc.link].lname, "LYNXOPTIONS:", 12)))) {
+ if (nlinks > 0) {
+ if (curdoc.post_data == NULL &&
+ curdoc.bookmark == NULL &&
+ !LYIsUIPage(curdoc.address, UIP_LIST_PAGE) &&
+ !LYIsUIPage(curdoc.address, UIP_ADDRLIST_PAGE) &&
+ !LYIsUIPage(curdoc.address, UIP_VLINKS)) {
+ /*
+ * The document doesn't have POST content,
+ * and is not a bookmark file, nor is the
+ * list or visited links page, so we can
+ * save either that or the link. - FM
+ */
+ _statusline(BOOK_D_L_OR_CANCEL);
+ if ((c = LYgetch_single()) == 'D') {
+ save_bookmark_link(curdoc.address, curdoc.title);
+ *refresh_screen = TRUE; /* MultiBookmark support */
+ goto check_add_bookmark_to_self;
+ }
+ } else {
+ if (LYMultiBookmarks == MBM_OFF &&
+ curdoc.bookmark != NULL &&
+ strstr(curdoc.address,
+ (*bookmark_page == '.'
+ ?
+ (bookmark_page+1) : bookmark_page)) != NULL) {
+ /*
+ * If multiple bookmarks are disabled, offer
+ * the L)ink or C)ancel, but with wording
+ * which indicates that the link already
+ * exists in this bookmark file. - FM
+ */
+ _statusline(MULTIBOOKMARKS_SELF);
+ } else if (curdoc.post_data != NULL &&
+ links[curdoc.link].type == WWW_INTERN_LINK_TYPE) {
+ /*
+ * Internal link, and document has POST content.
+ */
+ HTUserMsg(NOBOOK_POST_FORM);
+ return;
+ } else {
+ /*
+ * Only offer the link in a document with
+ * POST content, or if the current document
+ * is a bookmark file and multiple bookmarks
+ * are enabled. - FM
+ */
+ _statusline(BOOK_L_OR_CANCEL);
+ }
+ c = LYgetch_single();
+ }
+ if (c == 'L') {
+ if (curdoc.post_data != NULL &&
+ links[curdoc.link].type == WWW_INTERN_LINK_TYPE) {
+ /*
+ * Internal link, and document has POST content.
+ */
+ HTUserMsg(NOBOOK_POST_FORM);
+ return;
+ }
+ /*
+ * User does want to save the link. - FM
+ */
+ if (links[curdoc.link].type != WWW_FORM_LINK_TYPE) {
+ save_bookmark_link(links[curdoc.link].lname,
+ links[curdoc.link].hightext);
+ *refresh_screen = TRUE; /* MultiBookmark support */
+ } else {
+ HTUserMsg(NOBOOK_FORM_FIELD);
+ return;
+ }
+ } else {
+ return;
+ }
+ } else if (curdoc.post_data != NULL) {
+ /*
+ * No links, and document has POST content. - FM
+ */
+ HTUserMsg(NOBOOK_POST_FORM);
+ return;
+ } else if (curdoc.bookmark != NULL) {
+ /*
+ * It's a bookmark file from which all
+ * of the links were deleted. - FM
+ */
+ HTUserMsg(BOOKMARKS_NOLINKS);
+ return;
+ } else {
+ _statusline(BOOK_D_OR_CANCEL);
+ if (LYgetch_single() == 'D') {
+ save_bookmark_link(curdoc.address, curdoc.title);
+ *refresh_screen = TRUE; /* MultiBookmark support */
+ } else {
+ return;
+ }
+ }
+check_add_bookmark_to_self:
+ if (curdoc.bookmark && BookmarkPage &&
+ !strcmp(curdoc.bookmark, BookmarkPage)) {
+ HTuncache_current_document();
+ StrAllocCopy(newdoc.address, curdoc.address);
+ StrAllocCopy(newdoc.bookmark, curdoc.bookmark);
+ FREE(curdoc.address);
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link;
+ newdoc.internal_link = FALSE;
+ }
+ } else {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NOBOOK_HSML);
+ }
+ }
+}
+
+PRIVATE void handle_LYK_CLEAR_AUTH ARGS2(
+ int *, old_c,
+ int, real_c)
+{
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ if (HTConfirm(CLEAR_ALL_AUTH_INFO)) {
+ FREE(authentication_info[0]);
+ FREE(authentication_info[1]);
+ FREE(proxyauth_info[0]);
+ FREE(proxyauth_info[1]);
+ HTClearHTTPAuthInfo();
+#ifndef DISABLE_NEWS
+ HTClearNNTPAuthInfo();
+#endif
+#ifndef DISABLE_FTP
+ HTClearFTPPassword();
+#endif
+ HTUserMsg(AUTH_INFO_CLEARED);
+ } else {
+ HTUserMsg(CANCELLED);
+ }
+ }
+}
+
+PRIVATE int handle_LYK_COMMAND ARGS1(
+ char *, user_input_buffer)
+{
+ int ch;
+ Kcmd *mp;
+ char *src, *tmp;
+
+ *user_input_buffer = 0;
+ _statusline(": ");
+ if (LYgetstr(user_input_buffer, VISIBLE, MAX_LINE, RECALL_CMD) >= 0) {
+ src = LYSkipBlanks(user_input_buffer);
+ tmp = LYSkipNonBlanks(src);
+ *tmp = 0;
+ ch = ((mp = LYStringToKcmd(src)) != 0) ? mp->code : 0;
+ CTRACE((tfp, "LYK_COMMAND(%s.%s) = %d\n", src, tmp, ch));
+ if (ch == 0) {
+ return *src ? -1 : 0;
+ }
+ /* FIXME: reuse the rest of the buffer for parameters */
+ return ch;
+ }
+ return 0;
+}
+
+PRIVATE void handle_LYK_COMMENT ARGS4(
+ BOOLEAN *, refresh_screen,
+ char **, owner_address_p,
+ int *, old_c,
+ int, real_c)
+{
+ int c;
+
+ if (!*owner_address_p &&
+ strncasecomp(curdoc.address, "http", 4)) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_OWNER);
+ }
+ } else if (no_mail) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(MAIL_DISALLOWED);
+ }
+ } else {
+ if (HTConfirmDefault(CONFIRM_COMMENT, NO)) {
+ if (!*owner_address_p) {
+ /*
+ * No owner defined, so make a guess and
+ * and offer it to the user. - FM
+ */
+ char *address = NULL;
+ char *temp = HTParse(curdoc.address, "", PARSE_PATH);
+ char *cp;
+
+ if (temp != NULL) {
+ HTUnEscape(temp);
+ if (*temp == '~' && strlen(temp) > 1) {
+ /*
+ * It's a ~user URL so guess user@host. - FM
+ */
+ if ((cp = strchr((temp+1), '/')) != NULL)
+ *cp = '\0';
+ StrAllocCopy(address, "mailto:");
+ StrAllocCat(address, (temp+1));
+ StrAllocCat(address, "@");
+ }
+ FREE(temp);
+ }
+ if (address == NULL)
+ /*
+ * Wasn't a ~user URL so guess WebMaster@host. - FM
+ */
+ StrAllocCopy(address, "mailto:WebMaster@");
+ temp = HTParse(curdoc.address, "", PARSE_HOST);
+ StrAllocCat(address, temp);
+ HTSprintf0(&temp, NO_OWNER_USE, address);
+ c = HTConfirmDefault(temp, NO);
+ FREE(temp);
+ if (c == YES) {
+ StrAllocCopy(*owner_address_p, address);
+ FREE(address);
+ } else {
+ FREE(address);
+ return;
+ }
+ }
+ if (is_url(*owner_address_p) != MAILTO_URL_TYPE) {
+ /*
+ * The address is a URL. Just follow the link.
+ */
+ StrAllocCopy(newdoc.address, *owner_address_p);
+ newdoc.internal_link = FALSE;
+ } else {
+ /*
+ * The owner_address is a mailto: URL.
+ */
+ CONST char *kp = HText_getRevTitle();
+ CONST char *id = HText_getMessageID();
+ char *tmptitle = NULL;
+ if (!kp && HTMainAnchor) {
+ kp = HTAnchor_subject(HTMainAnchor);
+ if (kp && *kp) {
+ if (strncasecomp(kp, "Re: ", 4)) {
+ StrAllocCopy(tmptitle, "Re: ");
+ StrAllocCat(tmptitle, kp);
+ kp = tmptitle;
+ }
+ }
+ }
+
+ if (strchr(*owner_address_p,':')!=NULL)
+ /*
+ * Send a reply. The address is after the colon.
+ */
+ reply_by_mail(strchr(*owner_address_p,':')+1,
+ curdoc.address,
+ (kp ? kp : ""), id);
+ else
+ reply_by_mail(*owner_address_p, curdoc.address,
+ (kp ? kp : ""), id);
+
+ FREE(tmptitle);
+ *refresh_screen = TRUE; /* to force a showpage */
+ }
+ }
+ }
+}
+
+PRIVATE BOOLEAN handle_LYK_COOKIE_JAR ARGS1(
+ int *, cmd)
+{
+ /*
+ * Don't do if already viewing the cookie jar.
+ */
+ if (strncmp(curdoc.address, "LYNXCOOKIE:", 11)) {
+ StrAllocCopy(newdoc.address, "LYNXCOOKIE:/");
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ LYforce_no_cache = TRUE;
+ if (LYValidate || check_realm) {
+ LYPermitURL = TRUE;
+ }
+ } else {
+ /*
+ * If already in the cookie jar, get out.
+ */
+ *cmd = LYK_PREV_DOC;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+#if defined(DIRED_SUPPORT)
+PRIVATE void handle_LYK_CREATE NOARGS
+{
+ if (lynx_edit_mode && !no_dired_support) {
+ if (local_create(&curdoc) > 0) {
+ DIRED_UNCACHE_1;
+ StrAllocCopy(newdoc.address, curdoc.address);
+ FREE(curdoc.address);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link > -1 ? curdoc.link : 0;
+ LYclear();
+ }
+ }
+}
+#endif /* DIRED_SUPPORT */
+
+PRIVATE void handle_LYK_DEL_BOOKMARK ARGS3(
+ BOOLEAN *, refresh_screen,
+ int *, old_c,
+ int, real_c)
+{
+ if (curdoc.bookmark != NULL) {
+ if (HTConfirmDefault(CONFIRM_BOOKMARK_DELETE,NO) != YES)
+ return;
+ remove_bookmark_link(links[curdoc.link].anchor_number-1,
+ curdoc.bookmark);
+ } else { /* behave like REFRESH for backward compatibility */
+ *refresh_screen = TRUE;
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ lynx_force_repaint();
+ }
+ return;
+ }
+ do_cleanup_after_delete();
+}
+
+#if defined(DIRED_SUPPORT) || defined(VMS)
+PRIVATE void handle_LYK_DIRED_MENU ARGS3(
+ BOOLEAN *, refresh_screen,
+ int *, old_c GCC_UNUSED,
+ int, real_c GCC_UNUSED)
+{
+#ifdef VMS
+ char *cp, *temp = 0;
+
+ /*
+ * Check if the CSwing Directory/File Manager is available.
+ * Will be disabled if LYCSwingPath is NULL, zero-length,
+ * or "none" (case insensitive), if no_file_url was set via
+ * the file_url restriction, if no_goto_file was set for
+ * the anonymous account, or if HTDirAccess was set to
+ * HT_DIR_FORBID or HT_DIR_SELECTIVE via the -nobrowse
+ * or -selective switches. - FM
+ */
+ if (!(LYCSwingPath && *LYCSwingPath) ||
+ !strcasecomp(LYCSwingPath, "none") ||
+ no_file_url || no_goto_file ||
+ HTDirAccess == HT_DIR_FORBID ||
+ HTDirAccess == HT_DIR_SELECTIVE) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(DFM_NOT_AVAILABLE);
+ }
+ return;
+ }
+
+ /*
+ * If we are viewing a local directory listing or a
+ * local file which is not temporary, invoke CSwing
+ * with the URL's directory converted to VMS path specs
+ * and passed as the argument, so we start up CSwing
+ * positioned on that node of the directory tree.
+ * Otherwise, pass the current default directory as
+ * the argument. - FM
+ */
+ if (LYisLocalFile(curdoc.address) &&
+ strncasecomp(curdoc.address,
+ lynx_temp_space, strlen(lynx_temp_space))) {
+ /*
+ * We are viewing a local directory or a local file
+ * which is not temporary. - FM
+ */
+ struct stat stat_info;
+
+ cp = HTParse(curdoc.address, "", PARSE_PATH|PARSE_PUNCTUATION);
+ HTUnEscape(cp);
+ if (HTStat(cp, &stat_info) == -1) {
+ CTRACE((tfp, "mainloop: Can't stat %s\n", cp));
+ FREE(cp);
+ HTSprintf0(&temp, "%s []", LYCSwingPath);
+ *refresh_screen = TRUE; /* redisplay */
+ } else {
+ char *VMSdir = NULL;
+
+ if (S_ISDIR(stat_info.st_mode)) {
+ /*
+ * We're viewing a local directory. Make
+ * that the CSwing argument. - FM
+ */
+ LYAddPathSep(&cp);
+ StrAllocCopy(VMSdir, HTVMS_name("", cp));
+ FREE(cp);
+ } else {
+ /*
+ * We're viewing a local file. Make its
+ * directory the CSwing argument. - FM
+ */
+ StrAllocCopy(VMSdir, HTVMS_name("", cp));
+ FREE(cp);
+ if ((cp = strrchr(VMSdir, ']')) != NULL) {
+ *(cp + 1) = '\0';
+ cp == NULL;
+ } else if ((cp = strrchr(VMSdir, ':')) != NULL) {
+ *(cp + 1) = '\0';
+ cp == NULL;
+ }
+ }
+ HTSprintf0(&temp, "%s %s", LYCSwingPath, VMSdir);
+ FREE(VMSdir);
+ /*
+ * Uncache the current document in case we
+ * change, move, or delete it during the
+ * CSwing session. - FM
+ */
+ /* could use DIRED_UNCACHE_1 but it's currently only defined
+ for dired - kw */
+ HTuncache_current_document();
+ StrAllocCopy(newdoc.address, curdoc.address);
+ StrAllocCopy(newdoc.title,
+ curdoc.title ? curdoc.title : "");
+ StrAllocCopy(newdoc.bookmark, curdoc.bookmark);
+ FREE(curdoc.address);
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link;
+ }
+ } else {
+ /*
+ * We're not viewing a local directory or file.
+ * Pass CSwing the current default directory as
+ * an argument and don't uncache the current
+ * document. - FM
+ */
+ HTSprintf0(&temp, "%s []", LYCSwingPath);
+ *refresh_screen = TRUE; /* redisplay */
+ }
+ stop_curses();
+ LYSystem(temp);
+ start_curses();
+ FREE(temp);
+#else
+ /*
+ * Don't do if not allowed or already viewing the menu.
+ */
+ if (lynx_edit_mode && !no_dired_support &&
+ !LYIsUIPage(curdoc.address, UIP_DIRED_MENU) &&
+ strcmp((curdoc.title ? curdoc.title : ""),
+ DIRED_MENU_TITLE)) {
+ dired_options(&curdoc,&newdoc.address);
+ *refresh_screen = TRUE; /* redisplay */
+ }
+#endif /* VMS */
+}
+#endif /* defined(DIRED_SUPPORT) || defined(VMS) */
+
+PRIVATE int handle_LYK_DOWNLOAD ARGS3(
+ int *, cmd,
+ int *, old_c,
+ int, real_c)
+{
+
+ /*
+ * Don't do if both download and disk_save are restricted.
+ */
+ if (LYValidate ||
+ (no_download && !override_no_download && no_disk_save)) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(DOWNLOAD_DISABLED);
+ }
+ return 0;
+ }
+
+ /*
+ * Don't do if already viewing download options page.
+ */
+ if (LYIsUIPage(curdoc.address, UIP_DOWNLOAD_OPTIONS))
+ return 0;
+
+ if (do_change_link() == -1)
+ return 1; /* mouse stuff was confused, ignore - kw */
+ if (nlinks > 0) {
+ if (links[curdoc.link].type == WWW_FORM_LINK_TYPE) {
+ if (links[curdoc.link].form->type == F_SUBMIT_TYPE ||
+ links[curdoc.link].form->type == F_IMAGE_SUBMIT_TYPE ||
+ links[curdoc.link].form->type == F_TEXT_SUBMIT_TYPE) {
+ if (links[curdoc.link].form->submit_method ==
+ URL_MAIL_METHOD) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_DOWNLOAD_MAILTO_ACTION);
+ }
+ return 0;
+ }
+ if (!strncmp(links[curdoc.link].form->submit_action,
+ "LYNXOPTIONS:", 12)) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_DOWNLOAD_SPECIAL);
+ }
+ return 0;
+ }
+ HTOutputFormat = HTAtom_for("www/download");
+ LYforce_no_cache = TRUE;
+ *cmd = LYK_ACTIVATE;
+ return 2;
+ }
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_DOWNLOAD_INPUT);
+ }
+
+ } else if (!strncmp(curdoc.address, "LYNXCOOKIE:", 11)) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_DOWNLOAD_COOKIES);
+ }
+
+ } else if (LYIsUIPage(curdoc.address, UIP_PRINT_OPTIONS)) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_DOWNLOAD_PRINT_OP);
+ }
+
+#ifdef DIRED_SUPPORT
+ } else if (LYIsUIPage(curdoc.address, UIP_UPLOAD_OPTIONS)) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_DOWNLOAD_UPLOAD_OP);
+ }
+
+ } else if (LYIsUIPage(curdoc.address, UIP_PERMIT_OPTIONS)) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_DOWNLOAD_PERMIT_OP);
+ }
+
+ } else if (lynx_edit_mode && !no_dired_support &&
+ !strstr(links[curdoc.link].lname, "/SugFile=")) {
+ /*
+ * Don't bother making a /tmp copy of the local file.
+ */
+ char *temp = NULL;
+ StrAllocCopy(temp, newdoc.address);
+ StrAllocCopy(newdoc.address, links[curdoc.link].lname);
+ if (LYdownload_options(&newdoc.address,
+ links[curdoc.link].lname) < 0)
+ StrAllocCopy(newdoc.address, temp);
+ else
+ newdoc.internal_link = FALSE;
+ FREE(temp);
+#endif /* DIRED_SUPPORT */
+
+ } else if (LYIsUIPage(curdoc.address, UIP_HISTORY) &&
+ !strncmp(links[curdoc.link].lname, "LYNXHIST:", 9)) {
+ int number = atoi(links[curdoc.link].lname+9);
+ if (number >= nhist || number < 0) {
+ HTUserMsg(NO_DOWNLOAD_SPECIAL);
+ return 0;
+ }
+ if ((history[number].post_data != NULL &&
+ history[number].safe != TRUE) &&
+ HTConfirm(CONFIRM_POST_RESUBMISSION) == FALSE) {
+ HTInfoMsg(CANCELLED);
+ return 0;
+ }
+ /*
+ * OK, we download from history page, restore URL from stack.
+ */
+ StrAllocCopy(newdoc.address, history[number].address);
+ StrAllocCopy(newdoc.title, links[curdoc.link].hightext);
+ StrAllocCopy(newdoc.bookmark, history[number].bookmark);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ if (history[number].post_data)
+ StrAllocCopy(newdoc.post_data,
+ history[number].post_data);
+ if (history[number].post_content_type)
+ StrAllocCopy(newdoc.post_content_type,
+ history[number].post_content_type);
+ newdoc.isHEAD = history[number].isHEAD;
+ newdoc.safe = history[number].safe;
+ newdoc.internal_link = FALSE;
+ newdoc.link = 0;
+ HTOutputFormat = HTAtom_for("www/download");
+ LYUserSpecifiedURL = TRUE;
+ /*
+ * Force the document to be reloaded.
+ */
+ LYforce_no_cache = TRUE;
+
+ } else if (!strncmp(links[curdoc.link].lname, "data:", 5)) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTAlert(UNSUPPORTED_DATA_URL);
+ }
+
+ } else if (!strncmp(links[curdoc.link].lname,
+ "LYNXCOOKIE:", 11) ||
+ !strncmp(links[curdoc.link].lname,
+ "LYNXDIRED:", 10) ||
+ !strncmp(links[curdoc.link].lname,
+ "LYNXDOWNLOAD:", 13) ||
+ !strncmp(links[curdoc.link].lname,
+ "LYNXPRINT:", 10) ||
+ !strncmp(links[curdoc.link].lname,
+ "LYNXOPTIONS:", 12) ||
+ !strncmp(links[curdoc.link].lname,
+ "LYNXHIST:", 9) || /* handled above if valid - kw */
+/* @@@ should next two be downloadable? - kw */
+ !strncmp(links[curdoc.link].lname,
+ "LYNXCFG:", 8) ||
+ !strncmp(links[curdoc.link].lname,
+ "LYNXCOMPILEOPTS:", 16) ||
+ !strncmp(links[curdoc.link].lname,
+ "lynxexec:", 9) ||
+ !strncmp(links[curdoc.link].lname,
+ "lynxprog:", 9)) {
+ HTUserMsg(NO_DOWNLOAD_SPECIAL);
+
+ } else if (!strncmp(links[curdoc.link].lname,
+ "mailto:", 7)) {
+ HTUserMsg(NO_DOWNLOAD_MAILTO_LINK);
+
+ /*
+ * From here on we could have a remote host, so check if
+ * that's allowed.
+ *
+ * We copy all these checks from getfile() to LYK_DOWNLOAD
+ * here because LYNXDOWNLOAD:// will NOT be pushing the
+ * previous document into the history stack so preserve
+ * getfile() from returning a wrong status (NULLFILE).
+ */
+ } else if (local_host_only &&
+ !(LYisLocalHost(links[curdoc.link].lname) ||
+ LYisLocalAlias(links[curdoc.link].lname))) {
+ HTUserMsg(ACCESS_ONLY_LOCALHOST);
+ } else { /* Not a forms, options or history link */
+ /*
+ * Follow a normal link or anchor. Note that
+ * if it's an anchor within the same document,
+ * entire document will be downloaded.
+ */
+ StrAllocCopy(newdoc.address, links[curdoc.link].lname);
+ StrAllocCopy(newdoc.title, links[curdoc.link].hightext);
+#ifndef DONT_TRACK_INTERNAL_LINKS
+ /*
+ * Might be an internal link in the same doc from a
+ * POST form. If so, don't free the content. - kw
+ */
+ if (links[curdoc.link].type != WWW_INTERN_LINK_TYPE)
+#else
+ /*
+ * Might be an anchor in the same doc from a POST
+ * form. If so, don't free the content. -- FM
+ */
+ if (are_different(&curdoc, &newdoc))
+#endif /* TRACK_INTERNAL_LINKS */
+ {
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ }
+ newdoc.internal_link = FALSE;
+ newdoc.link = 0;
+ HTOutputFormat = HTAtom_for("www/download");
+ /*
+ * Force the document to be reloaded.
+ */
+ LYforce_no_cache = TRUE;
+ }
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_DOWNLOAD_CHOICE);
+ }
+ return 0;
+}
+
+PRIVATE void handle_LYK_DOWN_HALF ARGS2(
+ int *, old_c,
+ int, real_c)
+{
+ int i;
+
+ if (more) {
+ Newline += (display_lines/2);
+ if (nlinks > 0 && curdoc.link > -1 &&
+ links[curdoc.link].ly > display_lines/2) {
+ newdoc.link = curdoc.link;
+ for (i = 0; links[i].ly <= (display_lines/2); i++)
+ --newdoc.link;
+ }
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(ALREADY_AT_END);
+ }
+}
+
+PRIVATE void handle_LYK_DOWN_LINK ARGS3(
+ int *, follow_col,
+ int *, old_c,
+ int, real_c)
+{
+ if (curdoc.link < (nlinks-1)) { /* more links? */
+ int newlink;
+
+ if (*follow_col == -1) {
+ *follow_col = links[curdoc.link].lx;
+
+ if (links[curdoc.link].hightext)
+ *follow_col += strlen(links[curdoc.link].hightext)/2;
+ }
+
+ newlink = find_link_near_col(*follow_col, 1);
+ if (newlink > -1) {
+ set_curdoc_link(newlink);
+ } else if (more) { /* next page */
+ Newline += (display_lines);
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_LINKS_BELOW);
+ return;
+ }
+ } else if (more) { /* next page */
+ Newline += (display_lines);
+
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(ALREADY_AT_END);
+ }
+}
+
+PRIVATE void handle_LYK_DOWN_TWO ARGS2(
+ int *, old_c,
+ int, real_c)
+{
+ int i;
+
+ if (more) {
+ Newline += 2;
+ if (nlinks > 0 && curdoc.link > -1 &&
+ links[curdoc.link].ly > 2) {
+ newdoc.link = curdoc.link;
+ for (i = 0; links[i].ly <= 2; i++)
+ --newdoc.link;
+ }
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(ALREADY_AT_END);
+ }
+}
+
+PRIVATE int handle_LYK_DWIMEDIT ARGS3(
+ int *, cmd,
+ int *, old_c,
+ int, real_c)
+{
+#ifdef TEXTAREA_AUTOEXTEDIT
+ /*
+ * If we're in a forms TEXTAREA, invoke the editor on *its*
+ * contents, rather than attempting to edit the html source
+ * document. KED
+ */
+ if (nlinks > 0 &&
+ links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
+ *cmd = LYK_EDIT_TEXTAREA;
+ return 2;
+ }
+
+ /*
+ * If we're in a forms TEXT type, tell user the request
+ * is bogus (though in reality, without this trap, if the
+ * document with the TEXT field is local, the editor *would*
+ * be invoked on the source .html file; eg, the o(ptions)
+ * form tempfile).
+ *
+ * [This is done to avoid possible user confusion, due to
+ * auto invocation of the editor on the TEXTAREA's contents
+ * via the above if() statement.]
+ */
+ if (nlinks > 0 &&
+ links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type == F_TEXT_TYPE) {
+ HTUserMsg (CANNOT_EDIT_FIELD);
+ return 1;
+ }
+
+ if (no_editor) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(ANYEDIT_DISABLED);
+ }
+ return 1;
+ }
+#endif /* TEXTAREA_AUTOEXTEDIT */
+ return 0;
+}
+
+PRIVATE int handle_LYK_ECGOTO ARGS5(
+ int *, ch,
+ char *, user_input_buffer,
+ char **, old_user_input,
+ int *, old_c,
+ int, real_c)
+{
+ if (no_goto && !LYValidate) {
+ /*
+ * Go to not allowed. - FM
+ */
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(GOTO_DISALLOWED);
+ }
+ return 0;
+ }
+#ifdef DIRED_SUPPORT
+ if (LYIsUIPage(curdoc.address, UIP_DIRED_MENU) ||
+ LYIsUIPage(curdoc.address, UIP_PERMIT_OPTIONS) ||
+ LYIsUIPage(curdoc.address, UIP_UPLOAD_OPTIONS)) {
+ /*
+ * Disallow editing of File Management URLs. - FM
+ */
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(EDIT_FM_MENU_URLS_DISALLOWED);
+ }
+ return 0;
+ }
+#endif /* DIRED_SUPPORT */
+
+ /*
+ * Save the current user_input_buffer string,
+ * and load the current document's address.
+ */
+ StrAllocCopy(*old_user_input, user_input_buffer);
+ LYstrncpy(user_input_buffer,
+ curdoc.address,
+ (MAX_LINE - 1));
+
+ /*
+ * Warn the user if the current document has POST
+ * data associated with it. - FM
+ */
+ if (curdoc.post_data)
+ HTAlert(CURRENT_DOC_HAS_POST_DATA);
+
+ /*
+ * Offer the current document's URL for editing. - FM
+ */
+ _statusline(EDIT_CURDOC_URL);
+ if (((*ch = LYgetstr(user_input_buffer, VISIBLE,
+ MAX_LINE, RECALL_URL)) >= 0) &&
+ user_input_buffer[0] != '\0' &&
+ strcmp(user_input_buffer, curdoc.address)) {
+ LYTrimAllStartfile(user_input_buffer);
+ if (user_input_buffer[0] != '\0') {
+ return 2;
+ }
+ }
+ /*
+ * User cancelled via ^G, a full deletion,
+ * or not modifying the URL. - FM
+ */
+ HTInfoMsg(CANCELLED);
+ LYstrncpy(user_input_buffer, *old_user_input, MAX_LINE - 1);
+ FREE(*old_user_input);
+ return 0;
+}
+
+PRIVATE void handle_LYK_EDIT ARGS2(
+ int *, old_c,
+ int, real_c)
+{
+#ifdef DIRED_SUPPORT
+ char *cp;
+ char *tp = NULL;
+ struct stat dir_info;
+#endif /* DIRED_SUPPORT */
+
+ if (no_editor) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(EDIT_DISABLED);
+ }
+ } else
+
+#ifdef DIRED_SUPPORT
+ /*
+ * Allow the user to edit the link rather
+ * than curdoc in edit mode.
+ */
+ if (lynx_edit_mode &&
+ editor && *editor != '\0' && !no_dired_support) {
+ if (nlinks > 0) {
+ cp = links[curdoc.link].lname;
+ if (is_url(cp) == FILE_URL_TYPE) {
+ cp = HTfullURL_toFile(cp);
+ StrAllocCopy(tp, cp);
+ FREE(cp);
+
+ if (stat(tp, &dir_info) == -1) {
+ HTAlert(NO_STATUS);
+ } else {
+ if (S_ISREG(dir_info.st_mode)) {
+ StrAllocCopy(tp, links[curdoc.link].lname);
+ HTUnEscapeSome(tp, "/");
+ if (edit_current_file(tp, curdoc.link, Newline)) {
+ DIRED_UNCACHE_1;
+ StrAllocCopy(newdoc.address,
+ curdoc.address);
+ FREE(curdoc.address);
+#ifdef NO_SEEK_OLD_POSITION
+ /*
+ * Go to top of file.
+ */
+ newdoc.line = 1;
+ newdoc.link = 0;
+#else
+ /*
+ * Seek old position,
+ * which probably changed.
+ */
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link;
+#endif /* NO_SEEK_OLD_POSITION */
+ LYclear(); /* clear the screen */
+ }
+ }
+ }
+ FREE(tp);
+ }
+ }
+ } else
+#endif /* DIRED_SUPPORT */
+ if (editor && *editor != '\0') {
+ if (edit_current_file(newdoc.address, curdoc.link, Newline)) {
+ HTuncache_current_document();
+ LYforce_no_cache = TRUE; /*force reload of document */
+ FREE(curdoc.address); /* so it doesn't get pushed */
+#ifdef NO_SEEK_OLD_POSITION
+ /*
+ * Go to top of file.
+ */
+ newdoc.line = 1;
+ newdoc.link = 0;
+#else
+ /*
+ * Seek old position, which probably changed.
+ */
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link;
+#endif /* NO_SEEK_OLD_POSITION */
+ LYclear(); /* clear the screen */
+ }
+
+ } else {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_EDITOR);
+ }
+ }
+}
+
+PRIVATE void handle_LYK_DWIMHELP ARGS1(
+ CONST char **, cshelpfile)
+{
+ /*
+ * Currently a help file different from the main
+ * 'helpfile' is shown only if current link is a
+ * text input form field. - kw
+ */
+ if (curdoc.link >= 0 && curdoc.link < nlinks &&
+ links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ !links[curdoc.link].form->disabled &&
+ (links[curdoc.link].form->type == F_TEXT_TYPE ||
+ links[curdoc.link].form->type == F_TEXT_SUBMIT_TYPE ||
+ links[curdoc.link].form->type == F_PASSWORD_TYPE ||
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE)) {
+ *cshelpfile = LYLineeditHelpURL();
+ }
+}
+
+PRIVATE void handle_LYK_EDIT_TEXTAREA ARGS3(
+ BOOLEAN *, refresh_screen,
+ int *, old_c,
+ int, real_c)
+{
+ int n;
+
+ if (no_editor) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(ANYEDIT_DISABLED);
+ }
+ } else if (!editor || *editor == '\0') {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_EDITOR);
+ }
+ }
+ /*
+ * See if the current link is in a form TEXTAREA.
+ */
+ else if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
+
+ /* stop screen */
+ stop_curses();
+
+ n = HText_ExtEditForm (&links[curdoc.link]);
+
+ /*
+ * TODO: Move cursor "n" lines from the current line to
+ * position it on the 1st trailing blank line in
+ * the now edited TEXTAREA. If the target line/
+ * anchor requires us to scroll up/down, position
+ * the target in the approximate center of the
+ * screen.
+ */
+
+ /* curdoc.link += n;*/ /* works, except for page crossing, */
+ /* damnit; why is nothing ever easy */
+
+ /* start screen */
+ start_curses();
+ *refresh_screen = TRUE;
+
+ } else {
+
+ HTInfoMsg (NOT_IN_TEXTAREA_NOEDIT);
+ }
+}
+
+PRIVATE int handle_LYK_ELGOTO ARGS5(
+ int *, ch,
+ char *, user_input_buffer,
+ char **, old_user_input,
+ int *, old_c,
+ int, real_c)
+{
+ if (no_goto && !LYValidate) {
+ /*
+ * Go to not allowed. - FM
+ */
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(GOTO_DISALLOWED);
+ }
+ return 0;
+ }
+ if (!(nlinks > 0 && curdoc.link > -1) ||
+ (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type != F_SUBMIT_TYPE &&
+ links[curdoc.link].form->type != F_IMAGE_SUBMIT_TYPE &&
+ links[curdoc.link].form->type != F_TEXT_SUBMIT_TYPE)) {
+ /*
+ * No links on page, or not a normal link
+ * or form submit button. - FM
+ */
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NOT_ON_SUBMIT_OR_LINK);
+ }
+ return 0;
+ }
+ if ((links[curdoc.link].type == WWW_FORM_LINK_TYPE) &&
+ (!links[curdoc.link].form->submit_action ||
+ *links[curdoc.link].form->submit_action == '\0')) {
+ /*
+ * Form submit button with no ACTION defined. - FM
+ */
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_FORM_ACTION);
+ }
+ return 0;
+ }
+#ifdef DIRED_SUPPORT
+ if (!strncmp(links[curdoc.link].lname, "LYNXDIRED:", 10) ||
+ LYIsUIPage(curdoc.address, UIP_DIRED_MENU) ||
+ LYIsUIPage(curdoc.address, UIP_PERMIT_OPTIONS) ||
+ LYIsUIPage(curdoc.address, UIP_UPLOAD_OPTIONS)) {
+ /*
+ * Disallow editing of File Management URLs. - FM
+ */
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(EDIT_FM_MENU_URLS_DISALLOWED);
+ }
+ return 0;
+ }
+#endif /* DIRED_SUPPORT */
+
+ /*
+ * Save the current user_input_buffer string,
+ * and load the current link's address. - FM
+ */
+ StrAllocCopy(*old_user_input, user_input_buffer);
+ LYstrncpy(user_input_buffer,
+ ((links[curdoc.link].type == WWW_FORM_LINK_TYPE)
+ ?
+ links[curdoc.link].form->submit_action : links[curdoc.link].lname),
+ (MAX_LINE - 1));
+
+ /*
+ * Offer the current link's URL for editing. - FM
+ */
+ _statusline(EDIT_CURLINK_URL);
+ if (((*ch = LYgetstr(user_input_buffer, VISIBLE,
+ MAX_LINE, RECALL_URL)) >= 0) &&
+ user_input_buffer[0] != '\0' &&
+ strcmp(user_input_buffer,
+ ((links[curdoc.link].type == WWW_FORM_LINK_TYPE)
+ ? links[curdoc.link].form->submit_action
+ : links[curdoc.link].lname))) {
+ LYTrimAllStartfile(user_input_buffer);
+ if (user_input_buffer[0] != '\0') {
+ return 2;
+ }
+ }
+ /*
+ * User cancelled via ^G, a full deletion,
+ * or not modifying the URL. - FM
+ */
+ HTInfoMsg(CANCELLED);
+ LYstrncpy(user_input_buffer, *old_user_input, MAX_LINE - 1);
+ FREE(*old_user_input);
+ return 0;
+}
+
+#ifdef USE_EXTERNALS
+PRIVATE void handle_LYK_EXTERN_LINK ARGS1(
+ BOOLEAN *, refresh_screen)
+{
+ if ((nlinks > 0) && (links[curdoc.link].lname != NULL))
+ {
+ run_external(links[curdoc.link].lname, FALSE);
+ *refresh_screen = TRUE;
+ }
+}
+
+PRIVATE void handle_LYK_EXTERN_PAGE ARGS1(
+ BOOLEAN *, refresh_screen)
+{
+ if (curdoc.address != NULL)
+ {
+ run_external(curdoc.address, FALSE);
+ *refresh_screen = TRUE;
+ }
+}
+#endif
+
+PRIVATE BOOLEAN handle_LYK_FASTBACKW_LINK ARGS3(
+ int *, cmd,
+ int *, old_c,
+ int, real_c)
+{
+ int samepage = 0, nextlink = curdoc.link;
+ int res;
+
+ if (nlinks > 1) {
+
+ /*
+ * If in textarea, move to first link or textarea group
+ * before it if there is one on this screen. - kw
+ */
+ if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
+ int thisgroup = links[curdoc.link].form->number;
+ char *thisname = links[curdoc.link].form->name;
+
+ if (curdoc.link > 0 &&
+ !(links[0].type == WWW_FORM_LINK_TYPE &&
+ links[0].form->type == F_TEXTAREA_TYPE &&
+ links[0].form->number == thisgroup &&
+ sametext(links[0].form->name, thisname))) {
+ do nextlink--;
+ while
+ (links[nextlink].type == WWW_FORM_LINK_TYPE &&
+ links[nextlink].form->type == F_TEXTAREA_TYPE &&
+ links[nextlink].form->number == thisgroup &&
+ sametext(links[nextlink].form->name, thisname));
+ samepage = 1;
+
+ } else if (!more && Newline == 1 &&
+ (links[0].type == WWW_FORM_LINK_TYPE &&
+ links[0].form->type == F_TEXTAREA_TYPE &&
+ links[0].form->number == thisgroup &&
+ sametext(links[0].form->name, thisname)) &&
+ !(links[nlinks-1].type == WWW_FORM_LINK_TYPE &&
+ links[nlinks-1].form->type == F_TEXTAREA_TYPE &&
+ links[nlinks-1].form->number == thisgroup &&
+ sametext(links[nlinks-1].form->name, thisname))) {
+ nextlink = nlinks - 1;
+ samepage = 1;
+
+ } else if (!more && Newline == 1 && curdoc.link > 0) {
+ nextlink = 0;
+ samepage = 1;
+ }
+ } else if (curdoc.link > 0) {
+ nextlink--;
+ samepage = 1;
+ } else if (!more && Newline == 1) {
+ nextlink = nlinks - 1;
+ samepage = 1;
+ }
+ }
+ if (samepage) {
+ /*
+ * If the link as determined so far is part of a
+ * group of textarea fields, try to use the first
+ * of them that's on the screen instead. - kw
+ */
+ if (nextlink > 0 &&
+ links[nextlink].type == WWW_FORM_LINK_TYPE &&
+ links[nextlink].form->type == F_TEXTAREA_TYPE) {
+ int thisgroup = links[nextlink].form->number;
+ char *thisname = links[nextlink].form->name;
+ if (links[0].type == WWW_FORM_LINK_TYPE &&
+ links[0].form->type == F_TEXTAREA_TYPE &&
+ links[0].form->number == thisgroup &&
+ sametext(links[0].form->name, thisname)) {
+ nextlink = 0;
+ } else
+ while
+ (nextlink > 1 &&
+ links[nextlink-1].type == WWW_FORM_LINK_TYPE &&
+ links[nextlink-1].form->type == F_TEXTAREA_TYPE &&
+ links[nextlink-1].form->number == thisgroup &&
+ sametext(links[nextlink-1].form->name, thisname)) {
+ nextlink--;
+ }
+ }
+ set_curdoc_link(nextlink);
+ return FALSE; /* and we are done. */
+
+ } else if (Newline > 1 && /* need a previous page */
+ (res = HTGetLinkOrFieldStart(curdoc.link,
+ &Newline, &newdoc.link,
+ -1, TRUE)) != NO) {
+ if (res == LINK_DO_ARROWUP) {
+ /*
+ * It says we should use the normal PREV_LINK
+ * mechanism, so we'll do that. - kw
+ */
+ if (nlinks > 0)
+ curdoc.link = 0;
+ *cmd = LYK_PREV_LINK;
+ return TRUE;
+ }
+ Newline++; /* our line counting starts with 1 not 0 */
+ /* nothing more to do here */
+
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(NO_LINKS_ABOVE);
+ }
+ return FALSE;
+}
+
+PRIVATE void handle_LYK_FASTFORW_LINK ARGS2(
+ int *, old_c,
+ int, real_c)
+{
+ int samepage = 0, nextlink = curdoc.link;
+
+ if (nlinks > 1) {
+
+ /*
+ * If in textarea, move to first link or field
+ * after it if there is one on this screen. - kw
+ */
+ if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
+ int thisgroup = links[curdoc.link].form->number;
+ char *thisname = links[curdoc.link].form->name;
+
+ if (curdoc.link < nlinks-1 &&
+ !(links[nlinks-1].type == WWW_FORM_LINK_TYPE &&
+ links[nlinks-1].form->type == F_TEXTAREA_TYPE &&
+ links[nlinks-1].form->number == thisgroup &&
+ sametext(links[nlinks-1].form->name, thisname))) {
+ do nextlink++;
+ while
+ (links[nextlink].type == WWW_FORM_LINK_TYPE &&
+ links[nextlink].form->type == F_TEXTAREA_TYPE &&
+ links[nextlink].form->number == thisgroup &&
+ sametext(links[nextlink].form->name, thisname));
+ samepage = 1;
+ } else if (!more && Newline == 1 && curdoc.link > 0) {
+ nextlink = 0;
+ samepage = 1;
+ }
+ } else if (curdoc.link < nlinks-1) {
+ nextlink++;
+ samepage = 1;
+ } else if (!more && Newline == 1 && curdoc.link > 0) {
+ nextlink = 0;
+ samepage = 1;
+ }
+ }
+ if (samepage) {
+ set_curdoc_link(nextlink);
+ return; /* and we are done. */
+
+ /*
+ * At the bottom of list and there is only one page.
+ * Move to the top link on the page.
+ */
+ } else if (!more && Newline == 1 && curdoc.link == nlinks-1) {
+ set_curdoc_link(0);
+
+ } else if (more && /* need a later page */
+ HTGetLinkOrFieldStart(curdoc.link,
+ &Newline, &newdoc.link,
+ 1, TRUE) != NO) {
+ Newline++; /* our line counting starts with 1 not 0 */
+ /* nothing more to do here */
+
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(NO_LINKS_BELOW);
+ }
+ return;
+}
+
+PRIVATE void handle_LYK_FIRST_LINK NOARGS
+{
+ int i = curdoc.link;
+
+ for (;;) {
+ if (--i < 0
+ || links[i].ly != links[curdoc.link].ly) {
+ set_curdoc_link(i + 1);
+ break;
+ }
+ }
+}
+
+PRIVATE BOOLEAN handle_LYK_GOTO ARGS9(
+ int *, ch,
+ char *, user_input_buffer,
+ char **, old_user_input,
+ int *, recall,
+ int *, URLTotal,
+ int *, URLNum,
+ BOOLEAN *, FirstURLRecall,
+ int *, old_c,
+ int, real_c)
+{
+
+ if (no_goto && !LYValidate) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(GOTO_DISALLOWED);
+ }
+ return FALSE;
+ }
+
+ StrAllocCopy(*old_user_input, user_input_buffer);
+ if (!goto_buffer)
+ *user_input_buffer = '\0';
+
+ *URLTotal = (Goto_URLs ? HTList_count(Goto_URLs) : 0);
+ if (goto_buffer && *user_input_buffer) {
+ *recall = ((*URLTotal > 1) ? RECALL_URL : NORECALL);
+ *URLNum = 0;
+ *FirstURLRecall = FALSE;
+ } else {
+ *recall = ((*URLTotal >= 1) ? RECALL_URL : NORECALL);
+ *URLNum = *URLTotal;
+ *FirstURLRecall = TRUE;
+ }
+
+ /*
+ * Ask the user.
+ */
+ _statusline(URL_TO_OPEN);
+ if ((*ch = LYgetstr(user_input_buffer, VISIBLE,
+ MAX_LINE, *recall)) < 0 ) {
+ /*
+ * User cancelled the Goto via ^G.
+ * Restore user_input_buffer and break. - FM
+ */
+ LYstrncpy(user_input_buffer, *old_user_input, MAX_LINE - 1);
+ FREE(*old_user_input);
+ HTInfoMsg(CANCELLED);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+PRIVATE void handle_LYK_GROW_TEXTAREA ARGS1(
+ BOOLEAN *, refresh_screen)
+{
+ /*
+ * See if the current link is in a form TEXTAREA.
+ */
+ if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
+
+ HText_ExpandTextarea (&links[curdoc.link], TEXTAREA_EXPAND_SIZE);
+
+ *refresh_screen = TRUE;
+
+ } else {
+
+ HTInfoMsg (NOT_IN_TEXTAREA);
+ }
+}
+
+PRIVATE BOOLEAN handle_LYK_HEAD ARGS1(
+ int *, cmd)
+{
+ int c;
+
+ if (nlinks > 0 &&
+ (links[curdoc.link].type != WWW_FORM_LINK_TYPE ||
+ links[curdoc.link].form->type == F_SUBMIT_TYPE ||
+ links[curdoc.link].form->type == F_IMAGE_SUBMIT_TYPE ||
+ links[curdoc.link].form->type == F_TEXT_SUBMIT_TYPE)) {
+ /*
+ * We have links, and the current link is a normal link or a form's
+ * submit button. - FM
+ */
+ _statusline(HEAD_D_L_OR_CANCEL);
+ c = LYgetch_single();
+ if (c == 'D') {
+ char *scheme = strncmp(curdoc.address, "LYNXIMGMAP:", 11) ?
+ curdoc.address : curdoc.address + 11;
+ if (LYCanDoHEAD(scheme) != TRUE) {
+ HTUserMsg(DOC_NOT_HTTP_URL);
+ } else {
+ /*
+ * Check if this is a reply from a POST, and if so, seek
+ * confirmation if the safe element is not set. - FM
+ */
+ if ((curdoc.post_data != NULL &&
+ curdoc.safe != TRUE) &&
+ HTConfirm(CONFIRM_POST_DOC_HEAD) == FALSE) {
+ HTInfoMsg(CANCELLED);
+ } else {
+ HEAD_request = TRUE;
+ LYforce_no_cache = TRUE;
+ StrAllocCopy(newdoc.title, curdoc.title);
+ if (HTLoadedDocumentIsHEAD()) {
+ HTuncache_current_document();
+ FREE(curdoc.address);
+ } else {
+ StrAllocCat(newdoc.title, " - HEAD");
+ }
+ }
+ }
+ } else if (c == 'L') {
+ if (links[curdoc.link].type != WWW_FORM_LINK_TYPE &&
+ strncmp(links[curdoc.link].lname, "http", 4) &&
+ strncmp(links[curdoc.link].lname,
+ "LYNXIMGMAP:http", 15) &&
+ LYCanDoHEAD(links[curdoc.link].lname) != TRUE &&
+ (links[curdoc.link].type != WWW_INTERN_LINK_TYPE ||
+ !curdoc.address ||
+ strncmp(curdoc.address, "http", 4))) {
+ HTUserMsg(LINK_NOT_HTTP_URL);
+ } else if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->disabled) {
+ HTUserMsg(FORM_ACTION_DISABLED);
+ } else if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ strncmp(links[curdoc.link].form->submit_action,
+ "lynxcgi:", 8) &&
+ strncmp(links[curdoc.link].form->submit_action,
+ "http", 4)) {
+ HTUserMsg(FORM_ACTION_NOT_HTTP_URL);
+ } else if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->submit_method ==
+ URL_POST_METHOD &&
+ HTConfirm(CONFIRM_POST_LINK_HEAD) == FALSE) {
+ HTInfoMsg(CANCELLED);
+ } else {
+ HEAD_request = TRUE;
+ LYforce_no_cache = TRUE;
+ *cmd = LYK_ACTIVATE;
+ return TRUE;
+ }
+ }
+ } else {
+ /*
+ * We can offer only this document for a HEAD request. Check if this
+ * is a reply from a POST, and if so, seek confirmation if the safe
+ * element is not set. - FM
+ */
+ if ((curdoc.post_data != NULL &&
+ curdoc.safe != TRUE) &&
+ HTConfirm(CONFIRM_POST_DOC_HEAD) == FALSE) {
+ HTInfoMsg(CANCELLED);
+ } else {
+ if (nlinks > 0) {
+ /*
+ * The current link is a non-submittable form link, so prompt
+ * the user to make it clear that the HEAD request would be for
+ * the current document, not the form link. - FM
+ */
+ _statusline(HEAD_D_OR_CANCEL);
+ c = LYgetch_single();
+ } else {
+ /*
+ * No links, so we can just assume that the user wants a HEAD
+ * request for the current document. - FM
+ */
+ c = 'D';
+ }
+ if (c == 'D') {
+ char *scheme = strncmp(curdoc.address, "LYNXIMGMAP:", 11) ?
+ curdoc.address : curdoc.address + 11;
+ /*
+ * The user didn't cancel, so check if a HEAD request is
+ * appropriate for the current document. - FM
+ */
+ if (LYCanDoHEAD(scheme) != TRUE) {
+ HTUserMsg(DOC_NOT_HTTP_URL);
+ } else {
+ HEAD_request = TRUE;
+ LYforce_no_cache = TRUE;
+ StrAllocCopy(newdoc.title, curdoc.title);
+ if (HTLoadedDocumentIsHEAD()) {
+ HTuncache_current_document();
+ FREE(curdoc.address);
+ } else {
+ StrAllocCat(newdoc.title, " - HEAD");
+ }
+ }
+ }
+ }
+ }
+ return FALSE;
+}
+
+PRIVATE void handle_LYK_HELP ARGS1(
+ CONST char **, cshelpfile)
+{
+ if (*cshelpfile == NULL)
+ *cshelpfile = helpfile;
+ if (!STREQ(curdoc.address, *cshelpfile)) {
+ /*
+ * Set the filename.
+ */
+ StrAllocCopy(newdoc.address, *cshelpfile);
+ /*
+ * Make a name for this help file.
+ */
+ StrAllocCopy(newdoc.title, gettext("Help Screen"));
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ }
+ *cshelpfile = NULL; /* reset pointer - kw */
+}
+
+PRIVATE void handle_LYK_HISTORICAL NOARGS
+{
+#ifdef SOURCE_CACHE
+ if (!HTcan_reparse_document()) {
+#endif
+ /*
+ * Check if this is a reply from a POST, and if so,
+ * seek confirmation of reload if the safe element
+ * is not set. - FM
+ */
+ if ((curdoc.post_data != NULL &&
+ curdoc.safe != TRUE) &&
+ confirm_post_resub(curdoc.address, NULL,
+ 0, 0) == FALSE) {
+ HTInfoMsg(WILL_NOT_RELOAD_DOC);
+ } else {
+ HTuncache_current_document();
+ StrAllocCopy(newdoc.address, curdoc.address);
+ FREE(curdoc.address);
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link;
+ }
+#ifdef SOURCE_CACHE
+ } /* end if no bypass */
+#endif
+ if (historical_comments)
+ historical_comments = FALSE;
+ else
+ historical_comments = TRUE;
+ if (minimal_comments) {
+ HTAlert(historical_comments ?
+ HISTORICAL_ON_MINIMAL_OFF : HISTORICAL_OFF_MINIMAL_ON);
+ } else {
+ HTAlert(historical_comments ?
+ HISTORICAL_ON_VALID_OFF : HISTORICAL_OFF_VALID_ON);
+ }
+#ifdef SOURCE_CACHE
+ (void) reparse_document();
+#endif
+ return;
+}
+
+PRIVATE BOOLEAN handle_LYK_HISTORY ARGS1(
+ BOOLEAN, ForcePush)
+{
+ if (curdoc.title && !LYIsUIPage(curdoc.address, UIP_HISTORY)) {
+ /*
+ * Don't do this if already viewing history page.
+ *
+ * Push the current file so that the history list
+ * contains the current file for printing purposes.
+ * Pop the file afterwards to prevent multiple copies.
+ */
+ if (TRACE && !LYUseTraceLog && LYCursesON) {
+ LYHideCursor(); /* make sure cursor is down */
+#ifdef USE_SLANG
+ LYaddstr("\n");
+#endif /* USE_SLANG */
+ LYrefresh();
+ }
+ LYpush(&curdoc, ForcePush);
+
+ /*
+ * Print history options to file.
+ */
+ if (showhistory(&newdoc.address) < 0) {
+ LYpop(&curdoc);
+ return TRUE;
+ }
+ LYRegisterUIPage(newdoc.address, UIP_HISTORY);
+ StrAllocCopy(newdoc.title, HISTORY_PAGE_TITLE);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ newdoc.link = 1; /*@@@ bypass "recent statusline messages" link */
+ FREE(curdoc.address); /* so it doesn't get pushed */
+
+ if (LYValidate || check_realm) {
+ LYPermitURL = TRUE;
+ }
+ return TRUE;
+ } /* end if strncmp */
+ return FALSE;
+}
+
+PRIVATE BOOLEAN handle_LYK_IMAGE_TOGGLE ARGS1(
+ int *, cmd)
+{
+ if (clickable_images)
+ clickable_images = FALSE;
+ else
+ clickable_images = TRUE;
+
+ HTUserMsg(clickable_images ?
+ CLICKABLE_IMAGES_ON : CLICKABLE_IMAGES_OFF);
+ return reparse_or_reload(cmd);
+}
+
+PRIVATE void handle_LYK_INDEX ARGS2(
+ int *, old_c,
+ int, real_c)
+{
+ /*
+ * Make sure we are not in the index already.
+ */
+ if (!STREQ(curdoc.address, indexfile)) {
+
+ if (indexfile[0]=='\0') { /* no defined index */
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_INDEX_FILE);
+ }
+
+ } else {
+#ifdef KANJI_CODE_OVERRIDE
+ if (HTCJK == JAPANESE) {
+ last_kcode = NOKANJI; /* AUTO */
+ }
+#endif
+ StrAllocCopy(newdoc.address, indexfile);
+ StrAllocCopy(newdoc.title, gettext("System Index")); /* name it */
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ } /* end else */
+ } /* end if */
+}
+
+PRIVATE void handle_LYK_INDEX_SEARCH ARGS4(
+ BOOLEAN *, force_load,
+ BOOLEAN, ForcePush,
+ int *, old_c,
+ int, real_c)
+{
+ if (is_www_index) {
+ /*
+ * Perform a database search.
+ *
+ * do_www_search will try to go out and get the document.
+ * If it returns TRUE, a new document was returned and is
+ * named in the newdoc.address.
+ */
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ if (do_www_search(&newdoc) == NORMAL) {
+ /*
+ * Yah, the search succeeded.
+ */
+ if (TRACE && !LYUseTraceLog && LYCursesON) {
+ /*
+ * Make sure cursor is down.
+ */
+ LYHideCursor();
+#ifdef USE_SLANG
+ LYaddstr("\n");
+#endif /* USE_SLANG */
+ LYrefresh();
+ }
+ LYpush(&curdoc, ForcePush);
+ /*
+ * Make the curdoc.address the newdoc.address so that
+ * getfile doesn't try to get the newdoc.address.
+ * Since we have already gotten it.
+ */
+ StrAllocCopy(curdoc.address, newdoc.address);
+ StrAllocCopy(newdoc.post_data, curdoc.post_data);
+ StrAllocCopy(newdoc.post_content_type, curdoc.post_content_type);
+ newdoc.internal_link = FALSE;
+ curdoc.line = -1;
+ Newline = 0;
+ } else if (use_this_url_instead != NULL) {
+ /*
+ * Got back a redirecting URL. Check it out.
+ */
+ _user_message("Using %s", use_this_url_instead);
+ /*
+ * Make a name for this URL.
+ */
+ StrAllocCopy(newdoc.title,
+ "A URL specified by redirection");
+ StrAllocCopy(newdoc.address, use_this_url_instead);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ FREE(use_this_url_instead);
+ *force_load = TRUE;
+ } else {
+ /*
+ * Yuk, the search failed. Restore the old file.
+ */
+ StrAllocCopy(newdoc.address, curdoc.address);
+ StrAllocCopy(newdoc.post_data, curdoc.post_data);
+ StrAllocCopy(newdoc.post_content_type,
+ curdoc.post_content_type);
+ StrAllocCopy(newdoc.bookmark, curdoc.bookmark);
+ newdoc.isHEAD = curdoc.isHEAD;
+ newdoc.safe = curdoc.safe;
+ newdoc.internal_link = curdoc.internal_link;
+ }
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NOT_ISINDEX);
+ }
+}
+
+PRIVATE BOOLEAN handle_LYK_INFO ARGS1(
+ int *, cmd)
+{
+ /*
+ * Don't do if already viewing info page.
+ */
+ if (!LYIsUIPage(curdoc.address, UIP_SHOWINFO)) {
+ if (do_change_link() != -1
+ && LYShowInfo(&curdoc, HText_getNumOfLines(),
+ &newdoc, owner_address) >= 0) {
+ LYRegisterUIPage(newdoc.address, UIP_SHOWINFO);
+ StrAllocCopy(newdoc.title, SHOWINFO_TITLE);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ LYforce_no_cache = TRUE;
+ if (LYValidate || check_realm)
+ LYPermitURL = TRUE;
+ }
+ } else {
+ /*
+ * If already in info page, get out.
+ */
+ *cmd = LYK_PREV_DOC;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+PRIVATE BOOLEAN handle_LYK_INLINE_TOGGLE ARGS1(
+ int *, cmd)
+{
+ if (pseudo_inline_alts)
+ pseudo_inline_alts = FALSE;
+ else
+ pseudo_inline_alts = TRUE;
+
+ HTUserMsg(pseudo_inline_alts ?
+ PSEUDO_INLINE_ALTS_ON : PSEUDO_INLINE_ALTS_OFF);
+ return reparse_or_reload(cmd);
+}
+
+PRIVATE void handle_LYK_INSERT_FILE ARGS3(
+ BOOLEAN *, refresh_screen,
+ int *, old_c,
+ int, real_c)
+{
+ int n;
+
+ /*
+ * See if the current link is in a form TEXTAREA.
+ */
+ if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
+
+ /*
+ * Reject attempts to use this for gaining access to
+ * local files when such access is restricted:
+ * if no_file_url was set via the file_url restriction,
+ * if no_goto_file was set for the anonymous account,
+ * or if HTDirAccess was set to HT_DIR_FORBID or
+ * HT_DIR_SELECTIVE via the -nobrowse or -selective
+ * switches, it is assumed that inserting files or
+ * checking for existence of files needs to be denied. - kw
+ */
+ if (no_file_url || no_goto_file ||
+ HTDirAccess == HT_DIR_FORBID ||
+ HTDirAccess == HT_DIR_SELECTIVE) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ if (no_goto_file)
+ HTUserMsg2(GOTO_XXXX_DISALLOWED, "file:");
+ else
+ HTUserMsg(NOAUTH_TO_ACCESS_FILES);
+ HTInfoMsg(FILE_INSERT_CANCELLED);
+ }
+ return;
+ }
+
+ n = HText_InsertFile (&links[curdoc.link]);
+
+ /*
+ * TODO: Move cursor "n" lines from the current line to
+ * position it on the 1st line following the text
+ * that was inserted. If the target line/anchor
+ * requires us to scroll up/down, position the
+ * target in the approximate center of the screen.
+ *
+ * [Current behavior leaves cursor on the same line relative
+ * to the start of the TEXTAREA that it was on before the
+ * insertion. This is the same behavior that occurs with
+ * (my) editor, so this TODO will stay unimplemented.]
+ */
+
+ *refresh_screen = TRUE;
+
+ } else {
+
+ HTInfoMsg (NOT_IN_TEXTAREA);
+ }
+}
+
+#if defined(DIRED_SUPPORT) && defined(OK_INSTALL)
+PRIVATE void handle_LYK_INSTALL NOARGS
+{
+ if (lynx_edit_mode && nlinks > 0 && !no_dired_support)
+ local_install(NULL, links[curdoc.link].lname, &newdoc.address);
+}
+#endif
+
+PRIVATE BOOLEAN handle_LYK_JUMP ARGS10(
+ int, c,
+ char *, user_input_buffer,
+ char **, old_user_input GCC_UNUSED,
+ int *, recall GCC_UNUSED,
+ BOOLEAN *, FirstURLRecall GCC_UNUSED,
+ int *, URLNum GCC_UNUSED,
+ int *, URLTotal GCC_UNUSED,
+ int *, ch GCC_UNUSED,
+ int *, old_c,
+ int, real_c)
+{
+ char *ret;
+
+ if (no_jump || JThead == NULL) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ if (no_jump)
+ HTUserMsg(JUMP_DISALLOWED);
+ else
+ HTUserMsg(NO_JUMPFILE);
+ }
+ } else {
+ LYJumpFileURL = TRUE;
+ if ((ret = LYJump(c)) != NULL) {
+#ifdef PERMIT_GOTO_FROM_JUMP
+ if (!strncasecomp(ret, "Go ", 3)) {
+ LYJumpFileURL = FALSE;
+ StrAllocCopy(*old_user_input, user_input_buffer);
+ *URLTotal = (Goto_URLs ? HTList_count(Goto_URLs) : 0);
+ *recall = ((*URLTotal >= 1) ? RECALL_URL : NORECALL);
+ *URLNum = *URLTotal;
+ *FirstURLRecall = TRUE;
+ if (!strcasecomp(ret, "Go :")) {
+ if (recall) {
+ *ch = UPARROW;
+ return TRUE;
+ }
+ FREE(*old_user_input);
+ HTUserMsg(NO_RANDOM_URLS_YET);
+ return FALSE;
+ }
+ ret = HTParse((ret+3), startfile, PARSE_ALL);
+ LYstrncpy(user_input_buffer, ret, MAX_LINE - 1);
+ FREE(ret);
+ return TRUE;
+ }
+#endif /* PERMIT_GOTO_FROM_JUMP */
+ ret = HTParse(ret, startfile, PARSE_ALL);
+ if (!LYTrimStartfile(ret)) {
+ LYRemoveBlanks(user_input_buffer);
+ }
+ StrAllocCopy(newdoc.address, ret);
+ StrAllocCopy(lynxjumpfile, ret);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ FREE(ret);
+ LYUserSpecifiedURL = TRUE;
+ } else {
+ LYJumpFileURL = FALSE;
+ }
+ }
+ return FALSE;
+}
+
+PRIVATE void handle_LYK_KEYMAP ARGS4(
+ BOOLEAN *, vi_keys_flag,
+ BOOLEAN *, emacs_keys_flag,
+ int *, old_c,
+ int, real_c)
+{
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ StrAllocCopy(newdoc.address, "LYNXKEYMAP:");
+ StrAllocCopy(newdoc.title, CURRENT_KEYMAP_TITLE);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ /*
+ * If vi_keys changed, the keymap did too,
+ * so force no cache, and reset the flag. - FM
+ */
+ if (*vi_keys_flag != vi_keys ||
+ *emacs_keys_flag != emacs_keys) {
+ LYforce_no_cache = TRUE;
+ *vi_keys_flag = vi_keys;
+ *emacs_keys_flag = emacs_keys;
+ }
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+ /*
+ * Remember whether we are in dired menu
+ * so we can display the right keymap.
+ */
+ if (!no_dired_support) {
+ prev_lynx_edit_mode = lynx_edit_mode;
+ }
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+ LYforce_no_cache = TRUE;
+ }
+}
+
+PRIVATE void handle_LYK_LAST_LINK NOARGS
+{
+ int i = curdoc.link;
+
+ for (;;) {
+ if (++i >= nlinks
+ || links[i].ly != links[curdoc.link].ly) {
+ set_curdoc_link(i - 1);
+ break;
+ }
+ }
+}
+
+PRIVATE void handle_LYK_LEFT_LINK NOARGS
+{
+ if (curdoc.link>0 &&
+ links[curdoc.link].ly == links[curdoc.link-1].ly) {
+ set_curdoc_link(curdoc.link-1);
+ }
+}
+
+PRIVATE BOOLEAN handle_LYK_LIST ARGS1(
+ int *, cmd)
+{
+ /*
+ * Don't do if already viewing list page.
+ */
+ if (!strcmp((curdoc.title ? curdoc.title : ""),
+ LIST_PAGE_TITLE) &&
+ LYIsUIPage(curdoc.address, UIP_LIST_PAGE)) {
+ /*
+ * Already viewing list page, so get out.
+ */
+ *cmd = LYK_PREV_DOC;
+ return TRUE;
+ }
+
+ /*
+ * Print list page to file.
+ */
+ if (showlist(&newdoc, TRUE) < 0)
+ return FALSE;
+ StrAllocCopy(newdoc.title, LIST_PAGE_TITLE);
+ /*
+ * showlist will set newdoc's other fields. It may leave
+ * post_data intact so the list can be used to follow
+ * internal links in the current document even if it is
+ * a POST response. - kw
+ */
+
+ if (LYValidate || check_realm) {
+ LYPermitURL = TRUE;
+ StrAllocCopy(lynxlistfile, newdoc.address);
+ }
+ return FALSE;
+}
+
+PRIVATE void handle_LYK_MAIN_MENU ARGS2(
+ int *, old_c,
+ int, real_c)
+{
+ /*
+ * If its already the homepage then don't reload it.
+ */
+ if (!STREQ(curdoc.address,homepage)) {
+
+ if (HTConfirmDefault(CONFIRM_MAIN_SCREEN, NO) == YES) {
+ StrAllocCopy(newdoc.address, homepage);
+ StrAllocCopy(newdoc.title, gettext("Entry into main screen"));
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ highlight(OFF, curdoc.link, prev_target);
+#ifdef DIRED_SUPPORT
+ if (lynx_edit_mode) {
+ DIRED_UNCACHE_2;
+ }
+#endif /* DIRED_SUPPORT */
+ }
+ } else {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(IN_MAIN_SCREEN);
+ }
+ }
+}
+
+PRIVATE void handle_LYK_MINIMAL NOARGS
+{
+ if (!historical_comments) {
+#ifdef SOURCE_CACHE
+ if (!HTcan_reparse_document()) {
+#endif
+ /*
+ * Check if this is a reply from a POST, and if so,
+ * seek confirmation of reload if the safe element
+ * is not set. - FM
+ */
+ if ((curdoc.post_data != NULL &&
+ curdoc.safe != TRUE) &&
+ confirm_post_resub(curdoc.address, NULL,
+ 0, 0) == FALSE) {
+ HTInfoMsg(WILL_NOT_RELOAD_DOC);
+ } else {
+ HTuncache_current_document();
+ StrAllocCopy(newdoc.address, curdoc.address);
+ FREE(curdoc.address);
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link;
+ }
+#ifdef SOURCE_CACHE
+ } /* end if no bypass */
+#endif
+ }
+ if (minimal_comments)
+ minimal_comments = FALSE;
+ else
+ minimal_comments = TRUE;
+ if (!historical_comments) {
+ HTAlert(minimal_comments ?
+ MINIMAL_ON_IN_EFFECT : MINIMAL_OFF_VALID_ON);
+#ifdef SOURCE_CACHE
+ (void)reparse_document();
+#endif
+ } else {
+ HTAlert(minimal_comments ?
+ MINIMAL_ON_BUT_HISTORICAL : MINIMAL_OFF_HISTORICAL_ON);
+ }
+ return;
+}
+
+#if defined(DIRED_SUPPORT)
+PRIVATE void handle_LYK_MODIFY ARGS1(
+ BOOLEAN *, refresh_screen)
+{
+ if (lynx_edit_mode && nlinks > 0 && !no_dired_support) {
+ int ret;
+
+ ret = local_modify(&curdoc, &newdoc.address);
+ if (ret == PERMIT_FORM_RESULT) { /* Permit form thrown up */
+ *refresh_screen = TRUE;
+ } else if (ret) {
+ DIRED_UNCACHE_1;
+ StrAllocCopy(newdoc.address, curdoc.address);
+ FREE(curdoc.address);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link;
+ LYclear();
+ }
+ }
+}
+#endif /* DIRED_SUPPORT */
+
+#ifdef EXP_NESTED_TABLES
+PRIVATE BOOLEAN handle_LYK_NESTED_TABLES ARGS1(
+ int *, cmd)
+{
+ nested_tables = !nested_tables;
+ HTUserMsg(nested_tables ? NESTED_TABLES_ON : NESTED_TABLES_OFF);
+ return reparse_or_reload(cmd);
+}
+#endif
+
+PRIVATE BOOLEAN handle_LYK_OPTIONS ARGS2(
+ int *, cmd,
+ BOOLEAN *, refresh_screen)
+{
+#ifndef NO_OPTION_MENU
+ if (!LYUseFormsOptions) {
+ BOOLEAN LYUseDefaultRawMode_flag = LYUseDefaultRawMode;
+ BOOLEAN LYSelectPopups_flag = LYSelectPopups;
+ BOOLEAN verbose_img_flag = verbose_img;
+ BOOLEAN keypad_mode_flag = (BOOL) keypad_mode;
+ BOOLEAN show_dotfiles_flag = show_dotfiles;
+ BOOLEAN user_mode_flag = (BOOL) user_mode;
+ int CurrentAssumeCharSet_flag = UCLYhndl_for_unspec;
+ int CurrentCharSet_flag = current_char_set;
+ int HTfileSortMethod_flag = HTfileSortMethod;
+ char *CurrentUserAgent = NULL;
+ char *CurrentNegoLanguage = NULL;
+ char *CurrentNegoCharset = NULL;
+ StrAllocCopy(CurrentUserAgent, (LYUserAgent ?
+ LYUserAgent : ""));
+ StrAllocCopy(CurrentNegoLanguage, (language ?
+ language : ""));
+ StrAllocCopy(CurrentNegoCharset, (pref_charset ?
+ pref_charset : ""));
+
+ LYoptions(); /** do the old-style options stuff **/
+
+ if (keypad_mode_flag != keypad_mode ||
+ (user_mode_flag != user_mode &&
+ (user_mode_flag == NOVICE_MODE ||
+ user_mode == NOVICE_MODE)) ||
+ (((HTfileSortMethod_flag != HTfileSortMethod) ||
+ (show_dotfiles_flag != show_dotfiles)) &&
+ (!strncmp(curdoc.address, "file:", 5) ||
+ !strncmp(curdoc.address, "ftp:", 4))) ||
+ CurrentCharSet_flag != current_char_set ||
+ CurrentAssumeCharSet_flag != UCLYhndl_for_unspec ||
+ verbose_img_flag != verbose_img ||
+ LYUseDefaultRawMode_flag != LYUseDefaultRawMode ||
+ LYSelectPopups_flag != LYSelectPopups ||
+ ((strcmp(CurrentUserAgent, (LYUserAgent ?
+ LYUserAgent : "")) ||
+ strcmp(CurrentNegoLanguage, (language ?
+ language : "")) ||
+ strcmp(CurrentNegoCharset, (pref_charset ?
+ pref_charset : ""))) &&
+ (!strncmp(curdoc.address, "http", 4) ||
+ !strncmp(curdoc.address, "lynxcgi:", 8)))) {
+
+ BOOLEAN canreparse_post = FALSE;
+
+ /*
+ * Check if this is a reply from a POST, and if so,
+ * seek confirmation of reload if the safe element
+ * is not set. - FM
+ */
+ if ((curdoc.post_data != NULL &&
+ curdoc.safe != TRUE) &&
+#ifdef SOURCE_CACHE
+ (!(canreparse_post = HTcan_reparse_document())) &&
+#endif
+ confirm_post_resub(curdoc.address, curdoc.title,
+ 2, 1) == FALSE) {
+ HTInfoMsg(WILL_NOT_RELOAD_DOC);
+ } else {
+ StrAllocCopy(newdoc.address, curdoc.address);
+ if (((strcmp(CurrentUserAgent, (LYUserAgent ?
+ LYUserAgent : "")) ||
+ strcmp(CurrentNegoLanguage,
+ (language ? language : "")) ||
+ strcmp(CurrentNegoCharset,
+ (pref_charset ? pref_charset : ""))) &&
+ (strncmp(curdoc.address, "http", 4) == 0 ||
+ strncmp(curdoc.address, "lynxcgi:", 8) == 0))) {
+ /*
+ * An option has changed which may influence
+ * content negotiation, and the resource is from
+ * a http or https or lynxcgi URL (the only protocols
+ * which currently do anything with this information).
+ * Set reloading = TRUE so that proxy caches will be
+ * flushed, which is necessary until the time when
+ * all proxies understand HTTP 1.1 Vary: and all
+ * Servers properly use it... Treat like
+ * case LYK_RELOAD (see comments there). - KW
+ */
+ reloading = TRUE;
+ }
+ if (HTisDocumentSource()) {
+ srcmode_for_next_retrieval(1);
+ }
+#ifdef SOURCE_CACHE
+ if (reloading == FALSE) {
+ /* one more attempt to be smart enough: */
+ if (reparse_document()) {
+ FREE(CurrentUserAgent);
+ FREE(CurrentNegoLanguage);
+ FREE(CurrentNegoCharset);
+ return FALSE;
+ }
+ }
+#endif
+ if (canreparse_post &&
+ confirm_post_resub(curdoc.address, curdoc.title,
+ 2, 1) == FALSE) {
+ if (HTisDocumentSource()) {
+ srcmode_for_next_retrieval(0);
+ }
+ FREE(CurrentUserAgent);
+ FREE(CurrentNegoLanguage);
+ FREE(CurrentNegoCharset);
+ return FALSE;
+ }
+
+ HEAD_request = HTLoadedDocumentIsHEAD();
+ HTuncache_current_document();
+#ifdef NO_ASSUME_SAME_DOC
+ newdoc.line = 1;
+ newdoc.link = 0;
+#else
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link;
+#endif /* NO_ASSUME_SAME_DOC */
+ LYforce_no_cache = TRUE;
+ FREE(curdoc.address); /* So it doesn't get pushed. */
+ }
+ }
+ FREE(CurrentUserAgent);
+ FREE(CurrentNegoLanguage);
+ FREE(CurrentNegoCharset);
+ *refresh_screen = TRUE; /* to repaint screen */
+ return FALSE;
+ } /* end if !LYUseFormsOptions */
+#endif /* !NO_OPTION_MENU */
+#ifndef NO_OPTION_FORMS
+ /*
+ * Generally stolen from LYK_COOKIE_JAR. Options menu handling is
+ * done in postoptions(), called from getfile() currently.
+ *
+ * postoptions() is also responsible for reloading the document
+ * before the 'options menu' but only when (a few) important
+ * options were changed.
+ *
+ * It is critical that post_data is freed here since the
+ * submission of changed options is done via the same protocol as
+ * LYNXOPTIONS:
+ */
+ /*
+ * Don't do if already viewing options page.
+ */
+ if (!LYIsUIPage(curdoc.address, UIP_OPTIONS_MENU)) {
+
+ StrAllocCopy(newdoc.address, "LYNXOPTIONS:/");
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ LYforce_no_cache = TRUE;
+ /* change to 'if (check_realm && !LYValidate)' and
+ make change near top of getfile to forbid
+ using forms options menu with -validate: - kw */
+ if (LYValidate || check_realm) {
+ LYPermitURL = TRUE;
+ }
+ } else {
+ /*
+ * If already in the options menu, get out.
+ */
+ *cmd = LYK_PREV_DOC;
+ return TRUE;
+ }
+#endif /* !NO_OPTION_FORMS */
+ return FALSE;
+}
+
+PRIVATE void handle_NEXT_DOC NOARGS
+{
+ if (LYhist_next(&curdoc, &newdoc)) {
+ FREE(curdoc.address); /* avoid push */
+ return;
+ }
+ HTUserMsg(gettext("No next document present"));
+}
+
+PRIVATE void handle_LYK_NEXT_LINK ARGS3(
+ int, c,
+ int *, old_c,
+ int, real_c)
+{
+ if (curdoc.link < nlinks-1) { /* next link */
highlight(OFF, curdoc.link, prev_target);
- curdoc.link = mouse_tmp;
+#ifdef FASTTAB
+ /*
+ * Move to different textarea if TAB in textarea.
+ */
+ if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE &&
+ c=='\t') {
+ int thisgroup = links[curdoc.link].form->number;
+ char *thisname = links[curdoc.link].form->name;
+
+ do curdoc.link++;
+ while ((curdoc.link < nlinks-1) &&
+ links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE &&
+ links[curdoc.link].form->number == thisgroup &&
+ sametext(links[curdoc.link].form->name, thisname));
+ } else {
+ curdoc.link++;
+ }
+#else
+ curdoc.link++;
+#endif /* FASTTAB */
+ /*
+ * At the bottom of list and there is only one page.
+ * Move to the top link on the page.
+ */
+ } else if (!more && Newline == 1 && curdoc.link == nlinks-1) {
+ set_curdoc_link(0);
+
+ } else if (more) { /* next page */
+ Newline += (display_lines);
+
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(ALREADY_AT_END);
+ }
+}
+
+PRIVATE void handle_LYK_NEXT_PAGE ARGS2(
+ int *, old_c,
+ int, real_c)
+{
+ if (more) {
+ Newline += display_lines;
+ } else if (curdoc.link < nlinks-1) {
+ set_curdoc_link(nlinks - 1);
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(ALREADY_AT_END);
+ }
+}
+
+PRIVATE BOOLEAN handle_LYK_NOCACHE ARGS2(
+ int *, old_c,
+ int, real_c)
+{
+ if (nlinks > 0) {
+ if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type != F_SUBMIT_TYPE &&
+ links[curdoc.link].form->type != F_IMAGE_SUBMIT_TYPE &&
+ links[curdoc.link].form->type != F_TEXT_SUBMIT_TYPE) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NOT_ON_SUBMIT_OR_LINK);
+ }
+ return FALSE;
+ } else {
+ LYforce_no_cache = TRUE;
+ reloading = TRUE;
+ }
+ }
+ return TRUE;
+}
+
+PRIVATE void handle_LYK_PREV_LINK ARGS3(
+ int *, arrowup,
+ int *, old_c,
+ int, real_c)
+{
+ if (curdoc.link > 0) { /* previous link */
+ set_curdoc_link(curdoc.link - 1);
+
+ } else if (!more &&
+ curdoc.link==0 && Newline==1) { /* at the top of list */
+ /*
+ * If there is only one page of data and the user
+ * goes off the top, just move the cursor to last link on
+ * the page.
+ */
+ set_curdoc_link(nlinks - 1);
+
+ } else if (curdoc.line > 1) { /* previous page */
+ /*
+ * Go back to the previous page.
+ */
+ int scrollamount = (Newline > display_lines ?
+ display_lines : Newline - 1);
+ Newline -= scrollamount;
+ if (scrollamount < display_lines &&
+ nlinks > 0 && curdoc.link == 0 &&
+ links[0].ly - 1 + scrollamount <= display_lines) {
+ newdoc.link = HText_LinksInLines(HTMainText,
+ 1,
+ scrollamount) - 1;
+ } else {
+ *arrowup = TRUE;
+ }
+
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(ALREADY_AT_BEGIN);
+ }
+}
+
+PRIVATE int handle_PREV_DOC ARGS3(
+ int *, cmd,
+ int *, old_c,
+ int, real_c)
+{
+ if (nhist > 0) { /* if there is anything to go back to */
+ /*
+ * Check if the previous document is a reply from a POST,
+ * and if so, seek confirmation of resubmission if the safe
+ * element is not set and the document is not still in the
+ * cache or LYresubmit_posts is set. If not confirmed and
+ * it is not the startfile, pop it so we go to the yet
+ * previous document, until we're OK or reach the startfile.
+ * If we reach the startfile and its not OK or we don't get
+ * confirmation, cancel. - FM
+ */
+ DocAddress WWWDoc;
+ HTParentAnchor *tmpanchor;
+ HText *text;
+ BOOLEAN conf = FALSE, first = TRUE;
+
+ HTLastConfirmCancelled(); /* reset flag */
+ while (nhist > 0) {
+ conf = FALSE;
+ if (history[(nhist - 1)].post_data == NULL) {
+ break;
+ }
+ WWWDoc.address = history[(nhist - 1)].address;
+ WWWDoc.post_data = history[(nhist - 1)].post_data;
+ WWWDoc.post_content_type =
+ history[(nhist - 1)].post_content_type;
+ WWWDoc.bookmark = history[(nhist - 1)].bookmark;
+ WWWDoc.isHEAD = history[(nhist - 1)].isHEAD;
+ WWWDoc.safe = history[(nhist - 1)].safe;
+ tmpanchor = HTAnchor_parent(HTAnchor_findAddress(&WWWDoc));
+ if (HTAnchor_safe(tmpanchor)) {
+ break;
+ }
+ if (((text =
+ (HText *)HTAnchor_document(tmpanchor)) == NULL &&
+ (!strncmp(WWWDoc.address, "LYNXIMGMAP:", 11) ||
+ (conf = confirm_post_resub(WWWDoc.address,
+ history[(nhist - 1)].title,
+ 0, 0))
+ == FALSE)) ||
+ ((LYresubmit_posts && !conf &&
+ (NONINTERNAL_OR_PHYS_DIFFERENT(
+ (document *)&history[(nhist - 1)],
+ &curdoc) ||
+ NONINTERNAL_OR_PHYS_DIFFERENT(
+ (document *)&history[(nhist - 1)],
+ &newdoc))) &&
+ !confirm_post_resub(WWWDoc.address,
+ history[(nhist - 1)].title,
+ 2, 2))) {
+ if (HTLastConfirmCancelled()) {
+ if (!first && curdoc.internal_link)
+ FREE(curdoc.address);
+ *cmd = LYK_DO_NOTHING;
+ return 2;
+ }
+ if (nhist == 1) {
+ HTInfoMsg(CANCELLED);
+ *old_c = 0;
+ *cmd = LYK_DO_NOTHING;
+ return 2;
+ } else {
+ HTUserMsg2(WWW_SKIP_MESSAGE, WWWDoc.address);
+ do { /* Should be LYhist_prev when _next supports */
+ LYpop(&curdoc); /* skipping of forms */
+ } while (nhist > 1 && !are_different(
+ (document *)&history[(nhist - 1)],
+ &curdoc));
+ first = FALSE; /* have popped at least one */
+ continue;
+ }
+ } else {
+ /*
+ * Break from loop; if user just confirmed to
+ * load again because document wasn't in cache,
+ * set LYforce_no_cache to avoid unnecessary
+ * repeat question down the road. - kw
+ */
+ if (conf)
+ LYforce_no_cache = TRUE;
+ break;
+ }
+ }
+
+ if (!first)
+ curdoc.internal_link = FALSE;
+
+ /*
+ * Set newdoc.address to empty to pop a file.
+ */
+ LYhist_prev_register(&curdoc); /* Why not call _prev instead of zeroing address? */
+ FREE(newdoc.address);
+#ifdef DIRED_SUPPORT
+ if (lynx_edit_mode) {
+ DIRED_UNCACHE_2;
+ }
+#endif /* DIRED_SUPPORT */
+ } else if (child_lynx == TRUE) {
+ return(1); /* exit on left arrow in main screen */
+
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(ALREADY_AT_FIRST);
+ }
+ return 0;
+}
+
+PRIVATE void handle_LYK_PREV_PAGE ARGS2(
+ int *, old_c,
+ int, real_c)
+{
+ if (Newline > 1) {
+ Newline -= display_lines;
+ } else if (curdoc.link > 0) {
+ set_curdoc_link(0);
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(ALREADY_AT_BEGIN);
+ }
+}
+
+PRIVATE void handle_LYK_PRINT ARGS3(
+ BOOLEAN *, ForcePush,
+ int *, old_c,
+ int, real_c)
+{
+ if (LYValidate) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(PRINT_DISABLED);
+ }
+ return;
+ }
+
+ /*
+ * Don't do if already viewing print options page.
+ */
+ if (!LYIsUIPage(curdoc.address, UIP_PRINT_OPTIONS)
+ && print_options(&newdoc.address,
+ curdoc.address, HText_getNumOfLines()) >= 0) {
+ LYRegisterUIPage(newdoc.address, UIP_PRINT_OPTIONS);
+ StrAllocCopy(newdoc.title, PRINT_OPTIONS_TITLE);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ *ForcePush = TRUE; /* see LYpush() and print_options() */
+ if (check_realm)
+ LYPermitURL = TRUE;
+ }
+}
+
+PRIVATE BOOLEAN handle_LYK_QUIT NOARGS
+{
+ int c;
+
+ if (LYQuitDefaultYes == TRUE) {
+ c = HTConfirmDefault(REALLY_QUIT_Y, YES);
+ } else {
+ c = HTConfirmDefault(REALLY_QUIT_N, NO);
+ }
+ if (LYQuitDefaultYes == TRUE) {
+ if (c != NO) {
+ return(TRUE);
+ } else {
+ HTInfoMsg(NO_CANCEL);
+ }
+ } else if (c == YES) {
+ return(TRUE);
+ } else {
+ HTInfoMsg(NO_CANCEL);
+ }
+ return FALSE;
+}
+
+PRIVATE BOOLEAN handle_LYK_RAW_TOGGLE ARGS1(
+ int *, cmd)
+{
+ if (HTLoadedDocumentCharset()) {
+ HTUserMsg(gettext("charset for this document specified explicitly, sorry..."));
+ return FALSE;
+ } else {
+ LYUseDefaultRawMode = (BOOL) !LYUseDefaultRawMode;
+ HTUserMsg(LYRawMode ? RAWMODE_OFF : RAWMODE_ON);
+ HTMLSetCharacterHandling(current_char_set);
+ return reparse_or_reload(cmd);
+ }
+}
+
+/*
+ * Check if this is a reply from a POST, and if so,
+ * seek confirmation if the safe element is not set. - FM
+ */
+PRIVATE void handle_LYK_RELOAD ARGS1(
+ int, real_cmd)
+{
+ if ((curdoc.post_data != NULL &&
+ curdoc.safe != TRUE) &&
+ HTConfirm(CONFIRM_POST_RESUBMISSION) == FALSE) {
+ HTInfoMsg(CANCELLED);
+ return;
+ }
+
+ /*
+ * Check to see if should reload source, or load html
+ */
+
+ if (HTisDocumentSource()) {
+ if ((forced_UCLYhdnl = HTMainText_Get_UCLYhndl()) >= 0)
+ force_old_UCLYhndl_on_reload = TRUE;
+ srcmode_for_next_retrieval(1);
+ }
+
+ HEAD_request = HTLoadedDocumentIsHEAD();
+ HTuncache_current_document();
+#ifdef NO_ASSUME_SAME_DOC
+ /*
+ * Don't assume the reloaded document will be the same. - FM
+ */
+ newdoc.line = 1;
+ newdoc.link = 0;
+#else
+ /*
+ * Do assume the reloaded document will be the same. - FM
+ * (I don't remember all the reasons why we couldn't assume
+ * this. As the problems show up, we'll try to fix them,
+ * or add warnings. - FM)
+ */
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link;
+#endif /* NO_ASSUME_SAME_DOC */
+ FREE(curdoc.address); /* so it doesn't get pushed */
+#ifdef VMS
+ lynx_force_repaint();
+#endif /* VMS */
+ /*
+ * Reload should force a cache refresh on a proxy.
+ * -- Ari L. <luotonen@dxcern.cern.ch>
+ *
+ * -- but only if this was really a reload requested by
+ * the user, not if we jumped here to handle reloading for
+ * INLINE_TOGGLE, IMAGE_TOGGLE, RAW_TOGGLE, etc. - KW
+ */
+ if (real_cmd == LYK_RELOAD)
+ reloading = TRUE;
+
+ return;
+}
+
+#ifdef DIRED_SUPPORT
+PRIVATE void handle_LYK_REMOVE ARGS1(
+ BOOLEAN *, refresh_screen)
+{
+ if (lynx_edit_mode && nlinks > 0 && !no_dired_support) {
+ int linkno = curdoc.link; /* may be changed in local_remove - kw */
+ local_remove(&curdoc);
+ if (LYAutoUncacheDirLists >= 1)
+ do_cleanup_after_delete();
+ else if (curdoc.link != linkno)
+ *refresh_screen = TRUE;
+ }
+}
+#endif /* DIRED_SUPPORT */
+
+PRIVATE void handle_LYK_RIGHT_LINK NOARGS
+{
+ if (curdoc.link<nlinks-1 &&
+ links[curdoc.link].ly == links[curdoc.link+1].ly) {
+ set_curdoc_link(curdoc.link + 1);
+ }
+}
+
+PRIVATE void handle_LYK_SHELL ARGS3(
+ BOOLEAN *, refresh_screen,
+ int *, old_c,
+ int, real_c)
+{
+ if (!no_shell) {
+ stop_curses();
+ printf("%s\r\n", SPAWNING_MSG);
+#if defined(__CYGWIN__)
+ Cygwin_Shell();
+#else
+ LYSystem(LYSysShell());
+#endif
+ start_curses();
+ *refresh_screen = TRUE; /* for an HText_pageDisplay() */
+ } else {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(SPAWNING_DISABLED);
+ }
+ }
+}
+
+PRIVATE void handle_LYK_SOFT_DQUOTES NOARGS
+{
+#ifdef SOURCE_CACHE
+ if (!HTcan_reparse_document()) {
+#endif
+ /*
+ * Check if this is a reply from a POST, and if so,
+ * seek confirmation of reload if the safe element
+ * is not set. - FM
+ */
+ if ((curdoc.post_data != NULL &&
+ curdoc.safe != TRUE) &&
+ confirm_post_resub(curdoc.address, NULL, 1, 1) == FALSE) {
+ HTInfoMsg(WILL_NOT_RELOAD_DOC);
+ } else {
+ HTuncache_current_document();
+ StrAllocCopy(newdoc.address, curdoc.address);
+ FREE(curdoc.address);
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link;
+ }
+#ifdef SOURCE_CACHE
+ } /* end if no bypass */
+#endif
+ if (soft_dquotes)
+ soft_dquotes = FALSE;
+ else
+ soft_dquotes = TRUE;
+ HTUserMsg(soft_dquotes ?
+ SOFT_DOUBLE_QUOTE_ON : SOFT_DOUBLE_QUOTE_OFF);
+#ifdef SOURCE_CACHE
+ (void)reparse_document();
+#endif
+ return;
+}
+
+/*
+ * Check if this is a reply from a POST, and if so,
+ * seek confirmation if the safe element is not set. - FM
+ */
+PRIVATE void handle_LYK_SOURCE ARGS1(
+ char **, ownerS_address_p)
+{
+#ifdef SOURCE_CACHE
+ BOOLEAN canreparse_post = FALSE;
+#endif
+ if ((curdoc.post_data != NULL &&
+ curdoc.safe != TRUE) &&
+#ifdef SOURCE_CACHE
+ (!(canreparse_post = HTcan_reparse_document())) &&
+#endif
+ (curdoc.isHEAD ? HTConfirm(CONFIRM_POST_RESUBMISSION) :
+ confirm_post_resub(curdoc.address, curdoc.title,
+ 1, 1)) == FALSE) {
+ HTInfoMsg(CANCELLED);
+ return;
+ }
+
+ if (HTisDocumentSource()) {
+ srcmode_for_next_retrieval(-1);
+ } else {
+ if (HText_getOwner())
+ StrAllocCopy(*ownerS_address_p, HText_getOwner());
+ LYUCPushAssumed(HTMainAnchor);
+ srcmode_for_next_retrieval(1);
+ }
+
+#ifdef SOURCE_CACHE
+ if (reparse_document()) {
+ /*
+ * These normally get cleaned up after getfile() returns;
+ * since we're not calling getfile(), we have to clean them
+ * up ourselves. -dsb
+ */
+ HTOutputFormat = WWW_PRESENT;
+#ifdef USE_PRETTYSRC
+ if (psrc_view)
+ HTMark_asSource();
+ psrc_view = FALSE;
+#endif
+ FREE(*ownerS_address_p); /* not used with source_cache */
+ LYUCPopAssumed(); /* probably a right place here */
+ HTMLSetCharacterHandling(current_char_set); /* restore now */
+
+ return;
+ } else if (canreparse_post) {
+ srcmode_for_next_retrieval(0);
+ LYUCPopAssumed(); /* probably a right place here */
+ return;
+ }
+#endif
+
+ if (curdoc.title)
+ StrAllocCopy(newdoc.title, curdoc.title);
+ FREE(curdoc.address); /* so it doesn't get pushed */
+ LYforce_no_cache = TRUE;
+}
+
+PRIVATE void handle_LYK_SWITCH_DTD NOARGS
+{
+#ifdef SOURCE_CACHE
+ BOOLEAN canreparse = FALSE;
+ if (!(canreparse = HTcan_reparse_document())) {
+#endif
+ /*
+ * Check if this is a reply from a POST, and if so,
+ * seek confirmation of reload if the safe element
+ * is not set. - FM, kw
+ */
+ if ((curdoc.post_data != NULL &&
+ curdoc.safe != TRUE) &&
+ confirm_post_resub(curdoc.address, NULL, 1, 1) == FALSE) {
+ HTInfoMsg(WILL_NOT_RELOAD_DOC);
+ } else {
+ /*
+ * If currently viewing preparsed source, switching
+ * to the other DTD parsing may show source differences,
+ * so stay in source view - kw
+ */
+
+ /* NOTE: this conditional can be considered incorrect -
+ current behaviour - when viewing source and
+ LYPreparsedSource==TRUE, pressing ^V will toggle parser mode
+ AND switch back from the source view to presentation view.-HV
+ */
+ if (HTisDocumentSource() && LYPreparsedSource) {
+ srcmode_for_next_retrieval(1);
+ }
+ HTuncache_current_document();
+ StrAllocCopy(newdoc.address, curdoc.address);
+ FREE(curdoc.address);
+#ifdef NO_ASSUME_SAME_DOC
+ newdoc.line = 1;
+ newdoc.link = 0;
+#else
+ newdoc.line = curdoc.line;
+ newdoc.link = curdoc.link;
+#endif /* NO_ASSUME_SAME_DOC */
+ }
+#ifdef SOURCE_CACHE
+ } /* end if no bypass */
+#endif
+ Old_DTD = !Old_DTD;
+ HTSwitchDTD(!Old_DTD);
+ HTUserMsg(Old_DTD ? USING_DTD_0 : USING_DTD_1);
+#ifdef SOURCE_CACHE
+ if (canreparse) {
+ if (HTisDocumentSource() && LYPreparsedSource) {
+ srcmode_for_next_retrieval(1);
+ }
+ if (!reparse_document()) {
+ srcmode_for_next_retrieval(0);
+ }
+ }
+#endif
+ return;
+}
+
+#ifdef DIRED_SUPPORT
+PRIVATE void handle_LYK_TAG_LINK NOARGS
+{
+ if (lynx_edit_mode && nlinks > 0 && !no_dired_support) {
+ if (!strcmp(links[curdoc.link].hightext, ".."))
+ return; /* Never tag the parent directory */
+ if (dir_list_style == MIXED_STYLE) {
+ if (!strcmp(links[curdoc.link].hightext, "../"))
+ return;
+ } else if (!strncmp(links[curdoc.link].hightext, "Up to ", 6))
+ return;
+ {
+ /*
+ * HTList-based management of tag list, see LYLocal.c - KW
+ */
+ HTList * t1 = tagged;
+ char * tagname = NULL;
+ BOOLEAN found = FALSE;
+
+ while ((tagname = (char *)HTList_nextObject(t1)) != NULL) {
+ if (!strcmp(links[curdoc.link].lname, tagname)) {
+ found = TRUE;
+ HTList_removeObject(tagged, tagname);
+ FREE(tagname);
+ tagflag(OFF,curdoc.link);
+ break;
+ }
+ }
+ if (!found) {
+ if (tagged == NULL)
+ tagged = HTList_new();
+ tagname = NULL;
+ StrAllocCopy(tagname,links[curdoc.link].lname);
+ HTList_addObject(tagged,tagname);
+ tagflag(ON,curdoc.link);
+ }
+ }
+ if (curdoc.link < nlinks-1) {
+ set_curdoc_link(curdoc.link + 1);
+ } else if (!more && Newline == 1 && curdoc.link == nlinks-1) {
+ set_curdoc_link(0);
+ } else if (more) { /* next page */
+ Newline += (display_lines);
+ }
+ }
+}
+#endif /* DIRED_SUPPORT */
+
+PRIVATE void handle_LYK_TOGGLE_HELP NOARGS
+{
+ if (user_mode == NOVICE_MODE) {
+ toggle_novice_line();
+ noviceline(more);
+ }
+}
+
+PRIVATE void handle_LYK_TOOLBAR ARGS4(
+ BOOLEAN *, try_internal,
+ BOOLEAN *, force_load,
+ int *, old_c,
+ int, real_c)
+{
+ char *cp;
+ char *toolbar = NULL;
+
+ if (!HText_hasToolbar(HTMainText)) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_TOOLBAR);
+ }
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ if ((cp = strchr(curdoc.address, '#')) != NULL)
+ *cp = '\0';
+
+ HTSprintf0(&toolbar, "%s#%s", curdoc.address, LYToolbarName);
+ if (cp)
+ *cp = '#';
+ StrAllocCopy(newdoc.address, toolbar);
+ FREE(toolbar);
+ *try_internal = TRUE;
+ *force_load = TRUE; /* force MainLoop to reload */
+ }
+}
+
+PRIVATE void handle_LYK_TRACE_LOG ARGS1(
+ BOOLEAN *, trace_flag_ptr)
+{
+#ifndef NO_LYNX_TRACE
+ /*
+ * Check whether we've started a TRACE log
+ * in this session. - FM
+ */
+ if (LYTraceLogFP == NULL) {
+ HTUserMsg(NO_TRACELOG_STARTED);
+ return;
+ }
+
+ /*
+ * Don't do if already viewing the TRACE log. - FM
+ */
+ if (LYIsUIPage(curdoc.address, UIP_TRACELOG))
+ return;
+
+ /*
+ * If TRACE mode is on, turn it off during this fetch of the
+ * TRACE log, so we don't enter stuff about this fetch, and
+ * set a flag for turning it back on when we return to this
+ * loop. Note that we'll miss any messages about memory
+ * exhaustion if it should occur. It seems unlikely that
+ * anything else bad might happen, but if it does, we'll
+ * miss messages about that too. We also fflush(), close,
+ * and open it again, to make sure all stderr messages thus
+ * far will be in the log. - FM
+ */
+ if (!LYReopenTracelog(trace_flag_ptr))
+ return;
+
+ LYLocalFileToURL (&(newdoc.address), LYTraceLogPath);
+ LYRegisterUIPage(newdoc.address, UIP_TRACELOG);
+ StrAllocCopy(newdoc.title, LYNX_TRACELOG_TITLE);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ if (LYValidate || check_realm) {
+ LYPermitURL = TRUE;
+ }
+ LYforce_no_cache = TRUE;
+#else
+ HTUserMsg(TRACE_DISABLED);
+#endif /* NO_LYNX_TRACE */
+}
+
+#ifdef DIRED_SUPPORT
+PRIVATE void handle_LYK_UPLOAD NOARGS
+{
+ /*
+ * Don't do if already viewing upload options page.
+ */
+ if (LYIsUIPage(curdoc.address, UIP_UPLOAD_OPTIONS))
+ return;
+
+ if (lynx_edit_mode && !no_dired_support) {
+ LYUpload_options((char **)&newdoc.address,
+ (char *)curdoc.address);
+ StrAllocCopy(newdoc.title, UPLOAD_OPTIONS_TITLE);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ /*
+ * Uncache the current listing so that it will
+ * be updated to included the uploaded file if
+ * placed in the current directory. - FM
+ */
+ DIRED_UNCACHE_1;
+ }
+}
+#endif /* DIRED_SUPPORT */
+
+PRIVATE void handle_LYK_UP_HALF ARGS3(
+ int *, arrowup,
+ int *, old_c,
+ int, real_c)
+{
+ if (Newline > 1) {
+ int scrollamount = display_lines/2;
+ if (Newline - scrollamount < 1)
+ scrollamount = Newline - 1;
+ Newline -= scrollamount;
+ if (nlinks > 0 && curdoc.link > -1) {
+ if (links[curdoc.link].ly + scrollamount <= display_lines) {
+ newdoc.link = curdoc.link +
+ HText_LinksInLines(HTMainText,
+ Newline,
+ scrollamount);
+ } else {
+ *arrowup = TRUE;
+ }
+ }
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(ALREADY_AT_BEGIN);
+ }
+}
+
+PRIVATE void handle_LYK_UP_LINK ARGS4(
+ int *, follow_col,
+ int *, arrowup,
+ int *, old_c,
+ int, real_c)
+{
+ if (curdoc.link > 0 &&
+ (links[0].ly != links[curdoc.link].ly ||
+ !HText_LinksInLines(HTMainText, 1, Newline - 1))) {
+ /* more links before this on screen, and first of them on
+ a different line or no previous links before this screen? */
+ int newlink;
+
+ if (*follow_col == -1) {
+ *follow_col = links[curdoc.link].lx;
+
+ if (links[curdoc.link].hightext)
+ *follow_col += strlen(links[curdoc.link].hightext)/2;
+ }
+
+ newlink = find_link_near_col(*follow_col, -1);
+ if (newlink > -1) {
+ set_curdoc_link(newlink);
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(NO_LINKS_ABOVE);
+ }
+
+ } else if (curdoc.line > 1 && Newline > 1) { /* previous page */
+ int scrollamount = (Newline > display_lines ?
+ display_lines : Newline - 1);
+ Newline -= scrollamount;
+ if (scrollamount < display_lines &&
+ nlinks > 0 && curdoc.link > -1 &&
+ links[0].ly -1 + scrollamount <= display_lines) {
+ newdoc.link = HText_LinksInLines(HTMainText,
+ 1,
+ scrollamount) - 1;
+ } else {
+ *arrowup = TRUE;
+ }
+
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(ALREADY_AT_BEGIN);
+ }
+}
+
+PRIVATE void handle_LYK_UP_TWO ARGS3(
+ int *, arrowup,
+ int *, old_c,
+ int, real_c)
+{
+ if (Newline > 1) {
+ int scrollamount = (Newline > 2 ? 2 : 1);
+ Newline -= scrollamount;
+ if (nlinks > 0 && curdoc.link > -1) {
+ if (links[curdoc.link].ly + scrollamount <= display_lines) {
+ newdoc.link = curdoc.link +
+ HText_LinksInLines(HTMainText,
+ Newline, scrollamount);
+ } else {
+ *arrowup = TRUE;
+ }
+ }
+ } else if (*old_c != real_c) {
+ *old_c = real_c;
+ HTInfoMsg(ALREADY_AT_BEGIN);
+ }
+}
+
+PRIVATE void handle_LYK_VIEW_BOOKMARK ARGS3(
+ BOOLEAN *, refresh_screen,
+ int *, old_c,
+ int, real_c)
+{
+ char *cp;
+
+ if (LYValidate) {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ HTUserMsg(BOOKMARKS_DISABLED);
+ }
+ return;
+ }
+
+ /*
+ * See if a bookmark exists.
+ * If it does replace newdoc.address with its name.
+ */
+ if ((cp = get_bookmark_filename(&newdoc.address)) != NULL) {
+ if (*cp == '\0' || !strcmp(cp, " ") ||
+ !strcmp(curdoc.address, newdoc.address)) {
+ if (LYMultiBookmarks != MBM_OFF)
+ *refresh_screen = TRUE;
+ return;
+ }
+#ifdef KANJI_CODE_OVERRIDE
+ if (HTCJK == JAPANESE) {
+ last_kcode = NOKANJI; /* AUTO */
+ }
+#endif
+ LYforce_no_cache = TRUE; /*force the document to be reloaded*/
+ StrAllocCopy(newdoc.title, BOOKMARK_TITLE);
+ StrAllocCopy(newdoc.bookmark, BookmarkPage);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ } else {
+ if (*old_c != real_c) {
+ *old_c = real_c;
+ LYMBM_statusline(BOOKMARKS_NOT_OPEN);
+ LYSleepAlert();
+ if (LYMultiBookmarks != MBM_OFF) {
+ *refresh_screen = TRUE;
+ }
+ }
+ }
+}
+
+PRIVATE BOOLEAN handle_LYK_VLINKS ARGS2(
+ int *, cmd,
+ BOOLEAN *, newdoc_link_is_absolute)
+{
+ int c;
+
+ if (LYIsUIPage(curdoc.address, UIP_VLINKS)) {
+ /*
+ * Already viewing visited links page, so get out.
+ */
+ *cmd = LYK_PREV_DOC;
+ return TRUE;
+ }
+
+ /*
+ * Print visited links page to file.
+ */
+ c = LYShowVisitedLinks(&newdoc.address);
+ if (c < 0) {
+ HTUserMsg(VISITED_LINKS_EMPTY);
+ return FALSE;
+ }
+ StrAllocCopy(newdoc.title, VISITED_LINKS_TITLE);
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ if (c > 0) {
+ /* Select a correct link. */
+ *newdoc_link_is_absolute = TRUE;
+ newdoc.link = c - 1;
+ }
+ if (LYValidate || check_realm) {
+ LYPermitURL = TRUE;
+ StrAllocCopy(lynxlinksfile, newdoc.address);
+ }
+ return FALSE;
+}
+
+PUBLIC void handle_LYK_WHEREIS ARGS2(
+ int, cmd,
+ BOOLEAN *, refresh_screen)
+{
+ BOOLEAN have_target_onscreen = (BOOLEAN) (*prev_target != '\0' &&
+ HText_pageHasPrevTarget());
+ BOOL found;
+ int oldcur = curdoc.link; /* temporarily remember */
+ char *remember_old_target = NULL;
+ if (have_target_onscreen)
+ StrAllocCopy(remember_old_target, prev_target);
+ else
+ StrAllocCopy(remember_old_target, "");
+
+ if (cmd == LYK_WHEREIS) {
+ /*
+ * Reset prev_target to force prompting
+ * for a new search string and to turn
+ * off highlighting if no search string
+ * is entered by the user.
+ */
+ *prev_target = '\0';
+ }
+ found = textsearch(&curdoc, prev_target, sizeof(prev_target)-1,
+ (cmd == LYK_WHEREIS)
+ ? 0
+ : ((cmd == LYK_NEXT)
+ ? 1
+ : -1));
+
+ /*
+ * Force a redraw to ensure highlighting of hits
+ * even when found on the same page, or clearing
+ * of highlighting if the default search string
+ * was erased without replacement. - FM
+ */
+ /*
+ ** Well let's try to avoid it at least in a few cases
+ ** where it is not needed. - kw
+ */
+ if (www_search_result >= 0 && www_search_result != curdoc.line) {
+ *refresh_screen = TRUE; /* doesn't really matter */
+ } else if (!found) {
+ *refresh_screen = have_target_onscreen;
+ } else if (!have_target_onscreen && found) {
+ *refresh_screen = TRUE;
+ } else if (www_search_result == curdoc.line &&
+ curdoc.link == oldcur &&
+ curdoc.link >= 0 && nlinks > 0 &&
+ links[curdoc.link].ly >= (display_lines/3)) {
+ *refresh_screen = TRUE;
+ } else if ((case_sensitive && 0!=strcmp(prev_target,
+ remember_old_target)) ||
+ (!case_sensitive && 0!=strcasecomp8(prev_target,
+ remember_old_target))) {
+ *refresh_screen = TRUE;
+ }
+ FREE(remember_old_target);
+}
+
+/*
+ * Get a number from the user and follow that link number.
+ */
+PRIVATE void handle_LYK_digit ARGS6(
+ int, c,
+ BOOLEAN *, force_load,
+ char *, user_input_buffer,
+ int *, old_c,
+ int, real_c,
+ BOOLEAN *, try_internal GCC_UNUSED)
+{
+ int lindx = ((nlinks > 0) ? curdoc.link : 0);
+ int number;
+ char *temp = NULL;
+
+ /* pass cur line num for use in follow_link_number()
+ * Note: Current line may not equal links[cur].line
+ */
+ number = curdoc.line;
+ switch (follow_link_number(c, lindx, &newdoc, &number)) {
+ case DO_LINK_STUFF:
+ /*
+ * Follow a normal link.
+ */
+ StrAllocCopy(newdoc.address, links[lindx].lname);
+ StrAllocCopy(newdoc.title, links[lindx].hightext);
+#ifndef DONT_TRACK_INTERNAL_LINKS
+ /*
+ * For internal links, retain POST content if present.
+ * If we are on the List Page, prevent pushing it on
+ * the history stack. Otherwise set try_internal to
+ * signal that the top of the loop should attempt to
+ * reposition directly, without calling getfile. - kw
+ */
+ if (links[lindx].type == WWW_INTERN_LINK_TYPE) {
+ LYinternal_flag = TRUE;
+ newdoc.internal_link = TRUE;
+ if (LYIsListpageTitle(curdoc.title ? curdoc.title : "") &&
+ (LYIsUIPage(curdoc.address, UIP_LIST_PAGE) ||
+ LYIsUIPage(curdoc.address, UIP_ADDRLIST_PAGE))) {
+ if (check_history()) {
+ LYinternal_flag = TRUE;
+ } else {
+ HTLastConfirmCancelled(); /* reset flag */
+ if (!confirm_post_resub(newdoc.address,
+ newdoc.title,
+ (LYresubmit_posts &&
+ HText_POSTReplyLoaded(&newdoc)) ? 1 : 2,
+ 2)) {
+ if (HTLastConfirmCancelled() ||
+ (LYresubmit_posts &&
+ !HText_POSTReplyLoaded(&newdoc))) {
+ /* cancel the whole thing */
+ LYforce_no_cache = FALSE;
+ reloading = FALSE;
+ StrAllocCopy(newdoc.address, curdoc.address);
+ StrAllocCopy(newdoc.title, curdoc.title);
+ newdoc.internal_link = curdoc.internal_link;
+ HTInfoMsg(CANCELLED);
+ if (nlinks > 0)
+ HText_pageDisplay(curdoc.line, prev_target);
+ break;
+ } else if (LYresubmit_posts) {
+ /* If LYresubmit_posts is set, and the
+ answer was No, and we have a cached
+ copy, then use it. - kw */
+ LYforce_no_cache = FALSE;
+ } else {
+ /* if No, but not ^C or ^G, drop
+ * the post data. Maybe the link
+ * wasn't meant to be internal after
+ * all, here we can recover from that
+ * assumption. - kw */
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ newdoc.internal_link = FALSE;
+ HTAlert(DISCARDING_POST_DATA);
+ }
+ }
+ }
+ /*
+ * Don't push the List Page if we follow an
+ * internal link given by it. - kw
+ */
+ FREE(curdoc.address);
+ } else
+ *try_internal = TRUE;
+ if (!(LYresubmit_posts && newdoc.post_data))
+ LYinternal_flag = TRUE;
+ *force_load = TRUE;
+ break;
+ } else {
+ /*
+ * Free POST content if not an internal link. - kw
+ */
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ }
+#endif /* DONT_TRACK_INTERNAL_LINKS */
+ /*
+ * Might be an anchor in the same doc from a POST
+ * form. If so, don't free the content. -- FM
+ */
+ if (are_different(&curdoc, &newdoc)) {
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.isHEAD = FALSE;
+ newdoc.safe = FALSE;
+ if (!strncmp(newdoc.address, "LYNXMESSAGES:", 13))
+ LYforce_no_cache = TRUE;
+ }
+ newdoc.internal_link = FALSE;
+ *force_load = TRUE; /* force MainLoop to reload */
+ break;
+
+ case DO_GOTOLINK_STUFF:
+ /*
+ * Position on a normal link, don't follow it. - KW
+ */
+ Newline = newdoc.line;
+ newdoc.line = 1;
+ if (Newline == curdoc.line) {
+ /*
+ * It's a link in the current page. - FM
+ */
+ if (nlinks > 0 && curdoc.link > -1) {
+ if (curdoc.link == newdoc.link) {
+ /*
+ * It's the current link, and presumably
+ * reflects a typo in the statusline entry,
+ * so issue a statusline message for the
+ * typo-prone users (like me 8-). - FM
+ */
+ StrAllocCopy(temp, user_input_buffer);
+ sprintf(user_input_buffer,
+ LINK_ALREADY_CURRENT, number);
+ HTUserMsg(user_input_buffer);
+ LYstrncpy(user_input_buffer, temp, MAX_LINE - 1);
+ FREE(temp);
+ } else {
+ /*
+ * It's a different link on this page,
+ */
+ set_curdoc_link(newdoc.link);
+ newdoc.link = 0;
+ }
+ }
+ }
+ break; /* nothing more to do */
+
+ case DO_GOTOPAGE_STUFF:
+ /*
+ * Position on a page in this document. - FM
+ */
+ Newline = newdoc.line;
+ newdoc.line = 1;
+ if (Newline == curdoc.line) {
+ /*
+ * It's the current page, so issue a
+ * statusline message for the typo-prone
+ * users (like me 8-). - FM
+ */
+ if (Newline <= 1) {
+ HTInfoMsg(ALREADY_AT_BEGIN);
+ } else if (!more) {
+ HTInfoMsg(ALREADY_AT_END);
+ } else {
+ StrAllocCopy(temp, user_input_buffer);
+ sprintf(user_input_buffer,
+ ALREADY_AT_PAGE, number);
+ HTUserMsg(user_input_buffer);
+ LYstrncpy(user_input_buffer, temp, MAX_LINE - 1);
+ FREE(temp);
+ }
+ }
+ break;
+
+ case PRINT_ERROR:
+ *old_c = real_c;
+ HTUserMsg(BAD_LINK_NUM_ENTERED);
+ break;
+ }
+ return;
+}
+
+#ifdef SUPPORT_CHDIR
+
+/* original implementation by VH */
+PUBLIC void handle_LYK_CHDIR NOARGS
+{
+ static char buf[LY_MAXPATH];
+ char *p = NULL;
+
+ if (no_chdir) {
+ HTUserMsg(CHDIR_DISABLED);
+ return;
+ }
+
+ _statusline(gettext("cd to:"));
+ /* some people may prefer automatic clearing of the previous user input,
+ here, to do this, just uncomment next line - VH */
+ /* buf[0]='\0'; */
+ if (LYgetstr(buf, VISIBLE, sizeof(buf)-1, 0) < 0 || !*buf) {
+ HTInfoMsg(CANCELLED);
+ return;
+ }
+
+ if (*buf == '~' && !buf[1]) {
+ StrAllocCopy(p, Home_Dir());
+ } else if (*buf == '~') {
+ HTSprintf0(&p, "%s%s", Home_Dir(), buf+1);
+ } else {
+ StrAllocCopy(p, buf);
}
+
+ CTRACE((tfp, "changing directory to '%s'\n", p));
+ if (chdir(p)) {
+ switch (errno) {
+ case EACCES:
+ HTInfoMsg(COULD_NOT_ACCESS_DIR);
+ break;
+ case ENOENT:
+ HTInfoMsg(gettext("No such directory"));
+ break;
+ case ENOTDIR:
+ HTInfoMsg(gettext("A component of path is not a directory"));
+ break;
+ default:
+ HTInfoMsg(gettext("failed to change directory"));
+ break;
+ }
+ } else {
+#ifdef DIRED_SUPPORT
+ /*if in dired, load content of other directory*/
+ if (!no_dired_support
+ && (lynx_edit_mode || (LYIsUIPage(curdoc.address, UIP_DIRED_MENU)))) {
+ char buf2[LY_MAXPATH];
+ char* addr = NULL;
+
+ Current_Dir(buf2);
+ LYLocalFileToURL(&addr, buf2);
+
+ newdoc.address = addr;
+ newdoc.isHEAD = FALSE;
+ StrAllocCopy(newdoc.title, gettext("A URL specified by the user"));
+ FREE(newdoc.post_data);
+ FREE(newdoc.post_content_type);
+ FREE(newdoc.bookmark);
+ newdoc.safe = FALSE;
+ newdoc.internal_link = FALSE;
+ /**force_load = TRUE;*/
+ if (lynx_edit_mode) {
+ DIRED_UNCACHE_2;
+ }
+ } else
+#endif
+ HTInfoMsg(OPERATION_DONE);
+ }
+ FREE(p);
}
+#endif
+
+#ifdef USE_CURSES_PADS
+/*
+ * Having jumps larger than this is counter-productive. Indeed, it is natural
+ * to expect that when the relevant text appears, one would "overshoot" and
+ * would scroll 3-4 extra full screens. When going back, the "accumulation"
+ * logic would again start moving in full screens, so one would overshoot
+ * again, etc.
+ *
+ * Going back, one can fix it in 28 keypresses. The relevant text will appear
+ * on the screen soon enough for the key-repeat to become not that important,
+ * and we are still moving in smaller steps than when we overshot. Since key
+ * repeat is not important, even if we overshoot again, it is going to be by 30
+ * steps, which is easy to fix by reversing the direction again.
+ */
+PRIVATE int repeat_to_delta ARGS1(int, n)
+{
+ int threshold = LYcols / 3;
+
+ while (threshold > 0) {
+ if (n >= threshold) {
+ n = threshold;
+ break;
+ }
+ threshold = (threshold * 2) / 3;
+ }
+ return n;
+}
+
+PRIVATE void handle_LYK_SHIFT_LEFT ARGS2(BOOLEAN *, flag, int, count)
+{
+ if (!LYwideLines) {
+ HTAlert(SHIFT_VS_LINEWRAP);
+ return;
+ }
+ if (LYshiftWin > 0) {
+ LYshiftWin -= repeat_to_delta(count);
+ *flag = TRUE;
+ }
+ if (LYshiftWin < 0)
+ LYshiftWin = 0;
+}
+
+PRIVATE void handle_LYK_SHIFT_RIGHT ARGS2(BOOLEAN *, flag, int, count)
+{
+ if (!LYwideLines) {
+ HTAlert(SHIFT_VS_LINEWRAP);
+ return;
+ }
+ LYshiftWin += repeat_to_delta(count);
+ *flag = TRUE;
+}
+
+PRIVATE BOOLEAN handle_LYK_LINEWRAP_TOGGLE ARGS2(
+ int *, cmd,
+ BOOLEAN *, flag)
+{
+ static char *choices[] = {
+ "Try to fit screen width",
+ "No line wrap in columns",
+ "Wrap columns at screen width",
+ "Wrap columns at 3/4 screen width",
+ "Wrap columns at 2/3 screen width",
+ "Wrap columns at 1/2 screen width",
+ "Wrap columns at 1/3 screen width",
+ "Wrap columns at 1/4 screen width",
+ NULL
+ };
+ static int wrap[] = {
+ 0,
+ 0,
+ 12, /* In units of 1/12 */
+ 9,
+ 8,
+ 6,
+ 4,
+ 3
+ };
+ int c;
+
+ if (LYwin == stdscr)
+ return FALSE;
+
+ /* Somehow the mouse is over the number instead of being over the
+ name, so we decrease x. */
+ c = LYChoosePopup(!LYwideLines, LYlines /2 - 2, LYcols/2-6,
+ choices, TABLESIZE(choices) - 1, FALSE, TRUE);
+ /*
+ * LYhandlePopupList() wasn't really meant to be used
+ * outside of old-style Options menu processing. One result of
+ * mis-using it here is that we have to deal with side-effects
+ * regarding SIGINT signal handler and the term_options global
+ * variable. - kw
+ */
+ if (term_options)
+ return FALSE;
+ LYwideLines = c;
+ LYtableCols = wrap[c];
+
+ if (LYwideLines == 0)
+ LYshiftWin = 0;
+ *flag = TRUE;
+ HTUserMsg(LYwideLines ? LINEWRAP_OFF : LINEWRAP_ON);
+ return reparse_or_reload(cmd);
+}
+#endif
/*
* Here's where we do all the work.
@@ -230,29 +5265,33 @@ PRIVATE void do_change_link ARGS1(
int mainloop NOARGS
{
- int c = 0, real_c = 0, old_c = 0;
+#if defined(WIN_EX) /* 1997/10/08 (Wed) 14:52:06 */
+#undef STRING_MAX
+#define STRING_MAX 4096
+ char temp_buff[STRING_MAX];
+
+#define BUFF_MAX 1024
+ char sjis_buff[BUFF_MAX];
+#endif
+ int c = 0, real_c = 0, old_c = 0, pending_form_c = -1;
int cmd = LYK_DO_NOTHING, real_cmd = LYK_DO_NOTHING;
int getresult;
int arrowup = FALSE, show_help = FALSE;
- char prev_target[512];
- char user_input_buffer[1024];
- char *owner_address = NULL; /* Holds the responsible owner's address */
- char *ownerS_address = NULL; /* Holds owner's address during source fetch */
+ char user_input_buffer[MAX_LINE];
+ CONST char *cshelpfile = NULL;
BOOLEAN first_file = TRUE;
BOOLEAN popped_doc = FALSE;
BOOLEAN refresh_screen = FALSE;
BOOLEAN force_load = FALSE;
BOOLEAN try_internal = FALSE;
BOOLEAN crawl_ok = FALSE;
- BOOLEAN rlink_exists;
- BOOLEAN rlink_allowed;
BOOLEAN vi_keys_flag = vi_keys;
BOOLEAN emacs_keys_flag = emacs_keys;
BOOLEAN trace_mode_flag = FALSE;
BOOLEAN forced_HTML_mode = LYforce_HTML_mode;
char cfile[128];
FILE *cfp;
- char *cp, *toolbar;
+ char *cp;
int ch, recall;
int URLTotal;
int URLNum;
@@ -260,14 +5299,12 @@ int mainloop NOARGS
char *temp = NULL;
BOOLEAN ForcePush = FALSE;
BOOLEAN override_LYresubmit_posts = FALSE;
+ BOOLEAN newdoc_link_is_absolute = FALSE;
+ BOOLEAN curlink_is_editable;
+ BOOLEAN use_last_tfpos;
unsigned int len;
int i;
- int n;
-
-#ifdef DIRED_SUPPORT
- char *tp = NULL;
- struct stat dir_info;
-#endif /* DIRED_SUPPORT */
+ int follow_col = -1, key_count = 0, last_key = 0;
/*
* curdoc.address contains the name of the file that is currently open.
@@ -283,12 +5320,14 @@ int mainloop NOARGS
newdoc.post_data = NULL;
newdoc.post_content_type = NULL;
newdoc.bookmark = NULL;
+ newdoc.internal_link = FALSE;
curdoc.address = NULL;
curdoc.title = NULL;
curdoc.post_data = NULL;
curdoc.post_content_type = NULL;
curdoc.bookmark = NULL;
-#ifdef USE_HASH
+ curdoc.internal_link = FALSE;
+#ifdef USE_COLOR_STYLE
curdoc.style = NULL;
newdoc.style = NULL;
#endif
@@ -305,17 +5344,16 @@ initialize:
StrAllocCopy(newdoc.title, gettext("Entry into main screen"));
newdoc.isHEAD = FALSE;
newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
newdoc.line = 1;
newdoc.link = 0;
#ifdef USE_SLANG
if (TRACE && LYCursesON) {
- addstr("\n");
- refresh();
+ LYaddstr("\n");
+ LYrefresh();
}
#endif /* USE_SLANG */
- CTRACE(tfp,"Entering mainloop, startfile=%s\n",startfile);
+ CTRACE((tfp, "Entering mainloop, startfile=%s\n", startfile));
if (form_post_data) {
StrAllocCopy(newdoc.post_data, form_post_data);
@@ -339,7 +5377,7 @@ initialize:
} else {
/*
* See if a bookmark page exists. If it does,
- * replace newdoc.address with it's name
+ * replace newdoc.address with its name
*/
if ((cp = get_bookmark_filename(&newdoc.address)) != NULL &&
*cp != '\0' && strcmp(cp, " ")) {
@@ -350,7 +5388,7 @@ initialize:
FREE(newdoc.post_content_type);
newdoc.isHEAD = FALSE;
newdoc.safe = FALSE;
- CTRACE(tfp, "Using bookmarks=%s\n", newdoc.address);
+ CTRACE((tfp, "Using bookmarks=%s\n", newdoc.address));
} else {
HTUserMsg(BOOKMARKS_NOT_OPEN);
bookmark_start = FALSE;
@@ -368,7 +5406,7 @@ initialize:
display_lines = LYlines-2;
while (TRUE) {
-#ifdef USE_HASH
+#ifdef USE_COLOR_STYLE
if (curdoc.style != NULL) force_load = TRUE;
#endif
/*
@@ -380,11 +5418,11 @@ initialize:
force_load = FALSE; /* done */
if (TRACE && LYCursesON) {
- move(LYlines-1, LYcols-1); /* make sure cursor is down */
+ LYHideCursor(); /* make sure cursor is down */
#ifdef USE_SLANG
- addstr("\n");
+ LYaddstr("\n");
#endif /* USE_SLANG */
- refresh();
+ LYrefresh();
}
try_again:
/*
@@ -409,19 +5447,10 @@ try_again:
* If newdoc.address is empty then pop a file
* and load it. - FM
*/
- LYpop(&newdoc);
+ LYhist_prev(&newdoc);
popped_doc = TRUE;
-#ifndef DONT_TRACK_INTERNAL_LINKS
-#define NO_INTERNAL_OR_DIFFERENT(c,n) TRUE
-#define NONINTERNAL_OR_PHYS_DIFFERENT(p,n) (!curdoc.internal_link || \
- are_phys_different(p,n))
-#else /* TRACK_INTERNAL_LINKS */
-#define NO_INTERNAL_OR_DIFFERENT(c,n) are_different(c,n)
-#define NONINTERNAL_OR_PHYS_DIFFERENT(p,n) are_different(p,n)
-#endif /* TRACK_INTERNAL_LINKS */
-
#ifndef DONT_TRACK_INTERNAL_LINKS
/*
@@ -438,6 +5467,7 @@ try_again:
try_internal = TRUE;
} else
#endif /* TRACK_INTERNAL_LINKS */
+ {
/*
* Force a no_cache override unless
* it's a bookmark file, or it has POST content
@@ -448,14 +5478,15 @@ try_again:
* value from getfile(). - FM
*/
if ((newdoc.bookmark != NULL) ||
- (newdoc.post_data != NULL &&
- !newdoc.safe &&
- LYresubmit_posts &&
- !override_LYresubmit_posts &&
- NO_INTERNAL_OR_DIFFERENT(&curdoc, &newdoc))) {
- LYoverride_no_cache = FALSE;
- } else {
- LYoverride_no_cache = TRUE;
+ (newdoc.post_data != NULL &&
+ !newdoc.safe &&
+ LYresubmit_posts &&
+ !override_LYresubmit_posts &&
+ NO_INTERNAL_OR_DIFFERENT(&curdoc, &newdoc))) {
+ LYoverride_no_cache = FALSE;
+ } else {
+ LYoverride_no_cache = TRUE;
+ }
}
}
override_LYresubmit_posts = FALSE;
@@ -490,8 +5521,7 @@ try_again:
if (LYUseTraceLog == TRUE &&
trace_mode_flag == FALSE &&
LYTraceLogFP != NULL &&
- !strcmp((newdoc.title ? newdoc.title : ""),
- LYNX_TRACELOG_TITLE)) {
+ LYIsUIPage(newdoc.address, UIP_TRACELOG)) {
DocAddress WWWDoc;
HTParentAnchor *tmpanchor;
@@ -522,25 +5552,30 @@ try_again:
LYPermitURL = TRUE;
}
- Newline = newdoc.line; /* bypass for partial mode */
-#ifdef DISP_PARTIAL
- display_partial = display_partial_flag; /* restore */
- Newline_partial = Newline; /* initialize */
- /*
- * Disable display_partial if requested URL has #fragment
- * and we are not popped from the history stack
- * so can't calculate correct newline position for fragment.
- * Otherwise user got the new document from the first page
- * and be moved to #fragment later after download
- * completed, but only if s/he did not mess screen up by
- * scrolling before... So fall down to old behavior here.
+ /* reset these two variables here before getfile()
+ * so they will be available in partial mode
+ * (was previously implemented in case NORMAL).
*/
- if (Newline_partial == 1 && strchr(newdoc.address, '#'))
- display_partial = FALSE;
-#endif /* DISP_PARTIAL */
-#ifdef USE_PSRC
+ *prev_target = '\0'; /* Reset for new coming document */
+ Newline = newdoc.line; /* set for LYGetNewline() */
+
+#ifdef USE_PRETTYSRC
psrc_first_tag = TRUE;
#endif
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ textfields_need_activation = textfields_activation_option;
+#endif
+ FREE(LYRequestReferer);
+ /*
+ * Don't send Referer if we have to load a document again
+ * that we got from the history stack. We don't know
+ * any more how we originally got to that page. Using
+ * a Referer based on the current HTMainText could only
+ * be right by coincidence. - kw 1999-11-01
+ */
+ if (popped_doc)
+ LYNoRefererForThis = TRUE;
+
#ifndef DONT_TRACK_INTERNAL_LINKS
if (try_internal) {
if (newdoc.address &&
@@ -592,6 +5627,10 @@ try_again:
getresult = getfile(&newdoc);
#endif /* TRACK_INTERNAL_LINKS */
+#ifdef INACTIVE_INPUT_STYLE_VH
+ textinput_redrawn = FALSE; /* for sure */
+#endif
+
switch(getresult) {
case NOT_FOUND:
@@ -600,43 +5639,70 @@ try_again:
* Do any error logging, if appropriate.
*/
LYoverride_no_cache = FALSE; /* Was TRUE if popped. - FM */
- popped_doc = FALSE; /* Was TRUE if popped. - FM */
LYinternal_flag = FALSE; /* Reset to default. - kw */
- if (trace_mode_flag == TRUE) {
- WWW_TraceFlag = TRUE;
- trace_mode_flag = FALSE;
- fprintf(tfp, "Turning TRACE back on.\n\n");
- }
- if (error_logging &&
- first_file && owner_address && !LYCancelledFetch) {
+ turn_trace_back_on(&trace_mode_flag);
+ if (!first_file && !LYCancelledFetch) {
/*
- * Email a bad link message to the owner of
- * the document (but NOT to lynx-dev). - FM
+ * Do error mail sending and/or traversal
+ * stuff. Note that the links[] elements may
+ * not be valid at this point, if we did call
+ * HTuncache_current_document! This should
+ * not have happened for traversal, but for
+ * sending error mail check that HTMainText
+ * exists for this reason. - kw
*/
- if (strncasecomp(owner_address, "mailto:", 7)) {
- if (strncasecomp((owner_address + 7),
- "lynx-dev@", 9)) {
+ if (error_logging && nhist > 0 && !popped_doc &&
+ !LYUserSpecifiedURL &&
+ HTMainText &&
+ nlinks > 0 && curdoc.link < nlinks &&
+ strncmp(newdoc.address ? newdoc.address : "",
+ "LYNXHIST:", 9) &&
+ strncmp(newdoc.address ? newdoc.address : "",
+ "LYNXCOOKIE:", 11)) {
+ char *mail_owner = NULL;
+ if (owner_address &&
+ strncasecomp(owner_address, "mailto:", 7)) {
+ mail_owner = owner_address + 7;
+ }
+ /*
+ * Email a bad link message to the owner of
+ * the document, or to ALERTMAIL if defined,
+ * but NOT to lynx-dev (it is rejected in
+ * mailmsg). - FM, kw
+ */
+#ifndef ALERTMAIL
+ if (mail_owner)
+#endif
mailmsg(curdoc.link,
- (owner_address+7),
+ mail_owner,
history[nhist-1].address,
history[nhist-1].title);
- }
}
- }
- if (traversal && !first_file && !LYCancelledFetch) {
- FILE *ofp;
+ if (traversal) {
+ FILE *ofp;
- if ((ofp = LYAppendToTxtFile(TRAVERSE_ERRORS)) == NULL) {
- if ((ofp = LYNewTxtFile(TRAVERSE_ERRORS)) == NULL) {
- perror(NOOPEN_TRAV_ERR_FILE);
- exit_immediately(-1);
+ if ((ofp = LYAppendToTxtFile(TRAVERSE_ERRORS)) == NULL) {
+ if ((ofp = LYNewTxtFile(TRAVERSE_ERRORS)) == NULL) {
+ perror(NOOPEN_TRAV_ERR_FILE);
+ exit_immediately(EXIT_FAILURE);
+ }
+ }
+ if (nhist > 0) {
+ fprintf(ofp,
+ "%s %s\tin %s\n",
+ popped_doc ?
+ newdoc.address : links[curdoc.link].lname,
+ links[curdoc.link].target,
+ history[nhist-1].address);
+ } else {
+ fprintf(ofp,
+ "%s %s\t\n",
+ popped_doc ?
+ newdoc.address : links[curdoc.link].lname,
+ links[curdoc.link].target);
}
+ LYCloseOutput(ofp);
}
- fprintf(ofp, "%s %s\tin %s\n",
- links[curdoc.link].lname,
- links[curdoc.link].target,
- history[nhist-1].address);
- fclose(ofp);
}
/*
@@ -649,8 +5715,9 @@ try_again:
* If nhist = 0 then it must be the first file.
*/
exit_immediately_with_error_message(NOT_FOUND, first_file);
- return(-1);
+ return(EXIT_FAILURE);
}
+ /* FALLTHRU */
case NULLFILE:
/*
@@ -659,11 +5726,7 @@ try_again:
LYoverride_no_cache = FALSE; /* Was TRUE if popped. - FM */
popped_doc = FALSE; /* Was TRUE if popped. - FM */
LYinternal_flag = FALSE; /* Reset to default. - kw */
- if (trace_mode_flag == TRUE) {
- WWW_TraceFlag = TRUE;
- trace_mode_flag = FALSE;
- fprintf(tfp, "Turning TRACE back on.\n\n");
- }
+ turn_trace_back_on(&trace_mode_flag);
FREE(newdoc.address); /* to pop last doc */
FREE(newdoc.bookmark);
LYJumpFileURL = FALSE;
@@ -672,6 +5735,7 @@ try_again:
LYCancelledFetch = FALSE;
ForcePush = FALSE;
LYforce_HTML_mode = FALSE;
+ force_old_UCLYhndl_on_reload = FALSE;
if (traversal) {
crawl_ok = FALSE;
if (traversal_link_to_add) {
@@ -722,18 +5786,28 @@ try_again:
goto try_again;
} else {
exit_immediately_with_error_message(NULLFILE, first_file);
- return(-1);
+ return(EXIT_FAILURE);
}
}
/*
+ * If we're going to pop from history because
+ * getfile didn't succeed, reset LYforce_no_cache
+ * first. This would have been done in HTAccess.c
+ * if the request got that far, but the URL may
+ * have been handled or rejected in getfile without
+ * taking care of that. - kw
+ */
+ LYforce_no_cache = FALSE;
+ /*
* Retrieval of a newdoc just failed, and just
* going to try_again would pop the next doc
* from history and try to get it without further
* questions. This may not be the right thing to do if
* we have POST data, so fake a PREV_DOC key if it seems
- * that some prompting should be done. Dunno about the
- * traversal logic, so I leave that case alone.
+ * that some prompting should be done. This doesn't
+ * affect the traversal logic, since with traversal
+ * POST data can never occur. - kw
*/
if (history[nhist - 1].post_data &&
!history[nhist - 1].safe) {
@@ -781,12 +5855,7 @@ try_again:
*/
LYoverride_no_cache = FALSE; /* Was TRUE if popped. - FM */
LYinternal_flag = FALSE; /* Reset to default. - kw */
- if (trace_mode_flag == TRUE) {
- WWW_TraceFlag = TRUE;
- trace_mode_flag = FALSE;
- fprintf(tfp, "Turning TRACE back on.\n\n");
- }
- *prev_target = '\0'; /* Reset for this document. - FM */
+ turn_trace_back_on(&trace_mode_flag);
/*
* If it's the first file and we're interactive,
@@ -819,26 +5888,24 @@ try_again:
* if so, reload if with the relevant
* bookmark elements set. - FM
*/
- if ((cp = (char *)calloc(1,
- (strlen((char *)&temp[len]) + 2))) == NULL)
- outofmem(__FILE__, "mainloop");
+ cp = NULL;
if (temp[len] == '/') {
- if (strchr((char *)&temp[(len + 1)], '/')) {
- sprintf(cp, ".%s", (char *)&temp[len]);
+ if (strchr(&temp[(len + 1)], '/')) {
+ HTSprintf0(&cp, ".%s", &temp[len]);
} else {
- strcpy(cp, (char *)&temp[(len + 1)]);
+ StrAllocCopy(cp, &temp[(len + 1)]);
}
} else {
- strcpy(cp, (char *)&temp[len]);
+ StrAllocCopy(cp, &temp[len]);
}
- for (i = 0; i <= MBM_V_MAXFILES; i++) {
- if (MBM_A_subbookmark[i] &&
#ifdef VMS
- !strcasecomp(cp, MBM_A_subbookmark[i])
+#define CompareBookmark(a,b) strcasecomp(a, b)
#else
- !strcmp(cp, MBM_A_subbookmark[i])
+#define CompareBookmark(a,b) strcmp(a, b)
#endif /* VMS */
- ) {
+ for (i = 0; i <= MBM_V_MAXFILES; i++) {
+ if (MBM_A_subbookmark[i] &&
+ !CompareBookmark(cp, MBM_A_subbookmark[i])) {
StrAllocCopy(BookmarkPage,
MBM_A_subbookmark[i]);
break;
@@ -849,7 +5916,7 @@ try_again:
FREE(temp);
if (LYValidate) {
HTAlert(BOOKMARKS_DISABLED);
- return(-1);
+ return(EXIT_FAILURE);
}
if ((temp = HTParse(newdoc.address, "",
PARSE_ACCESS+PARSE_HOST+PARSE_PUNCTUATION))) {
@@ -865,7 +5932,7 @@ try_again:
(BookmarkPage + 2)));
StrAllocCopy(newdoc.title, BOOKMARK_TITLE);
StrAllocCopy(newdoc.bookmark, BookmarkPage);
-#ifdef USE_HASH
+#ifdef USE_COLOR_STYLE
if (curdoc.style)
StrAllocCopy(newdoc.style, curdoc.style);
#endif
@@ -878,8 +5945,8 @@ try_again:
if (!strcmp(homepage, startfile))
StrAllocCopy(homepage, newdoc.address);
StrAllocCopy(startfile, newdoc.address);
- CTRACE(tfp, "Reloading as bookmarks=%s\n",
- newdoc.address);
+ CTRACE((tfp, "Reloading as bookmarks=%s\n",
+ newdoc.address));
goto try_again;
}
}
@@ -930,22 +5997,25 @@ try_again:
* Set Newline to the saved line. It contains the
* line the user was on if s/he has been in the file
* before, or it is 1 if this is a new file.
+ *
+ * We already set Newline before getfile() and probably
+ * update it explicitly if popping from the history stack
+ * via LYpop() or LYpop_num() within getfile() cycle.
+ *
+ * In partial mode, Newline was probably updated in
+ * LYMainLoop_pageDisplay() if user scrolled
+ * the document while loading.
+ * Incremental loading stage already closed in HT*Copy().
*/
#ifdef DISP_PARTIAL
/* Newline = newdoc.line; */
- /* - alreary set and probably updated in partial mode */
- /* incremental rendering stage already closed (but see below) */
-
- if (Newline != Newline_partial || display_partial == TRUE) {
- /* This is the case when we came from the history stack
- * _and_ cached HText was used instead of HT*Copy() call.
- * Set Newline and close partial mode here.
- */
- Newline = Newline_partial;
- display_partial = FALSE;
- }
+ display_partial = FALSE; /* for sure, LYNXfoo:/ may be a problem */
#else
- Newline = newdoc.line; /* now here, no partial mode */
+ /* Should not be needed either if we remove
+ * "DISP_PARTIAL" from LYHistory.c, but lets leave it
+ * as an important comment for now.
+ */
+ Newline = newdoc.line;
#endif
/*
@@ -961,19 +6031,12 @@ try_again:
* to Newline, so we get a redraw.
*/
curdoc.line = -1;
-#ifdef USE_PSRC
- if (psrc_view)
- HTMark_asSource(); /* this flag is not set, since when
- displaying source, psrc_view is temporary unset when
- writing the HTML header - and HTMainText is created
- at that time.*/
-#endif
break;
} /* end switch */
if (TRACE) {
if (!LYTraceLogFP || trace_mode_flag) {
- sleep(AlertSecs); /* allow me to look at the results */
+ LYSleepAlert(); /* allow me to look at the results */
}
}
@@ -984,7 +6047,7 @@ try_again:
StrAllocCopy(curdoc.post_data, newdoc.post_data);
StrAllocCopy(curdoc.post_content_type, newdoc.post_content_type);
StrAllocCopy(curdoc.bookmark, newdoc.bookmark);
-#ifdef USE_HASH
+#ifdef USE_COLOR_STYLE
StrAllocCopy(curdoc.style, HText_getStyle());
if (curdoc.style != NULL)
style_readFromFile (curdoc.style);
@@ -997,7 +6060,7 @@ try_again:
* the visited links list. - FM
*/
if (ownerS_address != NULL) {
-#ifndef USE_PSRC
+#ifndef USE_PRETTYSRC
if (HTOutputFormat == WWW_SOURCE && !HText_getOwner())
#else
if ( (LYpsrc ? psrc_view : HTOutputFormat == WWW_SOURCE)
@@ -1023,7 +6086,7 @@ try_again:
* the source, we get rendered HTML from now on.
*/
HTOutputFormat = WWW_PRESENT;
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
psrc_view = FALSE;
#endif
@@ -1035,12 +6098,14 @@ try_again:
LYUserSpecifiedURL = FALSE; /* only set for goto's and jumps's */
LYJumpFileURL = FALSE; /* only set for jump's */
LYNoRefererForThis = FALSE; /* always reset on return here */
- reloading = FALSE; /* only set for RELOAD and RESUBMIT */
+ reloading = FALSE; /* set for RELOAD and NOCACHE keys */
HEAD_request = FALSE; /* only set for HEAD requests */
- LYPermitURL = FALSE; /* only set for LYValidate */
+ LYPermitURL = FALSE; /* only for LYValidate or check_realm */
ForcePush = FALSE; /* only set for some PRINT requests. */
LYforce_HTML_mode = FALSE;
+ force_old_UCLYhndl_on_reload = FALSE;
popped_doc = FALSE;
+ pending_form_c = -1;
} /* end if (LYforce_no_cache || force_load || are_different(...)) */
@@ -1048,9 +6113,9 @@ try_again:
if (crawl) {
print_crawl_to_fd(stdout, curdoc.address, curdoc.title);
} else {
- print_wwwfile_to_fd(stdout,0);
+ print_wwwfile_to_fd(stdout, FALSE);
}
- return(0);
+ return(EXIT_SUCCESS);
}
/*
@@ -1058,18 +6123,37 @@ try_again:
* then the window size changed recently.
*/
if (recent_sizechange) {
- stop_curses();
- start_curses();
- clear();
- refresh_screen = TRUE; /* to force a redraw */
- if (HTMainText) /* to REALLY force it... - kw */
- HText_setStale(HTMainText);
- recent_sizechange = FALSE;
- if (user_mode == NOVICE_MODE) {
- display_lines = LYlines-4;
- } else {
- display_lines = LYlines-2;
- }
+ /*
+ * First we need to make sure the display library - curses, slang,
+ * whatever - gets notified about the change, and gets a chance
+ * to update external structures appropriately. Hopefully the
+ * stop_curses()/start_curses() sequence achieves this, at least
+ * if the display library has a way to get the new screen size
+ * from the OS.
+ * However, at least for ncurses, the update of the internal
+ * structures will come still too late - the changed screen
+ * size is detected in doupdate(), which would only be called
+ * (indirectly through the HText_pageDisplay below) after the
+ * WINDOW structures are already filled based on the old size.
+ * So we notify the ncurses library directly here. - kw
+ */
+#if defined(NCURSES) && defined(HAVE_RESIZETERM) && defined(HAVE_WRESIZE)
+ resizeterm(LYlines, LYcols);
+ wresize(LYwin, LYlines, LYcols);
+#else
+ stop_curses();
+ start_curses();
+ LYclear();
+#endif
+ refresh_screen = TRUE; /* to force a redraw */
+ if (HTMainText) /* to REALLY force it... - kw */
+ HText_setStale(HTMainText);
+ recent_sizechange = FALSE;
+ if (user_mode == NOVICE_MODE) {
+ display_lines = LYlines-4;
+ } else {
+ display_lines = LYlines-2;
+ }
}
if (www_search_result != -1) {
@@ -1134,7 +6218,7 @@ try_again:
}
}
FREE(temp);
- CTRACE(tfp, "Starting realm is '%s'\n\n", startrealm);
+ CTRACE((tfp, "Starting realm is '%s'\n\n", startrealm));
if (traversal) {
/*
* Set up the crawl output stuff.
@@ -1163,7 +6247,7 @@ try_again:
}
FREE(temp);
}
- CTRACE(tfp, "Traversal host is '%s'\n\n", traversal_host);
+ CTRACE((tfp, "Traversal host is '%s'\n\n", traversal_host));
}
if (startfile) {
/*
@@ -1186,7 +6270,7 @@ try_again:
if (TRACE) {
refresh_screen = TRUE;
if (!LYTraceLogFP || trace_mode_flag) {
- sleep(AlertSecs);
+ LYSleepAlert();
}
}
}
@@ -1201,8 +6285,8 @@ try_again:
*/
if (HTdocument_settings_changed()) {
if (HTcan_reparse_document()) {
- HTUserMsg(gettext("Reparsing document under current settings..."));
- if (HTreparse_document()) {}
+ HTInfoMsg(gettext("Reparsing document under current settings..."));
+ reparse_document();
} else {
/*
* Urk. I have no idea how to recover from a failure here.
@@ -1216,32 +6300,24 @@ try_again:
}
}
- /*
- * Trying to accomodate HTreparse_document() logic
- * with mainloop events. Working out of force_load cycle
- * set all the necessary flags here, from case NORMAL
- * (see also LYK_SOURCE, some staff implemented directly there).
- */
if (from_source_cache) {
- from_source_cache = FALSE; /* done */
-
- /*
- * Make sure curdoc.line will not be equal
- * to Newline, so we get a redraw.
- */
- curdoc.line = -1;
-
+ from_source_cache = FALSE; /* reset */
+ curdoc.line = -1 ; /* so curdoc.line != Newline, see below */
}
#endif
-
/*
* If the curdoc.line is different than Newline then there must
* have been a change since last update. Run HText_pageDisplay()
* create a fresh screen of text out.
+ *
+ * If we got new HTMainText go this way.
* All display_partial calls ends here for final redraw.
*/
if (curdoc.line != Newline) {
+#ifdef INACTIVE_INPUT_STYLE_VH
+ textinput_redrawn = FALSE;
+#endif
refresh_screen = FALSE;
@@ -1270,6 +6346,17 @@ try_again:
}
}
+ /*
+ * If the request is to highlight a link which is counted
+ * from the start of document, correct the link number:
+ */
+ if (newdoc_link_is_absolute) {
+ newdoc_link_is_absolute = FALSE;
+ if (curdoc.line > 1)
+ newdoc.link -= HText_LinksInLines(HTMainText, 1,
+ curdoc.line - 1);
+ }
+
if (arrowup) {
/*
* arrowup is set if we just came up from
@@ -1285,7 +6372,10 @@ try_again:
/*
* We may have popped a doc (possibly in local_dired)
* which didn't have any links when it was pushed, but
- * does have links now (e.g., a file was created) - KW
+ * does have links now (e.g., a file was created).
+ * Code below assumes that curdoc.link is valid and
+ * that (curdoc.link==-1) only occurs if (nlinks==0)
+ * is true. - KW
*/
curdoc.link = 0;
}
@@ -1303,14 +6393,14 @@ try_again:
if (refresh_screen) {
#if defined(FANCY_CURSES) || defined (USE_SLANG)
if (enable_scrollback) {
- clear();
+ LYclear();
} else {
- erase();
+ LYerase();
}
#else
- clear();
+ LYclear();
#endif /* FANCY_CURSES || USE_SLANG */
- HText_pageDisplay(Newline, prev_target);
+ HText_pageDisplay(Newline, prev_target);
#ifdef DIRED_SUPPORT
if (lynx_edit_mode && nlinks > 0 && !HTList_isEmpty(tagged))
@@ -1322,12 +6412,112 @@ try_again:
*/
more = HText_canScrollDown();
+ /*
+ * Adjust curdoc.link as above; nlinks may have changed,
+ * if the refresh_screen flag was set as a result of
+ * a size change.
+ * Code below assumes that curdoc.link is valid and
+ * that (curdoc.link==-1) only occurs if (nlinks==0)
+ * is true. - kw
+ */
+ if (curdoc.link >= nlinks) {
+ curdoc.link = nlinks - 1;
+ } else if (curdoc.link < 0 && nlinks > 0) {
+ curdoc.link = 0;
+ }
+
if (user_mode == NOVICE_MODE)
noviceline(more); /* print help message */
refresh_screen = FALSE;
}
+ curlink_is_editable =
+ (nlinks > 0 &&
+ links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ (links[curdoc.link].form->type == F_TEXT_TYPE ||
+ links[curdoc.link].form->type == F_TEXT_SUBMIT_TYPE ||
+ links[curdoc.link].form->type == F_PASSWORD_TYPE ||
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE));
+
+ use_last_tfpos = (curlink_is_editable &&
+ (real_cmd == LYK_LPOS_PREV_LINK ||
+ real_cmd == LYK_LPOS_NEXT_LINK));
+
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (!textfields_need_activation)
+ textinput_activated = TRUE;
+#endif
+
+#if defined(WIN_EX) /* 1997/10/08 (Wed) 14:52:06 */
+ if (nlinks > 0) {
+ char *p = "LYNX (unknown link type)";
+
+ /* Show the URL & kanji code . */
+ if (strlen(links[curdoc.link].lname) == 0) {
+
+ if (links[curdoc.link].type == WWW_FORM_LINK_TYPE) {
+
+ switch(links[curdoc.link].form->type) {
+ case F_TEXT_SUBMIT_TYPE:
+ case F_SUBMIT_TYPE:
+ case F_IMAGE_SUBMIT_TYPE:
+ p = "[SUBMIT]";
+ break;
+ case F_PASSWORD_TYPE:
+ p = "Password";
+ break;
+ case F_OPTION_LIST_TYPE:
+ p = "Option list";
+ break;
+ case F_CHECKBOX_TYPE:
+ p = "Check box";
+ break;
+ case F_RADIO_TYPE:
+ p = "[Radio]";
+ break;
+ case F_RESET_TYPE:
+ p = "[Reset]";
+ break;
+ case F_TEXT_TYPE:
+ p = "Text input";
+ break;
+ case F_TEXTAREA_TYPE:
+ p = "Text input lines";
+ break;
+ default:
+ break;
+ }
+ set_ws_title(p);
+ }
+ } else {
+ if (user_mode == ADVANCED_MODE) {
+ p = curdoc.title;
+ } else {
+ p = links[curdoc.link].lname;
+ }
+
+ if (strlen(p) < 500) {
+ strcpy(temp_buff, p);
+ if (strchr(temp_buff, '%')) {
+ HTUnEscape(temp_buff);
+ }
+ str_sjis(sjis_buff, temp_buff);
+ set_ws_title(LYElideString(sjis_buff, 10));
+ }
+ }
+ } else {
+ if (strlen(curdoc.address) < sizeof(temp_buff)-1) {
+ if (user_mode == ADVANCED_MODE) {
+ str_sjis(temp_buff, curdoc.title);
+ } else {
+ strcpy(temp_buff, curdoc.address);
+ }
+ set_ws_title(HTUnEscape(temp_buff));
+ }
+ }
+#endif /* WIN_EX */
+
/*
* Report unread or new mail, if appropriate.
*/
@@ -1340,19 +6530,26 @@ try_again:
* to tell the user other misc info.
*/
if (!show_help) {
- print_status_message(links[curdoc.link], &cp);
+ show_main_statusline(links[curdoc.link],
+ (curlink_is_editable && textinput_activated) ?
+ FOR_INPUT : FOR_PANEL);
} else {
show_help = FALSE;
}
- if (!(nlinks > 0 &&
- links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- (links[curdoc.link].form->type == F_TEXT_TYPE ||
- links[curdoc.link].form->type == F_TEXTAREA_TYPE)))
+ if (nlinks > 0) {
/*
- * Highlight current link.
+ * Highlight current link, unless it is an active
+ * text input field.
*/
- highlight(ON, curdoc.link, prev_target);
+ if (!curlink_is_editable) {
+ highlight(ON, curdoc.link, prev_target);
+#ifndef INACTIVE_INPUT_STYLE_VH
+ } else if (!textinput_activated) {
+ highlight(ON, curdoc.link, prev_target);
+#endif
+ }
+ }
if (traversal) {
/*
@@ -1369,7 +6566,7 @@ try_again:
ccount = ccount + 1;
if ((cfp = LYNewTxtFile(cfile)) != NULL) {
print_crawl_to_fd(cfp,curdoc.address,curdoc.title);
- fclose(cfp);
+ LYCloseOutput(cfp);
} else {
if (!dump_output_immediately)
cleanup();
@@ -1382,37 +6579,100 @@ try_again:
printf(
gettext("Fatal error - could not open output file %s\n"),cfile);
if (!dump_output_immediately) {
- exit_immediately(-1);
+ exit_immediately(EXIT_FAILURE);
}
- return(-1);
+ return(EXIT_FAILURE);
}
}
} else {
/*
* Normal, non-traversal handling.
*/
- if (nlinks > 0 &&
- links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- (links[curdoc.link].form->type == F_TEXT_TYPE ||
- links[curdoc.link].form->type == F_TEXT_SUBMIT_TYPE ||
- links[curdoc.link].form->type == F_PASSWORD_TYPE ||
- links[curdoc.link].form->type == F_TEXTAREA_TYPE)) {
- /*
- * Replace novice lines if in NOVICE_MODE.
- */
- if (user_mode==NOVICE_MODE) {
- move(LYlines-2,0); clrtoeol();
- addstr(FORM_NOVICELINE_ONE);
- move(LYlines-1,0); clrtoeol();
- addstr(FORM_NOVICELINE_TWO);
- }
- c = change_form_link(&links[curdoc.link],
+
+ if (curlink_is_editable &&
+ (textinput_activated || pending_form_c != -1)) {
+ if (pending_form_c != -1) {
+ real_c = pending_form_c;
+ pending_form_c = -1;
+ } else {
+ /*
+ * Replace novice lines if in NOVICE_MODE.
+ */
+ if (user_mode==NOVICE_MODE) {
+ form_noviceline(links[curdoc.link].form->disabled);
+ }
+ real_c = change_form_link(&links[curdoc.link],
&newdoc, &refresh_screen,
links[curdoc.link].form->name,
- links[curdoc.link].form->value);
+ links[curdoc.link].form->value,
+ use_last_tfpos, FALSE);
+ }
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (textfields_need_activation)
+ textinput_activated = FALSE;
+#ifdef INACTIVE_INPUT_STYLE_VH
+ textinput_redrawn = FALSE;
+#endif
+#endif
- if (c == '\n' || c == '\r') {
-#ifdef AUTOGROW
+ c = (real_c==LKC_DONE) ? DO_NOTHING : LKC_TO_C(real_c);
+ if (c != DO_NOTHING &&
+ peek_mouse_link() != -1 && peek_mouse_link() != -2)
+ old_c = 0;
+ if (peek_mouse_link() >= 0 &&
+ LKC_TO_LAC(keymap,real_c) != LYK_CHANGE_LINK) {
+ do_change_link();
+ if ((c == '\n' || c == '\r') &&
+ links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ F_TEXTLIKE(links[curdoc.link].form->type) &&
+ !textfields_need_activation) {
+ c = DO_NOTHING;
+ }
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ } else if ((links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE)
+ && textfields_need_activation
+ && !links[curdoc.link].form->disabled
+ && peek_mouse_link() < 0 &&
+ (((LKC_TO_LAC(keymap,real_c) == LYK_NEXT_LINK ||
+#ifdef TEXTAREA_AUTOGROW
+ LKC_TO_LAC(keymap,real_c) == LYK_ACTIVATE ||
+#endif
+ LKC_TO_LAC(keymap,real_c) == LYK_LPOS_NEXT_LINK ||
+ LKC_TO_LAC(keymap,real_c) == LYK_DOWN_LINK) &&
+ ((curdoc.link < nlinks-1 &&
+ links[curdoc.link+1].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link+1].form->type == F_TEXTAREA_TYPE
+ && (links[curdoc.link].form->number ==
+ links[curdoc.link+1].form->number) &&
+ strcmp(links[curdoc.link].form->name,
+ links[curdoc.link+1].form->name) == 0) ||
+ (curdoc.link == nlinks-1 && more &&
+ HText_TAHasMoreLines(curdoc.link, 1)))) ||
+ ((LKC_TO_LAC(keymap,real_c) == LYK_PREV_LINK ||
+ LKC_TO_LAC(keymap,real_c) == LYK_LPOS_PREV_LINK ||
+ LKC_TO_LAC(keymap,real_c) == LYK_UP_LINK) &&
+ ((curdoc.link > 0 &&
+ links[curdoc.link-1].type == WWW_FORM_LINK_TYPE &&
+ links[curdoc.link-1].form->type == F_TEXTAREA_TYPE
+ && (links[curdoc.link].form->number ==
+ links[curdoc.link-1].form->number) &&
+ strcmp(links[curdoc.link].form->name,
+ links[curdoc.link-1].form->name) == 0) ||
+ (curdoc.link == 0 && curdoc.line > 1 &&
+ HText_TAHasMoreLines(curdoc.link, -1)))))) {
+ textinput_activated = TRUE;
+#ifdef TEXTAREA_AUTOGROW
+ if ((c == '\n' || c == '\r') &&
+ LKC_TO_LAC(keymap,real_c) == LYK_ACTIVATE)
+ c = LAC_TO_LKC0(LYK_NEXT_LINK);
+#endif /* TEXTAREA_AUTOGROW */
+#endif /* TEXTFIELDS_MAY_NEED_ACTIVATION */
+ } else
+ switch (c) {
+ case '\n':
+ case '\r':
+#ifdef TEXTAREA_AUTOGROW
/*
* If on the bottom line of a TEXTAREA, and the user hit
* the ENTER key, we add a new line/anchor automatically,
@@ -1428,9 +6688,9 @@ try_again:
* Caveat emptor to anyone trying to change it.]
*/
if ((links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type == F_TEXTAREA_TYPE)
- &&
- ((curdoc.link == nlinks-1)
+ links[curdoc.link].form->type == F_TEXTAREA_TYPE) &&
+ ((curdoc.link == nlinks-1 &&
+ !(more && HText_TAHasMoreLines(curdoc.link, 1)))
||
((curdoc.link < nlinks-1) &&
!(links[curdoc.link+1].type == WWW_FORM_LINK_TYPE &&
@@ -1461,22 +6721,51 @@ try_again:
newdoc.link++;
}
}
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (textfields_need_activation) {
+ textinput_activated = TRUE;
+ textfields_need_activation = textfields_activation_option;
+#ifdef INACTIVE_INPUT_STYLE_VH
+ textinput_redrawn = TRUE;
+#endif
+ };
+#endif
+
}
-#endif /* AUTOGROW */
+#endif /* TEXTAREA_AUTOGROW */
-#ifdef FASTTAB
/*
- * Make return act like down-arrow.
+ * Make return in input field (if it was returned
+ * by change_form_link) act as LYK_NEXT_LINK,
+ * independent of what key (if any) is mapped to
+ * LYK_NEXT_LINK. - kw
*/
- c = DNARROW;
-#else
- /*
- * Make return act like tab.
- */
- c = '\t';
-#endif /* FASTTAB */
+ c = LAC_TO_LKC0(LYK_NEXT_LINK);
+ break;
+ default:
+
+ if (old_c != c && old_c != real_c && c != real_c)
+ real_c = c;
}
} else {
+#if defined(TEXTFIELDS_MAY_NEED_ACTIVATION) && defined(INACTIVE_INPUT_STYLE_VH)
+ if (curlink_is_editable && !textinput_redrawn) {
+ /*draw the text entry, but don't activate it*/
+ textinput_redrawn = TRUE;
+ change_form_link_ex(&links[curdoc.link],
+ &newdoc, &refresh_screen,
+ links[curdoc.link].form->name,
+ links[curdoc.link].form->value,
+ use_last_tfpos, FALSE, TRUE);
+ if (LYShowCursor) {
+ LYmove(links[curdoc.link].ly,
+ ((links[curdoc.link].lx > 0) ?
+ (links[curdoc.link].lx - 1) : 0));
+ } else {
+ LYHideCursor();
+ }
+ }
+#endif /* TEXTFIELDS_MAY_NEED_ACTIVATION && INACTIVE_INPUT_STYLE_VH */
/*
* Get a keystroke from the user.
* Save the last keystroke to avoid
@@ -1484,6 +6773,10 @@ try_again:
*/
real_c = c = LYgetch(); /* get user input */
+ if (c != last_key)
+ key_count = 0;
+ key_count++;
+ last_key = c;
#ifndef VMS
if (c == 3) { /* ^C */
/*
@@ -1496,6 +6789,19 @@ try_again:
goto new_cmd;
}
#endif /* !VMS */
+ if (LKC_HAS_ESC_MOD(c) && EditBinding(c) != LYE_FORM_PASS) {
+ /*
+ * If ESC + <key> was read (and not recognized as a
+ * terminal escape sequence for another key), ignore
+ * the ESC modifier and act on <key> only if the line
+ * editor binding would have passed the same ESC-modified
+ * lynxkeycode back to us if it had been pressed in a
+ * text input field. Otherwise set interesting part
+ * so that it will map to 0, to prevent that ESC + <key>
+ * acts like <key>, which might be unexpected. - kw
+ */
+ c = (c & ~LKC_MASK) | LAC_TO_LKC(0);
+ }
if (old_c != real_c) {
old_c = 0;
}
@@ -1520,79 +6826,20 @@ new_keyboard_input:
* back through the getch() loop.
*/
if (traversal) {
- /*
- * This is a special feature to traverse every http link
- * derived from startfile and check for errors or create
- * crawl output files. Only URL's that begin with
- * "traversal_host" are searched - this keeps the search
- * from crossing to other servers (a feature, not a bug!).
- */
- rlink_exists = (nlinks > 0 && links[curdoc.link].lname != NULL);
- if (rlink_exists) {
- rlink_allowed =
- (!lookup_reject(links[curdoc.link].lname) &&
- traversal_host && links[curdoc.link].lname &&
- !strncmp(traversal_host,
- (strncmp(links[curdoc.link].lname,
- "LYNXIMGMAP:", 11)
- ?
- links[curdoc.link].lname : (links[curdoc.link].lname + 11)),
- strlen(traversal_host)));
- } else {
- rlink_allowed = FALSE;
- }
- if (rlink_exists && rlink_allowed) {
- if (lookup(links[curdoc.link].lname)) {
- if (more_links ||
- (curdoc.link > -1 && curdoc.link < nlinks -1))
- c= DNARROW;
- else {
- if (STREQ(curdoc.title,"Entry into main screen") ||
- (nhist <= 0 )) {
- if (!dump_output_immediately) {
- cleanup();
- exit_immediately(-1);
- }
- return(-1);
- }
- c = LTARROW;
- }
- } else {
- StrAllocCopy(traversal_link_to_add,
- links[curdoc.link].lname);
- if (strncmp(traversal_link_to_add, "LYNXIMGMAP:", 11))
- crawl_ok = TRUE;
- c = RTARROW;
- }
- } else { /* no good right link, so only down and left arrow ok*/
- if (rlink_exists)
- add_to_reject_list(links[curdoc.link].lname);
- if (more_links ||
- (curdoc.link > -1 && curdoc.link < nlinks-1))
- c = DNARROW;
- else {
- /*
- * curdoc.title doesn't always work, so
- * bail out if the history list is empty.
- */
- if (STREQ(curdoc.title,"Entry into main screen") ||
- (nhist <= 0 )) {
- if (!dump_output_immediately) {
- cleanup();
- exit_immediately(-1);
- }
- return(-1);
- }
- c = LTARROW;
- }
- } /* right link not NULL or link to another site*/
+ if ((c = DoTraversal(c, &crawl_ok)) < 0)
+ return (EXIT_FAILURE);
} /* traversal */
- cmd = keymap[c+1]; /* add 1 to map EOF to 0 */
+#ifdef WIN_EX
+ if (c == DO_NOTHING)
+ cmd = LYK_DO_NOTHING;
+ else
+#endif
+ cmd = LKC_TO_LAC(keymap,c); /* adds 1 to map EOF to 0 */
#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
- if (lynx_edit_mode && key_override[c+1] && !no_dired_support)
- cmd = key_override[c+1];
+ if (lynx_edit_mode && !no_dired_support && LKC_TO_LAC(key_override,c))
+ cmd = LKC_TO_LAC(key_override,c);
#endif /* DIRED_SUPPORT && OK_OVERRIDE */
real_cmd = cmd;
@@ -1602,24 +6849,49 @@ new_cmd: /*
* back through the getch() loop.
*/
+ force_old_UCLYhndl_on_reload = FALSE;
CTRACE_FLUSH(tfp);
+ if (cmd != LYK_UP_LINK && cmd != LYK_DOWN_LINK)
+ follow_col = -1;
+
switch(cmd) {
+ case -1:
+ HTUserMsg(COMMAND_UNKNOWN);
+ break;
case 0: /* unmapped character */
default:
- if (more)
- _statusline(MOREHELP);
- else
- _statusline(HELP);
+ if (curdoc.link >= 0 && curdoc.link < nlinks &&
+ links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
+ F_TEXTLIKE(links[curdoc.link].form->type)) {
+
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if (textfields_need_activation) {
+ show_main_statusline(links[curdoc.link], FOR_PANEL);
+#ifdef INACTIVE_INPUT_STYLE_VH
+ textinput_redrawn = FALSE;
+#endif
+ } else
+#endif
+ show_main_statusline(links[curdoc.link], FOR_INPUT);
+ } else if (more) {
+ HTInfoMsg(MOREHELP);
+ } else {
+ HTInfoMsg(HELP);
+ }
show_help = TRUE;
if (TRACE) {
sprintf(cfile, "%d", c);
- addstr(cfile); /* show the user input */
+ LYaddstr(cfile); /* show the user input */
cfile[0] = '\0';
}
break;
+ case LYK_COMMAND:
+ cmd = handle_LYK_COMMAND(user_input_buffer);
+ goto new_cmd;
+
case LYK_INTERRUPT:
/*
* No network transmission to interrupt - 'til we multithread.
@@ -1628,660 +6900,201 @@ new_cmd: /*
case LYK_F_LINK_NUM:
c = '\0';
- case LYK_1:
- case LYK_2:
- case LYK_3:
- case LYK_4:
- case LYK_5:
- case LYK_6:
- case LYK_7:
- case LYK_8:
+ /* FALLTHRU */
+ case LYK_1: /* FALLTHRU */
+ case LYK_2: /* FALLTHRU */
+ case LYK_3: /* FALLTHRU */
+ case LYK_4: /* FALLTHRU */
+ case LYK_5: /* FALLTHRU */
+ case LYK_6: /* FALLTHRU */
+ case LYK_7: /* FALLTHRU */
+ case LYK_8: /* FALLTHRU */
case LYK_9:
- {
- /*
- * Get a number from the user and follow that link number.
- */
- int lindx = ((nlinks > 0) ? curdoc.link : 0);
- int number;
-
- /* pass cur line num for use in follow_link_number()
- * Note: Current line may not equal links[cur].line
- */
- number = curdoc.line;
- switch (follow_link_number(c, lindx, &newdoc, &number)) {
- case DO_LINK_STUFF:
- /*
- * Follow a normal link.
- */
- StrAllocCopy(newdoc.address, links[lindx].lname);
- StrAllocCopy(newdoc.title, links[lindx].hightext);
-#ifndef DONT_TRACK_INTERNAL_LINKS
- /*
- * For internal links, retain POST content if present.
- * If we are on the List Page, prevent pushing it on
- * the history stack. Otherwise set try_internal to
- * signal that the top of the loop should attempt to
- * reposition directly, without calling getfile. - kw
- */
- if (links[lindx].type == WWW_INTERN_LINK_TYPE) {
- LYinternal_flag = TRUE;
- newdoc.internal_link = TRUE;
- if (LYIsListpageTitle(curdoc.title ? curdoc.title : "") &&
- 0==strcmp(HTLoadedDocumentURL(), LYlist_temp_url())) {
- if (!curdoc.post_data ||
- /*
- * Normal case - List Page is not associated
- * with post data. - kw
- */
- (!LYresubmit_posts && curdoc.post_data &&
- history[nhist - 1].post_data &&
- !strcmp(curdoc.post_data,
- history[nhist - 1].post_data) &&
- HText_getContentBase() &&
- !strncmp(HText_getContentBase(),
- strncmp(history[nhist - 1].address,
- "LYNXIMGMAP:", 11) ?
- history[nhist - 1].address :
- history[nhist - 1].address + 11,
- strlen(HText_getContentBase())))) {
- /*
- * Normal case - as best as we can check, the
- * document at the top of the history stack
- * seems to be the document the List Page is
- * about (or a LYNXIMGMAP derived from it),
- * and LYresubmit_posts is not set, so don't
- * prompt here. If we actually have to repeat
- * a POST because, against expectations, the
- * underlying document isn't cached any more,
- * HTAccess will prompt for confirmation,
- * unless we had LYK_NOCACHE. - kw
- */
- LYinternal_flag = TRUE;
- } else {
- HTLastConfirmCancelled(); /* reset flag */
- if (!confirm_post_resub(newdoc.address,
- newdoc.title,
- (LYresubmit_posts &&
- HText_POSTReplyLoaded(&newdoc)) ? 1 : 2,
- 2)) {
- if (HTLastConfirmCancelled() ||
- (LYresubmit_posts &&
- !HText_POSTReplyLoaded(&newdoc))) {
- /* cancel the whole thing */
- LYforce_no_cache = FALSE;
- reloading = FALSE;
- StrAllocCopy(newdoc.address, curdoc.address);
- StrAllocCopy(newdoc.title, curdoc.title);
- newdoc.internal_link = curdoc.internal_link;
- HTInfoMsg(CANCELLED);
- if (nlinks > 0)
- HText_pageDisplay(curdoc.line, prev_target);
- break;
- } else if (LYresubmit_posts) {
- /* If LYresubmit_posts is set, and the
- answer was No, and we have a cached
- copy, then use it. - kw */
- LYforce_no_cache = FALSE;
- } else {
- /* if No, but not ^C or ^G, drop
- * the post data. Maybe the link
- * wasn't meant to be internal after
- * all, here we can recover from that
- * assumption. - kw */
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- newdoc.internal_link = FALSE;
- HTAlert(DISCARDING_POST_DATA);
- }
- }
- }
- /*
- * Don't push the List Page if we follow an
- * internal link given by it. - kw
- */
- FREE(curdoc.address);
- } else
- try_internal = TRUE;
- if (!(LYresubmit_posts && newdoc.post_data))
- LYinternal_flag = TRUE;
- force_load = TRUE;
- break;
- } else {
- /*
- * Free POST content if not an internal link. - kw
- */
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- }
-#endif /* DONT_TRACK_INTERNAL_LINKS */
- /*
- * Might be an anchor in the same doc from a POST
- * form. If so, don't free the content. -- FM
- */
- if (are_different(&curdoc, &newdoc)) {
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- }
- newdoc.internal_link = FALSE;
- force_load = TRUE; /* force MainLoop to reload */
- break;
-
- case DO_GOTOLINK_STUFF:
- /*
- * Position on a normal link, don't follow it. - KW
- */
- Newline = newdoc.line;
- newdoc.line = 1;
- if (Newline == curdoc.line) {
- /*
- * It's a link in the current page. - FM
- */
- if (nlinks > 0 && curdoc.link > -1) {
- if (curdoc.link == newdoc.link) {
- /*
- * It's the current link, and presumably
- * reflects a typo in the statusline entry,
- * so issue a statusline message for the
- * typo-prone users (like me 8-). - FM
- */
- StrAllocCopy(temp, user_input_buffer);
- sprintf(user_input_buffer,
- LINK_ALREADY_CURRENT, number);
- HTUserMsg(user_input_buffer);
- strcpy(user_input_buffer, temp);
- FREE(temp);
- } else {
- /*
- * It's a different link on this page,
- * so turn the highlighting off, set the
- * current link to the new link value from
- * follow_link_number(), and re-initialize
- * the new link value. - FM
- */
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = newdoc.link;
- newdoc.link = 0;
- }
- }
- }
- break; /* nothing more to do */
-
- case DO_GOTOPAGE_STUFF:
- /*
- * Position on a page in this document. - FM
- */
- Newline = newdoc.line;
- newdoc.line = 1;
- if (Newline == curdoc.line) {
- /*
- * It's the current page, so issue a
- * statusline message for the typo-prone
- * users (like me 8-). - FM
- */
- if (Newline <= 1) {
- HTInfoMsg(ALREADY_AT_BEGIN);
- } else if (!more) {
- HTInfoMsg(ALREADY_AT_END);
- } else {
- StrAllocCopy(temp, user_input_buffer);
- sprintf(user_input_buffer,
- ALREADY_AT_PAGE, number);
- HTUserMsg(user_input_buffer);
- strcpy(user_input_buffer, temp);
- FREE(temp);
- }
- }
- break;
-
- case PRINT_ERROR:
- old_c = real_c;
- HTUserMsg(BAD_LINK_NUM_ENTERED);
- break;
- }
+ handle_LYK_digit(c, &force_load, user_input_buffer,
+ &old_c, real_c, &try_internal);
break;
- }
case LYK_SOURCE: /* toggle view source mode */
- /*
- * Check if this is a reply from a POST, and if so,
- * seek confirmation if the safe element is not set. - FM
- */
- if ((curdoc.post_data != NULL &&
- curdoc.safe != TRUE) &&
- confirm_post_resub(curdoc.address, curdoc.title,
- 1, 1) == FALSE) {
- HTInfoMsg(CANCELLED);
- break;
- }
-
- if (HTisDocumentSource()) {
- HTOutputFormat = WWW_PRESENT;
-#ifdef USE_PSRC
- psrc_view = FALSE;
-#endif
- } else {
- if (HText_getOwner())
- StrAllocCopy(ownerS_address, HText_getOwner());
- LYUCPushAssumed(HTMainAnchor);
-#ifdef USE_PSRC
- if (LYpsrc)
- psrc_view = TRUE;
- else
- HTOutputFormat = WWW_SOURCE;
-#else
- HTOutputFormat = WWW_SOURCE;
-#endif
- }
+ handle_LYK_SOURCE(&ownerS_address);
+ break;
-#ifdef SOURCE_CACHE
- if (HTreparse_document()) {
- /*
- * These normally get cleaned up after getfile() returns;
- * since we're not calling getfile(), we have to clean them
- * up ourselves. -dsb
- */
- HTOutputFormat = WWW_PRESENT;
-#ifdef USE_PSRC
- if (psrc_view)
- HTMark_asSource();
- psrc_view = FALSE;
-#endif
- FREE(ownerS_address); /* not used with source_cache */
- LYUCPopAssumed(); /* probably a right place here */
- HTMLSetCharacterHandling(current_char_set); /* restore now */
+#ifdef SH_EX /* 1999/01/01 (Fri) */
+ case LYK_CHG_CENTER: /* ^Q */
- break;
+ if (no_table_center) {
+ no_table_center = FALSE;
+ HTInfoMsg("TABLE center enable.");
+ } else {
+ no_table_center = TRUE;
+ HTInfoMsg("TABLE center disable.");
}
#endif
-
- FREE(curdoc.address); /* so it doesn't get pushed */
- LYforce_no_cache = TRUE;
- break;
-
+ /* FALLTHRU */
case LYK_RELOAD: /* control-R to reload and refresh */
- /*
- * Check if this is a reply from a POST, and if so,
- * seek confirmation if the safe element is not set. - FM
- */
- if ((curdoc.post_data != NULL &&
- curdoc.safe != TRUE) &&
- HTConfirm(CONFIRM_POST_RESUBMISSION) == FALSE) {
- HTInfoMsg(CANCELLED);
- break;
- }
-
- /*
- * Check to see if should reload source, or load html
- */
-
- if (HTisDocumentSource()) {
- force_old_UCLYhndl_on_reload = TRUE;
- forced_UCLYhdnl = HTMainText_Get_UCLYhndl();
-#ifndef USE_PSRC
- HTOutputFormat = WWW_SOURCE;
-#else
- if (LYpsrc)
- psrc_view = TRUE;
- else
- HTOutputFormat = WWW_SOURCE;
-#endif
- }
-
- HEAD_request = HTLoadedDocumentIsHEAD();
- HTuncache_current_document();
-#ifdef NO_ASSUME_SAME_DOC
- /*
- * Don't assume the reloaded document will be the same. - FM
- */
- newdoc.line = 1;
- newdoc.link = 0;
-#else
- /*
- * Do assume the reloaded document will be the same. - FM
- * (I don't remember all the reasons why we couldn't assume
- * this. As the problems show up, we'll try to fix them,
- * or add warnings. - FM)
- */
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link;
-#endif /* NO_ASSUME_SAME_DOC */
- FREE(curdoc.address); /* so it doesn't get pushed */
-#ifdef VMS
- lynx_force_repaint();
-#endif /* VMS */
- /*
- * Reload should force a cache refresh on a proxy.
- * -- Ari L. <luotonen@dxcern.cern.ch>
- *
- * -- but only if this was really a reload requested by
- * the user, not if we jumped here to handle reloading for
- * INLINE_TOGGLE, IMAGE_TOGGLE, RAW_TOGGLE, etc. - KW
- */
- if (real_cmd == LYK_RELOAD)
- reloading = TRUE;
+ handle_LYK_RELOAD(real_cmd);
break;
case LYK_HISTORICAL: /* toggle 'historical' comments parsing */
-#ifdef SOURCE_CACHE
- if (!HTcan_reparse_document()) {
-#endif
- /*
- * Check if this is a reply from a POST, and if so,
- * seek confirmation of reload if the safe element
- * is not set. - FM
- */
- if ((curdoc.post_data != NULL &&
- curdoc.safe != TRUE) &&
- confirm_post_resub(curdoc.address, NULL,
- 0, 0) == FALSE) {
- HTInfoMsg(WILL_NOT_RELOAD_DOC);
- } else {
- HTuncache_current_document();
- StrAllocCopy(newdoc.address, curdoc.address);
- FREE(curdoc.address);
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link;
- }
-#ifdef SOURCE_CACHE
- } /* end if no bypass */
-#endif
- if (historical_comments)
- historical_comments = FALSE;
- else
- historical_comments = TRUE;
- if (minimal_comments) {
- HTAlert(historical_comments ?
- HISTORICAL_ON_MINIMAL_OFF : HISTORICAL_OFF_MINIMAL_ON);
- } else {
- HTAlert(historical_comments ?
- HISTORICAL_ON_VALID_OFF : HISTORICAL_OFF_VALID_ON);
- }
-#ifdef SOURCE_CACHE
- if (HTreparse_document()) {
- break; /* OK */
- }
-#endif
+ handle_LYK_HISTORICAL();
break;
case LYK_MINIMAL: /* toggle 'minimal' comments parsing */
- if (!historical_comments) {
-#ifdef SOURCE_CACHE
- if (!HTcan_reparse_document()) {
-#endif
- /*
- * Check if this is a reply from a POST, and if so,
- * seek confirmation of reload if the safe element
- * is not set. - FM
- */
- if ((curdoc.post_data != NULL &&
- curdoc.safe != TRUE) &&
- confirm_post_resub(curdoc.address, NULL,
- 0, 0) == FALSE) {
- HTInfoMsg(WILL_NOT_RELOAD_DOC);
- } else {
- HTuncache_current_document();
- StrAllocCopy(newdoc.address, curdoc.address);
- FREE(curdoc.address);
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link;
- }
- }
-#ifdef SOURCE_CACHE
- } /* end if no bypass */
-#endif
- if (minimal_comments)
- minimal_comments = FALSE;
- else
- minimal_comments = TRUE;
- if (!historical_comments) {
- HTAlert(minimal_comments ?
- MINIMAL_ON_IN_EFFECT : MINIMAL_OFF_VALID_ON);
- } else {
- HTAlert(minimal_comments ?
- MINIMAL_ON_BUT_HISTORICAL : MINIMAL_OFF_HISTORICAL_ON);
- }
-#ifdef SOURCE_CACHE
- if (HTreparse_document()) {
- break; /* OK */
- }
-#endif
+ handle_LYK_MINIMAL();
break;
case LYK_SOFT_DQUOTES:
-#ifdef SOURCE_CACHE
- if (!HTcan_reparse_document()) {
-#endif
- /*
- * Check if this is a reply from a POST, and if so,
- * seek confirmation of reload if the safe element
- * is not set. - FM
- */
- if ((curdoc.post_data != NULL &&
- curdoc.safe != TRUE) &&
- confirm_post_resub(curdoc.address, NULL,
- 1, 1) == FALSE) {
- HTInfoMsg(WILL_NOT_RELOAD_DOC);
- } else {
- HTuncache_current_document();
- StrAllocCopy(newdoc.address, curdoc.address);
- FREE(curdoc.address);
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link;
- }
-#ifdef SOURCE_CACHE
- } /* end if no bypass */
-#endif
- if (soft_dquotes)
- soft_dquotes = FALSE;
- else
- soft_dquotes = TRUE;
- HTUserMsg(soft_dquotes ?
- SOFT_DOUBLE_QUOTE_ON : SOFT_DOUBLE_QUOTE_OFF);
-#ifdef SOURCE_CACHE
- if (HTreparse_document()) {
- break; /* OK */
- }
-#endif
+ handle_LYK_SOFT_DQUOTES();
break;
case LYK_SWITCH_DTD:
-#ifdef SOURCE_CACHE
- if (!HTcan_reparse_document()) {
-#endif
- /*
- * Check if this is a reply from a POST, and if so,
- * seek confirmation of reload if the safe element
- * is not set. - FM, kw
- */
- if ((curdoc.post_data != NULL &&
- curdoc.safe != TRUE) &&
- confirm_post_resub(curdoc.address, NULL,
- 1, 1) == FALSE) {
- HTInfoMsg(WILL_NOT_RELOAD_DOC);
- } else {
- /*
- * If currently viewing preparsed source, switching
- * to the other DTD parsing may show source differences,
- * so stay in source view - kw
- */
-
- /* NOTE: this conditional can be considered incorrect -
- current behaviour - when viewing source and
- LYPreparsedSource==TRUE, pressing ^V will toggle parser mode
- AND switch back from the source view to presentation view.-HV
- */
- if (HTisDocumentSource() && LYPreparsedSource) {
-#ifdef USE_PSRC
- if (LYpsrc)
- psrc_view = TRUE;
- else
-#endif
- HTOutputFormat = WWW_SOURCE;
- }
- HTuncache_current_document();
- StrAllocCopy(newdoc.address, curdoc.address);
- FREE(curdoc.address);
-#ifdef NO_ASSUME_SAME_DOC
- newdoc.line = 1;
- newdoc.link = 0;
-#else
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link;
-#endif /* NO_ASSUME_SAME_DOC */
- }
-#ifdef SOURCE_CACHE
- } /* end if no bypass */
-#endif
- Old_DTD = !Old_DTD;
- HTSwitchDTD(!Old_DTD);
- HTUserMsg(Old_DTD ? USING_DTD_0 : USING_DTD_1);
-#ifdef SOURCE_CACHE
- if (HTcan_reparse_document()) {
- if (HTisDocumentSource() && LYPreparsedSource) {
-#ifdef USE_PSRC
- if (LYpsrc)
- psrc_view = TRUE;
- else
-#endif
- HTOutputFormat = WWW_SOURCE;
- }
- if (HTreparse_document()) {
- break;
- }
- } /* end if no bypass */
-#endif
- break;
-
-#ifdef NOT_DONE_YET
- case LYK_PIPE:
- /* ignore for now */
+ handle_LYK_SWITCH_DTD();
break;
-#endif /* NOT_DONE_YET */
- case LYK_QUIT: /* quit */
- if (LYQuitDefaultYes == TRUE) {
- c = HTConfirmDefault(REALLY_QUIT_Y, YES);
- } else {
- c = HTConfirmDefault(REALLY_QUIT_N, NO);
- }
- if (LYQuitDefaultYes == TRUE) {
- if (c != NO) {
- return(0);
- } else {
- HTInfoMsg(NO_CANCEL);
- }
- } else if (c == YES) {
- return(0);
- } else {
- HTInfoMsg(NO_CANCEL);
- }
+ case LYK_QUIT: /* quit */
+ if (handle_LYK_QUIT())
+ return(EXIT_SUCCESS);
break;
case LYK_ABORT: /* don't ask the user about quitting */
- return(0);
+ return(EXIT_SUCCESS);
case LYK_NEXT_PAGE: /* next page */
- if (more) {
- Newline += display_lines;
- } else if (curdoc.link < nlinks-1) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = nlinks-1; /* put on last link */
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(ALREADY_AT_END);
- }
+ handle_LYK_NEXT_PAGE(&old_c, real_c);
break;
- case LYK_PREV_PAGE: /* page up */
- if (Newline > 1) {
- Newline -= display_lines;
- } else if (curdoc.link > 0) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = 0; /* put on first link */
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(ALREADY_AT_BEGIN);
- }
+ case LYK_PREV_PAGE: /* page up */
+ handle_LYK_PREV_PAGE(&old_c, real_c);
break;
case LYK_UP_TWO:
- if (Newline > 1) {
- int scrollamount = (Newline > 2 ? 2 : 1);
- Newline -= scrollamount;
- if (nlinks > 0 && curdoc.link > -1) {
- if (links[curdoc.link].ly + scrollamount <= display_lines) {
- newdoc.link = curdoc.link +
- HText_LinksInLines(HTMainText,
- Newline, scrollamount);
- } else {
- arrowup = TRUE;
- }
- }
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(ALREADY_AT_BEGIN);
- }
+ handle_LYK_UP_TWO(&arrowup, &old_c, real_c);
break;
case LYK_DOWN_TWO:
- if (more) {
- Newline += 2;
- if (nlinks > 0 && curdoc.link > -1 &&
- links[curdoc.link].ly > 2) {
- newdoc.link = curdoc.link;
- for (i = 0; links[i].ly <= 2; i++)
- --newdoc.link;
- }
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(ALREADY_AT_END);
- }
+ handle_LYK_DOWN_TWO(&old_c, real_c);
break;
case LYK_UP_HALF:
- if (Newline > 1) {
- int scrollamount = display_lines/2;
- if (Newline - scrollamount < 1)
- scrollamount = Newline - 1;
- Newline -= scrollamount;
- if (nlinks > 0 && curdoc.link > -1) {
- if (links[curdoc.link].ly + scrollamount <= display_lines) {
- newdoc.link = curdoc.link +
- HText_LinksInLines(HTMainText,
- Newline,
- scrollamount);
- } else {
- arrowup = TRUE;
- }
+ handle_LYK_UP_HALF(&arrowup, &old_c, real_c);
+ break;
+
+ case LYK_DOWN_HALF:
+ handle_LYK_DOWN_HALF(&old_c, real_c);
+ break;
+
+#ifdef CAN_CUT_AND_PASTE
+ case LYK_TO_CLIPBOARD: /* ^S */
+ {
+ char *s;
+ int c;
+
+ /* The logic resembles one of ADD_BOOKMARK */
+ if (nlinks > 0 && links[curdoc.link].lname
+ && links[curdoc.link].type != WWW_FORM_LINK_TYPE) {
+ /* Makes sense to copy a link */
+ _statusline("Copy D)ocument's or L)ink's URL to clipboard or C)ancel?");
+ c = LYgetch_single();
+ if (c == 'D')
+ s = curdoc.address;
+ else if (c == 'C')
+ break;
+ else
+ s = links[curdoc.link].lname;
+ } else
+ s = curdoc.address;
+ if (!s && !*s)
+ HTInfoMsg("Current URL is empty.");
+ if (put_clip(s))
+ HTInfoMsg("Copy to clipboard failed.");
+ else if (s == curdoc.address)
+ HTInfoMsg("Document URL put to clipboard.");
+ else
+ HTInfoMsg("Link URL put to clipboard.");
+ }
+ break;
+
+ case LYK_PASTE_URL:
+ if (no_goto && !LYValidate) { /* Go to not allowed. - FM */
+ HTUserMsg(GOTO_DISALLOWED);
+ } else {
+ unsigned char *s = get_clip_grab(), *e, *t;
+ char *buf;
+ int len;
+
+ if (!s)
+ break;
+ len = strlen(s);
+ e = s + len;
+ while (s < e && strchr(" \t\n\r", *s))
+ s++;
+ while (s < e && strchr(" \t\n\r", e[-1]))
+ e--;
+ if (s >= e) {
+ HTInfoMsg("No URL in the clipboard.");
+ break;
}
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(ALREADY_AT_BEGIN);
+ buf = (char*)malloc(e - s + 1);
+ strncpy(buf, s, e - s);
+ buf[e - s] = '\0';
+ t = buf;
+
+ while (s < e) {
+ if (strchr(" \t\n\r", *s)) {
+ int nl = 0; /* Keep whitespace without NL - file names! */
+ unsigned char *s1 = s;
+
+ while (strchr(" \t\n\r", *s)) {
+ if (!nl && *s == '\n')
+ nl = 1;
+ s++;
+ }
+ if (!nl) {
+ while (s1 < s) {
+ if (*s1 != '\r' && *s1 != '\r')
+ *t = *s1;
+ t++, s1++;
+ }
+ }
+ } else
+ *t++ = *s++;
+ }
+ *t = '\0';
+ get_clip_release();
+ do_check_goto_URL(buf, &temp, &force_load);
+ free(buf);
}
break;
+#endif
- case LYK_DOWN_HALF:
- if (more) {
- Newline += (display_lines/2);
- if (nlinks > 0 && curdoc.link > -1 &&
- links[curdoc.link].ly > display_lines/2) {
- newdoc.link = curdoc.link;
- for (i = 0; links[i].ly <= (display_lines/2); i++)
- --newdoc.link;
+#ifdef KANJI_CODE_OVERRIDE
+ case LYK_CHG_KCODE: /* ^L */
+ if (LYRawMode && (HTCJK == JAPANESE)) {
+ switch(last_kcode) {
+ case NOKANJI:
+ last_kcode = SJIS;
+ break;
+ case SJIS:
+ last_kcode = EUC;
+ break;
+ case EUC:
+ last_kcode = NOKANJI;
+ break;
+ default:
+ break;
}
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(ALREADY_AT_END);
}
+ LYmove(0, 0);
+ lynx_start_title_color ();
+ LYaddstr(str_kcode(last_kcode));
+ lynx_stop_title_color ();
+
break;
+#endif
case LYK_REFRESH:
- refresh_screen = TRUE;
- lynx_force_repaint();
- break;
+ refresh_screen = TRUE;
+ lynx_force_repaint();
+ break;
case LYK_HOME:
if (curdoc.line > 1)
@@ -2293,3487 +7106,368 @@ new_cmd: /*
break;
case LYK_END:
- if (more) {
- Newline = HText_getNumOfLines() - display_lines + 3; /* go to end of file */
- arrowup = TRUE; /* position on last link */
+ i = HText_getNumOfLines() - display_lines + 2;
+ if (i >= 1 && Newline != i) {
+ Newline = i; /* go to end of file */
+ arrowup = TRUE; /* position on last link */
} else {
cmd = LYK_NEXT_PAGE;
goto new_cmd;
}
break;
- case LYK_PREV_LINK:
- if (curdoc.link > 0) { /* previous link */
- /*
- * Unhighlight current link.
- */
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link--;
-
- } else if (!more &&
- curdoc.link==0 && Newline==1) { /* at the top of list */
- /*
- * If there is only one page of data and the user
- * goes off the top, then unhighlight the current
- * link and just move the cursor to last link on
- * the page.
- */
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = nlinks-1; /* the last link */
+ case LYK_FIRST_LINK:
+ handle_LYK_FIRST_LINK();
+ break;
- } else if (curdoc.line > 1) { /* previous page */
- /*
- * Go back to the previous page.
- */
- int scrollamount = (Newline > display_lines ?
- display_lines : Newline - 1);
- Newline -= scrollamount;
- if (scrollamount < display_lines &&
- nlinks > 0 && curdoc.link == 0 &&
- links[0].ly - 1 + scrollamount <= display_lines) {
- newdoc.link = HText_LinksInLines(HTMainText,
- 1,
- scrollamount) - 1;
- } else {
- arrowup = TRUE;
- }
+ case LYK_LAST_LINK:
+ handle_LYK_LAST_LINK();
+ break;
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(ALREADY_AT_BEGIN);
- }
+ case LYK_PREV_LINK:
+ case LYK_LPOS_PREV_LINK:
+ handle_LYK_PREV_LINK(&arrowup, &old_c, real_c);
break;
case LYK_NEXT_LINK:
- if (curdoc.link < nlinks-1) { /* next link */
- highlight(OFF, curdoc.link, prev_target);
-#ifdef FASTTAB
- /*
- * Move to different textarea if TAB in textarea.
- */
- if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type == F_TEXTAREA_TYPE &&
- c=='\t') {
- int thisgroup = links[curdoc.link].form->number;
- char *thisname = links[curdoc.link].form->name;
-
- do curdoc.link++;
- while ((curdoc.link < nlinks-1) &&
- links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type == F_TEXTAREA_TYPE &&
- links[curdoc.link].form->number == thisgroup &&
- sametext(links[curdoc.link].form->name, thisname));
- } else {
- curdoc.link++;
- }
-#else
- curdoc.link++;
-#endif /* FASTTAB */
- /*
- * At the bottom of list and there is only one page.
- * Move to the top link on the page.
- */
- } else if (!more && Newline == 1 && curdoc.link == nlinks-1) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = 0;
-
- } else if (more) { /* next page */
- Newline += (display_lines);
-
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(ALREADY_AT_END);
- }
+ case LYK_LPOS_NEXT_LINK:
+ handle_LYK_NEXT_LINK(c, &old_c, real_c);
break;
case LYK_FASTFORW_LINK:
- {
- int samepage = 0, nextlink = curdoc.link;
- if (nlinks > 1) {
-
- /*
- * If in textarea, move to first link or field
- * after it if there is one on this screen. - kw
- */
- if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
- int thisgroup = links[curdoc.link].form->number;
- char *thisname = links[curdoc.link].form->name;
-
- if (curdoc.link < nlinks-1 &&
- !(links[nlinks-1].type == WWW_FORM_LINK_TYPE &&
- links[nlinks-1].form->type == F_TEXTAREA_TYPE &&
- links[nlinks-1].form->number == thisgroup &&
- sametext(links[nlinks-1].form->name, thisname))) {
- do nextlink++;
- while
- (links[nextlink].type == WWW_FORM_LINK_TYPE &&
- links[nextlink].form->type == F_TEXTAREA_TYPE &&
- links[nextlink].form->number == thisgroup &&
- sametext(links[nextlink].form->name, thisname));
- samepage = 1;
- } else if (!more && Newline == 1 && curdoc.link > 0) {
- nextlink = 0;
- samepage = 1;
- }
- } else if (curdoc.link < nlinks-1) {
- nextlink++;
- samepage = 1;
- } else if (!more && Newline == 1 && curdoc.link > 0) {
- nextlink = 0;
- samepage = 1;
- }
- }
- if (samepage) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = nextlink;
- break; /* and we are done. */
-
- /*
- * At the bottom of list and there is only one page.
- * Move to the top link on the page.
- */
- } else if (!more && Newline == 1 && curdoc.link == nlinks-1) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = 0;
-
- } else if (more && /* need a later page */
- HTGetLinkOrFieldStart(curdoc.link,
- &Newline, &newdoc.link,
- 1, TRUE) != NO) {
- Newline++; /* our line counting starts with 1 not 0 */
- /* nothing more to do here */
-
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(NO_LINKS_BELOW);
- }
+ handle_LYK_FASTFORW_LINK(&old_c, real_c);
break;
- }
- case LYK_FASTBACKW_LINK:
- {
- int samepage = 0, nextlink = curdoc.link;
- int res;
- if (nlinks > 1) {
- /*
- * If in textarea, move to first link or textarea group
- * before it if there is one on this screen. - kw
- */
- if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
- int thisgroup = links[curdoc.link].form->number;
- char *thisname = links[curdoc.link].form->name;
-
- if (curdoc.link > 0 &&
- !(links[0].type == WWW_FORM_LINK_TYPE &&
- links[0].form->type == F_TEXTAREA_TYPE &&
- links[0].form->number == thisgroup &&
- sametext(links[0].form->name, thisname))) {
- do nextlink--;
- while
- (links[nextlink].type == WWW_FORM_LINK_TYPE &&
- links[nextlink].form->type == F_TEXTAREA_TYPE &&
- links[nextlink].form->number == thisgroup &&
- sametext(links[nextlink].form->name, thisname));
- samepage = 1;
-
- } else if (!more && Newline == 1 &&
- (links[0].type == WWW_FORM_LINK_TYPE &&
- links[0].form->type == F_TEXTAREA_TYPE &&
- links[0].form->number == thisgroup &&
- sametext(links[0].form->name, thisname)) &&
- !(links[nlinks-1].type == WWW_FORM_LINK_TYPE &&
- links[nlinks-1].form->type == F_TEXTAREA_TYPE &&
- links[nlinks-1].form->number == thisgroup &&
- sametext(links[nlinks-1].form->name, thisname))) {
- nextlink = nlinks - 1;
- samepage = 1;
-
- } else if (!more && Newline == 1 && curdoc.link > 0) {
- nextlink = 0;
- samepage = 1;
- }
- } else if (curdoc.link > 0) {
- nextlink--;
- samepage = 1;
- } else if (!more && Newline == 1) {
- nextlink = nlinks - 1;
- samepage = 1;
- }
- }
- if (samepage) {
- /*
- * If the link as determined so far is part of a
- * group of textarea fields, try to use the first
- * of them that's on the screen instead. - kw
- */
- if (nextlink > 0 &&
- links[nextlink].type == WWW_FORM_LINK_TYPE &&
- links[nextlink].form->type == F_TEXTAREA_TYPE) {
- int thisgroup = links[nextlink].form->number;
- char *thisname = links[nextlink].form->name;
- if (links[0].type == WWW_FORM_LINK_TYPE &&
- links[0].form->type == F_TEXTAREA_TYPE &&
- links[0].form->number == thisgroup &&
- sametext(links[0].form->name, thisname)) {
- nextlink = 0;
- } else
- while
- (nextlink > 1 &&
- links[nextlink-1].type == WWW_FORM_LINK_TYPE &&
- links[nextlink-1].form->type == F_TEXTAREA_TYPE &&
- links[nextlink-1].form->number == thisgroup &&
- sametext(links[nextlink-1].form->name, thisname)) {
- nextlink--;
- }
- }
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = nextlink;
- break; /* and we are done. */
-
- } else if (Newline > 1 && /* need a previous page */
- (res = HTGetLinkOrFieldStart(curdoc.link,
- &Newline, &newdoc.link,
- -1, TRUE)) != NO) {
- if (res == LINK_DO_ARROWUP) {
- /*
- * It says we should use the normal PREV_LINK
- * mechanism, so we'll do that. - kw
- */
- if (nlinks > 0)
- curdoc.link = 0;
- cmd = LYK_PREV_LINK;
- goto new_cmd;
- }
- Newline++; /* our line counting starts with 1 not 0 */
- /* nothing more to do here */
-
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(NO_LINKS_ABOVE);
- }
+ case LYK_FASTBACKW_LINK:
+ if (handle_LYK_FASTBACKW_LINK(&cmd, &old_c, real_c))
+ goto new_cmd;
break;
- }
case LYK_UP_LINK:
- if (curdoc.link > 0 &&
- (links[0].ly != links[curdoc.link].ly ||
- !HText_LinksInLines(HTMainText, 1, Newline - 1))) {
- /* more links before this on screen, and first of them on
- a different line or no previous links before this screen? */
- int newlink = -1;
- for (i = curdoc.link; i >= 0; i--) {
- if (links[i].ly < links[curdoc.link].ly) {
- newlink = i;
- break;
- }
- }
- if (newlink > -1) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = newlink;
-#ifdef NOTDEFINED
- } else if (!more && Newline == 1 && curdoc.link == 0) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = (nlinks-1);
- } else if (more) { /* next page */
- Newline += (display_lines);
-#else
- } else if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_LINKS_ABOVE);
-#endif /* NOTDEFINED */
- }
-
-#ifdef NOTDEFINED
- /*
- * At the bottom of list and there is only one page.
- * Move to the top link on the page.
- */
- } else if (!more && Newline == 1 && curdoc.link == (nlinks-1)) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = 0;
-#endif /* NOTDEFINED */
-
- } else if (curdoc.line > 1 && Newline > 1) { /* previous page */
- int scrollamount = (Newline > display_lines ?
- display_lines : Newline - 1);
- Newline -= scrollamount;
- if (scrollamount < display_lines &&
- nlinks > 0 && curdoc.link > -1 &&
- links[0].ly -1 + scrollamount <= display_lines) {
- newdoc.link = HText_LinksInLines(HTMainText,
- 1,
- scrollamount) - 1;
- } else {
- arrowup = TRUE;
- }
-
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(ALREADY_AT_BEGIN);
- }
+ handle_LYK_UP_LINK(&follow_col, &arrowup, &old_c, real_c);
break;
case LYK_DOWN_LINK:
- if (curdoc.link < (nlinks-1)) { /* more links? */
- int newlink = -1;
- for (i = curdoc.link; i < nlinks; i++)
- if (links[i].ly > links[curdoc.link].ly) {
- newlink = i;
- break;
- }
-
- if (newlink > -1) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = newlink;
-#ifdef NOTDEFINED
- } else if (!more &&
- Newline == 1 && curdoc.link == (nlinks-1)) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = 0;
-#endif /* NOTDEFINED */
- } else if (more) { /* next page */
- Newline += (display_lines);
- } else if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_LINKS_BELOW);
- break;
- }
-#ifdef NOTDEFINED
- /*
- * At the bottom of list and there is only one page.
- * Move to the top link on the page.
- */
- } else if (!more && Newline == 1 && curdoc.link == (nlinks-1)) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = 0;
-#endif /* NOTDEFINED */
- } else if (more) { /* next page */
- Newline += (display_lines);
-
- } else if (old_c != real_c) {
- old_c = real_c;
- HTInfoMsg(ALREADY_AT_END);
- }
+ handle_LYK_DOWN_LINK(&follow_col, &old_c, real_c);
break;
case LYK_CHANGE_LINK:
- do_change_link(prev_target);
+ do_change_link();
+#if defined(TEXTFIELDS_MAY_NEED_ACTIVATION) && defined(INACTIVE_INPUT_STYLE_VH)
+ if (textfields_need_activation)
+ textinput_redrawn = FALSE;
+#endif /* TEXTFIELDS_MAY_NEED_ACTIVATION && INACTIVE_INPUT_STYLE_VH */
break;
case LYK_RIGHT_LINK:
- if (curdoc.link<nlinks-1 &&
- links[curdoc.link].ly == links[curdoc.link+1].ly) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link++;
- }
+ handle_LYK_RIGHT_LINK();
break;
case LYK_LEFT_LINK:
- if (curdoc.link>0 &&
- links[curdoc.link].ly == links[curdoc.link-1].ly) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link--;
- }
+ handle_LYK_LEFT_LINK();
break;
- case LYK_COOKIE_JAR: /* show the cookie jar */
- /*
- * Don't do if already viewing the cookie jar.
- */
- if (strcmp((curdoc.title ? curdoc.title : ""),
- COOKIE_JAR_TITLE)) {
- StrAllocCopy(newdoc.address, "LYNXCOOKIE:/");
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- LYforce_no_cache = TRUE;
- if (LYValidate || check_realm) {
- LYPermitURL = TRUE;
- }
- } else {
- /*
- * If already in the cookie jar, get out.
- */
- cmd = LYK_PREV_DOC;
+ case LYK_COOKIE_JAR: /* show the cookie jar */
+ if (handle_LYK_COOKIE_JAR(&cmd))
goto new_cmd;
- }
break;
case LYK_HISTORY: /* show the history page */
- if (curdoc.title && strcmp(curdoc.title, HISTORY_PAGE_TITLE)) {
- /*
- * Don't do this if already viewing history page.
- *
- * Push the current file so that the history list
- * contains the current file for printing purposes.
- * Pop the file afterwards to prevent multiple copies.
- */
- if (TRACE && !LYUseTraceLog && LYCursesON) {
- move(LYlines-1, LYcols-1); /* make sure cursor is down */
-#ifdef USE_SLANG
- addstr("\n");
-#endif /* USE_SLANG */
- refresh();
- }
- LYpush(&curdoc, ForcePush);
-
- /*
- * Print history options to file.
- */
- if (showhistory(&newdoc.address) < 0) {
- LYpop(&curdoc);
- break;
- }
- StrAllocCopy(newdoc.title, HISTORY_PAGE_TITLE);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- newdoc.link = 1; /*@@@ bypass "recent statusline messages" link */
- FREE(curdoc.address); /* so it doesn't get pushed */
-
- refresh_screen = TRUE;
- if (LYValidate || check_realm) {
- LYPermitURL = TRUE;
- }
+ if (handle_LYK_HISTORY(ForcePush))
break;
- } /* end if strncmp */
- /*
- * Don't put break here so that if the backspace key
- * is pressed in the history page, we fall though,
- * i.e., it acts like a left arrow.
- */
- case LYK_PREV_DOC: /* back up a level */
- if (nhist > 0) { /* if there is anything to go back to */
- /*
- * Check if the previous document is a reply from a POST,
- * and if so, seek confirmation of resubmission if the safe
- * element is not set and the document is not still in the
- * cache or LYresubmit_posts is set. If not confirmed and
- * it is not the startfile, pop it so we go to the yet
- * previous document, until we're OK or reach the startfile.
- * If we reach the startfile and its not OK or we don't get
- * confirmation, cancel. - FM
- */
- DocAddress WWWDoc;
- HTParentAnchor *tmpanchor;
- HText *text;
- BOOLEAN conf = FALSE, first = TRUE;
-
- HTLastConfirmCancelled(); /* reset flag */
- while (nhist > 0) {
- conf = FALSE;
- if (history[(nhist - 1)].post_data == NULL) {
- break;
- }
- WWWDoc.address = history[(nhist - 1)].address;
- WWWDoc.post_data = history[(nhist - 1)].post_data;
- WWWDoc.post_content_type =
- history[(nhist - 1)].post_content_type;
- WWWDoc.bookmark = history[(nhist - 1)].bookmark;
- WWWDoc.isHEAD = history[(nhist - 1)].isHEAD;
- WWWDoc.safe = history[(nhist - 1)].safe;
- tmpanchor = HTAnchor_parent(HTAnchor_findAddress(&WWWDoc));
- if (HTAnchor_safe(tmpanchor)) {
- break;
- }
- if (((text =
- (HText *)HTAnchor_document(tmpanchor)) == NULL &&
- (!strncmp(WWWDoc.address, "LYNXIMGMAP:", 11) ||
- (conf = confirm_post_resub(WWWDoc.address,
- history[(nhist - 1)].title,
- 0, 0))
- == FALSE)) ||
- ((LYresubmit_posts && !conf &&
- (NONINTERNAL_OR_PHYS_DIFFERENT(
- (document *)&history[(nhist - 1)],
- &curdoc) ||
- NONINTERNAL_OR_PHYS_DIFFERENT(
- (document *)&history[(nhist - 1)],
- &newdoc))) &&
- !confirm_post_resub(WWWDoc.address,
- history[(nhist - 1)].title,
- 2, 2))) {
- if (HTLastConfirmCancelled()) {
- if (!first && curdoc.internal_link)
- FREE(curdoc.address);
- cmd = LYK_DO_NOTHING;
- goto new_cmd;
- }
- if (nhist == 1) {
- HTInfoMsg(CANCELLED);
- old_c = 0;
- cmd = LYK_DO_NOTHING;
- goto new_cmd;
- } else {
- HTUserMsg2(WWW_SKIP_MESSAGE, WWWDoc.address);
- do {
- LYpop(&curdoc);
- } while (nhist > 1 && !are_different(
- (document *)&history[(nhist - 1)],
- &curdoc));
- first = FALSE; /* have popped at least one */
- continue;
- }
- } else {
- /*
- * Break from loop; if user just confirmed to
- * load again because document wasn't in cache,
- * set LYforce_no_cache to avoid unnecessary
- * repeat question down the road. - kw
- */
- if (conf)
- LYforce_no_cache = TRUE;
- break;
- }
- }
-
- if (!first)
- curdoc.internal_link = FALSE;
-
- /*
- * Set newdoc.address to empty to pop a file.
- */
- FREE(newdoc.address);
-#ifdef DIRED_SUPPORT
- if (lynx_edit_mode)
- HTuncache_current_document();
-#endif /* DIRED_SUPPORT */
- } else if (child_lynx == TRUE) {
- return(0); /* exit on left arrow in main screen */
-
- } else if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(ALREADY_AT_FIRST);
+ /* FALLTHRU */
+ case LYK_PREV_DOC: /* back up a level */
+ switch (handle_PREV_DOC(&cmd, &old_c, real_c)) {
+ case 1:
+ return(EXIT_SUCCESS);
+ case 2:
+ goto new_cmd;
}
break;
- case LYK_NOCACHE: /* Force submission of form or link with no-cache */
- if (nlinks > 0) {
- if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type != F_SUBMIT_TYPE &&
- links[curdoc.link].form->type != F_IMAGE_SUBMIT_TYPE) {
- if (old_c == real_c)
- break;
- old_c = real_c;
- HTUserMsg(NOT_ON_SUBMIT_OR_LINK);
- break;
- } else {
- LYforce_no_cache = TRUE;
- reloading = TRUE;
- }
- } /* fall through to LYK_ACTIVATE */
-
- case LYK_ACTIVATE: /* follow a link */
- {
- /* 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
- */
- if (links[curdoc.link].form->type == F_SUBMIT_TYPE ||
- links[curdoc.link].form->type == F_IMAGE_SUBMIT_TYPE ||
- links[curdoc.link].form->type ==
- F_TEXT_SUBMIT_TYPE) {
- /*
- * Do nothing if it's disabled. - FM
- */
- if (links[curdoc.link].form->disabled == YES) {
- HTOutputFormat = WWW_PRESENT;
- LYforce_no_cache = FALSE;
- reloading = FALSE;
- break;
- }
- /*
- * Make sure we have an action. - FM
- */
- if (!links[curdoc.link].form->submit_action ||
- *links[curdoc.link].form->submit_action
- == '\0') {
- HTUserMsg(NO_FORM_ACTION);
- HTOutputFormat = WWW_PRESENT;
- LYforce_no_cache = FALSE;
- reloading = FALSE;
- break;
- }
- /*
- * Check for no_mail if the form action
- * is a mailto URL. - FM
- */
- if (links[curdoc.link].form->submit_method
- == URL_MAIL_METHOD && no_mail) {
- HTAlert(FORM_MAILTO_DISALLOWED);
- HTOutputFormat = WWW_PRESENT;
- LYforce_no_cache = FALSE;
- reloading = FALSE;
- break;
- }
- /*
- * Make sure this isn't a spoof in an account
- * with restrictions on file URLs. - FM
- */
- if (no_file_url &&
- !strncasecomp(
- links[curdoc.link].form->submit_action,
- "file:", 5)) {
- HTAlert(FILE_ACTIONS_DISALLOWED);
- HTOutputFormat = WWW_PRESENT;
- LYforce_no_cache = FALSE;
- reloading = FALSE;
- break;
- }
- /*
- * Make sure this isn't a spoof attempt
- * via an internal URL. - FM
- */
- if (!strncasecomp(
- links[curdoc.link].form->submit_action,
- "LYNXCOOKIE:", 11) ||
-#ifdef DIRED_SUPPORT
-#ifdef OK_PERMIT
- (!(strncasecomp(
- links[curdoc.link].form->submit_action,
- "LYNXDIRED:", 10)) &&
- (no_dired_support ||
- strncasecomp(
- (links[curdoc.link].form->submit_action + 10),
- "//PERMIT_LOCATION", 17) ||
- strcmp(curdoc.address, LYPermitFileURL) ||
- strcmp((curdoc.title ? curdoc.title : ""),
- PERMIT_OPTIONS_TITLE))) ||
-#else
- !strncasecomp(
- links[curdoc.link].form->submit_action,
- "LYNXDIRED:", 10) ||
-#endif /* OK_PERMIT */
-#endif /* DIRED_SUPPORT */
- !strncasecomp(
- links[curdoc.link].form->submit_action,
- "LYNXDOWNLOAD:", 13) ||
- !strncasecomp(
- links[curdoc.link].form->submit_action,
- "LYNXHIST:", 9) ||
- !strncasecomp(
- links[curdoc.link].form->submit_action,
- "LYNXKEYMAP:", 11) ||
- !strncasecomp(
- links[curdoc.link].form->submit_action,
- "LYNXIMGMAP:", 11) ||
- !strncasecomp(
- links[curdoc.link].form->submit_action,
- "LYNXPRINT:", 10) ||
- !strncasecomp(
- links[curdoc.link].form->submit_action,
- "lynxexec:", 9) ||
- !strncasecomp(
- links[curdoc.link].form->submit_action,
- "lynxprog:", 9)) {
- HTAlert(SPECIAL_ACTION_DISALLOWED);
- CTRACE(tfp, "LYMainLoop: Rejected '%s'\n",
- links[curdoc.link].form->submit_action);
- HTOutputFormat = WWW_PRESENT;
- LYforce_no_cache = FALSE;
- reloading = FALSE;
- break;
- }
-#ifdef NOTDEFINED /* We're disabling form inputs instead of using this. - FM */
- /*
- * Check for enctype and let user know we
- * don't yet support multipart/form-data - FM
- */
- if (links[curdoc.link].form->submit_enctype) {
- if (!strcmp(
- links[curdoc.link].form->submit_enctype,
- "multipart/form-data")) {
- HTAlert(
- gettext("Enctype multipart/form-data not yet supported! Cannot submit."));
- HTOutputFormat = WWW_PRESENT;
- LYforce_no_cache = FALSE;
- reloading = FALSE;
- break;
- }
- }
-#endif /* NOTDEFINED */
- if (check_realm) {
- LYPermitURL = TRUE;
- }
- if (no_filereferer == TRUE &&
- !strncmp(curdoc.address, "file:", 5)) {
- LYNoRefererForThis = TRUE;
- }
- StrAllocCopy(newdoc.title,
- links[curdoc.link].hightext);
- }
- c = change_form_link(&links[curdoc.link],
- &newdoc, &refresh_screen,
- links[curdoc.link].form->name,
- links[curdoc.link].form->value);
- if (HTOutputFormat == HTAtom_for("www/download") &&
- newdoc.post_data != NULL &&
- newdoc.safe == FALSE) {
- if ((HText_POSTReplyLoaded(&newdoc) == TRUE) &&
- HTConfirm(CONFIRM_POST_RESUBMISSION) == FALSE) {
- HTInfoMsg(CANCELLED);
- HTOutputFormat = WWW_PRESENT;
- LYforce_no_cache = FALSE;
- StrAllocCopy(newdoc.address, curdoc.address);
- StrAllocCopy(newdoc.title, curdoc.title);
- StrAllocCopy(newdoc.post_data, curdoc.post_data);
- StrAllocCopy(newdoc.post_content_type,
- curdoc.post_content_type);
- StrAllocCopy(newdoc.bookmark, curdoc.bookmark);
- newdoc.isHEAD = curdoc.isHEAD;
- newdoc.safe = curdoc.safe;
- newdoc.internal_link = curdoc.internal_link;
- break;
- }
- }
- if (c == 23) {
- c = DO_NOTHING;
- refresh_screen = TRUE;
- }
- goto new_keyboard_input;
- } else {
- /*
- * Not a forms link.
- *
- * Make sure this isn't a spoof in an account
- * with restrictions on file URLs. - FM
- */
- if (no_file_url &&
- !strncmp(links[curdoc.link].lname, "file:", 5)) {
- if (strncmp(curdoc.address, "file:", 5)) {
- HTAlert(FILE_SERVED_LINKS_DISALLOWED);
- reloading = FALSE;
- break;
- } else if (curdoc.bookmark != NULL) {
- HTAlert(FILE_BOOKMARKS_DISALLOWED);
- reloading = FALSE;
- break;
- }
- }
- /*
- * Make sure this isn't a spoof attempt
- * via an internal URL in a non-internal
- * document. - FM
- */
- if ((!strncmp(links[curdoc.link].lname,
- "LYNXCOOKIE:", 11) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- COOKIE_JAR_TITLE)) ||
-#ifdef DIRED_SUPPORT
- (!strncmp(links[curdoc.link].lname,
- "LYNXDIRED:", 10) &&
- (strcmp(curdoc.address, LYDiredFileURL) ||
- strcmp((curdoc.title ? curdoc.title : ""),
- DIRED_MENU_TITLE)) &&
- (strcmp(curdoc.address, LYPermitFileURL) ||
- strcmp((curdoc.title ? curdoc.title : ""),
- PERMIT_OPTIONS_TITLE)) &&
- (strcmp(curdoc.address, LYUploadFileURL) ||
- strcmp((curdoc.title ? curdoc.title : ""),
- UPLOAD_OPTIONS_TITLE))) ||
-#endif /* DIRED_SUPPORT */
- (!strncmp(links[curdoc.link].lname,
- "LYNXDOWNLOAD:", 13) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- DOWNLOAD_OPTIONS_TITLE)) ||
- (!strncmp(links[curdoc.link].lname,
- "LYNXHIST:", 9) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- HISTORY_PAGE_TITLE) &&
- strcmp(curdoc.address, LYlist_temp_url())) ||
- (!strncmp(links[curdoc.link].lname,
- "LYNXPRINT:", 10) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- PRINT_OPTIONS_TITLE))) {
- HTAlert(SPECIAL_VIA_EXTERNAL_DISALLOWED);
- HTOutputFormat = WWW_PRESENT;
- LYforce_no_cache = FALSE;
- reloading = FALSE;
- break;
- }
- /*
- * Follow a normal link or anchor.
- */
- StrAllocCopy(newdoc.address, links[curdoc.link].lname);
- StrAllocCopy(newdoc.title, links[curdoc.link].hightext);
-#ifndef DONT_TRACK_INTERNAL_LINKS
- /*
- * For internal links, retain POST content if present.
- * If we are on the List Page, prevent pushing it on
- * the history stack. Otherwise set try_internal to
- * signal that the top of the loop should attempt to
- * reposition directly, without calling getfile. - kw
- */
- /*
- * Might be an internal link anchor in the same doc.
- * If so, take the try_internal shortcut if we didn't
- * fall through from LYK_NOCACHE. - kw
- */
- newdoc.internal_link =
- (links[curdoc.link].type == WWW_INTERN_LINK_TYPE);
- if (newdoc.internal_link) {
- /*
- * Special case of List Page document with an
- * internal link indication, which may really stand
- * for an internal link within the document the
- * List Page is about. - kw
- */
- if ( 0==strcmp(curdoc.address, LYlist_temp_url()) &&
- (LYIsListpageTitle(curdoc.title ? curdoc.title : ""))) {
- if (!curdoc.post_data ||
- /*
- * Normal case - List Page is not associated
- * with post data. - kw
- */
- (!LYresubmit_posts && curdoc.post_data &&
- history[nhist - 1].post_data &&
- !strcmp(curdoc.post_data,
- history[nhist - 1].post_data) &&
- HText_getContentBase() &&
- !strncmp(HText_getContentBase(),
- strncmp(history[nhist - 1].address,
- "LYNXIMGMAP:", 11) ?
- history[nhist - 1].address :
- history[nhist - 1].address + 11,
- strlen(HText_getContentBase())))) {
- /*
- * Normal case - as best as we can check, the
- * document at the top of the history stack
- * seems to be the document the List Page is
- * about (or a LYNXIMGMAP derived from it),
- * and LYresubmit_posts is not set, so don't
- * prompt here. If we actually have to repeat
- * a POST because, against expectations, the
- * underlying document isn't cached any more,
- * HTAccess will prompt for confirmation,
- * unless we had LYK_NOCACHE. - kw
- */
- LYinternal_flag = TRUE;
- } else {
- HTLastConfirmCancelled(); /* reset flag */
- if (!confirm_post_resub(newdoc.address,
- newdoc.title,
- (LYresubmit_posts &&
- HText_POSTReplyLoaded(&newdoc)) ? 1 : 2,
- 2)) {
- if (HTLastConfirmCancelled() ||
- (LYresubmit_posts &&
- cmd != LYK_NOCACHE &&
- !HText_POSTReplyLoaded(&newdoc))) {
- /* cancel the whole thing */
- LYforce_no_cache = FALSE;
- reloading = FALSE;
- StrAllocCopy(newdoc.address, curdoc.address);
- StrAllocCopy(newdoc.title, curdoc.title);
- newdoc.internal_link = curdoc.internal_link;
- HTInfoMsg(CANCELLED);
- break;
- } else if (LYresubmit_posts &&
- cmd != LYK_NOCACHE) {
- /* If LYresubmit_posts is set, and the
- answer was No, and the key wasn't
- NOCACHE, and we have a cached copy,
- then use it. - kw */
- LYforce_no_cache = FALSE;
- } else {
- /* if No, but not ^C or ^G, drop
- * the post data. Maybe the link
- * wasn't meant to be internal after
- * all, here we can recover from that
- * assumption. - kw */
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- newdoc.internal_link = FALSE;
- HTAlert(DISCARDING_POST_DATA);
- }
- }
- }
- /*
- * Don't push the List Page if we follow an
- * internal link given by it. - kw
- */
- FREE(curdoc.address);
- } else if (cmd != LYK_NOCACHE) {
- try_internal = TRUE;
- }
- if (!(LYresubmit_posts && newdoc.post_data))
- LYinternal_flag = TRUE;
- /* We still set force_load so that history pushing
- ** etc. will be done. - kw */
- force_load = TRUE;
- break;
- } else {
- /*
- * Free POST content if not an internal link. - kw
- */
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- }
-#endif /* TRACK_INTERNAL_LINKS */
- /*
- * Might be an anchor in the same doc from a POST
- * form. If so, dont't free the content. -- FM
- */
- if (are_different(&curdoc, &newdoc)) {
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- }
- if (!no_jump && lynxjumpfile && curdoc.address &&
- !strcmp(lynxjumpfile, curdoc.address)) {
- LYJumpFileURL = TRUE;
- LYUserSpecifiedURL = TRUE;
- } else if ((curdoc.title &&
- !strcmp(curdoc.title, HISTORY_PAGE_TITLE)) ||
- curdoc.bookmark != NULL ||
- (lynxjumpfile &&
- !strcmp(lynxjumpfile, curdoc.address))) {
- LYUserSpecifiedURL = TRUE;
- } else if (no_filereferer == TRUE &&
- !strncmp(curdoc.address, "file:", 5)) {
- LYNoRefererForThis = TRUE;
- }
- newdoc.link = 0;
- force_load = TRUE; /* force MainLoop to reload */
-#ifdef USE_PSRC
- psrc_view = FALSE; /* we get here if link is not internal */
-#endif
-
-#ifdef DIRED_SUPPORT
- if (lynx_edit_mode) {
- HTuncache_current_document();
- /*
- * Unescaping any slash chars in the URL,
- * but avoid double unescaping and too-early
- * unescaping of other chars. - KW
- */
- HTUnEscapeSome(newdoc.address,"/");
- strip_trailing_slash(newdoc.address);
- }
-#endif /* DIRED_SUPPORT */
- if (!strncmp(curdoc.address, "LYNXCOOKIE:", 11)) {
- HTuncache_current_document();
- }
- }
- }
+ case LYK_NEXT_DOC: /* undo back up a level */
+ handle_NEXT_DOC();
break;
- case LYK_ELGOTO: /* edit URL of current link and go to it */
- if (no_goto && !LYValidate) {
- /*
- * Go to not allowed. - FM
- */
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(GOTO_DISALLOWED);
- }
- break;
- }
- if (!(nlinks > 0 && curdoc.link > -1) ||
- (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type != F_SUBMIT_TYPE &&
- links[curdoc.link].form->type != F_IMAGE_SUBMIT_TYPE &&
- links[curdoc.link].form->type != F_TEXT_SUBMIT_TYPE)) {
- /*
- * No links on page, or not a normal link
- * or form submit button. - FM
- */
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NOT_ON_SUBMIT_OR_LINK);
- }
- break;
- }
- if ((links[curdoc.link].type == WWW_FORM_LINK_TYPE) &&
- (!links[curdoc.link].form->submit_action ||
- *links[curdoc.link].form->submit_action == '\0')) {
- /*
- * Form submit button with no ACTION defined. - FM
- */
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_FORM_ACTION);
- }
- break;
- }
-#ifdef DIRED_SUPPORT
- if (!strncmp(links[curdoc.link].lname,
- "LYNXDIRED:", 10) ||
- !strcmp(curdoc.address, LYDiredFileURL) ||
- !strcmp((curdoc.title ? curdoc.title : ""),
- DIRED_MENU_TITLE) ||
- !strcmp(curdoc.address, LYPermitFileURL) ||
- !strcmp((curdoc.title ? curdoc.title : ""),
- PERMIT_OPTIONS_TITLE) ||
- !strcmp(curdoc.address, LYUploadFileURL) ||
- !strcmp((curdoc.title ? curdoc.title : ""),
- UPLOAD_OPTIONS_TITLE)) {
- /*
- * Disallow editing of File Management URLs. - FM
- */
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(EDIT_FM_MENU_URLS_DISALLOWED);
- }
+ case LYK_NOCACHE: /* Force submission of form or link with no-cache */
+ if (!handle_LYK_NOCACHE(&old_c, real_c))
break;
- }
-#endif /* DIRED_SUPPORT */
-
- /*
- * Save the current user_input_buffer string,
- * and load the current link's address. - FM
- */
- StrAllocCopy(temp, user_input_buffer);
- LYstrncpy(user_input_buffer,
- ((links[curdoc.link].type == WWW_FORM_LINK_TYPE)
- ?
- links[curdoc.link].form->submit_action : links[curdoc.link].lname),
- (sizeof(user_input_buffer) - 1));
- /*
- * Offer the current link's URL for editing. - FM
- */
- _statusline(EDIT_CURLINK_URL);
- if (((ch = LYgetstr(user_input_buffer, VISIBLE,
- sizeof(user_input_buffer), RECALL)) >= 0) &&
- user_input_buffer[0] != '\0' &&
- strcmp(user_input_buffer,
- ((links[curdoc.link].type == WWW_FORM_LINK_TYPE)
- ? links[curdoc.link].form->submit_action
- : links[curdoc.link].lname))) {
- LYTrimAllStartfile(user_input_buffer);
- if (user_input_buffer[0] != '\0') {
- goto check_goto_URL;
- }
+ /* FALLTHRU */
+ case LYK_ACTIVATE: /* follow a link */
+ case LYK_SUBMIT: /* follow a link, submit TEXT_SUBMIT input */
+ switch (handle_LYK_ACTIVATE(&c, cmd, &try_internal, &refresh_screen, &force_load, real_cmd)) {
+ case 1:
+ continue;
+ case 2:
+ goto new_keyboard_input;
+ case 3:
+ pending_form_c = c;
}
- /*
- * User cancelled via ^G, a full deletion,
- * or not modifying the URL. - FM
- */
- HTInfoMsg(CANCELLED);
- strcpy(user_input_buffer, temp);
- FREE(temp);
break;
- case LYK_ECGOTO: /* edit current URL and go to to it */
- if (no_goto && !LYValidate) {
- /*
- * Go to not allowed. - FM
- */
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(GOTO_DISALLOWED);
- }
- break;
- }
-#ifdef DIRED_SUPPORT
- if (!strcmp(curdoc.address, LYDiredFileURL) ||
- !strcmp((curdoc.title ? curdoc.title : ""),
- DIRED_MENU_TITLE) ||
- !strcmp(curdoc.address, LYPermitFileURL) ||
- !strcmp((curdoc.title ? curdoc.title : ""),
- PERMIT_OPTIONS_TITLE) ||
- !strcmp(curdoc.address, LYUploadFileURL) ||
- !strcmp((curdoc.title ? curdoc.title : ""),
- UPLOAD_OPTIONS_TITLE)) {
- /*
- * Disallow editing of File Management URLs. - FM
- */
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(EDIT_FM_MENU_URLS_DISALLOWED);
- }
- break;
- }
-#endif /* DIRED_SUPPORT */
-
- /*
- * Save the current user_input_buffer string,
- * and load the current document's address.
- */
- StrAllocCopy(temp, user_input_buffer);
- LYstrncpy(user_input_buffer,
- curdoc.address,
- (sizeof(user_input_buffer) - 1));
-
- /*
- * Warn the user if the current document has POST
- * data associated with it. - FM
- */
- if (curdoc.post_data)
- HTAlert(CURRENT_DOC_HAS_POST_DATA);
-
- /*
- * Offer the current document's URL for editing. - FM
- */
- _statusline(EDIT_CURDOC_URL);
- if (((ch = LYgetstr(user_input_buffer, VISIBLE,
- sizeof(user_input_buffer), RECALL)) >= 0) &&
- user_input_buffer[0] != '\0' &&
- strcmp(user_input_buffer, curdoc.address)) {
- LYTrimAllStartfile(user_input_buffer);
- if (user_input_buffer[0] != '\0') {
- goto check_goto_URL;
- }
- }
- /*
- * User cancelled via ^G, a full deletion,
- * or not modifying the URL. - FM
- */
- HTInfoMsg(CANCELLED);
- strcpy(user_input_buffer, temp);
- FREE(temp);
+ case LYK_ELGOTO: /* edit URL of current link and go to it */
+ if (handle_LYK_ELGOTO(&ch, user_input_buffer, &temp, &old_c, real_c))
+ do_check_goto_URL(user_input_buffer, &temp, &force_load);
break;
- case LYK_GOTO: /* 'g' to goto a random URL */
- if (no_goto && !LYValidate) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(GOTO_DISALLOWED);
- }
- break;
- }
-
- StrAllocCopy(temp, user_input_buffer);
- if (!goto_buffer)
- *user_input_buffer = '\0';
-
- URLTotal = (Goto_URLs ? HTList_count(Goto_URLs) : 0);
- if (goto_buffer && *user_input_buffer) {
- recall = ((URLTotal > 1) ? RECALL : NORECALL);
- URLNum = 0;
- FirstURLRecall = FALSE;
- } else {
- recall = ((URLTotal >= 1) ? RECALL : NORECALL);
- URLNum = URLTotal;
- FirstURLRecall = TRUE;
- }
-
- /*
- * Ask the user.
- */
- _statusline(URL_TO_OPEN);
- if ((ch = LYgetstr(user_input_buffer, VISIBLE,
- sizeof(user_input_buffer), recall)) < 0 ) {
- /*
- * User cancelled the Goto via ^G.
- * Restore user_input_buffer and break. - FM
- */
- strcpy(user_input_buffer, temp);
- FREE(temp);
- HTInfoMsg(CANCELLED);
- break;
- }
-
-check_recall:
- /*
- * Get rid of leading spaces (and any other spaces).
- */
- LYTrimAllStartfile(user_input_buffer);
- if (*user_input_buffer == '\0' &&
- !(recall && (ch == UPARROW || ch == DNARROW))) {
- strcpy(user_input_buffer, temp);
- FREE(temp);
- HTInfoMsg(CANCELLED);
- break;
- }
- if (recall && ch == UPARROW) {
- if (FirstURLRecall) {
- /*
- * Use last URL in the list. - FM
- */
- FirstURLRecall = FALSE;
- URLNum = 0;
- } else {
- /*
- * Go back to the previous URL in the list. - FM
- */
- URLNum++;
- }
- if (URLNum >= URLTotal)
- /*
- * Roll around to the last URL in the list. - FM
- */
- URLNum = 0;
- if ((cp = (char *)HTList_objectAt(Goto_URLs,
- URLNum)) != NULL) {
- strcpy(user_input_buffer, cp);
- if (goto_buffer && *temp &&
- !strcmp(temp, user_input_buffer)) {
- _statusline(EDIT_CURRENT_GOTO);
- } else if ((goto_buffer && URLTotal == 2) ||
- (!goto_buffer && URLTotal == 1)) {
- _statusline(EDIT_THE_PREV_GOTO);
- } else {
- _statusline(EDIT_A_PREV_GOTO);
- }
- if ((ch = LYgetstr(user_input_buffer, VISIBLE,
- sizeof(user_input_buffer),
- recall)) < 0) {
- /*
- * User cancelled the Goto via ^G.
- * Restore user_input_buffer and break. - FM
- */
- strcpy(user_input_buffer, temp);
- FREE(temp);
- HTInfoMsg(CANCELLED);
- break;
- }
- goto check_recall;
- }
- } else if (recall && ch == DNARROW) {
- if (FirstURLRecall) {
- /*
- * Use the first URL in the list. - FM
- */
- FirstURLRecall = FALSE;
- URLNum = URLTotal - 1;
- } else {
- /*
- * Advance to the next URL in the list. - FM
- */
- URLNum--;
- }
- if (URLNum < 0)
- /*
- * Roll around to the first URL in the list. - FM
- */
- URLNum = URLTotal - 1;
- if ((cp=(char *)HTList_objectAt(Goto_URLs,
- URLNum)) != NULL) {
- strcpy(user_input_buffer, cp);
- if (goto_buffer && *temp &&
- !strcmp(temp, user_input_buffer)) {
- _statusline(EDIT_CURRENT_GOTO);
- } else if ((goto_buffer && URLTotal == 2) ||
- (!goto_buffer && URLTotal == 1)) {
- _statusline(EDIT_THE_PREV_GOTO);
- } else {
- _statusline(EDIT_A_PREV_GOTO);
- }
- if ((ch = LYgetstr(user_input_buffer, VISIBLE,
- sizeof(user_input_buffer),
- recall)) < 0) {
- /*
- * User cancelled the Goto via ^G.
- * Restore user_input_buffer and break. - FM
- */
- strcpy(user_input_buffer, temp);
- FREE(temp);
- HTInfoMsg(CANCELLED);
- break;
- }
- goto check_recall;
- }
- }
-
-check_goto_URL:
- /* allow going to anchors*/
- if (*user_input_buffer == '#' ) {
- if ( user_input_buffer[1] &&
- HTFindPoundSelector(user_input_buffer+1) ) {
- /* HTFindPoundSelector will initialize www_search_result,
- so we do nothing else. */
- HTAddGotoURL(user_input_buffer);
- }
- break;
- }
- /*
- * If its not a URL then make it one.
- */
- StrAllocCopy(temp, user_input_buffer);
- LYFillLocalFileURL((char **)&temp, "file://localhost");
- LYEnsureAbsoluteURL((char **)&temp, "", TRUE);
- sprintf(user_input_buffer, "%.*s",
- (int)(sizeof(user_input_buffer) - 1), temp);
- FREE(temp);
- if ((no_file_url || no_goto_file) &&
- !strncmp(user_input_buffer,"file:",5)) {
- HTUserMsg(GOTO_FILE_DISALLOWED);
-
- } else if ((no_shell || no_goto_lynxexec
-#ifdef EXEC_LINKS
- || local_exec_on_local_files
-#endif /* EXEC_LINKS */
- ) &&
- !strncmp(user_input_buffer, "lynxexec:",9)) {
- HTUserMsg(GOTO_EXEC_DISALLOWED);
-
- } else if ((no_shell || no_goto_lynxprog
-#ifdef EXEC_LINKS
- || local_exec_on_local_files
-#endif /* EXEC_LINKS */
- ) &&
- !strncmp(user_input_buffer, "lynxprog:",9)) {
- HTUserMsg(GOTO_PROG_DISALLOWED);
-
- } else if ((no_shell || no_goto_lynxcgi) &&
- !strncmp(user_input_buffer, "lynxcgi:", 8)) {
- HTUserMsg(GOTO_CGI_DISALLOWED);
-
- } else if (LYValidate &&
- strncmp(user_input_buffer, "http:", 5) &&
- strncmp(user_input_buffer, "https:", 6)) {
- HTUserMsg(GOTO_NON_HTTP_DISALLOWED);
-
- } else if (no_goto_cso &&
- !strncmp(user_input_buffer, "cso:", 4)) {
- HTUserMsg(GOTO_CSO_DISALLOWED);
-
- } else if (no_goto_finger &&
- !strncmp(user_input_buffer, "finger:", 7)) {
- HTUserMsg(GOTO_FINGER_DISALLOWED);
-
- } else if (no_goto_ftp &&
- !strncmp(user_input_buffer, "ftp:", 4)) {
- HTUserMsg(GOTO_FTP_DISALLOWED);
-
- } else if (no_goto_gopher &&
- !strncmp(user_input_buffer, "gopher:", 7)) {
- HTUserMsg(GOTO_GOPHER_DISALLOWED);
-
- } else if (no_goto_http &&
- !strncmp(user_input_buffer, "http:", 5)) {
- HTUserMsg(GOTO_HTTP_DISALLOWED);
-
- } else if (no_goto_https &&
- !strncmp(user_input_buffer, "https:", 6)) {
- HTUserMsg(GOTO_HTTPS_DISALLOWED);
-
- } else if (no_goto_mailto &&
- !strncmp(user_input_buffer, "mailto:", 7)) {
- HTUserMsg(GOTO_MAILTO_DISALLOWED);
-
-#ifndef DISABLE_NEWS
- } else if (no_goto_news &&
- !strncmp(user_input_buffer, "news:", 5)) {
- HTUserMsg(GOTO_NEWS_DISALLOWED);
-
- } else if (no_goto_nntp &&
- !strncmp(user_input_buffer, "nntp:", 5)) {
- HTUserMsg(GOTO_NNTP_DISALLOWED);
-#endif
-
- } else if (no_goto_rlogin &&
- !strncmp(user_input_buffer, "rlogin:", 7)) {
- HTUserMsg(GOTO_RLOGIN_DISALLOWED);
-
-#ifndef DISABLE_NEWS
- } else if (no_goto_snews &&
- !strncmp(user_input_buffer, "snews:", 6)) {
- HTUserMsg(GOTO_SNEWS_DISALLOWED);
-#endif
-
- } else if (no_goto_telnet &&
- !strncmp(user_input_buffer, "telnet:", 7)) {
- HTUserMsg(GOTO_TELNET_DISALLOWED);
-
- } else if (no_goto_tn3270 &&
- !strncmp(user_input_buffer, "tn3270:", 7)) {
- HTUserMsg(GOTO_TN3270_DISALLOWED);
-
- } else if (no_goto_wais &&
- !strncmp(user_input_buffer, "wais:", 5)) {
- HTUserMsg(GOTO_WAIS_DISALLOWED);
-
- } else if (!strncmp(user_input_buffer, "LYNXCOOKIE:", 11) ||
- !strncmp(user_input_buffer, "LYNXDIRED:", 10) ||
- !strncmp(user_input_buffer, "LYNXDOWNLOAD:", 13) ||
- !strncmp(user_input_buffer, "LYNXOPTIONS:", 12) ||
- !strncmp(user_input_buffer, "LYNXCFG:", 8) ||
- !strncmp(user_input_buffer, "LYNXCOMPILEOPTS:", 16) ||
- !strncmp(user_input_buffer, "LYNXPRINT:", 10)) {
- HTUserMsg(GOTO_SPECIAL_DISALLOWED);
-
- } else {
- StrAllocCopy(newdoc.address, user_input_buffer);
- newdoc.isHEAD = FALSE;
- /*
- * Might be an anchor in the same doc from a POST
- * form. If so, dont't free the content. -- FM
- */
- if (are_different(&curdoc, &newdoc)) {
- /*
- * Make a name for this new URL.
- */
- StrAllocCopy(newdoc.title, gettext("A URL specified by the user"));
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- force_load = TRUE;
-#ifdef DIRED_SUPPORT
- if (lynx_edit_mode)
- HTuncache_current_document();
-#endif /* DIRED_SUPPORT */
- }
- LYUserSpecifiedURL = TRUE;
- HTAddGotoURL(newdoc.address);
- }
+ case LYK_ECGOTO: /* edit current URL and go to to it */
+ if (handle_LYK_ECGOTO(&ch, user_input_buffer, &temp, &old_c, real_c))
+ do_check_goto_URL(user_input_buffer, &temp, &force_load);
break;
- case LYK_HELP: /* show help file */
- if (!STREQ(curdoc.address, helpfile)) {
- /*
- * Set the filename.
- */
- StrAllocCopy(newdoc.address, helpfile);
- /*
- * Make a name for this help file.
- */
- StrAllocCopy(newdoc.title, gettext("Help Screen"));
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
+ case LYK_GOTO: /* 'g' to goto a random URL */
+ if (handle_LYK_GOTO(&ch, user_input_buffer, &temp, &recall,
+ &URLTotal, &URLNum, &FirstURLRecall, &old_c,
+ real_c)) {
+ if (do_check_recall (ch, user_input_buffer, &temp, URLTotal,
+ &URLNum, recall, &FirstURLRecall))
+ do_check_goto_URL(user_input_buffer, &temp, &force_load);
}
break;
- case LYK_INDEX: /* index file */
- /*
- * Make sure we are not in the index already.
- */
- if (!STREQ(curdoc.address, indexfile)) {
+ case LYK_DWIMHELP: /* show context-dependent help file */
+ handle_LYK_DWIMHELP(&cshelpfile);
+ /* FALLTHRU */
- if (indexfile[0]=='\0') { /* no defined index */
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_INDEX_FILE);
- }
+ case LYK_HELP: /* show help file */
+ handle_LYK_HELP(&cshelpfile);
+ break;
- } else {
- StrAllocCopy(newdoc.address, indexfile);
- StrAllocCopy(newdoc.title, gettext("System Index")); /* name it */
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- } /* end else */
- } /* end if */
+ case LYK_INDEX: /* index file */
+ handle_LYK_INDEX(&old_c, real_c);
break;
case LYK_MAIN_MENU: /* return to main screen */
- /*
- * If its already the homepage then don't reload it.
- */
- if (!STREQ(curdoc.address,homepage)) {
-
- if (HTConfirmDefault(CONFIRM_MAIN_SCREEN, NO) == YES) {
- StrAllocCopy(newdoc.address, homepage);
- StrAllocCopy(newdoc.title, gettext("Entry into main screen"));
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- highlight(OFF, curdoc.link, prev_target);
-#ifdef DIRED_SUPPORT
- if (lynx_edit_mode)
- HTuncache_current_document();
-#endif /* DIRED_SUPPORT */
- }
- } else {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(IN_MAIN_SCREEN);
- }
- }
+ handle_LYK_MAIN_MENU(&old_c, real_c);
break;
- case LYK_OPTIONS: /* options screen */
-#ifdef DIRED_SUPPORT
- c = dir_list_style;
-#endif /* DIRED_SUPPORT */
-#ifndef NO_OPTION_MENU
-if (!LYUseFormsOptions) {
- BOOLEAN LYUseDefaultRawMode_flag = LYUseDefaultRawMode;
- BOOLEAN LYSelectPopups_flag = LYSelectPopups;
- BOOLEAN verbose_img_flag = verbose_img;
- BOOLEAN keypad_mode_flag = keypad_mode;
- BOOLEAN show_dotfiles_flag = show_dotfiles;
- BOOLEAN user_mode_flag = user_mode;
- int CurrentAssumeCharSet_flag = UCLYhndl_for_unspec;
- int CurrentCharSet_flag = current_char_set;
- int HTfileSortMethod_flag = HTfileSortMethod;
- char *CurrentUserAgent = NULL;
- char *CurrentNegoLanguage = NULL;
- char *CurrentNegoCharset = NULL;
- StrAllocCopy(CurrentUserAgent, (LYUserAgent ?
- LYUserAgent : ""));
- StrAllocCopy(CurrentNegoLanguage, (language ?
- language : ""));
- StrAllocCopy(CurrentNegoCharset, (pref_charset ?
- pref_charset : ""));
-
- LYoptions(); /** do the old-style options stuff **/
-
- if (keypad_mode_flag != keypad_mode ||
- (user_mode_flag != user_mode &&
- (user_mode_flag == NOVICE_MODE ||
- user_mode == NOVICE_MODE)) ||
- (((HTfileSortMethod_flag != HTfileSortMethod) ||
-#ifdef DIRED_SUPPORT
- (c != dir_list_style) ||
-#endif /* DIRED_SUPPORT */
- (show_dotfiles_flag != show_dotfiles)) &&
- (!strncmp(curdoc.address, "file:", 5) ||
- !strncmp(curdoc.address, "ftp:", 4))) ||
- CurrentCharSet_flag != current_char_set ||
- CurrentAssumeCharSet_flag != UCLYhndl_for_unspec ||
- verbose_img_flag != verbose_img ||
- LYUseDefaultRawMode_flag != LYUseDefaultRawMode ||
- LYSelectPopups_flag != LYSelectPopups ||
- ((strcmp(CurrentUserAgent, (LYUserAgent ?
- LYUserAgent : "")) ||
- strcmp(CurrentNegoLanguage, (language ?
- language : "")) ||
- strcmp(CurrentNegoCharset, (pref_charset ?
- pref_charset : ""))) &&
- (!strncmp(curdoc.address, "http", 4) ||
- !strncmp(curdoc.address, "lynxcgi:", 8)))) {
- /*
- * Check if this is a reply from a POST, and if so,
- * seek confirmation of reload if the safe element
- * is not set. - FM
- */
- if ((curdoc.post_data != NULL &&
- curdoc.safe != TRUE) &&
- confirm_post_resub(curdoc.address, curdoc.title,
- 2, 1) == FALSE) {
- HTInfoMsg(WILL_NOT_RELOAD_DOC);
- } else {
- StrAllocCopy(newdoc.address, curdoc.address);
- if (((strcmp(CurrentUserAgent, (LYUserAgent ?
- LYUserAgent : "")) ||
- strcmp(CurrentNegoLanguage,
- (language ? language : "")) ||
- strcmp(CurrentNegoCharset,
- (pref_charset ? pref_charset : ""))) &&
- (strncmp(curdoc.address, "http", 4) == 0 ||
- strncmp(curdoc.address, "lynxcgi:", 8) == 0))) {
- /*
- * An option has changed which may influence
- * content negotiation, and the resource is from
- * a http or https or lynxcgi URL (the only protocols
- * which currently do anything with this information).
- * Set reloading = TRUE so that proxy caches will be
- * flushed, which is necessary until the time when
- * all proxies understand HTTP 1.1 Vary: and all
- * Servers properly use it... Treat like
- * case LYK_RELOAD (see comments there). - KW
- */
- reloading = TRUE;
- }
- if (HTisDocumentSource()) {
-#ifndef USE_PSRC
- HTOutputFormat = WWW_SOURCE;
-#else
- if (LYpsrc)
- psrc_view = TRUE;
- else
- HTOutputFormat = WWW_SOURCE;
-#endif
- }
-#ifdef SOURCE_CACHE
- if (reloading == FALSE) {
- /* one more attempt to be smart enough: */
- if (HTreparse_document()) {
- FREE(CurrentUserAgent);
- FREE(CurrentNegoLanguage);
- FREE(CurrentNegoCharset);
- break;
- }
- }
-#endif
- HEAD_request = HTLoadedDocumentIsHEAD();
- HTuncache_current_document();
-#ifdef NO_ASSUME_SAME_DOC
- newdoc.line = 1;
- newdoc.link = 0;
-#else
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link;
-#endif /* NO_ASSUME_SAME_DOC */
- LYforce_no_cache = TRUE;
- FREE(curdoc.address); /* So it doesn't get pushed. */
- }
- }
- FREE(CurrentUserAgent);
- FREE(CurrentNegoLanguage);
- FREE(CurrentNegoCharset);
- refresh_screen = TRUE; /* to repaint screen */
+#ifdef EXP_NESTED_TABLES
+ case LYK_NESTED_TABLES:
+ if (handle_LYK_NESTED_TABLES(&cmd))
+ goto new_cmd;
break;
-} /* end if !LYUseFormsOptions */
-#endif /* !NO_OPTION_MENU */
-#ifndef NO_OPTION_FORMS
- /*
- * Generally stolen from LYK_COOKIE_JAR. Options menu handling is
- * done in postoptions(), called from getfile() currently.
- *
- * postoptions() is also responsible for reloading the document
- * before the 'options menu' but only when (a few) important
- * options were changed.
- *
- * It is critical that post_data is freed here since the
- * submission of changed options is done via the same protocol as
- * LYNXOPTIONS:
- */
- /*
- * Don't do if already viewing options page.
- */
- if (strcmp((curdoc.title ? curdoc.title : ""), OPTIONS_TITLE)) {
-
- StrAllocCopy(newdoc.address, "LYNXOPTIONS:/");
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- LYforce_no_cache = TRUE;
- if (LYValidate || check_realm) {
- LYPermitURL = TRUE;
- }
- } else {
- /*
- * If already in the options menu, get out.
- */
- cmd = LYK_PREV_DOC;
+#endif
+ case LYK_OPTIONS: /* options screen */
+ if (handle_LYK_OPTIONS(&cmd, &refresh_screen))
goto new_cmd;
- }
-#endif /* !NO_OPTION_FORMS */
break;
- case LYK_INDEX_SEARCH: /* search for a user string */
- if (is_www_index) {
- /*
- * Perform a database search.
- *
- * do_www_search will try to go out and get the document.
- * If it returns TRUE, a new document was returned and is
- * named in the newdoc.address.
- */
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- if (do_www_search(&newdoc) == NORMAL) {
- /*
- * Yah, the search succeeded.
- */
- if (TRACE && !LYUseTraceLog && LYCursesON) {
- /*
- * Make sure cursor is down.
- */
- move(LYlines-1, LYcols-1);
-#ifdef USE_SLANG
- addstr("\n");
-#endif /* USE_SLANG */
- refresh();
- }
- LYpush(&curdoc, ForcePush);
- /*
- * Make the curdoc.address the newdoc.address so that
- * getfile doesn't try to get the newdoc.address.
- * Since we have already gotten it.
- */
- StrAllocCopy(curdoc.address, newdoc.address);
- StrAllocCopy(newdoc.post_data, curdoc.post_data);
- newdoc.internal_link = FALSE;
- curdoc.line = -1;
- Newline = 0;
- refresh_screen = TRUE; /* redisplay it */
- } else if (use_this_url_instead != NULL) {
- /*
- * Got back a redirecting URL. Check it out.
- */
- _user_message("Using %s", use_this_url_instead);
- /*
- * Make a name for this URL.
- */
- StrAllocCopy(newdoc.title,
- "A URL specified by redirection");
- StrAllocCopy(newdoc.address, use_this_url_instead);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- FREE(use_this_url_instead);
- force_load = TRUE;
- break;
- } else {
- /*
- * Yuk, the search failed. Restore the old file.
- */
- StrAllocCopy(newdoc.address, curdoc.address);
- StrAllocCopy(newdoc.post_data, curdoc.post_data);
- StrAllocCopy(newdoc.post_content_type,
- curdoc.post_content_type);
- StrAllocCopy(newdoc.bookmark, curdoc.bookmark);
- newdoc.isHEAD = curdoc.isHEAD;
- newdoc.safe = curdoc.safe;
- newdoc.internal_link = curdoc.internal_link;
- }
- } else if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NOT_ISINDEX);
- }
+ case LYK_INDEX_SEARCH: /* search for a user string */
+ handle_LYK_INDEX_SEARCH(&force_load, ForcePush, &old_c, real_c);
break;
- case LYK_WHEREIS: /* search within the document */
- case LYK_NEXT: /* search for the next occurrence in the document */
- /* user search */
- {
- BOOLEAN have_target_onscreen = (*prev_target != '\0' &&
- HText_pageHasPrevTarget());
- BOOL found;
- int oldcur = curdoc.link; /* temporarily remember */
- char *remember_old_target = NULL;
- if (have_target_onscreen)
- StrAllocCopy(remember_old_target, prev_target);
- else
- StrAllocCopy(remember_old_target, "");
-
- if (cmd != LYK_NEXT) {
- /*
- * Reset prev_target to force prompting
- * for a new search string and to turn
- * off highlighting in no search string
- * is entered by the user.
- */
- *prev_target = '\0';
- found = textsearch(&curdoc, prev_target, FALSE);
- } else {
- /*
- * When the third argument is TRUE, the previous
- * search string, if any, will be recalled from
- * a buffer, loaded into prev_target, and used
- * for the search without prompting for a new
- * search string. This allows the LYK_NEXT
- * command to repeat a search in a new document,
- * after prev_target was reset on fetch of that
- * document.
- */
- found = textsearch(&curdoc, prev_target, TRUE);
- }
-
- /*
- * Force a redraw to ensure highlighting of hits
- * even when found on the same page, or clearing
- * of highlighting is the default search string
- * was erased without replacement. - FM
- */
- /*
- ** Well let's try to avoid it at least in a few cases
- ** where it is not needed. - kw
- */
- if (www_search_result >= 0 && www_search_result != curdoc.line) {
- refresh_screen = TRUE; /* doesn't really matter */
- } else if (!found) {
- refresh_screen = have_target_onscreen;
- } else if (!have_target_onscreen && found) {
- refresh_screen = TRUE;
- } else if (www_search_result == curdoc.line &&
- curdoc.link == oldcur &&
- curdoc.link >= 0 && nlinks > 0 &&
- links[curdoc.link].ly >= (display_lines/3)) {
- refresh_screen = TRUE;
- } else if ((case_sensitive && 0!=strcmp(prev_target,
- remember_old_target)) ||
- (!case_sensitive && 0!=strcasecomp8(prev_target,
- remember_old_target))) {
- refresh_screen = TRUE;
- }
- FREE(remember_old_target);
- }
+ case LYK_WHEREIS: /* search within the document */
+ case LYK_NEXT: /* find the next occurrence in the document */
+ case LYK_PREV: /* find the previous occurrence in the document */
+ handle_LYK_WHEREIS(cmd, &refresh_screen);
break;
- case LYK_COMMENT: /* reply by mail */
- if (!owner_address &&
- strncasecomp(curdoc.address, "http", 4)) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_OWNER);
- }
- } else if (no_mail) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(MAIL_DISALLOWED);
- }
- } else {
- if (HTConfirmDefault(CONFIRM_COMMENT, NO)) {
- if (!owner_address) {
- /*
- * No owner defined, so make a guess and
- * and offer it to the user. - FM
- */
- char *address = NULL;
- temp = HTParse(curdoc.address, "", PARSE_PATH);
-
- if (temp != NULL) {
- HTUnEscape(temp);
- if (*temp == '~' && strlen(temp) > 1) {
- /*
- * It's a ~user URL so guess user@host. - FM
- */
- if ((cp = strchr((temp+1), '/')) != NULL)
- *cp = '\0';
- StrAllocCopy(address, "mailto:");
- StrAllocCat(address, (temp+1));
- StrAllocCat(address, "@");
- }
- FREE(temp);
- }
- if (address == NULL)
- /*
- * Wasn't a ~user URL so guess WebMaster@host. - FM
- */
- StrAllocCopy(address, "mailto:WebMaster@");
- temp = HTParse(curdoc.address, "", PARSE_HOST);
- StrAllocCat(address, temp);
- HTSprintf0(&temp, NO_OWNER_USE, address);
- c = HTConfirmDefault(temp, NO);
- FREE(temp);
- if (c == YES) {
- StrAllocCopy(owner_address, address);
- FREE(address);
- } else {
- FREE(address);
- break;
- }
- }
- if (is_url(owner_address) != MAILTO_URL_TYPE) {
- /*
- * The address is a URL. Just follow the link.
- */
- StrAllocCopy(newdoc.address, owner_address);
- newdoc.internal_link = FALSE;
- } else {
- /*
- * The owner_address is a mailto: URL.
- */
- CONST char *kp = HText_getRevTitle();
- CONST char *id = HText_getMessageID();
- char *tmptitle = NULL;
- if (!kp && HTMainAnchor) {
- kp = HTAnchor_subject(HTMainAnchor);
- if (kp && *kp) {
- if (strncasecomp(kp, "Re: ", 4)) {
- StrAllocCopy(tmptitle, "Re: ");
- StrAllocCat(tmptitle, kp);
- kp = tmptitle;
- }
- }
- }
-
- if (strchr(owner_address,':')!=NULL)
- /*
- * Send a reply. The address is after the colon.
- */
- reply_by_mail(strchr(owner_address,':')+1,
- curdoc.address,
- (kp ? kp : ""), id);
- else
- reply_by_mail(owner_address, curdoc.address,
- (kp ? kp : ""), id);
-
- FREE(tmptitle);
- refresh_screen = TRUE; /* to force a showpage */
- }
- }
- }
+ case LYK_COMMENT: /* reply by mail */
+ handle_LYK_COMMENT(&refresh_screen, &owner_address, &old_c, real_c);
break;
#ifdef DIRED_SUPPORT
case LYK_TAG_LINK: /* tag or untag the current link */
- if (lynx_edit_mode && nlinks > 0 && !no_dired_support) {
- if (!strcmp(links[curdoc.link].hightext, ".."))
- break; /* Never tag the parent directory */
- if (dir_list_style == MIXED_STYLE) {
- if (!strcmp(links[curdoc.link].hightext, "../"))
- break;
- } else if (!strncmp(links[curdoc.link].hightext, "Up to ", 6))
- break;
- {
- /*
- * HTList-based management of tag list, see LYLocal.c - KW
- */
- HTList * t1 = tagged;
- char * tagname = NULL;
- BOOLEAN found = FALSE;
-
- while ((tagname = (char *)HTList_nextObject(t1)) != NULL) {
- if (!strcmp(links[curdoc.link].lname, tagname)) {
- found = TRUE;
- HTList_removeObject(tagged, tagname);
- FREE(tagname);
- tagflag(OFF,curdoc.link);
- break;
- }
- }
- if (!found) {
- if (tagged == NULL)
- tagged = HTList_new();
- tagname = NULL;
- StrAllocCopy(tagname,links[curdoc.link].lname);
- HTList_addObject(tagged,tagname);
- tagflag(ON,curdoc.link);
- }
- }
- if (curdoc.link < nlinks-1) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link++;
- } else if (!more && Newline == 1 && curdoc.link == nlinks-1) {
- highlight(OFF, curdoc.link, prev_target);
- curdoc.link = 0;
- } else if (more) { /* next page */
- Newline += (display_lines);
- }
- }
+ handle_LYK_TAG_LINK();
break;
- case LYK_MODIFY: /* rename a file or directory */
- if (lynx_edit_mode && nlinks > 0 && !no_dired_support) {
- int ret;
-
- ret = local_modify(&curdoc, &newdoc.address);
- if (ret == PERMIT_FORM_RESULT) { /* Permit form thrown up */
- refresh_screen = TRUE;
- } else if (ret) {
- HTuncache_current_document();
- StrAllocCopy(newdoc.address, curdoc.address);
- FREE(curdoc.address);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link;
- clear();
- }
- }
+ case LYK_MODIFY: /* rename a file or directory */
+ handle_LYK_MODIFY(&refresh_screen);
break;
- case LYK_CREATE: /* create a new file or directory */
- if (lynx_edit_mode && !no_dired_support) {
- if (local_create(&curdoc)) {
- HTuncache_current_document();
- StrAllocCopy(newdoc.address, curdoc.address);
- FREE(curdoc.address);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link > -1 ? curdoc.link : 0;
- clear();
- }
- }
+ case LYK_CREATE: /* create a new file or directory */
+ handle_LYK_CREATE();
break;
#endif /* DIRED_SUPPORT */
- case LYK_EDIT: /* edit */
- if (no_editor) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(EDIT_DISABLED);
- }
- break;
- }
-#ifdef AUTOEXTEDIT
- /*
- * If we're in a forms TEXTAREA, invoke the editor on *its*
- * contents, rather than attempting to edit the html source
- * document. KED
- */
- if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
- cmd = LYK_EDIT_TEXTAREA;
+ case LYK_DWIMEDIT: /* context-dependent edit */
+ switch (handle_LYK_DWIMEDIT(&cmd, &old_c, real_c)) {
+ case 1:
+ continue;
+ case 2:
goto new_cmd;
}
+ /* FALLTHRU */
- /*
- * If we're in a forms TEXT type, tell user the request
- * is bogus (though in reality, without this trap, if the
- * document with the TEXT field is local, the editor *would*
- * be invoked on the source .html file; eg, the o(ptions)
- * form tempfile).
- *
- * [This is done to avoid possible user confusion, due to
- * auto invocation of the editor on the TEXTAREA's contents
- * via the above if() statement.]
- */
- if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type == F_TEXT_TYPE) {
- HTUserMsg (CANNOT_EDIT_FIELD);
- break;
- }
-#endif /* AUTOEXTEDIT */
-
-#ifdef DIRED_SUPPORT
- /*
- * Allow the user to edit the link rather
- * than curdoc in edit mode.
- */
- if (lynx_edit_mode &&
- editor && *editor != '\0' && !no_dired_support) {
- if (nlinks > 0) {
- cp = links[curdoc.link].lname;
- if (is_url(cp) == FILE_URL_TYPE) {
- cp = HTfullURL_toFile(cp);
- StrAllocCopy(tp, cp);
- FREE(cp);
-
- if (stat(tp, &dir_info) == -1) {
- HTAlert(NO_STATUS);
- } else {
- if (S_ISREG(dir_info.st_mode)) {
- StrAllocCopy(tp, links[curdoc.link].lname);
- HTUnEscapeSome(tp, "/");
- if (edit_current_file(tp,
- curdoc.link, Newline)) {
- HTuncache_current_document();
- StrAllocCopy(newdoc.address,
- curdoc.address);
- FREE(curdoc.address);
-#ifdef NO_SEEK_OLD_POSITION
- /*
- * Go to top of file.
- */
- newdoc.line = 1;
- newdoc.link = 0;
-#else
- /*
- * Seek old position,
- * which probably changed.
- */
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link;
-#endif /* NO_SEEK_OLD_POSITION */
- clear(); /* clear the screen */
- }
- }
- }
- FREE(tp);
- }
- }
- } else
-#endif /* DIRED_SUPPORT */
- if (editor && *editor != '\0') {
- if (edit_current_file(newdoc.address, curdoc.link, Newline)) {
- HTuncache_current_document();
- LYforce_no_cache = TRUE; /*force reload of document */
- FREE(curdoc.address); /* so it doesn't get pushed */
-#ifdef NO_SEEK_OLD_POSITION
- /*
- * Go to top of file.
- */
- newdoc.line = 1;
- newdoc.link = 0;
-#else
- /*
- * Seek old position, which probably changed.
- */
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link;
-#endif /* NO_SEEK_OLD_POSITION */
- clear(); /* clear the screen */
- }
-
- } else {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_EDITOR);
- }
- }
+ case LYK_EDIT: /* edit */
+ handle_LYK_EDIT(&old_c, real_c);
break;
case LYK_DEL_BOOKMARK: /* remove a bookmark file link */
-#ifdef DIRED_SUPPORT
- case LYK_REMOVE: /* remove files and directories */
- c = NO;
- if (lynx_edit_mode && nlinks > 0 && !no_dired_support) {
- local_remove(&curdoc);
- c = YES;
- } else
-#endif /* DIRED_SUPPORT */
- if (curdoc.bookmark != NULL) {
- if ((c = HTConfirmDefault(CONFIRM_BOOKMARK_DELETE,NO)) != YES)
- break;
- remove_bookmark_link(links[curdoc.link].anchor_number-1,
- curdoc.bookmark);
- } else { /* behave like REFRESH for backward compatibility */
- refresh_screen = TRUE;
- if (old_c != real_c) {
- old_c = real_c;
- lynx_force_repaint();
- }
- break;
- }
- if (c == YES) {
- HTuncache_current_document();
- StrAllocCopy(newdoc.address, curdoc.address);
- FREE(curdoc.address);
- newdoc.line = curdoc.line;
- if (curdoc.link == nlinks-1) {
- /*
- * We deleted the last link on the page. - FM
- */
- newdoc.link = curdoc.link-1;
- } else {
- newdoc.link = curdoc.link;
- }
- }
+ handle_LYK_DEL_BOOKMARK(&refresh_screen, &old_c, real_c);
break;
#ifdef DIRED_SUPPORT
- case LYK_INSTALL: /* install a file into system area */
- if (lynx_edit_mode && nlinks > 0 && !no_dired_support)
- local_install(NULL, links[curdoc.link].lname, &newdoc.address);
+ case LYK_REMOVE: /* remove files and directories */
+ handle_LYK_REMOVE(&refresh_screen);
break;
#endif /* DIRED_SUPPORT */
- case LYK_INFO: /* show document info */
- /*
- * Don't do if already viewing info page.
- */
- if (strcmp((curdoc.title ? curdoc.title : ""),
- SHOWINFO_TITLE)) {
- if (showinfo(&curdoc, HText_getNumOfLines(),
- &newdoc, owner_address) < 0)
- break;
- StrAllocCopy(newdoc.title, SHOWINFO_TITLE);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- LYforce_no_cache = TRUE;
- if (LYValidate || check_realm)
- LYPermitURL = TRUE;
- } else {
- /*
- * If already in info page, get out.
- */
- cmd = LYK_PREV_DOC;
+#if defined(DIRED_SUPPORT) && defined(OK_INSTALL)
+ case LYK_INSTALL: /* install a file into system area */
+ handle_LYK_INSTALL();
+ break;
+#endif /* DIRED_SUPPORT && OK_INSTALL */
+
+ case LYK_INFO: /* show document info */
+ if (handle_LYK_INFO(&cmd))
goto new_cmd;
- }
break;
case LYK_EDIT_TEXTAREA: /* use external editor on a TEXTAREA - KED */
- if (no_editor) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(EDIT_DISABLED);
- }
- break;
- }
-
- /*
- * See if the current link is in a form TEXTAREA.
- */
- if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
-
- /* stop screen */
- stop_curses();
-
- n = HText_ExtEditForm (&links[curdoc.link]);
-
- /*
- * TODO: Move cursor "n" lines from the current line to
- * position it on the 1st trailing blank line in
- * the now edited TEXTAREA. If the target line/
- * anchor requires us to scroll up/down, position
- * the target in the approximate center of the
- * screen.
- */
-
- /* curdoc.link += n;*/ /* works, except for page crossing, */
- /* damnit; why is nothing ever easy */
-
- /* start screen */
- start_curses();
- refresh_screen = TRUE;
-
- } else {
-
- HTInfoMsg (NOT_IN_TEXTAREA);
- }
+ handle_LYK_EDIT_TEXTAREA(&refresh_screen, &old_c, real_c);
break;
- case LYK_GROW_TEXTAREA: /* add new lines to bottom of TEXTAREA - KED */
- /*
- * See if the current link is in a form TEXTAREA.
- */
- if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
-
- HText_ExpandTextarea (&links[curdoc.link], TEXTAREA_EXPAND_SIZE);
-
- refresh_screen = TRUE;
-
- } else {
-
- HTInfoMsg (NOT_IN_TEXTAREA);
- }
+ case LYK_GROW_TEXTAREA: /* add new lines to bottom of TEXTAREA - KED */
+ handle_LYK_GROW_TEXTAREA(&refresh_screen);
break;
- case LYK_INSERT_FILE: /* insert file in TEXTAREA, above cursor - KED */
- /*
- * See if the current link is in a form TEXTAREA.
- */
- if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->type == F_TEXTAREA_TYPE) {
-
- n = HText_InsertFile (&links[curdoc.link]);
-
- /*
- * TODO: Move cursor "n" lines from the current line to
- * position it on the 1st line following the text
- * that was inserted. If the target line/anchor
- * requires us to scroll up/down, position the
- * target in the approximate center of the screen.
- *
- * [Current behavior leaves cursor on the same line relative
- * to the start of the TEXTAREA that it was on before the
- * insertion. This is the same behavior that occurs with
- * (my) editor, so this TODO will stay unimplemented.]
- */
-
- refresh_screen = TRUE;
-
- } else {
-
- HTInfoMsg (NOT_IN_TEXTAREA);
- }
+ case LYK_INSERT_FILE: /* insert file in TEXTAREA, above cursor - KED */
+ handle_LYK_INSERT_FILE(&refresh_screen, &old_c, real_c);
break;
- case LYK_PRINT: /* print the file */
- if (LYValidate) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(PRINT_DISABLED);
- }
- break;
- }
-
- /*
- * Don't do if already viewing print options page.
- */
- if (strcmp((curdoc.title ? curdoc.title : ""),
- PRINT_OPTIONS_TITLE)) {
-
- if (print_options(&newdoc.address,
- &curdoc.address, HText_getNumOfLines()) < 0)
- break;
- StrAllocCopy(newdoc.title, PRINT_OPTIONS_TITLE);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- ForcePush = TRUE; /* see LYpush() and print_options() */
- if (check_realm)
- LYPermitURL = TRUE;
- refresh_screen = TRUE; /* redisplay */
- }
+ case LYK_PRINT: /* print the file */
+ handle_LYK_PRINT(&ForcePush, &old_c, real_c);
break;
- case LYK_LIST: /* list links in the current document */
- /*
- * Don't do if already viewing list page.
- */
- if (!strcmp((curdoc.title ? curdoc.title : ""),
- LIST_PAGE_TITLE)) {
- /*
- * Already viewing list page, so get out.
- */
- cmd = LYK_PREV_DOC;
+ case LYK_LIST: /* list links in the current document */
+ if (handle_LYK_LIST(&cmd))
goto new_cmd;
- }
-
- /*
- * Print list page to file.
- */
- if (showlist(&newdoc, TRUE) < 0)
- break;
- StrAllocCopy(newdoc.title, LIST_PAGE_TITLE);
- /*
- * showlist will set newdoc's other fields. It may leave
- * post_data intact so the list can be used to follow
- * internal links in the current document even if it is
- * a POST response. - kw
- */
-
- refresh_screen = TRUE; /* redisplay */
- if (LYValidate || check_realm) {
- LYPermitURL = TRUE;
- StrAllocCopy(lynxlistfile, newdoc.address);
- }
break;
#ifdef EXP_ADDRLIST_PAGE
- case LYK_ADDRLIST: /* always list URL's (only) */
- /*
- * Don't do if already viewing list addresses page.
- */
- if (!strcmp((curdoc.title ? curdoc.title : ""),
- ADDRLIST_PAGE_TITLE)) {
- /*
- * Already viewing list page, so get out.
- */
- cmd = LYK_PREV_DOC;
+ case LYK_ADDRLIST: /* always list URL's (only) */
+ if (handle_LYK_ADDRLIST(&cmd))
goto new_cmd;
- }
-
- /*
- * Print address list page to file.
- */
- if (showlist(&newdoc, FALSE) < 0)
- break;
- StrAllocCopy(newdoc.title, ADDRLIST_PAGE_TITLE);
- /*
- * showlist will set newdoc's other fields. It may leave
- * post_data intact so the list can be used to follow
- * internal links in the current document even if it is
- * a POST response. - kw
- */
-
- refresh_screen = TRUE; /* redisplay */
- if (LYValidate || check_realm) {
- LYPermitURL = TRUE;
- StrAllocCopy(lynxlistfile, newdoc.address);
- }
break;
#endif /* EXP_ADDRLIST_PAGE */
case LYK_VLINKS: /* list links visited during the current session */
- if (!strcmp((curdoc.title ? curdoc.title : ""),
- VISITED_LINKS_TITLE)) {
- /*
- * Already viewing visited links page, so get out.
- */
- cmd = LYK_PREV_DOC;
+ if (handle_LYK_VLINKS(&cmd, &newdoc_link_is_absolute))
goto new_cmd;
- }
-
- /*
- * Print visited links page to file.
- */
- if (LYShowVisitedLinks(&newdoc.address) < 0) {
- HTUserMsg(VISITED_LINKS_EMPTY);
- break;
- }
- StrAllocCopy(newdoc.title, VISITED_LINKS_TITLE);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- refresh_screen = TRUE;
- if (LYValidate || check_realm) {
- LYPermitURL = TRUE;
- StrAllocCopy(lynxlinksfile, newdoc.address);
- }
break;
case LYK_TOOLBAR: /* go to Toolbar or Banner in current document */
- if (!HText_hasToolbar(HTMainText)) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_TOOLBAR);
- }
- } else if (old_c != real_c) {
- old_c = real_c;
- if ((cp = strchr(curdoc.address, '#')) != NULL)
- *cp = '\0';
- toolbar = (char *)malloc(strlen(curdoc.address) +
- strlen(LYToolbarName) + 2);
- if (!toolbar)
- outofmem(__FILE__, "mainloop");
-
- sprintf(toolbar, "%s#%s", curdoc.address, LYToolbarName);
- if (cp)
- *cp = '#';
- StrAllocCopy(newdoc.address, toolbar);
- FREE(toolbar);
- try_internal = TRUE;
- force_load = TRUE; /* force MainLoop to reload */
- }
+ handle_LYK_TOOLBAR(&try_internal, &force_load, &old_c, real_c);
break;
#if defined(DIRED_SUPPORT) || defined(VMS)
case LYK_DIRED_MENU: /* provide full file management menu */
-#ifdef VMS
- /*
- * Check if the CSwing Directory/File Manager is available.
- * Will be disabled if LYCSwingPath is NULL, zero-length,
- * or "none" (case insensitive), if no_file_url was set via
- * the file_url restriction, if no_goto_file was set for
- * the anonymous account, or if HTDirAccess was set to
- * HT_DIR_FORBID or HT_DIR_SELECTIVE via the -nobrowse
- * or -selective switches. - FM
- */
- if (!(LYCSwingPath && *LYCSwingPath) ||
- !strcasecomp(LYCSwingPath, "none") ||
- no_file_url || no_goto_file ||
- HTDirAccess == HT_DIR_FORBID ||
- HTDirAccess == HT_DIR_SELECTIVE) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(DFM_NOT_AVAILABLE);
- }
- break;
- }
-
- /*
- * If we are viewing a local directory listing or a
- * local file which is not temporary, invoke CSwing
- * with the URL's directory converted to VMS path specs
- * and passed as the argument, so we start up CSwing
- * positioned on that node of the directory tree.
- * Otherwise, pass the current default directory as
- * the argument. - FM
- */
- if (LYisLocalFile(curdoc.address) &&
- strncasecomp(curdoc.address,
- lynx_temp_space, strlen(lynx_temp_space))) {
- /*
- * We are viewing a local directory or a local file
- * which is not temporary. - FM
- */
- struct stat stat_info;
-
- cp = HTParse(curdoc.address, "", PARSE_PATH|PARSE_PUNCTUATION);
- HTUnEscape(cp);
- if (HTStat(cp, &stat_info) == -1) {
- CTRACE(tfp, "mainloop: Can't stat %s\n", cp);
- FREE(cp);
- temp = (char *)calloc(1, (strlen(LYCSwingPath) + 4));
- if (temp == NULL)
- outofmem(__FILE__, "mainloop");
- sprintf(temp, "%s []", LYCSwingPath);
- refresh_screen = TRUE; /* redisplay */
- } else {
- char *VMSdir = NULL;
-
- if (S_ISDIR(stat_info.st_mode)) {
- /*
- * We're viewing a local directory. Make
- * that the CSwing argument. - FM
- */
- LYAddPathSep(&cp);
- StrAllocCopy(VMSdir, HTVMS_name("", cp));
- FREE(cp);
- } else {
- /*
- * We're viewing a local file. Make it's
- * directory the CSwing argument. - FM
- */
- StrAllocCopy(VMSdir, HTVMS_name("", cp));
- FREE(cp);
- if ((cp = strrchr(VMSdir, ']')) != NULL) {
- *(cp + 1) = '\0';
- cp == NULL;
- } else if ((cp = strrchr(VMSdir, ':')) != NULL) {
- *(cp + 1) = '\0';
- cp == NULL;
- }
- }
- temp = (char *)calloc(1,
- (strlen(LYCSwingPath) +
- strlen(VMSdir) +
- 2));
- if (temp == NULL)
- outofmem(__FILE__, "mainloop");
- sprintf(temp, "%s %s", LYCSwingPath, VMSdir);
- FREE(VMSdir);
- /*
- * Uncache the current document in case we
- * change, move, or delete it during the
- * CSwing session. - FM
- */
- HTuncache_current_document();
- StrAllocCopy(newdoc.address, curdoc.address);
- StrAllocCopy(newdoc.title,
- curdoc.title ? curdoc.title : "");
- StrAllocCopy(newdoc.bookmark, curdoc.bookmark);
- FREE(curdoc.address);
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link;
- }
- } else {
- /*
- * We're not viewing a local directory or file.
- * Pass CSwing the current default directory as
- * an argument and don't uncache the current
- * document. - FM
- */
- temp = (char *)calloc(1, (strlen(LYCSwingPath) + 4));
- if (temp == NULL)
- outofmem(__FILE__, "mainloop");
- sprintf(temp, "%s []", LYCSwingPath);
- refresh_screen = TRUE; /* redisplay */
- }
- stop_curses();
- LYSystem(temp);
- start_curses();
- FREE(temp);
+ handle_LYK_DIRED_MENU(&refresh_screen, &old_c, real_c);
break;
-#else
- /*
- * Don't do if not allowed or already viewing the menu.
- */
- if (lynx_edit_mode && !no_dired_support &&
- strcmp(curdoc.address, LYDiredFileURL) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- DIRED_MENU_TITLE)) {
- dired_options(&curdoc,&newdoc.address);
- refresh_screen = TRUE; /* redisplay */
- }
- break;
-#endif /* VMS */
#endif /* DIRED_SUPPORT || VMS*/
#ifdef USE_EXTERNALS
- case LYK_EXTERN: /* use external program on url */
- if ((nlinks > 0) && (links[curdoc.link].lname != NULL))
- {
- run_external(links[curdoc.link].lname);
- refresh_screen = TRUE;
- }
+ case LYK_EXTERN_LINK: /* use external program on url */
+ handle_LYK_EXTERN_LINK(&refresh_screen);
+ break;
+ case LYK_EXTERN_PAGE: /* use external program on current page */
+ handle_LYK_EXTERN_PAGE(&refresh_screen);
break;
#endif /* USE_EXTERNALS */
case LYK_ADD_BOOKMARK: /* add link to bookmark file */
- if (LYValidate) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(BOOKMARKS_DISABLED);
- }
- break;
- }
-
- if (strcmp((curdoc.title ? curdoc.title : ""),
- HISTORY_PAGE_TITLE) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- SHOWINFO_TITLE) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- PRINT_OPTIONS_TITLE) &&
-#ifdef DIRED_SUPPORT
- strcmp(curdoc.address, LYDiredFileURL) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- DIRED_MENU_TITLE) &&
- strcmp(curdoc.address, LYPermitFileURL) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- PERMIT_OPTIONS_TITLE) &&
- strcmp(curdoc.address, LYUploadFileURL) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- UPLOAD_OPTIONS_TITLE) &&
-#endif /* DIRED_SUPPORT */
- strcmp((curdoc.title ? curdoc.title : ""),
- DOWNLOAD_OPTIONS_TITLE) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- COOKIE_JAR_TITLE) &&
- strcmp((curdoc.title ? curdoc.title : ""),
- OPTIONS_TITLE) &&
- ((nlinks <= 0) ||
- (links[curdoc.link].lname != NULL &&
- strncmp(links[curdoc.link].lname,
- "LYNXHIST:", 9) &&
- strncmp(links[curdoc.link].lname,
- "LYNXPRINT:", 10) &&
- strncmp(links[curdoc.link].lname,
- "LYNXDIRED:", 10) &&
- strncmp(links[curdoc.link].lname,
- "LYNXDOWNLOAD:", 13) &&
- strncmp(links[curdoc.link].lname,
- "LYNXCOOKIE:", 11) &&
- strncmp(links[curdoc.link].lname,
- "LYNXOPTIONS:", 12) &&
- strncmp(links[curdoc.link].lname,
- "LYNXLIST:", 9)))) {
- if (nlinks > 0) {
- if (curdoc.post_data == NULL &&
- curdoc.bookmark == NULL &&
- !LYIsListpageTitle(curdoc.title ? curdoc.title : "") &&
- strcmp((curdoc.title ? curdoc.title : ""),
- VISITED_LINKS_TITLE)) {
- /*
- * The document doesn't have POST content,
- * and is not a bookmark file, nor is the
- * list or visited links page, so we can
- * save either that or the link. - FM
- */
- _statusline(BOOK_D_L_OR_CANCEL);
- c = LYgetch();
- if (TOUPPER(c) == 'D') {
- save_bookmark_link(curdoc.address, curdoc.title);
- refresh_screen = TRUE; /* MultiBookmark support */
- goto check_add_bookmark_to_self;
- }
- } else {
- if (LYMultiBookmarks == FALSE &&
- curdoc.bookmark != NULL &&
- strstr(curdoc.address,
- (*bookmark_page == '.'
- ?
- (bookmark_page+1) : bookmark_page)) != NULL) {
- /*
- * If multiple bookmarks are disabled, offer
- * the L)ink or C)ancel, but with wording
- * which indicates that the link already
- * exists in this bookmark file. - FM
- */
- _statusline(MULTIBOOKMARKS_SELF);
- } else if (curdoc.post_data != NULL &&
- links[curdoc.link].type == WWW_INTERN_LINK_TYPE) {
- /*
- * Internal link, and document has POST content.
- */
- HTUserMsg(NOBOOK_POST_FORM);
- break;
- } else {
- /*
- * Only offer the link in a document with
- * POST content, or if the current document
- * is a bookmark file and multiple bookmarks
- * are enabled. - FM
- */
- _statusline(BOOK_L_OR_CANCEL);
- }
- c = LYgetch();
- }
- if (TOUPPER(c) == 'L') {
- if (curdoc.post_data != NULL &&
- links[curdoc.link].type == WWW_INTERN_LINK_TYPE) {
- /*
- * Internal link, and document has POST content.
- */
- HTUserMsg(NOBOOK_POST_FORM);
- break;
- }
- /*
- * User does want to save the link. - FM
- */
- if (links[curdoc.link].type != WWW_FORM_LINK_TYPE) {
- save_bookmark_link(links[curdoc.link].lname,
- links[curdoc.link].hightext);
- refresh_screen = TRUE; /* MultiBookmark support */
- } else {
- HTUserMsg(NOBOOK_FORM_FIELD);
- break;
- }
- } else {
- break;
- }
- } else if (curdoc.post_data != NULL) {
- /*
- * No links, and document has POST content. - FM
- */
- HTUserMsg(NOBOOK_POST_FORM);
- break;
- } else if (curdoc.bookmark != NULL) {
- /*
- * It's a bookmark file from which all
- * of the links were deleted. - FM
- */
- HTUserMsg(BOOKMARKS_NOLINKS);
- break;
- } else {
- _statusline(BOOK_D_OR_CANCEL);
- c = LYgetch();
- if (TOUPPER(c) == 'D') {
- save_bookmark_link(curdoc.address, curdoc.title);
- refresh_screen = TRUE; /* MultiBookmark support */
- } else {
- break;
- }
- }
-check_add_bookmark_to_self:
- if (curdoc.bookmark && BookmarkPage &&
- !strcmp(curdoc.bookmark, BookmarkPage)) {
- HTuncache_current_document();
- StrAllocCopy(newdoc.address, curdoc.address);
- StrAllocCopy(newdoc.bookmark, curdoc.bookmark);
- FREE(curdoc.address);
- newdoc.line = curdoc.line;
- newdoc.link = curdoc.link;
- newdoc.internal_link = FALSE;
- }
- FREE(temp);
- } else {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NOBOOK_HSML);
- }
- }
+ handle_LYK_ADD_BOOKMARK(&refresh_screen, &old_c, real_c);
break;
- case LYK_VIEW_BOOKMARK: /* v to view home page */
- if (LYValidate) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(BOOKMARKS_DISABLED);
- }
- break;
- }
-
- /*
- * See if a bookmark exists.
- * If it does replace newdoc.address with it's name.
- */
- if ((cp = get_bookmark_filename(&newdoc.address)) != NULL) {
- if (*cp == '\0' || !strcmp(cp, " ") ||
- !strcmp(curdoc.address, newdoc.address)) {
- if (LYMultiBookmarks == TRUE)
- refresh_screen = TRUE;
- break;
- }
- LYforce_no_cache = TRUE; /*force the document to be reloaded*/
- StrAllocCopy(newdoc.title, BOOKMARK_TITLE);
- StrAllocCopy(newdoc.bookmark, BookmarkPage);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- } else {
- if (old_c != real_c) {
- old_c = real_c;
- LYMBM_statusline(BOOKMARKS_NOT_OPEN);
- sleep(AlertSecs);
- if (LYMultiBookmarks == TRUE) {
- refresh_screen = TRUE;
- }
- }
- }
+ case LYK_VIEW_BOOKMARK: /* v to view home page */
+ handle_LYK_VIEW_BOOKMARK(&refresh_screen, &old_c, real_c);
break;
- case LYK_SHELL: /* shell escape */
- if (!no_shell) {
- stop_curses();
- printf("%s\r\n", SPAWNING_MSG);
- LYSystem(LYSysShell());
- start_curses();
- refresh_screen = TRUE; /* for an HText_pageDisplay() */
- } else {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(SPAWNING_DISABLED);
- }
- }
+ case LYK_SHELL: /* (!) shell escape */
+ handle_LYK_SHELL(&refresh_screen, &old_c, real_c);
break;
case LYK_DOWNLOAD:
- /*
- * Don't do if both download and disk_save are restricted.
- */
- if (LYValidate ||
- (no_download && !override_no_download && no_disk_save)) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(DOWNLOAD_DISABLED);
- }
- break;
- }
-
- /*
- * Don't do if already viewing download options page.
- */
- if (!strcmp((curdoc.title ? curdoc.title : ""),
- DOWNLOAD_OPTIONS_TITLE))
- break;
-
- if (nlinks > 0) {
- if (links[curdoc.link].type == WWW_FORM_LINK_TYPE) {
- if (links[curdoc.link].form->type == F_SUBMIT_TYPE ||
- links[curdoc.link].form->type == F_IMAGE_SUBMIT_TYPE) {
- if (links[curdoc.link].form->submit_method ==
- URL_MAIL_METHOD) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_DOWNLOAD_MAILTO_ACTION);
- }
- break;
- }
- if (!strncmp(links[curdoc.link].form->submit_action,
- "LYNXOPTIONS:", 12)) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_DOWNLOAD_SPECIAL);
- }
- break;
- }
- HTOutputFormat = HTAtom_for("www/download");
- LYforce_no_cache = TRUE;
- cmd = LYK_ACTIVATE;
- goto new_cmd;
- }
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_DOWNLOAD_INPUT);
- }
-
- } else if (!strcmp((curdoc.title ? curdoc.title : ""),
- COOKIE_JAR_TITLE)) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_DOWNLOAD_COOKIES);
- }
-
- } else if (!strcmp((curdoc.title ? curdoc.title : ""),
- PRINT_OPTIONS_TITLE)) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_DOWNLOAD_PRINT_OP);
- }
-
-#ifdef DIRED_SUPPORT
- } else if (!strcmp(curdoc.address, LYUploadFileURL) ||
- !strcmp((curdoc.title ? curdoc.title : ""),
- UPLOAD_OPTIONS_TITLE)) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_DOWNLOAD_UPLOAD_OP);
- }
-
- } else if (!strcmp(curdoc.address, LYPermitFileURL) ||
- !strcmp((curdoc.title ? curdoc.title : ""),
- PERMIT_OPTIONS_TITLE)) {
- if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_DOWNLOAD_PERMIT_OP);
- }
-
- } else if (lynx_edit_mode && !no_dired_support) {
- /*
- * Don't bother making a /tmp copy of the local file.
- */
- StrAllocCopy(temp, newdoc.address);
- StrAllocCopy(newdoc.address, links[curdoc.link].lname);
- if (LYdownload_options(&newdoc.address,
- links[curdoc.link].lname) < 0)
- StrAllocCopy(newdoc.address, temp);
- else
- newdoc.internal_link = FALSE;
- FREE(temp);
-#endif /* DIRED_SUPPORT */
-
- } else if (!strcmp((curdoc.title ? curdoc.title : ""),
- HISTORY_PAGE_TITLE) &&
- !strncmp(links[curdoc.link].lname, "LYNXHIST:", 9)) {
- int number = atoi(links[curdoc.link].lname+9);
- if ((history[number].post_data != NULL &&
- history[number].safe != TRUE) &&
- HTConfirm(CONFIRM_POST_RESUBMISSION) == FALSE) {
- HTInfoMsg(CANCELLED);
- break;
- }
- /*
- * OK, we download from history page, restore URL from stack.
- */
- StrAllocCopy(newdoc.address, history[number].address);
- StrAllocCopy(newdoc.title, links[curdoc.link].hightext);
- StrAllocCopy(newdoc.bookmark, history[number].bookmark);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- if (history[number].post_data)
- StrAllocCopy(newdoc.post_data,
- history[number].post_data);
- if (history[number].post_content_type)
- StrAllocCopy(newdoc.post_content_type,
- history[number].post_content_type);
- newdoc.isHEAD = history[number].isHEAD;
- newdoc.safe = history[number].safe;
- newdoc.internal_link = FALSE;
- newdoc.link = 0;
- HTOutputFormat = HTAtom_for("www/download");
- LYUserSpecifiedURL = TRUE;
- /*
- * Force the document to be reloaded.
- */
- LYforce_no_cache = TRUE;
-
- } else if (!strncmp(links[curdoc.link].lname, "data:", 5)) {
- if (old_c != real_c) {
- old_c = real_c;
- HTAlert(UNSUPPORTED_DATA_URL);
- }
-
- } else if (!strncmp(links[curdoc.link].lname,
- "LYNXCOOKIE:", 11) ||
- !strncmp(links[curdoc.link].lname,
- "LYNXDIRED:", 10) ||
- !strncmp(links[curdoc.link].lname,
- "LYNXDOWNLOAD:", 13) ||
- !strncmp(links[curdoc.link].lname,
- "LYNXPRINT:", 10) ||
- !strncmp(links[curdoc.link].lname,
- "LYNXOPTIONS:", 12) ||
- !strncmp(links[curdoc.link].lname,
- "LYNXCFG:", 8) ||
- !strncmp(links[curdoc.link].lname,
- "LYNXCOMPILEOPTS:", 16) ||
- !strncmp(links[curdoc.link].lname,
- "lynxexec:", 9) ||
- !strncmp(links[curdoc.link].lname,
- "lynxprog:", 9)) {
- HTUserMsg(NO_DOWNLOAD_SPECIAL);
-
- } else if (!strncmp(links[curdoc.link].lname,
- "mailto:", 7)) {
- HTUserMsg(NO_DOWNLOAD_MAILTO_LINK);
-
- /*
- * From here on we could have a remote host, so check if
- * that's allowed.
- *
- * We copy all these checks from getfile() to LYK_DOWNLOAD
- * here because LYNXDOWNLOAD:// will NOT be pushing the
- * previous document into the history stack so preserve
- * getfile() from returning a wrong status (NULLFILE).
- */
- } else if (local_host_only &&
- !(LYisLocalHost(links[curdoc.link].lname) ||
- LYisLocalAlias(links[curdoc.link].lname))) {
- HTUserMsg(ACCESS_ONLY_LOCALHOST);
- } else { /* Not a forms, options or history link */
- /*
- * Follow a normal link or anchor. Note that
- * if it's an anchor within the same document,
- * entire document will be downloaded.
- */
- StrAllocCopy(newdoc.address, links[curdoc.link].lname);
- StrAllocCopy(newdoc.title, links[curdoc.link].hightext);
-#ifndef DONT_TRACK_INTERNAL_LINKS
- /*
- * Might be an internal link in the same doc from a
- * POST form. If so, don't free the content. - kw
- */
- if (links[curdoc.link].type != WWW_INTERN_LINK_TYPE)
-#else
- /*
- * Might be an anchor in the same doc from a POST
- * form. If so, don't free the content. -- FM
- */
- if (are_different(&curdoc, &newdoc))
-#endif /* TRACK_INTERNAL_LINKS */
- {
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- }
- newdoc.internal_link = FALSE;
- newdoc.link = 0;
- HTOutputFormat = HTAtom_for("www/download");
- /*
- * Force the document to be reloaded.
- */
- LYforce_no_cache = TRUE;
- }
- } else if (old_c != real_c) {
- old_c = real_c;
- HTUserMsg(NO_DOWNLOAD_CHOICE);
+ switch (handle_LYK_DOWNLOAD(&cmd, &old_c, real_c)) {
+ case 1:
+ continue;
+ case 2:
+ goto new_cmd;
}
break;
#ifdef DIRED_SUPPORT
case LYK_UPLOAD:
- /*
- * Don't do if already viewing upload options page.
- */
- if (!strcmp(curdoc.address, LYUploadFileURL) ||
- !strcmp((curdoc.title ? curdoc.title : ""),
- UPLOAD_OPTIONS_TITLE))
- break;
-
- if (lynx_edit_mode && !no_dired_support) {
- LYUpload_options((char **)&newdoc.address,
- (char *)curdoc.address);
- StrAllocCopy(newdoc.title, UPLOAD_OPTIONS_TITLE);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- /*
- * Uncache the current listing so that it will
- * be updated to included the uploaded file if
- * placed in the current directory. - FM
- */
- HTuncache_current_document();
- }
+ handle_LYK_UPLOAD();
break;
#endif /* DIRED_SUPPORT */
case LYK_TRACE_TOGGLE: /* Toggle TRACE mode. */
- WWW_TraceFlag = ! WWW_TraceFlag;
- if (LYOpenTraceLog())
- HTUserMsg(WWW_TraceFlag ? TRACE_ON : TRACE_OFF);
+ handle_LYK_TRACE_TOGGLE();
break;
case LYK_TRACE_LOG: /* View TRACE log. */
- /*
- * Check whether we've started a TRACE log
- * in this session. - FM
- */
- if (LYTraceLogFP == NULL) {
- HTUserMsg(NO_TRACELOG_STARTED);
- break;
- }
-
- /*
- * Don't do if already viewing the TRACE log. - FM
- */
- if (!strcmp((curdoc.title ? curdoc.title : ""),
- LYNX_TRACELOG_TITLE))
- break;
-
- /*
- * If TRACE mode is on, turn it off during this fetch of the
- * TRACE log, so we don't enter stuff about this fetch, and
- * set a flag for turning it back on when we return to this
- * loop. Note that we'll miss any messages about memory
- * exhaustion if it should occur. It seems unlikely that
- * anything else bad might happen, but if it does, we'll
- * miss messages about that too. We also fflush(), close,
- * and open it again, to make sure all stderr messages thus
- * far will be in the log. - FM
- */
- if (!LYReopenTracelog(&trace_mode_flag))
- break;
-
- LYLocalFileToURL (&(newdoc.address), LYTraceLogPath);
- StrAllocCopy(newdoc.title, LYNX_TRACELOG_TITLE);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- if (LYValidate || check_realm) {
- LYPermitURL = TRUE;
- }
- LYforce_no_cache = TRUE;
+ handle_LYK_TRACE_LOG(&trace_mode_flag);
break;
case LYK_IMAGE_TOGGLE:
- if (clickable_images)
- clickable_images = FALSE;
- else
- clickable_images = TRUE;
-
- HTUserMsg(clickable_images ?
- CLICKABLE_IMAGES_ON : CLICKABLE_IMAGES_OFF);
-#ifdef SOURCE_CACHE
- if (HTreparse_document()) {
- break;
- }
-#endif
- cmd = LYK_RELOAD;
- goto new_cmd;
+ if (handle_LYK_IMAGE_TOGGLE(&cmd))
+ goto new_cmd;
+ break;
case LYK_INLINE_TOGGLE:
- if (pseudo_inline_alts)
- pseudo_inline_alts = FALSE;
- else
- pseudo_inline_alts = TRUE;
-
- HTUserMsg(pseudo_inline_alts ?
- PSEUDO_INLINE_ALTS_ON : PSEUDO_INLINE_ALTS_OFF);
-#ifdef SOURCE_CACHE
- if (HTreparse_document()) {
- break;
- }
-#endif
- cmd = LYK_RELOAD;
- goto new_cmd;
+ if (handle_LYK_INLINE_TOGGLE(&cmd))
+ goto new_cmd;
+ break;
case LYK_RAW_TOGGLE:
- if (HTLoadedDocumentCharset()) {
- HTUserMsg(gettext("charset for this document specified explicitely, sorry..."));
- break;
- } else {
- LYUseDefaultRawMode = !LYUseDefaultRawMode;
- HTUserMsg(LYRawMode ? RAWMODE_OFF : RAWMODE_ON);
- HTMLSetCharacterHandling(current_char_set);
-#ifdef SOURCE_CACHE
- if (HTreparse_document()) {
- break;
- }
-#endif
- cmd = LYK_RELOAD;
+ if (handle_LYK_RAW_TOGGLE(&cmd))
goto new_cmd;
- }
+ break;
case LYK_HEAD:
- if (nlinks > 0 &&
- (links[curdoc.link].type != WWW_FORM_LINK_TYPE ||
- links[curdoc.link].form->type == F_SUBMIT_TYPE ||
- links[curdoc.link].form->type == F_IMAGE_SUBMIT_TYPE)) {
- /*
- * We have links, and the current link is a
- * normal link or a form's submit button. - FM
- */
- _statusline(HEAD_D_L_OR_CANCEL);
- c = LYgetch();
- if (TOUPPER(c) == 'D') {
- char *scheme = strncmp(curdoc.address, "LYNXIMGMAP:", 11) ?
- curdoc.address : curdoc.address + 11;
- if (LYCanDoHEAD(scheme) != TRUE) {
- HTUserMsg(DOC_NOT_HTTP_URL);
- } else {
- /*
- * Check if this is a reply from a POST,
- * and if so, seek confirmation if the
- * safe element is not set. - FM
- */
- if ((curdoc.post_data != NULL &&
- curdoc.safe != TRUE) &&
- HTConfirm(CONFIRM_POST_DOC_HEAD) == FALSE) {
- HTInfoMsg(CANCELLED);
- break;
- }
- HEAD_request = TRUE;
- LYforce_no_cache = TRUE;
- StrAllocCopy(newdoc.title, curdoc.title);
- if (HTLoadedDocumentIsHEAD()) {
- HTuncache_current_document();
- FREE(curdoc.address);
- } else {
- StrAllocCat(newdoc.title, " - HEAD");
- }
- }
- break;
- } else if (TOUPPER(c) == 'L') {
- if (links[curdoc.link].type != WWW_FORM_LINK_TYPE &&
- strncmp(links[curdoc.link].lname, "http", 4) &&
- strncmp(links[curdoc.link].lname,
- "LYNXIMGMAP:http", 15) &&
- LYCanDoHEAD(links[curdoc.link].lname) != TRUE &&
- (links[curdoc.link].type != WWW_INTERN_LINK_TYPE ||
- !curdoc.address ||
- strncmp(curdoc.address, "http", 4))) {
- HTUserMsg(LINK_NOT_HTTP_URL);
- } else if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->disabled) {
- HTUserMsg(FORM_ACTION_DISABLED);
- } else if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- strncmp(links[curdoc.link].form->submit_action,
- "lynxcgi:", 8) &&
- strncmp(links[curdoc.link].form->submit_action,
- "http", 4)) {
- HTUserMsg(FORM_ACTION_NOT_HTTP_URL);
- } else if (links[curdoc.link].type == WWW_FORM_LINK_TYPE &&
- links[curdoc.link].form->submit_method ==
- URL_POST_METHOD &&
- HTConfirm(CONFIRM_POST_LINK_HEAD) == FALSE) {
- HTInfoMsg(CANCELLED);
- } else {
- HEAD_request = TRUE;
- LYforce_no_cache = TRUE;
- cmd = LYK_ACTIVATE;
- goto new_cmd;
- }
- break;
- }
- break;
- } else {
- /*
- * We can offer only this document for a HEAD request.
- * Check if this is a reply from a POST, and if so,
- * seek confirmation if the safe element is not set. - FM
- */
- if ((curdoc.post_data != NULL &&
- curdoc.safe != TRUE) &&
- HTConfirm(CONFIRM_POST_DOC_HEAD) == FALSE) {
- HTInfoMsg(CANCELLED);
- break;
- } else if (nlinks > 0) {
- /*
- * The current link is a non-submittable form
- * link, so prompt the user to make it clear
- * that the HEAD request would be for the
- * current document, not the form link. - FM
- */
- _statusline(HEAD_D_OR_CANCEL);
- c = LYgetch();
- } else {
- /*
- * No links, so we can just assume that
- * the user wants a HEAD request for the
- * current document. - FM
- */
- c = 'D';
- }
- if (TOUPPER(c) == 'D') {
- char *scheme = strncmp(curdoc.address, "LYNXIMGMAP:", 11) ?
- curdoc.address : curdoc.address + 11;
- /*
- * The user didn't cancel, so check if
- * a HEAD request is appropriate for the
- * current document. - FM
- */
- if (LYCanDoHEAD(scheme) != TRUE) {
- HTUserMsg(DOC_NOT_HTTP_URL);
- } else {
- HEAD_request = TRUE;
- LYforce_no_cache = TRUE;
- StrAllocCopy(newdoc.title, curdoc.title);
- if (HTLoadedDocumentIsHEAD()) {
- HTuncache_current_document();
- FREE(curdoc.address);
- } else {
- StrAllocCat(newdoc.title, " - HEAD");
- }
- }
- }
- }
+ if (handle_LYK_HEAD(&cmd))
+ goto new_cmd;
break;
case LYK_TOGGLE_HELP:
- if (user_mode == NOVICE_MODE) {
- toggle_novice_line();
- noviceline(more);
- }
+ handle_LYK_TOGGLE_HELP();
break;
case LYK_KEYMAP:
- if (old_c != real_c) {
- old_c = real_c;
- StrAllocCopy(newdoc.address, "LYNXKEYMAP:");
- StrAllocCopy(newdoc.title, CURRENT_KEYMAP_TITLE);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- /*
- * If vi_keys changed, the keymap did too,
- * so force no cache, and reset the flag. - FM
- */
- if (vi_keys_flag != vi_keys ||
- emacs_keys_flag != emacs_keys) {
- LYforce_no_cache = TRUE;
- vi_keys_flag = vi_keys;
- emacs_keys_flag = emacs_keys;
- }
-#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
- /*
- * Remember whether we are in dired menu
- * so we can display the right keymap.
- */
- if (!no_dired_support) {
- prev_lynx_edit_mode = lynx_edit_mode;
- }
-#endif /* DIRED_SUPPORT && OK_OVERRIDE */
- LYforce_no_cache = TRUE;
- }
+ handle_LYK_KEYMAP(&vi_keys_flag, &emacs_keys_flag, &old_c, real_c);
break;
case LYK_JUMP:
- {
- char *ret;
-
- if (no_jump || JThead == NULL) {
- if (old_c != real_c) {
- old_c = real_c;
- if (no_jump)
- HTUserMsg(JUMP_DISALLOWED);
- else
- HTUserMsg(NO_JUMPFILE);
- }
- } else {
- LYJumpFileURL = TRUE;
- if ((ret = LYJump(c)) != NULL) {
-#ifdef PERMIT_GOTO_FROM_JUMP
- if (!strncasecomp(ret, "Go ", 3)) {
- LYJumpFileURL = FALSE;
- StrAllocCopy(temp, user_input_buffer);
- URLTotal = (Goto_URLs ?
- HTList_count(Goto_URLs) : 0);
- recall = ((URLTotal >= 1) ? RECALL : NORECALL);
- URLNum = URLTotal;
- FirstURLRecall = TRUE;
- if (!strcasecomp(ret, "Go :")) {
- if (recall) {
- ch = UPARROW;
- goto check_recall;
- }
- FREE(temp);
- HTUserMsg(NO_RANDOM_URLS_YET);
- break;
- }
- ret = HTParse((ret+3), startfile, PARSE_ALL);
- strcpy(user_input_buffer, ret);
- FREE(ret);
- goto check_recall;
- }
-#endif /* PERMIT_GOTO_FROM_JUMP */
- ret = HTParse(ret, startfile, PARSE_ALL);
- if (!LYTrimStartfile(ret)) {
- LYRemoveBlanks(user_input_buffer);
- }
- StrAllocCopy(newdoc.address, ret);
- StrAllocCopy(lynxjumpfile, ret);
- FREE(newdoc.post_data);
- FREE(newdoc.post_content_type);
- FREE(newdoc.bookmark);
- newdoc.isHEAD = FALSE;
- newdoc.safe = FALSE;
- newdoc.internal_link = FALSE;
- FREE(ret);
- LYUserSpecifiedURL = TRUE;
- } else {
- LYJumpFileURL = FALSE;
- }
- }
+ if (handle_LYK_JUMP(c, user_input_buffer, &temp, &recall,
+ &FirstURLRecall, &URLNum, &URLTotal, &ch,
+ &old_c, real_c)) {
+ if (do_check_recall (ch, user_input_buffer, &temp, URLTotal,
+ &URLNum, recall, &FirstURLRecall))
+ do_check_goto_URL(user_input_buffer, &temp, &force_load);
}
break;
case LYK_CLEAR_AUTH:
- if (old_c != real_c) {
- old_c = real_c;
- if (HTConfirm(CLEAR_ALL_AUTH_INFO)) {
- FREE(authentication_info[0]);
- FREE(authentication_info[1]);
- FREE(proxyauth_info[0]);
- FREE(proxyauth_info[1]);
- HTClearHTTPAuthInfo();
-#ifndef DISABLE_NEWS
- HTClearNNTPAuthInfo();
-#endif
-#ifndef DISABLE_FTP
- HTClearFTPPassword();
-#endif
- HTUserMsg(AUTH_INFO_CLEARED);
- } else {
- HTUserMsg(CANCELLED);
- }
- }
+ handle_LYK_CLEAR_AUTH(&old_c, real_c);
break;
case LYK_DO_NOTHING: /* pretty self explanatory */
break;
-
+#ifdef SUPPORT_CHDIR
+ case LYK_CHDIR:
+ handle_LYK_CHDIR();
+ break;
+#endif
+#ifdef USE_CURSES_PADS
+ case LYK_SHIFT_LEFT:
+ handle_LYK_SHIFT_LEFT(&refresh_screen, key_count);
+ break;
+ case LYK_SHIFT_RIGHT:
+ handle_LYK_SHIFT_RIGHT(&refresh_screen, key_count);
+ break;
+ case LYK_LINEWRAP_TOGGLE:
+ if (handle_LYK_LINEWRAP_TOGGLE(&cmd, &refresh_screen))
+ goto new_cmd;
+ break;
+#endif
} /* end of BIG switch */
}
}
-/*
- * Ask a post resubmission prompt with some indication of what would
- * be resubmitted, useful especially for going backward in history.
- * Try to use parts of the address or, if given, the title, depending
- * on how much fits on the statusline.
- * if_imgmap and if_file indicate how to handle an address that is
- * a "LYNXIMGMAP:", or a "file:" URL (presumably the List Page file),
- * respectively: 0: auto-deny, 1: auto-confirm, 2: prompt.
- * - kw
- */
-
-PRIVATE BOOL confirm_post_resub ARGS4(
- CONST char*, address,
- CONST char*, title,
- int, if_imgmap,
- int, if_file)
-{
- size_t len1;
- CONST char *msg = CONFIRM_POST_RESUBMISSION_TO;
- char buf[240];
- char *temp = NULL;
- BOOL res;
- size_t maxlen = LYcols - 6;
- if (!address) {
- return(NO);
- } else if (!strncmp(address, "LYNXIMGMAP:", 11)) {
- if (if_imgmap <= 0)
- return(NO);
- else if (if_imgmap == 1)
- return(YES);
- else
- msg = CONFIRM_POST_LIST_RELOAD;
- } else if (!strncmp(address, "file:", 5)) {
- if (if_file <= 0)
- return(NO);
- else if (if_file == 1)
- return(YES);
- else
- msg = CONFIRM_POST_LIST_RELOAD;
- } else if (dump_output_immediately) {
- return(NO);
- }
- if (maxlen >= sizeof(buf))
- maxlen = sizeof(buf) - 1;
- if ((len1 = strlen(msg)) +
- strlen(address) <= maxlen) {
- sprintf(buf, msg, address);
- return HTConfirm(buf);
- }
- if (len1 + strlen(temp = HTParse(address, "",
- PARSE_ACCESS+PARSE_HOST+PARSE_PATH
- +PARSE_PUNCTUATION)) <= maxlen) {
- sprintf(buf, msg, temp);
- res = HTConfirm(buf);
- FREE(temp);
- return(res);
- }
- FREE(temp);
- if (title && (len1 + strlen(title) <= maxlen)) {
- sprintf(buf, msg, title);
- return HTConfirm(buf);
- }
- if (len1 + strlen(temp = HTParse(address, "",
- PARSE_ACCESS+PARSE_HOST
- +PARSE_PUNCTUATION)) <= maxlen) {
- sprintf(buf, msg, temp);
- res = HTConfirm(buf);
- FREE(temp);
- return(res);
- }
- FREE(temp);
- if ((temp = HTParse(address, "", PARSE_HOST)) && *temp &&
- len1 + strlen(temp) <= maxlen) {
- sprintf(buf, msg, temp);
- res = HTConfirm(buf);
- FREE(temp);
- return(res);
- }
- FREE(temp);
- return HTConfirm(CONFIRM_POST_RESUBMISSION);
-}
-
PRIVATE int are_different ARGS2(
document *, doc1,
document *, doc2)
@@ -5804,14 +7498,13 @@ PRIVATE int are_different ARGS2(
/*
* Are the base addresses different?
*/
- if (strcmp(doc1->address, doc2->address))
- {
+ if (strcmp(doc1->address, doc2->address)) {
if (cp1)
*cp1 = '#';
if (cp2)
*cp2 = '#';
return(TRUE);
- }
+ }
if (cp1)
*cp1 = '#';
if (cp2)
@@ -5820,19 +7513,14 @@ PRIVATE int are_different ARGS2(
/*
* Do the docs have different contents?
*/
- if (doc1->post_data)
- {
- if (doc2->post_data)
- {
+ if (doc1->post_data) {
+ if (doc2->post_data) {
if (strcmp(doc1->post_data, doc2->post_data))
return(TRUE);
- }
- else
- return(TRUE);
- }
- else
- if (doc2->post_data)
+ } else
return(TRUE);
+ } else if (doc2->post_data)
+ return(TRUE);
/*
* We'll assume the two documents in fact are the same.
@@ -5889,14 +7577,13 @@ PRIVATE int are_phys_different ARGS2(
/*
* Are the base addresses different?
*/
- if (strcmp(ap1, ap2))
- {
+ if (strcmp(ap1, ap2)) {
if (cp1)
*cp1 = '#';
if (cp2)
*cp2 = '#';
return(TRUE);
- }
+ }
if (cp1)
*cp1 = '#';
if (cp2)
@@ -5905,19 +7592,14 @@ PRIVATE int are_phys_different ARGS2(
/*
* Do the docs have different contents?
*/
- if (doc1->post_data)
- {
- if (doc2->post_data)
- {
+ if (doc1->post_data) {
+ if (doc2->post_data) {
if (strcmp(doc1->post_data, doc2->post_data))
return(TRUE);
- }
- else
- return(TRUE);
- }
- else
- if (doc2->post_data)
+ } else
return(TRUE);
+ } else if (doc2->post_data)
+ return(TRUE);
/*
* We'll assume the two documents in fact are the same.
@@ -5929,21 +7611,21 @@ PRIVATE int are_phys_different ARGS2(
/*
* Utility for freeing the list of goto URLs. - FM
*/
-PUBLIC void HTGotoURLs_free NOARGS
+#ifdef LY_FIND_LEAKS
+PRIVATE void HTGotoURLs_free NOARGS
{
char *url;
HTList *cur = Goto_URLs;
- if (!cur)
- return;
-
- while (NULL != (url = (char *)HTList_nextObject(cur))) {
- FREE(url);
+ if (cur != 0) {
+ while (NULL != (url = (char *)HTList_nextObject(cur))) {
+ FREE(url);
+ }
+ HTList_delete(Goto_URLs);
+ Goto_URLs = NULL;
}
- HTList_delete(Goto_URLs);
- Goto_URLs = NULL;
- return;
}
+#endif
/*
* Utility for listing Goto URLs, making any
@@ -5952,16 +7634,14 @@ PUBLIC void HTGotoURLs_free NOARGS
PUBLIC void HTAddGotoURL ARGS1(
char *, url)
{
- char *new;
+ char *new = NULL;
char *old;
HTList *cur;
if (!(url && *url))
return;
- if ((new = (char *)calloc(1, (strlen(url) + 1))) == NULL)
- outofmem(__FILE__, "HTAddGotoURL");
- strcpy(new, url);
+ StrAllocCopy(new, url);
if (!Goto_URLs) {
Goto_URLs = HTList_new();
@@ -5990,27 +7670,27 @@ PUBLIC void HTAddGotoURL ARGS1(
* put a message on the screen
* to tell the user other misc info.
*/
-PRIVATE void print_status_message ARGS2(
- CONST linkstruct, curlink,
- char **, cp)
+PRIVATE void show_main_statusline ARGS2(
+ CONST linkstruct, curlink,
+ int, for_what)
{
/*
* Make sure form novice lines are replaced.
*/
- if (user_mode == NOVICE_MODE) {
+ if (user_mode == NOVICE_MODE && for_what != FOR_INPUT) {
noviceline(more);
}
- /*
- * If we are in forms mode then explicitly
- * tell the user what each kind of link is.
- */
if (HTisDocumentSource()) {
/*
* Currently displaying HTML source.
*/
_statusline(SOURCE_HELP);
+ /*
+ * If we are in forms mode then explicitly
+ * tell the user what each kind of link is.
+ */
#ifdef INDICATE_FORMS_MODE_FOR_ALL_LINKS_ON_PAGE
} else if (lynx_mode == FORMS_LYNX_MODE && nlinks > 0) {
#else
@@ -6024,109 +7704,7 @@ PRIVATE void print_status_message ARGS2(
#endif /* NORMAL_NON_FORM_LINK_STATUSLINES_FOR_ALL_USER_MODES */
#endif /* INDICATE_FORMS_MODE_FOR_ALL_LINKS_ON_PAGE */
if (curlink.type == WWW_FORM_LINK_TYPE) {
- switch(curlink.form->type) {
- case F_PASSWORD_TYPE:
- if (curlink.form->disabled == YES)
- statusline(FORM_LINK_PASSWORD_UNM_MSG);
- else
- statusline(FORM_LINK_PASSWORD_MESSAGE);
- break;
- case F_OPTION_LIST_TYPE:
- if (curlink.form->disabled == YES)
- statusline(FORM_LINK_OPTION_LIST_UNM_MSG);
- else
- statusline(FORM_LINK_OPTION_LIST_MESSAGE);
- break;
- case F_CHECKBOX_TYPE:
- if (curlink.form->disabled == YES)
- statusline(FORM_LINK_CHECKBOX_UNM_MSG);
- else
- statusline(FORM_LINK_CHECKBOX_MESSAGE);
- break;
- case F_RADIO_TYPE:
- if (curlink.form->disabled == YES)
- statusline(FORM_LINK_RADIO_UNM_MSG);
- else
- statusline(FORM_LINK_RADIO_MESSAGE);
- break;
- case F_TEXT_SUBMIT_TYPE:
- if (curlink.form->disabled == YES) {
- statusline(FORM_LINK_TEXT_SUBMIT_UNM_MSG);
- } else if (curlink.form->submit_method ==
- URL_MAIL_METHOD) {
- if (no_mail)
- statusline(FORM_LINK_TEXT_SUBMIT_MAILTO_DIS_MSG);
- else
- statusline(FORM_LINK_TEXT_SUBMIT_MAILTO_MSG);
- } else if (curlink.form->no_cache) {
- statusline(FORM_LINK_TEXT_RESUBMIT_MESSAGE);
- } else {
- statusline(FORM_LINK_TEXT_SUBMIT_MESSAGE);
- }
- break;
- case F_SUBMIT_TYPE:
- case F_IMAGE_SUBMIT_TYPE:
- if (curlink.form->disabled == YES) {
- statusline(FORM_LINK_SUBMIT_DIS_MSG);
- } else if (curlink.form->submit_method ==
- URL_MAIL_METHOD) {
- if (no_mail) {
- statusline(FORM_LINK_SUBMIT_MAILTO_DIS_MSG);
- } else {
- if(user_mode == ADVANCED_MODE) {
- char *submit_str = NULL;
-
- StrAllocCopy(submit_str, FORM_LINK_SUBMIT_MAILTO_PREFIX);
- StrAllocCat(submit_str, curlink.form->submit_action);
- statusline(submit_str);
- FREE(submit_str);
- } else {
- statusline(FORM_LINK_SUBMIT_MAILTO_MSG);
- }
- }
- } else if (curlink.form->no_cache) {
- if(user_mode == ADVANCED_MODE) {
- char *submit_str = NULL;
-
- StrAllocCopy(submit_str, FORM_LINK_RESUBMIT_PREFIX);
- StrAllocCat(submit_str, curlink.form->submit_action);
- statusline(submit_str);
- FREE(submit_str);
- } else {
- statusline(FORM_LINK_RESUBMIT_MESSAGE);
- }
- } else {
- if(user_mode == ADVANCED_MODE) {
- char *submit_str = NULL;
-
- StrAllocCopy(submit_str, FORM_LINK_SUBMIT_PREFIX);
- StrAllocCat(submit_str, curlink.form->submit_action);
- statusline(submit_str);
- FREE(submit_str);
- } else {
- statusline(FORM_LINK_SUBMIT_MESSAGE);
- }
- }
- break;
- case F_RESET_TYPE:
- if (curlink.form->disabled == YES)
- statusline(FORM_LINK_RESET_DIS_MSG);
- else
- statusline(FORM_LINK_RESET_MESSAGE);
- break;
- case F_TEXT_TYPE:
- if (curlink.form->disabled == YES)
- statusline(FORM_LINK_TEXT_UNM_MSG);
- else
- statusline(FORM_LINK_TEXT_MESSAGE);
- break;
- case F_TEXTAREA_TYPE:
- if (curlink.form->disabled == YES)
- statusline(FORM_LINK_TEXT_UNM_MSG);
- else
- statusline(FORM_LINK_TEXTAREA_MESSAGE);
- break;
- }
+ show_formlink_statusline(curlink.form, for_what);
} else {
statusline(NORMAL_LINK_MESSAGE);
}
@@ -6135,9 +7713,10 @@ PRIVATE void print_status_message ARGS2(
* Let them know if it's an index -- very rare.
*/
if (is_www_index) {
- move(LYlines-1, LYcols-8);
+ char *indx = gettext("-index-");
+ LYmove(LYlines-1, LYcols - strlen(indx) - 1);
start_reverse();
- addstr("-index-");
+ LYaddstr(indx);
stop_reverse();
}
@@ -6145,25 +7724,15 @@ PRIVATE void print_status_message ARGS2(
/*
* Show the URL or, for some internal links, the fragment
*/
- *cp = NULL;
+ char *cp = NULL;
+
if (curlink.type == WWW_INTERN_LINK_TYPE &&
strncmp(curlink.lname, "LYNXIMGMAP:", 11)) {
- *cp = strchr(curlink.lname, '#');
- }
- if (!(*cp))
- *cp = curlink.lname;
- if (more) {
- if (is_www_index)
- _user_message("-more- -index- %s",
- *cp);
- else
- _user_message("-more- %s",*cp);
- } else {
- if (is_www_index)
- _user_message("-index- %s",*cp);
- else
- statusline(*cp);
+ cp = strchr(curlink.lname, '#');
}
+ if (!cp)
+ cp = curlink.lname;
+ status_link(cp, more, is_www_index);
} else if (is_www_index && more) {
char buf[128];
@@ -6176,16 +7745,67 @@ PRIVATE void print_status_message ARGS2(
_statusline(buf);
} else if (more) {
if (user_mode == NOVICE_MODE)
- _statusline(MORE);
+ _statusline(MORE);
else
- _statusline(MOREHELP);
+ _statusline(MOREHELP);
} else {
_statusline(HELP);
}
+
/* turn off cursor since now it's probably on statusline -HV */
- move((LYlines - 1), (LYcols - 1));
+ /* But not if LYShowCursor is on. -show_cursor may be used as a
+ * workaround to avoid putting the cursor in the last position, for
+ * curses implementations or terminals that cannot deal with that
+ * correctly. - kw */
+ if (!LYShowCursor) {
+ LYHideCursor();
+ }
+}
+
+/*
+ * Public function for redrawing the statusline appropriate for the
+ * selected link. It should only be called at times when curdoc.link,
+ * nlinks, and the links[] array are valid. - kw
+ */
+PUBLIC void repaint_main_statusline ARGS1(
+ int, for_what)
+{
+ if (curdoc.link >= 0 && curdoc.link < nlinks)
+ show_main_statusline(links[curdoc.link], for_what);
}
+PRIVATE void form_noviceline ARGS1(
+ int, disabled)
+{
+ LYmove(LYlines-2,0); LYclrtoeol();
+ if (!disabled) {
+ LYaddstr(FORM_NOVICELINE_ONE);
+ }
+ LYmove(LYlines-1,0); LYclrtoeol();
+ if (disabled)
+ return;
+ if (EditBinding(FROMASCII('\025')) == LYE_ERASE) {
+ LYaddstr(FORM_NOVICELINE_TWO);
+ } else if (EditBinding(FROMASCII('\025')) == LYE_DELBL) {
+ LYaddstr(FORM_NOVICELINE_TWO_DELBL);
+ } else {
+ char *temp = NULL;
+ char *erasekey = fmt_keys(LYKeyForEditAction(LYE_ERASE), -1);
+ if (erasekey) {
+ HTSprintf0(&temp, FORM_NOVICELINE_TWO_VAR, erasekey);
+ } else {
+ erasekey = fmt_keys(LYKeyForEditAction(LYE_DELBL), -1);
+ if (erasekey)
+ HTSprintf0(&temp,
+ FORM_NOVICELINE_TWO_DELBL_VAR, erasekey);
+ }
+ if (temp) {
+ LYaddstr(temp);
+ FREE(temp);
+ }
+ FREE(erasekey);
+ }
+}
PRIVATE void exit_immediately_with_error_message ARGS2(
int, state,
@@ -6202,19 +7822,20 @@ PRIVATE void exit_immediately_with_error_message ARGS2(
if (state == NOT_FOUND)
{
HTSprintf0(&buf, "%s\n%s %s\n",
- buf2,
+ buf2 ? buf2 : "",
gettext("lynx: Can't access startfile"),
/*
* hack: if we fail in HTAccess.c
* avoid duplicating URL, oh.
*/
- strstr(buf2, gettext("Can't Access")) ? "" : startfile);
+ (buf2 && strstr(buf2, gettext("Can't Access"))) ?
+ "" : startfile);
}
if (state == NULLFILE)
{
HTSprintf0(&buf, "%s\n%s\n%s\n",
- buf2,
+ buf2 ? buf2 : "",
gettext("lynx: Start file could not be found or is not text/html or text/plain"),
gettext(" Exiting..."));
}
@@ -6226,19 +7847,94 @@ PRIVATE void exit_immediately_with_error_message ARGS2(
#ifdef UNIX
if (dump_output_immediately) {
- fprintf(stderr, buf);
+ fputs(buf, stderr);
} else
#endif /* UNIX */
{
SetOutputMode( O_TEXT );
- printf(buf);
+ fputs(buf, stdout);
SetOutputMode( O_BINARY );
}
FREE(buf);
if (!dump_output_immediately) {
- exit_immediately(-1);
+ exit_immediately(EXIT_FAILURE);
+ }
+ /* else: return(EXIT_FAILURE) in mainloop */
+}
+
+
+PRIVATE void status_link ARGS3(
+ char *, curlink_name,
+ BOOLEAN, show_more,
+ BOOLEAN, show_indx)
+{
+#define MAX_STATUS (LYcols - 2)
+#define MIN_STATUS 0
+ char format[MAX_LINE];
+ int prefix = 0;
+ int length;
+
+ *format = 0;
+ if (show_more) {
+ sprintf(format, "%.*s ",
+ (int)(sizeof(format) - 2),
+ gettext("-more-"));
+ prefix = strlen(format);
+ }
+ if (show_indx) {
+ sprintf(format + prefix, "%.*s ",
+ (int)(sizeof(format) - prefix - 2),
+ gettext("-index-"));
+ }
+ prefix = strlen(format);
+ length = strlen(curlink_name);
+
+ if (prefix > MAX_STATUS || prefix >= MAX_LINE - 1) {
+ _user_message("%s", format); /* no room for url */
+ } else {
+ sprintf(format + prefix, "%%.%ds", MAX_STATUS - prefix);
+
+ if ((length + prefix > MAX_STATUS) && long_url_ok) {
+ char *buf = NULL;
+ int cut_from_pos;
+ int cut_to_pos;
+ int n;
+
+ StrAllocCopy(buf, curlink_name);
+ /*
+ * Scan to find the final leaf of the URL.
+ * Ignore trailing '/'.
+ */
+ for (cut_to_pos = length - 2;
+ (cut_to_pos > 0) && (buf[cut_to_pos] != '/');
+ cut_to_pos--)
+ ;
+ /*
+ * Jump back to the next leaf to remove.
+ */
+ for (cut_from_pos = cut_to_pos - 4;
+ (cut_from_pos > 0) && ((buf[cut_from_pos] != '/')
+ || (prefix + cut_from_pos + 4 + (length - cut_to_pos) >= MAX_STATUS));
+ cut_from_pos--)
+ ;
+ /*
+ * Replace some leaves to '...', if possible, and put the
+ * final leaf at the end. We assume that one can recognize
+ * the link from at least MIN_STATUS characters.
+ */
+ if (cut_from_pos > MIN_STATUS) {
+ for (n = 1; n <= 3; n++)
+ buf[cut_from_pos + n] = '.';
+ for (n = 0; cut_to_pos + n <= length; n++)
+ buf[cut_from_pos + 4 + n] = buf[cut_to_pos + n];
+ }
+ _user_message(format, buf);
+ CTRACE((tfp,"lastline = %s\n",buf)); /* don't forget to erase me */
+ FREE(buf);
+ } else { /* show (possibly truncated) url */
+ _user_message(format, curlink_name);
+ }
}
- /* else: return(-1) in mainloop */
}
diff --git a/gnu/usr.bin/lynx/src/LYMainLoop.h b/gnu/usr.bin/lynx/src/LYMainLoop.h
index 4b9b562f022..3180431517d 100644
--- a/gnu/usr.bin/lynx/src/LYMainLoop.h
+++ b/gnu/usr.bin/lynx/src/LYMainLoop.h
@@ -5,12 +5,18 @@
#include <HTUtils.h>
#endif
-#define TEXTAREA_EXPAND_SIZE 5
-#define AUTOGROW
-#define AUTOEXTEDIT
-
extern BOOLEAN LYOpenTraceLog NOPARAMS;
-extern void LYCloseTracelog NOPARAMS;
+extern int LYGetNewline NOPARAMS;
extern int mainloop NOPARAMS;
+extern void HTAddGotoURL PARAMS((char *url));
+extern void LYCloseTracelog NOPARAMS;
+extern void LYMainLoop_pageDisplay PARAMS((int line_num));
+extern void LYSetNewline PARAMS((int value));
+extern void handle_LYK_TRACE_TOGGLE NOPARAMS;
+extern void handle_LYK_WHEREIS PARAMS((int cmd, BOOLEAN *refresh_screen));
+#ifdef SUPPORT_CHDIR
+extern void handle_LYK_CHDIR NOPARAMS;
+#endif
+extern void repaint_main_statusline PARAMS((int for_what));
#endif /* LYMAINLOOP_H */
diff --git a/gnu/usr.bin/lynx/src/LYMap.c b/gnu/usr.bin/lynx/src/LYMap.c
index 055939107b6..9d4a7d1324e 100644
--- a/gnu/usr.bin/lynx/src/LYMap.c
+++ b/gnu/usr.bin/lynx/src/LYMap.c
@@ -124,8 +124,8 @@ PRIVATE void LYLynxMaps_free NOARGS
* MAP element content. - FM
*/
PUBLIC BOOL LYAddImageMap ARGS3(
- char *, address,
- char *, title,
+ char *, address,
+ char *, title,
HTParentAnchor *, node_anchor)
{
LYImageMap *new = NULL;
@@ -173,7 +173,7 @@ PUBLIC BOOL LYAddImageMap ARGS3(
cur = theList;
while (NULL != (old = (LYImageMap *)HTList_nextObject(cur))) {
if (old->address == 0) /* shouldn't happen */
- continue;
+ continue;
if (!strcmp(old->address, address)) {
FREE(old->address);
FREE(old->title);
@@ -194,7 +194,7 @@ PUBLIC BOOL LYAddImageMap ARGS3(
}
new = (old != NULL) ?
- old : (LYImageMap *)calloc(1, sizeof(LYImageMap));
+ old : typecalloc(LYImageMap);
if (new == NULL) {
outofmem(__FILE__, "LYAddImageMap");
return FALSE;
@@ -212,9 +212,9 @@ PUBLIC BOOL LYAddImageMap ARGS3(
* in the appropriate list. - FM
*/
PUBLIC BOOL LYAddMapElement ARGS5(
- char *, map,
- char *, address,
- char *, title,
+ char *, map,
+ char *, address,
+ char *, title,
HTParentAnchor *, node_anchor,
BOOL, intern_flag)
{
@@ -276,7 +276,7 @@ PUBLIC BOOL LYAddMapElement ARGS5(
}
}
- new = (LYMapElement *)calloc(1, sizeof(LYMapElement));
+ new = typecalloc(LYMapElement);
if (new == NULL) {
perror("Out of memory in LYAddMapElement");
return FALSE;
@@ -299,7 +299,7 @@ PUBLIC BOOL LYAddMapElement ARGS5(
* structure. - FM
*/
PUBLIC BOOL LYHaveImageMap ARGS1(
- char *, address)
+ char *, address)
{
LYImageMap *Map;
HTList *cur = LynxMaps;
@@ -470,6 +470,25 @@ PRIVATE int LYLoadIMGmap ARGS4 (
break;
}
}
+ if (theMap && HTList_count(theMap->elements) == 0) {
+ /*
+ * We found a MAP without any usable AREA.
+ * Fake a redirection to the address with fragment.
+ * We do this even for post data (internal link within
+ * a document with post data) if it will not result in
+ * an unwanted network request. - kw
+ */
+ if (!anAnchor->post_data) {
+ StrAllocCopy(redirecting_url, address);
+ return(HT_REDIRECTING);
+ } else if (WWWDoc.safe ||
+ (underlying->document && !anAnchor->document &&
+ (LYinternal_flag || LYoverride_no_cache))) {
+ StrAllocCopy(redirecting_url, address);
+ redirect_post_content = TRUE;
+ return(HT_REDIRECTING);
+ }
+ }
if (!(theMap && theMap->elements)) {
if (anAnchor->post_data && !WWWDoc.safe &&
((underlying && underlying->document && !LYforce_no_cache) ||
@@ -514,7 +533,7 @@ PRIVATE int LYLoadIMGmap ARGS4 (
sink, anAnchor);
if (!target || target == NULL) {
- HTSprintf(&buf, CANNOT_CONVERT_I_TO_O,
+ HTSprintf0(&buf, CANNOT_CONVERT_I_TO_O,
HTAtom_name(format_in), HTAtom_name(format_out));
HTAlert(buf);
FREE(buf);
@@ -579,7 +598,7 @@ PRIVATE int LYLoadIMGmap ARGS4 (
PUTS(" TYPE=\"internal link\"");
#endif
PUTS("\n>");
- StrAllocCopy(MapTitle, new->title);
+ LYformTitle(&MapTitle, new->title);
LYEntify(&MapTitle, TRUE);
PUTS(MapTitle);
PUTS("</a>\n");
diff --git a/gnu/usr.bin/lynx/src/LYNews.c b/gnu/usr.bin/lynx/src/LYNews.c
index 1b27f64412e..23906a44d45 100644
--- a/gnu/usr.bin/lynx/src/LYNews.c
+++ b/gnu/usr.bin/lynx/src/LYNews.c
@@ -14,6 +14,7 @@
#include <GridText.h>
#include <LYCharSets.h>
#include <LYNews.h>
+#include <LYEdit.h>
#include <LYGlobalDefs.h>
@@ -25,16 +26,19 @@
BOOLEAN term_message = FALSE;
PRIVATE void terminate_message PARAMS((int sig));
-PRIVATE BOOLEAN message_has_content ARGS1(
- CONST char *, filename)
+PRIVATE BOOLEAN message_has_content ARGS2(
+ CONST char *, filename,
+ BOOLEAN *, nonspaces)
{
FILE *fp;
char *buffer = NULL;
BOOLEAN in_headers = TRUE;
+ *nonspaces = FALSE;
+
if (!filename || (fp = fopen(filename, "r")) == NULL) {
- CTRACE(tfp, "Failed to open file %s for reading!\n",
- filename ? filename : "(<null>)");
+ CTRACE((tfp, "Failed to open file %s for reading!\n",
+ NONNULL(filename)));
return FALSE;
}
while (LYSafeGets(&buffer, fp) != NULL) {
@@ -47,21 +51,26 @@ PRIVATE BOOLEAN message_has_content ARGS1(
if (*cp == '\n') {
break;
} else if (*cp != ' ') {
- if (!firstnonblank && isgraph((unsigned char)*cp)) {
+ if (!firstnonblank && isgraph(UCH(*cp))) {
firstnonblank = *cp;
+ } else if (!isspace(UCH(*cp))) {
+ *nonspaces = TRUE;
}
}
}
if (*cp != '\n') {
int c;
- while ((c = getc(fp)) != EOF && c != (int)(unsigned char)'\n') {
- if (!firstnonblank && isgraph((unsigned char)c))
+ while ((c = getc(fp)) != EOF && c != '\n') {
+ if (!firstnonblank && isgraph(UCH(c))) {
firstnonblank = (char)c;
+ } else if (!isspace(UCH(*cp))) {
+ *nonspaces = TRUE;
+ }
}
}
if (firstnonblank && firstnonblank != '>') {
if (!in_headers) {
- fclose(fp);
+ LYCloseInput(fp);
FREE(buffer);
return TRUE;
}
@@ -71,7 +80,7 @@ PRIVATE BOOLEAN message_has_content ARGS1(
}
}
FREE(buffer);
- fclose(fp);
+ LYCloseInput(fp);
return FALSE;
}
@@ -95,6 +104,7 @@ PUBLIC char *LYNewsPost ARGS2(
char *cp = NULL;
CONST char *kp = NULL;
int c = 0; /* user input */
+ int len;
FILE *fd = NULL;
char my_tempfile[LY_MAXPATH];
FILE *fc = NULL;
@@ -105,6 +115,7 @@ PUBLIC char *LYNewsPost ARGS2(
char *org = NULL;
FILE *fp = NULL;
BOOLEAN nonempty = FALSE;
+ BOOLEAN nonspaces = FALSE;
/*
* Make sure a non-zero length newspost, newsreply,
@@ -114,10 +125,22 @@ PUBLIC char *LYNewsPost ARGS2(
return(postfile);
/*
+ * Return immediately if we do get called, maybe by some quirk
+ * of HTNews.c, when we shouldn't. - kw
+ */
+ if (no_newspost)
+ return(postfile);
+
+ /*
* Open a temporary file for the headers
* and message body. - FM
*/
- if ((fd = LYOpenTemp(my_tempfile, HTML_SUFFIX, "w")) == NULL) {
+#ifdef __DJGPP__
+ if ((fd = LYOpenTemp(my_tempfile, HTML_SUFFIX, BIN_W)) == NULL)
+#else
+ if ((fd = LYOpenTemp(my_tempfile, HTML_SUFFIX, "w")) == NULL)
+#endif /* __DJGPP__ */
+ {
HTAlert(CANNOT_OPEN_TEMP);
return(postfile);
}
@@ -154,7 +177,7 @@ PUBLIC char *LYNewsPost ARGS2(
}
HTUnEscape(References);
if (!((cp = strchr(References, '@')) && cp > References + 1 &&
- isalnum(cp[1]))) {
+ isalnum(UCH(cp[1])))) {
FREE(References);
}
}
@@ -174,28 +197,27 @@ PUBLIC char *LYNewsPost ARGS2(
/*
* Show the list of newsgroups. - FM
*/
- clear();
- move(2,0);
- scrollok(stdscr, TRUE); /* Enable scrolling. */
- addstr(gettext("You will be posting to:"));
- addstr("\n\t");
- addstr(NewsGroups);
- addch('\n');
+ LYclear();
+ LYmove(2,0);
+ scrollok(LYwin, TRUE); /* Enable scrolling. */
+ LYaddstr(gettext("You will be posting to:"));
+ LYaddstr("\n\t");
+ LYaddstr(NewsGroups);
+ LYaddch('\n');
/*
* Get the mail address for the From header,
* offering personal_mail_address as default.
*/
- addstr(gettext("\n\n Please provide your mail address for the From: header\n"));
- strcpy(user_input, "From: ");
- if (personal_mail_address)
- strcat(user_input, personal_mail_address);
+ LYaddstr(gettext("\n\n Please provide your mail address for the From: header\n"));
+ sprintf(user_input, "From: %.*s", (int)sizeof(user_input) - 8,
+ (personal_mail_address != NULL) ? personal_mail_address : "");
if (LYgetstr(user_input, VISIBLE,
sizeof(user_input), NORECALL) < 0 ||
term_message) {
HTInfoMsg(NEWS_POST_CANCELLED);
LYCloseTempFP(fd); /* Close the temp file. */
- scrollok(stdscr, FALSE); /* Stop scrolling. */
+ scrollok(LYwin, FALSE); /* Stop scrolling. */
goto cleanup;
}
fprintf(fd, "%s\n", user_input);
@@ -205,7 +227,7 @@ PUBLIC char *LYNewsPost ARGS2(
* document's title as the default if this is a
* followup rather than a new post. - FM
*/
- addstr(gettext("\n\n Please provide or edit the Subject: header\n"));
+ LYaddstr(gettext("\n\n Please provide or edit the Subject: header\n"));
strcpy(user_input, "Subject: ");
if ((followup == TRUE && nhist > 0) &&
(kp = HText_getTitle()) != NULL) {
@@ -213,10 +235,28 @@ PUBLIC char *LYNewsPost ARGS2(
* Add the default subject.
*/
kp = LYSkipCBlanks(kp);
+#ifdef CJK_EX /* 1998/05/15 (Fri) 09:10:38 */
+ if (HTCJK == JAPANESE) {
+ CJKinput[0] = '\0';
+ switch(kanji_code) {
+ case EUC:
+ TO_EUC((CONST unsigned char *)kp, (unsigned char *)CJKinput);
+ kp = CJKinput;
+ break;
+ case SJIS:
+ TO_SJIS((CONST unsigned char *)kp, (unsigned char *)CJKinput);
+ kp = CJKinput;
+ break;
+ default:
+ break;
+ }
+ }
+#endif
if (strncasecomp(kp, "Re:", 3)) {
strcat(user_input, "Re: ");
}
- strcat(user_input, kp);
+ len = strlen(user_input);
+ LYstrncpy(user_input + len, kp, sizeof(user_input) - len - 1);
}
cp = NULL;
if (LYgetstr(user_input, VISIBLE,
@@ -224,7 +264,7 @@ PUBLIC char *LYNewsPost ARGS2(
term_message) {
HTInfoMsg(NEWS_POST_CANCELLED);
LYCloseTempFP(fd); /* Close the temp file. */
- scrollok(stdscr, FALSE); /* Stop scrolling. */
+ scrollok(LYwin, FALSE); /* Stop scrolling. */
goto cleanup;
}
fprintf(fd,"%s\n",user_input);
@@ -238,8 +278,9 @@ PUBLIC char *LYNewsPost ARGS2(
} else if (((org = getenv("NEWS_ORGANIZATION")) != NULL) &&
*org != '\0') {
StrAllocCat(cp, org);
-#ifndef VMS
- } else if ((fp = fopen("/etc/organization", "r")) != NULL) {
+ }
+#ifdef UNIX
+ else if ((fp = fopen("/etc/organization", TXT_R)) != NULL) {
char *buffer = 0;
if (LYSafeGets(&buffer, fp) != NULL) {
if ((org = strchr(buffer, '\n')) != NULL) {
@@ -250,18 +291,41 @@ PUBLIC char *LYNewsPost ARGS2(
}
}
FREE(buffer);
- fclose(fp);
-#endif /* !VMS */
+ LYCloseInput(fp);
+ }
+#else
+#ifdef _WINDOWS /* 1998/05/14 (Thu) 17:47:01 */
+ else {
+ char *p, fname[LY_MAXPATH];
+
+ strcpy(fname, LynxSigFile);
+ p = strrchr(fname, '/');
+ if (p != 0 && (p - fname) < sizeof(fname) - 15) {
+ strcpy(p + 1, "LYNX_ETC.TXT");
+ if ((fp = fopen(fname, TXT_R)) != NULL) {
+ if (fgets(user_input, sizeof(user_input), fp) != NULL) {
+ if ((org = strchr(user_input, '\n')) != NULL) {
+ *org = '\0';
+ }
+ if (user_input[0] != '\0') {
+ StrAllocCat(cp, user_input);
+ }
+ }
+ LYCloseInput(fp);
+ }
+ }
}
+#endif /* _WINDOWS */
+#endif /* !UNIX */
LYstrncpy(user_input, cp, (sizeof(user_input) - 16));
FREE(cp);
- addstr(gettext("\n\n Please provide or edit the Organization: header\n"));
+ LYaddstr(gettext("\n\n Please provide or edit the Organization: header\n"));
if (LYgetstr(user_input, VISIBLE,
sizeof(user_input), NORECALL) < 0 ||
term_message) {
HTInfoMsg(NEWS_POST_CANCELLED);
LYCloseTempFP(fd); /* Close the temp file. */
- scrollok(stdscr, FALSE); /* Stop scrolling. */
+ scrollok(LYwin, FALSE); /* Stop scrolling. */
goto cleanup;
}
fprintf(fd, "%s\n", user_input);
@@ -278,10 +342,6 @@ PUBLIC char *LYNewsPost ARGS2(
* Have the user create the message body.
*/
if (!no_editor && editor && *editor != '\0') {
- /*
- * Use an external editor.
- */
- char *editor_arg = "";
if (followup && nhist > 0) {
/*
@@ -291,58 +351,47 @@ PUBLIC char *LYNewsPost ARGS2(
_statusline(INC_ORIG_MSG_PROMPT);
} else if (HTConfirm(INC_ORIG_MSG_PROMPT) == YES) {
/*
- * The 1 will add the reply ">" in front of every line.
+ * The 'TRUE' will add the reply ">" in front of every line.
* We're assuming that if the display character set is
* Japanese and the document did not have a CJK charset,
* any non-EUC or non-SJIS 8-bit characters in it where
* converted to 7-bit equivalents. - FM
*/
- print_wwwfile_to_fd(fd, 1);
+ print_wwwfile_to_fd(fd, TRUE);
}
}
LYCloseTempFP(fd); /* Close the temp file. */
- scrollok(stdscr, FALSE); /* Stop scrolling. */
- if (term_message || c == 7 || c == 3)
+ scrollok(LYwin, FALSE); /* Stop scrolling. */
+ if (term_message || LYCharIsINTERRUPT(c))
goto cleanup;
/*
* Spawn the user's editor on the news file.
*/
- if (strstr(editor, "pico")) {
- editor_arg = " -t"; /* No prompt for filename to use */
- }
- sprintf(user_input,"%s%s %s", editor, editor_arg, my_tempfile);
- _statusline(SPAWNING_EDITOR_FOR_NEWS);
- stop_curses();
- if (LYSystem(user_input)) {
- start_curses();
- HTAlert(ERROR_SPAWNING_EDITOR);
- } else {
- start_curses();
- }
+ edit_temporary_file(my_tempfile, "", SPAWNING_EDITOR_FOR_NEWS);
- nonempty = message_has_content(my_tempfile);
+ nonempty = message_has_content(my_tempfile, &nonspaces);
} else {
/*
* Use the built in line editior.
*/
- addstr(gettext("\n\n Please enter your message below."));
- addstr(gettext("\n When you are done, press enter and put a single period (.)"));
- addstr(gettext("\n on a line and press enter again."));
- addstr("\n\n");
- refresh();
+ LYaddstr(gettext("\n\n Please enter your message below."));
+ LYaddstr(gettext("\n When you are done, press enter and put a single period (.)"));
+ LYaddstr(gettext("\n on a line and press enter again."));
+ LYaddstr("\n\n");
+ LYrefresh();
*user_input = '\0';
if (LYgetstr(user_input, VISIBLE,
sizeof(user_input), NORECALL) < 0 ||
term_message) {
HTInfoMsg(NEWS_POST_CANCELLED);
LYCloseTempFP(fd); /* Close the temp file. */
- scrollok(stdscr, FALSE); /* Stop scrolling. */
+ scrollok(LYwin, FALSE); /* Stop scrolling. */
goto cleanup;
}
while (!STREQ(user_input,".") && !term_message) {
- addch('\n');
+ LYaddch('\n');
fprintf(fd,"%s\n",user_input);
if (!nonempty && strlen(user_input))
nonempty = TRUE;
@@ -350,32 +399,35 @@ PUBLIC char *LYNewsPost ARGS2(
if (LYgetstr(user_input, VISIBLE,
sizeof(user_input), NORECALL) < 0) {
HTInfoMsg(NEWS_POST_CANCELLED);
- LYCloseTempFP(fd); /* Close the temp file. */
- scrollok(stdscr, FALSE); /* Stop scrolling. */
+ LYCloseTempFP(fd); /* Close the temp file. */
+ scrollok(LYwin, FALSE); /* Stop scrolling. */
goto cleanup;
}
}
fprintf(fd, "\n");
LYCloseTempFP(fd); /* Close the temp file. */
- scrollok(stdscr, FALSE); /* Stop scrolling. */
+ scrollok(LYwin, FALSE); /* Stop scrolling. */
}
- if (!nonempty) {
+ if (nonempty) {
+ /*
+ * Confirm whether to post, and if so,
+ * whether to append the sig file. - FM
+ */
+ LYStatusLine = (LYlines - 1);
+ c = HTConfirm(POST_MSG_PROMPT);
+ LYStatusLine = -1;
+ if (c != YES) {
+ LYclear(); /* clear the screen */
+ goto cleanup;
+ }
+ } else {
HTAlert(gettext("Message has no original text!"));
- goto cleanup;
- }
- /*
- * Confirm whether to post, and if so,
- * whether to append the sig file. - FM
- */
- LYStatusLine = (LYlines - 1);
- c = HTConfirm(POST_MSG_PROMPT);
- LYStatusLine = -1;
- if (c != YES) {
- clear(); /* clear the screen */
- goto cleanup;
+ if (!nonspaces
+ || HTConfirmDefault(POST_MSG_PROMPT, NO) != YES)
+ goto cleanup;
}
- if ((LynxSigFile != NULL) && (fp = fopen(LynxSigFile, "r")) != NULL) {
+ if ((LynxSigFile != NULL) && (fp = fopen(LynxSigFile, TXT_R)) != NULL) {
char *msg = NULL;
HTSprintf0(&msg, APPEND_SIG_FILE, LynxSigFile);
@@ -389,14 +441,14 @@ PUBLIC char *LYNewsPost ARGS2(
while (LYSafeGets(&buffer, fp) != NULL) {
fputs(buffer, fd);
}
- fclose(fd);
+ LYCloseOutput(fd);
}
}
- fclose(fp);
+ LYCloseInput(fp);
FREE(msg);
LYStatusLine = -1;
}
- clear(); /* clear the screen */
+ LYclear(); /* clear the screen */
/*
* If we are using a Japanese display character
@@ -406,7 +458,7 @@ PUBLIC char *LYNewsPost ARGS2(
* use the temp file as is. - FM
*/
if (CJKfile[0] != '\0') {
- if ((fd = fopen(my_tempfile, "r")) != NULL) {
+ if ((fd = fopen(my_tempfile, TXT_R)) != NULL) {
char *buffer = NULL;
while (LYSafeGets(&buffer, fd) != NULL) {
TO_JIS((unsigned char *)buffer,
@@ -415,7 +467,7 @@ PUBLIC char *LYNewsPost ARGS2(
}
LYCloseTempFP(fc);
StrAllocCopy(postfile, CJKfile);
- fclose(fd);
+ LYCloseInput(fd);
LYRemoveTemp(my_tempfile);
strcpy(my_tempfile, CJKfile);
CJKfile[0] = '\0';
@@ -471,7 +523,7 @@ PRIVATE void terminate_message ARGS1(
* Refresh the screen to get rid of the "interrupt" message.
*/
lynx_force_repaint();
- refresh();
+ LYrefresh();
#endif /* VMS */
}
diff --git a/gnu/usr.bin/lynx/src/LYOptions.c b/gnu/usr.bin/lynx/src/LYOptions.c
index 0884d18a876..8de61b6b32f 100644
--- a/gnu/usr.bin/lynx/src/LYOptions.c
+++ b/gnu/usr.bin/lynx/src/LYOptions.c
@@ -26,18 +26,105 @@
BOOLEAN term_options;
+PRIVATE int LYChosenShowColor = SHOW_COLOR_UNKNOWN; /* whether to show and save */
+
PRIVATE void terminate_options PARAMS((int sig));
-#if !defined(NO_OPTION_MENU) || defined(NCURSES_MOUSE_VERSION)
+#if !defined(NO_OPTION_MENU) || (defined(USE_MOUSE) && (defined(NCURSES) || defined(PDCURSES)))
#define COL_OPTION_VALUES 36 /* display column where option values start */
#endif
+#if defined(USE_SLANG) || defined(COLOR_CURSES)
+PRIVATE BOOLEAN can_do_colors = 0;
+#endif
+
+PUBLIC BOOLEAN LYCheckUserAgent NOARGS
+{
+ if (LYUserAgent && *LYUserAgent) {
+ if (strstr(LYUserAgent, "Lynx") == 0
+ && strstr(LYUserAgent, "lynx") == 0
+ && strstr(LYUserAgent, "L_y_n_x") == 0
+ && strstr(LYUserAgent, "l_y_n_x") == 0) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+PRIVATE void SetupChosenShowColor NOARGS
+{
+#if defined(USE_SLANG) || defined(COLOR_CURSES)
+ can_do_colors = 1;
+#if defined(COLOR_CURSES)
+ if (LYCursesON) /* could crash if called before initialization */
+ can_do_colors = (BOOL) has_colors();
+#endif
+ if (!no_option_save) {
+ if (LYChosenShowColor == SHOW_COLOR_UNKNOWN) {
+ switch (LYrcShowColor) {
+ case SHOW_COLOR_NEVER:
+ LYChosenShowColor =
+ (LYShowColor >= SHOW_COLOR_ON) ?
+ SHOW_COLOR_ON : SHOW_COLOR_NEVER;
+ break;
+ case SHOW_COLOR_ALWAYS:
+ if (!can_do_colors)
+ LYChosenShowColor = SHOW_COLOR_ALWAYS;
+ else
+ LYChosenShowColor =
+ (LYShowColor >= SHOW_COLOR_ON) ?
+ SHOW_COLOR_ALWAYS : SHOW_COLOR_OFF;
+ break;
+ default:
+ LYChosenShowColor =
+ (LYShowColor >= SHOW_COLOR_ON) ?
+ SHOW_COLOR_ON : SHOW_COLOR_OFF;
+ }
+ }
+ }
+#endif /* USE_SLANG || COLOR_CURSES */
+}
+
+PRIVATE void validate_x_display NOPARAMS
+{
+ char *cp;
+ if ((cp = LYgetXDisplay()) != NULL) {
+ StrAllocCopy(x_display, cp);
+ } else {
+ FREE(x_display);
+ }
+}
+
+PRIVATE void summarize_x_display ARGS1(
+ char *, display_option)
+{
+ if ((x_display == NULL && *display_option == '\0') ||
+ (x_display != NULL && !strcmp(x_display, display_option))) {
+ if (x_display == NULL && LYisConfiguredForX == TRUE) {
+ _statusline(VALUE_ACCEPTED_WARNING_X);
+ } else if (x_display != NULL && LYisConfiguredForX == FALSE) {
+ _statusline(VALUE_ACCEPTED_WARNING_NONX);
+ } else {
+ _statusline(VALUE_ACCEPTED);
+ }
+ } else {
+ if (*display_option) {
+ _statusline(FAILED_TO_SET_DISPLAY);
+ } else {
+ _statusline(FAILED_CLEAR_SET_DISPLAY);
+ }
+ }
+}
+
+
#ifndef NO_OPTION_MENU
PRIVATE int boolean_choice PARAMS((
int status,
int line,
int column,
- char ** choices));
+ CONST char ** choices));
+#define LYChooseBoolean(status, line, column, choices) \
+ boolean_choice(status, line, column, (CONST char **)choices)
#define MAXCHOICES 10
@@ -103,17 +190,17 @@ PRIVATE int boolean_choice PARAMS((
#define C_VERBOSE_IMAGES (B_VERBOSE_IMAGES + 21)
/* a kludge to add assume_charset only in ADVANCED mode... */
-#define L_Bool_A (use_assume_charset ? L_BOOL_A + 1 : L_BOOL_A)
-#define L_Bool_B (use_assume_charset ? L_BOOL_B + 1 : L_BOOL_B)
-#define L_Exec (use_assume_charset ? L_EXEC + 1 : L_EXEC)
-#define L_Rawmode (use_assume_charset ? L_RAWMODE + 1 : L_RAWMODE)
-#define L_Charset (use_assume_charset ? L_CHARSET + 1 : L_CHARSET)
-#define L_Color (use_assume_charset ? L_COLOR + 1 : L_COLOR)
-#define L_Keypad (use_assume_charset ? L_KEYPAD + 1 : L_KEYPAD)
-#define L_Lineed (use_assume_charset ? L_LINEED + 1 : L_LINEED)
-#define L_Layout (use_assume_charset ? L_LAYOUT + 1 : L_LAYOUT)
-#define L_Dired (use_assume_charset ? L_DIRED + 1 : L_DIRED)
-#define L_User_Mode (use_assume_charset ? L_USER_MODE + 1 : L_USER_MODE)
+#define L_Bool_A (use_assume_charset ? L_BOOL_A + 1 : L_BOOL_A)
+#define L_Bool_B (use_assume_charset ? L_BOOL_B + 1 : L_BOOL_B)
+#define L_Exec (use_assume_charset ? L_EXEC + 1 : L_EXEC)
+#define L_Rawmode (use_assume_charset ? L_RAWMODE + 1 : L_RAWMODE)
+#define L_Charset (use_assume_charset ? L_CHARSET + 1 : L_CHARSET)
+#define L_Color (use_assume_charset ? L_COLOR + 1 : L_COLOR)
+#define L_Keypad (use_assume_charset ? L_KEYPAD + 1 : L_KEYPAD)
+#define L_Lineed (use_assume_charset ? L_LINEED + 1 : L_LINEED)
+#define L_Layout (use_assume_charset ? L_LAYOUT + 1 : L_LAYOUT)
+#define L_Dired (use_assume_charset ? L_DIRED + 1 : L_DIRED)
+#define L_User_Mode (use_assume_charset ? L_USER_MODE + 1 : L_USER_MODE)
#define L_User_Agent (use_assume_charset ? L_USER_AGENT + 1 : L_USER_AGENT)
#define LPAREN '('
@@ -123,13 +210,13 @@ PRIVATE int add_it ARGS2(char *, text, int, len)
{
if (len) {
text[len] = '\0';
- addstr(text);
+ LYaddstr(text);
}
return 0;
}
/*
- * addlbl() is used instead of plain addstr() in old-style options menu
+ * addlbl() is used instead of plain LYaddstr() in old-style options menu
* to show hot keys in bold.
*/
PRIVATE void addlbl ARGS1(CONST char *, text)
@@ -156,11 +243,78 @@ PRIVATE void addlbl ARGS1(CONST char *, text)
stop_bold();
}
+#if !defined(VMS) || defined(USE_SLANG)
+#define HANDLE_LYOPTIONS \
+ if (term_options) { \
+ term_options = FALSE; \
+ } else { \
+ AddValueAccepted = TRUE; \
+ } \
+ goto draw_options
+#else
+#define HANDLE_LYOPTIONS \
+ term_options = FALSE; \
+ if (use_assume_charset != old_use_assume_charset) \
+ goto draw_options
+#endif /* !VMS || USE_SLANG */
+
PUBLIC void LYoptions NOARGS
{
-#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS
+#define ShowBool(value) LYaddstr((value) ? "ON " : "OFF")
+ static char *bool_choices[] = {
+ "OFF",
+ "ON",
+ NULL
+ };
+ static char *caseless_choices[] = {
+ "CASE INSENSITIVE",
+ "CASE SENSITIVE",
+ NULL
+ };
+ static char *dirList_choices[] = {
+ "Directories first",
+ "Files first",
+ "Mixed style",
+ NULL
+ };
+#if defined(ENABLE_OPTS_CHANGE_EXEC) && (defined(EXEC_LINKS) || defined(EXEC_SCRIPTS))
+ static char *exec_choices[] = {
+ "ALWAYS OFF",
+ "FOR LOCAL FILES ONLY",
+#ifndef NEVER_ALLOW_REMOTE_EXEC
+ "ALWAYS ON",
+#endif /* !NEVER_ALLOW_REMOTE_EXEC */
+ NULL
+ };
+#endif
+ static char *fileSort_choices[] = {
+ "By Filename",
+ "By Type",
+ "By Size",
+ "By Date",
+ NULL
+ };
+ static char *keypad_choices[] = {
+ "Numbers act as arrows",
+ "Links are numbered",
+ "Links and form fields are numbered",
+ NULL
+ };
+ static char *mbm_choices[] = {
+ "OFF ",
+ "STANDARD",
+ "ADVANCED",
+ NULL
+ };
+ static char *userMode_choices[] = {
+ "Novice",
+ "Intermediate",
+ "Advanced",
+ NULL
+ };
+#if defined(ENABLE_OPTS_CHANGE_EXEC) && (defined(EXEC_LINKS) || defined(EXEC_SCRIPTS))
int itmp;
-#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
+#endif /* ENABLE_OPTS_CHANGE_EXEC */
int response, ch;
/*
* If the user changes the display we need memory to put it in.
@@ -176,7 +330,7 @@ PUBLIC void LYoptions NOARGS
BOOL use_assume_charset, old_use_assume_charset;
#ifdef DIRED_SUPPORT
-#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS
+#ifdef ENABLE_OPTS_CHANGE_EXEC
if (LYlines < 24) {
HTAlert(OPTION_SCREEN_NEEDS_24);
return;
@@ -186,9 +340,9 @@ PUBLIC void LYoptions NOARGS
HTAlert(OPTION_SCREEN_NEEDS_23);
return;
}
-#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
+#endif /* ENABLE_OPTS_CHANGE_EXEC */
#else
-#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS
+#ifdef ENABLE_OPTS_CHANGE_EXEC
if (LYlines < 23) {
HTAlert(OPTION_SCREEN_NEEDS_23);
return;
@@ -198,7 +352,7 @@ PUBLIC void LYoptions NOARGS
HTAlert(OPTION_SCREEN_NEEDS_22);
return;
}
-#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
+#endif /* ENABLE_OPTS_CHANGE_EXEC */
#endif /* DIRED_SUPPORT */
term_options = FALSE;
@@ -212,37 +366,12 @@ PUBLIC void LYoptions NOARGS
}
#if defined(USE_SLANG) || defined(COLOR_CURSES)
} else {
- if (LYChosenShowColor == SHOW_COLOR_UNKNOWN) {
- switch (LYrcShowColor) {
- case SHOW_COLOR_NEVER:
- LYChosenShowColor =
- (LYShowColor >= SHOW_COLOR_ON) ?
- SHOW_COLOR_ON :
- SHOW_COLOR_NEVER;
- break;
- case SHOW_COLOR_ALWAYS:
-#if defined(COLOR_CURSES)
- if (!has_colors())
- LYChosenShowColor = SHOW_COLOR_ALWAYS;
- else
-#endif
- LYChosenShowColor =
- (LYShowColor >= SHOW_COLOR_ON) ?
- SHOW_COLOR_ALWAYS :
- SHOW_COLOR_OFF;
- break;
- default:
- LYChosenShowColor =
- (LYShowColor >= SHOW_COLOR_ON) ?
- SHOW_COLOR_ON :
- SHOW_COLOR_OFF;
- }
- }
+ SetupChosenShowColor();
#endif /* USE_SLANG || COLOR_CURSES */
}
old_use_assume_charset =
- use_assume_charset = (user_mode == ADVANCED_MODE);
+ use_assume_charset = (BOOL) (user_mode == ADVANCED_MODE);
draw_options:
@@ -251,266 +380,261 @@ draw_options:
* NOTE that printw() should be avoided for strings that
* might have non-ASCII or multibyte/CJK characters. - FM
*/
- response = 0;
#if defined(FANCY_CURSES) || defined (USE_SLANG)
if (enable_scrollback) {
- clear();
+ LYclear();
} else {
- erase();
+ LYerase();
}
#else
- clear();
+ LYclear();
#endif /* FANCY_CURSES || USE_SLANG */
- move(0, 5);
+ LYmove(0, 5);
lynx_start_h1_color ();
- addstr(" Options Menu (");
- addstr(LYNX_NAME);
- addstr(" Version ");
- addstr(LYNX_VERSION);
- addch(')');
+ LYaddstr(" Options Menu (");
+ LYaddstr(LYNX_NAME);
+ LYaddstr(" Version ");
+ LYaddstr(LYNX_VERSION);
+ LYaddch(')');
lynx_stop_h1_color ();
- move(L_EDITOR, 5);
+ LYmove(L_EDITOR, 5);
addlbl("(E)ditor : ");
- addstr((editor && *editor) ? editor : "NONE");
+ LYaddstr((editor && *editor) ? editor : "NONE");
- move(L_DISPLAY, 5);
+ LYmove(L_DISPLAY, 5);
addlbl("(D)ISPLAY variable : ");
- addstr((x_display && *x_display) ? x_display : "NONE");
+ LYaddstr((x_display && *x_display) ? x_display : "NONE");
- move(L_HOME, 5);
+ LYmove(L_HOME, 5);
addlbl("mu(L)ti-bookmarks: ");
- addstr((LYMultiBookmarks ?
- (LYMBMAdvanced ? "ADVANCED"
- : "STANDARD")
- : "OFF "));
- move(L_HOME, B_BOOK);
- if (LYMultiBookmarks) {
+ LYaddstr(mbm_choices[LYMultiBookmarks]);
+ LYmove(L_HOME, B_BOOK);
+ if (LYMultiBookmarks != MBM_OFF) {
addlbl("review/edit (B)ookmarks files");
} else {
addlbl("(B)ookmark file: ");
- addstr((bookmark_page && *bookmark_page) ? bookmark_page : "NONE");
+ LYaddstr((bookmark_page && *bookmark_page) ? bookmark_page : "NONE");
}
- move(L_FTPSTYPE, 5);
+ LYmove(L_FTPSTYPE, 5);
addlbl("(F)TP sort criteria : ");
- addstr((HTfileSortMethod == FILE_BY_NAME ? "By Filename" :
+ LYaddstr((HTfileSortMethod == FILE_BY_NAME ? "By Filename" :
(HTfileSortMethod == FILE_BY_SIZE ? "By Size " :
(HTfileSortMethod == FILE_BY_TYPE ? "By Type " :
"By Date "))));
- move(L_MAIL_ADDRESS, 5);
+ LYmove(L_MAIL_ADDRESS, 5);
addlbl("(P)ersonal mail address : ");
- addstr((personal_mail_address && *personal_mail_address) ?
+ LYaddstr((personal_mail_address && *personal_mail_address) ?
personal_mail_address : "NONE");
- move(L_SSEARCH, 5);
+ LYmove(L_SSEARCH, 5);
addlbl("(S)earching type : ");
- addstr(case_sensitive ? "CASE SENSITIVE " : "CASE INSENSITIVE");
+ LYaddstr(case_sensitive ? "CASE SENSITIVE " : "CASE INSENSITIVE");
- move(L_Charset, 5);
+ LYmove(L_Charset, 5);
addlbl("display (C)haracter set : ");
- addstr((char *)LYchar_set_names[current_char_set]);
+ LYaddstr(LYchar_set_names[current_char_set]);
- move(L_LANGUAGE, 5);
+ LYmove(L_LANGUAGE, 5);
addlbl("preferred document lan(G)uage: ");
- addstr((language && *language) ? language : "NONE");
+ LYaddstr((language && *language) ? language : "NONE");
- move(L_PREF_CHARSET, 5);
+ LYmove(L_PREF_CHARSET, 5);
addlbl("preferred document c(H)arset : ");
- addstr((pref_charset && *pref_charset) ? pref_charset : "NONE");
+ LYaddstr((pref_charset && *pref_charset) ? pref_charset : "NONE");
if (use_assume_charset) {
- move(L_ASSUME_CHARSET, 5);
+ LYmove(L_ASSUME_CHARSET, 5);
addlbl("(^A)ssume charset if unknown : ");
if (UCAssume_MIMEcharset)
- addstr(UCAssume_MIMEcharset);
+ LYaddstr(UCAssume_MIMEcharset);
else
- addstr((UCLYhndl_for_unspec >= 0) ?
- (char *)LYCharSet_UC[UCLYhndl_for_unspec].MIMEname
+ LYaddstr((UCLYhndl_for_unspec >= 0) ?
+ LYCharSet_UC[UCLYhndl_for_unspec].MIMEname
: "NONE");
}
- move(L_Rawmode, 5);
+ LYmove(L_Rawmode, 5);
addlbl("Raw 8-bit or CJK m(O)de : ");
- addstr(LYRawMode ? "ON " : "OFF");
+ ShowBool(LYRawMode);
#if defined(USE_SLANG) || defined(COLOR_CURSES)
- move(L_Color, B_COLOR);
+ LYmove(L_Color, B_COLOR);
addlbl("show color (&) : ");
if (no_option_save) {
- addstr((LYShowColor == SHOW_COLOR_OFF ? "OFF" :
- "ON "));
+ ShowBool(LYShowColor == SHOW_COLOR_OFF);
} else {
switch (LYChosenShowColor) {
case SHOW_COLOR_NEVER:
- addstr("NEVER ");
+ LYaddstr("NEVER ");
break;
case SHOW_COLOR_OFF:
- addstr("OFF");
+ LYaddstr("OFF");
break;
case SHOW_COLOR_ON:
- addstr("ON ");
+ LYaddstr("ON ");
break;
case SHOW_COLOR_ALWAYS:
#if defined(COLOR_CURSES)
if (!has_colors())
- addstr("Always try");
+ LYaddstr("Always try");
else
#endif
- addstr("ALWAYS ");
+ LYaddstr("ALWAYS ");
}
}
#endif /* USE_SLANG || COLOR_CURSES */
- move(L_Bool_A, B_VIKEYS);
+ LYmove(L_Bool_A, B_VIKEYS);
addlbl("(V)I keys: ");
- addstr(vi_keys ? "ON " : "OFF");
+ ShowBool(vi_keys);
- move(L_Bool_A, B_EMACSKEYS);
+ LYmove(L_Bool_A, B_EMACSKEYS);
addlbl("e(M)acs keys: ");
- addstr(emacs_keys ? "ON " : "OFF");
+ ShowBool(emacs_keys);
- move(L_Bool_A, B_SHOW_DOTFILES);
+ LYmove(L_Bool_A, B_SHOW_DOTFILES);
addlbl("sho(W) dot files: ");
- addstr((!no_dotfiles && show_dotfiles) ? "ON " : "OFF");
+ ShowBool(!no_dotfiles && show_dotfiles);
- move(L_Bool_B, B_SELECT_POPUPS);
+ LYmove(L_Bool_B, B_SELECT_POPUPS);
addlbl("popups for selec(T) fields : ");
- addstr(LYSelectPopups ? "ON " : "OFF");
+ ShowBool(LYSelectPopups);
- move(L_Bool_B, B_SHOW_CURSOR);
+ LYmove(L_Bool_B, B_SHOW_CURSOR);
addlbl("show cursor (@) : ");
- addstr(LYShowCursor ? "ON " : "OFF");
+ ShowBool(LYShowCursor);
- move(L_Keypad, 5);
+ LYmove(L_Keypad, 5);
addlbl("(K)eypad mode : ");
- addstr((keypad_mode == NUMBERS_AS_ARROWS) ?
+ LYaddstr((keypad_mode == NUMBERS_AS_ARROWS) ?
"Numbers act as arrows " :
((keypad_mode == LINKS_ARE_NUMBERED) ?
"Links are numbered " :
"Links and form fields are numbered"));
- move(L_Lineed, 5);
+ LYmove(L_Lineed, 5);
addlbl("li(N)e edit style : ");
- addstr(LYLineeditNames[current_lineedit]);
+ LYaddstr(LYLineeditNames[current_lineedit]);
#ifdef EXP_KEYBOARD_LAYOUT
- move(L_Layout, 5);
+ LYmove(L_Layout, 5);
addlbl("Ke(Y)board layout : ");
- addstr(LYKbLayoutNames[current_layout]);
+ LYaddstr(LYKbLayoutNames[current_layout]);
#endif
#ifdef DIRED_SUPPORT
- move(L_Dired, 5);
+ LYmove(L_Dired, 5);
addlbl("l(I)st directory style : ");
- addstr((dir_list_style == FILES_FIRST) ? "Files first " :
+ LYaddstr((dir_list_style == FILES_FIRST) ? "Files first " :
((dir_list_style == MIXED_STYLE) ? "Mixed style " :
"Directories first"));
#endif /* DIRED_SUPPORT */
- move(L_User_Mode, 5);
+ LYmove(L_User_Mode, 5);
addlbl("(U)ser mode : ");
- addstr( (user_mode == NOVICE_MODE) ? "Novice " :
+ LYaddstr( (user_mode == NOVICE_MODE) ? "Novice " :
((user_mode == INTERMEDIATE_MODE) ? "Intermediate" :
"Advanced "));
addlbl(" verbose images (!) : ");
- addstr( verbose_img ? "ON " : "OFF" );
+ ShowBool( verbose_img);
- move(L_User_Agent, 5);
+ LYmove(L_User_Agent, 5);
addlbl("user (A)gent : ");
- addstr((LYUserAgent && *LYUserAgent) ? LYUserAgent : "NONE");
+ LYaddstr((LYUserAgent && *LYUserAgent) ? LYUserAgent : "NONE");
-#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS
- move(L_Exec, 5);
+#if defined(ENABLE_OPTS_CHANGE_EXEC) && (defined(EXEC_LINKS) || defined(EXEC_SCRIPTS))
+ LYmove(L_Exec, 5);
addlbl("local e(X)ecution links : ");
#ifndef NEVER_ALLOW_REMOTE_EXEC
- addstr( local_exec ? "ALWAYS ON " :
+ LYaddstr( local_exec ? "ALWAYS ON " :
(local_exec_on_local_files ? "FOR LOCAL FILES ONLY" :
"ALWAYS OFF "));
#else
- addstr(local_exec_on_local_files ? "FOR LOCAL FILES ONLY" :
+ LYaddstr(local_exec_on_local_files ? "FOR LOCAL FILES ONLY" :
"ALWAYS OFF ");
#endif /* !NEVER_ALLOW_REMOTE_EXEC */
-#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
+#endif /* ENABLE_OPTS_CHANGE_EXEC */
- move(LYlines-3, 2);
- addstr(SELECT_SEGMENT);
+ LYmove(LYlines-3, 2);
+ LYaddstr(SELECT_SEGMENT);
start_bold();
- addstr(CAP_LETT_SEGMENT);
+ LYaddstr(CAP_LETT_SEGMENT);
stop_bold();
- addstr(OF_OPT_LINE_SEGMENT);
+ LYaddstr(OF_OPT_LINE_SEGMENT);
if (!no_option_save) {
- addstr(" '");
+ LYaddstr(" '");
start_bold();
- addstr(">");
+ LYaddstr(">");
stop_bold();
- addstr("'");
- addstr(TO_SAVE_SEGMENT);
+ LYaddstr("'");
+ LYaddstr(TO_SAVE_SEGMENT);
}
- addstr(OR_SEGMENT);
- addstr("'");
+ LYaddstr(OR_SEGMENT);
+ LYaddstr("'");
start_bold();
- addstr("r");
+ LYaddstr("r");
stop_bold();
- addstr("'");
- addstr(TO_RETURN_SEGMENT);
+ LYaddstr("'");
+ LYaddstr(TO_RETURN_SEGMENT);
- while (TOUPPER(response) != 'R' &&
+ response = 0;
+ while (response != 'R' &&
!LYisNonAlnumKeyname(response, LYK_PREV_DOC) &&
response != '>' && !term_options &&
- response != 7 && response != 3) {
+ !LYCharIsINTERRUPT_NO_letter(response)) {
if (AddValueAccepted == TRUE) {
_statusline(VALUE_ACCEPTED);
AddValueAccepted = FALSE;
}
- move((LYlines - 2), 0);
+ LYmove((LYlines - 2), 0);
lynx_start_prompt_color ();
- addstr(COMMAND_PROMPT);
+ LYaddstr(COMMAND_PROMPT);
lynx_stop_prompt_color ();
- refresh();
- response = LYgetch();
- if (term_options || response == 7 || response == 3)
+ LYrefresh();
+ response = LYgetch_single();
+ if (term_options || LYCharIsINTERRUPT_NO_letter(response))
response = 'R';
if (LYisNonAlnumKeyname(response, LYK_REFRESH)) {
lynx_force_repaint();
goto draw_options;
}
switch (response) {
- case 'e': /* Change the editor. */
- case 'E':
+ case 'E': /* Change the editor. */
if (no_editor) {
_statusline(EDIT_DISABLED);
} else if (system_editor ) {
_statusline(EDITOR_LOCKED);
} else {
if (editor && *editor)
- strcpy(display_option, editor);
+ LYstrncpy(display_option, editor, sizeof(display_option) - 1);
else { /* clear the NONE */
- move(L_EDITOR, COL_OPTION_VALUES);
- addstr(" ");
+ LYmove(L_EDITOR, COL_OPTION_VALUES);
+ LYaddstr(" ");
*display_option = '\0';
}
_statusline(ACCEPT_DATA);
- move(L_EDITOR, COL_OPTION_VALUES);
+ LYmove(L_EDITOR, COL_OPTION_VALUES);
start_bold();
ch = LYgetstr(display_option, VISIBLE,
sizeof(display_option), NORECALL);
stop_bold();
- move(L_EDITOR, COL_OPTION_VALUES);
+ LYmove(L_EDITOR, COL_OPTION_VALUES);
if (term_options || ch == -1) {
- addstr((editor && *editor) ?
+ LYaddstr((editor && *editor) ?
editor : "NONE");
} else if (*display_option == '\0') {
FREE(editor);
- addstr("NONE");
+ LYaddstr("NONE");
} else {
StrAllocCopy(editor, display_option);
- addstr(display_option);
+ LYaddstr(display_option);
}
- clrtoeol();
+ LYclrtoeol();
if (ch == -1) {
HTInfoMsg(CANCELLED);
HTInfoMsg("");
@@ -521,36 +645,37 @@ draw_options:
response = ' ';
break;
- case 'd': /* Change the display. */
- case 'D':
+ case 'D': /* Change the display. */
if (x_display && *x_display) {
- strcpy(display_option, x_display);
+ LYstrncpy(display_option, x_display, sizeof(display_option) - 1);
} else { /* clear the NONE */
- move(L_DISPLAY, COL_OPTION_VALUES);
- addstr(" ");
+ LYmove(L_DISPLAY, COL_OPTION_VALUES);
+ LYaddstr(" ");
*display_option = '\0';
}
_statusline(ACCEPT_DATA);
- move(L_DISPLAY, COL_OPTION_VALUES);
+ LYmove(L_DISPLAY, COL_OPTION_VALUES);
start_bold();
ch = LYgetstr(display_option, VISIBLE,
sizeof(display_option), NORECALL);
stop_bold();
- move(L_DISPLAY, COL_OPTION_VALUES);
- if ((term_options || ch == -1) ||
- (x_display != NULL &&
+ LYmove(L_DISPLAY, COL_OPTION_VALUES);
+
#ifdef VMS
- !strcasecomp(x_display, display_option)))
+#define CompareEnvVars(a,b) strcasecomp(a, b)
#else
- !strcmp(x_display, display_option)))
+#define CompareEnvVars(a,b) strcmp(a, b)
#endif /* VMS */
- {
+
+ if ((term_options || ch == -1) ||
+ (x_display != NULL &&
+ !CompareEnvVars(x_display, display_option))) {
/*
* Cancelled, or a non-NULL display string
* wasn't changed. - FM
*/
- addstr((x_display && *x_display) ? x_display : "NONE");
- clrtoeol();
+ LYaddstr((x_display && *x_display) ? x_display : "NONE");
+ LYclrtoeol();
if (ch == -1) {
HTInfoMsg(CANCELLED);
HTInfoMsg("");
@@ -566,8 +691,8 @@ draw_options:
* NULL or zero-length display string
* wasn't changed. - FM
*/
- addstr("NONE");
- clrtoeol();
+ LYaddstr("NONE");
+ LYclrtoeol();
_statusline(VALUE_ACCEPTED);
response = ' ';
break;
@@ -577,152 +702,100 @@ draw_options:
* Set the new DISPLAY variable. - FM
*/
LYsetXDisplay(display_option);
- if ((cp = LYgetXDisplay()) != NULL) {
- StrAllocCopy(x_display, cp);
- } else {
- FREE(x_display);
- }
+ validate_x_display();
cp = NULL;
- addstr(x_display ? x_display : "NONE");
- clrtoeol();
- if ((x_display == NULL && *display_option == '\0') ||
- (x_display != NULL &&
- !strcmp(x_display, display_option))) {
- if (x_display == NULL &&
- LYisConfiguredForX == TRUE) {
- _statusline(VALUE_ACCEPTED_WARNING_X);
- } else if (x_display != NULL &&
- LYisConfiguredForX == FALSE) {
- _statusline(VALUE_ACCEPTED_WARNING_NONX);
- } else {
- _statusline(VALUE_ACCEPTED);
- }
- } else {
- if (*display_option) {
- _statusline(FAILED_TO_SET_DISPLAY);
- } else {
- _statusline(FAILED_CLEAR_SET_DISPLAY);
- }
- }
+ LYaddstr(x_display ? x_display : "NONE");
+ LYclrtoeol();
+ summarize_x_display(display_option);
response = ' ';
break;
- case 'l': /* Change multibookmarks option. */
- case 'L':
+ case 'L': /* Change multibookmarks option. */
if (LYMBMBlocked) {
_statusline(MULTIBOOKMARKS_DISALLOWED);
response = ' ';
break;
}
- choices[0] = NULL;
- StrAllocCopy(choices[0], "OFF ");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "STANDARD");
- choices[2] = NULL;
- StrAllocCopy(choices[2], "ADVANCED");
- choices[3] = NULL;
if (!LYSelectPopups) {
- LYMultiBookmarks = boolean_choice((LYMultiBookmarks *
- (1 + LYMBMAdvanced)),
+ LYMultiBookmarks = LYChooseBoolean(LYMultiBookmarks,
L_HOME, C_MULTI,
- choices);
+ mbm_choices);
} else {
- LYMultiBookmarks = popup_choice((LYMultiBookmarks *
- (1 + LYMBMAdvanced)),
+ LYMultiBookmarks = LYChoosePopup(LYMultiBookmarks,
L_HOME, (C_MULTI - 1),
- choices,
- 3, FALSE);
- }
- if (LYMultiBookmarks == 2) {
- LYMultiBookmarks = TRUE;
- LYMBMAdvanced = TRUE;
- } else {
- LYMBMAdvanced = FALSE;
+ mbm_choices,
+ 3, FALSE, FALSE);
}
#if defined(VMS) || defined(USE_SLANG)
if (LYSelectPopups) {
- move(L_HOME, C_MULTI);
- clrtoeol();
- addstr(choices[(LYMultiBookmarks * (1 + LYMBMAdvanced))]);
+ LYmove(L_HOME, C_MULTI);
+ LYclrtoeol();
+ LYaddstr(mbm_choices[LYMultiBookmarks]);
}
#endif /* VMS || USE_SLANG */
- FREE(choices[0]);
- FREE(choices[1]);
- FREE(choices[2]);
#if !defined(VMS) && !defined(USE_SLANG)
if (!LYSelectPopups)
#endif /* !VMS && !USE_SLANG */
{
- move(L_HOME, B_BOOK);
- clrtoeol();
- if (LYMultiBookmarks) {
- addstr(gettext("review/edit B)ookmarks files"));
+ LYmove(L_HOME, B_BOOK);
+ LYclrtoeol();
+ if (LYMultiBookmarks != MBM_OFF) {
+ LYaddstr(gettext("review/edit B)ookmarks files"));
} else {
- addstr(gettext("B)ookmark file: "));
- addstr((bookmark_page && *bookmark_page) ?
+ LYaddstr(gettext("B)ookmark file: "));
+ LYaddstr((bookmark_page && *bookmark_page) ?
bookmark_page : "NONE");
}
}
response = ' ';
if (LYSelectPopups) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
break;
- case 'b': /* Change the bookmark page location. */
- case 'B':
+ case 'B': /* Change the bookmark page location. */
/*
* Anonymous users should not be allowed to
* change the bookmark page.
*/
if (!no_bookmark) {
- if (LYMultiBookmarks) {
+ if (LYMultiBookmarks != MBM_OFF) {
edit_bookmarks();
signal(SIGINT, terminate_options);
goto draw_options;
}
if (bookmark_page && *bookmark_page) {
- strcpy(display_option, bookmark_page);
+ LYstrncpy(display_option, bookmark_page, sizeof(display_option) - 1);
} else { /* clear the NONE */
- move(L_HOME, C_DEFAULT);
- clrtoeol();
+ LYmove(L_HOME, C_DEFAULT);
+ LYclrtoeol();
*display_option = '\0';
}
_statusline(ACCEPT_DATA);
- move(L_HOME, C_DEFAULT);
+ LYmove(L_HOME, C_DEFAULT);
start_bold();
ch = LYgetstr(display_option, VISIBLE,
sizeof(display_option), NORECALL);
stop_bold();
- move(L_HOME, C_DEFAULT);
+ LYmove(L_HOME, C_DEFAULT);
if (term_options ||
ch == -1 || *display_option == '\0') {
- addstr((bookmark_page && *bookmark_page) ?
+ LYaddstr((bookmark_page && *bookmark_page) ?
bookmark_page : "NONE");
} else if (!LYPathOffHomeOK(display_option,
sizeof(display_option))) {
- addstr((bookmark_page && *bookmark_page) ?
+ LYaddstr((bookmark_page && *bookmark_page) ?
bookmark_page : "NONE");
- clrtoeol();
+ LYclrtoeol();
_statusline(USE_PATH_OFF_HOME);
response = ' ';
break;
} else {
StrAllocCopy(bookmark_page, display_option);
- StrAllocCopy(MBM_A_subbookmark[0],
- bookmark_page);
- addstr(bookmark_page);
+ StrAllocCopy(MBM_A_subbookmark[0], bookmark_page);
+ LYaddstr(bookmark_page);
}
- clrtoeol();
+ LYclrtoeol();
if (ch == -1) {
HTInfoMsg(CANCELLED);
HTInfoMsg("");
@@ -735,82 +808,55 @@ draw_options:
response = ' ';
break;
- case 'f': /* Change ftp directory sorting. */
- case 'F': /* (also local for non-DIRED) */
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "By Filename");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "By Type ");
- choices[2] = NULL;
- StrAllocCopy(choices[2], "By Size ");
- choices[3] = NULL;
- StrAllocCopy(choices[3], "By Date ");
- choices[4] = NULL;
+ case 'F': /* Change ftp directory sorting. */
if (!LYSelectPopups) {
- HTfileSortMethod = boolean_choice(HTfileSortMethod,
+ HTfileSortMethod = LYChooseBoolean(HTfileSortMethod,
L_FTPSTYPE, -1,
- choices);
+ fileSort_choices);
} else {
- HTfileSortMethod = popup_choice(HTfileSortMethod,
+ HTfileSortMethod = LYChoosePopup(HTfileSortMethod,
L_FTPSTYPE, -1,
- choices,
- 4, FALSE);
+ fileSort_choices,
+ 4, FALSE, FALSE);
#if defined(VMS) || defined(USE_SLANG)
- move(L_FTPSTYPE, COL_OPTION_VALUES);
- clrtoeol();
- addstr(choices[HTfileSortMethod]);
+ LYmove(L_FTPSTYPE, COL_OPTION_VALUES);
+ LYclrtoeol();
+ LYaddstr(fileSort_choices[HTfileSortMethod]);
#endif /* VMS || USE_SLANG */
}
- FREE(choices[0]);
- FREE(choices[1]);
- FREE(choices[2]);
- FREE(choices[3]);
response = ' ';
if (LYSelectPopups) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
break;
- case 'p': /* Change personal mail address for From headers. */
- case 'P':
+ case 'P': /* Change personal mail address for From headers. */
if (personal_mail_address && *personal_mail_address) {
- strcpy(display_option, personal_mail_address);
+ LYstrncpy(display_option, personal_mail_address, sizeof(display_option) - 1);
} else { /* clear the NONE */
- move(L_MAIL_ADDRESS, COL_OPTION_VALUES);
- addstr(" ");
+ LYmove(L_MAIL_ADDRESS, COL_OPTION_VALUES);
+ LYaddstr(" ");
*display_option = '\0';
}
_statusline(ACCEPT_DATA);
- move(L_MAIL_ADDRESS, COL_OPTION_VALUES);
+ LYmove(L_MAIL_ADDRESS, COL_OPTION_VALUES);
start_bold();
ch = LYgetstr(display_option, VISIBLE,
sizeof(display_option), NORECALL);
stop_bold();
- move(L_MAIL_ADDRESS, COL_OPTION_VALUES);
+ LYmove(L_MAIL_ADDRESS, COL_OPTION_VALUES);
if (term_options || ch == -1) {
- addstr((personal_mail_address &&
+ LYaddstr((personal_mail_address &&
*personal_mail_address) ?
personal_mail_address : "NONE");
} else if (*display_option == '\0') {
FREE(personal_mail_address);
- addstr("NONE");
+ LYaddstr("NONE");
} else {
StrAllocCopy(personal_mail_address, display_option);
- addstr(display_option);
+ LYaddstr(display_option);
}
- clrtoeol();
+ LYclrtoeol();
if (ch == -1) {
HTInfoMsg(CANCELLED);
HTInfoMsg("");
@@ -820,33 +866,23 @@ draw_options:
response = ' ';
break;
- case 's': /* Change case sensitivity for searches. */
- case 'S':
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "CASE INSENSITIVE");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "CASE SENSITIVE ");
- choices[2] = NULL;
- case_sensitive = boolean_choice(case_sensitive,
- L_SSEARCH, -1, choices);
- FREE(choices[0]);
- FREE(choices[1]);
+ case 'S': /* Change case sensitivity for searches. */
+ case_sensitive = LYChooseBoolean(case_sensitive,
+ L_SSEARCH, -1,
+ caseless_choices);
response = ' ';
break;
case '\001': /* Change assume_charset setting. */
if (use_assume_charset) {
int i, curval;
- char ** assume_list;
- assume_list = (char **)calloc(LYNumCharsets + 1, sizeof(char *));
+ CONST char ** assume_list;
+ assume_list = typecallocn(CONST char *,(LYNumCharsets + 1));
if (!assume_list) {
outofmem(__FILE__, "options");
}
for (i = 0; i < LYNumCharsets; i++) {
- assume_list[i] = (char *)LYCharSet_UC[i].MIMEname;
+ assume_list[i] = LYCharSet_UC[i].MIMEname;
}
curval = UCLYhndl_for_unspec;
if (curval == current_char_set && UCAssume_MIMEcharset) {
@@ -855,20 +891,38 @@ draw_options:
if (curval < 0)
curval = LYRawMode ? current_char_set : 0;
if (!LYSelectPopups) {
- UCLYhndl_for_unspec = boolean_choice(curval,
+#ifndef ALL_CHARSETS_IN_O_MENU_SCREEN
+ UCLYhndl_for_unspec = assumed_doc_charset_map[
+ LYChooseBoolean(charset_subsets[curval].assumed_idx,
+ L_ASSUME_CHARSET, -1,
+ assumed_charset_choices)
+ ? 1
+ : 0];
+#else
+ UCLYhndl_for_unspec = LYChooseBoolean(curval,
L_ASSUME_CHARSET, -1,
assume_list);
+#endif
} else {
- UCLYhndl_for_unspec = popup_choice(curval,
+#ifndef ALL_CHARSETS_IN_O_MENU_SCREEN
+ UCLYhndl_for_unspec = assumed_doc_charset_map[
+ LYChoosePopup(charset_subsets[curval].assumed_idx,
+ L_ASSUME_CHARSET, -1,
+ assumed_charset_choices,
+ 0, FALSE, FALSE)
+ ? 1
+ : 0];
+#else
+ UCLYhndl_for_unspec = LYChoosePopup(curval,
L_ASSUME_CHARSET, -1,
assume_list,
- 0, FALSE);
+ 0, FALSE, FALSE);
+#endif
#if defined(VMS) || defined(USE_SLANG)
- move(L_ASSUME_CHARSET, COL_OPTION_VALUES);
- clrtoeol();
+ LYmove(L_ASSUME_CHARSET, COL_OPTION_VALUES);
+ LYclrtoeol();
if (UCLYhndl_for_unspec >= 0)
- addstr((char *)
- LYCharSet_UC[UCLYhndl_for_unspec].MIMEname);
+ LYaddstr(LYCharSet_UC[UCLYhndl_for_unspec].MIMEname);
#endif /* VMS || USE_SLANG */
}
@@ -882,7 +936,8 @@ draw_options:
StrAllocCopy(UCAssume_MIMEcharset,
LYCharSet_UC[UCLYhndl_for_unspec].MIMEname);
}
- LYRawMode = (UCLYhndl_for_unspec == current_char_set);
+ if (HTCJK != JAPANESE)
+ LYRawMode = (BOOL) (UCLYhndl_for_unspec == current_char_set);
HTMLSetUseDefaultRawMode(current_char_set, LYRawMode);
HTMLSetCharacterHandling(current_char_set);
CurrentAssumeCharSet = UCLYhndl_for_unspec;
@@ -891,24 +946,15 @@ draw_options:
if (!LYSelectPopups)
#endif /* !VMS && !USE_SLANG */
{
- move(L_Rawmode, COL_OPTION_VALUES);
- clrtoeol();
- addstr(LYRawMode ? "ON " : "OFF");
+ LYmove(L_Rawmode, COL_OPTION_VALUES);
+ LYclrtoeol();
+ ShowBool(LYRawMode);
}
}
FREE(assume_list);
response = ' ';
if (LYSelectPopups) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
} else {
_statusline(NEED_ADVANCED_USER_MODE);
@@ -916,21 +962,36 @@ draw_options:
}
break;
- case 'c': /* Change display charset setting. */
- case 'C':
+ case 'C': /* Change display charset setting. */
if (!LYSelectPopups) {
- current_char_set = boolean_choice(current_char_set,
+#ifndef ALL_CHARSETS_IN_O_MENU_SCREEN
+ displayed_display_charset_idx = LYChooseBoolean(displayed_display_charset_idx,
L_Charset, -1,
- (char **)LYchar_set_names);
+ display_charset_choices);
+ current_char_set = display_charset_map[displayed_display_charset_idx];
+#else
+ current_char_set = LYChooseBoolean(current_char_set,
+ L_Charset, -1,
+ LYchar_set_names);
+#endif
} else {
- current_char_set = popup_choice(current_char_set,
+#ifndef ALL_CHARSETS_IN_O_MENU_SCREEN
+ displayed_display_charset_idx = LYChoosePopup(displayed_display_charset_idx,
L_Charset, -1,
- (char **)LYchar_set_names,
- 0, FALSE);
+ display_charset_choices,
+ 0, FALSE, FALSE);
+ current_char_set = display_charset_map[displayed_display_charset_idx];
+#else
+ current_char_set = LYChoosePopup(current_char_set,
+ L_Charset, -1,
+ LYchar_set_names,
+ 0, FALSE, FALSE);
+#endif
+
#if defined(VMS) || defined(USE_SLANG)
- move(L_Charset, COL_OPTION_VALUES);
- clrtoeol();
- addstr((char *)LYchar_set_names[current_char_set]);
+ LYmove(L_Charset, COL_OPTION_VALUES);
+ LYclrtoeol();
+ LYaddstr(LYchar_set_names[current_char_set]);
#endif /* VMS || USE_SLANG */
}
/*
@@ -946,37 +1007,25 @@ draw_options:
if (!LYSelectPopups)
#endif /* !VMS && !USE_SLANG */
{
- move(L_Rawmode, COL_OPTION_VALUES);
- clrtoeol();
- addstr(LYRawMode ? "ON " : "OFF");
+ LYmove(L_Rawmode, COL_OPTION_VALUES);
+ LYclrtoeol();
+ ShowBool(LYRawMode);
}
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+ /* Deduce whether the user wants autoswitch: */
+ switch_display_charsets =
+ (current_char_set == auto_display_charset
+ || current_char_set == auto_other_display_charset);
+#endif
}
response = ' ';
if (LYSelectPopups) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
break;
- case 'o': /* Change raw mode setting. */
- case 'O':
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "OFF");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "ON ");
- choices[2] = NULL;
- LYRawMode = boolean_choice(LYRawMode, L_Rawmode, -1, choices);
+ case 'O': /* Change raw mode setting. */
+ LYRawMode = LYChooseBoolean(LYRawMode, L_Rawmode, -1, bool_choices);
/*
* Set the LYUseDefaultRawMode value and character
* handling if LYRawMode was changed. - FM
@@ -986,38 +1035,35 @@ draw_options:
HTMLSetCharacterHandling(current_char_set);
CurrentRawMode = LYRawMode;
}
- FREE(choices[0]);
- FREE(choices[1]);
response = ' ';
break;
- case 'g': /* Change language preference. */
- case 'G':
+ case 'G': /* Change language preference. */
if (language && *language) {
- strcpy(display_option, language);
+ LYstrncpy(display_option, language, sizeof(display_option) - 1);
} else { /* clear the NONE */
- move(L_LANGUAGE, COL_OPTION_VALUES);
- addstr(" ");
+ LYmove(L_LANGUAGE, COL_OPTION_VALUES);
+ LYaddstr(" ");
*display_option = '\0';
}
_statusline(ACCEPT_DATA);
- move(L_LANGUAGE, COL_OPTION_VALUES);
+ LYmove(L_LANGUAGE, COL_OPTION_VALUES);
start_bold();
ch = LYgetstr(display_option, VISIBLE,
sizeof(display_option), NORECALL);
stop_bold();
- move(L_LANGUAGE, COL_OPTION_VALUES);
+ LYmove(L_LANGUAGE, COL_OPTION_VALUES);
if (term_options || ch == -1) {
- addstr((language && *language) ?
+ LYaddstr((language && *language) ?
language : "NONE");
} else if (*display_option == '\0') {
FREE(language);
- addstr("NONE");
+ LYaddstr("NONE");
} else {
StrAllocCopy(language, display_option);
- addstr(display_option);
+ LYaddstr(display_option);
}
- clrtoeol();
+ LYclrtoeol();
if (ch == -1) {
HTInfoMsg(CANCELLED);
HTInfoMsg("");
@@ -1027,33 +1073,32 @@ draw_options:
response = ' ';
break;
- case 'h': /* Change charset preference. */
- case 'H':
+ case 'H': /* Change charset preference. */
if (pref_charset && *pref_charset) {
- strcpy(display_option, pref_charset);
+ LYstrncpy(display_option, pref_charset, sizeof(display_option) - 1);
} else { /* clear the NONE */
- move(L_PREF_CHARSET, COL_OPTION_VALUES);
- addstr(" ");
+ LYmove(L_PREF_CHARSET, COL_OPTION_VALUES);
+ LYaddstr(" ");
*display_option = '\0';
}
_statusline(ACCEPT_DATA);
- move(L_PREF_CHARSET, COL_OPTION_VALUES);
+ LYmove(L_PREF_CHARSET, COL_OPTION_VALUES);
start_bold();
ch = LYgetstr(display_option, VISIBLE,
sizeof(display_option), NORECALL);
stop_bold();
- move(L_PREF_CHARSET, COL_OPTION_VALUES);
+ LYmove(L_PREF_CHARSET, COL_OPTION_VALUES);
if (term_options || ch == -1) {
- addstr((pref_charset && *pref_charset) ?
+ LYaddstr((pref_charset && *pref_charset) ?
pref_charset : "NONE");
} else if (*display_option == '\0') {
FREE(pref_charset);
- addstr("NONE");
+ LYaddstr("NONE");
} else {
StrAllocCopy(pref_charset, display_option);
- addstr(display_option);
+ LYaddstr(display_option);
}
- clrtoeol();
+ LYclrtoeol();
if (ch == -1) {
HTInfoMsg(CANCELLED);
HTInfoMsg("");
@@ -1063,91 +1108,47 @@ draw_options:
response = ' ';
break;
- case 'v': /* Change VI keys setting. */
- case 'V':
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "OFF");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "ON ");
- choices[2] = NULL;
- vi_keys = boolean_choice(vi_keys,
+ case 'V': /* Change VI keys setting. */
+ vi_keys = LYChooseBoolean(vi_keys,
L_Bool_A, C_VIKEYS,
- choices);
+ bool_choices);
if (vi_keys) {
set_vi_keys();
} else {
reset_vi_keys();
}
- FREE(choices[0]);
- FREE(choices[1]);
response = ' ';
break;
case 'M': /* Change emacs keys setting. */
- case 'm':
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "OFF");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "ON ");
- choices[2] = NULL;
- emacs_keys = boolean_choice(emacs_keys,
+ emacs_keys = LYChooseBoolean(emacs_keys,
L_Bool_A, C_EMACSKEYS,
- choices);
+ bool_choices);
if (emacs_keys) {
set_emacs_keys();
} else {
reset_emacs_keys();
}
- FREE(choices[0]);
- FREE(choices[1]);
response = ' ';
break;
case 'W': /* Change show dotfiles setting. */
- case 'w':
if (no_dotfiles) {
_statusline(DOTFILE_ACCESS_DISABLED);
} else {
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "OFF");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "ON ");
- choices[2] = NULL;
- show_dotfiles = boolean_choice(show_dotfiles,
+ show_dotfiles = LYChooseBoolean(show_dotfiles,
L_Bool_A,
C_SHOW_DOTFILES,
- choices);
- FREE(choices[0]);
- FREE(choices[1]);
+ bool_choices);
}
response = ' ';
break;
- case 't': /* Change select popups setting. */
- case 'T':
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "OFF");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "ON ");
- choices[2] = NULL;
- LYSelectPopups = boolean_choice(LYSelectPopups,
+ case 'T': /* Change select popups setting. */
+ LYSelectPopups = LYChooseBoolean(LYSelectPopups,
L_Bool_B,
C_SELECT_POPUPS,
- choices);
- FREE(choices[0]);
- FREE(choices[1]);
+ bool_choices);
response = ' ';
break;
@@ -1163,20 +1164,13 @@ draw_options:
terminal);
else
HTUserMsg(COLOR_TOGGLE_DISABLED);
+ break;
}
#endif
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "OFF");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "ON ");
- choices[2] = NULL;
- LYShowColor = boolean_choice((LYShowColor - 1),
+ LYShowColor = LYChooseBoolean((LYShowColor - 1),
L_Color,
C_COLOR,
- choices);
+ bool_choices);
if (LYShowColor == 0) {
LYShowColor = SHOW_COLOR_OFF;
} else {
@@ -1185,9 +1179,9 @@ draw_options:
} else { /* !no_option_save */
BOOLEAN again = FALSE;
int chosen;
- /*
- * Copy strings into choice array.
- */
+ /*
+ * Copy strings into choice array.
+ */
choices[0] = NULL;
StrAllocCopy(choices[0], "NEVER ");
choices[1] = NULL;
@@ -1204,18 +1198,18 @@ draw_options:
choices[4] = NULL;
do {
if (!LYSelectPopups) {
- chosen = boolean_choice(LYChosenShowColor,
+ chosen = LYChooseBoolean(LYChosenShowColor,
L_Color,
C_COLOR,
choices);
} else {
- chosen = popup_choice(LYChosenShowColor,
+ chosen = LYChoosePopup(LYChosenShowColor,
L_Color,
C_COLOR,
- choices, 4, FALSE);
+ choices, 4, FALSE, FALSE);
}
#if defined(COLOR_CURSES)
- again = (chosen == 2 && !has_colors());
+ again = (BOOL) (chosen == 2 && !has_colors());
if (again) {
char * terminal = getenv("TERM");
if (terminal)
@@ -1230,20 +1224,20 @@ draw_options:
LYChosenShowColor = chosen;
#if defined(VMS)
if (LYSelectPopups) {
- move(L_Color, C_COLOR);
- clrtoeol();
- addstr(choices[LYChosenShowColor]);
+ LYmove(L_Color, C_COLOR);
+ LYclrtoeol();
+ LYaddstr(choices[LYChosenShowColor]);
}
#endif /* VMS */
#if defined(COLOR_CURSES)
if (has_colors())
#endif
LYShowColor = chosen;
+ FREE(choices[0]);
+ FREE(choices[1]);
FREE(choices[2]);
FREE(choices[3]);
}
- FREE(choices[0]);
- FREE(choices[1]);
if (CurrentShowColor != LYShowColor) {
lynx_force_repaint();
}
@@ -1253,66 +1247,33 @@ draw_options:
#endif
response = ' ';
if (LYSelectPopups && !no_option_save) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
break;
#endif /* USE_SLANG or COLOR_CURSES */
case '@': /* Change show cursor setting. */
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "OFF");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "ON ");
- choices[2] = NULL;
- LYShowCursor = boolean_choice(LYShowCursor,
+ LYShowCursor = LYChooseBoolean(LYShowCursor,
L_Bool_B,
C_SHOW_CURSOR,
- choices);
- FREE(choices[0]);
- FREE(choices[1]);
+ bool_choices);
response = ' ';
break;
- case 'k': /* Change keypad mode. */
- case 'K':
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0],
- "Numbers act as arrows ");
- choices[1] = NULL;
- StrAllocCopy(choices[1],
- "Links are numbered ");
- choices[2] = NULL;
- StrAllocCopy(choices[2],
- "Links and form fields are numbered");
- choices[3] = NULL;
+ case 'K': /* Change keypad mode. */
if (!LYSelectPopups) {
- keypad_mode = boolean_choice(keypad_mode,
+ keypad_mode = LYChooseBoolean(keypad_mode,
L_Keypad, -1,
- choices);
+ keypad_choices);
} else {
- keypad_mode = popup_choice(keypad_mode,
- L_Keypad, -1,
- choices,
- 3, FALSE);
+ keypad_mode = LYChoosePopup(keypad_mode,
+ L_Keypad, -1,
+ keypad_choices,
+ 3, FALSE, FALSE);
#if defined(VMS) || defined(USE_SLANG)
- move(L_Keypad, COL_OPTION_VALUES);
- clrtoeol();
- addstr(choices[keypad_mode]);
+ LYmove(L_Keypad, COL_OPTION_VALUES);
+ LYclrtoeol();
+ LYaddstr(keypad_choices[keypad_mode]);
#endif /* VMS || USE_SLANG */
}
if (keypad_mode == NUMBERS_AS_ARROWS) {
@@ -1320,171 +1281,102 @@ draw_options:
} else {
reset_numbers_as_arrows();
}
- FREE(choices[0]);
- FREE(choices[1]);
- FREE(choices[2]);
response = ' ';
if (LYSelectPopups) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
break;
- case 'n': /* Change line editor key bindings. */
- case 'N':
+ case 'N': /* Change line editor key bindings. */
if (!LYSelectPopups) {
- current_lineedit = boolean_choice(current_lineedit,
+ current_lineedit = LYChooseBoolean(current_lineedit,
L_Lineed, -1,
LYLineeditNames);
} else {
- current_lineedit = popup_choice(current_lineedit,
+ current_lineedit = LYChoosePopup(current_lineedit,
L_Lineed, -1,
LYLineeditNames,
- 0, FALSE);
+ 0, FALSE, FALSE);
#if defined(VMS) || defined(USE_SLANG)
- move(L_Lineed, COL_OPTION_VALUES);
- clrtoeol();
- addstr(LYLineeditNames[current_lineedit]);
+ LYmove(L_Lineed, COL_OPTION_VALUES);
+ LYclrtoeol();
+ LYaddstr(LYLineeditNames[current_lineedit]);
#endif /* VMS || USE_SLANG */
}
response = ' ';
if (LYSelectPopups) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
break;
#ifdef EXP_KEYBOARD_LAYOUT
- case 'y': /* Change keyboard layout */
- case 'Y':
+ case 'Y': /* Change keyboard layout */
if (!LYSelectPopups) {
- current_layout = boolean_choice(current_layout,
+ current_layout = LYChooseBoolean(current_layout,
L_Layout, -1,
LYKbLayoutNames);
} else {
- current_layout = popup_choice(current_layout,
+ current_layout = LYChoosePopup(current_layout,
L_Layout, -1,
LYKbLayoutNames,
- 0, FALSE);
+ 0, FALSE, FALSE);
#if defined(VMS) || defined(USE_SLANG)
- move(L_Layout, COL_OPTION_VALUES);
- clrtoeol();
- addstr(LYKbLayoutNames[current_layout]);
+ LYmove(L_Layout, COL_OPTION_VALUES);
+ LYclrtoeol();
+ LYaddstr(LYKbLayoutNames[current_layout]);
#endif /* VMS || USE_SLANG */
}
response = ' ';
if (LYSelectPopups) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
break;
#endif /* EXP_KEYBOARD_LAYOUT */
#ifdef DIRED_SUPPORT
- case 'i': /* Change local directory sorting. */
- case 'I':
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "Directories first");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "Files first ");
- choices[2] = NULL;
- StrAllocCopy(choices[2], "Mixed style ");
- choices[3] = NULL;
+ case 'I': /* Change local directory sorting. */
if (!LYSelectPopups) {
- dir_list_style = boolean_choice(dir_list_style,
+ dir_list_style = LYChooseBoolean(dir_list_style,
L_Dired, -1,
- choices);
+ dirList_choices);
} else {
- dir_list_style = popup_choice(dir_list_style,
+ dir_list_style = LYChoosePopup(dir_list_style,
L_Dired, -1,
- choices,
- 3, FALSE);
+ dirList_choices,
+ 3, FALSE, FALSE);
#if defined(VMS) || defined(USE_SLANG)
- move(L_Dired, COL_OPTION_VALUES);
- clrtoeol();
- addstr(choices[dir_list_style]);
+ LYmove(L_Dired, COL_OPTION_VALUES);
+ LYclrtoeol();
+ LYaddstr(dirList_choices[dir_list_style]);
#endif /* VMS || USE_SLANG */
}
- FREE(choices[0]);
- FREE(choices[1]);
- FREE(choices[2]);
response = ' ';
if (LYSelectPopups) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
break;
#endif /* DIRED_SUPPORT */
- case 'u': /* Change user mode. */
- case 'U':
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "Novice ");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "Intermediate");
- choices[2] = NULL;
- StrAllocCopy(choices[2], "Advanced ");
- choices[3] = NULL;
+ case 'U': /* Change user mode. */
if (!LYSelectPopups) {
- user_mode = boolean_choice(user_mode,
- L_User_Mode, -1,
- choices);
- use_assume_charset = (user_mode >= 2);
+ user_mode = LYChooseBoolean(user_mode,
+ L_User_Mode, -1,
+ userMode_choices);
+ use_assume_charset = (BOOL) (user_mode >= 2);
} else {
- user_mode = popup_choice(user_mode,
- L_User_Mode, -1,
- choices,
- 3, FALSE);
- use_assume_charset = (user_mode >= 2);
+ user_mode = LYChoosePopup(user_mode,
+ L_User_Mode, -1,
+ userMode_choices,
+ 3, FALSE, FALSE);
+ use_assume_charset = (BOOL) (user_mode >= 2);
#if defined(VMS) || defined(USE_SLANG)
if (use_assume_charset == old_use_assume_charset) {
- move(L_User_Mode, COL_OPTION_VALUES);
- clrtoeol();
- addstr(choices[user_mode]);
+ LYmove(L_User_Mode, COL_OPTION_VALUES);
+ LYclrtoeol();
+ LYaddstr(userMode_choices[user_mode]);
}
#endif /* VMS || USE_SLANG */
}
- FREE(choices[0]);
- FREE(choices[1]);
- FREE(choices[2]);
if (user_mode == NOVICE_MODE) {
display_lines = (LYlines - 4);
} else {
@@ -1492,111 +1384,75 @@ draw_options:
}
response = ' ';
if (LYSelectPopups) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
- if (use_assume_charset != old_use_assume_charset)
- goto draw_options;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
break;
case '!':
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "OFF");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "ON ");
- choices[2] = NULL;
if (!LYSelectPopups) {
- verbose_img = boolean_choice(verbose_img,
+ verbose_img = LYChooseBoolean(verbose_img,
L_VERBOSE_IMAGES,
C_VERBOSE_IMAGES,
- choices);
+ bool_choices);
} else {
- verbose_img = popup_choice(verbose_img,
+ verbose_img = LYChoosePopup(verbose_img,
L_VERBOSE_IMAGES,
C_VERBOSE_IMAGES,
- choices,
- 2, FALSE);
+ bool_choices,
+ 2, FALSE, FALSE);
}
- FREE(choices[0]);
- FREE(choices[1]);
response = ' ';
if (LYSelectPopups) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
- if (use_assume_charset != old_use_assume_charset)
- goto draw_options;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
break;
- case 'a': /* Change user agent string. */
- case 'A':
+ case 'A': /* Change user agent string. */
if (!no_useragent) {
if (LYUserAgent && *LYUserAgent) {
- strcpy(display_option, LYUserAgent);
+ LYstrncpy(display_option, LYUserAgent, sizeof(display_option) - 1);
} else { /* clear the NONE */
- move(L_HOME, COL_OPTION_VALUES);
- addstr(" ");
+ LYmove(L_HOME, COL_OPTION_VALUES);
+ LYaddstr(" ");
*display_option = '\0';
}
_statusline(ACCEPT_DATA_OR_DEFAULT);
- move(L_User_Agent, COL_OPTION_VALUES);
+ LYmove(L_User_Agent, COL_OPTION_VALUES);
start_bold();
ch = LYgetstr(display_option, VISIBLE,
sizeof(display_option), NORECALL);
stop_bold();
- move(L_User_Agent, COL_OPTION_VALUES);
+ LYmove(L_User_Agent, COL_OPTION_VALUES);
if (term_options || ch == -1) {
- addstr((LYUserAgent &&
+ LYaddstr((LYUserAgent &&
*LYUserAgent) ?
LYUserAgent : "NONE");
} else if (*display_option == '\0') {
StrAllocCopy(LYUserAgent, LYUserAgentDefault);
- addstr((LYUserAgent &&
+ LYaddstr((LYUserAgent &&
*LYUserAgent) ?
LYUserAgent : "NONE");
} else {
StrAllocCopy(LYUserAgent, display_option);
- addstr(display_option);
+ LYaddstr(display_option);
}
- clrtoeol();
+ LYclrtoeol();
if (ch == -1) {
HTInfoMsg(CANCELLED);
HTInfoMsg("");
- } else if (LYUserAgent && *LYUserAgent &&
- !strstr(LYUserAgent, "Lynx") &&
- !strstr(LYUserAgent, "lynx")) {
- _statusline(UA_COPYRIGHT_WARNING);
+ } else if (!LYCheckUserAgent()) {
+ _statusline(UA_PLEASE_USE_LYNX);
} else {
_statusline(VALUE_ACCEPTED);
}
} else { /* disallowed */
- _statusline(UA_COPYRIGHT_WARNING);
+ _statusline(UA_CHANGE_DISABLED);
}
response = ' ';
break;
-#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS
- case 'x': /* Change local exec restriction. */
- case 'X':
+#if defined(ENABLE_OPTS_CHANGE_EXEC) && (defined(EXEC_LINKS) || defined(EXEC_SCRIPTS))
+ case 'X': /* Change local exec restriction. */
if (exec_frozen && !LYSelectPopups) {
_statusline(CHANGE_OF_SETTING_DISALLOWED);
response = ' ';
@@ -1614,38 +1470,22 @@ draw_options:
itmp = 0;
}
}
- /*
- * Copy strings into choice array.
- */
- choices[0] = NULL;
- StrAllocCopy(choices[0], "ALWAYS OFF ");
- choices[1] = NULL;
- StrAllocCopy(choices[1], "FOR LOCAL FILES ONLY");
- choices[2] = NULL;
-#ifndef NEVER_ALLOW_REMOTE_EXEC
- StrAllocCopy(choices[2], "ALWAYS ON ");
- choices[3] = NULL;
-#endif /* !NEVER_ALLOW_REMOTE_EXEC */
if (!LYSelectPopups) {
- itmp = boolean_choice(itmp,
+ itmp = LYChooseBoolean(itmp,
L_Exec, -1,
- choices);
+ exec_choices);
} else {
- itmp = popup_choice(itmp,
+ itmp = LYChoosePopup(itmp,
L_Exec, -1,
- choices,
- 0, (exec_frozen ? TRUE : FALSE));
+ exec_choices,
+ 0, (exec_frozen ? TRUE : FALSE),
+ FALSE);
#if defined(VMS) || defined(USE_SLANG)
- move(L_Exec, COL_OPTION_VALUES);
- clrtoeol();
- addstr(choices[itmp]);
+ LYmove(L_Exec, COL_OPTION_VALUES);
+ LYclrtoeol();
+ LYaddstr(exec_choices[itmp]);
#endif /* VMS || USE_SLANG */
}
- FREE(choices[0]);
- FREE(choices[1]);
-#ifndef NEVER_ALLOW_REMOTE_EXEC
- FREE(choices[2]);
-#endif /* !NEVER_ALLOW_REMOTE_EXEC */
if (!exec_frozen) {
switch (itmp) {
case 0:
@@ -1666,31 +1506,22 @@ draw_options:
}
response = ' ';
if (LYSelectPopups) {
-#if !defined(VMS) || defined(USE_SLANG)
- if (exec_frozen || term_options) {
- term_options = FALSE;
- } else {
- AddValueAccepted = TRUE;
- }
- goto draw_options;
-#else
- term_options = FALSE;
-#endif /* !VMS || USE_SLANG */
+ HANDLE_LYOPTIONS;
}
break;
-#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
+#endif /* ENABLE_OPTS_CHANGE_EXEC */
case '>': /* Save current options to RC file. */
if (!no_option_save) {
- _statusline(SAVING_OPTIONS);
- if (save_rc()) {
- LYrcShowColor = LYChosenShowColor;
- _statusline(OPTIONS_SAVED);
+ HTInfoMsg(SAVING_OPTIONS);
+ LYrcShowColor = LYChosenShowColor;
+ if (save_rc(NULL)) {
+ HTInfoMsg(OPTIONS_SAVED);
} else {
HTAlert(OPTIONS_NOT_SAVED);
}
} else {
- _statusline(R_TO_RETURN_TO_LYNX);
+ HTInfoMsg(R_TO_RETURN_TO_LYNX);
/*
* Change response so that we don't exit
* the options menu.
@@ -1699,15 +1530,14 @@ draw_options:
}
break;
- case 'r': /* Return to document (quit options menu). */
- case 'R':
+ case 'R': /* Return to document (quit options menu). */
break;
default:
if (!no_option_save) {
- _statusline(SAVE_OR_R_TO_RETURN_TO_LYNX);
+ HTInfoMsg(SAVE_OR_R_TO_RETURN_TO_LYNX);
} else {
- _statusline(R_TO_RETURN_TO_LYNX);
+ HTInfoMsg(R_TO_RETURN_TO_LYNX);
}
} /* end switch */
} /* end while */
@@ -1717,21 +1547,43 @@ draw_options:
signal(SIGINT, cleanup_sig);
}
+PRIVATE int widest_choice ARGS1(
+ CONST char **, choices)
+{
+ int n, width = 0;
+ for (n = 0; choices[n] != NULL; ++n) {
+ int len = strlen(choices[n]);
+ if (width < len)
+ width = len;
+ }
+ return width;
+}
+
+PRIVATE void show_choice ARGS2(
+ CONST char *, choice,
+ int, width)
+{
+ int len = strlen(choice);
+ LYaddstr(choice);
+ while (len++ < width)
+ LYaddch(' ');
+}
+
/*
- * Take a boolean status,prompt the user for a new status,
- * and return it.
+ * Take a status code, prompt the user for a new status, and return it.
*/
PRIVATE int boolean_choice ARGS4(
int, cur_choice,
int, line,
int, column,
- char **, choices)
+ CONST char **, choices)
{
int response = 0;
int cmd = 0;
int number = 0;
int col = (column >= 0 ? column : COL_OPTION_VALUES);
int orig_choice = cur_choice;
+ int width = widest_choice(choices);
/*
* Get the number of choices and then make
@@ -1749,12 +1601,12 @@ PRIVATE int boolean_choice ARGS4(
/*
* Highlight the current choice.
*/
- move(line, col);
+ LYmove(line, col);
start_reverse();
- addstr(choices[cur_choice]);
+ show_choice(choices[cur_choice], width);
if (LYShowCursor)
- move(line, (col - 1));
- refresh();
+ LYmove(line, (col - 1));
+ LYrefresh();
/*
* Get the keyboard entry, and leave the
@@ -1764,11 +1616,11 @@ PRIVATE int boolean_choice ARGS4(
*/
term_options = FALSE;
while (1) {
- move(line, col);
+ LYmove(line, col);
if (term_options == FALSE) {
- response = LYgetch();
+ response = LYgetch_single();
}
- if (term_options || response == 7 || response == 3) {
+ if (term_options || LYCharIsINTERRUPT_NO_letter(response)) {
/*
* Control-C or Control-G.
*/
@@ -1785,7 +1637,7 @@ PRIVATE int boolean_choice ARGS4(
}
#endif /* VMS */
if ((response != '\n' && response != '\r') &&
- (cmd = keymap[response+1]) != LYK_ACTIVATE) {
+ (cmd = LKC_TO_LAC(keymap,response)) != LYK_ACTIVATE) {
switch (cmd) {
case LYK_HOME:
cur_choice = 0;
@@ -1797,7 +1649,7 @@ PRIVATE int boolean_choice ARGS4(
case LYK_REFRESH:
lynx_force_repaint();
- refresh();
+ LYrefresh();
break;
case LYK_QUIT:
@@ -1811,6 +1663,7 @@ PRIVATE int boolean_choice ARGS4(
case LYK_UP_HALF:
case LYK_UP_TWO:
case LYK_PREV_LINK:
+ case LYK_LPOS_PREV_LINK:
case LYK_FASTBACKW_LINK:
case LYK_UP_LINK:
case LYK_LEFT_LINK:
@@ -1839,17 +1692,17 @@ PRIVATE int boolean_choice ARGS4(
else
cur_choice++;
} /* end of switch */
- addstr(choices[cur_choice]);
+ show_choice(choices[cur_choice], width);
if (LYShowCursor)
- move(line, (col - 1));
- refresh();
+ LYmove(line, (col - 1));
+ LYrefresh();
} else {
/*
* Unhighlight choice.
*/
- move(line, col);
+ LYmove(line, col);
stop_reverse();
- addstr(choices[cur_choice]);
+ show_choice(choices[cur_choice], width);
if (term_options) {
term_options = FALSE;
@@ -1858,7 +1711,7 @@ PRIVATE int boolean_choice ARGS4(
} else {
_statusline(VALUE_ACCEPTED);
}
- return(cur_choice);
+ return cur_choice;
}
}
}
@@ -1878,7 +1731,7 @@ PRIVATE void terminate_options ARGS1(
*/
if (!dump_output_immediately) {
lynx_force_repaint();
- refresh();
+ LYrefresh();
}
#endif /* VMS */
}
@@ -1912,48 +1765,48 @@ draw_bookmark_list:
*/
#if defined(FANCY_CURSES) || defined (USE_SLANG)
if (enable_scrollback) {
- clear();
+ LYclear();
} else {
- erase();
+ LYerase();
}
#else
- clear();
+ LYclear();
#endif /* FANCY_CURSES || USE_SLANG */
- move(0, 5);
+ LYmove(0, 5);
lynx_start_h1_color ();
if (LYlines < (MBM_V_MAXFILES + MULTI_OFFSET)) {
sprintf(ehead_buffer, MULTIBOOKMARKS_EHEAD_MASK, MBM_current);
- addstr(ehead_buffer);
+ LYaddstr(ehead_buffer);
} else {
- addstr(MULTIBOOKMARKS_EHEAD);
+ LYaddstr(MULTIBOOKMARKS_EHEAD);
}
lynx_stop_h1_color ();
if (LYlines < (MBM_V_MAXFILES + MULTI_OFFSET)) {
for (a = ((MBM_V_MAXFILES/2 + 1) * (MBM_current - 1));
a <= (MBM_current * MBM_V_MAXFILES/2 ); a++) {
- move((3 + a) - ((MBM_V_MAXFILES/2 + 1)*(MBM_current - 1)), 5);
- addch((unsigned char)(a + 'A'));
- addstr(" : ");
+ LYmove((3 + a) - ((MBM_V_MAXFILES/2 + 1)*(MBM_current - 1)), 5);
+ LYaddch(UCH(LYindex2MBM(a)));
+ LYaddstr(" : ");
if (MBM_A_subdescript[a])
- addstr(MBM_A_subdescript[a]);
- move((3 + a) - ((MBM_V_MAXFILES/2 + 1)*(MBM_current - 1)), 35);
- addstr("| ");
+ LYaddstr(MBM_A_subdescript[a]);
+ LYmove((3 + a) - ((MBM_V_MAXFILES/2 + 1)*(MBM_current - 1)), 35);
+ LYaddstr("| ");
if (MBM_A_subbookmark[a]) {
- addstr(MBM_A_subbookmark[a]);
+ LYaddstr(MBM_A_subbookmark[a]);
}
}
} else {
for (a = 0; a <= MBM_V_MAXFILES; a++) {
- move(3 + a, 5);
- addch((unsigned char)(a + 'A'));
- addstr(" : ");
+ LYmove(3 + a, 5);
+ LYaddch(UCH(LYindex2MBM(a)));
+ LYaddstr(" : ");
if (MBM_A_subdescript[a])
- addstr(MBM_A_subdescript[a]);
- move(3 + a, 35);
- addstr("| ");
+ LYaddstr(MBM_A_subdescript[a]);
+ LYmove(3 + a, 35);
+ LYaddstr("| ");
if (MBM_A_subbookmark[a]) {
- addstr(MBM_A_subbookmark[a]);
+ LYaddstr(MBM_A_subbookmark[a]);
}
}
}
@@ -1962,57 +1815,55 @@ draw_bookmark_list:
* Only needed when we have 2 screens.
*/
if (LYlines < MBM_V_MAXFILES + MULTI_OFFSET) {
- move((LYlines - 4), 0);
- addstr("'");
+ LYmove((LYlines - 4), 0);
+ LYaddstr("'");
start_bold();
- addstr("[");
+ LYaddstr("[");
stop_bold();
- addstr("' ");
- addstr(PREVIOUS);
- addstr(", '");
+ LYaddstr("' ");
+ LYaddstr(PREVIOUS);
+ LYaddstr(", '");
start_bold();
- addstr("]");
+ LYaddstr("]");
stop_bold();
- addstr("' ");
- addstr(NEXT_SCREEN);
+ LYaddstr("' ");
+ LYaddstr(NEXT_SCREEN);
}
- move((LYlines - 3), 0);
+ LYmove((LYlines - 3), 0);
if (!no_option_save) {
- addstr("'");
+ LYaddstr("'");
start_bold();
- addstr(">");
+ LYaddstr(">");
stop_bold();
- addstr("'");
- addstr(TO_SAVE_SEGMENT);
+ LYaddstr("'");
+ LYaddstr(TO_SAVE_SEGMENT);
}
- addstr(OR_SEGMENT);
- addstr("'");
+ LYaddstr(OR_SEGMENT);
+ LYaddstr("'");
start_bold();
- addstr("^G");
+ LYaddstr("^G");
stop_bold();
- addstr("'");
- addstr(TO_RETURN_SEGMENT);
+ LYaddstr("'");
+ LYaddstr(TO_RETURN_SEGMENT);
while (!term_options &&
!LYisNonAlnumKeyname(response, LYK_PREV_DOC) &&
- response != 7 && response != 3 &&
- response != '>') {
+ !LYCharIsINTERRUPT_NO_letter(response) && response != '>') {
- move((LYlines - 2), 0);
+ LYmove((LYlines - 2), 0);
lynx_start_prompt_color ();
- addstr(MULTIBOOKMARKS_LETTER);
+ LYaddstr(MULTIBOOKMARKS_LETTER);
lynx_stop_prompt_color ();
- refresh();
- response = (def_response ? def_response : LYgetch());
+ LYrefresh();
+ response = (def_response ? def_response : LYgetch_single());
def_response = 0;
/*
* Check for a cancel.
*/
- if (term_options ||
- response == 7 || response == 3 ||
+ if (term_options || LYCharIsINTERRUPT_NO_letter(response) ||
LYisNonAlnumKeyname(response, LYK_PREV_DOC))
continue;
@@ -2021,13 +1872,13 @@ draw_bookmark_list:
*/
if (response == '>') {
if (!no_option_save) {
- _statusline(SAVING_OPTIONS);
- if (save_rc())
- _statusline(OPTIONS_SAVED);
+ HTInfoMsg(SAVING_OPTIONS);
+ if (save_rc(NULL))
+ HTInfoMsg(OPTIONS_SAVED);
else
HTAlert(OPTIONS_NOT_SAVED);
} else {
- _statusline(R_TO_RETURN_TO_LYNX);
+ HTInfoMsg(R_TO_RETURN_TO_LYNX);
/*
* Change response so that we don't exit
* the options menu.
@@ -2071,7 +1922,7 @@ draw_bookmark_list:
* that way.
*/
for (a = 0; a <= MBM_V_MAXFILES; a++) {
- if ((TOUPPER(response) - 'A') == a) {
+ if (LYMBM2index(response) == a) {
if (LYlines < (MBM_V_MAXFILES + MULTI_OFFSET)) {
if (MBM_current == 1 && a > (MBM_V_MAXFILES/2)) {
MBM_current = 2;
@@ -2089,14 +1940,15 @@ draw_bookmark_list:
if (a > 0) {
start_bold();
if (LYlines < (MBM_V_MAXFILES + MULTI_OFFSET))
- move(
+ LYmove(
(3 + a) - ((MBM_V_MAXFILES/2 + 1)*(MBM_current - 1)),
9);
else
- move((3 + a), 9);
- strcpy(MBM_tmp_line,
+ LYmove((3 + a), 9);
+ LYstrncpy(MBM_tmp_line,
(!MBM_A_subdescript[a] ?
- "" : MBM_A_subdescript[a]));
+ "" : MBM_A_subdescript[a]),
+ sizeof(MBM_tmp_line) - 1);
ch = LYgetstr(MBM_tmp_line, VISIBLE,
sizeof(MBM_tmp_line), NORECALL);
stop_bold();
@@ -2107,29 +1959,30 @@ draw_bookmark_list:
StrAllocCopy(MBM_A_subdescript[a], MBM_tmp_line);
}
if (LYlines < (MBM_V_MAXFILES + MULTI_OFFSET))
- move(
+ LYmove(
(3 + a) - ((MBM_V_MAXFILES/2 + 1)*(MBM_current - 1)),
5);
else
- move((3 + a), 5);
- addch((unsigned char)(a + 'A'));
- addstr(" : ");
+ LYmove((3 + a), 5);
+ LYaddch(UCH(LYindex2MBM(a)));
+ LYaddstr(" : ");
if (MBM_A_subdescript[a])
- addstr(MBM_A_subdescript[a]);
- clrtoeol();
- refresh();
+ LYaddstr(MBM_A_subdescript[a]);
+ LYclrtoeol();
+ LYrefresh();
}
if (LYlines < (MBM_V_MAXFILES + MULTI_OFFSET))
- move((3 + a) - ((MBM_V_MAXFILES/2 + 1)*(MBM_current - 1)),
+ LYmove((3 + a) - ((MBM_V_MAXFILES/2 + 1)*(MBM_current - 1)),
35);
else
- move((3 + a), 35);
- addstr("| ");
+ LYmove((3 + a), 35);
+ LYaddstr("| ");
start_bold();
- strcpy(MBM_tmp_line,
- (!MBM_A_subbookmark[a] ? "" : MBM_A_subbookmark[a]));
+ LYstrncpy(MBM_tmp_line,
+ (!MBM_A_subbookmark[a] ? "" : MBM_A_subbookmark[a]),
+ sizeof(MBM_tmp_line) - 1);
ch = LYgetstr(MBM_tmp_line, VISIBLE,
sizeof(MBM_tmp_line), NORECALL);
stop_bold();
@@ -2142,7 +1995,7 @@ draw_bookmark_list:
} else if (!LYPathOffHomeOK(MBM_tmp_line,
sizeof(MBM_tmp_line))) {
LYMBM_statusline(USE_PATH_OFF_HOME);
- sleep(AlertSecs);
+ LYSleepAlert();
} else {
StrAllocCopy(MBM_A_subbookmark[a], MBM_tmp_line);
if (a == 0) {
@@ -2150,16 +2003,16 @@ draw_bookmark_list:
}
}
if (LYlines < (MBM_V_MAXFILES + MULTI_OFFSET))
- move((3 + a) - ((MBM_V_MAXFILES/2 + 1)*(MBM_current-1)),
+ LYmove((3 + a) - ((MBM_V_MAXFILES/2 + 1)*(MBM_current-1)),
35);
else
- move((3 + a), 35);
- addstr("| ");
+ LYmove((3 + a), 35);
+ LYaddstr("| ");
if (MBM_A_subbookmark[a])
- addstr(MBM_A_subbookmark[a]);
- clrtoeol();
- move(LYlines-1, 0);
- clrtoeol();
+ LYaddstr(MBM_A_subbookmark[a]);
+ LYclrtoeol();
+ LYmove(LYlines-1, 0);
+ LYclrtoeol();
break;
}
} /* end for */
@@ -2169,1043 +2022,58 @@ draw_bookmark_list:
signal(SIGINT, cleanup_sig);
}
-#if !defined(NO_OPTION_MENU) || defined(NCURSES_MOUSE_VERSION)
-/*
-** This function prompts for a choice or page number.
-** If a 'g' or 'p' suffix is included, that will be
-** loaded into c. Otherwise, c is zeroed. - FM
-*/
-PRIVATE int get_popup_choice_number ARGS1(
- int *, c)
-{
- char temp[120];
-
- /*
- * Load the c argument into the prompt buffer.
- */
- temp[0] = *c;
- temp[1] = '\0';
- _statusline(OPTION_CHOICE_NUMBER);
-
- /*
- * Get the number, possibly with a suffix, from the user.
- */
- if (LYgetstr(temp, VISIBLE, sizeof(temp), NORECALL) < 0 ||
- *temp == 0 || term_options) {
- HTInfoMsg(CANCELLED);
- *c = '\0';
- term_options = FALSE;
- return(0);
- }
-
- /*
- * If we had a 'g' or 'p' suffix, load it into c.
- * Otherwise, zero c. Then return the number.
- */
- if (strchr(temp, 'g') != NULL || strchr(temp, 'G') != NULL) {
- *c = 'g';
- } else if (strchr(temp, 'p') != NULL || strchr(temp, 'P') != NULL) {
- *c = 'p';
- } else {
- *c = '\0';
- }
- return(atoi(temp));
-}
+#if !defined(NO_OPTION_MENU) || (defined(USE_MOUSE) && (defined(NCURSES) || defined(PDCURSES)))
/*
* This function offers the choices for values of an
* option via a popup window which functions like
* that for selection of options in a form. - FM
+ *
+ * Also used for mouse popups with ncurses; this is indicated
+ * by for_mouse.
*/
-PUBLIC int popup_choice ARGS6(
+PUBLIC int popup_choice ARGS7(
int, cur_choice,
int, line,
int, column,
- char **, choices,
+ CONST char **, choices,
int, i_length,
- int, disabled)
+ int, disabled,
+ BOOLEAN, for_mouse)
{
- int ly = line;
- int lx = (column >= 0 ? column : (COL_OPTION_VALUES - 1));
- int c = 0, cmd = 0, i = 0, j = 0;
- int orig_choice = cur_choice;
-#ifndef USE_SLANG
- WINDOW * form_window;
-#endif /* !USE_SLANG */
- int num_choices = 0, top, bottom, length = -1;
- unsigned width = 0;
- char ** Cptr = choices;
- int window_offset = 0;
- int DisplayLines = (LYlines - 2);
- char Cnum[64];
- int Lnum;
- int npages;
- static char prev_target[512]; /* Search string buffer */
- static char prev_target_buffer[512]; /* Next search buffer */
- static BOOL first = TRUE;
- char *cp;
- int ch = 0, recall;
- int QueryTotal;
- int QueryNum;
- BOOLEAN FirstRecall = TRUE;
- BOOLEAN ReDraw = FALSE;
- int number;
- char buffer[512];
-
- /*
- * Initialize the search string buffer. - FM
- */
- if (first) {
- *prev_target_buffer = '\0';
- first = FALSE;
- }
- *prev_target = '\0';
- QueryTotal = (search_queries ? HTList_count(search_queries) : 0);
- recall = ((QueryTotal >= 1) ? RECALL : NORECALL);
- QueryNum = QueryTotal;
-
- /*
- * Count the number of choices to be displayed, where
- * num_choices ranges from 0 to n, and set width to the
- * longest choice string length. Also set Lnum to the
- * length for the highest choice number, then decrement
- * num_choices so as to be zero-based. The window width
- * will be based on the sum of width and Lnum. - FM
- */
- for (num_choices = 0; Cptr[num_choices] != NULL; num_choices++) {
- if (strlen(Cptr[num_choices]) > width) {
- width = strlen(Cptr[num_choices]);
- }
- }
- sprintf(Cnum, "%d: ", num_choices);
- Lnum = strlen(Cnum);
- num_choices--;
-
- /*
- * Let's assume for the sake of sanity that ly is the number
- * corresponding to the line the option is on.
- * Let's also assume that cur_choice is the number of the
- * choice that should be initially selected, with 0 being
- * the first choice.
- * So what we have, is the top equal to the current screen line
- * subtracting the cur_choice + 1 (the one must be for the top
- * line we will draw in a box). If the top goes under 0, then
- * consider it 0.
- */
- top = ly - (cur_choice + 1);
- if (top < 0)
- top = 0;
-
- /*
- * Check and see if we need to put the i_length parameter up to
- * the number of real choices.
- */
- if (i_length < 1) {
- i_length = num_choices;
- } else {
- /*
- * Otherwise, it is really one number too high.
- */
- i_length--;
- }
-
- /*
- * The bottom is the value of the top plus the number of choices
- * to view plus 3 (one for the top line, one for the bottom line,
- * and one to offset the 0 counted in the num_choices).
- */
- bottom = top + i_length + 3;
-
- /*
- * Hmm... If the bottom goes beyond the number of lines available,
- */
- if (bottom > DisplayLines) {
- /*
- * Position the window at the top if we have more
- * choices than will fit in the window.
- */
- if ((i_length + 3) > DisplayLines) {
- top = 0;
- bottom = (top + (i_length + 3));
- if (bottom > DisplayLines)
- bottom = (DisplayLines + 1);
- } else {
- /*
- * Try to position the window so that the selected choice will
- * appear where the choice box currently is positioned.
- * It could end up too high, at this point, but we'll move it
- * down latter, if that has happened.
- */
- top = (DisplayLines + 1) - (i_length + 3);
- bottom = (DisplayLines + 1);
- }
- }
-
- /*
- * This is really fun, when the length is 4, it means 0 to 4, or 5.
- */
- length = (bottom - top) - 2;
-
- /*
- * Move the window down if it's too high.
- */
- if (bottom < ly + 2) {
- bottom = ly + 2;
- if (bottom > DisplayLines + 1)
- bottom = DisplayLines + 1;
- top = bottom - length - 2;
- }
-
- /*
- * Set up the overall window, including the boxing characters ('*'),
- * if it all fits. Otherwise, set up the widest window possible. - FM
- */
-#ifdef USE_SLANG
- SLsmg_fill_region(top, lx - 1, bottom - top, (Lnum + width + 4), ' ');
-#else
- if (!(form_window = newwin(bottom - top, (Lnum + width + 4),
- top, (lx - 1))) &&
- !(form_window = newwin(bottom - top, 0, top, 0))) {
- HTAlert(POPUP_FAILED);
- return(orig_choice);
- }
- scrollok(form_window, TRUE);
-#ifdef PDCURSES
- keypad(form_window, TRUE);
-#endif /* PDCURSES */
-#ifdef NCURSES
- LYsubwindow(form_window);
-#endif
-#if defined(HAVE_GETBKGD) /* not defined in ncurses 1.8.7 */
- wbkgd(form_window, getbkgd(stdscr));
- wbkgdset(form_window, getbkgd(stdscr));
-#endif
-#endif /* USE_SLANG */
-
- /*
- * Clear the command line and write
- * the popup statusline. - FM
- */
- move((LYlines - 2), 0);
- clrtoeol();
- if (disabled) {
- _statusline(CHOICE_LIST_UNM_MSG);
- } else {
- _statusline(CHOICE_LIST_MESSAGE);
- }
-
- /*
- * Set up the window_offset for choices.
- * cur_choice ranges from 0...n
- * length ranges from 0...m
- */
- if (cur_choice >= length) {
- window_offset = cur_choice - length + 1;
- }
-
- /*
- * Compute the number of popup window pages. - FM
- */
- npages = ((num_choices + 1) > length) ?
- (((num_choices + 1) + (length - 1))/(length))
- : 1;
-/*
- * OH! I LOVE GOTOs! hack hack hack
- */
-redraw:
- Cptr = choices;
-
- /*
- * Display the boxed choices.
- */
- for (i = 0; i <= num_choices; i++) {
- if (i >= window_offset && i - window_offset < length) {
- sprintf(Cnum, "%s%d: ",
- ((num_choices > 8 && i < 9) ?
- " " : ""),
- (i + 1));
-#ifdef USE_SLANG
- SLsmg_gotorc(top + ((i + 1) - window_offset), (lx - 1 + 2));
- addstr(Cnum);
- SLsmg_write_nstring(Cptr[i], width);
-#else
- wmove(form_window, ((i + 1) - window_offset), 2);
- wclrtoeol(form_window);
- waddstr(form_window, Cnum);
- waddstr(form_window, Cptr[i]);
-#endif /* USE_SLANG */
- }
- }
-#ifdef USE_SLANG
- SLsmg_draw_box(top, (lx - 1), (bottom - top), (Lnum + width + 4));
-#else
-#ifdef VMS
- VMSbox(form_window, (bottom - top), (Lnum + width + 4));
-#else
- LYbox(form_window, FALSE);
-#endif /* VMS */
- wrefresh(form_window);
-#endif /* USE_SLANG */
- Cptr = NULL;
-
- /*
- * Loop on user input.
- */
- while (cmd != LYK_ACTIVATE) {
- /*
- * Unreverse cur choice.
- */
- if (Cptr != NULL) {
- sprintf(Cnum, "%s%d: ",
- ((num_choices > 8 && i < 9) ?
- " " : ""),
- (i + 1));
-#ifdef USE_SLANG
- SLsmg_gotorc((top + ((i + 1) - window_offset)), (lx - 1 + 2));
- addstr(Cnum);
- SLsmg_write_nstring(Cptr[i], width);
-#else
- wmove(form_window, ((i + 1) - window_offset), 2);
- waddstr(form_window, Cnum);
- waddstr(form_window, Cptr[i]);
-#endif /* USE_SLANG */
- }
- Cptr = choices;
- i = cur_choice;
- sprintf(Cnum, "%s%d: ",
- ((num_choices > 8 && i < 9) ?
- " " : ""),
- (i + 1));
-#ifdef USE_SLANG
- SLsmg_gotorc((top + ((i + 1) - window_offset)), (lx - 1 + 2));
- addstr(Cnum);
- SLsmg_set_color(2);
- SLsmg_write_nstring(Cptr[i], width);
- SLsmg_set_color(0);
- /*
- * If LYShowCursor is ON, move the cursor to the left
- * of the current choice, so that blind users, who are
- * most likely to have LYShowCursor ON, will have it's
- * string spoken or passed to the braille interface as
- * each choice is made current. Otherwise, move it to
- * the bottom, right column of the screen, to "hide"
- * the cursor as for the main document, and let sighted
- * users rely on the current choice's highlighting or
- * color without the distraction of a blinking cursor
- * in the window. - FM
- */
- if (LYShowCursor)
- SLsmg_gotorc((top + ((i + 1) - window_offset)), (lx - 1 + 1));
- else
- SLsmg_gotorc((LYlines - 1), (LYcols - 1));
- SLsmg_refresh();
-#else
- wmove(form_window, ((i + 1) - window_offset), 2);
- waddstr(form_window, Cnum);
- wstart_reverse(form_window);
- waddstr(form_window, Cptr[i]);
- wstop_reverse(form_window);
- /*
- * If LYShowCursor is ON, move the cursor to the left
- * of the current choice, so that blind users, who are
- * most likely to have LYShowCursor ON, will have it's
- * string spoken or passed to the braille interface as
- * each choice is made current. Otherwise, leave it to
- * the right of the current choice, since we can't move
- * it out of the window, and let sighted users rely on
- * the highlighting of the current choice without the
- * distraction of a blinking cursor preceding it. - FM
- */
- if (LYShowCursor)
- wmove(form_window, ((i + 1) - window_offset), 1);
- wrefresh(form_window);
-#endif /* USE_SLANG */
-
- term_options = FALSE;
- c = LYgetch_for(FOR_CHOICE);
- if (term_options || c == 3 || c == 7) {
- cmd = LYK_QUIT;
-#ifndef USE_SLANG
- } else if (c == MOUSE_KEY) {
- if ((cmd = fancy_mouse(form_window, i + 1 + window_offset, &cur_choice)) < 0)
- goto redraw;
- if (cmd == LYK_ACTIVATE)
- break;
-#endif
- } else {
- cmd = keymap[c+1];
- }
-#ifdef VMS
- if (HadVMSInterrupt) {
- HadVMSInterrupt = FALSE;
- cmd = LYK_QUIT;
- }
-#endif /* VMS */
-
- switch(cmd) {
- case LYK_F_LINK_NUM:
- c = '\0';
- 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:
- /*
- * Get a number from the user, possibly with
- * a 'g' or 'p' suffix (which will be loaded
- * into c). - FM & LE
- */
- number = get_popup_choice_number((int *)&c);
-
- /*
- * Check for a 'p' suffix. - FM
- */
- if (c == 'p') {
- /*
- * Treat 1 or less as the first page. - FM
- */
- if (number <= 1) {
- if (window_offset == 0) {
- HTUserMsg(ALREADY_AT_CHOICE_BEGIN);
- if (disabled) {
- _statusline(CHOICE_LIST_UNM_MSG);
- } else {
- _statusline(CHOICE_LIST_MESSAGE);
- }
- break;
- }
- window_offset = 0;
- cur_choice = 0;
- if (disabled) {
- _statusline(CHOICE_LIST_UNM_MSG);
- } else {
- _statusline(CHOICE_LIST_MESSAGE);
- }
- goto redraw;
- }
-
- /*
- * Treat a number equal to or greater than the
- * number of pages as the last page. - FM
- */
- if (number >= npages) {
- if (window_offset >= ((num_choices - length) + 1)) {
- HTUserMsg(ALREADY_AT_CHOICE_END);
- if (disabled) {
- _statusline(CHOICE_LIST_UNM_MSG);
- } else {
- _statusline(CHOICE_LIST_MESSAGE);
- }
- break;
- }
- window_offset = ((npages - 1) * length);
- if (window_offset > (num_choices - length)) {
- window_offset = (num_choices - length + 1);
- }
- if (cur_choice < window_offset)
- cur_choice = window_offset;
- if (disabled) {
- _statusline(CHOICE_LIST_UNM_MSG);
- } else {
- _statusline(CHOICE_LIST_MESSAGE);
- }
- goto redraw;
- }
-
- /*
- * We want an intermediate page. - FM
- */
- if (((number - 1) * length) == window_offset) {
- sprintf(buffer, ALREADY_AT_CHOICE_PAGE, number);
- HTUserMsg(buffer);
- if (disabled) {
- _statusline(CHOICE_LIST_UNM_MSG);
- } else {
- _statusline(CHOICE_LIST_MESSAGE);
- }
- break;
- }
- cur_choice = window_offset = ((number - 1) * length);
- if (disabled) {
- _statusline(CHOICE_LIST_UNM_MSG);
- } else {
- _statusline(CHOICE_LIST_MESSAGE);
- }
- goto redraw;
-
- }
-
- /*
- * Check for a positive number, which signifies
- * that a choice should be sought. - FM
- */
- if (number > 0) {
- /*
- * Decrement the number so as to correspond
- * with our cur_choice values. - FM
- */
- number--;
-
- /*
- * If the number is in range and had no legal
- * suffix, select the indicated choice. - FM
- */
- if (number <= num_choices && c == '\0') {
- cur_choice = number;
- cmd = LYK_ACTIVATE;
- break;
- }
-
- /*
- * Verify that we had a 'g' suffix,
- * and act on the number. - FM
- */
- if (c == 'g') {
- if (cur_choice == number) {
- /*
- * The choice already is current. - FM
- */
- sprintf(buffer,
- CHOICE_ALREADY_CURRENT, (number + 1));
- HTUserMsg(buffer);
- if (disabled) {
- _statusline(CHOICE_LIST_UNM_MSG);
- } else {
- _statusline(CHOICE_LIST_MESSAGE);
- }
- break;
- }
-
- if (number <= num_choices) {
- /*
- * The number is in range and had a 'g'
- * suffix, so make it the current choice,
- * scrolling if needed. - FM
- */
- j = (number - cur_choice);
- cur_choice = number;
- if ((j > 0) &&
- (cur_choice - window_offset) >= length) {
- window_offset += j;
- if (window_offset > (num_choices - length + 1))
- window_offset = (num_choices - length + 1);
- } else if ((cur_choice - window_offset) < 0) {
- window_offset -= abs(j);
- if (window_offset < 0)
- window_offset = 0;
- }
- if (disabled) {
- _statusline(CHOICE_LIST_UNM_MSG);
- } else {
- _statusline(CHOICE_LIST_MESSAGE);
- }
- goto redraw;
- }
-
- /*
- * Not in range. - FM
- */
- HTUserMsg(BAD_CHOICE_NUM_ENTERED);
- }
- }
-
- /*
- * Restore the popup statusline. - FM
- */
- if (disabled) {
- _statusline(CHOICE_LIST_UNM_MSG);
- } else {
- _statusline(CHOICE_LIST_MESSAGE);
- }
- break;
-
- case LYK_PREV_LINK:
- case LYK_UP_LINK:
-
- if (cur_choice > 0)
- cur_choice--;
-
- /*
- * Scroll the window up if necessary.
- */
- if ((cur_choice - window_offset) < 0) {
- window_offset--;
- goto redraw;
- }
- break;
-
- case LYK_NEXT_LINK:
- case LYK_DOWN_LINK:
- if (cur_choice < num_choices)
- cur_choice++;
-
- /*
- * Scroll the window down if necessary
- */
- if ((cur_choice - window_offset) >= length) {
- window_offset++;
- goto redraw;
- }
- break;
-
- case LYK_NEXT_PAGE:
- /*
- * Okay, are we on the last page of the choices list?
- * If not then,
- */
- if (window_offset != (num_choices - length + 1)) {
- /*
- * Modify the current choice to not be a
- * coordinate in the list, but a coordinate
- * on the item selected in the window.
- */
- cur_choice -= window_offset;
-
- /*
- * Page down the proper length for the list.
- * If simply to far, back up.
- */
- window_offset += length;
- if (window_offset > (num_choices - length)) {
- window_offset = (num_choices - length + 1);
- }
+ if (column < 0)
+ column = (COL_OPTION_VALUES - 1);
- /*
- * Readjust the current choice to be a choice
- * list coordinate rather than window.
- * Redraw this thing.
- */
- cur_choice += window_offset;
- goto redraw;
- }
- else if (cur_choice < num_choices) {
- /*
- * Already on last page of the choice list so
- * just redraw it with the last item selected.
- */
- cur_choice = num_choices;
- }
- break;
-
- case LYK_PREV_PAGE:
- /*
- * Are we on the first page of the choice list?
- * If not then,
- */
- if (window_offset != 0) {
- /*
- * Modify the current choice to not be a choice
- * list coordinate, but a window coordinate.
- */
- cur_choice -= window_offset;
-
- /*
- * Page up the proper length.
- * If too far, back up.
- */
- window_offset -= length;
- if (window_offset < 0) {
- window_offset = 0;
- }
-
- /*
- * Readjust the current choice.
- */
- cur_choice += window_offset;
- goto redraw;
- } else if (cur_choice > 0) {
- /*
- * Already on the first page so just
- * back up to the first item.
- */
- cur_choice = 0;
- }
- break;
-
- case LYK_HOME:
- cur_choice = 0;
- if (window_offset > 0) {
- window_offset = 0;
- goto redraw;
- }
- break;
-
- case LYK_END:
- cur_choice = num_choices;
- if (window_offset != (num_choices - length + 1)) {
- window_offset = (num_choices - length + 1);
- goto redraw;
- }
- break;
-
- case LYK_DOWN_TWO:
- cur_choice += 2;
- if (cur_choice > num_choices)
- cur_choice = num_choices;
-
- /*
- * Scroll the window down if necessary.
- */
- if ((cur_choice - window_offset) >= length) {
- window_offset += 2;
- if (window_offset > (num_choices - length + 1))
- window_offset = (num_choices - length + 1);
- goto redraw;
- }
- break;
-
- case LYK_UP_TWO:
- cur_choice -= 2;
- if (cur_choice < 0)
- cur_choice = 0;
-
- /*
- * Scroll the window up if necessary.
- */
- if ((cur_choice - window_offset) < 0) {
- window_offset -= 2;
- if (window_offset < 0)
- window_offset = 0;
- goto redraw;
- }
- break;
-
- case LYK_DOWN_HALF:
- cur_choice += (length/2);
- if (cur_choice > num_choices)
- cur_choice = num_choices;
-
- /*
- * Scroll the window down if necessary.
- */
- if ((cur_choice - window_offset) >= length) {
- window_offset += (length/2);
- if (window_offset > (num_choices - length + 1))
- window_offset = (num_choices - length + 1);
- goto redraw;
- }
- break;
-
- case LYK_UP_HALF:
- cur_choice -= (length/2);
- if (cur_choice < 0)
- cur_choice = 0;
-
- /*
- * Scroll the window up if necessary.
- */
- if ((cur_choice - window_offset) < 0) {
- window_offset -= (length/2);
- if (window_offset < 0)
- window_offset = 0;
- goto redraw;
- }
- break;
-
- case LYK_REFRESH:
- lynx_force_repaint();
- refresh();
- break;
-
- case LYK_NEXT:
- if (recall && *prev_target_buffer == '\0') {
- /*
- * We got a 'n'ext command with no prior query
- * specified within the popup window. See if
- * one was entered when the popup was retracted,
- * and if so, assume that's what's wanted. Note
- * that it will become the default within popups,
- * unless another is entered within a popup. If
- * the within popup default is to be changed at
- * that point, use WHEREIS ('/') and enter it,
- * or the up- or down-arrow keys to seek any of
- * the previously entered queries, regardless of
- * whether they were entered within or outside
- * of a popup window. - FM
- */
- if ((cp = (char *)HTList_objectAt(search_queries,
- 0)) != NULL) {
- strcpy(prev_target_buffer, cp);
- QueryNum = 0;
- FirstRecall = FALSE;
- }
- }
- strcpy(prev_target, prev_target_buffer);
- case LYK_WHEREIS:
- if (*prev_target == '\0' ) {
- _statusline(ENTER_WHEREIS_QUERY);
- if ((ch = LYgetstr(prev_target, VISIBLE,
- sizeof(prev_target_buffer),
- recall)) < 0) {
- /*
- * User cancelled the search via ^G. - FM
- */
- HTInfoMsg(CANCELLED);
- goto restore_popup_statusline;
- }
- }
-
-check_recall:
- if (*prev_target == '\0' &&
- !(recall && (ch == UPARROW || ch == DNARROW))) {
- /*
- * No entry. Simply break. - FM
- */
- HTInfoMsg(CANCELLED);
- goto restore_popup_statusline;
- }
-
- if (recall && ch == UPARROW) {
- if (FirstRecall) {
- /*
- * Use the current string or
- * last query in the list. - FM
- */
- FirstRecall = FALSE;
- if (*prev_target_buffer) {
- for (QueryNum = (QueryTotal - 1);
- QueryNum > 0; QueryNum--) {
- if ((cp = (char *)HTList_objectAt(
- search_queries,
- QueryNum)) != NULL &&
- !strcmp(prev_target_buffer, cp)) {
- break;
- }
- }
- } else {
- QueryNum = 0;
- }
- } else {
- /*
- * Go back to the previous query in the list. - FM
- */
- QueryNum++;
- }
- if (QueryNum >= QueryTotal)
- /*
- * Roll around to the last query in the list. - FM
- */
- QueryNum = 0;
- if ((cp = (char *)HTList_objectAt(search_queries,
- QueryNum)) != NULL) {
- strcpy(prev_target, cp);
- if (*prev_target_buffer &&
- !strcmp(prev_target_buffer, prev_target)) {
- _statusline(EDIT_CURRENT_QUERY);
- } else if ((*prev_target_buffer && QueryTotal == 2) ||
- (!(*prev_target_buffer) &&
- QueryTotal == 1)) {
- _statusline(EDIT_THE_PREV_QUERY);
- } else {
- _statusline(EDIT_A_PREV_QUERY);
- }
- if ((ch = LYgetstr(prev_target, VISIBLE,
- sizeof(prev_target_buffer), recall)) < 0) {
- /*
- * User cancelled the search via ^G. - FM
- */
- HTInfoMsg(CANCELLED);
- goto restore_popup_statusline;
- }
- goto check_recall;
- }
- } else if (recall && ch == DNARROW) {
- if (FirstRecall) {
- /*
- * Use the current string or
- * first query in the list. - FM
- */
- FirstRecall = FALSE;
- if (*prev_target_buffer) {
- for (QueryNum = 0;
- QueryNum < (QueryTotal - 1); QueryNum++) {
- if ((cp = (char *)HTList_objectAt(
- search_queries,
- QueryNum)) != NULL &&
- !strcmp(prev_target_buffer, cp)) {
- break;
- }
- }
- } else {
- QueryNum = (QueryTotal - 1);
- }
- } else {
- /*
- * Advance to the next query in the list. - FM
- */
- QueryNum--;
- }
- if (QueryNum < 0)
- /*
- * Roll around to the first query in the list. - FM
- */
- QueryNum = (QueryTotal - 1);
- if ((cp = (char *)HTList_objectAt(search_queries,
- QueryNum)) != NULL) {
- strcpy(prev_target, cp);
- if (*prev_target_buffer &&
- !strcmp(prev_target_buffer, prev_target)) {
- _statusline(EDIT_CURRENT_QUERY);
- } else if ((*prev_target_buffer &&
- QueryTotal == 2) ||
- (!(*prev_target_buffer) &&
- QueryTotal == 1)) {
- _statusline(EDIT_THE_PREV_QUERY);
- } else {
- _statusline(EDIT_A_PREV_QUERY);
- }
- if ((ch = LYgetstr(prev_target, VISIBLE,
- sizeof(prev_target_buffer),
- recall)) < 0) {
- /*
- * User cancelled the search via ^G. - FM
- */
- HTInfoMsg(CANCELLED);
- goto restore_popup_statusline;
- }
- goto check_recall;
- }
- }
- /*
- * Replace the search string buffer with the new target. - FM
- */
- strcpy(prev_target_buffer, prev_target);
- HTAddSearchQuery(prev_target_buffer);
-
- /*
- * Start search at the next choice. - FM
- */
- for (j = 1; Cptr[i+j] != NULL; j++) {
- sprintf(buffer, "%s%d: %s",
- ((num_choices > 8 && (j + i) < 9) ?
- " " : ""),
- (i + j + 1),
- Cptr[i+j]);
- if (case_sensitive) {
- if (strstr(buffer, prev_target_buffer) != NULL)
- break;
- } else {
- if (LYstrstr(buffer, prev_target_buffer) != NULL)
- break;
- }
- }
- if (Cptr[i+j] != NULL) {
- /*
- * We have a hit, so make that choice the current. - FM
- */
- cur_choice += j;
- /*
- * Scroll the window down if necessary.
- */
- if ((cur_choice - window_offset) >= length) {
- window_offset += j;
- if (window_offset > (num_choices - length + 1))
- window_offset = (num_choices - length + 1);
- ReDraw = TRUE;
- }
- goto restore_popup_statusline;
- }
-
- /*
- * If we started at the beginning, it can't be present. - FM
- */
- if (cur_choice == 0) {
- HTUserMsg2(STRING_NOT_FOUND, prev_target_buffer);
- goto restore_popup_statusline;
- }
-
- /*
- * Search from the beginning to the current choice. - FM
- */
- for (j = 0; j < cur_choice; j++) {
- sprintf(buffer, "%s%d: %s",
- ((num_choices > 8 && j < 9) ?
- " " : ""),
- (j + 1),
- Cptr[j]);
- if (case_sensitive) {
- if (strstr(buffer, prev_target_buffer) != NULL)
- break;
- } else {
- if (LYstrstr(buffer, prev_target_buffer) != NULL)
- break;
- }
- }
- if (j < cur_choice) {
- /*
- * We have a hit, so make that choice the current. - FM
- */
- j = (cur_choice - j);
- cur_choice -= j;
- /*
- * Scroll the window up if necessary.
- */
- if ((cur_choice - window_offset) < 0) {
- window_offset -= j;
- if (window_offset < 0)
- window_offset = 0;
- ReDraw = TRUE;
- }
- goto restore_popup_statusline;
- }
-
- /*
- * Didn't find it in the preceding choices either. - FM
- */
- HTUserMsg2(STRING_NOT_FOUND, prev_target_buffer);
-
-restore_popup_statusline:
- /*
- * Restore the popup statusline and
- * reset the search variables. - FM
- */
- if (disabled)
- _statusline(CHOICE_LIST_UNM_MSG);
- else
- _statusline(CHOICE_LIST_MESSAGE);
- *prev_target = '\0';
- QueryTotal = (search_queries ? HTList_count(search_queries)
- : 0);
- recall = ((QueryTotal >= 1) ? RECALL : NORECALL);
- QueryNum = QueryTotal;
- if (ReDraw == TRUE) {
- ReDraw = FALSE;
- goto redraw;
- }
- break;
-
- case LYK_QUIT:
- case LYK_ABORT:
- case LYK_PREV_DOC:
- cur_choice = orig_choice;
- term_options = TRUE;
- HTUserMsg(CANCELLED);
- cmd = LYK_ACTIVATE; /* to exit */
- break;
- }
+ term_options = FALSE;
+ cur_choice = LYhandlePopupList(cur_choice,
+ line,
+ column,
+ (CONST char **)choices,
+ -1,
+ i_length,
+ disabled,
+ for_mouse,
+ TRUE);
+ switch (cur_choice) {
+ case LYK_QUIT:
+ case LYK_ABORT:
+ case LYK_PREV_DOC:
+ term_options = TRUE;
+ if (!for_mouse) {
+ HTUserMsg(CANCELLED);
+ }
+ break;
}
-#ifndef USE_SLANG
- delwin(form_window);
-#ifdef NCURSES
- LYsubwindow(0);
-#endif
-#endif /* !USE_SLANG */
if (disabled || term_options) {
_statusline("");
- return(orig_choice);
- } else {
+ } else if (!for_mouse) {
_statusline(VALUE_ACCEPTED);
- return(cur_choice);
}
+ return(cur_choice);
}
#endif /* !NO_OPTION_MENU */
-
#ifndef NO_OPTION_FORMS
/*
@@ -3246,15 +2114,15 @@ static char * save_options_string = "save_options";
/*
* Personal Preferences
*/
-static char * cookies_string = "cookies";
+static char * cookies_string = "set_cookies";
static char * cookies_ignore_all_string = "ignore";
static char * cookies_up_to_user_string = "ask user";
static char * cookies_accept_all_string = "accept all";
static char * x_display_string = "display";
-static char * editor_string = "editor";
+static char * editor_string = "file_editor";
static char * emacs_keys_string = "emacs_keys";
-#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS
+#if defined(ENABLE_OPTS_CHANGE_EXEC) && (defined(EXEC_LINKS) || defined(EXEC_SCRIPTS))
#define EXEC_ALWAYS 2
#define EXEC_LOCAL 1
#define EXEC_NEVER 0
@@ -3266,7 +2134,7 @@ static OptValues exec_links_values[] = {
{ EXEC_ALWAYS, "ALWAYS ON", "ALWAYS ON" },
#endif
{ 0, 0, 0 }};
-#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
+#endif /* ENABLE_OPTS_CHANGE_EXEC */
#ifdef EXP_KEYBOARD_LAYOUT
static char * kblayout_string = "kblayout";
@@ -3275,13 +2143,13 @@ static char * keypad_mode_string = "keypad_mode";
static OptValues keypad_mode_values[] = {
{ NUMBERS_AS_ARROWS, "Numbers act as arrows", "number_arrows" },
{ LINKS_ARE_NUMBERED, "Links are numbered", "links_numbered" },
- { LINKS_AND_FORM_FIELDS_ARE_NUMBERED,
+ { LINKS_AND_FIELDS_ARE_NUMBERED,
"Links and form fields are numbered",
"links_and_forms" },
{ 0, 0, 0 }};
-static char * lineedit_style_string = "lineedit_style";
-static char * mail_address_string = "mail_address";
-static char * search_type_string = "search_type";
+static char * lineedit_mode_string = "lineedit_mode";
+static char * mail_address_string = "personal_mail_address";
+static char * search_type_string = "case_sensitive_searching";
static OptValues search_type_values[] = {
{ FALSE, "Case insensitive", "case_insensitive" },
{ TRUE, "Case sensitive", "case_sensitive" },
@@ -3302,17 +2170,32 @@ static OptValues user_mode_values[] = {
{ INTERMEDIATE_MODE, "Intermediate", "Intermediate" },
{ ADVANCED_MODE, "Advanced", "Advanced" },
{ 0, 0, 0 }};
+
static char * vi_keys_string = "vi_keys";
+static char * visited_links_string = "visited_links";
+static OptValues visited_links_values[] = {
+ { VISITED_LINKS_AS_FIRST_V, "By First Visit", "first_visited" },
+ { VISITED_LINKS_AS_FIRST_V | VISITED_LINKS_REVERSE,
+ "By First Visit Reversed", "first_visited_reversed" },
+ { VISITED_LINKS_AS_TREE, "As Visit Tree", "visit_tree" },
+ { VISITED_LINKS_AS_LATEST, "By Last Visit", "last_visited" },
+ { VISITED_LINKS_AS_LATEST | VISITED_LINKS_REVERSE,
+ "By Last Visit Reversed", "last_visited_reversed" },
+ { 0, 0, 0 }};
+
/*
* Document Layout
*/
-static char * DTD_recovery_string = "DTD";
+#ifndef SH_EX /* 1999/01/19 (Tue) */
+static char * DTD_recovery_string = "DTD_recovery";
static OptValues DTD_type_values[] = {
/* Old_DTD variable */
{ TRUE, "relaxed (TagSoup mode)", "tagsoup" },
{ FALSE, "strict (SortaSGML mode)", "sortasgml" },
{ 0, 0, 0 }};
+#endif
+
static char * select_popups_string = "select_popups";
static char * images_string = "images";
static char * images_ignore_all_string = "ignore";
@@ -3328,32 +2211,37 @@ static OptValues verbose_images_type_values[] = {
/*
* Bookmark Options
*/
-static char * mbm_advanced_string = "ADVANCED";
-static char * mbm_off_string = "OFF";
-static char * mbm_standard_string = "STANDARD";
-static char * mbm_string = "multi_bookmarks_mode";
+static char * mbm_string = "multi_bookmark";
+static OptValues mbm_values[] = {
+ { MBM_OFF, "OFF", "OFF" },
+ { MBM_STANDARD, "STANDARD", "STANDARD" },
+ { MBM_ADVANCED, "ADVANCED", "ADVANCED" },
+ { 0, 0, 0 }};
+
static char * single_bookmark_string = "single_bookmark_name";
/*
* Character Set Options
*/
static char * assume_char_set_string = "assume_char_set";
-static char * display_char_set_string = "display_char_set";
+static char * display_char_set_string = "character_set";
static char * raw_mode_string = "raw_mode";
/*
* File Management Options
*/
static char * show_dotfiles_string = "show_dotfiles";
+
#ifdef DIRED_SUPPORT
-static char * dired_sort_string = "dired_sort";
+static char * dired_sort_string = "dir_list_style";
static OptValues dired_values[] = {
{ 0, "Directories first", "dired_dir" },
{ FILES_FIRST, "Files first", "dired_files" },
{ MIXED_STYLE, "Mixed style", "dired_mixed" },
{ 0, 0, 0 }};
#endif /* DIRED_SUPPORT */
-static char * ftp_sort_string = "ftp_sort";
+
+static char * ftp_sort_string = "file_sorting_method";
static OptValues ftp_sort_values[] = {
{ FILE_BY_NAME, "By Name", "ftp_by_name" },
{ FILE_BY_TYPE, "By Type", "ftp_by_type" },
@@ -3361,29 +2249,37 @@ static OptValues ftp_sort_values[] = {
{ FILE_BY_DATE, "By Date", "ftp_by_date" },
{ 0, 0, 0 }};
+static char * show_rate_string = "show_rate";
+static OptValues rate_values[] = {
+ { rateOFF, "Do not show rate", "rate_off" },
+ { rateBYTES, "Show Bytes/sec rate", "rate_bytes" },
+ { rateKB, "Show KB/sec rate", "rate_kb" },
+#ifdef EXP_READPROGRESS
+ { rateEtaBYTES, "Show Bytes/sec, ETA", "rate_eta_bytes" },
+ { rateEtaKB, "Show KB/sec, ETA", "rate_eta_kb" },
+#endif
+ { 0, 0, 0 }};
+
/*
* Headers transferred to remote server
*/
-static char * preferred_doc_char_string = "preferred_doc_char";
-static char * preferred_doc_lang_string = "preferred_doc_lang";
+static char * preferred_doc_char_string = "preferred_charset";
+static char * preferred_doc_lang_string = "preferred_language";
static char * user_agent_string = "user_agent";
-#define PutLabel(fp, text) \
- fprintf(fp," %-33s: ", text)
-
#define PutTextInput(fp, Name, Value, Size, disable) \
fprintf(fp,\
"<input size=%d type=\"text\" name=\"%s\" value=\"%s\" %s>\n",\
- (int) Size, Name, Value, disable)
+ (int) Size, Name, Value, disable_all?disabled_string:disable)
#define PutOption(fp, flag, html, name) \
fprintf(fp,"<option value=\"%s\" %s>%s\n", html, SELECTED(flag), name)
#define BeginSelect(fp, text) \
- fprintf(fp,"<select name=\"%s\">\n", text)
+ fprintf(fp,"<select name=\"%s\" %s>\n", text, disable_all?disabled_string:"")
#define MaybeSelect(fp, flag, text) \
- fprintf(fp,"<select name=\"%s\" %s>\n", text, DISABLED(flag))
+ fprintf(fp,"<select name=\"%s\" %s>\n", text, disable_all?disabled_string:DISABLED(flag))
#define EndSelect(fp)\
fprintf(fp,"</select>\n")
@@ -3394,10 +2290,12 @@ PRIVATE void PutOptValues ARGS3(
OptValues *, table)
{
while (table->LongName != 0) {
- PutOption(fp,
- value == table->value,
- table->HtmlName,
- table->LongName);
+ if (table->HtmlName) {
+ PutOption(fp,
+ value == table->value,
+ table->HtmlName,
+ table->LongName);
+ }
table++;
}
}
@@ -3408,7 +2306,7 @@ PRIVATE BOOLEAN GetOptValues ARGS3(
int *, result)
{
while (table->LongName != 0) {
- if (!strcmp(value, table->HtmlName)) {
+ if (table->HtmlName && !strcmp(value, table->HtmlName)) {
*result = table->value;
return TRUE;
}
@@ -3437,7 +2335,9 @@ PRIVATE PostPair * break_data ARGS1(
if (p==NULL || p[0]=='\0')
return NULL;
- q = calloc(sizeof(PostPair), 1);
+ CTRACE((tfp, "break_data %s\n", data));
+
+ q = typecalloc(PostPair);
if (q==NULL)
outofmem(__FILE__, "break_data(calloc)");
@@ -3471,18 +2371,18 @@ PRIVATE PostPair * break_data ARGS1(
*/
if (i > 0
&& q[count].value[i+1] == '+'
- && isalnum(q[count].value[i+2])) {
+ && isalnum(UCH(q[count].value[i+2]))) {
q[count].value[i++] = ' ';
i++;
continue;
}
-
#endif
q[count].value[i] = ' ';
}
}
}
HTUnEscape(q[count].value);
+ CTRACE((tfp, "...item[%d] tag=%s, value=%s\n", count, q[count].tag, q[count].value));
count++;
/*
@@ -3498,6 +2398,7 @@ PRIVATE PostPair * break_data ARGS1(
}
PRIVATE int gen_options PARAMS((char **newfile));
+
/*
* Handle options from the pseudo-post. I think we really only need
* post_data here, but bring along everything just in case. It's only a
@@ -3554,24 +2455,33 @@ PUBLIC int postoptions ARGS1(
if (strstr(newdoc->address, "LYNXOPTIONS://MBM_MENU")) {
FREE(newdoc->post_data);
- if (!no_bookmark)
+ if (no_bookmark) {
+ HTAlert(BOOKMARK_CHANGE_DISALLOWED); /* anonymous */
+ return(NULLFILE);
+ } else if (dump_output_immediately) {
+ return(NOT_FOUND);
+ } else {
edit_bookmarks();
- else /* anonymous */
- HTAlert(BOOKMARK_CHANGE_DISALLOWED);
- return(NULLFILE);
+ return(NULLFILE);
+ }
}
+ data = break_data(newdoc->post_data);
- /*-------------------------------------------------
- * kludge gen_options() call:
- *--------------------------------------------------*/
+ if (!data) {
+ int status;
- if (strstr(newdoc->address, "LYNXOPTIONS:/") && !newdoc->post_data) {
- int status = gen_options(&newdoc->address);
- if (status == NOT_FOUND)
- return(NOT_FOUND);
+ /*-------------------------------------------------
+ * kludge gen_options() call:
+ *--------------------------------------------------*/
+ status = gen_options(&newdoc->address);
+ if (status != NORMAL) {
+ HTAlwaysAlert("Unexpected way of accessing", newdoc->address);
+ FREE(newdoc->address);
+ return(status);
+ }
- /* exit to getfile() cyrcle */
+ /* exit to getfile() cycle */
WWWDoc.address = newdoc->address;
WWWDoc.post_data = newdoc->post_data;
WWWDoc.post_content_type = newdoc->post_content_type;
@@ -3581,21 +2491,46 @@ PUBLIC int postoptions ARGS1(
if (!HTLoadAbsolute(&WWWDoc))
return(NOT_FOUND);
+ LYRegisterUIPage(newdoc->address, UIP_OPTIONS_MENU);
+#ifdef DIRED_SUPPORT
+ lynx_edit_mode = FALSE;
+#endif /* DIRED_SUPPORT */
return(NORMAL);
}
-
- data = break_data(newdoc->post_data);
+ if (!LYIsUIPage3(HTLoadedDocumentURL(), UIP_OPTIONS_MENU, 0) &&
+ !LYIsUIPage3(HTLoadedDocumentURL(), UIP_VLINKS, 0)) {
+ char *buf = NULL;
+
+ /* We may have been spoofed? */
+ HTSprintf0(&buf,
+ gettext("Use %s to invoke the Options menu!"),
+ key_for_func_ext(LYK_OPTIONS, FOR_PANEL));
+ HTAlert(buf);
+ FREE(buf);
+ FREE(data);
+ return(NOT_FOUND);
+ }
for (i = 0; data[i].tag != NULL; i++) {
/*
- * Paranoid security.
+ * This isn't really for security, but rather for avoiding that
+ * the user may revisit an older instance from the history stack
+ * and submit stuff which accidentally undoes changes that had
+ * been done from a newer instance. - kw
*/
if (!strcmp(data[i].tag, secure_string)) {
if (!secure_value || strcmp(data[i].value, secure_value)) {
+ char *buf = NULL;
+
/*
- * FIXME: We've been spoofed message here.
+ * We probably came from an older instance of the Options
+ * page that had been on the history stack. - kw
*/
+ HTSprintf0(&buf,
+ gettext("Use %s to invoke the Options menu!"),
+ key_for_func_ext(LYK_OPTIONS, FOR_PANEL));
+ HTAlert(buf);
FREE(data);
return(NULLFILE);
}
@@ -3623,6 +2558,8 @@ PUBLIC int postoptions ARGS1(
/* X Display: INPUT */
if (!strcmp(data[i].tag, x_display_string)) {
LYsetXDisplay(data[i].value);
+ validate_x_display();
+ summarize_x_display(data[i].value);
}
/* Editor: INPUT */
@@ -3634,7 +2571,7 @@ PUBLIC int postoptions ARGS1(
/* Emacs keys: ON/OFF */
if (!strcmp(data[i].tag, emacs_keys_string)
&& GetOptValues(bool_values, data[i].value, &code)) {
- if ((emacs_keys = code) != FALSE) {
+ if ((emacs_keys = (BOOL) code) != FALSE) {
set_emacs_keys();
} else {
reset_emacs_keys();
@@ -3642,7 +2579,7 @@ PUBLIC int postoptions ARGS1(
}
/* Execution links: SELECT */
-#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS
+#if defined(ENABLE_OPTS_CHANGE_EXEC) && (defined(EXEC_LINKS) || defined(EXEC_SCRIPTS))
if (!strcmp(data[i].tag, exec_links_string)
&& GetOptValues(exec_links_values, data[i].value, &code)) {
#ifndef NEVER_ALLOW_REMOTE_EXEC
@@ -3650,7 +2587,7 @@ PUBLIC int postoptions ARGS1(
#endif /* !NEVER_ALLOW_REMOTE_EXEC */
local_exec_on_local_files = (code == EXEC_LOCAL);
}
-#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
+#endif /* ENABLE_OPTS_CHANGE_EXEC */
/* Keypad Mode: SELECT */
if (!strcmp(data[i].tag, keypad_mode_string)) {
@@ -3659,16 +2596,21 @@ PUBLIC int postoptions ARGS1(
&& keypad_mode != newval) {
keypad_mode = newval;
need_reload = TRUE;
+ if (keypad_mode == NUMBERS_AS_ARROWS) {
+ set_numbers_as_arrows();
+ } else {
+ reset_numbers_as_arrows();
+ }
}
}
/* Line edit style: SELECT */
- if (!strcmp(data[i].tag, lineedit_style_string)) {
+ if (!strcmp(data[i].tag, lineedit_mode_string)) {
int newval = atoi(data[i].value);
int j;
/* prevent spoofing attempt */
for (j = 0; LYLineeditNames[j]; j++) {
- if (j==newval) current_lineedit = newval;
+ if (j==newval) current_lineedit = newval;
}
}
@@ -3679,7 +2621,7 @@ PUBLIC int postoptions ARGS1(
int j;
/* prevent spoofing attempt */
for (j = 0; LYKbLayoutNames[j]; j++) {
- if (j==newval) current_layout = newval;
+ if (j==newval) current_layout = newval;
}
}
#endif /* EXP_KEYBOARD_LAYOUT */
@@ -3693,9 +2635,10 @@ PUBLIC int postoptions ARGS1(
/* Search Type: SELECT */
if (!strcmp(data[i].tag, search_type_string)
&& GetOptValues(search_type_values, data[i].value, &code)) {
- case_sensitive = code;
+ case_sensitive = (BOOL) code;
}
+#ifndef SH_EX /* 1999/01/19 (Tue) */
/* HTML error tolerance: SELECT */
if (!strcmp(data[i].tag, DTD_recovery_string)
&& GetOptValues(DTD_type_values, data[i].value, &code)) {
@@ -3705,18 +2648,21 @@ PUBLIC int postoptions ARGS1(
need_reload = TRUE;
}
}
+#endif
/* Select Popups: ON/OFF */
if (!strcmp(data[i].tag, select_popups_string)
&& GetOptValues(bool_values, data[i].value, &code)) {
- LYSelectPopups = code;
+ LYSelectPopups = (BOOL) code;
}
#if defined(USE_SLANG) || defined(COLOR_CURSES)
/* Show Color: SELECT */
if (!strcmp(data[i].tag, show_color_string)
- && GetOptValues(show_color_values, data[i].value, &LYShowColor)) {
- LYChosenShowColor = LYShowColor;
+ && GetOptValues(show_color_values, data[i].value,
+ &LYChosenShowColor)) {
+ if (can_do_colors)
+ LYShowColor = LYChosenShowColor;
if (CurrentShowColor != LYShowColor) {
lynx_force_repaint();
}
@@ -3730,7 +2676,7 @@ PUBLIC int postoptions ARGS1(
/* Show Cursor: ON/OFF */
if (!strcmp(data[i].tag, show_cursor_string)
&& GetOptValues(bool_values, data[i].value, &code)) {
- LYShowCursor = code;
+ LYShowCursor = (BOOL) code;
}
/* User Mode: SELECT */
@@ -3743,17 +2689,21 @@ PUBLIC int postoptions ARGS1(
}
}
+ /* Type of visited pages page: SELECT */
+ if (!strcmp(data[i].tag, visited_links_string))
+ GetOptValues(visited_links_values, data[i].value, &Visited_Links_As);
+
/* Show Images: SELECT */
if (!strcmp(data[i].tag, images_string)) {
if (!strcmp(data[i].value, images_ignore_all_string)
&& !(pseudo_inline_alts == FALSE && clickable_images == FALSE)) {
- pseudo_inline_alts = FALSE;
- clickable_images = FALSE;
+ pseudo_inline_alts = FALSE;
+ clickable_images = FALSE;
need_reload = TRUE;
} else if (!strcmp(data[i].value, images_use_label_string)
&& !(pseudo_inline_alts == TRUE && clickable_images == FALSE)) {
- pseudo_inline_alts = TRUE;
- clickable_images = FALSE;
+ pseudo_inline_alts = TRUE;
+ clickable_images = FALSE;
need_reload = TRUE;
} else if (!strcmp(data[i].value, images_use_links_string)
&& !(clickable_images == TRUE)) {
@@ -3766,7 +2716,7 @@ PUBLIC int postoptions ARGS1(
if (!strcmp(data[i].tag, verbose_images_string)
&& GetOptValues(verbose_images_type_values, data[i].value, &code)) {
if (verbose_img != code) {
- verbose_img = code;
+ verbose_img = (BOOL) code;
need_reload = TRUE;
}
}
@@ -3774,7 +2724,7 @@ PUBLIC int postoptions ARGS1(
/* VI Keys: ON/OFF */
if (!strcmp(data[i].tag, vi_keys_string)
&& GetOptValues(bool_values, data[i].value, &code)) {
- if ((vi_keys = code) != FALSE) {
+ if ((vi_keys = (BOOL) code) != FALSE) {
set_vi_keys();
} else {
reset_vi_keys();
@@ -3783,15 +2733,7 @@ PUBLIC int postoptions ARGS1(
/* Bookmarks File Menu: SELECT */
if (!strcmp(data[i].tag, mbm_string) && (!LYMBMBlocked)) {
- if (!strcmp(data[i].value, mbm_off_string)) {
- LYMultiBookmarks = FALSE;
- } else if (!strcmp(data[i].value, mbm_standard_string)) {
- LYMultiBookmarks = TRUE;
- LYMBMAdvanced = FALSE;
- } else if (!strcmp(data[i].value, mbm_advanced_string)) {
- LYMultiBookmarks = TRUE;
- LYMBMAdvanced = TRUE;
- }
+ GetOptValues(mbm_values, data[i].value, &LYMultiBookmarks);
}
/* Default Bookmarks filename: INPUT */
@@ -3832,7 +2774,7 @@ PUBLIC int postoptions ARGS1(
/* Raw Mode: ON/OFF */
if (!strcmp(data[i].tag, raw_mode_string)
&& GetOptValues(bool_values, data[i].value, &code)) {
- LYRawMode = code;
+ LYRawMode = (BOOL) code;
}
/*
@@ -3852,7 +2794,13 @@ PUBLIC int postoptions ARGS1(
/* Show dot files: ON/OFF */
if (!strcmp(data[i].tag, show_dotfiles_string) && (!no_dotfiles)
&& GetOptValues(bool_values, data[i].value, &code)) {
- show_dotfiles = code;
+ show_dotfiles = (BOOL) code;
+ }
+
+ /* Show Transfer Rate: enumerated value */
+ if (!strcmp(data[i].tag, show_rate_string)
+ && GetOptValues(rate_values, data[i].value, &code)) {
+ LYTransferRate = code;
}
/* Preferred Document Character Set: INPUT */
@@ -3883,10 +2831,8 @@ PUBLIC int postoptions ARGS1(
*(data[i].value)
? data[i].value
: LYUserAgentDefault);
- if (LYUserAgent && *LYUserAgent &&
- !strstr(LYUserAgent, "Lynx") &&
- !strstr(LYUserAgent, "lynx")) {
- HTAlert(UA_COPYRIGHT_WARNING);
+ if (!LYCheckUserAgent()) {
+ HTAlert(UA_PLEASE_USE_LYNX);
}
}
}
@@ -3901,25 +2847,31 @@ PUBLIC int postoptions ARGS1(
/*
* charset settings: the order is essential here.
*/
- if (display_char_set_old != current_char_set) {
- /*
- * Set the LYUseDefaultRawMode value and character
- * handling if LYRawMode was changed. - FM
- */
- LYUseDefaultRawMode = TRUE;
- HTMLUseCharacterSet(current_char_set);
- }
- if (assume_char_set_changed) {
- LYRawMode = (UCLYhndl_for_unspec == current_char_set);
- }
- if (raw_mode_old != LYRawMode || assume_char_set_changed) {
- /*
- * Set the raw 8-bit or CJK mode defaults and
- * character set if changed. - FM
- */
- HTMLSetUseDefaultRawMode(current_char_set, LYRawMode);
- HTMLSetCharacterHandling(current_char_set);
- }
+ if (display_char_set_old != current_char_set) {
+ /*
+ * Set the LYUseDefaultRawMode value and character
+ * handling if LYRawMode was changed. - FM
+ */
+ LYUseDefaultRawMode = TRUE;
+ HTMLUseCharacterSet(current_char_set);
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+ /* Deduce whether the user wants autoswitch: */
+ switch_display_charsets =
+ (current_char_set == auto_display_charset
+ || current_char_set == auto_other_display_charset);
+#endif
+ }
+ if (assume_char_set_changed && HTCJK != JAPANESE) {
+ LYRawMode = (BOOL) (UCLYhndl_for_unspec == current_char_set);
+ }
+ if (raw_mode_old != LYRawMode || assume_char_set_changed) {
+ /*
+ * Set the raw 8-bit or CJK mode defaults and
+ * character set if changed. - FM
+ */
+ HTMLSetUseDefaultRawMode(current_char_set, LYRawMode);
+ HTMLSetCharacterHandling(current_char_set);
+ }
need_reload = TRUE;
} /* end of charset settings */
@@ -3930,9 +2882,10 @@ PUBLIC int postoptions ARGS1(
FREE(newdoc->post_data);
FREE(data);
if (save_all) {
- _statusline(SAVING_OPTIONS);
- if (save_rc()) {
- _statusline(OPTIONS_SAVED);
+ HTInfoMsg(SAVING_OPTIONS);
+ LYrcShowColor = LYChosenShowColor;
+ if (save_rc(NULL)) {
+ HTInfoMsg(OPTIONS_SAVED);
} else {
HTAlert(OPTIONS_NOT_SAVED);
}
@@ -3942,11 +2895,11 @@ PUBLIC int postoptions ARGS1(
* Exit: working around the previous document.
* Being out of mainloop()/getfile() cycle, do things manually.
*/
- CTRACE(tfp, "\nLYOptions.c/postoptions(): exiting...\n");
- CTRACE(tfp, " need_reload = %s\n",
- need_reload ? "TRUE" : "FALSE");
- CTRACE(tfp, " need_end_reload = %s\n",
- need_end_reload ? "TRUE" : "FALSE");
+ CTRACE((tfp, "\nLYOptions.c/postoptions(): exiting...\n"));
+ CTRACE((tfp, " need_reload = %s\n",
+ need_reload ? "TRUE" : "FALSE"));
+ CTRACE((tfp, " need_end_reload = %s\n",
+ need_end_reload ? "TRUE" : "FALSE"));
/* Options menu was pushed before postoptions(), so pop-up. */
LYpop(newdoc);
@@ -3994,7 +2947,7 @@ PUBLIC int postoptions ARGS1(
* memory".
*/
if (!HTLoadAbsolute(&WWWDoc))
- return(NOT_FOUND);
+ return(NOT_FOUND);
/*
* Now most interesting part: reload document when necessary.
@@ -4026,7 +2979,7 @@ PUBLIC int postoptions ARGS1(
if (need_reload == FALSE) {
/* no uncache, already loaded */
- CTRACE(tfp, "LYOptions.c/postoptions(): now really exit.\n\n");
+ CTRACE((tfp, "LYOptions.c/postoptions(): now really exit.\n\n"));
return(NORMAL);
} else {
/* update HText cache */
@@ -4035,29 +2988,33 @@ PUBLIC int postoptions ARGS1(
* see LYK_RELOAD & LYK_OPTIONS in mainloop for details...
*/
if (HTisDocumentSource()) {
-#ifndef USE_PSRC
- HTOutputFormat = WWW_SOURCE;
-#else
- if (LYpsrc)
- psrc_view = TRUE;
- else
- HTOutputFormat = WWW_SOURCE;
-#endif
+ srcmode_for_next_retrieval(1);
}
#ifdef SOURCE_CACHE
if (reloading == FALSE) {
/* one more attempt to be smart enough: */
- if (HTreparse_document()) {
- CTRACE(tfp, "LYOptions.c/postoptions(): now really exit.\n\n");
+ if (HTcan_reparse_document()) {
+ if (!HTreparse_document())
+ srcmode_for_next_retrieval(0);
+ CTRACE((tfp, "LYOptions.c/postoptions(): now really exit.\n\n"));
return(NORMAL);
}
}
#endif
+ if (newdoc->post_data != NULL && !newdoc->safe &&
+ confirm_post_resub(newdoc->address, newdoc->title, 2, 1) == FALSE) {
+ HTInfoMsg(WILL_NOT_RELOAD_DOC);
+ if (HTisDocumentSource()) {
+ srcmode_for_next_retrieval(0);
+ }
+ return(NORMAL);
+ }
+
HEAD_request = HTLoadedDocumentIsHEAD();
/* uncache and load again */
HTuncache_current_document();
LYpush(newdoc, FALSE);
- CTRACE(tfp, "LYOptions.c/postoptions(): now really exit.\n\n");
+ CTRACE((tfp, "LYOptions.c/postoptions(): now really exit.\n\n"));
return(NULLFILE);
}
@@ -4068,14 +3025,88 @@ PRIVATE char *NewSecureValue NOARGS
{
FREE(secure_value);
if ((secure_value = malloc(80)) != 0) {
- sprintf(secure_value, "%ld", (long)secure_value + (long)time(0));
+#if defined(RAND_MAX)
+ long key = lynx_rand();
+#else
+ long key = (long)secure_value + (long)time(0);
+#endif
+ sprintf(secure_value, "%ld", key);
return secure_value;
}
return "?";
}
/*
- * Okay, someone wants to change options. So, lets gen up a form for them
+ * Note: the 'value' we are passing here is a local copy of the "same" string
+ * as is used in LYrcFile.c to index the savable options.
+ */
+PRIVATE void PutLabel ARGS3(
+ FILE *, fp,
+ char *, name,
+ char *, value)
+{
+ if (will_save_rc(value) && !no_option_save) {
+ fprintf(fp, " %-33s: ", name);
+ } else {
+ int l = strlen(name);
+ fprintf(fp, " %s", name);
+ fprintf(fp, "%s%-*s: ",
+ (l < 30) ? " " : "",
+ (l < 30) ? 32 - l : 3, "(!)");
+ }
+}
+
+/*
+ * For given a list of the .lynxrc names for boolean flags that make up a
+ * composite setting, check if any are not writable for the .lynxrc file. If
+ * so, return that name, so the subsequence will_save_rc() check in PutLabel()
+ * will flag the composite as not-saved.
+ */
+PRIVATE char *check_if_write_lynxrc ARGS1(char **, table)
+{
+ int n;
+ char *result = NULL;
+
+ for (n = 0; table[n] != 0; ++n) {
+ result = table[n];
+ if (!will_save_rc(result))
+ break;
+ }
+ return result;
+}
+
+/*
+ * The options menu treats "Cookies" as a single enumeration, but it is read
+ * from lynx.cfg (and perhaps .lynxrc) as a set of booleans. Check if any are
+ * not writable to .lynxrc, so we can show the user.
+ */
+PRIVATE char *will_save_cookies NOARGS
+{
+ static char *table[] = {
+ "set_cookies", /* LYSetCookies */
+ "accept_all_cookies", /* LYAcceptAllCookies */
+ NULL
+ };
+ return check_if_write_lynxrc(table);
+}
+
+/*
+ * The options menu treats "Show images" as a single enumeration, but it is
+ * read from lynx.cfg (and perhaps .lynxrc) as a set of booleans. Check if any
+ * are not writable to .lynxrc, so we can show the user.
+ */
+PRIVATE char *will_save_images NOARGS
+{
+ static char *table[] = {
+ "make_pseudo_alts_for_inlines", /* pseudo_inline_alts */
+ "make_links_for_all_images", /* clickable_images */
+ NULL
+ };
+ return check_if_write_lynxrc(table);
+}
+
+/*
+ * Okay, someone wants to change options. So, let's gen up a form for them
* and pass it around. Gor, this is ugly. Be a lot easier in Bourne with
* "here" documents. :->
* Basic Strategy: For each option, throw up the appropriate type of
@@ -4089,16 +3120,18 @@ PRIVATE int gen_options ARGS1(
char **, newfile)
{
int i;
-#if defined(USE_SLANG) || defined(COLOR_CURSES)
- BOOLEAN can_do_colors;
-#endif
- static char tempfile[LY_MAXPATH];
+ static char tempfile[LY_MAXPATH] = "\0";
+ BOOLEAN disable_all = FALSE;
FILE *fp0;
size_t cset_len = 0;
- size_t text_len = COLS - 38; /* cf: PutLabel */
+ size_t text_len = LYscreenWidth() > 45 ? LYscreenWidth() - 38 : 7; /* cf: PutLabel */
- LYRemoveTemp(tempfile);
- fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w");
+ if (LYReuseTempfiles) {
+ fp0 = LYOpenTempRewrite(tempfile, HTML_SUFFIX, "w");
+ } else {
+ LYRemoveTemp(tempfile);
+ fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w");
+ }
if (fp0 == NULL) {
HTAlert(UNABLE_TO_OPEN_TEMPFILE);
return(NOT_FOUND);
@@ -4106,21 +3139,42 @@ PRIVATE int gen_options ARGS1(
LYLocalFileToURL(newfile, tempfile);
+ /* This should not be needed if we regenerate the temp file every
+ time with a new name, which just happened above in the case
+ LYReuseTempfiles==FALSE. Even for LYReuseTempfiles=TRUE, code
+ at the end of postoptions() may remove an older cached version
+ from memory if that version of the page was left by submitting
+ changes. (But that code doesn't do that - HTuncache_current_document
+ is currently commented out.) - kw 1999-11-27
+ If access to the actual file via getfile() later fails
+ (maybe because of some restrictions), mainloop may leave
+ this flag on after popping the previous doc which is then
+ unnecessarily reloaded. But I changed mainloop to reset
+ the flag. - kw 1999-05-24 */
LYforce_no_cache = TRUE;
+ /*
+ * Without LYUseFormsOptions set we should maybe not even get here.
+ * However, it's possible we do; disable the form in that case. - kw
+ */
+#ifndef NO_OPTION_MENU
+ if (!LYUseFormsOptions)
+ disable_all = TRUE;
+#endif
+
BeginInternalPage(fp0, OPTIONS_TITLE, NULL); /* help link below */
/*
* I do C, not HTML. Feel free to pretty this up.
*/
- fprintf(fp0,"<form action=\"LYNXOPTIONS:\" method=\"post\">\n");
+ fprintf(fp0, "<form action=\"LYNXOPTIONS:\" method=\"post\">\n");
/*
* use following with some sort of one shot secret key akin to NCSA
* (or was it CUTE?) telnet one shot password to allow ftp to self.
* to prevent spoofing.
*/
- fprintf(fp0,"<input name=\"%s\" type=\"hidden\" value=\"%s\">\n",
- secure_string, NewSecureValue());
+ fprintf(fp0, "<input name=\"%s\" type=\"hidden\" value=\"%s\">\n",
+ secure_string, NewSecureValue());
/*
* visible text begins here
@@ -4128,60 +3182,89 @@ PRIVATE int gen_options ARGS1(
/* Submit/Reset/Help */
fprintf(fp0,"<p align=center>\n");
- fprintf(fp0,"<input type=\"submit\" value=\"%s\"> - \n", ACCEPT_CHANGES);
- fprintf(fp0,"<input type=\"reset\" value=\"%s\">\n", RESET_CHANGES);
- fprintf(fp0,"%s\n", CANCEL_CHANGES);
+ if (!disable_all) {
+ fprintf(fp0,"<input type=\"submit\" value=\"%s\"> - \n", ACCEPT_CHANGES);
+ fprintf(fp0,"<input type=\"reset\" value=\"%s\">\n", RESET_CHANGES);
+ fprintf(fp0,"%s\n", CANCEL_CHANGES);
+ }
fprintf(fp0, "<a href=\"%s%s\">%s</a>\n",
helpfilepath, OPTIONS_HELP, TO_HELP);
/* Save options */
if (!no_option_save) {
- fprintf(fp0, "<p align=center>%s: ", SAVE_OPTIONS);
- fprintf(fp0, "<input type=\"checkbox\" name=\"%s\">\n",
- save_options_string);
+ if (!disable_all) {
+ fprintf(fp0, "<p align=center>%s: ", SAVE_OPTIONS);
+ fprintf(fp0, "<input type=\"checkbox\" name=\"%s\">\n",
+ save_options_string);
+ }
+ fprintf(fp0, "<br>(options marked with (!) will not be saved)\n");
}
/*
* preformatted text follows
*/
fprintf(fp0,"<pre>\n");
- fprintf(fp0,"\n <em>%s</em>\n", gettext("Personal Preferences"));
+
+ fprintf(fp0,"\n <em>%s</em>\n", gettext("General Preferences"));
+ /*****************************************************************/
+
+ /* User Mode: SELECT */
+ PutLabel(fp0, gettext("User mode"), user_mode_string);
+ BeginSelect(fp0, user_mode_string);
+ PutOptValues(fp0, user_mode, user_mode_values);
+ EndSelect(fp0);
+
+ /* Editor: INPUT */
+ PutLabel(fp0, gettext("Editor"), editor_string);
+ PutTextInput(fp0, editor_string, NOTEMPTY(editor), text_len,
+ DISABLED(no_editor || system_editor));
+
+ /* Search Type: SELECT */
+ PutLabel(fp0, gettext("Type of Search"), search_type_string);
+ BeginSelect(fp0, search_type_string);
+ PutOptValues(fp0, case_sensitive, search_type_values);
+ EndSelect(fp0);
/* Cookies: SELECT */
- PutLabel(fp0, gettext("Cookies"));
+ PutLabel(fp0, gettext("Cookies"), will_save_cookies());
BeginSelect(fp0, cookies_string);
PutOption(fp0, !LYSetCookies,
- cookies_ignore_all_string,
- cookies_ignore_all_string);
+ cookies_ignore_all_string,
+ cookies_ignore_all_string);
PutOption(fp0, LYSetCookies && !LYAcceptAllCookies,
- cookies_up_to_user_string,
- cookies_up_to_user_string);
+ cookies_up_to_user_string,
+ cookies_up_to_user_string);
PutOption(fp0, LYSetCookies && LYAcceptAllCookies,
- cookies_accept_all_string,
- cookies_accept_all_string);
+ cookies_accept_all_string,
+ cookies_accept_all_string);
EndSelect(fp0);
- /* Editor: INPUT */
- PutLabel(fp0, gettext("Editor"));
- PutTextInput(fp0, editor_string, NOTEMPTY(editor), text_len,
- DISABLED(no_editor || system_editor));
+
+ fprintf(fp0,"\n <em>%s</em>\n", gettext("Keyboard Input"));
+ /*****************************************************************/
+
+ /* Keypad Mode: SELECT */
+ PutLabel(fp0, gettext("Keypad mode"), keypad_mode_string);
+ BeginSelect(fp0, keypad_mode_string);
+ PutOptValues(fp0, keypad_mode, keypad_mode_values);
+ EndSelect(fp0);
/* Emacs keys: ON/OFF */
- PutLabel(fp0, gettext("Emacs keys"));
+ PutLabel(fp0, gettext("Emacs keys"), emacs_keys_string);
BeginSelect(fp0, emacs_keys_string);
PutOptValues(fp0, emacs_keys, bool_values);
EndSelect(fp0);
- /* Keypad Mode: SELECT */
- PutLabel(fp0, gettext("Keypad mode"));
- BeginSelect(fp0, keypad_mode_string);
- PutOptValues(fp0, keypad_mode, keypad_mode_values);
+ /* VI Keys: ON/OFF */
+ PutLabel(fp0, gettext("VI keys"), vi_keys_string);
+ BeginSelect(fp0, vi_keys_string);
+ PutOptValues(fp0, vi_keys, bool_values);
EndSelect(fp0);
/* Line edit style: SELECT */
if (LYLineeditNames[1]) { /* well, at least 2 line edit styles available */
- PutLabel(fp0, "Line edit style");
- BeginSelect(fp0, lineedit_style_string);
+ PutLabel(fp0, gettext("Line edit style"), lineedit_mode_string);
+ BeginSelect(fp0, lineedit_mode_string);
for (i = 0; LYLineeditNames[i]; i++) {
char temp[16];
sprintf(temp, "%d", i);
@@ -4192,113 +3275,39 @@ PRIVATE int gen_options ARGS1(
#ifdef EXP_KEYBOARD_LAYOUT
/* Keyboard layout: SELECT */
- PutLabel(fp0, "Keyboard layout");
+ PutLabel(fp0, gettext("Keyboard layout"), kblayout_string);
BeginSelect(fp0, kblayout_string);
for (i = 0; LYKbLayoutNames[i]; i++) {
char temp[16];
sprintf(temp, "%d", i);
- PutOption(fp0, i==current_layout, temp, LYKbLayoutNames[i]);
+ PutOption(fp0, i == current_layout, temp, LYKbLayoutNames[i]);
}
EndSelect(fp0);
#endif /* EXP_KEYBOARD_LAYOUT */
- /* Mail Address: INPUT */
- PutLabel(fp0, gettext("Personal mail address"));
- PutTextInput(fp0, mail_address_string,
- NOTEMPTY(personal_mail_address), text_len, "");
-
- /* Search Type: SELECT */
- PutLabel(fp0, gettext("Searching type"));
- BeginSelect(fp0, search_type_string);
- PutOptValues(fp0, case_sensitive, search_type_values);
- EndSelect(fp0);
-
- /* Show Color: SELECT */
-#if defined(USE_SLANG) || defined(COLOR_CURSES)
- can_do_colors = 1;
-#if defined(COLOR_CURSES)
- can_do_colors = has_colors();
-#endif
- PutLabel(fp0, gettext("Show color"));
- MaybeSelect(fp0, !can_do_colors, show_color_string);
- if (no_option_save) {
- if (LYShowColor == SHOW_COLOR_NEVER) {
- LYShowColor = SHOW_COLOR_OFF;
- } else if (LYShowColor == SHOW_COLOR_ALWAYS) {
- LYShowColor = SHOW_COLOR_ON;
- }
- PutOptValues(fp0, LYShowColor, bool_values);
- } else {
- if (LYChosenShowColor == SHOW_COLOR_UNKNOWN) {
- switch (LYrcShowColor) {
- case SHOW_COLOR_NEVER:
- LYChosenShowColor =
- (LYShowColor >= SHOW_COLOR_ON) ?
- SHOW_COLOR_ON : SHOW_COLOR_NEVER;
- break;
- case SHOW_COLOR_ALWAYS:
- if (!can_do_colors)
- LYChosenShowColor = SHOW_COLOR_ALWAYS;
- else
- LYChosenShowColor =
- (LYShowColor >= SHOW_COLOR_ON) ?
- SHOW_COLOR_ALWAYS : SHOW_COLOR_OFF;
- break;
- default:
- LYChosenShowColor =
- (LYShowColor >= SHOW_COLOR_ON) ?
- SHOW_COLOR_ON : SHOW_COLOR_OFF;
- }
- }
- show_color_values[3].LongName = (can_do_colors) ? always_string
- : "Always try";
- PutOptValues(fp0, LYChosenShowColor, show_color_values);
- }
- EndSelect(fp0);
-#endif /* USE_SLANG || COLOR_CURSES */
-
- /* Show cursor: ON/OFF */
- PutLabel(fp0, gettext("Show cursor"));
- BeginSelect(fp0, show_cursor_string);
- PutOptValues(fp0, LYShowCursor, bool_values);
- EndSelect(fp0);
-
- /* User Mode: SELECT */
- PutLabel(fp0, gettext("User mode"));
- BeginSelect(fp0, user_mode_string);
- PutOptValues(fp0, user_mode, user_mode_values);
- EndSelect(fp0);
-
- /* VI Keys: ON/OFF */
- PutLabel(fp0, gettext("VI keys"));
- BeginSelect(fp0, vi_keys_string);
- PutOptValues(fp0, vi_keys, bool_values);
- EndSelect(fp0);
+ /*
+ * Display and Character Set
+ */
+ fprintf(fp0,"\n <em>%s</em>\n", gettext("Display and Character Set"));
+ /*****************************************************************/
/* Display Character Set: SELECT */
- PutLabel(fp0, gettext("Display character set"));
+ PutLabel(fp0, gettext("Display character set"), display_char_set_string);
BeginSelect(fp0, display_char_set_string);
for (i = 0; LYchar_set_names[i]; i++) {
char temp[10];
size_t len = strlen(LYchar_set_names[i]);
if (len > cset_len)
- cset_len = len;
+ cset_len = len;
sprintf(temp, "%d", i);
+#ifdef EXP_CHARSET_CHOICE
+ if (!charset_subsets[i].hide_display)
+#endif
PutOption(fp0, i==current_char_set, temp, LYchar_set_names[i]);
}
EndSelect(fp0);
- /* X Display: INPUT */
- PutLabel(fp0, gettext("X Display"));
- PutTextInput(fp0, x_display_string, NOTEMPTY(x_display), text_len, "");
-
- /*
- * Document Layout
- */
- fprintf(fp0,"\n <em>%s</em>\n", gettext("Document Layout"));
-
/* Assume Character Set: SELECT */
- /* if (user_mode==ADVANCED_MODE) */
{
int curval;
curval = UCLYhndl_for_unspec;
@@ -4309,114 +3318,157 @@ PRIVATE int gen_options ARGS1(
* or bad? I don't know. MRC
*/
if (curval == current_char_set) {
- /* ok, LYRawMode, so use UCAssume_MIMEcharset */
+ /* ok, LYRawMode, so use UCAssume_MIMEcharset */
curval = safeUCGetLYhndl_byMIME(UCAssume_MIMEcharset);
}
- PutLabel(fp0, gettext("Assumed document character set"));
+ PutLabel(fp0, gettext("Assumed document character set"), assume_char_set_string);
BeginSelect(fp0, assume_char_set_string);
for (i = 0; i < LYNumCharsets; i++) {
- PutOption(fp0, i==curval,
- LYCharSet_UC[i].MIMEname,
- LYCharSet_UC[i].MIMEname);
+#ifdef EXP_CHARSET_CHOICE
+ if (!charset_subsets[i].hide_assumed)
+#endif
+ PutOption(fp0, i == curval,
+ LYCharSet_UC[i].MIMEname,
+ LYCharSet_UC[i].MIMEname);
}
EndSelect(fp0);
}
/* Raw Mode: ON/OFF */
- if (LYHaveCJKCharacterSet)
+ if (LYHaveCJKCharacterSet) {
/*
* Since CJK people hardly mixed with other world
* we split the header to make it more readable:
* "CJK mode" for CJK display charsets, and "Raw 8-bit" for others.
*/
- PutLabel(fp0, gettext("CJK mode"));
- else
- PutLabel(fp0, gettext("Raw 8-bit"));
+ PutLabel(fp0, gettext("CJK mode"), raw_mode_string);
+ } else {
+ PutLabel(fp0, gettext("Raw 8-bit"), raw_mode_string);
+ }
BeginSelect(fp0, raw_mode_string);
PutOptValues(fp0, LYRawMode, bool_values);
EndSelect(fp0);
- /* HTML error recovery: SELECT */
- PutLabel(fp0, gettext("HTML error recovery"));
- BeginSelect(fp0, DTD_recovery_string);
- PutOptValues(fp0, Old_DTD, DTD_type_values);
+ /* X Display: INPUT */
+ PutLabel(fp0, gettext("X Display"), x_display_string);
+ PutTextInput(fp0, x_display_string, NOTEMPTY(x_display), text_len, "");
+
+ /*
+ * Document Appearance
+ */
+ fprintf(fp0,"\n <em>%s</em>\n", gettext("Document Appearance"));
+ /*****************************************************************/
+
+ /* Show Color: SELECT */
+#if defined(USE_SLANG) || defined(COLOR_CURSES)
+ SetupChosenShowColor();
+ PutLabel(fp0, gettext("Show color"), show_color_string);
+ if (no_option_save) {
+ MaybeSelect(fp0, !can_do_colors, show_color_string);
+ if (LYShowColor == SHOW_COLOR_NEVER) {
+ LYShowColor = SHOW_COLOR_OFF;
+ } else if (LYShowColor == SHOW_COLOR_ALWAYS) {
+ LYShowColor = SHOW_COLOR_ON;
+ }
+ PutOptValues(fp0, LYShowColor - SHOW_COLOR_OFF, bool_values);
+ } else {
+ BeginSelect(fp0, show_color_string);
+ if (can_do_colors) {
+ show_color_values[2].HtmlName = on_string;
+ show_color_values[3].LongName = always_string;
+ } else {
+ show_color_values[2].HtmlName = NULL; /* suppress "ON" - kw */
+ show_color_values[3].LongName = "Always try";
+ }
+ PutOptValues(fp0, LYChosenShowColor, show_color_values);
+ }
+ EndSelect(fp0);
+#endif /* USE_SLANG || COLOR_CURSES */
+
+ /* Show cursor: ON/OFF */
+ PutLabel(fp0, gettext("Show cursor"), show_cursor_string);
+ BeginSelect(fp0, show_cursor_string);
+ PutOptValues(fp0, LYShowCursor, bool_values);
EndSelect(fp0);
/* Select Popups: ON/OFF */
- PutLabel(fp0, gettext("Popups for select fields"));
+ PutLabel(fp0, gettext("Popups for select fields"), select_popups_string);
BeginSelect(fp0, select_popups_string);
PutOptValues(fp0, LYSelectPopups, bool_values);
EndSelect(fp0);
+#ifndef SH_EX /* 1999/01/19 (Tue) */
+ /* HTML error recovery: SELECT */
+ PutLabel(fp0, gettext("HTML error recovery"), DTD_recovery_string);
+ BeginSelect(fp0, DTD_recovery_string);
+ PutOptValues(fp0, Old_DTD, DTD_type_values);
+ EndSelect(fp0);
+#endif
+
/* Show Images: SELECT */
- PutLabel(fp0, gettext("Show images"));
+ PutLabel(fp0, gettext("Show images"), will_save_images());
BeginSelect(fp0, images_string);
PutOption(fp0, !pseudo_inline_alts && !clickable_images,
- images_ignore_all_string,
- images_ignore_all_string);
+ images_ignore_all_string,
+ images_ignore_all_string);
PutOption(fp0, pseudo_inline_alts && !clickable_images,
- images_use_label_string,
- images_use_label_string);
+ images_use_label_string,
+ images_use_label_string);
PutOption(fp0, clickable_images,
- images_use_links_string,
- images_use_links_string);
+ images_use_links_string,
+ images_use_links_string);
EndSelect(fp0);
/* Verbose Images: ON/OFF */
- PutLabel(fp0, gettext("Verbose images"));
+ PutLabel(fp0, gettext("Verbose images"), verbose_images_string);
BeginSelect(fp0, verbose_images_string);
PutOptValues(fp0, verbose_img, verbose_images_type_values);
EndSelect(fp0);
/*
- * Bookmark Options
+ * Headers Transferred to Remote Servers
*/
- fprintf(fp0,"\n <em>%s</em>\n", gettext("Bookmark Options"));
+ fprintf(fp0,"\n <em>%s</em>\n", gettext("Headers Transferred to Remote Servers"));
+ /*****************************************************************/
- /* Multi-Bookmark Mode: SELECT */
- if (!LYMBMBlocked) {
- PutLabel(fp0, gettext("Multi-bookmarks"));
- BeginSelect(fp0, mbm_string);
- PutOption(fp0, !LYMultiBookmarks,
- mbm_off_string,
- mbm_off_string);
- PutOption(fp0, LYMultiBookmarks && !LYMBMAdvanced,
- mbm_standard_string,
- mbm_standard_string);
- PutOption(fp0, LYMultiBookmarks && LYMBMAdvanced,
- mbm_advanced_string,
- mbm_advanced_string);
- EndSelect(fp0);
- }
+ /* Mail Address: INPUT */
+ PutLabel(fp0, gettext("Personal mail address"), mail_address_string);
+ PutTextInput(fp0, mail_address_string,
+ NOTEMPTY(personal_mail_address), text_len, "");
- /* Bookmarks File Menu: LINK/INPUT */
- if (LYMultiBookmarks) {
+ /* Preferred Document Character Set: INPUT */
+ PutLabel(fp0, gettext("Preferred document character set"), preferred_doc_char_string);
+ PutTextInput(fp0, preferred_doc_char_string,
+ NOTEMPTY(pref_charset), cset_len+2, "");
- PutLabel(fp0, gettext("Review/edit Bookmarks files"));
- fprintf(fp0, "<a href=\"LYNXOPTIONS://MBM_MENU\">%s</a>\n",
- gettext("Goto multi-bookmark menu"));
+ /* Preferred Document Language: INPUT */
+ PutLabel(fp0, gettext("Preferred document language"), preferred_doc_lang_string);
+ PutTextInput(fp0, preferred_doc_lang_string,
+ NOTEMPTY(language), cset_len+2, "");
- } else {
- PutLabel(fp0, gettext("Bookmarks file"));
- PutTextInput(fp0, single_bookmark_string,
- NOTEMPTY(bookmark_page), text_len, "");
+ /* User Agent: INPUT */
+ if (!no_useragent) {
+ PutLabel(fp0, gettext("User-Agent header"), user_agent_string);
+ PutTextInput(fp0, user_agent_string,
+ NOTEMPTY(LYUserAgent), text_len, "");
}
/*
- * File Management Options
+ * Listing and Accessing Files
*/
- fprintf(fp0,"\n <em>%s</em>\n", DIRED_MENU_TITLE);
+ fprintf(fp0,"\n <em>%s</em>\n", gettext("Listing and Accessing Files"));
+ /*****************************************************************/
/* FTP sort: SELECT */
- PutLabel(fp0, gettext("FTP sort criteria"));
+ PutLabel(fp0, gettext("FTP sort criteria"), ftp_sort_string);
BeginSelect(fp0, ftp_sort_string);
PutOptValues(fp0, HTfileSortMethod, ftp_sort_values);
EndSelect(fp0);
#ifdef DIRED_SUPPORT
/* Local Directory Sort: SELECT */
- PutLabel(fp0, gettext("Local directory sort criteria"));
+ PutLabel(fp0, gettext("Local directory sort criteria"), dired_sort_string);
BeginSelect(fp0, dired_sort_string);
PutOptValues(fp0, dir_list_style, dired_values);
EndSelect(fp0);
@@ -4424,15 +3476,15 @@ PRIVATE int gen_options ARGS1(
/* Show dot files: ON/OFF */
if (!no_dotfiles) {
- PutLabel(fp0, gettext("Show dot files"));
+ PutLabel(fp0, gettext("Show dot files"), show_dotfiles_string);
BeginSelect(fp0, show_dotfiles_string);
PutOptValues(fp0, show_dotfiles, bool_values);
EndSelect(fp0);
}
/* Execution links: SELECT */
-#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS
- PutLabel(fp0, gettext("Execution links"));
+#if defined(ENABLE_OPTS_CHANGE_EXEC) && (defined(EXEC_LINKS) || defined(EXEC_SCRIPTS))
+ PutLabel(fp0, gettext("Execution links"), exec_links_string);
BeginSelect(fp0, exec_links_string);
#ifndef NEVER_ALLOW_REMOTE_EXEC
PutOptValues(fp0, local_exec
@@ -4440,50 +3492,68 @@ PRIVATE int gen_options ARGS1(
: (local_exec_on_local_files
? EXEC_LOCAL
: EXEC_NEVER),
- exec_links_values);
+ exec_links_values);
#else
PutOptValues(fp0, local_exec_on_local_files
? EXEC_LOCAL
: EXEC_NEVER,
- exec_links_values);
+ exec_links_values);
#endif /* !NEVER_ALLOW_REMOTE_EXEC */
EndSelect(fp0);
-#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
+#endif /* ENABLE_OPTS_CHANGE_EXEC */
+
+#ifdef EXP_READPROGRESS
+ /* Local Directory Sort: SELECT */
+ PutLabel(fp0, gettext("Show transfer rate"), show_rate_string);
+ BeginSelect(fp0, show_rate_string);
+ PutOptValues(fp0, LYTransferRate, rate_values);
+ EndSelect(fp0);
+#endif /* EXP_READPROGRESS */
/*
- * Headers transferred to remote server
+ * Special Files and Screens
*/
- fprintf(fp0,"\n <em>%s</em>\n", gettext("Headers transferred to remote server"));
-
- /* Preferred Document Character Set: INPUT */
- PutLabel(fp0, gettext("Preferred document character set"));
- PutTextInput(fp0, preferred_doc_char_string,
- NOTEMPTY(pref_charset), cset_len+2, "");
+ fprintf(fp0,"\n <em>%s</em>\n", gettext("Special Files and Screens"));
+ /*****************************************************************/
- /* Preferred Document Language: INPUT */
- PutLabel(fp0, gettext("Preferred document language"));
- PutTextInput(fp0, preferred_doc_lang_string,
- NOTEMPTY(language), cset_len+2, "");
+ /* Multi-Bookmark Mode: SELECT */
+ if (!LYMBMBlocked) {
+ PutLabel(fp0, gettext("Multi-bookmarks"), mbm_string);
+ BeginSelect(fp0, mbm_string);
+ PutOptValues(fp0, LYMultiBookmarks, mbm_values);
+ EndSelect(fp0);
+ }
- /* User Agent: INPUT */
- if (!no_useragent) {
- PutLabel(fp0, gettext("User-Agent header"));
- PutTextInput(fp0, user_agent_string,
- NOTEMPTY(LYUserAgent), text_len, "");
+ /* Bookmarks File Menu: LINK/INPUT */
+ if (LYMultiBookmarks) {
+ PutLabel(fp0, gettext("Review/edit Bookmarks files"), mbm_string);
+ fprintf(fp0, "<a href=\"LYNXOPTIONS://MBM_MENU\">%s</a>\n",
+ gettext("Goto multi-bookmark menu"));
+ } else {
+ PutLabel(fp0, gettext("Bookmarks file"), single_bookmark_string);
+ PutTextInput(fp0, single_bookmark_string,
+ NOTEMPTY(bookmark_page), text_len, "");
}
- if (!LYRestricted) {
- fprintf(fp0,
- "\n Check your <a href=\"LYNXCFG:\">lynx.cfg</a> here\n");
+ /* Visited Pages: SELECT */
+ PutLabel(fp0, gettext("Visited Pages"), visited_links_string);
+ BeginSelect(fp0, visited_links_string);
+ PutOptValues(fp0, Visited_Links_As, visited_links_values);
+ EndSelect(fp0);
+
+ if (!no_lynxcfg_info) {
+ fprintf(fp0, "\n Check your <a href=\"LYNXCFG:\">lynx.cfg</a> here\n");
}
fprintf(fp0,"\n</pre>\n");
/* Submit/Reset */
- fprintf(fp0,"<p align=center>\n");
- fprintf(fp0,"<input type=\"submit\" value=\"%s\">\n - ", ACCEPT_CHANGES);
- fprintf(fp0,"<input type=\"reset\" value=\"%s\">\n", RESET_CHANGES);
- fprintf(fp0,"%s\n", CANCEL_CHANGES);
+ if (!disable_all) {
+ fprintf(fp0,"<p align=center>\n");
+ fprintf(fp0,"<input type=\"submit\" value=\"%s\">\n - ", ACCEPT_CHANGES);
+ fprintf(fp0,"<input type=\"reset\" value=\"%s\">\n", RESET_CHANGES);
+ fprintf(fp0,"%s\n", CANCEL_CHANGES);
+ }
/*
* close HTML
diff --git a/gnu/usr.bin/lynx/src/LYOptions.h b/gnu/usr.bin/lynx/src/LYOptions.h
index 60cb6c6edfa..a606a3820db 100644
--- a/gnu/usr.bin/lynx/src/LYOptions.h
+++ b/gnu/usr.bin/lynx/src/LYOptions.h
@@ -2,17 +2,23 @@
#define LYOPTIONS_H
#include <LYStructs.h>
+#include <LYStrings.h>
extern BOOLEAN term_options; /* for LYgetstr() */
+extern BOOLEAN LYCheckUserAgent NOPARAMS;
extern void edit_bookmarks NOPARAMS;
extern int popup_choice PARAMS((
int cur_choice,
int line,
int column,
- char ** choices,
- int i_length,
- int disabled));
+ CONST char ** choices,
+ int length,
+ int disabled,
+ BOOLEAN mouse));
+
+#define LYChoosePopup(cur, line, column, choices, length, disabled, mouse) \
+ popup_choice(cur, line, column, (CONST char **)choices, length, disabled, mouse)
#ifndef NO_OPTION_FORMS
extern int postoptions PARAMS((document *newdoc));
diff --git a/gnu/usr.bin/lynx/src/LYPrettySrc.c b/gnu/usr.bin/lynx/src/LYPrettySrc.c
index 3ff99b35456..1c5a5e493e0 100644
--- a/gnu/usr.bin/lynx/src/LYPrettySrc.c
+++ b/gnu/usr.bin/lynx/src/LYPrettySrc.c
@@ -5,8 +5,14 @@
#include <HTUtils.h>
#include <LYHash.h>
#include <LYPrettySrc.h>
+#include <LYStrings.h>
+#include <LYLeaks.h>
-#ifdef USE_PSRC
+ /* This file creates too many "leak detected" entries in Lynx.leaks. */
+#define NO_MEMORY_TRACKING
+#include <LYLeaks.h>
+
+#ifdef USE_PRETTYSRC
BOOL psrc_convert_string = FALSE;
PUBLIC BOOL psrc_view = FALSE;/* this is read by SGML_put_character - TRUE
when viewing pretty source */
@@ -16,11 +22,12 @@ PUBLIC BOOL LYpsrc = FALSE; /* this tells what will be shown on '\':
PUBLIC BOOL sgml_in_psrc_was_initialized;
PUBLIC BOOL psrc_nested_call;
PUBLIC BOOL psrc_first_tag;
-
+PUBLIC BOOL mark_htext_as_source=FALSE;
/* tagspecs from lynx.cfg are read here. After .lss file is read (is with lss
support), the style cache and markup are created before entering the
mainloop. */
-PUBLIC char* HTL_tagspecs[HTL_num_lexems] = {
+PUBLIC BOOL psrcview_no_anchor_numbering = FALSE;
+PRIVATE char* HTL_tagspecs_defaults[HTL_num_lexemes] = {
/* these values are defaults. They are also listed in comments of distibution's
lynx.cfg.*/
#ifdef USE_COLOR_STYLE
@@ -37,26 +44,27 @@ PUBLIC char* HTL_tagspecs[HTL_num_lexems] = {
"span.htmlsrc_badattr:!span",
"span.htmlsrc_sgmlspecial:!span"
#else
- "b:!b",
- "b:!b",
- ":",
- "!b:b",
- "b:!b",
- "b:!b",
- ":",
- ":",
- "b:!b",
- ":",
- "!b:b",
- "b:!b"
+ "b:!b", /* comment */
+ "b:!b", /* tag */
+ "b:!b", /* attrib */
+ ":", /* attrval */
+ "b:!b", /* abracket*/
+ "b:!b", /* entity */
+ ":", /* href */
+ ":", /* entire */
+ "b:!b", /* badseq */
+ ":", /* badtag */
+ ":", /* badattr */
+ "b:!b" /* sgmlspec*/
#endif
};
+PUBLIC char* HTL_tagspecs[HTL_num_lexemes];
/* these are pointers since tagspec can be empty (the pointer will be NULL
in that case) */
-PUBLIC HT_tagspec* lexem_start[HTL_num_lexems];
-PUBLIC HT_tagspec* lexem_end[HTL_num_lexems];
+PUBLIC HT_tagspec* lexeme_start[HTL_num_lexemes];
+PUBLIC HT_tagspec* lexeme_end[HTL_num_lexemes];
PUBLIC int tagname_transform = 2;
PUBLIC int attrname_transform = 2;
@@ -69,8 +77,7 @@ PRIVATE int html_src_tag_index ARGS1(
return (tag && tag != &HTTag_unrecognized ) ? tag - HTML_dtd.tags : -1;
}
-typedef enum _html_src_check_state
-{
+typedef enum {
HTSRC_CK_normal,
HTSRC_CK_seen_excl,
HTSRC_CK_after_tagname,
@@ -80,7 +87,7 @@ typedef enum _html_src_check_state
PRIVATE void append_close_tag ARGS3(
char*, tagname,
HT_tagspec**, head,
- HT_tagspec**, tail)
+ HT_tagspec**, tail)
{
int idx, nattr;
HTTag* tag;
@@ -93,14 +100,17 @@ PRIVATE void append_close_tag ARGS3(
if (idx == -1) {
fprintf(stderr,
"internal error: previous check didn't find bad HTML tag %s", tagname);
- exit_immediately(-1);
+ exit_immediately(EXIT_FAILURE);
}
- subj = (HT_tagspec*) calloc( sizeof(*subj), 1);
+ subj = typecalloc(HT_tagspec);
subj->element = idx;
- subj->present = (BOOL*)calloc( nattr*sizeof (BOOL), 1);
- subj->value = (char**)calloc( nattr*sizeof (char*), 1);
+ subj->present = typecallocn(BOOL, nattr);
+ subj->value = typecallocn(char *, nattr);
subj->start = FALSE;
+#ifdef USE_COLOR_STYLE
+ subj->class_name = NULL;
+#endif
if (!*head) {
*head = subj; *tail = subj;
@@ -115,7 +125,7 @@ PRIVATE void append_open_tag ARGS4(
char*, tagname,
char*, classname GCC_UNUSED,
HT_tagspec**, head,
- HT_tagspec**, tail)
+ HT_tagspec**, tail)
{
HT_tagspec* subj;
HTTag* tag;
@@ -127,7 +137,7 @@ PRIVATE void append_open_tag ARGS4(
subj = *tail;
subj->start = TRUE;
- tag = HTML_dtd.tags+subj->element;
+ tag = HTML_dtd.tags + subj->element;
#ifdef USE_COLOR_STYLE
hcode = hash_code_lowercase_on_fly(tagname);
@@ -149,17 +159,16 @@ PRIVATE void append_open_tag ARGS4(
hcode = hash_code_aggregate_lower_str(classname, hcode);
StrAllocCopy(subj->class_name, classname);
} else {
- subj->class_name = "";
+ StrAllocCopy(subj->class_name,"");
}
subj->style = hcode;
#endif
}
-
/* returns 1 if incorrect */
PUBLIC int html_src_parse_tagspec ARGS4(
char*, ts,
- HTlexem, lexem,
+ HTlexeme, lexeme,
BOOL, checkonly,
BOOL, isstart)
{
@@ -171,7 +180,7 @@ PUBLIC int html_src_parse_tagspec ARGS4(
char stop = FALSE, after_excl = FALSE;
html_src_check_state state = HTSRC_CK_normal;
HT_tagspec* head = NULL, *tail = NULL;
- HT_tagspec** slot = ( isstart ? lexem_start : lexem_end ) +lexem;
+ HT_tagspec** slot = ( isstart ? lexeme_start : lexeme_end ) + lexeme;
while (!stop) {
switch (state) {
@@ -187,9 +196,9 @@ PUBLIC int html_src_parse_tagspec ARGS4(
after_excl = TRUE;
break;
default:
- if (isalpha(*p) || *p == '_') {
+ if (isalpha(UCH(*p)) || *p == '_') {
tagstart = p;
- while (*p && ( isalpha(*p) || *p == '_') )
+ while (*p && ( isalnum(UCH(*p)) || *p == '_') )
++p;
tagend = p;
state = HTSRC_CK_after_tagname;
@@ -201,7 +210,9 @@ PUBLIC int html_src_parse_tagspec ARGS4(
case HTSRC_CK_after_tagname:
switch (*p) {
case '\0': stop = TRUE;
+ /* FALLTHRU */
case ' ':
+ /* FALLTHRU */
case '\t':
{
char save = *tagend;
@@ -240,9 +251,9 @@ PUBLIC int html_src_parse_tagspec ARGS4(
return 1;
default: {
char save, save1;
- if ( isalpha(*p) || *p == '_' ) {
+ if ( isalpha(UCH(*p)) || *p == '_' ) {
classstart = p;
- while (*p && ( isalpha(*p) || *p == '_') ) ++p;
+ while (*p && ( isalnum(UCH(*p)) || *p == '_') ) ++p;
classend = p;
save = *classend;
*classend = '\0';
@@ -273,29 +284,76 @@ PUBLIC int html_src_parse_tagspec ARGS4(
return 0;
}
-/*it shouldn't fail anyway - since everything is checked before it's called. */
-PUBLIC void HTMLSRC_init_caches NOARGS
+/*this will clean the data associated with lexeme 'l' */
+PUBLIC void html_src_clean_item ARGS1(
+ HTlexeme, l)
+{
+ int i;
+
+ if (HTL_tagspecs[l])
+ FREE(HTL_tagspecs[l]);
+ for(i = 0; i < 2; ++i) {
+ HT_tagspec* cur;
+ HT_tagspec** pts = ( i ? lexeme_start : lexeme_end) + l;
+ HT_tagspec* ts = *pts;
+
+ *pts = NULL;
+ while (ts) {
+ FREE(ts->present);
+ FREE(ts->value);
+#ifdef USE_COLOR_STYLE
+ if (ts->start) {
+ FREE(ts->class_name);
+ }
+#endif
+ cur = ts;
+ ts = ts->next;
+ FREE(cur);
+ }
+ }
+}
+
+/*this will be registered with atexit*/
+PUBLIC void html_src_clean_data NOARGS
+{
+ int i;
+ for (i = 0; i < HTL_num_lexemes; ++i)
+ html_src_clean_item(i);
+}
+
+PUBLIC void html_src_on_lynxcfg_reload NOARGS
+{
+ html_src_clean_data();
+ HTMLSRC_init_caches(TRUE);
+}
+
+PUBLIC void HTMLSRC_init_caches ARGS1(
+ BOOL, dont_exit)
{
int i;
char* p;
char buf[1000];
- for (i = 0; i < HTL_num_lexems; ++i) {
- if (HTL_tagspecs[i])
- strcpy(buf, HTL_tagspecs[i]);
- else
- buf[0] = '\0';
+ for (i = 0; i < HTL_num_lexemes; ++i) {
+ /*we assume that HT_tagspecs was NULLs at when program started*/
+ LYstrncpy(buf,
+ HTL_tagspecs[i]
+ ? HTL_tagspecs[i]
+ : HTL_tagspecs_defaults[i],
+ sizeof(buf) - 1);
+ StrAllocCopy(HTL_tagspecs[i], buf);
+
if ((p = strchr(buf, ':')) != 0)
*p = '\0';
- if (html_src_parse_tagspec(buf, i, FALSE, TRUE) ) {
- fprintf(stderr, "internal error while caching 1st tagspec of %d lexem", i);
- exit_immediately(-1);
+ if (html_src_parse_tagspec(buf, i, FALSE, TRUE) && !dont_exit ) {
+ fprintf(stderr, "internal error while caching 1st tagspec of %d lexeme", i);
+ exit_immediately(EXIT_FAILURE);
}
- if (html_src_parse_tagspec( p ? p+1 : NULL , i, FALSE, FALSE) ) {
- fprintf(stderr, "internal error while caching 2nd tagspec of %d lexem", i);
- exit_immediately(-1);
+ if (html_src_parse_tagspec( p ? p+1 : NULL , i, FALSE, FALSE) && !dont_exit) {
+ fprintf(stderr, "internal error while caching 2nd tagspec of %d lexeme", i);
+ exit_immediately(EXIT_FAILURE);
}
}
}
-#endif /* ifdef USE_PSRC */
+#endif /* ifdef USE_PRETTYSRC */
diff --git a/gnu/usr.bin/lynx/src/LYPrettySrc.h b/gnu/usr.bin/lynx/src/LYPrettySrc.h
index 14f53c3820d..59a4573f1ee 100644
--- a/gnu/usr.bin/lynx/src/LYPrettySrc.h
+++ b/gnu/usr.bin/lynx/src/LYPrettySrc.h
@@ -1,7 +1,7 @@
#ifndef LYPrettySrc_H
#define LYPrettySrc_H
-#ifdef USE_PSRC
+#ifdef USE_PRETTYSRC
#include <HTMLDTD.h>
@@ -21,8 +21,10 @@ extern BOOL psrc_nested_call;/* this is used when distinguishing whether
extern BOOL psrc_first_tag; /* this is also used in HTML.c to trigger the
1st tag to preform special. */
-/* here is a list of lexem codes. */
-typedef enum _HTlexem {
+extern BOOL mark_htext_as_source;
+
+/* here is a list of lexeme codes. */
+typedef enum {
HTL_comm=0,
HTL_tag,
HTL_attrib,
@@ -35,8 +37,8 @@ typedef enum _HTlexem {
HTL_badtag,
HTL_badattr,
HTL_sgmlspecial,
- HTL_num_lexems
-} HTlexem;
+ HTL_num_lexemes
+} HTlexeme;
typedef struct _HT_tagspec
{
@@ -53,13 +55,16 @@ typedef struct _HT_tagspec
BOOL start; /* if true, then this starts element, otherwise - ends */
} HT_tagspec;
-extern char* HTL_tagspecs[HTL_num_lexems];
-extern HT_tagspec* lexem_start[HTL_num_lexems];
-extern HT_tagspec* lexem_end[HTL_num_lexems];
+extern char* HTL_tagspecs[HTL_num_lexemes];
+extern HT_tagspec* lexeme_start[HTL_num_lexemes];
+extern HT_tagspec* lexeme_end[HTL_num_lexemes];
-extern int html_src_parse_tagspec PARAMS((char* ts, HTlexem lexem,
+extern int html_src_parse_tagspec PARAMS((char* ts, HTlexeme lexeme,
BOOL checkonly,BOOL isstart));
-extern void HTMLSRC_init_caches NOPARAMS;
+extern void HTMLSRC_init_caches PARAMS((BOOL dont_exit));
+extern void html_src_clean_item PARAMS((HTlexeme l));
+extern void html_src_clean_data NOPARAMS;
+extern void html_src_on_lynxcfg_reload NOPARAMS;
/* these 2 vars tell what kind of transform should be appiled to tag names
and attribute names. 0 - lowercase, 1 - as is, 2 uppercase. */
@@ -67,7 +72,8 @@ extern int tagname_transform;
extern int attrname_transform;
-#endif /* ifdef USE_PSRC */
+extern BOOL psrcview_no_anchor_numbering;
+#endif /* ifdef USE_PRETTYSRC */
#endif /* LYPrettySrc_H */
diff --git a/gnu/usr.bin/lynx/src/LYPrint.c b/gnu/usr.bin/lynx/src/LYPrint.c
index 4e4ef9aea93..360330a54b4 100644
--- a/gnu/usr.bin/lynx/src/LYPrint.c
+++ b/gnu/usr.bin/lynx/src/LYPrint.c
@@ -56,9 +56,9 @@
#define MAIL 4
#define PRINTER 5
-#ifdef VMS
+#if USE_VMS_MAILER
PRIVATE int remove_quotes PARAMS((char *string));
-#endif /* VMS */
+#endif /* USE_VMS_MAILER */
PRIVATE char* subject_translate8bit PARAMS((char *source));
@@ -188,7 +188,7 @@ PRIVATE int RecallFilename ARGS5(
*total = (sug_filenames ? HTList_count(sug_filenames) : 0);
*now = *total;
}
- recall = ((*total >= 1) ? RECALL : NORECALL);
+ recall = ((*total >= 1) ? RECALL_URL : NORECALL);
if ((ch = LYgetstr(filename, VISIBLE, LY_MAXPATH, recall)) < 0 ||
*filename == '\0' || ch == UPARROW || ch == DNARROW) {
@@ -292,7 +292,7 @@ PRIVATE BOOLEAN confirm_by_pages ARGS3(
FREE(msg);
if (c == YES) {
- addstr(" Ok...");
+ LYaddstr(" Ok...");
} else {
HTInfoMsg(PRINT_REQUEST_CANCELLED);
return FALSE;
@@ -360,7 +360,7 @@ check_recall:
/*
* See if we can write to it.
*/
- CTRACE(tfp, "LYPrint: filename is %s, action is `%c'\n", buffer, c);
+ CTRACE((tfp, "LYPrint: filename is %s, action is `%c'\n", buffer, c));
#if HAVE_POPEN
if (*buffer == '|') {
@@ -370,7 +370,7 @@ check_recall:
FnameNum = FnameTotal;
goto retry;
} else if ((outfile_fp = popen(buffer+1, "w")) == NULL) {
- CTRACE(tfp, "LYPrint: errno is %d\n", errno);
+ CTRACE((tfp, "LYPrint: errno is %d\n", errno));
HTAlert(CANNOT_WRITE_TO_FILE);
_statusline(NEW_FILENAME_PROMPT);
FirstRecall = TRUE;
@@ -382,7 +382,7 @@ check_recall:
if ((outfile_fp = (TOUPPER(c) == 'A'
? LYAppendToTxtFile(buffer)
: LYNewTxtFile(buffer))) == NULL) {
- CTRACE(tfp, "LYPrint: errno is %d\n", errno);
+ CTRACE((tfp, "LYPrint: errno is %d\n", errno));
HTAlert(CANNOT_WRITE_TO_FILE);
_statusline(NEW_FILENAME_PROMPT);
FirstRecall = TRUE;
@@ -402,9 +402,17 @@ check_recall:
fprintf(outfile_fp,
"<!-- X-URL: %s -->\n", newdoc->address);
- if (HText_getDate() != NULL)
- fprintf(outfile_fp,
+ if (HText_getDate() != NULL) {
+ fprintf(outfile_fp,
"<!-- Date: %s -->\n", HText_getDate());
+ if (HText_getLastModified() != NULL
+ && strcmp(HText_getLastModified(), HText_getDate())
+ && strcmp(HText_getLastModified(), "Thu, 01 Jan 1970 00:00:01 GMT")) {
+ fprintf(outfile_fp,
+ "<!-- Last-Modified: %s -->\n", HText_getLastModified());
+ }
+ }
+
fprintf(outfile_fp,
"<BASE HREF=\"%s\">\n", content_base);
}
@@ -435,7 +443,7 @@ check_recall:
}
}
- print_wwwfile_to_fd(outfile_fp,0);
+ print_wwwfile_to_fd(outfile_fp, FALSE); /* FILE */
if (keypad_mode)
printlist(outfile_fp,FALSE);
@@ -444,7 +452,8 @@ check_recall:
pclose(outfile_fp);
else
#endif
- fclose(outfile_fp);
+ LYCloseOutput(outfile_fp);
+
#ifdef VMS
if (0 == strncasecomp(buffer, "sys$disk:", 9)) {
if (0 == strncmp((buffer+9), "[]", 2)) {
@@ -470,18 +479,17 @@ PRIVATE void send_file_to_mail ARGS3(
{
static BOOLEAN first_mail_preparsed = TRUE;
-#ifdef VMS
- BOOLEAN isPMDF = !strncasecomp(system_mail, "PMDF SEND", 9);
+#if USE_VMS_MAILER
+ BOOLEAN isPMDF = LYMailPMDF();
FILE *hfd;
char hdrfile[LY_MAXPATH];
- char my_temp[LY_MAXPATH];
#endif
-#ifdef DOSPATH
+ BOOL use_mime;
+#if !CAN_PIPE_TO_MAILER
char my_temp[LY_MAXPATH];
#endif
BOOL use_cte;
- BOOL use_mime;
BOOL use_type;
CONST char *disp_charset;
FILE *outfile_fp;
@@ -492,7 +500,7 @@ PRIVATE void send_file_to_mail ARGS3(
if (LYPreparsedSource && first_mail_preparsed &&
HTisDocumentSource()) {
if (HTConfirmDefault(CONFIRM_MAIL_SOURCE_PREPARSED, NO) == YES) {
- addstr(" Ok...");
+ LYaddstr(" Ok...");
first_mail_preparsed = FALSE;
} else {
CancelPrint(MAIL_REQUEST_CANCELLED);
@@ -501,7 +509,7 @@ PRIVATE void send_file_to_mail ARGS3(
_statusline(MAIL_ADDRESS_PROMPT);
LYstrncpy(user_response, personal_mail_address, sizeof(user_response)-1);
- if (LYgetstr(user_response, VISIBLE, sizeof(user_response), NORECALL) < 0 ||
+ if (LYgetstr(user_response, VISIBLE, sizeof(user_response), RECALL_MAIL) < 0 ||
*user_response == '\0') {
CancelPrint(MAIL_REQUEST_CANCELLED);
}
@@ -522,26 +530,26 @@ PRIVATE void send_file_to_mail ARGS3(
disp_charset = NULL;
use_cte = FALSE;
}
- use_type = (disp_charset || HTisDocumentSource());
+ use_type = (BOOL) (disp_charset || HTisDocumentSource());
/*
* Use newdoc->title as a subject instead of sug_filename: MORE readable
* and 8-bit letters shouldn't be a problem - LP
*/
/* change_sug_filename(sug_filename); */
- subject = subject_translate8bit(newdoc->title);
-
- if (newdoc->isHEAD) {
- /*
- * Special case for mailing HEAD responce: this is rather technical
- * information, show URL.
- */
- FREE(subject);
- StrAllocCopy(subject, "HEAD ");
- StrAllocCat(subject, newdoc->address);
+ subject = subject_translate8bit(newdoc->title);
+
+ if (newdoc->isHEAD) {
+ /*
+ * Special case for mailing HEAD responce: this is rather technical
+ * information, show URL.
+ */
+ FREE(subject);
+ StrAllocCopy(subject, "HEAD ");
+ StrAllocCat(subject, newdoc->address);
}
-#ifdef VMS
+#if USE_VMS_MAILER
if (strchr(user_response,'@') && !strchr(user_response,':') &&
!strchr(user_response,'%') && !strchr(user_response,'"')) {
char *temp = 0;
@@ -597,6 +605,11 @@ PRIVATE void send_file_to_mail ARGS3(
* X-URL header. - FM
*/
fprintf(hfd, "X-URL: %s\n", newdoc->address);
+ /*
+ * For PMDF, put the subject in the header file and close it. - FM
+ */
+ fprintf(hfd, "Subject: %.70s\n\n", subject);
+ LYCloseTempFP(hfd);
}
/*
@@ -615,18 +628,14 @@ PRIVATE void send_file_to_mail ARGS3(
} else if (!isPMDF) {
fprintf(outfile_fp, "X-URL: %s\n\n", newdoc->address);
}
- print_wwwfile_to_fd(outfile_fp, 0);
+ print_wwwfile_to_fd(outfile_fp, FALSE); /* MAIL */
if (keypad_mode)
printlist(outfile_fp, FALSE);
LYCloseTempFP(outfile_fp);
+ buffer = NULL;
if (isPMDF) {
/*
- * For PMDF, put the subject in the header file and close it. - FM
- */
- fprintf(hfd, "Subject: %.70s\n\n", subject);
- LYCloseTempFP(hfd);
- /*
* Now set up the command. - FM
*/
HTSprintf0(&buffer,
@@ -651,20 +660,22 @@ PRIVATE void send_file_to_mail ARGS3(
}
stop_curses();
+ SetOutputMode( O_TEXT );
printf(MAILING_FILE);
LYSystem(buffer);
- sleep(AlertSecs);
+ LYSleepAlert();
start_curses();
+ SetOutputMode( O_BINARY );
+
if (isPMDF)
LYRemoveTemp(hdrfile);
LYRemoveTemp(my_temp);
-#else /* Unix or DOS */
+#else /* !VMS (Unix or DOS) */
-#ifdef DOSPATH
- outfile_fp = LYOpenTemp(my_temp, ".txt", "w");
+#if CAN_PIPE_TO_MAILER
+ outfile_fp = LYPipeToMailer();
#else
- HTSprintf0(&buffer, "%s %s", system_mail, system_mail_flags);
- outfile_fp = popen(buffer, "w");
+ outfile_fp = LYOpenTemp(my_temp, ".txt", "w");
#endif
if (outfile_fp == NULL) {
CannotPrint(MAIL_REQUEST_FAILED);
@@ -697,8 +708,8 @@ PRIVATE void send_file_to_mail ARGS3(
if (use_cte && !disp_charset)
use_cte = FALSE;
#endif /* NOTDEFINED */
- use_type = (disp_charset || HTisDocumentSource());
- use_mime = (use_cte || use_type);
+ use_type = (BOOL) (disp_charset || HTisDocumentSource());
+ use_mime = (BOOL) (use_cte || use_type);
if (use_mime) {
fprintf(outfile_fp, "Mime-Version: 1.0\n");
@@ -758,25 +769,25 @@ PRIVATE void send_file_to_mail ARGS3(
"<!-- X-URL: %s -->\n<BASE HREF=\"%s\">\n\n",
newdoc->address, content_base);
}
- print_wwwfile_to_fd(outfile_fp, 0);
+ print_wwwfile_to_fd(outfile_fp, FALSE); /* MAIL */
if (keypad_mode)
printlist(outfile_fp, FALSE);
-#ifdef DOSPATH
- HTSprintf0(&buffer, "%s -t \"%s\" -F %s", system_mail, user_response, my_temp);
- LYCloseTempFP(outfile_fp); /* Close the tmpfile. */
- stop_curses();
- printf("%s\n\n$ %s\n\n%s", gettext("Sending"), buffer, PLEASE_WAIT);
- LYSystem(buffer);
- sleep(MessageSecs);
- start_curses();
- LYRemoveTemp(my_temp); /* Delete the tmpfile. */
-#else
+#if CAN_PIPE_TO_MAILER
pclose(outfile_fp);
-#endif
-#endif /* VMS */
+#else
+ LYCloseOutput(outfile_fp);
+ LYSendMailFile (
+ user_response,
+ my_temp,
+ subject,
+ "",
+ "");
+ LYRemoveTemp(my_temp); /* Delete the tmpfile. */
+#endif /* CAN_PIPE_TO_MAILER */
+#endif /* USE_VMS_MAILER */
-done:
+done: /* send_file_to_mail() */
FREE(buffer);
FREE(subject);
return;
@@ -794,7 +805,7 @@ PRIVATE void send_file_to_printer ARGS4(
char my_file[LY_MAXPATH];
char my_temp[LY_MAXPATH];
int FnameTotal, FnameNum = -1;
- lynx_printer_item_type *cur_printer;
+ lynx_list_item_type *cur_printer;
outfile_fp = LYOpenTemp(my_temp,
(HTisDocumentSource())
@@ -816,7 +827,7 @@ PRIVATE void send_file_to_printer ARGS4(
"<!-- X-URL: %s -->\n<BASE HREF=\"%s\">\n\n",
newdoc->address, content_base);
}
- print_wwwfile_to_fd(outfile_fp, 0);
+ print_wwwfile_to_fd(outfile_fp, FALSE); /* PRINTER */
if (keypad_mode)
printlist(outfile_fp, FALSE);
@@ -877,26 +888,44 @@ check_again:
if (!strncasecomp(my_file, "nl:", 3) ||
!strncasecomp(my_file, "/nl/", 4))
#else
+#if defined(DOSPATH) /* 1997/10/15 (Wed) 16:41:30 */
+ if (!strcmp(my_file, "nul"))
+#else
if (!strcmp(my_file, "/dev/null"))
+#endif /* DOSPATH */
#endif /* VMS */
{
CancelPrint(PRINT_REQUEST_CANCELLED);
}
HTAddSugFilename(my_file);
}
+#ifdef SH_EX /* 1999/01/04 (Mon) 09:37:03 */
+ else {
+ my_file[0] = '\0';
+ }
HTAddParam (&the_command, cur_printer->command, 1, my_temp);
+ if (my_file[0]) {
+ HTAddParam (&the_command, cur_printer->command, 2, my_file);
+ HTEndParam (&the_command, cur_printer->command, 3);
+ } else {
+ HTEndParam (&the_command, cur_printer->command, 2);
+ }
+#else
+ HTAddParam (&the_command, cur_printer->command, 1, my_temp);
HTAddParam (&the_command, cur_printer->command, 2, my_file);
HTEndParam (&the_command, cur_printer->command, 2);
+#endif
/*
* Move the cursor to the top of the screen so that output from system'd
* commands don't scroll up the screen.
*/
- move(1,1);
+ LYmove(1,1);
stop_curses();
- CTRACE(tfp, "command: %s\n", the_command);
+ CTRACE((tfp, "command: %s\n", the_command));
+ SetOutputMode( O_TEXT );
printf(PRINTING_FILE);
/*
* Set various bits of document information as environment variables, for
@@ -926,10 +955,15 @@ check_again:
#ifndef VMS
signal(SIGINT, cleanup_sig);
#endif /* !VMS */
- sleep(MessageSecs);
+#ifdef SH_EX
+ fprintf(stdout, gettext(" Print job complete.\n"));
+ fflush(stdout);
+#endif
+ SetOutputMode( O_BINARY );
+ LYSleepMsg();
start_curses();
-done:
+done: /* send_file_to_printer() */
return;
}
@@ -955,6 +989,8 @@ PRIVATE void send_file_to_screen ARGS3(
outfile_fp = stdout;
stop_curses();
+ SetOutputMode( O_TEXT );
+
#ifndef VMS
signal(SIGINT, SIG_IGN);
#endif /* !VMS */
@@ -972,7 +1008,7 @@ PRIVATE void send_file_to_screen ARGS3(
}
if (Lpansi)
printf("\033[5i");
- print_wwwfile_to_fd(outfile_fp, 0);
+ print_wwwfile_to_fd(outfile_fp, FALSE); /* SCREEN */
if (keypad_mode)
printlist(outfile_fp, FALSE);
@@ -986,18 +1022,23 @@ PRIVATE void send_file_to_screen ARGS3(
if (Lpansi) {
printf("\n\014"); /* Form feed */
printf("\033[4i");
+ fflush(stdout); /* refresh to screen */
Lpansi = FALSE;
} else {
fprintf(stdout,"\n\n%s", PRESS_RETURN_TO_FINISH);
- LYgetch(); /* grab some user input to pause */
+ fflush(stdout); /* refresh to screen */
+ (void) LYgetch(); /* grab some user input to pause */
#ifdef VMS
HadVMSInterrupt = FALSE;
#endif /* VMS */
}
- fflush(stdout); /* refresh to screen */
+#ifdef SH_EX
+ fprintf(stdout,"\n");
+#endif
+ SetOutputMode( O_BINARY );
start_curses();
-done:
+done: /* send_file_to_screen() */
return;
}
@@ -1074,7 +1115,7 @@ PUBLIC int printfile ARGS1(
/*
* Get the number of lines in the file.
*/
- if ((cp = (char *)strstr(link_info, "lines=")) != NULL) {
+ if ((cp = strstr(link_info, "lines=")) != NULL) {
/*
* Terminate prev string here.
*/
@@ -1102,12 +1143,12 @@ PUBLIC int printfile ARGS1(
} else if (strstr(link_info, "PRINTER")) {
type = PRINTER;
- if ((cp = (char *)strstr(link_info, "number=")) != NULL) {
+ if ((cp = strstr(link_info, "number=")) != NULL) {
/* number of characters in "number=" */
cp += 7;
printer_number = atoi(cp);
}
- if ((cp = (char *)strstr(link_info, "pagelen=")) != NULL) {
+ if ((cp = strstr(link_info, "pagelen=")) != NULL) {
/* number of characters in "pagelen=" */
cp += 8;
pagelen = atoi(cp);
@@ -1149,7 +1190,7 @@ PUBLIC int printfile ARGS1(
return(NORMAL);
}
-#ifdef VMS
+#if USE_VMS_MAILER
PRIVATE int remove_quotes ARGS1(
char *, string)
{
@@ -1165,7 +1206,7 @@ PRIVATE int remove_quotes ARGS1(
return(0);
}
-#endif /* VMS */
+#endif /* USE_VMS_MAILER */
/*
* Mail subject may have 8-bit characters and they are in display charset.
@@ -1184,38 +1225,27 @@ PRIVATE int remove_quotes ARGS1(
*
* Always returns a new allocated string which has to be freed.
*/
+#include <LYCharUtils.h>
PRIVATE char* subject_translate8bit ARGS1(char *, source)
{
- CONST char *p = source;
- char temp[2];
char *target = NULL;
int charset_in, charset_out;
- char replace_buf [10];
int i = outgoing_mail_charset; /* from lynx.cfg, -1 by default */
+ StrAllocCopy(target, source);
if (i < 0
|| i == current_char_set
|| LYCharSet_UC[current_char_set].enc == UCT_ENC_CJK
|| LYCharSet_UC[i].enc == UCT_ENC_CJK) {
- StrAllocCopy(target, source);
return(target); /* OK */
} else {
charset_out = i;
charset_in = current_char_set;
}
- for ( ; *p; p++) {
- LYstrncpy(temp, p, sizeof(temp)-1);
- if ((unsigned char)*temp <= 127) {
- StrAllocCat(target, temp);
- } else {
- if (UCTransCharStr(replace_buf, sizeof(replace_buf), *temp,
- charset_in, charset_out, YES) > 0)
- StrAllocCat(target, replace_buf);
- }
- }
+ LYUCTranslateBackHeaderText(&target, charset_in, charset_out, YES);
return(target);
}
@@ -1233,18 +1263,23 @@ PRIVATE char* subject_translate8bit ARGS1(char *, source)
*/
PUBLIC int print_options ARGS3(
char **, newfile,
- char **, printed_url,
+ CONST char *, printed_url,
int, lines_in_file)
{
- static char my_temp[LY_MAXPATH];
+ static char my_temp[LY_MAXPATH] = "\0";
char *buffer = 0;
int count;
int pages;
FILE *fp0;
- lynx_printer_item_type *cur_printer;
+ lynx_list_item_type *cur_printer;
- LYRemoveTemp(my_temp);
- if ((fp0 = LYOpenTemp(my_temp, HTML_SUFFIX, "w")) == NULL) {
+ if (LYReuseTempfiles) {
+ fp0 = LYOpenTempRewrite(my_temp, HTML_SUFFIX, "w");
+ } else {
+ LYRemoveTemp(my_temp);
+ fp0 = LYOpenTemp(my_temp, HTML_SUFFIX, "w");
+ }
+ if (fp0 == NULL) {
HTAlert(UNABLE_TO_OPEN_PRINTOP_FILE);
return(-1);
}
@@ -1258,7 +1293,7 @@ PUBLIC int print_options ARGS3(
/* pages = lines_in_file/66 + 1; */
pages = (lines_in_file+65)/66;
HTSprintf0(&buffer, " <em>%s</em> %s\n <em>%s</em> %d\n <em>%s</em> %d %s %s\n",
- gettext("Document:"), *printed_url,
+ gettext("Document:"), printed_url,
gettext("Number of lines:"), lines_in_file,
gettext("Number of pages:"), pages,
(pages > 1 ? gettext("pages") : gettext("page")),
@@ -1337,8 +1372,6 @@ PUBLIC char * GetFileName NOARGS
{
struct stat stat_info;
- FILE *fp;
-
char fbuf[LY_MAXPATH];
char tbuf[LY_MAXPATH];
char *fn;
@@ -1413,14 +1446,12 @@ check_recall:
goto retry;
}
- if ((fp = fopen (tbuf, "r")) == NULL) {
+ if (!LYCanReadFile(tbuf)) {
HTInfoMsg (FILE_NOT_READABLE);
_statusline(FILE_NOT_READABLE_RE);
FirstRecall = TRUE;
FnameNum = FnameTotal;
goto retry;
- } else {
- fclose (fp);
}
/*
@@ -1433,7 +1464,7 @@ check_recall:
* "invalid pointer" reported in the Lynx.leaks file (if compiled
* with --enable-find-leaks turned on. Dumb.]
*/
- if ((fn = (char *) calloc (1, (strlen (tbuf) + 1))) == NULL)
+ if ((fn = typecallocn(char, strlen (tbuf) + 1)) == NULL)
outofmem(__FILE__, "GetFileName");
return (strcpy (fn, tbuf));
diff --git a/gnu/usr.bin/lynx/src/LYPrint.h b/gnu/usr.bin/lynx/src/LYPrint.h
index 4ddd33a9a52..0aee2a825ce 100644
--- a/gnu/usr.bin/lynx/src/LYPrint.h
+++ b/gnu/usr.bin/lynx/src/LYPrint.h
@@ -7,7 +7,7 @@
extern int printfile PARAMS((document *newdoc));
extern int print_options PARAMS((char **newfile,
- char **printed_url, int lines_in_file));
+ CONST char *printed_url, int lines_in_file));
extern char * GetFileName NOPARAMS;
#endif /* LYPRINT_H */
diff --git a/gnu/usr.bin/lynx/src/LYReadCFG.c b/gnu/usr.bin/lynx/src/LYReadCFG.c
index e1caa1bab96..7dd55482110 100644
--- a/gnu/usr.bin/lynx/src/LYReadCFG.c
+++ b/gnu/usr.bin/lynx/src/LYReadCFG.c
@@ -3,7 +3,9 @@
#else
#include <HTUtils.h>
#endif
+#include <HTTP.h> /* 'reloading' flag */
#include <HTFile.h>
+#include <HTInit.h>
#include <UCMap.h>
#include <LYUtils.h>
@@ -24,6 +26,7 @@
#include <HTAlert.h>
#include <LYHistory.h>
#include <LYPrettySrc.h>
+#include <LYrcFile.h>
#ifdef DIRED_SUPPORT
#include <LYLocal.h>
@@ -43,7 +46,7 @@ PUBLIC BOOLEAN LYUseNoviceLineTwo = TRUE;
/*
* Translate a TRUE/FALSE field in a string buffer.
*/
-PRIVATE int is_true ARGS1(
+PRIVATE BOOL is_true ARGS1(
char *, string)
{
if (!strncasecomp(string,"TRUE",4))
@@ -76,15 +79,12 @@ PRIVATE char *find_colon ARGS1(
return NULL;
}
-/*
- * Function for freeing the DOWNLOADER and UPLOADER menus list. - FM
- */
-PRIVATE void free_item_list NOARGS
+PRIVATE void free_item_list ARGS1(
+ lynx_list_item_type **, ptr)
{
- lynx_html_item_type *cur;
- lynx_html_item_type *next;
+ lynx_list_item_type *cur = *ptr;
+ lynx_list_item_type *next;
- cur = downloaders;
while (cur) {
next = cur->next;
FREE(cur->name);
@@ -92,30 +92,22 @@ PRIVATE void free_item_list NOARGS
FREE(cur);
cur = next;
}
- downloaders = NULL;
+ *ptr = NULL;
+}
+/*
+ * Function for freeing the DOWNLOADER and UPLOADER menus list. - FM
+ */
+PRIVATE void free_all_item_lists NOARGS
+{
+ free_item_list(&printers);
+ free_item_list(&downloaders);
#ifdef DIRED_SUPPORT
- cur = uploaders;
- while (cur) {
- next = cur->next;
- FREE(cur->name);
- FREE(cur->command);
- FREE(cur);
- cur = next;
- }
- uploaders = NULL;
+ free_item_list(&uploaders);
#endif /* DIRED_SUPPORT */
#ifdef USE_EXTERNALS
- cur = externals;
- while (cur) {
- next = cur->next;
- FREE(cur->name);
- FREE(cur->command);
- FREE(cur);
- cur = next;
- }
- externals = NULL;
+ free_item_list(&externals);
#endif /* USE_EXTERNALS */
return;
@@ -124,12 +116,13 @@ PRIVATE void free_item_list NOARGS
/*
* Process string buffer fields for DOWNLOADER or UPLOADER menus.
*/
-PRIVATE void add_item_to_list ARGS2(
+PRIVATE void add_item_to_list ARGS3(
char *, buffer,
- lynx_html_item_type **, list_ptr)
+ lynx_list_item_type **, list_ptr,
+ int, special)
{
char *colon, *next_colon;
- lynx_html_item_type *cur_item, *prev_item;
+ lynx_list_item_type *cur_item, *prev_item;
/*
* Make a linked list
@@ -138,12 +131,12 @@ PRIVATE void add_item_to_list ARGS2(
/*
* First item.
*/
- cur_item = (lynx_html_item_type *)calloc(sizeof(lynx_html_item_type),1);
+ cur_item = typecalloc(lynx_list_item_type);
if (cur_item == NULL)
outofmem(__FILE__, "read_cfg");
*list_ptr = cur_item;
#ifdef LY_FIND_LEAKS
- atexit(free_item_list);
+ atexit(free_all_item_lists);
#endif
} else {
/*
@@ -153,7 +146,7 @@ PRIVATE void add_item_to_list ARGS2(
prev_item->next != NULL;
prev_item = prev_item->next)
; /* null body */
- cur_item = (lynx_html_item_type *)calloc(sizeof(lynx_html_item_type),1);
+ cur_item = typecalloc(lynx_list_item_type);
if (cur_item == NULL)
outofmem(__FILE__, "read_cfg");
else
@@ -163,6 +156,8 @@ PRIVATE void add_item_to_list ARGS2(
cur_item->name = NULL;
cur_item->command = NULL;
cur_item->always_enabled = FALSE;
+ cur_item->override_primary_action = FALSE;
+ cur_item->pagelen = 66;
/*
* Find first unescaped colon and process fields
@@ -171,147 +166,85 @@ PRIVATE void add_item_to_list ARGS2(
/*
* Process name field
*/
- cur_item->name = (char *)calloc((colon-buffer+1),sizeof(char));
+ cur_item->name = typecallocn(char, colon-buffer+1);
if (cur_item->name == NULL)
outofmem(__FILE__, "read_cfg");
LYstrncpy(cur_item->name, buffer, (int)(colon-buffer));
remove_backslashes(cur_item->name);
/*
- * Process TRUE/FALSE field. If we do not find one, assume it is
- * true. In any case, we want the command string.
+ * Find end of command string and beginning of TRUE/FALSE option
+ * field. If we do not find a colon that ends the command string,
+ * leave the always_enabled option flag as FALSE. In any case,
+ * we want the command string.
*/
if ((next_colon = find_colon(colon+1)) == NULL) {
next_colon = colon + strlen(colon);
}
if (next_colon - (colon+1) > 0) {
- cur_item->command = (char *)calloc(next_colon-colon, sizeof(char));
+ cur_item->command = typecallocn(char,next_colon-colon);
if (cur_item->command == NULL)
outofmem(__FILE__, "read_cfg");
LYstrncpy(cur_item->command, colon+1, (int)(next_colon-(colon+1)));
remove_backslashes(cur_item->command);
- cur_item->always_enabled = TRUE;
}
if (*next_colon++) {
- cur_item->always_enabled = is_true(next_colon);
+ colon = next_colon;
+ if ((next_colon = strchr(colon,':')) != 0)
+ *next_colon++ = '\0';
+ cur_item->always_enabled = is_true(colon);
+ if (next_colon) {
+ if (special) {
+ cur_item->pagelen = atoi(next_colon);
+ } else {
+ cur_item->override_primary_action = is_true(next_colon);
+ }
+ }
}
}
}
-
-/*
- * Function for freeing the PRINTER menus list. - FM
- */
-PRIVATE void free_printer_item_list NOARGS
+PUBLIC lynx_list_item_type *find_item_by_number ARGS2(
+ lynx_list_item_type *, list_ptr,
+ char *, number)
{
- lynx_printer_item_type *cur = printers;
- lynx_printer_item_type *next;
-
- while (cur) {
- next = cur->next;
- FREE(cur->name);
- FREE(cur->command);
- FREE(cur);
- cur = next;
+ int value = atoi(number);
+ while (value-- >= 0 && list_ptr != 0) {
+ list_ptr = list_ptr->next;
}
- printers = NULL;
-
- return;
+ return list_ptr;
}
-/*
- * Process string buffer fields for PRINTER menus.
- */
-PRIVATE void add_printer_to_list ARGS2(
- char *, buffer,
- lynx_printer_item_type **, list_ptr)
+PUBLIC int match_item_by_name ARGS3(
+ lynx_list_item_type *, ptr,
+ char *, name,
+ BOOLEAN, only_overriders)
{
- char *colon, *next_colon;
- lynx_printer_item_type *cur_item, *prev_item;
-
- /*
- * Make a linked list.
- */
- if (*list_ptr == NULL) {
- /*
- * First item.
- */
- cur_item = (lynx_printer_item_type *)calloc(sizeof(lynx_printer_item_type),1);
- if (cur_item == NULL)
- outofmem(__FILE__, "read_cfg");
- *list_ptr = cur_item;
-#ifdef LY_FIND_LEAKS
- atexit(free_printer_item_list);
-#endif
- } else {
- /*
- * Find the last item.
- */
- for (prev_item = *list_ptr;
- prev_item->next != NULL;
- prev_item = prev_item->next)
- ; /* null body */
-
- cur_item = (lynx_printer_item_type *)calloc(sizeof(lynx_printer_item_type),1);
- if (cur_item == NULL)
- outofmem(__FILE__, "read_cfg");
- else
- prev_item->next = cur_item;
- }
- cur_item->next = NULL;
- cur_item->name = NULL;
- cur_item->command = NULL;
- cur_item->always_enabled = FALSE;
-
- /*
- * Find first unescaped colon and process fields.
- */
- if ((colon = find_colon(buffer)) != NULL) {
- /*
- * Process name field.
- */
- cur_item->name = (char *)calloc((colon-buffer+1), sizeof(char));
- if (cur_item->name == NULL)
- outofmem(__FILE__, "read_cfg");
- LYstrncpy(cur_item->name, buffer, (int)(colon-buffer));
- remove_backslashes(cur_item->name);
-
- /*
- * Process TRUE/FALSE field.
- */
- if ((next_colon = find_colon(colon+1)) != NULL) {
- cur_item->command = (char *)calloc(next_colon-colon, sizeof(char));
- if (cur_item->command == NULL)
- outofmem(__FILE__, "read_cfg");
- LYstrncpy(cur_item->command, colon+1, (int)(next_colon-(colon+1)));
- remove_backslashes(cur_item->command);
- cur_item->always_enabled = is_true(next_colon+1);
- }
-
- /*
- * Process pagelen field.
- */
- if (next_colon != NULL
- && (next_colon = find_colon(next_colon+1)) != NULL) {
- cur_item->pagelen = atoi(next_colon+1);
- } else {
- /* default to 66 lines */
- cur_item->pagelen = 66;
- }
- }
+ return
+ (ptr->command != 0
+ && !strncasecomp(ptr->name, name, strlen(ptr->name))
+ && (only_overriders ? ptr->override_primary_action : 1));
}
#if defined(USE_COLOR_STYLE) || defined(USE_COLOR_TABLE)
-#ifdef USE_SLANG
+#ifndef COLOR_WHITE
#define COLOR_WHITE 7
+#endif
+
+#ifndef COLOR_BLACK
#define COLOR_BLACK 0
#endif
+#if USE_DEFAULT_COLORS
+int default_fg = DEFAULT_COLOR;
+int default_bg = DEFAULT_COLOR;
+#else
int default_fg = COLOR_WHITE;
int default_bg = COLOR_BLACK;
+#endif
-static CONST char *Color_Strings[16] =
+PRIVATE CONST char *Color_Strings[16] =
{
"black",
"red",
@@ -331,7 +264,7 @@ static CONST char *Color_Strings[16] =
"white"
};
-#ifdef DOSPATH
+#if defined(PDCURSES) && !defined(XCURSES)
/*
* PDCurses (and possibly some other implementations) use a non-ANSI set of
* codes for colors.
@@ -348,6 +281,8 @@ PRIVATE int ColorCode ARGS1(
#define ColorCode(color) (color)
#endif
+BOOL default_color_reset = FALSE;
+
/*
* Validator for COLOR fields.
*/
@@ -357,17 +292,40 @@ PUBLIC int check_color ARGS2(
{
int i;
- if (!strcasecomp(color, "default"))
+ CTRACE2(TRACE_STYLE, (tfp, "check_color(%s,%d)\n", color, the_default));
+ if (!strcasecomp(color, "default")) {
+#if USE_DEFAULT_COLORS
+ if (!default_color_reset)
+ the_default = DEFAULT_COLOR;
+#endif /* USE_DEFAULT_COLORS */
+ CTRACE2(TRACE_STYLE, (tfp, "=> default %d\n", the_default));
return the_default;
+ }
if (!strcasecomp(color, "nocolor"))
return NO_COLOR;
for (i = 0; i < 16; i++) {
- if (!strcasecomp(color, Color_Strings[i]))
- return ColorCode(i);
+ if (!strcasecomp(color, Color_Strings[i])) {
+ int c = ColorCode(i);
+
+ CTRACE2(TRACE_STYLE, (tfp, "=> %d\n", c));
+ return c;
+ }
}
+ CTRACE2(TRACE_STYLE, (tfp, "=> ERR_COLOR\n"));
return ERR_COLOR;
}
+
+PUBLIC CONST char *lookup_color ARGS1(
+ int, code)
+{
+ unsigned n;
+ for (n = 0; n < 16; n++) {
+ if ((int) ColorCode(n) == code)
+ return Color_Strings[n];
+ }
+ return "default";
+}
#endif /* USE_COLOR_STYLE || USE_COLOR_TABLE */
#if defined(USE_COLOR_TABLE)
@@ -393,7 +351,7 @@ The special strings 'nocolor' or 'default', or\n")
Color_Strings[i + 2], Color_Strings[i + 3]);
}
fprintf (stderr, "%s\n%s\n", gettext("Offending line:"), error_line);
- exit_immediately(-1);
+ exit_immediately(EXIT_FAILURE);
}
/*
@@ -422,8 +380,8 @@ PRIVATE void parse_color ARGS1(
*bg++ = '\0';
#if defined(USE_SLANG)
- if ((check_color(fg, default_fg) < 0) ||
- (check_color(bg, default_bg) < 0))
+ if ((check_color(fg, default_fg) == ERR_COLOR) ||
+ (check_color(bg, default_bg) == ERR_COLOR))
exit_with_color_syntax(temp);
SLtt_set_color(color, NULL, fg, bg);
@@ -437,63 +395,84 @@ PRIVATE void parse_color ARGS1(
}
#endif /* USE_COLOR_TABLE */
-typedef int (*ParseFunc) PARAMS((char *));
-
-typedef union {
- lynx_html_item_type ** add_value;
- BOOLEAN * set_value;
- int * int_value;
- char ** str_value;
- ParseFunc fun_value;
- long def_value;
-} ConfigUnion;
-
-#ifdef PARSE_DEBUG
-#define ParseData \
- lynx_html_item_type** add_value; \
- BOOLEAN *set_value; \
- int *int_value; \
- char **str_value; \
- ParseFunc fun_value; \
- long def_value
-#define PARSE_ADD(n,t,v) {n,t, &v, 0, 0, 0, 0, 0}
-#define PARSE_SET(n,t,v) {n,t, 0, v, 0, 0, 0, 0}
-#define PARSE_INT(n,t,v) {n,t, 0, 0, v, 0, 0, 0}
-#define PARSE_STR(n,t,v) {n,t, 0, 0, 0, v, 0, 0}
-#define PARSE_ENV(n,t,v) {n,t, 0, 0, 0, v, 0, 0}
-#define PARSE_FUN(n,t,v) {n,t, 0, 0, 0, 0, v, 0}
-#define PARSE_DEF(n,t,v) {n,t, 0, 0, 0, 0, 0, v}
-#else
-#define ParseData long value
-#define PARSE_ADD(n,t,v) {n,t, (long)&(v)}
-#define PARSE_SET(n,t,v) {n,t, (long) (v)}
-#define PARSE_INT(n,t,v) {n,t, (long) (v)}
-#define PARSE_STR(n,t,v) {n,t, (long) (v)}
-#define PARSE_ENV(n,t,v) {n,t, (long) (v)}
-#define PARSE_FUN(n,t,v) {n,t, (long) (v)}
-#define PARSE_DEF(n,t,v) {n,t, (long) (v)}
+#ifdef SOURCE_CACHE
+static Config_Enum tbl_source_cache[] = {
+ { "FILE", SOURCE_CACHE_FILE },
+ { "MEMORY", SOURCE_CACHE_MEMORY },
+ { "NONE", SOURCE_CACHE_NONE },
+ { NULL, -1 },
+};
+
+static Config_Enum tbl_abort_source_cache[] = {
+ { "KEEP", SOURCE_CACHE_FOR_ABORTED_KEEP },
+ { "DROP", SOURCE_CACHE_FOR_ABORTED_DROP },
+ { NULL, -1 },
+};
#endif
+#define PARSE_ADD(n,v) {n, CONF_ADD_ITEM, UNION_ADD(v), 0}
+#define PARSE_SET(n,v) {n, CONF_BOOL, UNION_SET(v), 0}
+#define PARSE_ENU(n,v,t) {n, CONF_ENUM, UNION_INT(v), t}
+#define PARSE_INT(n,v) {n, CONF_INT, UNION_INT(v), 0}
+#define PARSE_TIM(n,v) {n, CONF_TIME, UNION_INT(v), 0}
+#define PARSE_STR(n,v) {n, CONF_STR, UNION_STR(v), 0}
+#define PARSE_Env(n,v) {n, CONF_ENV, UNION_ENV(v), 0}
+#define PARSE_ENV(n,v) {n, CONF_ENV2, UNION_ENV(v), 0}
+#define PARSE_FUN(n,v) {n, CONF_FUN, UNION_FUN(v), 0}
+#define PARSE_REQ(n,v) {n, CONF_INCLUDE, UNION_FUN(v), 0}
+#define PARSE_DEF(n,v) {n, CONF_ADD_TRUSTED, UNION_DEF(v), 0}
+#define PARSE_NIL {NULL,0, UNION_DEF(0), 0}
+
+typedef enum {
+ CONF_UNSPECIFIED = 0
+ ,CONF_BOOL /* BOOLEAN type */
+ ,CONF_FUN
+ ,CONF_TIME
+ ,CONF_ENUM
+ ,CONF_INT
+ ,CONF_STR
+ ,CONF_ENV /* from environment variable */
+ ,CONF_ENV2 /* from environment VARIABLE */
+ ,CONF_INCLUDE /* include file-- handle special */
+ ,CONF_ADD_ITEM
+ ,CONF_ADD_TRUSTED
+} Conf_Types;
+
typedef struct
{
CONST char *name;
- int type;
-#define CONF_UNSPECIFIED 0
-#define CONF_BOOL 1 /* BOOLEAN type */
-#define CONF_FUN 2
-#define CONF_INT 3
-#define CONF_STR 4
-#define CONF_ENV 5 /* from environment variable */
-#define CONF_ENV2 6 /* from environment VARIABLE */
-#define CONF_INCLUDE 7 /* include file-- handle special */
-#define CONF_ADD_ITEM 8
-#define CONF_ADD_TRUSTED 9
-
+ Conf_Types type;
ParseData;
+ Config_Enum *table;
}
Config_Type;
-static int assume_charset_fun ARGS1(
+PRIVATE BOOLEAN LYgetEnum ARGS3(
+ Config_Enum *, table,
+ CONST char *, name,
+ int *, result)
+{
+ Config_Enum *found = 0;
+ unsigned len = strlen(name);
+
+ if (len != 0) {
+ while (table->name != 0) {
+ if (!strncasecomp(table->name, name, len)) {
+ if (found != 0)
+ return FALSE; /* ambiguous, don't use this */
+ found = table;
+ }
+ table++;
+ }
+ if (found != 0) {
+ *result = found->value;
+ return TRUE;
+ }
+ }
+ return FALSE; /* no match */
+}
+
+PRIVATE int assume_charset_fun ARGS1(
char *, value)
{
UCLYhndl_for_unspec = safeUCGetLYhndl_byMIME(value);
@@ -506,33 +485,41 @@ static int assume_charset_fun ARGS1(
return 0;
}
-static int assume_local_charset_fun ARGS1(
+PRIVATE int assume_local_charset_fun ARGS1(
char *, value)
{
UCLYhndl_HTFile_for_unspec = safeUCGetLYhndl_byMIME(value);
return 0;
}
-static int assume_unrec_charset_fun ARGS1(
+PRIVATE int assume_unrec_charset_fun ARGS1(
char *, value)
{
UCLYhndl_for_unrec = safeUCGetLYhndl_byMIME(value);
return 0;
}
-static int character_set_fun ARGS1(
+PRIVATE int character_set_fun ARGS1(
char *, value)
{
int i = UCGetLYhndl_byAnyName(value); /* by MIME or full name */
- if (i < 0)
- ; /* do nothing here: so fallback to userdefs.h */
+
+ if (i < 0) {
+#ifdef CAN_AUTODETECT_DISPLAY_CHARSET
+ if (auto_display_charset >= 0
+ && (!strnicmp(value,"AutoDetect ",11)
+ || !strnicmp(value,"AutoDetect-2 ",13)))
+ current_char_set = auto_display_charset;
+#endif
+ /* do nothing here: so fallback to userdefs.h */
+ }
else
current_char_set = i;
return 0;
}
-static int outgoing_mail_charset_fun ARGS1(
+PRIVATE int outgoing_mail_charset_fun ARGS1(
char *, value)
{
outgoing_mail_charset = UCGetLYhndl_byMIME(value);
@@ -541,9 +528,48 @@ static int outgoing_mail_charset_fun ARGS1(
return 0;
}
+#ifdef EXP_ASSUMED_COLOR
+/*
+ * Process string buffer fields for ASSUMED_COLOR setting.
+ */
+PRIVATE int assumed_color_fun ARGS1(
+ char *, buffer)
+{
+ char *fg = buffer, *bg;
+ char *temp = 0;
+
+ StrAllocCopy(temp, buffer); /* save a copy, for error messages */
+
+ /*
+ * We are expecting a line of the form:
+ * FOREGROUND:BACKGROUND
+ */
+ if (NULL == (bg = find_colon(fg)))
+ exit_with_color_syntax(temp);
+ *bg++ = '\0';
+
+ default_fg = check_color(fg, default_fg);
+ default_bg = check_color(bg, default_bg);
+
+ if (default_fg == ERR_COLOR
+ || default_bg == ERR_COLOR)
+ exit_with_color_syntax(temp);
+#if USE_SLANG
+ /*
+ * Sorry - the order of initialization of slang precludes setting the
+ * default colors from the lynx.cfg file, since slang is already
+ * initialized before the file is read, and there is no interface defined
+ * for setting it from the application (that's one of the problems with
+ * using environment variables rather than a programmable interface) -TD
+ */
+#endif
+ FREE(temp);
+ return 0;
+}
+#endif /* EXP_ASSUMED_COLOR */
#ifdef USE_COLOR_TABLE
-static int color_fun ARGS1(
+PRIVATE int color_fun ARGS1(
char *, value)
{
parse_color (value);
@@ -551,17 +577,14 @@ static int color_fun ARGS1(
}
#endif
-static int default_bookmark_file_fun ARGS1(
+PRIVATE int default_bookmark_file_fun ARGS1(
char *, value)
{
- StrAllocCopy(bookmark_page, value);
- StrAllocCopy(BookmarkPage, bookmark_page);
- StrAllocCopy(MBM_A_subbookmark[0], bookmark_page);
- StrAllocCopy(MBM_A_subdescript[0], MULTIBOOKMARKS_DEFAULT);
+ set_default_bookmark_page(value);
return 0;
}
-static int default_cache_size_fun ARGS1(
+PRIVATE int default_cache_size_fun ARGS1(
char *, value)
{
HTCacheSize = atoi(value);
@@ -569,14 +592,14 @@ static int default_cache_size_fun ARGS1(
return 0;
}
-static int default_editor_fun ARGS1(
+PRIVATE int default_editor_fun ARGS1(
char *, value)
{
if (!system_editor) StrAllocCopy(editor, value);
return 0;
}
-static int numbers_as_arrows_fun ARGS1(
+PRIVATE int numbers_as_arrows_fun ARGS1(
char *, value)
{
if (is_true(value))
@@ -587,21 +610,8 @@ static int numbers_as_arrows_fun ARGS1(
return 0;
}
-static int default_user_mode_fun ARGS1(
- char *, value)
-{
- if (!strncasecomp(value, "NOVICE", 6))
- user_mode = NOVICE_MODE;
- else if (!strncasecomp(value, "INTER", 5))
- user_mode = INTERMEDIATE_MODE;
- else if (!strncasecomp(value, "ADVANCE", 7))
- user_mode = ADVANCED_MODE;
-
- return 0;
-}
-
#ifdef DIRED_SUPPORT
-static int dired_menu_fun ARGS1(
+PRIVATE int dired_menu_fun ARGS1(
char *, value)
{
add_menu_item(value);
@@ -609,49 +619,128 @@ static int dired_menu_fun ARGS1(
}
#endif
-static int jumpfile_fun ARGS1(
+PRIVATE int jumpfile_fun ARGS1(
char *, value)
{
char *buffer = NULL;
HTSprintf0 (&buffer, "JUMPFILE:%s", value);
if (!LYJumpInit(buffer))
- CTRACE(tfp, "Failed to register %s\n", buffer);
+ CTRACE((tfp, "Failed to register %s\n", buffer));
FREE(buffer);
return 0;
}
#ifdef EXP_KEYBOARD_LAYOUT
-static int keyboard_layout_fun ARGS1(
+PRIVATE int keyboard_layout_fun ARGS1(
char *, key)
{
if (!LYSetKbLayout(key))
- CTRACE(tfp, "Failed to set keyboard layout %s\n", key);
+ CTRACE((tfp, "Failed to set keyboard layout %s\n", key));
return 0;
}
#endif /* EXP_KEYBOARD_LAYOUT */
-static int keymap_fun ARGS1(
+PRIVATE int keymap_fun ARGS1(
char *, key)
{
- char *func;
+ char *func, *efunc;
- if ((func = strchr(key, ':')) != NULL) {
+ if ((func = strchr(key, ':')) != NULL) {
*func++ = '\0';
+ efunc = strchr(func, ':');
/* Allow comments on the ends of key remapping lines. - DT */
- if (!remap(key, strtok(func, " \t\n#")))
- fprintf(stderr, "%s%s%s%s%s\n",
- gettext("key remapping of "),
- key, TO_SEGMENT, func,
- gettext(" failed"));
- else if (!strcmp("TOGGLE_HELP", strtok(func, " \t\n#")))
- LYUseNoviceLineTwo = FALSE;
+ /* Allow third field for line-editor action. - kw */
+ if (efunc == func) { /* have 3rd field, but 2nd field empty */
+ func = NULL;
+ } else if (efunc && strncasecomp(efunc + 1, "DIRED", 5) == 0) {
+ if (!remap(key, strtok(func, " \t\n:#"), TRUE)) {
+ fprintf(stderr,
+ gettext("key remapping of %s to %s for %s failed\n"),
+ key, func, efunc + 1);
+ } else if (func && !strcmp("TOGGLE_HELP", func)) {
+ LYUseNoviceLineTwo = FALSE;
+ }
+ return 0;
+ } else if (!remap(key, strtok(func, " \t\n:#"), FALSE)) {
+ fprintf(stderr, gettext("key remapping of %s to %s failed\n"),
+ key, func);
+ } else {
+ if (func && !strcmp("TOGGLE_HELP", func))
+ LYUseNoviceLineTwo = FALSE;
+ }
+ if (efunc) {
+ efunc++;
+ if (efunc == strtok((func ? NULL : efunc), " \t\n:#") && *efunc) {
+ BOOLEAN success = FALSE;
+ int lkc = lkcstring_to_lkc(key);
+ int lec = -1;
+ int select_edi = 0;
+ char *sselect_edi = strtok(NULL, " \t\n:#");
+ char **endp = &sselect_edi;
+ if (sselect_edi) {
+ if (*sselect_edi)
+ select_edi = strtol(sselect_edi, endp, 10);
+ if (**endp != '\0') {
+ fprintf(stderr,
+ gettext(
+ "invalid line-editor selection %s for key %s, selecting all\n"),
+ sselect_edi, key);
+ select_edi = 0;
+ }
+ }
+ /*
+ * PASS! tries to enter the key into the LYLineEditors
+ * bindings in a different way from PASS, namely as
+ * binding that maps to the specific lynx actioncode
+ * (rather than to LYE_FORM_PASS). That only works
+ * for lynx keycodes with modifier bit set, and we
+ * have no documented/official way to specify this
+ * in the KEYMAP directive, although it can be made
+ * to work e.g. by specifying a hex value that has the
+ * modifier bit set. But knowledge about the bit
+ * pattern of modifiers should remain in internal
+ * matter subject to change... At any rate, if
+ * PASS! fails try it the same way as for PASS. - kw
+ */
+ if (!success && strcasecomp(efunc, "PASS!") == 0) {
+ if (func) {
+ lec = LYE_FORM_LAC|lacname_to_lac(func);
+ success = (BOOL) LYRemapEditBinding(lkc, lec, select_edi);
+ }
+ if (!success)
+ fprintf(stderr,
+ gettext(
+ "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"),
+ key, lkc, lec, efunc);
+ else
+ return 0;
+ }
+ if (!success) {
+ lec = lecname_to_lec(efunc);
+ success = (BOOL) LYRemapEditBinding(lkc, lec, select_edi);
+ }
+ if (!success) {
+ if (lec != -1) {
+ fprintf(stderr,
+ gettext(
+ "setting of line-editor binding for key %s (0x%x) to 0x%x for %s failed\n"),
+ key, lkc, lec, efunc);
+ } else {
+ fprintf(stderr,
+ gettext(
+ "setting of line-editor binding for key %s (0x%x) for %s failed\n"),
+ key, lkc, efunc);
+ }
+ }
+ }
+ }
}
return 0;
}
-static int localhost_alias_fun ARGS1(
+PRIVATE int localhost_alias_fun ARGS1(
char *, value)
{
LYAddLocalhostAlias(value);
@@ -659,7 +748,7 @@ static int localhost_alias_fun ARGS1(
}
#ifdef LYNXCGI_LINKS
-static int lynxcgi_environment_fun ARGS1(
+PRIVATE int lynxcgi_environment_fun ARGS1(
char *, value)
{
add_lynxcgi_environment(value);
@@ -667,7 +756,7 @@ static int lynxcgi_environment_fun ARGS1(
}
#endif
-static int lynx_sig_file_fun ARGS1(
+PRIVATE int lynx_sig_file_fun ARGS1(
char *, value)
{
char temp[LY_MAXPATH];
@@ -676,15 +765,15 @@ static int lynx_sig_file_fun ARGS1(
StrAllocCopy(LynxSigFile, temp);
LYAddPathToHome(temp, sizeof(temp), LynxSigFile);
StrAllocCopy(LynxSigFile, temp);
- CTRACE(tfp, "LYNX_SIG_FILE set to '%s'\n", LynxSigFile);
+ CTRACE((tfp, "LYNX_SIG_FILE set to '%s'\n", LynxSigFile));
} else {
- CTRACE(tfp, "LYNX_SIG_FILE '%s' is bad. Ignoring.\n", LYNX_SIG_FILE);
+ CTRACE((tfp, "LYNX_SIG_FILE '%s' is bad. Ignoring.\n", LYNX_SIG_FILE));
}
return 0;
}
#ifndef DISABLE_NEWS
-static int news_chunk_size_fun ARGS1(
+PRIVATE int news_chunk_size_fun ARGS1(
char *, value)
{
HTNewsChunkSize = atoi(value);
@@ -697,7 +786,7 @@ static int news_chunk_size_fun ARGS1(
return 0;
}
-static int news_max_chunk_fun ARGS1(
+PRIVATE int news_max_chunk_fun ARGS1(
char *, value)
{
HTNewsMaxChunk = atoi(value);
@@ -710,17 +799,17 @@ static int news_max_chunk_fun ARGS1(
return 0;
}
-static int news_posting_fun ARGS1(
+PRIVATE int news_posting_fun ARGS1(
char *, value)
{
LYNewsPosting = is_true(value);
- no_newspost = (LYNewsPosting == FALSE);
+ no_newspost = (BOOL) (LYNewsPosting == FALSE);
return 0;
}
#endif /* DISABLE_NEWS */
#ifndef NO_RULES
-static int cern_rulesfile_fun ARGS1(
+PRIVATE int cern_rulesfile_fun ARGS1(
char *, value)
{
char *rulesfile1 = NULL;
@@ -749,60 +838,137 @@ static int cern_rulesfile_fun ARGS1(
"Lynx: cannot start, CERN rules file %s is not available\n"
),
(rulesfile2 && *rulesfile2) ? rulesfile2 : gettext("(no name)"));
- exit_immediately(69); /* EX_UNAVAILABLE in sysexits.h */
+ exit_immediately(EXIT_FAILURE);
return 0; /* though redundant, for compiler-warnings */
}
#endif /* NO_RULES */
-static int printer_fun ARGS1(
+PRIVATE int printer_fun ARGS1(
char *, value)
{
- add_printer_to_list(value, &printers);
+ add_item_to_list(value, &printers, TRUE);
return 0;
}
-#ifdef SOURCE_CACHE
-static int source_cache_fun ARGS1(
+PRIVATE int referer_with_query_fun ARGS1(
char *, value)
{
- if (!strncasecomp(value, "FILE", 4))
- LYCacheSource = SOURCE_CACHE_FILE;
- else if (!strncasecomp(value, "MEM", 3))
- LYCacheSource = SOURCE_CACHE_MEMORY;
- else if (!strncasecomp(value, "NONE", 4))
- LYCacheSource = SOURCE_CACHE_NONE;
-
+ if (!strncasecomp(value, "SEND", 4))
+ LYRefererWithQuery = 'S';
+ else if (!strncasecomp(value, "PARTIAL", 7))
+ LYRefererWithQuery = 'P';
+ else
+ LYRefererWithQuery = 'D';
return 0;
}
-#endif
-static int suffix_fun ARGS1(
+PRIVATE int suffix_fun ARGS1(
char *, value)
{
- char *mime_type;
+ char *mime_type, *p;
+ char *encoding = NULL, *sq = NULL, *description = NULL;
+ double q = 1.0;
if ((strlen (value) < 3)
- || (NULL == (mime_type = strchr (value, ':'))))
+ || (NULL == (mime_type = strchr (value, ':')))) {
+ CTRACE((tfp, "Invalid SUFFIX:%s ignored.\n", value));
return 0;
+ }
*mime_type++ = '\0';
+ if (*mime_type) {
+ if ((encoding = strchr(mime_type, ':')) != NULL) {
+ *encoding++ = '\0';
+ if ((sq = strchr(encoding, ':')) != NULL) {
+ *sq++ = '\0';
+ if ((description = strchr(sq, ':')) != NULL) {
+ *description++ = '\0';
+ if ((p = strchr(sq, ':')) != NULL)
+ *p = '\0';
+ LYTrimTail(description);
+ }
+ LYRemoveBlanks(sq);
+ if (!*sq)
+ sq = NULL;
+ }
+ LYRemoveBlanks(encoding);
+ LYLowerCase(encoding);
+ if (!*encoding)
+ encoding = NULL;
+ }
+ }
LYRemoveBlanks(mime_type);
- LYLowerCase(mime_type);
+ /*
+ * Not converted to lowercase on input, to make it possible to
+ * reproduce the equivalent of some of the HTInit.c defaults
+ * that use mixed case, although that is not recomended. - kw
+ */ /*LYLowerCase(mime_type);*/
+
+ if (!*mime_type) { /* that's ok now, with an encoding! */
+ CTRACE((tfp, "SUFFIX:%s without MIME type for %s\n", value,
+ encoding ? encoding : "what?"));
+ mime_type = NULL; /* that's ok now, with an encoding! */
+ if (!encoding)
+ return 0;
+ }
- if (strstr(mime_type, "tex") != NULL ||
- strstr(mime_type, "postscript") != NULL ||
- strstr(mime_type, "sh") != NULL ||
- strstr(mime_type, "troff") != NULL ||
- strstr(mime_type, "rtf") != NULL)
- HTSetSuffix(value, mime_type, "8bit", 1.0);
- else
- HTSetSuffix(value, mime_type, "binary", 1.0);
+ if (!encoding) {
+ if (strstr(mime_type, "tex") != NULL ||
+ strstr(mime_type, "postscript") != NULL ||
+ strstr(mime_type, "sh") != NULL ||
+ strstr(mime_type, "troff") != NULL ||
+ strstr(mime_type, "rtf") != NULL)
+ encoding = "8bit";
+ else
+ encoding = "binary";
+ }
+ if (!sq) {
+ q = 1.0;
+ } else {
+ double df = strtod(sq, &p);
+ if (p == sq && df == 0.0) {
+ CTRACE((tfp, "Invalid q=%s for SUFFIX:%s, using -1.0\n",
+ sq, value));
+ q = -1.0;
+ } else {
+ q = df;
+ }
+ }
+ HTSetSuffix5(value, mime_type, encoding, description, q);
+
+ return 0;
+}
+
+PRIVATE int suffix_order_fun ARGS1(
+ char *, value)
+{
+ char *p = value;
+ char *optn;
+ BOOLEAN want_file_init_now = FALSE;
+
+ LYUseBuiltinSuffixes = TRUE;
+ while ((optn = HTNextTok(&p, ", ", "", NULL)) != NULL) {
+ if (!strcasecomp(optn, "NO_BUILTIN")) {
+ LYUseBuiltinSuffixes = FALSE;
+ } else if (!strcasecomp(optn, "PRECEDENCE_HERE")) {
+ want_file_init_now = TRUE;
+ } else if (!strcasecomp(optn, "PRECEDENCE_OTHER")) {
+ want_file_init_now = FALSE;
+ } else {
+ CTRACE((tfp, "Invalid SUFFIX_ORDER:%s\n", optn));
+ break;
+ }
+ }
+ if (want_file_init_now && !FileInitAlreadyDone) {
+ HTFileInit();
+ FileInitAlreadyDone = TRUE;
+ }
return 0;
}
-static int system_editor_fun ARGS1(
+PRIVATE int system_editor_fun ARGS1(
char *, value)
{
StrAllocCopy(editor, value);
@@ -810,7 +976,7 @@ static int system_editor_fun ARGS1(
return 0;
}
-static int viewer_fun ARGS1(
+PRIVATE int viewer_fun ARGS1(
char *, value)
{
char *mime_type;
@@ -854,10 +1020,104 @@ static int viewer_fun ARGS1(
return 0;
}
+PRIVATE int nonrest_sigwinch_fun ARGS1(
+ char *, value)
+{
+ if (!strncasecomp(value, "XWINDOWS", 8)) {
+ LYNonRestartingSIGWINCH = (BOOL) (LYgetXDisplay() != NULL);
+ } else {
+ LYNonRestartingSIGWINCH = is_true(value);
+ }
+ return 0;
+}
-#ifdef USE_PSRC
+#ifdef EXP_CHARSET_CHOICE
+PRIVATE void matched_charset_choice ARGS2(
+ BOOL, display_charset,
+ int, i)
+{
+ int j;
+
+ if (display_charset && !custom_display_charset) {
+ for (custom_display_charset = TRUE, j = 0; j < LYNumCharsets; ++j)
+ charset_subsets[j].hide_display = TRUE;
+ } else if (!display_charset && !custom_assumed_doc_charset) {
+ for (custom_assumed_doc_charset = TRUE, j = 0; j < LYNumCharsets; ++j)
+ charset_subsets[j].hide_assumed = TRUE;
+ }
+ if (display_charset)
+ charset_subsets[i].hide_display = FALSE;
+ else
+ charset_subsets[i].hide_assumed = FALSE;
+}
-static void html_src_bad_syntax ARGS2(
+PRIVATE int parse_charset_choice ARGS2(
+ char *, p,
+ BOOL, display_charset) /*if FALSE, then assumed doc charset*/
+{
+ int len, i;
+ int matches = 0;
+
+ /*only one charset choice is allowed per line!*/
+ LYTrimHead(p);
+ LYTrimTail(p);
+ CTRACE((tfp, "parsing charset choice for %s:\"%s\"",
+ (display_charset ? "display charset" : "assumed doc charset"), p));
+ len = strlen(p);
+ if (!len) {
+ CTRACE((tfp," - EMPTY STRING\n"));
+ return 1;
+ }
+ if (*p == '*' && len == 1) {
+ if (display_charset)
+ for (custom_display_charset = TRUE, i = 0 ;i < LYNumCharsets; ++i)
+ charset_subsets[i].hide_display = FALSE;
+ else
+ for (custom_assumed_doc_charset = TRUE, i = 0; i < LYNumCharsets; ++i)
+ charset_subsets[i].hide_assumed = FALSE;
+ CTRACE((tfp," - all unhidden\n"));
+ return 0;
+ }
+ if (p[len-1] == '*') {
+ --len;
+ for (i = 0 ;i < LYNumCharsets; ++i) {
+ if ((!strncasecomp(p, LYchar_set_names[i], len)) ||
+ (!strncasecomp(p, LYCharSet_UC[i].MIMEname, len)) ) {
+ ++matches;
+ matched_charset_choice(display_charset, i);
+ }
+ }
+ CTRACE((tfp," - %d matches\n", matches));
+ return 0;
+ } else {
+ for (i = 0; i < LYNumCharsets; ++i) {
+ if ((!strcasecomp(p,LYchar_set_names[i])) ||
+ (!strcasecomp(p,LYCharSet_UC[i].MIMEname)) ) {
+ matched_charset_choice(display_charset, i);
+ CTRACE((tfp," - OK\n"));
+ ++matches;
+ return 0;
+ }
+ }
+ CTRACE((tfp," - NOT recognised\n"));
+ return 1;
+ }
+}
+
+PRIVATE int parse_display_charset_choice ARGS1(char*,p)
+{
+ return parse_charset_choice(p,1);
+}
+
+PRIVATE int parse_assumed_doc_charset_choice ARGS1(char*,p)
+{
+ return parse_charset_choice(p,0);
+}
+
+#endif /* EXP_CHARSET_CHOICE */
+
+#ifdef USE_PRETTYSRC
+PRIVATE void html_src_bad_syntax ARGS2(
char*, value,
char*, option_name)
{
@@ -866,12 +1126,11 @@ static void html_src_bad_syntax ARGS2(
HTSprintf0(&buf,"HTMLSRC_%s", option_name);
LYUpperCase(buf);
fprintf(stderr,"Bad syntax in TAGSPEC %s:%s\n", buf, value);
- exit_immediately(-1);
+ exit_immediately(EXIT_FAILURE);
}
-
-static int parse_html_src_spec ARGS3(
- HTlexem, lexem_code,
+PRIVATE int parse_html_src_spec ARGS3(
+ HTlexeme, lexeme_code,
char*, value,
char*, option_name)
{
@@ -890,297 +1149,357 @@ static int parse_html_src_spec ARGS3(
BS();
*ts2 = '\0';
- if ( html_src_parse_tagspec(value, lexem_code, TRUE, TRUE)
- || html_src_parse_tagspec(ts2, lexem_code, TRUE, TRUE) )
+ CTRACE((tfp,"ReadCFG - parsing tagspec '%s:%s' for option '%s'\n",value,ts2,option_name));
+ html_src_clean_item(lexeme_code);
+ if ( html_src_parse_tagspec(value, lexeme_code, TRUE, TRUE)
+ || html_src_parse_tagspec(ts2, lexeme_code, TRUE, TRUE) )
{
*ts2 = ':';
BS();
}
*ts2 = ':';
- HTL_tagspecs[lexem_code] = NULL;
- StrAllocCopy(HTL_tagspecs[lexem_code],value);
+ StrAllocCopy(HTL_tagspecs[lexeme_code],value);
#undef BS
return 0;
}
-#define defHTSRC_parse_fun(x) static int html_src_set_##x ARGS1( char*,str) \
- { parse_html_src_spec(HTL_##x,str,#x); return 0; }
-
-defHTSRC_parse_fun(comm)
-defHTSRC_parse_fun(tag)
-defHTSRC_parse_fun(attrib)
-defHTSRC_parse_fun(attrval)
-defHTSRC_parse_fun(abracket)
-defHTSRC_parse_fun(entity)
-defHTSRC_parse_fun(href)
-defHTSRC_parse_fun(entire)
-defHTSRC_parse_fun(badseq)
-defHTSRC_parse_fun(badtag)
-defHTSRC_parse_fun(badattr)
-defHTSRC_parse_fun(sgmlspecial)
-
-#undef defHTSRC_parse_fun
-
-static int read_htmlsrc_attrname_xform ARGS1( char*,str)
+PRIVATE int psrcspec_fun ARGS1(char*,s)
+{
+ char* e;
+ static Config_Enum lexemnames[] =
+ {
+ { "comm", HTL_comm },
+ { "tag", HTL_tag },
+ { "attrib", HTL_attrib },
+ { "attrval", HTL_attrval },
+ { "abracket", HTL_abracket },
+ { "entity", HTL_entity },
+ { "href", HTL_href },
+ { "entire", HTL_entire },
+ { "badseq", HTL_badseq },
+ { "badtag", HTL_badtag },
+ { "badattr", HTL_badattr },
+ { "sgmlspecial", HTL_sgmlspecial },
+ { NULL, -1 }
+ };
+ int found;
+
+ e = strchr(s,':');
+ if (!e) {
+ CTRACE((tfp,"bad format of PRETTYSRC_SPEC setting value, ignored %s\n",s));
+ return 0;
+ }
+ *e = '\0';
+ if (!LYgetEnum(lexemnames, s, &found)) {
+ CTRACE((tfp,"bad format of PRETTYSRC_SPEC setting value, ignored %s:%s\n",s,e+1));
+ return 0;
+ }
+ parse_html_src_spec(found, e+1, s);
+ return 0;
+}
+
+PRIVATE int read_htmlsrc_attrname_xform ARGS1( char*,str)
{
int val;
if ( 1 == sscanf(str, "%d", &val) ) {
if (val<0 || val >2) {
- CTRACE(tfp,"bad value for htmlsrc_attrname_xform (ignored - must be one of 0,1,2): %d\n", val);
+ CTRACE((tfp,"bad value for htmlsrc_attrname_xform (ignored - must be one of 0,1,2): %d\n", val));
} else
attrname_transform = val;
} else {
- CTRACE(tfp,"bad value for htmlsrc_attrname_xform (ignored): %s\n",
- str);
+ CTRACE((tfp,"bad value for htmlsrc_attrname_xform (ignored): %s\n",
+ str));
}
return 0;
}
-static int read_htmlsrc_tagname_xform ARGS1( char*,str)
+PRIVATE int read_htmlsrc_tagname_xform ARGS1( char*,str)
{
int val;
if ( 1 == sscanf(str,"%d",&val) ) {
if (val<0 || val >2) {
- CTRACE(tfp,"bad value for htmlsrc_tagname_xform (ignored - must be one of 0,1,2): %d\n", val);
+ CTRACE((tfp,"bad value for htmlsrc_tagname_xform (ignored - must be one of 0,1,2): %d\n", val));
} else
tagname_transform = val;
} else {
- CTRACE(tfp,"bad value for htmlsrc_tagname_xform (ignored): %s\n",
- str);
+ CTRACE((tfp,"bad value for htmlsrc_tagname_xform (ignored): %s\n",
+ str));
}
return 0;
}
-
-
-#define defHTSRC_option(x) \
- PARSE_FUN( "htmlsrc_" #x ,CONF_FUN, html_src_set_##x),
-
#endif
-
-/* This table should be sorted alphabetically */
-static Config_Type Config_Table [] =
-{
- PARSE_SET("accept_all_cookies", CONF_BOOL, &LYAcceptAllCookies),
- PARSE_INT("alertsecs", CONF_INT, &AlertSecs),
- PARSE_SET("always_resubmit_posts", CONF_BOOL, &LYresubmit_posts),
+/* This table is searched ignoring case */
+PRIVATE Config_Type Config_Table [] =
+{
+ PARSE_SET("accept_all_cookies", LYAcceptAllCookies),
+ PARSE_TIM("alertsecs", AlertSecs),
+ PARSE_SET("always_resubmit_posts", LYresubmit_posts),
#ifdef EXEC_LINKS
- PARSE_DEF("always_trusted_exec", CONF_ADD_TRUSTED, ALWAYS_EXEC_PATH),
-#endif
- PARSE_FUN("assume_charset", CONF_FUN, assume_charset_fun),
- PARSE_FUN("assume_local_charset", CONF_FUN, assume_local_charset_fun),
- PARSE_FUN("assume_unrec_charset", CONF_FUN, assume_unrec_charset_fun),
- PARSE_SET("block_multi_bookmarks", CONF_BOOL, &LYMBMBlocked),
- PARSE_SET("bold_h1", CONF_BOOL, &bold_H1),
- PARSE_SET("bold_headers", CONF_BOOL, &bold_headers),
- PARSE_SET("bold_name_anchors", CONF_BOOL, &bold_name_anchors),
- PARSE_SET("case_sensitive_always_on", CONF_BOOL, &case_sensitive),
- PARSE_FUN("character_set", CONF_FUN, character_set_fun),
- PARSE_SET("checkmail", CONF_BOOL, &check_mail),
- PARSE_SET("collapse_br_tags", CONF_BOOL, &LYCollapseBRs),
+ PARSE_DEF("always_trusted_exec", ALWAYS_EXEC_PATH),
+#endif
+ PARSE_FUN("assume_charset", assume_charset_fun),
+ PARSE_FUN("assume_local_charset", assume_local_charset_fun),
+ PARSE_FUN("assume_unrec_charset", assume_unrec_charset_fun),
+#ifdef EXP_ASSUMED_COLOR
+ PARSE_FUN("assumed_color", assumed_color_fun),
+#endif
+#ifdef EXP_CHARSET_CHOICE
+ PARSE_FUN("assumed_doc_charset_choice", parse_assumed_doc_charset_choice),
+#endif
+#ifdef DIRED_SUPPORT
+ PARSE_INT("auto_uncache_dirlists", LYAutoUncacheDirLists),
+#endif
+#ifndef DISABLE_BIBP
+ PARSE_STR("bibp_bibhost", BibP_bibhost),
+ PARSE_STR("bibp_globalserver", BibP_globalserver),
+#endif
+ PARSE_SET("block_multi_bookmarks", LYMBMBlocked),
+ PARSE_SET("bold_h1", bold_H1),
+ PARSE_SET("bold_headers", bold_headers),
+ PARSE_SET("bold_name_anchors", bold_name_anchors),
+ PARSE_SET("case_sensitive_always_on", case_sensitive),
+ PARSE_FUN("character_set", character_set_fun),
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+ PARSE_STR("charset_switch_rules", charset_switch_rules),
+ PARSE_STR("charsets_directory", charsets_directory),
+#endif
+ PARSE_SET("checkmail", check_mail),
+ PARSE_SET("collapse_br_tags", LYCollapseBRs),
#ifdef USE_COLOR_TABLE
- PARSE_FUN("color", CONF_FUN, color_fun),
+ PARSE_FUN("color", color_fun),
+#endif
+#ifndef __DJGPP__
+ PARSE_INT("connect_timeout", connect_timeout),
#endif
- PARSE_STR("cookie_accept_domains", CONF_STR, &LYCookieSAcceptDomains),
+ PARSE_STR("cookie_accept_domains", LYCookieSAcceptDomains),
+#ifdef EXP_PERSISTENT_COOKIES
+ PARSE_STR("cookie_file", LYCookieFile),
+#endif /* EXP_PERSISTENT_COOKIES */
+ PARSE_STR("cookie_loose_invalid_domains", LYCookieSLooseCheckDomains),
+ PARSE_STR("cookie_query_invalid_domains", LYCookieSQueryCheckDomains),
+ PARSE_STR("cookie_reject_domains", LYCookieSRejectDomains),
#ifdef EXP_PERSISTENT_COOKIES
- PARSE_STR("cookie_file", CONF_STR, &LYCookieFile),
+ PARSE_STR("cookie_save_file", LYCookieSaveFile),
#endif /* EXP_PERSISTENT_COOKIES */
- PARSE_STR("cookie_loose_invalid_domains", CONF_STR, &LYCookieSLooseCheckDomains),
- PARSE_STR("cookie_query_invalid_domains", CONF_STR, &LYCookieSQueryCheckDomains),
- PARSE_STR("cookie_reject_domains", CONF_STR, &LYCookieSRejectDomains),
- PARSE_STR("cookie_strict_invalid_domains", CONF_STR, &LYCookieSStrictCheckDomains),
- PARSE_ENV("cso_proxy", CONF_ENV, 0 ),
+ PARSE_STR("cookie_strict_invalid_domains", LYCookieSStrictCheckDomains),
+ PARSE_Env("cso_proxy", 0 ),
#ifdef VMS
- PARSE_STR("CSWING_PATH", CONF_STR, &LYCSwingPath),
-#endif
- PARSE_FUN("default_bookmark_file", CONF_FUN, default_bookmark_file_fun),
- PARSE_FUN("default_cache_size", CONF_FUN, default_cache_size_fun),
- PARSE_FUN("default_editor", CONF_FUN, default_editor_fun),
- PARSE_STR("default_index_file", CONF_STR, &indexfile),
- PARSE_FUN("default_keypad_mode_is_numbers_as_arrows", CONF_FUN, numbers_as_arrows_fun),
- PARSE_FUN("default_user_mode", CONF_FUN, default_user_mode_fun),
+ PARSE_STR("cswing_path", LYCSwingPath),
+#endif
+ PARSE_FUN("default_bookmark_file", default_bookmark_file_fun),
+ PARSE_FUN("default_cache_size", default_cache_size_fun),
+ PARSE_FUN("default_editor", default_editor_fun),
+ PARSE_STR("default_index_file", indexfile),
+ PARSE_ENU("default_keypad_mode", keypad_mode, tbl_keypad_mode),
+ PARSE_FUN("default_keypad_mode_is_numbers_as_arrows", numbers_as_arrows_fun),
+ PARSE_ENU("default_user_mode", user_mode, tbl_user_mode),
#if defined(VMS) && defined(VAXC) && !defined(__DECC)
- PARSE_INT("default_virtual_memory_size", CONF_INT, &HTVirtualMemorySize),
+ PARSE_INT("default_virtual_memory_size", HTVirtualMemorySize),
#endif
#ifdef DIRED_SUPPORT
- PARSE_FUN("dired_menu", CONF_FUN, dired_menu_fun),
+ PARSE_FUN("dired_menu", dired_menu_fun),
+#endif
+#ifdef EXP_CHARSET_CHOICE
+ PARSE_FUN("display_charset_choice", parse_display_charset_choice),
#endif
- PARSE_ADD("downloader", CONF_ADD_ITEM, downloaders),
- PARSE_SET("emacs_keys_always_on", CONF_BOOL, &emacs_keys),
- PARSE_SET("enable_scrollback", CONF_BOOL, &enable_scrollback),
+ PARSE_ADD("downloader", downloaders),
+ PARSE_SET("emacs_keys_always_on", emacs_keys),
+ PARSE_FUN("enable_lynxrc", enable_lynxrc),
+ PARSE_SET("enable_scrollback", enable_scrollback),
#ifdef USE_EXTERNALS
- PARSE_ADD("external", CONF_ADD_ITEM, externals),
+ PARSE_ADD("external", externals),
#endif
- PARSE_ENV("finger_proxy", CONF_ENV, 0 ),
- PARSE_SET("force_8bit_toupper", CONF_BOOL, &UCForce8bitTOUPPER),
- PARSE_SET("force_ssl_cookies_secure", CONF_BOOL, &LYForceSSLCookiesSecure),
+ PARSE_Env("finger_proxy", 0 ),
+#if defined(_WINDOWS) /* 1998/10/05 (Mon) 17:34:15 */
+ PARSE_SET("focus_window", focus_window),
+#endif
+ PARSE_SET("force_8bit_toupper", UCForce8bitTOUPPER),
+ PARSE_SET("force_empty_hrefless_a", force_empty_hrefless_a),
+ PARSE_SET("force_ssl_cookies_secure", LYForceSSLCookiesSecure),
#if !defined(NO_OPTION_FORMS) && !defined(NO_OPTION_MENU)
- PARSE_SET("forms_options", CONF_BOOL, &LYUseFormsOptions),
+ PARSE_SET("forms_options", LYUseFormsOptions),
#endif
- PARSE_SET("ftp_passive", CONF_BOOL, &ftp_passive),
- PARSE_ENV("ftp_proxy", CONF_ENV, 0 ),
- PARSE_STR("global_extension_map", CONF_STR, &global_extension_map),
- PARSE_STR("global_mailcap", CONF_STR, &global_type_map),
- PARSE_ENV("gopher_proxy", CONF_ENV, 0 ),
- PARSE_SET("gotobuffer", CONF_BOOL, &goto_buffer),
- PARSE_STR("helpfile", CONF_STR, &helpfile),
- PARSE_SET("historical_comments", CONF_BOOL, &historical_comments),
-
-#ifdef USE_PSRC
-
- defHTSRC_option(abracket)
- defHTSRC_option(attrib)
-
- PARSE_FUN("htmlsrc_attrname_xform", CONF_FUN, read_htmlsrc_attrname_xform),
-
- defHTSRC_option(attrval)
- defHTSRC_option(badattr)
- defHTSRC_option(badseq)
- defHTSRC_option(badtag)
- defHTSRC_option(comm)
- defHTSRC_option(entire)
- defHTSRC_option(entity)
- defHTSRC_option(href)
- defHTSRC_option(sgmlspecial)
- defHTSRC_option(tag)
-
- PARSE_FUN("htmlsrc_tagname_xform", CONF_FUN, read_htmlsrc_tagname_xform),
-
-
-# undef defHTSRC_option
+ PARSE_SET("ftp_passive", ftp_passive),
+ PARSE_Env("ftp_proxy", 0 ),
+ PARSE_STR("global_extension_map", global_extension_map),
+ PARSE_STR("global_mailcap", global_type_map),
+ PARSE_Env("gopher_proxy", 0 ),
+ PARSE_SET("gotobuffer", goto_buffer),
+ PARSE_STR("helpfile", helpfile),
+#ifdef MARK_HIDDEN_LINKS
+ PARSE_STR("hidden_link_marker", hidden_link_marker),
#endif
-
- PARSE_ENV("http_proxy", CONF_ENV, 0 ),
- PARSE_ENV("https_proxy", CONF_ENV, 0 ),
- PARSE_FUN("include", CONF_INCLUDE, 0),
- PARSE_INT("infosecs", CONF_INT, &InfoSecs),
- PARSE_STR("jump_prompt", CONF_STR, &jumpprompt),
- PARSE_SET("jumpbuffer", CONF_BOOL, &jump_buffer),
- PARSE_FUN("jumpfile", CONF_FUN, jumpfile_fun),
-#ifdef EXP_KEYBOARD_LAYOUT
- PARSE_FUN("keyboard_layout", CONF_FUN, keyboard_layout_fun),
+ PARSE_SET("historical_comments", historical_comments),
+#ifdef USE_PRETTYSRC
+ PARSE_FUN("htmlsrc_attrname_xform", read_htmlsrc_attrname_xform),
+ PARSE_FUN("htmlsrc_tagname_xform", read_htmlsrc_tagname_xform),
#endif
- PARSE_FUN("keymap", CONF_FUN, keymap_fun),
-#ifndef DISABLE_NEWS
- PARSE_SET("list_news_numbers", CONF_BOOL, &LYListNewsNumbers),
- PARSE_SET("list_news_dates", CONF_BOOL, &LYListNewsDates),
+ PARSE_Env("http_proxy", 0 ),
+ PARSE_Env("https_proxy", 0 ),
+ PARSE_REQ("include", 0),
+ PARSE_TIM("infosecs", InfoSecs),
+ PARSE_STR("jump_prompt", jumpprompt),
+ PARSE_SET("jumpbuffer", jump_buffer),
+ PARSE_FUN("jumpfile", jumpfile_fun),
+#ifdef EXP_JUSTIFY_ELTS
+ PARSE_SET("justify", ok_justify),
+ PARSE_INT("justify_max_void_percent", justify_max_void_percent),
+#endif
+#ifdef EXP_KEYBOARD_LAYOUT
+ PARSE_FUN("keyboard_layout", keyboard_layout_fun),
#endif
+ PARSE_FUN("keymap", keymap_fun),
+ PARSE_SET("leftarrow_in_textfield_prompt", textfield_prompt_at_left_edge),
#ifndef VMS
- PARSE_STR("list_format", CONF_STR, &list_format),
+ PARSE_STR("list_format", list_format),
+#endif
+#ifndef DISABLE_NEWS
+ PARSE_SET("list_news_dates", LYListNewsDates),
+ PARSE_SET("list_news_numbers", LYListNewsNumbers),
#endif
- PARSE_FUN("localhost_alias", CONF_FUN, localhost_alias_fun),
- PARSE_STR("local_domain", CONF_STR, &LYLocalDomain),
+ PARSE_STR("local_domain", LYLocalDomain),
#if defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
- PARSE_SET("local_execution_links_always_on", CONF_BOOL, &local_exec),
- PARSE_SET("local_execution_links_on_but_not_remote", CONF_BOOL, &local_exec_on_local_files),
+ PARSE_SET("local_execution_links_always_on", local_exec),
+ PARSE_SET("local_execution_links_on_but_not_remote", local_exec_on_local_files),
#endif
+ PARSE_FUN("localhost_alias", localhost_alias_fun),
+ PARSE_STR("lynx_host_name", LYHostName),
+ PARSE_FUN("lynx_sig_file", lynx_sig_file_fun),
#ifdef LYNXCGI_LINKS
- PARSE_FUN("lynxcgi_environment", CONF_FUN, lynxcgi_environment_fun),
#ifndef VMS
- PARSE_STR("lynxcgi_document_root", CONF_STR, &LYCgiDocumentRoot),
+ PARSE_STR("lynxcgi_document_root", LYCgiDocumentRoot),
#endif
+ PARSE_FUN("lynxcgi_environment", lynxcgi_environment_fun),
#endif
- PARSE_STR("lynx_host_name", CONF_STR, &LYHostName),
- PARSE_FUN("lynx_sig_file", CONF_FUN, lynx_sig_file_fun),
- PARSE_SET("mail_system_error_logging", CONF_BOOL, &error_logging),
-#ifdef VMS
- PARSE_STR("mail_adrs", CONF_STR, &mail_adrs),
-#endif
- PARSE_SET("make_links_for_all_images", CONF_BOOL, &clickable_images),
- PARSE_SET("make_pseudo_alts_for_inlines", CONF_BOOL, &pseudo_inline_alts),
- PARSE_INT("messagesecs", CONF_INT, &MessageSecs),
- PARSE_SET("minimal_comments", CONF_BOOL, &minimal_comments),
- PARSE_SET("multi_bookmark_support", CONF_BOOL, &LYMultiBookmarks),
- PARSE_SET("ncr_in_bookmarks", CONF_BOOL, &UCSaveBookmarksInUnicode),
+#if USE_VMS_MAILER
+ PARSE_STR("mail_adrs", mail_adrs),
+#endif
+ PARSE_SET("mail_system_error_logging", error_logging),
+ PARSE_SET("make_links_for_all_images", clickable_images),
+ PARSE_SET("make_pseudo_alts_for_inlines", pseudo_inline_alts),
+ PARSE_TIM("messagesecs", MessageSecs),
+ PARSE_SET("minimal_comments", minimal_comments),
+ PARSE_ENU("multi_bookmark_support", LYMultiBookmarks, tbl_multi_bookmarks),
+ PARSE_SET("ncr_in_bookmarks", UCSaveBookmarksInUnicode),
#ifndef DISABLE_NEWS
- PARSE_FUN("news_chunk_size", CONF_FUN, news_chunk_size_fun),
- PARSE_FUN("news_max_chunk", CONF_FUN, news_max_chunk_fun),
- PARSE_FUN("news_posting", CONF_FUN, news_posting_fun),
- PARSE_ENV("news_proxy", CONF_ENV, 0),
- PARSE_ENV("newspost_proxy", CONF_ENV, 0),
- PARSE_ENV("newsreply_proxy", CONF_ENV, 0),
- PARSE_ENV("nntp_proxy", CONF_ENV, 0),
- PARSE_ENV("nntpserver", CONF_ENV2, 0), /* actually NNTPSERVER */
-#endif
- PARSE_SET("no_dot_files", CONF_BOOL, &no_dotfiles),
- PARSE_SET("no_file_referer", CONF_BOOL, &no_filereferer),
+ PARSE_FUN("news_chunk_size", news_chunk_size_fun),
+ PARSE_FUN("news_max_chunk", news_max_chunk_fun),
+ PARSE_FUN("news_posting", news_posting_fun),
+ PARSE_Env("news_proxy", 0),
+ PARSE_Env("newspost_proxy", 0),
+ PARSE_Env("newsreply_proxy", 0),
+ PARSE_Env("nntp_proxy", 0),
+ PARSE_ENV("nntpserver", 0), /* actually NNTPSERVER */
+#endif
+ PARSE_SET("no_dot_files", no_dotfiles),
+ PARSE_SET("no_file_referer", no_filereferer),
#ifndef VMS
- PARSE_SET("no_forced_core_dump", CONF_BOOL, &LYNoCore),
+ PARSE_SET("no_forced_core_dump", LYNoCore),
#endif
- PARSE_SET("no_from_header", CONF_BOOL, &LYNoFromHeader),
- PARSE_SET("no_ismap_if_usemap", CONF_BOOL, &LYNoISMAPifUSEMAP),
- PARSE_ENV("no_proxy", CONF_ENV, 0 ),
- PARSE_SET("no_referer_header", CONF_BOOL, &LYNoRefererHeader),
- PARSE_FUN("outgoing_mail_charset", CONF_FUN, outgoing_mail_charset_fun),
+ PARSE_SET("no_from_header", LYNoFromHeader),
+ PARSE_SET("no_ismap_if_usemap", LYNoISMAPifUSEMAP),
+ PARSE_Env("no_proxy", 0 ),
+ PARSE_SET("no_referer_header", LYNoRefererHeader),
+#ifdef SH_EX
+ PARSE_SET("no_table_center", no_table_center),
+#endif
+ PARSE_FUN("nonrestarting_sigwinch", nonrest_sigwinch_fun),
+ PARSE_FUN("outgoing_mail_charset", outgoing_mail_charset_fun),
#ifdef DISP_PARTIAL
- PARSE_SET("partial", CONF_BOOL, &display_partial_flag),
- PARSE_INT("partial_thres", CONF_INT, &partial_threshold),
+ PARSE_SET("partial", display_partial_flag),
+ PARSE_INT("partial_thres", partial_threshold),
#endif
#ifdef EXP_PERSISTENT_COOKIES
- PARSE_SET("persistent_cookies", CONF_BOOL, &persistent_cookies),
+ PARSE_SET("persistent_cookies", persistent_cookies),
#endif /* EXP_PERSISTENT_COOKIES */
- PARSE_STR("personal_mailcap", CONF_STR, &personal_type_map),
- PARSE_STR("personal_extension_map", CONF_STR, &personal_extension_map),
- PARSE_STR("preferred_charset", CONF_STR, &pref_charset),
- PARSE_STR("preferred_language", CONF_STR, &language),
- PARSE_SET("prepend_base_to_source", CONF_BOOL, &LYPrependBaseToSource),
- PARSE_SET("prepend_charset_to_source", CONF_BOOL, &LYPrependCharsetToSource),
- PARSE_FUN("printer", CONF_FUN, printer_fun),
- PARSE_SET("quit_default_yes", CONF_BOOL, &LYQuitDefaultYes),
+ PARSE_STR("personal_extension_map", personal_extension_map),
+ PARSE_STR("personal_mailcap", personal_type_map),
+ PARSE_STR("preferred_charset", pref_charset),
+ PARSE_STR("preferred_language", language),
+ PARSE_SET("prepend_base_to_source", LYPrependBaseToSource),
+ PARSE_SET("prepend_charset_to_source", LYPrependCharsetToSource),
+#ifdef USE_PRETTYSRC
+ PARSE_SET("prettysrc", LYpsrc),
+ PARSE_FUN("prettysrc_spec", psrcspec_fun),
+ PARSE_SET("prettysrc_view_no_anchor_numbering", psrcview_no_anchor_numbering),
+#endif
+ PARSE_FUN("printer", printer_fun),
+ PARSE_SET("quit_default_yes", LYQuitDefaultYes),
+ PARSE_FUN("referer_with_query", referer_with_query_fun),
+ PARSE_SET("reuse_tempfiles", LYReuseTempfiles),
#ifndef NO_RULES
- PARSE_FUN("rule", CONF_FUN, HTSetConfiguration),
- PARSE_FUN("rulesfile", CONF_FUN, cern_rulesfile_fun),
+ PARSE_FUN("rule", HTSetConfiguration),
+ PARSE_FUN("rulesfile", cern_rulesfile_fun),
#endif /* NO_RULES */
- PARSE_STR("save_space", CONF_STR, &lynx_save_space),
- PARSE_SET("scan_for_buried_news_refs", CONF_BOOL, &scan_for_buried_news_references),
- PARSE_SET("seek_frag_area_in_cur", CONF_BOOL, &LYSeekFragAREAinCur),
- PARSE_SET("seek_frag_map_in_cur", CONF_BOOL, &LYSeekFragMAPinCur),
- PARSE_SET("set_cookies", CONF_BOOL, &LYSetCookies),
- PARSE_SET("show_cursor", CONF_BOOL, &LYShowCursor),
- PARSE_SET("show_kb_rate", CONF_BOOL, &LYshow_kb_rate),
- PARSE_ENV("snews_proxy", CONF_ENV, 0 ),
- PARSE_ENV("snewspost_proxy", CONF_ENV, 0 ),
- PARSE_ENV("snewsreply_proxy", CONF_ENV, 0 ),
- PARSE_SET("soft_dquotes", CONF_BOOL, &soft_dquotes),
+ PARSE_STR("save_space", lynx_save_space),
+ PARSE_SET("scan_for_buried_news_refs", scan_for_buried_news_references),
+#ifdef USE_SCROLLBAR
+ PARSE_SET("scrollbar", LYsb),
+ PARSE_SET("scrollbar_arrow", LYsb_arrow),
+#endif
+ PARSE_SET("seek_frag_area_in_cur", LYSeekFragAREAinCur),
+ PARSE_SET("seek_frag_map_in_cur", LYSeekFragMAPinCur),
+ PARSE_SET("set_cookies", LYSetCookies),
+ PARSE_SET("show_cursor", LYShowCursor),
+ PARSE_ENU("show_kb_rate", LYTransferRate, tbl_transfer_rate),
+ PARSE_Env("snews_proxy", 0 ),
+ PARSE_Env("snewspost_proxy", 0 ),
+ PARSE_Env("snewsreply_proxy", 0 ),
+ PARSE_SET("soft_dquotes", soft_dquotes),
#ifdef SOURCE_CACHE
- PARSE_SET("source_cache", CONF_FUN, source_cache_fun),
-#endif
- PARSE_STR("startfile", CONF_STR, &startfile),
- PARSE_SET("strip_dotdot_urls", CONF_BOOL, &LYStripDotDotURLs),
- PARSE_SET("substitute_underscores", CONF_BOOL, &use_underscore),
- PARSE_FUN("suffix", CONF_FUN, suffix_fun),
- PARSE_FUN("system_editor", CONF_FUN, system_editor_fun),
- PARSE_STR("system_mail", CONF_STR, &system_mail),
- PARSE_STR("system_mail_flags", CONF_STR, &system_mail_flags),
- PARSE_SET("tagsoup", CONF_BOOL, &Old_DTD),
+ PARSE_ENU("source_cache", LYCacheSource, tbl_source_cache),
+ PARSE_ENU("source_cache_for_aborted", LYCacheSourceForAborted, tbl_abort_source_cache),
+#endif
+ PARSE_STR("startfile", startfile),
+ PARSE_SET("strip_dotdot_urls", LYStripDotDotURLs),
+ PARSE_SET("substitute_underscores", use_underscore),
+ PARSE_FUN("suffix", suffix_fun),
+ PARSE_FUN("suffix_order", suffix_order_fun),
+ PARSE_FUN("system_editor", system_editor_fun),
+ PARSE_STR("system_mail", system_mail),
+ PARSE_STR("system_mail_flags", system_mail_flags),
+ PARSE_ENU("tagsoup", Old_DTD, tbl_DTD_recovery),
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ PARSE_SET("textfields_need_activation", textfields_activation_option),
+#endif
+#if defined(_WINDOWS)
+ PARSE_INT("timeout", lynx_timeout),
+#endif
+ PARSE_SET("trim_input_fields", LYtrimInputFields),
#ifdef EXEC_LINKS
- PARSE_DEF("trusted_exec", CONF_ADD_TRUSTED, EXEC_PATH),
+ PARSE_DEF("trusted_exec", EXEC_PATH),
#endif
#ifdef LYNXCGI_LINKS
- PARSE_DEF("trusted_lynxcgi", CONF_ADD_TRUSTED, CGI_PATH),
+ PARSE_DEF("trusted_lynxcgi", CGI_PATH),
#endif
- PARSE_STR("url_domain_prefixes", CONF_STR, &URLDomainPrefixes),
- PARSE_STR("url_domain_suffixes", CONF_STR, &URLDomainSuffixes),
#ifdef DIRED_SUPPORT
- PARSE_ADD("uploader", CONF_ADD_ITEM, uploaders),
+ PARSE_ADD("uploader", uploaders),
#endif
+ PARSE_STR("url_domain_prefixes", URLDomainPrefixes),
+ PARSE_STR("url_domain_suffixes", URLDomainSuffixes),
#ifdef VMS
- PARSE_SET("use_fixed_records", CONF_BOOL, &UseFixedRecords),
+ PARSE_SET("use_fixed_records", UseFixedRecords),
#endif
-#if defined(NCURSES_MOUSE_VERSION) || defined(USE_SLANG_MOUSE)
- PARSE_SET("use_mouse", CONF_BOOL, &LYUseMouse),
+#if defined(USE_MOUSE)
+ PARSE_SET("use_mouse", LYUseMouse),
#endif
- PARSE_SET("use_select_popups", CONF_BOOL, &LYSelectPopups),
- PARSE_SET("verbose_images", CONF_BOOL, &verbose_img),
- PARSE_SET("vi_keys_always_on", CONF_BOOL, &vi_keys),
- PARSE_FUN("viewer", CONF_FUN, viewer_fun),
- PARSE_ENV("wais_proxy", CONF_ENV, 0 ),
- PARSE_STR("xloadimage_command", CONF_STR, &XLoadImageCommand),
-
- {0, 0, 0}
+ PARSE_SET("use_select_popups", LYSelectPopups),
+ PARSE_SET("verbose_images", verbose_img),
+ PARSE_SET("vi_keys_always_on", vi_keys),
+ PARSE_FUN("viewer", viewer_fun),
+ PARSE_Env("wais_proxy", 0 ),
+ PARSE_STR("xloadimage_command", XLoadImageCommand),
+
+ PARSE_NIL
};
+PRIVATE char *lynxcfginfo_url = NULL; /* static */
+#if defined(HAVE_CONFIG_H) && !defined(NO_CONFIG_INFO)
+PRIVATE char *configinfo_url = NULL; /* static */
+#endif
+
/*
* Free memory allocated in 'read_cfg()'
*/
@@ -1189,11 +1508,8 @@ PUBLIC void free_lynx_cfg NOARGS
Config_Type *tbl;
for (tbl = Config_Table; tbl->name != 0; tbl++) {
-#ifdef PARSE_DEBUG
- Config_Type *q = tbl;
-#else
- ConfigUnion *q = (ConfigUnion *)(&(tbl->value));
-#endif
+ ParseUnionPtr q = ParseUnionOf(tbl);
+
switch (tbl->type) {
case CONF_ENV:
if (q->str_value != 0) {
@@ -1208,7 +1524,7 @@ PUBLIC void free_lynx_cfg NOARGS
unsetenv(name);
# else
if (putenv(name))
- break;
+ break;
# endif
#endif
}
@@ -1223,15 +1539,21 @@ PUBLIC void free_lynx_cfg NOARGS
break;
}
}
- free_item_list();
- free_printer_item_list();
+ free_all_item_lists();
+#ifdef DIRED_SUPPORT
+ reset_dired_menu(); /* frees and resets dired menu items - kw */
+#endif
+ FREE(lynxcfginfo_url);
+#if defined(HAVE_CONFIG_H) && !defined(NO_CONFIG_INFO)
+ FREE(configinfo_url);
+#endif
}
PRIVATE Config_Type *lookup_config ARGS1(
char *, name)
{
Config_Type *tbl = Config_Table;
- char ch = TOUPPER(*name);
+ char ch = (char) TOUPPER(*name);
while (tbl->name != 0) {
char ch1 = tbl->name[0];
@@ -1245,7 +1567,61 @@ PRIVATE Config_Type *lookup_config ARGS1(
return tbl;
}
-#define NOPTS_ ( (sizeof Config_Table)/(sizeof Config_Table[0]) - 1 )
+/*
+ * If the given value is an absolute path (by syntax), or we can read it, use
+ * the value as given. Otherwise, assume it must be in the same place we read
+ * the parent configuration file from.
+ *
+ * Note: only read files from the current directory if there's no parent
+ * filename, otherwise it leads to user surprise.
+ */
+PRIVATE char *actual_filename ARGS3(
+ char *, cfg_filename,
+ char *, parent_filename,
+ char *, dft_filename)
+{
+ static char *my_filename;
+
+ if (my_filename != 0) {
+ FREE(my_filename);
+ }
+ if (!LYisAbsPath(cfg_filename)
+ && !(parent_filename == 0 && LYCanReadFile(cfg_filename))) {
+ if (!strncmp(cfg_filename, "~/", 2)) {
+ HTSprintf0(&my_filename, "%s%s", Home_Dir(), cfg_filename+1);
+ cfg_filename = my_filename;
+ } else {
+ if (parent_filename != 0) {
+ StrAllocCopy(my_filename, parent_filename);
+ *LYPathLeaf (my_filename) = '\0';
+ StrAllocCat(my_filename, cfg_filename);
+ }
+ if (my_filename != 0 && LYCanReadFile(my_filename)) {
+ cfg_filename = my_filename;
+ } else {
+ StrAllocCopy(my_filename, dft_filename);
+ *LYPathLeaf (my_filename) = '\0';
+ StrAllocCat(my_filename, cfg_filename);
+ if (LYCanReadFile(my_filename)) {
+ cfg_filename = my_filename;
+ }
+ }
+ }
+ }
+ return cfg_filename;
+}
+
+PUBLIC FILE *LYOpenCFG ARGS3(
+ char *, cfg_filename,
+ char *, parent_filename,
+ char *, dft_filename)
+{
+ cfg_filename = actual_filename(cfg_filename, parent_filename, dft_filename);
+ CTRACE((tfp, "opening config file %s\n", cfg_filename));
+ return fopen(cfg_filename, TXT_R);
+}
+
+#define NOPTS_ ( TABLESIZE(Config_Table) - 1 )
typedef BOOL (optidx_set_t) [ NOPTS_ ];
/* if element is FALSE, then it's allowed in the current file*/
@@ -1272,10 +1648,9 @@ PRIVATE void do_read_cfg ARGS5(
optidx_set_t*, allowed)
{
FILE *fp;
- char mypath[LY_MAXPATH];
char *buffer = 0;
- CTRACE(tfp, "Loading cfg file '%s'.\n", cfg_filename);
+ CTRACE((tfp, "Loading cfg file '%s'.\n", cfg_filename));
/*
* Don't get hung up by an include file loop. Arbitrary max depth
@@ -1287,22 +1662,17 @@ PRIVATE void do_read_cfg ARGS5(
nesting_level - 1);
fprintf(stderr,gettext("Last attempted include was '%s',\n"), cfg_filename);
fprintf(stderr,gettext("included from '%s'.\n"), parent_filename);
- exit(-1);
+ exit(EXIT_FAILURE);
}
/*
* Locate and open the file.
*/
if (!cfg_filename || strlen(cfg_filename) == 0) {
- CTRACE(tfp,"No filename following -cfg switch!\n");
+ CTRACE((tfp,"No filename following -cfg switch!\n"));
return;
}
- if (!strncmp(cfg_filename, "~/", 2)) {
- strcpy(mypath, Home_Dir());
- strcat(mypath, cfg_filename+1);
- cfg_filename = mypath;
- }
- if ((fp = fopen(cfg_filename,"r")) == 0) {
- CTRACE(tfp,"lynx.cfg file not found as %s\n",cfg_filename);
+ if ((fp = LYOpenCFG(cfg_filename, parent_filename, LYNX_CFG_FILE)) == 0) {
+ CTRACE((tfp, "lynx.cfg file not found as '%s'\n", cfg_filename));
return;
}
have_read_cfg = TRUE;
@@ -1310,22 +1680,25 @@ PRIVATE void do_read_cfg ARGS5(
/*
* Process each line in the file.
*/
+#ifdef SH_EX
+ if (show_cfg) {
+ time_t t;
+ time(&t);
+ printf("### %s %s, at %s", LYNX_NAME, LYNX_VERSION, ctime(&t));
+ }
+#endif
while (LYSafeGets(&buffer, fp) != 0) {
char *name, *value;
char *cp;
Config_Type *tbl;
-#ifdef PARSE_DEBUG
- Config_Type *q;
-#else
- ConfigUnion *q;
-#endif
+ ParseUnionPtr q;
/* Most lines in the config file are comment lines. Weed them out
* now. Also, leading whitespace is ok, so trim it.
*/
name = LYSkipBlanks(buffer);
- if (*name == '#')
+ if (ispunct(UCH(*name)))
continue;
LYTrimTrailing(name);
@@ -1352,7 +1725,7 @@ PRIVATE void do_read_cfg ARGS5(
cp = value;
if ((cp = strchr (cp, '#')) != 0) {
cp--;
- if (isspace ((unsigned char) *cp))
+ if (isspace(UCH(*cp)))
*cp = 0;
}
@@ -1361,6 +1734,10 @@ PRIVATE void do_read_cfg ARGS5(
/* lynx ignores unknown keywords */
continue;
}
+#ifdef SH_EX
+ if (show_cfg)
+ printf("%s:%s\n", name, value);
+#endif
if ( allowed && (*allowed)[ tbl-Config_Table ] ) {
if (fp0 == NULL)
@@ -1373,11 +1750,7 @@ PRIVATE void do_read_cfg ARGS5(
continue;
}
-#ifdef PARSE_DEBUG
- q = tbl;
-#else
- q = (ConfigUnion *)(&(tbl->value));
-#endif
+ q = ParseUnionOf(tbl);
switch ((fp0 != 0 && tbl->type != CONF_INCLUDE)
? CONF_UNSPECIFIED
: tbl->type) {
@@ -1391,13 +1764,26 @@ PRIVATE void do_read_cfg ARGS5(
(*(q->fun_value)) (value);
break;
+ case CONF_TIME:
+ if (q->int_value != 0) {
+ float ival;
+ if (1 == sscanf (value, "%f", &ival)) {
+#ifdef HAVE_NAPMS
+ ival *= 1000;
+#endif
+ *(q->int_value) = (int) ival;
+ }
+ }
+ break;
+
+ case CONF_ENUM:
+ if (tbl->table != 0)
+ LYgetEnum(tbl->table, value, q->int_value);
+ break;
+
case CONF_INT:
if (q->int_value != 0) {
int ival;
- /* Apparently, if an integer value is not present, then the
- * value is not changed. So, use the sscanf function to make
- * this determination.
- */
if (1 == sscanf (value, "%d", &ival))
*(q->int_value) = ival;
}
@@ -1421,7 +1807,7 @@ PRIVATE void do_read_cfg ARGS5(
Define_VMSLogical(name, value);
#else
if (q->str_value == 0)
- q->str_value = calloc(1, sizeof(char *));
+ q->str_value = typecalloc(char *);
HTSprintf0 (q->str_value, "%s=%s", name, value);
putenv (*(q->str_value));
#endif
@@ -1430,7 +1816,7 @@ PRIVATE void do_read_cfg ARGS5(
case CONF_INCLUDE: {
/* include another file */
- optidx_set_t cur_set,anded_set;
+ optidx_set_t cur_set, anded_set;
optidx_set_t* resultant_set = NULL;
char* p1, *p2, savechar;
BOOL any_optname_found = FALSE;
@@ -1449,8 +1835,8 @@ PRIVATE void do_read_cfg ARGS5(
}
#ifndef NO_CONFIG_INFO
- if (fp0 != 0 && !LYRestricted) {
- LYLocalFileToURL(&url, value);
+ if (fp0 != 0 && !no_lynxcfg_xinfo) {
+ LYLocalFileToURL(&url, actual_filename(value, cfg_filename, LYNX_CFG_FILE));
StrAllocCopy(cp1, value);
if (strchr(value, '&') || strchr(value, '<')) {
LYEntify(&cp1, TRUE);
@@ -1504,13 +1890,13 @@ PRIVATE void do_read_cfg ARGS5(
}
#ifndef NO_CONFIG_INFO
- /*
+ /*
* Now list the opts that are allowed in included file. If all
* opts are allowed, then emit nothing, else emit an effective set
- * of allowed options in <ul>. Option names will be uppercased.
+ * of allowed options in <ul>. Option names will be uppercased.
* FIXME: uppercasing option names can be considered redundant.
*/
- if (fp0 != 0 && !LYRestricted && resultant_set) {
+ if (fp0 != 0 && !no_lynxcfg_xinfo && resultant_set) {
char *buf = NULL;
unsigned i;
@@ -1528,7 +1914,7 @@ PRIVATE void do_read_cfg ARGS5(
do_read_cfg (value, cfg_filename, nesting_level + 1, fp0,resultant_set);
#ifndef NO_CONFIG_INFO
- if (fp0 != 0 && !LYRestricted) {
+ if (fp0 != 0 && !no_lynxcfg_xinfo) {
fprintf(fp0, " #&lt;end of %s&gt;\n\n", cp1);
FREE(url);
FREE(cp1);
@@ -1539,7 +1925,7 @@ PRIVATE void do_read_cfg ARGS5(
case CONF_ADD_ITEM:
if (q->add_value != 0)
- add_item_to_list (value, q->add_value);
+ add_item_to_list (value, q->add_value, FALSE);
break;
#if defined(EXEC_LINKS) || defined(LYNXCGI_LINKS)
@@ -1563,7 +1949,7 @@ PRIVATE void do_read_cfg ARGS5(
}
}
- fclose (fp);
+ LYCloseInput (fp);
/*
* If any DOWNLOADER: commands have always_enabled set (:TRUE),
@@ -1572,7 +1958,7 @@ PRIVATE void do_read_cfg ARGS5(
* with those always_enabled options still available. - FM
*/
if (downloaders != 0) {
- lynx_html_item_type *cur_download;
+ lynx_list_item_type *cur_download;
cur_download = downloaders;
while (cur_download != 0) {
@@ -1591,53 +1977,9 @@ PRIVATE void do_read_cfg ARGS5(
*
* And for query/strict/loose invalid cookie checking. - BJP
*/
-
- if (LYCookieSAcceptDomains != NULL) {
- cookie_domain_flag_set(LYCookieSAcceptDomains, FLAG_ACCEPT_ALWAYS);
- FREE(LYCookieSAcceptDomains);
- }
-
- if (LYCookieSRejectDomains != NULL) {
- cookie_domain_flag_set(LYCookieSRejectDomains, FLAG_REJECT_ALWAYS);
- FREE(LYCookieSRejectDomains);
- }
-
- if (LYCookieSStrictCheckDomains != NULL) {
- cookie_domain_flag_set(LYCookieSStrictCheckDomains, FLAG_INVCHECK_STRICT);
- FREE(LYCookieSStrictCheckDomains);
- }
-
- if (LYCookieSLooseCheckDomains != NULL) {
- cookie_domain_flag_set(LYCookieSLooseCheckDomains, FLAG_INVCHECK_LOOSE);
- FREE(LYCookieSLooseCheckDomains);
- }
-
- if (LYCookieSQueryCheckDomains != NULL) {
- cookie_domain_flag_set(LYCookieSQueryCheckDomains, FLAG_INVCHECK_QUERY);
- FREE(LYCookieSQueryCheckDomains);
- }
-
- if (LYCookieAcceptDomains != NULL) {
- cookie_domain_flag_set(LYCookieAcceptDomains, FLAG_ACCEPT_ALWAYS);
- }
-
- if (LYCookieRejectDomains != NULL) {
- cookie_domain_flag_set(LYCookieRejectDomains, FLAG_REJECT_ALWAYS);
- }
-
- if (LYCookieStrictCheckDomains != NULL) {
- cookie_domain_flag_set(LYCookieStrictCheckDomains, FLAG_INVCHECK_STRICT);
- }
-
- if (LYCookieLooseCheckDomains != NULL) {
- cookie_domain_flag_set(LYCookieLooseCheckDomains, FLAG_INVCHECK_LOOSE);
- }
-
- if (LYCookieQueryCheckDomains != NULL) {
- cookie_domain_flag_set(LYCookieQueryCheckDomains, FLAG_INVCHECK_QUERY);
- }
-
+ LYConfigCookies();
}
+
/* this is a public interface to do_read_cfg */
PUBLIC void read_cfg ARGS4(
char *, cfg_filename,
@@ -1645,21 +1987,19 @@ PUBLIC void read_cfg ARGS4(
int, nesting_level,
FILE *, fp0)
{
- do_read_cfg(cfg_filename,parent_filename,nesting_level,fp0,
- NULL);
+ do_read_cfg(cfg_filename, parent_filename, nesting_level, fp0, NULL);
}
/*
* Show rendered lynx.cfg data without comments, LYNXCFG:/ internal page.
- * Called from getfile() cyrcle:
+ * Called from getfile() cycle:
* we create and load the page just in place and return to mainloop().
*/
PUBLIC int lynx_cfg_infopage ARGS1(
document *, newdoc)
{
- static char tempfile[LY_MAXPATH];
- static char *local_url; /* static! */
+ static char tempfile[LY_MAXPATH] = "\0";
DocAddress WWWDoc; /* need on exit */
char *temp = 0;
char *cp1 = NULL;
@@ -1672,9 +2012,9 @@ PUBLIC int lynx_cfg_infopage ARGS1(
* " <a href=\"LYNXCFG://reload\">RELOAD THE CHANGES</a>\n"
*--------------------------------------------------*/
- if ((strstr(newdoc->address, "LYNXCFG://reload")) && !LYRestricted) {
+ if (!no_lynxcfg_xinfo && (strstr(newdoc->address, "LYNXCFG://reload"))) {
/*
- * Some staff to reload read_cfg(),
+ * Some stuff to reload read_cfg(),
* but also load options menu items and command-line options
* to make things consistent. Implemented in LYMain.c
*/
@@ -1684,45 +2024,86 @@ PUBLIC int lynx_cfg_infopage ARGS1(
* now pop-up and return to updated LYNXCFG:/ page,
* remind postoptions() but much simpler:
*/
-
- /* the page was pushed, so pop-up. */
- LYpop(newdoc);
- WWWDoc.address = newdoc->address;
- WWWDoc.post_data = newdoc->post_data;
- WWWDoc.post_content_type = newdoc->post_content_type;
- WWWDoc.bookmark = newdoc->bookmark;
- WWWDoc.isHEAD = newdoc->isHEAD;
- WWWDoc.safe = newdoc->safe;
- LYforce_no_cache = FALSE; /* ! */
- LYoverride_no_cache = TRUE; /* ! */
-
/*
- * Working out of getfile() cycle we reset *no_cache manually here so
- * HTLoadAbsolute() will return "Document already in memory": it was
- * forced reloading obsolete file again without this (overhead).
- *
- * Probably *no_cache was set in a wrong position because of
- * the internal page...
+ * But check whether the top history document is really
+ * the expected LYNXCFG: page. - kw
*/
- if (!HTLoadAbsolute(&WWWDoc))
- return(NOT_FOUND);
+ if (HTMainText && nhist > 0 &&
+ !strcmp(HTLoadedDocumentTitle(), LYNXCFG_TITLE) &&
+ !strcmp(HTLoadedDocumentURL(), history[nhist-1].address) &&
+ LYIsUIPage(history[nhist-1].address, UIP_LYNXCFG) &&
+ (!lynxcfginfo_url ||
+ strcmp(HTLoadedDocumentURL(), lynxcfginfo_url))) {
+ /* the page was pushed, so pop-up. */
+ LYpop(newdoc);
+ WWWDoc.address = newdoc->address;
+ WWWDoc.post_data = newdoc->post_data;
+ WWWDoc.post_content_type = newdoc->post_content_type;
+ WWWDoc.bookmark = newdoc->bookmark;
+ WWWDoc.isHEAD = newdoc->isHEAD;
+ WWWDoc.safe = newdoc->safe;
+ LYforce_no_cache = FALSE; /* ! */
+ LYoverride_no_cache = TRUE; /* ! */
+
+ /*
+ * Working out of getfile() cycle we reset *no_cache manually here so
+ * HTLoadAbsolute() will return "Document already in memory": it was
+ * forced reloading obsolete file again without this (overhead).
+ *
+ * Probably *no_cache was set in a wrong position because of
+ * the internal page...
+ */
+ if (!HTLoadAbsolute(&WWWDoc))
+ return(NOT_FOUND);
- HTuncache_current_document(); /* will never use again */
+ HTuncache_current_document(); /* will never use again */
+ LYUnRegisterUIPage(UIP_LYNXCFG);
+ }
/* now set up the flag and fall down to create a new LYNXCFG:/ page */
- local_url = 0; /* see below */
+ FREE(lynxcfginfo_url); /* see below */
}
#endif /* !NO_CONFIG_INFO */
+ /*
+ * We regenerate the file if reloading has been requested (with
+ * LYK_NOCACHE key). If we did not regenerate, there would be no
+ * way to recover in a session from a situation where the file is
+ * corrupted (for example truncated because the file system was full
+ * when it was first created - lynx doesn't check for write errors
+ * below), short of manual complete removal or perhaps forcing
+ * regeneration with LYNXCFG://reload. Similarly, there would be no
+ * simple way to get a different page if user_mode has changed to
+ * Advanced after the file was first generated in a non-Advanced mode
+ * (the difference being in whether the page includes the link to
+ * LYNXCFG://reload or not).
+ * We also try to regenerate the file if lynxcfginfo_url is set,
+ * indicating that tempfile is valid, but the file has disappeared anyway.
+ * This can happen to a long-lived lynx process if for example some system
+ * script periodically cleans up old files in the temp file space. - kw
+ */
- if (local_url == 0) {
+ if (LYforce_no_cache && reloading) {
+ FREE(lynxcfginfo_url); /* flag to code below to regenerate - kw */
+ } else if (lynxcfginfo_url != NULL) {
+ if (!LYCanReadFile(tempfile)) { /* check existence */
+ FREE(lynxcfginfo_url); /* flag to code below to try again - kw */
+ }
+ }
+ if (lynxcfginfo_url == 0) {
- LYRemoveTemp(tempfile);
- if ((fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w")) == NULL) {
+ if (LYReuseTempfiles) {
+ fp0 = LYOpenTempRewrite(tempfile, HTML_SUFFIX, "w");
+ } else {
+ if (tempfile[0])
+ LYRemoveTemp(tempfile);
+ fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w");
+ }
+ if (fp0 == NULL) {
HTAlert(CANNOT_OPEN_TEMP);
return(NOT_FOUND);
}
- LYLocalFileToURL(&local_url, tempfile);
+ LYLocalFileToURL(&lynxcfginfo_url, tempfile);
LYforce_no_cache = TRUE; /* don't cache this doc */
@@ -1731,7 +2112,7 @@ PUBLIC int lynx_cfg_infopage ARGS1(
#ifndef NO_CONFIG_INFO
- if (!LYRestricted) {
+ if (!no_lynxcfg_xinfo) {
#if defined(HAVE_CONFIG_H) || defined(VMS)
if (strcmp(lynx_cfg_file, LYNX_CFG_FILE)) {
fprintf(fp0, "<em>%s\n%s",
@@ -1755,7 +2136,15 @@ PUBLIC int lynx_cfg_infopage ARGS1(
gettext("for more comments."));
}
- /** a new experimental link ... **/
+#if defined(HAVE_CONFIG_H) && !defined(NO_CONFIG_INFO)
+ if (!no_compileopts_info) {
+ fprintf(fp0, "%s <a href=\"LYNXCOMPILEOPTS:\">%s</a>\n\n",
+ SEE_ALSO,
+ COMPILE_OPT_SEGMENT);
+ }
+#endif
+
+ /** a new experimental link ... **/
if (user_mode == ADVANCED_MODE)
fprintf(fp0, " <a href=\"LYNXCFG://reload\">%s</a>\n",
gettext("RELOAD THE CHANGES"));
@@ -1786,10 +2175,11 @@ PUBLIC int lynx_cfg_infopage ARGS1(
fprintf(fp0, "</pre>\n");
EndInternalPage(fp0);
LYCloseTempFP(fp0);
+ LYRegisterUIPage(lynxcfginfo_url, UIP_LYNXCFG);
}
- /* return to getfile() cyrcle */
- StrAllocCopy(newdoc->address, local_url);
+ /* return to getfile() cycle */
+ StrAllocCopy(newdoc->address, lynxcfginfo_url);
WWWDoc.address = newdoc->address;
WWWDoc.post_data = newdoc->post_data;
WWWDoc.post_content_type = newdoc->post_content_type;
@@ -1799,6 +2189,9 @@ PUBLIC int lynx_cfg_infopage ARGS1(
if (!HTLoadAbsolute(&WWWDoc))
return(NOT_FOUND);
+#ifdef DIRED_SUPPORT
+ lynx_edit_mode = FALSE;
+#endif /* DIRED_SUPPORT */
return(NORMAL);
}
@@ -1806,36 +2199,57 @@ PUBLIC int lynx_cfg_infopage ARGS1(
#if defined(HAVE_CONFIG_H) && !defined(NO_CONFIG_INFO)
/*
* Compile-time definitions info, LYNXCOMPILEOPTS:/ internal page,
- * from getfile() cyrcle.
+ * from getfile() cycle.
*/
PUBLIC int lynx_compile_opts ARGS1(
document *, newdoc)
{
- char tempfile[LY_MAXPATH];
+ static char tempfile[LY_MAXPATH] = "\0";
#define PutDefs(table, N) fprintf(fp0, "%-35s %s\n", table[N].name, table[N].value)
#include <cfg_defs.h>
unsigned n;
- static char *info_url; /* static! */
DocAddress WWWDoc; /* need on exit */
FILE *fp0;
- /* create the page only once - compile-time data will not change... */
+ /* In general, create the page only once - compile-time data will not
+ * change... But we will regenerate the file anyway, in two situations:
+ * (a) configinfo_url has been FREEd - this can happen if free_lynx_cfg()
+ * was called as part of a LYNXCFG://reload action.
+ * (b) reloading has been requested (with LYK_NOCACHE key). If we did
+ * not regenerate, there would be no way to recover in a session from
+ * a situation where the file is corrupted (for example truncated because
+ * the file system was full when it was first created - lynx doesn't
+ * check for write errors below), short of manual complete removal or
+ * forcing regeneration with LYNXCFG://reload.
+ * (c) configinfo_url is set, indicating that tempfile is valid, but
+ * the file has disappeared anyway. This can happen to a long-lived lynx
+ * process if for example some system script periodically cleans up old
+ * files in the temp file space. - kw
+ */
- if (info_url == 0) {
- if ((fp0 = LYOpenTemp (tempfile, HTML_SUFFIX, "w")) == 0) {
+ if (LYforce_no_cache && reloading) {
+ FREE(configinfo_url); /* flag to code below to regenerate - kw */
+ } else if (configinfo_url != NULL) {
+ if (!LYCanReadFile(tempfile)) { /* check existence */
+ FREE(configinfo_url); /* flag to code below to try again - kw */
+ }
+ }
+ if (configinfo_url == NULL) {
+ if (LYReuseTempfiles) {
+ fp0 = LYOpenTempRewrite(tempfile, HTML_SUFFIX, "w");
+ } else {
+ LYRemoveTemp(tempfile);
+ fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w");
+ }
+ if (fp0 == NULL) {
HTAlert(CANNOT_OPEN_TEMP);
return(NOT_FOUND);
}
- LYLocalFileToURL(&info_url, tempfile);
+ LYLocalFileToURL(&configinfo_url, tempfile);
BeginInternalPage (fp0, CONFIG_DEF_TITLE, NULL);
fprintf(fp0, "<pre>\n");
- fprintf(fp0, "%s %s<a href=\"LYNXCFG:\"> lynx.cfg</a> %s\n\n",
- SEE_ALSO,
- YOUR_SEGMENT,
- RUNTIME_OPT_SEGMENT);
-
fprintf(fp0, "\n%s<br>\n<em>config.cache</em>\n", AUTOCONF_CONFIG_CACHE);
for (n = 0; n < TABLESIZE(config_cache); n++) {
PutDefs(config_cache, n);
@@ -1847,10 +2261,11 @@ PUBLIC int lynx_compile_opts ARGS1(
fprintf(fp0, "</pre>\n");
EndInternalPage(fp0);
LYCloseTempFP(fp0);
+ LYRegisterUIPage(configinfo_url, UIP_CONFIG_DEF);
}
- /* exit to getfile() cyrcle */
- StrAllocCopy(newdoc->address, info_url);
+ /* exit to getfile() cycle */
+ StrAllocCopy(newdoc->address, configinfo_url);
WWWDoc.address = newdoc->address;
WWWDoc.post_data = newdoc->post_data;
WWWDoc.post_content_type = newdoc->post_content_type;
@@ -1860,6 +2275,9 @@ PUBLIC int lynx_compile_opts ARGS1(
if (!HTLoadAbsolute(&WWWDoc))
return(NOT_FOUND);
+#ifdef DIRED_SUPPORT
+ lynx_edit_mode = FALSE;
+#endif /* DIRED_SUPPORT */
return(NORMAL);
}
#endif /* !NO_CONFIG_INFO */
diff --git a/gnu/usr.bin/lynx/src/LYReadCFG.h b/gnu/usr.bin/lynx/src/LYReadCFG.h
index 6f674f3d551..b6349cc053f 100644
--- a/gnu/usr.bin/lynx/src/LYReadCFG.h
+++ b/gnu/usr.bin/lynx/src/LYReadCFG.h
@@ -39,16 +39,25 @@
extern int default_fg;
extern int default_bg;
+extern BOOL default_color_reset;
+
+#if HAVE_USE_DEFAULT_COLORS && USE_DEFAULT_COLORS
+extern int lynx_default_colors NOPARAMS;
+#endif
extern int check_color PARAMS((char * color, int the_default));
+extern CONST char * lookup_color PARAMS((int code));
#endif
extern void read_cfg PARAMS((char *cfg_filename, char *parent_filename, int nesting_level, FILE *fp0));
extern void free_lynx_cfg NOPARAMS;
extern BOOLEAN have_read_cfg;
+extern FILE *LYOpenCFG PARAMS((char *cfg_filename, char *parent_filename, char *dft_filename));
extern int lynx_cfg_infopage PARAMS((document *newdoc));
extern int lynx_compile_opts PARAMS((document *newdoc));
-extern void reload_read_cfg NOPARAMS; /* not implemented yet, in LYMain.c */
+extern int match_item_by_name PARAMS((lynx_list_item_type * ptr, char * name, BOOLEAN only_overriders));
+extern lynx_list_item_type *find_item_by_number PARAMS((lynx_list_item_type * list_ptr, char * number));
+extern void reload_read_cfg NOPARAMS; /* implemented in LYMain.c */
#endif /* LYREADCFG_H */
diff --git a/gnu/usr.bin/lynx/src/LYSearch.c b/gnu/usr.bin/lynx/src/LYSearch.c
index a9cace09821..03961129c8b 100644
--- a/gnu/usr.bin/lynx/src/LYSearch.c
+++ b/gnu/usr.bin/lynx/src/LYSearch.c
@@ -8,6 +8,95 @@
#include <LYLeaks.h>
+PRIVATE BOOL link_has_target ARGS2(
+ linkstruct *, a,
+ char *, target)
+{
+ OptionType *option;
+ char *stars = NULL, *cp;
+
+ /*
+ * Search the hightext string, and hightext2 if present,
+ * taking the case_sensitive setting into account. - FM
+ */
+ if (LYno_attr_strstr(a->hightext, target)
+ || LYno_attr_strstr(a->hightext2, target)) {
+ return TRUE;
+ }
+
+ /*
+ * Search the relevant form fields, taking the
+ * case_sensitive setting into account. - FM
+ */
+ if ((a->form != NULL && a->form->value != NULL) &&
+ a->form->type != F_HIDDEN_TYPE) {
+ if (a->form->type == F_PASSWORD_TYPE) {
+ /*
+ * Check the actual, hidden password, and then
+ * the displayed string. - FM
+ */
+ if (LYno_attr_strstr(a->form->value, target)) {
+ return TRUE;
+ }
+ StrAllocCopy(stars, a->form->value);
+ for (cp = stars; *cp != '\0'; cp++)
+ *cp = '*';
+ if (LYno_attr_strstr(stars, target)) {
+ FREE(stars);
+ return TRUE;
+ }
+ FREE(stars);
+ } else if (a->form->type == F_OPTION_LIST_TYPE) {
+ /*
+ * Search the option strings that are displayed
+ * when the popup is invoked. - FM
+ */
+ option = a->form->select_list;
+ while (option != NULL) {
+ if (LYno_attr_strstr(option->name, target)) {
+ return TRUE;
+ }
+ option = option->next;
+ }
+ } else if (a->form->type == F_RADIO_TYPE) {
+ /*
+ * Search for checked or unchecked parens. - FM
+ */
+ if (a->form->num_value) {
+ cp = checked_radio;
+ } else {
+ cp = unchecked_radio;
+ }
+ if (LYno_attr_strstr(cp, target)) {
+ return TRUE;
+ }
+ } else if (a->form->type == F_CHECKBOX_TYPE) {
+ /*
+ * Search for checked or unchecked square brackets. - FM
+ */
+ if (a->form->num_value) {
+ cp = checked_box;
+ } else {
+ cp = unchecked_box;
+ }
+ if (LYno_attr_strstr(cp, target)) {
+ return TRUE;
+ }
+ } else {
+ /*
+ * Check the values intended for display.
+ * May have been found already via the
+ * hightext search, but make sure here
+ * that the entire value is searched. - FM
+ */
+ if (LYno_attr_strstr(a->form->value, target)) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
/*
* Search for the target string inside of the links
* that are currently displayed on the screen beginning
@@ -16,158 +105,55 @@
* If not found do not reset cur and return FALSE.
*/
-PRIVATE int check_for_target_in_links ARGS2(
+PRIVATE int check_next_target_in_links ARGS2(
int *, cur,
- char *, new_target)
+ char *, target)
{
- int i = *cur + 1;
- OptionType *option;
- char *stars = NULL, *cp;
-
- if (nlinks == 0)
- return(FALSE);
+ int i;
- for (; i < nlinks; i++) {
- /*
- * Search the hightext string, and hightext2 if present,
- * taking the case_sensitive setting into account. - FM
- */
- if (((links[i].hightext != NULL && case_sensitive == TRUE) &&
- LYno_attr_char_strstr(links[i].hightext, new_target)) ||
- ((links[i].hightext != NULL && case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(links[i].hightext, new_target))) {
- break;
- }
- if (((links[i].hightext2 != NULL && case_sensitive == TRUE) &&
- LYno_attr_char_strstr(links[i].hightext2, new_target)) ||
- ((links[i].hightext2 != NULL && case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(links[i].hightext2, new_target))) {
- break;
+ if (nlinks != 0) {
+ for (i = *cur + 1; i < nlinks; ++i) {
+ if (link_has_target(&links[i], target)) {
+ *cur = i;
+ return TRUE;
+ }
}
+ }
+ return FALSE;
+}
- /*
- * Search the relevant form fields, taking the
- * case_sensitive setting into account. - FM
- */
- if ((links[i].form != NULL && links[i].form->value != NULL) &&
- links[i].form->type != F_HIDDEN_TYPE) {
- if (links[i].form->type == F_PASSWORD_TYPE) {
- /*
- * Check the actual, hidden password, and then
- * the displayed string. - FM
- */
- if (((case_sensitive == TRUE) &&
- LYno_attr_char_strstr(links[i].form->value,
- new_target)) ||
- ((case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(links[i].form->value,
- new_target))) {
- break;
- }
- StrAllocCopy(stars, links[i].form->value);
- for (cp = stars; *cp != '\0'; cp++)
- *cp = '*';
- if (((case_sensitive == TRUE) &&
- LYno_attr_char_strstr(stars, new_target)) ||
- ((case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(stars, new_target))) {
- FREE(stars);
- break;
- }
- FREE(stars);
- } else if (links[i].form->type == F_OPTION_LIST_TYPE) {
- /*
- * Search the option strings that are displayed
- * when the popup is invoked. - FM
- */
- option = links[i].form->select_list;
- while (option != NULL) {
- if (((option->name != NULL &&
- case_sensitive == TRUE) &&
- LYno_attr_char_strstr(option->name, new_target)) ||
- ((option->name != NULL &&
- case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(option->name,
- new_target))) {
- break;
- }
- option = option->next;
- }
- if (option != NULL) {
- break;
- }
- } else if (links[i].form->type == F_RADIO_TYPE) {
- /*
- * Search for checked or unchecked parens. - FM
- */
- if (links[i].form->num_value) {
- cp = checked_radio;
- } else {
- cp = unchecked_radio;
- }
- if (((case_sensitive == TRUE) &&
- LYno_attr_char_strstr(cp, new_target)) ||
- ((case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(cp, new_target))) {
- break;
- }
- } else if (links[i].form->type == F_CHECKBOX_TYPE) {
- /*
- * Search for checked or unchecked square brackets. - FM
- */
- if (links[i].form->num_value) {
- cp = checked_box;
- } else {
- cp = unchecked_box;
- }
- if (((case_sensitive == TRUE) &&
- LYno_attr_char_strstr(cp, new_target)) ||
- ((case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(cp, new_target))) {
- break;
- }
- } else {
- /*
- * Check the values intended for display.
- * May have been found already via the
- * hightext search, but make sure here
- * that the entire value is searched. - FM
- */
- if (((case_sensitive == TRUE) &&
- LYno_attr_char_strstr(links[i].form->value,
- new_target)) ||
- ((case_sensitive == FALSE) &&
- LYno_attr_char_case_strstr(links[i].form->value,
- new_target))) {
- break;
- }
+PRIVATE int check_prev_target_in_links ARGS2(
+ int *, cur,
+ char *, target)
+{
+ int i;
+
+ if (nlinks != 0) {
+ for (i = *cur - 1; i >= 0; --i) {
+ if (link_has_target(&links[i], target)) {
+ *cur = i;
+ return TRUE;
}
}
}
-
- if (i == nlinks)
- return(FALSE);
-
- *cur = i;
- return(TRUE);
+ return FALSE;
}
/*
* Textsearch checks the prev_target variable to see if it is empty.
- * If it is then it requests a new search string. It then searches
+ * If it is then it requests a new search string. It then searches
* the current file for the next instance of the search string and
* finds the line number that the string is on
- *
+ *
* This is the primary USER search engine and is case sensitive
* or case insensitive depending on the 'case_sensitive' global
* variable
- *
*/
-
-PUBLIC BOOL textsearch ARGS3(
+PUBLIC BOOL textsearch ARGS4(
document *, cur_doc,
char *, prev_target,
- BOOL, next)
+ int, target_size,
+ int, direction)
{
int offset;
int oldcur = cur_doc->link;
@@ -188,18 +174,18 @@ PUBLIC BOOL textsearch ARGS3(
}
QueryTotal = (search_queries ? HTList_count(search_queries) : 0);
- recall = ((QueryTotal >= 1) ? RECALL : NORECALL);
+ recall = ((QueryTotal >= 1) ? RECALL_URL : NORECALL);
QueryNum = QueryTotal;
- if (next)
- /*
- * LYK_NEXT was pressed, so copy the
- * buffer into prev_target. - FM
+ if (direction != 0)
+ /*
+ * LYK_NEXT or LYK_PREV was pressed, so copy the
+ * buffer into prev_target.
*/
- strcpy(prev_target, prev_target_buffer);
+ LYstrncpy(prev_target, prev_target_buffer, target_size);
if (strlen(prev_target) == 0 ) {
- /*
+ /*
* This is a new WHEREIS search ('/'), or
* LYK_NEXT was pressed but there was no
* previous search, so we need to get a
@@ -207,13 +193,12 @@ PUBLIC BOOL textsearch ARGS3(
*/
_statusline(ENTER_WHEREIS_QUERY);
- if ((ch = LYgetstr(prev_target, VISIBLE,
- sizeof(prev_target_buffer), recall)) < 0) {
+ if ((ch = LYgetstr(prev_target, VISIBLE, target_size, recall)) < 0) {
/*
* User cancelled the search via ^G.
* Restore prev_target and return. - FM
*/
- strcpy(prev_target, prev_target_buffer);
+ LYstrncpy(prev_target, prev_target_buffer, target_size);
HTInfoMsg(CANCELLED);
return(FALSE);
}
@@ -221,14 +206,14 @@ PUBLIC BOOL textsearch ARGS3(
check_recall:
if (strlen(prev_target) == 0 &&
- !(recall && (ch == UPARROW || ch == DNARROW))) {
- /*
+ !(recall && (ch == UPARROW || ch == DNARROW))) {
+ /*
* No entry. Simply return, retaining the current buffer.
* Because prev_target is now reset, highlighting of the
* previous search string will no longer occur, but it can
- * be used again via LYK_NEXT. - FM
+ * be used again via LYK_NEXT or LYK_PREV.
*/
- HTInfoMsg(CANCELLED);
+ HTInfoMsg(CANCELLED);
return(FALSE);
}
@@ -239,11 +224,11 @@ check_recall:
*/
FirstRecall = FALSE;
if (*prev_target_buffer) {
- for (QueryNum = (QueryTotal - 1); QueryNum > 0; QueryNum--) {
+ for (QueryNum = (QueryTotal - 1); QueryNum > 0; QueryNum--) {
if ((cp = (char *)HTList_objectAt(search_queries,
- QueryNum)) != NULL &&
- !strcmp(prev_target_buffer, cp)) {
- break;
+ QueryNum)) != NULL &&
+ !strcmp(prev_target_buffer, cp)) {
+ break;
}
}
} else {
@@ -261,10 +246,10 @@ check_recall:
*/
QueryNum = 0;
if ((cp = (char *)HTList_objectAt(search_queries,
- QueryNum)) != NULL) {
- strcpy(prev_target, cp);
+ QueryNum)) != NULL) {
+ LYstrncpy(prev_target, cp, target_size);
if (*prev_target_buffer &&
- !strcmp(prev_target_buffer, prev_target)) {
+ !strcmp(prev_target_buffer, prev_target)) {
_statusline(EDIT_CURRENT_QUERY);
} else if ((*prev_target_buffer && QueryTotal == 2) ||
(!(*prev_target_buffer) && QueryTotal == 1)) {
@@ -272,13 +257,12 @@ check_recall:
} else {
_statusline(EDIT_A_PREV_QUERY);
}
- if ((ch = LYgetstr(prev_target, VISIBLE,
- sizeof(prev_target_buffer), recall)) < 0) {
- /*
- * User cancelled the search via ^G.
+ if ((ch = LYgetstr(prev_target, VISIBLE, target_size, recall)) < 0) {
+ /*
+ * User canceled the search via ^G.
* Restore prev_target and return. - FM
*/
- strcpy(prev_target, prev_target_buffer);
+ LYstrncpy(prev_target, prev_target_buffer, target_size);
HTInfoMsg(CANCELLED);
return(FALSE);
}
@@ -291,11 +275,11 @@ check_recall:
*/
FirstRecall = FALSE;
if (*prev_target_buffer) {
- for (QueryNum = 0; QueryNum < (QueryTotal - 1); QueryNum++) {
+ for (QueryNum = 0; QueryNum < (QueryTotal - 1); QueryNum++) {
if ((cp = (char *)HTList_objectAt(search_queries,
- QueryNum)) != NULL &&
- !strcmp(prev_target_buffer, cp)) {
- break;
+ QueryNum)) != NULL &&
+ !strcmp(prev_target_buffer, cp)) {
+ break;
}
}
} else {
@@ -313,10 +297,10 @@ check_recall:
*/
QueryNum = QueryTotal - 1;
if ((cp = (char *)HTList_objectAt(search_queries,
- QueryNum)) != NULL) {
- strcpy(prev_target, cp);
+ QueryNum)) != NULL) {
+ LYstrncpy(prev_target, cp, target_size);
if (*prev_target_buffer &&
- !strcmp(prev_target_buffer, prev_target)) {
+ !strcmp(prev_target_buffer, prev_target)) {
_statusline(EDIT_CURRENT_QUERY);
} else if ((*prev_target_buffer && QueryTotal == 2) ||
(!(*prev_target_buffer) && QueryTotal == 1)) {
@@ -324,13 +308,12 @@ check_recall:
} else {
_statusline(EDIT_A_PREV_QUERY);
}
- if ((ch = LYgetstr(prev_target, VISIBLE,
- sizeof(prev_target_buffer), recall)) < 0) {
- /*
+ if ((ch = LYgetstr(prev_target, VISIBLE, target_size, recall)) < 0) {
+ /*
* User cancelled the search via ^G.
* Restore prev_target and return. - FM
*/
- strcpy(prev_target, prev_target_buffer);
+ LYstrncpy(prev_target, prev_target_buffer, target_size);
HTInfoMsg(CANCELLED);
return(FALSE);
}
@@ -340,39 +323,51 @@ check_recall:
/*
* Replace the search string buffer with the new target. - FM
*/
- strcpy(prev_target_buffer, prev_target);
+ LYstrncpy(prev_target_buffer, prev_target, sizeof(prev_target_buffer)-1);
HTAddSearchQuery(prev_target_buffer);
- /*
- * Search the links on the currently displayed page for
- * the string, starting after the current link. - FM
- */
- if (check_for_target_in_links(&cur_doc->link, prev_target)) {
+ if (direction < 0) {
+ offset = 0;
+ if (check_prev_target_in_links(&cur_doc->link, prev_target)) {
+ /*
+ * Found in link, changed cur, we're done.
+ */
+ highlight(OFF, oldcur, prev_target);
+ return(TRUE);
+ }
+ } else {
+
/*
- * Found in link, changed cur, we're done.
+ * Search the links on the currently displayed page for
+ * the string, starting after the current link. - FM
*/
- highlight(OFF, oldcur, prev_target);
- return(TRUE);
+ if (check_next_target_in_links(&cur_doc->link, prev_target)) {
+ /*
+ * Found in link, changed cur, we're done.
+ */
+ highlight(OFF, oldcur, prev_target);
+ return(TRUE);
+ }
+
+ /*
+ * We'll search the text starting from the
+ * link we are on, or the next page.
+ */
+ if (nlinks == 0)
+ offset = (display_lines - 1);
+ else
+ offset = links[cur_doc->link].ly - 1;
}
-
- /*
- * We'll search the text starting from the
- * link we are on, or the next page.
- */
- if (nlinks == 0)
- offset = (display_lines - 1);
- else
- offset = links[cur_doc->link].ly - 1;
/*
* Resume search, this time for all text.
* Set www_search_result if string found,
* and position the hit near top of screen.
*/
- www_user_search((cur_doc->line + offset), cur_doc, prev_target);
+ www_user_search((cur_doc->line + offset), cur_doc, prev_target, direction);
if (cur_doc->link != oldcur) {
highlight(OFF, oldcur, prev_target);
return(TRUE);
}
- return(www_search_result > 0);
+ return (BOOL) (www_search_result > 0);
}
diff --git a/gnu/usr.bin/lynx/src/LYSearch.h b/gnu/usr.bin/lynx/src/LYSearch.h
index a8a31973ffe..f917c615035 100644
--- a/gnu/usr.bin/lynx/src/LYSearch.h
+++ b/gnu/usr.bin/lynx/src/LYSearch.h
@@ -7,7 +7,7 @@
#endif /* LYSTRUCT_H */
extern BOOL textsearch PARAMS((document *cur_doc,
- char *prev_target, BOOL next));
+ char *prev_target, int target_size, int direction));
#define IN_FILE 1
#define IN_LINKS 2
diff --git a/gnu/usr.bin/lynx/src/LYShowInfo.c b/gnu/usr.bin/lynx/src/LYShowInfo.c
index 81369a1e149..9fe2b751601 100644
--- a/gnu/usr.bin/lynx/src/LYShowInfo.c
+++ b/gnu/usr.bin/lynx/src/LYShowInfo.c
@@ -11,6 +11,8 @@
#include <LYCharUtils.h>
#include <GridText.h>
#include <LYReadCFG.h>
+#include <LYCharSets.h>
+#include <LYStrings.h>
#include <LYLeaks.h>
@@ -23,33 +25,67 @@
#define ADVANCED_INFO 1 /* to get more info in advanced mode */
/*
- * Showinfo prints a page of info about the current file and the link
+ * LYNX_VERSION and LYNX_DATE are automatically generated by PRCS, the tool
+ * which we use to archive versions of Lynx. We use a convention for naming
+ * the successive versions:
+ * {release}{status}{patch}
+ * where
+ * {release} is the release that we are working on, e.g., 2.8.4
+ * {status} is one of "dev", "pre" or "rel", and
+ * {patch} is a number assigned by PRCS.
+ */
+PUBLIC BOOL LYVersionIsRelease NOARGS
+{
+ return (BOOL)(strstr(LYNX_VERSION, "rel") != 0);
+}
+
+PUBLIC char *LYVersionStatus NOARGS
+{
+ if (LYVersionIsRelease())
+ return REL_VERSION;
+ else if (strstr(LYNX_VERSION, "pre") != 0)
+ return PRE_VERSION;
+ return DEV_VERSION;
+}
+
+PUBLIC char *LYVersionDate NOARGS
+{
+ static char temp[LYNX_DATE_LEN+1];
+ LYstrncpy(temp, &LYNX_DATE[LYNX_DATE_OFF], LYNX_DATE_LEN);
+ return temp;
+}
+
+/*
+ * LYShowInfo prints a page of info about the current file and the link
* that the cursor is on.
*/
-PUBLIC int showinfo ARGS4(
+PUBLIC int LYShowInfo ARGS4(
document *, doc,
int, size_of_file,
document *, newdoc,
char *, owner_address)
{
- static char tempfile[LY_MAXPATH];
+ static char tempfile[LY_MAXPATH] = "\0";
int url_type;
FILE *fp0;
char *Address = NULL, *Title = NULL;
char *name;
CONST char *cp;
#ifdef ADVANCED_INFO
- BOOLEAN LYInfoAdvanced = (user_mode == ADVANCED_MODE);
+ BOOLEAN LYInfoAdvanced = (BOOL) (user_mode == ADVANCED_MODE);
#endif
-
#ifdef DIRED_SUPPORT
- char temp[LY_MAXPATH];
struct stat dir_info;
#endif /* DIRED_SUPPORT */
- LYRemoveTemp(tempfile);
- if ((fp0 = LYOpenTemp (tempfile, HTML_SUFFIX, "w")) == 0) {
+ if (LYReuseTempfiles) {
+ fp0 = LYOpenTempRewrite(tempfile, HTML_SUFFIX, "w");
+ } else {
+ LYRemoveTemp(tempfile);
+ fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w");
+ }
+ if (fp0 == NULL) {
HTAlert(CANNOT_OPEN_TEMP);
return(-1);
}
@@ -76,45 +112,32 @@ PUBLIC int showinfo ARGS4(
fprintf(fp0, "<title>%s</title>\n</head>\n<body>\n",
SHOWINFO_TITLE);
- fprintf(fp0, "<h1>%s %s (%.*s) (<a href=\"%s\">%s</a>)",
+ fprintf(fp0, "<h1>%s %s (%s) (<a href=\"%s\">%s</a>)",
LYNX_NAME, LYNX_VERSION,
- LYNX_DATE_LEN,
- (LYNX_RELEASE ? LYNX_RELEASE_DATE : &LYNX_DATE[LYNX_DATE_OFF]),
- (LYNX_RELEASE ? LYNX_WWW_HOME : LYNX_WWW_DIST),
- (LYNX_RELEASE ? REL_VERSION : DEV_VERSION) );
-
- if (!LYRestricted) {
-#if defined(HAVE_CONFIG_H) && !defined(NO_CONFIG_INFO)
- fprintf(fp0, " - <a href=\"LYNXCOMPILEOPTS:\">%s</a>\n",
- COMPILE_OPT_SEGMENT);
-#else
- fprintf(fp0, " - <a href=\"LYNXCFG:\">%s lynx.cfg</a>\n",
- YOUR_SEGMENT);
-#endif
- }
+ LYVersionDate(),
+ (LYVersionIsRelease() ? LYNX_WWW_HOME : LYNX_WWW_DIST),
+ LYVersionStatus());
+
fprintf(fp0, "</h1>\n"); /* don't forget to close <h1> */
#ifdef DIRED_SUPPORT
if (lynx_edit_mode && nlinks > 0) {
- char *s;
+ char *temp;
fprintf(fp0, "<pre>\n");
fprintf(fp0, "\n%s\n\n", gettext("Directory that you are currently viewing"));
- s = HTfullURL_toFile(doc->address);
- strcpy(temp, s);
- FREE(s);
-
+ temp = HTfullURL_toFile(doc->address);
fprintf(fp0, " <em>%4s</em> %s\n", gettext("Name:"), temp);
+ FREE(temp);
+
fprintf(fp0, " <em>%4s</em> %s\n", gettext("URL:"), doc->address);
- s = HTfullURL_toFile(links[doc->link].lname);
- strcpy(temp, s);
- FREE(s);
+ temp = HTfullURL_toFile(links[doc->link].lname);
if (lstat(temp, &dir_info) == -1) {
- CTRACE(tfp, "lstat(%s) failed, errno=%d\n", temp, errno);
+ CTRACE((tfp, "lstat(%s) failed, errno=%d\n", temp, errno));
HTAlert(CURRENT_LINK_STATUS_FAILED);
} else {
char modes[80];
@@ -142,14 +165,14 @@ PUBLIC int showinfo ARGS4(
if ((buf_size = readlink(temp, buf, sizeof(buf)-1)) != -1) {
buf[buf_size] = '\0';
} else {
- strcpy(buf, gettext("Unable to follow link"));
+ sprintf(buf, "%.1024s", gettext("Unable to follow link"));
}
fprintf(fp0, " <em>%s</em> %s\n", gettext("Points to file:"), buf);
}
#endif
name = HTAA_UidToName(dir_info.st_uid);
if (*name)
- fprintf(fp0, " <em>%s</em> %s\n", gettext("Name of owner"), name);
+ fprintf(fp0, " <em>%s</em> %s\n", gettext("Name of owner:"), name);
name = HTAA_GidToName (dir_info.st_gid);
if (*name)
fprintf(fp0, " <em>%s</em> %s\n", gettext("Group name:"), name);
@@ -161,13 +184,13 @@ PUBLIC int showinfo ARGS4(
* Include date and time information.
*/
cp = ctime(&dir_info.st_ctime);
- fprintf(fp0, " <em>%s</em> %s", cp, gettext("Creation date:"));
+ fprintf(fp0, " <em>%s</em> %s", gettext("Creation date:"), cp);
cp = ctime(&dir_info.st_mtime);
- fprintf(fp0, " <em>%s</em> %s", cp, gettext("Last modified:"));
+ fprintf(fp0, " <em>%s</em> %s", gettext("Last modified:"), cp);
cp = ctime(&dir_info.st_atime);
- fprintf(fp0, " <em>%s</em> %s\n", cp, gettext("Last accessed:"));
+ fprintf(fp0, " <em>%s</em> %s\n", gettext("Last accessed:"), cp);
fprintf(fp0, " %s\n", gettext("Access Permissions"));
fprintf(fp0, " <em>%s</em> ", gettext("Owner:"));
@@ -229,6 +252,7 @@ PUBLIC int showinfo ARGS4(
}
fprintf(fp0, "%s\n", (char *)&modes[2]); /* Skip leading ', ' */
}
+ FREE(temp);
fprintf(fp0,"</pre>\n");
} else {
#endif /* DIRED_SUPPORT */
@@ -236,11 +260,14 @@ PUBLIC int showinfo ARGS4(
fprintf(fp0, "<h2>%s</h2>\n<dl compact>",
gettext("File that you are currently viewing"));
- StrAllocCopy(Title, doc->title);
+ LYformTitle(&Title, doc->title);
LYEntify(&Title, TRUE);
fprintf(fp0, "<dt><em>%s</em> %s%s\n",
gettext("Linkname:"),
- Title, (doc->isHEAD ? " (HEAD)" : ""));
+ Title,
+ ((doc->isHEAD &&
+ !strstr(Title, " (HEAD)") &&
+ !strstr(Title, " - HEAD")) ? " (HEAD)" : ""));
StrAllocCopy(Address, doc->address);
LYEntify(&Address, TRUE);
@@ -322,7 +349,7 @@ PUBLIC int showinfo ARGS4(
HTisDocumentSource() ?
gettext("source") : gettext("normal")),
(doc->safe ? gettext(", safe") : ""),
- (doc->internal_link ? gettext(", internal link") : "")
+ (doc->internal_link ? gettext(", via internal link") : "")
);
#ifdef ADVANCED_INFO
if (LYInfoAdvanced) {
@@ -393,7 +420,7 @@ PUBLIC int showinfo ARGS4(
#endif /* DIRED_SUPPORT */
EndInternalPage(fp0);
- refresh();
+ LYrefresh();
LYCloseTemp(tempfile);
FREE(Address);
diff --git a/gnu/usr.bin/lynx/src/LYShowInfo.h b/gnu/usr.bin/lynx/src/LYShowInfo.h
index 65eb88e53eb..58f2c533c21 100644
--- a/gnu/usr.bin/lynx/src/LYShowInfo.h
+++ b/gnu/usr.bin/lynx/src/LYShowInfo.h
@@ -5,7 +5,10 @@
#include <LYStructs.h>
#endif /* LYSTRUCTS_H */
-extern int showinfo PARAMS((document *doc, int size_of_file, document *newdoc,
+extern BOOL LYVersionIsRelease NOPARAMS;
+extern char *LYVersionStatus NOPARAMS;
+extern char *LYVersionDate NOPARAMS;
+extern int LYShowInfo PARAMS((document *doc, int size_of_file, document *newdoc,
char *owner_address));
#endif /* LYSHOWINFO_H */
diff --git a/gnu/usr.bin/lynx/src/LYSignal.h b/gnu/usr.bin/lynx/src/LYSignal.h
index d8b1d106b7c..e0d5ec0a1c2 100644
--- a/gnu/usr.bin/lynx/src/LYSignal.h
+++ b/gnu/usr.bin/lynx/src/LYSignal.h
@@ -12,4 +12,12 @@ extern void VMSsignal PARAMS((int sig, void (*func)()));
#define signal(a,b) VMSsignal(a,b) /* use LYCurses.c routines for interrupts */
#endif /* VMS */
+#if HAVE_SIGACTION
+typedef void LYSigHandlerFunc_t PARAMS((int));
+/* implementation in LYUtils.c */
+extern void LYExtSignal PARAMS((int sig, LYSigHandlerFunc_t * handler));
+#else
+#define LYExtSignal(sig,h) signal(sig, h)
+#endif
+
#endif /* LYSIGNAL_H */
diff --git a/gnu/usr.bin/lynx/src/LYStrings.c b/gnu/usr.bin/lynx/src/LYStrings.c
index 02796c6c5b5..1729c9ef891 100644
--- a/gnu/usr.bin/lynx/src/LYStrings.c
+++ b/gnu/usr.bin/lynx/src/LYStrings.c
@@ -1,8 +1,9 @@
#include <HTUtils.h>
#include <HTCJK.h>
+#include <UCAux.h>
+#include <LYGlobalDefs.h>
#include <LYUtils.h>
#include <LYStrings.h>
-#include <LYGlobalDefs.h>
#include <GridText.h>
#include <LYKeymap.h>
#include <LYClean.h>
@@ -13,7 +14,11 @@
#include <HTAlert.h>
#include <HTString.h>
#include <LYCharUtils.h>
+#include <HTList.h>
#include <HTParse.h>
+#ifdef USE_MOUSE
+#include <LYMainLoop.h>
+#endif
#ifdef DJGPP_KEYHANDLER
#include <pc.h>
@@ -25,22 +30,28 @@
#include <AttrList.h>
#endif
+#ifdef USE_SCROLLBAR
+#include <LYMainLoop.h>
+#endif
+
+#include <LYShowInfo.h>
#include <LYLeaks.h>
-extern unsigned short *LYKbLayout;
extern BOOL HTPassHighCtrlRaw;
-extern HTCJKlang HTCJK;
-/*Allowing the user to press tab when entering URL to get the closest
- match in the closet*/
+#if defined(WIN_EX)
+#undef BUTTON_CTRL
+#define BUTTON_CTRL 0 /* Quick hack */
+#endif
+
+/*
+ * The edit_history lists allow the user to press tab when entering URL to get
+ * the closest match in the closet
+ */
#define LYClosetSize 100
-static char* LYCloset[LYClosetSize]; /* Closet with LYClosetSize shelves */
-static int LYClosetTop = 0; /*Points to the next empty shelf */
-PRIVATE char *LYFindInCloset PARAMS((
- char* base));
-PRIVATE int LYAddToCloset PARAMS((
- char* str));
+static HTList *URL_edit_history;
+static HTList *MAIL_edit_history;
/* 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
@@ -58,16 +69,17 @@ static int mouse_link = -1;
static int have_levent;
-#ifdef NCURSES_MOUSE_VERSION
+#if defined(USE_MOUSE) && defined(NCURSES)
static MEVENT levent;
#endif
/* Return the value of mouse_link */
PUBLIC int peek_mouse_levent NOARGS
{
-#ifdef NCURSES_MOUSE_VERSION
- if (have_levent) {
+#if defined(USE_MOUSE) && defined(NCURSES)
+ if (have_levent > 0) {
ungetmouse(&levent);
+ have_levent--;
return 1;
}
#endif
@@ -91,30 +103,85 @@ PUBLIC int peek_mouse_link NOARGS
return mouse_link;
}
+
PUBLIC int fancy_mouse ARGS3(
WINDOW *, win,
int, row,
int *, position)
{
int cmd = LYK_DO_NOTHING;
-#ifdef NCURSES_MOUSE_VERSION
-#ifndef getbegx
-#define getbegx(win) ((win)->_begx)
-#endif
-#ifndef getbegy
-#define getbegy(win) ((win)->_begy)
+#ifdef USE_MOUSE
+/*********************************************************************/
+
+#if defined(WIN_EX) && defined(PDCURSES)
+
+ request_mouse_pos();
+
+ if (BUTTON_STATUS(1)
+ && (MOUSE_X_POS >= getbegx(win)
+ && (MOUSE_X_POS < (getbegx(win) + getmaxx(win))))) {
+ int mypos = MOUSE_Y_POS - getbegy(win);
+ int delta = mypos - row;
+
+ if (mypos+1 == getmaxy(win)) {
+ /* At the decorative border: scroll forward */
+ if (BUTTON_STATUS(1) & BUTTON1_TRIPLE_CLICKED)
+ cmd = LYK_END;
+ else if (BUTTON_STATUS(1) & BUTTON1_DOUBLE_CLICKED)
+ cmd = LYK_NEXT_PAGE;
+ else
+ cmd = LYK_NEXT_LINK;
+ } else if (mypos >= getmaxy(win)) {
+ if (BUTTON_STATUS(1) & (BUTTON1_DOUBLE_CLICKED | BUTTON1_TRIPLE_CLICKED))
+ cmd = LYK_END;
+ else
+ cmd = LYK_NEXT_PAGE;
+ } else if (mypos == 0) {
+ /* At the decorative border: scroll back */
+ if (BUTTON_STATUS(1) & BUTTON1_TRIPLE_CLICKED)
+ cmd = LYK_HOME;
+ else if (BUTTON_STATUS(1) & BUTTON1_DOUBLE_CLICKED)
+ cmd = LYK_PREV_PAGE;
+ else
+ cmd = LYK_PREV_LINK;
+ } else if (mypos < 0) {
+ if (BUTTON_STATUS(1) & (BUTTON1_DOUBLE_CLICKED | BUTTON1_TRIPLE_CLICKED))
+ cmd = LYK_HOME;
+ else
+ cmd = LYK_PREV_PAGE;
+#ifdef KNOW_HOW_TO_TOGGLE
+ } else if (BUTTON_STATUS(1) & (BUTTON_CTRL)) {
+ cur_selection += delta;
+ cmd = LYX_TOGGLE;
#endif
+ } else if (BUTTON_STATUS(1) & (BUTTON_ALT | BUTTON_SHIFT | BUTTON_CTRL)) {
+ /* Probably some unrelated activity, such as selecting some text.
+ * Select, but do nothing else.
+ */
+ *position += delta;
+ cmd = -1;
+ } else {
+ /* No scrolling or overflow checks necessary. */
+ *position += delta;
+ cmd = LYK_ACTIVATE;
+ }
+ } else if (BUTTON_STATUS(1) & (BUTTON3_CLICKED | BUTTON3_DOUBLE_CLICKED | BUTTON3_TRIPLE_CLICKED)) {
+ cmd = LYK_QUIT;
+ }
+#else
+#if defined(NCURSES)
MEVENT event;
getmouse(&event);
if ((event.bstate & (BUTTON1_CLICKED
- | BUTTON1_DOUBLE_CLICKED
- | BUTTON1_TRIPLE_CLICKED))
- && (event.x >= getbegx(win)
- && (event.x < (getbegx(win) + getmaxx(win))))) {
+ | BUTTON1_DOUBLE_CLICKED
+ | BUTTON1_TRIPLE_CLICKED))) {
int mypos = event.y - getbegy(win);
int delta = mypos - row;
+ if ((event.x < getbegx(win) || event.x >= (getbegx(win) + getmaxx(win)))
+ && !(event.bstate & (BUTTON_ALT | BUTTON_SHIFT | BUTTON_CTRL)))
+ return LYK_QUIT; /* User clicked outside, wants to quit? */
if (mypos+1 == getmaxy(win)) {
/* At the decorative border: scroll forward */
if (event.bstate & BUTTON1_TRIPLE_CLICKED)
@@ -148,33 +215,116 @@ PUBLIC int fancy_mouse ARGS3(
cur_selection += delta;
cmd = LYX_TOGGLE;
#endif
+ } else if (event.x <= getbegx(win) + 1 ||
+ event.x >= getbegx(win) + getmaxx(win) - 2) {
+ /* Click on left or right border for positioning without
+ * immediate action: select, but do nothing else.
+ * Actually, allow an error of one position inwards. - kw
+ */
+ *position += delta;
+ cmd = -1;
} else if (event.bstate & (BUTTON_ALT | BUTTON_SHIFT | BUTTON_CTRL)) {
/* Probably some unrelated activity, such as selecting some text.
* Select, but do nothing else.
*/
+ /* Possibly this is never returned by ncurses, so this case
+ * may be useless depending on situation (kind of mouse support
+ * and library versions). - kw
+ */
*position += delta;
cmd = -1;
} else {
/* No scrolling or overflow checks necessary. */
*position += delta;
-#if 0
- /* Immediate action looks reasonable since we have no help
- * available for individual options. Moreover, one can position
- * active element with shift-click-1. (;-)
- */
- if (!(event.bstate & (BUTTON1_DOUBLE_CLICKED
- | BUTTON1_TRIPLE_CLICKED)))
- goto redraw;
-#endif
cmd = LYK_ACTIVATE;
}
} else if (event.bstate & (BUTTON3_CLICKED | BUTTON3_DOUBLE_CLICKED | BUTTON3_TRIPLE_CLICKED)) {
cmd = LYK_QUIT;
}
-#endif
+#endif /* NCURSES */
+#endif /* _WINDOWS */
+
+/************************************************************************/
+#endif /* USE_MOUSE */
return cmd;
}
+/*
+ * Manage the collection of edit-histories
+ */
+PRIVATE HTList *whichRecall ARGS1(
+ RecallType, recall)
+{
+ HTList **list;
+
+ switch (recall) {
+ case RECALL_CMD:
+ return LYcommandList();
+ case RECALL_MAIL:
+ list = &MAIL_edit_history;
+ break;
+ default:
+ list = &URL_edit_history;
+ break;
+ }
+ if (*list == 0)
+ *list = HTList_new();
+ return *list;
+}
+
+/*
+ * Remove the oldest item in the closet
+ */
+PRIVATE void LYRemoveFromCloset ARGS1(HTList *, list)
+{
+ char *data = HTList_removeFirstObject(list);
+
+ if (data != 0)
+ FREE(data);
+}
+
+PUBLIC void LYCloseCloset ARGS1(RecallType, recall)
+{
+ HTList *list = whichRecall(recall);
+
+ while (!HTList_isEmpty(list) ) {
+ LYRemoveFromCloset(list);
+ }
+ HTList_delete(list); /* should already be empty */
+}
+
+/*
+ * Strategy: We begin at the top and search downwards. We return the first
+ * match, i.e., the newest since we search from the top. This should be made
+ * more intelligent, but works for now.
+ */
+PRIVATE char * LYFindInCloset ARGS2(RecallType, recall, char*, base)
+{
+ HTList *list = whichRecall(recall);
+ char *data;
+ unsigned len = strlen(base);
+
+ while (!HTList_isEmpty(list)) {
+ data = HTList_nextObject(list);
+ if (!strncmp(base, data, len))
+ return(data);
+ }
+
+ return(0);
+}
+
+PRIVATE void LYAddToCloset ARGS2(RecallType, recall, char*, str)
+{
+ HTList *list = whichRecall(recall);
+ char *data = NULL;
+
+ StrAllocCopy(data, str);
+ HTList_addObject(list, data);
+ while (HTList_count(list) > LYClosetSize)
+ LYRemoveFromCloset(list);
+}
+
+
PRIVATE int XYdist ARGS5(
int, x1,
int, y1,
@@ -182,15 +332,32 @@ PRIVATE int XYdist ARGS5(
int, y2,
int, dx2)
{
- int xerr = x2 - x1, yerr = y2 - y1;
+ int xerr = 3 * (x2 - x1), yerr = 9 * (y2 - y1);
if (xerr < 0)
- xerr = x1 - x2 - dx2;
+ xerr = 3 * (x1 - x2 - dx2) + 1; /* pos after string not really in it */
if (xerr < 0)
xerr = 0;
if (yerr < 0)
yerr = -yerr;
- return xerr + yerr;
+ if (!yerr) /* same line is good */
+ return (xerr > 0) ? (xerr*2 - 1) : 0;
+ if (xerr < 9 && yerr) /* x-dist of 3 cell better than y-dist of 1 cell */
+ yerr += (9 - xerr);
+ return 2 * xerr + yerr; /* Subjective factor; ratio -> approx. 6 / 9 */
+/*
+old: (IZ 1999-07-30)
+ 3 2 2 2 1 1 1 XX XX XX XX XX 0 1 1 1 2 2 2 3 3
+ 4\ 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3/ 4 4
+ 5 4 4 4\ 3 3 3 3 3 3 3 3 3 3 3 3/ 4 4 4 5 5
+ 6 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 6 5
+now: (kw 1999-10-23)
+41 35 29|23 17 11 5 XX XX XX XX XX 1 7 13 19 25|31 37 43 49
+ 45 39 33\27 24 21 18 18 18 18 18 19 22 25 28/34 40 46 50
+ 48 42 36 33 30\27 27 27 27 27 28/31 34 37 43 49
+ 51 45 42 39 36 36 36 36 36 37 40 43 46 49
+ 51 48 45 45 45 45 45 46 49 52
+*/
}
/* Given X and Y coordinates of a mouse event, set mouse_link to the
@@ -200,10 +367,11 @@ PRIVATE int XYdist ARGS5(
** link.
**/
-PRIVATE int set_clicked_link ARGS3(
+PRIVATE int set_clicked_link ARGS4(
int, x,
int, y,
- int, code)
+ int, code,
+ int, clicks)
{
int left = 6;
int right = LYcols-6;
@@ -211,27 +379,82 @@ PRIVATE int set_clicked_link ARGS3(
int i;
int c = -1;
- if (y == (LYlines-1)) {
+ if (y == (LYlines-1) || y == 0) { /* First or last row */
+ /* XXXX In fact # is not always at x==0? KANJI_CODE_OVERRIDE? */
+ int toolbar = (y == 0 && HText_hasToolbar(HTMainText));
+
mouse_link = -2;
- if (x < left) c = LTARROW;
- else if (x > right) c = '\b';
- else c = PGDOWN;
- } else if (y == 0) {
+ if (x == 0 && toolbar) /* On '#' */
+ c = LAC_TO_LKC0(LYK_TOOLBAR);
+ else if (clicks > 1) {
+ if (x < left + toolbar)
+ c = (code==FOR_PROMPT && y)
+ ? HOME : LAC_TO_LKC0(LYK_MAIN_MENU);
+ else if (x > right)
+ c = (code==FOR_PROMPT && y)
+ ? END_KEY : LAC_TO_LKC0(LYK_VLINKS);
+ else if (y) /* Last row */
+ c = LAC_TO_LKC0(LYK_END);
+ else /* First row */
+ c = LAC_TO_LKC0(LYK_HOME);
+ } else {
+ if (x < left + toolbar)
+ c = (code==FOR_PROMPT && y)
+ ? LTARROW
+ : (
+#ifdef USE_COLOR_STYLE
+ (s_forw_backw != NOSTYLE && x - toolbar >= 3)
+ ? LAC_TO_LKC0(LYK_NEXT_DOC)
+ : LAC_TO_LKC0(LYK_PREV_DOC)
+#else
+ LAC_TO_LKC0(LYK_NEXT_DOC)
+#endif
+ );
+ else if (x > right)
+ c = (code==FOR_PROMPT && y)
+ ? RTARROW : LAC_TO_LKC0(LYK_HISTORY);
+ else if (y) /* Last row */
+ c = LAC_TO_LKC0(LYK_NEXT_PAGE);
+ else /* First row */
+ c = LAC_TO_LKC0(LYK_PREV_PAGE);
+ }
+#ifdef USE_SCROLLBAR
+ } else if (x == LYcols - 1 && LYsb && LYsb_begin >= 0) {
+ int h = display_lines - 2*(LYsb_arrow != 0);
+
mouse_link = -2;
- if (x < left) c = LTARROW;
- else if (x > right) c = '\b';
- else c = PGUP;
+ y -= 1 + (LYsb_arrow != 0);
+ if (y < 0)
+ return LAC_TO_LKC0(LYK_UP_TWO);
+ if (y >= h)
+ return LAC_TO_LKC0(LYK_DOWN_TWO);
+
+ if (clicks >= 2) {
+ double frac = (1. * y)/(h - 1);
+ int l = HText_getNumOfLines() + 1; /* NOL() off by one? */
+
+ l -= display_lines;
+ if (l > 0)
+ LYSetNewline((int)(frac * l + 1 + 0.5));
+ return LYReverseKeymap(LYK_DO_NOTHING);
+ }
+
+ if (y < LYsb_begin)
+ return LAC_TO_LKC0(LYK_PREV_PAGE);
+ if (y >= LYsb_end)
+ return LAC_TO_LKC0(LYK_NEXT_PAGE);
+ mouse_link = -1; /* No action in edit fields */
+#endif
} else {
- int mouse_err = -1, cur_err;
+ int mouse_err = 29, /* subjctv-dist better than this for approx stuff */
+ cur_err;
/* Loop over the links and see if we can get a match */
for (i = 0; i < nlinks; i++) {
int len, lx = links[i].lx, is_text = 0;
if (links[i].type == WWW_FORM_LINK_TYPE
- /* XXXX What else? */
- && (links[i].form->type == F_TEXTAREA_TYPE
- || links[i].form->type == F_TEXT_TYPE))
+ && F_TEXTLIKE(links[i].form->type))
is_text = 1;
if (is_text)
@@ -242,15 +465,48 @@ PRIVATE int set_clicked_link ARGS3(
/* Check the first line of the link */
if ( links[i].hightext != NULL) {
cur_err = XYdist(x, y, links[i].lx, links[i].ly, len);
+ /* Check the second line */
+ if (cur_err > 0 && links[i].hightext2 != NULL) {
+ /* Note that there is never hightext2 if is_text */
+ int cur_err_2 = XYdist(x, y,
+ links[i].hightext2_offset,
+ links[i].ly+1,
+ strlen(links[i].hightext2));
+ cur_err = HTMIN(cur_err, cur_err_2);
+ }
+ if (cur_err > 0 && is_text)
+ cur_err--; /* a bit of preference for text fields,
+ enter field if hit exactly at end - kw */
if (cur_err == 0) {
int cury, curx;
LYGetYX(cury,curx);
+ /* double-click, if we care:
+ submit text submit fields. - kw */
+ if (clicks > 1 && is_text &&
+ links[i].form->type == F_TEXT_SUBMIT_TYPE) {
+ if (code != FOR_INPUT
+ /* submit current input field directly */
+ || !(cury == y && (curx >= lx) && ((curx - lx) <= len))) {
+ c = LAC_TO_LKC0(LYK_SUBMIT);
+ mouse_link = i;
+ } else {
+ c = LAC_TO_LKC0(LYK_SUBMIT);
+ mouse_link = -1;
+ }
+ mouse_err = 0;
+ break;
+ }
if (code != FOR_INPUT
/* Do not pick up the current input field */
|| !((cury == y && (curx >= lx) && ((curx - lx) <= len)))) {
- if (is_text)
+ if (is_text) {
have_levent = 1;
+#if defined(TEXTFIELDS_MAY_NEED_ACTIVATION) && defined(INACTIVE_INPUT_STYLE_VH)
+ if (x == links[i].lx && y == links[i].ly)
+ textinput_redrawn = FALSE;
+#endif /* TEXTFIELDS_MAY_NEED_ACTIVATION && INACTIVE_INPUT_STYLE_VH */
+ }
mouse_link = i;
} else
mouse_link = -1;
@@ -261,21 +517,6 @@ PRIVATE int set_clicked_link ARGS3(
mouse_link = i;
}
}
- /* Check the second line */
- if (links[i].hightext2 != NULL) {
- cur_err = XYdist(x, y,
- links[i].hightext2_offset,
- links[i].ly+1,
- strlen(links[i].hightext2));
- if (cur_err == 0) {
- mouse_link = i;
- mouse_err = 0;
- break;
- } else if (cur_err < mouse_err) {
- mouse_err = cur_err;
- mouse_link = i;
- }
- }
}
/*
* If a link was hit, we must look for a key which will activate
@@ -283,37 +524,24 @@ PRIVATE int set_clicked_link ARGS3(
* the Enter key).
*/
if (mouse_link >= 0) {
- if (mouse_err == 0)
- c = lookup_keymap(LYK_ACTIVATE);
- else if (mouse_err >= 0)
- c = lookup_keymap(LYK_CHANGE_LINK);
+ if (mouse_err == 0) {
+ if (c == -1)
+ c = LAC_TO_LKC0(LYK_ACTIVATE);
+ } else if (mouse_err >= 0)
+ c = LAC_TO_LKC0(LYK_CHANGE_LINK);
}
}
return c;
}
-/*
- * LYstrerror emulates the ANSI strerror() function.
- */
-#ifdef LYStrerror
- /* defined as macro in .h file. */
-#else
-PUBLIC char *LYStrerror ARGS1(int, code)
-{
- static char temp[80];
- sprintf(temp, "System errno is %d.\r\n", code);
- return temp;
-}
-#endif /* HAVE_STRERROR */
-
/*
* LYstrncpy() terminates strings with a null byte.
* Writes a null byte into the n+1 byte of dst.
*/
PUBLIC char *LYstrncpy ARGS3(
- char *, dst,
+ char *, dst,
CONST char *, src,
int, n)
{
@@ -335,8 +563,8 @@ PUBLIC char *LYstrncpy ARGS3(
return val;
}
-#define IS_NEW_GLYPH(ch) (utf_flag && ((unsigned char)(ch)&0xc0) != 0x80)
-#define IS_UTF_EXTRA(ch) (utf_flag && ((unsigned char)(ch)&0xc0) == 0x80)
+#define IS_NEW_GLYPH(ch) (utf_flag && (UCH(ch)&0xc0) != 0x80)
+#define IS_UTF_EXTRA(ch) (utf_flag && (UCH(ch)&0xc0) == 0x80)
/*
* LYmbcsstrncpy() terminates strings with a null byte.
@@ -346,7 +574,7 @@ PUBLIC char *LYstrncpy ARGS3(
* argument should be TRUE for UTF8. - KW & FM
*/
PUBLIC char * LYmbcsstrncpy ARGS5(
- char *, dst,
+ char *, dst,
CONST char *, src,
int, n_bytes,
int, n_glyphs,
@@ -380,7 +608,7 @@ PUBLIC char * LYmbcsstrncpy ARGS5(
* of UTF-8 encoded characters. - KW
*/
PUBLIC char * LYmbcs_skip_glyphs ARGS3(
- char *, data,
+ char *, data,
int, n_glyphs,
BOOL, utf_flag)
{
@@ -409,10 +637,15 @@ PUBLIC char * LYmbcs_skip_glyphs ARGS3(
* LYmbcsstrlen() returns the printable length of a string
* that might contain IsSpecial or multibyte (CJK or UTF8)
* characters. - FM
+ * Counts glyph cells if count_gcells is set. (Full-width
+ * characters in CJK mode count as two.)
+ * Counts character glyphs if count_gcells is unset. (Full-
+ * width characters in CJK mode count as one.) - kw
*/
-PUBLIC int LYmbcsstrlen ARGS2(
- char *, str,
- BOOL, utf_flag)
+PUBLIC int LYmbcsstrlen ARGS3(
+ char *, str,
+ BOOL, utf_flag,
+ BOOL, count_gcells)
{
int i, j, len = 0;
@@ -434,8 +667,8 @@ PUBLIC int LYmbcsstrlen ARGS2(
i++;
j++;
}
- } else if (!utf_flag && HTCJK != NOCJK && !isascii(str[i]) &&
- str[(i + 1)] != '\0' &&
+ } else if (!utf_flag && HTCJK != NOCJK && !count_gcells &&
+ !isascii(str[i]) && str[(i + 1)] != '\0' &&
!IsSpecialAttrChar(str[(i + 1)])) {
i++;
}
@@ -457,17 +690,51 @@ PUBLIC int LYmbcsstrlen ARGS2(
#define GetChar SLkp_getkey
#endif /* DJGPP_KEYHANDLER */
#else
+#ifdef __CYGWIN__
+#define GetChar SLkp_getkey
+#else
#define GetChar (int)SLang_getkey
+#endif /* __CYGWIN__ */
#endif /* __DJGPP__ */
#endif /* VMS */
#endif /* USE_SLANG */
#if !defined(GetChar) && defined(NCURSES)
-#define GetChar() wgetch(my_subwindow ? my_subwindow : stdscr)
+#define GetChar() wgetch(my_subwindow ? my_subwindow : LYwin)
+#endif
+
+#if !defined(GetChar) && defined(PDCURSES)
+/* PDCurses sends back key-modifiers that we don't use, but would waste time
+ * upon, e.g., repainting the status line
+ */
+PRIVATE int myGetChar NOARGS
+{
+ int c;
+ BOOL done = FALSE;
+
+ do {
+ switch (c = wgetch(LYwin))
+ {
+ case KEY_SHIFT_L :
+ case KEY_SHIFT_R :
+ case KEY_CONTROL_L :
+ case KEY_CONTROL_R :
+ case KEY_ALT_L :
+ case KEY_ALT_R :
+ case KEY_RESIZE :
+ break;
+ default:
+ done = TRUE;
+ break;
+ }
+ } while (!done);
+ return c;
+}
+#define GetChar() myGetChar()
#endif
#if !defined(GetChar) && defined(SNAKE)
-#define GetChar() wgetch(stdscr)
+#define GetChar() wgetch(LYwin)
#endif
#if !defined(GetChar) && defined(VMS)
@@ -476,7 +743,7 @@ PUBLIC int LYmbcsstrlen ARGS2(
#if !defined(GetChar)
#if HAVE_KEYPAD
-#define GetChar getch
+#define GetChar() getch()
#else
#ifndef USE_GETCHAR
#define USE_GETCHAR
@@ -485,7 +752,6 @@ PUBLIC int LYmbcsstrlen ARGS2(
#endif /* HAVE_KEYPAD */
#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.
@@ -493,16 +759,31 @@ PUBLIC int LYmbcsstrlen ARGS2(
* FIXME: the associated call on 'keypad()' is not needed for Unix, but
* something in the OS/2 EMX port requires it.
*/
+#ifndef USE_SLANG
PRIVATE WINDOW *my_subwindow;
PUBLIC void LYsubwindow ARGS1(WINDOW *, param)
{
- if ((my_subwindow = param) != 0)
- keypad(param, TRUE);
+ if (param != 0) {
+ my_subwindow = param;
+#if defined(NCURSES) || defined(PDCURSES)
+ keypad(my_subwindow, TRUE);
+#if defined(HAVE_GETBKGD) /* not defined in ncurses 1.8.7 */
+ wbkgd(my_subwindow, getbkgd(LYwin));
+ wbkgdset(my_subwindow, getbkgd(LYwin));
+#endif
+#endif
+ scrollok(my_subwindow, TRUE);
+ } else {
+ touchwin(LYwin);
+ delwin(my_subwindow);
+ my_subwindow = 0;
+ }
}
#endif
-#ifdef USE_SLANG_MOUSE
+
+#if defined(USE_SLANG) && defined(USE_MOUSE)
PRIVATE int sl_parse_mouse_event ARGS3(int *, x, int *, y, int *, button)
{
/* "ESC [ M" has already been processed. There more characters are
@@ -522,12 +803,21 @@ PRIVATE int sl_parse_mouse_event ARGS3(int *, x, int *, y, int *, button)
return -1;
}
- *x = SLang_getkey () - 33;
- *y = SLang_getkey () - 33;
+ *x = SLang_getkey ();
+ if (*x == CH_ESC) /* Undo 7-bit replace for large x - kw */
+ *x = SLang_getkey () + 64 - 33;
+ else
+ *x -= 33;
+ *y = SLang_getkey ();
+ if (*y == CH_ESC) /* Undo 7-bit replace for large y - kw */
+ *y = SLang_getkey () + 64 - 33;
+ else
+ *y -= 33;
return 0;
}
-PRIVATE int sl_read_mouse_event NOARGS
+PRIVATE int sl_read_mouse_event ARGS1(
+ int, code)
{
int mouse_x, mouse_y, button;
@@ -535,7 +825,7 @@ PRIVATE int sl_read_mouse_event NOARGS
if (-1 != sl_parse_mouse_event (&mouse_x, &mouse_y, &button))
{
if (button == 0) /* left */
- return set_clicked_link (mouse_x, mouse_y, FOR_PANEL);
+ return set_clicked_link (mouse_x, mouse_y, FOR_PANEL, 1);
if (button == 2) /* right */
{
@@ -546,9 +836,13 @@ PRIVATE int sl_read_mouse_event NOARGS
return LYReverseKeymap (LYK_PREV_DOC);
}
}
- return -1;
+ if (code == FOR_INPUT || code == FOR_PROMPT)
+ return DO_NOTHING;
+ else
+ return -1;
}
-#endif
+#endif /* USE_SLANG and USE_MOUSE */
+
PRIVATE BOOLEAN csi_is_csi = TRUE;
PUBLIC void ena_csi ARGS1(
@@ -562,14 +856,13 @@ PUBLIC void ena_csi ARGS1(
#ifdef USE_SLANG
#define define_key(string, code) \
SLkm_define_keysym (string, code, Keymap_List)
-#define expand_substring(dst, first, last) \
- SLexpand_escaped_string(dst, first, last)
+#define expand_substring(dst, first, last, final) \
+ (SLexpand_escaped_string(dst, (char *)first, (char *)last), 1)
static SLKeyMap_List_Type *Keymap_List;
/* This value should be larger than anything in LYStrings.h */
-#define MOUSE_KEYSYM 0x1000
+#define MOUSE_KEYSYM 0x0400
#endif
-
#define SQUOTE '\''
#define DQUOTE '"'
#define ESCAPE '\\'
@@ -581,11 +874,18 @@ static SLKeyMap_List_Type *Keymap_List;
* the CSI logic and other special cases for VMS, NCSA telnet, etc.
*/
#ifdef USE_SLANG
-#define DEFINE_KEY(string,lynx,curses) {string,lynx}
+# ifdef VMS
+# define EXTERN_KEY(string,string1,lynx,curses) {string,lynx}
+# else
+# define EXTERN_KEY(string,string1,lynx,curses) {string,lynx},{string1,lynx}
+# endif
+# define INTERN_KEY(string,lynx,curses) {string,lynx}
#else
-#define DEFINE_KEY(string,lynx,curses) {string,curses}
+#define INTERN_KEY(string,lynx,curses) {string,curses}
+#define EXTERN_KEY(string,string1,lynx,curses) {string,curses}
#endif
+
typedef struct
{
char *string;
@@ -595,22 +895,22 @@ Keysym_String_List;
static Keysym_String_List Keysym_Strings [] =
{
- DEFINE_KEY( "UPARROW", UPARROW, KEY_UP ),
- DEFINE_KEY( "DNARROW", DNARROW, KEY_DOWN ),
- DEFINE_KEY( "RTARROW", RTARROW, KEY_RIGHT ),
- DEFINE_KEY( "LTARROW", LTARROW, KEY_LEFT ),
- DEFINE_KEY( "PGDOWN", PGDOWN, KEY_NPAGE ),
- DEFINE_KEY( "PGUP", PGUP, KEY_PPAGE ),
- DEFINE_KEY( "HOME", HOME, KEY_HOME ),
- DEFINE_KEY( "END", END_KEY, KEY_END ),
- DEFINE_KEY( "F1", F1, KEY_F(1) ),
- DEFINE_KEY( "DO_KEY", DO_KEY, KEY_F(16) ),
- DEFINE_KEY( "FIND_KEY", FIND_KEY, KEY_FIND ),
- DEFINE_KEY( "SELECT_KEY", SELECT_KEY, KEY_SELECT ),
- DEFINE_KEY( "INSERT_KEY", INSERT_KEY, KEY_IC ),
- DEFINE_KEY( "REMOVE_KEY", REMOVE_KEY, KEY_DC ),
- DEFINE_KEY( "DO_NOTHING", DO_NOTHING, 0 ),
- DEFINE_KEY( NULL, -1, ERR )
+ INTERN_KEY( "UPARROW", UPARROW, KEY_UP ),
+ INTERN_KEY( "DNARROW", DNARROW, KEY_DOWN ),
+ INTERN_KEY( "RTARROW", RTARROW, KEY_RIGHT ),
+ INTERN_KEY( "LTARROW", LTARROW, KEY_LEFT ),
+ INTERN_KEY( "PGDOWN", PGDOWN, KEY_NPAGE ),
+ INTERN_KEY( "PGUP", PGUP, KEY_PPAGE ),
+ INTERN_KEY( "HOME", HOME, KEY_HOME ),
+ INTERN_KEY( "END", END_KEY, KEY_END ),
+ INTERN_KEY( "F1", F1, KEY_F(1) ),
+ INTERN_KEY( "DO_KEY", DO_KEY, KEY_F(16) ),
+ INTERN_KEY( "FIND_KEY", FIND_KEY, KEY_FIND ),
+ INTERN_KEY( "SELECT_KEY", SELECT_KEY, KEY_SELECT ),
+ INTERN_KEY( "INSERT_KEY", INSERT_KEY, KEY_IC ),
+ INTERN_KEY( "REMOVE_KEY", REMOVE_KEY, KEY_DC ),
+ INTERN_KEY( "DO_NOTHING", DO_NOTHING, DO_NOTHING|LKC_ISLKC ),
+ INTERN_KEY( NULL, -1, ERR )
};
#ifdef NCURSES_VERSION
@@ -628,7 +928,7 @@ PRIVATE int lookup_tiname (char *name, NCURSES_CONST char *CONST *names)
return -1;
}
-PRIVATE char *expand_tiname (char *first, size_t len, char **result)
+PRIVATE CONST char *expand_tiname (CONST char *first, size_t len, char **result, char *final)
{
char name[BUFSIZ];
int code;
@@ -638,14 +938,14 @@ PRIVATE char *expand_tiname (char *first, size_t len, char **result)
if ((code = lookup_tiname(name, strnames)) >= 0
|| (code = lookup_tiname(name, strfnames)) >= 0) {
if (cur_term->type.Strings[code] != 0) {
- strcpy(*result, cur_term->type.Strings[code]);
+ LYstrncpy(*result, cur_term->type.Strings[code], final - *result);
(*result) += strlen(*result);
}
}
return first + len;
}
-PRIVATE char *expand_tichar (char *first, char **result)
+PRIVATE CONST char *expand_tichar (CONST char *first, char **result, char *final)
{
int ch;
int limit = 0;
@@ -676,16 +976,16 @@ PRIVATE char *expand_tichar (char *first, char **result)
}
if (radix != 0) {
- char *last;
- int save = first[limit];
- first[limit] = '\0';
- value = strtol(first, &last, radix);
- first[limit] = save;
- first = last;
+ char *last = 0;
+ char tmp[80];
+ LYstrncpy(tmp, first, limit);
+ value = strtol(tmp, &last, radix);
+ if (last != 0 && last != tmp)
+ first += (last - tmp);
}
if (name != 0) {
- (void) expand_tiname(name, strlen(name), result);
+ (void) expand_tiname(name, strlen(name), result, final);
} else {
**result = value;
(*result) += 1;
@@ -694,21 +994,25 @@ PRIVATE char *expand_tichar (char *first, char **result)
return first;
}
-PRIVATE void expand_substring (char* dst, char* first, char* last)
+PRIVATE int expand_substring (char* dst, CONST char* first, CONST char* last, char *final)
{
int ch;
+
while (first < last) {
switch (ch = *first++) {
case ESCAPE:
- first = expand_tichar(first, &dst);
+ first = expand_tichar(first, &dst, final);
break;
case '^':
ch = *first++;
if (ch == LPAREN) {
- char *s = strchr(first, RPAREN);
+ CONST char *s = strchr(first, RPAREN);
+ char *was = dst;
if (s == 0)
s = first + strlen(first);
- first = expand_tiname(first, s-first, &dst);
+ first = expand_tiname(first, s-first, &dst, final);
+ if (dst == was)
+ return 0;
if (*first)
first++;
} else if (ch == '?') { /* ASCII delete? */
@@ -729,22 +1033,23 @@ PRIVATE void expand_substring (char* dst, char* first, char* last)
}
}
*dst = '\0';
+ return 1;
}
#endif
-PRIVATE void unescaped_char ARGS2(char*, parse, int*,keysym)
+PRIVATE void unescaped_char ARGS2(CONST char*, parse, int*,keysym)
{
size_t len = strlen(parse);
char buf[BUFSIZ];
if (len >= 3) {
- expand_substring(buf, parse + 1, parse + len - 1);
+ expand_substring(buf, parse + 1, parse + len - 1, buf + sizeof(buf) - 1);
if (strlen(buf) == 1)
*keysym = *buf;
}
}
-PRIVATE BOOLEAN unescape_string ARGS2(char*, src, char *, dst)
+PRIVATE BOOLEAN unescape_string ARGS3(char*, src, char *, dst, char *, final)
{
BOOLEAN ok = FALSE;
@@ -756,24 +1061,73 @@ PRIVATE BOOLEAN unescape_string ARGS2(char*, src, char *, dst)
dst[1] = '\0';
ok = TRUE;
}
- } else if (*src == DQUOTE) {
- expand_substring(dst, src + 1, src + strlen(src) - 1);
- ok = TRUE;
- }
+ } else if (*src == DQUOTE)
+ ok = expand_substring(dst, src + 1, src + strlen(src) - 1, final);
return ok;
}
-PRIVATE int map_string_to_keysym ARGS2(char*, str, int*,keysym)
+PUBLIC int map_string_to_keysym ARGS2(CONST char*, str, int*,keysym)
{
+ int modifier = 0;
*keysym = -1;
+ if (strncasecomp(str, "LAC:", 4) == 0) {
+ char *other = strchr(str+4, ':');
+
+ if (other) {
+ int othersym = lecname_to_lec(other + 1);
+ char buf[BUFSIZ];
+
+ if (othersym >= 0 && other - str - 4 < BUFSIZ ) {
+ strncpy(buf, str + 4, other - str - 4);
+ buf[other - str - 4] = '\0';
+ *keysym = lacname_to_lac(buf);
+ if (*keysym >= 0) {
+ *keysym = LACLEC_TO_LKC0(*keysym, othersym);
+ return (*keysym);
+ }
+ }
+ }
+ *keysym = lacname_to_lac(str + 4);
+ if (*keysym >= 0) {
+ *keysym = LAC_TO_LKC0(*keysym);
+ return (*keysym);
+ }
+ }
+ if (strncasecomp(str, "Meta-", 5) == 0) {
+ str += 5;
+ modifier = LKC_MOD2;
+ if (*str) {
+ size_t len = strlen(str);
+ if (len == 1)
+ return (*keysym = (UCH(str[0]))|modifier);
+ else if (len == 2 && str[0] == '^' &&
+ (isalpha(UCH(str[1])) ||
+ (TOASCII(str[1]) >= '@' && TOASCII(str[1]) <= '_')))
+ return (*keysym = FROMASCII(UCH(str[1]&0x1f))|modifier);
+ else if (len == 2 && str[0] == '^' &&
+ str[1] == '?')
+ return (*keysym = CH_DEL|modifier);
+ if (*str == '^' || *str == '\\') {
+ char buf[BUFSIZ];
+ expand_substring(buf, str, str + HTMIN(len, 28), buf + sizeof(buf) - 1);
+ if (strlen(buf) <= 1)
+ return (*keysym = (UCH(buf[0]))|modifier);
+ }
+ }
+ }
if (*str == SQUOTE) {
unescaped_char(str, keysym);
- } else if (isdigit(*str)) {
+ } else if (isdigit(UCH(*str))) {
char *tmp;
long value = strtol(str, &tmp, 0);
- if (!isalnum(*tmp))
+ if (!isalnum(UCH(*tmp))) {
*keysym = value;
+#ifndef USE_SLANG
+ if (*keysym > 255)
+ *keysym |= LKC_ISLKC; /* caller should remove this flag - kw */
+#endif
+ }
} else {
Keysym_String_List *k;
@@ -787,6 +1141,8 @@ PRIVATE int map_string_to_keysym ARGS2(char*, str, int*,keysym)
}
}
+ if (*keysym >= 0)
+ *keysym |= modifier;
return (*keysym);
}
@@ -812,7 +1168,7 @@ PRIVATE char *skip_keysym ARGS1(char *, parse)
escaped = 1;
} else if (*parse == DQUOTE || *parse == SQUOTE) {
quoted = *parse;
- } else if (isspace(*parse)) {
+ } else if (isspace(UCH(*parse))) {
break;
}
parse++;
@@ -830,20 +1186,40 @@ PRIVATE int setkey_cmd (char *parse)
int keysym;
char buf[BUFSIZ];
+ CTRACE((tfp, "KEYMAP(PA): in=%s", parse)); /* \n-terminated */
if ((s = skip_keysym(parse)) != 0) {
- if (isspace(*s)) {
+ if (isspace(UCH(*s))) {
*s++ = '\0';
s = LYSkipBlanks(s);
- if ((t = skip_keysym(s)) == 0)
+ if ((t = skip_keysym(s)) == 0) {
+ CTRACE((tfp, "KEYMAP(SKIP) no key expansion found\n"));
return -1;
+ }
if (t != s)
*t = '\0';
- if (map_string_to_keysym (s, &keysym) >= 0
- && unescape_string(parse, buf)) {
+ if (map_string_to_keysym (s, &keysym) >= 0) {
+ if (!unescape_string(parse, buf, buf + sizeof(buf) - 1)) {
+ CTRACE((tfp, "KEYMAP(SKIP) could unescape key\n"));
+ return 0; /* Trace the failure and continue. */
+ }
+ if (LYTraceLogFP == 0) {
+ CTRACE((tfp, "KEYMAP(DEF) keysym=%#x\n", keysym));
+ } else {
+ CTRACE((tfp, "KEYMAP(DEF) keysym=%#x, seq='%s'\n", keysym, buf));
+ }
return define_key(buf, keysym);
}
+ else {
+ CTRACE((tfp, "KEYMAP(SKIP) could not map to keysym\n"));
+ }
+ }
+ else {
+ CTRACE((tfp, "KEYMAP(SKIP) junk after key description: '%s'\n", s));
}
}
+ else {
+ CTRACE((tfp, "KEYMAP(SKIP) no key description\n"));
+ }
return -1;
}
@@ -894,7 +1270,6 @@ PRIVATE int read_keymap_file NOARGS
char *line = NULL;
FILE *fp;
char file[LY_MAXPATH];
- int ret;
int linenum;
size_t n;
@@ -904,9 +1279,7 @@ PRIVATE int read_keymap_file NOARGS
return 0;
linenum = 0;
- ret = 0;
- while (LYSafeGets(&line, fp) != 0 && (ret == 0))
- {
+ while (LYSafeGets(&line, fp) != 0) {
char *s = LYSkipBlanks(line);
linenum++;
@@ -916,52 +1289,61 @@ PRIVATE int read_keymap_file NOARGS
for (n = 0; n < TABLESIZE(table); n++) {
size_t len = strlen(table[n].name);
- if (strlen(s) > len
- && !strncmp(s, table[n].name, len)) {
- if ((*(table[n].func))(LYSkipBlanks(s+len)) < 0) {
- ret = -1;
- break;
- }
- }
+
+ if ( strlen(s) > len && !strncmp(s, table[n].name, len)
+ && (*(table[n].func))(LYSkipBlanks(s+len)) < 0 )
+ fprintf (stderr, FAILED_READING_KEYMAP, linenum, file);
}
}
FREE(line);
-
- fclose (fp);
-
- if (ret == -1)
- fprintf (stderr, FAILED_READING_KEYMAP, linenum, file);
-
- return ret;
+ LYCloseInput (fp);
+ return 0;
}
PRIVATE void setup_vtXXX_keymap NOARGS
{
static Keysym_String_List table[] = {
- DEFINE_KEY( "\033[A", UPARROW, KEY_UP ),
- DEFINE_KEY( "\033OA", UPARROW, KEY_UP ),
- DEFINE_KEY( "\033[B", DNARROW, KEY_DOWN ),
- DEFINE_KEY( "\033OB", DNARROW, KEY_DOWN ),
- DEFINE_KEY( "\033[C", RTARROW, KEY_RIGHT ),
- DEFINE_KEY( "\033OC", RTARROW, KEY_RIGHT ),
- DEFINE_KEY( "\033[D", LTARROW, KEY_LEFT ),
- DEFINE_KEY( "\033OD", LTARROW, KEY_LEFT ),
- DEFINE_KEY( "\033[1~", FIND_KEY, KEY_FIND ),
- DEFINE_KEY( "\033[2~", INSERT_KEY, KEY_IC ),
- DEFINE_KEY( "\033[3~", REMOVE_KEY, KEY_DC ),
- DEFINE_KEY( "\033[4~", SELECT_KEY, KEY_SELECT ),
- DEFINE_KEY( "\033[5~", PGUP, KEY_PPAGE ),
- DEFINE_KEY( "\033[6~", PGDOWN, KEY_NPAGE ),
- DEFINE_KEY( "\033[8~", END_KEY, KEY_END ),
- DEFINE_KEY( "\033[7~", HOME, KEY_HOME),
- DEFINE_KEY( "\033[28~", F1, KEY_F(1) ),
- DEFINE_KEY( "\033OP", F1, KEY_F(1) ),
- DEFINE_KEY( "\033[OP", F1, KEY_F(1) ),
- DEFINE_KEY( "\033[29~", DO_KEY, KEY_F(16) ),
+ INTERN_KEY( "\033[A", UPARROW, KEY_UP ),
+ INTERN_KEY( "\033OA", UPARROW, KEY_UP ),
+ INTERN_KEY( "\033[B", DNARROW, KEY_DOWN ),
+ INTERN_KEY( "\033OB", DNARROW, KEY_DOWN ),
+ INTERN_KEY( "\033[C", RTARROW, KEY_RIGHT ),
+ INTERN_KEY( "\033OC", RTARROW, KEY_RIGHT ),
+ INTERN_KEY( "\033[D", LTARROW, KEY_LEFT ),
+ INTERN_KEY( "\033OD", LTARROW, KEY_LEFT ),
+ INTERN_KEY( "\033[1~", FIND_KEY, KEY_FIND ),
+ INTERN_KEY( "\033[2~", INSERT_KEY, KEY_IC ),
+ INTERN_KEY( "\033[3~", REMOVE_KEY, KEY_DC ),
+ INTERN_KEY( "\033[4~", SELECT_KEY, KEY_SELECT ),
+ INTERN_KEY( "\033[5~", PGUP, KEY_PPAGE ),
+ INTERN_KEY( "\033[6~", PGDOWN, KEY_NPAGE ),
+ INTERN_KEY( "\033[7~", HOME, KEY_HOME),
+ INTERN_KEY( "\033[8~", END_KEY, KEY_END ),
+ INTERN_KEY( "\033[11~", F1, KEY_F(1) ),
+ INTERN_KEY( "\033[28~", F1, KEY_F(1) ),
+ INTERN_KEY( "\033OP", F1, KEY_F(1) ),
+ INTERN_KEY( "\033[OP", F1, KEY_F(1) ),
+ INTERN_KEY( "\033[29~", DO_KEY, KEY_F(16) ),
+#if defined(USE_SLANG) && !defined(VMS)
+ INTERN_KEY( "^(ku)", UPARROW, KEY_UP ),
+ INTERN_KEY( "^(kd)", DNARROW, KEY_DOWN ),
+ INTERN_KEY( "^(kr)", RTARROW, KEY_RIGHT ),
+ INTERN_KEY( "^(kl)", LTARROW, KEY_LEFT ),
+ INTERN_KEY( "^(@0)", FIND_KEY, KEY_FIND ),
+ INTERN_KEY( "^(kI)", INSERT_KEY, KEY_IC ),
+ INTERN_KEY( "^(kD)", REMOVE_KEY, KEY_DC ),
+ INTERN_KEY( "^(*6)", SELECT_KEY, KEY_SELECT ),
+ INTERN_KEY( "^(kP)", PGUP, KEY_PPAGE ),
+ INTERN_KEY( "^(kN)", PGDOWN, KEY_NPAGE ),
+ INTERN_KEY( "^(@7)", END_KEY, KEY_END ),
+ INTERN_KEY( "^(kh)", HOME, KEY_HOME),
+ INTERN_KEY( "^(k1)", F1, KEY_F(1) ),
+ INTERN_KEY( "^(F6)", DO_KEY, KEY_F(16) ),
+#endif /* SLANG && !VMS */
};
size_t n;
for (n = 0; n < TABLESIZE(table); n++)
- define_key(table[n].string, table[n].value);
+ define_key(table[n].string, table[n].value);
}
PUBLIC int lynx_initialize_keymaps NOARGS
@@ -970,6 +1352,11 @@ PUBLIC int lynx_initialize_keymaps NOARGS
int i;
char keybuf[2];
+ /* The escape sequences may contain embedded termcap strings. Make
+ * sure the library is initialized for that.
+ */
+ SLtt_get_terminfo();
+
if (NULL == (Keymap_List = SLang_create_keymap ("Lynx", NULL)))
return -1;
@@ -983,167 +1370,214 @@ PUBLIC int lynx_initialize_keymaps NOARGS
setup_vtXXX_keymap();
define_key ("\033[M", MOUSE_KEYSYM);
- if (SLang_Error
- || (-1 == read_keymap_file ()))
- SLang_exit_error ("Unable to initialize keymaps");
- return 0;
+ if (SLang_Error)
+ SLang_exit_error ("Unable to initialize keymaps");
#else
setup_vtXXX_keymap();
- return read_keymap_file();
#endif
+ return read_keymap_file();
}
#endif /* USE_KEYMAPS */
-#ifdef NCURSES_MOUSE_VERSION
-PRIVATE int LYmouse_menu ARGS3(int, x, int, y, int, atlink)
-{
- static char *choices[] = {
- "Quit",
- "Home page",
- "Previous document",
- "Beginning of document",
- "Page up",
- "Half page up",
- "Two lines up",
- "History",
- "Help",
- "Do nothing (refresh)",
- "Load again",
- "Edit URL and load",
- "Show info",
- "Search",
- "Print",
- "Two lines down",
- "Half page down",
- "Page down",
- "End of document",
- "Bookmarks",
- "Cookie jar",
- "Search index",
- "Set Options",
- NULL
- };
- static char *choices_link[] = {
- "Help",
- "Do nothing",
- "Activate this link",
- "Show info",
- "Download",
- NULL
- };
- static int actions[] = {
- LYK_ABORT,
- LYK_MAIN_MENU,
- LYK_PREV_DOC,
- LYK_HOME,
- LYK_PREV_PAGE,
- LYK_UP_HALF,
- LYK_UP_TWO,
- LYK_HISTORY,
- LYK_HELP,
- LYK_REFRESH,
- LYK_RELOAD,
- LYK_ECGOTO,
- LYK_INFO,
- LYK_WHEREIS,
- LYK_PRINT,
- LYK_DOWN_TWO,
- LYK_DOWN_HALF,
- LYK_NEXT_PAGE,
- LYK_END,
- LYK_VIEW_BOOKMARK,
- LYK_COOKIE_JAR,
- LYK_INDEX_SEARCH,
- LYK_OPTIONS
- };
- static int actions_link[] = {
- LYK_HELP,
- LYK_REFRESH,
- LYK_ACTIVATE,
- LYK_INFO,
- LYK_DOWNLOAD
+
+#if defined(USE_MOUSE) && (defined(NCURSES))
+PRIVATE int LYmouse_menu ARGS4(int, x, int, y, int, atlink, int, code)
+{
+#define ENT_ONLY_DOC 1
+#define ENT_ONLY_LINK 2
+ static const struct {
+ char *txt;
+ int action;
+ unsigned int flag;
+ } possible_entries[] = {
+ {"Quit", LYK_ABORT, ENT_ONLY_DOC},
+ {"Home page", LYK_MAIN_MENU, ENT_ONLY_DOC},
+ {"Previous document", LYK_PREV_DOC, ENT_ONLY_DOC},
+ {"Beginning of document", LYK_HOME, ENT_ONLY_DOC},
+ {"Page up", LYK_PREV_PAGE, ENT_ONLY_DOC},
+ {"Half page up", LYK_UP_HALF, ENT_ONLY_DOC},
+ {"Two lines up", LYK_UP_TWO, ENT_ONLY_DOC},
+ {"History", LYK_HISTORY, ENT_ONLY_DOC},
+ {"Help", LYK_HELP, 0},
+ {"Do nothing (refresh)", LYK_REFRESH, 0},
+ {"Load again", LYK_RELOAD, ENT_ONLY_DOC},
+ {"Edit Doc URL and load", LYK_ECGOTO, ENT_ONLY_DOC},
+ {"Edit Link URL and load", LYK_ELGOTO, ENT_ONLY_LINK},
+ {"Show info", LYK_INFO, 0},
+ {"Search", LYK_WHEREIS, ENT_ONLY_DOC},
+ {"Print", LYK_PRINT, ENT_ONLY_DOC},
+ {"Two lines down", LYK_DOWN_TWO, ENT_ONLY_DOC},
+ {"Half page down", LYK_DOWN_HALF, ENT_ONLY_DOC},
+ {"Page down", LYK_NEXT_PAGE, ENT_ONLY_DOC},
+ {"End of document", LYK_END, ENT_ONLY_DOC},
+ {"Bookmarks", LYK_VIEW_BOOKMARK, ENT_ONLY_DOC},
+ {"Cookie jar", LYK_COOKIE_JAR, ENT_ONLY_DOC},
+ {"Search index", LYK_INDEX_SEARCH, ENT_ONLY_DOC},
+ {"Set Options", LYK_OPTIONS, ENT_ONLY_DOC},
+ {"Activate this link", LYK_SUBMIT, ENT_ONLY_LINK},
+ {"Download", LYK_DOWNLOAD, ENT_ONLY_LINK}
};
- int c;
+#define TOTAL_MENUENTRIES TABLESIZE(possible_entries)
+ char *choices[TOTAL_MENUENTRIES + 1];
+ int actions[TOTAL_MENUENTRIES];
+
+ int c, c1, retlac, filter_out = (atlink ? ENT_ONLY_DOC : ENT_ONLY_LINK);
+
+ c = c1 = 0;
+ while (c < (int) TOTAL_MENUENTRIES) {
+ if (!(possible_entries[c].flag & filter_out)) {
+ choices[c1] = possible_entries[c].txt;
+ actions[c1++] = possible_entries[c].action;
+ }
+ c++;
+ }
+ choices[c1] = NULL;
/* Somehow the mouse is over the number instead of being over the
name, so we decrease x. */
- c = popup_choice((atlink ? 2 : 9) - 1, y, (x >= 5 ? x-5 : 0),
- (atlink ? choices_link : choices),
- (atlink
- ? (sizeof(actions_link)/sizeof(int))
- : (sizeof(actions)/sizeof(int))), FALSE);
+ c = LYChoosePopup((atlink ? 2 : 10) - 1, y, (x > 5 ? x-5 : 1),
+ choices, c1, FALSE, TRUE);
- return atlink ? (actions_link[c]) : (actions[c]);
+ /*
+ * LYhandlePopupList() wasn't really meant to be used
+ * outside of old-style Options menu processing. One result of
+ * mis-using it here is that we have to deal with side-effects
+ * regarding SIGINT signal handler and the term_options global
+ * variable. - kw
+ */
+ if (term_options) {
+ retlac = LYK_DO_NOTHING;
+ term_options = FALSE;
+ } else {
+ retlac = actions[c];
+ }
+
+ if (code == FOR_INPUT && mouse_link == -1) {
+ switch (retlac) {
+ case LYK_ABORT:
+ retlac = LYK_QUIT; /* a bit softer... */
+ /* fall through */
+ case LYK_MAIN_MENU:
+ case LYK_PREV_DOC:
+ case LYK_HOME:
+ case LYK_PREV_PAGE:
+ case LYK_UP_HALF:
+ case LYK_UP_TWO:
+ case LYK_HISTORY:
+ case LYK_HELP:
+/* case LYK_REFRESH:*/
+ case LYK_RELOAD:
+ case LYK_ECGOTO:
+ case LYK_INFO:
+ case LYK_WHEREIS:
+ case LYK_PRINT:
+ case LYK_DOWN_TWO:
+ case LYK_DOWN_HALF:
+ case LYK_NEXT_PAGE:
+ case LYK_END:
+ case LYK_VIEW_BOOKMARK:
+ case LYK_COOKIE_JAR:
+ case LYK_INDEX_SEARCH:
+ case LYK_OPTIONS:
+ mouse_link = -3; /* so LYgetch_for() passes it on - kw */
+ }
+ }
+ if (retlac == LYK_DO_NOTHING ||
+ retlac == LYK_REFRESH) {
+ mouse_link = -1; /* mainloop should not change cur link - kw */
+ }
+ if (code == FOR_INPUT && retlac == LYK_DO_NOTHING) {
+ repaint_main_statusline(FOR_INPUT);
+ }
+ return retlac;
}
-#endif
+#endif /* USE_MOUSE && (NCURSES || PDCURSES) */
+
#if defined(USE_KEYMAPS) && defined(USE_SLANG)
+/************************************************************************/
+
+PRIVATE int current_sl_modifier = 0;
/* We cannot guarantee the type for 'GetChar', and should not use a cast. */
PRIVATE int myGetChar NOARGS
{
- return GetChar();
+ int i = GetChar();
+ if (i == 0) /* trick to get NUL char through - kw */
+ current_sl_modifier = LKC_ISLKC;
+ return i;
}
-PUBLIC int LYgetch NOARGS
+PRIVATE int LYgetch_for ARGS1(
+ int, code)
{
SLang_Key_Type *key;
int keysym;
+ current_sl_modifier = 0;
key = SLang_do_key (Keymap_List, myGetChar);
if ((key == NULL) || (key->type != SLKEY_F_KEYSYM))
- return DO_NOTHING;
+ return (current_sl_modifier ? 0 : DO_NOTHING);
keysym = key->f.keysym;
-#if defined (USE_SLANG_MOUSE)
+#if defined (USE_MOUSE)
if (keysym == MOUSE_KEYSYM)
- return sl_read_mouse_event ();
+ return sl_read_mouse_event (code);
#endif
- if ((keysym+1 >= KEYMAP_SIZE) || (keysym < 0))
- return 0;
+ if (keysym < 0)
+ return 0;
- return keysym;
-}
+ if (keysym & (LKC_ISLECLAC|LKC_ISLAC))
+ return (keysym);
-PUBLIC int LYgetch_for ARGS1(
- int, code)
-{
- return LYgetch();
+ current_sl_modifier = 0;
+ if (LKC_HAS_ESC_MOD(keysym)) {
+ current_sl_modifier = LKC_MOD2;
+ keysym &= LKC_MASK;
+ }
+
+ if (keysym+1 >= KEYMAP_SIZE)
+ return 0;
+
+ return (keysym|current_sl_modifier);
}
+/************************************************************************/
#else /* NOT defined(USE_KEYMAPS) && defined(USE_SLANG) */
+
/*
* LYgetch() translates some escape sequences and may fake noecho.
*/
#define found_CSI(first,second) ((second) == '[' || (first) == 155)
-PUBLIC int LYgetch NOARGS
-{
- return LYgetch_for(FOR_PANEL);
-}
-
-PUBLIC int LYgetch_for ARGS1(
- int, code)
+PRIVATE int LYgetch_for ARGS1(
+ int, code)
{
int a, b, c, d = -1;
+ int current_modifier = 0;
+ BOOLEAN done_esc = FALSE;
have_levent = 0;
-#if defined(IGNORE_CTRL_C) || defined(USE_GETCHAR) || !defined(NCURSES)
re_read:
-#endif /* IGNORE_CTRL_C || USE_GETCHAR */
+#if !defined(UCX) || !defined(VAXC) /* errno not modifiable ? */
+ if (errno == EINTR)
+ set_errno(0); /* reset - kw */
+#endif /* UCX && VAXC */
#ifndef USE_SLANG
clearerr(stdin); /* needed here for ultrix and SOCKETSHR, but why? - FM */
#endif /* !USE_SLANG */
#if !defined(USE_SLANG) || defined(VMS) || defined(DJGPP_KEYHANDLER)
c = GetChar();
+ lynx_nl2crlf(FALSE);
#else
if (LYCursesON) {
c = GetChar();
+ lynx_nl2crlf(FALSE);
} else {
c = getchar();
if (c == EOF && errno == EINTR) /* Ctrl-Z causes EINTR in getchar() */
@@ -1153,14 +1587,79 @@ re_read:
if (sigint)
sigint = FALSE;
#endif /* IGNORE_CTRL_C */
- return(7); /* use ^G to cancel whatever called us. */
+ CTRACE((tfp, "GETCH: Translate ^C to ^G.\n"));
+ return(LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */
}
}
#endif /* !USE_SLANG || VMS */
+ CTRACE((tfp, "GETCH: Got %#x.\n", c));
+#ifdef MISC_EXP
+ if (LYNoZapKey > 1 && errno != EINTR &&
+ (c == EOF
+#ifdef USE_SLANG
+ || (c == 0xFFFF)
+#endif
+ )) {
+ int fd, kbd_fd;
+ CTRACE((tfp,
+ "nozap: Got EOF, curses %s, stdin is %p, LYNoZapKey reduced from %d to 0.\n",
+ LYCursesON ? "on" : "off", stdin, LYNoZapKey));
+ LYNoZapKey = 0; /* 2 -> 0 */
+ if ((fd = fileno(stdin)) == 0 && !isatty(fd) &&
+ (kbd_fd = LYConsoleInputFD(FALSE)) == fd) {
+ char *term_name;
+ int new_fd = INVSOC;
+ if ((term_name = ttyname(fileno(stdout))) != NULL)
+ new_fd = open(term_name, O_RDONLY);
+ if (new_fd == INVSOC &&
+ (term_name = ttyname(fileno(stderr))) != NULL)
+ new_fd = open(term_name, O_RDONLY);
+ if (new_fd == INVSOC) {
+ term_name = ctermid(NULL);
+ new_fd = open(term_name, O_RDONLY);
+ }
+ CTRACE((tfp, "nozap: open(%s) returned %d.\n", term_name, new_fd));
+ if (new_fd >= 0) {
+ FILE *frp;
+ close(new_fd);
+ frp = freopen(term_name, "r", stdin);
+ CTRACE((tfp,
+ "nozap: freopen(%s,\"r\",stdin) returned %p, stdin is now %p with fd %d.\n",
+ term_name, frp, stdin, fileno(stdin)));
+ if (LYCursesON) {
+ stop_curses();
+ start_curses();
+ LYrefresh();
+ }
+ goto re_read;
+ }
+ }
+ }
+#endif /* MISC_EXP */
+
#ifdef USE_GETCHAR
if (c == EOF && errno == EINTR) /* Ctrl-Z causes EINTR in getchar() */
goto re_read;
+#else
+ if (c == EOF && errno == EINTR) {
+
+#if HAVE_SIZECHANGE || defined(USE_SLANG)
+ CTRACE((tfp, "Got EOF with EINTR, recent_sizechange so far is %d\n",
+ recent_sizechange));
+ if (!recent_sizechange) { /* not yet detected by ourselves */
+ size_change(0);
+ CTRACE((tfp, "Now recent_sizechange is %d\n", recent_sizechange));
+ }
+#else /* HAVE_SIZECHANGE || USE_SLANG */
+ CTRACE((tfp, "Got EOF with EINTR, recent_sizechange is %d\n",
+ recent_sizechange));
+#endif /* HAVE_SIZECHANGE || USE_SLANG */
+#if !defined(UCX) || !defined(VAXC) /* errno not modifiable ? */
+ set_errno(0); /* reset - kw */
+#endif /* UCX && VAXC */
+ return(DO_NOTHING);
+ }
#endif /* USE_GETCHAR */
#ifdef USE_SLANG
@@ -1171,12 +1670,12 @@ re_read:
goto re_read;
}
#endif /* IGNORE_CTRL_C */
- return(7); /* use ^G to cancel whatever called us. */
+ return(LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */
}
-#else
+#else /* not USE_SLANG: */
if (feof(stdin) || ferror(stdin) || c == EOF) {
if (recent_sizechange)
- return(7); /* use ^G to cancel whatever called us. */
+ return(LYCharINTERRUPT2); /* use ^G to cancel whatever called us. */
#ifdef IGNORE_CTRL_C
if (sigint) {
sigint = FALSE;
@@ -1190,11 +1689,14 @@ re_read:
#endif /* USE_GETCHAR */
cleanup();
- exit_immediately(0);
+ exit_immediately(EXIT_SUCCESS);
}
#endif /* USE_SLANG */
- if (c == CH_ESC || (csi_is_csi && c == (unsigned char)CH_ESC_PAR)) { /* handle escape sequence S/390 -- gil -- 2024 */
+ if (!escape_bound
+ && (c == CH_ESC || (csi_is_csi && c == UCH(CH_ESC_PAR)))) {
+ /* handle escape sequence S/390 -- gil -- 2024 */
+ done_esc = TRUE; /* Flag: we did it, not keypad() */
b = GetChar();
if (b == '[' || b == 'O') {
@@ -1205,43 +1707,45 @@ re_read:
switch (a) {
case 'A': c = UPARROW; break;
- case 'x': c = UPARROW; break; /* keypad up on pc ncsa telnet */
+ case 'x': c = UPARROW; break; /* keypad up on pc ncsa telnet */
case 'B': c = DNARROW; break;
- case 'r': c = DNARROW; break; /* keypad down on pc ncsa telnet */
+ case 'r': c = DNARROW; break; /* keypad down on pc ncsa telnet */
case 'C': c = RTARROW; break;
- case 'v': c = RTARROW; break; /* keypad right on pc ncsa telnet */
+ case 'v': c = RTARROW; break; /* keypad right on pc ncsa telnet */
case 'D': c = LTARROW; break;
- case 't': c = LTARROW; break; /* keypad left on pc ncsa telnet */
- case 'y': c = PGUP; break; /* keypad on pc ncsa telnet */
- case 's': c = PGDOWN; break; /* keypad on pc ncsa telnet */
- case 'w': c = HOME; break; /* keypad on pc ncsa telnet */
- case 'q': c = END_KEY; break; /* keypad on pc ncsa telnet */
+ case 't': c = LTARROW; break; /* keypad left on pc ncsa telnet */
+ case 'y': c = PGUP; break; /* keypad on pc ncsa telnet */
+ case 's': c = PGDOWN; break; /* keypad on pc ncsa telnet */
+ case 'w': c = HOME; break; /* keypad on pc ncsa telnet */
+ case 'q': c = END_KEY; break; /* keypad on pc ncsa telnet */
case 'M':
-#ifdef USE_SLANG_MOUSE
+#if defined(USE_SLANG) && defined(USE_MOUSE)
if (found_CSI(c,b))
{
- c = sl_read_mouse_event ();
+ c = sl_read_mouse_event (code);
}
else
#endif
- c = '\n'; /* keypad enter on pc ncsa telnet */
+ c = '\n'; /* keypad enter on pc ncsa telnet */
break;
case 'm':
#ifdef VMS
if (b != 'O')
#endif /* VMS */
- c = '-'; /* keypad on pc ncsa telnet */
+ c = '-'; /* keypad on pc ncsa telnet */
break;
case 'k':
if (b == 'O')
- c = '+'; /* keypad + on my xterminal :) */
+ c = '+'; /* keypad + on my xterminal :) */
+ else
+ done_esc = FALSE; /* we have another look below - kw */
break;
case 'l':
#ifdef VMS
if (b != 'O')
#endif /* VMS */
- c = '+'; /* keypad on pc ncsa telnet */
+ c = '+'; /* keypad on pc ncsa telnet */
break;
case 'P':
#ifdef VMS
@@ -1253,17 +1757,19 @@ re_read:
#ifdef VMS
if (b != 'O')
#endif /* VMS */
- c = F1; /* macintosh help button */
+ c = F1; /* macintosh help button */
break;
case 'p':
#ifdef VMS
if (b == 'O')
#endif /* VMS */
- c = '0'; /* keypad 0 */
+ c = '0'; /* keypad 0 */
break;
- case '1': /** VTxxx Find **/
+ case '1': /** VTxxx Find **/
if (found_CSI(c,b) && (d=GetChar()) == '~')
c = FIND_KEY;
+ else
+ done_esc = FALSE; /* we have another look below - kw */
break;
case '2':
if (found_CSI(c,b)) {
@@ -1280,22 +1786,32 @@ re_read:
d = -1;
}
}
+ else
+ done_esc = FALSE; /* we have another look below - kw */
break;
case '3': /** VTxxx Delete **/
if (found_CSI(c,b) && (d=GetChar()) == '~')
c = REMOVE_KEY;
+ else
+ done_esc = FALSE; /* we have another look below - kw */
break;
case '4': /** VTxxx Select **/
if (found_CSI(c,b) && (d=GetChar()) == '~')
c = SELECT_KEY;
+ else
+ done_esc = FALSE; /* we have another look below - kw */
break;
case '5': /** VTxxx PrevScreen **/
if (found_CSI(c,b) && (d=GetChar()) == '~')
c = PGUP;
+ else
+ done_esc = FALSE; /* we have another look below - kw */
break;
case '6': /** VTxxx NextScreen **/
if (found_CSI(c,b) && (d=GetChar()) == '~')
c = PGDOWN;
+ else
+ done_esc = FALSE; /* we have another look below - kw */
break;
case '[': /** Linux F1-F5: ^[[[A etc. **/
if (found_CSI(c,b)) {
@@ -1303,16 +1819,52 @@ re_read:
c = F1;
break;
}
+ /* FALLTHRU */
default:
- CTRACE(tfp,"Unknown key sequence: %d:%d:%d\n",c,b,a);
+ if (c == CH_ESC && a == b && !found_CSI(c,b)) {
+ current_modifier = LKC_MOD2;
+ c = a;
+ /* We're not yet done if ESC + curses-keysym: */
+ done_esc = (BOOL) ((a & ~0xFF) == 0);
+ break;
+ }
+ CTRACE((tfp,"Unknown key sequence: %d:%d:%d\n",c,b,a));
CTRACE_SLEEP(MessageSecs);
break;
}
if (isdigit(a) && found_CSI(c,b) && d != -1 && d != '~')
d = GetChar();
+ if (!done_esc && (a & ~0xFF) == 0) {
+ if (a == b && !found_CSI(c,b) && c == CH_ESC) {
+ current_modifier = LKC_MOD2;
+ c = a;
+ done_esc = TRUE;
+ } else {
+ done_esc = TRUE;
+ }
+ }
}
+#ifdef USE_KEYMAPS
+ /* Extract a single code if two are merged: */
+ if (c >= 0 && (c&LKC_ISLECLAC)) {
+ if (!(code == FOR_INPUT || code == FOR_PROMPT))
+ c = LKC2_TO_LKC(c);
+ } else if (c >= 0 && (c&LKC_ISLKC)) {
+ c &= ~LKC_ISLKC;
+ done_esc = TRUE; /* already a lynxkeycode, skip keypad switches - kw */
+ }
+ if (c >= 0 && LKC_HAS_ESC_MOD(c)) {
+ current_modifier = LKC_MOD2;
+ c &= LKC_MASK;
+ }
+ if (c >= 0 && (c&(LKC_ISLECLAC|LKC_ISLAC))) {
+ done_esc = TRUE; /* already a lynxactioncode, skip keypad switches - iz */
+ }
+#endif
+ if (done_esc) {
+ /* don't do keypad() switches below, we already got it - kw */
+ } else {
#if HAVE_KEYPAD
- else {
/*
* Convert keypad() mode keys into Lynx defined keys.
*/
@@ -1326,24 +1878,45 @@ re_read:
case KEY_LEFT:
c = LTARROW;
break;
- case KEY_RIGHT: /* ... */
+ case KEY_RIGHT: /* ... */
c = RTARROW;
break;
+#if defined(SH_EX) && defined(DOSPATH) /* for NEC PC-9800 1998/08/30 (Sun) 21:50:35 */
+ case KEY_C2:
+ c = DNARROW;
+ break;
+ case KEY_A2:
+ c = UPARROW;
+ break;
+ case KEY_B1:
+ c = LTARROW;
+ break;
+ case KEY_B3:
+ c = RTARROW;
+ break;
+ case PAD0: /* PC-9800 Ins */
+ c = INSERT_KEY;
+ break;
+ case PADSTOP: /* PC-9800 DEL */
+ c = REMOVE_KEY;
+ break;
+#endif /* SH_EX */
case KEY_HOME: /* Home key (upward+left arrow) */
c = HOME;
break;
- case KEY_CLEAR: /* Clear screen */
+ case KEY_CLEAR: /* Clear screen */
c = 18; /* CTRL-R */
break;
- case KEY_NPAGE: /* Next page */
+ case KEY_NPAGE: /* Next page */
c = PGDOWN;
break;
- case KEY_PPAGE: /* Previous page */
+ case KEY_PPAGE: /* Previous page */
c = PGUP;
break;
case KEY_LL: /* home down or bottom (lower left) */
c = END_KEY;
break;
+#if defined(KEY_A1) && defined(KEY_C3)
/* The keypad is arranged like this:*/
/* a1 up a3 */
/* left b2 right */
@@ -1363,6 +1936,7 @@ re_read:
case KEY_C3: /* lower right of keypad */
c = PGDOWN;
break;
+#endif /* defined(KEY_A1) && defined(KEY_C3) */
#ifdef KEY_ENTER
case KEY_ENTER: /* enter/return */
c = '\n';
@@ -1426,94 +2000,266 @@ re_read:
c = BACKTAB_KEY; /* Back tab, often Shift-Tab */
break;
#endif /* KEY_BTAB */
+#ifdef KEY_RESIZE
+ case KEY_RESIZE: /* size change detected by ncurses */
+#if HAVE_SIZECHANGE || defined(USE_SLANG)
+ /* Make call to detect new size, if that may be implemented.
+ * The call may set recent_sizechange (except for USE_SLANG),
+ * which will tell mainloop() to refresh. - kw
+ */
+ CTRACE((tfp, "Got KEY_RESIZE, recent_sizechange so far is %d\n",
+ recent_sizechange));
+ size_change(0);
+ CTRACE((tfp, "Now recent_sizechange is %d\n", recent_sizechange));
+#else /* HAVE_SIZECHANGE || USE_SLANG */
+ CTRACE((tfp, "Got KEY_RESIZE, recent_sizechange is %d\n",
+ recent_sizechange));
+#endif /* HAVE_SIZECHANGE || USE_SLANG */
+ if (!recent_sizechange) {
+#if 0 /* assumption seems flawed? */
+ /* Not detected by us or already processed by us. It can
+ * happens that ncurses lags behind us in detecting the
+ * change, since its own SIGTSTP handler is not installed
+ * so detecting happened *at the end* of the last refresh.
+ * Tell it to refresh again... - kw
+ */
+ LYrefresh();
+#endif
+#if defined(NCURSES)
+ /*
+ * Work-around for scenario (Linux libc5) where we got a
+ * recent sizechange before reading KEY_RESIZE. If we do
+ * not reset the flag, we'll next get an EOF read, which
+ * causes Lynx to exit.
+ */
+ recent_sizechange = TRUE;
+#endif
+ /*
+ * May be just the delayed effect of mainloop()'s call
+ * to resizeterm(). Pretend we haven't read anything
+ * yet, don't return. - kw
+ */
+ goto re_read;
+ }
+ /*
+ * Yep, we agree there was a change. Return now so that
+ * the caller can react to it. - kw
+ */
+ c = DO_NOTHING;
+ break;
+#endif /* KEY_RESIZE */
/* The following maps PDCurses keys away from lynx reserved values */
#if (defined(_WINDOWS) || defined(__DJGPP__)) && !defined(USE_SLANG)
case KEY_F(2):
- c = 0x213;
- break;
+ c = 0x213;
+ break;
case KEY_F(3):
- c = 0x214;
- break;
+ c = 0x214;
+ break;
case KEY_F(4):
- c = 0x215;
- break;
+ c = 0x215;
+ break;
case KEY_F(5):
- c = 0x216;
- break;
+ c = 0x216;
+ break;
case KEY_F(6):
- c = 0x217;
- break;
+ c = 0x217;
+ break;
case KEY_F(7):
- c = 0x218;
- break;
+ c = 0x218;
+ break;
#endif /* PDCurses */
-#ifdef NCURSES_MOUSE_VERSION
+
+#if defined(USE_MOUSE)
+/********************************************************************/
+
+#if defined(NCURSES) || defined(PDCURSES)
case KEY_MOUSE:
+ CTRACE((tfp, "KEY_MOUSE\n"));
if (code == FOR_CHOICE) {
c = MOUSE_KEY; /* Will be processed by the caller */
- } else {
-#ifndef DOSPATH
+ }
+#if defined(NCURSES)
+ else if (code == FOR_SINGLEKEY) {
+ MEVENT event;
+ getmouse(&event); /* Completely ignore event - kw */
+ c = DO_NOTHING;
+ }
+#endif
+ else {
+#if defined(NCURSES)
MEVENT event;
int err;
+ int lac = LYK_UNKNOWN;
c = -1;
mouse_link = -1;
err = getmouse(&event);
+ if (err != OK) {
+ CTRACE((tfp, "Mouse error: no event available!\n"));
+ return(code==FOR_PANEL ? 0 : DO_NOTHING);
+ }
levent = event; /* Allow setting pos in entry fields */
if (event.bstate & BUTTON1_CLICKED) {
- c = set_clicked_link(event.x, event.y, code);
+ c = set_clicked_link(event.x, event.y, code, 1);
} else if (event.bstate & BUTTON1_DOUBLE_CLICKED) {
- c = set_clicked_link(event.x, event.y, code);
- if (c == PGDOWN)
- c = END_KEY;
- else if (c == PGUP)
- c = HOME;
- else if (c == LTARROW)
- c = LYReverseKeymap(LYK_MAIN_MENU);
+ c = set_clicked_link(event.x, event.y, code, 2);
+ if (c == LAC_TO_LKC0(LYK_SUBMIT) && code == FOR_INPUT)
+ lac = LYK_SUBMIT;
} else if (event.bstate & BUTTON3_CLICKED) {
- c = LYReverseKeymap (LYK_PREV_DOC);
+ c = LAC_TO_LKC0(LYK_PREV_DOC);
+ } else if (code == FOR_PROMPT
+ /* Cannot ignore: see LYCurses.c */
+ || (event.bstate &
+ ( BUTTON1_PRESSED | BUTTON1_RELEASED
+ | BUTTON2_PRESSED | BUTTON2_RELEASED
+ | BUTTON3_PRESSED | BUTTON3_RELEASED))) {
+ /* Completely ignore - don't return anything, to
+ avoid canceling the prompt - kw */
+ goto re_read;
} else if (event.bstate & BUTTON2_CLICKED) {
int atlink;
- c = set_clicked_link(event.x, event.y, code);
- atlink = c == LYReverseKeymap (LYK_ACTIVATE);
+ c = set_clicked_link(event.x, event.y, code, 1);
+ atlink = (c == LAC_TO_LKC0(LYK_ACTIVATE));
if (!atlink)
mouse_link = -1; /* Forget about approx stuff. */
- c = LYmouse_menu(event.x, event.y, atlink);
- if (c == LYK_ACTIVATE && mouse_link == -1) {
- HTAlert("No link chosen");
- c = LYK_DO_NOTHING;
- c = LYK_REFRESH; /* refresh() below does not work... */
+ lac = LYmouse_menu(event.x, event.y, atlink, code);
+ if (lac == LYK_SUBMIT) {
+ if (mouse_link == -1)
+ lac = LYK_ACTIVATE;
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ else if (mouse_link >= 0 &&
+ textfields_need_activation &&
+ links[mouse_link].type == WWW_FORM_LINK_TYPE &&
+ F_TEXTLIKE(links[mouse_link].form->type))
+ lac = LYK_ACTIVATE;
+#endif
+ }
+ if (lac == LYK_ACTIVATE && mouse_link == -1) {
+ HTAlert(gettext("No link chosen"));
+ lac = LYK_REFRESH;
}
- c = LYReverseKeymap(c);
+ c = LAC_TO_LKC(lac);
+#if 0 /* Probably not necessary any more - kw */
lynx_force_repaint();
- refresh();
+ LYrefresh();
+#endif
}
- if (code == FOR_INPUT && mouse_link == -1) {
+ if (code == FOR_INPUT && mouse_link == -1 &&
+ lac != LYK_REFRESH && lac != LYK_SUBMIT) {
ungetmouse(&event); /* Caller will process this. */
- getch(); /* ungetmouse puts KEY_MOUSE back */
+ wgetch(LYwin); /* ungetmouse puts KEY_MOUSE back */
c = MOUSE_KEY;
}
#else /* pdcurses version */
+
+ /* _WINDOWS 1997/10/18 (Sat) 19:41:59 */
+
+#define H_CMD_AREA 6
+#define HIST_CMD_2 12
+#define V_CMD_AREA 1
+
+ int left = H_CMD_AREA;
+ int right = (LYcols - H_CMD_AREA);
+ /* yes, I am assuming that my screen will be a certain width. */
+
+ int tick_count;
+ char *p = NULL;
+ char mouse_info[128];
+ static int old_click = 0; /* [m Sec] */
+
c = -1;
mouse_link = -1;
- request_mouse_pos();
- if (BUTTON_STATUS(1) & BUTTON_CLICKED) {
- c = set_clicked_link(MOUSE_X_POS, MOUSE_Y_POS, FOR_PANEL);
- } else if (BUTTON_STATUS(3) & BUTTON_CLICKED) {
- c = LYReverseKeymap (LYK_PREV_DOC);
+
+ if (system_is_NT) {
+ /* for Windows NT */
+ request_mouse_pos();
+
+ if (BUTTON_STATUS(1) & BUTTON_PRESSED) {
+ if (MOUSE_Y_POS > (LYlines - V_CMD_AREA)) {
+ /* Screen BOTTOM */
+ if (MOUSE_X_POS < left) {
+ c = LTARROW; p = "<-";
+ } else if (MOUSE_X_POS < HIST_CMD_2) {
+ c = RTARROW; p = "->";
+ } else if (MOUSE_X_POS > right) {
+ c = 'z'; p = "Cancel";
+ } else {
+ c = PGDOWN; p = "PGDOWN";
+ }
+ } else if (MOUSE_Y_POS < V_CMD_AREA) {
+ /* Screen TOP */
+ if (MOUSE_X_POS < left) {
+ c = LTARROW; p = "<-";
+ } else if (MOUSE_X_POS < HIST_CMD_2) {
+ c = RTARROW; p = "->";
+ } else if (MOUSE_X_POS > right) {
+ c = 'z'; p = "Cancel";
+ } else {
+ c = PGUP; p = "PGUP";
+ }
+ } else {
+ c = set_clicked_link(MOUSE_X_POS, MOUSE_Y_POS, FOR_PANEL, 1);
+ }
+ }
+ } else {
+ /* for Windows 95 */
+ tick_count = GetTickCount();
+
+ /* Guard Mouse button miss click */
+ if ((tick_count - old_click) < 700) {
+ c = DO_NOTHING;
+ break;
+ } else {
+ old_click = tick_count;
+ }
+ request_mouse_pos();
+ if (MOUSE_Y_POS > (LYlines - V_CMD_AREA)) {
+ /* Screen BOTTOM */
+ if (MOUSE_X_POS < left) {
+ c = LTARROW; p = "<-";
+ } else if (MOUSE_X_POS < HIST_CMD_2) {
+ c = RTARROW; p = "->";
+ } else if (MOUSE_X_POS > right) {
+ c = '\b'; p = "History";
+ } else {
+ c = PGDOWN; p = "PGDOWN";
+ }
+ } else if (MOUSE_Y_POS < V_CMD_AREA) {
+ /* Screen TOP */
+ if (MOUSE_X_POS < left) {
+ c = LTARROW; p = "<-";
+ } else if (MOUSE_X_POS < HIST_CMD_2) {
+ c = RTARROW; p = "->";
+ } else if (MOUSE_X_POS > right) {
+ c = 'z'; p = "Cancel";
+ } else {
+ c = PGUP; p = "PGUP";
+ }
+ } else {
+ c = set_clicked_link(MOUSE_X_POS, MOUSE_Y_POS, FOR_PANEL, 1);
+ }
}
-#endif /* DOSPATH */
+ if (p && c != -1) {
+ sprintf(mouse_info, "Mouse = 0x%x, [%s]", c, p);
+ SetConsoleTitle(mouse_info);
+ }
+#endif /* !(WIN_EX) */
+ if ((c+1) >= KEYMAP_SIZE && (c&LKC_ISLAC))
+ return(c);
}
break;
-#endif /* NCURSES_MOUSE_VERSION */
+#endif /* NCURSES || PDCURSES */
+
+/********************************************************************/
+#endif /* USE_MOUSE */
+
}
- }
#endif /* HAVE_KEYPAD */
#ifdef DJGPP_KEYHANDLER
- else {
switch(c) {
case K_Down: /* The four arrow keys ... */
case K_EDown:
@@ -1527,7 +2273,7 @@ re_read:
case K_ELeft:
c = LTARROW;
break;
- case K_Right: /* ... */
+ case K_Right: /* ... */
case K_ERight:
c = RTARROW;
break;
@@ -1535,11 +2281,11 @@ re_read:
case K_EHome:
c = HOME;
break;
- case K_PageDown: /* Next page */
+ case K_PageDown: /* Next page */
case K_EPageDown:
c = PGDOWN;
break;
- case K_PageUp: /* Previous page */
+ case K_PageUp: /* Previous page */
case K_EPageUp:
c = PGUP;
break;
@@ -1571,10 +2317,8 @@ re_read:
c = BACKTAB_KEY;
break;
}
- }
#endif /* DGJPP_KEYHANDLER */
-#if defined(USE_SLANG) && defined(__DJGPP__) && !defined(DJGPP_KEYHANDLER) && !defined(USE_KEYMAPS)
- else {
+#if defined(USE_SLANG) && (defined(__DJGPP__) || defined(__CYGWIN__)) && !defined(DJGPP_KEYHANDLER) && !defined(USE_KEYMAPS)
switch(c) {
case SL_KEY_DOWN: /* The four arrow keys ... */
c = DNARROW;
@@ -1585,18 +2329,18 @@ re_read:
case SL_KEY_LEFT:
c = LTARROW;
break;
- case SL_KEY_RIGHT: /* ... */
+ case SL_KEY_RIGHT: /* ... */
c = RTARROW;
break;
case SL_KEY_HOME: /* Home key (upward+left arrow) */
case SL_KEY_A1: /* upper left of keypad */
c = HOME;
break;
- case SL_KEY_NPAGE: /* Next page */
+ case SL_KEY_NPAGE: /* Next page */
case SL_KEY_C3: /* lower right of keypad */
c = PGDOWN;
break;
- case SL_KEY_PPAGE: /* Previous page */
+ case SL_KEY_PPAGE: /* Previous page */
case SL_KEY_A3: /* upper right of keypad */
c = PGUP;
break;
@@ -1614,9 +2358,11 @@ re_read:
c = REMOVE_KEY;
break;
}
- }
#endif /* USE_SLANG && __DJGPP__ && !DJGPP_KEYHANDLER && !USE_KEYMAPS */
+ }
+ if (c&(LKC_ISLAC|LKC_ISLECLAC))
+ return(c);
if ((c+1) >= KEYMAP_SIZE) {
/*
* Don't return raw values for KEYPAD symbols which we may have
@@ -1625,44 +2371,115 @@ re_read:
*/
return (0);
} else {
- return(c);
+ return(c|current_modifier);
}
}
+/************************************************************************/
#endif /* NOT defined(USE_KEYMAPS) && defined(USE_SLANG) */
+
+PUBLIC int LYgetch NOARGS
+{
+ return LYReadCmdKey(FOR_PANEL);
+}
+
+/*
+ * Read a single keystroke, allows mouse-selection.
+ */
+PUBLIC int LYgetch_choice NOARGS
+{
+ int ch = LYReadCmdKey(FOR_CHOICE);
+ if (ch == LYCharINTERRUPT1)
+ ch = LYCharINTERRUPT2; /* treat ^C the same as ^G */
+ return ch;
+}
+
+/*
+ * Read a single keystroke, allows mouse events.
+ */
+PUBLIC int LYgetch_input NOARGS
+{
+ int ch = LYReadCmdKey(FOR_INPUT);
+ if (ch == LYCharINTERRUPT1)
+ ch = LYCharINTERRUPT2; /* treat ^C the same as ^G */
+ return ch;
+}
+
+/*
+ * Read a single keystroke, ignoring case by translating it to uppercase.
+ * Ignore mouse events, if any.
+ */
+PUBLIC int LYgetch_single NOARGS
+{
+ int ch = LYReadCmdKey(FOR_SINGLEKEY);
+ if (ch == LYCharINTERRUPT1)
+ ch = LYCharINTERRUPT2; /* treat ^C the same as ^G */
+ else if (ch > 0 && ch < 256)
+ ch = TOUPPER(ch); /* will ignore case of result */
+ return ch;
+}
+
/*
* Convert a null-terminated string to lowercase
*/
PUBLIC void LYLowerCase ARGS1(
- char *, buffer)
+ char *, arg_buffer)
{
+ register unsigned char *buffer = (unsigned char *) arg_buffer;
size_t i;
for (i = 0; buffer[i]; i++)
+#ifdef SUPPORT_MULTIBYTE_EDIT /* 1998/11/23 (Mon) 17:04:55 */
+ {
+ if (buffer[i] & 0x80) {
+ if ((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH((buffer[i])))) {
+ continue;
+ }
+ i++;
+ } else {
+ buffer[i] = UCH(TOLOWER(buffer[i]));
+ }
+ }
+#else
buffer[i] = TOLOWER(buffer[i]);
+#endif
}
/*
* Convert a null-terminated string to uppercase
*/
PUBLIC void LYUpperCase ARGS1(
- char *, buffer)
+ char *, arg_buffer)
{
+ register unsigned char *buffer = (unsigned char *) arg_buffer;
size_t i;
for (i = 0; buffer[i]; i++)
- buffer[i] = TOUPPER(buffer[i]);
+#ifdef SUPPORT_MULTIBYTE_EDIT /* 1998/11/23 (Mon) 17:05:10 */
+ {
+ if (buffer[i] & 0x80) {
+ if ((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH((buffer[i])))) {
+ continue;
+ }
+ i++;
+ } else {
+ buffer[i] = UCH(TOUPPER(buffer[i]));
+ }
+ }
+#else
+ buffer[i] = UCH(TOUPPER(buffer[i]));
+#endif
}
/*
* Remove ALL whitespace from a string (including embedded blanks).
*/
PUBLIC void LYRemoveBlanks ARGS1(
- char *, buffer)
+ char *, buffer)
{
if (buffer != 0) {
size_t i, j;
for (i = j = 0; buffer[i]; i++)
- if (!isspace((unsigned char)(buffer[i])))
+ if (!isspace(UCH((buffer[i]))))
buffer[j++] = buffer[i];
buffer[j] = 0;
}
@@ -1672,9 +2489,9 @@ PUBLIC void LYRemoveBlanks ARGS1(
* Skip whitespace
*/
PUBLIC char * LYSkipBlanks ARGS1(
- char *, buffer)
+ char *, buffer)
{
- while (isspace((unsigned char)(*buffer)))
+ while (isspace(UCH((*buffer))))
buffer++;
return buffer;
}
@@ -1683,9 +2500,9 @@ PUBLIC char * LYSkipBlanks ARGS1(
* Skip non-whitespace
*/
PUBLIC char * LYSkipNonBlanks ARGS1(
- char *, buffer)
+ char *, buffer)
{
- while (*buffer != 0 && !isspace((unsigned char)(*buffer)))
+ while (*buffer != 0 && !isspace(UCH((*buffer))))
buffer++;
return buffer;
}
@@ -1696,7 +2513,7 @@ PUBLIC char * LYSkipNonBlanks ARGS1(
PUBLIC CONST char * LYSkipCBlanks ARGS1(
CONST char *, buffer)
{
- while (isspace((unsigned char)(*buffer)))
+ while (isspace(UCH((*buffer))))
buffer++;
return buffer;
}
@@ -1707,7 +2524,7 @@ PUBLIC CONST char * LYSkipCBlanks ARGS1(
PUBLIC CONST char * LYSkipCNonBlanks ARGS1(
CONST char *, buffer)
{
- while (*buffer != 0 && !isspace((unsigned char)(*buffer)))
+ while (*buffer != 0 && !isspace(UCH((*buffer))))
buffer++;
return buffer;
}
@@ -1716,7 +2533,7 @@ PUBLIC CONST char * LYSkipCNonBlanks ARGS1(
* Trim leading blanks from a string
*/
PUBLIC void LYTrimLeading ARGS1(
- char *, buffer)
+ char *, buffer)
{
char *skipped = LYSkipBlanks(buffer);
while ((*buffer++ = *skipped++) != 0)
@@ -1727,13 +2544,42 @@ PUBLIC void LYTrimLeading ARGS1(
* Trim trailing blanks from a string
*/
PUBLIC void LYTrimTrailing ARGS1(
- char *, buffer)
+ char *, buffer)
{
size_t i = strlen(buffer);
- while (i != 0 && isspace((unsigned char)buffer[i-1]))
+ while (i != 0 && isspace(UCH(buffer[i-1])))
buffer[--i] = 0;
}
+/* 1997/11/10 (Mon) 14:26:10, originally string_short() in LYExterns.c, but
+ * moved here because LYExterns is not always configured.
+ */
+PUBLIC char *LYElideString ARGS2(
+ char *, str,
+ int, cut_pos)
+{
+ char buff[MAX_LINE], *s, *d;
+ static char s_str[MAX_LINE];
+ int len;
+
+ LYstrncpy(buff, str, sizeof(buff)-1);
+ len = strlen(buff);
+ if (len > (LYcols - 10)) {
+ buff[cut_pos] = '.';
+ buff[cut_pos + 1] = '.';
+ for (s = (buff + len) - (LYcols - 10) + cut_pos + 1,
+ d = (buff + cut_pos) + 2;
+ s >= buff &&
+ d >= buff &&
+ d < buff + LYcols &&
+ (*d++ = *s++) != 0; )
+ ;
+ buff[LYcols] = 0;
+ }
+ strcpy(s_str, buff);
+ return (s_str);
+}
+
/*
* Trim a startfile, returning true if it looks like one of the Lynx tags.
*/
@@ -1761,23 +2607,23 @@ PUBLIC BOOLEAN LYTrimStartfile ARGS1(
* Escape unsafe characters in startfile, except for lynx internal URLs.
*/
PUBLIC void LYEscapeStartfile ARGS1(
- char **, buffer)
+ char **, buffer)
{
- if (!LYTrimStartfile(*buffer)) {
+ if (!LYTrimStartfile(*buffer)) {
char *escaped = HTEscapeUnsafe(*buffer);
StrAllocCopy(*buffer, escaped);
FREE(escaped);
- }
+ }
}
/*
* Trim all blanks from startfile, except for lynx internal URLs.
*/
PUBLIC void LYTrimAllStartfile ARGS1(
- char *, buffer)
+ char *, buffer)
{
if (!LYTrimStartfile(buffer)) {
- LYRemoveBlanks(buffer);
+ LYRemoveBlanks(buffer);
}
}
@@ -1798,10 +2644,17 @@ PUBLIC void LYTrimAllStartfile ARGS1(
#define DspWdth edit->dspwdth
#define DspStart edit->xpan
#define Margin edit->margin
+#ifdef ENHANCED_LINEEDIT
+#define Mark edit->mark
+#endif
+
+#ifdef ENHANCED_LINEEDIT
+PRIVATE char killbuffer[1024] = "\0";
+#endif
PUBLIC void LYSetupEdit ARGS4(
EDREC *, edit,
- char *, old,
+ char *, old,
int, maxstr,
int, maxdsp)
{
@@ -1812,12 +2665,15 @@ PUBLIC void LYSetupEdit ARGS4(
edit->pad = ' ';
edit->dirty = TRUE;
edit->panon = FALSE;
+ edit->current_modifiers = 0;
- StrLen = strlen(old);
MaxLen = maxstr;
DspWdth = maxdsp;
Margin = 0;
Pos = strlen(old);
+#ifdef ENHANCED_LINEEDIT
+ Mark = -1; /* pos=0, but do not show it yet */
+#endif
DspStart = 0;
if (maxstr > maxdsp) { /* Need panning? */
@@ -1835,21 +2691,156 @@ PUBLIC void LYSetupEdit ARGS4(
Margin = 10;
}
+ LYstrncpy(edit->buffer, old, maxstr);
+ StrLen = strlen(edit->buffer);
+}
+
+#ifdef SUPPORT_MULTIBYTE_EDIT
+
+PRIVATE int prev_pos ARGS2(
+ EDREC *, edit,
+ int, pos)
+{
+ int i = 0;
+
+ if (pos <= 0)
+ return 0;
+ if (HTCJK == NOCJK)
+ return (pos - 1);
+ else {
+ while (i < pos - 1) {
+ int c;
+ c = Buf[i];
+ if (!(isascii(c) ||
+ ((kanji_code == SJIS) && IS_SJIS_X0201KANA(UCH(c))))) {
+ i++;
+ }
+ i++;
+ }
+ if (i == pos)
+ return (i - 2);
+ else
+ return i;
+ }
+}
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+
+#ifdef EXP_KEYBOARD_LAYOUT
+static int map_active = 0;
+#else
+#define map_active 0
+#endif
+
+PUBLIC int LYEditInsert ARGS5(
+ EDREC *, edit,
+ unsigned char *,s,
+ int, len,
+ int, map,
+ BOOL, maxMessage)
+{
+ int length = strlen(Buf);
+ int remains = MaxLen - (length + len);
+ int edited = 0, overflow = 0;
+
/*
- * We expect the called function to pass us a default (old) value
- * with a length that is less than or equal to maxstr, and to
- * handle any messaging associated with actions to achieve that
- * requirement. However, in case the calling function screwed
- * up, we'll check it here, and ensure that no buffer overrun can
- * occur by loading only as much of the head as fits. - FM
+ * ch is (presumably) printable character.
*/
- if (strlen(old) >= (unsigned)maxstr) {
- strncpy(edit->buffer, old, maxstr);
- edit->buffer[maxstr] = '\0';
- StrLen = maxstr;
- } else {
- strcpy(edit->buffer, old);
+ if (remains < 0) {
+ overflow = 1;
+ len = 0;
+ if (MaxLen > length) /* Insert as much as we can */
+ len = MaxLen - length;
+ else
+ goto finish;
}
+ Buf[length + len] = '\0';
+ for(; length >= Pos; length--) /* Make room */
+ Buf[length + len] = Buf[length];
+#ifdef EXP_KEYBOARD_LAYOUT
+ if (map < 0)
+ map = map_active;
+ if (map && LYCharSet_UC[current_char_set].enc == UCT_ENC_UTF8) {
+ int off = Pos;
+ unsigned char *e = s + len;
+ char *tail = 0;
+
+ while (s < e) {
+ char utfbuf[8];
+ int l = 1;
+
+ utfbuf[0] = *s;
+ if ( *s < 128 && LYKbLayouts[current_layout][*s] ) {
+ UCode_t ucode = LYKbLayouts[current_layout][*s];
+
+ if (ucode > 127) {
+ if (UCConvertUniToUtf8(ucode, utfbuf)) {
+ l = strlen(utfbuf);
+ remains -= l - 1;
+ if (remains < 0) {
+ if (tail)
+ strcpy(Buf + off, tail);
+ FREE(tail);
+ len = off;
+ overflow = 1;
+ goto finish;
+ }
+ if (l > 1 && !tail)
+ StrAllocCopy(tail, Buf + Pos + len);
+ } else
+ utfbuf[0] = '?';
+ } else
+ utfbuf[0] = UCH(ucode);
+ }
+ strncpy(Buf + off, utfbuf, l);
+ edited = 1;
+ off += l;
+ s++;
+ }
+ if (tail)
+ strcpy(Buf + off, tail);
+ len = off - Pos;
+ FREE(tail);
+ } else if (map) {
+ unsigned char *e = s + len, *t = (unsigned char *)Buf + Pos;
+
+ while (s < e) {
+ int ch;
+
+ if ( *s < 128 && LYKbLayouts[current_layout][*s] ) {
+ ch = UCTransUniChar(LYKbLayouts[current_layout][*s],
+ current_char_set);
+ if (ch < 0)
+ ch = '?';
+ } else
+ ch = *s;
+ *t = UCH(ch);
+ t++, s++;
+ }
+ edited = 1;
+ }
+ else
+#endif /* defined EXP_KEYBOARD_LAYOUT */
+ {
+ strncpy(Buf + Pos, (char *) s, len);
+ edited = 1;
+ }
+
+ finish:
+ Pos += len;
+ StrLen += len;
+ if (edited)
+ edit->dirty = TRUE;
+ if (overflow && maxMessage)
+ _statusline(MAXLEN_REACHED_DEL_OR_MOV);
+#ifdef ENHANCED_LINEEDIT
+ if (Mark > Pos)
+ Mark += len;
+ else if (Mark < -1 - Pos)
+ Mark -= len;
+ if (Mark >= 0)
+ Mark = -1 - Mark; /* Disable it */
+#endif
+ return edited;
}
PUBLIC int LYEdit1 ARGS4(
@@ -1858,13 +2849,12 @@ PUBLIC int LYEdit1 ARGS4(
int, action,
BOOL, maxMessage)
{ /* returns 0 character processed
- * ch otherwise
+ * -ch if action should be performed outside of line-editing mode
+ * ch otherwise
*/
int i;
int length;
-#ifdef EXP_KEYBOARD_LAYOUT
- static int map_active = 0;
-#endif
+ unsigned char uch;
if (MaxLen <= 0)
return(0); /* Be defensive */
@@ -1881,6 +2871,7 @@ PUBLIC int LYEdit1 ARGS4(
map_active = ~map_active;
break;
#endif
+#ifndef CJK_EX
case LYE_AIX:
/*
* Hex 97.
@@ -1888,30 +2879,53 @@ PUBLIC int LYEdit1 ARGS4(
* character in the current display character set.
* Otherwise, we treat this as LYE_ENTER.
*/
- if (HTCJK == NOCJK && LYlowest_eightbit[current_char_set] > 0x97)
- return(ch);
- case LYE_CHAR:
-#ifdef EXP_KEYBOARD_LAYOUT
- if (map_active && ch < 128 && ch >= 0 &&
- LYKbLayouts[current_layout][ch])
- ch = UCTransUniChar((long) LYKbLayouts[current_layout][ch],
- current_char_set);
+ if (HTCJK == NOCJK && LYlowest_eightbit[current_char_set] > 0x97)
+ return(ch);
+ /* FALLTHRU */
#endif
+ case LYE_CHAR:
+ uch = UCH(ch);
+ LYEditInsert(edit, &uch, 1, map_active, maxMessage);
+ return 0; /* All changes already registered */
+
+ case LYE_C1CHAR:
/*
- * ch is printable or ISO-8859-1 escape character.
+ * ch is the second part (in most cases, a capital letter) of
+ * a 7-bit replacement for a character in the 8-bit C1 control
+ * range.
+ * This is meant to undo transformations like
+ * 0x81 -> 0x1b 0x41 (ESC A) etc. done by slang on Unix and
+ * possibly some comm programs. It's an imperfect workaround
+ * that doesn't work for all such characters.
*/
+ ch &= 0xFF;
+ if (ch + 64 >= LYlowest_eightbit[current_char_set])
+ ch += 64;
+
if (Pos <= (MaxLen) && StrLen < (MaxLen)) {
+#ifdef ENHANCED_LINEEDIT
+ if (Mark > Pos)
+ Mark++;
+ else if (Mark < -1 - Pos)
+ Mark--;
+ if (Mark >= 0)
+ Mark = -1 - Mark; /* Disable it */
+#endif
for(i = length; i >= Pos; i--) /* Make room */
Buf[i+1] = Buf[i];
Buf[length+1]='\0';
- Buf[Pos] = (unsigned char) ch;
+ Buf[Pos] = UCH(ch);
Pos++;
- } else if (maxMessage) {
+ } else {
+ if (maxMessage) {
_statusline(MAXLEN_REACHED_DEL_OR_MOV);
}
+ return(ch);
+ }
break;
case LYE_BACKW:
+#ifndef SUPPORT_MULTIBYTE_EDIT
/*
* Backword.
* Definition of word is very naive: 1 or more a/n characters.
@@ -1920,16 +2934,60 @@ PUBLIC int LYEdit1 ARGS4(
Pos--;
while (Pos && isalnum(Buf[Pos-1]))
Pos--;
+#else /* SUPPORT_MULTIBYTE_EDIT */
+ /*
+ * Backword.
+ * Definition of word is very naive: 1 or more a/n characters,
+ * or 1 or more multibyte character.
+ */
+ {
+ int pos0;
+
+ pos0 = prev_pos(edit, Pos);
+ while (Pos &&
+ (HTCJK == NOCJK || isascii(Buf[pos0])) &&
+ !isalnum(UCH(Buf[pos0]))) {
+ Pos = pos0;
+ pos0 = prev_pos(edit, Pos);
+ }
+ if (HTCJK != NOCJK && !isascii(Buf[pos0])) {
+ while (Pos && !isascii(Buf[pos0])) {
+ Pos = pos0;
+ pos0 = prev_pos(edit, Pos);
+ }
+ } else {
+ while (Pos
+ && isascii(UCH(Buf[pos0]))
+ && isalnum(UCH(Buf[pos0]))) {
+ Pos = pos0;
+ pos0 = prev_pos(edit, Pos);
+ }
+ }
+ }
+#endif /* SUPPORT_MULTIBYTE_EDIT */
break;
case LYE_FORWW:
/*
* Word forward.
*/
+#ifndef SUPPORT_MULTIBYTE_EDIT
while (isalnum(Buf[Pos]))
Pos++; /* '\0' is not a/n */
while (!isalnum(Buf[Pos]) && Buf[Pos])
Pos++ ;
+#else /* SUPPORT_MULTIBYTE_EDIT */
+ if (HTCJK != NOCJK && !isascii(Buf[Pos])) {
+ while (!isascii(Buf[Pos]))
+ Pos += 2;
+ } else {
+ while (isascii(UCH(Buf[Pos])) && isalnum(UCH(Buf[Pos])))
+ Pos++; /* '\0' is not a/n */
+ }
+ while ((HTCJK == NOCJK || isascii(UCH(Buf[Pos]))) &&
+ !isalnum(UCH(Buf[Pos])) && Buf[Pos])
+ Pos++;
+#endif /* SUPPORT_MULTIBYTE_EDIT */
break;
case LYE_ERASE:
@@ -1937,6 +2995,9 @@ PUBLIC int LYEdit1 ARGS4(
* Erase the line to start fresh.
*/
Buf[0] = '\0';
+#ifdef ENHANCED_LINEEDIT
+ Mark = -1; /* Do not show the mark */
+#endif
/* fall through */
case LYE_BOL:
@@ -1989,7 +3050,7 @@ PUBLIC int LYEdit1 ARGS4(
}
break;
- case LYE_DELEL:
+ case LYE_DELEL: /* @@@ */
/*
* Delete from current cursor position thru EOL.
*/
@@ -2009,6 +3070,10 @@ PUBLIC int LYEdit1 ARGS4(
*/
if (Pos >= length)
break;
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ if (HTCJK != NOCJK && !isascii(Buf[Pos]))
+ Pos++;
+#endif
Pos++;
/* fall through - DO NOT RELOCATE the LYE_DELN case wrt LYE_DELP */
@@ -2016,31 +3081,177 @@ PUBLIC int LYEdit1 ARGS4(
/*
* Delete preceding character.
*/
+#ifndef SUPPORT_MULTIBYTE_EDIT
if (length == 0 || Pos == 0)
break;
+#ifdef ENHANCED_LINEEDIT
+ if (Mark >= 0)
+ Mark = -1 - Mark; /* Disable it */
+ if (Mark <= -1 - Pos)
+ Mark++;
+#endif
Pos--;
for (i = Pos; i < length; i++)
Buf[i] = Buf[i+1];
i--;
+#else /* SUPPORT_MULTIBYTE_EDIT */
+ {
+ int offset = 1;
+ int pos0 = Pos;
+
+ if (length == 0 || Pos == 0)
+ break;
+ if (HTCJK != NOCJK) {
+ Pos = prev_pos(edit, pos0);
+ offset = pos0 - Pos;
+ } else
+ Pos--;
+ for (i = Pos; i < length; i++)
+ Buf[i] = Buf[i + offset];
+ i -= offset;
+#ifdef ENHANCED_LINEEDIT
+ if (Mark >= 0)
+ Mark = -1 - Mark; /* Disable it */
+ if (Mark <= -1 - Pos)
+ Mark += offset;
+#endif
+ }
+#endif /* SUPPORT_MULTIBYTE_EDIT */
Buf[i] = 0;
break;
+ case LYE_FORW_RL:
case LYE_FORW:
/*
* Move cursor to the right.
*/
+#ifndef SUPPORT_MULTIBYTE_EDIT
if (Pos < length)
Pos++;
+#else /* SUPPORT_MULTIBYTE_EDIT */
+ if (Pos < length) {
+ Pos++;
+ if (HTCJK != NOCJK && !isascii(Buf[Pos-1]))
+ Pos++;
+ }
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+ else if (action == LYE_FORW_RL)
+ return -ch;
break;
+ case LYE_BACK_LL:
case LYE_BACK:
/*
* Left-arrow move cursor to the left.
*/
+#ifndef SUPPORT_MULTIBYTE_EDIT
if (Pos > 0)
Pos--;
+#else /* SUPPORT_MULTIBYTE_EDIT */
+ if (Pos > 0) {
+ if (HTCJK != NOCJK)
+ Pos = prev_pos(edit, Pos);
+ else
+ Pos--;
+ }
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+ else if (action == LYE_BACK_LL)
+ return -ch;
+ break;
+
+#ifdef ENHANCED_LINEEDIT
+ case LYE_TPOS:
+ /*
+ * Transpose characters - bash or ksh(emacs not gmacs) style
+ */
+ if (length <= 1 || Pos == 0)
+ return(ch);
+ if (Pos == length)
+ Pos--;
+ if (Mark < 0)
+ Mark = -1 - Mark; /* Temporary enable it */
+ if (Mark == Pos || Mark == Pos+1)
+ Mark = Pos-1;
+ if (Mark >= 0)
+ Mark = -1 - Mark; /* Disable it */
+ if (Buf[Pos-1] == Buf[Pos]) {
+ Pos++;
+ break;
+ }
+ i = Buf[Pos-1]; Buf[Pos-1] = Buf[Pos]; Buf[Pos++] = (char) i;
+ break;
+
+ case LYE_SETMARK:
+ /*
+ * primitive emacs-like set-mark-command
+ */
+ Mark = Pos;
+ return(0);
+
+ case LYE_XPMARK:
+ /*
+ * emacs-like exchange-point-and-mark
+ */
+ if (Mark < 0)
+ Mark = -1 - Mark; /* Enable it */
+ if (Mark == Pos)
+ return(0);
+ i = Pos; Pos = Mark; Mark = i;
break;
+ case LYE_KILLREG:
+ /*
+ * primitive emacs-like kill-region
+ */
+ if (Mark < 0)
+ Mark = -1 - Mark; /* Enable it */
+ if (Mark == Pos) {
+ killbuffer[0] = '\0';
+ return(0);
+ }
+ if (Mark > Pos)
+ LYEdit1(edit, 0, LYE_XPMARK, FALSE);
+ {
+ int reglen = Pos - Mark;
+
+ LYstrncpy(killbuffer, &Buf[Mark],
+ HTMIN(reglen, (int)sizeof(killbuffer)-1));
+ for (i = Mark; Buf[i+reglen]; i++)
+ Buf[i] = Buf[i+reglen];
+ Buf[i] = Buf[i+reglen]; /* terminate */
+ Pos = Mark;
+ }
+ if (Mark >= 0)
+ Mark = -1 - Mark; /* Disable it */
+ break;
+
+ case LYE_YANK:
+ /*
+ * primitive emacs-like yank
+ */
+ if (!killbuffer[0]) {
+ Mark = -1 - Pos;
+ return(0);
+ }
+ {
+ int yanklen = strlen(killbuffer);
+
+ if (Pos+yanklen <= (MaxLen) && StrLen+yanklen <= (MaxLen)) {
+ Mark = -1 - Pos;
+
+ for(i = length; i >= Pos; i--) /* Make room */
+ Buf[i+yanklen] = Buf[i];
+ for (i = 0; i < yanklen; i++)
+ Buf[Pos++] = UCH(killbuffer[i]);
+
+ } else if (maxMessage) {
+ _statusline(MAXLEN_REACHED_DEL_OR_MOV);
+ }
+ }
+ break;
+
+#endif /* ENHANCED_LINEEDIT */
+
case LYE_UPPER:
LYUpperCase(Buf);
break;
@@ -2057,6 +3268,77 @@ PUBLIC int LYEdit1 ARGS4(
return(0);
}
+/*
+** This function prompts for a choice or page number.
+** If a 'g' or 'p' suffix is included, that will be
+** loaded into c. Otherwise, c is zeroed. - FM & LE
+*/
+PUBLIC int get_popup_number ARGS3(
+ char *, msg,
+ int *, c,
+ int *, rel)
+{
+ char temp[120];
+ char *p = temp;
+ int num;
+
+ /*
+ * Load the c argument into the prompt buffer.
+ */
+ temp[0] = (char) *c;
+ temp[1] = '\0';
+ _statusline(msg);
+
+ /*
+ * Get the number, possibly with a suffix, from the user.
+ */
+ if (LYgetstr(temp, VISIBLE, sizeof(temp), NORECALL) < 0 || *temp == 0) {
+ HTInfoMsg(CANCELLED);
+ *c = '\0';
+ *rel = '\0';
+ return(0);
+ }
+
+ *rel = '\0';
+ num = atoi(p);
+ while ( isdigit(UCH(*p)) )
+ ++p;
+ switch ( *p ) {
+ case '+': case '-':
+ /* 123+ or 123- */
+ *rel = *p++; *c = *p;
+ break;
+ default:
+ *c = *p++;
+ *rel = *p;
+ break;
+ case 0:
+ break;
+ }
+
+ /*
+ * If we had a 'g' or 'p' suffix, load it into c.
+ * Otherwise, zero c. Then return the number.
+ */
+ if ( *p == 'g' || *p == 'G' ) {
+ *c = 'g';
+ } else if (*p == 'p' || *p == 'P' ) {
+ *c = 'p';
+ } else {
+ *c = '\0';
+ }
+ if ( *rel != '+' && *rel != '-' )
+ *rel = 0;
+ return num;
+}
+
+#ifdef USE_COLOR_STYLE
+# define TmpStyleOn(s) curses_style((s), STACK_ON)
+# define TmpStyleOff(s) curses_style((s), STACK_OFF)
+#else
+# define TmpStyleOn(s)
+# define TmpStyleOff(s)
+#endif /* defined USE_COLOR_STYLE */
PUBLIC void LYRefreshEdit ARGS1(
EDREC *, edit)
@@ -2067,6 +3349,13 @@ PUBLIC void LYRefreshEdit ARGS1(
int padsize;
char *str;
char buffer[3];
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ int begin_multi = 0;
+ int end_multi = 0;
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+#ifdef USE_COLOR_STYLE
+ int estyle, prompting = 0;
+#endif
buffer[0] = buffer[1] = buffer[2] = '\0';
if (!edit->dirty || (DspWdth == 0))
@@ -2090,149 +3379,1447 @@ PUBLIC void LYRefreshEdit ARGS1(
* extending the string. Looks awful, but that way we can keep up with
* data entry at low baudrates.
*/
- if ((DspStart + DspWdth) <= length)
- if (Pos >= (DspStart + DspWdth) - Margin)
+ if ((DspStart + DspWdth) <= length) {
+ if (Pos >= (DspStart + DspWdth) - Margin) {
+#ifndef SUPPORT_MULTIBYTE_EDIT
DspStart=(Pos - DspWdth) + Margin;
+#else /* SUPPORT_MULTIBYTE_EDIT */
+ if (HTCJK != NOCJK) {
+ int tmp = (Pos - DspWdth) + Margin;
+
+ while (DspStart < tmp) {
+ if (!isascii(Buf[DspStart]))
+ DspStart++;
+ DspStart++;
+ }
+ } else {
+ DspStart = (Pos - DspWdth) + Margin;
+ }
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+ }
+ }
if (Pos < DspStart + Margin) {
+#ifndef SUPPORT_MULTIBYTE_EDIT
+ DspStart = Pos - Margin;
+ if (DspStart < 0)
+ DspStart = 0;
+#else /* SUPPORT_MULTIBYTE_EDIT */
+ if (HTCJK != NOCJK) {
+ int tmp = Pos - Margin;
+
+ DspStart = 0;
+ while (DspStart < tmp) {
+ if (!isascii(Buf[DspStart]))
+ DspStart++;
+ DspStart++;
+ }
+ } else {
DspStart = Pos - Margin;
if (DspStart < 0)
DspStart = 0;
}
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+ }
str = &Buf[DspStart];
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ if (HTCJK != NOCJK && !isascii(str[0]))
+ begin_multi = 1;
+#endif /* SUPPORT_MULTIBYTE_EDIT */
nrdisplayed = length-DspStart;
if (nrdisplayed > DspWdth)
nrdisplayed = DspWdth;
- move(edit->sy, edit->sx);
+ LYmove(edit->sy, edit->sx);
#ifdef USE_COLOR_STYLE
/*
* If this is the last screen line, set attributes to normal,
* should only be needed for color styles. The curses function
* may be used directly to avoid complications. - kw
*/
- if (edit->sy == (LYlines - 1)) {
- if (s_normal != NOSTYLE) {
- curses_style(s_normal, ABS_ON);
- } else {
- attrset(A_NORMAL); /* need to do something about colors? */
- }
- }
+ if (edit->sy == (LYlines - 1))
+ prompting = 1;
+ if (prompting)
+ estyle = s_prompt_edit;
+ else
+ estyle = s_aedit;
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.getstr: switching to <edit.%s>.\n",
+ prompting ? "prompt" : "active"));
+ if (estyle != NOSTYLE)
+ curses_style(estyle, STACK_ON);
+ else
+ wattrset(LYwin,A_NORMAL); /* need to do something about colors? */
#endif
if (edit->hidden) {
for (i = 0; i < nrdisplayed; i++)
- addch('*');
+ LYaddch('*');
} else {
- for (i = 0; i < nrdisplayed; i++)
+#if defined(ENHANCED_LINEEDIT) && defined(USE_COLOR_STYLE)
+ if (Mark >= 0 && DspStart > Mark)
+ TmpStyleOn(prompting ? s_prompt_sel : s_aedit_sel);
+#endif
+ for (i = 0; i < nrdisplayed; i++) {
+#if defined(ENHANCED_LINEEDIT) && defined(USE_COLOR_STYLE)
+ if ( Mark >= 0 && ((DspStart + i == Mark && Pos > Mark)
+ || (DspStart + i == Pos && Pos < Mark) ))
+ TmpStyleOn(prompting ? s_prompt_sel : s_aedit_sel);
+ if ( Mark >= 0 && ((DspStart + i == Mark && Pos < Mark)
+ || (DspStart + i == Pos && Pos > Mark) ))
+ TmpStyleOff(prompting ? s_prompt_sel : s_aedit_sel);
+#endif
if ((buffer[0] = str[i]) == 1 || buffer[0] == 2 ||
- ((unsigned char)buffer[0] == 160 &&
+ (UCH(buffer[0]) == 160 &&
!(HTPassHighCtrlRaw || HTCJK != NOCJK ||
(LYCharSet_UC[current_char_set].enc != UCT_ENC_8859 &&
!(LYCharSet_UC[current_char_set].like8859
& UCT_R_8859SPECL))))) {
- addch(' ');
+ LYaddch(' ');
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ end_multi = 0;
+#endif /* SUPPORT_MULTIBYTE_EDIT */
} else {
/* For CJK strings, by Masanobu Kimura */
if (HTCJK != NOCJK && !isascii(buffer[0])) {
+#ifndef SUPPORT_MULTIBYTE_EDIT
if (i < (nrdisplayed - 1))
buffer[1] = str[++i];
- addstr(buffer);
+#else /* SUPPORT_MULTIBYTE_EDIT */
+ if (i < (nrdisplayed - 1)) {
+ buffer[1] = str[++i];
+ end_multi = 1;
+ } else
+ end_multi = 0;
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+ LYaddstr(buffer);
buffer[1] = '\0';
} else {
- addstr(buffer);
+ LYaddstr(buffer);
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ end_multi = 0;
+#endif /* SUPPORT_MULTIBYTE_EDIT */
}
}
+ }
+#if defined(ENHANCED_LINEEDIT) && defined(USE_COLOR_STYLE)
+ if (Mark >= 0 &&
+ ((DspStart + nrdisplayed <= Mark && DspStart + nrdisplayed > Pos)
+ || (DspStart + nrdisplayed > Mark
+ && DspStart + nrdisplayed <= Pos)))
+ TmpStyleOff(prompting ? s_prompt_sel : s_aedit_sel);
+#endif
}
/*
* Erase rest of input area.
*/
padsize = DspWdth-nrdisplayed;
- while (padsize--)
- addch((unsigned char)edit->pad);
+ if (padsize) {
+ TmpStyleOn(prompting ? s_prompt_edit_pad : s_aedit_pad);
+ while (padsize--)
+ LYaddch(UCH(edit->pad));
+ TmpStyleOff(prompting ? s_prompt_edit_pad : s_aedit_pad);
+ }
/*
* Scrolling indicators.
*/
if (edit->panon) {
if ((DspStart + nrdisplayed) < length) {
- move(edit->sy, edit->sx+nrdisplayed-1);
- addch('}');
+ int add_space = 0;
+
+ TmpStyleOn(prompting ? s_prompt_edit_arr : s_aedit_arr);
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ if (end_multi)
+ add_space = 1;
+#endif
+ LYmove(edit->sy, edit->sx + nrdisplayed - 1 - add_space);
+ if (add_space)
+ LYaddch(' '); /* Needed with styles? */
+ LYaddch(ACS_RARROW);
+ TmpStyleOff(prompting ? s_prompt_edit_arr : s_aedit_arr);
}
if (DspStart) {
- move(edit->sy, edit->sx);
- addch('{');
+ TmpStyleOn(prompting ? s_prompt_edit_arr : s_aedit_arr);
+ LYmove(edit->sy, edit->sx);
+ LYaddch(ACS_LARROW);
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ if (begin_multi)
+ LYaddch(' '); /* Needed with styles? */
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+ TmpStyleOff(prompting ? s_prompt_edit_arr : s_aedit_arr);
}
}
- move(edit->sy, edit->sx + Pos - DspStart);
- refresh();
+ LYmove(edit->sy, edit->sx + Pos - DspStart);
+#ifdef SUPPORT_MULTIBYTE_EDIT
+#if (!USE_SLANG && !defined(USE_MULTIBYTE_CURSES))
+ if (HTCJK != NOCJK)
+ lynx_force_repaint();
+#endif /* !USE_SLANG && !defined(USE_MULTIBYTE_CURSES) */
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+
+#ifdef USE_COLOR_STYLE
+ if (estyle != NOSTYLE)
+ curses_style(estyle, STACK_OFF);
+#endif
+ LYrefresh();
}
+PRIVATE void reinsertEdit ARGS2(
+ EditFieldData *, edit,
+ char *, result)
+{
+ if (result != 0) {
+ LYEdit1(edit, '\0', LYE_ERASE, FALSE);
+ while (*result != '\0') {
+ LYLineEdit(edit, (int)(*result), FALSE);
+ result++;
+ }
+ }
+}
+
+PRIVATE int caselessCmpList ARGS2(
+ CONST void *, a,
+ CONST void *, b)
+{
+ return strcasecomp(*(CONST char *CONST *)a, *(CONST char *CONST *)b);
+}
+
+PRIVATE int normalCmpList ARGS2(
+ CONST void *, a,
+ CONST void *, b)
+{
+ return strcmp(*(CONST char *CONST *)a, *(CONST char *CONST *)b);
+}
+
+PRIVATE char **sortedList ARGS2(
+ HTList *, list,
+ BOOL, ignorecase)
+{
+ unsigned count = HTList_count(list);
+ unsigned j = 0;
+ unsigned k, jk;
+ char **result = typecallocn(char *, count + 1);
+
+ if (result == 0)
+ outofmem(__FILE__, "sortedList");
+
+ while (!HTList_isEmpty(list))
+ result[j++] = HTList_nextObject(list);
+
+ if (count > 1) {
+ qsort((char *)result, count, sizeof(*result),
+ ignorecase ? caselessCmpList : normalCmpList);
+
+ /* remove duplicate entries from the sorted index */
+ for (j = 0; result[j] != 0; j++) {
+ k = j;
+ while (result[k] != 0
+ && !strcmp(result[j], result[k])) {
+ k++;
+ }
+ k--;
+ if (j != k) {
+ for (jk = j; ; jk++) {
+ result[jk] = result[jk + k - j];
+ if (result[jk] == 0)
+ break;
+ }
+ }
+ }
+ }
+
+ return result;
+}
+
+PUBLIC int LYarrayLength ARGS1(
+ CONST char **, list)
+{
+ int result = 0;
+
+ while (*list++ != 0)
+ result++;
+ return result;
+}
+
+PUBLIC int LYarrayWidth ARGS1(
+ CONST char **, list)
+{
+ int result = 0;
+ int check;
+
+ while (*list != 0) {
+ check = strlen(*list++);
+ if (check > result)
+ result = check;
+ }
+ return result;
+}
+
+PRIVATE void FormatChoiceNum ARGS4(
+ char *, dst,
+ int, num_choices,
+ int, choice,
+ CONST char *, value)
+{
+ if (num_choices >= 0) {
+ int digits = (num_choices > 9) ? 2 : 1;
+ sprintf(dst, "%*d: %.*s",
+ digits, (choice + 1),
+ MAX_LINE - 9 - digits, value);
+ } else {
+ LYstrncpy(dst, value, MAX_LINE-1);
+ }
+}
+
+PRIVATE unsigned options_width ARGS1(
+ CONST char **, list)
+{
+ unsigned width = 0;
+ int count = 0;
+
+ while (list[count] != 0) {
+ if (strlen(list[count]) > width) {
+ width = strlen(list[count]);
+ }
+ count++;
+ }
+ return width;
+}
+
+PRIVATE void draw_option ARGS7(
+ WINDOW *, win,
+ int, entry,
+ int, width,
+ BOOL, reversed,
+ int, num_choices,
+ int, number,
+ CONST char *, value)
+{
+ char Cnum[MAX_LINE];
+
+ FormatChoiceNum(Cnum, num_choices, number, "");
+#ifdef USE_SLANG
+ SLsmg_gotorc(win->top_y + entry, (win->left_x + 2));
+ LYaddstr(Cnum);
+ if (reversed)
+ SLsmg_set_color(2);
+ SLsmg_write_nstring((char *)value, win->width);
+ if (reversed)
+ SLsmg_set_color(0);
+#else
+ wmove(win, entry, 1);
+ LynxWChangeStyle(win, s_menu_entry, STACK_ON);
+ waddch(win, ' ');
+ LynxWChangeStyle(win, s_menu_entry, STACK_OFF);
+ LynxWChangeStyle(win, s_menu_number, STACK_ON);
+ waddstr(win, Cnum);
+ LynxWChangeStyle(win, s_menu_number, STACK_OFF);
+#ifdef USE_COLOR_STYLE
+ LynxWChangeStyle(win, reversed ? s_menu_active : s_menu_entry, STACK_ON);
+#else
+ if (reversed)
+ wstart_reverse(win);
+#endif
+ LYpaddstr(win, width, value);
+#ifdef USE_COLOR_STYLE
+ LynxWChangeStyle(win, reversed ? s_menu_active : s_menu_entry, STACK_OFF);
+#else
+ if (reversed)
+ wstop_reverse(win);
+#endif
+ LynxWChangeStyle(win, s_menu_entry, STACK_ON);
+ waddch(win, ' ');
+ LynxWChangeStyle(win, s_menu_entry, STACK_OFF);
+#endif /* USE_SLANG */
+}
+
+/*
+ * This function offers the choices for values of an
+ * option via a popup window which functions like
+ * that for selection of options in a form. - FM
+ *
+ * Also used for mouse popups with ncurses; this is indicated
+ * by for_mouse.
+ */
+PUBLIC int LYhandlePopupList ARGS9(
+ int, cur_choice,
+ int, ly,
+ int, lx,
+ CONST char **, choices,
+ int, width,
+ int, i_length,
+ int, disabled,
+ BOOLEAN, for_mouse,
+ BOOLEAN, numbered)
+{
+ int c = 0, cmd = 0, i = 0, j = 0, rel = 0;
+ int orig_choice;
+ WINDOW * form_window;
+ int num_choices = 0;
+ int max_choices = 0;
+ int top, bottom, length = -1;
+ int window_offset = 0;
+ int lines_to_show;
+ char Cnum[64];
+ int Lnum;
+ int npages;
+ static char prev_target[MAX_LINE]; /* Search string buffer */
+ static char prev_target_buffer[MAX_LINE]; /* Next search buffer */
+ static BOOL first = TRUE;
+ char *cp;
+ int ch = 0, recall;
+ int QueryTotal;
+ int QueryNum;
+ BOOLEAN FirstRecall = TRUE;
+ BOOLEAN ReDraw = FALSE;
+ int number;
+ char buffer[MAX_LINE];
+ char *popup_status_msg = NULL;
+ CONST char **Cptr = NULL;
+#define CAN_SCROLL_DOWN 1
+#define CAN_SCROLL_UP 2
+#define CAN_SCROLL 4
+ int can_scroll = 0, can_scroll_was = 0;
+
+ orig_choice = cur_choice;
+ if (cur_choice < 0)
+ cur_choice = 0;
+
+ /*
+ * Initialize the search string buffer. - FM
+ */
+ if (first) {
+ *prev_target_buffer = '\0';
+ first = FALSE;
+ }
+ *prev_target = '\0';
+ QueryTotal = (search_queries ? HTList_count(search_queries) : 0);
+ recall = ((QueryTotal >= 1) ? RECALL_URL : NORECALL);
+ QueryNum = QueryTotal;
+
+ /*
+ * Count the number of choices to be displayed, where
+ * num_choices ranges from 0 to n, and set width to the
+ * longest choice string length. Also set Lnum to the
+ * length for the highest choice number, then decrement
+ * num_choices so as to be zero-based. The window width
+ * will be based on the sum of width and Lnum. - FM
+ */
+ num_choices = LYarrayLength(choices) - 1;
+ if (width <= 0)
+ width = options_width(choices);
+ if (numbered) {
+ sprintf(Cnum, "%d: ", num_choices);
+ Lnum = strlen(Cnum);
+ max_choices = num_choices;
+ } else {
+ Lnum = 0;
+ max_choices = -1;
+ }
+
+ /*
+ * Let's assume for the sake of sanity that ly is the number
+ * corresponding to the line the choice is on.
+ * Let's also assume that cur_choice is the number of the
+ * item that should be initially selected, as 0 being the
+ * first item.
+ * So what we have, is the top equal to the current screen line
+ * subtracting the cur_choice + 1 (the one must be for the
+ * top line we will draw in a box). If the top goes under 0,
+ * consider it 0.
+ */
+ top = ly - (cur_choice + 1);
+ if (top < 0)
+ top = 0;
+
+ /*
+ * Check and see if we need to put the i_length parameter up to
+ * the number of real choices.
+ */
+ if (i_length < 1) {
+ i_length = num_choices;
+ } else {
+ /*
+ * Otherwise, it is really one number too high.
+ */
+ i_length--;
+ }
+
+ /*
+ * The bottom is the value of the top plus the number of options
+ * to view plus 3 (one for the top line, one for the bottom line,
+ * and one to offset the 0 counted in the num_choices).
+ */
+ bottom = top + i_length + 3;
+
+ /*
+ * Set lines_to_show based on the user_mode global.
+ */
+ if (user_mode == NOVICE_MODE)
+ lines_to_show = LYlines-4;
+ else
+ lines_to_show = LYlines-2;
+
+ if (for_mouse && user_mode == NOVICE_MODE && lines_to_show > 2)
+ lines_to_show--;
+
+ /*
+ * Hmm... If the bottom goes beyond the number of lines available,
+ */
+ if (bottom > lines_to_show) {
+ /*
+ * Position the window at the top if we have more
+ * choices than will fit in the window.
+ */
+ if ((i_length + 3) > lines_to_show) {
+ top = 0;
+ bottom = (top + (i_length + 3));
+ if (bottom > lines_to_show)
+ bottom = (lines_to_show + 1);
+ } else {
+ /*
+ * Try to position the window so that the selected choice will
+ * appear where the selection box currently is positioned.
+ * It could end up too high, at this point, but we'll move it
+ * down latter, if that has happened.
+ */
+ top = (lines_to_show + 1) - (i_length + 3);
+ bottom = (lines_to_show + 1);
+ }
+ }
+
+ /*
+ * This is really fun, when the length is 4, it means 0 to 4, or 5.
+ */
+ length = (bottom - top) - 2;
+ if (length <= num_choices)
+ can_scroll = CAN_SCROLL;
+
+ /*
+ * Move the window down if it's too high.
+ */
+ if (bottom < ly + 2) {
+ bottom = ly + 2;
+ if (bottom > lines_to_show + 1)
+ bottom = lines_to_show + 1;
+ top = bottom - length - 2;
+ }
+
+ if (for_mouse) {
+ /* shift horizontally to lie within screen width, if possible */
+ if (Lnum + (int)width + 4 < LYcols) {
+ if (lx - 1 + (Lnum + (int)width + 4) > LYcols)
+ lx = LYcols + 1 - (Lnum + width + 4);
+ else if (lx <= 0)
+ lx = 1;
+ }
+ }
+
+ /*
+ * Set up the overall window, including the boxing characters ('*'),
+ * if it all fits. Otherwise, set up the widest window possible. - FM
+ */
+ if (num_choices <= 0
+ || cur_choice > num_choices
+ || (form_window = LYstartPopup(top, lx, bottom - top, Lnum + width)) == 0)
+ return(orig_choice);
+
+ /*
+ * Clear the command line and write
+ * the popup statusline. - FM
+ */
+ LYmove((LYlines - 2), 0);
+ LYclrtoeol();
+ if (disabled) {
+ popup_status_msg = CHOICE_LIST_UNM_MSG;
+ } else if (!for_mouse) {
+ popup_status_msg = CHOICE_LIST_MESSAGE;
+#if defined(USE_MOUSE) && (defined(NCURSES) || defined(PDCURSES))
+ } else {
+ popup_status_msg = gettext(
+ "Left mouse button or return to select, arrow keys to scroll.");
+#endif
+ }
+ _statusline(popup_status_msg);
+
+ /*
+ * Set up the window_offset for choices.
+ * cur_choice ranges from 0...n
+ * length ranges from 0...m
+ */
+ if (cur_choice >= length) {
+ window_offset = cur_choice - length + 1;
+ }
+
+ /*
+ * Compute the number of popup window pages. - FM
+ */
+ npages = ((num_choices + 1) > length) ?
+ (((num_choices + 1) + (length - 1))/(length))
+ : 1;
+/*
+ * OH! I LOVE GOTOs! hack hack hack
+ */
+redraw:
+
+ /*
+ * Display the boxed choices.
+ */
+ for (i = 0; i <= num_choices; i++) {
+ if (i >= window_offset && i - window_offset < length) {
+ draw_option (form_window, ((i + 1) - window_offset), width, FALSE,
+ max_choices, i, choices[i]);
+ }
+ }
+ LYbox(form_window, (BOOLEAN)!numbered);
+ Cptr = NULL;
+
+ /*
+ * Loop on user input.
+ */
+ while (cmd != LYK_ACTIVATE) {
+ int row = ((i + 1) - window_offset);
+
+ /* Show scroll indicators. */
+ if (can_scroll) {
+ can_scroll = ((window_offset ? CAN_SCROLL_UP : 0)
+ | (num_choices - window_offset >= length
+ ? CAN_SCROLL_DOWN : 0));
+ if (~can_scroll & can_scroll_was) { /* Need to redraw */
+ LYbox(form_window, (BOOLEAN)!numbered);
+ can_scroll_was = 0;
+ }
+ if (can_scroll & ~can_scroll_was & CAN_SCROLL_UP) {
+ wmove(form_window, 1, Lnum + width + 3);
+ LynxWChangeStyle(form_window, s_menu_sb, STACK_ON);
+ waddch(form_window, ACS_UARROW);
+ LynxWChangeStyle(form_window, s_menu_sb, STACK_OFF);
+ }
+ if (can_scroll & ~can_scroll_was & CAN_SCROLL_DOWN) {
+ wmove(form_window, length, Lnum + width + 3);
+ LynxWChangeStyle(form_window, s_menu_sb, STACK_ON);
+ waddch(form_window, ACS_DARROW);
+ LynxWChangeStyle(form_window, s_menu_sb, STACK_OFF);
+ }
+ }
+
+ /*
+ * Unreverse cur choice.
+ */
+ if (Cptr != NULL) {
+ draw_option (form_window, row, width, FALSE,
+ max_choices, i, Cptr[i]);
+ }
+ Cptr = choices;
+ i = cur_choice;
+ row = ((cur_choice + 1) - window_offset);
+ draw_option (form_window, row, width, TRUE,
+ max_choices, cur_choice, Cptr[cur_choice]);
+ LYstowCursor(form_window, row, 1);
+
+ c = LYgetch_choice();
+ if (term_options || LYCharIsINTERRUPT(c)) { /* Control-C or Control-G */
+ cmd = LYK_QUIT;
+#ifndef USE_SLANG
+ } else if (c == MOUSE_KEY) {
+ if ((cmd = fancy_mouse(form_window, row, &cur_choice)) < 0)
+ goto redraw;
+ if (cmd == LYK_ACTIVATE)
+ break;
+#endif
+ } else {
+ cmd = LKC_TO_LAC(keymap,c);
+ }
+#ifdef VMS
+ if (HadVMSInterrupt) {
+ HadVMSInterrupt = FALSE;
+ cmd = LYK_QUIT;
+ }
+#endif /* VMS */
+
+ switch(cmd) {
+ case LYK_F_LINK_NUM:
+ c = '\0';
+ /* FALLTHRU */
+ case LYK_1: /* FALLTHRU */
+ case LYK_2: /* FALLTHRU */
+ case LYK_3: /* FALLTHRU */
+ case LYK_4: /* FALLTHRU */
+ case LYK_5: /* FALLTHRU */
+ case LYK_6: /* FALLTHRU */
+ case LYK_7: /* FALLTHRU */
+ case LYK_8: /* FALLTHRU */
+ case LYK_9:
+ /*
+ * Get a number from the user, possibly with
+ * a 'g' or 'p' suffix (which will be loaded
+ * into c). - FM & LE
+ */
+ number = get_popup_number(SELECT_OPTION_NUMBER, &c, &rel);
+
+ /* handle + or - suffix */
+ CTRACE((tfp,"got popup option number %d, ",number));
+ CTRACE((tfp,"rel='%c', c='%c', cur_choice=%d\n",
+ rel, c, cur_choice));
+ if ( c == 'p' ) {
+ int curpage = ((cur_choice + 1) > length) ?
+ (((cur_choice + 1) + (length - 1))/(length))
+ : 1;
+ CTRACE((tfp," curpage=%d\n",curpage));
+ if ( rel == '+' )
+ number = curpage + number;
+ else if ( rel == '-' )
+ number = curpage - number;
+ } else if ( rel == '+' ) {
+ number = cur_choice + number + 1;
+ } else if ( rel == '-' ) {
+ number = cur_choice - number + 1;
+ }
+ if ( rel ) CTRACE((tfp,"new number=%d\n",number));
+ /*
+ * Check for a 'p' suffix. - FM
+ */
+ if (c == 'p') {
+ /*
+ * Treat 1 or less as the first page. - FM
+ */
+ if (number <= 1) {
+ if (window_offset == 0) {
+ HTUserMsg(ALREADY_AT_OPTION_BEGIN);
+ _statusline(popup_status_msg);
+ break;
+ }
+ window_offset = 0;
+ cur_choice = 0;
+ _statusline(popup_status_msg);
+ goto redraw;
+ }
+
+ /*
+ * Treat a number equal to or greater than the
+ * number of pages as the last page. - FM
+ */
+ if (number >= npages) {
+ if (window_offset >= ((num_choices - length) + 1)) {
+ HTUserMsg(ALREADY_AT_OPTION_END);
+ _statusline(popup_status_msg);
+ break;
+ }
+ window_offset = ((npages - 1) * length);
+ if (window_offset > (num_choices - length)) {
+ window_offset = (num_choices - length + 1);
+ }
+ if (cur_choice < window_offset)
+ cur_choice = window_offset;
+ _statusline(popup_status_msg);
+ goto redraw;
+ }
+
+ /*
+ * We want an intermediate page. - FM
+ */
+ if (((number - 1) * length) == window_offset) {
+ char *msg = 0;
+ HTSprintf0(&msg, ALREADY_AT_OPTION_PAGE, number);
+ HTUserMsg(msg);
+ FREE(msg);
+ _statusline(popup_status_msg);
+ break;
+ }
+ cur_choice = window_offset = ((number - 1) * length);
+ _statusline(popup_status_msg);
+ goto redraw;
+
+ }
+
+ /*
+ * Check for a positive number, which signifies
+ * that a choice should be sought. - FM
+ */
+ if (number > 0) {
+ /*
+ * Decrement the number so as to correspond
+ * with our cur_choice values. - FM
+ */
+ number--;
+
+ /*
+ * If the number is in range and had no legal
+ * suffix, select the indicated choice. - FM
+ */
+ if (number <= num_choices && c == '\0') {
+ cur_choice = number;
+ cmd = LYK_ACTIVATE;
+ break;
+ }
+
+ /*
+ * Verify that we had a 'g' suffix,
+ * and act on the number. - FM
+ */
+ if (c == 'g') {
+ if (cur_choice == number) {
+ /*
+ * The choice already is current. - FM
+ */
+ char *msg = 0;
+ HTSprintf0(&msg, OPTION_ALREADY_CURRENT, (number + 1));
+ HTUserMsg(msg);
+ FREE(msg);
+ _statusline(popup_status_msg);
+ break;
+ }
+
+ if (number <= num_choices) {
+ /*
+ * The number is in range and had a 'g'
+ * suffix, so make it the current option,
+ * scrolling if needed. - FM
+ */
+ j = (number - cur_choice);
+ cur_choice = number;
+ if ((j > 0) &&
+ (cur_choice - window_offset) >= length) {
+ window_offset += j;
+ if (window_offset > (num_choices - length + 1))
+ window_offset = (num_choices - length + 1);
+ } else if ((cur_choice - window_offset) < 0) {
+ window_offset -= abs(j);
+ if (window_offset < 0)
+ window_offset = 0;
+ }
+ _statusline(popup_status_msg);
+ goto redraw;
+ }
+
+ /*
+ * Not in range. - FM
+ */
+ HTUserMsg(BAD_OPTION_NUM_ENTERED);
+ }
+ }
+
+ /*
+ * Restore the popup statusline. - FM
+ */
+ _statusline(popup_status_msg);
+ break;
+
+ case LYK_PREV_LINK:
+ case LYK_LPOS_PREV_LINK:
+ case LYK_FASTBACKW_LINK:
+ case LYK_UP_LINK:
+
+ if (cur_choice > 0)
+ cur_choice--;
+
+ /*
+ * Scroll the window up if necessary.
+ */
+ if ((cur_choice - window_offset) < 0) {
+ window_offset--;
+ goto redraw;
+ }
+ break;
+
+ case LYK_NEXT_LINK:
+ case LYK_LPOS_NEXT_LINK:
+ case LYK_FASTFORW_LINK:
+ case LYK_DOWN_LINK:
+ if (cur_choice < num_choices)
+ cur_choice++;
+
+ /*
+ * Scroll the window down if necessary
+ */
+ if ((cur_choice - window_offset) >= length) {
+ window_offset++;
+ goto redraw;
+ }
+ break;
+
+ case LYK_NEXT_PAGE:
+ /*
+ * Okay, are we on the last page of the list?
+ * If not then,
+ */
+ if (window_offset != (num_choices - length + 1)) {
+ /*
+ * Modify the current choice to not be a
+ * coordinate in the list, but a coordinate
+ * on the item selected in the window.
+ */
+ cur_choice -= window_offset;
+
+ /*
+ * Page down the proper length for the list.
+ * If simply to far, back up.
+ */
+ window_offset += length;
+ if (window_offset > (num_choices - length)) {
+ window_offset = (num_choices - length + 1);
+ }
+
+ /*
+ * Readjust the current selection to be a
+ * list coordinate rather than window.
+ * Redraw this thing.
+ */
+ cur_choice += window_offset;
+ goto redraw;
+ }
+ else if (cur_choice < num_choices) {
+ /*
+ * Already on last page of the list so just
+ * redraw it with the last item selected.
+ */
+ cur_choice = num_choices;
+ }
+ break;
+
+ case LYK_PREV_PAGE:
+ /*
+ * Are we on the first page of the list?
+ * If not then,
+ */
+ if (window_offset != 0) {
+ /*
+ * Modify the current selection to not be a
+ * list coordinate, but a window coordinate.
+ */
+ cur_choice -= window_offset;
+
+ /*
+ * Page up the proper length.
+ * If too far, back up.
+ */
+ window_offset -= length;
+ if (window_offset < 0) {
+ window_offset = 0;
+ }
+
+ /*
+ * Readjust the current choice.
+ */
+ cur_choice += window_offset;
+ goto redraw;
+ } else if (cur_choice > 0) {
+ /*
+ * Already on the first page so just
+ * back up to the first item.
+ */
+ cur_choice = 0;
+ }
+ break;
+
+ case LYK_HOME:
+ cur_choice = 0;
+ if (window_offset > 0) {
+ window_offset = 0;
+ goto redraw;
+ }
+ break;
+
+ case LYK_END:
+ cur_choice = num_choices;
+ if (window_offset != (num_choices - length + 1)) {
+ window_offset = (num_choices - length + 1);
+ goto redraw;
+ }
+ break;
+
+ case LYK_DOWN_TWO:
+ cur_choice += 2;
+ if (cur_choice > num_choices)
+ cur_choice = num_choices;
+
+ /*
+ * Scroll the window down if necessary.
+ */
+ if ((cur_choice - window_offset) >= length) {
+ window_offset += 2;
+ if (window_offset > (num_choices - length + 1))
+ window_offset = (num_choices - length + 1);
+ goto redraw;
+ }
+ break;
+
+ case LYK_UP_TWO:
+ cur_choice -= 2;
+ if (cur_choice < 0)
+ cur_choice = 0;
+
+ /*
+ * Scroll the window up if necessary.
+ */
+ if ((cur_choice - window_offset) < 0) {
+ window_offset -= 2;
+ if (window_offset < 0)
+ window_offset = 0;
+ goto redraw;
+ }
+ break;
+
+ case LYK_DOWN_HALF:
+ cur_choice += (length/2);
+ if (cur_choice > num_choices)
+ cur_choice = num_choices;
+
+ /*
+ * Scroll the window down if necessary.
+ */
+ if ((cur_choice - window_offset) >= length) {
+ window_offset += (length/2);
+ if (window_offset > (num_choices - length + 1))
+ window_offset = (num_choices - length + 1);
+ goto redraw;
+ }
+ break;
+
+ case LYK_UP_HALF:
+ cur_choice -= (length/2);
+ if (cur_choice < 0)
+ cur_choice = 0;
+
+ /*
+ * Scroll the window up if necessary.
+ */
+ if ((cur_choice - window_offset) < 0) {
+ window_offset -= (length/2);
+ if (window_offset < 0)
+ window_offset = 0;
+ goto redraw;
+ }
+ break;
+
+ case LYK_REFRESH:
+ lynx_force_repaint();
+ LYrefresh();
+ break;
+
+ case LYK_NEXT:
+ if (recall && *prev_target_buffer == '\0') {
+ /*
+ * We got a 'n'ext command with no prior query
+ * specified within the popup window. See if
+ * one was entered when the popup was retracted,
+ * and if so, assume that's what's wanted. Note
+ * that it will become the default within popups,
+ * unless another is entered within a popup. If
+ * the within popup default is to be changed at
+ * that point, use WHEREIS ('/') and enter it,
+ * or the up- or down-arrow keys to seek any of
+ * the previously entered queries, regardless of
+ * whether they were entered within or outside
+ * of a popup window. - FM
+ */
+ if ((cp = (char *)HTList_objectAt(search_queries,
+ 0)) != NULL) {
+ LYstrncpy(prev_target_buffer, cp, sizeof(prev_target_buffer));
+ QueryNum = 0;
+ FirstRecall = FALSE;
+ }
+ }
+ strcpy(prev_target, prev_target_buffer);
+ /* FALLTHRU */
+ case LYK_WHEREIS:
+ if (*prev_target == '\0' ) {
+ _statusline(ENTER_WHEREIS_QUERY);
+ if ((ch = LYgetstr(prev_target, VISIBLE,
+ sizeof(prev_target_buffer),
+ recall)) < 0) {
+ /*
+ * User cancelled the search via ^G. - FM
+ */
+ HTInfoMsg(CANCELLED);
+ goto restore_popup_statusline;
+ }
+ }
+
+check_recall:
+ if (*prev_target == '\0' &&
+ !(recall && (ch == UPARROW || ch == DNARROW))) {
+ /*
+ * No entry. Simply break. - FM
+ */
+ HTInfoMsg(CANCELLED);
+ goto restore_popup_statusline;
+ }
+
+ if (recall && ch == UPARROW) {
+ if (FirstRecall) {
+ /*
+ * Use the current string or
+ * last query in the list. - FM
+ */
+ FirstRecall = FALSE;
+ if (*prev_target_buffer) {
+ for (QueryNum = (QueryTotal - 1);
+ QueryNum > 0; QueryNum--) {
+ if ((cp = (char *)HTList_objectAt(
+ search_queries,
+ QueryNum)) != NULL &&
+ !strcmp(prev_target_buffer, cp)) {
+ break;
+ }
+ }
+ } else {
+ QueryNum = 0;
+ }
+ } else {
+ /*
+ * Go back to the previous query in the list. - FM
+ */
+ QueryNum++;
+ }
+ if (QueryNum >= QueryTotal) {
+ /*
+ * Roll around to the last query in the list. - FM
+ */
+ QueryNum = 0;
+ }
+ if ((cp = (char *)HTList_objectAt(search_queries,
+ QueryNum)) != NULL) {
+ LYstrncpy(prev_target, cp, sizeof(prev_target) - 1);
+ if (*prev_target_buffer &&
+ !strcmp(prev_target_buffer, prev_target)) {
+ _statusline(EDIT_CURRENT_QUERY);
+ } else if ((*prev_target_buffer && QueryTotal == 2) ||
+ (!(*prev_target_buffer) &&
+ QueryTotal == 1)) {
+ _statusline(EDIT_THE_PREV_QUERY);
+ } else {
+ _statusline(EDIT_A_PREV_QUERY);
+ }
+ if ((ch = LYgetstr(prev_target, VISIBLE,
+ sizeof(prev_target_buffer), recall)) < 0) {
+ /*
+ * User cancelled the search via ^G. - FM
+ */
+ HTInfoMsg(CANCELLED);
+ goto restore_popup_statusline;
+ }
+ goto check_recall;
+ }
+ } else if (recall && ch == DNARROW) {
+ if (FirstRecall) {
+ /*
+ * Use the current string or
+ * first query in the list. - FM
+ */
+ FirstRecall = FALSE;
+ if (*prev_target_buffer) {
+ for (QueryNum = 0;
+ QueryNum < (QueryTotal - 1); QueryNum++) {
+ if ((cp = (char *)HTList_objectAt(
+ search_queries,
+ QueryNum)) != NULL &&
+ !strcmp(prev_target_buffer, cp)) {
+ break;
+ }
+ }
+ } else {
+ QueryNum = (QueryTotal - 1);
+ }
+ } else {
+ /*
+ * Advance to the next query in the list. - FM
+ */
+ QueryNum--;
+ }
+ if (QueryNum < 0) {
+ /*
+ * Roll around to the first query in the list. - FM
+ */
+ QueryNum = (QueryTotal - 1);
+ }
+ if ((cp = (char *)HTList_objectAt(search_queries,
+ QueryNum)) != NULL) {
+ LYstrncpy(prev_target, cp, sizeof(prev_target) - 1);
+ if (*prev_target_buffer &&
+ !strcmp(prev_target_buffer, prev_target)) {
+ _statusline(EDIT_CURRENT_QUERY);
+ } else if ((*prev_target_buffer &&
+ QueryTotal == 2) ||
+ (!(*prev_target_buffer) &&
+ QueryTotal == 1)) {
+ _statusline(EDIT_THE_PREV_QUERY);
+ } else {
+ _statusline(EDIT_A_PREV_QUERY);
+ }
+ if ((ch = LYgetstr(prev_target, VISIBLE,
+ sizeof(prev_target_buffer),
+ recall)) < 0) {
+ /*
+ * User cancelled the search via ^G. - FM
+ */
+ HTInfoMsg(CANCELLED);
+ goto restore_popup_statusline;
+ }
+ goto check_recall;
+ }
+ }
+ /*
+ * Replace the search string buffer with the new target. - FM
+ */
+ strcpy(prev_target_buffer, prev_target);
+ HTAddSearchQuery(prev_target_buffer);
+
+ /*
+ * Start search at the next choice. - FM
+ */
+ for (j = 1; Cptr[i+j] != NULL; j++) {
+ FormatChoiceNum(buffer, max_choices, (i + j), Cptr[i+j]);
+ if (case_sensitive) {
+ if (strstr(buffer, prev_target_buffer) != NULL)
+ break;
+ } else {
+ if (LYstrstr(buffer, prev_target_buffer) != NULL)
+ break;
+ }
+ }
+ if (Cptr[i+j] != NULL) {
+ /*
+ * We have a hit, so make that choice the current. - FM
+ */
+ cur_choice += j;
+ /*
+ * Scroll the window down if necessary.
+ */
+ if ((cur_choice - window_offset) >= length) {
+ window_offset += j;
+ if (window_offset > (num_choices - length + 1))
+ window_offset = (num_choices - length + 1);
+ ReDraw = TRUE;
+ }
+ goto restore_popup_statusline;
+ }
+
+ /*
+ * If we started at the beginning, it can't be present. - FM
+ */
+ if (cur_choice == 0) {
+ HTUserMsg2(STRING_NOT_FOUND, prev_target_buffer);
+ goto restore_popup_statusline;
+ }
+
+ /*
+ * Search from the beginning to the current choice. - FM
+ */
+ for (j = 0; j < cur_choice; j++) {
+ FormatChoiceNum(buffer, max_choices, (j + 1), Cptr[j]);
+ if (case_sensitive) {
+ if (strstr(buffer, prev_target_buffer) != NULL)
+ break;
+ } else {
+ if (LYstrstr(buffer, prev_target_buffer) != NULL)
+ break;
+ }
+ }
+ if (j < cur_choice) {
+ /*
+ * We have a hit, so make that choice the current. - FM
+ */
+ j = (cur_choice - j);
+ cur_choice -= j;
+ /*
+ * Scroll the window up if necessary.
+ */
+ if ((cur_choice - window_offset) < 0) {
+ window_offset -= j;
+ if (window_offset < 0)
+ window_offset = 0;
+ ReDraw = TRUE;
+ }
+ goto restore_popup_statusline;
+ }
+
+ /*
+ * Didn't find it in the preceding choices either. - FM
+ */
+ HTUserMsg2(STRING_NOT_FOUND, prev_target_buffer);
+
+restore_popup_statusline:
+ /*
+ * Restore the popup statusline and
+ * reset the search variables. - FM
+ */
+ _statusline(popup_status_msg);
+ *prev_target = '\0';
+ QueryTotal = (search_queries ? HTList_count(search_queries)
+ : 0);
+ recall = ((QueryTotal >= 1) ? RECALL_URL : NORECALL);
+ QueryNum = QueryTotal;
+ if (ReDraw == TRUE) {
+ ReDraw = FALSE;
+ goto redraw;
+ }
+ break;
+
+ case LYK_QUIT:
+ case LYK_ABORT:
+ case LYK_PREV_DOC:
+ case LYK_INTERRUPT:
+ cur_choice = orig_choice;
+ cmd = LYK_ACTIVATE; /* to exit */
+ break;
+ }
+ }
+ LYstopPopup();
+
+ return(disabled ? orig_choice : cur_choice);
+}
+
+#define CurModif MyEdit.current_modifiers
PUBLIC int LYgetstr ARGS4(
- char *, inputline,
+ char *, inputline,
int, hidden,
- size_t, bufsize,
- int, recall)
+ size_t, bufsize,
+ RecallType, recall)
{
int x, y, MaxStringSize;
int ch;
+ int xlec = -2;
+ int last_xlec = -1;
+ int last_xlkc = -1;
EditFieldData MyEdit;
- char *res;
+#ifdef SUPPORT_MULTIBYTE_EDIT
+ BOOL refresh_mb = TRUE;
+#endif /* SUPPORT_MULTIBYTE_EDIT */
LYGetYX(y, x); /* Use screen from cursor position to eol */
MaxStringSize = (bufsize < sizeof(MyEdit.buffer)) ?
(bufsize - 1) : (sizeof(MyEdit.buffer) - 1);
LYSetupEdit(&MyEdit, inputline, MaxStringSize, (LYcols-1)-x);
- MyEdit.hidden = hidden ;
+ MyEdit.hidden = (BOOL) hidden ;
+ CTRACE((tfp, "called LYgetstr\n"));
for (;;) {
again:
+#ifndef SUPPORT_MULTIBYTE_EDIT
LYRefreshEdit(&MyEdit);
- ch = LYgetch();
-#ifdef VMS
- if (term_letter || term_options ||
-#ifndef DISABLE_NEWS
- term_message
-#endif
- || HadVMSInterrupt) {
- HadVMSInterrupt = FALSE;
- ch = 7;
- }
+#else /* SUPPORT_MULTIBYTE_EDIT */
+ if (refresh_mb)
+ LYRefreshEdit(&MyEdit);
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+ ch = LYReadCmdKey(FOR_PROMPT);
+#ifdef SUPPORT_MULTIBYTE_EDIT
+#ifdef CJK_EX /* for SJIS code */
+ if (!refresh_mb
+ && (EditBinding(ch) != LYE_CHAR))
+ goto again;
#else
- if (term_letter || term_options
+ if (!refresh_mb
+ && (EditBinding(ch) != LYE_CHAR)
+ && (EditBinding(ch) != LYE_AIX))
+ goto again;
+#endif
+#endif /* SUPPORT_MULTIBYTE_EDIT */
+
+ if (term_letter || term_options
+#ifdef VMS
+ || HadVMSInterrupt
+#endif /* VMS */
#ifndef DISABLE_NEWS
|| term_message
#endif
- )
- ch = 7;
+ ) {
+#ifdef VMS
+ HadVMSInterrupt = FALSE;
#endif /* VMS */
- if (recall && (ch == UPARROW || ch == DNARROW)) {
- strcpy(inputline, MyEdit.buffer);
- LYAddToCloset(MyEdit.buffer);
+ ch = LYCharINTERRUPT2;
+ }
+
+ if (recall != NORECALL && (ch == UPARROW || ch == DNARROW)) {
+ LYstrncpy(inputline, MyEdit.buffer, (int)bufsize);
+ LYAddToCloset(recall, MyEdit.buffer);
+ CTRACE((tfp, "LYgetstr(%s) recall\n", inputline));
return(ch);
}
- if (keymap[ch + 1] == LYK_REFRESH)
+ ch |= CurModif;
+ CurModif = 0;
+ if (last_xlkc != -1) {
+ if (ch == last_xlkc)
+ ch |= LKC_MOD3;
+ last_xlkc = -1; /* consumed */
+ }
+#ifndef WIN_EX
+ if (LKC_TO_LAC(keymap,ch) == LYK_REFRESH)
goto again;
- switch (EditBinding(ch)) {
+#endif
+ last_xlec = xlec;
+ xlec = EditBinding(ch);
+ if ((xlec & LYE_DF) && !(xlec & LYE_FORM_LAC)) {
+ last_xlkc = ch;
+ xlec &= ~LYE_DF;
+ } else {
+ last_xlkc = -1;
+ }
+ switch (xlec) {
+ case LYE_SETM1:
+ /*
+ * Set flag for modifier 1.
+ */
+ CurModif |= LKC_MOD1;
+ break;
+ case LYE_SETM2:
+ /*
+ * Set flag for modifier 2.
+ */
+ CurModif |= LKC_MOD2;
+ break;
case LYE_TAB:
- ch = '\t';
- /* This used to fall through to the next case before
- tab completion was introduced */
- res = LYFindInCloset(MyEdit.buffer);
- if (res != 0) {
- LYEdit1(&MyEdit, '\0', LYE_ERASE, FALSE);
- while (*res != '\0') {
- LYLineEdit(&MyEdit, (int)(*res), FALSE);
- res++;
+ if (xlec == last_xlec && recall != NORECALL) {
+ HTList *list = whichRecall(recall);
+ if (!HTList_isEmpty(list)) {
+ char **data = sortedList(list, (BOOL)(recall == RECALL_CMD));
+ int old_y, old_x;
+ int cur_choice = 0;
+ int num_options = LYarrayLength((CONST char **)data);
+
+ while (cur_choice < num_options
+ && strcasecomp(data[cur_choice], MyEdit.buffer) < 0)
+ cur_choice++;
+#ifdef USE_SLANG
+ old_y = SLsmg_get_row();
+ old_x = SLsmg_get_column();
+#else
+ getyx(LYwin, old_y, old_x);
+#endif
+
+ cur_choice = LYhandlePopupList(
+ cur_choice,
+ 0,
+ old_x,
+ (CONST char **)data,
+ -1,
+ -1,
+ FALSE,
+ FALSE,
+ TRUE);
+ if (cur_choice >= 0) {
+ if (recall == RECALL_CMD)
+ _statusline(": ");
+ reinsertEdit(&MyEdit, data[cur_choice]);
+ }
+#ifdef USE_SLANG
+ SLsmg_gotorc(old_y, old_x);
+#else
+ wmove(LYwin, old_y, old_x);
+#endif
+ FREE(data);
}
} else {
- ch = '\0';
+ reinsertEdit(&MyEdit, LYFindInCloset(recall, MyEdit.buffer));
}
break;
+
+#ifndef CJK_EX /* 1997/11/03 (Mon) 20:13:45 */
case LYE_AIX:
/*
* Hex 97.
@@ -2242,24 +4829,83 @@ again:
*/
if (ch != '\t' &&
(HTCJK != NOCJK ||
- LYlowest_eightbit[current_char_set] <= 0x97)) {
+ LYlowest_eightbit[current_char_set] <= 0x97))
+ {
LYLineEdit(&MyEdit,ch, FALSE);
break;
}
+ /* FALLTHRU */
+#endif
case LYE_ENTER:
/*
* Terminate the string and return.
*/
- strcpy(inputline, MyEdit.buffer);
- LYAddToCloset(MyEdit.buffer);
+ LYstrncpy(inputline, MyEdit.buffer, (int)bufsize);
+ if (!hidden)
+ LYAddToCloset(recall, MyEdit.buffer);
+ CTRACE((tfp, "LYgetstr(%s) LYE_ENTER\n", inputline));
return(ch);
+#ifdef CAN_CUT_AND_PASTE
+ /* 1998/10/01 (Thu) 15:05:49 */
+
+ case LYE_PASTE:
+ {
+ unsigned char *s = get_clip_grab(), *e;
+ int len;
+
+ if (!s)
+ break;
+ len = strlen(s);
+ e = s + len;
+
+ if (len > 0) {
+ unsigned char *e1 = s;
+
+ while (e1 < e) {
+ if (*e1 < ' ') { /* Stop here? */
+ if (e1 > s)
+ LYEditInsert(&MyEdit, s, e1 - s, map_active, TRUE);
+ s = e1;
+ if (*e1 == '\t') { /* Replace by space */
+ LYEditInsert(&MyEdit, " ", 1, map_active, TRUE);
+ s = ++e1;
+ } else
+ break;
+ } else
+ ++e1;
+ }
+ if (e1 > s)
+ LYEditInsert(&MyEdit, s, e1 - s, map_active, TRUE);
+ }
+ get_clip_release();
+ break;
+ }
+#endif
+
case LYE_ABORT:
/*
* Control-C or Control-G aborts.
*/
inputline[0] = '\0';
+ CTRACE((tfp, "LYgetstr LYE_ABORT\n"));
+ return(-1);
+
+ case LYE_STOP:
+ /*
+ * Deactivate.
+ */
+ CTRACE((tfp, "LYgetstr LYE_STOP\n"));
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ textfields_need_activation = TRUE;
return(-1);
+#else
+#ifdef ENHANCED_LINEEDIT
+ if (Mark >= 0)
+ Mark = -1 - Mark; /* Disable it */
+#endif
+#endif
+ break;
case LYE_LKCMD:
/*
@@ -2278,11 +4924,55 @@ again:
break;
default:
+ if (xlec & LYE_FORM_LAC) {
+ /*
+ * Used in form_getstr() to end line editing and
+ * pass on the lynxkeycode already containing a
+ * lynxactioncode. Here it is just ignored. - kw
+ */
+ break;
+ }
+
+#ifndef SUPPORT_MULTIBYTE_EDIT
LYLineEdit(&MyEdit, ch, FALSE);
+#else /* SUPPORT_MULTIBYTE_EDIT */
+ if (LYLineEdit(&MyEdit, ch, FALSE) == 0) {
+ if (refresh_mb && HTCJK != NOCJK && (0x81 <= ch) && (ch <= 0xfe))
+ refresh_mb = FALSE;
+ else
+ refresh_mb = TRUE;
+ } else {
+ if (!refresh_mb) {
+ LYEdit1(&MyEdit, 0, LYE_DELP, FALSE);
+ }
+ }
+#endif /* SUPPORT_MULTIBYTE_EDIT */
}
}
}
+PUBLIC CONST char * LYLineeditHelpURL NOARGS
+{
+ static int lasthelp_lineedit = -1;
+ static char helpbuf[LY_MAXPATH] = "\0";
+ static char *phelp = &helpbuf[0];
+ if (lasthelp_lineedit == current_lineedit)
+ return &helpbuf[0];
+ if (lasthelp_lineedit == -1) {
+ LYstrncpy(helpbuf, helpfilepath, sizeof(helpbuf) - 1);
+ phelp += strlen(helpbuf);
+ }
+ if (LYLineeditHelpURLs[current_lineedit] &&
+ strlen(LYLineeditHelpURLs[current_lineedit]) &&
+ (strlen(LYLineeditHelpURLs[current_lineedit]) <=
+ sizeof(helpbuf) - (phelp - helpbuf))) {
+ LYstrncpy(phelp, LYLineeditHelpURLs[current_lineedit],
+ sizeof(helpbuf) - (phelp - helpbuf) - 1);
+ lasthelp_lineedit = current_lineedit;
+ return (&helpbuf[0]);
+ }
+ return NULL;
+}
/*
* A replacement for 'strsep()'
*/
@@ -2295,11 +4985,6 @@ PUBLIC char *LYstrsep ARGS2(
if (!stringp || !*stringp) /* nothing to do? */
return 0; /* then don't fall on our faces */
- if (!**stringp) { /* empty string: */
- *stringp = 0; /* let caller see he's done; */
- return 0; /* no tokens in an empty string */
- }
-
out = *stringp; /* save the start of the string */
tmp = strpbrk(*stringp, delim);
if (tmp) {
@@ -2318,8 +5003,8 @@ PUBLIC char *LYstrsep ARGS2(
* It is a case insensitive search.
*/
PUBLIC char * LYstrstr ARGS2(
- char *, chptr,
- CONST char *, tarptr)
+ char *, chptr,
+ CONST char *, tarptr)
{
int len = strlen(tarptr);
@@ -2345,8 +5030,8 @@ PUBLIC char * LYstrstr ARGS2(
* It is a case insensitive search.
*/
PUBLIC char * LYno_attr_char_case_strstr ARGS2(
- char *, chptr,
- char *, tarptr)
+ char *, chptr,
+ char *, tarptr)
{
register char *tmpchptr, *tmptarptr;
@@ -2399,8 +5084,8 @@ PUBLIC char * LYno_attr_char_case_strstr ARGS2(
* It is a case sensitive search.
*/
PUBLIC char * LYno_attr_char_strstr ARGS2(
- char *, chptr,
- char *, tarptr)
+ char *, chptr,
+ char *, tarptr)
{
register char *tmpchptr, *tmptarptr;
@@ -2445,25 +5130,32 @@ PUBLIC char * LYno_attr_char_strstr ARGS2(
* LYno_attr_mbcs_case_strstr will find the first occurrence of the string
* pointed to by tarptr in the string pointed to by chptr.
* It takes account of MultiByte Character Sequences (UTF8).
- * The physical length of the displayed string up to the end of the target
- * string is returned in *nendp if the search is successful.
+ * The physical lengths of the displayed string up to the start and
+ * end (= next position after) of the target string are returned in *nstartp
+ * and *nendp if the search is successful.
+ * These lengths count glyph cells if count_gcells is set. (Full-width
+ * characters in CJK mode count as two.) Normally that's what we want.
+ * They count actual glyphs if count_gcells is unset. (Full-width
+ * characters in CJK mode count as one.)
* It ignores the characters: LY_UNDERLINE_START_CHAR and
* LY_UNDERLINE_END_CHAR
* LY_BOLD_START_CHAR
- * LY_BOLD_END_CHAR
- * LY_SOFT_HYPHEN
+ * LY_BOLD_END_CHAR
+ * LY_SOFT_HYPHEN
* if present in chptr.
* It assumes UTF8 if utf_flag is set.
* It is a case insensitive search. - KW & FM
*/
-PUBLIC char * LYno_attr_mbcs_case_strstr ARGS5(
- char *, chptr,
- char *, tarptr,
+PUBLIC char * LYno_attr_mbcs_case_strstr ARGS6(
+ char *, chptr,
+ CONST char *, tarptr,
BOOL, utf_flag,
+ BOOL, count_gcells,
int *, nstartp,
int *, nendp)
{
- register char *tmpchptr, *tmptarptr;
+ char *tmpchptr;
+ CONST char *tmptarptr;
int len = 0;
int offset;
@@ -2499,9 +5191,9 @@ PUBLIC char * LYno_attr_mbcs_case_strstr ARGS5(
/*
* One char target.
*/
- *nstartp = offset;
- *nendp = len;
- return(chptr);
+ if (nstartp) *nstartp = offset;
+ if (nendp) *nendp = len;
+ return(chptr);
}
if (!utf_flag && HTCJK != NOCJK && !isascii(*chptr) &&
*chptr == *tarptr &&
@@ -2516,21 +5208,22 @@ PUBLIC char * LYno_attr_mbcs_case_strstr ARGS5(
*/
tmpchptr++;
tmptarptr++;
+ if (count_gcells) tarlen++;
if (*tmptarptr == '\0') {
/*
* One character match. - FM
*/
- *nstartp = offset;
- *nendp = len + tarlen;
+ if (nstartp) *nstartp = offset;
+ if (nendp) *nendp = len + tarlen;
return(chptr);
}
- tarlen++;
} else {
/*
* It's not a match, so go back to
* seeking a first target match. - FM
*/
chptr++;
+ if (count_gcells) len++;
continue;
}
}
@@ -2538,15 +5231,16 @@ PUBLIC char * LYno_attr_mbcs_case_strstr ARGS5(
* See if the rest of the target matches. - FM
*/
while (1) {
- if (!IsSpecialAttrChar(*tmpchptr)) {
+ if (!IsSpecialAttrChar(*tmpchptr)) {
if (!utf_flag && HTCJK != NOCJK && !isascii(*tmpchptr)) {
if (*tmpchptr == *tmptarptr &&
*(tmpchptr + 1) == *(tmptarptr + 1) &&
!IsSpecialAttrChar(*(tmpchptr + 1))) {
tmpchptr++;
tmptarptr++;
+ if (count_gcells) tarlen++;
} else {
- break;
+ break;
}
} else if (0 != UPPER8(*tmpchptr, *tmptarptr)) {
break;
@@ -2558,18 +5252,17 @@ PUBLIC char * LYno_attr_mbcs_case_strstr ARGS5(
tmpchptr++;
tmptarptr++;
- } else {
+ } else {
tmpchptr++;
- }
+ }
- if (*tmptarptr == '\0') {
- *nstartp = offset;
- *nendp = len + tarlen;
- return(chptr);
- }
- if (*tmpchptr == '\0') {
- break;
- }
+ if (*tmptarptr == '\0') {
+ if (nstartp) *nstartp = offset;
+ if (nendp) *nendp = len + tarlen;
+ return(chptr);
+ }
+ if (*tmpchptr == '\0')
+ break;
}
} else if (!(IS_UTF_EXTRA(*chptr) ||
IsSpecialAttrChar(*chptr))) {
@@ -2577,6 +5270,7 @@ PUBLIC char * LYno_attr_mbcs_case_strstr ARGS5(
*(chptr + 1) != '\0' &&
!IsSpecialAttrChar(*(chptr + 1))) {
chptr++;
+ if (count_gcells) len++;
}
len++;
}
@@ -2590,25 +5284,31 @@ PUBLIC char * LYno_attr_mbcs_case_strstr ARGS5(
* pointed to by tarptr in the string pointed to by chptr.
* It takes account of CJK and MultiByte Character Sequences (UTF8).
* The physical lengths of the displayed string up to the start and
- * end of the target string are returned in *nstartp and *nendp if
- * the search is successful.
+ * end (= next position after) the target string are returned in *nstartp
+ * and *nendp if the search is successful.
+ * These lengths count glyph cells if count_gcells is set. (Full-width
+ * characters in CJK mode count as two.) Normally that's what we want.
+ * They count actual glyphs if count_gcells is unset. (Full-width
+ * characters in CJK mode count as one.)
* It ignores the characters: LY_UNDERLINE_START_CHAR and
* LY_UNDERLINE_END_CHAR
* LY_BOLD_START_CHAR
* LY_BOLD_END_CHAR
- * LY_SOFT_HYPHEN
+ * LY_SOFT_HYPHEN
* if present in chptr.
* It assumes UTF8 if utf_flag is set.
* It is a case sensitive search. - KW & FM
*/
-PUBLIC char * LYno_attr_mbcs_strstr ARGS5(
- char *, chptr,
- char *, tarptr,
+PUBLIC char * LYno_attr_mbcs_strstr ARGS6(
+ char *, chptr,
+ CONST char *, tarptr,
BOOL, utf_flag,
+ BOOL, count_gcells,
int *, nstartp,
int *, nendp)
{
- register char *tmpchptr, *tmptarptr;
+ char *tmpchptr;
+ CONST char *tmptarptr;
int len = 0;
int offset;
@@ -2640,9 +5340,9 @@ PUBLIC char * LYno_attr_mbcs_strstr ARGS5(
/*
* One char target.
*/
- *nstartp = offset;
- *nendp = len + 1;
- return(chptr);
+ if (nstartp) *nstartp = offset;
+ if (nendp) *nendp = len;
+ return(chptr);
}
if (!utf_flag && HTCJK != NOCJK && !isascii(*chptr) &&
*tmpchptr != '\0' &&
@@ -2656,21 +5356,22 @@ PUBLIC char * LYno_attr_mbcs_strstr ARGS5(
*/
tmpchptr++;
tmptarptr++;
+ if (count_gcells) tarlen++;
if (*tmptarptr == '\0') {
/*
* One character match. - FM
*/
- *nstartp = offset;
- *nendp = len + tarlen;
+ if (nstartp) *nstartp = offset;
+ if (nendp) *nendp = len + tarlen;
return(chptr);
}
- tarlen++;
} else {
/*
* It's not a match, so go back to
* seeking a first target match. - FM
*/
chptr++;
+ if (count_gcells) len++;
continue;
}
}
@@ -2685,6 +5386,7 @@ PUBLIC char * LYno_attr_mbcs_strstr ARGS5(
!IsSpecialAttrChar(*(tmpchptr + 1))) {
tmpchptr++;
tmptarptr++;
+ if (count_gcells) tarlen++;
} else {
break;
}
@@ -2702,20 +5404,20 @@ PUBLIC char * LYno_attr_mbcs_strstr ARGS5(
}
if (*tmptarptr == '\0') {
- *nstartp = offset;
- *nendp = len + tarlen;
+ if (nstartp) *nstartp = offset;
+ if (nendp) *nendp = len + tarlen;
return(chptr);
}
- if (*tmpchptr == '\0') {
+ if (*tmpchptr == '\0')
break;
}
- }
} else if (!(IS_UTF_EXTRA(*chptr) ||
IsSpecialAttrChar(*chptr))) {
if (!utf_flag && HTCJK != NOCJK && !isascii(*chptr) &&
*(chptr + 1) != '\0' &&
!IsSpecialAttrChar(*(chptr + 1))) {
chptr++;
+ if (count_gcells) len++;
}
len++;
}
@@ -2724,63 +5426,6 @@ PUBLIC char * LYno_attr_mbcs_strstr ARGS5(
return(NULL);
}
-PUBLIC void LYOpenCloset NOARGS
-{
- /* We initialize the list-looka-like, i.e., the Closet */
- int i = 0;
- while(i < LYClosetSize){
- LYCloset[i] = NULL;
- i = i + 1;
- }
- LYClosetTop = 0;
-}
-
-PUBLIC void LYCloseCloset NOARGS
-{
- int i = 0;
-
- /* Clean up the list-looka-like, i.e., the Closet */
- while (i < LYClosetSize){
- FREE(LYCloset[i]);
- i = i + 1;
- }
-}
-
-/*
- * Strategy: We begin at the top and search downwards. We return the first
- * match, i.e., the newest since we search from the top. This should be made
- * more intelligent, but works for now.
- */
-PRIVATE char * LYFindInCloset ARGS1(char*, base)
-{
- int shelf;
- unsigned len = strlen(base);
-
- shelf = (LYClosetTop - 1 + LYClosetSize) % LYClosetSize;
-
- while (LYCloset[shelf] != NULL){
- if (!strncmp(base, LYCloset[shelf], len)) {
- return(LYCloset[shelf]);
- }
- shelf = (shelf - 1 + LYClosetSize) % LYClosetSize;
- }
- return(0);
-}
-
-PRIVATE int LYAddToCloset ARGS1(char*, str)
-{
- unsigned len = strlen(str);
-
- LYCloset[LYClosetTop] = malloc(len+1);
- if (!LYCloset[LYClosetTop])
- outofmem(__FILE__, "LYAddToCloset");
- strcpy(LYCloset[LYClosetTop], str);
-
- LYClosetTop = (LYClosetTop + 1) % LYClosetSize;
- FREE(LYCloset[LYClosetTop]);
- return(1);
-}
-
/*
* Allocate a new copy of a string, and returns it.
*/
@@ -2791,9 +5436,9 @@ PUBLIC char * SNACopy ARGS3(
{
FREE(*dest);
if (src) {
- *dest = (char *)calloc(1, n + 1);
+ *dest = typecallocn(char, n + 1);
if (*dest == NULL) {
- CTRACE(tfp, "Tried to calloc %d bytes\n", n);
+ CTRACE((tfp, "Tried to calloc %d bytes\n", n));
outofmem(__FILE__, "SNACopy");
}
strncpy (*dest, src, n);
@@ -2819,11 +5464,11 @@ PUBLIC char * SNACat ARGS3(
strncpy(*dest + length, src, n);
*(*dest + length + n) = '\0'; /* terminate */
} else {
- *dest = (char *)calloc(1, strlen(src) + 1);
+ *dest = typecallocn(char, n + 1);
if (*dest == NULL)
outofmem(__FILE__, "SNACat");
- strncpy(*dest, src, n);
- *dest[n] = '\0'; /* terminate */
+ memcpy(*dest, src, n);
+ (*dest)[n] = '\0'; /* terminate */
}
}
return *dest;
@@ -2850,7 +5495,7 @@ PRIVATE long UniToLowerCase ARGS1(long, upper)
* Try unicode_to_lower_case[].
*/
low = 0;
- high = sizeof(unicode_to_lower_case)/sizeof(unicode_to_lower_case[0]);
+ high = TABLESIZE(unicode_to_lower_case);
while (low < high) {
/*
** Binary search.
@@ -2883,91 +5528,37 @@ PRIVATE long UniToLowerCase ARGS1(long, upper)
*/
PUBLIC int UPPER8 ARGS2(int,ch1, int,ch2)
{
+ /* if they are the same or one is a null characters return immediately. */
+ if (ch1 == ch2)
+ return 0;
+ if (!ch2)
+ return UCH(ch1);
+ else if (!ch1)
+ return -UCH(ch2);
/* case-insensitive match for us-ascii */
- if ((unsigned char)TOASCII(ch1) < 128 && (unsigned char)TOASCII(ch2) < 128)
- return(TOUPPER(ch1) - TOUPPER(ch2));
-
- /* case-insensitive match for upper half */
- if ((unsigned char)TOASCII(ch1) > 127 && /* S/390 -- gil -- 2066 */
- (unsigned char)TOASCII(ch2) > 127)
- {
- if (DisplayCharsetMatchLocale)
- return(TOUPPER(ch1) - TOUPPER(ch2)); /* old-style */
- else
- {
- long uni_ch1 = UCTransToUni(ch1, current_char_set);
- long uni_ch2 = UCTransToUni(ch2, current_char_set);
- return(UniToLowerCase(uni_ch1) - UniToLowerCase(uni_ch2));
- }
- }
-
- return(-10); /* mismatch, if we come to here */
-}
-
-
-#ifdef NOTUSED
-/*
-** We extend this function for 8bit letters
-** using Lynx internal chartrans feature:
-** we assume that upper/lower case letters
-** have their "7bit approximation" images (in def7_uni.tbl)
-** matched case-insensitive (7bit).
-**
-** By this technique we automatically cover *any* charset
-** known for Lynx chartrans and need no any extra information for it.
-**
-** The cost of this assumption is that several differently accented letters
-** may be interpreted as equal, but this side effect is negligible
-** if the user search string is more than one character long. - LP
-**
-** We enable new technique only if DisplayCharsetMatchLocale = FALSE
-** (see description in LYCharSets.c)
-*/
-PUBLIC int UPPER8 ARGS2(int,ch1, int,ch2)
-{
-
- /* case-insensitive match for us-ascii */
- if ((unsigned char)TOASCII(ch1) < 128 && (unsigned char)TOASCII(ch2) < 128)
+ if (UCH(TOASCII(ch1)) < 128 && UCH(TOASCII(ch2)) < 128)
return(TOUPPER(ch1) - TOUPPER(ch2));
/* case-insensitive match for upper half */
- if ((unsigned char)TOASCII(ch1) > 127 && /* S/390 -- gil -- 2066 */
- (unsigned char)TOASCII(ch2) > 127)
+ if (UCH(TOASCII(ch1)) > 127 && /* S/390 -- gil -- 2066 */
+ UCH(TOASCII(ch2)) > 127)
{
if (DisplayCharsetMatchLocale)
return(TOUPPER(ch1) - TOUPPER(ch2)); /* old-style */
else
{
- /* compare "7bit approximation" for letters >127 */
- /* BTW, if we remove the check for >127 above */
- /* we get even more "relaxed" insensitive match... */
-
- int charset_in, charset_out, uck1, uck2;
- char replace_buf1 [10], replace_buf2 [10];
-
- charset_in = current_char_set; /* display character set */
- charset_out = UCGetLYhndl_byMIME("us-ascii");
-
- uck1 = UCTransCharStr(replace_buf1, sizeof(replace_buf1), ch1,
- charset_in, charset_out, YES);
- uck2 = UCTransCharStr(replace_buf2, sizeof(replace_buf2), ch2,
- charset_in, charset_out, YES);
-
- if ((uck1 > 0) && (uck2 > 0)) /* both replacement strings found */
- return (strcasecomp(replace_buf1, replace_buf2));
-
- /* check to be sure we have not lost any strange characters */
- /* which are not found in def7_uni.tbl but _equal_ in fact. */
- /* this also applied for "x-transparent" display mode. */
- if ((unsigned char)ch1==(unsigned char)ch2)
- return(0); /* match */
+ long uni_ch2 = UCTransToUni((char)ch2, current_char_set);
+ long uni_ch1;
+ if (uni_ch2 < 0)
+ return UCH(ch1);
+ uni_ch1 = UCTransToUni((char)ch1, current_char_set);
+ return(UniToLowerCase(uni_ch1) - UniToLowerCase(uni_ch2));
}
}
return(-10); /* mismatch, if we come to here */
}
-#endif /* NOTUSED */
/*
* Replaces 'fgets()' calls into a fixed-size buffer with reads into a buffer
@@ -2992,11 +5583,180 @@ PUBLIC char *LYSafeGets ARGS2(
if (strchr(buffer, '\n') != 0)
break;
}
- if (feof(fp)
- || ferror(fp)) {
+ if (ferror(fp)) {
+ FREE(result);
+ } else if (feof(fp) && result && *result == '\0') {
+ /*
+ * If the file ends in the middle of a line, return the
+ * partial line; if another call is made after this, it
+ * will return NULL. - kw
+ */
FREE(result);
}
if (src != 0)
*src = result;
return result;
}
+
+#ifdef EXP_FILE_UPLOAD
+static char basis_64[] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+#define B64_LINE 76
+
+PUBLIC void base64_encode ARGS3(
+ char *, dest,
+ char *, src,
+ int, len)
+{
+ int rlen; /* length of result string */
+ unsigned char c1, c2, c3;
+ char *eol, *r, *str;
+ int eollen;
+ int chunk;
+
+ str = src;
+ eol = "\n";
+ eollen = 1;
+
+ /* calculate the length of the result */
+ rlen = (len+2) / 3 * 4; /* encoded bytes */
+ if (rlen) {
+ /* add space for EOL */
+ rlen += ((rlen-1) / B64_LINE + 1) * eollen;
+ }
+
+ /* allocate a result buffer */
+ r = dest;
+
+ /* encode */
+ for (chunk=0; len > 0; len -= 3, chunk++) {
+ if (chunk == (B64_LINE/4)) {
+ char *c = eol;
+ char *e = eol + eollen;
+ while (c < e)
+ *r++ = *c++;
+ chunk = 0;
+ }
+ c1 = *str++;
+ c2 = *str++;
+ *r++ = basis_64[c1>>2];
+ *r++ = basis_64[((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)];
+ if (len > 2) {
+ c3 = *str++;
+ *r++ = basis_64[((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)];
+ *r++ = basis_64[c3 & 0x3F];
+ } else if (len == 2) {
+ *r++ = basis_64[(c2 & 0xF) << 2];
+ *r++ = '=';
+ } else { /* len == 1 */
+ *r++ = '=';
+ *r++ = '=';
+ }
+ }
+ if (rlen) {
+ /* append eol to the result string */
+ char *c = eol;
+ char *e = eol + eollen;
+ while (c < e)
+ *r++ = *c++;
+ }
+ *r = '\0'; /* every SV in perl should be NUL-terminated */
+}
+
+#endif /* EXP_FILE_UPLOAD */
+
+#ifdef EXP_CMD_LOGGING
+PRIVATE FILE *cmd_logfile;
+PRIVATE FILE *cmd_script;
+
+PUBLIC void LYOpenCmdLogfile ARGS2(
+ int, argc,
+ char **, argv)
+{
+ int n;
+
+ if (lynx_cmd_logfile != 0) {
+ cmd_logfile = LYNewTxtFile(lynx_cmd_logfile);
+ if (cmd_logfile != 0) {
+ fprintf(cmd_logfile, "# Command logfile created by %s %s (%s)\n",
+ LYNX_NAME, LYNX_VERSION, LYVersionDate());
+ for (n = 0; n < argc; n++) {
+ fprintf(cmd_logfile, "# Arg%d = %s\n", n, argv[n]);
+ }
+ }
+ }
+}
+
+PUBLIC BOOL LYHaveCmdScript NOARGS
+{
+ return (BOOL)(cmd_script != 0);
+}
+
+PUBLIC void LYOpenCmdScript NOARGS
+{
+ if (lynx_cmd_script != 0) {
+ cmd_script = fopen(lynx_cmd_script, TXT_R);
+ CTRACE((tfp, "LYOpenCmdScript(%s) %s\n",
+ lynx_cmd_script,
+ cmd_script != 0 ? "SUCCESS" : "FAIL"));
+ }
+}
+
+PUBLIC int LYReadCmdKey ARGS1(
+ int, mode)
+{
+ int ch = -1;
+
+ if (cmd_script != 0) {
+ char *buffer = 0;
+ char *src;
+ char *tmp;
+
+ while (LYSafeGets(&buffer, cmd_script) != 0) {
+ LYTrimTrailing(buffer);
+ src = LYSkipBlanks(buffer);
+ tmp = LYSkipNonBlanks(src);
+ if (tmp - src != 3
+ || strncasecomp(src, "key", 3))
+ continue;
+ src = LYSkipBlanks(tmp);
+ if ((ch = LYStringToKeycode(src)) >= 0) {
+ LYrefresh();
+ break;
+ }
+ }
+ FREE(buffer);
+ } else {
+ ch = LYgetch_for(mode);
+ }
+ CTRACE((tfp, "LYReadCmdKey(%d) ->%c (%#x)\n", mode, ch, ch));
+ LYWriteCmdKey(ch);
+ return ch;
+}
+
+/*
+ * Write a LYKeymapCode 'ch' to the logfile.
+ */
+PUBLIC void LYWriteCmdKey ARGS1(
+ int, ch)
+{
+ if (cmd_logfile != 0) {
+ fprintf(cmd_logfile, "key %s\n", LYKeycodeToString(ch, FALSE));
+ }
+}
+
+PUBLIC void LYCloseCmdLogfile NOARGS
+{
+ if (cmd_logfile != 0) {
+ LYCloseOutput(cmd_logfile);
+ cmd_logfile = 0;
+ }
+ if (cmd_script != 0) {
+ LYCloseInput(cmd_script);
+ cmd_script = 0;
+ }
+ FREE(lynx_cmd_logfile);
+ FREE(lynx_cmd_script);
+}
+#endif /* EXP_CMD_LOGGING */
diff --git a/gnu/usr.bin/lynx/src/LYStrings.h b/gnu/usr.bin/lynx/src/LYStrings.h
index cb2acf490dd..f689c2a61cd 100644
--- a/gnu/usr.bin/lynx/src/LYStrings.h
+++ b/gnu/usr.bin/lynx/src/LYStrings.h
@@ -3,6 +3,13 @@
#include <LYCurses.h>
+typedef enum {
+ NORECALL = 0
+ , RECALL_URL
+ , RECALL_CMD
+ , RECALL_MAIL
+} RecallType;
+
/* UPPER8(ch1,ch2) is an extension of (TOUPPER(ch1) - TOUPPER(ch2)) */
extern int UPPER8 PARAMS((
int ch1,
@@ -13,26 +20,26 @@ extern int peek_mouse_link NOPARAMS;
extern int peek_mouse_levent NOPARAMS;
extern int fancy_mouse PARAMS((WINDOW *win, int row, int *position));
-#ifdef HAVE_STRERROR
-#define LYStrerror strerror
-#else
-extern char *LYStrerror PARAMS((
- int code));
-#endif /* HAVE_STRERROR */
-
extern char * LYstrncpy PARAMS((
char * dst,
CONST char * src,
int n));
extern void ena_csi PARAMS((BOOLEAN flag));
+extern int get_popup_number PARAMS((
+ char * msg,
+ int * c,
+ int * rel));
+extern int LYarrayLength PARAMS((CONST char ** list));
+extern int LYarrayWidth PARAMS((CONST char ** list));
extern int LYgetch NOPARAMS;
-extern int LYgetch_for PARAMS((
- int code));
+extern int LYgetch_choice NOPARAMS;
+extern int LYgetch_input NOPARAMS;
+extern int LYgetch_single NOPARAMS;
extern int LYgetstr PARAMS((
char * inputline,
int hidden,
size_t bufsize,
- int recall));
+ RecallType recall));
extern char *LYstrsep PARAMS((
char ** stringp,
CONST char * delim));
@@ -51,19 +58,29 @@ extern char * LYmbcs_skip_glyphs PARAMS((
BOOL utf_flag));
extern int LYmbcsstrlen PARAMS((
char * str,
- BOOL utf_flag));
+ BOOL utf_flag,
+ BOOL count_gcells));
+
extern char * LYno_attr_mbcs_strstr PARAMS((
char * chptr,
- char * tarptr,
+ CONST char * tarptr,
BOOL utf_flag,
+ BOOL count_gcells,
int * nstartp,
int * nendp));
extern char * LYno_attr_mbcs_case_strstr PARAMS((
char * chptr,
- char * tarptr,
+ CONST char * tarptr,
BOOL utf_flag,
+ BOOL count_gcells,
int * nstartp,
int * nendp));
+
+#define LYno_attr_mb_strstr(chptr, tarptr, utf_flag, count_gcells, nstartp, nendp) \
+ (case_sensitive \
+ ? LYno_attr_mbcs_strstr(chptr, tarptr, utf_flag, count_gcells, nstartp, nendp) \
+ : LYno_attr_mbcs_case_strstr(chptr, tarptr, utf_flag, count_gcells, nstartp, nendp))
+
extern char * LYno_attr_char_strstr PARAMS((
char * chptr,
char * tarptr));
@@ -71,6 +88,11 @@ extern char * LYno_attr_char_case_strstr PARAMS((
char * chptr,
char * tarptr));
+#define LYno_attr_strstr(chptr, tarptr) \
+ (case_sensitive \
+ ? LYno_attr_char_strstr(chptr, tarptr) \
+ : LYno_attr_char_case_strstr(chptr, tarptr))
+
extern char * SNACopy PARAMS((
char ** dest,
CONST char * src,
@@ -84,7 +106,28 @@ extern char * SNACat PARAMS((
extern char *LYSafeGets PARAMS((char ** src, FILE * fp));
+#ifdef EXP_CMD_LOGGING
+extern BOOL LYHaveCmdScript NOPARAMS;
+extern int LYReadCmdKey PARAMS((int mode));
+extern void LYCloseCmdLogfile NOPARAMS;
+extern void LYOpenCmdLogfile PARAMS((int argc, char **argv));
+extern void LYOpenCmdScript NOPARAMS;
+extern void LYWriteCmdKey PARAMS((int ch));
+#else
+#define LYHaveCmdScript() FALSE
+#define LYReadCmdKey(mode) LYgetch_for(mode)
+#define LYCloseCmdLogfile() /* nothing */
+#endif
+
+#ifdef EXP_FILE_UPLOAD
+extern void base64_encode PARAMS((char * dest, char * src, int len));
+#endif
+
/* values for LYgetch */
+/* The following are lynxkeycodes, not to be confused with
+ lynxactioncodes (LYK_*) to which they are often mapped.
+ The lynxkeycodes include all single-byte keys as a subset. - kw
+*/
#define UPARROW 256 /* 0x100 */
#define DNARROW 257 /* 0x101 */
#define RTARROW 258 /* 0x102 */
@@ -101,25 +144,51 @@ extern char *LYSafeGets PARAMS((char ** src, FILE * fp));
#define REMOVE_KEY 269 /* 0x10D */
#define DO_NOTHING 270 /* 0x10E */
#define BACKTAB_KEY 271 /* 0x10F */
-#define MOUSE_KEY 0x11d /* 0x11D */
-/* *** NOTE: ***
+#define MOUSE_KEY 285 /* 0x11D */
+/* ***** NOTES: *****
If you add definitions for new lynxkeycodes to the above list that
need to be mapped to LYK_* lynxactioncodes -
- AT LEAST the tables keymap[] and key_override[] in LYKeymap.c
have to be changed/reviewed, AS WELL AS the lineedit binding
tables in LYEditmap.c !
- KEYMAP_SIZE, defined in LYKeymap.h, may need to be changed !
+ - See also table named_keys[] in LYKeymap.c for 'pretty' strings
+ for the keys with codes >= 256 (to appear on the 'K'eymap page).
+ New keycodes should probably be assigned consecutively, so their
+ key names can be easily added to named_keys[] (but see next point).
+ They should also be documented in lynx.cfg.
+ - The DOS port uses its own native codes for some keys, unless
+ they are remapped by the code in LYgetch(). See *.key files
+ in docs/ directory. Adding new keys here may conflict with
+ those codes (affecting DOS users), unless/until remapping is
+ added or changed in LYgetch().
+ (N)curses keypad codes (KEY_* from curses.h) can also directly
+ appear as lynxkeycodes and conflict with our assignments, although
+ that shouldn't happen - the useful ones should be recognized in
+ LYgetch().
+ - The actual recognition of raw input keys or escape sequences, and
+ mapping to our lynxkeycodes, take place in LYgetch() and/or its
+ subsidiary functions and/or the curses/slang/etc. libraries.
+ The basic lynxkeycodes can appear combined with various flags in
+ higher-order bits as extended lynxkeycodes; see macros in LYKeymap.h.
+ The range of possible basic values is therefore limited, they have
+ to be less than LKC_ISLKC (even if KEYMAP_SIZE is increased).
*/
-
-# define FOR_PANEL 0
-# define FOR_CHOICE 1
-# define FOR_INPUT 2
+# define FOR_PANEL 0 /* normal screen, also LYgetch default */
+# define FOR_CHOICE 1 /* mouse menu */
+# define FOR_INPUT 2 /* form input and textarea field */
+# define FOR_PROMPT 3 /* string prompt editing */
+# define FOR_SINGLEKEY 4 /* single key prompt, confirmation */
#define VISIBLE 0
#define HIDDEN 1
-#define NORECALL 0
-#define RECALL 1
+
+#ifdef EXP_ALT_BINDINGS
+/* Enable code implementing additional, mostly emacs-like, line-editing
+ functions. - kw */
+#define ENHANCED_LINEEDIT
+#endif
/* EditFieldData preserves state between calls to LYEdit1
*/
@@ -139,6 +208,11 @@ typedef struct _EditFieldData {
int xpan; /* Horizontal scroll offset */
int pos; /* Insertion point in string */
int margin; /* Number of columns look-ahead/look-back */
+ int current_modifiers; /* Modifiers for next input lynxkeycode */
+#ifdef ENHANCED_LINEEDIT
+ int mark; /* position of emacs-like mark, or -1-pos to denote
+ unactive mark. */
+#endif
char buffer[1024]; /* String buffer */
@@ -146,47 +220,80 @@ typedef struct _EditFieldData {
/* line-edit action encoding */
-#define LYE_NOP 0 /* Do Nothing */
-#define LYE_CHAR (LYE_NOP +1) /* Insert printable char */
-#define LYE_ENTER (LYE_CHAR +1) /* Input complete, return char/lynxkeycode */
-#define LYE_TAB (LYE_ENTER +1) /* Input complete, return TAB */
-#define LYE_ABORT (LYE_TAB +1) /* Input cancelled */
+typedef enum {
+ LYE_NOP = 0 /* Do Nothing */
+ ,LYE_CHAR /* Insert printable char */
+ ,LYE_ENTER /* Input complete, return char/lynxkeycode */
+ ,LYE_TAB /* Input complete, return TAB */
+ ,LYE_STOP /* Input complete, deactivate */
+ ,LYE_ABORT /* Input cancelled */
-#define LYE_FORM_PASS (LYE_ABORT +1) /* In form fields: input complete,
- return char / lynxkeycode;
- Elsewhere: Do Nothing */
+ ,LYE_FORM_PASS /* In form fields: input complete,
+ return char / lynxkeycode;
+ Elsewhere: Do Nothing */
-#define LYE_DELN (LYE_FORM_PASS +1) /* Delete next/curr char */
-#define LYE_DELC (LYE_DELN) /* Obsolete (DELC case was equiv to DELN) */
-#define LYE_DELP (LYE_DELN +1) /* Delete prev char */
-#define LYE_DELNW (LYE_DELP +1) /* Delete next word */
-#define LYE_DELPW (LYE_DELNW +1) /* Delete prev word */
+ ,LYE_DELN /* Delete next/curr char */
+ ,LYE_DELC /* Obsolete (DELC case was equiv to DELN) */
+ ,LYE_DELP /* Delete prev char */
+ ,LYE_DELNW /* Delete next word */
+ ,LYE_DELPW /* Delete prev word */
-#define LYE_ERASE (LYE_DELPW +1) /* Erase the line */
+ ,LYE_ERASE /* Erase the line */
-#define LYE_BOL (LYE_ERASE +1) /* Go to begin of line */
-#define LYE_EOL (LYE_BOL +1) /* Go to end of line */
-#define LYE_FORW (LYE_EOL +1) /* Cursor forwards */
-#define LYE_BACK (LYE_FORW +1) /* Cursor backwards */
-#define LYE_FORWW (LYE_BACK +1) /* Word forward */
-#define LYE_BACKW (LYE_FORWW +1) /* Word back */
+ ,LYE_BOL /* Go to begin of line */
+ ,LYE_EOL /* Go to end of line */
+ ,LYE_FORW /* Cursor forwards */
+ ,LYE_FORW_RL /* Cursor forwards or right link */
+ ,LYE_BACK /* Cursor backwards */
+ ,LYE_BACK_LL /* Cursor backwards or left link */
+ ,LYE_FORWW /* Word forward */
+ ,LYE_BACKW /* Word back */
-#define LYE_LOWER (LYE_BACKW +1) /* Lower case the line */
-#define LYE_UPPER (LYE_LOWER +1) /* Upper case the line */
+ ,LYE_LOWER /* Lower case the line */
+ ,LYE_UPPER /* Upper case the line */
-#define LYE_LKCMD (LYE_UPPER +1) /* Invoke command prompt */
+ ,LYE_LKCMD /* Invoke command prompt */
-#define LYE_AIX (LYE_LKCMD +1) /* Hex 97 */
+ ,LYE_AIX /* Hex 97 */
-#define LYE_DELBL (LYE_AIX +1) /* Delete back to BOL */
-#define LYE_DELEL (LYE_DELBL +1) /* Delete thru EOL */
+ ,LYE_DELBL /* Delete back to BOL */
+ ,LYE_DELEL /* Delete thru EOL */
+
+ ,LYE_SWMAP /* Switch input keymap */
+
+ ,LYE_TPOS /* Transpose characters */
+
+ ,LYE_SETM1 /* Set modifier 1 flag */
+ ,LYE_SETM2 /* Set modifier 2 flag */
+ ,LYE_UNMOD /* Fall back to no-modifier command */
+
+ ,LYE_C1CHAR /* Insert C1 char if printable */
+
+ ,LYE_SETMARK /* emacs-like set-mark-command */
+ ,LYE_XPMARK /* emacs-like exchange-point-and-mark */
+ ,LYE_KILLREG /* emacs-like kill-region */
+ ,LYE_YANK /* emacs-like yank */
+#ifdef CAN_CUT_AND_PASTE
+ ,LYE_PASTE /* ClipBoard to Lynx */
+#endif
+} LYEditCodes;
+/* All preceding values must be within 0x00..0x7f - kw */
+
+/* The following are meant to be bitwise or-ed: */
+#define LYE_DF 0x80 /* Flag to set modifier 3 AND do other
+ action */
+#define LYE_FORM_LAC 0x1000 /* Flag to pass lynxactioncode given by
+ lower bits. Doesn't fit in a char! */
-#define LYE_SWMAP (LYE_DELEL +1) /* Switch input keymap */
#if defined(USE_KEYMAPS)
extern int lynx_initialize_keymaps NOPARAMS;
+extern int map_string_to_keysym PARAMS((CONST char * src, int *lec));
#endif
+extern char *LYElideString PARAMS((
+ char * str,
+ int cut_pos));
extern void LYEscapeStartfile PARAMS((
char ** buffer));
extern void LYLowerCase PARAMS((
@@ -218,28 +325,46 @@ extern void LYSetupEdit PARAMS((
int maxdsp));
extern void LYRefreshEdit PARAMS((
EditFieldData * edit));
-extern int EditBinding PARAMS((int ch));
+extern int EditBinding PARAMS((int ch)); /* in LYEditmap.c */
+extern BOOL LYRemapEditBinding PARAMS((
+ int xlkc,
+ int lec,
+ int select_edi)); /* in LYEditmap.c */
+extern int LYKeyForEditAction PARAMS((int lec)); /* in LYEditmap.c */
+extern int LYEditKeyForAction PARAMS((int lac, int *pmodkey));/* LYEditmap.c */
extern int LYEdit1 PARAMS((
EditFieldData * edit,
int ch,
int action,
BOOL maxMessage));
-extern void LYOpenCloset NOPARAMS;
-extern void LYCloseCloset NOPARAMS;
+extern void LYCloseCloset PARAMS((RecallType recall));
+extern int LYhandlePopupList PARAMS((
+ int cur_choice,
+ int ly,
+ int lx,
+ CONST char ** choices,
+ int width,
+ int i_length,
+ int disabled,
+ BOOLEAN for_mouse,
+ BOOLEAN numbered));
+
+typedef unsigned char LYEditCode;
extern int current_lineedit;
extern char * LYLineeditNames[];
-extern char * LYLineEditors[];
+extern LYEditCode * LYLineEditors[];
+extern CONST char * LYLineeditHelpURLs[];
-/* Push a character through the lineedit machinery */
-#ifdef NOT_ASCII /* S/390 -- gil -- 2080 */
-#define EditBinding(c) (LYLineEditors[current_lineedit][(c)<256 ? TOASCII(c) : c])
-#else /* NOT_ASCII */
-#define EditBinding(c) (LYLineEditors[current_lineedit][c])
-#endif /* NOT_ASCII */
-#define LYLineEdit(e,c,m) LYEdit1(e,c,EditBinding(c),m)
+extern CONST char * LYLineeditHelpURL NOPARAMS;
+
+extern int escape_bound;
+
+#define LYLineEdit(e,c,m) LYEdit1(e,c,EditBinding(c)&~LYE_DF,m)
/* Dummy initializer for LYEditmap.c */
extern int LYEditmapDeclared NOPARAMS;
+int LYEditInsert PARAMS((EditFieldData *edit, unsigned char *s, int len, int map_active, BOOL maxMessage));
+
#endif /* LYSTRINGS_H */
diff --git a/gnu/usr.bin/lynx/src/LYStructs.h b/gnu/usr.bin/lynx/src/LYStructs.h
index 78075f48f83..fd95aee5460 100644
--- a/gnu/usr.bin/lynx/src/LYStructs.h
+++ b/gnu/usr.bin/lynx/src/LYStructs.h
@@ -34,7 +34,7 @@ typedef struct _document {
int line;
BOOL internal_link; /* whether doc was reached via an internal
(fragment) link. - kw */
-#ifdef USE_HASH
+#ifdef USE_COLOR_STYLE
char * style;
#endif
} document;
@@ -60,48 +60,108 @@ typedef struct _histstruct {
"internal links", otherwise -1 */
} histstruct;
+extern int Visited_Links_As;
+
+#define VISITED_LINKS_AS_FIRST_V 0
+#define VISITED_LINKS_AS_TREE 1
+#define VISITED_LINKS_AS_LATEST 2
+#define VISITED_LINKS_REVERSE 4
+
typedef struct _VisitedLink {
char * title;
char * address;
+ int level;
+ struct _VisitedLink *next_tree;
+ struct _VisitedLink *prev_latest;
+ struct _VisitedLink *next_latest;
+ struct _VisitedLink *prev_first;
} VisitedLink;
extern histstruct history[MAXHIST];
extern int nhist;
-typedef struct _lynx_html_item_type {
- struct _lynx_html_item_type *next; /* the next item in the linked list */
+/******************************************************************************/
+
+typedef struct _lynx_list_item_type {
+ struct _lynx_list_item_type *next; /* the next item in the linked list */
char *name; /* a description of the item */
char *command; /* the command to execute */
int always_enabled; /* a constant to tell whether or
* not to disable the printer
* when the no_print option is on
*/
-} lynx_html_item_type;
-
-/* for printer commands */
-typedef struct _lynx_printer_item_type {
- struct _lynx_printer_item_type *next; /* next item in the linked list */
- char *name; /* a description of the item */
- char *command; /* the command to execute */
- int always_enabled; /* a constant to tell whether or
- * not to disable the printer
- * when the no_print option is on
- */
- int pagelen; /* an integer to store the printer's
- * page length
- */
-} lynx_printer_item_type;
-extern lynx_printer_item_type *printers;
+ /* HTML lists: */
+ BOOL override_primary_action; /* whether primary action will be
+ * overridden by this - e.g. this allows
+ * invoking user's MUA when mailto: link
+ * is activated using normal "activate"
+ * command. This field is only examined
+ * by code that handles EXTERNAL command.
+ */
+ /* PRINTER lists: */
+ int pagelen; /* an integer to store the printer's
+ * page length
+ */
+} lynx_list_item_type;
+
+extern lynx_list_item_type *printers;
/* for download commands */
-extern lynx_html_item_type *downloaders;
+extern lynx_list_item_type *downloaders;
/* for upload commands */
-extern lynx_html_item_type *uploaders;
+extern lynx_list_item_type *uploaders;
#ifdef USE_EXTERNALS
/* for external commands */
-extern lynx_html_item_type *externals;
+extern lynx_list_item_type *externals;
+#endif
+
+/******************************************************************************/
+
+typedef struct
+{
+ CONST char *name;
+ int value;
+}
+Config_Enum;
+
+typedef int (*ParseFunc) PARAMS((char *));
+
+#define ParseUnionMembers \
+ lynx_list_item_type** add_value; \
+ BOOLEAN * set_value; \
+ int * int_value; \
+ char ** str_value; \
+ ParseFunc fun_value; \
+ long def_value
+
+typedef union {
+ ParseUnionMembers;
+} ParseUnion;
+
+#ifdef PARSE_DEBUG
+#define ParseUnionPtr Config_Type *
+#define ParseUnionOf(tbl) tbl
+#define ParseData ParseUnionMembers
+#define UNION_ADD(v) &v, 0, 0, 0, 0, 0
+#define UNION_SET(v) 0, &v, 0, 0, 0, 0
+#define UNION_INT(v) 0, 0, &v, 0, 0, 0
+#define UNION_STR(v) 0, 0, 0, &v, 0, 0
+#define UNION_ENV(v) 0, 0, 0, v, 0, 0
+#define UNION_FUN(v) 0, 0, 0, 0, v, 0
+#define UNION_DEF(v) 0, 0, 0, 0, 0, v
+#else
+#define ParseUnionPtr ParseUnion *
+#define ParseUnionOf(tbl) (ParseUnionPtr)(&(tbl->value))
+#define ParseData long value
+#define UNION_ADD(v) (long)&(v)
+#define UNION_SET(v) (long)&(v)
+#define UNION_INT(v) (long)&(v)
+#define UNION_STR(v) (long)&(v)
+#define UNION_ENV(v) (long) (v)
+#define UNION_FUN(v) (long) (v)
+#define UNION_DEF(v) (long) (v)
#endif
#endif /* LYSTRUCTS_H */
diff --git a/gnu/usr.bin/lynx/src/LYStyle.c b/gnu/usr.bin/lynx/src/LYStyle.c
index 27491a0ec03..6b31e467d9b 100644
--- a/gnu/usr.bin/lynx/src/LYStyle.c
+++ b/gnu/usr.bin/lynx/src/LYStyle.c
@@ -1,6 +1,6 @@
/* character level styles for Lynx
* (c) 1996 Rob Partington -- donated to the Lyncei (if they want it :-)
- * $Id: LYStyle.c,v 1.2 2000/03/25 18:17:12 maja Exp $
+ * $Id: LYStyle.c,v 1.3 2003/05/01 18:59:39 avsm Exp $
*/
#include <HTUtils.h>
#include <HTML.h>
@@ -25,106 +25,150 @@
#ifdef USE_COLOR_STYLE
+PRIVATE void style_initialiseHashTable NOPARAMS;
+
/* stack of attributes during page rendering */
PUBLIC int last_styles[128];
-PUBLIC int last_colorattr_ptr=0;
+PUBLIC int last_colorattr_ptr = 0;
PUBLIC bucket hashStyles[CSHASHSIZE];
PUBLIC bucket special_bucket =
{
- "<special>" /* in order something to be in trace. */
+ "<special>", /* in order something to be in trace. */
+ 0, 0, 0, 0, NULL
};
PUBLIC bucket nostyle_bucket =
{
- "<NOSTYLE>" /* in order something to be in trace. */
+ "<NOSTYLE>", /* in order something to be in trace. */
+ 0, 0, 0, 0, NULL
};
PUBLIC int cached_tag_styles[HTML_ELEMENTS];
PUBLIC int current_tag_style;
-PUBLIC BOOL force_current_tag_style=FALSE;
+PUBLIC BOOL force_current_tag_style = FALSE;
PUBLIC char* forced_classname;
PUBLIC BOOL force_classname;
-/* definitions for the mono attributes we can use */
-static int ncursesMono[7] = {
- A_NORMAL, A_BOLD, A_REVERSE, A_UNDERLINE, A_STANDOUT, A_BLINK, A_DIM
-};
-
-/*
- * If these strings don't match the meanings of the above attributes,
- * you'll confuse the hell out of people, so make them the same. - RP
- */
-static char *Mono_Strings[7] =
-{
- "normal", "bold", "reverse", "underline", "standout", "blink", "dim"
-};
-
/* Remember the hash codes for common elements */
-PUBLIC int s_alink = NOSTYLE, s_a = NOSTYLE, s_status = NOSTYLE,
- s_label = NOSTYLE, s_value = NOSTYLE, s_high = NOSTYLE,
- s_normal = NOSTYLE, s_alert = NOSTYLE, s_title = NOSTYLE,
- s_whereis= NOSTYLE;
+PUBLIC int s_a = NOSTYLE;
+PUBLIC int s_aedit = NOSTYLE;
+PUBLIC int s_aedit_arr = NOSTYLE;
+PUBLIC int s_aedit_pad = NOSTYLE;
+PUBLIC int s_aedit_sel = NOSTYLE;
+PUBLIC int s_alert = NOSTYLE;
+PUBLIC int s_alink = NOSTYLE;
+PUBLIC int s_curedit = NOSTYLE;
+PUBLIC int s_forw_backw = NOSTYLE;
+PUBLIC int s_normal = NOSTYLE;
+PUBLIC int s_prompt_edit = NOSTYLE;
+PUBLIC int s_prompt_edit_arr = NOSTYLE;
+PUBLIC int s_prompt_edit_pad = NOSTYLE;
+PUBLIC int s_prompt_sel = NOSTYLE;
+PUBLIC int s_status = NOSTYLE;
+PUBLIC int s_title = NOSTYLE;
+PUBLIC int s_whereis = NOSTYLE;
+PUBLIC int s_menu_frame = NOSTYLE;
+PUBLIC int s_menu_bg = NOSTYLE;
+PUBLIC int s_menu_number = NOSTYLE;
+PUBLIC int s_menu_entry = NOSTYLE;
+PUBLIC int s_menu_active = NOSTYLE;
+PUBLIC int s_menu_sb = NOSTYLE;
+
+#ifdef USE_SCROLLBAR
+PUBLIC int s_sb_aa = NOSTYLE;
+PUBLIC int s_sb_bar = NOSTYLE;
+PUBLIC int s_sb_bg = NOSTYLE;
+PUBLIC int s_sb_naa = NOSTYLE;
+#endif
/* start somewhere safe */
+#define MAX_COLOR 16
PRIVATE int colorPairs = 0;
-PRIVATE int last_fA = COLOR_WHITE, last_bA = COLOR_BLACK;
+
+#ifdef USE_BLINK
+# define MAX_BLINK 2
+# define M_BLINK A_BLINK
+#else
+# define MAX_BLINK 1
+# define M_BLINK 0
+#endif
+
+PRIVATE unsigned char our_pairs[2][MAX_BLINK][MAX_COLOR][MAX_COLOR];
+
+/*
+ * Parse a string containing a combination of video attributes and color.
+ */
+PRIVATE void parse_either ARGS4(
+ char *, attrs,
+ int, dft_color,
+ int *, monop,
+ int *, colorp)
+{
+ int value;
+
+ while (*attrs != '\0') {
+ char *next = strchr(attrs, '+');
+ char save = (next != NULL) ? *next : '\0';
+ if (next == NULL)
+ next = attrs + strlen(attrs);
+
+ if (save != 0) /* attrs might be a constant string */
+ *next = '\0';
+ if ((value = string_to_attr(attrs)) != 0)
+ *monop |= value;
+ else if (colorp != 0
+ && (value = check_color(attrs, dft_color)) != ERR_COLOR)
+ *colorp = value;
+
+ attrs = next;
+ if (save != '\0')
+ *attrs++ = save;
+ }
+}
/* icky parsing of the style options */
-PRIVATE void parse_attributes ARGS5(char*,mono,char*,fg,char*,bg,int,style,char*,element)
+PRIVATE void parse_attributes ARGS5(
+ char *, mono,
+ char *, fg,
+ char *, bg,
+ int, style,
+ char *, element)
{
- int i;
- int mA = 0, fA = default_fg, bA = default_bg, cA = A_NORMAL;
+ int mA = A_NORMAL;
+ int fA = default_fg;
+ int bA = default_bg;
+ int cA = A_NORMAL;
int newstyle = hash_code(element);
- CTRACE(tfp, "CSS(PA):style d=%d / h=%d, e=%s\n", style, newstyle,element);
+ CTRACE2(TRACE_STYLE, (tfp, "CSS(PA):style d=%d / h=%d, e=%s\n", style, newstyle, element));
- for (i = 0; i < (int)TABLESIZE(Mono_Strings); i++)
- {
- if (!strcasecomp(Mono_Strings[i], mono))
- {
- mA = ncursesMono[i];
- }
- }
- if (!mA) {
- /*
- * Not found directly yet, see whether we have a combination
- * of several mono attributes separated by '+' - kw
- */
- char *cp0 = mono;
- char csep = '+';
- char *cp = strchr(mono, csep);
- while (cp) {
- *cp = '\0';
- for (i = 0; i < (int)TABLESIZE(Mono_Strings); i++)
- {
- if (!strcasecomp(Mono_Strings[i], cp0))
- {
- mA |= ncursesMono[i];
- }
- }
- if (!csep)
- break;
- *cp = csep;
- cp0 = cp + 1;
- cp = strchr(cp0, csep);
- if (!cp) {
- cp = cp0 + strlen(cp0);
- csep = '\0';
- }
- }
- }
- CTRACE(tfp, "CSS(CP):%d\n", colorPairs);
+ parse_either(mono, ERR_COLOR, &mA, (int *)0);
+ parse_either(bg, default_bg, &cA, &bA);
+ parse_either(fg, default_fg, &cA, &fA);
- fA = check_color(fg, default_fg);
- bA = check_color(bg, default_bg);
+ if (style == -1) { /* default */
+ CTRACE2(TRACE_STYLE, (tfp, "CSS(DEF):default_fg=%d, default_bg=%d\n", fA, bA));
+ default_fg = fA;
+ default_bg = bA;
+ default_color_reset = TRUE;
+ return;
+ }
if (fA == NO_COLOR) {
bA = NO_COLOR;
} else if (COLORS) {
+#ifdef USE_BLINK
+ if (term_blink_is_boldbg) {
+ if (fA >= COLORS)
+ cA = A_BOLD;
+ if (bA >= COLORS)
+ cA |= M_BLINK;
+ } else
+#endif
if (fA >= COLORS || bA >= COLORS)
cA = A_BOLD;
if (fA >= COLORS)
fA %= COLORS;
- if (bA > COLORS)
+ if (bA >= COLORS)
bA %= COLORS;
} else {
cA = A_BOLD;
@@ -138,19 +182,31 @@ PRIVATE void parse_attributes ARGS5(char*,mono,char*,fg,char*,bg,int,style,char*
*/
if (lynx_has_color && colorPairs < COLOR_PAIRS-1 && fA != NO_COLOR)
{
- if (colorPairs <= 0 || fA != last_fA || bA != last_bA) {
- colorPairs++;
- init_pair(colorPairs, fA, bA);
- last_fA = fA;
- last_bA = bA;
+ int curPair;
+
+ if (fA < MAX_COLOR
+ && bA < MAX_COLOR
+ && our_pairs[!!(cA & A_BOLD)][!!(cA & A_BLINK)][fA][bA])
+ curPair = our_pairs[!!(cA & A_BOLD)][!!(cA & M_BLINK)][fA][bA] - 1;
+ else {
+ curPair = ++colorPairs;
+ init_pair((short)curPair, (short)fA, (short)bA);
+ if (fA < MAX_COLOR
+ && bA < MAX_COLOR
+ && curPair < 255)
+ our_pairs[!!(cA & A_BOLD)][!!(cA & M_BLINK)][fA][bA] = curPair + 1;
}
+ CTRACE2(TRACE_STYLE, (tfp, "CSS(CURPAIR):%d\n", curPair));
if (style < DSTYLE_ELEMENTS)
- setStyle(style, COLOR_PAIR(colorPairs)|cA, cA, mA);
- setHashStyle(newstyle, COLOR_PAIR(colorPairs)|cA, cA, mA, element);
+ setStyle(style, COLOR_PAIR(curPair)|cA, cA, mA);
+ setHashStyle(newstyle, COLOR_PAIR(curPair)|cA, cA, mA, element);
}
else
{
- /* only mono is set */
+ if (lynx_has_color && fA != NO_COLOR) {
+ CTRACE2(TRACE_STYLE, (tfp, "CSS(NC): maximum of %d colorpairs exhausted\n", COLOR_PAIRS - 1));
+ }
+ /* only mono is set */
if (style < DSTYLE_ELEMENTS)
setStyle(style, -1, -1, mA);
setHashStyle(newstyle, -1, -1, mA, element);
@@ -160,8 +216,45 @@ PRIVATE void parse_attributes ARGS5(char*,mono,char*,fg,char*,bg,int,style,char*
/* parse a style option of the format
* STYLE:<OBJECT>:FG:BG
*/
-PRIVATE void parse_style ARGS1(char*,buffer)
+PRIVATE void parse_style ARGS1(char*, param)
{
+ static struct {
+ char *name;
+ int style;
+ int *set_hash;
+ } table[] = {
+ { "default", -1, 0 }, /* default fg/bg */
+ { "alink", DSTYLE_ALINK, 0 }, /* active link */
+ { "a", DSTYLE_LINK, 0 }, /* normal link */
+ { "a", HTML_A, 0 }, /* normal link */
+ { "status", DSTYLE_STATUS, 0 }, /* status bar */
+ { "label", DSTYLE_OPTION, 0 }, /* [INLINE]'s */
+ { "value", DSTYLE_VALUE, 0 }, /* [INLINE]'s */
+ { "high", DSTYLE_HIGH, 0 }, /* [INLINE]'s */
+ { "normal", DSTYLE_NORMAL, 0 },
+ { "candy", DSTYLE_CANDY, 0 }, /* [INLINE]'s */
+ { "whereis", DSTYLE_WHEREIS, &s_whereis },
+ { "edit.active.pad", DSTYLE_ELEMENTS, &s_aedit_pad },
+ { "edit.active.arrow", DSTYLE_ELEMENTS, &s_aedit_arr },
+ { "edit.active.marked", DSTYLE_ELEMENTS, &s_aedit_sel },
+ { "edit.active", DSTYLE_ELEMENTS, &s_aedit },
+ { "edit.current", DSTYLE_ELEMENTS, &s_curedit },
+ { "edit.prompt.pad", DSTYLE_ELEMENTS, &s_prompt_edit_pad },
+ { "edit.prompt.arrow", DSTYLE_ELEMENTS, &s_prompt_edit_arr },
+ { "edit.prompt.marked", DSTYLE_ELEMENTS, &s_prompt_sel },
+ { "edit.prompt", DSTYLE_ELEMENTS, &s_prompt_edit },
+ { "forwbackw.arrow", DSTYLE_ELEMENTS, &s_forw_backw },
+ { "menu.frame", DSTYLE_ELEMENTS, &s_menu_frame },
+ { "menu.bg", DSTYLE_ELEMENTS, &s_menu_bg },
+ { "menu.n", DSTYLE_ELEMENTS, &s_menu_number },
+ { "menu.entry", DSTYLE_ELEMENTS, &s_menu_entry },
+ { "menu.active", DSTYLE_ELEMENTS, &s_menu_active },
+ { "menu.sb", DSTYLE_ELEMENTS, &s_menu_sb },
+ };
+ unsigned n;
+ BOOL found = FALSE;
+
+ char *buffer = strdup(param);
char *tmp = strchr(buffer, ':');
char *element, *mono, *fg, *bg;
@@ -174,15 +267,11 @@ The line must be of the form:\n\
OBJECT:MONO:COLOR (ie em:bold:brightblue:white)\n\
where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n\n"), buffer);
if (!dump_output_immediately) {
- exit_immediately(-1);
+ exit_immediately(EXIT_FAILURE);
}
exit(1);
}
- {
- char *i;
- for (i = buffer; *i; i++)
- *i = tolower(*i);
- }
+ strtolower(buffer);
*tmp = '\0';
element = buffer;
@@ -208,73 +297,38 @@ where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n\n"), buffer);
}
}
- CTRACE(tfp, "CSSPARSE:%s => %d %s\n",
+ CTRACE2(TRACE_STYLE, (tfp, "CSSPARSE:%s => %d %s\n",
element, hash_code(element),
- (hashStyles[hash_code(element)].name ? "used" : ""));
+ (hashStyles[hash_code(element)].name ? "used" : "")));
strtolower(element);
/*
* We use some pseudo-elements, so catch these first
*/
- if (!strncasecomp(element, "alink", 5)) /* active link */
- {
- parse_attributes(mono,fg,bg,DSTYLE_ALINK,"alink");
- }
- else if (!strcasecomp(element, "a")) /* normal link */
- {
- parse_attributes(mono,fg,bg, DSTYLE_LINK,"a");
- parse_attributes(mono,fg,bg, HTML_A,"a");
- }
- else if (!strncasecomp(element, "status", 4)) /* status bar */
- {
- parse_attributes(mono,fg,bg, DSTYLE_STATUS,"status");
- }
- else if (!strncasecomp(element, "label", 6)) /* [INLINE]'s */
- {
- parse_attributes(mono,fg,bg,DSTYLE_OPTION,"label");
- }
- else if (!strncasecomp(element, "value", 5)) /* [INLINE]'s */
- {
- parse_attributes(mono,fg,bg,DSTYLE_VALUE,"value");
+ for (n = 0; n < TABLESIZE(table); n++) {
+ if (!strcasecomp(element, table[n].name)) {
+ parse_attributes(mono, fg, bg, table[n].style, table[n].name);
+ if (table[n].set_hash != 0)
+ *(table[n].set_hash) = hash_code(table[n].name);
+ found = TRUE;
+ break;
+ }
}
- else if (!strncasecomp(element, "high", 4)) /* [INLINE]'s */
- {
- parse_attributes(mono,fg,bg,DSTYLE_HIGH,"high");
+
+ if (found) {
+ ;
}
else if (!strcasecomp(element, "normal")) /* added - kw */
{
parse_attributes(mono,fg,bg,DSTYLE_NORMAL,"html");
s_normal = hash_code("html"); /* rather bizarre... - kw */
}
- /* this may vanish */
- else if (!strncasecomp(element, "candy", 5)) /* [INLINE]'s */
- {
- parse_attributes(mono,fg,bg,DSTYLE_CANDY,"candy");
- }
- /* added for whereis search target - kw */
- else if (!strncasecomp(element, "whereis", 7))
- {
- parse_attributes(mono,fg,bg,DSTYLE_WHEREIS,"whereis");
- s_whereis = hash_code("whereis");
- }
/* Ok, it must be a HTML element, so look through the list until we
* find it
*/
else
{
-#if !defined(USE_HASH)
- int i;
- for (i = 0; i <HTML_ELEMENTS; i++)
- {
- if (!strcasecomp (HTML_dtd.tags[i].name, element))
- {
- CTRACE(tfp, "PARSECSS:applying style <%s,%s,%s> for HTML_%s\n",mono,fg,bg,HTML_dtd.tags[i].name);
- parse_attributes(mono,fg,bg,i+STARTAT,element);
- break;
- }
- }
-#else
int element_number = -1;
HTTag * t = SGMLFindTag(&HTML_dtd, element);
if (t && t->name) {
@@ -285,8 +339,8 @@ where OBJECT is one of EM,STRONG,B,I,U,BLINK etc.\n\n"), buffer);
parse_attributes(mono,fg,bg, element_number+STARTAT,element);
else
parse_attributes(mono,fg,bg, DSTYLE_ELEMENTS,element);
-#endif
}
+ FREE(buffer);
}
#ifdef LY_FIND_LEAKS
@@ -303,75 +357,126 @@ PRIVATE void free_colorstylestuff NOARGS
*/
PRIVATE void initialise_default_stylesheet NOARGS
{
+ static CONST char *table[] = {
+ "a:bold:green",
+ "alert:bold:yellow:red",
+ "alink:reverse:yellow:black",
+ "label:normal:magenta",
+ "status:reverse:yellow:blue",
+ "title:normal:magenta",
+ "whereis:reverse+underline:magenta:cyan"
+ };
+ unsigned n;
+ char temp[80];
+ CTRACE((tfp, "initialize_default_stylesheet\n"));
+ for (n = 0; n < TABLESIZE(table); n++) {
+ parse_style(strcpy(temp, table[n]));
+ }
}
/* Set all the buckets in the hash table to be empty */
-PUBLIC void style_initialiseHashTable NOARGS
+PRIVATE void style_initialiseHashTable NOARGS
{
- int i;
- static int firsttime = 1;
+ int i;
+ static int firsttime = 1;
- for (i = 0; i <CSHASHSIZE; i++)
- {
- if (firsttime)
- hashStyles[i].name = NULL;
- else
- FREE(hashStyles[i].name);
- hashStyles[i].color = -1;
- hashStyles[i].cattr = -1;
- hashStyles[i].mono = -1;
- }
- if (firsttime) {
- firsttime = 0;
+ for (i = 0; i <CSHASHSIZE; i++)
+ {
+ if (firsttime)
+ hashStyles[i].name = NULL;
+ else
+ FREE(hashStyles[i].name);
+ hashStyles[i].color = 0;
+ hashStyles[i].cattr = 0;
+ hashStyles[i].mono = 0;
+ }
+ if (firsttime) {
+ firsttime = 0;
#ifdef LY_FIND_LEAKS
- atexit(free_colorstylestuff);
+ atexit(free_colorstylestuff);
+#endif
+ }
+ s_alink = hash_code("alink");
+ s_a = hash_code("a");
+ s_status = hash_code("status");
+ s_alert = hash_code("alert");
+ s_title = hash_code("title");
+#ifdef USE_SCROLLBAR
+ s_sb_bar = hash_code("scroll.bar");
+ s_sb_bg = hash_code("scroll.back");
+ s_sb_aa = hash_code("scroll.arrow");
+ s_sb_naa = hash_code("scroll.noarrow");
#endif
- }
- s_high = hash_code("high");
- s_alink = hash_code("alink");
- s_value = hash_code("value");
- s_label = hash_code("label");
- s_a = hash_code("a");
- s_status = hash_code("status");
- s_alert = hash_code("alert");
- s_title = hash_code("title");
}
/* because curses isn't started when we parse the config file, we
* need to remember the STYLE: lines we encounter and parse them
* after curses has started
*/
-HTList *lss_styles = NULL;
+PRIVATE HTList *lss_styles = NULL;
PUBLIC void parse_userstyles NOARGS
{
- char *name;
- HTList *cur = lss_styles;
- colorPairs = 0;
- style_initialiseHashTable();
+ static BOOL first = TRUE;
+ char *name;
+ HTList *cur = lss_styles;
- /* set our styles to be the same as vanilla-curses-lynx */
- initialise_default_stylesheet();
+ colorPairs = 0;
+ style_initialiseHashTable();
- while ((name = HTList_nextObject(cur)) != NULL)
- {
- CTRACE(tfp, "LSS:%s\n", name ? name : "!?! empty !?!");
- if (name != NULL)
- parse_style(name);
+ /* set our styles to be the same as vanilla-curses-lynx */
+ if (HTList_isEmpty(cur)) {
+ initialise_default_stylesheet();
+ } else {
+ while ((name = HTList_nextObject(cur)) != NULL) {
+ CTRACE2(TRACE_STYLE, (tfp, "LSS:%s\n", name ? name : "!?! empty !?!"));
+ if (name != NULL)
+ parse_style(name);
}
+ }
+
+#define dft_style(a,b) if (a == NOSTYLE) a = b
+
+ dft_style(s_prompt_edit, s_normal);
+ dft_style(s_prompt_edit_arr, s_prompt_edit);
+ dft_style(s_prompt_edit_pad, s_prompt_edit);
+ dft_style(s_prompt_sel, s_prompt_edit);
+ dft_style(s_aedit, s_alink);
+ dft_style(s_aedit_arr, s_aedit);
+ dft_style(s_aedit_pad, s_aedit);
+ dft_style(s_curedit, s_aedit);
+ dft_style(s_aedit_sel, s_aedit);
+ dft_style(s_menu_bg, s_normal);
+ dft_style(s_menu_entry, s_menu_bg);
+ dft_style(s_menu_frame, s_menu_bg);
+ dft_style(s_menu_number, s_menu_bg);
+ dft_style(s_menu_active, s_alink);
}
-/* Add a STYLE: option line to our list */
-PUBLIC void HStyle_addStyle ARGS1(char*,buffer)
+/* Add a STYLE: option line to our list. Process "default:" early
+ for it to have the same semantic as other lines: works at any place
+ of the style file, the first line overrides the later ones. */
+PRIVATE void HStyle_addStyle ARGS1(char*, buffer)
{
- char *name = NULL;
- StrAllocCopy(name, buffer);
- if (lss_styles == NULL)
- lss_styles = HTList_new();
- strtolower(name);
- CTRACE(tfp, "READCSS:%s\n", name ? name : "!?! empty !?!");
- HTList_addObject (lss_styles, name);
+ char *name = NULL;
+
+ CTRACE((tfp, "HStyle_addStyle(%s)\n", buffer));
+ StrAllocCopy(name, buffer);
+ if (lss_styles == NULL)
+ lss_styles = HTList_new();
+ strtolower(name);
+ if (!strncasecomp(name, "default:", 8)) /* default fg/bg */
+ {
+ CTRACE2(TRACE_STYLE, (tfp, "READCSS.default%s:%s\n",
+ (default_color_reset ? ".ignore" : ""),
+ name ? name : "!?! empty !?!"));
+ if (!default_color_reset)
+ parse_style(name);
+ return; /* do not need to process it again */
+ }
+ CTRACE2(TRACE_STYLE, (tfp, "READCSS:%s\n", name ? name : "!?! empty !?!"));
+ HTList_addObject (lss_styles, name);
}
PUBLIC void style_deleteStyleList NOARGS
@@ -383,57 +488,49 @@ PUBLIC void style_deleteStyleList NOARGS
lss_styles = NULL;
}
-char* default_stylesheet[] = {
- "a:bold", "em:bold", "strong:bold", "b:bold", "i:bold",
- "alink:reverse", "status:reverse", NULL
-};
-
-PUBLIC void style_defaultStyleSheet NOARGS
-{
- int i;
- for (i = 0; default_stylesheet[i]; i++)
- HStyle_addStyle(default_stylesheet[i]);
-}
-
-PUBLIC int style_readFromFile ARGS1(char*, file)
+PRIVATE int style_readFromFileREC ARGS2(
+ char *, lss_filename,
+ char *, parent_filename)
{
FILE *fh;
char *buffer = NULL;
int len;
- CTRACE(tfp, "CSS:Reading styles from file: %s\n", file ? file : "?!? empty ?!?");
- if (file == NULL || *file == '\0')
+ CTRACE2(TRACE_STYLE, (tfp, "CSS:Reading styles from file: %s\n", lss_filename ? lss_filename : "?!? empty ?!?"));
+ if (lss_filename == NULL || *lss_filename == '\0')
return -1;
- fh = fopen(file, "r");
- if (!fh)
- {
+ if ((fh = LYOpenCFG(lss_filename, parent_filename, LYNX_LSS_FILE)) == 0) {
/* this should probably be an alert or something */
- CTRACE(tfp, "CSS:Can't open style file %s, using defaults\n", file);
+ CTRACE2(TRACE_STYLE, (tfp, "CSS:Can't open style file '%s', using defaults\n", lss_filename));
return -1;
}
- style_initialiseHashTable();
- style_deleteStyleList();
+ if (parent_filename == 0) {
+ style_initialiseHashTable();
+ style_deleteStyleList();
+ }
- while (LYSafeGets(&buffer, fh) != NULL)
- {
+ while (LYSafeGets(&buffer, fh) != NULL) {
LYTrimTrailing(buffer);
LYTrimTail(buffer);
LYTrimHead(buffer);
- if (buffer[0] != '#' && (len = strlen(buffer)) > 0)
+ if (!strncasecomp(buffer,"include:",8))
+ style_readFromFileREC(buffer+8, lss_filename);
+ else if (buffer[0] != '#' && (len = strlen(buffer)) > 0)
HStyle_addStyle(buffer);
}
- /* the default styles are added after the user styles in order
- ** that they come before them <grin> RP
- */
- /* style_defaultStyleSheet(); */
- fclose (fh);
- if (LYCursesON)
+ LYCloseInput (fh);
+ if ((parent_filename == 0) && LYCursesON)
parse_userstyles();
return 0;
}
+PUBLIC int style_readFromFile ARGS1(char*, filename)
+{
+ return style_readFromFileREC(filename, (char *)0);
+}
+
/* Used in HTStructured methods: - kw */
PUBLIC void TrimColorClass ARGS3(
@@ -462,8 +559,6 @@ PUBLIC void TrimColorClass ARGS3(
*end='\0';
}
*phcode = hash_code(lookfrom && *lookfrom ? lookfrom : &tmp[1]);
- CTRACE(tfp, "CSS:%s (trimmed %s)\n",
- (styleclassname ? styleclassname : "<null>"), tmp);
}
/* This function is designed as faster analog to TrimColorClass.
@@ -479,6 +574,9 @@ PUBLIC void FastTrimColorClass ARGS5 (
char* tag_start = *pstylename_end;
BOOLEAN found = FALSE;
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.fast-trim: [%s] from [%s]: ",
+ tag_name, stylename));
while (tag_start >= stylename)
{
for (; (tag_start >= stylename) && (*tag_start != ';') ; --tag_start)
@@ -493,6 +591,7 @@ PUBLIC void FastTrimColorClass ARGS5 (
*tag_start = '\0';
*pstylename_end = tag_start;
}
+ CTRACE2(TRACE_STYLE, (tfp, found ? "success.\n" : "failed.\n"));
*phcode = hash_code(tag_start+1);
}
@@ -508,7 +607,7 @@ PUBLIC void cache_tag_styles NOARGS
{
strcpy(buf, HTML_dtd.tags[i].name);
LYLowerCase(buf);
- cached_tag_styles[i] =hash_code(buf);
+ cached_tag_styles[i] = hash_code(buf);
}
}
diff --git a/gnu/usr.bin/lynx/src/LYStyle.h b/gnu/usr.bin/lynx/src/LYStyle.h
index 6df504cfa96..66f87127aac 100644
--- a/gnu/usr.bin/lynx/src/LYStyle.h
+++ b/gnu/usr.bin/lynx/src/LYStyle.h
@@ -1,6 +1,8 @@
#ifndef LYSTYLE_H
#define LYSTYLE_H
+#include <HTUtils.h>
+
#ifdef USE_COLOR_STYLE
#include <AttrList.h>
@@ -16,25 +18,19 @@ extern HTCharStyle displayStyles[DSTYLE_ELEMENTS];
extern int lynx_has_color;
/* Set all the buckets in the hash table to be empty */
-extern void style_initialiseHashTable NOPARAMS;
-
extern void parse_userstyles NOPARAMS;
-extern void HStyle_addStyle PARAMS((char* buffer));
-
extern void style_deleteStyleList NOPARAMS;
extern void style_defaultStyleSheet NOPARAMS;
extern int style_readFromFile PARAMS((char* file));
-
extern void TrimColorClass PARAMS((
CONST char * tagname,
char * styleclassname,
int * phcode));
-
/* this is an array of styles for tags that don't specify 'class' - the
values from that array will be suggested by SGML.c by setting the
following variable. Value of -1 means that style value should be calculated
diff --git a/gnu/usr.bin/lynx/src/LYTraversal.c b/gnu/usr.bin/lynx/src/LYTraversal.c
index 04c1815443b..6cf521b2374 100644
--- a/gnu/usr.bin/lynx/src/LYTraversal.c
+++ b/gnu/usr.bin/lynx/src/LYTraversal.c
@@ -20,14 +20,14 @@ PRIVATE void final_perror ARGS2(CONST char *,msg, BOOLEAN, clean_flag)
else
stop_curses();
}
- errno = saved_errno;
+ set_errno(saved_errno);
perror(msg);
}
PRIVATE void exit_with_perror ARGS1(CONST char *,msg)
{
final_perror(msg, TRUE);
- exit_immediately(-1);
+ exit_immediately(EXIT_FAILURE);
}
PUBLIC BOOLEAN lookup ARGS1(char *,target)
@@ -37,11 +37,11 @@ PUBLIC BOOLEAN lookup ARGS1(char *,target)
char *line = NULL;
int result = FALSE;
- if ((ifp = fopen(TRAVERSE_FILE,"r")) == NULL) {
+ if ((ifp = fopen(TRAVERSE_FILE, TXT_R)) == NULL) {
if ((ifp = LYNewTxtFile(TRAVERSE_FILE)) == NULL) {
exit_with_perror(CANNOT_OPEN_TRAV_FILE);
} else {
- fclose(ifp);
+ LYCloseOutput(ifp);
return(FALSE);
}
}
@@ -57,8 +57,8 @@ PUBLIC BOOLEAN lookup ARGS1(char *,target)
FREE(line);
FREE(buffer);
- fclose(ifp);
- return(result);
+ LYCloseInput(ifp);
+ return (BOOL) (result);
}
PUBLIC void add_to_table ARGS1(char *,target)
@@ -72,7 +72,7 @@ PUBLIC void add_to_table ARGS1(char *,target)
fprintf(ifp,"%s\n",target);
- fclose(ifp);
+ LYCloseOutput(ifp);
}
PUBLIC void add_to_traverse_list ARGS2(char *,fname, char *,prev_link_name)
@@ -86,7 +86,7 @@ PUBLIC void add_to_traverse_list ARGS2(char *,fname, char *,prev_link_name)
fprintf(ifp,"%s\t%s\n",fname, prev_link_name);
- fclose(ifp);
+ LYCloseOutput(ifp);
}
PUBLIC void dump_traversal_history NOARGS
@@ -110,7 +110,7 @@ PUBLIC void dump_traversal_history NOARGS
fprintf(ifp,"%s\t%s\n", history[x].title, history[x].address);
}
- fclose(ifp);
+ LYCloseOutput(ifp);
}
PUBLIC void add_to_reject_list ARGS1(char *,target)
@@ -124,7 +124,7 @@ PUBLIC void add_to_reject_list ARGS1(char *,target)
fprintf(ifp,"%s\n",target);
- fclose(ifp);
+ LYCloseOutput(ifp);
}
/* there need not be a reject file, so if it doesn't open, just return
@@ -144,7 +144,7 @@ PUBLIC BOOLEAN lookup_reject ARGS1(char *,target)
int len;
int result = FALSE;
- if ((ifp = fopen(TRAVERSE_REJECT_FILE,"r")) == NULL){
+ if ((ifp = fopen(TRAVERSE_REJECT_FILE, TXT_R)) == NULL){
return(FALSE);
}
@@ -168,6 +168,6 @@ PUBLIC BOOLEAN lookup_reject ARGS1(char *,target)
FREE(buffer);
FREE(line);
- fclose(ifp);
- return(result);
+ LYCloseInput(ifp);
+ return (BOOL) (result);
}
diff --git a/gnu/usr.bin/lynx/src/LYUpload.c b/gnu/usr.bin/lynx/src/LYUpload.c
index 3615f613184..a78018fa204 100644
--- a/gnu/usr.bin/lynx/src/LYUpload.c
+++ b/gnu/usr.bin/lynx/src/LYUpload.c
@@ -30,8 +30,6 @@
#include <LYexit.h>
#include <LYLeaks.h>
-PUBLIC char LYUploadFileURL[LY_MAXPATH] = "\0";
-
#define SUBDIR_COMMAND "cd %s ; "
/*
@@ -48,21 +46,20 @@ PUBLIC int LYUpload ARGS1(
int count;
char *the_upload = 0;
char tmpbuf[LY_MAXPATH];
- char buffer[LY_MAXPATH];
- lynx_html_item_type *upload_command = 0;
- FILE *fp;
+ char *filename = NULL;
+ lynx_list_item_type *upload_command = 0;
char *the_command = 0;
/*
* Use configured upload commands.
*/
- if((directory = (char *)strstr(line, "TO=")) == NULL)
+ if((directory = strstr(line, "TO=")) == NULL)
goto failed;
*(directory - 1) = '\0';
/* go past "Directory=" */
directory += 3;
- if((method = (char *)strstr(line, "UPLOAD=")) == NULL)
+ if((method = strstr(line, "UPLOAD=")) == NULL)
goto failed;
/*
* Go past "Method=".
@@ -109,16 +106,16 @@ retry:
HTAlert(gettext("Illegal redirection using \"~\" found! Request ignored."));
goto cancelled;
}
- sprintf(buffer, "%s/%s", directory, tmpbuf);
+ HTSprintf0(&filename, "%s/%s", directory, tmpbuf);
#if HAVE_POPEN
- if (LYIsPipeCommand(buffer)) {
+ if (LYIsPipeCommand(filename)) {
HTAlert(CANNOT_WRITE_TO_FILE);
_statusline(NEW_FILENAME_PROMPT);
goto retry;
}
#endif
- switch (LYValidateOutput(buffer)) {
+ switch (LYValidateOutput(filename)) {
case 'Y':
break;
case 'N':
@@ -130,18 +127,13 @@ retry:
/*
* See if we can write to it.
*/
- CTRACE(tfp, "LYUpload: filename is %s", buffer);
+ CTRACE((tfp, "LYUpload: filename is %s", filename));
- if ((fp = fopen(buffer, "w")) != NULL) {
- fclose(fp);
- remove(buffer);
- } else {
- HTAlert(CANNOT_WRITE_TO_FILE);
- _statusline(NEW_FILENAME_PROMPT);
+ if (! LYCanWriteFile(filename)) {
goto retry;
}
- HTAddParam(&the_upload, upload_command->command, 1, buffer);
+ HTAddParam(&the_upload, upload_command->command, 1, filename);
HTEndParam(&the_upload, upload_command->command, 1);
} else { /* No substitution, no changes */
StrAllocCopy(the_upload, upload_command->command);
@@ -151,7 +143,7 @@ retry:
HTEndParam(&the_command, SUBDIR_COMMAND, 1);
StrAllocCat(the_command, the_upload);
- CTRACE(tfp, "command: %s\n", the_command);
+ CTRACE((tfp, "command: %s\n", the_command));
stop_curses();
LYSystem(the_command);
@@ -160,9 +152,10 @@ retry:
FREE(the_command);
FREE(the_upload);
#ifdef UNIX
- chmod(buffer, HIDE_CHMOD);
+ if (filename != 0)
+ chmod(filename, HIDE_CHMOD);
#endif /* UNIX */
- /* don't remove(file); */
+ FREE(filename);
return 1;
@@ -187,13 +180,18 @@ PUBLIC int LYUpload_options ARGS2(
{
static char tempfile[LY_MAXPATH];
FILE *fp0;
- lynx_html_item_type *cur_upload;
+ lynx_list_item_type *cur_upload;
int count;
static char curloc[LY_MAXPATH];
char *cp;
- LYRemoveTemp(tempfile);
- if ((fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w")) == NULL) {
+ if (LYReuseTempfiles) {
+ fp0 = LYOpenTempRewrite(tempfile, HTML_SUFFIX, "w");
+ } else {
+ LYRemoveTemp(tempfile);
+ fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w");
+ }
+ if (fp0 == NULL) {
HTAlert(CANNOT_OPEN_TEMP);
return(-1);
}
@@ -208,7 +206,7 @@ PUBLIC int LYUpload_options ARGS2(
#endif /* VMS */
LYLocalFileToURL(newfile, tempfile);
- strcpy(LYUploadFileURL, *newfile);
+ LYRegisterUIPage(*newfile, UIP_UPLOAD_OPTIONS);
BeginInternalPage(fp0, UPLOAD_OPTIONS_TITLE, UPLOAD_OPTIONS_HELP);
diff --git a/gnu/usr.bin/lynx/src/LYUtils.c b/gnu/usr.bin/lynx/src/LYUtils.c
index a84e5ba7b64..e9a4a035844 100644
--- a/gnu/usr.bin/lynx/src/LYUtils.c
+++ b/gnu/usr.bin/lynx/src/LYUtils.c
@@ -6,21 +6,50 @@
#include <HTAlert.h>
#include <LYCurses.h>
#include <LYHistory.h>
-#include <LYUtils.h>
#include <LYStrings.h>
#include <LYGlobalDefs.h>
+#include <LYUtils.h>
#include <LYSignal.h>
#include <GridText.h>
#include <LYClean.h>
#include <LYCharSets.h>
#include <LYCharUtils.h>
+
#include <LYMainLoop.h>
#include <LYKeymap.h>
+#ifdef __DJGPP__
+#include <go32.h>
+#include <sys/exceptn.h>
+#endif /* __DJGPP__ */
+
+#ifndef NO_GROUPS
+#include <HTFile.h>
+#endif
+
+#if _WIN_CC
+extern int exec_command(char * cmd, int wait_flag); /* xsystem.c */
+#endif
+
+#ifdef _WINDOWS /* 1998/04/30 (Thu) 19:04:25 */
+#define GETPID() (getpid() & 0xffff)
+#else
+#define GETPID() getpid()
+#endif /* _WINDOWS */
+
#ifdef DJGPP_KEYHANDLER
#include <bios.h>
#endif /* DJGPP_KEYHANDLER */
+#ifdef __EMX__
+# define BOOLEAN OS2_BOOLEAN /* Conflicts, but is used */
+# undef HT_ERROR /* Conflicts too */
+# define INCL_PM /* I want some PM functions.. */
+# define INCL_DOSPROCESS /* TIB PIB. */
+# include <os2.h>
+# undef BOOLEAN
+#endif
+
#ifdef VMS
#include <descrip.h>
#include <libclidef.h>
@@ -32,13 +61,17 @@
#ifdef UTMPX_FOR_UTMP
#include <utmpx.h>
#define utmp utmpx
+#ifdef UTMPX_FILE
#ifdef UTMP_FILE
#undef UTMP_FILE
#endif /* UTMP_FILE */
-#ifdef UTMPX_FILE
#define UTMP_FILE UTMPX_FILE
#else
+#ifdef __UTMPX_FILE
#define UTMP_FILE __UTMPX_FILE /* at least in OS/390 S/390 -- gil -- 2100 */
+#else
+#define UTMP_FILE "/var/adm/utmpx" /* Digital Unix 4.0 */
+#endif
#endif /* UTMPX_FILE */
#else
#include <utmp.h>
@@ -88,17 +121,77 @@ extern int BSDselect PARAMS((int nfds, fd_set * readfds, fd_set * writefds,
#endif /* __FreeBSD__ || __bsdi__ */
#endif /* !UTMP_FILE */
+/*
+ * experimental - make temporary filenames random to make the scheme less
+ * obvious. However, as noted by KW, there are instances (such as the
+ * 'O'ption page, for which Lynx will store a temporary filename even when
+ * it no longer applies, since it will reuse that filename at a later time.
+ */
+#ifdef EXP_RAND_TEMPNAME
+#if defined(LYNX_RAND_MAX)
+#define USE_RAND_TEMPNAME 1
+#define MAX_TEMPNAME 10000
+#ifndef BITS_PER_CHAR
+#define BITS_PER_CHAR 8
+#endif
+#endif
+#endif
+
#define COPY_COMMAND "%s %s %s"
-extern HTkcode kanji_code;
extern BOOLEAN LYHaveCJKCharacterSet;
-extern HTCJKlang HTCJK;
PRIVATE HTList * localhost_aliases = NULL; /* Hosts to treat as local */
PRIVATE char *HomeDir = NULL; /* HOME directory */
PUBLIC HTList * sug_filenames = NULL; /* Suggested filenames */
/*
+ * Maintain a list of all of the temp-files we create so that we can remove
+ * them during the cleanup.
+ */
+typedef struct _LYTemp {
+ struct _LYTemp *next;
+ char *name;
+ BOOLEAN outs;
+ FILE *file;
+} LY_TEMP;
+
+PRIVATE LY_TEMP *ly_temp;
+
+PRIVATE LY_TEMP *FindTempfileByName ARGS1(CONST char *, name)
+{
+ LY_TEMP *p;
+
+ for (p = ly_temp; p != 0; p = p->next) {
+ if (!strcmp(p->name, name)) {
+ break;
+ }
+ }
+ return p;
+}
+
+PRIVATE LY_TEMP *FindTempfileByFP ARGS1(FILE *, fp)
+{
+ LY_TEMP *p;
+
+ for (p = ly_temp; p != 0; p = p->next) {
+ if (p->file == fp) {
+ break;
+ }
+ }
+ return p;
+}
+
+/*
+ * Get an environment variable, rejecting empty strings
+ */
+PRIVATE char *getenv_text ARGS1(char *, name)
+{
+ char *result = getenv(name);
+ return (result != 0 && *result != 0) ? result : 0;
+}
+
+/*
* Highlight (or unhighlight) a given link.
*/
PUBLIC void highlight ARGS3(
@@ -109,15 +202,17 @@ PUBLIC void highlight ARGS3(
char buffer[200];
int i;
char tmp[7];
-#if defined(FANCY_CURSES) || defined(USE_SLANG)
+#ifdef SHOW_WHEREIS_TARGETS
char *cp;
char *theData = NULL;
char *Data = NULL;
int Offset, HitOffset, tLen;
int LenNeeded;
BOOL TargetEmphasisON = FALSE;
+ BOOL target1_drawn = NO;
#endif
- BOOL utf_flag = (LYCharSet_UC[current_char_set].enc == UCT_ENC_UTF8);
+ BOOL utf_flag = (BOOL)(LYCharSet_UC[current_char_set].enc == UCT_ENC_UTF8);
+ BOOL hl1_drawn = NO;
#if defined(USE_COLOR_STYLE) && !defined(NO_HILIT_FIX)
BOOL hl2_drawn=FALSE; /* whether links[cur].hightext2 is already drawn
properly */
@@ -132,25 +227,45 @@ PUBLIC void highlight ARGS3(
*/
if (cur < 0)
cur = 0;
+#if defined(TEXTFIELDS_MAY_NEED_ACTIVATION) && defined(INACTIVE_INPUT_STYLE_VH)
+ if (flag == OFF)
+ textinput_redrawn = FALSE;
+#endif
if (nlinks > 0) {
#if defined(USE_COLOR_STYLE) && !defined(NO_HILIT_FIX)
if (flag == ON || links[cur].type == WWW_FORM_LINK_TYPE)
#endif
{
-
-#ifdef USE_COLOR_STYLE
-#define LXP (links[cur].lx)
-#define LYP (links[cur].ly)
-#endif
- move(links[cur].ly, links[cur].lx);
#ifndef USE_COLOR_STYLE
- lynx_start_link_color (flag == ON, links[cur].inUnderline);
-#else
- if (flag == ON) {
- LynxChangeStyle(s_alink, STACK_ON, 0);
+ if (links[cur].type == WWW_FORM_LINK_TYPE ||
+ !links[cur].hightext) {
+ LYMoveToLink(cur, target, NULL,
+ flag, links[cur].inUnderline, utf_flag);
+ lynx_start_link_color (flag == ON, links[cur].inUnderline);
} else {
- int s, x;
+ LYMoveToLink(cur, target, links[cur].hightext,
+ flag, links[cur].inUnderline, utf_flag);
+ hl1_drawn = YES;
+#ifdef SHOW_WHEREIS_TARGETS
+ target1_drawn = YES;
+#endif
+ }
+#else /* here USE_COLOR_STYLE defined */
+ int s = s_alink;
+
+#ifdef TEXTFIELDS_MAY_NEED_ACTIVATION
+ if ( textfields_need_activation &&
+ links[cur].type == WWW_FORM_LINK_TYPE &&
+ F_TEXTLIKE(links[cur].form->type) )
+ s = s_curedit;
+#endif
+
+
+# define LXP (links[cur].lx)
+# define LYP (links[cur].ly)
+ if (flag != ON) {
+ int x;
/*
* This is where we try to restore the original style when
* a link is unhighlighted. The purpose of cached_styles[][]
@@ -160,6 +275,9 @@ PUBLIC void highlight ARGS3(
* until we find one.
*/
if (LYP >= 0 && LYP < CACHEH && LXP >= 0 && LXP < CACHEW) {
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.highlight.off: cached style @(%d,%d): ",
+ LYP, LXP));
s = cached_styles[LYP][LXP];
if (s == 0) {
for (x = LXP-1; x >= 0; x--) {
@@ -168,17 +286,27 @@ PUBLIC void highlight ARGS3(
s = cached_styles[LYP][x];
cached_styles[LYP][LXP] = s;
}
+ CTRACE((tfp, "found %d, x_offset=%d.\n",
+ cached_styles[LYP][x], (int)x-LXP));
break;
}
}
- if (s == 0)
+ if (s == 0) {
+ CTRACE((tfp, "not found, assume <a>.\n"));
s = s_a;
+ }
+ } else {
+ CTRACE((tfp, "found %d.\n", s));
}
} else {
+ CTRACE2(TRACE_STYLE, (tfp, "STYLE.highlight.off: can't use cache.\n"));
s = s_a;
}
- LynxChangeStyle(s, STACK_ON, 0);
+ } else {
+ CTRACE2(TRACE_STYLE, (tfp, "STYLE.highlight.on: @(%d,%d).\n", LYP, LXP));
}
+ LYmove(LYP, LXP);
+ LynxChangeStyle(s, STACK_ON);
#endif
}
@@ -192,31 +320,32 @@ PUBLIC void highlight ARGS3(
links[cur].hightext : ""),
(avail_space > links[cur].form->size ?
links[cur].form->size : avail_space));
- addstr(buffer);
+ LYaddstr(buffer);
len = strlen(buffer);
for (; len < links[cur].form->size && len < avail_space; len++)
- addch('_');
+ LYaddch('_');
} else {
#if defined(USE_COLOR_STYLE) && !defined(NO_HILIT_FIX)
if (flag == OFF) {
hl2_drawn = TRUE;
redraw_lines_of_link(cur);
+ CTRACE2(TRACE_STYLE, (tfp, "STYLE.highlight.off: NOFIX branch @(%d,%d).\n", LYP, LXP));
} else
#endif
- {
+ if (!hl1_drawn) {
/*
* Copy into the buffer only what will fit
* within the width of the screen.
*/
- LYmbcsstrncpy(buffer,
- (links[cur].hightext ?
- links[cur].hightext : ""),
- (sizeof(buffer) - 1),
- ((LYcols - 1) - links[cur].lx),
- utf_flag);
- addstr(buffer);
+ LYmbcsstrncpy(buffer,
+ (links[cur].hightext ?
+ links[cur].hightext : ""),
+ (sizeof(buffer) - 1),
+ ((LYcols - 1) - links[cur].lx),
+ utf_flag);
+ LYaddstr(buffer);
}
}
@@ -229,11 +358,15 @@ PUBLIC void highlight ARGS3(
#endif
) {
lynx_stop_link_color (flag == ON, links[cur].inUnderline);
- move((links[cur].ly + 1), links[cur].hightext2_offset);
+ LYmove((links[cur].ly + 1), links[cur].hightext2_offset);
#ifndef USE_COLOR_STYLE
lynx_start_link_color (flag == ON, links[cur].inUnderline);
#else
- LynxChangeStyle(flag == ON ? s_alink : s_a, ABS_ON, 0);
+ CTRACE2(TRACE_STYLE,
+ (tfp, "STYLE.highlight.line2: @(%d,%d), style=%d.\n",
+ links[cur].ly + 1, links[cur].hightext2_offset,
+ flag == ON ? s_alink : s_a));
+ LynxChangeStyle(flag == ON ? s_alink : s_a, ABS_ON);
#endif
for (i = 0; (tmp[0] = links[cur].hightext2[i]) != '\0' &&
@@ -244,10 +377,10 @@ PUBLIC void highlight ARGS3(
*/
if (HTCJK != NOCJK && !isascii(tmp[0])) {
tmp[1] = links[cur].hightext2[++i];
- addstr(tmp);
+ LYaddstr(tmp);
tmp[1] = '\0';
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
}
}
@@ -257,7 +390,8 @@ PUBLIC void highlight ARGS3(
#endif
lynx_stop_link_color (flag == ON, links[cur].inUnderline);
-#if defined(FANCY_CURSES) || defined(USE_SLANG)
+#ifdef SHOW_WHEREIS_TARGETS
+ if (!target1_drawn)
/*
* If we have an emphasized WHEREIS hit in the highlighted
* text, restore the emphasis. Note that we never emphasize
@@ -300,7 +434,7 @@ PUBLIC void highlight ARGS3(
utf_flag);
hlen = strlen(buffer);
hLen = ((HTCJK != NOCJK || utf_flag) ?
- LYmbcsstrlen(buffer, utf_flag) : hlen);
+ LYmbcsstrlen(buffer, utf_flag, YES) : hlen);
/*
* Break out if the first hit in the line
@@ -319,17 +453,11 @@ PUBLIC void highlight ARGS3(
((Offset + tLen) <= hoffset)) {
data = (Data + tlen);
offset = (Offset + tLen);
- if ((case_sensitive ?
- (cp = LYno_attr_mbcs_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL :
- (cp = LYno_attr_mbcs_case_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL) &&
+ if (((cp = LYno_attr_mb_strstr(data,
+ target,
+ utf_flag, YES,
+ &HitOffset,
+ &LenNeeded)) != NULL) &&
(offset + LenNeeded) < LYcols) {
Data = cp;
Offset = (offset + HitOffset);
@@ -356,7 +484,7 @@ PUBLIC void highlight ARGS3(
* Go to the start of the hightext and
* handle its first character. - FM
*/
- move(hLine, offset);
+ LYmove(hLine, offset);
tmp[0] = data[itmp];
if (utf_flag && !isascii(tmp[0])) {
if ((*tmp & 0xe0) == 0xc0) {
@@ -392,9 +520,9 @@ PUBLIC void highlight ARGS3(
if (flag != ON) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
tmp[1] = '\0';
written += (utf_extra + 1);
@@ -411,9 +539,9 @@ PUBLIC void highlight ARGS3(
if (flag != ON) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
tmp[1] = '\0';
written += 2;
@@ -425,9 +553,9 @@ PUBLIC void highlight ARGS3(
if (flag != ON) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
written++;
}
@@ -491,9 +619,9 @@ PUBLIC void highlight ARGS3(
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += (utf_extra + 1);
@@ -512,9 +640,9 @@ PUBLIC void highlight ARGS3(
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += 2;
@@ -528,9 +656,9 @@ PUBLIC void highlight ARGS3(
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
written++;
}
@@ -567,17 +695,11 @@ PUBLIC void highlight ARGS3(
(offset - Offset),
utf_flag);
}
- if ((case_sensitive ?
- (cp = LYno_attr_mbcs_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL :
- (cp = LYno_attr_mbcs_case_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL) &&
+ if (((cp = LYno_attr_mb_strstr(data,
+ target,
+ utf_flag, YES,
+ &HitOffset,
+ &LenNeeded)) != NULL) &&
(offset + LenNeeded) < LYcols) {
/*
* If the hit starts after the end of the hightext,
@@ -618,7 +740,7 @@ highlight_hit_within_hightext:
if (!utf_flag) {
data += (Offset - offset);
} else {
- refresh();
+ LYrefresh();
data = LYmbcs_skip_glyphs(data,
(Offset - offset),
utf_flag);
@@ -632,7 +754,7 @@ highlight_hit_within_hightext:
* Go to the start of the hit and
* handle its first character. - FM
*/
- move(hLine, offset);
+ LYmove(hLine, offset);
tmp[0] = data[itmp];
if (utf_flag && !isascii(tmp[0])) {
if ((*tmp & 0xe0) == 0xc0) {
@@ -671,9 +793,9 @@ highlight_hit_within_hightext:
(offset > hoffset && data[itmp+1] != '\0')) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
tmp[1] = '\0';
written += (utf_extra + 1);
@@ -693,9 +815,9 @@ highlight_hit_within_hightext:
(offset > hoffset && data[itmp+1] != '\0')) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
tmp[1] = '\0';
written += 2;
@@ -710,9 +832,9 @@ highlight_hit_within_hightext:
(offset > hoffset && data[itmp+1] != '\0')) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
written++;
}
@@ -773,9 +895,9 @@ highlight_hit_within_hightext:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += (utf_extra + 1);
@@ -794,9 +916,9 @@ highlight_hit_within_hightext:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += 2;
@@ -810,9 +932,9 @@ highlight_hit_within_hightext:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
written++;
}
@@ -846,17 +968,11 @@ highlight_hit_within_hightext:
(offset - Offset),
utf_flag);
}
- if ((case_sensitive ?
- (cp = LYno_attr_mbcs_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL :
- (cp = LYno_attr_mbcs_case_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL) &&
+ if (((cp = LYno_attr_mb_strstr(data,
+ target,
+ utf_flag, YES,
+ &HitOffset,
+ &LenNeeded)) != NULL) &&
(offset + LenNeeded) < LYcols) {
/*
* If the hit starts after the end of the hightext,
@@ -881,12 +997,12 @@ highlight_hit_within_hightext:
if (!utf_flag) {
data = buffer + (offset - hoffset);
} else {
- refresh();
+ LYrefresh();
data = LYmbcs_skip_glyphs(buffer,
(offset - hoffset),
utf_flag);
}
- move(hLine, offset);
+ LYmove(hLine, offset);
itmp = 0;
written = 0;
len = strlen(data);
@@ -941,9 +1057,9 @@ highlight_hit_within_hightext:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += (utf_extra + 1);
@@ -962,7 +1078,7 @@ highlight_hit_within_hightext:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += 2;
@@ -976,7 +1092,7 @@ highlight_hit_within_hightext:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
written++;
}
@@ -1030,7 +1146,7 @@ highlight_search_hightext2:
utf_flag);
hlen = strlen(buffer);
hLen = ((HTCJK != NOCJK || utf_flag) ?
- LYmbcsstrlen(buffer, utf_flag) : hlen);
+ LYmbcsstrlen(buffer, utf_flag, YES) : hlen);
/*
* Break out if the first hit in the line
@@ -1049,17 +1165,11 @@ highlight_search_hightext2:
((Offset + tLen) <= hoffset)) {
data = (Data + tlen);
offset = (Offset + tLen);
- if ((case_sensitive ?
- (cp = LYno_attr_mbcs_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL :
- (cp = LYno_attr_mbcs_case_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL) &&
+ if (((cp = LYno_attr_mb_strstr(data,
+ target,
+ utf_flag, YES,
+ &HitOffset,
+ &LenNeeded)) != NULL) &&
(offset + LenNeeded) < LYcols) {
Data = cp;
Offset = (offset + HitOffset);
@@ -1086,7 +1196,7 @@ highlight_search_hightext2:
* Go to the start of the hightext2 and
* handle its first character. - FM
*/
- move(hLine, offset);
+ LYmove(hLine, offset);
tmp[0] = data[itmp];
if (utf_flag && !isascii(tmp[0])) {
if ((*tmp & 0xe0) == 0xc0) {
@@ -1122,9 +1232,9 @@ highlight_search_hightext2:
if (flag != ON) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
tmp[1] = '\0';
written += (utf_extra + 1);
@@ -1141,9 +1251,9 @@ highlight_search_hightext2:
if (flag != ON) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
tmp[1] = '\0';
written += 2;
@@ -1155,9 +1265,9 @@ highlight_search_hightext2:
if (flag != ON) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
written++;
}
@@ -1221,9 +1331,9 @@ highlight_search_hightext2:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += (utf_extra + 1);
@@ -1242,9 +1352,9 @@ highlight_search_hightext2:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += 2;
@@ -1258,9 +1368,9 @@ highlight_search_hightext2:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
written++;
}
@@ -1296,17 +1406,11 @@ highlight_search_hightext2:
(offset - Offset),
utf_flag);
}
- if ((case_sensitive ?
- (cp = LYno_attr_mbcs_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL :
- (cp = LYno_attr_mbcs_case_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL) &&
+ if (((cp = LYno_attr_mb_strstr(data,
+ target,
+ utf_flag, YES,
+ &HitOffset,
+ &LenNeeded)) != NULL) &&
(offset + LenNeeded) < LYcols) {
/*
* If the hit starts after the end of the hightext2,
@@ -1347,7 +1451,7 @@ highlight_hit_within_hightext2:
if (!utf_flag) {
data += (Offset - offset);
} else {
- refresh();
+ LYrefresh();
data = LYmbcs_skip_glyphs(data,
(Offset - offset),
utf_flag);
@@ -1361,7 +1465,7 @@ highlight_hit_within_hightext2:
* Go to the start of the hit and
* handle its first character. - FM
*/
- move(hLine, offset);
+ LYmove(hLine, offset);
tmp[0] = data[itmp];
if (utf_flag && !isascii(tmp[0])) {
if ((*tmp & 0xe0) == 0xc0) {
@@ -1400,9 +1504,9 @@ highlight_hit_within_hightext2:
(offset > hoffset && data[itmp+1] != '\0')) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
tmp[1] = '\0';
written += (utf_extra + 1);
@@ -1422,9 +1526,9 @@ highlight_hit_within_hightext2:
(offset > hoffset && data[itmp+1] != '\0')) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
tmp[1] = '\0';
written += 2;
@@ -1439,9 +1543,9 @@ highlight_hit_within_hightext2:
(offset > hoffset && data[itmp+1] != '\0')) {
LYstartTargetEmphasis();
TargetEmphasisON = TRUE;
- addstr(tmp);
+ LYaddstr(tmp);
} else {
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
}
written++;
}
@@ -1502,9 +1606,9 @@ highlight_hit_within_hightext2:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += (utf_extra + 1);
@@ -1523,9 +1627,9 @@ highlight_hit_within_hightext2:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += 2;
@@ -1539,9 +1643,9 @@ highlight_hit_within_hightext2:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
written++;
}
@@ -1575,17 +1679,11 @@ highlight_hit_within_hightext2:
(offset - Offset),
utf_flag);
}
- if ((case_sensitive ?
- (cp = LYno_attr_mbcs_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL :
- (cp = LYno_attr_mbcs_case_strstr(data,
- target,
- utf_flag,
- &HitOffset,
- &LenNeeded)) != NULL) &&
+ if (((cp = LYno_attr_mb_strstr(data,
+ target,
+ utf_flag, YES,
+ &HitOffset,
+ &LenNeeded)) != NULL) &&
(offset + LenNeeded) < LYcols) {
/*
* If the hit starts after the end of the hightext2,
@@ -1610,12 +1708,12 @@ highlight_hit_within_hightext2:
if (!utf_flag) {
data = buffer + (offset - hoffset);
} else {
- refresh();
+ LYrefresh();
data = LYmbcs_skip_glyphs(buffer,
(offset - hoffset),
utf_flag);
}
- move(hLine, offset);
+ LYmove(hLine, offset);
itmp = 0;
written = 0;
len = strlen(data);
@@ -1670,9 +1768,9 @@ highlight_hit_within_hightext2:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
LYGetYX(y, offset);
- move(hLine, (offset + 1));
+ LYmove(hLine, (offset + 1));
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += (utf_extra + 1);
@@ -1691,7 +1789,7 @@ highlight_hit_within_hightext2:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
tmp[1] = '\0';
written += 2;
@@ -1705,7 +1803,7 @@ highlight_hit_within_hightext2:
LYstopTargetEmphasis();
TargetEmphasisON = FALSE;
} else {
- addstr(tmp);
+ LYaddstr(tmp);
}
written++;
}
@@ -1735,17 +1833,17 @@ highlight_search_done:
/*
* Get cursor out of the way.
*/
- move((LYlines - 1), (LYcols - 1));
+ LYHideCursor();
else
-#endif /* FANCY CURSES || USE_SLANG */
+#endif /* SHOW_WHEREIS_TARGETS */
/*
* Never hide the cursor if there's no FANCY CURSES or SLANG.
*/
- move(links[cur].ly,
+ LYmove(links[cur].ly,
((links[cur].lx > 0) ? (links[cur].lx - 1) : 0));
if (flag)
- refresh();
+ LYrefresh();
}
return;
}
@@ -1832,10 +1930,12 @@ BOOLEAN mustshow = FALSE;
PUBLIC void statusline ARGS1(
CONST char *, text)
{
- char buffer[256];
+ char buffer[MAX_LINE];
unsigned char *temp = NULL;
int max_length, len, i, j;
unsigned char k;
+ char *p;
+ char text_buff[MAX_LINE];
if (text == NULL)
return;
@@ -1856,6 +1956,12 @@ PUBLIC void statusline ARGS1(
}
mustshow = FALSE;
+ /* "LYNXDOWNLOAD://Method=-1/File=%s/SugFile=%s%s\">Save to disk</a>\n" */
+ LYstrncpy(text_buff, text, sizeof(text_buff)-1);
+ p = strchr(text_buff, '\n');
+ if (p)
+ p= '\0';
+
/*
* Deal with any CJK escape sequences and Kanji if we have a CJK
* character set selected, otherwise, strip any escapes. Also,
@@ -1863,21 +1969,28 @@ PUBLIC void statusline ARGS1(
*/
max_length = ((LYcols - 2) < (int)sizeof(buffer))
? (LYcols - 2) : (int)sizeof(buffer)-1;
- if ((text[0] != '\0') &&
+ if ((text_buff[0] != '\0') &&
(LYHaveCJKCharacterSet)) {
/*
* Translate or filter any escape sequences. - FM
*/
- if ((temp = (unsigned char *)calloc(1, strlen(text) + 1)) == NULL)
+ if ((temp = typecallocn(unsigned char, strlen(text_buff) + 1)) == NULL)
outofmem(__FILE__, "statusline");
if (kanji_code == EUC) {
- TO_EUC((CONST unsigned char *)text, temp);
+ TO_EUC((CONST unsigned char *)text_buff, temp);
} else if (kanji_code == SJIS) {
- TO_SJIS((CONST unsigned char *)text, temp);
+#ifdef KANJI_CODE_OVERRIDE
+ if (!LYRawMode || last_kcode == SJIS)
+ strcpy(temp, text_buff);
+ else
+ TO_SJIS((CONST unsigned char *)text_buff, temp);
+#else
+ strcpy((char *) temp, text_buff);
+#endif
} else {
- for (i = 0, j = 0; text[i]; i++) {
- if (text[i] != CH_ESC) { /* S/390 -- gil -- 2119 */
- temp[j++] = text[i];
+ for (i = 0, j = 0; text_buff[i]; i++) {
+ if (text_buff[i] != CH_ESC) { /* S/390 -- gil -- 2119 */
+ temp[j++] = text_buff[i];
}
}
temp[j] = '\0';
@@ -1918,9 +2031,9 @@ PUBLIC void statusline ARGS1(
* code added here for determining the displayed string length,
* as we do above for CJK. - FM
*/
- for (i = 0, len = 0; text[i] != '\0' && len < max_length; i++) {
- if (text[i] != CH_ESC) { /* S/390 -- gil -- 2136 */
- buffer[len++] = text[i];
+ for (i = 0, len = 0; text_buff[i] != '\0' && len < max_length; i++) {
+ if (text_buff[i] != CH_ESC) { /* S/390 -- gil -- 2119 */
+ buffer[len++] = text_buff[i];
}
}
buffer[len] = '\0';
@@ -1936,49 +2049,64 @@ PUBLIC void statusline ARGS1(
*/
if (LYStatusLine >= 0) {
if (LYStatusLine < LYlines-1) {
- move(LYStatusLine, 0);
+ LYmove(LYStatusLine, 0);
} else {
- move(LYlines-1, 0);
+ LYmove(LYlines-1, 0);
}
} else if (user_mode == NOVICE_MODE) {
- move(LYlines-3, 0);
+ LYmove(LYlines-3, 0);
} else {
- move(LYlines-1, 0);
+ LYmove(LYlines-1, 0);
}
- clrtoeol();
+ LYclrtoeol();
+
if (text != NULL && text[0] != '\0') {
+ BOOLEAN has_CJK = FALSE;
+
+ if (HTCJK != NOCJK) {
+ for (i = 0; buffer[i] != '\0'; i++) {
+ if (buffer[i] & 0x80) {
+ has_CJK = TRUE;
+ break;
+ }
+ }
+ }
+
+ if (has_CJK
#ifdef HAVE_UTF8_STATUSLINES
- if (LYCharSet_UC[current_char_set].enc == UCT_ENC_UTF8) {
- refresh();
+ || (LYCharSet_UC[current_char_set].enc == UCT_ENC_UTF8)
+#endif
+ ) {
+ LYrefresh();
}
-#endif /* HAVE_UTF8_STATUSLINES */
+
#ifndef USE_COLOR_STYLE
lynx_start_status_color ();
- addstr (buffer);
+ LYaddstr (buffer);
lynx_stop_status_color ();
#else
/* draw the status bar in the STATUS style */
{
int a=(strncmp(buffer, ALERT_FORMAT, ALERT_PREFIX_LEN) ||
!hashStyles[s_alert].name) ? s_status : s_alert;
- LynxChangeStyle (a, STACK_ON, 1);
- addstr(buffer);
- wbkgdset(stdscr,
+ LynxChangeStyle (a, STACK_ON);
+ LYaddstr(buffer);
+ wbkgdset(LYwin,
((lynx_has_color && LYShowColor >= SHOW_COLOR_ON)
? hashStyles[a].color
:A_NORMAL) | ' ');
- clrtoeol();
+ LYclrtoeol();
if (!(lynx_has_color && LYShowColor >= SHOW_COLOR_ON))
- wbkgdset(stdscr, A_NORMAL | ' ');
+ wbkgdset(LYwin, A_NORMAL | ' ');
else if (s_normal != NOSTYLE)
- wbkgdset(stdscr, hashStyles[s_normal].color | ' ');
+ wbkgdset(LYwin, hashStyles[s_normal].color | ' ');
else
- wbkgdset(stdscr, displayStyles[DSTYLE_NORMAL].color | ' ');
- LynxChangeStyle (a, STACK_OFF, 0);
+ wbkgdset(LYwin, displayStyles[DSTYLE_NORMAL].color | ' ');
+ LynxChangeStyle (a, STACK_OFF);
}
#endif
}
- refresh();
+ LYrefresh();
return;
}
@@ -2015,28 +2143,27 @@ PUBLIC void noviceline ARGS1(
if (dump_output_immediately)
return;
- move(LYlines-2,0);
+ LYmove(LYlines-2,0);
/* stop_reverse(); */
- clrtoeol();
- addstr(NOVICE_LINE_ONE);
- clrtoeol();
-
+ LYclrtoeol();
+ LYaddstr(NOVICE_LINE_ONE);
+ LYclrtoeol();
#if defined(DIRED_SUPPORT ) && defined(OK_OVERRIDE)
if (lynx_edit_mode && !no_dired_support)
- addstr(DIRED_NOVICELINE);
+ LYaddstr(DIRED_NOVICELINE);
else
#endif /* DIRED_SUPPORT && OK_OVERRIDE */
if (LYUseNoviceLineTwo)
- addstr(NOVICE_LINE_TWO);
+ LYaddstr(NOVICE_LINE_TWO);
else
- addstr((char *)novice_lines(lineno));
+ LYaddstr((char *)novice_lines(lineno));
- refresh();
+ LYrefresh();
return;
}
-#ifdef NSL_FORK
+#if defined(NSL_FORK) || defined(MISC_EXP)
/*
* Returns the file descriptor from which keyboard input is expected,
* or INVSOC (-1) if not available.
@@ -2051,7 +2178,7 @@ PUBLIC int LYConsoleInputFD ARGS1(
#ifdef USE_SLANG
if (!LYCursesON)
fd = fileno(stdin);
-#if SLANG_VERSION >= 9919
+#if ((SLANG_VERSION >= 9919) && defined(REAL_UNIX_SYSTEM) && !defined(__CYGWIN__))
/* SLang_TT_Read_FD introduced in slang 0.99.19, from its changelog:
* SLang_TT_Read_FD variable is now available for unix. This is the file
* descriptor used by SLang_getkey. */
@@ -2071,7 +2198,7 @@ PUBLIC int LYConsoleInputFD ARGS1(
}
return fd;
}
-#endif /* NSL_FORK */
+#endif /* NSL_FORK || MISC_EXP */
PRIVATE int fake_zap = 0;
@@ -2079,15 +2206,15 @@ PUBLIC void LYFakeZap ARGS1(
BOOL, set)
{
if (set && fake_zap < 1) {
- CTRACE(tfp, "\r *** Set simulated 'Z'");
+ CTRACE((tfp, "\r *** Set simulated 'Z'"));
if (fake_zap)
- CTRACE(tfp, ", %d pending", fake_zap);
- CTRACE(tfp, " ***\n");
+ CTRACE((tfp, ", %d pending", fake_zap));
+ CTRACE((tfp, " ***\n"));
fake_zap++;
} else if (!set && fake_zap) {
- CTRACE(tfp, "\r *** Unset simulated 'Z'");
- CTRACE(tfp, ", %d pending", fake_zap);
- CTRACE(tfp, " ***\n");
+ CTRACE((tfp, "\r *** Unset simulated 'Z'"));
+ CTRACE((tfp, ", %d pending", fake_zap));
+ CTRACE((tfp, " ***\n"));
fake_zap = 0;
}
@@ -2102,11 +2229,19 @@ PRIVATE int DontCheck NOARGS
if (dump_output_immediately)
return(TRUE);
+ if (LYHaveCmdScript()) /* we may be running from a script */
+ return(TRUE);
+
+#ifdef MISC_EXP
+ if (LYNoZapKey)
+ return(TRUE);
+#endif
/*
* Avoid checking interrupts more than one per second, since it is a slow
* and expensive operation - TD
*/
#if HAVE_GETTIMEOFDAY
+#undef timezone /* U/Win defines a conflicting macro */
{
struct timeval tv;
gettimeofday(&tv, (struct timezone *)0);
@@ -2125,8 +2260,9 @@ PRIVATE int DontCheck NOARGS
PUBLIC int HTCheckForInterrupt NOARGS
{
int c;
+ int cmd;
#ifndef VMS /* UNIX stuff: */
-#ifndef USE_SLANG
+#if !defined(USE_SLANG) && (defined(UNIX) || defined(__DJGPP__))
struct timeval socket_timeout;
int ret = 0;
fd_set readfds;
@@ -2134,7 +2270,7 @@ PUBLIC int HTCheckForInterrupt NOARGS
if (fake_zap > 0) {
fake_zap--;
- CTRACE(tfp, "\r *** Got simulated 'Z' ***\n");
+ CTRACE((tfp, "\r *** Got simulated 'Z' ***\n"));
CTRACE_FLUSH(tfp);
CTRACE_SLEEP(AlertSecs);
return((int)TRUE);
@@ -2144,6 +2280,7 @@ PUBLIC int HTCheckForInterrupt NOARGS
if (DontCheck())
return((int)FALSE);
+#if !defined(_WINDOWS) || defined(__MINGW32__)
#ifdef USE_SLANG
/** No keystroke was entered
Note that this isn't taking possible SOCKSification
@@ -2172,23 +2309,24 @@ PUBLIC int HTCheckForInterrupt NOARGS
&socket_timeout);
/** Suspended? **/
- if ((ret == -1) && (errno == EINTR))
+ if ((ret == -1) && (SOCKET_ERRNO == EINTR))
return((int)FALSE);
/** No keystroke was entered? **/
if (!FD_ISSET(0,&readfds))
return((int)FALSE);
#endif /* USE_SLANG */
+#endif /* !_WINDOWS */
-#if defined (DOSPATH) && defined (NCURSES)
- nodelay(stdscr,TRUE);
+#if defined(PDCURSES)
+ nodelay(LYwin,TRUE);
#endif /* DOSPATH */
/*
* 'c' contains whatever character we're able to read from keyboard
*/
c = LYgetch();
-#if defined (DOSPATH) && defined (NCURSES)
- nodelay(stdscr,FALSE);
+#if defined(PDCURSES)
+ nodelay(LYwin,FALSE);
#endif /* DOSPATH */
#else /* VMS: */
@@ -2196,7 +2334,7 @@ PUBLIC int HTCheckForInterrupt NOARGS
if (fake_zap > 0) {
fake_zap--;
- CTRACE(tfp, "\r *** Got simulated 'Z' ***\n");
+ CTRACE((tfp, "\r *** Got simulated 'Z' ***\n"));
CTRACE_FLUSH(tfp);
CTRACE_SLEEP(AlertSecs);
return((int)TRUE);
@@ -2224,29 +2362,42 @@ PUBLIC int HTCheckForInterrupt NOARGS
*/
/** Keyboard 'Z' or 'z', or Control-G or Control-C **/
- if (TOUPPER(c) == 'Z' || c == 7 || c == 3)
+ if (LYCharIsINTERRUPT(c))
return((int)TRUE);
/* There is a subset of mainloop() actions available at this stage:
- ** no new getfile() cyrcle possible until the previous finished.
- ** Currently we have scrolling in partial mode and toggling of trace log.
+ ** no new getfile() cycle is possible until the previous finished.
+ ** Currently we have scrolling in partial mode and toggling of trace
+ ** log. User search now in progress...
*/
- switch (keymap[c+1])
+ cmd = (LKC_TO_LAC(keymap,c));
+ switch (cmd)
{
- case LYK_TRACE_TOGGLE : /* Toggle TRACE mode. */
- WWW_TraceFlag = ! WWW_TraceFlag;
- if (LYOpenTraceLog())
- HTUserMsg(WWW_TraceFlag ? TRACE_ON : TRACE_OFF);
- break ;
+ case LYK_TRACE_TOGGLE : /* Toggle TRACE mode. */
+ handle_LYK_TRACE_TOGGLE();
+ break;
default :
#ifdef DISP_PARTIAL
if (display_partial && (NumOfLines_partial > 2))
/* OK, we got several lines from new document and want to scroll... */
{
+ BOOLEAN do_refresh;
int res;
- switch (keymap[c+1])
+ int Newline_partial = LYGetNewline();
+
+ switch (cmd)
{
+ case LYK_WHEREIS: /* search within the document */
+ case LYK_NEXT: /* search for the next occurrence in the document */
+ case LYK_PREV: /* search for the previous occurrence in the document */
+ handle_LYK_WHEREIS(cmd, &do_refresh);
+ if (www_search_result != -1) {
+ Newline_partial = www_search_result;
+ www_search_result = -1; /* reset */
+ }
+ break;
+
case LYK_FASTBACKW_LINK :
if (Newline_partial <= (display_lines)+1) {
Newline_partial -= display_lines ;
@@ -2315,7 +2466,7 @@ PUBLIC int HTCheckForInterrupt NOARGS
if (Newline_partial < 1)
Newline_partial = 1;
NumOfLines_partial = HText_getNumOfLines();
- HText_pageDisplay(Newline_partial, "");
+ LYMainLoop_pageDisplay(Newline_partial);
}
#endif /* DISP_PARTIAL */
break;
@@ -2325,6 +2476,45 @@ PUBLIC int HTCheckForInterrupt NOARGS
}
/*
+ * Check if the given filename looks like it's an absolute pathname, i.e.,
+ * references a directory.
+ */
+PUBLIC BOOLEAN LYisAbsPath ARGS1(
+ CONST char *, path)
+{
+#ifdef VMS
+ return TRUE;
+#else
+ BOOLEAN result;
+#if defined(DOSPATH) || defined(__EMX__)
+ result = (BOOL) (LYIsPathSep(path[0])
+ || (isalpha(UCH(path[0]))
+ && (path[1] == ':')
+ && LYIsPathSep(path[2])));
+#else
+ result = (LYIsPathSep(path[0]));
+#endif /* DOSPATH */
+ return result;
+#endif
+}
+
+/*
+ * Check if the given filename is the root path, e.g., "/" on Unix.
+ */
+PUBLIC BOOLEAN LYisRootPath ARGS1(
+ char *, path)
+{
+#if defined(DOSPATH) || defined(__EMX__)
+ if (strlen(path) == 3
+ && isalpha(UCH(path[0]))
+ && path[1] == ':'
+ && LYIsPathSep(path[2]))
+ return TRUE;
+#endif
+ return (BOOL) ((strlen(path) == 1) && LYIsPathSep(path[0]));
+}
+
+/*
* A file URL for a remote host is an obsolete ftp URL.
* Return YES only if we're certain it's a local file. - FM
*/
@@ -2351,10 +2541,11 @@ PUBLIC BOOLEAN LYisLocalFile ARGS1(
if (0==strcmp("file", acc_method) &&
(0==strcmp(host, "localhost") ||
#ifdef VMS
- 0==strcasecomp(host, HTHostName())))
+ 0==strcasecomp(host, HTHostName())
#else
- 0==strcmp(host, HTHostName())))
+ 0==strcmp(host, HTHostName())
#endif /* VMS */
+ ))
{
FREE(host);
FREE(acc_method);
@@ -2432,7 +2623,7 @@ PUBLIC void LYLocalhostAliases_free NOARGS
PUBLIC void LYAddLocalhostAlias ARGS1(
char *, alias)
{
- char *LocalAlias;
+ char *LocalAlias = NULL;
if (!(alias && *alias))
return;
@@ -2444,9 +2635,7 @@ PUBLIC void LYAddLocalhostAlias ARGS1(
#endif
}
- if ((LocalAlias = (char *)calloc(1, (strlen(alias) + 1))) == NULL)
- outofmem(__FILE__, "HTAddLocalhosAlias");
- strcpy(LocalAlias, alias);
+ StrAllocCopy(LocalAlias, alias);
HTList_addObject(localhost_aliases, LocalAlias);
return;
@@ -2540,8 +2729,8 @@ PUBLIC int LYCheckForProxyURL ARGS1(
cp1++;
if (!*cp) {
return(NOT_A_URL_TYPE);
- } else if (isdigit((unsigned char)*cp1)) {
- while (*cp1 && isdigit((unsigned char)*cp1))
+ } else if (isdigit(UCH(*cp1))) {
+ while (*cp1 && isdigit(UCH(*cp1)))
cp1++;
if (*cp1 && !LYIsHtmlSep(*cp1))
return(UNKNOWN_URL_TYPE);
@@ -2654,6 +2843,11 @@ PUBLIC int is_url ARGS1(
} else if (compare_type(cp, "mailto:", 7)) {
return(MAILTO_URL_TYPE);
+#ifndef DISABLE_BIBP
+ } else if (compare_type(cp, "bibp:", 5)) {
+ return(BIBP_URL_TYPE);
+#endif
+
} else if (compare_type(cp, "file:", 5)) {
if (LYisLocalFile(cp)) {
return(FILE_URL_TYPE);
@@ -2746,7 +2940,7 @@ PUBLIC int is_url ARGS1(
/*
* Special Internal Lynx type.
*/
- (void)is_url(&cp[11]);
+ (void)is_url(&cp[11]); /* forces lower/uppercase of next part */
return(LYNXIMGMAP_URL_TYPE);
} else if (compare_type(cp, "LYNXCOOKIE:", 11)) {
@@ -2823,6 +3017,71 @@ PUBLIC int is_url ARGS1(
}
/*
+ * Sometimes it is just expected that curses is on when an alert or
+ * other statusline message needs to be shown and we are not just
+ * dumping immediately. Calling this will 'fix' it, but may not
+ * always be appropriate. - kw
+ */
+PUBLIC void LYFixCursesOn ARGS1(
+ CONST char *, reason)
+{
+ if (dump_output_immediately || LYCursesON)
+ return;
+ if (reason) {
+ CTRACE((tfp, "Forcing curses on to %s\n", reason));
+ }
+ start_curses();
+}
+
+/*
+ * Most protocol modules called through HTLoad* expect that curses is on
+ * unless dump_output_immediately is set, so that statusline messages
+ * can be shown. Some protocols expect the opposite, namely telnet and
+ * friends. This function should be called after the 'physical' URL
+ * for accessing addr has been established. It does the right thing
+ * to the degree that curses is turned on for known problem cases.
+ * In any normal circumstances this should never apply, but proxying
+ * or rule substitution is not prevented for telnet-like URLs, and
+ * this 'fix' avoids some crashes that can otherwise occur. - kw
+ */
+PUBLIC BOOLEAN LYFixCursesOnForAccess ARGS2(
+ CONST char *, addr,
+ CONST char *, physical)
+{
+ /*
+ * If curses is off when maybe it shouldn't...
+ */
+ if (!dump_output_immediately && !LYCursesON && physical) {
+ char *cp1;
+ /*
+ * If requested resource wants to be accessed with curses off, and
+ * getfile() would indeed have turned curses off for it...
+ */
+ if (strstr(addr, "://") != NULL &&
+ (!strncmp(addr, "telnet:", 7) ||
+ !strncmp(addr, "rlogin:", 7) ||
+ !strncmp(addr, "tn3270:", 7) ||
+ (strncmp(addr, "gopher:", 7) &&
+ (cp1 = strchr(addr+11,'/')) != NULL &&
+ (*(cp1+1) == 'T' || *(cp1+1) == '8')))) {
+ /*
+ * If actual access that will be done is ok with curses off,
+ * then do nothing special, else force curses on. - kw
+ */
+ if (strncmp(physical, "telnet:", 7) &&
+ strncmp(physical, "rlogin:", 7) &&
+ strncmp(physical, "tn3270:", 7)) {
+ start_curses();
+ HTAlert(
+ gettext("Unexpected access protocol for this URL scheme."));
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+/*
* Determine whether we allow HEAD and related flags for a URL. - kw
*/
PUBLIC BOOLEAN LYCanDoHEAD ARGS1(
@@ -2838,29 +3097,126 @@ PUBLIC BOOLEAN LYCanDoHEAD ARGS1(
/* Make copy for is_url() since caller may not care for case changes */
StrAllocCopy(temp0, address);
isurl = is_url(temp0);
- FREE(temp0);
- if (!isurl)
+ if (!isurl) {
+ FREE(temp0);
return FALSE;
+ }
if (isurl == LYNXCGI_URL_TYPE) {
+ FREE(temp0);
#if defined(LYNXCGI_LINKS) && !defined(VMS)
return TRUE;
#else
return FALSE;
#endif
}
+ /*
+ * The idea of the following is to allow HEAD for news URLs that
+ * identify single articles, not those that identify ranges of
+ * articles or groups or a list of groups. - kw
+ */
if (isurl == NEWS_URL_TYPE || isurl == NNTP_URL_TYPE) {
char *temp = HTParse(address, "", PARSE_PATH);
char *cp = strrchr(temp, '/');
if (strchr((cp ? cp : temp), '@') != NULL) {
+ FREE(temp0);
FREE(temp);
return TRUE;
}
- if (cp && isdigit(cp[1]) && strchr(cp, '-') == NULL) {
+ if (cp && isdigit(UCH(cp[1])) && strchr(cp, '-') == NULL) {
+ FREE(temp0);
FREE(temp);
return TRUE;
}
FREE(temp);
}
+
+#define ALLOW_PROXY_HEAD
+/* If defined, also allow head requests for URLs proxied through the
+ * "http" or "lynxcgi" protocols, which understand HEAD. Only the
+ * proxy environment variables are checked, not the HTRules system. - kw
+ */
+#ifdef ALLOW_PROXY_HEAD
+ if (isurl != FILE_URL_TYPE) {
+ char *acc_method = HTParse(temp0, "", PARSE_ACCESS);
+ if (acc_method && *acc_method) {
+ char *proxy;
+ StrAllocCat(acc_method, "_proxy");
+ proxy = getenv(acc_method);
+ if (proxy && (!strncmp(proxy, "http:", 5) ||
+ !strncmp(proxy, "lynxcgi:", 8)) &&
+ !override_proxy(temp0)) {
+ FREE(temp0);
+ FREE(acc_method);
+ return TRUE;
+ }
+ }
+ FREE(acc_method);
+ }
+#endif /* ALLOW_PROXY_HEAD */
+
+ FREE(temp0);
+ return FALSE;
+}
+
+/*
+ * Close an input file.
+ */
+PUBLIC BOOLEAN LYCloseInput ARGS1(
+ FILE *, fp)
+{
+ if (fp != 0) {
+ int err = ferror(fp);
+ fclose(fp);
+ if (!err) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/*
+ * Close an output file, reporting any problems with writing to it.
+ */
+PUBLIC BOOLEAN LYCloseOutput ARGS1(
+ FILE *, fp)
+{
+ if (fp != 0) {
+ int err = ferror(fp);
+ fclose(fp);
+ if (!err) {
+ return TRUE;
+ }
+ }
+ HTAlert(CANNOT_WRITE_TO_FILE);
+ return FALSE;
+}
+
+/*
+ * Test if we'll be able to write a file. If not, warn the user.
+ */
+PUBLIC BOOLEAN LYCanWriteFile ARGS1(
+ CONST char*, filename)
+{
+ if (LYCloseOutput(fopen(filename, "w"))) {
+ remove(filename);
+ return TRUE;
+ } else {
+ _statusline(NEW_FILENAME_PROMPT);
+ return FALSE;
+ }
+}
+
+/*
+ * Test if we'll be able to read a file.
+ */
+PUBLIC BOOLEAN LYCanReadFile ARGS1(
+ CONST char*, filename)
+{
+ FILE *fp;
+
+ if ((fp = fopen(filename, "r")) != 0) {
+ return LYCloseInput(fp);
+ }
return FALSE;
}
@@ -2887,10 +3243,6 @@ PUBLIC void remove_backslashes ARGS1(
return;
}
-#if HAVE_UTMP
-extern char *ttyname PARAMS((int fd));
-#endif
-
/*
* Checks to see if the current process is attached
* via a terminal in the local domain.
@@ -2898,42 +3250,120 @@ extern char *ttyname PARAMS((int fd));
*/
PUBLIC BOOLEAN inlocaldomain NOARGS
{
-#if ! HAVE_UTMP
- return(TRUE);
-#else
+#if HAVE_UTMP
int n;
FILE *fp;
struct utmp me;
char *cp, *mytty = NULL;
- if ((cp=ttyname(0)))
+ if ((cp = ttyname(0)))
mytty = strrchr(cp, '/');
- if (mytty && (fp=fopen(UTMP_FILE, "r")) != NULL) {
- mytty++;
- do {
- n = fread((char *) &me, sizeof(struct utmp), 1, fp);
- } while (n>0 && !STREQ(me.ut_line,mytty));
- (void) fclose(fp);
-
- if (n > 0 &&
- strlen(me.ut_host) > strlen(LYLocalDomain) &&
- STREQ(LYLocalDomain,
- me.ut_host+strlen(me.ut_host)-strlen(LYLocalDomain)) )
- return(TRUE);
+ if (mytty && (fp = fopen(UTMP_FILE, "r")) != NULL) {
+ mytty++;
+ do {
+ n = fread((char *) &me, sizeof(struct utmp), 1, fp);
+ } while (n > 0 && !STREQ(me.ut_line, mytty));
+ (void) LYCloseInput(fp);
+
+ if (n > 0 &&
+ strlen(me.ut_host) > strlen(LYLocalDomain) &&
+ STREQ(LYLocalDomain,
+ me.ut_host + strlen(me.ut_host) - strlen(LYLocalDomain)) )
+ return(TRUE);
#ifdef LINUX
/* Linux fix to check for local user. J.Cullen 11Jul94 */
- if ((n > 0) && (strlen(me.ut_host) == 0))
- return(TRUE);
+ if ((n > 0) && (strlen(me.ut_host) == 0))
+ return(TRUE);
#endif /* LINUX */
} else {
- CTRACE(tfp,"Could not get ttyname or open UTMP file %s\n", UTMP_FILE);
+ CTRACE((tfp, "Could not get ttyname or open UTMP file %s\n", UTMP_FILE));
}
return(FALSE);
-#endif /* !HAVE_UTMP */
+#else
+ CTRACE((tfp, "LYUtils: inlocaldomain() not support.\n"));
+ return(TRUE);
+#endif /* HAVE_UTMP */
+}
+
+#if HAVE_SIGACTION
+/*
+ * An extended alternative for calling signal(), sets some flags for
+ * signal handler as we want them if that functionality is available.
+ * (We don't return anything from this function since the return
+ * value would currently be ignored anyway.) - kw
+ *
+ */
+PUBLIC void LYExtSignal ARGS2(
+ int, sig,
+ LYSigHandlerFunc_t *, handler)
+{
+#ifdef SIGWINCH
+ /* add more cases to if(condition) if required... */
+ if (sig == SIGWINCH && LYNonRestartingSIGWINCH) {
+ struct sigaction act;
+ act.sa_handler = handler;
+ sigemptyset(&act.sa_mask);
+ act.sa_flags = 0;
+#ifdef SA_RESTART
+ if (sig != SIGWINCH)
+ act.sa_flags |= SA_RESTART;
+#endif /* SA_RESTART */
+ sigaction(sig, &act, NULL);
+ } else
+#endif /* defined(SIGWINCH) */
+ signal(sig, handler);
+}
+#endif /* HAVE_SIGACTION */
+
+#if defined(SIGTSTP) && !defined(USE_SLANG)
+#if HAVE_SIGACTION
+/*
+ * For switching a signal's handling between SIG_DFL and something
+ * (possibly) different that may have been set up by lynx code or
+ * e.g. by curses library. Uses sigaction to preserve / restore as
+ * much state as possible.
+ * Second arg is where to save or restore from.
+ * Third arg to_dfl specifies what to do:
+ * 1 Save current state in where, set handling to SIG_DFL
+ * 0 Restore current state to previously saved one in where
+ *
+ * Currently only used for SIGTSTP without SLANG, to prevent (n)curses
+ * signal handler from running while lynx is waiting in system() for
+ * an interactive command like an editor. - kw
+ */
+PRIVATE BOOLEAN LYToggleSigDfl ARGS3(
+ int, sig,
+ struct sigaction *, where,
+ int, to_dfl)
+{
+ int rv = -1;
+ struct sigaction oact;
+
+ if (to_dfl == 1) {
+ rv = sigaction(sig, NULL, &oact);
+ if (rv == 0) {
+ if (oact.sa_handler != SIG_DFL) {
+ oact.sa_handler = SIG_DFL;
+ rv = sigaction(sig, &oact, where);
+ } else if (where) {
+ memcpy(where, &oact, sizeof(oact));
+ rv = 0;
+ }
+ }
+ } else {
+ rv = sigaction(sig, where, NULL);
+ }
+ if (rv != 0) {
+ CTRACE((tfp, "Error in LYToggleSigDfl: %s\n", LYStrerror(errno)));
+ return FALSE;
+ } else
+ return TRUE;
}
+#endif /* HAVE_SIGACTION */
+#endif /* SIGTSTP && !USE_SLANG */
/**************
** This bit of code catches window size change signals
@@ -2973,7 +3403,13 @@ PUBLIC void size_change ARGS1(
LYcols = SLtt_Screen_Cols;
#ifdef SLANG_MBCS_HACK
PHYSICAL_SLtt_Screen_Cols = LYcols;
- SLtt_Screen_Cols = (LYcols * 6);
+#ifdef SLANG_NO_LIMIT /* define this if slang has been fixed */
+ SLtt_Screen_Cols = (LYcols-1) * 6;
+#else
+ /* Needs to be limited: fixed buffer bugs in slang can cause crash,
+ see slang's SLtt_smart_puts - kw */
+ SLtt_Screen_Cols = HTMIN((LYcols-1) * 6, 255);
+#endif
#endif /* SLANG_MBCS_HACK */
if (sig == 0)
/*
@@ -3013,10 +3449,20 @@ PUBLIC void size_change ARGS1(
#endif /* TIOCGSIZE */
#endif /* HAVE_SIZECHANGE */
+#ifdef __EMX__
+ {
+ int scrsize[2];
+
+ _scrsize(scrsize);
+ LYcols = scrsize[0];
+ LYlines = scrsize[1];
+ }
+#endif
+
if (LYlines <= 0)
- LYlines = 24;
+ LYlines = DFT_ROWS;
if (LYcols <= 0)
- LYcols = 80;
+ LYcols = DFT_COLS;
#endif /* USE_SLANG */
/*
@@ -3024,11 +3470,16 @@ PUBLIC void size_change ARGS1(
*/
if (LYlines != old_lines || LYcols != old_cols) {
recent_sizechange = TRUE;
- CTRACE(tfp, "Window size changed from (%d,%d) to (%d,%d)\n",
- old_lines, old_cols, LYlines, LYcols);
+ CTRACE((tfp, "Window size changed from (%d,%d) to (%d,%d)\n",
+ old_lines, old_cols, LYlines, LYcols));
+#if defined(CAN_SWITCH_DISPLAY_CHARSET) && defined(CAN_AUTODETECT_DISPLAY_CHARSET)
+ /* May need to reload the font due to different char-box size */
+ if (current_char_set != auto_display_charset)
+ Switch_Display_Charset(current_char_set, SWITCH_DISPLAY_CHARSET_SIZECHANGE);
+#endif
}
#ifdef SIGWINCH
- (void)signal (SIGWINCH, size_change);
+ LYExtSignal (SIGWINCH, size_change);
#endif /* SIGWINCH */
return;
@@ -3060,16 +3511,14 @@ PUBLIC void HTSugFilenames_free NOARGS
PUBLIC void HTAddSugFilename ARGS1(
char *, fname)
{
- char *new;
+ char *new = NULL;
char *old;
HTList *cur;
if (!(fname && *fname))
return;
- if ((new = (char *)calloc(1, (strlen(fname) + 1))) == NULL)
- outofmem(__FILE__, "HTAddSugFilename");
- strcpy(new, fname);
+ StrAllocCopy(new, fname);
if (!sug_filenames) {
sug_filenames = HTList_new();
@@ -3100,7 +3549,7 @@ PUBLIC void HTAddSugFilename ARGS1(
PUBLIC void change_sug_filename ARGS1(
char *, fname)
{
- char *temp, *cp, *cp1, *end;
+ char *temp = 0, *cp, *cp1, *end;
#ifdef VMS
char *dot;
int j, k;
@@ -3119,22 +3568,26 @@ PUBLIC void change_sug_filename ARGS1(
/*
* Rename any temporary files.
*/
- temp = (char *)calloc(1, (strlen(lynx_temp_space) + 60));
- if (temp == NULL)
- outofmem(__FILE__, "change_sug_filename");
cp = wwwName(lynx_temp_space);
+#ifdef FNAMES_8_3
if (LYIsHtmlSep(*cp)) {
- sprintf(temp, "file://localhost%s%d", cp, (int)getpid());
+ HTSprintf0(&temp, "file://localhost%s%04x", cp, GETPID());
} else {
- sprintf(temp, "file://localhost/%s%d", cp, (int)getpid());
+ HTSprintf0(&temp, "file://localhost/%s%04x", cp, GETPID());
}
+#else
+ if (LYIsHtmlSep(*cp)) {
+ HTSprintf0(&temp, "file://localhost%s%d", cp, (int)getpid());
+ } else {
+ HTSprintf0(&temp, "file://localhost/%s%d", cp, (int)getpid());
+ }
+#endif
if (!strncmp(fname, temp, strlen(temp))) {
cp = strrchr(fname, '.');
if (strlen(cp) > (strlen(temp) - 4))
cp = NULL;
- strcpy(temp, (cp ? cp : ""));
- strcpy(fname, "temp");
- strcat(fname, temp);
+ StrAllocCopy(temp, (cp ? cp : ""));
+ sprintf(fname, "temp%.*s", LY_MAXPATH - 10, temp);
}
FREE(temp);
@@ -3160,6 +3613,19 @@ PUBLIC void change_sug_filename ARGS1(
}
*cp1 = '\0';
}
+#ifdef _WINDOWS /* 1998/05/05 (Tue) 10:08:05 */
+ if ((cp = strrchr(fname,'=')) != NULL && strlen(cp) > 1) {
+ cp1 = fname;
+ /*
+ * Go past the '='.
+ */
+ cp++;
+ for (; *cp != '\0'; cp++, cp1++) {
+ *cp1 = *cp;
+ }
+ *cp1 = '\0';
+ }
+#endif
/*
* Trim off date-size suffix, if present.
@@ -3205,7 +3671,7 @@ PUBLIC void change_sug_filename ARGS1(
*cp == '<' || *cp == '>' || *cp == '#' ||
*cp == '%' || *cp == '*' || *cp == '`' ||
*cp == '~' || *cp == '^' || *cp == '|' ||
- *cp < ' ' || ((unsigned char)*cp) > 126) {
+ *cp < ' ' || (UCH(*cp)) > 126) {
*cp = '-';
}
}
@@ -3385,15 +3851,73 @@ PRIVATE int fmt_tempname ARGS3(
CONST char *, prefix,
CONST char *, suffix)
{
+ int code;
+#if defined(USE_MKSTEMP) && defined(HAVE_MKSTEMP)
+ int fd;
+ char interim[LY_MAXPATH];
+ sprintf(interim, "%.*sXXXXXX", LY_MAXPATH - 8, prefix);
+ if (strlen(interim) + strlen(suffix) < LY_MAXPATH - 2
+ && (fd = mkstemp(interim)) >= 0) {
+ sprintf(result, "%s%s", interim, suffix);
+ rename(interim, result);
+ chmod(result, HIDE_CHMOD); /* (yes, some mkstemps are broken ;-) */
+ close(fd);
+ code = TRUE;
+ } else {
+ code = FALSE;
+ }
+#else
+#ifdef USE_RAND_TEMPNAME
+#define SIZE_TEMPNAME ((MAX_TEMPNAME / BITS_PER_CHAR) + 1)
+ static BOOL first = TRUE;
+ static int names_used = 0;
+ static unsigned char used_tempname[SIZE_TEMPNAME];
+ unsigned offset, mask;
+#endif
static unsigned counter;
char leaf[LY_MAXPATH];
- int code;
if (prefix == 0)
prefix = "";
if (suffix == 0)
suffix = "";
+ /*
+ * Prefer a random value rather than a counter.
+ */
+#ifdef USE_RAND_TEMPNAME
+ if (first) {
+ lynx_srand((unsigned)((long)time((time_t *)0) + (long)result));
+ first = FALSE;
+ }
+
+ /* We don't really need all of the bits from rand(). The high-order bits
+ * are the more-random portion in any case, but limiting the width of the
+ * generated name is done partly to avoid problems on systems that may not
+ * support long filenames.
+ */
+ counter = MAX_TEMPNAME;
+ while (names_used < MAX_TEMPNAME) {
+ counter = (unsigned)(( (float)MAX_TEMPNAME * lynx_rand() ) / LYNX_RAND_MAX + 1);
+ counter %= SIZE_TEMPNAME; /* just in case... */
+ /*
+ * Avoid reusing a temporary name, since there are places in the code
+ * which can refer to a temporary filename even after it has been
+ * closed and removed from the filesystem.
+ */
+ offset = counter / BITS_PER_CHAR;
+ mask = 1 << (counter % BITS_PER_CHAR);
+ if ((used_tempname[offset] & mask) == 0) {
+ names_used++;
+ used_tempname[offset] |= mask;
+ break;
+ }
+ }
+ if (names_used >= MAX_TEMPNAME)
+ HTAlert(gettext("Too many tempfiles"));
+#else
counter++;
+#endif
+
#ifdef FNAMES_8_3
/*
* The 'lynx_temp_space' string ends with a '/' or '\\', so we only have to
@@ -3401,14 +3925,19 @@ PRIVATE int fmt_tempname ARGS3(
* the suffix may contain more than a ".htm", e.g., "-txt.gz", so we trim
* off from the filename portion to make room.
*/
+#ifdef _WINDOWS
+ sprintf(leaf, "%04x%04x", counter, (unsigned)GETPID());
+#else
sprintf(leaf, "%u%u", counter, (unsigned)getpid());
+#endif
if (strlen(leaf) > 8)
leaf[8] = 0;
if (strlen(suffix) > 4 || *suffix != '.') {
CONST char *tail = strchr(suffix, '.');
if (tail == 0)
tail = suffix + strlen(suffix);
- leaf[8 - (tail - suffix)] = 0;
+ if (8 - (tail - suffix) >= 0)
+ leaf[8 - (tail - suffix)] = 0;
}
strcat(leaf, suffix);
#else
@@ -3424,7 +3953,8 @@ PRIVATE int fmt_tempname ARGS3(
sprintf(result, "%.*s", LY_MAXPATH-1, leaf);
code = FALSE;
}
- CTRACE(tfp, "-> '%s'\n", result);
+#endif
+ CTRACE((tfp, "-> '%s'\n", result));
return (code);
}
@@ -3471,182 +4001,265 @@ PUBLIC int number2arrows ARGS1(
* parse_restrictions takes a string of comma-separated restrictions
* and sets the corresponding flags to restrict the facilities available.
*/
-PRIVATE CONST char *restrict_name[] = {
- "inside_telnet" ,
- "outside_telnet",
- "telnet_port" ,
- "inside_ftp" ,
- "outside_ftp" ,
- "inside_rlogin" ,
- "outside_rlogin",
- "suspend" ,
- "editor" ,
- "shell" ,
- "bookmark" ,
- "multibook" ,
- "bookmark_exec" ,
- "option_save" ,
- "print" ,
- "download" ,
- "disk_save" ,
- "exec" ,
- "lynxcgi" ,
- "exec_frozen" ,
- "goto" ,
- "jump" ,
- "file_url" ,
+/* The first two are special: we want to record whether "default" or
+ * "all" restrictions were applied, in addition to the detailed effects
+ * of those options. - kw
+ */
+/* skip the special flags when processing "all" and "default": */
+#define N_SPECIAL_RESTRICT_OPTIONS 2
+
+PRIVATE CONST struct {
+ CONST char *name;
+ BOOLEAN *flag;
+ BOOLEAN can;
+} restrictions[] = {
+ { "default", &had_restrictions_default, TRUE },
+ { "all", &had_restrictions_all, TRUE },
+ { "inside_telnet", &no_inside_telnet, CAN_ANONYMOUS_INSIDE_DOMAIN_TELNET },
+ { "outside_telnet", &no_outside_telnet, CAN_ANONYMOUS_OUTSIDE_DOMAIN_TELNET },
+ { "telnet_port", &no_telnet_port, CAN_ANONYMOUS_GOTO_TELNET_PORT },
+ { "inside_ftp", &no_inside_ftp, CAN_ANONYMOUS_INSIDE_DOMAIN_FTP },
+ { "outside_ftp", &no_outside_ftp, CAN_ANONYMOUS_OUTSIDE_DOMAIN_FTP },
+ { "inside_rlogin", &no_inside_rlogin, CAN_ANONYMOUS_INSIDE_DOMAIN_RLOGIN },
+ { "outside_rlogin", &no_outside_rlogin, CAN_ANONYMOUS_OUTSIDE_DOMAIN_RLOGIN },
+ { "suspend", &no_suspend, FALSE },
+ { "editor", &no_editor, FALSE },
+ { "shell", &no_shell, FALSE },
+ { "bookmark", &no_bookmark, FALSE },
+ { "multibook", &no_multibook, FALSE },
+ { "bookmark_exec", &no_bookmark_exec, FALSE },
+ { "option_save", &no_option_save, FALSE },
+ { "print", &no_print, CAN_ANONYMOUS_PRINT },
+ { "download", &no_download, FALSE },
+ { "disk_save", &no_disk_save, FALSE },
+#if defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
+ { "exec", &no_exec, LOCAL_EXECUTION_LINKS_ALWAYS_OFF_FOR_ANONYMOUS },
+#endif
+ { "lynxcgi", &no_lynxcgi, FALSE },
+ { "exec_frozen", &exec_frozen, FALSE },
+ { "goto", &no_goto, CAN_ANONYMOUS_GOTO },
+ { "jump", &no_jump, CAN_ANONYMOUS_JUMP },
+ { "file_url", &no_file_url, FALSE },
#ifndef DISABLE_NEWS
- "news_post" ,
- "inside_news" ,
- "outside_news" ,
+ { "news_post", &no_newspost, FALSE },
+ { "inside_news", &no_inside_news, CAN_ANONYMOUS_INSIDE_DOMAIN_READ_NEWS },
+ { "outside_news", &no_outside_news, CAN_ANONYMOUS_OUTSIDE_DOMAIN_READ_NEWS },
+#endif
+ { "mail", &no_mail, CAN_ANONYMOUS_MAIL },
+ { "dotfiles", &no_dotfiles, FALSE },
+ { "useragent", &no_useragent, FALSE },
+#ifdef SUPPORT_CHDIR
+ { "chdir", &no_chdir, FALSE },
#endif
- "mail" ,
- "dotfiles" ,
- "useragent" ,
#ifdef DIRED_SUPPORT
- "dired_support" ,
+ { "dired_support", &no_dired_support, FALSE },
#ifdef OK_PERMIT
- "change_exec_perms",
+ { "change_exec_perms", &no_change_exec_perms, FALSE },
#endif /* OK_PERMIT */
#endif /* DIRED_SUPPORT */
#ifdef USE_EXTERNALS
- "externals" ,
+ { "externals", &no_externals, FALSE },
#endif
- (char *) 0 };
-
- /* restrict_name and restrict_flag structure order
- * must be maintained exactly!
- */
-
-PRIVATE BOOLEAN *restrict_flag[] = {
- &no_inside_telnet,
- &no_outside_telnet,
- &no_telnet_port,
- &no_inside_ftp,
- &no_outside_ftp,
- &no_inside_rlogin,
- &no_outside_rlogin,
- &no_suspend ,
- &no_editor ,
- &no_shell ,
- &no_bookmark ,
- &no_multibook ,
- &no_bookmark_exec,
- &no_option_save,
- &no_print ,
- &no_download ,
- &no_disk_save,
- &no_exec ,
- &no_lynxcgi ,
- &exec_frozen ,
- &no_goto ,
- &no_jump ,
- &no_file_url ,
-#ifndef DISABLE_NEWS
- &no_newspost ,
- &no_inside_news,
- &no_outside_news,
+ { "lynxcfg_info", &no_lynxcfg_info, CAN_ANONYMOUS_VIEW_LYNXCFG_INFO },
+#ifndef NO_CONFIG_INFO
+ { "lynxcfg_xinfo", &no_lynxcfg_xinfo, CAN_ANONYMOUS_VIEW_LYNXCFG_EXTENDED_INFO },
+#ifdef HAVE_CONFIG_H
+ { "compileopts_info", &no_compileopts_info, CAN_ANONYMOUS_VIEW_COMPILEOPTS_INFO },
#endif
- &no_mail ,
- &no_dotfiles ,
- &no_useragent ,
-#ifdef DIRED_SUPPORT
- &no_dired_support,
-#ifdef OK_PERMIT
- &no_change_exec_perms,
-#endif /* OK_PERMIT */
-#endif /* DIRED_SUPPORT */
-#ifdef USE_EXTERNALS
- &no_externals ,
#endif
- (BOOLEAN *) 0 };
-
-PUBLIC void parse_restrictions ARGS1(
- CONST char *, s)
-{
- CONST char *p;
- CONST char *word;
- int i;
-
- if (STREQ("all", s)) {
- /* set all restrictions */
- for (i=0; restrict_flag[i]; i++)
- *restrict_flag[i] = TRUE;
- return;
- }
-
- if (STREQ("default", s)) {
- /* set all restrictions */
- for (i=0; restrict_flag[i]; i++)
- *restrict_flag[i] = TRUE;
-
- /* reset these to defaults */
- no_inside_telnet = !(CAN_ANONYMOUS_INSIDE_DOMAIN_TELNET);
- no_outside_telnet = !(CAN_ANONYMOUS_OUTSIDE_DOMAIN_TELNET);
-#ifndef DISABLE_NEWS
- no_inside_news = !(CAN_ANONYMOUS_INSIDE_DOMAIN_READ_NEWS);
- no_outside_news = !(CAN_ANONYMOUS_OUTSIDE_DOMAIN_READ_NEWS);
+ /* put "goto" restrictions on the end, since they are a refinement */
+#ifndef DISABLE_BIBP
+ { "goto_bibp", &no_goto_bibp, CAN_ANONYMOUS_GOTO_BIBP },
+#endif
+#ifdef HAVE_CONFIG_H
+#ifndef NO_CONFIG_INFO
+ { "goto_configinfo", &no_goto_configinfo, CAN_ANONYMOUS_GOTO_CONFIGINFO },
+#endif
#endif
- no_inside_ftp = !(CAN_ANONYMOUS_INSIDE_DOMAIN_FTP);
- no_outside_ftp = !(CAN_ANONYMOUS_OUTSIDE_DOMAIN_FTP);
- no_inside_rlogin = !(CAN_ANONYMOUS_INSIDE_DOMAIN_RLOGIN);
- no_outside_rlogin = !(CAN_ANONYMOUS_OUTSIDE_DOMAIN_RLOGIN);
- no_goto = !(CAN_ANONYMOUS_GOTO);
- no_goto_cso = !(CAN_ANONYMOUS_GOTO_CSO);
- no_goto_file = !(CAN_ANONYMOUS_GOTO_FILE);
+ { "goto_cso", &no_goto_cso, CAN_ANONYMOUS_GOTO_CSO },
+ { "goto_file", &no_goto_file, CAN_ANONYMOUS_GOTO_FILE },
#ifndef DISABLE_FINGER
- no_goto_finger = !(CAN_ANONYMOUS_GOTO_FINGER);
+ { "goto_finger", &no_goto_finger, CAN_ANONYMOUS_GOTO_FINGER },
#endif
- no_goto_ftp = !(CAN_ANONYMOUS_GOTO_FTP);
+ { "goto_ftp", &no_goto_ftp, CAN_ANONYMOUS_GOTO_FTP },
#ifndef DISABLE_GOPHER
- no_goto_gopher = !(CAN_ANONYMOUS_GOTO_GOPHER);
+ { "goto_gopher", &no_goto_gopher, CAN_ANONYMOUS_GOTO_GOPHER },
#endif
- no_goto_http = !(CAN_ANONYMOUS_GOTO_HTTP);
- no_goto_https = !(CAN_ANONYMOUS_GOTO_HTTPS);
- no_goto_lynxcgi = !(CAN_ANONYMOUS_GOTO_LYNXCGI);
- no_goto_lynxexec = !(CAN_ANONYMOUS_GOTO_LYNXEXEC);
- no_goto_lynxprog = !(CAN_ANONYMOUS_GOTO_LYNXPROG);
- no_goto_mailto = !(CAN_ANONYMOUS_GOTO_MAILTO);
+ { "goto_http", &no_goto_http, CAN_ANONYMOUS_GOTO_HTTP },
+ { "goto_https", &no_goto_https, CAN_ANONYMOUS_GOTO_HTTPS },
+ { "goto_lynxcgi", &no_goto_lynxcgi, CAN_ANONYMOUS_GOTO_LYNXCGI },
+ { "goto_lynxexec", &no_goto_lynxexec, CAN_ANONYMOUS_GOTO_LYNXEXEC },
+ { "goto_lynxprog", &no_goto_lynxprog, CAN_ANONYMOUS_GOTO_LYNXPROG },
+ { "goto_mailto", &no_goto_mailto, CAN_ANONYMOUS_GOTO_MAILTO },
#ifndef DISABLE_NEWS
- no_goto_news = !(CAN_ANONYMOUS_GOTO_NEWS);
- no_goto_nntp = !(CAN_ANONYMOUS_GOTO_NNTP);
+ { "goto_news", &no_goto_news, CAN_ANONYMOUS_GOTO_NEWS },
+ { "goto_nntp", &no_goto_nntp, CAN_ANONYMOUS_GOTO_NNTP },
#endif
- no_goto_rlogin = !(CAN_ANONYMOUS_GOTO_RLOGIN);
+ { "goto_rlogin", &no_goto_rlogin, CAN_ANONYMOUS_GOTO_RLOGIN },
#ifndef DISABLE_NEWS
- no_goto_snews = !(CAN_ANONYMOUS_GOTO_SNEWS);
+ { "goto_snews", &no_goto_snews, CAN_ANONYMOUS_GOTO_SNEWS },
#endif
- no_goto_telnet = !(CAN_ANONYMOUS_GOTO_TELNET);
- no_goto_tn3270 = !(CAN_ANONYMOUS_GOTO_TN3270);
- no_goto_wais = !(CAN_ANONYMOUS_GOTO_WAIS);
- no_telnet_port = !(CAN_ANONYMOUS_GOTO_TELNET_PORT);
- no_jump = !(CAN_ANONYMOUS_JUMP);
- no_mail = !(CAN_ANONYMOUS_MAIL);
- no_print = !(CAN_ANONYMOUS_PRINT);
-#if defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
- no_exec = LOCAL_EXECUTION_LINKS_ALWAYS_OFF_FOR_ANONYMOUS;
-#endif /* EXEC_LINKS || EXEC_SCRIPTS */
- return;
- }
-
- p = s;
- while (*p) {
- p = LYSkipCBlanks(p);
- if (*p == '\0')
- break;
- word = p;
- while (*p != ',' && *p != '\0')
- p++;
-
- for (i=0; restrict_name[i]; i++) {
- if (STRNEQ(word, restrict_name[i], p-word)) {
- *restrict_flag[i] = TRUE;
- break;
- }
- }
- if (*p)
- p++;
- }
- return;
+ { "goto_telnet", &no_goto_telnet, CAN_ANONYMOUS_GOTO_TELNET },
+ { "goto_tn3270", &no_goto_tn3270, CAN_ANONYMOUS_GOTO_TN3270 },
+ { "goto_wais", &no_goto_wais, CAN_ANONYMOUS_GOTO_WAIS },
+};
+
+/* This will make no difference between '-' and '_'. It does only in/equality
+ compare. It assumes that p2 can't contain dashes, but p1 can.
+ This function is also used (if macro OPTNAME_ALLOW_DASHES doesn't have
+ value of zero) for compare of commandline options -VH
+ */
+PUBLIC BOOL strn_dash_equ ARGS3(
+ CONST char*, p1,
+ CONST char*, p2,
+ int, len)
+{
+ while (len--) {
+ if (!*p2)
+ return 0;/* canonical name is shorter */
+ switch (*p1) {
+ case 0:
+ return 0;
+ case '-':
+ case '_':
+ if (*p2!='_')
+ return 0;
+ else
+ break;
+ default:
+ if (*p1!=*p2)
+ return 0;
+ }
+ ++p1; ++p2;
+ }
+ return 1;
+}
+
+/* Uncomment following lines to allow only exact string matching */
+/* #define RESTRICT_NM_ALLOW_DASHES 0 */
+
+#ifndef RESTRICT_NM_ALLOW_DASHES
+# define RESTRICT_NM_ALLOW_DASHES 1
+#endif
+
+#if RESTRICT_NM_ALLOW_DASHES
+# define RESTRICT_NM_EQU(a,b,len) strn_dash_equ(a,b,len)
+#else
+# define RESTRICT_NM_EQU(a,b,len) STRNEQ(a,b,len)
+#endif
+
+/*
+ * Returns the inx'th name from the restrictions table, or null if inx is
+ * out of range.
+ */
+PUBLIC CONST char *index_to_restriction ARGS1(
+ int, inx)
+{
+ if (inx >= 0 && inx < (int) TABLESIZE(restrictions))
+ return restrictions[inx].name;
+ return NULL;
+}
+
+/*
+ * Returns the value TRUE/FALSE of a given restriction, or -1 if it is not
+ * one that we recognize.
+ */
+PUBLIC int find_restriction ARGS2(
+ CONST char *, name,
+ int, len)
+{
+ unsigned i;
+ if (len < 0)
+ len = strlen(name);
+ for (i=0; i < TABLESIZE(restrictions); i++) {
+ if (RESTRICT_NM_EQU(name, restrictions[i].name, len)) {
+ return (*restrictions[i].flag);
+ }
+ }
+ return -1;
+}
+
+PUBLIC void parse_restrictions ARGS1(
+ CONST char *, s)
+{
+ CONST char *p;
+ CONST char *word;
+ unsigned i;
+ BOOLEAN found;
+
+ p = s;
+ while (*p) {
+ p = LYSkipCBlanks(p);
+ if (*p == '\0')
+ break;
+ word = p;
+ while (*p != ',' && *p != '\0')
+ p++;
+
+ found = FALSE;
+ if (RESTRICT_NM_EQU(word, "all", p-word)) {
+ found = TRUE;
+ for (i = N_SPECIAL_RESTRICT_OPTIONS; i < TABLESIZE(restrictions); i++)
+ *(restrictions[i].flag) = TRUE;
+ } else if (RESTRICT_NM_EQU(word, "default", p-word)) {
+ found = TRUE;
+ for (i = N_SPECIAL_RESTRICT_OPTIONS; i < TABLESIZE(restrictions); i++)
+ *(restrictions[i].flag) = !restrictions[i].can;
+ } else {
+ for (i=0; i < TABLESIZE(restrictions); i++) {
+ if (RESTRICT_NM_EQU(word, restrictions[i].name, p-word)) {
+ *(restrictions[i].flag) = TRUE;
+ found = TRUE;
+ break;
+ }
+ }
+ }
+ if (!found) {
+ printf("%s: %.*s", gettext("unknown restriction"), p-word, word);
+ exit(EXIT_FAILURE);
+ }
+ if (*p)
+ p++;
+ }
+
+ /*
+ * If shell is restricted, set restrictions on related topics.
+ */
+ if (no_shell) {
+ no_goto_lynxexec = TRUE;
+ no_goto_lynxprog = TRUE;
+ no_goto_lynxcgi = TRUE;
+#ifdef EXEC_LINKS
+ local_exec_on_local_files = TRUE;
+#endif
+ }
+}
+
+PUBLIC void print_restrictions_to_fd ARGS1(
+ FILE *, fp)
+{
+ unsigned i, count = 0;
+
+ for (i=0; i < TABLESIZE(restrictions); i++) {
+ if (*(restrictions[i].flag) == TRUE) {
+ count++;
+ }
+ }
+ if (!count) {
+ fprintf(fp, gettext("No restrictions set.\n"));
+ return;
+ }
+ fprintf(fp, gettext("Restrictions set:\n"));
+ for (i=0; i < TABLESIZE(restrictions); i++) {
+ if (*(restrictions[i].flag) == TRUE) {
+ /* if "goto" is restricted, don't bother tell about its
+ * refinements
+ */
+ if (strncmp(restrictions[i].name, "goto_", 5)
+ || !no_goto)
+ fprintf(fp, " %s\n", restrictions[i].name);
+ }
+ }
}
#ifdef VMS
@@ -3811,8 +4424,8 @@ PUBLIC void LYEnsureAbsoluteURL ARGS3(
StrAllocCat(*href, "/*");
}
if (!is_url(*href)) {
- CTRACE(tfp, "%s%s'%s' is not a URL\n",
- (name ? name : ""), (name ? " " : ""), *href);
+ CTRACE((tfp, "%s%s'%s' is not a URL\n",
+ (name ? name : ""), (name ? " " : ""), *href));
LYConvertToURL(href, fixit);
}
if ((temp = HTParse(*href, "", PARSE_ALL)) != NULL && *temp != '\0')
@@ -3835,7 +4448,6 @@ PUBLIC void LYConvertToURL ARGS2(
char *cp = NULL;
#ifndef VMS
struct stat st;
- FILE *fptemp = NULL;
#endif /* !VMS */
if (!old_string || *old_string == '\0')
@@ -3853,7 +4465,7 @@ PUBLIC void LYConvertToURL ARGS2(
#endif /* DOSPATH */
*AllocatedString = NULL; /* so StrAllocCopy doesn't free it */
- StrAllocCopy(*AllocatedString,"file://localhost");
+ StrAllocCopy(*AllocatedString, "file://localhost");
if (*old_string != '/') {
char *fragment = NULL;
@@ -3875,7 +4487,7 @@ PUBLIC void LYConvertToURL ARGS2(
* Home_Dir(), and assume the rest of the path, if
* any, has SHELL syntax.
*/
- StrAllocCat(*AllocatedString, HTVMS_wwwName((char *)Home_Dir()));
+ StrAllocCat(*AllocatedString, HTVMS_wwwName(Home_Dir()));
if ((cp = strchr(old_string, '/')) != NULL) {
/*
* Append rest of path, if present, skipping "user" if
@@ -3891,7 +4503,7 @@ PUBLIC void LYConvertToURL ARGS2(
} else {
if ((fragment = strchr(old_string, '#')) != NULL)
*fragment = '\0';
- strcpy(url_file, old_string);
+ LYstrncpy(url_file, old_string, sizeof(url_file)-1);
}
url_file_dsc.dsc$w_length = (short) strlen(url_file);
if (1&lib$find_file(&url_file_dsc, &file_name_dsc, &context,
@@ -3940,7 +4552,7 @@ PUBLIC void LYConvertToURL ARGS2(
fragment = NULL;
if (strchr(old_string, '[') ||
((cp = strchr(old_string, ':')) != NULL &&
- !isdigit((unsigned char)cp[1])) ||
+ !isdigit(UCH(cp[1]))) ||
!LYExpandHostForURL((char **)&old_string,
URLDomainPrefixes,
URLDomainSuffixes)) {
@@ -3949,10 +4561,9 @@ PUBLIC void LYConvertToURL ARGS2(
* sure). Use original pathspec for the
* error message that will result.
*/
- strcpy(url_file, "/");
- strcat(url_file, old_string);
- CTRACE(tfp, "Can't find '%s' Will assume it's a bad path.\n",
- old_string);
+ sprintf(url_file, "/%.*s", sizeof(url_file)-2, old_string);
+ CTRACE((tfp, "Can't find '%s' Will assume it's a bad path.\n",
+ old_string));
StrAllocCat(*AllocatedString, url_file);
} else {
/*
@@ -3979,7 +4590,7 @@ PUBLIC void LYConvertToURL ARGS2(
}
if (strchr(old_string, '[') ||
((cp = strchr(old_string, ':')) != NULL &&
- !isdigit((unsigned char)cp[1])) ||
+ !isdigit(UCH(cp[1]))) ||
!LYExpandHostForURL((char **)&old_string,
URLDomainPrefixes,
URLDomainSuffixes)) {
@@ -3988,10 +4599,9 @@ PUBLIC void LYConvertToURL ARGS2(
* sure). Use original pathspec for the
* error message that will result.
*/
- strcpy(url_file, "/");
- strcat(url_file, old_string);
- CTRACE(tfp, "Can't find '%s' Will assume it's a bad path.\n",
- old_string);
+ sprintf(url_file, "/%.*s", sizeof(url_file)-2, old_string);
+ CTRACE((tfp, "Can't find '%s' Will assume it's a bad path.\n",
+ old_string));
StrAllocCat(*AllocatedString, url_file);
} else {
/*
@@ -4009,9 +4619,28 @@ PUBLIC void LYConvertToURL ARGS2(
lib$find_file_end(&context);
FREE(cur_dir);
have_VMS_URL:
- CTRACE(tfp, "Trying: '%s'\n", *AllocatedString);
-#else /* Unix: */
-#ifdef DOSPATH
+ CTRACE((tfp, "Trying: '%s'\n", *AllocatedString));
+#else /* not VMS: */
+#if defined(DOSPATH)
+#ifdef _WINDOWS
+ if (*old_string == '.') {
+ char fullpath[MAX_PATH + 1];
+ char *filepart = NULL;
+ DWORD chk;
+
+ chk = GetFullPathNameA(old_string, MAX_PATH + 1,
+ fullpath, &filepart);
+ if (chk != 0) {
+ StrAllocCopy(temp, wwwName(fullpath));
+ StrAllocCat(*AllocatedString, temp);
+ FREE(temp);
+ CTRACE((tfp, "Converted '%s' to '%s'\n",
+ old_string, *AllocatedString));
+ } else {
+ StrAllocCat(*AllocatedString, old_string);
+ }
+ }
+#else
if (strlen(old_string) == 1 && *old_string == '.') {
/*
* They want .
@@ -4020,15 +4649,17 @@ have_VMS_URL:
StrAllocCopy(temp, wwwName(Current_Dir(curdir)));
StrAllocCat(*AllocatedString, temp);
FREE(temp);
- CTRACE(tfp, "Converted '%s' to '%s'\n",
- old_string, *AllocatedString);
- } else
+ CTRACE((tfp, "Converted '%s' to '%s'\n",
+ old_string, *AllocatedString));
+ }
+#endif
+ else
#endif /* DOSPATH */
if (*old_string == '~') {
/*
* On Unix, convert '~' to Home_Dir().
*/
- StrAllocCat(*AllocatedString, Home_Dir());
+ StrAllocCat(*AllocatedString, wwwName(Home_Dir()));
if ((cp = strchr(old_string, '/')) != NULL) {
/*
* Append rest of path, if present, skipping "user" if
@@ -4040,8 +4671,8 @@ have_VMS_URL:
StrAllocCat(*AllocatedString, temp);
FREE(temp);
}
- CTRACE(tfp, "Converted '%s' to '%s'\n",
- old_string, *AllocatedString);
+ CTRACE((tfp, "Converted '%s' to '%s'\n",
+ old_string, *AllocatedString));
} else {
/*
* Create a full path to the current default directory.
@@ -4054,7 +4685,7 @@ have_VMS_URL:
* Concatenate and simplify, trimming any
* residual relative elements. - FM
*/
-#if defined (DOSPATH) || defined (__EMX__)
+#if defined (DOSPATH) || defined (__EMX__) || defined (WIN_EX)
if (old_string[1] != ':' && old_string[1] != '|') {
StrAllocCopy(temp, wwwName(curdir));
LYAddHtmlSep(&temp);
@@ -4062,7 +4693,13 @@ have_VMS_URL:
StrAllocCat(temp, old_string);
} else {
curdir[0] = '\0';
+ /* 1998/01/13 (Tue) 12:24:33 */
+ if (old_string[1] == '|')
+ old_string[1] = ':';
StrAllocCopy(temp, old_string);
+
+ if (strlen(temp) == 2 && temp[1] == ':')
+ StrAllocCat(temp, "/");
}
#else
StrAllocCopy(temp, curdir);
@@ -4070,9 +4707,9 @@ have_VMS_URL:
StrAllocCat(temp, old_string);
#endif /* DOSPATH */
LYTrimRelFromAbsPath(temp);
- CTRACE(tfp, "Converted '%s' to '%s'\n", old_string, temp);
+ CTRACE((tfp, "Converted '%s' to '%s'\n", old_string, temp));
if ((stat(temp, &st) > -1) ||
- (fptemp = fopen(temp, "r")) != NULL) {
+ LYCanReadFile(temp)) {
/*
* It is a subdirectory or file on the local system.
*/
@@ -4081,16 +4718,17 @@ have_VMS_URL:
/* especially when we really have file://localhost/ */
/* at the beginning. To avoid any confusion we allow */
/* escaping the path if URL specials % or # present. */
- if (strchr(temp, '#') == NULL &&
- strchr(temp, '%') == NULL)
- StrAllocCopy(cp, temp);
+ if (strchr(temp, '#') == NULL && strchr(temp, '%') == NULL)
+ StrAllocCopy(cp, temp);
else
-#endif /* DOSPATH */
+ cp = HTEscape(temp, URL_PATH);
+#else
cp = HTEscape(temp, URL_PATH);
+#endif /* DOSPATH */
StrAllocCat(*AllocatedString, cp);
FREE(cp);
- CTRACE(tfp, "Converted '%s' to '%s'\n",
- old_string, *AllocatedString);
+ CTRACE((tfp, "Converted '%s' to '%s'\n",
+ old_string, *AllocatedString));
is_local = TRUE;
} else {
char *cp2 = NULL;
@@ -4103,10 +4741,13 @@ have_VMS_URL:
StrAllocCat(temp2, cp); /* append to current dir */
StrAllocCopy(cp2, temp2); /* keep a copy in cp2 */
LYTrimRelFromAbsPath(temp2);
+#ifdef WIN_EX /* 1998/07/31 (Fri) 09:09:03 */
+ HTUnEscape(temp2); /* for LFN */
+#endif
if (strcmp(temp2, temp) != 0 &&
((stat(temp2, &st) > -1) ||
- (fptemp = fopen(temp2, "r")) != NULL)) {
+ LYCanReadFile(temp2))) {
/*
* It is a subdirectory or file on the local system
* with escaped characters and/or a fragment to be
@@ -4130,8 +4771,8 @@ have_VMS_URL:
}
}
StrAllocCat(*AllocatedString, temp);
- CTRACE(tfp, "Converted '%s' to '%s'\n",
- old_string, *AllocatedString);
+ CTRACE((tfp, "Converted '%s' to '%s'\n",
+ old_string, *AllocatedString));
is_local = TRUE;
} else if (strchr(curdir, '#') != NULL ||
@@ -4169,11 +4810,30 @@ have_VMS_URL:
* local system, so assume it's a URL request and guess
* the scheme with "http://" as the default.
*/
- CTRACE(tfp, "Can't stat() or fopen() '%s'\n",
- temp2 ? temp2 : temp);
+ CTRACE((tfp, "Can't stat() or fopen() '%s'\n",
+ temp2 ? temp2 : temp));
+#ifdef WIN_EX /* 1998/01/13 (Tue) 09:07:37 */
+ {
+ char *p, *q, buff[LY_MAXPATH + 128];
+
+ p = (char *)Home_Dir();
+ q = temp2 ? temp2 : temp;
+
+ if (strlen(q) == 3 && isalpha(UCH(q[0])) && q[1] == ':') {
+ sprintf(buff,
+ "'%s' not exist, Goto LynxHome '%s'.", q, p);
+ _statusline(buff);
+ LYSleepAlert();
+ FREE(temp);
+ StrAllocCat(*AllocatedString, p);
+ goto Retry;
+ }
+ }
+#endif
if (LYExpandHostForURL((char **)&old_string,
URLDomainPrefixes,
- URLDomainSuffixes)) {
+ URLDomainSuffixes))
+ {
if (!LYAddSchemeForURL((char **)&old_string, "http://")) {
StrAllocCopy(*AllocatedString, "http://");
StrAllocCat(*AllocatedString, old_string);
@@ -4183,15 +4843,17 @@ have_VMS_URL:
} else if (fixit) {
/* RW 1998Mar16 Restore AllocatedString to 'old_string' */
StrAllocCopy(*AllocatedString, old_string);
+ } else {
+ /* Return file URL for the file that does not exist */
+ StrAllocCat(*AllocatedString, temp);
}
- CTRACE(tfp, "Trying: '%s'\n", *AllocatedString);
+#ifdef WIN_EX
+ Retry:
+#endif
+ CTRACE((tfp, "Trying: '%s'\n", *AllocatedString));
}
FREE(temp);
FREE(temp2);
- if (fptemp) {
- fclose(fptemp);
- fptemp = NULL;
- }
}
#endif /* VMS */
} else {
@@ -4205,39 +4867,31 @@ have_VMS_URL:
* login directory. - FM
*/
#ifdef VMS
- StrAllocCat(*AllocatedString, HTVMS_wwwName((char *)Home_Dir()));
+ StrAllocCat(*AllocatedString, HTVMS_wwwName(Home_Dir()));
#else
StrAllocCat(*AllocatedString, "/");
} else if ((stat(old_string, &st) > -1) ||
- (fptemp = fopen(old_string, "r")) != NULL) {
+ LYCanReadFile(old_string)) {
/*
* It is an absolute directory or file
* on the local system. - KW
*/
StrAllocCopy(temp, old_string);
LYTrimRelFromAbsPath(temp);
- CTRACE(tfp, "Converted '%s' to '%s'\n", old_string, temp);
+ CTRACE((tfp, "Converted '%s' to '%s'\n", old_string, temp));
cp = HTEscape(temp, URL_PATH);
StrAllocCat(*AllocatedString, cp);
FREE(cp);
FREE(temp);
- if (fptemp) {
- fclose(fptemp);
- fptemp = NULL;
- }
- CTRACE(tfp, "Converted '%s' to '%s'\n",
- old_string, *AllocatedString);
+ CTRACE((tfp, "Converted '%s' to '%s'\n",
+ old_string, *AllocatedString));
#endif /* VMS */
} else if (old_string[1] == '~') {
/*
* Has a Home_Dir() reference. Handle it
* as if there weren't a lead slash. - FM
*/
-#ifdef VMS
- StrAllocCat(*AllocatedString, HTVMS_wwwName((char *)Home_Dir()));
-#else
- StrAllocCat(*AllocatedString, Home_Dir());
-#endif /* VMS */
+ StrAllocCat(*AllocatedString, wwwName(Home_Dir()));
if ((cp = strchr((old_string + 1), '/')) != NULL) {
/*
* Append rest of path, if present, skipping "user" if
@@ -4259,14 +4913,47 @@ have_VMS_URL:
StrAllocCat(*AllocatedString, temp);
FREE(temp);
}
- CTRACE(tfp, "Converted '%s' to '%s'\n",
- old_string, *AllocatedString);
+ CTRACE((tfp, "Converted '%s' to '%s'\n",
+ old_string, *AllocatedString));
}
FREE(old_string);
/* Pause so we can read the messages before invoking curses */
CTRACE_SLEEP(AlertSecs);
}
+#if defined(_WINDOWS) /* 1998/06/23 (Tue) 16:45:20 */
+
+PUBLIC int win32_check_interrupt(void)
+{
+ int c;
+
+ if (kbhit()) {
+ c = wgetch(LYwin);
+ /** Keyboard 'Z' or 'z', or Control-G or Control-C **/
+ if (LYCharIsINTERRUPT(c) || c == 0x1b) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void sleep(unsigned sec)
+{
+ unsigned int i, j;
+ int c;
+
+ for (j = 0; j < sec; j++) {
+ for (i = 0; i < 10; i++) {
+ Sleep(100);
+ if (kbhit()) {
+ c = wgetch(LYwin);
+ return;
+ }
+ }
+ }
+}
+#endif
+
/*
* This function rewrites and reallocates a previously allocated
* string so that the first element is a confirmed Internet host,
@@ -4297,7 +4984,16 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
char *Path = NULL;
char *Fragment = NULL;
BOOLEAN GotHost = FALSE;
- BOOLEAN Startup = (helpfilepath == NULL);
+ BOOLEAN Startup = (BOOL) (helpfilepath == NULL);
+#ifdef INET6
+ struct addrinfo hints, *res;
+ int error;
+#endif /* INET6 */
+
+#ifdef _WINDOWS
+ int hoststat;
+ struct hostent *phost; /* Pointer to host - See netdb.h */
+#endif
/*
* If it's a NULL or zero-length string,
@@ -4347,7 +5043,7 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
* filling in the host field. - FM
*/
if ((StrColon = strrchr(Str, ':')) != NULL &&
- isdigit((unsigned char)StrColon[1])) {
+ isdigit(UCH(StrColon[1]))) {
if (StrColon == Str) {
FREE(Str);
return GotHost;
@@ -4367,20 +5063,27 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
StrAllocCat(MsgStr, FIRST_SEGMENT);
HTProgress(MsgStr);
} else if (Startup && !dump_output_immediately) {
- fprintf(stdout, "%s '%s'%s\n", WWW_FIND_MESSAGE, host, FIRST_SEGMENT);
+ fprintf(stdout, "%s '%s'%s\r\n", WWW_FIND_MESSAGE, host, FIRST_SEGMENT);
}
-#ifndef DJGPP
- if (LYGetHostByName(host) != NULL)
+
+#ifdef INET6
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = PF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ error = getaddrinfo(host, "80", &hints, &res);
+
+ if (!error && res)
#else
- if (resolve(host) != 0)
-#endif /* DJGPP */
+ if (LYGetHostByName(host) != NULL)
+#endif /* INET6 */
{
/*
* Clear any residual interrupt. - FM
*/
if (LYCursesON && HTCheckForInterrupt()) {
- CTRACE(tfp, "LYExpandHostForURL: Ignoring interrupt because '%s' resolved.\n",
- host);
+ CTRACE((tfp,
+ "LYExpandHostForURL: Ignoring interrupt because '%s' resolved.\n",
+ host));
}
/*
@@ -4391,16 +5094,21 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
FREE(Str);
FREE(MsgStr);
return GotHost;
-#ifndef DJGPP
- } else if (LYCursesON && (lynx_nsl_status == HT_INTERRUPTED)) {
-#else /* DJGPP */
- } else if (LYCursesON && HTCheckForInterrupt()) {
-#endif /* DJGPP */
+ }
+ else if (LYCursesON &&
+#if defined(__DJGPP__) && !defined(WATT32)
+ HTCheckForInterrupt()
+#else /* normal systems */
+ (lynx_nsl_status == HT_INTERRUPTED)
+#endif
+ )
+ {
/*
* Give the user chance to interrupt lookup cycles. - KW & FM
*/
- CTRACE(tfp, "LYExpandHostForURL: Interrupted while '%s' failed to resolve.\n",
- host);
+ CTRACE((tfp,
+ "LYExpandHostForURL: Interrupted while '%s' failed to resolve.\n",
+ host));
/*
* Return failure. - FM
@@ -4477,7 +5185,7 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
}
StrAllocCat(Host, DomainSuffix);
if ((HostColon = strrchr(Host, ':')) != NULL &&
- isdigit((unsigned char)HostColon[1])) {
+ isdigit(UCH(HostColon[1]))) {
*HostColon = '\0';
}
StrAllocCopy(host, Host);
@@ -4490,11 +5198,7 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
} else if (Startup && !dump_output_immediately) {
fprintf(stdout, "%s '%s'%s\n", WWW_FIND_MESSAGE, host, GUESSING_SEGMENT);
}
-#ifndef DJGPP
- GotHost = (LYGetHostByName(host) != NULL);
-#else
- GotHost = (resolve(host) != 0);
-#endif /* DJGPP */
+ GotHost = (BOOL) (LYGetHostByName(host) != NULL);
if (HostColon != NULL) {
*HostColon = ':';
}
@@ -4502,14 +5206,15 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
/*
* Give the user chance to interrupt lookup cycles. - KW
*/
-#ifndef DJGPP
- if (LYCursesON && (lynx_nsl_status == HT_INTERRUPTED))
-#else /* DJGPP */
+#if defined(__DJGPP__) && !defined(WATT32)
if (LYCursesON && HTCheckForInterrupt())
-#endif /* DJGPP */
+#else /* normal systems */
+ if (LYCursesON && (lynx_nsl_status == HT_INTERRUPTED))
+#endif
{
- CTRACE(tfp, "LYExpandHostForURL: Interrupted while '%s' failed to resolve.\n",
- host);
+ CTRACE((tfp,
+ "LYExpandHostForURL: Interrupted while '%s' failed to resolve.\n",
+ host));
FREE(Str);
FREE(MsgStr);
FREE(Host);
@@ -4574,9 +5279,9 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
* Clear any residual interrupt. - FM
*/
if (LYCursesON && HTCheckForInterrupt()) {
- CTRACE(tfp, "LYExpandHostForURL: Ignoring interrupt because '%s' %s.\n",
+ CTRACE((tfp, "LYExpandHostForURL: Ignoring interrupt because '%s' %s.\n",
host,
- (GotHost ? "resolved" : "timed out"));
+ (GotHost ? "resolved" : "timed out")));
}
/*
@@ -4719,7 +5424,7 @@ PUBLIC void LYTrimRelFromAbsPath ARGS1(
/*
* Check whether the path has a terminal slash. - FM
*/
- TerminalSlash = LYIsPathSep(path[(strlen(path) - 1)]);
+ TerminalSlash = (BOOL) (LYIsPathSep(path[(strlen(path) - 1)]));
/*
* Simplify the path and then do any necessary trimming. - FM
@@ -4860,32 +5565,21 @@ PUBLIC CONST char * Home_Dir NOARGS
char *cp = NULL;
if (homedir == NULL) {
- if ((cp = getenv("HOME")) == NULL || *cp == '\0'
-#ifdef UNIX
- || *cp != '/'
-#endif /* UNIX */
- ) {
+ if ((cp = getenv_text("HOME")) == NULL
+ || !LYisAbsPath(cp)) {
#if defined (DOSPATH) || defined (__EMX__) /* BAD! WSB */
- if ((cp = getenv("TEMP")) == NULL || *cp == '\0') {
- if ((cp = getenv("TMP")) == NULL || *cp == '\0') {
- StrAllocCopy(HomeDir, "C:\\");
- } else {
- StrAllocCopy(HomeDir, cp);
- }
- } else {
- StrAllocCopy(HomeDir, cp);
+ if ((cp = getenv_text("TEMP")) == NULL
+ && (cp = getenv_text("TMP")) == NULL) {
+ cp = "C:\\";
}
+ StrAllocCopy(HomeDir, cp);
#else
#ifdef VMS
- if ((cp = getenv("SYS$LOGIN")) == NULL || *cp == '\0') {
- if ((cp = getenv("SYS$SCRATCH")) == NULL || *cp == '\0') {
- StrAllocCopy(HomeDir, "sys$scratch:");
- } else {
- StrAllocCopy(HomeDir, cp);
- }
- } else {
- StrAllocCopy(HomeDir, cp);
+ if ((cp = getenv_text("SYS$LOGIN")) == NULL
+ && (cp = getenv_text("SYS$SCRATCH")) == NULL) {
+ cp = "sys$scratch:";
}
+ StrAllocCopy(HomeDir, cp);
#else
#if HAVE_UTMP
/*
@@ -4910,6 +5604,14 @@ PUBLIC CONST char * Home_Dir NOARGS
#endif /* VMS */
#endif /* DOSPATH */
} else {
+#if defined(_WINDOWS) || defined(DOSPATH)
+ char *hp = getenv_text("HOMEDRIVE");
+ if (hp != 0
+ && (LYIsPathSep(*cp) || !LYisAbsPath(cp))) {
+ StrAllocCopy(HomeDir, hp);
+ StrAllocCat(HomeDir, cp);
+ } else
+#endif
StrAllocCopy(HomeDir, cp);
}
homedir = (CONST char *)HomeDir;
@@ -5167,15 +5869,18 @@ PUBLIC void LYAddPathToHome ARGS3(
* Set up home string and length. - FM
*/
StrAllocCopy(home, Home_Dir());
+
+#ifdef VMS
+#define NO_HOMEPATH "Error:"
+#else
+#define NO_HOMEPATH "/error"
+#endif /* VMS */
if (!(home && *home))
/*
* Home_Dir() has a bug if this ever happens. - FM
*/
-#ifdef VMS
- StrAllocCopy(home, "Error:");
-#else
- StrAllocCopy(home, "/error");
-#endif /* VMS */
+ StrAllocCopy(home, NO_HOMEPATH);
+
len = fbuffer_size - (strlen(home) + 1);
if (len <= 0) {
/*
@@ -5202,11 +5907,8 @@ PUBLIC void LYAddPathToHome ARGS3(
* SHELL syntax and append subdirectory path,
* then convert that to VMS syntax. - FM
*/
- char *temp = (char *)calloc(1,
- (strlen(home) + strlen(file) + 10));
- if (temp == NULL)
- outofmem(__FILE__, "LYAddPathToHome");
- sprintf(temp, "%s%s", HTVMS_wwwName(home), (file + 1));
+ char *temp = NULL;
+ HTSprintf0(&temp, "%s%s", HTVMS_wwwName(home), (file + 1));
sprintf(fbuffer, "%.*s",
(fbuffer_size - 1), HTVMS_name("", temp));
FREE(temp);
@@ -5264,13 +5966,13 @@ PUBLIC time_t LYmktime ARGS2(
if (!(string && *string))
return(0);
s = string;
- CTRACE(tfp, "LYmktime: Parsing '%s'\n", s);
+ CTRACE((tfp, "LYmktime: Parsing '%s'\n", s));
/*
* Skip any lead alphabetic "Day, " field and
* seek a numeric day field. - FM
*/
- while (*s != '\0' && !isdigit((unsigned char)*s))
+ while (*s != '\0' && !isdigit(UCH(*s)))
s++;
if (*s == '\0')
return(0);
@@ -5279,8 +5981,8 @@ PUBLIC time_t LYmktime ARGS2(
* Get the numeric day and convert to an integer. - FM
*/
start = s;
- while (*s != '\0' && isdigit((unsigned char)*s))
- s++;
+ while (*s != '\0' && isdigit(UCH(*s)))
+ s++;
if (*s == '\0' || (s - start) > 2)
return(0);
LYstrncpy(temp, start, (int)(s - start));
@@ -5291,18 +5993,18 @@ PUBLIC time_t LYmktime ARGS2(
/*
* Get the month string and convert to an integer. - FM
*/
- while (*s != '\0' && !isalnum((unsigned char)*s))
+ while (*s != '\0' && !isalnum(UCH(*s)))
s++;
if (*s == '\0')
return(0);
start = s;
- while (*s != '\0' && isalnum((unsigned char)*s))
+ while (*s != '\0' && isalnum(UCH(*s)))
s++;
if ((*s == '\0') ||
- (s - start) < (isdigit((unsigned char)*(s - 1)) ? 2 : 3) ||
- (s - start) > (isdigit((unsigned char)*(s - 1)) ? 2 : 9))
+ (s - start) < (isdigit(UCH(*(s - 1))) ? 2 : 3) ||
+ (s - start) > (isdigit(UCH(*(s - 1))) ? 2 : 9))
return(0);
- LYstrncpy(temp, start, (isdigit((unsigned char)*(s - 1)) ? 2 : 3));
+ LYstrncpy(temp, start, (isdigit(UCH(*(s - 1))) ? 2 : 3));
switch (TOUPPER(temp[0])) {
case '0':
case '1':
@@ -5382,12 +6084,12 @@ PUBLIC time_t LYmktime ARGS2(
/*
* Get the numeric year string and convert to an integer. - FM
*/
- while (*s != '\0' && !isdigit((unsigned char)*s))
+ while (*s != '\0' && !isdigit(UCH(*s)))
s++;
if (*s == '\0')
return(0);
start = s;
- while (*s != '\0' && isdigit((unsigned char)*s))
+ while (*s != '\0' && isdigit(UCH(*s)))
s++;
if ((s - start) == 4) {
LYstrncpy(temp, start, 4);
@@ -5416,7 +6118,7 @@ PUBLIC time_t LYmktime ARGS2(
/*
* Get the numeric hour string and convert to an integer. - FM
*/
- while (*s != '\0' && !isdigit((unsigned char)*s))
+ while (*s != '\0' && !isdigit(UCH(*s)))
s++;
if (*s == '\0') {
hour = 0;
@@ -5424,7 +6126,7 @@ PUBLIC time_t LYmktime ARGS2(
seconds = 0;
} else {
start = s;
- while (*s != '\0' && isdigit((unsigned char)*s))
+ while (*s != '\0' && isdigit(UCH(*s)))
s++;
if (*s != ':' || (s - start) > 2)
return(0);
@@ -5434,12 +6136,12 @@ PUBLIC time_t LYmktime ARGS2(
/*
* Get the numeric minutes string and convert to an integer. - FM
*/
- while (*s != '\0' && !isdigit((unsigned char)*s))
+ while (*s != '\0' && !isdigit(UCH(*s)))
s++;
if (*s == '\0')
return(0);
start = s;
- while (*s != '\0' && isdigit((unsigned char)*s))
+ while (*s != '\0' && isdigit(UCH(*s)))
s++;
if (*s != ':' || (s - start) > 2)
return(0);
@@ -5449,12 +6151,12 @@ PUBLIC time_t LYmktime ARGS2(
/*
* Get the numeric seconds string and convert to an integer. - FM
*/
- while (*s != '\0' && !isdigit((unsigned char)*s))
+ while (*s != '\0' && !isdigit(UCH(*s)))
s++;
if (*s == '\0')
return(0);
start = s;
- while (*s != '\0' && isdigit((unsigned char)*s))
+ while (*s != '\0' && isdigit(UCH(*s)))
s++;
if (*s == '\0' || (s - start) > 2)
return(0);
@@ -5478,17 +6180,17 @@ PUBLIC time_t LYmktime ARGS2(
(hour * 60 * 60) +
(minutes * 60) +
seconds);
- if (absolute == FALSE && clock2 <= time(NULL))
+ if (absolute == FALSE && (long)(time((time_t *)0) - clock2) >= 0)
clock2 = (time_t)0;
if (clock2 > 0)
- CTRACE(tfp, "LYmktime: clock=%ld, ctime=%s",
+ CTRACE((tfp, "LYmktime: clock=%ld, ctime=%s",
(long) clock2,
- ctime(&clock2));
+ ctime(&clock2)));
return(clock2);
}
-#if ! HAVE_PUTENV
+#if !defined(HAVE_PUTENV) && !defined(_WINDOWS)
/*
* No putenv on the next so we use this code instead!
*/
@@ -5585,7 +6287,7 @@ int remove ARGS1(char *, name)
}
#endif
-#ifdef UNIX
+#if defined(UNIX)
/*
* Verify if this is really a file, not accessed by a link, except for the
* special case of its directory being pointed to by a link from a directory
@@ -5600,7 +6302,11 @@ PRIVATE BOOL IsOurFile ARGS1(char *, name)
&& data.st_nlink == 1
&& data.st_uid == getuid()) {
int linked = FALSE;
-#if HAVE_LSTAT
+ /*
+ * ( If this is not a single-user system, the other user is presumed by
+ * some people busy trying to use a symlink attack on our files ;-)
+ */
+#if defined(HAVE_LSTAT) && !(defined(DOSPATH) || defined(__EMX__))
char *path = 0;
char *leaf;
@@ -5630,7 +6336,7 @@ PRIVATE BOOL IsOurFile ARGS1(char *, name)
* portable.
*/
if (data.st_uid != 0
- || data.st_mode & S_IWOTH) {
+ || (data.st_mode & S_IWOTH) != 0) {
linked = TRUE; /* force an error-return */
break;
}
@@ -5653,6 +6359,7 @@ PRIVATE FILE *OpenHiddenFile ARGS2(char *, name, char *, mode)
{
FILE *fp = 0;
struct stat data;
+ BOOLEAN binary = strchr(mode, 'b') != 0;
#if defined(O_CREAT) && defined(O_EXCL) /* we have fcntl.h or kindred? */
/*
@@ -5669,6 +6376,10 @@ PRIVATE FILE *OpenHiddenFile ARGS2(char *, name, char *, mode)
fd = open(name, O_CREAT|O_EXCL|O_WRONLY, HIDE_CHMOD);
}
if (fd >= 0) {
+#if defined(O_BINARY) && defined(__CYGWIN__)
+ if (binary)
+ setmode(fd, O_BINARY);
+#endif
fp = fdopen(fd, mode);
}
}
@@ -5679,7 +6390,7 @@ PRIVATE FILE *OpenHiddenFile ARGS2(char *, name, char *, mode)
&& chmod(name, HIDE_CHMOD) == 0)
fp = fopen(name, mode);
else if (lstat(name, &data) != 0)
- fp = OpenHiddenFile(name, "w");
+ fp = OpenHiddenFile(name, binary ? BIN_W : TXT_W);
/*
* This is less stringent, but reasonably portable. For new files, the
* umask will suffice; however if the file already exists we'll change
@@ -5697,7 +6408,7 @@ PRIVATE FILE *OpenHiddenFile ARGS2(char *, name, char *, mode)
}
return fp;
}
-#else
+#else /* !UNIX */
# ifndef VMS
# define OpenHiddenFile(name, mode) fopen(name, mode)
# endif
@@ -5706,10 +6417,10 @@ PRIVATE FILE *OpenHiddenFile ARGS2(char *, name, char *, mode)
PUBLIC FILE *LYNewBinFile ARGS1(char *, name)
{
#ifdef VMS
- FILE *fp = fopen (name, "wb", "mbc=32");
+ FILE *fp = fopen (name, BIN_W, "mbc=32");
chmod(name, HIDE_CHMOD);
#else
- FILE *fp = OpenHiddenFile(name, "wb");
+ FILE *fp = OpenHiddenFile(name, BIN_W);
#endif
return fp;
}
@@ -5719,12 +6430,12 @@ PUBLIC FILE *LYNewTxtFile ARGS1(char *, name)
FILE *fp;
#ifdef VMS
- fp = fopen (name, "w", "shr=get");
+ fp = fopen (name, TXT_W, "shr=get");
chmod(name, HIDE_CHMOD);
#else
SetDefaultMode(O_TEXT);
- fp = OpenHiddenFile(name, "w");
+ fp = OpenHiddenFile(name, TXT_W);
SetDefaultMode(O_BINARY);
#endif
@@ -5737,12 +6448,12 @@ PUBLIC FILE *LYAppendToTxtFile ARGS1(char *, name)
FILE *fp;
#ifdef VMS
- fp = fopen (name, "a+", "shr=get");
+ fp = fopen (name, TXT_A, "shr=get");
chmod(name, HIDE_CHMOD);
#else
SetDefaultMode(O_TEXT);
- fp = OpenHiddenFile(name, "a+");
+ fp = OpenHiddenFile(name, TXT_A);
SetDefaultMode(O_BINARY);
#endif
@@ -5782,13 +6493,10 @@ PUBLIC BOOLEAN LYCachedTemp ARGS2(
char *, result,
char **, cached)
{
- FILE *fp;
-
if (*cached) {
- strcpy(result, *cached);
+ LYstrncpy(result, *cached, LY_MAXPATH);
FREE(*cached);
- if ((fp = fopen(result, "r")) != NULL) {
- fclose(fp);
+ if (LYCanReadFile(result)) {
remove(result);
}
return TRUE;
@@ -5797,18 +6505,6 @@ PUBLIC BOOLEAN LYCachedTemp ARGS2(
}
/*
- * Maintain a list of all of the temp-files we create so that we can remove
- * them during the cleanup.
- */
-typedef struct _LYTemp {
- struct _LYTemp *next;
- char *name;
- FILE *file;
-} LY_TEMP;
-
-static LY_TEMP *ly_temp;
-
-/*
* Open a temp-file, ensuring that it is unique, and not readable by other
* users.
*
@@ -5821,10 +6517,10 @@ PUBLIC FILE *LYOpenTemp ARGS3(
{
FILE *fp = 0;
BOOL txt = TRUE;
- BOOL wrt = 'r';
+ char wrt = 'r';
LY_TEMP *p;
- CTRACE(tfp, "LYOpenTemp(,%s,%s)\n", suffix, mode);
+ CTRACE((tfp, "LYOpenTemp(,%s,%s)\n", suffix, mode));
if (result == 0)
return 0;
@@ -5834,10 +6530,52 @@ PUBLIC FILE *LYOpenTemp ARGS3(
case 'a': wrt = 'a'; break;
case 'b': txt = FALSE; break;
default:
- CTRACE(tfp, "%s @%d: BUG\n", __FILE__, __LINE__);
- return fp;
+ CTRACE((tfp, "%s @%d: BUG\n", __FILE__, __LINE__));
+ return 0;
+ }
+ }
+
+ /*
+ * Verify if the given space looks secure enough. Otherwise, make a
+ * secure subdirectory of that.
+ */
+#if 0
+#if defined(UNIX) && defined(HAVE_MKTEMP)
+ if (lynx_temp_subspace == 0)
+ {
+ BOOL make_it = FALSE;
+ struct stat sb;
+
+ if (lstat(lynx_temp_space, &sb) == 0
+ && S_ISDIR(sb.st_mode)) {
+ if (sb.st_uid != getuid()
+ || (sb.st_mode & (S_IWOTH | S_IWGRP)) != 0) {
+ make_it = TRUE;
+ CTRACE((tfp, "lynx_temp_space is not our directory %s owner %d mode %03o\n",
+ lynx_temp_space, (int) sb.st_uid, (int) sb.st_mode & 0777));
+ }
+ } else {
+ make_it = TRUE;
+ CTRACE((tfp, "lynx_temp_space is not a directory %s\n", lynx_temp_space));
+ }
+ if (make_it) {
+ int old_mask = umask(HIDE_UMASK);
+ StrAllocCat(lynx_temp_space, "XXXXXX");
+ if (mktemp(lynx_temp_space) == 0
+ || mkdir(lynx_temp_space, 0700) < 0) {
+ printf("%s: %s\n", lynx_temp_space, LYStrerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ umask(old_mask);
+ lynx_temp_subspace = 1;
+ StrAllocCat(lynx_temp_space, "/");
+ CTRACE((tfp, "made subdirectory %s\n", lynx_temp_space));
+ } else {
+ lynx_temp_subspace = -1;
}
}
+#endif
+#endif
do {
if (!fmt_tempname(result, lynx_temp_space, suffix))
@@ -5861,23 +6599,24 @@ PUBLIC FILE *LYOpenTemp ARGS3(
*/
#ifdef EEXIST /* FIXME (need a better test) in fcntl.h or unistd.h */
if ((fp == 0) && (errno != EEXIST)) {
- CTRACE(tfp, "... LYOpenTemp(%s) failed: %s\n",
- result, LYStrerror(errno));
+ CTRACE((tfp, "... LYOpenTemp(%s) failed: %s\n",
+ result, LYStrerror(errno)));
return 0;
}
#endif
} while (fp == 0);
- if ((p = (LY_TEMP *)calloc(1, sizeof(LY_TEMP))) != 0) {
+ if ((p = typecalloc(LY_TEMP)) != 0) {
p->next = ly_temp;
StrAllocCopy((p->name), result);
p->file = fp;
+ p->outs = (wrt != 'r');
ly_temp = p;
} else {
outofmem(__FILE__, "LYOpenTemp");
}
- CTRACE(tfp, "... LYOpenTemp(%s)\n", result);
+ CTRACE((tfp, "... LYOpenTemp(%s)\n", result));
return fp;
}
@@ -5891,12 +6630,172 @@ PUBLIC FILE *LYReopenTemp ARGS1(
FILE *fp = 0;
LYCloseTemp(name);
- for (p = ly_temp; p != 0; p = p->next) {
- if (!strcmp(p->name, name)) {
- fp = p->file = LYAppendToTxtFile (name);
+ if ((p = FindTempfileByName(name)) != 0) {
+ fp = p->file = LYAppendToTxtFile (name);
+ }
+ return fp;
+}
+
+/*
+ * Open a temp-file for writing, possibly re-using a previously used
+ * name and file.
+ * If a non-empty fname is given, it is reused if it indicates a file
+ * previously registered as a temp file and, in case the file still
+ * exists, if it looks like we can write to it safely. Otherwise a
+ * new temp file (with new name) will be generated and returned in fname.
+ *
+ * File permissions are set so that the file is not readable by unprivileged
+ * other users.
+ *
+ * Suffix is only used if fname is not being reused.
+ * The mode should be "w", others are possible (they may be passed on)
+ * but probably don't make sense. - kw
+ */
+PUBLIC FILE *LYOpenTempRewrite ARGS3(
+ char *, fname,
+ CONST char *, suffix,
+ CONST char *, mode)
+{
+ FILE *fp = 0;
+ BOOL txt = TRUE;
+ char wrt = 'r';
+ BOOL registered = NO;
+ BOOL writable_exists = NO;
+ BOOL is_ours = NO;
+ BOOL still_open = NO;
+ LY_TEMP *p;
+ struct stat stat_buf;
+
+ CTRACE((tfp, "LYOpenTempRewrite(%s,%s,%s)\n", fname, suffix, mode));
+ if (*fname == '\0') /* first time, no filename yet */
+ return (LYOpenTemp(fname, suffix, mode));
+
+ if ((p = FindTempfileByName(fname)) != 0) {
+ registered = YES;
+ if (p->file != 0)
+ still_open = YES;
+ CTRACE((tfp, "...used before%s\n", still_open ? ", still open!" : "."));
+ }
+
+ if (registered) {
+#ifndef NO_GROUPS
+ writable_exists = HTEditable(fname); /* existing, can write */
+#define CTRACE_EXISTS "exists and is writable, "
+#else
+ writable_exists = (BOOL) (stat(fname, &stat_buf) == 0); /* existing, assume can write */
+#define CTRACE_EXISTS "exists, "
+#endif
+
+ if (writable_exists) {
+#ifdef UNIX
+ is_ours = IsOurFile(fname);
+#else
+ is_ours = TRUE; /* assume ok, if we get to here */
+#endif
+ }
+ CTRACE((tfp, "...%s%s\n",
+ writable_exists ? CTRACE_EXISTS : "",
+ is_ours ? "is our file." : "is NOT our file."));
+ }
+
+ /*
+ * Note that in cases where LYOpenTemp is called as fallback below,
+ * we don't call LYRemoveTemp first. That may be appropriate in some
+ * cases, but not trying to remove a weird existing file seems safer
+ * and could help diagnose an unusual situation. (They may be removed
+ * anyway later.)
+ */
+ if (still_open) {
+ /*
+ * This should probably not happen. Make a new one.
+ */
+ return (LYOpenTemp(fname, suffix, mode));
+ } else if (!registered) {
+ /*
+ * Not registered. It should have been registered at one point
+ * though, otherwise we wouldn't be called like this.
+ */
+ return (LYOpenTemp(fname, suffix, mode));
+ } else if (writable_exists && !is_ours) {
+ /*
+ * File exists, writable if we checked, but something is wrong
+ * with it.
+ */
+ return (LYOpenTemp(fname, suffix, mode));
+#ifndef NO_GROUPS
+ } else if (!is_ours && (lstat(fname, &stat_buf) == 0)) {
+ /*
+ * Exists but not writable, and something is wrong with it.
+ */
+ return (LYOpenTemp(fname, suffix, mode));
+#endif
+ }
+
+ while (*mode != '\0') {
+ switch (*mode++) {
+ case 'w': wrt = 'w'; break;
+ case 'a': wrt = 'a'; break;
+ case 'b': txt = FALSE; break;
+ default:
+ CTRACE((tfp, "%s @%d: BUG\n", __FILE__, __LINE__));
+ return fp;
+ }
+ }
+
+ if (is_ours) {
+ /*
+ * Yes, it exists, is writable if we checked, and everything
+ * looks ok so far. This should be the most regular case. - kw
+ */
+#if HAVE_TRUNCATE
+ if (txt == TRUE) { /* limitation of LYReopenTemp. shrug */
+ /*
+ * We truncate and then append, this avoids having a small
+ * window in which the file doesn't exist. - kw
+ */
+ if (truncate(fname, 0) != 0) {
+ CTRACE((tfp, "... truncate(%s,0) failed: %s\n",
+ fname, LYStrerror(errno)));
+ return (LYOpenTemp(fname, suffix, mode));
+ } else {
+ return (LYReopenTemp(fname));
+ }
+ }
+#endif
+ remove(fname);
+
+ }
+
+ /* We come here in two cases: either the file existed and was
+ * ours and we just got rid of it.
+ * Or the file did and does not exist, but is registered as a
+ * temp file. It must have been removed by some means other than
+ * LYRemoveTemp.
+ * In both cases, reuse the name! - kw
+ */
+
+ if (txt) {
+ switch (wrt) {
+ case 'w':
+ fp = LYNewTxtFile (fname);
+ break;
+ case 'a':
+ fp = LYAppendToTxtFile (fname);
break;
}
+ } else {
+ fp = LYNewBinFile (fname);
}
+ p->file = fp;
+
+ CTRACE((tfp, "... LYOpenTempRewrite(%s), %s\n", fname,
+ (fp) ? "ok" : "failed"));
+ /*
+ * We could fall back to trying LYOpenTemp() here in case of failure.
+ * After all the checks already done above a filure here should be
+ * pretty unusual though, so maybe it's better to let the user notice
+ * that something went wrong, and not try to fix it up. - kw
+ */
return fp;
}
@@ -5915,7 +6814,7 @@ PUBLIC FILE *LYOpenScratch ARGS2(
return 0;
if ((fp = LYNewTxtFile (result)) != 0) {
- if ((p = (LY_TEMP *)calloc(1, sizeof(LY_TEMP))) != 0) {
+ if ((p = typecalloc(LY_TEMP)) != 0) {
p->next = ly_temp;
StrAllocCopy((p->name), result);
p->file = fp;
@@ -5924,10 +6823,23 @@ PUBLIC FILE *LYOpenScratch ARGS2(
outofmem(__FILE__, "LYOpenScratch");
}
}
- CTRACE(tfp, "LYOpenScratch(%s)\n", result);
+ CTRACE((tfp, "LYOpenScratch(%s)\n", result));
return fp;
}
+PRIVATE void LY_close_temp ARGS1(
+ LY_TEMP *, p)
+{
+ if (p->file != 0) {
+ if (p->outs) {
+ LYCloseOutput(p->file);
+ } else {
+ LYCloseInput(p->file);
+ }
+ p->file = 0;
+ }
+}
+
/*
* Close a temp-file, given its name
*/
@@ -5936,17 +6848,11 @@ PUBLIC void LYCloseTemp ARGS1(
{
LY_TEMP *p;
- CTRACE(tfp, "LYCloseTemp(%s)\n", name);
- for (p = ly_temp; p != 0; p = p->next) {
- if (!strcmp(name, p->name)) {
- CTRACE(tfp, "...LYCloseTemp(%s)%s\n", name,
- (p->file != 0) ? ", closed" : "");
- if (p->file != 0) {
- fclose(p->file);
- p->file = 0;
- }
- break;
- }
+ CTRACE((tfp, "LYCloseTemp(%s)\n", name));
+ if ((p = FindTempfileByName(name)) != 0) {
+ CTRACE((tfp, "...LYCloseTemp(%s)%s\n", name,
+ (p->file != 0) ? ", closed" : ""));
+ LY_close_temp(p);
}
}
@@ -5958,28 +6864,24 @@ PUBLIC void LYCloseTempFP ARGS1(
{
LY_TEMP *p;
- CTRACE(tfp, "LYCloseTempFP\n");
- for (p = ly_temp; p != 0; p = p->next) {
- if (p->file == fp) {
- fclose(p->file);
- p->file = 0;
- CTRACE(tfp, "...LYCloseTempFP(%s)\n", p->name);
- break;
- }
+ CTRACE((tfp, "LYCloseTempFP\n"));
+ if ((p = FindTempfileByFP(fp)) != 0) {
+ LY_close_temp(p);
+ CTRACE((tfp, "...LYCloseTempFP(%s)\n", p->name));
}
}
/*
* Close a temp-file, removing it.
*/
-PUBLIC void LYRemoveTemp ARGS1(
+PUBLIC int LYRemoveTemp ARGS1(
char *, name)
{
LY_TEMP *p, *q;
- int code;
+ int code = -1;
if (name != 0 && *name != 0) {
- CTRACE(tfp, "LYRemoveTemp(%s)\n", name);
+ CTRACE((tfp, "LYRemoveTemp(%s)\n", name));
for (p = ly_temp, q = 0; p != 0; q = p, p = p->next) {
if (!strcmp(name, p->name)) {
if (q != 0) {
@@ -5987,11 +6889,10 @@ PUBLIC void LYRemoveTemp ARGS1(
} else {
ly_temp = p->next;
}
- if (p->file != 0)
- fclose(p->file);
+ LY_close_temp(p);
code = HTSYS_remove(name);
- CTRACE(tfp, "...LYRemoveTemp done(%d)%s\n", code,
- (p->file != 0) ? ", closed" : "");
+ CTRACE((tfp, "...LYRemoveTemp done(%d)%s\n", code,
+ (p->file != 0) ? ", closed" : ""));
CTRACE_FLUSH(tfp);
FREE(p->name);
FREE(p);
@@ -5999,6 +6900,7 @@ PUBLIC void LYRemoveTemp ARGS1(
}
}
}
+ return code;
}
/*
@@ -6010,6 +6912,16 @@ PUBLIC void LYCleanupTemp NOARGS
while (ly_temp != 0) {
LYRemoveTemp(ly_temp->name);
}
+#ifdef UNIX
+ if (lynx_temp_subspace > 0) {
+ char result[LY_MAXPATH];
+ LYstrncpy(result, lynx_temp_space, sizeof(result)-1);
+ LYTrimPathSep(result);
+ CTRACE((tfp, "LYCleanupTemp removing %s\n", result));
+ rmdir(result);
+ lynx_temp_subspace = -1;
+ }
+#endif
}
/*
@@ -6021,13 +6933,184 @@ PUBLIC void LYRenamedTemp ARGS2(
{
LY_TEMP *p;
- CTRACE(tfp, "LYRenamedTemp(old=%s, new=%s)\n", oldname, newname);
- for (p = ly_temp; p != 0; p = p->next) {
- if (!strcmp(oldname, p->name)) {
- StrAllocCopy((p->name), newname);
- break;
+ CTRACE((tfp, "LYRenamedTemp(old=%s, new=%s)\n", oldname, newname));
+ if ((p = FindTempfileByName(oldname)) != 0) {
+ StrAllocCopy((p->name), newname);
+ }
+}
+
+#ifndef DISABLE_BIBP
+/*
+ * Check that bibhost defines the BibP icon.
+ */
+PUBLIC void LYCheckBibHost NOARGS
+{
+ DocAddress bibhostIcon;
+ BOOLEAN saveFlag;
+
+ bibhostIcon.address = NULL;
+ StrAllocCopy(bibhostIcon.address, BibP_bibhost);
+ StrAllocCat(bibhostIcon.address, "bibp1.0/bibpicon.jpg");
+ bibhostIcon.post_data = NULL;
+ bibhostIcon.post_content_type = NULL;
+ bibhostIcon.bookmark = FALSE;
+ bibhostIcon.isHEAD = FALSE;
+ bibhostIcon.safe = FALSE;
+ saveFlag = traversal;
+ traversal = TRUE; /* Hack to force error response. */
+ BibP_bibhost_available = HTLoadAbsolute(&bibhostIcon) == YES;
+ traversal = saveFlag;
+ BibP_bibhost_checked = TRUE;
+}
+#endif /* !DISABLE_BIBP */
+
+/*
+ * Management of User Interface Pages. - kw
+ *
+ * These are mostly temp files. Pages which can be recognized by their
+ * special URL (after having been loaded) need not be tracked here.
+ *
+ * First some private stuff:
+ */
+typedef struct uipage_entry {
+ UIP_t type;
+ unsigned flags;
+ char * url;
+ HTList * alturls;
+ char * file;
+} uip_entry;
+
+#define UIP_F_MULTI 0x0001 /* flag: track multiple instances */
+#define UIP_F_LIMIT 0x0002 /* flag: limit size of alturl list */
+#define UIP_F_LMULTI (UIP_F_MULTI | UIP_F_LIMIT)
+
+static uip_entry ly_uip[] =
+{
+ { UIP_HISTORY , UIP_F_LMULTI, NULL, NULL, NULL }
+ , { UIP_DOWNLOAD_OPTIONS , 0 , NULL, NULL, NULL }
+ , { UIP_PRINT_OPTIONS , 0 , NULL, NULL, NULL }
+ , { UIP_SHOWINFO , UIP_F_LMULTI, NULL, NULL, NULL }
+ , { UIP_LIST_PAGE , UIP_F_LMULTI, NULL, NULL, NULL }
+ , { UIP_VLINKS , UIP_F_LMULTI, NULL, NULL, NULL }
+#if !defined(NO_OPTION_FORMS)
+ , { UIP_OPTIONS_MENU , UIP_F_LMULTI, NULL, NULL, NULL }
+#endif
+#ifdef DIRED_SUPPORT
+ , { UIP_DIRED_MENU , 0 , NULL, NULL, NULL }
+ , { UIP_PERMIT_OPTIONS , 0 , NULL, NULL, NULL }
+ , { UIP_UPLOAD_OPTIONS , UIP_F_LMULTI, NULL, NULL, NULL }
+#endif
+#ifdef EXP_ADDRLIST_PAGE
+ , { UIP_ADDRLIST_PAGE , UIP_F_LMULTI, NULL, NULL, NULL }
+#endif
+ , { UIP_LYNXCFG , UIP_F_LMULTI, NULL, NULL, NULL }
+#if !defined(NO_CONFIG_INFO)
+ , { UIP_CONFIG_DEF , UIP_F_LMULTI, NULL, NULL, NULL }
+#endif
+/* The following are not generated tempfiles: */
+ , { UIP_TRACELOG , 0 , NULL, NULL, NULL }
+#if defined(DIRED_SUPPORT) && defined(OK_INSTALL)
+ , { UIP_INSTALL , 0 , NULL, NULL, NULL }
+#endif
+
+};
+
+/* Public entry points for User Interface Page management: */
+
+PUBLIC BOOL LYIsUIPage3 ARGS3(
+ CONST char *, url,
+ UIP_t, type,
+ int, flagparam)
+{
+ unsigned int i;
+ size_t l;
+ if (!url)
+ return NO;
+ for (i = 0; i < TABLESIZE(ly_uip); i++) {
+ if (ly_uip[i].type == type) {
+ if (!ly_uip[i].url) {
+ return NO;
+ } else if ((flagparam & UIP_P_FRAG) ?
+ (!strncmp(ly_uip[i].url, url, (l=strlen(ly_uip[i].url)))
+ && (url[l] == '\0' || url[l] == '#')) :
+ !strcmp(ly_uip[i].url, url)) {
+ return YES;
+ } else if (ly_uip[i].flags & UIP_F_MULTI) {
+ char *p;
+ HTList *l0 = ly_uip[i].alturls;
+
+ while ((p = HTList_nextObject(l0)) != NULL) {
+ if ((flagparam & UIP_P_FRAG) ?
+ (!strncmp(p, url, (l=strlen(p)))
+ && (url[l] == '\0' || url[l] == '#')) :
+ !strcmp(p, url))
+ return YES;
+ }
+ }
+ return NO;
}
}
+ return NO;
+}
+
+PUBLIC void LYRegisterUIPage ARGS2(
+ CONST char *, url,
+ UIP_t, type)
+{
+ unsigned int i;
+ for (i = 0; i < TABLESIZE(ly_uip); i++) {
+ if (ly_uip[i].type == type) {
+ if (ly_uip[i].url && url &&
+ !strcmp(ly_uip[i].url, url)) {
+
+ } else if (!ly_uip[i].url || !url ||
+ !(ly_uip[i].flags & UIP_F_MULTI)) {
+ StrAllocCopy(ly_uip[i].url, url);
+
+ } else {
+ char *p;
+ int n = 0;
+ HTList *l0 = ly_uip[i].alturls;
+
+ while ((p = HTList_nextObject(l0)) != NULL) {
+ if (!strcmp(p, url))
+ return;
+ if (!strcmp(p, ly_uip[i].url)) {
+ StrAllocCopy(ly_uip[i].url, url);
+ return;
+ }
+ n++;
+ }
+ if (!ly_uip[i].alturls)
+ ly_uip[i].alturls = HTList_new();
+
+ if (n >= HTCacheSize && (ly_uip[i].flags & UIP_F_LIMIT))
+ HTList_removeFirstObject(ly_uip[i].alturls);
+ HTList_addObject(ly_uip[i].alturls, ly_uip[i].url);
+ ly_uip[i].url = NULL;
+ StrAllocCopy(ly_uip[i].url, url);
+ }
+
+ return;
+ }
+ }
+}
+
+PUBLIC void LYUIPages_free NOARGS
+{
+ unsigned int i;
+ char *p;
+ HTList *l0;
+ for (i = 0; i < TABLESIZE(ly_uip); i++) {
+ FREE(ly_uip[i].url);
+ FREE(ly_uip[i].file);
+ l0 = ly_uip[i].alturls;
+ while ((p = HTList_nextObject(l0)) != NULL) {
+ FREE(p);
+ }
+ HTList_delete(ly_uip[i].alturls);
+ ly_uip[i].alturls = NULL;
+ }
}
/*
@@ -6040,10 +7123,10 @@ PUBLIC char * wwwName ARGS1(
char *cp = NULL;
#ifdef DOSPATH
- cp = HTDOS_wwwName((char *)pathname);
+ cp = HTDOS_wwwName(pathname);
#else
#ifdef VMS
- cp = HTVMS_wwwName((char *)pathname);
+ cp = HTVMS_wwwName(pathname);
#else
cp = (char *)pathname;
#endif /* VMS */
@@ -6056,12 +7139,14 @@ PUBLIC char * wwwName ARGS1(
* Given a user-specified filename, e.g., for download or print, validate and
* expand it. Expand home-directory expressions in the given string. Only
* allow pipes if the user can spawn shell commands.
+ *
+ * Both strings are fixed buffer sizes, LY_MAXPATH.
*/
PUBLIC BOOLEAN LYValidateFilename ARGS2(
char *, result,
char *, given)
{
- char *cp;
+ char *cp, *cp2;
/*
* Cancel if the user entered "/dev/null" on Unix,
@@ -6083,15 +7168,17 @@ PUBLIC BOOLEAN LYValidateFilename ARGS2(
HTUserMsg(SPAWNING_DISABLED);
return FALSE;
}
- strcpy(result, given);
+ LYstrncpy(result, given, LY_MAXPATH);
return TRUE;
}
#endif
- if ((cp = strchr(given, '~'))) {
+ if ((cp = strchr(given, '~')) != 0
+ && (cp2 = wwwName(Home_Dir())) != 0
+ && strlen(cp2) + strlen(given) < LY_MAXPATH) {
*(cp++) = '\0';
strcpy(result, given);
LYTrimPathSep(result);
- strcat(result, wwwName(Home_Dir()));
+ strcat(result, cp2);
strcat(result, cp);
strcpy(given, result);
}
@@ -6100,7 +7187,9 @@ PUBLIC BOOLEAN LYValidateFilename ARGS2(
strcpy(result, HTVMS_name("", given));
strcpy(given, result);
}
- if (given[0] != '/' && strchr(given, ':') == NULL) {
+ if (given[0] != '/'
+ && strchr(given, ':') == NULL
+ && strlen(given) < LY_MAXPATH - 13) {
strcpy(result, "sys$disk:");
if (strchr(given, ']') == NULL)
strcat(result, "[]");
@@ -6111,24 +7200,36 @@ PUBLIC BOOLEAN LYValidateFilename ARGS2(
#else
#ifndef __EMX__
- if (!LYIsPathSep(*given)) {
+ if (!LYisAbsPath(given)) {
#if defined(__DJGPP__) || defined(_WINDOWS)
if (strchr(result, ':') != NULL)
cp = NULL;
else
#endif /* __DJGPP__ || _WINDOWS */
- cp = original_dir;
+ {
+#ifdef SUPPORT_CHDIR
+ static char buf[LY_MAXPATH];
+ cp = Current_Dir(buf);
+#else
+ cp = original_dir;
+#endif
+ }
}
else
#endif /* __EMX__*/
cp = NULL;
+ *result = 0;
if (cp) {
LYTrimPathSep(cp);
- sprintf(result, "%s/%s", cp, HTSYS_name(given));
- } else {
- strcpy(result, HTSYS_name(given));
+ if (strlen(cp) >= LY_MAXPATH - 2)
+ return FALSE;
+ sprintf(result, "%s/", cp);
}
+ cp = HTSYS_name(given);
+ if (strlen(result) + strlen(cp) >= LY_MAXPATH - 1)
+ return FALSE;
+ strcat(result, cp);
#endif /* VMS */
return TRUE;
}
@@ -6145,7 +7246,6 @@ PUBLIC BOOLEAN LYValidateFilename ARGS2(
PUBLIC int LYValidateOutput ARGS1(
char *, filename)
{
- FILE *fp;
int c;
/*
@@ -6166,8 +7266,7 @@ PUBLIC int LYValidateOutput ARGS1(
/*
* See if it already exists.
*/
- if ((fp = fopen(filename, "r")) != NULL) {
- fclose(fp);
+ if (LYCanReadFile(filename)) {
#ifdef VMS
c = HTConfirm(FILE_EXISTS_HPROMPT);
#else
@@ -6196,32 +7295,16 @@ PUBLIC void LYLocalFileToURL ARGS2(
leaf = wwwName(source);
+ if (!LYisAbsPath(source)) {
+ char temp[LY_MAXPATH];
+ Current_Dir(temp);
+ StrAllocCat(*target, temp);
+ }
if (!LYIsHtmlSep(*leaf))
LYAddHtmlSep(target);
StrAllocCat(*target, leaf);
}
-#ifdef NOTDEFINED
-/* FIXME: this may be useful for pages that do not allow nested pages */
-PUBLIC int LYOpenInternalPage ARGS2(
- FILE **, fp0,
- char **, newfile)
-{
- static char tempfile[LY_MAXPATH];
-
- LYRemoveTemp(tempfile);
- if ((*fp0 = LYOpenTemp(tempfile, HTML_SUFFIX, "w")) == NULL) {
- HTAlert(CANNOT_OPEN_TEMP);
- return(-1);
- }
-
- LYLocalFileToURL(newfile, tempfile);
- LYforce_no_cache = TRUE; /* don't cache this doc */
-
- return(0); /* OK */
-}
-#endif
-
PUBLIC void BeginInternalPage ARGS3(
FILE *, fp0,
char*, Title,
@@ -6247,7 +7330,7 @@ PUBLIC void BeginInternalPage ARGS3(
Title);
if ((user_mode == NOVICE_MODE)
- && LYwouldPush(Title)
+ && LYwouldPush(Title, NULL)
&& (HelpURL != 0)) {
fprintf(fp0, "<h1>%s (%s%s%s), <a href=\"%s%s\">help</a></h1>\n",
Title, LYNX_NAME, VERSION_SEGMENT, LYNX_VERSION,
@@ -6286,7 +7369,7 @@ PUBLIC void LYTrimPathSep ARGS1(
#endif
/*
- * Add a trailing path-separator to avoid confusing other programs when we concatenate
+ * Add a trailing path-separator to avoid confusing other programs when we concateate
* to it. This only applies to local filesystems.
*/
PUBLIC void LYAddPathSep ARGS1(
@@ -6308,18 +7391,35 @@ PUBLIC void LYAddPathSep ARGS1(
* to it. This only applies to local filesystems.
*/
PUBLIC void LYAddPathSep0 ARGS1(
- char *, path)
+ char *, path)
{
size_t len;
if ((path != 0)
&& (len = strlen(path)) != 0
+ && (len < LY_MAXPATH - 2)
&& !LYIsPathSep(path[len-1])) {
strcat(path, PATHSEP_STR);
}
}
/*
+ * Check if a given string contains a path separator
+ */
+PUBLIC char * LYLastPathSep ARGS1(
+ CONST char *, path)
+{
+ char *result;
+#ifdef DOSPATH
+ if ((result = strrchr(path, '\\')) == 0)
+ result = strrchr(path, '/');
+#else
+ result = strrchr(path, '/');
+#endif
+ return result;
+}
+
+/*
* Trim a trailing path-separator to avoid confusing other programs when we concatenate
* to it. This only applies to HTML paths.
*/
@@ -6363,6 +7463,7 @@ PUBLIC void LYAddHtmlSep0 ARGS1(
if ((path != 0)
&& (len = strlen(path)) != 0
+ && (len < LY_MAXPATH - 2)
&& !LYIsHtmlSep(path[len-1])) {
strcat(path, "/");
}
@@ -6376,6 +7477,31 @@ PUBLIC int LYCopyFile ARGS2(
char *, dst)
{
int code;
+
+#if defined(DOSPATH) || defined(__CYGWIN__) /* thanks to Hiroyuki Senshu */
+
+#define BUF_SIZE 1024
+
+ FILE *fin, *fout;
+ unsigned char buff[BUF_SIZE];
+ int len;
+
+ code = EOF;
+ if ((fin = fopen(src, BIN_R)) != 0) {
+ if ((fout = fopen(dst, BIN_W)) != 0) {
+ code = 0;
+ while ((len = fread(buff, 1, BUF_SIZE, fin)) > 0) {
+ fwrite(buff, 1, len, fout);
+ if (ferror(fout)) {
+ code = EOF;
+ break;
+ }
+ }
+ LYCloseOutput(fout);
+ }
+ LYCloseInput(fin);
+ }
+#else
char *the_command = 0;
HTAddParam(&the_command, COPY_COMMAND, 1, COPY_PATH);
@@ -6383,28 +7509,40 @@ PUBLIC int LYCopyFile ARGS2(
HTAddParam(&the_command, COPY_COMMAND, 3, dst);
HTEndParam(&the_command, COPY_COMMAND, 3);
- CTRACE(tfp, "command: %s\n", the_command);
+ CTRACE((tfp, "command: %s\n", the_command));
stop_curses();
code = LYSystem(the_command);
start_curses();
FREE(the_command);
+#endif
+ if (code) {
+ HTAlert(CANNOT_WRITE_TO_FILE);
+ }
return code;
}
/*
- * Invoke a shell command
+ * Invoke a shell command, return nonzero on error.
*/
PUBLIC int LYSystem ARGS1(
char *, command)
{
int code;
int do_free = 0;
+#if HAVE_SIGACTION && defined(SIGTSTP) && !defined(USE_SLANG)
+ struct sigaction saved_sigtstp_act;
+ BOOLEAN sigtstp_saved = FALSE;
+#endif
+ int saved_errno = 0;
+#ifdef __EMX__
+ int scrsize[4];
+#endif
fflush(stdout);
fflush(stderr);
- CTRACE(tfp, "LYSystem(%s)\n", command);
+ CTRACE((tfp, "LYSystem(%s)\n", command));
CTRACE_FLUSH(tfp);
#ifdef __DJGPP__
@@ -6420,6 +7558,8 @@ PUBLIC int LYSystem ARGS1(
Native command-(non)-shell will not tolerate this. */
{
char *space = command, *slash = command;
+
+ _scrsize(scrsize);
while (*space && *space != ' ' && *space != '\t')
space++;
while (slash < space && *slash != '/')
@@ -6438,7 +7578,75 @@ PUBLIC int LYSystem ARGS1(
}
}
# endif
+
+#if defined(__CYGWIN__) && defined(DOSPATH) /* 1999/02/26 (Fri) */
+ {
+ char cmd[LY_MAXPATH];
+ char win32_name[LY_MAXPATH];
+ char new_cmd[LY_MAXPATH];
+ char new_command[LY_MAXPATH * 2 + 10];
+ char *p, *q;
+
+ p = command;
+ q = cmd;
+ while (*p) {
+ if (*p == ' ')
+ break;
+ else
+ *q = *p;
+ p++;
+ q++;
+ }
+ *q = '\0';
+
+ if (cmd[0] == '/')
+ cygwin_conv_to_full_posix_path(cmd, new_cmd);
+ else
+ strcpy(new_cmd, cmd);
+
+ while (*p == ' ')
+ p++;
+
+ if (strchr(p, '\\') == NULL) {
+ /* for Windows Application */
+ cygwin_conv_to_full_win32_path(p, win32_name);
+ sprintf(new_command, "%.*s \"%.*s\"", LY_MAXPATH, new_cmd, LY_MAXPATH, win32_name);
+ } else {
+ /* for DOS like editor */
+ q = win32_name;
+ while (*p) {
+ if (*p == '\\') {
+ if (*(p+1) == '\\')
+ p++;
+ }
+ *q = *p;
+ q++, p++;
+ }
+ *q = '\0';
+ sprintf(new_command, "%.*s %.*s", LY_MAXPATH, new_cmd, LY_MAXPATH, win32_name);
+ }
+ command = new_command;
+ }
+#endif
+
+#if _WIN_CC
+ code = exec_command(command, TRUE); /* Wait exec */
+#else
+ if (restore_sigpipe_for_children)
+ signal(SIGPIPE, SIG_DFL); /* Some commands expect the default */
+#if HAVE_SIGACTION && defined(SIGTSTP) && !defined(USE_SLANG)
+ if (!dump_output_immediately && !LYCursesON && !no_suspend)
+ sigtstp_saved = LYToggleSigDfl(SIGTSTP, &saved_sigtstp_act, 1);
+#endif
code = system(command);
+ saved_errno = errno;
+#if HAVE_SIGACTION && defined(SIGTSTP) && !defined(USE_SLANG)
+ if (sigtstp_saved)
+ LYToggleSigDfl(SIGTSTP, &saved_sigtstp_act, 0);
+#endif
+ if (restore_sigpipe_for_children)
+ signal(SIGPIPE, SIG_IGN); /* Ignore it again - kw */
+#endif
#endif
#ifdef __DJGPP__
@@ -6451,27 +7659,91 @@ PUBLIC int LYSystem ARGS1(
if (do_free)
FREE(command);
+#if !defined(UCX) || !defined(VAXC) /* errno not modifiable ?? */
+ set_errno(saved_errno); /* may have been clobbered */
+#endif
+#ifdef __EMX__ /* Check whether the screen size changed */
+ size_change(0);
+#endif
return code;
}
/*
* Return a string which can be used in LYSystem() for spawning a subshell
*/
+#if defined(__CYGWIN__) /* 1999/02/26 (Fri) */
+PUBLIC int Cygwin_Shell NOARGS
+{
+ char *shell;
+ int code;
+ STARTUPINFO startUpInfo;
+ PROCESS_INFORMATION procInfo;
+ SECURITY_ATTRIBUTES sa;
+
+ /* Set up security attributes to allow inheritance of the file handle */
+
+ sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+ sa.lpSecurityDescriptor = 0;
+ sa.bInheritHandle=TRUE;
+
+ /* Init a startup structure */
+ GetStartupInfo(&startUpInfo);
+
+ shell = getenv_text("COMSPEC");
+
+ /* Create the child process, specifying
+ inherited handles. Pass the value of the
+ handle as a command line parameter */
+ code = 0;
+ if (shell) {
+ code = CreateProcess(0, shell, 0, 0,
+ TRUE, 0,
+ 0, 0, &startUpInfo, &procInfo);
+
+ if (!code) {
+ printf("shell = [%s], code = %d\n", shell, GetLastError());
+ }
+
+ /* wait for the child to return (this is not a requirement
+ since the child is its own independent process) */
+ WaitForSingleObject(procInfo.hProcess, INFINITE);
+ }
+
+ return code;
+}
+#endif
+
PUBLIC char *LYSysShell NOARGS
{
char *shell = 0;
#ifdef DOSPATH
- if (getenv("SHELL") != NULL) {
- shell = getenv("SHELL");
- } else {
- shell = (getenv("COMSPEC") == NULL) ? "command.com" : getenv("COMSPEC");
+#ifdef WIN_EX
+ shell = getenv_text("SHELL");
+ if (shell) {
+ if (access(shell, 0) != 0)
+ shell = getenv_text("COMSPEC");
+ }
+ if (shell == NULL) {
+ if (system_is_NT)
+ shell = "cmd.exe";
+ else
+ shell = "command.com";
}
#else
+ shell = getenv_text("SHELL");
+ if (shell == NULL) {
+ shell = getenv_text("COMSPEC");
+ }
+ if (shell == NULL) {
+ shell = "command.com";
+ }
+#endif /* WIN_EX */
+#else
#ifdef __EMX__
- if (getenv("SHELL") != NULL) {
- shell = getenv("SHELL");
+ if (getenv_text("SHELL") != NULL) {
+ shell = getenv_text("SHELL");
} else {
- shell = (getenv("COMSPEC") == NULL) ? "cmd.exe" : getenv("COMSPEC");
+ shell = (getenv_text("COMSPEC") == NULL) ? "cmd.exe" : getenv_text("COMSPEC");
}
#else
#ifdef VMS
@@ -6496,7 +7768,7 @@ PUBLIC char *LYSysShell NOARGS
PUBLIC char *LYgetXDisplay NOARGS
{
char *cp;
- if ((cp = getenv(DISPLAY)) == NULL || *cp == '\0')
+ if ((cp = getenv_text(DISPLAY)) == NULL)
cp = 0;
return cp;
}
@@ -6508,17 +7780,14 @@ PUBLIC char *LYgetXDisplay NOARGS
PUBLIC void LYsetXDisplay ARGS1(
char *, new_display)
{
- if (new_display != 0 && *new_display != '\0') {
+ if (new_display != 0) {
#ifdef VMS
LYUpperCase(new_display);
Define_VMSLogical(DISPLAY, new_display);
#else
static char *display_putenv_command;
- display_putenv_command = malloc(strlen(new_display) + 12);
- if (!display_putenv_command)
- outofmem(__FILE__, "LYsetXDisplay");
- sprintf(display_putenv_command, "DISPLAY=%s", new_display);
+ HTSprintf0(&display_putenv_command, "DISPLAY=%s", new_display);
putenv(display_putenv_command);
#endif /* VMS */
if ((new_display = LYgetXDisplay()) != 0) {
@@ -6526,3 +7795,390 @@ PUBLIC void LYsetXDisplay ARGS1(
}
}
}
+
+#ifdef __EMX__
+
+static int proc_type = -1;
+static PPIB pib;
+HAB hab;
+HMQ hmq;
+
+PRIVATE void morph_PM NOARGS
+{
+ PTIB tib;
+ int first = 0;
+
+ if (proc_type == -1) {
+ DosGetInfoBlocks(&tib, &pib);
+ proc_type = pib->pib_ultype;
+ first = 1;
+ }
+ if (pib->pib_ultype != 3) /* 2 is VIO */
+ pib->pib_ultype = 3; /* 3 is PM */
+ if (first)
+ hab = WinInitialize(0);
+ /* 64 messages if before OS/2 3.0, ignored otherwise */
+ hmq = WinCreateMsgQueue(hab, 64);
+ WinCancelShutdown(hmq, 1); /* Do not inform us on shutdown */
+}
+
+PRIVATE void unmorph_PM NOARGS
+{
+ WinDestroyMsgQueue(hmq);
+ pib->pib_ultype = proc_type;
+}
+
+PUBLIC int size_clip NOARGS
+{
+ return 8192;
+}
+
+/* Code partialy stolen from FED editor. */
+
+PUBLIC int put_clip ARGS1(char *, s)
+{
+ int sz = strlen(s) + 1;
+ int ret = EOF, nl = 0;
+ char *pByte = 0, *s1 = s, c, *t;
+
+ while ((c = *s1++)) {
+ if (c == '\r' && *s1 == '\n')
+ s1++;
+ else if (c == '\n')
+ nl++;
+ }
+ if (DosAllocSharedMem((PPVOID)&pByte, 0, sz + nl,
+ PAG_WRITE | PAG_COMMIT | OBJ_GIVEABLE | OBJ_GETTABLE))
+ return ret;
+
+ if (!nl)
+ memcpy(pByte, s, sz);
+ else {
+ t = pByte;
+ while ((c = *t++ = *s++))
+ if (c == '\n' && (t == pByte + 1 || t[-2] != '\r'))
+ t[-1] = '\r', *t++ = '\n';
+ }
+
+ morph_PM();
+ if(!hab)
+ goto fail;
+
+ WinOpenClipbrd(hab);
+ WinEmptyClipbrd(hab);
+ if (WinSetClipbrdData(hab, (ULONG) pByte, CF_TEXT, CFI_POINTER))
+ ret = 0;
+ WinCloseClipbrd(hab);
+ unmorph_PM();
+ if (ret == 0)
+ return 0;
+ fail:
+ DosFreeMem((PPVOID)&pByte);
+ return EOF;
+}
+
+static int clip_open;
+
+/* get_clip_grab() returns a pointer to the string in the system area.
+ get_clip_release() should be called ASAP after this. */
+
+PUBLIC char* get_clip_grab NOARGS
+{
+ char *ClipData;
+ ULONG ulFormat;
+ int sz;
+
+ morph_PM();
+ if(!hab)
+ return 0;
+ if (clip_open)
+ get_clip_release();
+
+ WinQueryClipbrdFmtInfo(hab, CF_TEXT, &ulFormat);
+ if(ulFormat != CFI_POINTER) {
+ unmorph_PM();
+ return 0;
+ }
+ WinOpenClipbrd(hab);
+ clip_open = 1;
+ ClipData = (char *)WinQueryClipbrdData(hab, CF_TEXT);
+ sz = strlen(ClipData);
+ if(!ClipData || !sz) {
+ get_clip_release();
+ return 0;
+ }
+ return ClipData;
+}
+
+PUBLIC void get_clip_release NOARGS
+{
+ if (!clip_open)
+ return;
+ WinCloseClipbrd(hab);
+ clip_open = 0;
+ unmorph_PM();
+}
+
+#endif
+
+#if defined(WIN_EX) /* 1997/10/16 (Thu) 20:13:28 */
+
+#define MAX_DOS_PATH 128 /* exactly 80 */
+
+PUBLIC int put_clip(char *szBuffer)
+{
+ HANDLE hWnd;
+ HANDLE m_hLogData;
+ LPTSTR pLogData;
+ HANDLE hClip;
+ int len;
+
+ if (szBuffer == NULL)
+ return EOF;
+
+ len = strlen(szBuffer);
+ if (len == 0)
+ return EOF;
+ else
+ len ++;
+
+ m_hLogData = GlobalAlloc(GHND, len);
+ if (m_hLogData == NULL) {
+ return EOF;
+ }
+
+ hWnd = NULL;
+ if (!OpenClipboard(hWnd)) {
+ return EOF;
+ }
+ /* Remove the current Clipboard contents */
+ if (!EmptyClipboard()) {
+ GlobalFree(m_hLogData);
+ return EOF;
+ }
+
+ /* Lock the global memory while we write to it. */
+ pLogData = (LPTSTR) GlobalLock(m_hLogData);
+
+ lstrcpy((LPTSTR) pLogData, szBuffer);
+ GlobalUnlock(m_hLogData);
+
+ /* If there were any lines at all then copy them to clipboard. */
+ hClip = SetClipboardData(CF_TEXT, m_hLogData);
+ if (!hClip) {
+ /* If we couldn't clip the data then free the global handle. */
+ GlobalFree(m_hLogData);
+ }
+
+ CloseClipboard();
+ return 0;
+}
+
+static HANDLE m_hLogData;
+static int m_locked;
+
+/* get_clip_grab() returns a pointer to the string in the system area.
+ get_clip_release() should be called ASAP after this. */
+
+PUBLIC char* get_clip_grab()
+{
+ HANDLE hWnd;
+ LPTSTR pLogData;
+
+ hWnd = NULL;
+ if (!OpenClipboard(hWnd)) {
+ return 0;
+ }
+
+ m_hLogData = GetClipboardData(CF_TEXT);
+
+ if (m_hLogData == NULL) {
+ CloseClipboard();
+ m_locked = 0;
+ return 0;
+ }
+ pLogData = (LPTSTR) GlobalLock(m_hLogData);
+
+ m_locked = 1;
+ return pLogData;
+}
+
+PUBLIC void get_clip_release()
+{
+ if (!m_locked)
+ return;
+ GlobalUnlock(m_hLogData);
+ CloseClipboard();
+ m_locked = 0;
+}
+
+
+PUBLIC char *HTDOS_short_name(char *path)
+{
+ static char sbuf[MAX_DOS_PATH];
+ char *ret;
+ DWORD r;
+
+ r = GetShortPathName(path, sbuf, sizeof sbuf);
+ if (r >= sizeof sbuf) {
+#if 0 /* DEBUG */
+ fprintf(stderr, "bug: recompile with MAX_DOS_PATH > %d\n", r);
+#endif
+ ret = path;
+ }
+ if (r == 0) {
+ ret = path;
+ } else {
+ ret = sbuf;
+ }
+ return ret;
+}
+#endif
+
+#if defined(WIN_EX)
+
+#ifndef WSABASEERR
+#define WSABASEERR 10000
+#endif
+
+/*
+ * Description: the windows32 version of perror()
+ *
+ * Returns: a pointer to a static error
+ *
+ * Notes/Dependencies: I got this from
+ * comp.os.ms-windows.programmer.win32
+ */
+PUBLIC char * w32_strerror(DWORD ercode)
+{
+/* __declspec(thread) necessary if you will use multiple threads */
+#ifdef __CYGWIN__
+ static char msg_buff[256];
+#else
+ __declspec(thread) static char msg_buff[256];
+#endif
+ HMODULE hModule;
+ int i, msg_type;
+ unsigned char *p, *q, tmp_buff[256];
+
+ hModule = NULL;
+ msg_type = FORMAT_MESSAGE_FROM_SYSTEM;
+ /* Fill message buffer with a default message in
+ * case FormatMessage fails
+ */
+ wsprintf(msg_buff, "Error %ld", ercode);
+
+ /*
+ * Special code for winsock error handling.
+ */
+ if (ercode > WSABASEERR) {
+ hModule = GetModuleHandle("wsock32");
+ if (hModule == NULL)
+ ercode = GetLastError();
+ else
+ msg_type = FORMAT_MESSAGE_FROM_HMODULE;
+ }
+ /*
+ * message handling
+ */
+ FormatMessage(msg_type,
+ hModule,
+ ercode,
+ LANG_NEUTRAL,
+ msg_buff,
+ sizeof(msg_buff),
+ NULL);
+
+ strcpy(tmp_buff, msg_buff);
+ p = q = tmp_buff;
+ i = 0;
+ while (*p) {
+ if (!(*p == '\n' || *p == '\r'))
+ msg_buff[i++] = *p;
+ p++;
+ }
+ msg_buff[i] = '\0';
+
+ return msg_buff;
+}
+
+#endif
+
+#if !defined(VMS) && defined(SYSLOG_REQUESTED_URLS)
+/*
+ * syslog() interface
+ */
+PUBLIC void LYOpenlog ARGS1(
+ CONST char *, banner)
+{
+#if defined(WATT32)
+ openlog("lynx", LOG_PID|LOG_NDELAY, LOG_LOCAL5);
+#else
+ openlog("lynx", LOG_PID, LOG_LOCAL5);
+#endif
+
+ if (banner) {
+ syslog(LOG_INFO, "Session start:%s", banner);
+ } else {
+ syslog(LOG_INFO, "Session start");
+ }
+}
+
+PRIVATE BOOLEAN looks_like_password ARGS2(
+ char *, first,
+ char *, last)
+{
+ BOOLEAN result = FALSE;
+
+ while (first <= last) {
+ if (*first == '/'
+ || *first == ':') {
+ result = FALSE;
+ break;
+ }
+ result = TRUE;
+ first++;
+ }
+ return result;
+}
+
+PUBLIC void LYSyslog ARGS1(
+ char *, arg)
+{
+ char *colon1;
+ char *colon2;
+ char *atsign;
+
+ CTRACE((tfp, "LYSyslog %s\n", arg));
+
+ if (is_url(arg)) { /* proto://user:password@host/path:port */
+ /* ^this colon */
+ if ((colon1 = strchr(arg, ':')) != 0
+ && !strncmp(colon1, "://", 3)
+ && (colon2 = strchr(colon1+3, ':')) != 0
+ && (atsign = strchr(colon1, '@')) != 0
+ && (colon2 < atsign)
+ && looks_like_password(colon2 + 1, atsign - 1)) {
+ char *buf = NULL;
+
+ StrAllocCopy(buf, arg);
+ buf[colon2 - arg + 1] = 0;
+ StrAllocCat(buf, "******");
+ StrAllocCat(buf, atsign);
+ syslog (LOG_INFO|LOG_LOCAL5, buf);
+ CTRACE((tfp, "...alter %s\n", buf));
+ FREE(buf);
+ return;
+ }
+ }
+ syslog (LOG_INFO|LOG_LOCAL5, "%s", NONNULL(arg));
+}
+
+PUBLIC void LYCloselog NOARGS
+{
+ syslog(LOG_INFO, "Session over");
+ closelog();
+}
+
+#endif /* !VMS && SYSLOG_REQUESTED_URLS */
+
diff --git a/gnu/usr.bin/lynx/src/LYUtils.h b/gnu/usr.bin/lynx/src/LYUtils.h
index 6a507b94913..db0b6bbe8d2 100644
--- a/gnu/usr.bin/lynx/src/LYUtils.h
+++ b/gnu/usr.bin/lynx/src/LYUtils.h
@@ -2,12 +2,14 @@
#define LYUTILS_H
#include <LYCharVals.h> /* S/390 -- gil -- 2149 */
+#include <LYKeymap.h>
#ifndef HTLIST_H
#include <HTList.h>
#endif /* HTLIST_H */
#ifdef VMS
+#include <HTFTP.h>
#include <HTVMSUtils.h>
#define HTSYS_name(path) HTVMS_name("", path)
#define HTSYS_purge(path) HTVMS_purge(path)
@@ -33,7 +35,18 @@
#define LYIsPipeCommand(s) ((s)[0] == '|')
-#ifdef DOSPATH
+/* See definitions in src/LYCharVals.h. The hardcoded values...
+ This prohibits binding C-c and C-g. Maybe it is better to remove this? */
+#define LYCharIsINTERRUPT_HARD(ch) \
+ ((ch) == LYCharINTERRUPT1 || ch == LYCharINTERRUPT2)
+
+#define LYCharIsINTERRUPT(ch) \
+ (LYCharIsINTERRUPT_HARD(ch) || LKC_TO_LAC(keymap,ch) == LYK_INTERRUPT)
+
+#define LYCharIsINTERRUPT_NO_letter(ch) \
+ (LYCharIsINTERRUPT(ch) && !isprint(ch))
+
+#if defined(DOSPATH) || defined(__EMX__)
#define LYIsPathSep(ch) ((ch) == '/' || (ch) == '\\')
#else
#define LYIsPathSep(ch) ((ch) == '/')
@@ -50,26 +63,35 @@
#define LYIsHtmlSep(ch) ((ch) == '/')
-#define TABLESIZE(v) (sizeof(v)/sizeof(v[0]))
-
+extern BOOL strn_dash_equ PARAMS((CONST char* p1,CONST char* p2,int len));
extern BOOLEAN LYAddSchemeForURL PARAMS((char **AllocatedString, char *default_scheme));
extern BOOLEAN LYCachedTemp PARAMS((char *result, char **cached));
extern BOOLEAN LYCanDoHEAD PARAMS((CONST char *address));
+extern BOOLEAN LYCanReadFile PARAMS((CONST char* name));
+extern BOOLEAN LYCanWriteFile PARAMS((CONST char* name));
+extern BOOLEAN LYCloseInput PARAMS((FILE * fp));
+extern BOOLEAN LYCloseOutput PARAMS((FILE * fp));
extern BOOLEAN LYExpandHostForURL PARAMS((char **AllocatedString, char *prefix_list, char *suffix_list));
+extern BOOLEAN LYFixCursesOnForAccess PARAMS((CONST char* addr, CONST char* physical));
extern BOOLEAN LYPathOffHomeOK PARAMS((char *fbuffer, size_t fbuffer_size));
extern BOOLEAN LYValidateFilename PARAMS((char * result, char * given));
+extern BOOLEAN LYisAbsPath PARAMS((CONST char *path));
extern BOOLEAN LYisLocalAlias PARAMS((char *filename));
extern BOOLEAN LYisLocalFile PARAMS((char *filename));
extern BOOLEAN LYisLocalHost PARAMS((char *filename));
+extern BOOLEAN LYisRootPath PARAMS((char *path));
extern BOOLEAN inlocaldomain NOPARAMS;
extern CONST char *Home_Dir NOPARAMS;
+extern CONST char *index_to_restriction PARAMS(( int inx));
extern FILE *LYAppendToTxtFile PARAMS((char * name));
extern FILE *LYNewBinFile PARAMS((char * name));
extern FILE *LYNewTxtFile PARAMS((char * name));
extern FILE *LYOpenScratch PARAMS((char *result, CONST char *prefix));
extern FILE *LYOpenTemp PARAMS((char *result, CONST char *suffix, CONST char *mode));
+extern FILE *LYOpenTempRewrite PARAMS((char *result, CONST char *suffix, CONST char *mode));
extern FILE *LYReopenTemp PARAMS((char *name));
extern char *Current_Dir PARAMS((char * pathname));
+extern char *LYLastPathSep PARAMS((CONST char *path));
extern char *LYPathLeaf PARAMS((char * pathname));
extern char *LYSysShell NOPARAMS;
extern char *LYgetXDisplay NOPARAMS;
@@ -79,9 +101,10 @@ extern int HTCheckForInterrupt NOPARAMS;
extern int LYCheckForProxyURL PARAMS((char *filename));
extern int LYConsoleInputFD PARAMS((BOOLEAN need_selectable));
extern int LYCopyFile PARAMS((char *src, char *dst));
-extern int LYOpenInternalPage PARAMS((FILE **fp0, char **newfile));
+extern int LYRemoveTemp PARAMS((char *name));
extern int LYSystem PARAMS((char *command));
extern int LYValidateOutput PARAMS((char * filename));
+extern int find_restriction PARAMS((CONST char * name, int len));
extern int is_url PARAMS((char *filename));
extern int number2arrows PARAMS((int number));
extern time_t LYmktime PARAMS((char *string, BOOL absolute));
@@ -95,6 +118,7 @@ extern void LYAddLocalhostAlias PARAMS((char *alias));
extern void LYAddPathSep PARAMS((char **path));
extern void LYAddPathSep0 PARAMS((char *path));
extern void LYAddPathToHome PARAMS((char *fbuffer, size_t fbuffer_size, char *fname));
+extern void LYCheckBibHost NOPARAMS;
extern void LYCheckMail NOPARAMS;
extern void LYCleanupTemp NOPARAMS;
extern void LYCloseTemp PARAMS((char *name));
@@ -103,9 +127,9 @@ extern void LYConvertToURL PARAMS((char **AllocatedString, int fixit));
extern void LYDoCSI PARAMS((char *url, CONST char *comment, char **csi));
extern void LYEnsureAbsoluteURL PARAMS((char **href, CONST char *name, int fixit));
extern void LYFakeZap PARAMS((BOOL set));
+extern void LYFixCursesOn PARAMS((CONST char* reason));
extern void LYLocalFileToURL PARAMS((char **target, CONST char *source));
extern void LYLocalhostAliases_free NOPARAMS;
-extern void LYRemoveTemp PARAMS((char *name));
extern void LYRenamedTemp PARAMS((char * oldname, char * newname));
extern void LYTrimHtmlSep PARAMS((char *path));
extern void LYTrimPathSep PARAMS((char *path));
@@ -117,11 +141,58 @@ extern void free_and_clear PARAMS((char **obj));
extern void highlight PARAMS((int flag, int cur, char *target));
extern void noviceline PARAMS((int more_flag));
extern void parse_restrictions PARAMS((CONST char *s));
+extern void print_restrictions_to_fd PARAMS((FILE *fp));
extern void remove_backslashes PARAMS((char *buf));
extern void size_change PARAMS((int sig));
extern void statusline PARAMS((CONST char *text));
extern void toggle_novice_line NOPARAMS;
+/* Keeping track of User Interface Pages: */
+typedef enum {
+ UIP_UNKNOWN=-1
+ , UIP_HISTORY=0
+ , UIP_DOWNLOAD_OPTIONS
+ , UIP_PRINT_OPTIONS
+ , UIP_SHOWINFO
+ , UIP_LIST_PAGE
+ , UIP_VLINKS
+ , UIP_LYNXCFG
+ , UIP_OPTIONS_MENU
+ , UIP_DIRED_MENU
+ , UIP_PERMIT_OPTIONS
+ , UIP_UPLOAD_OPTIONS
+ , UIP_ADDRLIST_PAGE
+ , UIP_CONFIG_DEF
+ , UIP_TRACELOG
+ , UIP_INSTALL
+} UIP_t;
+
+#define UIP_P_FRAG 0x0001 /* flag: consider "url#frag" as matching "url" */
+
+extern BOOL LYIsUIPage3 PARAMS((CONST char * url, UIP_t type, int flagparam));
+#define LYIsUIPage(url,type) LYIsUIPage3(url, type, UIP_P_FRAG)
+extern void LYRegisterUIPage PARAMS((CONST char * url, UIP_t type));
+#define LYUnRegisterUIPage(type) LYRegisterUIPage(NULL, type)
+extern void LYUIPages_free NOPARAMS;
+
+#ifdef CAN_CUT_AND_PASTE
+extern int put_clip(char *szBuffer);
+/* get_clip_grab() returns a pointer to the string in the system area.
+ get_clip_release() should be called ASAP after this. */
+extern char* get_clip_grab(void);
+extern void get_clip_release(void);
+# ifdef WIN_EX
+# define size_clip() 8192
+# else
+extern int size_clip();
+# endif
+#endif
+
+#if defined(WIN_EX) /* 1997/10/16 (Thu) 20:13:28 */
+extern char *HTDOS_short_name(char *path);
+extern char *w32_strerror(DWORD ercode);
+#endif
+
#ifdef VMS
extern void Define_VMSLogical PARAMS((char *LogicalName, char *LogicalValue));
#endif /* VMS */
@@ -163,6 +234,7 @@ typedef enum {
TELNET_GOPHER_URL_TYPE,
INDEX_GOPHER_URL_TYPE,
MAILTO_URL_TYPE,
+ BIBP_URL_TYPE,
FINGER_URL_TYPE,
CSO_URL_TYPE,
HTTPS_URL_TYPE,
@@ -203,6 +275,22 @@ typedef enum {
extern HTList *sug_filenames;
/*
+ * syslog() facility
+ */
+#if !defined(VMS) && defined(SYSLOG_REQUESTED_URLS)
+#ifdef WATT32
+#include <sys/syslog.h>
+#else
+#include <syslog.h>
+#endif
+
+extern void LYOpenlog PARAMS((CONST char *banner));
+extern void LYSyslog PARAMS((char *arg));
+extern void LYCloselog NOPARAMS;
+
+#endif /* !VMS && SYSLOG_REQUESTED_URLS */
+
+/*
* Miscellaneous.
*/
#define ON 1
@@ -213,4 +301,18 @@ extern HTList *sug_filenames;
#define HIDE_CHMOD 0600
#define HIDE_UMASK 0077
+#if defined(DOSPATH) || defined(WIN_EX) || defined(__CYGWIN__)
+#define TXT_R "rt"
+#define TXT_W "wt"
+#define TXT_A "at+"
+#else
+#define TXT_R "r"
+#define TXT_W "w"
+#define TXT_A "a+"
+#endif
+
+#define BIN_R "rb"
+#define BIN_W "wb"
+#define BIN_A "ab+"
+
#endif /* LYUTILS_H */
diff --git a/gnu/usr.bin/lynx/src/LYexit.c b/gnu/usr.bin/lynx/src/LYexit.c
index 92cfe6b0148..fbc1316099f 100644
--- a/gnu/usr.bin/lynx/src/LYexit.c
+++ b/gnu/usr.bin/lynx/src/LYexit.c
@@ -3,16 +3,15 @@
*/
#include <HTUtils.h>
#include <LYexit.h>
+#include <HTAlert.h>
#ifndef VMS
#include <LYGlobalDefs.h>
#include <LYUtils.h>
#include <LYSignal.h>
-#include <LYClean.h>
#include <LYMainLoop.h>
-#ifdef SYSLOG_REQUESTED_URLS
-#include <syslog.h>
-#endif /* SYSLOG_REQUESTED_URLS */
#endif /* !VMS */
+#include <LYStrings.h>
+#include <LYClean.h>
/*
* Flag for outofmem macro. - FM
@@ -37,17 +36,17 @@ PRIVATE int topOfStack = 0;
*/
#ifdef __STDC__
-PUBLIC int LYatexit(void (*function)(void))
+PUBLIC int LYatexit(void (*function) NOPARAMS)
#else /* Not ANSI, ugh! */
PUBLIC int LYatexit(function)
-void (*function)();
+void (*function) NOPARAMS;
#endif /* __STDC__ */
{
/*
* Check for available space.
*/
if (topOfStack == ATEXITSIZE) {
- CTRACE(tfp, "(LY)atexit: Too many functions, ignoring one!\n");
+ CTRACE((tfp, "(LY)atexit: Too many functions, ignoring one!\n"));
return(-1);
}
@@ -92,6 +91,12 @@ PUBLIC void LYexit ARGS1(
{
#ifndef VMS /* On VMS, the VMSexit() handler does these. - FM */
#ifdef _WINDOWS
+ extern CRITICAL_SECTION critSec_DNS; /* 1998/09/03 (Thu) 22:01:56 */
+ extern CRITICAL_SECTION critSec_READ; /* 1998/09/03 (Thu) 22:01:56 */
+
+ DeleteCriticalSection(&critSec_DNS);
+ DeleteCriticalSection(&critSec_READ);
+
WSACleanup();
#endif
if (LYOutOfMemory == TRUE) {
@@ -111,17 +116,17 @@ PUBLIC void LYexit ARGS1(
(void) signal(SIGSEGV, SIG_IGN);
(void) signal(SIGILL, SIG_IGN);
- /*
- * Flush all messages. - FM
- */
- fflush(stderr);
- fflush(stdout);
+ /*
+ * Flush all messages. - FM
+ */
+ fflush(stderr);
+ fflush(stdout);
/*
* Deal with curses, if on, and clean up. - FM
*/
if (LYCursesON) {
- sleep(AlertSecs);
+ LYSleepAlert();
}
cleanup_sig(0);
#ifndef __linux__
@@ -139,12 +144,11 @@ PUBLIC void LYexit ARGS1(
*/
LYCompleteExit();
-#ifndef VMS
-#ifdef SYSLOG_REQUESTED_URLS
- syslog(LOG_INFO, "Session over");
- closelog();
-#endif /* SYSLOG_REQUESTED_URLS */
-#endif /* !VMS */
+#if !defined(VMS) && defined(SYSLOG_REQUESTED_URLS)
+ LYCloselog();
+#endif /* !VMS && SYSLOG_REQUESTED_URLS */
+
+ LYCloseCmdLogfile();
#ifdef exit
/* Make sure we use stdlib exit and not LYexit. - GAB
@@ -152,6 +156,7 @@ PUBLIC void LYexit ARGS1(
#undef exit
#endif /* exit */
+ cleanup_files(); /* if someone starts with LYNXfoo: page */
#ifndef VMS /* On VMS, the VMSexit() handler does these. - FM */
fflush(stderr);
if (LYOutOfMemory == TRUE) {
diff --git a/gnu/usr.bin/lynx/src/LYrcFile.c b/gnu/usr.bin/lynx/src/LYrcFile.c
index 2a81edd66f7..710689299ec 100644
--- a/gnu/usr.bin/lynx/src/LYrcFile.c
+++ b/gnu/usr.bin/lynx/src/LYrcFile.c
@@ -17,648 +17,332 @@
#define FNAME_LYNXRC ".lynxrc"
#endif /* FNAMES_8_3 */
-#define FIND_KEYWORD(cp, keyword) \
- ((cp = LYstrstr(line_buffer, keyword)) != NULL && \
- (cp - line_buffer) < number_sign)
+#define MSG_ENABLE_LYNXRC N_("Normally disabled. See ENABLE_LYNXRC in lynx.cfg\n")
+#define NonNull(string) ((string) != 0 ? (string) : "")
+#define putBool(value) ((value) ? "on" : "off")
+
+PUBLIC Config_Enum tbl_DTD_recovery[] = {
+ { "on", TRUE },
+ { "off", FALSE },
+ { "sortasgml", TRUE },
+ { "tagsoup", FALSE },
+ { NULL, -1 },
+};
-PRIVATE char *SkipEquals ARGS1(char *, src)
+#ifdef DIRED_SUPPORT
+PRIVATE Config_Enum tbl_dir_list_style[] = {
+ { "FILES_FIRST", FILES_FIRST },
+ { "DIRECTORIES_FIRST", 0 },
+ { "MIXED_STYLE", MIXED_STYLE },
+ { NULL, MIXED_STYLE },
+};
+#endif
+
+PRIVATE Config_Enum tbl_file_sort[] = {
+ { "BY_FILENAME", FILE_BY_NAME },
+ { "BY_TYPE", FILE_BY_TYPE },
+ { "BY_SIZE", FILE_BY_SIZE },
+ { "BY_DATE", FILE_BY_DATE },
+ { NULL, -1 },
+};
+
+PUBLIC Config_Enum tbl_keypad_mode[] = {
+ { "LINKS_AND_FIELDS_ARE_NUMBERED", LINKS_AND_FIELDS_ARE_NUMBERED },
+ { "LINKS_AND_FORM_FIELDS_ARE_NUMBERED", LINKS_AND_FIELDS_ARE_NUMBERED },
+ { "LINKS_ARE_NUMBERED", LINKS_ARE_NUMBERED },
+ { "NUMBERS_AS_ARROWS", NUMBERS_AS_ARROWS },
+ { NULL, DEFAULT_KEYPAD_MODE }
+};
+
+PUBLIC Config_Enum tbl_multi_bookmarks[] = {
+ { "OFF", MBM_OFF },
+ { "STANDARD", MBM_STANDARD },
+ { "ON", MBM_STANDARD },
+ { "ADVANCED", MBM_ADVANCED },
+ { NULL, -1 }
+};
+
+PRIVATE Config_Enum tbl_show_colors[] = {
+ { "default", SHOW_COLOR_UNKNOWN },
+ { "default", SHOW_COLOR_OFF },
+ { "default", SHOW_COLOR_ON },
+ { "on", SHOW_COLOR_UNKNOWN },
+ { "off", SHOW_COLOR_UNKNOWN },
+ { "never", SHOW_COLOR_NEVER },
+ { "always", SHOW_COLOR_ALWAYS },
+ { NULL, SHOW_COLOR_UNKNOWN }
+};
+
+PUBLIC Config_Enum tbl_transfer_rate[] = {
+ { "NONE", rateOFF },
+ { "KB", rateKB },
+ { "TRUE", rateKB },
+ { "BYTES", rateBYTES },
+ { "FALSE", rateBYTES },
+#ifdef EXP_READPROGRESS
+ { "KB,ETA", rateEtaKB },
+ { "BYTES,ETA", rateEtaBYTES },
+#endif
+ { NULL, -1 },
+};
+
+PUBLIC Config_Enum tbl_user_mode[] = {
+ { "ADVANCED", ADVANCED_MODE },
+ { "INTERMEDIATE", INTERMEDIATE_MODE },
+ { "NOVICE", NOVICE_MODE },
+ { NULL, NOVICE_MODE }
+};
+
+PRIVATE Config_Enum tbl_visited_links[] = {
+ { "FIRST_REVERSED", VISITED_LINKS_AS_FIRST_V | VISITED_LINKS_REVERSE },
+ { "FIRST", VISITED_LINKS_AS_FIRST_V },
+ { "TREE", VISITED_LINKS_AS_TREE },
+ { "LAST_REVERSED", VISITED_LINKS_AS_LATEST | VISITED_LINKS_REVERSE },
+ { "LAST", VISITED_LINKS_AS_LATEST },
+ { NULL, DEFAULT_VISITED_LINKS }
+};
+
+PRIVATE BOOL getBool ARGS1(char *, src)
{
- char *tmp;
- if ((tmp = (char *)strchr(src, '=')) != NULL)
- src = tmp + 1;
- return LYSkipBlanks(src);
+ return (BOOL) (!strncasecomp(src, "on", 2) || !strncasecomp(src, "true", 4));
}
-PUBLIC void read_rc NOPARAMS
+PRIVATE CONST char *LYputEnum ARGS2(
+ Config_Enum *, table,
+ int, value)
{
- char *line_buffer = NULL;
- char rcfile[LY_MAXPATH];
- FILE *fp;
- char *cp;
- int number_sign;
- char MBM_line[256];
- int MBM_counter;
- char *MBM_cp2, *MBM_cp1;
- int MBM_i2;
-
- /*
- * Make an RC file name.
- */
- LYAddPathToHome(rcfile, sizeof(rcfile), FNAME_LYNXRC);
-
- /*
- * Open the RC file for reading.
- */
- if ((fp = fopen(rcfile, "r")) == NULL) {
- return;
+ while (table->name != 0) {
+ if (table->value == value) {
+ return table->name;
+ }
+ table++;
}
+ return "?";
+}
- /*
- * Process the entries.
- */
- while (LYSafeGets(&line_buffer, fp) != NULL) {
- /*
- * Remove any trailing white space.
- */
- LYTrimTrailing(line_buffer);
-
- /*
- * Skip any comment or blank lines.
- */
- if (line_buffer[0] == '\0' || line_buffer[0] == '#')
- continue;
-
- /*
- * Find the line position of the number sign if there is one.
- */
- if ((cp = (char *)strchr(line_buffer, '#')) == NULL)
- number_sign = 999;
- else
- number_sign = cp - line_buffer;
-
- /*
- * File editor.
- */
- if (!system_editor && FIND_KEYWORD(cp, "file_editor")) {
-
- cp = SkipEquals(cp);
- StrAllocCopy(editor, cp);
-
- /*
- * Default bookmark file.
- */
- } else if (FIND_KEYWORD(cp, "bookmark_file")) {
-
- cp = SkipEquals(cp);
-
- /*
- * Since this is the "Default Bookmark File", we save it
- * as a globals, and as the first MBM_A_subbookmark entry.
- */
- StrAllocCopy(bookmark_page, cp);
- StrAllocCopy(BookmarkPage, cp);
- StrAllocCopy(MBM_A_subbookmark[0], cp);
- StrAllocCopy(MBM_A_subdescript[0], MULTIBOOKMARKS_DEFAULT);
-
- /*
- * Multiple (sub)bookmark support settings.
- */
- } else if (FIND_KEYWORD(cp, "sub_bookmarks")) {
-
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "standard", 8)) {
- LYMultiBookmarks = TRUE;
- LYMBMAdvanced = FALSE;
- } else if (!strncasecomp(cp, "advanced", 8)) {
- LYMultiBookmarks = TRUE;
- LYMBMAdvanced = TRUE;
- } else {
- LYMultiBookmarks = FALSE;
- }
-
- /*
- * Multiple (sub)bookmark definitions and descriptions.
- */
- } else if (FIND_KEYWORD(cp, "multi_bookmark")) {
-
- /*
- * Found the root, now cycle through all the
- * possible spaces and match specific ones.
- */
- for (MBM_counter = 1;
- MBM_counter <= MBM_V_MAXFILES; MBM_counter++) {
- sprintf(MBM_line, "multi_bookmark%c", (MBM_counter + 'A'));
-
- if (FIND_KEYWORD(cp, MBM_line)) {
- if ((MBM_cp1 = (char *)strchr(cp, '=')) == NULL) {
- break;
- } else {
- if ((MBM_cp2 = (char *)strchr(cp, ',')) == NULL) {
- break;
- } else {
- MBM_i2 = 0;
- /*
- * skip over the '='.
- */
- MBM_cp1++;
- while (MBM_cp1 && MBM_cp1 != MBM_cp2) {
- /*
- * Skip spaces.
- */
- if (isspace(*MBM_cp1)) {
- MBM_cp1++;
- continue;
- } else {
- MBM_line[MBM_i2++] = *MBM_cp1++;
- }
- }
- MBM_line[MBM_i2++] = '\0';
-
- StrAllocCopy(MBM_A_subbookmark[MBM_counter],
- MBM_line);
-
- /*
- * Now get the description ',' and ->.
- */
- MBM_cp1 = (char *)strchr(cp, ',');
-
- MBM_i2 = 0;
- /*
- * Skip over the ','.
- */
- MBM_cp1++;
- /*
- * Eat spaces in front of description.
- */
- MBM_cp1 = LYSkipBlanks(MBM_cp1);
- while (*MBM_cp1)
- MBM_line[MBM_i2++] = *MBM_cp1++;
- MBM_line[MBM_i2++] = '\0';
-
- StrAllocCopy(MBM_A_subdescript[MBM_counter],
- MBM_line);
-
- break;
- }
- }
- }
- }
-
- /*
- * FTP/file sorting method.
- */
- } else if (FIND_KEYWORD(cp, "file_sorting_method")) {
-
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "BY_FILENAME", 11))
- HTfileSortMethod = FILE_BY_NAME;
- else if (!strncasecomp(cp, "BY_TYPE", 7))
- HTfileSortMethod = FILE_BY_TYPE;
- else if (!strncasecomp(cp, "BY_SIZE", 7))
- HTfileSortMethod = FILE_BY_SIZE;
- else if (!strncasecomp(cp, "BY_DATE", 7))
- HTfileSortMethod = FILE_BY_DATE;
-
- /*
- * Personal mail address.
- */
- } else if (FIND_KEYWORD(cp, "personal_mail_address")) {
-
- cp = SkipEquals(cp);
- StrAllocCopy(personal_mail_address, cp);
-
- /*
- * Searching type.
- */
- } else if (FIND_KEYWORD(cp, "case_sensitive_searching")) {
-
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "on", 2))
- case_sensitive = TRUE;
- else
- case_sensitive = FALSE;
-
- /*
- * Character set.
- */
- } else if (FIND_KEYWORD(cp, "character_set")) {
-
- int i = 0;
-
- cp = SkipEquals(cp);
-
- i = UCGetLYhndl_byAnyName(cp); /* by MIME or full name */
- if (i < 0)
- ; /* do nothing here: so fallback to lynx.cfg */
- else
- current_char_set = i;
-
- /*
- * Preferred language.
- */
- } else if (FIND_KEYWORD(cp, "preferred_language")) {
-
- cp = SkipEquals(cp);
- StrAllocCopy(language, cp);
-
- /*
- * Preferred charset.
- */
- } else if (FIND_KEYWORD(cp, "preferred_charset")) {
-
- cp = SkipEquals(cp);
- StrAllocCopy(pref_charset, cp);
-
- /*
- * VI keys.
- */
- } else if (FIND_KEYWORD(cp, "vi_keys")) {
-
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "on", 2))
- vi_keys = TRUE;
- else
- vi_keys = FALSE;
-
- /*
- * EMACS keys.
- */
- } else if (FIND_KEYWORD(cp, "emacs_keys")) {
-
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "on", 2))
- emacs_keys = TRUE;
- else
- emacs_keys=FALSE;
-
- /*
- * Show dot files.
- */
- } else if (FIND_KEYWORD(cp, "show_dotfiles")) {
-
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "on", 2))
- show_dotfiles = TRUE;
- else
- show_dotfiles = FALSE;
-
- /*
- * Show color.
- */
- } else if (FIND_KEYWORD(cp, "show_color")) {
-
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "always", 6)) {
- LYrcShowColor = SHOW_COLOR_ALWAYS;
-#if defined(USE_SLANG) || defined(COLOR_CURSES)
- if (LYShowColor != SHOW_COLOR_NEVER)
- LYShowColor = SHOW_COLOR_ALWAYS;
-#endif /* USE_SLANG || COLOR_CURSES */
- } else if (!strncasecomp(cp, "never", 5)) {
- LYrcShowColor = SHOW_COLOR_NEVER;
-#if defined(COLOR_CURSES)
- if (LYShowColor == SHOW_COLOR_ON)
- LYShowColor = SHOW_COLOR_OFF;
-#endif /* COLOR_CURSES */
- }
-
- /*
- * Select popups.
- */
- } else if (FIND_KEYWORD(cp, "select_popups")) {
-
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "off", 3))
- LYSelectPopups = FALSE;
- else
- LYSelectPopups = TRUE;
-
- /*
- * Show cursor.
- */
- } else if (FIND_KEYWORD(cp, "show_cursor")) {
-
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "off", 3))
- LYShowCursor = FALSE;
- else
- LYShowCursor = TRUE;
-
- /*
- * Keypad mode.
- */
- } else if (FIND_KEYWORD(cp, "keypad_mode")) {
-
- cp = SkipEquals(cp);
- if (LYstrstr(cp, "LINKS_ARE_NUMBERED"))
- keypad_mode = LINKS_ARE_NUMBERED;
- else if (LYstrstr(cp, "LINKS_AND_FORM_FIELDS_ARE_NUMBERED"))
- keypad_mode = LINKS_AND_FORM_FIELDS_ARE_NUMBERED;
- else
- keypad_mode = NUMBERS_AS_ARROWS;
-
- /*
- * Keyboard layout.
- */
-#ifdef EXP_KEYBOARD_LAYOUT
- } else if (FIND_KEYWORD(cp, "kblayout")) {
-
- int i = 0;
-
- cp = SkipEquals(cp);
- for (; LYKbLayoutNames[i]; i++) {
- if (!strcmp(cp, LYKbLayoutNames[i])) {
- current_layout = i;
- break;
- }
- }
-#endif /* EXP_KEYBOARD_LAYOUT */
-
- /*
- * Line edit mode.
- */
- } else if (FIND_KEYWORD(cp, "lineedit_mode")) {
-
- int i = 0;
-
- cp = SkipEquals(cp);
- for (; LYLineeditNames[i]; i++) {
- if (!strncmp(cp, LYLineeditNames[i], strlen(cp))) {
- current_lineedit = i;
- break;
- }
- }
-
-#ifdef DIRED_SUPPORT
- /*
- * Directory list style.
- */
- } else if (FIND_KEYWORD(cp, "dir_list_style")) {
-
- cp = SkipEquals(cp);
- if (LYstrstr(cp, "FILES_FIRST") != NULL) {
- dir_list_style = FILES_FIRST;
- } else if (LYstrstr(cp,"DIRECTORIES_FIRST") != NULL) {
- dir_list_style = 0;
- } else {
- dir_list_style = MIXED_STYLE;
- }
-#endif /* DIRED_SUPPORT */
-
- /*
- * Accept cookies from all domains?
- */
- } else if (FIND_KEYWORD(cp, "accept_all_cookies")) {
- cp = SkipEquals(cp);
- if (LYstrstr(cp,"TRUE") != NULL) {
- LYAcceptAllCookies = TRUE;
- } else {
- LYAcceptAllCookies = FALSE;
- }
-
-
- /*
- * Accept all cookies from certain domains?
- */
- } else if (FIND_KEYWORD(cp, "cookie_accept_domains")) {
- cp = SkipEquals(cp);
- cookie_domain_flag_set(cp, FLAG_ACCEPT_ALWAYS);
- if(LYCookieAcceptDomains != NULL) {
- StrAllocCat(LYCookieAcceptDomains, ",");
- }
- StrAllocCat(LYCookieAcceptDomains, cp);
-
-
- /*
- * Reject all cookies from certain domains?
- */
- } else if (FIND_KEYWORD(cp, "cookie_reject_domains")) {
- cp = SkipEquals(cp);
- cookie_domain_flag_set(cp, FLAG_REJECT_ALWAYS);
- if(LYCookieRejectDomains != NULL) {
- StrAllocCat(LYCookieRejectDomains, ",");
- }
- StrAllocCat(LYCookieRejectDomains, cp);
-
- /*
- * Cookie domains to perform loose checks?
- */
- } else if (FIND_KEYWORD(cp, "cookie_loose_invalid_domains")) {
- cp = SkipEquals(cp);
- StrAllocCopy(LYCookieLooseCheckDomains, cp);
- cookie_domain_flag_set(cp, FLAG_INVCHECK_LOOSE);
-
- /*
- * Cookie domains to perform strict checks?
- */
- } else if (FIND_KEYWORD(cp, "cookie_strict_invalid_domains")) {
- cp = SkipEquals(cp);
- StrAllocCopy(LYCookieStrictCheckDomains, cp);
- cookie_domain_flag_set(cp, FLAG_INVCHECK_STRICT);
-
- /*
- * Cookie domains to query user over invalid cookies?
- */
- } else if (FIND_KEYWORD(cp, "cookie_query_invalid_domains")) {
- cp = SkipEquals(cp);
- StrAllocCopy(LYCookieQueryCheckDomains, cp);
- cookie_domain_flag_set(cp, FLAG_INVCHECK_QUERY);
-
-#ifdef EXP_PERSISTENT_COOKIES
- /*
- * File in which to store persistent cookies.
- */
- } else if (FIND_KEYWORD(cp, "cookie_file")) {
- cp = SkipEquals(cp);
- StrAllocCopy(LYCookieFile, cp);
-#endif /* EXP_PERSISTENT_COOKIES */
-
- /*
- * User mode.
- */
- } else if (FIND_KEYWORD(cp, "user_mode")) {
-
- cp = SkipEquals(cp);
- if (LYstrstr(cp, "ADVANCED") != NULL) {
- user_mode = ADVANCED_MODE;
- } else if (LYstrstr(cp,"INTERMEDIATE") != NULL) {
- user_mode = INTERMEDIATE_MODE;
- } else {
- user_mode = NOVICE_MODE;
- }
-
-#ifdef NOTUSED
-#ifdef DISP_PARTIAL
- /*
- * Partial display logic--set the threshold # of lines before
- * Lynx redraws the screen
- */
- } else if (FIND_KEYWORD(cp, "partial_thres")) {
- cp = SkipEquals(cp);
- if (atoi(cp) != 0)
- partial_threshold = atoi(cp);
-#endif /* DISP_PARTIAL */
-#endif /* NOTUSED */
-
-#ifdef ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS
- /*
- * Local execution mode - all links.
- */
- } else if (FIND_KEYWORD(cp, "run_all_execution_links")) {
-
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "on", 2))
- local_exec = TRUE;
- else
- local_exec = FALSE;
-
- /*
- * Local execution mode - only links in local files.
- */
- } else if (FIND_KEYWORD(cp, "run_execution_links_on_local_files")) {
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "on", 2))
- local_exec_on_local_files = TRUE;
- else
- local_exec_on_local_files=FALSE;
-#endif /* ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
+PRIVATE BOOL LYgetEnum ARGS3(
+ Config_Enum *, table,
+ char *, src,
+ int *, value)
+{
+ while (table->name != 0) {
+ if (!strncasecomp(table->name, src, strlen(table->name))) {
+ *value = table->value;
+ return TRUE;
+ }
+ table++;
+ }
+ if (table->value >= 0) /* is there a default? */
+ *value = table->value;
+ return FALSE;
+}
- } else if (FIND_KEYWORD(cp, "verbose_images")) {
- cp = SkipEquals(cp);
- if (!strncasecomp(cp, "on", 2))
- verbose_img = 1;
- else if (!strncasecomp(cp, "off", 3))
- verbose_img = 0;
+/* these are for data that are normally not read/written from .lynxrc */
+#define PARSE_SET(n,v,h) {n, 1, CONF_BOOL, UNION_SET(v), 0, 0, 0, h}
+#define PARSE_ARY(n,v,t,h) {n, 1, CONF_ARRAY, UNION_INT(v), t, 0, 0, h}
+#define PARSE_ENU(n,v,t,h) {n, 1, CONF_ENUM, UNION_INT(v), 0, t, 0, h}
+#define PARSE_LIS(n,v,h) {n, 1, CONF_LIS, UNION_STR(v), 0, 0, 0, h}
+#define PARSE_STR(n,v,h) {n, 1, CONF_STR, UNION_STR(v), 0, 0, 0, h}
+#define PARSE_FUN(n,v,w,h) {n, 1, CONF_FUN, UNION_FUN(v), 0, 0, w, h}
+#define PARSE_MBM(n,h) {n, 1, CONF_MBM, UNION_DEF(0), 0, 0, 0, h}
+
+/* these are for data that are optionally read/written from .lynxrc */
+#define MAYBE_SET(n,v,h) {n, 0, CONF_BOOL, UNION_SET(v), 0, 0, 0, h}
+#define MAYBE_ARY(n,v,t,h) {n, 0, CONF_ARRAY, UNION_INT(v), t, 0, 0, h}
+#define MAYBE_ENU(n,v,t,h) {n, 0, CONF_ENUM, UNION_INT(v), 0, t, 0, h}
+#define MAYBE_LIS(n,v,h) {n, 0, CONF_LIS, UNION_STR(v), 0, 0, 0, h}
+#define MAYBE_STR(n,v,h) {n, 0, CONF_STR, UNION_STR(v), 0, 0, 0, h}
+#define MAYBE_FUN(n,v,w,h) {n, 0, CONF_FUN, UNION_FUN(v), 0, 0, w, h}
+#define MAYBE_MBM(n,h) {n, 0, CONF_MBM, UNION_DEF(0), 0, 0, 0, h}
+
+#define PARSE_NIL {NULL, 1, 0, UNION_DEF(0), 0, 0, 0, 0}
+
+typedef enum {
+ CONF_UNSPECIFIED = 0
+ ,CONF_ARRAY
+ ,CONF_BOOL
+ ,CONF_FUN
+ ,CONF_INT
+ ,CONF_ENUM
+ ,CONF_LIS
+ ,CONF_MBM
+ ,CONF_STR
+} Conf_Types;
+
+typedef struct config_type
+{
+ CONST char *name;
+ int enabled; /* see lynx.cfg ENABLE_LYNXRC */
+ Conf_Types type;
+ ParseData;
+ char **strings;
+ Config_Enum *table;
+ void (*write_it) PARAMS((FILE * fp, struct config_type *));
+ char *note;
+} Config_Type;
+
+PRIVATE int get_assume_charset ARGS1(char *, value)
+{
+ int i;
- } /* end of if */
+ for (i = 0; i < LYNumCharsets; ++i) {
+ if (!strcasecomp(value, LYCharSet_UC[i].MIMEname)) {
+ UCLYhndl_for_unspec = i;
+ break;
+ }
+ }
+ return 0;
+}
- } /* end of while */
+PRIVATE void put_assume_charset ARGS2(FILE *, fp, struct config_type *, tbl)
+{
+ int i;
- fclose(fp);
-} /* big end */
+ for (i = 0; i < LYNumCharsets; ++i)
+ fprintf(fp, "# %s\n", LYCharSet_UC[i].MIMEname);
+ fprintf(fp, "%s=%s\n\n", tbl->name, LYCharSet_UC[UCLYhndl_for_unspec].MIMEname);
+}
-/*
- * Write a set of comments. Doing it this way avoids preprocessor problems
- * with the leading '#', makes it simpler to use gettext.
- */
-PRIVATE void write_list ARGS2(
- FILE *, fp,
- char *, list)
+PRIVATE int get_display_charset ARGS1(char *, value)
{
- int first = TRUE;
- while (*list != 0) {
- int ch = *list++;
- if (ch == '\n') {
- first = TRUE;
- } else {
- if (first) {
- fputs("# ", fp);
- first = FALSE;
- }
- }
- fputc(ch, fp);
- }
+ int i = 0;
+
+ i = UCGetLYhndl_byAnyName(value); /* by MIME or full name */
+ if (i >= 0)
+ current_char_set = i;
+ return 0;
}
-PUBLIC int save_rc NOPARAMS
+PRIVATE void put_display_charset ARGS2(FILE *, fp, struct config_type *, tbl)
{
- char rcfile[LY_MAXPATH];
- FILE *fp;
int i;
- int MBM_c;
- /*
- * Make a name.
- */
- LYAddPathToHome(rcfile, sizeof(rcfile), FNAME_LYNXRC);
+ for (i = 0; LYchar_set_names[i]; i++)
+ fprintf(fp, "# %s\n", LYchar_set_names[i]);
+ fprintf(fp, "%s=%s\n\n", tbl->name, LYchar_set_names[current_char_set]);
+}
- /*
- * Open the file for write.
- */
- if ((fp = LYNewTxtFile(rcfile)) == NULL) {
- return FALSE;
- }
+PRIVATE int get_editor ARGS1(char *, value)
+{
+ if (!system_editor)
+ StrAllocCopy(editor, value);
+ return 0;
+}
- /*
- * Header.
- */
- write_list(fp, gettext("\
-Lynx User Defaults File\n\
-\n\
-This file contains options saved from the Lynx Options Screen (normally\n\
-with the '>' key). There is normally no need to edit this file manually,\n\
-since the defaults here can be controlled from the Options Screen, and the\n\
-next time options are saved from the Options Screen this file will be\n\
-completely rewritten. You have been warned...\n\
-If you are looking for the general configuration file - it is normally\n\
-called lynx.cfg, and it has different content and a different format.\n\
-It is not this file.\n\
-"));
- fprintf(fp, "\n");
+PRIVATE void put_editor ARGS2(FILE *, fp, struct config_type *, tbl)
+{
+ fprintf(fp, "%s=%s\n\n", tbl->name, NonNull(editor));
+}
- /*
- * File editor
- */
- write_list(fp, gettext("\
+/* This table is searched ignoring case */
+static Config_Type Config_Table [] =
+{
+ MAYBE_ENU("DTD_recovery", Old_DTD, tbl_DTD_recovery,
+ MSG_ENABLE_LYNXRC),
+ PARSE_SET("accept_all_cookies", LYAcceptAllCookies, N_("\
+accept_all_cookies allows the user to tell Lynx to automatically\n\
+accept all cookies if desired. The default is \"FALSE\" which will\n\
+prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n\
+all cookies.\n\
+")),
+ MAYBE_FUN("assume_char_set", get_assume_charset, put_assume_charset, MSG_ENABLE_LYNXRC),
+ PARSE_STR("bookmark_file", bookmark_page, N_("\
+bookmark_file specifies the name and location of the default bookmark\n\
+file into which the user can paste links for easy access at a later\n\
+date.\n\
+")),
+ PARSE_SET("case_sensitive_searching", case_sensitive, N_("\
+If case_sensitive_searching is \"on\" then when the user invokes a search\n\
+using the 's' or '/' keys, the search performed will be case sensitive\n\
+instead of case INsensitive. The default is usually \"off\".\n\
+")),
+ PARSE_FUN("character_set", get_display_charset, put_display_charset, N_("\
+The character_set definition controls the representation of 8 bit\n\
+characters for your terminal. If 8 bit characters do not show up\n\
+correctly on your screen you may try changing to a different 8 bit\n\
+set or using the 7 bit character approximations.\n\
+Current valid characters sets are:\n\
+")),
+ PARSE_LIS("cookie_accept_domains", LYCookieAcceptDomains, N_("\
+cookie_accept_domains and cookie_reject_domains are comma-delimited\n\
+lists of domains from which Lynx should automatically accept or reject\n\
+all cookies. If a domain is specified in both options, rejection will\n\
+take precedence. The accept_all_cookies parameter will override any\n\
+settings made here.\n\
+")),
+#ifdef EXP_PERSISTENT_COOKIES
+ PARSE_STR("cookie_file", LYCookieFile, N_("\
+cookie_file specifies the file from which to read persistent cookies.\n\
+The default is ~/.lynx_cookies.\n\
+")),
+#endif
+ PARSE_STR("cookie_loose_invalid_domains", LYCookieLooseCheckDomains, N_("\
+cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n\
+cookie_query_invalid_domains are comma-delimited lists of which domains\n\
+should be subjected to varying degrees of validity checking. If a\n\
+domain is set to strict checking, strict conformance to RFC2109 will\n\
+be applied. A domain with loose checking will be allowed to set cookies\n\
+with an invalid path or domain attribute. All domains will default to\n\
+querying the user for an invalid path or domain.\n\
+")),
+ PARSE_STR("cookie_query_invalid_domains", LYCookieQueryCheckDomains, NULL),
+ PARSE_LIS("cookie_reject_domains", LYCookieRejectDomains, NULL),
+ PARSE_STR("cookie_strict_invalid_domains", LYCookieStrictCheckDomains, NULL),
+#ifdef DIRED_SUPPORT
+ PARSE_ENU("dir_list_style", dir_list_style, tbl_dir_list_style, N_("\
+dir_list_styles specifies the directory list style under DIRED_SUPPORT\n\
+(if implemented). The default is \"MIXED_STYLE\", which sorts both\n\
+files and directories together. \"FILES_FIRST\" lists files first and\n\
+\"DIRECTORIES_FIRST\" lists directories first.\n\
+")),
+#endif
+ MAYBE_STR("display", x_display, MSG_ENABLE_LYNXRC),
+ PARSE_SET("emacs_keys", emacs_keys, N_("\
+If emacs_keys is to \"on\" then the normal EMACS movement keys:\n\
+ ^N = down ^P = up\n\
+ ^B = left ^F = right\n\
+will be enabled.\n\
+")),
+ PARSE_FUN("file_editor", get_editor, put_editor, N_("\
file_editor specifies the editor to be invoked when editing local files\n\
or sending mail. If no editor is specified, then file editing is disabled\n\
unless it is activated from the command line, and the built-in line editor\n\
will be used for sending mail.\n\
-"));
- fprintf(fp, "file_editor=%s\n\n", (editor ? editor : ""));
-
- /*
- * Default bookmark file.
- */
- write_list(fp, gettext("\
-bookmark_file specifies the name and location of the default bookmark\n\
-file into which the user can paste links for easy access at a later\n\
-date.\n\
-"));
- fprintf(fp, "bookmark_file=%s\n\n", (bookmark_page ? bookmark_page : ""));
-
- /*
- * Multiple (sub)bookmark support settings.
- */
- write_list(fp, gettext("\
-If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n\
-been defined (see below), then all bookmark operations will first\n\
-prompt the user to select an active sub-bookmark file. If the default\n\
-Lynx bookmark_file is defined (see above), it will be used as the\n\
-default selection. When this option is set to \"advanced\", and the\n\
-user mode is advanced, the 'v'iew bookmark command will invoke a\n\
-statusline prompt instead of the menu seen in novice and intermediate\n\
-user modes. When this option is set to \"standard\", the menu will be\n\
-presented regardless of user mode.\n\
-"));
- fprintf(fp, "sub_bookmarks=%s\n\n", (LYMultiBookmarks ?
- (LYMBMAdvanced ?
- "advanced" : "standard")
- : "off"));
-
- /*
- * Multiple (sub)bookmark definitions and descriptions.
- */
- write_list(fp, gettext("\
-The following allow you to define sub-bookmark files and descriptions.\n\
-The format is multi_bookmark<capital_letter>=<filename>,<description>\n\
-Up to 26 bookmark files (for the English capital letters) are allowed.\n\
-We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n\
-"));
- for (MBM_c = 1; MBM_c <= MBM_V_MAXFILES; MBM_c++)
- fprintf(fp, "multi_bookmark%c=%s%s%s\n",
- (MBM_c + 'A'),
- (MBM_A_subbookmark[MBM_c] ?
- MBM_A_subbookmark[MBM_c] : ""),
- (MBM_A_subbookmark[MBM_c] ?
- "," : ""),
- (MBM_A_subdescript[MBM_c] ?
- MBM_A_subdescript[MBM_c] : ""));
- fprintf(fp, "\n");
-
- /*
- * FTP/file sorting method.
- */
- write_list(fp, gettext("\
+")),
+ PARSE_ENU("file_sorting_method", HTfileSortMethod, tbl_file_sort, N_("\
The file_sorting_method specifies which value to sort on when viewing\n\
file lists such as FTP directories. The options are:\n\
BY_FILENAME -- sorts on the name of the file\n\
BY_TYPE -- sorts on the type of the file\n\
BY_SIZE -- sorts on the size of the file\n\
BY_DATE -- sorts on the date of the file\n\
-"));
- fprintf(fp, "file_sorting_method=%s\n\n",
- (HTfileSortMethod == FILE_BY_NAME ? "BY_FILENAME"
- :
- (HTfileSortMethod == FILE_BY_SIZE ? "BY_SIZE"
- :
- (HTfileSortMethod == FILE_BY_TYPE ? "BY_TYPE"
- : "BY_DATE"))));
-
- /*
- * Personal mail address.
- */
- write_list(fp, gettext("\
+")),
+#ifdef EXP_KEYBOARD_LAYOUT
+ PARSE_ARY("kblayout", current_layout, LYKbLayoutNames, NULL),
+#endif
+ PARSE_ENU("keypad_mode", keypad_mode, tbl_keypad_mode, NULL),
+ PARSE_ARY("lineedit_mode", current_lineedit, LYLineeditNames, N_("\
+lineedit_mode specifies the key binding used for inputting strings in\n\
+prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n\
+the following control characters are used for moving and deleting:\n\
+\n\
+ Prev Next Enter = Accept input\n\
+ Move char: <- -> ^G = Cancel input\n\
+ Move word: ^P ^N ^U = Erase line\n\
+ Delete char: ^H ^R ^A = Beginning of line\n\
+ Delete word: ^B ^F ^E = End of line\n\
+\n\
+Current lineedit modes are:\n\
+")),
+ MAYBE_SET("make_pseudo_alts_for_inlines", pseudo_inline_alts, MSG_ENABLE_LYNXRC),
+ MAYBE_SET("make_links_for_all_images", clickable_images, MSG_ENABLE_LYNXRC),
+ PARSE_MBM("multi_bookmark", N_("\
+The following allow you to define sub-bookmark files and descriptions.\n\
+The format is multi_bookmark<capital_letter>=<filename>,<description>\n\
+Up to 26 bookmark files (for the English capital letters) are allowed.\n\
+We start with \"multi_bookmarkB\" since 'A' is the default (see above).\n\
+")),
+ PARSE_STR("personal_mail_address", personal_mail_address, N_("\
personal_mail_address specifies your personal mail address. The\n\
address will be sent during HTTP file transfers for authorization and\n\
logging purposes, and for mailed comments.\n\
@@ -666,52 +350,8 @@ If you do not want this information given out, set the NO_FROM_HEADER\n\
to TRUE in lynx.cfg, or use the -nofrom command line switch. You also\n\
could leave this field blank, but then you won't have it included in\n\
your mailed comments.\n\
-"));
- fprintf(fp, "personal_mail_address=%s\n\n",
- (personal_mail_address ? personal_mail_address : ""));
-
- /*
- * Searching type.
- */
- write_list(fp, gettext("\
-If case_sensitive_searching is \"on\" then when the user invokes a search\n\
-using the 's' or '/' keys, the search performed will be case sensitive\n\
-instead of case INsensitive. The default is usually \"off\".\n\
-"));
- fprintf(fp, "case_sensitive_searching=%s\n\n",
- (case_sensitive ? "on" : "off"));
-
- /*
- * Character set.
- */
- write_list(fp, gettext("\
-The character_set definition controls the representation of 8 bit\n\
-characters for your terminal. If 8 bit characters do not show up\n\
-correctly on your screen you may try changing to a different 8 bit\n\
-set or using the 7 bit character approximations.\n\
-Current valid characters sets are:\n\
-"));
- for (i = 0; LYchar_set_names[i]; i++)
- fprintf(fp, "# %s\n", LYchar_set_names[i]);
- fprintf(fp, "character_set=%s\n\n", LYchar_set_names[current_char_set]);
-
-
- /*
- * Preferred language.
- */
- write_list(fp, gettext("\
-preferred_language specifies the language in MIME notation (e.g., en,\n\
-fr, may be a comma-separated list in decreasing preference)\n\
-which Lynx will indicate you prefer in requests to http servers.\n\
-If a file in that language is available, the server will send it.\n\
-Otherwise, the server will send the file in it's default language.\n\
-"));
- fprintf(fp, "preferred_language=%s\n\n", (language ? language : ""));
-
- /*
- * Preferred charset.
- */
- write_list(fp, gettext("\
+")),
+ PARSE_STR("preferred_charset", pref_charset, N_("\
preferred_charset specifies the character set in MIME notation (e.g.,\n\
ISO-8859-2, ISO-8859-5) which Lynx will indicate you prefer in requests\n\
to http servers using an Accept-Charset header. The value should NOT\n\
@@ -724,15 +364,53 @@ and if the server cannot send a response which is acceptable\n\
according to the Accept-Charset header, then the server SHOULD send\n\
an error response, though the sending of an unacceptable response\n\
is also allowed.\n\
-"));
- fprintf(fp, "preferred_charset=%s\n\n",
- (pref_charset ? pref_charset : ""));
-
- /*
- * Show color.
- */
- if (LYChosenShowColor != SHOW_COLOR_UNKNOWN) {
- write_list(fp, gettext("\
+")),
+ PARSE_STR("preferred_language", language, N_("\
+preferred_language specifies the language in MIME notation (e.g., en,\n\
+fr, may be a comma-separated list in decreasing preference)\n\
+which Lynx will indicate you prefer in requests to http servers.\n\
+If a file in that language is available, the server will send it.\n\
+Otherwise, the server will send the file in it's default language.\n\
+")),
+ MAYBE_SET("raw_mode", LYRawMode, MSG_ENABLE_LYNXRC),
+#if defined(ENABLE_OPTS_CHANGE_EXEC) && (defined(EXEC_LINKS) || defined(EXEC_SCRIPTS))
+ PARSE_SET("run_all_execution_links", local_exec, N_("\
+If run_all_execution_links is set \"on\" then all local execution links\n\
+will be executed when they are selected.\n\
+\n\
+WARNING - This is potentially VERY dangerous. Since you may view\n\
+ information that is written by unknown and untrusted sources\n\
+ there exists the possibility that Trojan horse links could be\n\
+ written. Trojan horse links could be written to erase files\n\
+ or compromise security. This should only be set to \"on\" if\n\
+ you are viewing trusted source information.\n\
+")),
+ PARSE_SET("run_execution_links_on_local_files", local_exec_on_local_files, N_("\
+If run_execution_links_on_local_files is set \"on\" then all local\n\
+execution links that are found in LOCAL files will be executed when they\n\
+are selected. This is different from run_all_execution_links in that\n\
+only files that reside on the local system will have execution link\n\
+permissions.\n\
+\n\
+WARNING - This is potentially dangerous. Since you may view\n\
+ information that is written by unknown and untrusted sources\n\
+ there exists the possibility that Trojan horse links could be\n\
+ written. Trojan horse links could be written to erase files\n\
+ or compromise security. This should only be set to \"on\" if\n\
+ you are viewing trusted source information.\n\
+")),
+#endif
+ PARSE_SET("select_popups", LYSelectPopups, N_("\
+select_popups specifies whether the OPTIONs in a SELECT block which\n\
+lacks a MULTIPLE attribute are presented as a vertical list of radio\n\
+buttons or via a popup menu. Note that if the MULTIPLE attribute is\n\
+present in the SELECT start tag, Lynx always will create a vertical list\n\
+of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n\
+as the default while a value of \"off\" will set use of radio boxes.\n\
+The default can be overridden via the -popup command line toggle.\n\
+")),
+ MAYBE_SET("set_cookies", LYSetCookies, MSG_ENABLE_LYNXRC),
+ PARSE_ENU("show_color", LYrcShowColor, tbl_show_colors, N_("\
show_color specifies how to set the color mode at startup. A value of\n\
\"never\" will force color mode off (treat the terminal as monochrome)\n\
at startup even if the terminal appears to be color capable. A value of\n\
@@ -748,82 +426,270 @@ the -color and -nocolor command line switches.\n\
The mode set at startup can be changed via the \"show color\" option in\n\
the 'o'ptions menu. If the option settings are saved, the \"on\" and\n\
\"off\" \"show color\" settings will be treated as \"default\".\n\
-"));
- fprintf(fp, "show_color=%s\n\n",
- ((LYChosenShowColor == SHOW_COLOR_NEVER ? "never" :
- (LYChosenShowColor == SHOW_COLOR_ALWAYS ? "always" :
- "default"))));
- }
-
- /*
- * VI keys.
- */
- write_list(fp, gettext("\
+")),
+ PARSE_SET("show_cursor", LYShowCursor, N_("\
+show_cursor specifies whether to 'hide' the cursor to the right (and\n\
+bottom, if possible) of the screen, or to place it to the left of the\n\
+current link in documents, or current option in select popup windows.\n\
+Positioning the cursor to the left of the current link or option is\n\
+helpful for speech or braille interfaces, and when the terminal is\n\
+one which does not distinguish the current link based on highlighting\n\
+or color. A value of \"on\" will set positioning to the left as the\n\
+default while a value of \"off\" will set 'hiding' of the cursor.\n\
+The default can be overridden via the -show_cursor command line toggle.\n\
+")),
+ PARSE_SET("show_dotfiles", show_dotfiles, N_("\
+show_dotfiles specifies that the directory listing should include\n\
+\"hidden\" (dot) files/directories. If set \"on\", this will be\n\
+honored only if enabled via userdefs.h and/or lynx.cfg, and not\n\
+restricted via a command line switch. If display of hidden files\n\
+is disabled, creation of such files via Lynx also is disabled.\n\
+")),
+#ifdef EXP_READPROGRESS
+ MAYBE_ENU("show_rate", LYTransferRate, tbl_transfer_rate,
+ MSG_ENABLE_LYNXRC),
+#endif
+ PARSE_ENU("sub_bookmarks", LYMultiBookmarks, tbl_multi_bookmarks, N_("\
+If sub_bookmarks is not turned \"off\", and multiple bookmarks have\n\
+been defined (see below), then all bookmark operations will first\n\
+prompt the user to select an active sub-bookmark file. If the default\n\
+Lynx bookmark_file is defined (see above), it will be used as the\n\
+default selection. When this option is set to \"advanced\", and the\n\
+user mode is advanced, the 'v'iew bookmark command will invoke a\n\
+statusline prompt instead of the menu seen in novice and intermediate\n\
+user modes. When this option is set to \"standard\", the menu will be\n\
+presented regardless of user mode.\n\
+")),
+ MAYBE_STR("user_agent", LYUserAgent, MSG_ENABLE_LYNXRC),
+ PARSE_ENU("user_mode", user_mode, tbl_user_mode, N_("\
+user_mode specifies the users level of knowledge with Lynx. The\n\
+default is \"NOVICE\" which displays two extra lines of help at the\n\
+bottom of the screen to aid the user in learning the basic Lynx\n\
+commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n\
+Use \"ADVANCED\" to see the URL of the currently selected link at the\n\
+bottom of the screen.\n\
+")),
+ PARSE_SET("verbose_images", verbose_img, N_("\
+If verbose_images is \"on\", lynx will print the name of the image\n\
+source file in place of [INLINE], [LINK] or [IMAGE]\n\
+See also VERBOSE_IMAGES in lynx.cfg\n\
+")),
+ PARSE_SET("vi_keys", vi_keys, N_("\
If vi_keys is set to \"on\", then the normal VI movement keys:\n\
j = down k = up\n\
h = left l = right\n\
will be enabled. These keys are only lower case.\n\
Capital 'H', 'J' and 'K will still activate help, jump shortcuts,\n\
and the keymap display, respectively.\n\
-"));
- fprintf(fp, "vi_keys=%s\n\n", (vi_keys ? "on" : "off"));
+")),
+ PARSE_ENU("visited_links", Visited_Links_As, tbl_visited_links, N_("\
+The visited_links setting controls how Lynx organizes the information\n\
+in the Visited Links Page.\n\
+")),
- /*
- * EMACS keys.
- */
- write_list(fp, gettext("\
-If emacs_keys is to \"on\" then the normal EMACS movement keys:\n\
- ^N = down ^P = up\n\
- ^B = left ^F = right\n\
-will be enabled.\n\
-"));
- fprintf(fp, "emacs_keys=%s\n\n", (emacs_keys ? "on" : "off"));
+ PARSE_NIL
+};
- /*
- * Show dot files.
- */
- write_list(fp, gettext("\
-show_dotfiles specifies that the directory listing should include\n\
-\"hidden\" (dot) files/directories. If set \"on\", this will be\n\
-honored only if enabled via userdefs.h and/or lynx.cfg, and not\n\
-restricted via a command line switch. If display of hidden files\n\
-is disabled, creation of such files via Lynx also is disabled.\n\
-"));
- fprintf(fp, "show_dotfiles=%s\n\n", (show_dotfiles ? "on" : "off"));
+PRIVATE Config_Type *lookup_config ARGS1(
+ char *, name)
+{
+ Config_Type *tbl = Config_Table;
+ char ch = (char) TOUPPER(*name);
- /*
- * Select popups.
- */
- write_list(fp, gettext("\
-select_popups specifies whether the OPTIONs in a SELECT block which\n\
-lacks a MULTIPLE attribute are presented as a vertical list of radio\n\
-buttons or via a popup menu. Note that if the MULTIPLE attribute is\n\
-present in the SELECT start tag, Lynx always will create a vertical list\n\
-of checkboxes for the OPTIONs. A value of \"on\" will set popup menus\n\
-as the default while a value of \"off\" will set use of radio boxes.\n\
-The default can be overridden via the -popup command line toggle.\n\
-"));
- fprintf(fp, "select_popups=%s\n\n", (LYSelectPopups ? "on" : "off"));
+ while (tbl->name != 0) {
+ if (tbl->enabled) {
+ char ch1 = tbl->name[0];
+
+ if ((ch == TOUPPER(ch1))
+ && (0 == strcasecomp (name, tbl->name)))
+ break;
+ }
+
+ tbl++;
+ }
+ return tbl;
+}
+
+/* Read and process user options.
+ * If the passed-in fp is NULL, open the regular user defaults file
+ * for reading, otherwise use fp which has to be a file open for
+ * reading. - kw
+ */
+PUBLIC void read_rc ARGS1(FILE *, fp)
+{
+ char *buffer = NULL;
+ char rcfile[LY_MAXPATH];
+ char MBM_line[256];
+ int n;
+
+ if (!fp) {
+ /*
+ * Make an RC file name, open it for reading.
+ */
+ LYAddPathToHome(rcfile, sizeof(rcfile), FNAME_LYNXRC);
+ if ((fp = fopen(rcfile, TXT_R)) == NULL) {
+ return;
+ }
+ }
/*
- * Show cursor.
+ * Process the entries.
*/
- write_list(fp, gettext("\
-show_cursor specifies whether to 'hide' the cursor to the right (and\n\
-bottom, if possible) of the screen, or to place it to the left of the\n\
-current link in documents, or current option in select popup windows.\n\
-Positioning the cursor to the left of the current link or option is\n\
-helpful for speech or braille interfaces, and when the terminal is\n\
-one which does not distinguish the current link based on highlighting\n\
-or color. A value of \"on\" will set positioning to the left as the\n\
-default while a value of \"off\" will set 'hiding' of the cursor.\n\
-The default can be overridden via the -show_cursor command line toggle.\n\
-"));
- fprintf(fp, "show_cursor=%s\n\n", (LYShowCursor ? "on" : "off"));
+ while (LYSafeGets(&buffer, fp) != NULL) {
+ char *name, *value, *notes;
+ Config_Type *tbl;
+ ParseUnionPtr q;
+
+ /* Most lines in the config file are comment lines. Weed them out
+ * now. Also, leading whitespace is ok, so trim it.
+ */
+ LYTrimTrailing(buffer);
+ name = LYSkipBlanks(buffer);
+ if (ispunct(UCH(*name)) || *name == '\0')
+ continue;
+
+ /*
+ * Parse the "name=value" strings.
+ */
+ if ((value = strchr(name, '=')) == 0)
+ continue;
+ *value++ = '\0';
+ LYTrimTrailing(name);
+ value = LYSkipBlanks(value);
+ tbl = lookup_config(name);
+ if (tbl->name == 0) {
+ char *special = "multi_bookmark";
+ if (!strncasecomp(name, special, strlen(special))) {
+ tbl = lookup_config(special);
+ }
+ /* lynx ignores unknown keywords */
+ if (tbl->name == 0)
+ continue;
+ }
+
+ q = ParseUnionOf(tbl);
+ switch (tbl->type) {
+ case CONF_BOOL:
+ if (q->set_value != 0)
+ *(q->set_value) = getBool (value);
+ break;
+
+ case CONF_FUN:
+ if (q->fun_value != 0)
+ (*(q->fun_value)) (value);
+ break;
+
+ case CONF_ARRAY:
+ for (n = 0; tbl->strings[n] != 0; ++n) {
+ if (!strcasecomp(value, tbl->strings[n])) {
+ *(q->int_value) = n;
+ break;
+ }
+ }
+ break;
+
+ case CONF_ENUM:
+ if (tbl->table != 0)
+ LYgetEnum(tbl->table, value, q->int_value);
+ break;
+
+ case CONF_INT:
+ if (q->int_value != 0) {
+ int ival;
+ if (1 == sscanf (value, "%d", &ival))
+ *(q->int_value) = ival;
+ }
+ break;
+
+ case CONF_LIS:
+ if (q->str_value != 0) {
+ if (*(q->str_value) != NULL)
+ StrAllocCat(*(q->str_value), ",");
+ StrAllocCat(*(q->str_value), value);
+ }
+ break;
+
+ case CONF_MBM:
+ for (n = 1; n <= MBM_V_MAXFILES; n++) {
+ sprintf(MBM_line, "multi_bookmark%c", LYindex2MBM(n));
+
+ if (!strcasecomp(name, MBM_line)) {
+ if ((notes = strchr(value, ',')) != 0) {
+ *notes++ = '\0';
+ LYTrimTrailing(value);
+ notes = LYSkipBlanks(notes);
+ } else {
+ notes = value + strlen(value);
+ }
+ StrAllocCopy(MBM_A_subbookmark[n], value);
+ StrAllocCopy(MBM_A_subdescript[n], notes);
+ break;
+ }
+ }
+ break;
+
+ case CONF_STR:
+ if (q->str_value != 0)
+ StrAllocCopy(*(q->str_value), value);
+ break;
+
+ case CONF_UNSPECIFIED:
+ break;
+ }
+ }
+
+ LYCloseInput(fp);
+ LYConfigCookies(); /* update cookie settings, if any */
+#if defined(USE_SLANG) || defined(COLOR_CURSES)
/*
- * Keypad mode.
- */
+ * We may override the commandline "-color" option with the .lynxrc file
+ */
+ switch (LYrcShowColor) {
+ case SHOW_COLOR_ALWAYS:
+ if (LYShowColor != SHOW_COLOR_NEVER)
+ LYShowColor = SHOW_COLOR_ALWAYS;
+ break;
+ case SHOW_COLOR_NEVER:
+ if (LYShowColor == SHOW_COLOR_ON)
+ LYShowColor = SHOW_COLOR_OFF;
+ break;
+ default:
+ /* don't override */
+ break;
+ }
+#endif
+ set_default_bookmark_page(bookmark_page);
+}
+
+/*
+ * Write a set of comments. Doing it this way avoids preprocessor problems
+ * with the leading '#', makes it simpler to use gettext.
+ */
+PRIVATE void write_list ARGS2(
+ FILE *, fp,
+ char *, list)
+{
+ int first = TRUE;
+ while (*list != 0) {
+ int ch = *list++;
+ if (ch == '\n') {
+ first = TRUE;
+ } else {
+ if (first) {
+ fputs("# ", fp);
+ first = FALSE;
+ }
+ }
+ fputc(ch, fp);
+ }
+}
+
+/*
+ * This is too long for some compilers.
+ */
+PRIVATE void explain_keypad_mode ARGS1(FILE *, fp)
+{
write_list(fp, gettext("\
If keypad_mode is set to \"NUMBERS_AS_ARROWS\", then the numbers on\n\
your keypad when the numlock is on will act as arrow keys:\n\
@@ -851,202 +717,154 @@ NOTE: Some fixed format documents may look disfigured when\n\
\"LINKS_ARE_NUMBERED\" or \"LINKS_AND_FORM_FIELDS_ARE_NUMBERED\" are\n\
enabled.\n\
"));
- fprintf(fp, "keypad_mode=%s\n\n",
- ((keypad_mode == NUMBERS_AS_ARROWS) ? "NUMBERS_AS_ARROWS" :
- ((keypad_mode == LINKS_ARE_NUMBERED) ? "LINKS_ARE_NUMBERED" :
- "LINKS_AND_FORM_FIELDS_ARE_NUMBERED")));
+}
-#ifdef NOTUSED
-#ifdef DISP_PARTIAL
- /*
- * Partial display threshold
- */
- write_list(fp, gettext("\
-partial_thres specifies the number of lines Lynx should download and render\n\
-before we redraw the screen in Partial Display logic\n\
-e.g., partial_thres=2\n\
-would have Lynx redraw every 2 lines that it renders\n\
-partial_thres=-1 would use the entire screensize\n\
-"));
- fprintf(fp, "partial_thres=%d\n\n", partial_threshold);
-#endif /* DISP_PARTIAL */
-#endif /* NOTUSED */
+/* Save user options.
+ * If the passed-in fp is NULL, open the regular user defaults file
+ * for writing, otherwise use fp which has to be a temp file open for
+ * writing. - kw
+ */
+PUBLIC int save_rc ARGS1(FILE *, fp)
+{
+ Config_Type *tbl = Config_Table;
+ char rcfile[LY_MAXPATH];
+ BOOLEAN is_tempfile = (BOOL) (fp != NULL);
+ int n;
- /*
- * Line edit mode.
- */
- write_list(fp, gettext("\
-lineedit_mode specifies the key binding used for inputting strings in\n\
-prompts and forms. If lineedit_mode is set to \"Default Binding\" then\n\
-the following control characters are used for moving and deleting:\n\
-\n\
- Prev Next Enter = Accept input\n\
- Move char: <- -> ^G = Cancel input\n\
- Move word: ^P ^N ^U = Erase line\n\
- Delete char: ^H ^R ^A = Beginning of line\n\
- Delete word: ^B ^F ^E = End of line\n\
-\n\
-Current lineedit modes are:\n\
-"));
- {
- char **bindings = LYLineeditNames;
- while (*bindings) {
- fprintf(fp, "# %s\n", *bindings);
- bindings++;
+ if (!fp) {
+ /*
+ * Make a name.
+ */
+ LYAddPathToHome(rcfile, sizeof(rcfile), FNAME_LYNXRC);
+
+ /*
+ * Open the file for write.
+ */
+ if ((fp = LYNewTxtFile(rcfile)) == NULL) {
+ return FALSE;
}
}
- fprintf(fp, "lineedit_mode=%s\n\n", LYLineeditNames[current_lineedit]);
-#ifdef EXP_KEYBOARD_LAYOUT
- fprintf(fp, "kblayout=%s\n\n", LYKbLayoutNames[current_layout]);
-#endif
-
-#ifdef DIRED_SUPPORT
- /*
- * Directory list style.
- */
- write_list(fp, gettext("\
-dir_list_styles specifies the directory list style under DIRED_SUPPORT\n\
-(if implemented). The default is \"MIXED_STYLE\", which sorts both\n\
-files and directories together. \"FILES_FIRST\" lists files first and\n\
-\"DIRECTORIES_FIRST\" lists directories first.\n\
-"));
- fprintf(fp, "dir_list_style=%s\n\n",
- (dir_list_style==FILES_FIRST ? "FILES_FIRST"
- :
- (dir_list_style==MIXED_STYLE ? "MIXED_STYLE"
- : "DIRECTORIES_FIRST")));
-#endif /* DIRED_SUPPORT */
-
- /*
- * User mode.
- */
- write_list(fp, gettext("\
-user_mode specifies the users level of knowledge with Lynx. The\n\
-default is \"NOVICE\" which displays two extra lines of help at the\n\
-bottom of the screen to aid the user in learning the basic Lynx\n\
-commands. Set user_mode to \"INTERMEDIATE\" to turn off the extra info.\n\
-Use \"ADVANCED\" to see the URL of the currently selected link at the\n\
-bottom of the screen.\n\
-"));
- fprintf(fp, "user_mode=%s\n\n",
- (user_mode == NOVICE_MODE ? "NOVICE" :
- (user_mode == ADVANCED_MODE ?
- "ADVANCED" : "INTERMEDIATE")));
-
- /*
- * Cookie options
- */
- write_list(fp, gettext("\
-accept_all_cookies allows the user to tell Lynx to automatically\n\
-accept all cookies if desired. The default is \"FALSE\" which will\n\
-prompt for each cookie. Set accept_all_cookies to \"TRUE\" to accept\n\
-all cookies.\n\
-"));
- fprintf(fp, "accept_all_cookies=%s\n\n",
- (LYAcceptAllCookies == FALSE ? "FALSE" : "TRUE"));
-
- write_list(fp, gettext("\
-cookie_accept_domains and cookie_reject_domains are comma-delimited\n\
-lists of domains from which Lynx should automatically accept or reject\n\
-all cookies. If a domain is specified in both options, rejection will\n\
-take precedence. The accept_all_cookies parameter will override any\n\
-settings made here.\n\
-"));
- fprintf(fp, "cookie_accept_domains=%s\n",
- (LYCookieAcceptDomains == NULL ? ""
- : LYCookieAcceptDomains));
- fprintf(fp, "cookie_reject_domains=%s\n\n",
- (LYCookieRejectDomains == NULL ? ""
- : LYCookieRejectDomains));
-
-
- write_list(fp, gettext("\
-cookie_loose_invalid_domains, cookie_strict_invalid_domains, and\n\
-cookie_query_invalid_domains are comma-delimited lists of which domains\n\
-should be subjected to varying degrees of validity checking. If a\n\
-domain is set to strict checking, strict conformance to RFC2109 will\n\
-be applied. A domain with loose checking will be allowed to set cookies\n\
-with an invalid path or domain attribute. All domains will default to\n\
-querying the user for an invalid path or domain.\n\
-"));
- fprintf(fp, "cookie_loose_invalid_domains=%s\n",
- (LYCookieLooseCheckDomains == NULL) ? ""
- : LYCookieLooseCheckDomains);
- fprintf(fp, "cookie_strict_invalid_domains=%s\n",
- (LYCookieStrictCheckDomains == NULL) ? ""
- : LYCookieStrictCheckDomains);
- fprintf(fp, "cookie_query_invalid_domains=%s\n\n",
- (LYCookieQueryCheckDomains == NULL) ? ""
- : LYCookieQueryCheckDomains);
-
-
-#ifdef EXP_PERSISTENT_COOKIES
- /*
- * Cookie file.
- */
- write_list(fp, gettext("\
-cookie_file specifies the file in which to store persistent cookies.\n\
-The default is ~/.lynx_cookies.\n\
-"));
- fprintf(fp, "cookie_file=%s\n\n",
- (LYCookieFile == NULL ? "~/.lynx_cookies" : LYCookieFile));
-#endif /* EXP_PERSISTENT_COOKIES */
-
-
-#if defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
- /*
- * Local execution mode - all links.
- */
write_list(fp, gettext("\
-If run_all_execution_links is set \"on\" then all local execution links\n\
-will be executed when they are selected.\n\
+Lynx User Defaults File\n\
\n\
-WARNING - This is potentially VERY dangerous. Since you may view\n\
- information that is written by unknown and untrusted sources\n\
- there exists the possibility that Trojan horse links could be\n\
- written. Trojan horse links could be written to erase files\n\
- or compromise security. This should only be set to \"on\" if\n\
- you are viewing trusted source information.\n\
+This file contains options saved from the Lynx Options Screen (normally\n\
+with the '>' key). There is normally no need to edit this file manually,\n\
+since the defaults here can be controlled from the Options Screen, and the\n\
+next time options are saved from the Options Screen this file will be\n\
+completely rewritten. You have been warned...\n\
+If you are looking for the general configuration file - it is normally\n\
+called lynx.cfg, and it has different content and a different format.\n\
+It is not this file.\n\
"));
- fprintf(fp, "run_all_execution_links=%s\n\n",
- (local_exec ? "on" : "off"));
+ fprintf(fp, "\n");
- /*
- * Local execution mode - only links in local files.
- */
- write_list(fp, gettext("\
-If run_execution_links_on_local_files is set \"on\" then all local\n\
-execution links that are found in LOCAL files will be executed when they\n\
-are selected. This is different from run_all_execution_links in that\n\
-only files that reside on the local system will have execution link\n\
-permissions.\n\
-\n\
-WARNING - This is potentially dangerous. Since you may view\n\
- information that is written by unknown and untrusted sources\n\
- there exists the possibility that Trojan horse links could be\n\
- written. Trojan horse links could be written to erase files\n\
- or compromise security. This should only be set to \"on\" if\n\
- you are viewing trusted source information.\n\
-"));
- fprintf(fp, "run_execution_links_on_local_files=%s\n\n",
- (local_exec_on_local_files ? "on" : "off"));
-#endif /* defined(EXEC_LINKS) || defined(EXEC_SCRIPTS) */
+ while (tbl->name != 0) {
+ ParseUnionPtr q = ParseUnionOf(tbl);
- write_list(fp, gettext("\
-If verbose_images is \"on\", lynx will print the name of the image\n\
-source file in place of [INLINE], [LINK] or [IMAGE]\n\
-See also VERBOSE_IMAGES in lynx.cfg\n\
-"));
- fprintf(fp, "verbose_images=%s\n\n",
- verbose_img ? "on" : "off");
+ if (!tbl->enabled) {
+ tbl++;
+ continue;
+ } if (tbl->note != NULL) {
+ write_list(fp, gettext(tbl->note));
+ } else if (tbl->table == tbl_keypad_mode) {
+ explain_keypad_mode(fp);
+ }
+
+ switch (tbl->type) {
+ case CONF_BOOL:
+ fprintf(fp, "%s=%s\n\n", tbl->name, putBool(*(q->set_value)));
+ break;
+
+ case CONF_FUN:
+ if (tbl->write_it != 0)
+ tbl->write_it(fp, tbl);
+ break;
+
+ case CONF_ARRAY:
+ for (n = 0; tbl->strings[n] != 0; ++n)
+ fprintf(fp, "# %s\n", tbl->strings[n]);
+ fprintf(fp, "%s=%s\n\n", tbl->name,
+ tbl->strings[*(q->int_value)]);
+ break;
+
+ case CONF_ENUM:
+ fprintf(fp, "%s=%s\n\n", tbl->name,
+ LYputEnum(tbl->table, *(q->int_value)));
+ break;
+
+ case CONF_INT:
+ fprintf(fp, "%s=%d\n\n", tbl->name, *(q->int_value));
+ break;
+
+ case CONF_MBM:
+ for (n = 1; n <= MBM_V_MAXFILES; n++) {
+ fprintf(fp, "multi_bookmark%c=", LYindex2MBM(n));
+
+ fprintf(fp, "%s", NonNull(MBM_A_subbookmark[n]));
+ if (MBM_A_subdescript[n] != 0
+ && *MBM_A_subdescript[n] != 0)
+ fprintf(fp, ",%s", MBM_A_subdescript[n]);
+ fprintf(fp, "\n");
+ }
+ fprintf(fp, "\n");
+ break;
+
+ case CONF_LIS:
+ /* FALLTHRU */
+ case CONF_STR:
+ fprintf(fp, "%s=%s\n\n", tbl->name,
+ (q->str_value != 0 && *(q->str_value) != 0)
+ ? *(q->str_value)
+ : "");
+ break;
+
+ case CONF_UNSPECIFIED:
+ break;
+ }
+ tbl++;
+ }
/*
* Close the RC file.
*/
- fclose(fp);
-
- HTSYS_purge(rcfile);
+ if (is_tempfile) {
+ LYCloseTempFP(fp);
+ } else {
+ LYCloseOutput(fp);
+ HTSYS_purge(rcfile);
+ }
return TRUE;
}
+
+/*
+ * Returns true if the given name would be saved in .lynxrc
+ */
+PUBLIC BOOL will_save_rc ARGS1(char *, name)
+{
+ Config_Type *tbl = lookup_config(name);
+ return tbl->name != 0;
+}
+
+PUBLIC int enable_lynxrc ARGS1(
+ char *, value)
+{
+ Config_Type *tbl;
+ char *colon = strchr(value, ':');
+
+ if (colon != 0) {
+ *colon++ = 0;
+ LYTrimLeading(value);
+ LYTrimTrailing(value);
+
+ for (tbl = Config_Table; tbl->name != 0; tbl++) {
+ if (!strcasecomp(value, tbl->name)) {
+ tbl->enabled = getBool(colon);
+ CTRACE((tfp, "enable_lynxrc(%s) %s\n", value, putBool(tbl->enabled)));
+ break;
+ }
+ }
+ }
+ return 0;
+}
diff --git a/gnu/usr.bin/lynx/src/LYrcFile.h b/gnu/usr.bin/lynx/src/LYrcFile.h
index 05bbc0dbb98..63e88d075dd 100644
--- a/gnu/usr.bin/lynx/src/LYrcFile.h
+++ b/gnu/usr.bin/lynx/src/LYrcFile.h
@@ -1,4 +1,3 @@
-
#ifndef LYRCFILE_H
#define LYRCFILE_H
@@ -6,8 +5,15 @@
#include <LYStructs.h>
#endif /* LYSTRUCTS_H */
-extern void read_rc NOPARAMS;
-extern int save_rc NOPARAMS;
+extern Config_Enum tbl_DTD_recovery[];
+extern Config_Enum tbl_keypad_mode[];
+extern Config_Enum tbl_multi_bookmarks[];
+extern Config_Enum tbl_transfer_rate[];
+extern Config_Enum tbl_user_mode[];
-#endif /* LYRCFILE_H */
+extern BOOL will_save_rc PARAMS((char * name));
+extern int enable_lynxrc PARAMS((char * value));
+extern int save_rc PARAMS((FILE *));
+extern void read_rc PARAMS((FILE *));
+#endif /* LYRCFILE_H */
diff --git a/gnu/usr.bin/lynx/src/TRSTable.c b/gnu/usr.bin/lynx/src/TRSTable.c
new file mode 100644
index 00000000000..7fbd6631b17
--- /dev/null
+++ b/gnu/usr.bin/lynx/src/TRSTable.c
@@ -0,0 +1,1999 @@
+/* Simple table object
+** ===================
+** Authors
+** KW Klaus Weide <kweide@enteract.com>
+** History:
+** 2 Jul 1999 KW Created.
+*/
+
+#include <HTUtils.h>
+#include <HTStyle.h> /* for HT_LEFT, HT_CENTER, HT_RIGHT */
+#include <LYCurses.h>
+#include <TRSTable.h>
+#include <LYGlobalDefs.h>
+
+#include <LYLeaks.h>
+
+#ifdef SAVE_TIME_NOT_SPACE
+#define CELLS_GROWBY 16
+#define ROWS_GROWBY 16
+#else
+#define CELLS_GROWBY 2
+#define ROWS_GROWBY 2
+#endif
+
+#ifdef USE_CURSES_PADS
+# define MAX_STBL_POS (LYwideLines ? MAX_COLS - 1 : LYcols-1)
+#else
+# define MAX_STBL_POS (LYcols-1)
+#endif
+
+/* must be different from HT_ALIGN_NONE and HT_LEFT, HT_CENTER etc.: */
+#define RESERVEDCELL (-2) /* cell's alignment field is overloaded, this
+ value means cell was reserved by ROWSPAN */
+#define EOCOLG (-2) /* sumcols' Line field isn't used for line info, this
+ special value means end of COLGROUP */
+#ifndef NO_AGGRESSIVE_NEWROW
+# define NO_AGGRESSIVE_NEWROW 0
+#endif
+
+typedef enum {
+ CS_invalid = -1, /* cell "before the first",
+ or empty lines after [ce]bc,
+ or TRST aborted */
+ CS__new = 0,
+ CS__0new, /* new, at BOL */
+ CS__0eb, /* starts at BOL, empty, break */
+ CS__eb, /* empty, break */
+ CS__0cb, /* starts at BOL, content, break */
+ CS__cb, /* content, break */
+ CS__0ef, /* starts at BOL, empty, finished */
+ CS__ef, /* empty, finished */
+ CS__0cf, /* starts at BOL, content, finished */
+ CS__cf, /* content, finished */
+ CS__ebc, /* empty, break, more content (maybe @BOL) */
+ CS__cbc /* content, break, more content (maybe @BOL) */
+} cellstate_t;
+
+typedef struct _STable_states {
+ cellstate_t prev_state; /* Contents type of the previous cell */
+ cellstate_t state; /* Contents type of the worked-on cell */
+ int lineno; /* Start line of the current cell */
+ int icell_core; /* -1 or the 1st cell with <BR></TD> on row */
+ int x_td; /* x start pos of the current cell or -1 */
+ int pending_len; /* For multiline cells, the length of
+ the part on the first line (if
+ state is CS__0?[ec]b) (??), or 0 */
+} STable_states;
+
+typedef struct _STable_cellinfo {
+ int cLine; /* lineno in doc (zero-based): -1 for
+ contentless cells (and cells we do
+ not want to measure and count?),
+ line-of-the-start otherwise. */
+ int pos; /* column where cell starts */
+ int len; /* number of character positions */
+ int colspan; /* number of columns to span */
+ int alignment; /* one of HT_LEFT, HT_CENTER, HT_RIGHT,
+ or RESERVEDCELL */
+} STable_cellinfo;
+
+enum ended_state {
+ ROW_not_ended,
+ ROW_ended_by_endtr,
+ ROW_ended_by_splitline
+};
+
+#define HAS_END_OF_CELL 1
+#define HAS_BEG_OF_CELL 2
+#define IS_CONTINUATION_OF_CELL 4
+#define OFFSET_IS_VALID 8
+#define OFFSET_IS_VALID_LAST_CELL 0x10
+#define BELIEVE_OFFSET 0x20
+
+typedef struct _STable_rowinfo {
+ /* Each row may be displayed on many display lines, but we fix up
+ positions of cells on this display line only: */
+ int Line; /* lineno in doc (zero-based) */
+ int ncells; /* number of table cells */
+
+ /* What is the meaning of this?! It is set if:
+ [search for def of fixed_line below]
+
+ a1) a non-last cell is not at BOL,
+ a2) a non-last cell has something on the first line,
+ b) a >=3-lines-cell not at BOL, the first row non-empty, the 2nd empty;
+ c) a multiline cell not at BOL, the first row non-empty, the rest empty;
+ d) a multiline cell not at BOL, the first row non-empty;
+ e) a singleline non-empty cell not at BOL;
+
+ Summary: have seen a cell which is one of:
+ (Notation: B: at BOL; L: last; E: the first row is non-empty)
+
+ bcde: !B && !E
+ a1: !L && !B
+ a2: !L && !E
+
+ Or: has at least two of !B, !L, !E, or: has at most one of B,L,E.
+
+ REMARK: If this variable is not set, but icell_core is, Line is
+ reset to the line of icell_core.
+ */
+ BOOL fixed_line; /* if we have a 'core' line of cells */
+ enum ended_state ended; /* if we saw </tr> etc */
+ int content; /* Whether contains end-of-cell etc */
+ int offset; /* >=0 after line break in a multiline cell */
+ int allocated; /* number of table cells allocated */
+ STable_cellinfo * cells;
+ int alignment; /* global align attribute for this row */
+} STable_rowinfo;
+
+struct _STable_info {
+#ifdef EXP_NESTED_TABLES
+ struct _STable_info *enclosing; /* The table which contain us */
+ struct _TextAnchor *enclosing_last_anchor_before_stbl;
+#endif
+ int startline; /* lineno where table starts (zero-based) */
+ int nrows; /* number of rows */
+ int ncols; /* number of rows */
+ int maxlen; /* sum of max. cell lengths of any row */
+ int maxpos; /* max. of max. cell pos's of any row */
+ int allocated_rows; /* number of rows allocated */
+ int allocated_sumcols; /* number of sumcols allocated */
+ int ncolinfo; /* number of COL info collected */
+ STable_cellinfo * sumcols; /* for summary (max len/pos) col info */
+ STable_rowinfo * rows;
+ STable_rowinfo rowspans2eog;
+ short alignment; /* global align attribute for this table */
+ short rowgroup_align; /* align default for current group of rows */
+ short pending_colgroup_align;
+ int pending_colgroup_next;
+ STable_states s;
+};
+
+/*
+** Functions and structures in this source file keep track of positions.
+** They don't know about the character data in those lines, or about
+** the HText and HTLine structures. GridText.c doesn't know about our
+** structures. It should stay that way.
+**
+** The basic idea: we let the code in HTML.c/GridText.c produce and format
+** output "as usual", i.e. as without Simple Table support. We keep track
+** of the positions in the generated output where cells and rows start (or
+** end). If all goes well, that preliminary output (stored in HText/HTLine
+** structures) can be fixed up when the TABLE end tag is processed, by just
+** inserting spaces in the right places (and possibly changing alignment).
+** If all goes not well, we already have a safe fallback.
+**
+** Note that positions passed to and from these functions should be
+** in terms of screen positions, not just byte counts in a HTLine.data
+** (cf. line->data vs. HText_TrueLineSize).
+**
+** Memory is allocated dynamically, so we can have tables of arbitrary
+** length. On allocation error we just return and error indication
+** instead of outofmem(), so caller can give up table tracking and maybe
+** recover memory.
+**
+** Implemented:
+** - ALIGN={left,right,center,justify} applied to individual table cells
+** ("justify" is treated as "left")
+** - Inheritance of horizontal alignment according to HTML 4.0
+** - COLSPAN >1 (may work incorrectly for some tables?)
+** - ROWSPAN >1 (reserving cells in following rows)
+** - Line breaks at start of first cell or at end of last cell are treated
+** as if they were not part of the cell and row. This allows us to
+** cooperate with one way in which tables have been made friendly to
+** browsers without any table support.
+** Missing, but can be added:
+** - Support for COLGROUP/COL
+** - Tables wider than display. The limitation is not here but in GridText.c
+** etc. If horizontal scrolling were implemented there, the mechanisms
+** here coudl deal with wide tables (just change MAX_STBL_POS code).
+** Missing, unlikely to add:
+** - Support for non-LTR directionality. A general problem, support is
+** lacking throughout the lynx code.
+** - Support for most other table-related attributes. Most of them are
+** for decorative purposes.
+** Impossible or very unlikely (because it doesn't fit the model):
+** - Any cell contents of more than one line, line breaks within cells.
+** Anything that requires handling cell contents as paragraphs (block
+** elements), like reflowing. Vertical alignment.
+*/
+PRIVATE int Stbl_finishCellInRow PARAMS((
+ STable_rowinfo * me,
+ STable_states * s,
+ int end_td,
+ int lineno,
+ int pos));
+PRIVATE int Stbl_finishRowInTable PARAMS((
+ STable_info * me));
+
+PRIVATE CONST char * cellstate_s ARGS1(
+ cellstate_t, state)
+{
+ CONST char *result = "?";
+
+ switch (state) {
+ case CS_invalid: result = "CS_invalid"; break;
+ case CS__new: result = "CS__new"; break;
+ case CS__0new: result = "CS__0new"; break;
+ case CS__0eb: result = "CS__0eb"; break;
+ case CS__eb: result = "CS__eb"; break;
+ case CS__0cb: result = "CS__0cb"; break;
+ case CS__cb: result = "CS__cb"; break;
+ case CS__0ef: result = "CS__0ef"; break;
+ case CS__ef: result = "CS__ef"; break;
+ case CS__0cf: result = "CS__0cf"; break;
+ case CS__cf: result = "CS__cf"; break;
+ case CS__ebc: result = "CS__ebc"; break;
+ case CS__cbc: result = "CS__cbc"; break;
+ }
+ return result;
+}
+
+PUBLIC struct _STable_info * Stbl_startTABLE ARGS1(
+ short, alignment)
+{
+ STable_info *me = typecalloc(STable_info);
+
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_startTABLE(align=%d)\n", (int)alignment));
+ if (me) {
+ me->alignment = alignment;
+ me->rowgroup_align = HT_ALIGN_NONE;
+ me->pending_colgroup_align = HT_ALIGN_NONE;
+ me->s.x_td = -1;
+ me->s.icell_core = -1;
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables)
+ me->enclosing = 0;
+#endif
+ }
+ return me;
+}
+
+PRIVATE void free_rowinfo ARGS1(
+ STable_rowinfo *, me)
+{
+ if (me && me->allocated) {
+ FREE(me->cells);
+ }
+}
+
+PUBLIC void Stbl_free ARGS1(
+ STable_info *, me)
+{
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_free()\n"));
+ if (me && me->allocated_rows && me->rows) {
+ int i;
+ for (i = 0; i < me->allocated_rows; i++)
+ free_rowinfo(me->rows + i);
+ FREE(me->rows);
+ }
+ free_rowinfo(&me->rowspans2eog);
+ if (me)
+ FREE(me->sumcols);
+ FREE(me);
+}
+
+/*
+ * Returns -1 on error, otherwise index of just-added table cell.
+ */
+PRIVATE int Stbl_addCellToRow ARGS9(
+ STable_rowinfo *, me,
+ STable_cellinfo *, colinfo,
+ int, ncolinfo,
+ STable_states *, s,
+ int, colspan,
+ int, alignment,
+ int, isheader,
+ int, lineno,
+ int *, ppos)
+{
+ STable_cellinfo *cells;
+ int i;
+ int last_colspan = me->ncells ?
+ me->cells[me->ncells - 1].colspan : 1;
+ cellstate_t newstate;
+ int ret;
+
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_addCellToRow, line=%d, pos=%d, colspan=%d\n",
+ lineno, *ppos, colspan));
+ CTRACE2(TRACE_TRST,
+ (tfp, " ncells=%d, stateLine=%d, pending_len=%d, pstate=%s, state=%s\n",
+ me->ncells, s->lineno, s->pending_len,
+ cellstate_s(s->prev_state), cellstate_s(s->state)));
+ if (me->ncells == 0)
+ s->prev_state = CS_invalid;
+ else if (s->prev_state == CS_invalid ||
+ (s->state != CS__0new &&
+ s->state != CS__ef && s->state != CS__0ef))
+ s->prev_state = s->state;
+
+ if (me->ncells == 0 || *ppos == 0)
+ newstate = CS__0new;
+ else
+ newstate = CS__new;
+
+ if (me->ncells > 0 && s->pending_len > 0) {
+ if (s->prev_state != CS__cbc)
+ me->cells[me->ncells - 1].len = s->pending_len;
+ s->pending_len = 0;
+ }
+ s->x_td = *ppos;
+
+ if (lineno != s->lineno) {
+ if (!me->fixed_line) {
+ if (me->ncells == 0 || *ppos == 0) {
+ switch (s->prev_state) {
+ case CS_invalid:
+ case CS__0new:
+ case CS__0eb:
+ case CS__0cb:
+ case CS__0ef:
+ case CS__0cf:
+ if (me->ncells > 0)
+ for (i = me->ncells + last_colspan - 2;
+ i >= me->ncells - 1; i--) {
+ me->cells[i].pos = *ppos;
+ me->cells[i].cLine = lineno;
+ }
+ me->Line = lineno;
+ break;
+ case CS__new:
+ case CS__eb:
+ case CS__ef:
+ case CS__cf:
+ default:
+ break;
+ case CS__cb:
+ *ppos = me->cells[me->ncells - 1].pos +
+ me->cells[me->ncells - 1].len;
+ }
+ } else { /* last cell multiline, ncells != 0, pos != 0 */
+ switch (s->prev_state) {
+ case CS__0new:
+ case CS__0eb:
+ case CS__0ef:
+ /* Do not fail, but do not set fixed_line either */
+ break;
+ case CS__cb:
+ goto trace_and_fail;
+ case CS__cf:
+ goto trace_and_fail;
+ case CS__0cb:
+ case CS__0cf:
+ if (*ppos > me->cells[0].pos)
+ me->Line = lineno;
+ me->fixed_line = YES; /* type=a def of fixed_line i */
+ break;
+ case CS__new:
+ case CS__eb:
+ case CS__ef:
+ default:
+ me->fixed_line = YES; /* type=e def of fixed_line ii */
+ break;
+ case CS__cbc:
+ goto trace_and_fail;
+ }
+ }
+ }
+ if (me->fixed_line && lineno != me->Line) {
+ switch (s->prev_state) {
+ case CS__cb:
+ case CS__cf:
+ if (*ppos > 0)
+ goto trace_and_fail;
+ else
+ *ppos = me->cells[me->ncells - 1].pos /* == 0 */ +
+ me->cells[me->ncells - 1].len;
+ break;
+ case CS__0cf:
+ case CS__0cb:
+ if (*ppos == 0 || *ppos <= me->cells[0].pos)
+ *ppos = me->cells[me->ncells - 1].pos /* == 0 */ +
+ me->cells[me->ncells - 1].len;
+ break;
+ case CS__0new:
+ case CS__0ef:
+ case CS__0eb:
+ break;
+ case CS__new:
+ case CS__eb:
+ case CS__ef:
+ default:
+ *ppos = me->cells[me->ncells - 1].pos; break;
+ case CS__cbc:
+ break;
+ case CS_invalid:
+ break;
+ }
+ }
+ s->lineno = lineno;
+ } else { /* lineno == s->lineno: */
+ switch (s->prev_state) {
+ case CS_invalid:
+ case CS__0new:
+ case CS__0eb: /* cannot happen */
+ case CS__0cb: /* cannot happen */
+ case CS__0ef:
+ case CS__0cf: /* ##302?? set icell_core? or only in finish? */
+ break;
+ case CS__eb: /* cannot happen */
+ case CS__cb: /* cannot happen */
+ case CS__ef:
+ break;
+ case CS__ebc: /* should have done smth in finish */
+ case CS__cbc: /* should have done smth in finish */
+ break;
+ case CS__new:
+ case CS__cf:
+ if (me->fixed_line && me->Line != lineno) {
+ goto trace_and_fail;
+ } else {
+ me->fixed_line = YES;
+ me->Line = lineno;
+ }
+ }
+ }
+
+ s->state = newstate;
+
+ if (me->ncells > 0 && me->cells[me->ncells - 1].colspan > 1) {
+ me->ncells += me->cells[me->ncells-1].colspan - 1;
+ }
+ while (me->ncells < me->allocated &&
+ me->cells[me->ncells].alignment == RESERVEDCELL) {
+ me->ncells++;
+ }
+ {
+ int growby = 0;
+ while (me->ncells + colspan + 1 > me->allocated + growby)
+ growby += CELLS_GROWBY;
+ if (growby) {
+ if (me->allocated == 0 && !me->cells) {
+ cells = typecallocn(STable_cellinfo, growby);
+ } else {
+ cells = realloc(me->cells,
+ (me->allocated + growby)
+ * sizeof(STable_cellinfo));
+ for (i = 0; cells && i < growby; i++) {
+ cells[me->allocated + i].alignment = HT_ALIGN_NONE;
+ }
+ }
+ if (cells) {
+ me->allocated += growby;
+ me->cells = cells;
+ } else {
+ goto trace_and_fail;
+ }
+ }
+ }
+
+ me->cells[me->ncells].cLine = lineno;
+ me->cells[me->ncells].pos = *ppos;
+ me->cells[me->ncells].len = -1;
+ me->cells[me->ncells].colspan = colspan;
+
+ if (alignment != HT_ALIGN_NONE)
+ me->cells[me->ncells].alignment = alignment;
+ else {
+ if (ncolinfo >= me->ncells + 1)
+ me->cells[me->ncells].alignment = colinfo[me->ncells].alignment;
+ else
+ me->cells[me->ncells].alignment = me->alignment;
+ if (me->cells[me->ncells].alignment==HT_ALIGN_NONE)
+ me->cells[me->ncells].alignment = me->alignment;
+ if (me->cells[me->ncells].alignment==HT_ALIGN_NONE)
+ me->cells[me->ncells].alignment = isheader ? HT_CENTER : HT_LEFT;
+ }
+ for (i = me->ncells + 1; i < me->ncells + colspan; i++) {
+ me->cells[i].cLine = lineno;
+ me->cells[i].pos = *ppos;
+ me->cells[i].len = -1;
+ me->cells[i].colspan = 0;
+ me->cells[i].alignment = HT_LEFT;
+ }
+ me->cells[me->ncells + colspan].pos = -1; /* not yet used */
+ me->ncells++;
+
+ ret = me->ncells - 1;
+ trace_and_return:
+ CTRACE2(TRACE_TRST,
+ (tfp, " => prev_state=%s, state=%s, ret=%d\n",
+ cellstate_s(s->prev_state), cellstate_s(s->state), ret));
+ return (ret);
+
+ trace_and_fail:
+ ret = -1;
+ goto trace_and_return;
+}
+
+/* returns -1 on error, 0 otherwise */
+/* assumes cells have already been allocated (but may need more) */
+PRIVATE int Stbl_reserveCellsInRow ARGS3(
+ STable_rowinfo *, me,
+ int, icell,
+ int, colspan)
+{
+ STable_cellinfo *cells;
+ int i;
+ int growby = icell + colspan - me->allocated;
+
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_reserveCellsInRow(icell=%d, colspan=%d\n",
+ icell, colspan));
+ if (growby > 0) {
+ cells = realloc(me->cells,
+ (me->allocated + growby)
+ * sizeof(STable_cellinfo));
+ if (cells) {
+ for (i = 0; i < growby; i++) {
+ cells[me->allocated + i].alignment = HT_ALIGN_NONE;
+ }
+ me->allocated += growby;
+ me->cells = cells;
+ } else {
+ return -1;
+ }
+ }
+ for (i = icell; i < icell + colspan; i++) {
+ me->cells[i].cLine = -1;
+ me->cells[i].pos = -1;
+ me->cells[i].len = -1;
+ me->cells[i].colspan = 0;
+ me->cells[i].alignment = RESERVEDCELL;
+ }
+ me->cells[icell].colspan = colspan;
+ return 0;
+}
+
+/* Returns -1 on failure. */
+PRIVATE int Stbl_finishCellInRow ARGS5(
+ STable_rowinfo *, me,
+ STable_states *, s,
+ int, end_td,
+ int, lineno,
+ int, pos)
+{
+ STable_cellinfo *lastcell;
+ cellstate_t newstate = CS_invalid;
+ int multiline = NO, empty;
+ int ret;
+
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_finishCellInRow line=%d pos=%d end_td=%d ncells=%d pnd_len=%d\n",
+ lineno, pos, (int)end_td, me->ncells, s->pending_len));
+
+ if (me->ncells <= 0)
+ return -1;
+ lastcell = me->cells + (me->ncells - 1);
+ multiline = (lineno != lastcell->cLine || lineno != s->lineno);
+ empty = multiline ? (pos == 0) : (pos <= s->x_td);
+
+ CTRACE2(TRACE_TRST,
+ (tfp, " [lines: lastCell=%d state=%d multi=%d] empty=%d (prev)state=(%s) %s\n",
+ lastcell->cLine, s->lineno, multiline, empty,
+ cellstate_s(s->prev_state), cellstate_s(s->state)));
+
+ if (multiline) {
+ if ((end_td & TRST_ENDCELL_MASK) == TRST_ENDCELL_LINEBREAK) {
+ switch (s->state) {
+ case CS_invalid:
+ newstate = empty ? CS_invalid : CS__cbc;
+ break;
+ case CS__0new:
+ newstate = empty ? CS__0eb : CS__0cb;
+ break;
+ case CS__0eb:
+ newstate = empty ? CS__0eb : CS__ebc;
+ s->state = newstate;
+ if (me->fixed_line) {
+ if (empty)
+ ret = (lastcell->len <= 0 ? 0 : lastcell->len);
+ else
+ ret = (lastcell->len <= 0 ? 0 : -1);
+ } else {
+ if (empty)
+ ret = (lastcell->len <= 0 ? 0 : lastcell->len);
+ else
+ ret = (lastcell->len <= 0 ? 0 : 0);
+ }
+ goto trace_and_return;
+ case CS__0cb:
+ if (!me->fixed_line) {
+ if (!empty) {
+ if (s->icell_core == -1)
+ me->Line = -1;
+ }
+ }
+ if (s->pending_len && empty) { /* First line non-empty */
+ if ((me->fixed_line && me->Line == lastcell->cLine) ||
+ s->icell_core == me->ncells - 1)
+ lastcell->len = s->pending_len;
+ s->pending_len = 0;
+ } /* @@@ for empty do smth. about ->Line / ->icell_core !! */
+ newstate = empty ? CS__0cb : CS__cbc; /* ##474_needs_len!=-1? */
+ break;
+ case CS__0ef:
+ case CS__0cf:
+ break;
+ case CS__new:
+ newstate = empty ? CS__eb : CS__cb;
+ break;
+ case CS__eb: /* ##484_set_pending_ret_0_if_empty? */
+ newstate = empty ? CS__eb : CS__ebc;
+ s->state = newstate;
+ if (me->fixed_line) {
+ if (empty)
+ ret = (lastcell->len <= 0 ? 0 : lastcell->len);
+ else
+ ret = (lastcell->len <= 0 ? 0 : -1);
+ } else {
+ if (empty)
+ ret = (lastcell->len <= 0 ? 0 : lastcell->len);
+ else
+ ret = (lastcell->len <= 0 ? 0 : -1);
+ }
+ goto trace_and_return;
+ case CS__cb:
+ if (s->pending_len && empty) { /* ##496: */
+ lastcell->len = s->pending_len;
+ s->pending_len = 0;
+ } /* @@@ for empty do smth. about ->Line / ->icell_core !! */
+ ret = -1;
+ if (empty) {
+ if (!me->fixed_line) {
+ me->fixed_line = YES; /* type=b def of fixed_line i */
+ me->Line = lastcell->cLine; /* should've happened in break */
+ } else {
+ if (me->Line != lastcell->cLine)
+ goto trace_and_return;
+ }
+ } else {
+ if (!me->fixed_line) {
+ me->fixed_line = YES; /* type=b def of fixed_line ii */
+ me->Line = lastcell->cLine; /* should've happened in break */
+ }
+ s->state = CS__cbc;
+ goto trace_and_return;
+ }
+ newstate = empty ? CS__cb : CS__cbc;
+ break;
+ case CS__ef:
+ ret = 0;
+ goto trace_and_return;
+ case CS__cf:
+ ret = lastcell->len; /* ##523_change_state? */
+ goto trace_and_return;
+ case CS__cbc:
+ if (!me->fixed_line) {
+ if (empty) {
+ if (s->icell_core == -1) /* ##528??: */
+ me->Line = lineno;
+ /* lastcell->Line = lineno; */
+ } else { /* !empty */
+ if (s->icell_core == -1)
+ me->Line = -1;
+ }
+ }
+ s->pending_len = 0;
+ newstate = empty ? CS_invalid : CS__cbc;
+ break;
+ default:
+ break;
+ }
+ } else { /* multiline cell, processing </TD>: */
+ s->x_td = -1;
+ switch (s->state) {
+ case CS_invalid:
+ /* ##540_return_-1_for_invalid_if_len!: */
+ if (!empty && lastcell->len > 0) {
+ newstate = CS__0cf;
+ s->state = newstate;
+ ret = -1;
+ goto trace_and_return;
+ }
+ /* ##541_set_len_0_Line_-1_sometimes: */
+ lastcell->len = 0;
+ lastcell->cLine = -1;
+ /* fall thru ##546 really fall thru??: */
+ newstate = empty ? CS_invalid : CS__cbc; break;
+ case CS__0new:
+ newstate = empty ? CS__0ef : CS__0cf; break;
+ case CS__0eb:
+ newstate = empty ? CS__0ef : CS__0cf; /* ebc?? */
+ s->state = newstate;
+ if (me->fixed_line) {
+ if (empty)
+ ret = (lastcell->len <= 0 ? 0 : lastcell->len);
+ else
+ ret = (lastcell->len <= 0 ? 0 : -1);
+ } else {
+ if (empty)
+ ret = (lastcell->len <= 0 ? 0 : lastcell->len);
+ else
+ ret = (lastcell->len <= 0 ? 0 : 0);
+ }
+ goto trace_and_return;
+ case CS__0cb:
+ if (s->pending_len) {
+ if (empty)
+ lastcell->len = s->pending_len;
+ else
+ lastcell->len = 0;
+ s->pending_len = 0;
+ }
+ if (!me->fixed_line) {
+ if (empty) {
+ if (s->icell_core == -1)
+ /* first cell before <BR></TD> => the core cell */
+ s->icell_core = me->ncells - 1;
+ /* lastcell->cLine = lineno; */
+ } else { /* !empty */
+ if (s->icell_core == -1)
+ me->Line = -1;
+ }
+ }
+ if (s->pending_len && empty) {
+ lastcell->len = s->pending_len;
+ s->pending_len = 0;
+ } /* @@@ for empty do smth. about ->Line / ->icell_core !! */
+ newstate = empty ? CS__0cf : CS__cbc; break;
+ case CS__0ef:
+ newstate = CS__0ef;
+ /* FALLTHRU */
+ case CS__0cf:
+ break;
+ case CS__new:
+ newstate = empty ? CS__ef : CS__cf; break;
+ case CS__eb:
+ newstate = empty ? CS__ef : CS__ef; /* ##579??? !!!!! */
+ s->state = newstate;
+ if (me->fixed_line) {
+ if (empty)
+ ret = (lastcell->len <= 0 ? 0 : lastcell->len);
+ else
+ ret = (lastcell->len <= 0 ? 0 : -1);
+ } else {
+ if (empty)
+ ret = (lastcell->len <= 0 ? 0 : lastcell->len);
+ else
+ ret = (lastcell->len <= 0 ? 0 : -1);
+ }
+ goto trace_and_return;
+ case CS__cb:
+ if (s->pending_len && empty) {
+ lastcell->len = s->pending_len;
+ s->pending_len = 0;
+ }
+ ret = -1;
+ if (empty) {
+ if (!me->fixed_line) {
+ me->fixed_line = YES; /* type=c def of fixed_line */
+ me->Line = lastcell->cLine; /* should've happened in break */
+ } else {
+ if (me->Line != lastcell->cLine)
+ goto trace_and_return;
+ }
+ } else {
+ goto trace_and_return;
+ }
+ newstate = empty ? CS__cf : CS__cbc; break;
+ case CS__ef: /* ignored error */
+ case CS__cf: /* ignored error */
+ break;
+ case CS__ebc: /* ##540_handle_ebc: */
+ lastcell->len = 0;
+ if (!me->fixed_line) {
+ if (!empty) {
+ if (s->icell_core == -1)
+ lastcell->cLine = -1;
+ }
+ }
+ s->pending_len = 0;
+ newstate = empty ? CS_invalid : CS__cbc; break;
+ case CS__cbc: /* ##586 */
+ lastcell->len = 0; /* ##613 */
+ ret = -1;
+ if (me->fixed_line && me->Line == lastcell->cLine)
+ goto trace_and_return;
+ if (!me->fixed_line) {
+ if (empty) {
+ if (s->icell_core == -1)
+ me->Line = lineno;
+ }
+ }
+ s->pending_len = 0; /* ##629 v */
+ newstate = empty ? CS_invalid : CS__cbc; break;
+ }
+ }
+ } else { /* (!multiline) */
+ if ((end_td & TRST_ENDCELL_MASK) == TRST_ENDCELL_LINEBREAK) {
+ switch (s->state) {
+ case CS_invalid:
+ case CS__0new:
+ s->pending_len = empty ? 0 : pos - lastcell->pos;
+ newstate = empty ? CS__0eb : CS__0cb;
+ s->state = newstate;
+ ret = 0; /* or 0 for xlen to s->pending_len?? */
+ goto trace_and_return;
+ case CS__0eb: /* cannot happen */
+ newstate = CS__eb;
+ break;
+ case CS__0cb: /* cannot happen */
+ newstate = CS__cb;
+ break;
+ case CS__0ef:
+ case CS__0cf:
+ break;
+ case CS__new:
+ ret = -1;
+ if (!empty && s->prev_state == CS__cbc) /* ##609: */
+ goto trace_and_return;
+ if (!empty) {
+ if (!me->fixed_line) {
+ me->fixed_line = YES; /* type=d def of fixed_line */
+ me->Line = lineno;
+ } else {
+ if (me->Line != lineno)
+ goto trace_and_return;
+ }
+ }
+ newstate = empty ? CS__eb : CS__cb;
+ s->state = newstate;
+ if (!me->fixed_line) {
+ s->pending_len = empty ? 0 : pos - lastcell->pos;
+ ret = 0;
+ goto trace_and_return;
+ } else {
+ s->pending_len = 0;
+ lastcell->len = empty ? 0 : pos - lastcell->pos;
+ ret = lastcell->len;
+ goto trace_and_return;
+ }
+ case CS__eb: /* cannot happen */
+ newstate = empty ? CS__eb : CS__ebc; break;
+ case CS__cb: /* cannot happen */
+ newstate = empty ? CS__cb : CS__cbc; break;
+ case CS__ef:
+ ret = 0;
+ goto trace_and_return;
+ case CS__cf:
+ ret = lastcell->len;
+ goto trace_and_return;
+ case CS__cbc: /* ??? */
+ break;
+ default:
+ break;
+ }
+ } else { /* !multiline, processing </TD>: */
+ s->x_td = -1;
+ switch (s->state) {
+ case CS_invalid: /* ##691_no_lastcell_len_for_invalid: */
+ if (!(me->fixed_line && me->Line == lastcell->cLine))
+ lastcell->len = 0;
+ /* FALLTHRU */
+ case CS__0new:
+ newstate = empty ? CS__0ef : CS__0cf; break; /* ##630 */
+ case CS__0eb:
+ newstate = empty ? CS__0ef : CS__0ef; break; /* ??? */
+ case CS__0cb:
+ newstate = empty ? CS__0cf : CS__cbc; break; /* ??? */
+ case CS__0ef:
+ newstate = CS__0ef; break; /* ??? */
+ case CS__0cf:
+ break; /* ??? */
+ case CS__new:
+ ret = -1;
+ if (!empty && s->prev_state == CS__cbc)
+ goto trace_and_return;
+ if (!empty) { /* ##642_set_fixed!: */
+ if (!me->fixed_line) {
+ me->fixed_line = YES; /* type=e def of fixed_line */
+ me->Line = lineno;
+ } else {
+ if (me->Line != lineno)
+ goto trace_and_return;
+ }
+ }
+ if (lastcell->len < 0)
+ lastcell->len = empty ? 0 : pos - lastcell->pos;
+ newstate = empty ? CS__ef : CS__cf;
+ s->state = newstate;
+ ret = ((me->fixed_line && lineno != me->Line)
+ ? -1 : lastcell->len);
+ goto trace_and_return;
+ case CS__eb:
+ newstate = empty ? CS__ef : CS__cf; break; /* ??? */
+ case CS__cb:
+ newstate = empty ? CS__cf : CS__cf; break; /* ??? */
+ case CS__ef: /* ignored error */
+ case CS__cf: /* ignored error */
+ default:
+ break;
+ }
+ lastcell->len = pos - lastcell->pos;
+ } /* if (!end_td) ... else */
+ } /* if (multiline) ... else */
+
+ s->state = newstate;
+ ret = lastcell->len;
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables) {
+ if (ret == -1 && pos == 0)
+ ret = 0; /* XXXX Hack to allow trailing <P> in multiline cells. */
+ }
+#endif
+
+/* lastcell->len = pos - lastcell->pos; */
+ trace_and_return:
+ CTRACE2(TRACE_TRST,
+ (tfp, " => prev_state=%s, state=%s, return=%d\n",
+ cellstate_s(s->prev_state), cellstate_s(s->state), ret));
+ return ret;
+}
+
+/*
+ * Reserve cells, each of given colspan, in (rowspan-1) rows after
+ * the current row of rowspan>1. If rowspan==0, use special 'row'
+ * rowspans2eog to keep track of rowspans that are to remain in effect
+ * until the end of the row group (until next THEAD/TFOOT/TBODY) or table.
+ */
+PRIVATE int Stbl_reserveCellsInTable ARGS4(
+ STable_info *, me,
+ int, icell,
+ int, colspan,
+ int, rowspan)
+{
+ STable_rowinfo *rows, *row;
+ int growby;
+ int i;
+
+ if (me->nrows <= 0)
+ return -1; /* must already have at least one row */
+
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_reserveCellsInTable(icell=%d, colspan=%d, rowspan=%d)\n",
+ icell, colspan, rowspan));
+ if (rowspan == 0) {
+ if (!me->rowspans2eog.cells) {
+ me->rowspans2eog.cells = typecallocn(STable_cellinfo, icell + colspan);
+ if (!me->rowspans2eog.cells)
+ return 0; /* fail silently */
+ else
+ me->rowspans2eog.allocated = icell + colspan;
+ }
+ Stbl_reserveCellsInRow(&me->rowspans2eog, icell, colspan);
+ }
+
+ growby = me->nrows + rowspan - 1 - me->allocated_rows;
+ if (growby > 0) {
+ rows = realloc(me->rows,
+ (me->allocated_rows + growby)
+ * sizeof(STable_rowinfo));
+ if (!rows)
+ return 0; /* ignore silently, no free memory, may be recoverable */
+ for (i = 0; i < growby; i++) {
+ row = rows + me->allocated_rows + i;
+ row->allocated = 0;
+ row->offset = 0;
+ row->content = 0;
+ if (!me->rowspans2eog.allocated) {
+ row->cells = NULL;
+ } else {
+ row->cells = typecallocn(STable_cellinfo,
+ me->rowspans2eog.allocated);
+ if (row->cells) {
+ row->allocated = me->rowspans2eog.allocated;
+ memcpy(row->cells, me->rowspans2eog.cells,
+ row->allocated * sizeof(STable_cellinfo));
+ }
+ }
+ row->ncells = 0;
+ row->fixed_line = NO;
+ row->alignment = HT_ALIGN_NONE;
+ }
+ me->allocated_rows += growby;
+ me->rows = rows;
+ }
+ for (i = me->nrows;
+ i < (rowspan == 0 ? me->allocated_rows : me->nrows + rowspan - 1);
+ i++) {
+ if (!me->rows[i].allocated) {
+ me->rows[i].cells = typecallocn(STable_cellinfo, icell + colspan);
+ if (!me->rows[i].cells)
+ return 0; /* fail silently */
+ else
+ me->rows[i].allocated = icell + colspan;
+ }
+ Stbl_reserveCellsInRow(me->rows + i, icell, colspan);
+ }
+ return 0;
+}
+
+/* Remove reserved cells in trailing rows that were added for rowspan,
+ * to be used when a THEAD/TFOOT/TBODY ends. */
+PRIVATE void Stbl_cancelRowSpans ARGS1(
+ STable_info *, me)
+{
+ int i;
+
+ CTRACE2(TRACE_TRST, (tfp, "TRST:Stbl_cancelRowSpans()"));
+ for (i = me->nrows; i < me->allocated_rows; i++) {
+ if (!me->rows[i].ncells) { /* should always be the case */
+ FREE(me->rows[i].cells);
+ me->rows[i].allocated = 0;
+ }
+ }
+ free_rowinfo(&me->rowspans2eog);
+ me->rowspans2eog.allocated = 0;
+}
+
+/*
+ * Returns -1 on error, otherwise index of just-added table row.
+ */
+PUBLIC int Stbl_addRowToTable ARGS3(
+ STable_info *, me,
+ int, alignment,
+ int, lineno)
+{
+ STable_rowinfo *rows, *row;
+ STable_states * s = &me->s;
+
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_addRowToTable(alignment=%d, lineno=%d)\n",
+ alignment, lineno));
+ if (me->nrows > 0 && me->rows[me->nrows-1].ncells > 0) {
+ if (s->pending_len > 0)
+ me->rows[me->nrows-1].cells[me->rows[me->nrows-1].ncells - 1].len = s->pending_len;
+ s->pending_len = 0;
+ }
+ Stbl_finishRowInTable(me);
+ if (me->nrows > 0 && me->rows[me->nrows-1].Line == lineno)
+ me->rows[me->nrows-1].Line = -1;
+ s->pending_len = 0;
+ s->x_td = -1;
+
+ {
+ int i;
+ int growby = 0;
+ while (me->nrows + 2 > me->allocated_rows + growby)
+ growby += ROWS_GROWBY;
+ if (growby) {
+ if (me->allocated_rows == 0 && !me->rows) {
+ rows = typecallocn(STable_rowinfo, growby);
+ } else {
+ rows = realloc(me->rows,
+ (me->allocated_rows + growby)
+ * sizeof(STable_rowinfo));
+ for (i = 0; rows && i < growby; i++) {
+ row = rows + me->allocated_rows + i;
+ if (!me->rowspans2eog.allocated) {
+ row->allocated = 0;
+ row->cells = NULL;
+ } else {
+ row->cells = typecallocn(STable_cellinfo,
+ me->rowspans2eog.allocated);
+ if (row->cells) {
+ row->allocated = me->rowspans2eog.allocated;
+ memcpy(row->cells, me->rowspans2eog.cells,
+ row->allocated * sizeof(STable_cellinfo));
+ } else {
+ FREE(rows);
+ break;
+ }
+ }
+ row->ncells = 0;
+ row->fixed_line = NO;
+ row->alignment = HT_ALIGN_NONE;
+ row->offset = 0;
+ row->content = 0;
+ }
+ }
+ if (rows) {
+ me->allocated_rows += growby;
+ me->rows = rows;
+ } else {
+ return -1;
+ }
+ }
+ }
+
+ me->rows[me->nrows].Line = lineno;
+ if (me->nrows == 0)
+ me->startline = lineno;
+ if (alignment != HT_ALIGN_NONE)
+ me->rows[me->nrows].alignment = alignment;
+ else
+ me->rows[me->nrows].alignment =
+ (me->rowgroup_align==HT_ALIGN_NONE) ?
+ me->alignment : me->rowgroup_align;
+ me->nrows++;
+ if (me->pending_colgroup_next > me->ncolinfo) {
+ me->ncolinfo = me->pending_colgroup_next;
+ me->pending_colgroup_next = 0;
+ }
+ me->rows[me->nrows].Line = -1; /* not yet used */
+ me->rows[me->nrows].ended = ROW_not_ended; /* No </tr> yet */
+ return (me->nrows - 1);
+}
+
+/*
+ * Returns -1 on error, otherwise current number of rows.
+ */
+PRIVATE int Stbl_finishRowInTable ARGS1(
+ STable_info *, me)
+{
+ STable_rowinfo *lastrow;
+ STable_states * s = &me->s;
+ int ncells;
+
+ CTRACE2(TRACE_TRST, (tfp, "TRST:Stbl_finishRowInTable()\n"));
+ if (!me->rows || !me->nrows)
+ return -1; /* no row started! */
+ lastrow = me->rows + (me->nrows - 1);
+ ncells = lastrow->ncells;
+ lastrow->ended = ROW_ended_by_endtr;
+ if (lastrow->ncells > 0) {
+ if (s->pending_len > 0)
+ lastrow->cells[lastrow->ncells - 1].len = s->pending_len;
+ s->pending_len = 0;
+ }
+ s->prev_state = s->state = CS_invalid;
+ s->lineno = -1;
+
+ if (s->icell_core >= 0 && !lastrow->fixed_line &&
+ lastrow->cells[s->icell_core].cLine >= 0)
+ lastrow->Line = lastrow->cells[s->icell_core].cLine;
+ s->icell_core = -1;
+ return (me->nrows);
+}
+
+PRIVATE void update_sumcols0 ARGS7(
+ STable_cellinfo *, sumcols,
+ STable_rowinfo *, lastrow,
+ int, pos,
+ int, len,
+ int, icell,
+ int, ispan,
+ int, allocated_sumcols)
+{
+ int i;
+ if (len > 0) {
+ int sumpos = pos;
+ int prevsumpos = sumcols[icell + ispan].pos;
+ int advance;
+ if (ispan > 0) {
+ if (lastrow->cells[icell].pos + len > sumpos)
+ sumpos = lastrow->cells[icell].pos + len;
+ if (sumcols[icell+ispan-1].pos + sumcols[icell+ispan-1].len > sumpos)
+ sumpos = sumcols[icell+ispan-1].pos + sumcols[icell+ispan-1].len;
+ }
+ advance = sumpos - prevsumpos;
+ if (advance > 0) {
+ for (i = icell + ispan; i < allocated_sumcols; i++) {
+ if (ispan > 0 && sumcols[i].colspan < -1) {
+ if (i + sumcols[i].colspan < icell + ispan) {
+ advance = sumpos - sumcols[i].pos;
+ if (i > 0)
+ advance = HTMAX(advance,
+ sumcols[i-1].pos + sumcols[i-1].len
+ - (sumcols[i].pos));
+ if (advance <= 0)
+ break;
+ }
+ }
+ if (sumcols[i].pos >= 0)
+ sumcols[i].pos += advance;
+ else {
+ sumcols[i].pos = sumpos;
+ break;
+ }
+ }
+ }
+ }
+}
+
+PRIVATE int get_remaining_colspan ARGS5(
+ STable_rowinfo *, me,
+ STable_cellinfo *, colinfo,
+ int, ncolinfo,
+ int, colspan,
+ int, ncols_sofar)
+{
+ int i;
+ int last_colspan = me->ncells ?
+ me->cells[me->ncells - 1].colspan : 1;
+
+ if (ncolinfo == 0 || me->ncells + last_colspan > ncolinfo) {
+ colspan = HTMAX(TRST_MAXCOLSPAN,
+ ncols_sofar - (me->ncells + last_colspan - 1));
+ } else {
+ for (i = me->ncells + last_colspan - 1; i < ncolinfo - 1; i++)
+ if (colinfo[i].cLine == EOCOLG)
+ break;
+ colspan = i - (me->ncells + last_colspan - 2);
+ }
+ return colspan;
+}
+
+#ifdef EXP_NESTED_TABLES
+/* Returns -1 on failure, 1 if faking was performed, 0 if not needed. */
+PRIVATE int Stbl_fakeFinishCellInTable ARGS4(
+ STable_info *, me,
+ STable_rowinfo *, lastrow,
+ int, lineno,
+ int, finishing) /* Processing finish or start */
+{
+ STable_states * s = &me->s;
+ int fake = 0;
+
+ switch (s->state) { /* We care only about trailing <BR> */
+ case CS_invalid:
+ case CS__0new:
+ case CS__0ef:
+ case CS__0cf:
+ case CS__new:
+ case CS__cbc:
+ case CS__ef:
+ case CS__cf:
+ default:
+ /* <BR></TD> may produce these (XXXX instead of CS__cbf?). But if
+ finishing==0, the caller already checked that we are on a
+ different line. */
+ if (finishing==0)
+ fake = 1;
+ break; /* Either can't happen, or may be ignored */
+ case CS__eb:
+ case CS__0eb:
+ case CS__0cb:
+ case CS__cb:
+ fake = 1;
+ break;
+ }
+ if (fake) {
+ /* The previous action we did was putting a linebreak. Now we
+ want to put another one. Fake necessary
+ </TD></TR><TR><TD></TD><TD> (and possibly </TD>) instead. */
+ int ncells = lastrow->ncells;
+ int i;
+ int al = lastrow->alignment;
+ int cs = lastrow->cells[lastrow->ncells - 1].colspan;
+ int rs = 1; /* XXXX How to find rowspan? */
+ int ih = 0; /* XXXX How to find is_header? */
+ int end_td = (TRST_ENDCELL_ENDTD | TRST_FAKING_CELLS);
+ int need_reserved = 0;
+ int prev_reserved_last = -1;
+ STable_rowinfo *prev_row;
+ int prev_row_n2 = lastrow - me->rows;
+
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_fakeFinishCellInTable(lineno=%d, finishing=%d) START FAKING\n",
+ lineno, finishing));
+
+ /* Although here we use pos=0, this may commit the previous
+ cell which had <BR> as a last element. This may overflow
+ the screen width, so the additional checks performed in
+ Stbl_finishCellInTable (comparing to Stbl_finishCellInRow)
+ are needed. */
+ if (finishing) {
+ /* Fake </TD> at BOL */
+ if (Stbl_finishCellInTable(me, end_td, lineno, 0, 0) < 0) {
+ return -1;
+ }
+ }
+
+ /* Fake </TR> at BOL */
+ /* Stbl_finishCellInTable(lineno, 0, 0);*/ /* Needed? */
+
+ /* Fake <TR> at BOL */
+ if (Stbl_addRowToTable(me, al, lineno) < 0) {
+ return -1;
+ }
+ lastrow = me->rows + (me->nrows - 1);
+ lastrow->content = IS_CONTINUATION_OF_CELL;
+ for (i = 0; i < lastrow->allocated; i++) {
+ if (lastrow->cells[i].alignment == RESERVEDCELL) {
+ need_reserved = 1;
+ break;
+ }
+ }
+
+ prev_row = me->rows + prev_row_n2;
+ for (i = ncells; i < prev_row->allocated; i++) {
+ if (prev_row->cells[i].alignment == RESERVEDCELL)
+ prev_reserved_last = i;
+ }
+ if (need_reserved || prev_reserved_last >= 0) {
+ /* Oups, we are going to stomp over a line which somebody
+ cares about already, or the previous line had reserved
+ cells which were not skipped over.
+
+ Remember that STable_rowinfo is about logical (TR)
+ table lines, not displayed lines. We need to duplicate
+ the reservation structure when we fake new logical lines. */
+ int prev_row_n = prev_row - me->rows;
+ STable_rowinfo *rows = realloc(me->rows,
+ (me->allocated_rows + 1)
+ * sizeof(STable_rowinfo));
+ int need_cells = prev_reserved_last + 1;
+ int n;
+
+ if (!rows)
+ return -1; /* ignore silently, no free memory, may be recoverable */
+
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_fakeFinishCellInTable REALLOC ROWSPAN\n"));
+ me->rows = rows;
+ lastrow = me->rows + (me->nrows - 1);
+ prev_row = me->rows + prev_row_n;
+ me->allocated_rows++;
+
+ /* Insert a duplicate row after lastrow */
+ for (n = me->allocated_rows - me->nrows - 1; n >= 0; --n)
+ lastrow[n + 1] = lastrow[n];
+
+ /* Ignore cells, they belong to the next row now */
+ lastrow->allocated = 0;
+ lastrow->cells = 0;
+ if (need_cells) {
+ lastrow->cells = typecallocn(STable_cellinfo, need_cells);
+ /* ignore silently, no free memory, may be recoverable */
+ if (!lastrow->cells) {
+ return -1;
+ }
+ lastrow->allocated = need_cells;
+ memcpy(lastrow->cells, prev_row->cells,
+ lastrow->allocated * sizeof(STable_cellinfo));
+
+ i = -1;
+ while (++i < ncells) {
+ /* Stbl_addCellToTable grants RESERVEDCELL, but we do not
+ want this action for fake cells.
+ XXX Maybe always fake RESERVEDCELL instead of explicitly
+ creating/destroying cells? */
+ if (lastrow->cells[i].alignment == RESERVEDCELL)
+ lastrow->cells[i].alignment = HT_LEFT;
+ }
+ }
+ }
+
+ /* Fake <TD></TD>...<TD> (and maybe a </TD>) at BOL. */
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_fakeFinishCellInTable FAKE %d elts%s\n",
+ ncells, (finishing ? ", last unfinished" : "")));
+ i = 0;
+ while (++i <= ncells) {
+ /* XXXX A lot of args may be wrong... */
+ if (Stbl_addCellToTable(me, (i==ncells ? cs : 1), rs, al,
+ ih, lineno, 0, 0) < 0) {
+ return -1;
+ }
+ lastrow->content &= ~HAS_BEG_OF_CELL; /* BEG_OF_CELL was fake */
+ /* We cannot run out of width here, so it is safe to not
+ call Stbl_finishCellInTable(), but Stbl_finishCellInRow. */
+ if (!finishing || (i != ncells)) {
+ if (Stbl_finishCellInRow(lastrow, s, end_td, lineno, 0) < 0) {
+ return -1;
+ }
+ }
+ }
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_fakeFinishCellInTable(lineno=%d) FINISH FAKING\n",
+ lineno));
+ return 1;
+ }
+ return 0;
+}
+#endif
+
+/*
+ * Returns -1 on error, otherwise 0.
+ */
+PUBLIC int Stbl_addCellToTable ARGS8(
+ STable_info *, me,
+ int, colspan,
+ int, rowspan,
+ int, alignment,
+ int, isheader,
+ int, lineno,
+ int, offset_not_used_yet GCC_UNUSED,
+ int, pos)
+{
+ STable_states * s = &me->s;
+ STable_rowinfo *lastrow;
+ STable_cellinfo *sumcols, *sumcol;
+ int i, icell, ncells, sumpos;
+
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_addCellToTable(lineno=%d, pos=%d, isheader=%d, cs=%d, rs=%d, al=%d)\n",
+ lineno, pos, (int)isheader, colspan, rowspan, alignment));
+ if (!me->rows || !me->nrows)
+ return -1; /* no row started! */
+ /* ##850_fail_if_fail?? */
+ if (me->rows[me->nrows - 1].ended != ROW_not_ended)
+ Stbl_addRowToTable(me, alignment, lineno);
+ Stbl_finishCellInTable(me, TRST_ENDCELL_ENDTD, lineno, 0, pos);
+ lastrow = me->rows + (me->nrows - 1);
+
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables) {
+ /* If the last cell was finished by <BR></TD>, we need to fake an
+ appropriate amount of cells */
+ if (!NO_AGGRESSIVE_NEWROW && pos == 0 && lastrow->ncells > 0
+ && lastrow->cells[lastrow->ncells-1].cLine != lineno) {
+ int rc = Stbl_fakeFinishCellInTable(me, lastrow, lineno, 0);
+
+ if (rc < 0)
+ return -1;
+ if (rc)
+ lastrow = me->rows + (me->nrows - 1);
+ }
+ }
+#endif
+ if (colspan == 0) {
+ colspan = get_remaining_colspan(lastrow, me->sumcols, me->ncolinfo,
+ colspan, me->ncols);
+ }
+ ncells = lastrow->ncells; /* remember what it was before adding cell. */
+ icell = Stbl_addCellToRow(lastrow, me->sumcols, me->ncolinfo, s,
+ colspan, alignment, isheader,
+ lineno, &pos);
+ if (icell < 0)
+ return icell;
+ if (me->nrows == 1 && me->startline < lastrow->Line)
+ me->startline = lastrow->Line;
+
+ if (rowspan != 1) {
+ Stbl_reserveCellsInTable(me, icell, colspan, rowspan);
+ /* me->rows may now have been realloc'd, make lastrow valid pointer */
+ lastrow = me->rows + (me->nrows - 1);
+ }
+ lastrow->content |= HAS_BEG_OF_CELL;
+
+ {
+ int growby = 0;
+ while (icell + colspan + 1 > me->allocated_sumcols + growby)
+ growby += CELLS_GROWBY;
+ if (growby) {
+ if (me->allocated_sumcols == 0 && !me->sumcols) {
+ sumcols = typecallocn(STable_cellinfo, growby);
+ } else {
+ sumcols = realloc(me->sumcols,
+ (me->allocated_sumcols + growby)
+ * sizeof(STable_cellinfo));
+ for (i = 0; sumcols && i < growby; i++) {
+ sumcol = sumcols + me->allocated_sumcols + i;
+ sumcol->pos = sumcols[me->allocated_sumcols-1].pos;
+ sumcol->len = 0;
+ sumcol->colspan = 0;
+ sumcol->cLine = 0;
+ sumcol->alignment = HT_ALIGN_NONE;
+ }
+ }
+ if (sumcols) {
+ me->allocated_sumcols += growby;
+ me->sumcols = sumcols;
+ } else {
+ return -1;
+ }
+ }
+ }
+ if (icell + 1 > me->ncols) {
+ me->ncols = icell + 1;
+ }
+ if (colspan > 1 && colspan + me->sumcols[icell + colspan].colspan > 0)
+ me->sumcols[icell + colspan].colspan = -colspan;
+ sumpos = pos;
+ if (ncells > 0)
+ sumpos += me->sumcols[ncells-1].pos - lastrow->cells[ncells-1].pos;
+ update_sumcols0(me->sumcols, lastrow, sumpos,
+ sumpos - (ncells > 0 ? me->sumcols[icell].pos : me->sumcols[icell].pos),
+ icell, 0, me->allocated_sumcols);
+
+ me->maxpos = me->sumcols[me->allocated_sumcols-1].pos;
+ if (me->maxpos > /* @@@ max. line length we can accept */ MAX_STBL_POS)
+ return -1;
+ return 0;
+}
+
+/*
+ * Returns -1 on error, otherwise 0.
+ */
+PUBLIC int Stbl_finishCellInTable ARGS5(
+ STable_info *, me,
+ int, end_td,
+ int, lineno,
+ int, offset,
+ int, pos)
+{
+ STable_states * s = &me->s;
+ STable_rowinfo *lastrow;
+ int len, xlen, icell;
+ int i;
+
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_finishCellInTable(lineno=%d, pos=%d, off=%d, end_td=%d)\n",
+ lineno, pos, offset, (int)end_td));
+ if (me->nrows == 0)
+ return -1;
+ lastrow = me->rows + (me->nrows - 1);
+ icell = lastrow->ncells - 1;
+ if (icell < 0)
+ return icell;
+ if (s->x_td == -1) { /* Stray </TD> or just-in-case, as on </TR> */
+ if ((end_td & TRST_ENDCELL_MASK) == TRST_ENDCELL_LINEBREAK)
+ lastrow->ended = ROW_ended_by_splitline;
+ return 0;
+ }
+
+#ifdef EXP_NESTED_TABLES
+ if (nested_tables) {
+ if (!NO_AGGRESSIVE_NEWROW && !(end_td & TRST_FAKING_CELLS)) {
+ int rc = Stbl_fakeFinishCellInTable(me, lastrow, lineno, 1);
+
+ if (rc) {
+ if (rc < 0)
+ return -1;
+ lastrow = me->rows + (me->nrows - 1);
+ icell = lastrow->ncells - 1;
+ }
+ }
+ }
+#endif
+ len = Stbl_finishCellInRow(lastrow, s, end_td, lineno, pos);
+ if (len == -1)
+ return len;
+ xlen = (len > 0) ? len : s->pending_len; /* ##890 use xlen if fixed_line?: */
+ if (lastrow->Line == lineno)
+ len = xlen;
+ if (lastrow->cells[icell].colspan > 1) {
+ /*
+ * @@@ This is all a too-complicated mess; do we need
+ * sumcols len at all, or is pos enough??
+ * Answer: sumcols len is at least used for center/right
+ * alignment, and should probably continue to be used there;
+ * all other uses are probably not necessary.
+ */
+ int spanlen = 0, spanlend = 0;
+ for (i = icell; i < icell + lastrow->cells[icell].colspan; i++) {
+ if (me->sumcols[i].len > 0) {
+ spanlen += me->sumcols[i].len;
+ if (i > icell)
+ spanlen++;
+ }
+ spanlend = HTMAX(spanlend,
+ me->sumcols[i+1].pos - me->sumcols[icell].pos);
+ }
+ if (spanlend)
+ spanlend--;
+ if (spanlend > spanlen)
+ spanlen = spanlend;
+ /* @@@ could overcount? */
+ if (len > spanlen)
+ me->maxlen += (len - spanlen);
+ } else if (len > me->sumcols[icell].len) {
+ if (me->sumcols[icell + 1].colspan >= -1)
+ me->maxlen += (len - me->sumcols[icell].len);
+ me->sumcols[icell].len = len;
+ }
+
+ if (len > 0) {
+ update_sumcols0(me->sumcols, lastrow, pos, len,
+ icell, lastrow->cells[icell].colspan,
+ me->allocated_sumcols);
+ me->maxpos = me->sumcols[me->allocated_sumcols-1].pos;
+ }
+
+ if ((end_td & TRST_ENDCELL_MASK) == TRST_ENDCELL_LINEBREAK) {
+ lastrow->ended = ROW_ended_by_splitline;
+ lastrow->content |= BELIEVE_OFFSET;
+ lastrow->offset = offset;
+ }
+
+#ifdef EXP_NESTED_TABLES /* maxlen may already include contribution of a cell in this column */
+ if (nested_tables) {
+ if (me->maxlen > MAX_STBL_POS)
+ return -1;
+ } else
+#endif
+ {
+ if (me->maxlen + (xlen - len) > MAX_STBL_POS)
+ return -1;
+ }
+ if (me->maxpos > /* @@@ max. line length we can accept */ MAX_STBL_POS)
+ return -1;
+
+ if (lineno != lastrow->Line) {
+ /* @@@ Do something here? Or is it taken care of in
+ Stbl_finishCellInRow ? */
+ }
+
+ return 0;
+}
+
+/*
+ * Returns -1 on error, otherwise 0.
+ */
+PUBLIC int Stbl_addColInfo ARGS4(
+ STable_info *, me,
+ int, colspan,
+ short, alignment,
+ BOOL, isgroup)
+{
+ STable_cellinfo *sumcols, *sumcol;
+ int i, icolinfo;
+
+ CTRACE2(TRACE_TRST,
+ (tfp, "TRST:Stbl_addColInfo(cs=%d, al=%d, isgroup=%d)\n",
+ colspan, alignment, (int)isgroup));
+ if (isgroup) {
+ if (me->pending_colgroup_next > me->ncolinfo)
+ me->ncolinfo = me->pending_colgroup_next;
+ me->pending_colgroup_next = me->ncolinfo + colspan;
+ if (me->ncolinfo > 0)
+ me->sumcols[me->ncolinfo - 1].cLine = EOCOLG;
+ me->pending_colgroup_align = alignment;
+ } else {
+ for (i = me->pending_colgroup_next - 1;
+ i >= me->ncolinfo + colspan; i--)
+ me->sumcols[i].alignment = HT_ALIGN_NONE;
+ me->pending_colgroup_next = me->ncolinfo + colspan;
+ }
+ icolinfo = me->ncolinfo;
+ if (!isgroup)
+ me->ncolinfo += colspan;
+
+ {
+ int growby = 0;
+ while (icolinfo + colspan + 1 > me->allocated_sumcols + growby)
+ growby += CELLS_GROWBY;
+ if (growby) {
+ if (me->allocated_sumcols == 0) {
+ sumcols = typecallocn(STable_cellinfo, growby);
+ } else {
+ sumcols = realloc(me->sumcols,
+ (me->allocated_sumcols + growby)
+ * sizeof(STable_cellinfo));
+ for (i = 0; sumcols && i < growby; i++) {
+ sumcol = sumcols + me->allocated_sumcols + i;
+ sumcol->pos = sumcols[me->allocated_sumcols-1].pos;
+ sumcol->len = 0;
+ sumcol->colspan = 0;
+ sumcol->cLine = 0;
+ }
+ }
+ if (sumcols) {
+ me->allocated_sumcols += growby;
+ me->sumcols = sumcols;
+ } else {
+ return -1;
+ }
+ }
+ }
+
+ if (alignment==HT_ALIGN_NONE)
+ alignment = me->pending_colgroup_align;
+ for (i = icolinfo; i < icolinfo + colspan; i++) {
+ me->sumcols[i].alignment = alignment;
+ }
+ return 0;
+}
+
+/*
+ * Returns -1 on error, otherwise 0.
+ */
+PUBLIC int Stbl_finishColGroup ARGS1(
+ STable_info *, me)
+{
+ CTRACE2(TRACE_TRST, (tfp, "TRST:Stbl_finishColGroup()\n"));
+ if (me->pending_colgroup_next >= me->ncolinfo) {
+ me->ncolinfo = me->pending_colgroup_next;
+ if (me->ncolinfo > 0)
+ me->sumcols[me->ncolinfo - 1].cLine = EOCOLG;
+ }
+ me->pending_colgroup_next = 0;
+ me->pending_colgroup_align = HT_ALIGN_NONE;
+ return 0;
+}
+
+PUBLIC int Stbl_addRowGroup ARGS2(
+ STable_info *, me,
+ short, alignment)
+{
+ CTRACE2(TRACE_TRST, (tfp, "TRST:Stbl_addRowGroup()\n"));
+ Stbl_cancelRowSpans(me);
+ me->rowgroup_align = alignment;
+ return 0; /* that's all! */
+}
+
+PUBLIC int Stbl_finishTABLE ARGS1(
+ STable_info *, me)
+{
+ STable_states * s = &me->s;
+ int i;
+ int curpos = 0;
+
+ CTRACE2(TRACE_TRST, (tfp, "TRST:Stbl_finishTABLE()\n"));
+ if (!me || me->nrows <= 0 || me->ncols <= 0) {
+ return -1;
+ }
+ if (me->nrows > 0 && me->rows[me->nrows-1].ncells > 0) {
+ if (s->pending_len > 0)
+ me->rows[me->nrows-1].cells[me->rows[me->nrows-1].ncells - 1].len = s->pending_len;
+ s->pending_len = 0;
+ }
+ Stbl_finishRowInTable(me);
+ /* take into account offsets on multi-line cells.
+ XXX We cannot do it honestly, since two cells on the same row may
+ participate in multi-line table entries, and we preserve only
+ one offset per row. This implementation may ignore
+ horizontal offsets for the last row of a multirow table entry. */
+ for (i = 0; i < me->nrows - 1; i++) {
+ int j = i + 1, leading = i, non_empty = 0;
+ STable_rowinfo *nextrow = me->rows + j;
+ int minoffset, have_offsets;
+ int foundcell = -1, max_width;
+
+ if ((nextrow->content & (IS_CONTINUATION_OF_CELL | HAS_BEG_OF_CELL | BELIEVE_OFFSET))
+ != (IS_CONTINUATION_OF_CELL | BELIEVE_OFFSET))
+ continue; /* Not a continuation line */
+ minoffset = nextrow[-1].offset; /* Line before first continuation */
+ CTRACE2(TRACE_TRST, (tfp, "TRST:Stbl_finishTABLE, l=%d, offset=%d, ended=%d.\n",
+ i, nextrow[-1].offset, nextrow[-1].ended));
+
+ /* Find the common part of the requested offsets */
+ while (j < me->nrows
+ && ((nextrow->content & (IS_CONTINUATION_OF_CELL | HAS_BEG_OF_CELL | BELIEVE_OFFSET))
+ == (IS_CONTINUATION_OF_CELL | BELIEVE_OFFSET))) {
+ if (minoffset > nextrow->offset)
+ minoffset = nextrow->offset;
+ CTRACE2(TRACE_TRST, (tfp, "TRST:Stbl_finishTABLE, l=%d, offset=%d, ended=%d.\n",
+ j, nextrow->offset, nextrow[-1].ended));
+ nextrow++;
+ j++;
+ }
+ i = j - 1; /* Continue after this line */
+ /* Cancel the common part of offsets */
+ j = leading; /* Restart */
+ nextrow = me->rows + j; /* Line before first continuation */
+ have_offsets = 0;
+ nextrow->content |= OFFSET_IS_VALID_LAST_CELL;
+ while (j <= i) { /* A continuation line */
+ nextrow->offset -= minoffset;
+ nextrow->content |= OFFSET_IS_VALID;
+ if (nextrow->offset)
+ have_offsets = 1;
+ nextrow++;
+ j++;
+ }
+ if (!have_offsets)
+ continue; /* No offsets to deal with */
+
+ /* Find the cell number */
+ foundcell = -1;
+ j = leading + 1; /* Restart */
+ nextrow = me->rows + j; /* First continuation line */
+ while (foundcell == -1 && j <= i) { /* A continuation line */
+ int curcell = -1;
+
+ while (foundcell == -1 && ++curcell < nextrow->ncells)
+ if (nextrow->cells[curcell].len)
+ foundcell = curcell, non_empty = j;
+ nextrow++;
+ j++;
+ }
+ if (foundcell == -1) /* Can it happen? */
+ continue;
+ /* Find the max width */
+ max_width = 0;
+ j = leading; /* Restart */
+ nextrow = me->rows + j; /* Include the pre-continuation line */
+ while (j <= i) { /* A continuation line */
+ if (nextrow->ncells > foundcell) {
+ int curwid = nextrow->cells[foundcell].len + nextrow->offset;
+
+ if (curwid > max_width)
+ max_width = curwid;
+ }
+ nextrow++;
+ j++;
+ }
+ /* Update the widths */
+ j = non_empty; /* Restart from the first nonempty */
+ nextrow = me->rows + j;
+ /* Register the increase of the width */
+ update_sumcols0(me->sumcols, me->rows + non_empty,
+ 0 /* width only */, max_width,
+ foundcell, nextrow->cells[foundcell].colspan,
+ me->allocated_sumcols);
+ j = leading; /* Restart from pre-continuation */
+ nextrow = me->rows + j;
+ while (j <= i) { /* A continuation line */
+ if (nextrow->ncells > foundcell)
+ nextrow->cells[foundcell].len = max_width;
+ nextrow++;
+ j++;
+ }
+ } /* END of Offsets processing */
+
+ for (i = 0; i < me->ncols; i++) {
+ if (me->sumcols[i].pos < curpos) {
+ me->sumcols[i].pos = curpos;
+ } else {
+ curpos = me->sumcols[i].pos;
+ }
+ if (me->sumcols[i].len > 0) {
+ curpos += me->sumcols[i].len;
+ }
+ }
+ /* need to recheck curpos: though it is checked each time a cell
+ is added, sometimes the result is ignored, as in split_line(). */
+ return (curpos > MAX_STBL_POS ? -1 : me->ncols);
+}
+
+PUBLIC short Stbl_getAlignment ARGS1(
+ STable_info *, me)
+{
+ return (short)(me ? me->alignment : HT_ALIGN_NONE);
+}
+
+PRIVATE int get_fixup_positions ARGS4(
+ STable_rowinfo *, me,
+ int *, oldpos,
+ int *, newpos,
+ STable_cellinfo *, sumcols)
+{
+ int i = 0, ip = 0;
+ int next_i, newlen;
+ int ninserts;
+
+ if (!me)
+ return -1;
+ while (i < me->ncells) {
+ int offset;
+
+ next_i = i + HTMAX(1, me->cells[i].colspan);
+ if (me->cells[i].cLine != me->Line) {
+ if (me->cells[i].cLine > me->Line)
+ break;
+ i = next_i;
+ continue;
+ }
+ oldpos[ip] = me->cells[i].pos;
+ if ((me->content & OFFSET_IS_VALID)
+ && (i == me->ncells - 1
+ || !((me->content & OFFSET_IS_VALID_LAST_CELL))))
+ offset = me->offset;
+ else
+ offset = 0;
+ newpos[ip] = sumcols[i].pos + offset;
+ if ((me->cells[i].alignment == HT_CENTER ||
+ me->cells[i].alignment == HT_RIGHT) &&
+ me->cells[i].len > 0) {
+ newlen = sumcols[next_i].pos - newpos[ip] - 1;
+ newlen = HTMAX(newlen, sumcols[i].len);
+ if (me->cells[i].len < newlen) {
+ if (me->cells[i].alignment == HT_RIGHT) {
+ newpos[ip] += newlen - me->cells[i].len;
+ } else {
+ newpos[ip] += (newlen - me->cells[i].len) / 2;
+ }
+ }
+ }
+ ip++;
+ i = next_i;
+ }
+ ninserts = ip;
+ return ninserts;
+}
+
+/*
+ * Returns -1 if we have no row for this lineno, or for other error,
+ * 0 or greater (number of oldpos/newpos pairs) if we have
+ * a table row.
+ */
+PUBLIC int Stbl_getFixupPositions ARGS4(
+ STable_info *, me,
+ int, lineno,
+ int *, oldpos,
+ int *, newpos)
+{
+ STable_rowinfo * row;
+ int j;
+ int ninserts = -1;
+ if (!me || !me->nrows)
+ return -1;
+ for (j = 0; j < me->nrows; j++) {
+ row = me->rows + j;
+ if (row->Line == lineno) {
+ ninserts = get_fixup_positions(row, oldpos, newpos,
+ me->sumcols);
+ break;
+ }
+ }
+ return ninserts;
+}
+
+PUBLIC int Stbl_getStartLine ARGS1(
+ STable_info *, me)
+{
+ if (!me)
+ return -1;
+ else
+ return me->startline;
+}
+
+#ifdef EXP_NESTED_TABLES
+
+PUBLIC int Stbl_getStartLineDeep ARGS1(
+ STable_info *, me)
+{
+ if (!me)
+ return -1;
+ while (me->enclosing)
+ me = me->enclosing;
+ return me->startline;
+}
+
+PUBLIC void Stbl_update_enclosing ARGS3(
+ STable_info *, me,
+ int, max_width,
+ int, last_lineno)
+{
+ int l;
+
+ if (!me || !me->enclosing || !max_width)
+ return;
+ CTRACE2(TRACE_TRST, (tfp, "TRST:Stbl_update_enclosing, width=%d, lines=%d...%d.\n",
+ max_width, me->startline, last_lineno));
+ for (l = me->startline; l <= last_lineno; l++) {
+ /* Fake <BR> in appropriate positions */
+ if (Stbl_finishCellInTable(me->enclosing, TRST_ENDCELL_LINEBREAK, l, 0, max_width) < 0) {
+ /* It is not handy to let the caller delete me->enclosing,
+ and it does not buy us anything. Do it directly. */
+ STable_info *stbl = me->enclosing;
+
+ CTRACE2(TRACE_TRST, (tfp, "TRST:Stbl_update_enclosing: width too large, aborting enclosing\n"));
+ me->enclosing = 0;
+ while (stbl) {
+ STable_info *enclosing = stbl->enclosing;
+ Stbl_free(stbl);
+ stbl = enclosing;
+ }
+ break;
+ }
+ }
+ return;
+}
+
+PUBLIC void Stbl_set_enclosing ARGS3(
+ STable_info *, me,
+ STable_info *, enclosing,
+ struct _TextAnchor*,enclosing_last_anchor_before_stbl)
+{
+ if (!me)
+ return;
+ me->enclosing = enclosing;
+ me->enclosing_last_anchor_before_stbl = enclosing_last_anchor_before_stbl;
+}
+
+PUBLIC STable_info * Stbl_get_enclosing ARGS1(
+ STable_info *, me)
+{
+ if (!me)
+ return 0;
+ return me->enclosing;
+}
+
+PUBLIC struct _TextAnchor * Stbl_get_last_anchor_before ARGS1(
+ STable_info *, me)
+{
+ if (!me)
+ return 0;
+ return me->enclosing_last_anchor_before_stbl;
+}
+#endif
diff --git a/gnu/usr.bin/lynx/src/TRSTable.h b/gnu/usr.bin/lynx/src/TRSTable.h
new file mode 100644
index 00000000000..8512bc2b676
--- /dev/null
+++ b/gnu/usr.bin/lynx/src/TRSTable.h
@@ -0,0 +1,49 @@
+#ifndef TRSTABLE_H
+#define TRSTABLE_H
+
+#include <HTUtils.h>
+
+/* TRST_MAXCOLSPAN and TRST_MAXCOLSPAN are defined in userdefs.h */
+
+typedef struct _STable_info STable_info;
+extern STable_info * Stbl_startTABLE PARAMS((short));
+extern int Stbl_finishTABLE PARAMS((STable_info *));
+extern void Stbl_free PARAMS((STable_info *));
+extern int Stbl_addRowToTable PARAMS((STable_info *, int, int));
+extern int Stbl_addCellToTable PARAMS((STable_info *, int, int, int, int, int, int, int));
+extern int Stbl_finishCellInTable PARAMS((STable_info *, int, int, int, int));
+extern int Stbl_addColInfo PARAMS((STable_info *, int, short, BOOL));
+extern int Stbl_finishColGroup PARAMS((STable_info *));
+extern int Stbl_addRowGroup PARAMS((STable_info *, short));
+
+#define TRST_ENDCELL_ENDTD 1
+#define TRST_ENDCELL_LINEBREAK 0
+#define TRST_ENDCELL_MASK 1
+#define TRST_FAKING_CELLS 2
+#define Stbl_lineBreak(stbl,l,off,pos) Stbl_finishCellInTable(stbl, TRST_ENDCELL_LINEBREAK, l, off, pos)
+
+extern int Stbl_getStartLine PARAMS((STable_info *));
+extern int Stbl_getFixupPositions PARAMS((
+ STable_info * me,
+ int lineno,
+ int * oldpos,
+ int * newpos));
+extern short Stbl_getAlignment PARAMS((STable_info *));
+
+#ifdef EXP_NESTED_TABLES
+extern void Stbl_update_enclosing PARAMS((
+ STable_info * me,
+ int max_width,
+ int last_lineno));
+struct _TextAnchor;
+extern void Stbl_set_enclosing PARAMS(( STable_info *me,
+ STable_info *encl,
+ struct _TextAnchor *last_anchor));
+extern STable_info * Stbl_get_enclosing PARAMS((STable_info * me));
+extern struct _TextAnchor * Stbl_get_last_anchor_before PARAMS((STable_info * me));
+extern int Stbl_getStartLineDeep PARAMS((STable_info *));
+#else
+#define Stbl_getStartLineDeep(t) Stbl_getStartLine(t)
+#endif
+
+#endif /* TRSTABLE_H */
diff --git a/gnu/usr.bin/lynx/src/UCAuto.c b/gnu/usr.bin/lynx/src/UCAuto.c
index 12e9f1deeb2..6a531adfcff 100644
--- a/gnu/usr.bin/lynx/src/UCAuto.c
+++ b/gnu/usr.bin/lynx/src/UCAuto.c
@@ -1,7 +1,7 @@
/*
** 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
+** You have to change this code if it needs accommodation for your
** system (or get the required files...).
**
** Depending on the Display Character Set switched to, and the previous
@@ -23,9 +23,29 @@
#include <LYGlobalDefs.h>
#include <LYClean.h>
#include <LYLeaks.h>
+#include <LYCharSets.h>
#ifdef EXP_CHARTRANS_AUTOSWITCH
+# ifdef CAN_SWITCH_DISPLAY_CHARSET
+char *charset_switch_rules;
+char *charsets_directory;
+int auto_other_display_charset = -1;
+int codepages[2];
+int real_charsets[2] = {-1, -1}; /* Non "auto-" charsets for the cps */
+int switch_display_charsets;
+# endif
+
+# ifdef __EMX__
+/* If we "just include" <os2.h>, BOOLEAN conflicts. */
+# define BOOLEAN OS2_BOOLEAN /* This file doesn't use it, conflicts */
+# define INCL_VIO /* I want some Vio functions.. */
+# define INCL_DOSPROCESS /* TIB PIB. */
+# define INCL_DOSNLS /* DosQueryCp. */
+# include <os2.h> /* Misc stuff.. */
+# include <os2thunk.h> /* 32 bit to 16 bit pointer conv */
+# endif
+
#ifdef LINUX
typedef enum {
Is_Unset, Is_Set, Dunno, Dont_Care
@@ -43,19 +63,26 @@ static char *T_umap_fn = NULL;
#define SETFONT "setfont"
#define NOOUTPUT "2>/dev/null >/dev/null"
-PRIVATE void call_setfont ARGS3(
- char *, font,
- char *, fnsuffix,
- char *, umap)
+/*
+ * call_setfont - execute "setfont" command via system()
+ * returns: 0 ok (as far as we know)
+ * -1 error (assume font and umap are not loaded)
+ * 1 error with umap (assume font loaded but umap empty)
+ */
+PRIVATE int call_setfont ARGS3(
+ CONST char *, font,
+ CONST char *, fnsuffix,
+ CONST char *, umap)
{
char *T_setfont_cmd = NULL;
+ int rv;
if ((font && T_font_fn && !strcmp(font, T_font_fn))
&& (umap && T_umap_fn && !strcmp(umap, T_umap_fn))) {
/*
* No need to repeat.
*/
- return;
+ return 0;
}
if (font)
StrAllocCopy(T_font_fn, font);
@@ -77,10 +104,24 @@ PRIVATE void call_setfont ARGS3(
}
if (T_setfont_cmd) {
- CTRACE(tfp, "Executing setfont: '%s'\n", T_setfont_cmd);
- LYSystem(T_setfont_cmd);
+ CTRACE((tfp, "Executing setfont: '%s'\n", T_setfont_cmd));
+ rv = LYSystem(T_setfont_cmd);
FREE(T_setfont_cmd);
+ if (rv) {
+ CTRACE((tfp, "call_setfont: system returned %d (0x%x)!\n",
+ rv, rv));
+ if ((rv == 0x4200 || rv == 0x4100) && umap && *umap)
+ /*
+ * It seems setfont returns 65 or 66 to the shell if
+ * the font was loaded ok but something was wrong with
+ * the umap file. - kw
+ */
+ return 1;
+ else
+ return -1;
+ }
}
+ return 0;
}
PRIVATE void write_esc ARGS1(
@@ -117,8 +158,8 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
static TGen_state_t lastUtf = Dunno;
static TGen_state_t lastHasUmap = Dunno;
- static char *old_font;
- static char *old_umap;
+ static char *old_font = NULL;
+ static char *old_umap = NULL;
CONST char * name;
TTransT_t TransT = GN_dunno;
@@ -127,6 +168,7 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
char *tmpbuf1 = NULL;
char *tmpbuf2 = NULL;
+ int status = 0;
/*
* Restore the original character set.
@@ -145,26 +187,57 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
HTSprintf0(&tmpbuf1, "%s %s %s",
SETFONT, old_font, NOOUTPUT);
}
- LYSystem(tmpbuf1);
+ CTRACE((tfp, "Executing setfont to restore: '%s'\n", tmpbuf1));
+ status = LYSystem(tmpbuf1);
FREE(tmpbuf1);
}
-
- remove(old_font);
- FREE(old_font);
- old_font = 0;
-
- remove(old_umap);
- FREE(old_umap);
- old_umap = 0;
+ }
+ if (newcs < 0 && p == 0) {
+ if (old_font) {
+ LYRemoveTemp(old_font);
+ FREE(old_font);
+ }
+ if (old_umap) {
+ LYRemoveTemp(old_umap);
+ FREE(old_umap);
+ }
+ if (status == 0) {
+ FREE(T_font_fn);
+ FREE(T_umap_fn);
+ }
}
return;
} else if (lastcs < 0 && old_umap == 0 && old_font == 0) {
- old_umap = tempnam((char *)0, "umap");
- old_font = tempnam((char *)0, "font");
- HTSprintf0(&tmpbuf1, "%s -o %s -ou %s %s",
- SETFONT, old_font, old_umap, NOOUTPUT);
- LYSystem(tmpbuf1);
- FREE(tmpbuf1);
+ FILE * fp1;
+ FILE * fp2 = NULL;
+ if ((old_font = typecallocn(char, LY_MAXPATH)))
+ old_umap = typecallocn(char, LY_MAXPATH);
+ if ((fp1 = LYOpenTemp(old_font, ".fnt", BIN_W)))
+ fp2 = LYOpenTemp(old_umap, ".uni", BIN_W);
+ if (fp1 && fp2) {
+ size_t nlen;
+ char *rp;
+ HTSprintf0(&tmpbuf1, "%s -o %s -ou %s %s",
+ SETFONT, old_font, old_umap, NOOUTPUT);
+ CTRACE((tfp, "Executing setfont to save: '%s'\n", tmpbuf1));
+ LYSystem(tmpbuf1);
+ FREE(tmpbuf1);
+ LYCloseTempFP(fp1);
+ LYCloseTempFP(fp2);
+ if ((nlen = strlen(old_font)) + 1 < LY_MAXPATH &&
+ (rp = realloc(old_font, nlen + 1)))
+ old_font = rp;
+ if ((nlen = strlen(old_umap)) + 1 < LY_MAXPATH &&
+ (rp = realloc(old_umap, nlen + 1)))
+ old_umap = rp;
+ } else {
+ if (fp1)
+ LYRemoveTemp(old_font);
+ if (fp2)
+ LYRemoveTemp(old_umap);
+ FREE(old_font);
+ FREE(old_umap);
+ }
}
name = p->MIMEname;
@@ -176,6 +249,7 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
#define SUFF2 "-16.psf"
#define SUFF3 "-8x16"
#define SUFF4 "8x16"
+#define SUFF5 ".cp -16"
/*
* Use this for output of escape sequences.
@@ -188,12 +262,15 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
return;
}
- if (!strcmp(name, "iso-8859-10")) {
- call_setfont("iso10", SUFF1, "iso10.uni");
- TransT = GN_Kuser;
- HasUmap = Is_Set;
- Utf = Is_Unset;
- } else if (!strncmp(name, "iso-8859-1", 10)) {
+ /* NOTE: `!!umap not in kbd!!' comments below means that the *.uni file
+ is not found in kbd package. Reference Debian Package: kbd-data,
+ Version: 0.96a-14. They should be located elsewhere or generated.
+ Also some cpNNN fonts used below are not in the kbd-data. - kw
+ */
+
+ if (!strncmp(name, "iso-8859-1", 10) &&
+ (!name[10] || !isdigit(UCH(name[10])))
+ ) {
if ((lastHasUmap == Is_Set) && !strcmp(lastname, "cp850")) {
/*
* cp850 already contains all latin1 characters.
@@ -205,7 +282,7 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
/*
* "setfont lat1u-16.psf -u lat1u.uni"
*/
- call_setfont("lat1u", SUFF2, "lat1u.uni");
+ status = call_setfont("lat1u", SUFF2, "lat1u.uni");
HasUmap = Is_Set;
if (lastTransT != GN_Blat1) {
TransT = GN_Blat1;
@@ -213,26 +290,32 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
}
Utf = Is_Unset;
} else if (!strcmp(name, "iso-8859-2")) {
-#ifdef NOTDEFINED
- /*
- * "setfont lat2-16.psf -u lat2.uni"
- */
- call_setfont("lat2", SUFF2, "lat2.uni"); */
-#endif /* NOTDEFINED */
/*
* "setfont iso02.f16 -u iso02.uni"
*/
- call_setfont("iso02", SUFF1, "iso02.uni");
+ status = call_setfont("iso02", SUFF1, "iso02.uni");
TransT = GN_Kuser;
HasUmap = Is_Set;
Utf = Is_Unset;
+ } else if (!strcmp(name, "iso-8859-15")) {
+ /*
+ * "setfont lat0-16.psf"
+ */
+ status = call_setfont("lat0", SUFF2, NULL);
+ TransT = GN_Blat1; /* bogus! */
+ HasUmap = Dunno; /* distributed lat0 files have bogus map data! */
+ Utf = Is_Unset;
} else if (!strncmp(name, "iso-8859-", 9)) {
- HTSprintf0(&tmpbuf1, "iso0%s", &name[9]);
- HTSprintf0(&tmpbuf2, "iso0%s%s", &name[9],".uni");
+ if (strlen(name) <= 10 || !isdigit(UCH(name[10])))
+ HTSprintf0(&tmpbuf1, "iso0%s", &name[9]);
+ else
+ HTSprintf0(&tmpbuf1, "iso%s", &name[9]);
+ HTSprintf0(&tmpbuf2, "%s.uni", tmpbuf1);
/*
* "setfont iso0N.f16 -u iso0N.uni"
*/
- call_setfont(tmpbuf1, SUFF1, tmpbuf2);
+ status = call_setfont(tmpbuf1, SUFF1, tmpbuf2);
+ FREE(tmpbuf1);
FREE(tmpbuf2);
TransT = GN_Kuser;
HasUmap = Is_Set;
@@ -241,16 +324,16 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
/*
* "setfont koi8-8x16"
*/
- call_setfont("koi8", SUFF3, NULL);
+ status = call_setfont("koi8", SUFF3, "koi8r.uni"); /* !!umap not in kbd!! */
TransT = GN_Kuser;
- HasUmap = Is_Unset;
+ HasUmap = Is_Set;
Utf = Is_Unset;
} else if (!strcmp(name, "cp437")) {
/*
* "setfont default8x16 -u cp437.uni"
*/
- call_setfont("default", SUFF4, "cp437.uni");
- if (TransT == GN_Kuser || TransT == GN_Ucp437)
+ status = call_setfont("default", SUFF4, "cp437.uni");
+ if (lastTransT == GN_Kuser || lastTransT == GN_Ucp437)
TransT = GN_dontCare;
else
TransT = GN_Ucp437;
@@ -260,7 +343,27 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
/*
* "setfont cp850-8x16 -u cp850.uni"
*/
- call_setfont("cp850", SUFF3, "cp850.uni");
+ status = call_setfont("cp850", SUFF3, "cp850.uni"); /* !!umap not in kbd!! */
+ TransT = GN_Kuser;
+ HasUmap = Is_Set;
+ Utf = Is_Unset;
+ } else if (!strcmp(name, "cp866") ||
+ !strcmp(name, "cp852") ||
+ !strcmp(name, "cp862")) { /* MS-Kermit has these files */
+ HTSprintf0(&tmpbuf2, "%s.uni", name);
+ /*
+ * "setfont cpNNN.f16"
+ */
+ status = call_setfont(name, SUFF1, tmpbuf2); /* !!umap not in kbd!! */
+ FREE(tmpbuf2);
+ TransT = GN_Kuser;
+ HasUmap = Is_Set;
+ Utf = Is_Unset;
+ } else if (!strcmp(name, "cp737")) {
+ /*
+ * "setfont cp737.cp"
+ */
+ status = call_setfont("737", SUFF5, "cp737.uni"); /* !!umap not in kbd!! */
TransT = GN_Kuser;
HasUmap = Is_Set;
Utf = Is_Unset;
@@ -272,6 +375,14 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
Utf = Dont_Care;
}
+ if (status == 1)
+ HasUmap = Is_Unset;
+ else if (status < 0) {
+ if (HasUmap == Is_Set)
+ HasUmap = Dunno;
+ name = "unknown-8bit";
+ }
+
if (TransT != lastTransT) {
if (TransT == GN_Blat1) {
/*
@@ -338,16 +449,238 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
#ifdef __EMX__
int res = 0;
- if (p->codepage) {
- res = VioSetCp(0, p->codepage, 0);
- CTRACE(tfp, "UCChangeTerminalCodepage: VioSetCp(%d) returned %d\n", p->codepage, res);
- }
+ if (newcs < 0)
+ newcs = auto_display_charset;
+ res = Switch_Display_Charset(newcs, SWITCH_DISPLAY_CHARSET_REALLY);
+ CTRACE((tfp, "UCChangeTerminalCodepage: Switch_Display_Charset(%d) returned %d\n", newcs, res));
#else
- CTRACE(tfp, "UCChangeTerminalCodepage: Called, but not implemented!");
+ CTRACE((tfp, "UCChangeTerminalCodepage: Called, but not implemented!"));
#endif
}
#endif /* LINUX */
+#ifdef CAN_SWITCH_DISPLAY_CHARSET
+
+PUBLIC int Find_Best_Display_Charset ARGS1 (int, ord)
+{
+ CONST char *name = LYCharSet_UC[ord].MIMEname;
+ char *s = charset_switch_rules, *r;
+ char buf[160];
+ static int lowercase;
+ int n = strlen(name), source = 1;
+
+ if (!s || !n)
+ return ord;
+ if (!lowercase++)
+ LYLowerCase(charset_switch_rules);
+ while (1) {
+ while (*s && strchr(" \t,", *s))
+ s++; /* Go to start of a name or ':' */
+ if (!*s && source)
+ return ord; /* OK to find nothing */
+ if (!*s) {
+ sprintf(buf, "No destination for '%.80s' in CHARSET_SWITCH_RULES",
+ name);
+ HTInfoMsg(buf);
+ return ord;
+ }
+ if (*s == ':') {
+ /* Before the replacement name */
+ while (*s && strchr(" \t:", *s))
+ s++; /* Go to the replacement */
+ /* At start of the replacement name */
+ r = s;
+ while (*s && !strchr(" \t,:", *s))
+ s++; /* Skip the replacement */
+ if (source)
+ continue;
+ break;
+ }
+ /* At start of the source name */
+ if (source && !strnicmp(name, s, n) && strchr(" \t,", s[n])) {/* Found! */
+ source = 0;
+ s += n;
+ continue; /* Look for the replacement */
+ }
+ while (*s && !strchr(" \t,:", *s))
+ s++; /* Skip the other source names */
+ }
+ /* Here r point to the replacement, s to the end of the replacement. */
+ if (s >= r + sizeof(buf)) {
+ HTInfoMsg("Charset name in CHARSET_SWITCH_RULES too long");
+ return ord;
+ }
+ strncpy(buf, r, s-r);
+ buf[s-r] = '\0';
+ n = UCGetLYhndl_byMIME(buf);
+ if (n < 0) {
+ sprintf(buf, "Unknown charset name '%.*s' in CHARSET_SWITCH_RULES",
+ s-r, r);
+ HTInfoMsg(buf);
+ return ord;
+ }
+ return n;
+}
+
+# ifdef __EMX__
+/* Switch display for the best fit for LYCharSet_UC[ord].
+ If really is MAYBE, the switch is tentative only, another switch may happen
+ before the actual display.
+
+ Returns the charset we switched to. */
+PRIVATE int _Switch_Display_Charset ARGS2 (int, ord, enum switch_display_charset_t, really)
+{
+ CONST char *name;
+ unsigned short cp;
+ static int font_loaded_for = -1, old_h, old_w;
+ int rc, ord1;
+ UCHAR msgbuf[MAXPATHLEN + 80];
+
+ CTRACE((tfp, "_Switch_Display_Charset(cp=%d, really=%d).\n", ord, really));
+ /* Do not trust current_char_set unless REALLY, we fake it if MAYBE! */
+ if (ord == current_char_set && really == SWITCH_DISPLAY_CHARSET_MAYBE)
+ return ord;
+ if (ord == auto_other_display_charset
+ || ord == auto_display_charset || ord == font_loaded_for) {
+ if (really == SWITCH_DISPLAY_CHARSET_MAYBE)
+ return ord; /* Report success, to avoid flicker, switch later */
+ } else /* Currently supports only koi8-r to cp866 translation */
+ ord = Find_Best_Display_Charset(ord);
+
+ /* Ignore sizechange unless the font is loaded */
+ if (ord != font_loaded_for && really == SWITCH_DISPLAY_CHARSET_SIZECHANGE)
+ return ord;
+
+ if (ord == real_charsets[0] || ord == real_charsets[1]) {
+ ord1 = (ord == real_charsets[1]
+ ? auto_other_display_charset : auto_display_charset);
+ if (really == SWITCH_DISPLAY_CHARSET_MAYBE)
+ return ord; /* Can switch later, report success to avoid flicker */
+ } else
+ ord1 = ord;
+ if (ord == current_char_set && really == SWITCH_DISPLAY_CHARSET_MAYBE)
+ return ord;
+
+ name = LYCharSet_UC[ord1].MIMEname;
+ if (ord1 == auto_other_display_charset || ord1 == auto_display_charset) {
+ retry:
+ rc = VioSetCp(0,codepages[ord1 == auto_other_display_charset],0);
+ if (rc == 0)
+ goto report;
+ err:
+ sprintf(msgbuf, "Can't change to '%s': err=%#lx=%ld", name, rc, rc);
+ HTInfoMsg(msgbuf);
+ return -1;
+ }
+
+ /* Not a "prepared" codepage. Need to load the user font. */
+ if (charsets_directory) {
+ TIB *tib; /* Can't load font in a windowed-VIO */
+ PIB *pib;
+ VIOFONTINFO f[2];
+ VIOFONTINFO *font;
+ UCHAR b[1<<17];
+ UCHAR *buf = b;
+ UCHAR fnamebuf[MAXPATHLEN];
+ FILE *file;
+ APIRET rc;
+ long i, j;
+
+ /* 0 means a FS protected-mode session */
+ if ( font_loaded_for == -1 /* Did not try it yet */
+ && (DosGetInfoBlocks(&tib, &pib) || pib->pib_ultype != 0) ) {
+ ord = ord1 = auto_display_charset;
+ goto retry;
+ }
+ /* Should not cross 64K boundaries: */
+ font = f;
+ if (((((ULONG)(char*)f) + sizeof(*font)) & 0xFFFF) < sizeof(*font))
+ font++;
+ if (((ULONG)buf) & 0xFFFF)
+ buf += 0x10000 - (((ULONG)buf) & 0xFFFF);
+ font->cb = sizeof(*font); /* How large is this structure */
+ font->type=0; /* Not the BIOS, the loaded font. */
+ font->cbData = 65535; /* How large is my buffer? */
+ font->pbData = _emx_32to16(buf); /* Wants an 16:16 pointer */
+
+ rc = VioGetFont(font,0); /* Retrieve data for current font */
+ if (rc) {
+ sprintf(msgbuf, "Can't fetch current font info: err=%#lx=%ld", rc, rc);
+ HTInfoMsg(msgbuf);
+ ord = ord1 = auto_display_charset;
+ goto retry;
+ }
+ if ( ord1 == font_loaded_for
+ && old_h == font->cyCell && old_w == font->cxCell ) {
+ /* The same as the previous font */
+ if ((rc = VioSetCp(0, -1, 0))) /* -1: User font */
+ goto err;
+ goto report;
+ }
+ sprintf(fnamebuf, "%s/%dx%d/%s.fnt",
+ charsets_directory, font->cyCell, font->cxCell, name);
+ file = fopen(fnamebuf, BIN_R);
+ if (!file) {
+ sprintf(msgbuf, "Can't open font file '%s'", fnamebuf);
+ HTInfoMsg(msgbuf);
+ ord = ord1 = auto_display_charset;
+ goto retry;
+ }
+ i = ftell(file);
+ fseek(file, 0, SEEK_END);
+ if (ftell(file) - i != font->cbData) {
+ fclose(file);
+ sprintf(msgbuf, "Mismatch of size of font file '%s'", fnamebuf);
+ HTAlert(msgbuf);
+ ord = ord1 = auto_display_charset;
+ goto retry;
+ }
+ fseek(file, i, SEEK_SET);
+ fread(buf, 1, font->cbData,file);
+ fclose(file);
+ rc = VioSetFont(font,0); /* Put it all back.. */
+ if (rc) {
+ sprintf(msgbuf, "Can't set font: err=%#lx=%ld", rc, rc);
+ HTInfoMsg(msgbuf);
+ ord = ord1 = auto_display_charset;
+ font_loaded_for = -1;
+ goto retry;
+ }
+ font_loaded_for = ord1;
+ old_h = font->cyCell;
+ old_w = font->cxCell;
+ } else {
+ ord = ord1 = auto_display_charset;
+ goto retry;
+ }
+ report:
+ CTRACE((tfp, "Display font set to '%s'.\n", name));
+ return ord;
+}
+# endif /* __EMX__ */
+
+PUBLIC int Switch_Display_Charset ARGS2 (CONST int, ord, CONST enum switch_display_charset_t, really)
+{
+ int prev = current_char_set;
+ int res;
+ static int repeated;
+
+ if (!switch_display_charsets
+ && (really == SWITCH_DISPLAY_CHARSET_MAYBE
+ /* The first switch is not due to an interactive action */
+ || (really == SWITCH_DISPLAY_CHARSET_REALLY
+ && !(repeated++))))
+ return 0;
+ res = _Switch_Display_Charset(ord, really);
+ if (res < 0 || prev == res) /* No change */
+ return 0;
+ /* Register the change */
+ current_char_set = res;
+ HTMLUseCharacterSet(current_char_set);
+ return 1;
+}
+#endif /* CAN_SWITCH_DISPLAY_CHARSET */
+
#else /* EXP_CHARTRANS_AUTOSWITCH not defined: */
/*
* This is the thing that actually gets called from display_page().
@@ -356,6 +689,6 @@ PUBLIC void UCChangeTerminalCodepage ARGS2(
int, newcs GCC_UNUSED,
LYUCcharset *, p GCC_UNUSED)
{
- CTRACE(tfp, "UCChangeTerminalCodepage: Called, but not implemented!");
+ CTRACE((tfp, "UCChangeTerminalCodepage: Called, but not implemented!"));
}
#endif /* EXP_CHARTRANS_AUTOSWITCH */
diff --git a/gnu/usr.bin/lynx/src/UCAux.c b/gnu/usr.bin/lynx/src/UCAux.c
index bf4ab8b0f22..51d0be20219 100644
--- a/gnu/usr.bin/lynx/src/UCAux.c
+++ b/gnu/usr.bin/lynx/src/UCAux.c
@@ -5,9 +5,7 @@
#include <UCDefs.h>
#include <HTStream.h>
#include <UCAux.h>
-
-extern HTCJKlang HTCJK;
-extern LYUCcharset LYCharSet_UC[];
+#include <LYCharSets.h>
PUBLIC BOOL UCCanUniTranslateFrom ARGS1(
int, from)
@@ -151,16 +149,15 @@ PUBLIC BOOL UCNeedNotTranslate ARGS2(
** up to the caller to do something about them. - KW
*/
PUBLIC void UCSetTransParams ARGS5(
- UCTransParams *, pT,
+ UCTransParams *, pT,
int, cs_in,
CONST LYUCcharset*, p_in,
int, cs_out,
CONST LYUCcharset*, p_out)
{
- CTRACE(tfp, "UCSetTransParams: from %s(%d) to %s(%d)\n",
-/* p_in->MIMEname, p_in->UChndl, p_out->MIMEname, p_out->UChndl); */
+ CTRACE((tfp, "UCSetTransParams: from %s(%d) to %s(%d)\n",
p_in->MIMEname, UCGetLYhndl_byMIME(p_in->MIMEname),
- p_out->MIMEname, UCGetLYhndl_byMIME(p_out->MIMEname));
+ p_out->MIMEname, UCGetLYhndl_byMIME(p_out->MIMEname)));
/*
** Initialize this element to FALSE, and set it TRUE
@@ -172,7 +169,7 @@ PUBLIC void UCSetTransParams ARGS5(
** The "transparent" display character set is a
** "super raw mode". - FM
*/
- pT->transp = (!strcmp(p_in->MIMEname, "x-transparent") ||
+ pT->transp = (BOOL) (!strcmp(p_in->MIMEname, "x-transparent") ||
!strcmp(p_out->MIMEname, "x-transparent"));
if (pT->transp) {
@@ -186,8 +183,8 @@ PUBLIC void UCSetTransParams ARGS5(
pT->use_raw_char_in = TRUE;
pT->strip_raw_char_in = FALSE;
pT->pass_160_173_raw = TRUE;
- pT->repl_translated_C0 = (p_out->enc == UCT_ENC_8BIT_C0);
- pT->trans_C0_to_uni = (p_in->enc == UCT_ENC_8BIT_C0 ||
+ pT->repl_translated_C0 = (BOOL) (p_out->enc == UCT_ENC_8BIT_C0);
+ pT->trans_C0_to_uni = (BOOL) (p_in->enc == UCT_ENC_8BIT_C0 ||
p_out->enc == UCT_ENC_8BIT_C0);
} else {
/*
@@ -199,13 +196,13 @@ PUBLIC void UCSetTransParams ARGS5(
** Set this element if we want to treat
** the input as CJK. - FM
*/
- pT->do_cjk = ((p_in->enc == UCT_ENC_CJK) && (HTCJK != NOCJK));
+ pT->do_cjk = (BOOL) ((p_in->enc == UCT_ENC_CJK) && (HTCJK != NOCJK));
/*
** Set these elements based on whether
** we are dealing with UTF-8. - FM
*/
- pT->decode_utf8 = (p_in->enc == UCT_ENC_UTF8);
- pT->output_utf8 = (p_out->enc == UCT_ENC_UTF8);
+ pT->decode_utf8 = (BOOL) (p_in->enc == UCT_ENC_UTF8);
+ pT->output_utf8 = (BOOL) (p_out->enc == UCT_ENC_UTF8);
if (pT->do_cjk) {
/*
** Set up the structure for a CJK input with
@@ -227,7 +224,7 @@ PUBLIC void UCSetTransParams ARGS5(
** equivalent to them, i.e., if we have UCS without
** having to do a table translation.
*/
- intm_ucs = (cs_in == LATIN1 || pT->decode_utf8 ||
+ intm_ucs = (BOOL) (cs_in == LATIN1 || pT->decode_utf8 ||
(p_in->codepoints &
(UCT_CP_SUBSETOF_LAT1|UCT_CP_SUBSETOF_UCS2)));
/*
@@ -237,7 +234,7 @@ PUBLIC void UCSetTransParams ARGS5(
** that use the transformation structure, so it is
** treated as already Unicode here.
*/
- pT->trans_to_uni = (!intm_ucs &&
+ pT->trans_to_uni = (BOOL) (!intm_ucs &&
UCCanUniTranslateFrom(cs_in));
/*
** We set this if we are translating to Unicode and
@@ -245,12 +242,12 @@ PUBLIC void UCSetTransParams ARGS5(
** fact are encoding octets for the input charset
** (presently, this applies to VISCII). - FM
*/
- pT->trans_C0_to_uni = (pT->trans_to_uni &&
+ pT->trans_C0_to_uni = (BOOL) (pT->trans_to_uni &&
p_in->enc == UCT_ENC_8BIT_C0);
/*
** We set this, presently, for VISCII. - FM
*/
- pT->repl_translated_C0 = (p_out->enc == UCT_ENC_8BIT_C0);
+ pT->repl_translated_C0 = (BOOL) (p_out->enc == UCT_ENC_8BIT_C0);
/*
** Currently unused for any charset combination.
** Should always be FALSE
@@ -260,7 +257,7 @@ PUBLIC void UCSetTransParams ARGS5(
** use_ucs should be set TRUE if we have or will create
** Unicode values for input octets or UTF multibytes. - FM
*/
- use_ucs = (intm_ucs || pT->trans_to_uni);
+ use_ucs = (BOOL) (intm_ucs || pT->trans_to_uni);
/*
** This is set TRUE if use_ucs was set FALSE. It is
** complementary to the HTPassEightBitRaw flag, which
@@ -268,19 +265,19 @@ PUBLIC void UCSetTransParams ARGS5(
** setting in relation to the current Display Character
** Set. - FM
*/
- pT->do_8bitraw = (!use_ucs);
+ pT->do_8bitraw = (BOOL) (!use_ucs);
/*
** This is set TRUE when 160 and 173 should not be
** treated as nbsp and shy, respectively. - FM
*/
- pT->pass_160_173_raw = (!use_ucs &&
+ pT->pass_160_173_raw = (BOOL) (!use_ucs &&
!(p_in->like8859 & UCT_R_8859SPECL));
/*
** This is set when the input and output charsets match,
** and they are not ones which should go through a Unicode
** translation process anyway. - FM
*/
- pT->use_raw_char_in = (!pT->output_utf8 &&
+ pT->use_raw_char_in = (BOOL) (!pT->output_utf8 &&
cs_in == cs_out &&
!pT->trans_C0_to_uni);
/*
@@ -292,7 +289,7 @@ PUBLIC void UCSetTransParams ARGS5(
** above, but also on HTPassEightBitRaw in any functions
** which use the transformation structure.. - FM
*/
- pT->trans_from_uni = (use_ucs && !pT->do_8bitraw &&
+ pT->trans_from_uni = (BOOL) (use_ucs && !pT->do_8bitraw &&
!pT->use_raw_char_in &&
UCCanTranslateUniTo(cs_out));
}
@@ -453,3 +450,65 @@ PUBLIC BOOL UCConvertUniToUtf8 ARGS2(
}
return YES;
}
+
+/*
+** Get UCS character code for one character from UTF-8 encoded string.
+**
+** On entry:
+** *ppuni should point to beginning of UTF-8 encoding character
+** On exit:
+** *ppuni is advanced to point to the last byte of UTF-8 sequence,
+** if there was a valid one; otherwise unchanged.
+** returns the UCS value
+** returns negative value on error (invalid UTF-8 sequence)
+*/
+PUBLIC UCode_t UCGetUniFromUtf8String ARGS1(char **, ppuni)
+{
+ UCode_t uc_out = 0;
+ char * p = *ppuni;
+ int utf_count, i;
+ if (!(**ppuni&0x80))
+ return (UCode_t) **ppuni; /* ASCII range character */
+ else if (!(**ppuni&0x40))
+ return (-1); /* not a valid UTF-8 start */
+ if ((*p & 0xe0) == 0xc0) {
+ utf_count = 1;
+ } else if ((*p & 0xf0) == 0xe0) {
+ utf_count = 2;
+ } else if ((*p & 0xf8) == 0xf0) {
+ utf_count = 3;
+ } else if ((*p & 0xfc) == 0xf8) {
+ utf_count = 4;
+ } else if ((*p & 0xfe) == 0xfc) {
+ utf_count = 5;
+ } else { /* garbage */
+ return (-1);
+ }
+ for (p = *ppuni, i = 0; i < utf_count ; i++) {
+ if ((*(++p) & 0xc0) != 0x80)
+ return (-1);
+ }
+ p = *ppuni;
+ switch (utf_count) {
+ case 1:
+ uc_out = (((*p&0x1f) << 6) | (*(p+1)&0x3f));
+ break;
+ case 2:
+ uc_out = (((((*p&0x0f) << 6) | (*(p+1)&0x3f)) << 6) | (*(p+2)&0x3f));
+ break;
+ case 3:
+ uc_out = (((((((*p&0x07) << 6) | (*(p+1)&0x3f)) << 6) | (*(p+2)&0x3f)) << 6)
+ | (*(p+3)&0x3f));
+ break;
+ case 4:
+ uc_out = (((((((((*p&0x03) << 6) | (*(p+1)&0x3f)) << 6) | (*(p+2)&0x3f)) << 6)
+ | (*(p+3)&0x3f)) << 6) | (*(p+4)&0x3f));
+ break;
+ case 5:
+ uc_out = (((((((((((*p&0x01) << 6) | (*(p+1)&0x3f)) << 6) | (*(p+2)&0x3f)) << 6)
+ | (*(p+3)&0x3f)) << 6) | (*(p+4)&0x3f)) << 6) | (*(p+5)&0x3f));
+ break;
+ }
+ *ppuni = p + utf_count;
+ return uc_out;
+}
diff --git a/gnu/usr.bin/lynx/src/UCdomap.c b/gnu/usr.bin/lynx/src/UCdomap.c
index 6ba6539151e..4e97d837f29 100644
--- a/gnu/usr.bin/lynx/src/UCdomap.c
+++ b/gnu/usr.bin/lynx/src/UCdomap.c
@@ -20,7 +20,6 @@
#include <HTMLDTD.h>
#include <LYGlobalDefs.h>
-#include <UCkd.h>
#include <UCdomap.h>
#include <UCMap.h>
#include <UCDefs.h>
@@ -31,13 +30,13 @@
/*
* Include chartrans tables:
*/
-#include <cp1250_uni.h> /* WinLatin2 (cp1250) */
-#include <cp1251_uni.h> /* WinCyrillic (cp1251) */
-#include <cp1252_uni.h> /* WinLatin1 (cp1252) */
-#include <cp1253_uni.h> /* WinGreek (cp1253) */
-#include <cp1255_uni.h> /* WinHebrew (cp1255) */
-#include <cp1256_uni.h> /* WinArabic (cp1256) */
-#include <cp1257_uni.h> /* WinBaltRim (cp1257) */
+#include <cp1250_uni.h> /* WinLatin2 (cp1250) */
+#include <cp1251_uni.h> /* WinCyrillic (cp1251) */
+#include <cp1252_uni.h> /* WinLatin1 (cp1252) */
+#include <cp1253_uni.h> /* WinGreek (cp1253) */
+#include <cp1255_uni.h> /* WinHebrew (cp1255) */
+#include <cp1256_uni.h> /* WinArabic (cp1256) */
+#include <cp1257_uni.h> /* WinBaltRim (cp1257) */
#include <cp437_uni.h> /* DosLatinUS (cp437) */
#include <cp737_uni.h> /* DosGreek (cp737) */
#include <cp775_uni.h> /* DosBaltRim (cp775) */
@@ -63,16 +62,17 @@
#include <iso15_uni.h> /* ISO 8859-15 (Latin 9)*/
#include <koi8r_uni.h> /* KOI8-R Cyrillic */
#include <mac_uni.h> /* Macintosh (8 bit) */
-#include <mnem2_suni.h> /* RFC 1345 Mnemonic */
+#include <mnem2_suni.h> /* RFC 1345 Mnemonic */
#include <next_uni.h> /* NeXT character set */
#include <rfc_suni.h> /* RFC 1345 w/o Intro */
/* #include <utf8_uni.h> */ /* UNICODE UTF 8 */
-#include <viscii_uni.h> /* Vietnamese (VISCII) */
+#include <viscii_uni.h> /* Vietnamese (VISCII) */
#include <cp866u_uni.h> /* Ukrainian Cyrillic (866) */
#include <koi8u_uni.h> /* Ukrainian Cyrillic (koi8-u */
-#ifdef NOTDEFINED
-#include <mnem_suni.h>
-#endif /* NOTDEFINED */
+
+#ifdef CAN_AUTODETECT_DISPLAY_CHARSET
+int auto_display_charset = -1;
+#endif
/*
* Some of the code below, and some of the comments, are left in for
@@ -251,13 +251,6 @@ PRIVATE void set_inverse_transl PARAMS((
int i));
PRIVATE u16 *set_translate PARAMS((
int m));
-#ifdef NOTDEFINED
-PRIVATE unsigned char inverse_translate PARAMS((int glyph));
-PRIVATE int con_set_trans_old PARAMS((unsigned char *arg));
-PRIVATE int con_get_trans_old PARAMS((unsigned char *arg));
-PRIVATE int con_set_trans_new PARAMS((u16 *arg));
-PRIVATE int con_get_trans_new PARAMS((u16 *arg));
-#endif /* NOTDEFINED */
PRIVATE int UC_valid_UC_charset PARAMS((
int UC_charset_hndl));
PRIVATE void UC_con_set_trans PARAMS((
@@ -276,11 +269,6 @@ PRIVATE void con_clear_unimap PARAMS((
int fordefault));
PRIVATE void con_clear_unimap_str PARAMS((
int fordefault));
-#ifdef NOTDEFINED
-PRIVATE int con_set_unimap PARAMS((
- u16 ct,
- struct unipair * list));
-#endif /* NOTDEFINED */
PRIVATE void con_set_default_unimap NOPARAMS;
PRIVATE int UC_con_set_unimap PARAMS((
int UC_charset_out_hndl,
@@ -289,12 +277,6 @@ PRIVATE int UC_con_set_unimap_str PARAMS((
u16 ct,
struct unipair_str * list,
int fordefault));
-#ifdef NOTDEFINED
-PRIVATE int con_get_unimap PARAMS((
- u16 ct,
- u16 * uct,
- struct unipair * list));
-#endif /* NOTDEFINED */
PRIVATE int conv_uni_to_pc PARAMS((
long ucs,
int usedefault));
@@ -351,7 +333,7 @@ PRIVATE void set_inverse_transl ARGS1(
/*
* Prefer '-' above SHY etc.
*/
- q[glyph] = j;
+ q[glyph] = UCH(j);
}
}
}
@@ -365,105 +347,6 @@ PRIVATE u16 *set_translate ARGS1(
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.
- */
-PRIVATE unsigned char inverse_translate ARGS1(
- 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 explicitly.
- */
-PRIVATE int con_set_trans_old ARGS1(
- 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;
-}
-
-PRIVATE int con_get_trans_old ARGS1(
- 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]);
-#ifdef NOTDEFINED
- put_user((ch & ~0xff) ? 0 : ch, arg+i);
-#endif /* NOTDEFINED */
- arg[i] = (unsigned char)((ch & ~0xff) ? 0 : ch);
- }
- return 0;
-}
-
-PRIVATE int con_set_trans_new ARGS1(
- 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;
-}
-
-PRIVATE int con_get_trans_new ARGS1(
- 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)
{
@@ -480,8 +363,8 @@ PRIVATE void UC_con_set_trans ARGS3(
u16 *ptrans;
if (!UC_valid_UC_charset(UC_charset_in_hndl)) {
- CTRACE(tfp, "UC_con_set_trans: Invalid charset handle %d.\n",
- UC_charset_in_hndl);
+ CTRACE((tfp, "UC_con_set_trans: Invalid charset handle %d.\n",
+ UC_charset_in_hndl));
return;
}
ptrans = translations[Gn];
@@ -492,8 +375,6 @@ PRIVATE void UC_con_set_trans ARGS3(
}
/*
* The font is always 256 characters - so far.
- * (this function preserved by num_uni==0 so unicount=NULL for built-in
- * charsets like CJK or x-transparent should not be a problem?)
*/
con_clear_unimap();
#endif
@@ -587,7 +468,7 @@ PRIVATE int con_insert_unipair ARGS3(
else
uni_pagedir[n] = p1;
if ( !p1 )
- return -ENOMEM;
+ return -1;
for (i = 0; i < 32; i++) {
p1[i] = NULL;
@@ -597,7 +478,7 @@ PRIVATE int con_insert_unipair ARGS3(
if (!(p2 = p1[n = (unicode >> 6) & 0x1f])) {
p2 = p1[n] = (u16 *)malloc(64*sizeof(u16));
if (!p2)
- return -ENOMEM;
+ return -1;
for (i = 0; i < 64; i++) {
p2[i] = 0xffff; /* No glyph for this character (yet) */
@@ -611,7 +492,7 @@ PRIVATE int con_insert_unipair ARGS3(
PRIVATE int con_insert_unipair_str ARGS3(
u16, unicode,
- CONST char *, replace_str,
+ CONST char *, replace_str,
int, fordefault)
{
int i, n;
@@ -629,7 +510,7 @@ PRIVATE int con_insert_unipair_str ARGS3(
else
uni_pagedir_str[n] = p1;
if ( !p1 )
- return -ENOMEM;
+ return -1;
for (i = 0; i < 32; i++) {
p1[i] = NULL;
@@ -640,7 +521,7 @@ PRIVATE int con_insert_unipair_str ARGS3(
if (!p1[n]) {
p1[n] = (char **)malloc(64*sizeof(char *));
if (!p1[n])
- return -ENOMEM;
+ return -1;
p2 = (CONST char **)p1[n];
for (i = 0; i < 64; i++) {
@@ -722,27 +603,6 @@ PRIVATE void con_clear_unimap_str ARGS1(int, fordefault)
}
}
-#ifdef NOTDEFINED
-PRIVATE 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
@@ -756,23 +616,16 @@ PRIVATE void con_set_default_unimap NOARGS
/*
* The default font is always 256 characters.
- * (default font can not be a fake one, so unicout!=NULL for sure.)
*/
con_clear_unimap(1);
p = dfont_unitable;
for (i = 0; i < 256; i++) {
for (j = dfont_unicount[i]; j; j--) {
- con_insert_unipair(*(p++), i, 1);
+ con_insert_unipair(*(p++), (u16)i, 1);
}
}
-#if 0
- for (i = 0; i <= 3; i++) {
- set_inverse_transl(i); /* Update all inverse translations */
- }
-#endif
-
UC_default_unitable = dfont_unitable;
con_clear_unimap_str(1);
@@ -791,6 +644,7 @@ PUBLIC int UCLYhndl_for_unrec = -1;
PUBLIC int LATIN1 = -1; /* UCGetLYhndl_byMIME("iso-8859-1") */
PUBLIC int US_ASCII = -1; /* UCGetLYhndl_byMIME("us-ascii") */
PUBLIC int UTF8 = -1; /* UCGetLYhndl_byMIME("utf-8") */
+PUBLIC int TRANSPARENT = -1; /* UCGetLYhndl_byMIME("x-transparent") */
PRIVATE int UC_con_set_unimap ARGS2(
@@ -801,8 +655,8 @@ PRIVATE int UC_con_set_unimap ARGS2(
CONST u16 *p;
if (!UC_valid_UC_charset(UC_charset_out_hndl)) {
- CTRACE(tfp, "UC_con_set_unimap: Invalid charset handle %d.\n",
- UC_charset_out_hndl);
+ CTRACE((tfp, "UC_con_set_unimap: Invalid charset handle %d.\n",
+ UC_charset_out_hndl));
return -1;
}
@@ -814,13 +668,12 @@ PRIVATE int UC_con_set_unimap ARGS2(
/*
* The font is always 256 characters - so far.
- * (fake 0 for built-in charsets like CJK or x-transparent, add a check)
*/
con_clear_unimap(0);
- for (i = 0; i < 256 && UCInfo[UC_charset_out_hndl].unicount != NULL; i++) {
+ for (i = 0; i < 256; i++) {
for (j = UCInfo[UC_charset_out_hndl].unicount[i]; j; j--) {
- con_insert_unipair(*(p++), i, 0);
+ con_insert_unipair(*(p++), (u16)i, 0);
}
}
@@ -862,39 +715,6 @@ PRIVATE int UC_con_set_unimap_str ARGS3(
return err;
}
-#ifdef NOTDEFINED
-PRIVATE 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 /* NOTDEFINED */
-
PRIVATE int conv_uni_to_pc ARGS2(
long, ucs,
int, usedefault)
@@ -985,16 +805,6 @@ PRIVATE int conv_uni_to_str ARGS4(
* Zero-width space.
*/
return -2;
-#ifdef NOTDEFINED /* We don't handle the following here: */
- } else if ((ucs & ~UNI_DIRECT_MASK) == UNI_DIRECT_BASE) {
- /*
- * 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.
- */
- return ucs & UNI_DIRECT_MASK;
-#endif /* NOTDEFINED */
}
if (usedefault) {
@@ -1046,6 +856,8 @@ PUBLIC int UCTransUniChar ARGS2(
CONST u16 * ut;
if ((UChndl_out = LYCharSet_UC[charset_out].UChndl) < 0) {
+ if (LYCharSet_UC[charset_out].codepage < 0)
+ return (unicode < 128) ? (int)unicode : LYCharSet_UC[charset_out].codepage;
if ((UChndl_out = default_UChndl) < 0)
return -12;
isdefault = 1;
@@ -1084,7 +896,7 @@ PUBLIC int UCTransUniChar ARGS2(
* Returns string length, or negative value for error.
*/
PUBLIC int UCTransUniCharStr ARGS5(
- char *, outbuf,
+ char *, outbuf,
int, buflen,
long, unicode,
int, charset_out,
@@ -1100,6 +912,8 @@ PUBLIC int UCTransUniCharStr ARGS5(
return -13;
if ((UChndl_out = LYCharSet_UC[charset_out].UChndl) < 0) {
+ if (LYCharSet_UC[charset_out].codepage < 0)
+ return LYCharSet_UC[charset_out].codepage;
if ((UChndl_out = default_UChndl) < 0)
return -12;
isdefault = 1;
@@ -1120,7 +934,8 @@ PUBLIC int UCTransUniCharStr ARGS5(
}
src = conv_uni_to_pc(unicode, isdefault);
if (src >= 32) {
- outbuf[0] = src; outbuf[1] = '\0';
+ outbuf[0] = (char)src;
+ outbuf[1] = '\0';
return 1;
}
}
@@ -1139,7 +954,8 @@ PUBLIC int UCTransUniCharStr ARGS5(
if (trydefault && chk_single_flag) {
src = conv_uni_to_pc(unicode, 1);
if (src >= 32) {
- outbuf[0] = src; outbuf[1] = '\0';
+ outbuf[0] = (char)src;
+ outbuf[1] = '\0';
return 1;
}
}
@@ -1162,7 +978,8 @@ PUBLIC int UCTransUniCharStr ARGS5(
if ((rc == -4) && (isdefault || trydefault))
rc = conv_uni_to_pc(0xfffd, 1);
if (rc >= 32) {
- outbuf[0] = rc; outbuf[1] = '\0';
+ outbuf[0] = (char)rc;
+ outbuf[1] = '\0';
return 1;
}
return rc;
@@ -1204,8 +1021,8 @@ PRIVATE int UC_MapGN ARGS2(
UCInfo[UChndl].GN = Gn;
UC_GNhandles[Gn] = UChndl;
}
- CTRACE(tfp, "UC_MapGN: Using %d <- %d (%s)\n",
- Gn, UChndl, UCInfo[UChndl].MIMEname);
+ CTRACE((tfp, "UC_MapGN: Using %d <- %d (%s)\n",
+ Gn, UChndl, UCInfo[UChndl].MIMEname));
UC_con_set_trans(UChndl,Gn,update_flag);
return Gn;
}
@@ -1224,13 +1041,15 @@ PUBLIC int UCTransChar ARGS3(
#ifndef UC_NO_SHORTCUTS
if (charset_in == charset_out)
- return (unsigned char)ch_in;
+ return UCH(ch_in);
#endif /* UC_NO_SHORTCUTS */
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) {
+ if (LYCharSet_UC[charset_out].codepage < 0)
+ return LYCharSet_UC[charset_out].codepage;
if ((UChndl_out = default_UChndl) < 0)
return -12;
isdefault = 1;
@@ -1261,7 +1080,7 @@ PUBLIC int UCTransChar ARGS3(
}
}
UC_translate = set_translate(Gn);
- unicode = UC_translate[(unsigned char)ch_in];
+ unicode = UC_translate[UCH(ch_in)];
if (!isdefault) {
rc = conv_uni_to_pc(unicode, 0);
if (rc >= 0)
@@ -1287,16 +1106,16 @@ PUBLIC long int UCTransToUni ARGS2(
unsigned char ch_iu;
int UChndl_in;
- ch_iu = (unsigned char)ch_in;
+ ch_iu = UCH(ch_in);
#ifndef UC_NO_SHORTCUTS
if (charset_in == LATIN1)
return ch_iu;
- if ((unsigned char)ch_in < 128 && (unsigned char)ch_in >= 32)
+ if (UCH(ch_in) < 128 && UCH(ch_in) >= 32)
return ch_iu;
#endif /* UC_NO_SHORTCUTS */
if (charset_in < 0)
return -11;
- if ((unsigned char)ch_in < 32 &&
+ if (UCH(ch_in) < 32 &&
LYCharSet_UC[charset_in].enc != UCT_ENC_8BIT_C0)
/*
* Don't translate C0 chars except for specific charsets.
@@ -1311,7 +1130,7 @@ PUBLIC long int UCTransToUni ARGS2(
}
UC_translate = set_translate(Gn);
- unicode = UC_translate[(unsigned char)ch_in];
+ unicode = UC_translate[UCH(ch_in)];
return unicode;
}
@@ -1322,15 +1141,15 @@ PUBLIC int UCReverseTransChar ARGS3(
int, charset_out)
{
int Gn;
- int rc;
+ int rc = -1;
int UChndl_in, UChndl_out;
int isdefault;
- int i_ch = (unsigned char)ch_out;
+ int i_ch = UCH(ch_out);
CONST u16 * ut;
#ifndef UC_NO_SHORTCUTS
if (charset_in == charset_out)
- return ch_out;
+ return UCH(ch_out);
#endif /* UC_NO_SHORTCUTS */
if (charset_in < 0)
return -11;
@@ -1341,6 +1160,8 @@ PUBLIC int UCReverseTransChar ARGS3(
if (charset_out < 0)
return -12;
if ((UChndl_out = LYCharSet_UC[charset_out].UChndl) < 0) {
+ if (LYCharSet_UC[charset_out].codepage < 0)
+ return LYCharSet_UC[charset_out].codepage;
if ((UChndl_out = default_UChndl) < 0)
return -12;
isdefault = 1;
@@ -1357,19 +1178,14 @@ PUBLIC int UCReverseTransChar ARGS3(
*/
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[i_ch];
- if (rc >= 32) {
- return rc;
- }
- } else {
+ if ((Gn = UCInfo[UChndl_in].GN) < 0) {
Gn = UC_MapGN(UChndl_in,1);
- UC_translate = set_translate(Gn);
+ }
+ UC_translate = set_translate(Gn);
+ if (inv_translate)
rc = inv_translate[i_ch];
- if (rc >= 32) {
- return rc;
- }
+ if (rc >= 32) {
+ return rc;
}
}
}
@@ -1380,7 +1196,7 @@ PUBLIC int UCReverseTransChar ARGS3(
* Returns string length, or negative value for error.
*/
PUBLIC int UCTransCharStr ARGS6(
- char *, outbuf,
+ char *, outbuf,
int, buflen,
char, ch_in,
int, charset_in,
@@ -1411,6 +1227,8 @@ PUBLIC int UCTransCharStr ARGS6(
if (!UCInfo[UChndl_in].num_uni)
return -11;
if ((UChndl_out = LYCharSet_UC[charset_out].UChndl) < 0) {
+ if (LYCharSet_UC[charset_out].codepage < 0)
+ return LYCharSet_UC[charset_out].codepage;
if ((UChndl_out = default_UChndl) < 0)
return -12;
isdefault = 1;
@@ -1424,7 +1242,7 @@ PUBLIC int UCTransCharStr ARGS6(
}
UC_translate = set_translate(Gn);
- unicode = UC_translate[(unsigned char)ch_in];
+ unicode = UC_translate[UCH(ch_in)];
if (chk_single_flag) {
if (!isdefault) {
@@ -1442,7 +1260,8 @@ PUBLIC int UCTransCharStr ARGS6(
}
src = conv_uni_to_pc(unicode, isdefault);
if (src >= 32) {
- outbuf[0] = src; outbuf[1] = '\0';
+ outbuf[0] = (char)src;
+ outbuf[1] = '\0';
return 1;
}
}
@@ -1461,7 +1280,8 @@ PUBLIC int UCTransCharStr ARGS6(
if (trydefault && chk_single_flag) {
src = conv_uni_to_pc(unicode, 1);
if (src >= 32) {
- outbuf[0] = src; outbuf[1] = '\0';
+ outbuf[0] = (char)src;
+ outbuf[1] = '\0';
return 1;
}
}
@@ -1484,7 +1304,8 @@ PUBLIC int UCTransCharStr ARGS6(
if ((rc == -4) && (isdefault || trydefault))
rc = conv_uni_to_pc(0xfffd, 1);
if (rc >= 32) {
- outbuf[0] = rc; outbuf[1] = '\0';
+ outbuf[0] = (char)rc;
+ outbuf[1] = '\0';
return 1;
} else if (rc <= 0) {
outbuf[0] = '\0';
@@ -1517,6 +1338,29 @@ PUBLIC int UCGetRawUniMode_byLYhndl ARGS1(
}
/*
+ * Construct a new charset name, given prefix and codepage. This introduces
+ * potentially unchecked recursion into UCGetLYhntl_byMIME if neither the "cp"
+ * nor "windows-" prefixes are configured, so we check it here.
+ */
+PRIVATE int getLYhndl_byCP ARGS2(
+ CONST char *, prefix,
+ CONST char *, codepage)
+{
+ static int nested;
+ int result = -1;
+
+ if (!nested++) {
+ char *cptmp = NULL;
+ StrAllocCopy(cptmp, prefix);
+ StrAllocCat(cptmp, codepage);
+ result = UCGetLYhndl_byMIME(cptmp);
+ FREE(cptmp);
+ }
+ nested--;
+ return result;
+}
+
+/*
* Get Lynx internal charset handler from MIME name,
* return -1 if we got NULL or did not recognize value.
* According to RFC, MIME headers should match case-insensitively.
@@ -1528,7 +1372,7 @@ PUBLIC int UCGetLYhndl_byMIME ARGS1(
int LYhndl = -1;
if (!value || !(*value)) {
- CTRACE(tfp, "UCGetLYhndl_byMIME: NULL argument instead of MIME name.\n");
+ CTRACE((tfp, "UCGetLYhndl_byMIME: NULL argument instead of MIME name.\n"));
return -1;
}
@@ -1544,6 +1388,7 @@ PUBLIC int UCGetLYhndl_byMIME ARGS1(
/*
* Not yet found, try synonyms. - FM
*/
+#if !NO_CHARSET_utf_8
if (!strcasecomp(value, "unicode-1-1-utf-8") ||
!strcasecomp(value, "utf8")) {
/*
@@ -1551,33 +1396,49 @@ PUBLIC int UCGetLYhndl_byMIME ARGS1(
*/
return UCGetLYhndl_byMIME("utf-8");
}
- if (!strncasecomp(value, "iso-2022-jp", 11) ||
- !strcasecomp(value, "x-euc-jp")) {
+#endif
+#if !NO_CHARSET_euc_jp
+ if (!strcasecomp(value, "x-euc-jp")) {
return UCGetLYhndl_byMIME("euc-jp");
}
- if (!strcasecomp(value, "x-shift-jis")) {
+#endif
+#if !NO_CHARSET_shift_jis
+ if ((!strcasecomp(value, "x-shift-jis")) ||
+ (!strcasecomp(value, "x-sjis"))) {
return UCGetLYhndl_byMIME("shift_jis");
}
+#endif
+#if !NO_CHARSET_euc_kr
if (!strcasecomp(value, "iso-2022-kr")) {
return UCGetLYhndl_byMIME("euc-kr");
}
+#endif
+#if !NO_CHARSET_euc_cn
if (!strcasecomp(value, "gb2312") ||
!strncasecomp(value, "cn-gb", 5) ||
!strcasecomp(value, "iso-2022-cn")) {
return UCGetLYhndl_byMIME("euc-cn");
}
+#endif
+#if !NO_CHARSET_big5
if (!strcasecomp(value, "cn-big5")) {
return UCGetLYhndl_byMIME("big5");
}
+#endif
+#if !NO_CHARSET_macintosh
if (!strcasecomp(value, "x-mac-roman") ||
!strcasecomp(value, "mac-roman")) {
return UCGetLYhndl_byMIME("macintosh");
}
+#endif
+#if !NO_CHARSET_next
if (!strcasecomp(value, "x-next") ||
!strcasecomp(value, "nextstep") ||
!strcasecomp(value, "x-nextstep")) {
return UCGetLYhndl_byMIME("next");
}
+#endif
+#if !NO_CHARSET_windows_1252
if (!strcasecomp(value, "iso-8859-1-windows-3.1-latin-1") ||
!strcasecomp(value, "cp1252") ||
!strcasecomp(value, "cp-1252") ||
@@ -1589,6 +1450,8 @@ PUBLIC int UCGetLYhndl_byMIME ARGS1(
*/
return UCGetLYhndl_byMIME("windows-1252");
}
+#endif
+#if !NO_CHARSET_windows_1250
if (!strcasecomp(value, "iso-8859-2-windows-latin-2") ||
!strcasecomp(value, "cp1250") ||
!strcasecomp(value, "cp-1250") ||
@@ -1598,55 +1461,40 @@ PUBLIC int UCGetLYhndl_byMIME ARGS1(
*/
return UCGetLYhndl_byMIME("windows-1250");
}
+#endif
if ((!strncasecomp(value, "ibm", 3) ||
!strncasecomp(value, "cp-", 3)) &&
- isdigit((unsigned char)value[3]) &&
- isdigit((unsigned char)value[4]) &&
- isdigit((unsigned char)value[5])) {
+ isdigit(UCH(value[3])) &&
+ isdigit(UCH(value[4])) &&
+ isdigit(UCH(value[5]))) {
/*
* For "ibmNNN<...>" or "cp-NNN", try "cpNNN<...>"
* if not yet found. - KW & FM
*/
- char * cptmp = NULL;
-
- StrAllocCopy(cptmp, (value + 1));
- cptmp[0] = 'c';
- cptmp[1] = 'p';
- if ((LYhndl = UCGetLYhndl_byMIME(cptmp)) >= 0) {
- FREE(cptmp);
+ if ((LYhndl = getLYhndl_byCP("cp", value+3)) >= 0)
return LYhndl;
- }
/*
* Try windows-NNN<...> if not yet found. - FM
*/
- StrAllocCopy(cptmp, "windows-");
- StrAllocCat(cptmp, (value + 3));
- LYhndl = UCGetLYhndl_byMIME(cptmp);
- FREE(cptmp);
- return LYhndl;
+ return getLYhndl_byCP("windows-", value + 3);
}
if (!strncasecomp(value, "windows-", 8) &&
- isdigit((unsigned char)value[8]) &&
- isdigit((unsigned char)value[9]) &&
- isdigit((unsigned char)value[10])) {
+ isdigit(UCH(value[8])) &&
+ isdigit(UCH(value[9])) &&
+ isdigit(UCH(value[10]))) {
/*
* For "windows-NNN<...>", try "cpNNN<...>" - FM
*/
- char * cptmp = NULL;
-
- StrAllocCopy(cptmp, (value + 6));
- cptmp[0] = 'c';
- cptmp[1] = 'p';
- LYhndl = UCGetLYhndl_byMIME(cptmp);
- FREE(cptmp);
- return LYhndl;
+ return getLYhndl_byCP("cp", value + 8);
}
+#if !NO_CHARSET_koi8_r
if (!strcasecomp(value, "koi-8")) { /* accentsoft bugosity */
return UCGetLYhndl_byMIME("koi8-r");
}
+#endif
/* no more synonyms if come here... */
- CTRACE(tfp, "UCGetLYhndl_byMIME: unrecognized MIME name \"%s\"\n", value);
+ CTRACE((tfp, "UCGetLYhndl_byMIME: unrecognized MIME name \"%s\"\n", value));
return -1; /* returns -1 if no charset found by that MIME name */
}
@@ -1702,7 +1550,7 @@ PRIVATE CONST char ** UC_setup_LYCharSets_repl ARGS2(
CONST char **p;
char **prepl;
CONST u16 *pp;
- CONST char **tp;
+ char **tp;
CONST char *s7;
CONST char *s8;
size_t i;
@@ -1713,7 +1561,7 @@ PRIVATE CONST char ** UC_setup_LYCharSets_repl ARGS2(
/*
* Create a temporary table for reverse lookup of latin1 codes:
*/
- tp = (CONST char **)malloc(96 * sizeof(CONST char *));
+ tp = (char **)malloc(96 * sizeof(char *));
if (!tp)
return NULL;
for (i = 0; i < 96; i++)
@@ -1737,7 +1585,7 @@ PRIVATE CONST char ** UC_setup_LYCharSets_repl ARGS2(
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;
+ ti[k-160] = UCH(i);
}
for (; j; j--) {
pp++;
@@ -1758,7 +1606,7 @@ PRIVATE CONST char ** UC_setup_LYCharSets_repl ARGS2(
list = UCInfo[UC_charset_in_hndl].replacedesc.entries;
while (ct--) {
if ((k = list->unicode) >= 160 && k < 256) {
- tp[k-160] = list->replace_str;
+ tp[k-160] = (char *)list->replace_str;
}
list++;
}
@@ -1785,56 +1633,41 @@ PRIVATE CONST char ** UC_setup_LYCharSets_repl ARGS2(
s7 = SevenBitApproximations[i];
s8 = ISO_Latin1[i];
*p = s7;
- if (s8 && (unsigned char)(*s8) >= 160 && strlen(s8) == 1) {
+ if (s8 && UCH(*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] &&
+ if (ti[UCH(*s8) - 160] >= UCH(lowest8) &&
+ !(s7[0] == ti[UCH(*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)) {
+ if (ti[UCH(*s8) - 160] == UCH(*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 1-char strings
+ * make those 1-char strings
* into 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];
+ dummy[0] = ti[UCH(*s8) - 160];
*p = HTAtom_name(HTAtom_for(dummy));
-#endif /* NOTDEFINED */
}
changed = 1;
- } else if (tp[(unsigned char)(*s8) - 160] &&
- strcmp(s7, tp[(unsigned char)(*s8) - 160])) {
+ } else if (tp[UCH(*s8) - 160] &&
+ strcmp(s7, tp[UCH(*s8) - 160])) {
/*
* ...or which is mapped, by our "new method",
* to a replacement string for this new charset.
*/
- *p = tp[(unsigned char)(*s8) - 160];
+ *p = tp[UCH(*s8) - 160];
changed = 1;
}
}
@@ -1884,8 +1717,8 @@ PRIVATE int UC_Register_with_LYCharSets ARGS4(
if (LYhndl < 0) { /* not found */
found = 0;
if (LYNumCharsets >= MAXCHARSETS) {
- CTRACE(tfp, "UC_Register_with_LYCharSets: Too many. Ignoring %s/%s.",
- UC_MIMEcharset, UC_LYNXcharset);
+ CTRACE((tfp, "UC_Register_with_LYCharSets: Too many. Ignoring %s/%s.",
+ UC_MIMEcharset, UC_LYNXcharset));
return -1;
}
/*
@@ -1969,8 +1802,8 @@ PUBLIC void UC_Charset_Setup ARGS9(
s = found;
} else {
if (UCNumCharsets >= MAXCHARSETS) {
- CTRACE(tfp, "UC_Charset_Setup: Too many. Ignoring %s/%s.",
- UC_MIMEcharset, UC_LYNXcharset);
+ CTRACE((tfp, "UC_Charset_Setup: Too many. Ignoring %s/%s.",
+ UC_MIMEcharset, UC_LYNXcharset));
return;
}
s = UCNumCharsets;
@@ -2003,6 +1836,113 @@ PUBLIC void UC_Charset_Setup ARGS9(
return;
}
+/*
+ * UC_NoUctb_Register_with_LYCharSets, UC_Charset_NoUctb_Setup -
+ * Alternative functions for adding character set info to the lists
+ * kept in LYCharSets.c.
+ * These are for character sets without any real tables of their own.
+ * We don't keep an entry in UCinfo[] for them.
+ */
+PRIVATE int UC_NoUctb_Register_with_LYCharSets ARGS5(
+ CONST char *, UC_MIMEcharset,
+ CONST char *, UC_LYNXcharset,
+ int, lowest_eightbit,
+ int, UC_rawuni,
+ int, codepage)
+{
+ int i, LYhndl = -1;
+
+ if (LYNumCharsets == 0) {
+ /*
+ * Initialize here; so whoever changes
+ * LYCharSets.c doesn't have to count...
+ */
+ for (i = 0; (i < MAXCHARSETS) && LYchar_set_names[i]; i++) {
+ LYNumCharsets = i+1;
+ }
+ }
+
+ /*
+ * Search by MIME name, (LYchar_set_names may differ...)
+ * ignore if already present!
+ */
+ for (i = 0; i < MAXCHARSETS && LYchar_set_names[i] && LYhndl < 0; i++) {
+ if (LYCharSet_UC[i].MIMEname &&
+ !strcmp(UC_MIMEcharset, LYCharSet_UC[i].MIMEname)) {
+ return -1;
+ }
+ }
+
+ /* not found */
+ if (LYNumCharsets >= MAXCHARSETS) {
+ CTRACE((tfp, "UC_NoUctb_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] = lowest_eightbit;
+ LYCharSets[LYhndl] = SevenBitApproximations;
+ LYchar_set_names[LYhndl] = UC_LYNXcharset;
+ LYchar_set_names[LYhndl+1] = NULL;
+ /*
+ * Terminating NULL may be looked for by Lynx code.
+ */
+
+ LYCharSet_UC[LYhndl].UChndl = -1; /* no corresponding UChndl ! */
+ LYCharSet_UC[LYhndl].MIMEname = UC_MIMEcharset;
+ LYCharSet_UC[LYhndl].enc = UC_rawuni;
+ LYCharSet_UC[LYhndl].codepage = codepage;
+
+ /*
+ * @@@ 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
+ */
+
+ return LYhndl;
+}
+
+/*
+ * A wrapper for the previous function.
+ */
+PRIVATE void UC_Charset_NoUctb_Setup ARGS6(
+ CONST char *, UC_MIMEcharset,
+ CONST char *, UC_LYNXcharset,
+ int, trydefault,
+ int, lowest_eight,
+ int, UC_rawuni,
+ int, codepage)
+{
+ int i;
+
+ /*
+ * Ignore completely if already in slot.
+ */
+ for (i = 0; i < UCNumCharsets; i++) {
+ if (!strcmp(UCInfo[i].MIMEname, UC_MIMEcharset)) {
+ return;
+ }
+ }
+ if (UC_rawuni == UCT_ENC_UTF8)
+ lowest_eight = 128; /* cheat here */
+ /* 'codepage' doubles as a flag for 'do not try any table
+ ** lookup, not even default' when negative. The value will
+ ** be returned immediately by UCTrans* functions.
+ */
+ if (!trydefault && codepage == 0)
+ codepage = -12; /* if not already set; any negative should do. */
+ UC_NoUctb_Register_with_LYCharSets(UC_MIMEcharset,
+ UC_LYNXcharset,
+ lowest_eight,
+ UC_rawuni,
+ codepage);
+ return;
+}
+
#ifdef LY_FIND_LEAKS
PRIVATE void UCcleanup_mem NOARGS
{
@@ -2019,6 +1959,47 @@ PRIVATE void UCcleanup_mem NOARGS
}
#endif /* LY_FIND_LEAKS */
+#ifdef CAN_AUTODETECT_DISPLAY_CHARSET
+# ifdef __EMX__
+PRIVATE int CpOrdinal ARGS2 (CONST unsigned long, cp, CONST int, other)
+{
+ char lyName[80];
+ char myMimeName[80];
+ char *mimeName, *mName = NULL, *lName = NULL;
+ int s, i, exists = 0, ret;
+
+ CTRACE((tfp, "CpOrdinal(cp=%ul, other=%d).\n", cp, other));
+ sprintf(myMimeName, "auto%s-cp%lu", (other ? "2" : ""), cp);
+ mimeName = myMimeName + 5 + (other != 0);
+ sprintf(lyName, "AutoDetect%s (cp%lu)",
+ (other ? "-2" : ""), cp);
+ /* Find slot. */
+ s = -1;
+ for (i = 0; i < UCNumCharsets; i++) {
+ if (!strcmp(UCInfo[i].LYNXname, lyName))
+ return UCGetLYhndl_byMIME(myMimeName);
+ else if (!strcasecomp(UCInfo[i].MIMEname, mimeName))
+ s = i;
+ }
+ if (s < 0)
+ return -1;
+ /* Store the "real" charset info */
+ real_charsets[other != 0] = UCGetLYhndl_byMIME(mimeName);
+ /* Duplicate the record. */
+ StrAllocCopy(mName, myMimeName);
+ StrAllocCopy(lName, lyName);
+ UC_Charset_Setup(mName, lName,
+ UCInfo[s].unicount, UCInfo[s].unitable,
+ UCInfo[s].num_uni, UCInfo[s].replacedesc,
+ UCInfo[s].lowest_eight, UCInfo[s].enc,
+ UCInfo[s].codepage);
+ ret = UCGetLYhndl_byMIME(myMimeName);
+ CTRACE((tfp, "Found %i.\n", ret));
+ return ret;
+}
+# endif /* __EMX__ */
+#endif /* CAN_AUTODETECT_DISPLAY_CHARSET */
+
PUBLIC void UCInit NOARGS
{
@@ -2044,13 +2025,13 @@ PUBLIC void UCInit NOARGS
UC_CHARSET_SETUP_cp437; /* DosLatinUS (cp437) */
UC_CHARSET_SETUP_dec_mcs; /* DEC Multinational */
- UC_CHARSET_SETUP_macintosh; /* Macintosh (8 bit) */
+ UC_CHARSET_SETUP_macintosh; /* Macintosh (8 bit) */
UC_CHARSET_SETUP_next; /* NeXT character set */
UC_CHARSET_SETUP_hp_roman8; /* HP Roman8 */
UC_CHARSET_SETUP_euc_cn; /*** Chinese */
UC_CHARSET_SETUP_euc_jp; /*** Japanese (EUC_JP) */
- UC_CHARSET_SETUP_shift_jis; /*** Japanese (Shift_JIS) */
+ UC_CHARSET_SETUP_shift_jis; /*** Japanese (Shift_JIS) */
UC_CHARSET_SETUP_euc_kr; /*** Korean */
UC_CHARSET_SETUP_big5; /*** Taipei (Big5) */
@@ -2088,24 +2069,46 @@ PUBLIC void UCInit NOARGS
UC_CHARSET_SETUP_mnemonic; /* RFC 1345 Mnemonic */
UC_CHARSET_SETUP_cp866u; /* Ukrainian Cyrillic (866) */
UC_CHARSET_SETUP_koi8_u; /* Ukrainian Cyrillic (koi8-u) */
-#ifdef NOTDEFINED
- UC_CHARSET_SETUP_mnem;
-#endif /* NOTDEFINED */
+
+#ifdef CAN_AUTODETECT_DISPLAY_CHARSET
+# ifdef __EMX__
+ {
+ unsigned long lst[3];
+ unsigned long len, rc;
+
+ rc = DosQueryCp(sizeof(lst), lst, &len);
+ if (rc == 0) {
+ if (len >= 1)
+ auto_display_charset = CpOrdinal(lst[0], 0);
+# ifdef CAN_SWITCH_DISPLAY_CHARSET
+ if (len >= 3) {
+ codepages[0] = lst[0];
+ codepages[1] = (lst[0] == lst[1] ? lst[2] : lst[1]);
+ auto_other_display_charset = CpOrdinal(codepages[1], 1);
+ }
+# endif
+ } else {
+ CTRACE((tfp, "DosQueryCp() returned %#lx=%lu.\n", rc, rc));
+ }
+ }
+# endif
+#endif
/*
* To add synonyms for any charset name
* check function UCGetLYhndl_byMIME in this file.
*/
-/* easy to type: */
+/* for coding/performance - easy to type: */
LATIN1 = UCGetLYhndl_byMIME("iso-8859-1");
US_ASCII = UCGetLYhndl_byMIME("us-ascii");
UTF8 = UCGetLYhndl_byMIME("utf-8");
+ TRANSPARENT = UCGetLYhndl_byMIME("x-transparent");
}
/*
* Safe variant of UCGetLYhndl_byMIME, with blind recovery from typo
- * in user input: lynx.cfg, userdefs.h, switches from command line.
+ * in user input: lynx.cfg, userdefs.h, command line switches.
*/
PUBLIC int safeUCGetLYhndl_byMIME ARGS1 (CONST char *, value)
{
@@ -2113,7 +2116,7 @@ PUBLIC int safeUCGetLYhndl_byMIME ARGS1 (CONST char *, value)
if (i == -1) { /* was user's typo or not yet recognized value */
i = LATIN1; /* error recovery? */
- CTRACE(tfp, "safeUCGetLYhndl_byMIME: ISO-8859-1 assumed.\n");
+ CTRACE((tfp, "safeUCGetLYhndl_byMIME: ISO-8859-1 assumed.\n"));
}
return(i);
diff --git a/gnu/usr.bin/lynx/src/UCdomap.h b/gnu/usr.bin/lynx/src/UCdomap.h
index 76b5684169e..71cbc69685b 100644
--- a/gnu/usr.bin/lynx/src/UCdomap.h
+++ b/gnu/usr.bin/lynx/src/UCdomap.h
@@ -5,6 +5,10 @@
#include <HTUtils.h>
#endif
+#ifndef ALL_CHARSETS
+#define ALL_CHARSETS 1
+#endif
+
#include <UCkd.h>
/*
@@ -66,7 +70,7 @@ extern void UCInit NOARGS;
*
* Several #defines below are declarations for charsets which need no
* tables for mapping to Unicode - CJK multibytes, x-transparent, UTF8 -
- * Lynx care of them internally.
+ * Lynx takes care of them internally.
*
* The declaration's format is kept in chrtrans/XXX_uni.h -
* keep this in mind when changing ucmaketbl.c,
@@ -79,35 +83,101 @@ extern void UCInit NOARGS;
* from Unicode mechanism). For now we use the MIME name that describes
* what is output to the terminal. - KW
*/
-static CONST struct unimapdesc_str dfont_replacedesc_fallback = {0,NULL,0,1};
-
-#define UC_CHARSET_SETUP_euc_cn UC_Charset_Setup("euc-cn","Chinese",\
- NULL,NULL,0,dfont_replacedesc_fallback,\
- 128,UCT_ENC_CJK,0)
-#define UC_CHARSET_SETUP_euc_jp UC_Charset_Setup("euc-jp","Japanese (EUC-JP)",\
- NULL,NULL,0,dfont_replacedesc_fallback,\
- 128,UCT_ENC_CJK,0)
-#define UC_CHARSET_SETUP_shift_jis UC_Charset_Setup("shift_jis","Japanese (Shift_JIS)",\
- NULL,NULL,0,dfont_replacedesc_fallback,\
- 128,UCT_ENC_CJK,0)
-#define UC_CHARSET_SETUP_euc_kr UC_Charset_Setup("euc-kr","Korean",\
- NULL,NULL,0,dfont_replacedesc_fallback,\
- 128,UCT_ENC_CJK,0)
-#define UC_CHARSET_SETUP_big5 UC_Charset_Setup("big5","Taipei (Big5)",\
- NULL,NULL,0,dfont_replacedesc_fallback,\
- 128,UCT_ENC_CJK,0)
+
+/*----------------------------------------------------------------------------*/
+
+#ifndef NO_CHARSET_euc_cn
+#define NO_CHARSET_euc_cn !ALL_CHARSETS
+#endif
+
+#if NO_CHARSET_euc_cn
+#define UC_CHARSET_SETUP_euc_cn /*nothing*/
+#else
+#define UC_CHARSET_SETUP_euc_cn UC_Charset_NoUctb_Setup("euc-cn","Chinese",\
+ 1, 128,UCT_ENC_CJK,0)
+#endif
+
+/*----------------------------------------------------------------------------*/
+
+#ifndef NO_CHARSET_euc_jp
+#define NO_CHARSET_euc_jp !ALL_CHARSETS
+#endif
+
+#if NO_CHARSET_euc_jp
+#define UC_CHARSET_SETUP_euc_jp /*nothing*/
+#else
+#define UC_CHARSET_SETUP_euc_jp UC_Charset_NoUctb_Setup("euc-jp","Japanese (EUC-JP)",\
+ 1, 128,UCT_ENC_CJK,0)
+#endif
+
+/*----------------------------------------------------------------------------*/
+
+#ifndef NO_CHARSET_shift_jis
+#define NO_CHARSET_shift_jis !ALL_CHARSETS
+#endif
+
+#if NO_CHARSET_shift_jis
+#define UC_CHARSET_SETUP_shift_jis /*nothing*/
+#else
+#define UC_CHARSET_SETUP_shift_jis UC_Charset_NoUctb_Setup("shift_jis","Japanese (Shift_JIS)",\
+ 1, 128,UCT_ENC_CJK,0)
+#endif
+
+/*----------------------------------------------------------------------------*/
+
+#ifndef NO_CHARSET_euc_kr
+#define NO_CHARSET_euc_kr !ALL_CHARSETS
+#endif
+
+#if NO_CHARSET_euc_kr
+#define UC_CHARSET_SETUP_euc_kr /*nothing*/
+#else
+#define UC_CHARSET_SETUP_euc_kr UC_Charset_NoUctb_Setup("euc-kr","Korean",\
+ 1, 128,UCT_ENC_CJK,0)
+#endif
+
+/*----------------------------------------------------------------------------*/
+
+#ifndef NO_CHARSET_big5
+#define NO_CHARSET_big5 !ALL_CHARSETS
+#endif
+
+#if NO_CHARSET_big5
+#define UC_CHARSET_SETUP_big5 /*nothing*/
+#else
+#define UC_CHARSET_SETUP_big5 UC_Charset_NoUctb_Setup("big5","Taipei (Big5)",\
+ 1, 128,UCT_ENC_CJK,0)
+#endif
+
+/*----------------------------------------------------------------------------*/
+
/*
* Placeholder for non-translation mode. - FM
*/
-#define UC_CHARSET_SETUP_x_transparent UC_Charset_Setup("x-transparent","Transparent",\
- NULL,NULL,0,dfont_replacedesc_fallback,\
- 128,1,0)
-static CONST struct unimapdesc_str dfont_replacedesc_NO_fallback = {0,NULL,0,0};
+#ifndef NO_CHARSET_x_transparent
+#define NO_CHARSET_x_transparent !ALL_CHARSETS
+#endif
+
+#if NO_CHARSET_x_transparent
+#define UC_CHARSET_SETUP_x_transparent /*nothing*/
+#else
+#define UC_CHARSET_SETUP_x_transparent UC_Charset_NoUctb_Setup("x-transparent","Transparent",\
+ 0, 128,UCT_ENC_8BIT,0)
+#endif
-#define UC_CHARSET_SETUP_utf_8 UC_Charset_Setup("utf-8","UNICODE (UTF-8)",\
- NULL,NULL,0,dfont_replacedesc_NO_fallback,\
- 128,UCT_ENC_UTF8,0)
+/*----------------------------------------------------------------------------*/
+
+#ifndef NO_CHARSET_utf_8
+#define NO_CHARSET_utf_8 !ALL_CHARSETS
+#endif
+
+#if NO_CHARSET_utf_8
+#define UC_CHARSET_SETUP_utf_8 /*nothing*/
+#else
+#define UC_CHARSET_SETUP_utf_8 UC_Charset_NoUctb_Setup("utf-8","UNICODE (UTF-8)",\
+ 0, 128,UCT_ENC_UTF8,-4)
+#endif
#endif /* UCDOMAP_H */
diff --git a/gnu/usr.bin/lynx/src/Xsystem.c b/gnu/usr.bin/lynx/src/Xsystem.c
new file mode 100644
index 00000000000..7781efe1636
--- /dev/null
+++ b/gnu/usr.bin/lynx/src/Xsystem.c
@@ -0,0 +1,626 @@
+/* $Id: Xsystem.c,v 1.1 2003/05/01 18:59:40 avsm Exp $
+ * like system("cmd") but return with exit code of "cmd"
+ * for Turbo-C/MS-C/LSI-C
+ * This code is in the public domain.
+ *
+ * $Log: Xsystem.c,v $
+ * Revision 1.1 2003/05/01 18:59:40 avsm
+ * Update to lynx-2.8.4-rel1, patchset d, now with IPv6 as well
+ *
+ * Local patches we maintain to the distribution are:
+ * - replace unbounded fscanf with fgets (avsm)
+ * - spelling fixes (deraadt)
+ * - hppa -O0 workaround (mickey)
+ * - default to ftp passive (deraadt)
+ * - work with non-exec scripts (deraadt,hin,maja)
+ * - be more careful with rlogin username (art)
+ * - default to our webpage (deraadt)
+ * - install helpfiles locally (maja)
+ * - mkdtemp temp space directory (art)
+ * - install more recent config.guess (avsm)
+ *
+ * Tested by beck,millert,grange,fries,miod and others, deraadt@ ok
+ *
+ *
+ * Revision 1.14 1997/10/17 (Fri) 16:28:24 senshu
+ * *** for Win32 version ***
+ *
+ * Revision 1.13 1992/02/24 06:59:13 serow
+ * *** empty log message ***
+ *
+ * Revision 1.12 1991/04/09 08:48:20 serow
+ * ignore new line at command line tail
+ *
+ * Revision 1.11 1991/03/12 07:12:50 serow
+ * CMDLINE
+ *
+ * Revision 1.10 91/02/24 05:10:14 serow
+ * 2>&1
+ *
+ * Revision 1.9 91/02/22 07:01:17 serow
+ * NEAR for ms-c
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <io.h>
+#include <process.h>
+#ifndef __CYGWIN__
+#include <dos.h>
+#endif
+
+#include <LYStrings.h>
+
+#ifndef USECMDLINE
+#define USECMDLINE 0
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#define FALSE 0
+#endif
+
+#define TABLESIZE(v) (sizeof(v)/sizeof(v[0]))
+
+#define STR_MAX 512 /* MAX command line */
+
+extern char *mktemp(char *);
+
+#define isk1(c) ((0x81 <= UCH(c) && UCH(c) <= 0x9F) || (0xE0 <= UCH(c) && UCH(c) <= 0xFC))
+#define isq(c) ((c) == '"')
+#define isspc(c) ((c) == ' ' || (c) == '\t')
+#define issep(c) (isspc(c) || (c) == '"' || (c) == '\'' || (c) == '<' || (c) == '>' || (c) == 0)
+#define issep2(c) (issep(c) || (c) == '.' || (c) == '\\' || (c) == '/')
+#define isdeg(c) ('0' <= (c) && (c) <= '9')
+
+#ifndef NEAR
+#if 0 /* MS-C */
+#define NEAR _near
+#else
+#define NEAR
+#endif
+#endif
+
+typedef struct _proc {
+ struct _proc *next;
+ char *line;
+ char *cmd;
+ char *arg;
+ char *inf;
+ int infmod;
+ char *outf;
+ int outfmod;
+ int ored[10];
+ int sred[10];
+} PRO;
+
+static PRO *p1 = 0;
+
+static char *NEAR
+xmalloc(size_t n)
+{
+ char *bp;
+
+ if ((bp = typecallocn(char, n)) == 0) {
+ write(2, "xsystem: Out of memory.!\n", 25);
+ exit(1);
+ }
+ return bp;
+}
+
+static char *NEAR
+xrealloc(void *p, size_t n)
+{
+ char *bp;
+
+ if ((bp = realloc(p, n)) == (char *) 0) {
+ write(2, "xsystem: Out of memory!.\n", 25);
+ exit(1);
+ }
+ return bp;
+}
+
+static int NEAR
+is_builtin_command(char *s)
+{
+#ifdef WIN_EX
+ extern int system_is_NT; /* 1997/11/05 (Wed) 22:10:35 */
+#endif
+
+ static char *cmdtab[]=
+ {
+ "dir", "type", "rem", "ren", "rename", "erase", "del",
+ "copy", "pause", "date", "time", "ver", "vol", "label",
+ "cd", "chdir", "md", "mkdir", "rd", "rmdir", "break",
+ "verify", "set", "prompt", "path", "exit", "ctty", "echo",
+ "if", "for", "cls", "goto", "shift"
+ ,"start" /* start is NT only */
+ };
+ int i, l, lc, count;
+
+ l = strlen(s);
+ count = TABLESIZE(cmdtab);
+ count--;
+#ifdef WIN_EX
+ if (system_is_NT)
+ count++;
+#endif
+ for (i = 0; i < count; i++) {
+ if (strcasecomp(s, cmdtab[i]) == 0)
+ return 1;
+ lc = strlen(cmdtab[i]);
+ if (lc < l && strnicmp(s, cmdtab[i], lc) == 0 && issep2(s[lc]))
+ return 1;
+ }
+ return 0;
+}
+
+static int NEAR
+getswchar(void)
+{
+#ifdef __WIN32__
+ return '/';
+#else
+ union REGS reg;
+
+ reg.x.ax = 0x3700;
+ intdos(&reg, &reg);
+ return reg.h.dl;
+#endif
+}
+
+static int NEAR
+csystem(PRO * p, int flag)
+{
+ char *cmp;
+ char SW[3];
+ int rc;
+
+ if ((cmp = getenv("COMSPEC")) == 0)
+ return -2;
+ SW[0] = (char) getswchar();
+ SW[1] = 'c';
+ SW[2] = 0;
+ rc = spawnl(flag, cmp, cmp, SW, p->cmd, p->arg, (char *) 0);
+ return rc < 0 ? -2 : rc;
+}
+
+static PRO *NEAR
+pars1c(char *s)
+{
+ PRO *pp;
+ char *fnp;
+ int ms, mi;
+ int fs, fi, inpf;
+ int q;
+
+ pp = (PRO *) xmalloc(sizeof(PRO));
+ for (q = 0; q < TABLESIZE(pp->ored); q++)
+ pp->ored[q] = q;
+ while (isspc(*s))
+ s++;
+ pp->line = strdup(s);
+ pp->cmd = xmalloc(ms = 8);
+ mi = 0;
+ while (!issep(*s)) {
+ if (mi >= ms - 1)
+ pp->cmd = xrealloc(pp->cmd, ms += 8);
+ pp->cmd[mi++] = *s++;
+ }
+ pp->cmd[mi] = 0;
+ q = 0;
+ pp->arg = xmalloc(ms = 32);
+ if (isspc(*s))
+ s++;
+ mi = 0;
+ while (*s) {
+ if (mi >= ms - 1) {
+ pp->arg = xrealloc(pp->arg, ms += 32);
+ }
+ if (q == 0) {
+ inpf = 0;
+ if ((mi == 0 || isspc(s[-1])) &&
+ isdeg(s[0]) && s[1] == '>' &&
+ s[2] == '&' && isdeg(s[3])) {
+
+ pp->ored[s[0] & 15] = s[3] & 15;
+ s += 4;
+ continue;
+ } else if (s[0] == '<') {
+ if (pp->inf == 0) {
+ pp->infmod = O_RDONLY;
+ }
+ inpf = 1;
+ } else if (s[0] == '>' && s[1] == '>') {
+ if (pp->outf == 0) {
+ pp->outfmod = O_WRONLY | O_CREAT | O_APPEND;
+ }
+ s++;
+ } else if (s[0] == '>') {
+ if (pp->outf == 0) {
+ pp->outfmod = O_WRONLY | O_CREAT | O_TRUNC;
+ }
+ } else {
+ if (*s == '"')
+ q = !q;
+ pp->arg[mi++] = *s++;
+ continue;
+ }
+ fnp = xmalloc(fs = 16);
+ fi = 0;
+ s++;
+ while (isspc(*s))
+ s++;
+ while (!issep(*s)) {
+ if (fi >= fs - 1)
+ fnp = xrealloc(fnp, fs += 16);
+ fnp[fi++] = *s++;
+ }
+ fnp[fi] = 0;
+ if (inpf) {
+ if (pp->inf == 0)
+ pp->inf = fnp;
+ } else {
+ if (pp->outf == 0)
+ pp->outf = fnp;
+ }
+ } else if (s[0] == '"') {
+ q = !q;
+ pp->arg[mi++] = *s++;
+ } else {
+ pp->arg[mi++] = *s++;
+ }
+ }
+ pp->arg[mi] = 0;
+ return pp;
+}
+
+static PRO *NEAR
+pars(char *s)
+{
+ char *lb;
+ int li, ls, q;
+ int c;
+ PRO *pp;
+
+ lb = xmalloc(ls = STR_MAX); /* about */
+ li = q = 0;
+ p1 = 0;
+
+ for (;;) {
+ c = *s++;
+ if (li >= ls - 2)
+ lb = xrealloc(lb, ls += STR_MAX);
+ if (isk1(c) && *s) {
+ lb[li++] = (char) c;
+ lb[li++] = *s++;
+ } else if ((!q && c == '|') || c == 0 || (c == '\n' && *s == 0)) {
+ lb[li++] = 0;
+ if (p1 == 0) {
+ pp = p1 = pars1c(lb);
+ } else {
+ pp->next = pars1c(lb);
+ pp = pp->next;
+ }
+ li = 0;
+ if (c == 0 || (c == '\n' && *s == 0))
+ break;
+ } else if (c == '"') {
+ q = !q;
+ lb[li++] = (char) c;
+ } else {
+ lb[li++] = (char) c;
+ }
+ }
+ free(lb);
+ return p1;
+}
+
+static int NEAR
+try3(char *cnm, PRO * p, int flag)
+{
+ char cmdb[STR_MAX];
+ int rc;
+
+ sprintf(cmdb, "%.*s.com", sizeof(cmdb) - 5, cnm);
+ if ((rc = open(cmdb, O_RDONLY)) >= 0) {
+ close(rc);
+ return spawnl(flag, cmdb, cmdb, p->arg, (char *) 0);
+ }
+ sprintf(cmdb, "%.*s.exe", sizeof(cmdb) - 5, cnm);
+ if ((rc = open(cmdb, O_RDONLY)) >= 0) {
+ close(rc);
+ return spawnl(flag, cmdb, cmdb, p->arg, (char *) 0);
+ }
+ sprintf(cmdb, "%.*s.bat", sizeof(cmdb) - 5, cnm);
+ if ((rc = open(cmdb, O_RDONLY)) >= 0) {
+ close(rc);
+ return csystem(p, flag);
+ }
+ return -1;
+}
+
+static int NEAR
+prog_go(PRO * p, int flag)
+{
+ char *s;
+ char *extp = 0;
+ char cmdb[STR_MAX];
+ char *ep;
+ int rc, lc, cmd_len;
+
+ cmd_len = strlen(p->cmd);
+
+ s = p->cmd + cmd_len - 1;
+ while (cmd_len && (*s != '\\') && (*s != '/') && (*s != ':')) {
+ if (*s == '.')
+ extp = s;
+ cmd_len--;
+ s--;
+ }
+
+ if (is_builtin_command(p->cmd) || (extp && strcasecomp(extp, ".bat") == 0))
+ return csystem(p, flag);
+
+ if (s < p->cmd) { /* cmd has no PATH nor Drive */
+ ep = getenv("PATH");
+ LYstrncpy(cmdb, p->cmd, sizeof(cmdb) - 1);
+ for (;;) {
+ if (extp) { /* has extension */
+ if ((rc = open(cmdb, O_RDONLY)) >= 0) {
+ close(rc);
+ rc = spawnl(flag, cmdb, cmdb, p->arg, (char *) 0);
+ }
+ } else {
+ rc = try3(cmdb, p, flag);
+ }
+ if (rc >= 0)
+ return rc;
+
+ if (ep && *ep) {
+ int i;
+ for (i = 0; *ep != ';' && *ep != '\0'; ep++, i++)
+ lc = cmdb[i] = *ep;
+ if (*ep == ';')
+ ep++;
+ if (i > 0 && lc != ':' && lc != '\\' && lc != '/')
+ cmdb[i++] = '\\';
+ cmdb[i] = 0;
+ LYstrncpy(cmdb + i, p->cmd, sizeof(cmdb) - 1 - i);
+ } else {
+ if (rc == -2)
+ return rc;
+ return -1;
+ }
+ }
+ } else { /* has PATH or Drive */
+ if (extp) { /* has extension */
+ if ((rc = open(p->cmd, O_RDONLY)) >= 0) {
+ close(rc);
+ return spawnl(flag, p->cmd, p->cmd, p->arg, (char *) 0);
+ }
+ return -1;
+ } else {
+ return try3(p->cmd, p, flag);
+ }
+ }
+}
+
+static char *NEAR
+tmpf(char *tp)
+{
+ char tplate[STR_MAX];
+ char *ev;
+ int i;
+
+ if ((ev = getenv("TMP")) != 0) {
+ LYstrncpy(tplate, ev, sizeof(tplate) - 2 - strlen(tp));
+ i = strlen(ev);
+ if (i && ev[i - 1] != '\\' && ev[i - 1] != '/')
+ strcat(tplate, "\\");
+ } else {
+ tplate[0] = 0;
+ }
+ strcat(tplate, tp);
+ return strdup(mktemp(tplate));
+}
+
+static int NEAR
+redopen(char *fn, int md, int sfd)
+{
+ int rc;
+ int fd;
+
+ if ((fd = open(fn, md, 0666)) != -1) {
+ if (md & O_APPEND)
+ lseek(fd, 0L, SEEK_END);
+ rc = dup(sfd);
+ if (fd != sfd) {
+ dup2(fd, sfd);
+ close(fd);
+ }
+ return rc;
+ }
+ return -1;
+}
+
+static int NEAR
+redclose(int fd, int sfd)
+{
+ if (fd != -1) {
+ dup2(fd, sfd);
+ close(fd);
+ }
+ return -1;
+}
+
+static void NEAR
+redswitch(PRO * p)
+{
+ int d;
+
+ for (d = 0; d < TABLESIZE(p->ored); d++) {
+ if (d != p->ored[d]) {
+ p->sred[d] = dup(d);
+ dup2(p->ored[d], d);
+ }
+ }
+}
+
+static void NEAR
+redunswitch(PRO * p)
+{
+ int d;
+
+ for (d = 0; d < TABLESIZE(p->ored); d++) {
+ if (d != p->ored[d]) {
+ dup2(p->sred[d], d);
+ close(p->sred[d]);
+ }
+ }
+}
+
+int
+xsystem(char *cmd)
+{
+ PRO *p, *pn;
+ char *pof, *pif, *pxf;
+ int psstdin, psstdout;
+ int rdstdin, rdstdout;
+ int rc = 0;
+ static char *cmdline = 0;
+#if USECMDLINE
+ char *oldcmdline;
+#endif
+
+#ifdef SH_EX /* 1997/11/01 (Sat) 10:04:03 add by JH7AYN */
+ pif = cmd;
+ while (*pif++) {
+ if (*pif == '\r') {
+ *pif = '\0';
+ break;
+ } else if (*pif == '\n') {
+ *pif = '\0';
+ break;
+ }
+ }
+#endif
+
+ pof = pif = pxf = 0;
+ p = pars(cmd);
+ pof = tmpf("p1XXXXXX");
+ pif = tmpf("p2XXXXXX");
+ psstdin = psstdout = rdstdin = rdstdout = -1;
+ while (p) {
+#if USECMDLINE
+ if (!getenv("NOCMDLINE")) {
+ oldcmdline = cmdline;
+ cmdline = xmalloc(strlen(p->cmd) + strlen(p->arg) + 10);
+ sprintf(cmdline, "CMDLINE=%s %s", p->cmd, p->arg);
+ putenv(cmdline);
+ if (oldcmdline)
+ free(oldcmdline);
+ }
+#endif
+ if (p->next)
+ psstdout = redopen(pof, O_WRONLY | O_CREAT | O_TRUNC, 1);
+ if (p->inf)
+ rdstdin = redopen(p->inf, p->infmod, 0);
+ if (p->outf)
+ rdstdout = redopen(p->outf, p->outfmod, 1);
+ redswitch(p);
+ rc = prog_go(p, P_WAIT);
+ redunswitch(p);
+ rdstdin = redclose(rdstdin, 0);
+ rdstdout = redclose(rdstdout, 1);
+ psstdout = redclose(psstdout, 1);
+ psstdin = redclose(psstdin, 0);
+ if ((p = p->next) != 0) {
+ pxf = pif;
+ pif = pof;
+ pof = pxf;
+ psstdin = redopen(pif, O_RDONLY, 0);
+ }
+ }
+ unlink(pif);
+ free(pif);
+ unlink(pof);
+ free(pof);
+ for (pn = p = p1; p; p = pn) {
+ pn = p->next;
+ if (p->line)
+ free(p->line);
+ if (p->cmd)
+ free(p->cmd);
+ if (p->arg)
+ free(p->arg);
+ if (p->inf)
+ free(p->inf);
+ if (p->outf)
+ free(p->outf);
+ free(p);
+ }
+ if (rc == -2)
+ return 127;
+ return rc < 0 ? 0xFF00 : rc;
+}
+
+int exec_command(char * cmd, int wait_flag)
+{
+#if defined(__MINGW32__)
+ return system(cmd);
+#else
+ PRO *p;
+ char *pif;
+ int rc = 0;
+ int cmd_str;
+
+ pif = cmd;
+ while(*pif == ' ')
+ pif++;
+
+ cmd = pif;
+ cmd_str = TRUE;
+
+ while (*pif++) {
+ if (*pif == '\r') {
+ *pif = '\0';
+ break;
+ } else if (*pif == '\n') {
+ *pif = '\0';
+ break;
+ } else if (cmd_str) {
+ if (*pif == '/')
+ *pif = '\\';
+ } else if (cmd_str) {
+ if (*pif == ' ')
+ cmd_str = FALSE;
+ }
+ }
+ p = pars(cmd);
+
+ if (wait_flag)
+ rc = prog_go(p, P_WAIT);
+ else
+ rc = prog_go(p, P_NOWAIT);
+
+ return rc;
+#endif
+}
+
+
+#ifdef TEST
+#include <stdio.h>
+
+void
+main()
+{
+ char line_buff[STR_MAX];
+
+ while (gets(line_buff)) {
+ printf("\nreturn %04X\n", xsystem(line_buff));
+ }
+}
+#endif /* TEST */
diff --git a/gnu/usr.bin/lynx/src/chrtrans/README.format b/gnu/usr.bin/lynx/src/chrtrans/README.format
index df7d335e8c6..7437b503279 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/README.format
+++ b/gnu/usr.bin/lynx/src/chrtrans/README.format
@@ -82,7 +82,7 @@ c) character translation definitions:
* <range> idem
* <range> <unicode range>
*
- * where <range> ::= <fontpos>-<fontpos>
+ * where <unicode range> ::= <unicode>-<unicode>
* and <unicode> ::= U+<h><h><h><h>
* and <h> ::= <hexadecimal digit>
*
diff --git a/gnu/usr.bin/lynx/src/chrtrans/UCkd.h b/gnu/usr.bin/lynx/src/chrtrans/UCkd.h
index 104882d7e04..a6020696465 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/UCkd.h
+++ b/gnu/usr.bin/lynx/src/chrtrans/UCkd.h
@@ -1,8 +1,5 @@
#ifndef _UC_KD_H
#define _UC_KD_H
-#ifdef NOTDEFINED
-#include <sys/types.h> /* Included via tcp.h. */
-#endif /* NOTDEFINED */
/*
* NOTE: THE FOLLOWING #define MAY NEED ADJUSTMENT.
diff --git a/gnu/usr.bin/lynx/src/chrtrans/build-chrtrans.com b/gnu/usr.bin/lynx/src/chrtrans/build-chrtrans.com
index 42aebf86aec..0ba35058dad 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/build-chrtrans.com
+++ b/gnu/usr.bin/lynx/src/chrtrans/build-chrtrans.com
@@ -76,86 +76,47 @@ $!
$! Create the Lynx [.SRC.CHRTRANS] header files.
$!
$ makeuctb := $'CHRwhere'makeuctb
-$ define/user sys$output 'CHRwhere'iso01_uni.h !ISO Latin 1
-$ makeuctb iso01_uni.tbl
-$ define/user sys$output 'CHRwhere'cp850_uni.h !DosLatin1 (cp850)
-$ makeuctb cp850_uni.tbl
-$ define/user sys$output 'CHRwhere'cp1252_uni.h !WinLatin1 (cp1252)
+$ makeuctb cp1250_uni.tbl
+$ makeuctb cp1251_uni.tbl
$ makeuctb cp1252_uni.tbl
-$ define/user sys$output 'CHRwhere'cp437_uni.h !DosLatinUS (cp437)
+$ makeuctb cp1253_uni.tbl
+$ makeuctb cp1255_uni.tbl
+$ makeuctb cp1256_uni.tbl
+$ makeuctb cp1257_uni.tbl
$ makeuctb cp437_uni.tbl
-$ define/user sys$output 'CHRwhere'hp_uni.h !HP Roman8
-$ makeuctb hp_uni.tbl
-$ define/user sys$output 'CHRwhere'dmcs_uni.h !DEC Multinational
-$ makeuctb dmcs_uni.tbl
-$ define/user sys$output 'CHRwhere'mac_uni.h !Macintosh (8 bit)
-$ makeuctb mac_uni.tbl
-$ define/user sys$output 'CHRwhere'next_uni.h !NeXT character set
-$ makeuctb next_uni.tbl
-$ define/user sys$output 'CHRwhere'viscii_uni.h !Vietnamese (VISCII)
-$ makeuctb viscii_uni.tbl
-$ define/user sys$output 'CHRwhere'def7_uni.h !7 bit approximations
+$ makeuctb cp737_uni.tbl
+$ makeuctb cp775_uni.tbl
+$ makeuctb cp850_uni.tbl
+$ makeuctb cp852_uni.tbl
+$ makeuctb cp862_uni.tbl
+$ makeuctb cp864_uni.tbl
+$ makeuctb cp866_uni.tbl
+$ makeuctb cp866u_uni.tbl
+$ makeuctb cp869_uni.tbl
$ makeuctb def7_uni.tbl
-$ define/user sys$output 'CHRwhere'iso02_uni.h !ISO Latin 2
+$ makeuctb dmcs_uni.tbl
+$ makeuctb hp_uni.tbl
+$ makeuctb iso01_uni.tbl
$ makeuctb iso02_uni.tbl
-$ define/user sys$output 'CHRwhere'cp852_uni.h !DosLatin2 (cp852)
-$ makeuctb cp852_uni.tbl
-$ define/user sys$output 'CHRwhere'cp1250_uni.h !WinLatin2 (cp1250)
-$ makeuctb cp1250_uni.tbl
-$ define/user sys$output 'CHRwhere'iso03_uni.h !ISO Latin 3
$ makeuctb iso03_uni.tbl
-$ define/user sys$output 'CHRwhere'iso04_uni.h !ISO Latin 4
$ makeuctb iso04_uni.tbl
-$ define/user sys$output 'CHRwhere'cp775_uni.h !DosBlatRim (cp775)
-$ makeuctb cp775_uni.tbl
-$ define/user sys$output 'CHRwhere'cp1257_uni.h !WinBlatRim (cp1257)
-$ makeuctb cp1257_uni.tbl
-$ define/user sys$output 'CHRwhere'iso05_uni.h !ISO 8859-5 Cyrillic
$ makeuctb iso05_uni.tbl
-$ define/user sys$output 'CHRwhere'cp866_uni.h !DosCyrillic (cp866)
-$ makeuctb cp866_uni.tbl
-$ define/user sys$output 'CHRwhere'cp866u_uni.h !Ukrainian Cyrillic
-$ makeuctb cp866u_uni.tbl
-$ define/user sys$output 'CHRwhere'cp1251_uni.h !WinCyrillic (cp1251)
-$ makeuctb cp1251_uni.tbl
-$ define/user sys$output 'CHRwhere'koi8r_uni.h !KOI8-R Cyrillic
-$ makeuctb koi8r_uni.tbl
-$ define/user sys$output 'CHRwhere'koi8u_uni.h !KOI8-U Ukranian Cyrillic
-$ makeuctb koi8u_uni.tbl
-$ define/user sys$output 'CHRwhere'iso06_uni.h !ISO 8859-6 Arabic
$ makeuctb iso06_uni.tbl
-$ define/user sys$output 'CHRwhere'cp864_uni.h !DosArabic (cp864)
-$ makeuctb cp864_uni.tbl
-$ define/user sys$output 'CHRwhere'cp1256_uni.h !WinArabic (cp1256)
-$ makeuctb cp1256_uni.tbl
-$ define/user sys$output 'CHRwhere'iso07_uni.h !ISO 8859-7 Greek
$ makeuctb iso07_uni.tbl
-$ define/user sys$output 'CHRwhere'cp737_uni.h !DosGreek (cp737)
-$ makeuctb cp737_uni.tbl
-$ define/user sys$output 'CHRwhere'cp869_uni.h !DosGreek2 (cp869)
-$ makeuctb cp869_uni.tbl
-$ define/user sys$output 'CHRwhere'cp1253_uni.h !WinGreek (cp1253)
-$ makeuctb cp1253_uni.tbl
-$ define/user sys$output 'CHRwhere'iso08_uni.h !ISO 8859-8 Hebrew
$ makeuctb iso08_uni.tbl
-$ define/user sys$output 'CHRwhere'cp862_uni.h !DosHebrew (cp862)
-$ makeuctb cp862_uni.tbl
-$ define/user sys$output 'CHRwhere'cp1255_uni.h !WinHebrew (cp1255)
-$ makeuctb cp1255_uni.tbl
-$ define/user sys$output 'CHRwhere'iso09_uni.h !ISO 8859-9 (Latin 5)
$ makeuctb iso09_uni.tbl
-$ define/user sys$output 'CHRwhere'iso10_uni.h !ISO 8859-10
$ makeuctb iso10_uni.tbl
-$ define/user sys$output 'CHRwhere'iso15_uni.h !ISO 8859-15
$ makeuctb iso15_uni.tbl
-$ define/user sys$output 'CHRwhere'utf8_uni.h !UNICODE UTF-8
-$ makeuctb utf8_uni.tbl
-$ define/user sys$output 'CHRwhere'rfc_suni.h !RFC 1345 w/o Intro
-$ makeuctb rfc_suni.tbl
-$ define/user sys$output 'CHRwhere'mnem2_suni.h !RFC 1345 Mnemonic
+$ makeuctb koi8r_uni.tbl
+$ makeuctb koi8u_uni.tbl
+$ makeuctb mac_uni.tbl
+$ makeuctb mnem_suni.tbl
$ makeuctb mnem2_suni.tbl
-$ define/user sys$output 'CHRwhere'mnem_suni.h !(not used)
$ makeuctb mnem_suni.tbl
+$ makeuctb next_uni.tbl
+$ makeuctb rfc_suni.tbl
+$ makeuctb utf8_uni.tbl
+$ makeuctb viscii_uni.tbl
$ v1 = 'f$verify(0)'
$ exit
$!
diff --git a/gnu/usr.bin/lynx/src/chrtrans/build-header.com b/gnu/usr.bin/lynx/src/chrtrans/build-header.com
index 963825ddc00..c1e9d087d02 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/build-header.com
+++ b/gnu/usr.bin/lynx/src/chrtrans/build-header.com
@@ -24,7 +24,6 @@ $!
$! Create a Lynx [.SRC.CHRTRANS] header file.
$!
$ makeuctb := $'CHRwhere'makeuctb
-$ define/user sys$output 'CHRwhere''P1'.h
$ makeuctb 'P1'.tbl
$ v1 = 'f$verify(0)'
$ exit
diff --git a/gnu/usr.bin/lynx/src/chrtrans/cp1250_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/cp1250_uni.tbl
index 207add88214..64ad83c4d9b 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/cp1250_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/cp1250_uni.tbl
@@ -26,6 +26,8 @@ C1250
# The entries are in cp1250 order
#
##################
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
0x20-0x7e idem
#
@@ -39,11 +41,11 @@ C1250
0x87 U+2021 #DOUBLE DAGGER
0x88 #UNDEFINED
0x89 U+2030 #PER MILLE SIGN
-0x8A U+0160 #LATIN CAPITAL LETTER S WITH CARON
+0x8A U+0160 U+0428 #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
+0x8E U+017D U+0416 #LATIN CAPITAL LETTER Z WITH CARON
0x8F U+0179 #LATIN CAPITAL LETTER Z WITH ACUTE
0x90 #UNDEFINED
0x91 U+2018 #LEFT SINGLE QUOTATION MARK
@@ -55,21 +57,21 @@ C1250
0x97 U+2014 #EM DASH
0x98 #UNDEFINED
0x99 U+2122 #TRADE MARK SIGN
-0x9A U+0161 #LATIN SMALL LETTER S WITH CARON
+0x9A U+0161 U+0448 #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
+0x9E U+017E U+0436 #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
+0xA1 U+02C7 U+030c #CARON
+0xA2 U+02D8 U+0306 #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
+0xA8 U+00A8 U+0308 #DIAERESIS
0xA9 U+00A9 #COPYRIGHT SIGN
0xAA U+015E #LATIN CAPITAL LETTER S WITH CEDILLA
0xAB U+00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
@@ -77,20 +79,20 @@ C1250
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
+0xB0 U+00B0 U+030a #DEGREE SIGN
0xB1 U+00B1 #PLUS-MINUS SIGN
-0xB2 U+02DB #OGONEK
+0xB2 U+02DB U+0328 #OGONEK
0xB3 U+0142 #LATIN SMALL LETTER L WITH STROKE
0xB4 U+00B4 #ACUTE ACCENT
-0xB5 U+00B5 #MICRO SIGN
+0xB5 U+00B5 U+03bc #MICRO SIGN
0xB6 U+00B6 #PILCROW SIGN
0xB7 U+00B7 #MIDDLE DOT
-0xB8 U+00B8 #CEDILLA
+0xB8 U+00B8 U+0327 #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
+0xBD U+02DD U+030b #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
@@ -101,7 +103,7 @@ C1250
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
+0xC8 U+010C U+0427 # 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
@@ -133,7 +135,7 @@ C1250
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
+0xE8 U+010D U+02a7 U+0447 # 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
@@ -156,4 +158,13 @@ C1250
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
+0xFF U+02D9 U+0307 U+0387 #DOT ABOVE
+
+U+2218 " \260 " # RING OPERATOR
+U+2219 " \225 " # BULLET OPERATOR
+U+2297 "(\327)" # CIRCLED TIMES
+U+2299 "(\267)" # CIRCLED DOT OPERATOR
+U+229A "(\260)" # CIRCLED RING OPERATOR
+U+22A0 "[\327]" # SQUARED TIMES
+U+22A1 "[\267]" # SQUARED DOT OPERATOR
+U+22C5 " \267 " # DOT OPERATOR
diff --git a/gnu/usr.bin/lynx/src/chrtrans/cp1252_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/cp1252_uni.tbl
index 7a9e149f94f..2365c9c5d96 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/cp1252_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/cp1252_uni.tbl
@@ -30,6 +30,8 @@ C1252
# The entries are in cp1252 order
#
##################
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
0x20-0x7e idem
#
@@ -41,7 +43,7 @@ C1252
0x85 U+2026 #HORIZONTAL ELLIPSIS
0x86 U+2020 #DAGGER
0x87 U+2021 #DOUBLE DAGGER
-0x88 U+02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
+0x88 U+02C6 U+0302 #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
@@ -53,7 +55,7 @@ C1252
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
+0x94 U+201D U+02dd U+030b #RIGHT DOUBLE QUOTATION MARK
0x95 U+2022 #BULLET
0x96 U+2013 #EN DASH
0x97 U+2014 #EM DASH
@@ -73,23 +75,23 @@ C1252
0xA5 U+00A5 #YEN SIGN
0xA6 U+00A6 #BROKEN BAR
0xA7 U+00A7 #SECTION SIGN
-0xA8 U+00A8 #DIAERESIS
+0xA8 U+00A8 U+0308 #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
+0xAF U+00AF U+0304 #MACRON
+0xB0 U+00B0 U+030a #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
+0xB5 U+00B5 U+03bc #MICRO SIGN
0xB6 U+00B6 #PILCROW SIGN
-0xB7 U+00B7 #MIDDLE DOT
-0xB8 U+00B8 #CEDILLA
+0xB7 U+00B7 U+0307 U+0387 U+2027 #MIDDLE DOT
+0xB8 U+00B8 U+0327 #CEDILLA
0xB9 U+00B9 #SUPERSCRIPT ONE
0xBA U+00BA #MASCULINE ORDINAL INDICATOR
0xBB U+00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
@@ -161,3 +163,13 @@ C1252
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
+
+U+2218 " \260 " # RING OPERATOR
+U+2219 " \225 " # BULLET OPERATOR
+U+221b " ROOT\263 "
+U+2297 "(\327)" # CIRCLED TIMES
+U+2299 "(\267)" # CIRCLED DOT OPERATOR
+U+229A "(\260)" # CIRCLED RING OPERATOR
+U+22A0 "[\327]" # SQUARED TIMES
+U+22A1 "[\267]" # SQUARED DOT OPERATOR
+U+22C5 " \267 " # DOT OPERATOR
diff --git a/gnu/usr.bin/lynx/src/chrtrans/cp1253_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/cp1253_uni.tbl
index 6a08baeff86..8d3116d83e5 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/cp1253_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/cp1253_uni.tbl
@@ -46,8 +46,8 @@ C1253
0x8E #UNDEFINED
0x8F #UNDEFINED
0x90 #UNDEFINED
-0x91 U+2018 #LEFT SINGLE QUOTATION MARK
-0x92 U+2019 #RIGHT SINGLE QUOTATION MARK
+0x91 U+2018 U+02bd #LEFT SINGLE QUOTATION MARK
+0x92 U+2019 U+02bc #RIGHT SINGLE QUOTATION MARK
0x93 U+201C #LEFT DOUBLE QUOTATION MARK
0x94 U+201D #RIGHT DOUBLE QUOTATION MARK
0x95 U+2022 #BULLET
diff --git a/gnu/usr.bin/lynx/src/chrtrans/cp437_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/cp437_uni.tbl
index 818cbab3f99..957556931df 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/cp437_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/cp437_uni.tbl
@@ -28,8 +28,8 @@ C437
#
# The entries are in cp437_DosLatinUS order
#
-# some mapppings of greek letters to latin letters added,
-# just for fun.. - KW
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
#
#######################################
@@ -51,7 +51,7 @@ C437
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
+0x90 U+00c9 U+0388 #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
@@ -61,7 +61,7 @@ C437
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
+0x9a U+00dc U+03ab #LATIN CAPITAL LETTER U WITH DIAERESIS
0x9b U+00a2 #CENT SIGN
0x9c U+00a3 #POUND SIGN
0x9d U+00a5 #YEN SIGN
@@ -135,40 +135,45 @@ C437
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
+0xe4 U+03a3 U+2211 #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
+0xea U+03a9 U+2126 #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
+0xed U+03c6 U+00f8 #GREEK SMALL LETTER PHI
+0xee U+03b5 U+2208 U+220a #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
+0xf2 U+2265 U+2267 #GREATER-THAN OR EQUAL TO
+0xf3 U+2264 U+2266 #LESS-THAN OR EQUAL TO
+0xf4 U+2320 U+0283 #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
+0xf8 U+00b0 U+030a #DEGREE SIGN
+0xf9 U+2219 U+0307 U+0387 #BULLET OPERATOR
+0xfa U+00b7 U+2027 #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 "\356'" #:î'
U+03ae:h'
-U+03af:i'
-U+03cc:o'
U+03cd:u'
U+03ce:w'
+U+2209 " !\356 "
+U+221b " 3\373"
+U+221c " 4\373"
+U+2262 " !\360"
+U+2299 "(\372)"
+U+229a "(\370)"
+U+22a1 "[\372]"
+U+02a7 "t\364"
diff --git a/gnu/usr.bin/lynx/src/chrtrans/cp737_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/cp737_uni.tbl
index 6beee2c47b2..710bd288eea 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/cp737_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/cp737_uni.tbl
@@ -25,6 +25,8 @@ C737
# The entries are in cp737_DOSGreek order
#
##################
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
0x20-0x7f idem
#
@@ -54,16 +56,16 @@ C737
0x97 U+03a9 #GREEK CAPITAL LETTER OMEGA
0x98 U+03b1 #GREEK SMALL LETTER ALPHA
0x99 U+03b2 #GREEK SMALL LETTER BETA
-0x9a U+03b3 #GREEK SMALL LETTER GAMMA
+0x9a U+03b3 U+0263 #GREEK SMALL LETTER GAMMA
0x9b U+03b4 #GREEK SMALL LETTER DELTA
0x9c U+03b5 #GREEK SMALL LETTER EPSILON
0x9d U+03b6 #GREEK SMALL LETTER ZETA
0x9e U+03b7 #GREEK SMALL LETTER ETA
0x9f U+03b8 #GREEK SMALL LETTER THETA
-0xa0 U+03b9 #GREEK SMALL LETTER IOTA
+0xa0 U+03b9 U+0131 #GREEK SMALL LETTER IOTA
0xa1 U+03ba #GREEK SMALL LETTER KAPPA
0xa2 U+03bb #GREEK SMALL LETTER LAMDA
-0xa3 U+03bc #GREEK SMALL LETTER MU
+0xa3 U+03bc U+00b5 #GREEK SMALL LETTER MU
0xa4 U+03bd #GREEK SMALL LETTER NU
0xa5 U+03be #GREEK SMALL LETTER XI
0xa6 U+03bf #GREEK SMALL LETTER OMICRON
@@ -72,7 +74,7 @@ C737
0xa9 U+03c3 #GREEK SMALL LETTER SIGMA
0xaa U+03c2 #GREEK SMALL LETTER FINAL SIGMA
0xab U+03c4 #GREEK SMALL LETTER TAU
-0xac U+03c5 #GREEK SMALL LETTER UPSILON
+0xac U+03c5 U+028a #GREEK SMALL LETTER UPSILON
0xad U+03c6 #GREEK SMALL LETTER PHI
0xae U+03c7 #GREEK SMALL LETTER CHI
0xaf U+03c8 #GREEK SMALL LETTER PSI
@@ -132,7 +134,7 @@ C737
0xe5 U+03af #GREEK SMALL LETTER IOTA WITH TONOS
0xe6 U+03cc #GREEK SMALL LETTER OMICRON WITH TONOS
0xe7 U+03cd #GREEK SMALL LETTER UPSILON WITH TONOS
-0xe8 U+03cb #GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+0xe8 U+03cb U+00fc #GREEK SMALL LETTER UPSILON WITH DIALYTIKA
0xe9 U+03ce #GREEK SMALL LETTER OMEGA WITH TONOS
0xea U+0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS
0xeb U+0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS
@@ -149,10 +151,20 @@ C737
0xf6 U+00f7 #DIVISION SIGN
0xf7 U+2248 #ALMOST EQUAL TO
0xf8 U+00b0 #DEGREE SIGN
-0xf9 U+2219 #BULLET OPERATOR
+0xf9 U+2219 U+0307 U+0387 #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+2209 " !\234 "
+U+2218 " \370 " # RING OPERATOR
+U+221b " 3\373"
+U+221c " 4\373"
+U+2299 "(\372)"
+U+229a "(\370)"
+U+22a1 "[\372]"
+U+02a4 "d\235"
+U+2249 "!\367"
diff --git a/gnu/usr.bin/lynx/src/chrtrans/cp850_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/cp850_uni.tbl
index bc44cde89f4..91fe44eecc1 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/cp850_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/cp850_uni.tbl
@@ -31,12 +31,14 @@ C850
# The entries are in cp850_DOSLatin1 order
#
##################
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
0x20-0x7e idem
#
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
+0x81 U+00fc U+03cb #LATIN SMALL LETTER U WITH DIAERESIS
+0x82 U+00e9 U+03ad #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
@@ -45,12 +47,12 @@ C850
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
+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
+0x90 U+00c9 U+0388 #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
@@ -60,16 +62,16 @@ C850
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
+0x9a U+00dc U+03ab #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
+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
@@ -87,7 +89,7 @@ C850
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
+0xb5 U+00c1 U+0386 #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
@@ -119,10 +121,10 @@ C850
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
+0xd5 U+0131 U+03b9 #LATIN SMALL LETTER DOTLESS I
+0xd6 U+00cd U+038a #LATIN CAPITAL LETTER I WITH ACUTE
0xd7 U+00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xd8 U+00cf #LATIN CAPITAL LETTER I WITH DIAERESIS
+0xd8 U+00cf U+03aa #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
@@ -130,13 +132,13 @@ C850
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
+0xe0 U+00d3 U+038c #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
+0xe6 U+00b5 U+03bc #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
@@ -144,22 +146,30 @@ C850
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
+0xee U+00af U+0304 #MACRON
+0xef U+00b4 U+0301 #ACUTE ACCENT
0xf0 U+00ad #SOFT HYPHEN
0xf1 U+00b1 #PLUS-MINUS SIGN
-0xf2 U+2017 #DOUBLE LOW LINE
+0xf2 U+2017 U+0333 #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
+0xf7 U+00b8 U+0327 #CEDILLA
+0xf8 U+00b0 U+030a #DEGREE SIGN
+0xf9 U+00a8 U+0308 #DIAERESIS
+0xfa U+00b7 U+0307 U+0387 U+2027 #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
+U+2218 " \370 " # RING OPERATOR
+U+221b " ROOT\374 "
+U+2297 "(\236)" # CIRCLED TIMES
+U+2299 "(\372)" # CIRCLED DOT OPERATOR
+U+229A "(\370)" # CIRCLED RING OPERATOR
+U+22A0 "[\236]" # SQUARED TIMES
+U+22A1 "[\372]" # SQUARED DOT OPERATOR
+U+22C5 " \372 " # DOT OPERATOR
diff --git a/gnu/usr.bin/lynx/src/chrtrans/cp852_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/cp852_uni.tbl
index fec2ecf40bd..c4ac349ba95 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/cp852_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/cp852_uni.tbl
@@ -25,12 +25,14 @@ C852
# The entries are in cp852_DOSLatin2 order
#
##################
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
0x20-0x7e idem
#
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
+0x81 U+00fc U+03cb #LATIN SMALL LETTER U WITH DIAERESIS
+0x82 U+00e9 U+03ad #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
@@ -44,7 +46,7 @@ C852
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
+0x90 U+00c9 U+0388 #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
@@ -54,25 +56,25 @@ C852
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
+0x9a U+00dc U+03ab #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
+0x9f U+010d U+02a7 U+0447 #LATIN SMALL LETTER C WITH CARON
+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+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
+0xa6 U+017d U+0416 #LATIN CAPITAL LETTER Z WITH CARON
+0xa7 U+017e U+0436 #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
+0xac U+010c U+0427 #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
@@ -81,7 +83,7 @@ C852
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
+0xb5 U+00c1 U+0386 #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
@@ -114,7 +116,7 @@ C852
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
+0xd6 U+00cd U+038a #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
@@ -124,14 +126,14 @@ C852
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
+0xe0 U+00d3 U+038c #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
+0xe6 U+0160 U+0428 #LATIN CAPITAL LETTER S WITH CARON
+0xe7 U+0161 U+0448 #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
@@ -139,21 +141,28 @@ C852
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
+0xef U+00b4 U+0301 #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
+0xf1 U+02dd U+030b #DOUBLE ACUTE ACCENT
+0xf2 U+02db U+0328 #OGONEK
+0xf3 U+02c7 U+030c #CARON
+0xf4 U+02d8 U+0306 #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
+0xf7 U+00b8 U+0327 #CEDILLA
+0xf8 U+00b0 U+030a #DEGREE SIGN
+0xf9 U+00a8 U+0308 #DIAERESIS
+0xfa U+02d9 U+0307 U+0387 #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
+U+2218 " \370 " # RING OPERATOR
+U+2297 "(\236)" # CIRCLED TIMES
+U+2299 "(\372)" # CIRCLED DOT OPERATOR
+U+229A "(\370)" # CIRCLED RING OPERATOR
+U+22A0 "[\236]" # SQUARED TIMES
+U+22A1 "[\372]" # SQUARED DOT OPERATOR
+U+22C5 " \372 " # DOT OPERATOR
diff --git a/gnu/usr.bin/lynx/src/chrtrans/cp869_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/cp869_uni.tbl
index a706d2a813e..e8941b41a99 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/cp869_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/cp869_uni.tbl
@@ -38,8 +38,8 @@ C869
0x88 U+00b7 #MIDDLE DOT
0x89 U+00ac #NOT SIGN
0x8a U+00a6 #BROKEN BAR
-0x8b U+2018 #LEFT SINGLE QUOTATION MARK
-0x8c U+2019 #RIGHT SINGLE QUOTATION MARK
+0x8b U+2018 U+02bd #LEFT SINGLE QUOTATION MARK
+0x8c U+2019 U+02bc #RIGHT SINGLE QUOTATION MARK
0x8d U+0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS
0x8e U+2015 #HORIZONTAL BAR
0x8f U+0389 #GREEK CAPITAL LETTER ETA WITH TONOS
diff --git a/gnu/usr.bin/lynx/src/chrtrans/def7_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/def7_uni.tbl
index 39dc165d883..f25e84f1250 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/def7_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/def7_uni.tbl
@@ -67,7 +67,7 @@ U+00bd: 1/2
U+00be: 3/4
U+00bf:?
0x41 U+00c0-U+00c3
-U+00c4:A:
+U+00c4 "Ae" # &Auml;, not the best choice for some languages.
U+00c5:AA
U+00c6:AE
U+00c7:C,
@@ -76,17 +76,17 @@ U+00c7:C,
U+00d0:D-
0x4e U+00d1
0x4f U+00d2-U+00d5
-U+00d6:O:
+U+00d6 "Oe" # &Ouml;, not the best choice for some languages.
U+00d7: *
U+00d8:O/
0x55 U+00d9-U+00db
-U+00dc:U:
+U+00dc "Ue" # &Uuml;, not the best choice for some languages.
0x59 U+00dd
U+00de:TH
U+00df:ss
U+00e0:`a
0x61 U+00e1-U+00e3
-U+00e4:a:
+U+00e4 "ae" # &auml;, not the best choice for some languages.
U+00e5:aa
U+00e6:ae
U+00e7:c,
@@ -96,11 +96,11 @@ U+00ec:`i
U+00f0:d-
0x6e U+00f1
0x6f U+00f2-U+00f5
-U+00f6:o:
+U+00f6 "oe" # &ouml;, not the best choice for some languages.
U+00f7:-:
U+00f8:o/
0x75 U+00f9-U+00fb
-U+00fc:u:
+U+00fc "ue" # &uuml;, not the best choice for some languages.
0x79 U+00fd
U+00fe:th
0x79 U+00ff
@@ -165,7 +165,7 @@ U+0171:u"
0x77 U+0175
0x59 U+0176 U+0178
0x79 U+0177
-0x5a U+0179 U+017b U+017d
+0x5a U+0179 U+017b U+017d U+021d
0x7a U+017a U+017c U+017e
U+017f:s1
U+0187:C2
@@ -314,7 +314,7 @@ U+028d:w<vls>
U+028e:l^
U+028f:I.
U+0290:z.
-U+0292:ed
+U+0292:Z
0x3f U+0294 # LATIN SMALL LETTER GLOTTAL STOP -> ?
U+0295:H<vcd>
U+0296:l!
@@ -326,6 +326,9 @@ U+029b:G`
U+029e:k!
0x4c U+029F # LATIN LETTER SMALL CAPITAL L
U+02a0:q`
+U+02a4:d3
+U+02a6:ts
+U+02a7:tS
U+02b0:<h>
U+02b1:<?>
0x3b U+02b2 U+0321
@@ -335,23 +338,50 @@ U+02bb:;S
0x60 U+02bc
U+02c6:^
U+02c7:'<
+U+02c8:|
U+02c9:1-
U+02cb:1!
0x3a U+02d0
+U+02d1 ":\\"
+0x2b U+02d6
+0x2d U+02d7
U+02d8:'(
U+02d9:'.
U+02da:'0
U+02db:';
U+02dc:~
U+02dd:'"
+U+02e5:_T
+U+02e6:_H
+U+02e7:_M
+U+02e8:_L
+U+02e9:_B
+U+02ec:_v
+U+02ee:''
+0x60 U+0300
+0x27 U+0301
+0x5e U+0302
0x7e U+0303 U+0334
+U+030b:''
+0x7c U+030d
+U+030e:||
+U+030f:``
0x2e U+0322 U+0323
U+0324:<?>
U+0325:<o>
+0x2c U+0326 U+0327
0x2d U+0329
0x5b U+032a
U+032b:<w>
U+0334:<H>
+0x2f U+0337 U+0338
+U+0340:`
+U+0341:'
+U+0342:~
+U+0344:'%
+U+0345:j3
+U+0347:=
+U+0360:~~
U+0374:'
U+0375:,
U+037a:j3
@@ -359,12 +389,12 @@ U+037e:?%
U+0384:'*
U+0385:'%
# Greek letters
-U+0386:A%
+U+0386:A'
U+0387:.*
-U+0388:E%
+U+0388:E'
U+0389:Y%
-U+038a:I%
-U+038c:O%
+U+038a:I'
+U+038c:O'
U+038e:U%
U+038f:W%
U+0390:i3
@@ -391,13 +421,13 @@ U+03a5:U
U+03a6:F
U+03a7:X
U+03a8:Q
-U+03a9:W
+U+03a9:W*
U+03aa:J
U+03ab:V*
-U+03ac:a%
-U+03ad:e%
+U+03ac:a'
+U+03ad:e'
U+03ae:y%
-U+03af:i%
+U+03af:i'
U+03b0:u3
U+03b1:a
U+03b2:b
@@ -426,7 +456,7 @@ U+03c8:q
U+03c9:w
U+03ca:j
U+03cb:v*
-U+03cc:o%
+U+03cc:o'
U+03cd:u%
U+03ce:w%
# Greek symbols
@@ -435,6 +465,7 @@ U+03d1 "theta "
U+03d2 "upsi "
U+03d5 "phi "
U+03d6 "pi "
+U+03d7:k.
U+03da:T3
U+03db:t3
U+03dc:M3
@@ -445,6 +476,7 @@ U+03e0:P3
U+03e1:p3
U+03f0 "kappa "
U+03f1 "rho "
+U+03f3:J
U+03f4:'%
U+03f5:j3
# Cyrillic capital letters
@@ -555,7 +587,8 @@ U+0480:C3
U+0481:c3
U+0490:G3
U+0491:g3
-
+U+04d4:AE
+U+04d5:ae
# These may make Yiddish slightly more readable, until we have
# something better.
@@ -1272,14 +1305,30 @@ 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:?:
+0x61 U+1f00
+U+1f01:ha
+U+1f02:`a
+U+1f03:h`a
+U+1f04:a'
+U+1f05:ha'
+U+1f06:a~
+U+1f07:ha~
+0x41 U+1f08
+U+1f09:hA
+U+1f0a:`A
+U+1f0b:h`A
+U+1f0c:A'
+U+1f0d:hA'
+U+1f0e:A~
+U+1f0f:hA~
+U+1f11:he
+U+1f19:hE
+U+1f31:hi
+U+1f39:hI
+U+1f41:ho
+U+1f49:hO
+U+1f51:hu
+U+1f59:hU
U+1fbf:,,
U+1fc0:?*
U+1fc1:?:
@@ -1289,6 +1338,8 @@ U+1fcf:?,
U+1fdd:;!
U+1fde:;'
U+1fdf:?;
+U+1fe5:rh
+U+1fec:Rh
U+1fed:!:
U+1fef:!*
U+1ffe:;;
@@ -1299,7 +1350,7 @@ U+2003 " "
U+200e:(->)
U+200f:(<-)
U+200a:
-0x2d U+2010 U+2013 U+2015 # hyphen-like
+0x2d U+2010 U+2011 U+2013 U+2015 # hyphen-like
U+2014 "--"
U+2016:||
U+2017:=2
@@ -1309,8 +1360,12 @@ U+2017:=2
U+2020:/-
U+2021:/=
U+2022 " o "
+0x2e U+2024
U+2025:..
U+2026:...
+U+2027:.
+U+2028 "\015"
+U+2029 "\015\012"
# Dont wanna see these:
# POP DIRECTIONAL FORMATTING 202C
@@ -1318,6 +1373,7 @@ U+202c:
# LEFT-TO-RIGHT OVERRIDE 202D
U+202d:
+U+202f ""
U+2030: 0/00
U+2032:'
U+2033:''
@@ -1333,6 +1389,8 @@ U+203c:!!
U+203e:'-
0x2d U+2043 # HYPHEN BULLET ?
U+2044:/
+U+2048:?!
+U+2049:!?
# end of General punctuation.
U+2070:^0
U+2074:^4
@@ -1370,22 +1428,31 @@ U+20a7:Pt
U+20a9:W=
# New euro currency sign glyph:
U+20AC:EUR
+U+2100:a/c
+U+2101:a/s
U+2103:oC
U+2105:c/o
+U+2106:c/u
U+2109:oF
+0x67 U+210a
+0x68 U+210e
+U+210f "\134hbar "
U+2111:Im
+U+2113:l
U+2116:No.
U+2117:PO
U+2118:P
U+211C:Re
U+211e:Rx
U+2120:(SM)
+U+2121:TEL
# TRADE MARK SIGN:
U+2122:(TM)
U+2126:Ohm
0x4b U+212A # Kelvin sign - K
U+212b:Ang.
U+212E:est.
+0x6f U+2134
U+2135 "Aleph "
U+2136 "Bet "
U+2137 "Gimel "
@@ -1402,6 +1469,7 @@ U+215b: 1/8
U+215c: 3/8
U+215d: 5/8
U+215e: 7/8
+U+215f: 1/
U+2160:I
U+2161:II
U+2162:III
@@ -1459,25 +1527,34 @@ U+2200:FA
U+2202:\partial
U+2203:TE
U+2205:{}
-U+2206:decr.
+U+2206:Delta
U+2207:Nabla
U+2208:(-
U+2209:!(-
+U+220a:(-
U+220b:-)
+U+220c:!-)
+U+220d:-)
+U+220e " qed"
U+220f:\prod
U+2211:\sum
U+2212: -
U+2213:-/+
U+2214:.+
+0x2f U+2215
+U+2216 " - "
U+2217:*
U+2218:Ob
U+2219:sb
U+221a " SQRT "
+U+221b " ROOT3 "
+U+221c " ROOT4 "
U+221d:0(
U+221e:infty
U+221f:-L
U+2220:-V
U+2225:PP
+U+2226 " !PP "
U+2227:AND
U+2228:OR
U+2229:(U
@@ -1495,30 +1572,69 @@ U+2243:?-
U+2245:?=
# ALMOST EQUAL TO:
U+2248:~=
+U+2249 " !~= "
U+224c:=?
U+2253:HI
+U+2254::=
+U+2255:=:
U+2260:!=
U+2261:=3
+U+2262 " !=3 "
U+2264:=<
U+2265:>=
+U+2266:.LE.
+U+2267:.GE.
+U+2268:.LT.NOT.EQ.
+U+2269:.GT.NOT.EQ.
U+226a:<<
U+226b:>>
U+226e:!<
U+226f:!>
+U+2276 " <> "
+U+2277 " >< "
U+2282:(C
U+2283:)C
-U+2282:!(C
+U+2284 " !(C "
+U+2285 " !)C "
U+2286:(_
U+2287:)_
-U+2295:(+)
-U+2297:(x)
-U+2299:0.
-U+229a:02
+U+2295 "(+)" # CIRCLED PLUS
+U+2296 "(-)" # CIRCLED MINUS
+U+2297 "(x)" # CIRCLED TIMES
+U+2298 "(/)" # CIRCLED DIVISION SLASH
+U+2299 "(.)" # CIRCLED DOT OPERATOR
+U+229A "(o)" # CIRCLED RING OPERATOR
+U+229B "(*)" # CIRCLED ASTERISK OPERATOR
+U+229C "(=)" # CIRCLED EQUALS
+U+229D "(-)" # CIRCLED DASH
+U+229E "[+]" # SQUARED PLUS
+U+229F "[-]" # SQUARED MINUS
+U+22A0 "[x]" # SQUARED TIMES
+U+22A1 "[.]" # SQUARED DOT OPERATOR
U+22a5:-T
-U+22c5:.P
+U+22A7 " MODELS " # MODELS
+U+22A8 " TRUE " # TRUE
+U+22A9 " FORCES " # FORCES
+U+22AC " !PROVES " # DOES NOT PROVE
+U+22AD " NOT TRUE " # NOT TRUE
+U+22AE " !FORCES " # DOES NOT FORCE
+U+22B2 " NORMAL SUBGROUP OF "
+U+22B3 " CONTAINS AS NORMAL SUBGROUP "
+U+22B4 " NORMAL SUBGROUP OF OR EQUAL TO "
+U+22B5 " CONTAINS AS NORMAL SUBGROUP OR EQUAL TO "
+U+22B8 " MULTIMAP " # MULTIMAP
+U+22BA " INTERCALATE " # INTERCALATE
+U+22BB " XOR " # XOR
+U+22BC " NAND " # NAND
+U+22C5 " DOT " # DOT OPERATOR
+U+22d6:<.
+U+22d7:>.
+U+22d8:<<<
+U+22d9:>>>
U+22ee::3
U+22ef:.3
U+2302:Eh
+U+2307:~~
U+2308:<7
U+2309:>7
U+230a:7<
@@ -1529,7 +1645,10 @@ U+2315:TR
U+2318:88
U+2320:Iu
U+2321:Il
+U+2322::(
U+2323::)
+U+2324:|^|
+U+2327:[X]
U+2329:</
U+232a:/>
U+2423:Vs
@@ -1716,16 +1835,16 @@ U+25a9:RX
U+25aa:sB
U+25ac:SR
U+25ad:Or
-U+25b2:UT
+U+25b2:^
U+25b3:uT
-U+25b6:PR
+U+25b6:|>
U+25b7:Tr
-U+25ba:PR
-U+25bc:Dt
+U+25ba:|>
+U+25bc:v
U+25bd:dT
-U+25c0:PL
+U+25c0:<|
U+25c1:Tl
-U+25c4:PL
+U+25c4:<|
U+25c6:Db
U+25c7:Dw
U+25ca:LZ
@@ -1745,6 +1864,9 @@ U+260e:TEL
U+260f:tel
U+261c:<--
U+261e:-->
+U+2621 "CAUTION "
+U+2627:XP
+U+2639::-(
U+263a::-)
U+263b:(-:
U+263c:SU
@@ -1790,8 +1912,11 @@ U+3014:('
U+3015:)'
U+3016:(I
U+3017:)I
+U+301a:[[
+U+301b:]]
U+301c:-?
U+3020:=T:)
+0x20 U+303f
U+3041:A5
U+3042:a5
U+3043:I5
@@ -2163,6 +2288,14 @@ U+fefa:lh.
U+fefb:la-
U+fefc:la.
+# the reverse byte-order-mark: zero-width non-break space
+U+feff ""
+
+0x21-0x7e U+ff01-U+ff5e
+0x2e U+ff61
+0x22 U+ff62 U+ff63
+0x2c U+ff64
+
# Symbols for C0 and C1 control characters, in case they get through...
U+0000:NUL
U+0001:SH
@@ -2207,6 +2340,7 @@ U+007f:DT
#U+0083:NH
#U+0084:IN
#U+0085:NL
+U+0085 "\012"
#U+0086:SA
#U+0087:ES
#U+0088:HS
@@ -2236,5 +2370,5 @@ U+007f:DT
# Let's try to show a question mark for character that cannot
# be shown. U+fffd is used for invalid characters.
-# It works, but let's stick with UHHH representatiion. - FM
-#U+fffd:?
+# It works, but let's stick with UHHH representation. - FM
+#U+fffd "?"
diff --git a/gnu/usr.bin/lynx/src/chrtrans/iso01_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/iso01_uni.tbl
index 2d138ec29a1..5a47e2f8bf0 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/iso01_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/iso01_uni.tbl
@@ -52,6 +52,9 @@ C819
#
# Any comments or problems, contact <John_Jenkins@taligent.com>
#
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
+#
0x20-0x7e idem
0xa0-0xff idem # iso 8859-1 special: trivial mapping to Unicode
#
@@ -150,7 +153,7 @@ C819
#0x7C U+007C # VERTICAL LINE
#0x7D U+007D # RIGHT CURLY BRACKET
#0x7E U+007E # TILDE
-#0xA0 U+00A0 # NO-BREAK SPACE
+0xA0 U+00A0 U+2007 # NO-BREAK SPACE
#0xA1 U+00A1 # INVERTED EXCLAMATION MARK
#0xA2 U+00A2 # CENT SIGN
#0xA3 U+00A3 # POUND SIGN
@@ -158,23 +161,23 @@ C819
#0xA5 U+00A5 # YEN SIGN
#0xA6 U+00A6 # BROKEN BAR
#0xA7 U+00A7 # SECTION SIGN
-#0xA8 U+00A8 # DIAERESIS
+0xA8 U+00A8 U+0308 # 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
+0xAF U+00AF U+0304 # MACRON
+0xB0 U+00B0 U+030a # 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
+0xB5 U+00B5 U+03bc # MICRO SIGN
#0xB6 U+00B6 # PILCROW SIGN
-#0xB7 U+00B7 # MIDDLE DOT
-#0xB8 U+00B8 # CEDILLA
+0xB7 U+00B7 U+0307 U+0387 U+2027 # MIDDLE DOT
+0xB8 U+00B8 U+0327 # CEDILLA
#0xB9 U+00B9 # SUPERSCRIPT ONE
#0xBA U+00BA # MASCULINE ORDINAL INDICATOR
#0xBB U+00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
@@ -250,4 +253,11 @@ C819
0xd0 U+0110 # Dstrok and ETH are nearly the same...
-U+2297 "(\327)"
+U+2218 " \260 " # RING OPERATOR
+U+221b " ROOT\263 "
+U+2297 "(\327)" # CIRCLED TIMES
+U+2299 "(\267)" # CIRCLED DOT OPERATOR
+U+229A "(\260)" # CIRCLED RING OPERATOR
+U+22A0 "[\327]" # SQUARED TIMES
+U+22A1 "[\267]" # SQUARED DOT OPERATOR
+U+22C5 " \267 " # DOT OPERATOR
diff --git a/gnu/usr.bin/lynx/src/chrtrans/iso02_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/iso02_uni.tbl
index 383b46740aa..b245be55676 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/iso02_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/iso02_uni.tbl
@@ -46,6 +46,9 @@ C912
#
# Any comments or problems, contact <John_Jenkins@taligent.com>
#
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
+#
0x20-0x7e idem
#
#0x20 U+0020 # SPACE
@@ -145,35 +148,35 @@ C912
#0x7E U+007E # TILDE
0xA0 U+00A0 # NO-BREAK SPACE
0xA1 U+0104 # LATIN CAPITAL LETTER A WITH OGONEK
-0xA2 U+02D8 # BREVE
+0xA2 U+02D8 U+0306 # BREVE
0xA3 U+0141 # LATIN CAPITAL LETTER L WITH STROKE
0xA4 U+00A4 # CURRENCY SIGN
0xA5 U+013D # LATIN CAPITAL LETTER L WITH CARON
0xA6 U+015A # LATIN CAPITAL LETTER S WITH ACUTE
0xA7 U+00A7 # SECTION SIGN
-0xA8 U+00A8 # DIAERESIS
-0xA9 U+0160 # LATIN CAPITAL LETTER S WITH CARON
+0xA8 U+00A8 U+0308 # DIAERESIS
+0xA9 U+0160 U+0428 # LATIN CAPITAL LETTER S WITH CARON
0xAA U+015E # LATIN CAPITAL LETTER S WITH CEDILLA
0xAB U+0164 # LATIN CAPITAL LETTER T WITH CARON
0xAC U+0179 # LATIN CAPITAL LETTER Z WITH ACUTE
0xAD U+00AD # SOFT HYPHEN
-0xAE U+017D # LATIN CAPITAL LETTER Z WITH CARON
+0xAE U+017D U+0416 # LATIN CAPITAL LETTER Z WITH CARON
0xAF U+017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
-0xB0 U+00B0 # DEGREE SIGN
+0xB0 U+00B0 U+030a # DEGREE SIGN
0xB1 U+0105 # LATIN SMALL LETTER A WITH OGONEK
-0xB2 U+02DB # OGONEK
+0xB2 U+02DB U+0328 # OGONEK
0xB3 U+0142 # LATIN SMALL LETTER L WITH STROKE
0xB4 U+00B4 # ACUTE ACCENT
0xB5 U+013E # LATIN SMALL LETTER L WITH CARON
0xB6 U+015B # LATIN SMALL LETTER S WITH ACUTE
-0xB7 U+02C7 # CARON
-0xB8 U+00B8 # CEDILLA
-0xB9 U+0161 # LATIN SMALL LETTER S WITH CARON
+0xB7 U+02C7 U+030c # CARON
+0xB8 U+00B8 U+0327 # CEDILLA
+0xB9 U+0161 U+0448 # LATIN SMALL LETTER S WITH CARON
0xBA U+015F # LATIN SMALL LETTER S WITH CEDILLA
0xBB U+0165 # LATIN SMALL LETTER T WITH CARON
0xBC U+017A # LATIN SMALL LETTER Z WITH ACUTE
-0xBD U+02DD # DOUBLE ACUTE ACCENT
-0xBE U+017E # LATIN SMALL LETTER Z WITH CARON
+0xBD U+02DD U+030b # DOUBLE ACUTE ACCENT
+0xBE U+017E U+0436 # LATIN SMALL LETTER Z 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
@@ -183,7 +186,7 @@ C912
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
+0xC8 U+010C U+0427 # 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
@@ -198,7 +201,7 @@ C912
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
+0xD7 U+00D7 U+00b7 # 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
@@ -215,7 +218,7 @@ C912
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
+0xE8 U+010D U+02a7 U+0447 # 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
@@ -238,8 +241,15 @@ C912
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
+0xFF U+02D9 U+0307 U+0387 # DOT ABOVE
0xd0 U+00d0 # Dstrok and ETH are nearly the same...
+U+2218 " \260 " # RING OPERATOR
+U+2297 "(\327)" # CIRCLED TIMES
+U+2299 "(\377)" # CIRCLED DOT OPERATOR
+U+229A "(\260)" # CIRCLED RING OPERATOR
+U+22A0 "[\327]" # SQUARED TIMES
+U+22A1 "[\377]" # SQUARED DOT OPERATOR
+U+22C5 " \377 " # DOT OPERATOR
diff --git a/gnu/usr.bin/lynx/src/chrtrans/iso05_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/iso05_uni.tbl
index 1436a687887..7eeba113d8c 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/iso05_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/iso05_uni.tbl
@@ -46,6 +46,9 @@ C915
#
# Any comments or problems, contact <John_Jenkins@taligent.com>
#
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
+#
0x20-0x7e idem
#
#0x20 U+0020 # SPACE
@@ -149,8 +152,8 @@ C915
0xA3 U+0403 # CYRILLIC CAPITAL LETTER GJE
0xA4 U+0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
0xA5 U+0405 # CYRILLIC CAPITAL LETTER DZE
-0xA6 U+0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-0xA7 U+0407 # CYRILLIC CAPITAL LETTER YI
+0xA6 U+0406 U+0130 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+0xA7 U+0407 U+03AA # CYRILLIC CAPITAL LETTER YI
0xA8 U+0408 # CYRILLIC CAPITAL LETTER JE
0xA9 U+0409 # CYRILLIC CAPITAL LETTER LJE
0xAA U+040A # CYRILLIC CAPITAL LETTER NJE
@@ -162,28 +165,28 @@ C915
0xB0 U+0410 # CYRILLIC CAPITAL LETTER A
0xB1 U+0411 # CYRILLIC CAPITAL LETTER BE
0xB2 U+0412 # CYRILLIC CAPITAL LETTER VE
-0xB3 U+0413 # CYRILLIC CAPITAL LETTER GHE
+0xB3 U+0413 U+0393 # CYRILLIC CAPITAL LETTER GHE
0xB4 U+0414 # CYRILLIC CAPITAL LETTER DE
0xB5 U+0415 # CYRILLIC CAPITAL LETTER IE
-0xB6 U+0416 # CYRILLIC CAPITAL LETTER ZHE
+0xB6 U+0416 U+017d # CYRILLIC CAPITAL LETTER ZHE
0xB7 U+0417 # CYRILLIC CAPITAL LETTER ZE
0xB8 U+0418 # CYRILLIC CAPITAL LETTER I
0xB9 U+0419 # CYRILLIC CAPITAL LETTER SHORT I
0xBA U+041A # CYRILLIC CAPITAL LETTER KA
-0xBB U+041B # CYRILLIC CAPITAL LETTER EL
+0xBB U+041B U+039b # CYRILLIC CAPITAL LETTER EL
0xBC U+041C # CYRILLIC CAPITAL LETTER EM
0xBD U+041D # CYRILLIC CAPITAL LETTER EN
0xBE U+041E # CYRILLIC CAPITAL LETTER O
-0xBF U+041F # CYRILLIC CAPITAL LETTER PE
+0xBF U+041F U+03a0 # CYRILLIC CAPITAL LETTER PE
0xC0 U+0420 # CYRILLIC CAPITAL LETTER ER
0xC1 U+0421 # CYRILLIC CAPITAL LETTER ES
0xC2 U+0422 # CYRILLIC CAPITAL LETTER TE
0xC3 U+0423 # CYRILLIC CAPITAL LETTER U
-0xC4 U+0424 # CYRILLIC CAPITAL LETTER EF
+0xC4 U+0424 U+03a6 # CYRILLIC CAPITAL LETTER EF
0xC5 U+0425 # CYRILLIC CAPITAL LETTER HA
0xC6 U+0426 # CYRILLIC CAPITAL LETTER TSE
-0xC7 U+0427 # CYRILLIC CAPITAL LETTER CHE
-0xC8 U+0428 # CYRILLIC CAPITAL LETTER SHA
+0xC7 U+0427 U+010c # CYRILLIC CAPITAL LETTER CHE
+0xC8 U+0428 U+0160 # CYRILLIC CAPITAL LETTER SHA
0xC9 U+0429 # CYRILLIC CAPITAL LETTER SHCHA
0xCA U+042A # CYRILLIC CAPITAL LETTER HARD SIGN
0xCB U+042B # CYRILLIC CAPITAL LETTER YERU
@@ -197,28 +200,28 @@ C915
0xD3 U+0433 # CYRILLIC SMALL LETTER GHE
0xD4 U+0434 # CYRILLIC SMALL LETTER DE
0xD5 U+0435 # CYRILLIC SMALL LETTER IE
-0xD6 U+0436 # CYRILLIC SMALL LETTER ZHE
+0xD6 U+0436 U+017e # CYRILLIC SMALL LETTER ZHE
0xD7 U+0437 # CYRILLIC SMALL LETTER ZE
0xD8 U+0438 # CYRILLIC SMALL LETTER I
0xD9 U+0439 # CYRILLIC SMALL LETTER SHORT I
0xDA U+043A # CYRILLIC SMALL LETTER KA
-0xDB U+043B # CYRILLIC SMALL LETTER EL
+0xDB U+043B U+03bb # CYRILLIC SMALL LETTER EL
0xDC U+043C # CYRILLIC SMALL LETTER EM
0xDD U+043D # CYRILLIC SMALL LETTER EN
0xDE U+043E # CYRILLIC SMALL LETTER O
-0xDF U+043F # CYRILLIC SMALL LETTER PE
+0xDF U+043F U+03c0 # CYRILLIC SMALL LETTER PE
0xE0 U+0440 # CYRILLIC SMALL LETTER ER
0xE1 U+0441 # CYRILLIC SMALL LETTER ES
0xE2 U+0442 # CYRILLIC SMALL LETTER TE
0xE3 U+0443 # CYRILLIC SMALL LETTER U
-0xE4 U+0444 # CYRILLIC SMALL LETTER EF
+0xE4 U+0444 U+03c6 # CYRILLIC SMALL LETTER EF
0xE5 U+0445 # CYRILLIC SMALL LETTER HA
0xE6 U+0446 # CYRILLIC SMALL LETTER TSE
-0xE7 U+0447 # CYRILLIC SMALL LETTER CHE
-0xE8 U+0448 # CYRILLIC SMALL LETTER SHA
+0xE7 U+0447 U+010d # CYRILLIC SMALL LETTER CHE
+0xE8 U+0448 U+0161 # CYRILLIC SMALL LETTER SHA
0xE9 U+0449 # CYRILLIC SMALL LETTER SHCHA
0xEA U+044A # CYRILLIC SMALL LETTER HARD SIGN
-0xEB U+044B # CYRILLIC SMALL LETTER YERU
+0xEB U+044B U+0131 # CYRILLIC SMALL LETTER YERU
0xEC U+044C # CYRILLIC SMALL LETTER SOFT SIGN
0xED U+044D # CYRILLIC SMALL LETTER E
0xEE U+044E # CYRILLIC SMALL LETTER YU
@@ -230,7 +233,7 @@ C915
0xF4 U+0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
0xF5 U+0455 # CYRILLIC SMALL LETTER DZE
0xF6 U+0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-0xF7 U+0457 # CYRILLIC SMALL LETTER YI
+0xF7 U+0457 U+03CA # CYRILLIC SMALL LETTER YI
0xF8 U+0458 # CYRILLIC SMALL LETTER JE
0xF9 U+0459 # CYRILLIC SMALL LETTER LJE
0xFA U+045A # CYRILLIC SMALL LETTER NJE
@@ -240,3 +243,7 @@ C915
0xFE U+045E # CYRILLIC SMALL LETTER SHORT U
0xFF U+045F # CYRILLIC SMALL LETTER DZHE
+U+0400 "`\265"
+U+040d "`\270"
+U+0450 "`\325"
+U+045d "`\330"
diff --git a/gnu/usr.bin/lynx/src/chrtrans/iso07_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/iso07_uni.tbl
index 7e9063ecc84..3eb3aeb77d3 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/iso07_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/iso07_uni.tbl
@@ -46,6 +46,9 @@ C813
#
# Any comments or problems, contact <John_Jenkins@taligent.com>
#
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
+#
0x20-0x7e idem
#
#0x20 U+0020 # SPACE
@@ -144,8 +147,17 @@ C813
#0x7D U+007D # RIGHT CURLY BRACKET
#0x7E U+007E # TILDE
0xA0 U+00A0 # NO-BREAK SPACE
-0xA1 U+02BD # MODIFIER LETTER REVERSED COMMA
-0xA2 U+02BC # MODIFIER LETTER APOSTROPHE
+#
+# The following two changed in ISO 8859:1999
+#
+# Remap 0xA1 to U+2018 (instead of U+02BD)
+# Remap 0xA2 to U+2019 (instead of U+02BC)
+#
+# Keep the old ones as primary for now. Also added old U+037[12]
+# found in existing linux kbd files and in RFC 1345 for compatibility.
+# - kw 1999-10-29
+0xA1 U+02BD U+2018 U+0371 # MODIFIER LETTER REVERSED COMMA
+0xA2 U+02BC U+2019 U+0372 # MODIFIER LETTER APOSTROPHE
0xA3 U+00A3 # POUND SIGN
0xA6 U+00A6 # BROKEN BAR
0xA7 U+00A7 # SECTION SIGN
@@ -161,20 +173,20 @@ C813
0xB3 U+00B3 # SUPERSCRIPT THREE
0xB4 U+0384 # GREEK TONOS
0xB5 U+0385 # GREEK DIALYTIKA TONOS
-0xB6 U+0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
-0xB7 U+00B7 # MIDDLE DOT
-0xB8 U+0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
-0xB9 U+0389 # GREEK CAPITAL LETTER ETA WITH TONOS
-0xBA U+038A # GREEK CAPITAL LETTER IOTA WITH TONOS
+0xB6 U+0386 U+1fbb # GREEK CAPITAL LETTER ALPHA WITH TONOS
+0xB7 U+00B7 U+0307 U+0387 U+2027 # MIDDLE DOT
+0xB8 U+0388 U+1fc9 # GREEK CAPITAL LETTER EPSILON WITH TONOS
+0xB9 U+0389 U+1fcb # GREEK CAPITAL LETTER ETA WITH TONOS
+0xBA U+038A U+1fdb # GREEK CAPITAL LETTER IOTA WITH TONOS
0xBB U+00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC U+038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
+0xBC U+038C U+1ff9 # GREEK CAPITAL LETTER OMICRON WITH TONOS
0xBD U+00BD # VULGAR FRACTION ONE HALF
-0xBE U+038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
-0xBF U+038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
+0xBE U+038E U+1feb # GREEK CAPITAL LETTER UPSILON WITH TONOS
+0xBF U+038F U+1ffb # GREEK CAPITAL LETTER OMEGA WITH TONOS
0xC0 U+0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
0xC1 U+0391 # GREEK CAPITAL LETTER ALPHA
0xC2 U+0392 # GREEK CAPITAL LETTER BETA
-0xC3 U+0393 # GREEK CAPITAL LETTER GAMMA
+0xC3 U+0393 U+0413 # GREEK CAPITAL LETTER GAMMA
0xC4 U+0394 # GREEK CAPITAL LETTER DELTA
0xC5 U+0395 # GREEK CAPITAL LETTER EPSILON
0xC6 U+0396 # GREEK CAPITAL LETTER ZETA
@@ -182,39 +194,39 @@ C813
0xC8 U+0398 # GREEK CAPITAL LETTER THETA
0xC9 U+0399 # GREEK CAPITAL LETTER IOTA
0xCA U+039A # GREEK CAPITAL LETTER KAPPA
-0xCB U+039B # GREEK CAPITAL LETTER LAMDA
+0xCB U+039B U+041b # GREEK CAPITAL LETTER LAMDA
0xCC U+039C # GREEK CAPITAL LETTER MU
0xCD U+039D # GREEK CAPITAL LETTER NU
0xCE U+039E # GREEK CAPITAL LETTER XI
0xCF U+039F # GREEK CAPITAL LETTER OMICRON
-0xD0 U+03A0 # GREEK CAPITAL LETTER PI
+0xD0 U+03A0 U+041f # GREEK CAPITAL LETTER PI
0xD1 U+03A1 # GREEK CAPITAL LETTER RHO
0xD3 U+03A3 # GREEK CAPITAL LETTER SIGMA
0xD4 U+03A4 # GREEK CAPITAL LETTER TAU
0xD5 U+03A5 # GREEK CAPITAL LETTER UPSILON
-0xD6 U+03A6 # GREEK CAPITAL LETTER PHI
-0xD7 U+03A7 # GREEK CAPITAL LETTER CHI
+0xD6 U+03A6 U+0424 # GREEK CAPITAL LETTER PHI
+0xD7 U+03A7 U+0425 # GREEK CAPITAL LETTER CHI
0xD8 U+03A8 # GREEK CAPITAL LETTER PSI
0xD9 U+03A9 # GREEK CAPITAL LETTER OMEGA
0xDA U+03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
0xDB U+03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-0xDC U+03AC # GREEK SMALL LETTER ALPHA WITH TONOS
-0xDD U+03AD # GREEK SMALL LETTER EPSILON WITH TONOS
-0xDE U+03AE # GREEK SMALL LETTER ETA WITH TONOS
-0xDF U+03AF # GREEK SMALL LETTER IOTA WITH TONOS
+0xDC U+03AC U+1f71 # GREEK SMALL LETTER ALPHA WITH TONOS
+0xDD U+03AD U+1f73 # GREEK SMALL LETTER EPSILON WITH TONOS
+0xDE U+03AE U+1f75 # GREEK SMALL LETTER ETA WITH TONOS
+0xDF U+03AF U+1f77 # GREEK SMALL LETTER IOTA WITH TONOS
0xE0 U+03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
0xE1 U+03B1 # GREEK SMALL LETTER ALPHA
0xE2 U+03B2 # GREEK SMALL LETTER BETA
-0xE3 U+03B3 # GREEK SMALL LETTER GAMMA
-0xE4 U+03B4 # GREEK SMALL LETTER DELTA
+0xE3 U+03B3 U+0263 # GREEK SMALL LETTER GAMMA
+0xE4 U+03B4 U+00f0 # GREEK SMALL LETTER DELTA
0xE5 U+03B5 # GREEK SMALL LETTER EPSILON
0xE6 U+03B6 # GREEK SMALL LETTER ZETA
0xE7 U+03B7 # GREEK SMALL LETTER ETA
0xE8 U+03B8 # GREEK SMALL LETTER THETA
-0xE9 U+03B9 # GREEK SMALL LETTER IOTA
+0xE9 U+03B9 U+0131 # GREEK SMALL LETTER IOTA
0xEA U+03BA # GREEK SMALL LETTER KAPPA
0xEB U+03BB # GREEK SMALL LETTER LAMDA
-0xEC U+03BC # GREEK SMALL LETTER MU
+0xEC U+03BC U+00b5 # GREEK SMALL LETTER MU
0xED U+03BD # GREEK SMALL LETTER NU
0xEE U+03BE # GREEK SMALL LETTER XI
0xEF U+03BF # GREEK SMALL LETTER OMICRON
@@ -223,14 +235,20 @@ C813
0xF2 U+03C2 # GREEK SMALL LETTER FINAL SIGMA
0xF3 U+03C3 # GREEK SMALL LETTER SIGMA
0xF4 U+03C4 # GREEK SMALL LETTER TAU
-0xF5 U+03C5 # GREEK SMALL LETTER UPSILON
+0xF5 U+03C5 U+028a # GREEK SMALL LETTER UPSILON
0xF6 U+03C6 # GREEK SMALL LETTER PHI
0xF7 U+03C7 # GREEK SMALL LETTER CHI
0xF8 U+03C8 # GREEK SMALL LETTER PSI
0xF9 U+03C9 # GREEK SMALL LETTER OMEGA
0xFA U+03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
-0xFB U+03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-0xFC U+03CC # GREEK SMALL LETTER OMICRON WITH TONOS
-0xFD U+03CD # GREEK SMALL LETTER UPSILON WITH TONOS
-0xFE U+03CE # GREEK SMALL LETTER OMEGA WITH TONOS
+0xFB U+03CB U+00fc # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+0xFC U+03CC U+1f79 # GREEK SMALL LETTER OMICRON WITH TONOS
+0xFD U+03CD U+1f7b # GREEK SMALL LETTER UPSILON WITH TONOS
+0xFE U+03CE U+1f7d # GREEK SMALL LETTER OMEGA WITH TONOS
+U+2218 " \260 " # RING OPERATOR
+U+2209 " !\345 "
+U+221b " ROOT\263 "
+U+229A "(\260)" # CIRCLED RING OPERATOR
+U+02a4 "d\346"
+U+20af "\304\361\367"
diff --git a/gnu/usr.bin/lynx/src/chrtrans/iso09_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/iso09_uni.tbl
index 0b93209cf7e..5dc9660cc48 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/iso09_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/iso09_uni.tbl
@@ -46,7 +46,11 @@ C920
#
# Any comments or problems, contact <John_Jenkins@taligent.com>
#
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
+#
0x20-0x7e idem
+0x49 U+042b
#
#0x20 U+0020 # SPACE
#0x21 U+0021 # EXCLAMATION MARK
@@ -151,23 +155,23 @@ C920
0xA5 U+00A5 # YEN SIGN
0xA6 U+00A6 # BROKEN BAR
0xA7 U+00A7 # SECTION SIGN
-0xA8 U+00A8 # DIAERESIS
+0xA8 U+00A8 U+0308 # 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
+0xAF U+00AF U+0304 # MACRON
+0xB0 U+00B0 U+030a # 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
+0xB5 U+00B5 U+03bc # MICRO SIGN
0xB6 U+00B6 # PILCROW SIGN
-0xB7 U+00B7 # MIDDLE DOT
-0xB8 U+00B8 # CEDILLA
+0xB7 U+00B7 U+0307 U+0387 # MIDDLE DOT
+0xB8 U+00B8 U+0327 # CEDILLA
0xB9 U+00B9 # SUPERSCRIPT ONE
0xBA U+00BA # MASCULINE ORDINAL INDICATOR
0xBB U+00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
@@ -204,8 +208,8 @@ C920
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+0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
-0xDE U+015E # LATIN CAPITAL LETTER S WITH CEDILLA
+0xDD U+0130 U+0418 U+0406 # LATIN CAPITAL LETTER I WITH DOT ABOVE
+0xDE U+015E U+0428 # LATIN CAPITAL LETTER S WITH CEDILLA
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
@@ -236,7 +240,15 @@ C920
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+0131 # LATIN SMALL LETTER DOTLESS I
-0xFE U+015F # LATIN SMALL LETTER S WITH CEDILLA
+0xFD U+0131 U+03b9 U+044b # LATIN SMALL LETTER DOTLESS I
+0xFE U+015F U+0448 # LATIN SMALL LETTER S WITH CEDILLA
0xFF U+00FF # LATIN SMALL LETTER Y WITH DIAERESIS
+U+2218 " \260 " # RING OPERATOR
+U+221b " ROOT\263 "
+U+2297 "(\327)" # CIRCLED TIMES
+U+2299 "(\267)" # CIRCLED DOT OPERATOR
+U+229A "(\260)" # CIRCLED RING OPERATOR
+U+22A0 "[\327]" # SQUARED TIMES
+U+22A1 "[\267]" # SQUARED DOT OPERATOR
+U+22C5 " \267 " # DOT OPERATOR
diff --git a/gnu/usr.bin/lynx/src/chrtrans/jcuken_kb.h b/gnu/usr.bin/lynx/src/chrtrans/jcuken_kb.h
index 8fbe458b430..8a45988ef2c 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/jcuken_kb.h
+++ b/gnu/usr.bin/lynx/src/chrtrans/jcuken_kb.h
@@ -1,4 +1,4 @@
-static unsigned short kb_layout_jcuken[128] = {
+static LYKbLayout_t kb_layout_jcuken[128] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 00..07 */
0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 08..0F */
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 10..17 */
diff --git a/gnu/usr.bin/lynx/src/chrtrans/koi8r_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/koi8r_uni.tbl
index 1378eed9760..8bf4001acab 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/koi8r_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/koi8r_uni.tbl
@@ -11,6 +11,9 @@ C878
# Based on a table received from "Glenn E. Thobe" <thobe@lafn.org>
# (verified against RFC1489).
#
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
+#
#hex unicode # description
#--- U+---- # ---------------
0x80 U+2500 # FORMS LIGHT HORIZONTAL
@@ -43,7 +46,7 @@ C878
0x9B U+2321 # BOTTOM HALF INTEGRAL
0x9C U+00B0 # DEGREE SIGN
0x9D U+00B2 # SUPERSCRIPT DIGIT TWO
-0x9E U+00B7 # MIDDLE DOT
+0x9E U+00B7 U+2027 # MIDDLE DOT
0x9F U+00F7 # DIVISION SIGN
0xA0 U+2550 # FORMS DOUBLE HORIZONTAL
0xA1 U+2551 # FORMS DOUBLE VERTICAL
@@ -83,31 +86,31 @@ C878
0xC3 U+0446 # SMA TSE
0xC4 U+0434 # SMA DE
0xC5 U+0435 # SMA IE
-0xC6 U+0444 # SMA EF
+0xC6 U+0444 U+03c6 # 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
+0xCC U+043B U+03bb # SMA EL
0xCD U+043C # SMA EM
0xCE U+043D # SMA EN
0xCF U+043E # SMA O
-0xD0 U+043F # SMA PE
+0xD0 U+043F U+03c0 # 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
+0xD6 U+0436 U+017e # SMA ZHE
0xD7 U+0432 # SMA VE
0xD8 U+044C # SMA SOFT SIGN
-0xD9 U+044B # SMA YERI
+0xD9 U+044B U+0131 # SMA YERI
0xDA U+0437 # SMA ZE
-0xDB U+0448 # SMA SHA
+0xDB U+0448 U+0161 # SMA SHA
0xDC U+044D # SMA REVERSED E
0xDD U+0449 # SMA SHCHA
-0xDE U+0447 # SMA CHE
+0xDE U+0447 U+010d # SMA CHE
0xDF U+044A # SMA HARD SIGN
0xE0 U+042E # CAP IU
0xE1 U+0410 # CAP A
@@ -115,30 +118,30 @@ C878
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
+0xE6 U+0424 U+03a6 # CAP EF
+0xE7 U+0413 U+0393 # 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
+0xEC U+041B U+039b # CAP EL
0xED U+041C # CAP EM
0xEE U+041D # CAP EN
0xEF U+041E # CAP O
-0xF0 U+041F # CAP PE
+0xF0 U+041F U+03a0 # 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
+0xF6 U+0416 U+017d # 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
+0xFB U+0428 U+0160 # CAP SHA
0xFC U+042D # CAP REVERSED E
0xFD U+0429 # CAP SHCHA
-0xFE U+0427 # CAP CHE
+0xFE U+0427 U+010c # CAP CHE
0xFF U+042A # CAP HARD SIGN
diff --git a/gnu/usr.bin/lynx/src/chrtrans/mac_uni.tbl b/gnu/usr.bin/lynx/src/chrtrans/mac_uni.tbl
index ea76d078dee..c2457e7b8d6 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/mac_uni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/mac_uni.tbl
@@ -80,6 +80,8 @@ OMacintosh (8 bit)
# interpreted (if at all) as the control codes DC1-DC4.
#
##################
+# Lines with more than one Unicode (U+XXXX) value contain additional
+# replacement mappings added for lynx. - kw
#0x20 U+0020 # SPACE
#0x21 U+0021 # EXCLAMATION MARK
@@ -276,7 +278,7 @@ OMacintosh (8 bit)
0xDE U+FB01 # LATIN SMALL LIGATURE FI
0xDF U+FB02 # LATIN SMALL LIGATURE FL
0xE0 U+2021 # DOUBLE DAGGER
-0xE1 U+00B7 # MIDDLE DOT
+0xE1 U+00B7 U+0307 U+0387 U+2027 # MIDDLE DOT
0xE2 U+201A # SINGLE LOW-9 QUOTATION MARK
0xE3 U+201E # DOUBLE LOW-9 QUOTATION MARK
0xE4 U+2030 # PER MILLE SIGN
diff --git a/gnu/usr.bin/lynx/src/chrtrans/makefile.dos b/gnu/usr.bin/lynx/src/chrtrans/makefile.dos
index 3a830a4f3a9..03bb135deac 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/makefile.dos
+++ b/gnu/usr.bin/lynx/src/chrtrans/makefile.dos
@@ -12,11 +12,11 @@
CFLAGS = $(MCFLAGS)
CC = gcc
-MCFLAGS = -O3 -DDOSPATH -DNO_TTYTYP \
+MCFLAGS = -O2 -DDOSPATH -DNO_TTYTYP \
-I. \
-I../../WWW/Library/Implementation \
--I../../djgpp/tcplib/include \
--I../../djgpp/tcplib/include/tcp \
+-I/djgpp/watt32/inc \
+-I/djgpp/watt32/inc/sys \
-I../..
.SUFFIXES: .tbl
@@ -77,7 +77,7 @@ makeuctb.exe: makeuctb.c UCkd.h
strip makeuctb.exe
.tbl.h:
- ./makeuctb $*.tbl > $@
+ ./makeuctb $*.tbl
cp1250_uni.h: cp1250_uni.tbl makeuctb.exe
cp1251_uni.h: cp1251_uni.tbl makeuctb.exe
diff --git a/gnu/usr.bin/lynx/src/chrtrans/makefile.in b/gnu/usr.bin/lynx/src/chrtrans/makefile.in
index 2e2f2681e20..d399a0e573c 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/makefile.in
+++ b/gnu/usr.bin/lynx/src/chrtrans/makefile.in
@@ -29,6 +29,7 @@ SITE_DEFS = # FIXME: set in parent makefile
CC = @CC@
CPP = @CPP@
CFLAGS = @CFLAGS@
+_O = .o
CPP_OPTS = @DEFS@ @CPPFLAGS@ \
-I$(top_builddir) \
@@ -93,14 +94,14 @@ default: $(FONTMAP_INC)
tables: $(TABLES)
-makeuctb$x: makeuctb.o
- $(CC) $(CC_OPTS) -o $@ makeuctb.o $(INTLLIB) $(LIBS)
+makeuctb$x: makeuctb$(_O)
+ $(CC) $(CC_OPTS) $(LDFLAGS) -o $@ makeuctb$(_O) $(INTLLIB) $(LIBS)
-makeuctb.o: $(srcdir)/UCkd.h $(srcdir)/makeuctb.c
+makeuctb$(_O): $(srcdir)/UCkd.h $(srcdir)/makeuctb.c
-.SUFFIXES : .tbl .i
+.SUFFIXES : $(_O) .tbl .i
-.c.o:
+.c$(_O):
@RULE_CC@
@ECHO_CC@$(CC) $(CC_OPTS) -c $(srcdir)/$*.c
@@ -109,7 +110,7 @@ makeuctb.o: $(srcdir)/UCkd.h $(srcdir)/makeuctb.c
@ECHO_CC@$(CPP) -C $(CPP_OPTS) $(srcdir)/$*.c >$@
.tbl.h:
- ./makeuctb$x $(srcdir)/$*.tbl > $@
+ ./makeuctb$x $(srcdir)/$*.tbl $*.h
# table files listed here once again to get the make dependencies
# right, in case makeuctb was recompiled.
@@ -155,7 +156,7 @@ utf8_uni.h: $(srcdir)/utf8_uni.tbl makeuctb$x
viscii_uni.h: $(srcdir)/viscii_uni.tbl makeuctb$x
clean:
- rm -f makeuctb$x *.o *uni.h *uni2.h
+ rm -f makeuctb$x *$(_O) *uni.h *uni2.h
distclean: clean
-rm -rf obsolete
diff --git a/gnu/usr.bin/lynx/src/chrtrans/makeuctb.c b/gnu/usr.bin/lynx/src/chrtrans/makeuctb.c
index 1207d3d180e..611e737d305 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/makeuctb.c
+++ b/gnu/usr.bin/lynx/src/chrtrans/makeuctb.c
@@ -18,7 +18,6 @@
#define DONT_USE_SOCKS5
#include <HTUtils.h>
-#include <tcp.h>
/*
* Don't try to use LYexit().
*/
@@ -26,8 +25,12 @@
#undef exit
#endif /* exit */
+#ifndef TOUPPER
+#define TOUPPER(c) (islower(UCH(c)) ? toupper(UCH(c)) : (c))
+#endif /* !TOLOWER */
+
#ifndef TOLOWER
-#define TOLOWER(c) (isupper((unsigned char)c) ? tolower((unsigned char)c) : (c))
+#define TOLOWER(c) (isupper(UCH(c)) ? tolower(UCH(c)) : (c))
#endif /* !TOLOWER */
#include <UCkd.h>
@@ -40,25 +43,39 @@
*/
typedef u16 unicode;
+static FILE *chdr = 0;
+
/*
- * Since we're writing the formatted file to stdout, ensure that we flush
+ * Since we may be writing the formatted file to stdout, ensure that we flush
* everything before leaving, since some old (and a few not-so-old) platforms
* that do not implement POSIX 'exit()'.
*/
-#define done(code) \
- fflush(stdout); \
- fflush(stderr); \
- exit(code)
+PRIVATE void done PARAMS((int code)) GCC_NORETURN;
+PRIVATE void done ARGS1(int, code)
+{
+ fflush(chdr);
+ fclose(chdr);
+ fflush(stderr);
+ exit(code);
+}
-PRIVATE void usage ARGS1(
- char *, argv0)
+PRIVATE void usage NOARGS
{
- 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");
+ static CONST char *tbl[] = {
+ "Usage: makeuctb [parameters]",
+ "",
+ "Utility to convert .tbl into .h files for Lynx compilation.",
+ "",
+ "Parameters (all are optional):",
+ " 1: the input file (normally {filename}.tbl, but \"-\" for stdin",
+ " 2: the output file (normally {filename}.tbl but \"-\" for stdout",
+ " 3: charset mime name",
+ " 4: charset display name"
+ };
+ unsigned n;
+ for (n = 0; n < TABLESIZE(tbl); n++) {
+ fprintf(stderr, "%s\n", tbl[n]);
+ };
done(EX_USAGE);
}
@@ -72,7 +89,7 @@ PUBLIC int strncasecomp ARGS3(
CONST char *q = b;
for (p = a, q = b; ; p++, q++) {
- int diff;
+ int diff;
if (p == (a+n))
return 0; /* Match up to n characters */
if (!(*p && *q))
@@ -95,8 +112,11 @@ PRIVATE int getunicode ARGS1(
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])) {
+ !isxdigit(UCH(p[2])) ||
+ !isxdigit(UCH(p[3])) ||
+ !isxdigit(UCH(p[4])) ||
+ !isxdigit(UCH(p[5])) ||
+ isxdigit(UCH(p[6]))) {
return -1;
}
*p0 = p+6;
@@ -109,28 +129,31 @@ PRIVATE int getunicode ARGS1(
unicode unitable[MAX_FONTLEN][255];
int unicount[MAX_FONTLEN];
-struct unimapdesc_str themap_str = {0, NULL};
+struct unimapdesc_str themap_str = {0, NULL, 0, 0};
-char *tblname;
+PRIVATE char *tblname;
+PRIVATE char *hdrname;
PRIVATE int RawOrEnc = 0;
PRIVATE int Raw_found = 0; /* whether explicit R directive found */
PRIVATE int CodePage = 0;
PRIVATE int CodePage_found = 0; /* whether explicit C directive found */
+#define MAX_UNIPAIRS 2500
+
PRIVATE void addpair_str ARGS2(
char *, str,
int, un)
{
- int i;
+ int i = 0;
if (un <= 0xfffe) {
if (!themap_str.entry_ct) {
/*
* Initialize the map for replacement strings.
*/
- themap_str.entries =
- (struct unipair_str *) malloc (2000 * sizeof (struct unipair_str));
+ themap_str.entries = (struct unipair_str *) malloc (MAX_UNIPAIRS
+ * sizeof (struct unipair_str));
if (!themap_str.entries) {
fprintf(stderr,
"%s: Out of memory\n", tblname);
@@ -151,9 +174,10 @@ PRIVATE void addpair_str ARGS2(
/*
* Add to list.
*/
- if (themap_str.entry_ct > 1999) {
+ if (themap_str.entry_ct > MAX_UNIPAIRS-1) {
fprintf(stderr,
- "ERROR: Only 2000 unicode replacement strings permitted!\n");
+ "ERROR: Only %d unicode replacement strings permitted!\n",
+ MAX_UNIPAIRS);
done(EX_DATAERR);
}
themap_str.entries[themap_str.entry_ct].unicode = un;
@@ -169,7 +193,7 @@ PRIVATE void addpair ARGS2(
{
int i;
- if (!Raw_found) { /* enc not (yet) explicitly given with 'R' */
+ if (!Raw_found) { /* enc not (yet) explicitly given with 'R' */
if (fp >= 128) {
if (RawOrEnc != UCT_ENC_8BIT && RawOrEnc <= UCT_ENC_8859) {
if (fp < 160) { /* cannot be 8859 */
@@ -219,16 +243,55 @@ PUBLIC int main ARGS2(
int, argc,
char **, argv)
{
+ static char *first_ifdefs[] = {
+ "/*",
+ " * Compile-in this chunk of code unless we've turned it off specifically",
+ " * or in general (id=%s).",
+ " */",
+ "",
+ "#ifndef INCL_CHARSET%s",
+ "#define INCL_CHARSET%s 1",
+ "",
+ "/*ifdef NO_CHARSET*/",
+ "#ifdef NO_CHARSET",
+ "#undef NO_CHARSET",
+ "#endif",
+ "#define NO_CHARSET 0 /* force default to always be active */",
+ "",
+ "/*ifndef NO_CHARSET%s*/",
+ "#ifndef NO_CHARSET%s",
+ "",
+ "#if ALL_CHARSETS",
+ "#define NO_CHARSET%s 0",
+ "#else",
+ "#define NO_CHARSET%s 1",
+ "#endif",
+ "",
+ "#endif /* ndef(NO_CHARSET%s) */",
+ "",
+ "#if NO_CHARSET%s",
+ "#define UC_CHARSET_SETUP%s /*nothing*/",
+ "#else"
+ };
+ static char *last_ifdefs[] = {
+ "",
+ "#endif /* NO_CHARSET%s */",
+ "",
+ "#endif /* INCL_CHARSET%s */"
+ };
+
FILE *ctbl;
char buffer[65536];
+ char outname[256];
+ unsigned n;
int fontlen;
int i, nuni, nent;
- int fp0, fp1, un0, un1;
+ int fp0 = 0, fp1 = 0, un0, un1;
char *p, *p1;
char *tbuf, ch;
- if (argc < 2 || argc > 4) {
- usage(argv[0]);
+ if (argc < 2 || argc > 5) {
+ usage();
}
if (!strcmp(argv[1], "-")) {
@@ -242,6 +305,31 @@ PUBLIC int main ARGS2(
}
}
+ if (argc > 2) {
+ if (!strcmp(argv[2], "-")) {
+ chdr = stdout;
+ hdrname = "stdout";
+ } else {
+ hdrname = argv[2];
+ }
+ } else if (ctbl == stdin) {
+ chdr = stdout;
+ hdrname = "stdout";
+ } else {
+ strcpy(hdrname = outname, tblname);
+ if ((p = strrchr(outname, '.')) == 0)
+ p = outname + strlen(outname);
+ strcpy(p, ".h");
+ }
+
+ if (chdr == 0) {
+ chdr = fopen(hdrname, "w");
+ if (!chdr) {
+ perror(hdrname);
+ done(EX_NOINPUT);
+ }
+ }
+
/*
* For now we assume the default font is always 256 characters.
*/
@@ -309,7 +397,7 @@ PUBLIC int main ARGS2(
}
p++;
while (*p == ' ' || *p == '\t') {
- p++;
+ p++;
}
RawOrEnc = strtol(p,0,10);
Raw_found = 1;
@@ -318,7 +406,7 @@ PUBLIC int main ARGS2(
/*
* Is this the default table?
*/
- case 'D':
+ case 'D':
if (p[1] == 'e' || p[1] == 'E') {
buffer[sizeof(buffer) - 1] = '\0';
if (!strncasecomp(p, "Default", 7)) {
@@ -335,7 +423,7 @@ PUBLIC int main ARGS2(
/*
* Is this the default table?
*/
- case 'F':
+ case 'F':
if (p[1] == 'a' || p[1] == 'A') {
buffer[sizeof(buffer) - 1] = '\0';
if (!strncasecomp(p, "FallBack", 8)) {
@@ -395,7 +483,7 @@ PUBLIC int main ARGS2(
}
p++;
while (*p == ' ' || *p == '\t') {
- p++;
+ p++;
}
CodePage = strtol(p,0,10);
CodePage_found = 1;
@@ -474,9 +562,9 @@ PUBLIC int main ARGS2(
* We had ':'.
*/
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);
+ if (UCH(ch) < 32 || ch == '\\' || ch == '\"' ||
+ UCH(ch) >= 127) {
+ sprintf(p1, "\\%.3o", UCH(ch));
#ifdef NOTDEFINED
fprintf(stderr, "%s\n", tbuf);
#endif /* NOTDEFINED */
@@ -489,7 +577,7 @@ PUBLIC int main ARGS2(
*p1 = '\0';
for (i = un0; i <= un1; i++) {
#ifdef NOTDEFINED
- printf("U+0x%x:%s\n", i, tbuf); */
+ fprintf(chdr, "U+0x%x:%s\n", i, tbuf); */
#endif /* NOTDEFINED */
addpair_str(tbuf,i);
}
@@ -505,7 +593,7 @@ PUBLIC int main ARGS2(
if (p1 == p) {
fprintf(stderr, "Bad input line: %s\n", buffer);
done(EX_DATAERR);
- }
+ }
p = p1;
while (*p == ' ' || *p == '\t') {
@@ -519,7 +607,7 @@ PUBLIC int main ARGS2(
done(EX_DATAERR);
}
p = p1;
- } else {
+ } else {
fp1 = 0;
}
@@ -561,7 +649,7 @@ PUBLIC int main ARGS2(
fprintf(stderr,
" there should be a Unicode range.\n");
done(EX_DATAERR);
- }
+ }
p++;
un1 = getunicode(&p);
if (un0 < 0 || un1 < 0) {
@@ -569,7 +657,7 @@ PUBLIC int main ARGS2(
"%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n",
tblname, fp0, fp1);
done(EX_DATAERR);
- }
+ }
if (un1 - un0 != fp1 - fp0) {
fprintf(stderr,
"%s: Unicode range U+%x-U+%x not of the same length",
@@ -578,7 +666,7 @@ PUBLIC int main ARGS2(
" as font position range 0x%x-0x%x\n",
fp0, fp1);
done(EX_DATAERR);
- }
+ }
for (i = fp0; i <= fp1; i++) {
addpair(i,un0-fp0+i);
}
@@ -638,8 +726,8 @@ PUBLIC int main ARGS2(
nuni += unicount[i];
}
- if (argc >= 3) {
- strncpy(this_MIMEcharset,argv[2],UC_MAXLEN_MIMECSNAME);
+ if (argc > 3) {
+ strncpy(this_MIMEcharset,argv[3],UC_MAXLEN_MIMECSNAME);
} else if (this_MIMEcharset[0] == '\0') {
strncpy(this_MIMEcharset,tblname,UC_MAXLEN_MIMECSNAME);
if ((p = strchr(this_MIMEcharset,'.')) != 0) {
@@ -649,8 +737,8 @@ PUBLIC int main ARGS2(
for (p = this_MIMEcharset; *p; p++) {
*p = TOLOWER(*p);
}
- if (argc >= 4) {
- strncpy(this_LYNXcharset,argv[3],UC_MAXLEN_LYNXCSNAME);
+ if (argc > 4) {
+ strncpy(this_LYNXcharset,argv[4],UC_MAXLEN_LYNXCSNAME);
} else if (this_LYNXcharset[0] == '\0') {
strncpy(this_LYNXcharset,this_MIMEcharset,UC_MAXLEN_LYNXCSNAME);
}
@@ -670,21 +758,26 @@ PUBLIC int main ARGS2(
this_isDefaultMap = !strncmp(this_MIMEcharset,"iso-8859-1", 10);
}
fprintf(stderr,
- "makeuctb: %s: %stranslation map",
- this_MIMEcharset, (this_isDefaultMap ? "default " : ""));
+ "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] = isalnum(UCH(*p)) ? *p : '_';
}
id_append[i+1] = '\0';
}
fprintf(stderr, " (%s).\n", id_append);
- printf("\
+ for (n = 0; n < TABLESIZE(first_ifdefs); n++) {
+ fprintf(chdr, first_ifdefs[n], id_append);
+ fprintf(chdr, "\n");
+ }
+
+ fprintf(chdr, "\n\
/*\n\
* uni_hash.tbl\n\
*\n\
@@ -701,13 +794,13 @@ static CONST u8 dfont_unicount%s[%d] = \n\
if (i >= 128 && unicount[i] > 0 && i < lowest_eight) {
lowest_eight = i;
}
- printf("%3d", unicount[i]);
+ fprintf(chdr, "%3d", unicount[i]);
if (i == (fontlen - 1)) {
- printf("\n};\n");
+ fprintf(chdr, "\n};\n");
} else if ((i % 8) == 7) {
- printf(",\n\t");
+ fprintf(chdr, ",\n\t");
} else {
- printf(", ");
+ fprintf(chdr, ", ");
}
}
@@ -720,10 +813,10 @@ static CONST u8 dfont_unicount%s[%d] = \n\
}
if (nuni) {
- printf("\nstatic CONST u16 dfont_unitable%s[%d] = \n{\n\t",
- id_append, nuni);
+ fprintf(chdr, "\nstatic CONST u16 dfont_unitable%s[%d] = \n{\n\t",
+ id_append, nuni);
} else {
- printf("\nstatic CONST u16 dfont_unitable%s[1]; /* dummy */\n", id_append);
+ fprintf(chdr, "\nstatic CONST u16 dfont_unitable%s[1]; /* dummy */\n", id_append);
}
fp0 = 0;
@@ -733,57 +826,62 @@ static CONST u8 dfont_unicount%s[%d] = \n\
fp0++;
nent = 0;
}
- printf("0x%04x", unitable[fp0][nent++]);
+ fprintf(chdr, "0x%04x", unitable[fp0][nent++]);
if (i == (nuni - 1)) {
- printf("\n};\n");
+ fprintf(chdr, "\n};\n");
} else if ((i % 8) == 7) {
- printf(",\n\t");
+ fprintf(chdr, ",\n\t");
} else {
- printf(", ");
+ fprintf(chdr, ", ");
}
}
if (themap_str.entry_ct) {
- printf("\n\
+ fprintf(chdr, "\n\
static struct unipair_str repl_map%s[%d] = \n\
{\n\t", id_append, themap_str.entry_ct);
} else {
- printf("\n\
+ fprintf(chdr, "\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);
+ fprintf(chdr, "{0x%x,\"%s\"}",
+ themap_str.entries[i].unicode,
+ themap_str.entries[i].replace_str);
if (i == (themap_str.entry_ct - 1)) {
- printf("\n};\n");
+ fprintf(chdr, "\n};\n");
} else if ((i % 4) == 3) {
- printf(",\n\t");
+ fprintf(chdr, ",\n\t");
} else {
- printf(", ");
+ fprintf(chdr, ", ");
}
}
if (themap_str.entry_ct) {
- printf("\n\
+ fprintf(chdr, "\n\
static CONST struct unimapdesc_str dfont_replacedesc%s = {%d,repl_map%s,",
id_append, themap_str.entry_ct, id_append);
} else {
- printf("\n\
+ fprintf(chdr, "\n\
static CONST struct unimapdesc_str dfont_replacedesc%s = {0,NULL,",id_append);
}
- printf("%d,%d};\n",
- this_isDefaultMap ? 1 : 0,
- (useDefaultMap && !this_isDefaultMap) ? 1 : 0
+ fprintf(chdr, "%d,%d};\n",
+ this_isDefaultMap ? 1 : 0,
+ (useDefaultMap && !this_isDefaultMap) ? 1 : 0
);
- printf("#define UC_CHARSET_SETUP%s UC_Charset_Setup(\
+ fprintf(chdr, "#define UC_CHARSET_SETUP%s UC_Charset_Setup(\
\"%s\",\\\n\"%s\",\\\n\
dfont_unicount%s,dfont_unitable%s,%d,\\\n\
dfont_replacedesc%s,%d,%d,%d)\n",
id_append, this_MIMEcharset, this_LYNXcharset,
id_append, id_append, nuni, id_append, lowest_eight, RawOrEnc, CodePage);
+ for (n = 0; n < TABLESIZE(last_ifdefs); n++) {
+ fprintf(chdr, last_ifdefs[n], id_append);
+ fprintf(chdr, "\n");
+ }
+
done(EX_OK);
}
diff --git a/gnu/usr.bin/lynx/src/chrtrans/mnem2_suni.tbl b/gnu/usr.bin/lynx/src/chrtrans/mnem2_suni.tbl
index ca7abc112b4..3fc122cbb26 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/mnem2_suni.tbl
+++ b/gnu/usr.bin/lynx/src/chrtrans/mnem2_suni.tbl
@@ -1,6 +1,6 @@
#The MIME name of this charset.
# (this file was renamed from mnemonic_suni.tbl)
-M mnemonic
+Mmnemonic
#Name as a Display Charset (used on Options screen)
O RFC 1345 Mnemonic
diff --git a/gnu/usr.bin/lynx/src/chrtrans/rot13_kb.h b/gnu/usr.bin/lynx/src/chrtrans/rot13_kb.h
index 8bc1a9dc1ab..e402fb882ce 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/rot13_kb.h
+++ b/gnu/usr.bin/lynx/src/chrtrans/rot13_kb.h
@@ -1,4 +1,4 @@
-static unsigned short kb_layout_rot13[128] = {
+static LYKbLayout_t kb_layout_rot13[128] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 00..07 */
0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 08..0F */
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 10..17 */
diff --git a/gnu/usr.bin/lynx/src/chrtrans/yawerty_kb.h b/gnu/usr.bin/lynx/src/chrtrans/yawerty_kb.h
index 2592b822c10..5682bbbc3c2 100644
--- a/gnu/usr.bin/lynx/src/chrtrans/yawerty_kb.h
+++ b/gnu/usr.bin/lynx/src/chrtrans/yawerty_kb.h
@@ -1,4 +1,4 @@
-static unsigned short kb_layout_yawerty[128] = {
+static LYKbLayout_t kb_layout_yawerty[128] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 00..07 */
0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, /* 08..0F */
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, /* 10..17 */
diff --git a/gnu/usr.bin/lynx/src/descrip.mms b/gnu/usr.bin/lynx/src/descrip.mms
index be7aef30168..2f8def50441 100644
--- a/gnu/usr.bin/lynx/src/descrip.mms
+++ b/gnu/usr.bin/lynx/src/descrip.mms
@@ -5,7 +5,7 @@
! chrtrans header files before using this descrip.mms.
!
! History:
-! 1/1/93 creation at KU (Lou montulli@ukanaix.cc.ukans.edu).
+! 1/1/93 creation at KU (Lou montulli@ukanaix.cc.ukans.edu).
! 4/12/93 (seb@lns61.tn.cornell.edu)
! modified to support either UCX or MULTINET
! 12/2/93 modified to support Lynx rewrite
@@ -54,15 +54,16 @@
! $ MMS /Macro = (TCPWARE=1, GNU_C=1) for GNUC - OpenCMU TCP/IP
! $ MMS /Macro = (DECNET=1, GNU_C=1) for GNUC - socket emulation over DECnet
-OBJS = DefaultStyle.obj, GridText.obj, HTAlert.obj, HTFWriter.obj, -
+OBJS = DefaultStyle.obj, GridText.obj, HTAlert.obj, HTFWriter.obj, -
HTInit.obj, HTML.obj, LYBookmark.obj, LYCgi.obj, LYCharSets.obj, -
LYCharUtils.obj, LYClean.obj, LYCookie.obj, LYCurses.obj, -
- LYDownload.obj, LYEdit.obj, LYEditmap.obj, LYexit.obj, LYForms.obj, -
- LYGetFile.obj, LYHistory.obj, LYJump.obj, LYKeymap.obj, LYLeaks.obj, -
- LYList.obj, LYMail.obj, LYMain.obj, LYMainLoop.obj, LYMap.obj, -
- LYNews.obj, LYOptions.obj, LYPrint.obj, LYrcFile.obj, LYReadCFG.obj, -
+ LYDownload.obj, LYEdit.obj, LYEditmap.obj, LYForms.obj, -
+ LYGetFile.obj, LYHistory.obj, LYJump.obj, LYKeymap.obj, -
+ LYLeaks.obj, LYList.obj, LYMail.obj, LYMain.obj, LYMainLoop.obj, -
+ LYMap.obj, LYNews.obj, LYOptions.obj, LYPrint.obj, LYReadCFG.obj, -
LYSearch.obj, LYShowInfo.obj, LYStrings.obj, LYTraversal.obj, -
- LYUpload.obj, LYUtils.obj, UCAuto.obj, UCAux.obj, UCdomap.obj
+ LYUpload.obj, LYUtils.obj, LYexit.obj, LYrcFile.obj, TRSTable.obj, -
+ UCAuto.obj, UCAux.obj, UCdomap.obj
.ifdef WIN_TCP
TCP = WIN_TCP
diff --git a/gnu/usr.bin/lynx/src/makefile.dos b/gnu/usr.bin/lynx/src/makefile.dos
index 1a69fc84d09..daaa5b625d7 100644
--- a/gnu/usr.bin/lynx/src/makefile.dos
+++ b/gnu/usr.bin/lynx/src/makefile.dos
@@ -1,62 +1,114 @@
-OBJS= UCdomap.o UCAux.o UCAuto.o \
-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 LYExtern.o \
-LYStyle.o LYHash.o LYPrettySrc.o
-
-CFLAGS= $(MCFLAGS) -I. -I.. $(SLANGINC)
-
-CC = gcc
-MCFLAGS = -O2 -DHAVE_GETBKGD -DDISP_PARTIAL -DUSE_ZLIB \
- -DSOURCE_CACHE -DUSE_PSRC \
- -DUSE_EXTERNALS -DCOLOR_CURSES -DNCURSES -DFANCY_CURSES \
- -DACCESS_AUTH -DNO_CUSERID -DNOUSERS -DDOSPATH -DNO_TTYTYPE -DNO_UTMP \
- -Ichrtrans -I../WWW/library/implementation \
- -I../curses -I../djgpp/tcplib/include -I../djgpp/tcplib/include/tcp
-WWWLIB = ../WWW/library/djgpp/libwww.a ../curses/pdcurses.a ../djgpp/tcplib/obj/libtcp.a
-LIBS=-lz
-
-all: lynx
-
-lynx: message $(OBJS) $(WWWLIB)
- @echo "Linking and creating Lynx executable"
- $(CC) $(CFLAGS) -o lynx.exe $(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.exe core *.[ob]
-
-DefaultStyle.o: ../userdefs.h
-HTFWriter.o: ../userdefs.h
-LYBookmark.o: ../userdefs.h
-LYCharSets.o: ../userdefs.h
-LYCharUtils.o: ../userdefs.h
-LYCookie.o: ../userdefs.h
-LYDownload.o: ../userdefs.h
-LYEditmap.o: ../userdefs.h
-LYExtern.o: ../userdefs.h
-LYGetFile.o: ../userdefs.h
-LYHistory.o: ../userdefs.h
-LYKeymap.o: ../userdefs.h
-LYMain.o: ../userdefs.h
-LYMainLoop.o: ../userdefs.h
-LYOptions.o: ../userdefs.h
-LYReadCFG.o: ../userdefs.h
-LYShowInfo.o: ../userdefs.h
-LYStrings.o: ../userdefs.h
-LYTraversal.o: ../userdefs.h
+OBJS= UCdomap.o UCAux.o UCAuto.o \
+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 LYExtern.o \
+LYStyle.o LYHash.o LYPrettySrc.o TRSTable.o
+
+CFLAGS= -O2 $(MCFLAGS) $(INTLFLAGS) -I. -I.. $(SLANGINC)
+
+# comment this line to suppress DIRED support
+DIRED_DEFS = \
+ -DDIRED_SUPPORT \
+ -DOK_UUDECODE \
+ -DOK_TAR \
+ -DOK_GZIP \
+ -DOK_ZIP \
+ -DOK_OVERRIDE
+
+# Use this option to enable optional and *experimental* color style.
+#ENABLE_COLOR_STYLE = \
+ -DUSE_COLOR_STYLE
+
+CC = gcc
+
+MCFLAGS = \
+ $(DIRED_DEFS) \
+ $(ENABLE_COLOR_STYLE) \
+ -DACCESS_AUTH \
+ -DCOLOR_CURSES \
+ -DDISP_PARTIAL \
+ -DDOSPATH \
+ -DEXP_ADDRLIST_PAGE \
+ -DEXP_ALT_BINDINGS \
+ -DEXP_FILE_UPLOAD \
+ -DEXP_NESTED_TABLES \
+ -DEXP_PERSISTENT_COOKIES \
+ -DFANCY_CURSES \
+ -DNOUSERS \
+ -DNO_CUSERID \
+ -DNO_TTYTYPE \
+ -DNO_UTMP \
+ -DPDCURSES \
+ -DSOURCE_CACHE \
+ -DUSE_EXTERNALS \
+ -DUSE_PRETTYSRC \
+ -DUSE_ZLIB \
+ -DWATT32 \
+ $(SSLFLAGS) \
+ $(SSLINC) \
+ -I./chrtrans \
+ -I../WWW/Library/Implementation \
+ -I/djgpp/pdcur24 \
+ -I/djgpp/watt32/inc \
+ -I/djgpp/watt32/inc/sys
+
+WWWLIB = \
+ ../WWW/Library/djgpp/libwww.a \
+ /djgpp/pdcur24/lib/pdcurses.a
+
+LIBS= -L/djgpp/watt32/lib -lwatt -lz -lwmemu
+
+# Uncomment the following to enable Internationalization.
+#INTLFLAGS = -DHAVE_GETTEXT -DHAVE_LIBINTL_H
+#INTLLIBS= -lintl -liconv
+
+# Uncomment the followint to enable SSL.
+#SSLFLAGS = -DUSE_SSL
+#SSLLIB = -lssl -lcrypto
+#SSLINC = -I/djgpp/include/openssl
+
+all: lynx
+
+lynx: message $(OBJS) $(WWWLIB)
+ @echo "Linking and creating Lynx executable"
+ $(CC) $(CFLAGS) -o lynx.exe $(OBJS) $(WWWLIB) $(SSLLIB) $(LIBS) $(INTLLIBS)
+ @echo "Welcome to Lynx!"
+
+message:
+ @echo "Compiling Lynx sources"
+
+dbg: $(OBJS) $(WWWLIB)
+ @echo "Making Lynx code"
+ $(CC) -g $(OBJS) $(CFLAGS) $(WWWLIB) $(LIBS)
+
+lint:
+ lint *.c > ../lint.out
+
+clean:
+ rm -f lynx.exe core *.[ob]
+
+DefaultStyle.o: ../userdefs.h
+HTFWriter.o: ../userdefs.h
+LYBookmark.o: ../userdefs.h
+LYCharSets.o: ../userdefs.h
+LYCharUtils.o: ../userdefs.h
+LYCookie.o: ../userdefs.h
+LYDownload.o: ../userdefs.h
+LYEditmap.o: ../userdefs.h
+LYExtern.o: ../userdefs.h
+LYGetFile.o: ../userdefs.h
+LYHistory.o: ../userdefs.h
+LYKeymap.o: ../userdefs.h
+LYMain.o: ../userdefs.h
+LYMainLoop.o: ../userdefs.h
+LYOptions.o: ../userdefs.h
+LYReadCFG.o: ../userdefs.h
+LYShowInfo.o: ../userdefs.h
+LYStrings.o: ../userdefs.h
+LYTraversal.o: ../userdefs.h
+LYUtils.o: ../userdefs.h
diff --git a/gnu/usr.bin/lynx/src/makefile.dsl b/gnu/usr.bin/lynx/src/makefile.dsl
index 0be75cd27c4..0c6bca4231b 100644
--- a/gnu/usr.bin/lynx/src/makefile.dsl
+++ b/gnu/usr.bin/lynx/src/makefile.dsl
@@ -1,65 +1,92 @@
-OBJS= UCdomap.o UCAux.o UCAuto.o \
-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 LYExtern.o \
-LYStyle.o LYHash.o LYPrettySrc.o
-
-CFLAGS= $(MCFLAGS) $(INTLFLAGS) -I. -I.. $(SLANGINC)
-
-CC = gcc
-MCFLAGS = -O2 -DDISP_PARTIAL -DUSE_ZLIB -DUSE_EXTERNALS \
--DSOURCE_CACHE -DUSE_PSRC \
--DUSE_SLANG -DDJGPP_KEYHANDLER -DACCESS_AUTH -DNO_CUSERID \
--DNOUSERS -DDOSPATH -DNO_TTYTYPE -DNO_UTMP -I../WWW/Library/Implementation \
--I../djgpp/tcplib/include -I./chrtrans -I../djgpp/tcplib/include/tcp
-WWWLIB = ../WWW/Library/djgpp/libwww.a ../djgpp/tcplib/obj/libtcp.a
-LIBS= -lslang -lz # -lintl
-CHRTR= ./chrtrans/
-#INTLFLAGS = -DHAVE_GETTEXT -DHAVE_LIBINTL_H
-
-all: lynx.exe
-
-lynx.exe: message $(OBJS) $(WWWLIB)
- @echo "Linking and creating Lynx executable"
- $(CC) $(CFLAGS) -o lynx.exe $(OBJS) $(WWWLIB) $(SLANGLIB) $(LIBS)
- @echo "Welcome to Lynx!"
-
-message:
- @echo "Compiling Lynx sources"
-
-dbg: $(OBJS) $(WWWLIB)
- @echo "Making Lynx code"
- $(CC) $(OBJS) $(CFLAGS) $(WWWLIB) $(SLANGLIB) $(LIBS)
-
-lint:
- lint *.c > ../lint.out
-
-clean:
- rm -f lynx.exe core *.[ob]
-
-DefaultStyle.o: ../userdefs.h
-HTFWriter.o: ../userdefs.h
-LYBookmark.o: ../userdefs.h
-LYCharSets.o: ../userdefs.h
-LYCharUtils.o: ../userdefs.h
-LYCookie.o: ../userdefs.h
-LYDownload.o: ../userdefs.h
-LYEditmap.o: ../userdefs.h
-LYExtern.o: ../userdefs.h
-LYGetFile.o: ../userdefs.h
-LYHistory.o: ../userdefs.h
-LYKeymap.o: ../userdefs.h
-LYMain.o: ../userdefs.h
-LYMainLoop.o: ../userdefs.h
-LYOptions.o: ../userdefs.h
-LYReadCFG.o: ../userdefs.h
-LYReadCFG.o: ../userdefs.h
-LYShowInfo.o: ../userdefs.h
-LYStrings.o: ../userdefs.h
-LYTraversal.o: ../userdefs.h
-LYUtils.o: ../userdefs.h
+OBJS= UCdomap.o UCAux.o UCAuto.o \
+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 LYExtern.o \
+LYStyle.o LYHash.o LYPrettySrc.o TRSTable.o
+
+CFLAGS= -O1 $(MCFLAGS) $(INTLFLAGS) -I. -I.. $(SLANGINC)
+
+# comment this line to suppress DIRED support
+DIRED_DEFS = \
+ -DDIRED_SUPPORT \
+ -DOK_UUDECODE \
+ -DOK_TAR \
+ -DOK_GZIP \
+ -DOK_ZIP \
+ -DOK_OVERRIDE
+
+CC = gcc
+
+MCFLAGS = \
+ $(DIRED_DEFS) \
+ -DACCESS_AUTH \
+ -DDISP_PARTIAL \
+ -DDJGPP_KEYHANDLER \
+ -DDOSPATH \
+ -DNOUSERS \
+ -DNO_CUSERID \
+ -DNO_TTYTYPE \
+ -DNO_UTMP \
+ -DSOURCE_CACHE \
+ -DUSE_EXTERNALS \
+ -DUSE_PRETTYSRC \
+ -DUSE_SLANG \
+ -DUSE_ZLIB \
+ -DWATT32 \
+ -I./chrtrans \
+ -I../WWW/Library/Implementation \
+ -I../djgpp/watt32/inc \
+ -I../djgpp/watt32/inc/sys
+
+WWWLIB = \
+ ../WWW/Library/djgpp/libwww.a \
+ ../djgpp/watt32/lib/libwatt.a
+
+LIBS= $(SLANGLIB) -lslang -lz # -lintl
+#INTLFLAGS = -DHAVE_GETTEXT -DHAVE_LIBINTL_H
+
+all: lynx.exe
+
+lynx.exe: message $(OBJS) $(WWWLIB)
+ @echo "Linking and creating Lynx executable"
+ $(CC) $(CFLAGS) -o lynx.exe $(OBJS) $(WWWLIB) $(LIBS)
+ @echo "Welcome to Lynx!"
+
+message:
+ @echo "Compiling Lynx sources"
+
+dbg: $(OBJS) $(WWWLIB)
+ @echo "Making Lynx code"
+ $(CC) -g $(OBJS) $(CFLAGS) $(WWWLIB) $(LIBS)
+
+lint:
+ lint *.c > ../lint.out
+
+clean:
+ rm -f lynx.exe core *.[ob]
+
+DefaultStyle.o: ../userdefs.h
+HTFWriter.o: ../userdefs.h
+LYBookmark.o: ../userdefs.h
+LYCharSets.o: ../userdefs.h
+LYCharUtils.o: ../userdefs.h
+LYCookie.o: ../userdefs.h
+LYDownload.o: ../userdefs.h
+LYEditmap.o: ../userdefs.h
+LYExtern.o: ../userdefs.h
+LYGetFile.o: ../userdefs.h
+LYHistory.o: ../userdefs.h
+LYKeymap.o: ../userdefs.h
+LYMain.o: ../userdefs.h
+LYMainLoop.o: ../userdefs.h
+LYOptions.o: ../userdefs.h
+LYReadCFG.o: ../userdefs.h
+LYShowInfo.o: ../userdefs.h
+LYStrings.o: ../userdefs.h
+LYTraversal.o: ../userdefs.h
+LYUtils.o: ../userdefs.h
diff --git a/gnu/usr.bin/lynx/src/makefile.in b/gnu/usr.bin/lynx/src/makefile.in
index ee939498dc0..2de139e972c 100644
--- a/gnu/usr.bin/lynx/src/makefile.in
+++ b/gnu/usr.bin/lynx/src/makefile.in
@@ -1,6 +1,7 @@
# template-makefile for Lynx src directory
SHELL = @CONFIG_SHELL@
+CDPATH = .
x = @PROG_EXT@
@@ -21,7 +22,9 @@ CC = @CC@
CPP = @CPP@
CFLAGS = @CFLAGS@
DEFS = @DEFS@
+CHARSET_DEFS = @CHARSET_DEFS@
CPPFLAGS = @CPPFLAGS@
+_O = .o
LIBS = @LIBS@ $(RESOLVLIB) $(WAISLIB) $(SITE_LIBS)
LDFLAGS = @LDFLAGS@
@@ -38,7 +41,7 @@ WWWLIB = $(top_builddir)/WWW/Library/Implementation/libwww.a
INTLLIB = @INTLDIR_MAKE@@INTLLIBS@
INTLDIR_CPPFLAGS= @INTLDIR_CPPFLAGS@-I$(top_srcdir)/intl
-CPP_OPTS = $(DEFS) $(CPPFLAGS) \
+CPP_OPTS = $(CPPFLAGS) $(DEFS) $(CHARSET_DEFS) \
-DLOCALEDIR=\"$(localedir)\" \
-I. \
-I$(top_builddir) \
@@ -56,24 +59,26 @@ LINTOPTS =
COMPRESS_PROG =@COMPRESS_PROG@
COMPRESS_EXT =@COMPRESS_EXT@
-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 LYExtern.o \
-LYStyle.o LYHash.o LYPrettySrc.o $(CHARTRANS_OBJS) @LIBOBJS@
-
-C_SRC = $(OBJS:.o=.c)
+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) LYUpload$(_O) \
+ LYLeaks$(_O) LYexit$(_O) LYJump$(_O) LYList$(_O) LYCgi$(_O) \
+ LYTraversal$(_O) LYEditmap$(_O) LYCharSets$(_O) LYCharUtils$(_O) \
+ LYMap$(_O) LYCookie$(_O) LYStyle$(_O) LYHash$(_O) LYPrettySrc$(_O) \
+ TRSTable$(_O) $(CHARTRANS_OBJS) @LIBOBJS@
+
+C_SRC = $(OBJS:$(_O)=.c)
all: lynx$x
-.SUFFIXES : .i
+.SUFFIXES : $(_O) .i
-.c.o:
+.c$(_O):
@RULE_CC@
@ECHO_CC@$(CC) $(CC_OPTS) -c $(srcdir)/$*.c
@@ -85,7 +90,8 @@ lynx$x: message do_chartrans_stuff $(top_builddir)/LYHelp.h $(OBJS) $(WWWLIB)
@echo "Linking and creating Lynx executable"
$(CC) $(CC_OPTS) $(LDFLAGS) -o $@ $(OBJS) $(WWWLIB) $(INTLLIB) $(LIBS)
@echo "Copying Lynx executable into top-level directory"
- cp $@ $(top_builddir)
+ rm -f $(top_builddir)/$@
+ cp $@ $(top_builddir)/
@echo "Welcome to Lynx!"
message:
@@ -102,25 +108,28 @@ lint:
$(LINT) $(LINTOPTS) $(CPP_OPTS) *.c > $(top_builddir)/lint.lynx
clean:
- rm -f lynx$x core *.core *.leaks *.[ob] *.bak
+ rm -f lynx$x core *.core *.leaks *.[oi] *.bak tags TAGS
cd chrtrans && $(MAKE) clean
distclean: clean
-HTFWriter.o: $(top_srcdir)/userdefs.h
-HTInit.o: $(top_srcdir)/userdefs.h
-LYCharSets.o: $(top_srcdir)/userdefs.h
-LYGetFile.o: $(top_srcdir)/userdefs.h
-LYKeymap.o: $(top_srcdir)/userdefs.h
-LYMail.o: $(top_srcdir)/userdefs.h
-LYMain.o: $(top_srcdir)/userdefs.h $(top_builddir)/lynx_cfg.h
-LYMainLoop.o: $(top_srcdir)/userdefs.h
-LYOptions.o: $(top_srcdir)/userdefs.h
-LYReadCFG.o: $(top_srcdir)/userdefs.h
-LYShowInfo.o: $(top_builddir)/cfg_defs.h
-LYTraversal.o: $(top_srcdir)/userdefs.h
-LYUtils.o: $(top_srcdir)/userdefs.h
-LYrcFile.o: $(top_srcdir)/userdefs.h
+CMN=$(top_srcdir)/WWW/Library/Implementation/
+
+HTFWriter$(_O): $(top_srcdir)/userdefs.h
+HTInit$(_O): $(top_srcdir)/userdefs.h
+LYCharSets$(_O): $(top_srcdir)/userdefs.h
+LYGetFile$(_O): $(top_srcdir)/userdefs.h
+LYKeymap$(_O): $(top_srcdir)/userdefs.h
+LYMail$(_O): $(top_srcdir)/userdefs.h
+LYMain$(_O): $(top_srcdir)/userdefs.h $(top_builddir)/lynx_cfg.h
+LYMainLoop$(_O): $(top_srcdir)/userdefs.h
+LYOptions$(_O): $(top_srcdir)/userdefs.h
+LYReadCFG$(_O): $(top_srcdir)/userdefs.h
+LYShowInfo$(_O): $(top_builddir)/cfg_defs.h
+LYTraversal$(_O): $(top_srcdir)/userdefs.h
+LYUtils$(_O): $(top_srcdir)/userdefs.h
+LYrcFile$(_O): $(top_srcdir)/userdefs.h
+LYLeaks$(_O): $(CMN)LYLeaks.h $(CMN)HTString.h
CHRTR= chrtrans/
@@ -164,16 +173,14 @@ TABLES= \
$(CHRTR)utf8_uni.h \
$(CHRTR)viscii_uni.h
-CMN=$(top_srcdir)/WWW/Library/Implementation/
-
$(TABLES):
-cd chrtrans && $(MAKE) tables
-UCdomap.o: UCdomap.c chrtrans/UCkd.h chrtrans/makeuctb$x chrtrans/makeuctb.c \
+UCdomap$(_O): UCdomap.c chrtrans/UCkd.h chrtrans/makeuctb$x chrtrans/makeuctb.c \
UCdomap.h $(CMN)UCMap.h $(TABLES) $(top_srcdir)/userdefs.h
-UCAux.o : UCAux.c $(CMN)UCAux.h $(CMN)UCDefs.h
-LYCookie.o: $(top_srcdir)/userdefs.h
+chrtrans/makeuctb$x:
+ cd chrtrans; make makeuctb$x
.if ${MACHINE_ARCH} == "hppa"
LYMainLoop.o: ${srcdir}/LYMainLoop.c
@@ -185,6 +192,9 @@ HTML.o: ${srcdir}/HTML.c
@ECHO_CC@$(CC) $(CC_OPTS) -O0 -c $<
.endif
+UCAux$(_O) : UCAux.c $(CMN)UCAux.h $(CMN)UCDefs.h
+LYCookie$(_O): $(top_srcdir)/userdefs.h
+
depend : $(TABLES)
makedepend -fmakefile -- $(CC_OPTS) -- $(C_SRC)
diff --git a/gnu/usr.bin/lynx/src/makefile.wsl b/gnu/usr.bin/lynx/src/makefile.wsl
index a54731d2e95..1d771a6ea17 100644
--- a/gnu/usr.bin/lynx/src/makefile.wsl
+++ b/gnu/usr.bin/lynx/src/makefile.wsl
@@ -1,64 +1,64 @@
-OBJS= UCdomap.o UCAux.o UCAuto.o \
-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 LYExtern.o \
-LYStyle.o LYHash.o LYPrettySrc.o
-
-CFLAGS= $(MCFLAGS) -I. -I.. $(SLANGINC)
-
-CC = gcc
-MCFLAGS = -O2 -DDISP_PARTIAL -DUSE_ZLIB -DUSE_EXTERNALS \
--DSOURCE_CACHE -DUSE_PSRC \
--DUSE_SLANG -DACCESS_AUTH -DNO_CUSERID \
--DNOUSERS -DDOSPATH -DNO_TTYTYPE -DNO_UTMP -I../WWW/library/implement -I../djgpp/tcplib/include \
--I./chrtrans -I../djgpp/tcplib/include/tcp
-WWWLIB = ../WWW/library/djgpp/libwww.a ../djgpp/tcplib/obj/libtcp.a
-LIBS= -lslang -lz
-CHRTR= ./chrtrans/
-
-all: lynx.exe
-
-lynx.exe: message $(OBJS) $(WWWLIB)
- @echo "Linking and creating Lynx executable"
- $(CC) $(CFLAGS) -o lynx.exe $(OBJS) $(WWWLIB) $(SLANGLIB) $(LIBS)
- @echo "Welcome to Lynx!"
-
-message:
- @echo "Compiling Lynx sources"
-
-dbg: $(OBJS) $(WWWLIB)
- @echo "Making Lynx code"
- $(CC) $(OBJS) $(CFLAGS) $(WWWLIB) $(SLANGLIB) $(LIBS)
-
-lint:
- lint *.c > ../lint.out
-
-clean:
- rm -f lynx.exe core *.[ob]
-
-DefaultStyle.o: ../userdefs.h
-HTFWriter.o: ../userdefs.h
-LYBookmark.o: ../userdefs.h
-LYCharSets.o: ../userdefs.h
-LYCharUtils.o: ../userdefs.h
-LYCookie.o: ../userdefs.h
-LYDownload.o: ../userdefs.h
-LYEditmap.o: ../userdefs.h
-LYExtern.o: ../userdefs.h
-LYGetFile.o: ../userdefs.h
-LYHistory.o: ../userdefs.h
-LYKeymap.o: ../userdefs.h
-LYMain.o: ../userdefs.h
-LYMainLoop.o: ../userdefs.h
-LYOptions.o: ../userdefs.h
-LYReadCFG.o: ../userdefs.h
-LYReadCFG.o: ../userdefs.h
-LYShowInfo.o: ../userdefs.h
-LYStrings.o: ../userdefs.h
-LYTraversal.o: ../userdefs.h
-LYUtils.o: ../userdefs.h
+OBJS= UCdomap.o UCAux.o UCAuto.o \
+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 LYExtern.o \
+LYStyle.o LYHash.o LYPrettySrc.o TRSTable.o
+
+CFLAGS= -O1 $(MCFLAGS) -I. -I.. $(SLANGINC)
+
+CC = gcc
+MCFLAGS = -DDISP_PARTIAL -DUSE_ZLIB -DUSE_EXTERNALS \
+-DSOURCE_CACHE -DUSE_PRETTYSRC \
+-DUSE_SLANG -DACCESS_AUTH -DNO_CUSERID \
+-DNOUSERS -DDOSPATH -DNO_TTYTYPE -DNO_UTMP -I../WWW/library/implement -I../djgpp/tcplib/include \
+-I./chrtrans -I../djgpp/tcplib/include/tcp
+WWWLIB = ../WWW/library/djgpp/libwww.a ../djgpp/tcplib/obj/libtcp.a
+LIBS= -lslang -lz
+CHRTR= ./chrtrans/
+
+all: lynx.exe
+
+lynx.exe: message $(OBJS) $(WWWLIB)
+ @echo "Linking and creating Lynx executable"
+ $(CC) $(CFLAGS) -o lynx.exe $(OBJS) $(WWWLIB) $(SLANGLIB) $(LIBS)
+ @echo "Welcome to Lynx!"
+
+message:
+ @echo "Compiling Lynx sources"
+
+dbg: $(OBJS) $(WWWLIB)
+ @echo "Making Lynx code"
+ $(CC) $(OBJS) $(CFLAGS) $(WWWLIB) $(SLANGLIB) $(LIBS)
+
+lint:
+ lint *.c > ../lint.out
+
+clean:
+ rm -f lynx.exe core *.[ob]
+
+DefaultStyle.o: ../userdefs.h
+HTFWriter.o: ../userdefs.h
+LYBookmark.o: ../userdefs.h
+LYCharSets.o: ../userdefs.h
+LYCharUtils.o: ../userdefs.h
+LYCookie.o: ../userdefs.h
+LYDownload.o: ../userdefs.h
+LYEditmap.o: ../userdefs.h
+LYExtern.o: ../userdefs.h
+LYGetFile.o: ../userdefs.h
+LYHistory.o: ../userdefs.h
+LYKeymap.o: ../userdefs.h
+LYMain.o: ../userdefs.h
+LYMainLoop.o: ../userdefs.h
+LYOptions.o: ../userdefs.h
+LYReadCFG.o: ../userdefs.h
+LYReadCFG.o: ../userdefs.h
+LYShowInfo.o: ../userdefs.h
+LYStrings.o: ../userdefs.h
+LYTraversal.o: ../userdefs.h
+LYUtils.o: ../userdefs.h
diff --git a/gnu/usr.bin/lynx/src/structdump.h b/gnu/usr.bin/lynx/src/structdump.h
index 90b4a807c49..cc191ade74c 100644
--- a/gnu/usr.bin/lynx/src/structdump.h
+++ b/gnu/usr.bin/lynx/src/structdump.h
@@ -9,7 +9,7 @@
/* usage: DUMPSTRUCT_LINK(link_ptr, "message"); */
#define DUMPSTRUCT_LINK(L,X) \
if ((L)) { \
-CTRACE(tfp, "\n" \
+CTRACE((tfp, "\n" \
"KED: link_ptr=0x%08x sizeof=%d ["X"]\n" \
"link struct {\n" \
" *lname=0x%08x\n" \
@@ -33,10 +33,10 @@ CTRACE(tfp, "\n" \
(L)->lname, (L)->lname, (L)->target, (L)->target, \
(L)->hightext, (L)->hightext, (L)->hightext2, (L)->hightext2, \
(L)->hightext2_offset, (L)->inUnderline, (L)->lx, (L)->ly, \
- (L)->type, (L)->anchor_number, (L)->anchor_line_num, (L)->form); \
+ (L)->type, (L)->anchor_number, (L)->anchor_line_num, (L)->form)); \
}else{ \
-CTRACE(tfp, "\n" \
- "KED: link_ptr=0x00000000 (NULL) ["X"]\n"); \
+CTRACE((tfp, "\n" \
+ "KED: link_ptr=0x00000000 (NULL) ["X"]\n")); \
} \
CTRACE_FLUSH(tfp);
@@ -44,7 +44,7 @@ CTRACE_FLUSH(tfp);
/* usage: DUMPSTRUCT_ANCHOR(anchor_ptr, "message"); */
#define DUMPSTRUCT_ANCHOR(A,X) \
if ((A)) { \
-CTRACE(tfp, "\n" \
+CTRACE((tfp, "\n" \
"KED: anchor_ptr=0x%08x sizeof=%d ["X"]\n" \
"TextAnchor struct {\n" \
" *next=0x%08x\n" \
@@ -72,10 +72,10 @@ CTRACE(tfp, "\n" \
(A)->hightext, (A)->hightext, (A)->hightext2, (A)->hightext2, \
(A)->hightext2offset, (A)->link_type, \
(A)->input_field, (A)->input_field, (A)->show_anchor, \
- (A)->inUnderline, (A)->expansion_anch, (A)->anchor); \
+ (A)->inUnderline, (A)->expansion_anch, (A)->anchor)); \
}else{ \
-CTRACE(tfp, "\n" \
- "KED: anchor_ptr=0x00000000 (NULL) ["X"]\n"); \
+CTRACE((tfp, "\n" \
+ "KED: anchor_ptr=0x00000000 (NULL) ["X"]\n")); \
} \
CTRACE_FLUSH(tfp);
@@ -83,7 +83,7 @@ CTRACE_FLUSH(tfp);
/* usage: DUMPSTRUCT_FORM(forminfo_ptr, "message"); */
#define DUMPSTRUCT_FORMINFO(F,X) \
if ((F)) { \
-CTRACE(tfp, "\n" \
+CTRACE((tfp, "\n" \
"KED: forminfo_ptr=0x%08x sizeof=%d ["X"]\n" \
"FormInfo struct {\n" \
" *name=0x%08x\n" \
@@ -122,10 +122,10 @@ CTRACE(tfp, "\n" \
(F)->submit_method, (F)->submit_enctype, (F)->submit_title, \
(F)->no_cache, (F)->cp_submit_value, (F)->orig_submit_value, \
(F)->size_l, (F)->disabled, (F)->name_cs, (F)->value_cs, \
- (F)->accept_cs); \
-}else{ \
-CTRACE(tfp, "\n" \
- "KED: forminfo_ptr=0x00000000 (NULL) ["X"]\n"); \
+ (F)->accept_cs)); \
+} else { \
+CTRACE((tfp, "\n" \
+ "KED: forminfo_ptr=0x00000000 (NULL) ["X"]\n")); \
} \
CTRACE_FLUSH(tfp);
@@ -133,7 +133,7 @@ CTRACE_FLUSH(tfp);
/* usage: DUMPSTRUCT_LINE(htline_ptr, "message"); */
#define DUMPSTRUCT_LINE(L,X) \
if ((L)) { \
-CTRACE(tfp, "\n" \
+CTRACE((tfp, "\n" \
"KED: htline_ptr=0x%08x sizeof=%d ["X"]\n" \
"HTLine struct {\n" \
" *next=0x%08x\n" \
@@ -149,10 +149,10 @@ CTRACE(tfp, "\n" \
"}\n", \
(L), sizeof(*((L))), \
(L)->next, (L)->prev, (L)->offset, (L)->size, (L)->split_after, \
- (L)->bullet, (L)->expansion_line, (L)->data, (L)->data); \
+ (L)->bullet, (L)->expansion_line, (L)->data, (L)->data)); \
}else{ \
-CTRACE(tfp, "\n" \
- "KED: htline_ptr=0x00000000 (NULL) ["X"]\n"); \
+CTRACE((tfp, "\n" \
+ "KED: htline_ptr=0x00000000 (NULL) ["X"]\n")); \
} \
CTRACE_FLUSH(tfp);
diff --git a/gnu/usr.bin/lynx/test/c1.html b/gnu/usr.bin/lynx/test/c1.html
index 0b43ab0785f..e74f6dba9ff 100644
--- a/gnu/usr.bin/lynx/test/c1.html
+++ b/gnu/usr.bin/lynx/test/c1.html
@@ -1,82 +1,62 @@
-<HTML>
-<HEAD>
-<TITLE> Test of some symbols </TITLE>
-</HEAD>
-<BODY>
-<PRE>
-You may press '\' to view the source of this test
-
-NCRs for symbols which are the C1 control chars for iso-8859-1 and Unicode,
-but assumed as <em>windows-1252</em> codepoints (common for windows-xxxx),
-say mercy to MS FrontPage (WYSIWYG HTML editor).
-
-<em>Number NCR alt-NCR windows-1252</em>
-
-0x80 &#x80; <IMG SRC=X ALT="&#x80;"> &#x20AC; #EURO SIGN
-0x81 &#x81; <IMG SRC=X ALT="&#x81;"> <!--&#x0081;--> #NOT USED
-0x82 &#x82; <IMG SRC=X ALT="&#x82;"> &#x201a; #SINGLE LOW-9 QUOTATION MARK
-0x83 &#x83; <IMG SRC=X ALT="&#x83;"> &#x0192; #LATIN SMALL LETTER F WITH HOOK
-0x84 &#x84; <IMG SRC=X ALT="&#x84;"> &#x201e; #DOUBLE LOW-9 QUOTATION MARK
-0x85 &#x85; <IMG SRC=X ALT="&#x85;"> &#x2026; #HORIZONTAL ELLIPSIS
-0x86 &#x86; <IMG SRC=X ALT="&#x86;"> &#x2020; #DAGGER
-0x87 &#x87; <IMG SRC=X ALT="&#x87;"> &#x2021; #DOUBLE DAGGER
-0x88 &#x88; <IMG SRC=X ALT="&#x88;"> &#x02c6; #MODIFIER LETTER CIRCUMFLEX ACCENT
-0x89 &#x89; <IMG SRC=X ALT="&#x89;"> &#x2030; #PER MILLE SIGN
-0x8a &#x8a; <IMG SRC=X ALT="&#x8a;"> &#x0160; #LATIN CAPITAL LETTER S WITH CARON
-0x8b &#x8b; <IMG SRC=X ALT="&#x8b;"> &#x2039; #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-0x8c &#x8c; <IMG SRC=X ALT="&#x8c;"> &#x0152; #LATIN CAPITAL LIGATURE OE
-0x8d &#x8d; <IMG SRC=X ALT="&#x8d;"> <!--&#x008d;--> #NOT USED
-0x8e &#x8e; <IMG SRC=X ALT="&#x8e;"> <!--&#x008e;--> #NOT USED
-0x8f &#x8f; <IMG SRC=X ALT="&#x8f;"> <!--&#x008f;--> #NOT USED
-0x90 &#x90; <IMG SRC=X ALT="&#x90;"> <!--&#x0090;--> #NOT USED
-0x91 &#x91; <IMG SRC=X ALT="&#x91;"> &#x2018; #LEFT SINGLE QUOTATION MARK
-0x92 &#x92; <IMG SRC=X ALT="&#x92;"> &#x2019; #RIGHT SINGLE QUOTATION MARK
-0x93 &#x93; <IMG SRC=X ALT="&#x93;"> &#x201c; #LEFT DOUBLE QUOTATION MARK
-0x94 &#x94; <IMG SRC=X ALT="&#x94;"> &#x201d; #RIGHT DOUBLE QUOTATION MARK
-0x95 &#x95; <IMG SRC=X ALT="&#x95;"> &#x2022; #BULLET
-0x96 &#x96; <IMG SRC=X ALT="&#x96;"> &#x2013; #EN DASH
-0x97 &#x97; <IMG SRC=X ALT="&#x97;"> &#x2014; #EM DASH
-0x98 &#x98; <IMG SRC=X ALT="&#x98;"> &#x02dc; #SMALL TILDE
-0x99 &#x99; <IMG SRC=X ALT="&#x99;"> &#x2122; #TRADE MARK SIGN
-0x9a &#x9a; <IMG SRC=X ALT="&#x9a;"> &#x0161; #LATIN SMALL LETTER S WITH CARON
-0x9b &#x9b; <IMG SRC=X ALT="&#x9b;"> &#x203a; #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-0x9c &#x9c; <IMG SRC=X ALT="&#x9c;"> &#x0153; #LATIN SMALL LIGATURE OE
-0x9d &#x9d; <IMG SRC=X ALT="&#x9d;"> <!--&#x009d;--> #NOT USED
-0x9e &#x9e; <IMG SRC=X ALT="&#x9e;"> <!--&#x009e;--> #NOT USED
-0x9f &#x9f; <IMG SRC=X ALT="&#x9f;"> &#x0178; #LATIN CAPITAL LETTER Y WITH DIAERESIS
-
-
-</PRE>
-</BODY>
-</HTML>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+<HTML>
+<HEAD>
+<TITLE>Test of invalid NCRs 128-159</TITLE>
+</HEAD>
+<BODY><H2>Test of invalid NCRs 128-159</H2>
+<P>
+Authoring tools on MS Windows, in particular MS FrontPage ("WYSIWYG" HTML editor),
+generate invalid <DFN>Numerical Character References</DFN> for characters
+commonly found in positions 128...159 (0x80...0x9f) in Windows fonts. Although
+these are valid codepoints for <em>windows-1252</em> (and other
+windows-xxxx) charsets, valid NCRs always refer to the document character set
+in the SGML sense, not to the character encoding scheme (or charset). For HTML,
+the SGML document character set is fixed, it is always a subset of Unicode
+(or ISO 10646). In Unicode and its iso-8859-1 subset, values 128...159 are
+C1 control characters, they must not appear in HTML. Valid NCRs for the
+intended characters use Unicode values greater than 256.
+<p>
+Lynx tries to interpret some of the invalid codes, by assuming that they are
+windows-1252 codepoints.
+<PRE>
+
+You may want to press '\' to view the source of this test.
+
+<em>Code invalid NCR <!-- --> <tab id=c>valid NCR, description</em>
+<em> normal in ALT <a id=table></a> </em>
+
+0x80 &#x80; <IMG SRC=X ALT="&#x80;"> <tab to=c>&#x20AC; #EURO SIGN
+0x81 &#x81; <IMG SRC=X ALT="&#x81;"> <!--&#x0081;--> #NOT USED
+0x82 &#x82; <IMG SRC=X ALT="&#x82;"> <tab to=c>&#x201a; #SINGLE LOW-9 QUOTATION MARK
+0x83 &#x83; <IMG SRC=X ALT="&#x83;"> <tab to=c>&#x0192; #LATIN SMALL LETTER F WITH HOOK
+0x84 &#x84; <IMG SRC=X ALT="&#x84;"> <tab to=c>&#x201e; #DOUBLE LOW-9 QUOTATION MARK
+0x85 &#x85; <IMG SRC=X ALT="&#x85;"> <tab to=c>&#x2026; #HORIZONTAL ELLIPSIS
+0x86 &#x86; <IMG SRC=X ALT="&#x86;"> <tab to=c>&#x2020; #DAGGER
+0x87 &#x87; <IMG SRC=X ALT="&#x87;"> <tab to=c>&#x2021; #DOUBLE DAGGER
+0x88 &#x88; <IMG SRC=X ALT="&#x88;"> <tab to=c>&#x02c6; #MODIFIER LETTER CIRCUMFLEX ACCENT
+0x89 &#x89; <IMG SRC=X ALT="&#x89;"> <tab to=c>&#x2030; #PER MILLE SIGN
+0x8a &#x8a; <IMG SRC=X ALT="&#x8a;"> <tab to=c>&#x0160; #LATIN CAPITAL LETTER S WITH CARON
+0x8b &#x8b; <IMG SRC=X ALT="&#x8b;"> <tab to=c>&#x2039; #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+0x8c &#x8c; <IMG SRC=X ALT="&#x8c;"> <tab to=c>&#x0152; #LATIN CAPITAL LIGATURE OE
+0x8d &#x8d; <IMG SRC=X ALT="&#x8d;"> <!--&#x008d;--> #NOT USED
+0x8e &#x8e; <IMG SRC=X ALT="&#x8e;"> <!--&#x008e;--> #NOT USED
+0x8f &#x8f; <IMG SRC=X ALT="&#x8f;"> <!--&#x008f;--> #NOT USED
+0x90 &#x90; <IMG SRC=X ALT="&#x90;"> <!--&#x0090;--> #NOT USED
+0x91 &#x91; <IMG SRC=X ALT="&#x91;"> <tab to=c>&#x2018; #LEFT SINGLE QUOTATION MARK
+0x92 &#x92; <IMG SRC=X ALT="&#x92;"> <tab to=c>&#x2019; #RIGHT SINGLE QUOTATION MARK
+0x93 &#x93; <IMG SRC=X ALT="&#x93;"> <tab to=c>&#x201c; #LEFT DOUBLE QUOTATION MARK
+0x94 &#x94; <IMG SRC=X ALT="&#x94;"> <tab to=c>&#x201d; #RIGHT DOUBLE QUOTATION MARK
+0x95 &#x95; <IMG SRC=X ALT="&#x95;"> <tab to=c>&#x2022; #BULLET
+0x96 &#x96; <IMG SRC=X ALT="&#x96;"> <tab to=c>&#x2013; #EN DASH
+0x97 &#x97; <IMG SRC=X ALT="&#x97;"> <tab to=c>&#x2014; #EM DASH
+0x98 &#x98; <IMG SRC=X ALT="&#x98;"> <tab to=c>&#x02dc; #SMALL TILDE
+0x99 &#x99; <IMG SRC=X ALT="&#x99;"> <tab to=c>&#x2122; #TRADE MARK SIGN
+0x9a &#x9a; <IMG SRC=X ALT="&#x9a;"> <tab to=c>&#x0161; #LATIN SMALL LETTER S WITH CARON
+0x9b &#x9b; <IMG SRC=X ALT="&#x9b;"> <tab to=c>&#x203a; #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+0x9c &#x9c; <IMG SRC=X ALT="&#x9c;"> <tab to=c>&#x0153; #LATIN SMALL LIGATURE OE
+0x9d &#x9d; <IMG SRC=X ALT="&#x9d;"> <!--&#x009d;--> #NOT USED
+0x9e &#x9e; <IMG SRC=X ALT="&#x9e;"> <!--&#x009e;--> #NOT USED
+0x9f &#x9f; <IMG SRC=X ALT="&#x9f;"> <tab to=c>&#x0178; #LATIN CAPITAL LETTER Y WITH DIAERESIS
+
+</PRE>
+</BODY>
+</HTML>
diff --git a/gnu/usr.bin/lynx/test/sgml.html b/gnu/usr.bin/lynx/test/sgml.html
index 551a20cda62..da3b0277452 100644
--- a/gnu/usr.bin/lynx/test/sgml.html
+++ b/gnu/usr.bin/lynx/test/sgml.html
@@ -38,7 +38,6 @@ original comment:
# The contents of this table are drawn from various sources, and
# are in the public domain.
#
-</pre>
<!-- Changes:
+ {"euro", 0x20AC}, /* EURO SIGN */
{"loz", 0x25CA}, /* LOZENGE */
diff --git a/gnu/usr.bin/lynx/test/unicode.html b/gnu/usr.bin/lynx/test/unicode.html
index 43ebeef3884..07ca28c109f 100644
--- a/gnu/usr.bin/lynx/test/unicode.html
+++ b/gnu/usr.bin/lynx/test/unicode.html
@@ -13,7 +13,6 @@
original comment:
-<pre>
# Author: John Cowan &lt;cowan@ccil.org&gt;
# Date: 25 July 1997
#
@@ -39,7 +38,6 @@ original comment:
# The contents of this table are drawn from various sources, and
# are in the public domain.
#
-</pre>
<!-- Changes:
+ {"euro", 0x20AC}, /* EURO SIGN */
diff --git a/gnu/usr.bin/lynx/userdefs.h b/gnu/usr.bin/lynx/userdefs.h
index a8fd721a3c1..22522e82273 100644
--- a/gnu/usr.bin/lynx/userdefs.h
+++ b/gnu/usr.bin/lynx/userdefs.h
@@ -9,7 +9,7 @@
* There are four sections to this document:
* Section 1. Things you MUST verify. Unix platforms use a configure
* script to provide sensible default values. If your site
- * has special requirements, that may not be sufficient.
+ * has special requirements, that may not be sufficient.
* For non-Unix platforms (e.g., VMS), there is no
* configure script, so the defaults here are more
* critical.
@@ -120,14 +120,15 @@
* XLOADIMAGE_COMMAND will be used as a default in src/HTInit.c
* for viewing image content types when the DECW$DISPLAY logical
* is set. Make it the foreign command for your system's X image
- * viewer (commonly, "xv"). Make it "exit" or something like that
- * if you don't have one. It can be anything that will handle GIF,
+ * viewer (commonly, "xv"). It can be anything that will handle GIF,
* TIFF and other popular image formats. Freeware ports of xv for
* VMS are available in the ftp://ftp.wku.edu/vms/unsupported and
* http://www.openvms.digital.com/cd/XV310A/ subdirectories. You
* must also have a "%s" for the filename. The default defined
* here can be overridden in lynx.cfg, or via the global or personal
* mailcap files.
+ * Make this NULL if you don't have such a viewer or don't want to
+ * use any default viewers for image types.
*/
#define XLOADIMAGE_COMMAND "xv %s"
@@ -305,16 +306,16 @@
* XLOADIMAGE_COMMAND will be used as a default in src/HTInit.c for
* viewing image content types when the DISPLAY environment variable
* is set. Make it the full path and name of the xli (also known as
- * xloadimage or xview) command, or other image viewer. Put 'echo' or
- * something like it here if you don't have a suitable viewer. It can
- * be anything that will handle GIF, TIFF and other popular image formats
+ * xloadimage or xview) command, or other image viewer. It can be
+ * anything that will handle GIF, TIFF and other popular image formats
* (xli does). The freeware distribution of xli is available in the
* ftp://ftp.x.org/contrib/ subdirectory. The shareware, xv, also is
* suitable. You must also have a "%s" for the filename; "&" for
* background is optional. The default defined here can be overridden
- * in lynx.cfg, or via the global or personal mailcap files. Note that
- * open is used as the default for NeXT, instead of the XLOADIMAGE_COMMAND
- * definition.
+ * in lynx.cfg, or via the global or personal mailcap files.
+ * Make this NULL if you don't have such a viewer or don't want to
+ * use any default viewers for image types. Note that open is used as
+ * the default for NeXT, instead of the XLOADIMAGE_COMMAND definition.
*/
#define XLOADIMAGE_COMMAND "xli %s &"
@@ -340,6 +341,29 @@
#define TEMP_SPACE "/tmp/"
/********************************
+ * Comment this line out to disable code that implements command logging
+ * and scripting.
+ */
+#define EXP_CMD_LOGGING 1
+
+/********************************
+ * Comment this line out to disable code that randomizes the names given to
+ * temporary files.
+ */
+#define EXP_RAND_TEMPNAME 1
+
+/********************************
+ * Uncomment this line to use 'mkstemp()' in preference to lynx's own code
+ * in fmt_tempname(). Caution: on a few older systems, mkstemp() is less
+ * secure than you would like. For this reason, we do not auto-configure it.
+ *
+ * Some things to watch out for: some broken implementations of mkstemp() may
+ * not necessarily try a different filename when they are called, making it
+ * impossible to rename the file. Others make world-writable files.
+ */
+#define USE_MKSTEMP
+
+/********************************
* Comment this line out to let the user enter his/her email address
* when sending a message. There should be no need to do this unless
* your mailer agent does not put in the From: field for you. (If your
@@ -347,7 +371,7 @@
* upgrade, because anonymous mail makes it far too easy for a user to
* spoof someone else's email address.)
*/
-#define NO_ANONYMOUS_EMAIL TRUE
+/*#define NO_ANONYMOUS_EMAIL TRUE */
/********************************
* LIST_FORMAT defines the display for local files when LONG_LIST
@@ -424,18 +448,18 @@
* STARTFILE is the default starting URL if none is specified
* on the command line or via a WWW_HOME environment variable;
* Lynx will refuse to start without a starting URL of some kind.
- * STARTFILE can be remote, e.g. http://www.w3.org/default.html ,
- * or local, e.g. file://localhost/PATH_TO/FILENAME ,
+ * STARTFILE can be remote, e.g., http://www.w3.org/default.html ,
+ * or local, e.g., file://localhost/PATH_TO/FILENAME ,
* where PATH_TO is replaced with the complete path to FILENAME
* using Unix shell syntax and including the device on VMS.
*
* Normally we expect you will connect to a remote site, e.g., the Lynx starting
* site:
*/
-#define STARTFILE "http://lynx.browser.org/"
+#define STARTFILE "http://www.OpenBSD.org/"
/*
* As an alternative, you may want to use a local URL. A good choice for this
- * is the user's home directory:
+ * is the user's home directory:
*#define STARTFILE "file://localhost/~/"
*
* Your choice of STARTFILE should reflect your site's needs, and be a URL that
@@ -451,11 +475,11 @@
* for this distribution (use SHELL syntax including the device
* on VMS systems).
* The default HELPFILE is:
- * http://www.crl.com/~subir/lynx/lynx_help/lynx_help_main.html
+ * http://www.trill-home.com/lynx/lynx_help/lynx_help_main.html
* This should be changed here or in lynx.cfg to the local path.
*/
-#define HELPFILE "http://www.crl.com/~subir/lynx/lynx_help/lynx_help_main.html"
-/* #define HELPFILE "file://localhost/PATH_TO/lynx_help/lynx_help_main.html" */
+/* #define HELPFILE "http://www.trill-home.com/lynx/lynx_help/lynx_help_main.html" */
+#define HELPFILE "file://localhost/usr/share/doc/html/lynx_help/lynx_help_main.html"
/*****************************
* DEFAULT_INDEX_FILE is the default file retrieved when the
@@ -715,27 +739,27 @@
#define PREFERRED_CHARSET ""
/*****************************
-* If MULTI_BOOKMARK_SUPPORT is set TRUE, and BLOCK_MULTI_BOOKMARKS (see
-* below) is FALSE, and sub-bookmarks exist, all bookmark operations will
-* first prompt the user to select an active sub-bookmark file or the
-* default bookmark file. FALSE is the default so that one (the default)
-* bookmark file will be available initially. The default set here can
-* be overridden in lynx.cfg. The user can turn on multiple bookmark
-* support via the 'o'ptions menu, and can save that choice as the startup
-* default via the .lynxrc file. When on, the setting can be STANDARD or
-* ADVANCED. If support is set to the latter, and the user mode also is
-* ADVANCED, the VIEW_BOOKMARK command will invoke a status line prompt at
-* which the user can enter the letter token (A - Z) of the desired bookmark,
+* If MULTI_BOOKMARK_SUPPORT is set to MBM_STANDARD or MBM_ADVANCED, and
+* BLOCK_MULTI_BOOKMARKS (see below) is FALSE, and sub-bookmarks exist, all
+* bookmark operations will first prompt the user to select an active
+* sub-bookmark file or the default bookmark file. MBM_OFF is the default so
+* that one (the default) bookmark file will be available initially. The
+* default set here can be overridden in lynx.cfg. The user can turn on
+* multiple bookmark support via the 'o'ptions menu, and can save that choice as
+* the startup default via the .lynxrc file. When on, the setting can be
+* STANDARD or ADVANCED. If support is set to the latter, and the user mode
+* also is ADVANCED, the VIEW_BOOKMARK command will invoke a status line prompt
+* at which the user can enter the letter token (A - Z) of the desired bookmark,
* or '=' to get a menu of available bookmark files. The menu always is
* presented in NOVICE or INTERMEDIATE mode, or if the support is set to
* STANDARD. No prompting or menu display occurs if only one (the startup
* default) bookmark file has been defined (define additional ones via the
-* 'o'ptions menu). The startup default, however set, can be overridden on
-* the command line via the -restrictions=multibook or the -anonymous or
-* -validate switches.
+* 'o'ptions menu). The startup default, however set, can be overridden on the
+* command line via the -restrictions=multibook or the -anonymous or -validate
+* switches.
*/
#ifndef MULTI_BOOKMARK_SUPPORT
-#define MULTI_BOOKMARK_SUPPORT FALSE
+#define MULTI_BOOKMARK_SUPPORT MBM_OFF
#endif /* MULTI_BOOKMARK_SUPPORT */
/*****************************
@@ -814,6 +838,12 @@
#define LYNX_SIG_FILE ".lynxsig"
/********************************
+ * BIBP_GLOBAL_SERVER is the default global server for bibp: links, used
+ * when a local bibhost or document-specified citehost is unavailable.
+ */
+#define BIBP_GLOBAL_SERVER "http://usin.org/"
+
+/********************************
* 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
@@ -895,7 +925,7 @@
* Showing the cursor is handy if you are a sighted user with a poor
* terminal that can't do bold and reverse video at the same time or
* at all. It also can be useful to blind users, as an alternative
- * or supplement to setting LINKS_AND_FORM_FIELDS_ARE_NUMBERED or
+ * or supplement to setting LINKS_AND_FIELDS_ARE_NUMBERED or
* LINKS_ARE_NUMBERED.
*
* The default defined here can be changed in lynx.cfg. It can be
@@ -940,7 +970,8 @@
* Note that this is currently not supported with the chartrans code,
* or rather it doesn't have an effect if translations for a display
* character set are taken from one of the *.tbl files in src/chrtrans.
- * One would have to modify the corresponding *.tbl file for this.
+ * One would have to modify the corresponding *.tbl file to change the
+ # 7-bit replacements for these characters.
*/
#define LY_UMLAUT
@@ -967,7 +998,7 @@
* Use lynxexec for commands or scripts that generate a screen output which
* should be held via a prompt to press <return> before returning to Lynx
* for display of the current document.
- * Use lynxprog for programs such as mail which do require a pause before
+ * Use lynxprog for programs such as mail which do not require a pause before
* Lynx restores the display of the current document.
*
* Execution scripts take the form of a standard
@@ -1003,56 +1034,20 @@
/* #define EXEC_LINKS */
/* #define EXEC_SCRIPTS */
-/**********
- * UNIX:
- * =====
- * CGI script support. Defining LYNXCGI_LINKS allows you to use the
- *
- * lynxcgi:path
- *
- * URL which allows lynx to access a cgi script directly without the need for
- * a http daemon. Redirection or mime support is not supported but just about
- * everything else is. If the path is not an executable file then the URL is
- * rewritten as file://localhost and passed to the file loader. This means
- * that if your http:html files are currently set up to use relative
- * addressing, you should be able to fire up your main page with lynxcgi:path
- * and everything should work as if you were talking to the http daemon.
- *
- * Note that TRUSTED_LYNXCGI directives must be defined in your lynx.cfg file
- * if you wish to place restrictions on source documents and/or paths for
- * lynxcgi links.
- *
- * The cgi scripts are called with a fork()/execve() sequence so you don't
- * have to worry about people trying to abuse the code. :-)
- *
- * George Lindholm (George.Lindholm@ubc.ca)
- *
- * VMS:
- * ====
- * The lynxcgi scheme, if enabled, yields an informational message regardless
- * of the path, and use of the freeware OSU DECthreads server as a local
- * script server is recommended instead of lynxcgi URLs. Uncomment the
- * following line to define LYNXCGI_LINKS, and when running Lynx, enter
- * lynxcgi:advice as a G)oto URL for more information and links to the
- * OSU server distribution.
- */
-/* #define LYNXCGI_LINKS */
-
#if defined(EXEC_LINKS) || defined(EXEC_SCRIPTS)
/**********
- * if ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS
- * is defined then the user will be able to change
- * the execution status within the options screen.
+ * if ENABLE_OPTS_CHANGE_EXEC is defined, the user will be able to change
+ * the execution status within the Options Menu.
*/
-/* #define ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
+/* #define ENABLE_OPTS_CHANGE_EXEC */
/**********
- * if NEVER_ALLOW_REMOTE_EXEC is defined then local execution of
- * scripts or lynxexec and lynxprog URLs will only be implemented
- * from HTML files that were accessed via a "file://localhost/" URL,
- * and the options menu for "L)ocal executions links" will only
- * allow toggling between "ALWAYS OFF" and "FOR LOCAL FILES ONLY".
+ * if NEVER_ALLOW_REMOTE_EXEC is defined,
+ * local execution of scripts or lynxexec & lynxprog URLs will be implemented
+ * only from HTML files that were accessed via a "file://localhost/" URL
+ * and the Options Menu for "Local executions links" will allow toggling
+ * only between "ALWAYS OFF" and "FOR LOCAL FILES ONLY".
*/
/* #define NEVER_ALLOW_REMOTE_EXEC */
@@ -1077,24 +1072,62 @@
* LOCAL_EXECUTION_LINKS_ALWAYS_ON will be FALSE
* if NEVER_ALLOW_REMOTE_EXEC has been defined.
*
- * if LOCAL_EXECUTION_LINKS_ALWAYS_OFF_FOR_ANONYMOUS is
- * true all execution links will be disabled when the
- * -anonymous command line option is used. Anonymous
- * users are not allowed to change the execution options
- * from within the Lynx options menu so you might be able
- * to use this option to enable execution links and set
- * LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE to TRUE to
- * give anonymous execution link capability without compromising
- * your system (see comments about TRUSTED_EXEC rules in
- * lynx.cfg for more information).
- *
+ * if LOCAL_EXECUTION_LINKS_ALWAYS_OFF_FOR_ANONYMOUS is true,
+ * all execution links will be disabled when the -anonymous
+ * command-line option is used. Anonymous users are not allowed
+ * to change the execution options from within the Lynx Options Menu,
+ * so you might be able to use this option to enable execution links
+ * and set LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE to TRUE
+ * to give anonymous execution-link capability without compromising
+ * your system (see comments about TRUSTED_EXEC rules in lynx.cfg ).
*/
+
#define LOCAL_EXECUTION_LINKS_ALWAYS_ON FALSE
#define LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE FALSE
#define LOCAL_EXECUTION_LINKS_ALWAYS_OFF_FOR_ANONYMOUS FALSE
#endif /* defined(EXEC_LINKS) || defined(EXEC_SCRIPTS) */
+/**********
+ * *** This is for those -- e.g. DOS users -- who do not have configure;
+ * *** others should use the configure switch --enable-lynxcgi-links .
+ *
+ * UNIX:
+ * =====
+ * CGI script support. Defining LYNXCGI_LINKS allows you to use the
+ *
+ * lynxcgi:path
+ *
+ * URL which allows lynx to access a cgi script directly without the need for
+ * a http daemon. Redirection is not supported but just about everything
+ * else is. If the path is not an executable file then the URL is
+ * rewritten as file://localhost and passed to the file loader. This means
+ * that if your http:html files are currently set up to use relative
+ * addressing, you should be able to fire up your main page with lynxcgi:path
+ * and everything should work as if you were talking to the http daemon.
+ *
+ * Note that TRUSTED_LYNXCGI directives must be defined in your lynx.cfg file
+ * if you wish to place restrictions on source documents and/or paths for
+ * lynxcgi links.
+ *
+ * The cgi scripts are called with a fork()/execve() sequence so you don't
+ * have to worry about people trying to abuse the code. :-)
+ *
+ * George Lindholm (George.Lindholm@ubc.ca)
+ *
+ * VMS:
+ * ====
+ * The lynxcgi scheme, if enabled, yields an informational message regardless
+ * of the path, and use of the freeware OSU DECthreads server as a local
+ * script server is recommended instead of lynxcgi URLs. Uncomment the
+ * following line to define LYNXCGI_LINKS, and when running Lynx, enter
+ * lynxcgi:advice as a G)oto URL for more information and links to the
+ * OSU server distribution.
+ */
+#ifndef HAVE_CONFIG_H
+/* #define LYNXCGI_LINKS */
+#endif
+
/*********************************
* MAIL_SYSTEM_ERROR_LOGGING will send a message to the owner of
* the information if there is one, every time
@@ -1107,6 +1140,16 @@
#define MAIL_SYSTEM_ERROR_LOGGING FALSE /*mail a message for every error?*/
/*********************************
+ * If a document cannot be accessed, and MAIL_SYSTEM_ERROR_LOGGING
+ * is on and would send a message to the owner of the information,
+ * but no owner is known, then the message will be sent to ALERTMAIL
+ * instead - if it is defined as a non-empty email address.
+ *
+ * NOTE: This can generate A REAL LOT of mail, be warned!!!
+ */
+/* #define ALERTMAIL "webmaster@localhost" */ /*error recipient if no owner*/
+
+/*********************************
* If CHECKMAIL is set to TRUE, the user will be informed (via a status line
* message) about the existence of any unread mail at startup of Lynx, and
* will get status line messages if subsequent new mail arrives. If a jumps
@@ -1127,27 +1170,22 @@
#define CHECKMAIL FALSE /* report unread and new mail messages */
/*********************************
- * VI_KEYS can be changed in lynx.cfg and can be turned on by the user
- * in the options screen or the .lynxrc file. This is just the default.
+ * Vi or Emacs movement keys. These are defaults,
+ * which can be changed in lynx.cfg , the Options Menu or .lynxrc .
*/
-#define VI_KEYS_ALWAYS_ON FALSE /* familiar h,j,k, & l */
+#define VI_KEYS_ALWAYS_ON FALSE /* familiar h j k l */
+#define EMACS_KEYS_ALWAYS_ON FALSE /* familiar ^N ^P ^F ^B */
/*********************************
- * EMACS_KEYS can be changed in lynx.cfg and can be turned on by the user
- * in the options screen or the .lynxrc file. This is just the default.
- */
-#define EMACS_KEYS_ALWAYS_ON FALSE /* familiar ^N, ^P, ^F, ^B */
-
-/*********************************
- * DEFAULT_KEYPAD_MODE specifies whether by default the user
- * has numbers that work like arrows or else numbered links
- * DEFAULT KEYPAD MODE may be set to
- * NUMBERS_AS_ARROWS or
- * LINKS_ARE_NUMBERED or
- * LINKS_AND_FORM_FIELDS_ARE_NUMBERED
- *
- * This default setting can be overridden in lynx.cfg (but not to
- * the third value), and it can be changed at run time by the user.
+ * DEFAULT_KEYPAD_MODE may be set to NUMBERS_AS_ARROWS
+ * or LINKS_ARE_NUMBERED
+ * or LINKS_AND_FIELDS_ARE_NUMBERED
+ * to specify whether numbers (e.g. [10]) appear before all links,
+ * allowing immediate access by entering the number on the keyboard,
+ * or numbers on the numeric key-pad work like arrows;
+ * the 3rd option causes form fields also to be preceded by numbers.
+ * The first two options (but not the last) can be changed in lynx.cfg
+ * and all three can be changed via the Options Menu.
*/
#define DEFAULT_KEYPAD_MODE NUMBERS_AS_ARROWS
@@ -1221,6 +1259,55 @@
#define QUIT_DEFAULT_YES TRUE
/********************************
+ * If TEXT_SUBMIT_CONFIRM_WANTED is defined (to anything), the user will be
+ * prompted for confirmation before Lynx submits a form with only one input
+ * field (of type text) to the server, after the user has pressed <return>
+ * or <enter> on the field. Since the is no other way such as a "submit"
+ * button to submit, normally the form gets submitted automatically in this
+ * case, but some users may find this surprising and expect <return> to just
+ * move to the next link as for other text entry fields.
+ */
+/* #define TEXT_SUBMIT_CONFIRM_WANTED */
+
+/********************************
+ * If TEXTFIELDS_MAY_NEED_ACTIVATION is defined (to anything),
+ * the option TEXTFIELDS_NEED_ACTIVATION in lynx.cfg or the command
+ * line option -tna can be used to require explicit activation
+ * before text input fields can be changed with the built-in line
+ * editor.
+ */
+
+#define TEXTFIELDS_MAY_NEED_ACTIVATION
+
+/********************************
+ * The following three definitions control some aspects of extended
+ * textarea handling. TEXTAREA_EXPAND_SIZE is the number of new empty
+ * lines that get appended at the end of a textarea by a GROWTEXTAREA
+ * key. If TEXTAREA_AUTOGROW is defined (to anything), <return> or
+ * <enter> in the last line of a textarea automatically extends the
+ * area by adding a new line. If TEXTAREA_AUTOEXTEDIT is defined (to
+ * anything), a key mapped to DWIMEDIT will invoke the external editor
+ * like EDITTEXTAREA when used in a text input field. Comment those
+ * last two definitions out to disable the corresponding behavior.
+ * See under KEYMAP in lynx.cfg for mapping keys to GROWTEXTAREA or
+ * DWIMEDIT actions.
+ */
+#define TEXTAREA_EXPAND_SIZE 5
+#define TEXTAREA_AUTOGROW
+#define TEXTAREA_AUTOEXTEDIT
+
+/********************************
+ * If BUILTIN_SUFFIX_MAPS is defined (to anything), default mappings
+ * for file extensions (aka suffixes) will be compiled in (see
+ * src/HTInit.c). By removing the definition, the default mappings
+ * are suppressed except for a few very basic ones for text/html.
+ * See GLOBAL_EXTENSION_MAP, PERSONAL_EXTENSION_MAP above and SUFFIX,
+ * SUFFIX_ORDER in lynx.cfg for other ways to map file extensions.
+ */
+
+#define BUILTIN_SUFFIX_MAPS
+
+/********************************
* These definitions specify files created or used in conjunction
* with traversals. See CRAWL.ANNOUNCE for more information.
*/
@@ -1241,6 +1328,20 @@
/****************************************************************
+ * DEFAULT_VISITED_LINKS may be set to one or more of
+ * VISITED_LINKS_AS_FIRST_V
+ * VISITED_LINKS_AS_TREE
+ * VISITED_LINKS_AS_LATEST
+ * VISITED_LINKS_REVERSE
+ * to change the organization of the Visited Links page.
+ *
+ * (Not all combinations are meaningful; see src/LYrcFile.c for a list
+ * in the visited_links_tbl table).
+ */
+#define DEFAULT_VISITED_LINKS (VISITED_LINKS_AS_LATEST | VISITED_LINKS_REVERSE)
+
+
+/****************************************************************
* Section 3. Things that you should not change until you
* have a good knowledge of the program
*/
@@ -1250,25 +1351,15 @@
* the version definition with the Project Version on checkout. Just
* ignore it. - kw */
/* $Format: "#define LYNX_VERSION \"$ProjectVersion$\""$ */
-#define LYNX_VERSION "2.8.2rel.1"
+#define LYNX_VERSION "2.8.4rel.1"
#define LYNX_WWW_HOME "http://lynx.browser.org/"
-#define LYNX_WWW_DIST "http://www.slcc.edu/lynx/current/"
-#define LYNX_RELEASE FALSE
+#define LYNX_WWW_DIST "http://lynx.isc.org/current/"
/* $Format: "#define LYNX_DATE \"$ProjectDate$\""$ */
-#define LYNX_DATE "Tue, 01 Jun 1999 19:30:15 -0600"
+#define LYNX_DATE "Tue, 17 Jul 2001 14:04:37 -0700"
#define LYNX_DATE_OFF 5 /* truncate the automatically-generated date */
#define LYNX_DATE_LEN 11 /* truncate the automatically-generated date */
-#define LYNX_RELEASE_DATE "1998"
-
-#ifndef MAXINT
-#define MAXINT 2147483647 /* max integer */
-#endif /* !MAXINT */
-#define MAXBASE 100 /* max length of base directory */
-#define MAXHIGHLIGHT 160 /* max length of highlighted text */
-#define MAXTARGET 130 /* max length of target string */
+
#define LINESIZE 1024 /* max length of line to read from file */
-#define MAXFNAME 1280 /* max filename length DDD/FILENAME.EXT */
-#define MAXCOMMAND MAXFNAME /* max length of command should be the same */
#define MAXHIST 1024 /* max links we remember in history */
#define MAXLINKS 1024 /* max links on one screen */
@@ -1277,6 +1368,9 @@
#endif
#define MAXCHARSETS 60 /* max character sets supported */
+#define TRST_MAXROWSPAN 10000 /* max rowspan accepted by TRST code */
+#define TRST_MAXCOLSPAN 1000 /* max colspan and COL/COLGROUP span accepted */
+#define SAVE_TIME_NOT_SPACE /* minimize number of some malloc calls */
/* Win32 may support more, but old win16 helper apps may not. */
#if defined(__DJGPP__) || defined(_WINDOWS)
@@ -1304,9 +1398,21 @@
#else
#ifdef DOSPATH
-/* Something has to be defined for this or we don't compile. */
+
+#ifdef _WINDOWS
+#ifdef USE_ALT_BLAT_MAILER
+#define SYSTEM_MAIL "BLAT"
+#define SYSTEM_MAIL_FLAGS ""
+#else
+#define SYSTEM_MAIL "BLATJ"
+#define SYSTEM_MAIL_FLAGS ""
+#endif
+#else
+/* have to define something... */
#define SYSTEM_MAIL "sendmail"
#define SYSTEM_MAIL_FLAGS "-t -oi"
+#endif
+
/*
** The following executables may be used at run time. Unless you change
** the definitions to include the full directories, they will be sought
@@ -1315,10 +1421,9 @@
** elsewhere.
** Currently, if compiled with -DUSE_ZLIB and without -DDIRED_SUPPORT
** (default), the following from the list below are required:
-** COPY_PATH (cp.exe) - needed for file downloading
** MV_PATH (mv.exe) - for bookmark handling (DEL_BOOKMARK command)
-** UNCOMPRESS_PATH, BZIP2_PATH - for automatic decompression of files in
-** these formats
+** UNCOMPRESS_PATH - for automatic decompression of files in Unix
+** compress format
** TELNET_PATH, TN3270_PATH, RLOGIN_PATH - for access to "telnet:",
** "tn3270:", and "rlogin:" URLs.
** If they are not defined right, the corresponding operations may fail
@@ -1341,7 +1446,8 @@
#define MKDIR_PATH "mkdir"
#define MV_PATH "mv"
#define RM_PATH "rm"
-#define COPY_PATH "cp"
+/* COPY_PATH is not required for DOSPATH any more (implemented directly) */
+/* #define COPY_PATH "cp" */
#define CHMOD_PATH "chmod"
#define TELNET_PATH "telnet"
#define TN3270_PATH "tn3270"
@@ -1357,6 +1463,59 @@
#endif /* VMS */
+/*****************************
+ * SUPPORT_MULTIBYTE_EDIT provides better support of CJK characters to
+ * Lynx's Line Editor. JIS X0201 Kana is partially supported. The
+ * reason why I didn't support it fully is I think supporting it is not
+ * required so much and I don't have an environment to test it. - TH
+ */
+#define SUPPORT_MULTIBYTE_EDIT
+
+/*****************************
+ * SUPPORT_CHDIR provides CD command (bound to 'C' by default). It allows
+ * changing directory to arbitrary location (if OS allows them). If dired is
+ * enabled, user will be able to visit any directory and view any file allowed
+ * according to file permissions or ACLs.
+ */
+#define SUPPORT_CHDIR
+
+/*****************************
+ * MARK_HIDDEN_LINKS controls whether hidden links are shown with the title
+ * set by the HIDDEN_LINK_MARKER string in lynx.cfg
+ */
+#define MARK_HIDDEN_LINKS
+
+/*****************************
+ * USE_TH_JP_AUTO_DETECT, CONV_JISX0201KANA_JISX0208KANA,
+ * and KANJI_CODE_OVERRIDE are the macros for Japanese. - TH
+ */
+/*****************************
+ * USE_TH_JP_AUTO_DETECT enables a new Japanese charset detection routine.
+ * With the old detection strategy, Lynx always thought a document was
+ * written in mixture of three kanji codes (JIS, EUC and SJIS). The new
+ * strategy is for Lynx to first assume the document is written in one code
+ * or JIS + one other kanji code (JIS, EUC, SJIS, EUC+JIS and SJIS+JIS).
+ * The first assumption is usually correct, but if the assumption is wrong,
+ * Lynx falls back to the old assumption of the three kanji codes mixed.
+ */
+#define USE_TH_JP_AUTO_DETECT
+
+/*****************************
+ * If CONV_JISX0201KANA_JISX0208KANA is set, Lynx will convert
+ * JIS X0201 Kana to JIS X0208 Kana, i.e., convert half-width kana
+ * to full-width.
+ */
+#define CONV_JISX0201KANA_JISX0208KANA
+
+/*****************************
+ * Uncomment the following line to enable the kanji code override routine.
+ * The code can be changed by pressing ^L. More precisely, this allows
+ * the user to override the assumption about the kanji code for the document
+ * which Lynx has made on the basis of a META tag and HTTP response.
+ */
+/*#define KANJI_CODE_OVERRIDE */
+
+
/****************************************************************
* Section 4. Things you MUST check only if you plan to use Lynx
* in an anonymous account (allow public access to Lynx).
@@ -1410,7 +1569,10 @@
/*******************************
* set to FALSE if you don't want users of your anonymous
- * account to be able to read news
+ * account to be able to read news OR post news articles.
+ * These flags apply to "news", "nntp", "newspost", and "newsreply"
+ * URLs, but not to "snews", "snewspost", or "snewsreply"
+ * in case they are supported.
*/
#define CAN_ANONYMOUS_INSIDE_DOMAIN_READ_NEWS TRUE
#define CAN_ANONYMOUS_OUTSIDE_DOMAIN_READ_NEWS FALSE
@@ -1425,6 +1587,7 @@
* set to FALSE if you don't want users of your anonymous
* account to be able to goto particular URLs.
*/
+#define CAN_ANONYMOUS_GOTO_BIBP TRUE /* BIBP maps to HTTP */
#define CAN_ANONYMOUS_GOTO_CSO FALSE
#define CAN_ANONYMOUS_GOTO_FILE FALSE
#define CAN_ANONYMOUS_GOTO_FINGER TRUE
@@ -1470,6 +1633,48 @@
*/
#define CAN_ANONYMOUS_PRINT FALSE
+/*******************************
+ * set to FALSE if users with anonymous restrictions should
+ * not be able to view configuration file (lynx.cfg) info
+ * via special LYNXCFG: links. (This does not control access
+ * to lynx.cfg as a normal file, e.g., through a "file:" URL,
+ * if other restrictions allow that.)
+ */
+#define CAN_ANONYMOUS_VIEW_LYNXCFG_INFO FALSE
+
+/*******************************
+ * set to FALSE if users with anonymous restrictions should
+ * not be able to view extended configuration file (lynx.cfg)
+ * info @@@ or perform special config info functions (reloading
+ * at run-time) via special LYNXCFG: links @@@. This only applies
+ * if the lynxcfg_info" restriction controlled by the previous
+ * item is not in effect and if Lynx has been compiled without
+ * NO_CONFIG_INFO defined (--disable-config-info wasn't used
+ * if Lynx was built with the autoconf configure script).
+ * The extended info may include details on configuration file
+ * names and location and links for reading the files, as well
+ * as information on nesting of included configuration files.
+ */
+#define CAN_ANONYMOUS_VIEW_LYNXCFG_EXTENDED_INFO FALSE
+
+/*******************************
+ * set to FALSE if users with anonymous restrictions should
+ * not be able to view information on compile time configuration
+ * via special LYNXCOMPILEOPTS: links. This only applies
+ * if the autoconf configure script was used to build Lynx
+ * AND --disable-config-info wasn't used, otherwise this
+ * special URL scheme isn't recognized anyway.
+ */
+#define CAN_ANONYMOUS_VIEW_COMPILEOPTS_INFO FALSE
+
+/*******************************
+ * set to FALSE if you don't want users of your anonymous
+ * account to be able to 'g'oto special URLs for showing
+ * configuration info (LYNXCFG: and LYNXCOMPILEOPTS:) if
+ * they are otherwise allowed.
+ */
+#define CAN_ANONYMOUS_GOTO_CONFIGINFO FALSE
+
/*****************************
* Be sure you have read about and set defines above in Sections
* 1, 2 and 3 that could affect Lynx in an anonymous account,