Description: Git master branch of Debian's w3m
Origin: https://anonscm.debian.org/cgit/collab-maint/w3m.git
diff --git a/Bonus/goodict.cgi b/Bonus/goodict.cgi
index 8f443c1..5fb6581 100755
--- a/Bonus/goodict.cgi
+++ b/Bonus/goodict.cgi
@@ -1,14 +1,20 @@
#!/usr/bin/perl
# ~/.w3m/urimethodmap
-# e: file:/cgi-bin/goodict.cgi?%s
-# w: file:/cgi-bin/goodict.cgi?%s
-# j: file:/cgi-bin/goodict.cgi?%s
+# e: file:/cgi-bin/goodict.cgi?%s Englich-Japanese
+# w: file:/cgi-bin/goodict.cgi?%s Japanese-English
+# j: file:/cgi-bin/goodict.cgi?%s Japanese
+# a: file:/cgi-bin/goodict.cgi?%s All
+#
+# e:0:word start with word
+# e:1:word perfect match
+# e:2:word end with word
+# e:3:word search body text
+# e:6:word search title
+# e:word perfect match
-use NKF;
-#$mode = 0; # substring
-$mode = 1; # perfect match
-#$mode = 3; # search body text
+use Encode;
+use Encode::Guess qw/euc-jp utf8/;
$url = "http://dictionary.goo.ne.jp";
$_ = $ENV{"QUERY_STRING"};
if (/^e:/) {
@@ -17,14 +23,22 @@ if (/^e:/) {
$kind = 'je';
} elsif (/^j:/) {
$kind = 'jn';
+} elsif (/^a:/) {
+ $kind = 'all'
+}
+s@^[ewja]:@@ && s@^//@@ && s@/$@@;
+if (/^([01236]):/) {
+ $mode=$1;
+ s/^[01236]://;
+}else{
+ $mode="1";
}
-s@^[ewjs]:@@ && s@^//@@ && s@/$@@;
if ($_) {
s/\+/ /g;
s/%([\da-f][\da-f])/pack('C', hex($1))/egi;
- $_ = nkf("-e", $_);
+ $_ = encode("utf8", decode("Guess", $_));
s/[\000-\040\+:#?&%<>"\177-\377]/sprintf('%%%02X', unpack('C', $&))/eg;
- $url .= "/search.php?MT=$_&kind=$kind&mode=$mode";
+ $url .= "/srch/$kind/$_/m$mode"."u/";
} else {
$input = "w3m-control: GOTO_LINK";
}
diff --git a/ChangeLog b/ChangeLog
index 88358ef..e166aa5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,1000 @@
+2016-05-11 Tatsuya Kinoshita <tats@debian.org>
+
+ * config.guess, config.sub:
+ Update config.* with autotools-dev 20160430.1.
+
+2016-04-14 Tatsuya Kinoshita <tats@debian.org>
+
+ * doc-de/README.func, doc-jp/README.func, doc/README.func:
+ * w3m-doc/sample/keymap.cgi: Cleanup obsolete INIT_MAILCAP.
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=820902
+
+ * NEWS: Update NEWS.
+
+2016-04-08 Tatsuya Kinoshita <tats@debian.org>
+
+ * libwc/johab.c: Fix segfault on bogus text for wc_N_to_johab1.
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=820373
+
+2016-04-07 Tatsuya Kinoshita <tats@debian.org>
+
+ * libwc/map/big5_ucs.map, libwc/map/cns11643_ucs.map:
+ * libwc/map/gb12345_ucs.map, libwc/map/gb2312_ucs.map:
+ * libwc/map/gbk_ucs.map, libwc/map/hkscs_ucs.map:
+ * libwc/map/jisx0208x0212x0213_ucs.map, libwc/map/ksx1001_ucs.map:
+ * libwc/map/sjis_ext_ucs.map, libwc/map/uhc_ucs.map, libwc/ucs.c:
+ * libwc/ucs.map: Fix segfault on bogus text for wc_any_to_ucs.
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=820162
+
+2016-04-03 Tatsuya Kinoshita <tats@debian.org>
+
+ * doc/FAQ.html, doc/MANUAL.html: Update English documents.
+
+2016-04-03 Markus Hiereth <markus.hiereth@freenet.de>
+
+ * doc/FAQ.html, doc/MANUAL.html: Update English documents.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=772341#25
+
+2016-04-02 Tatsuya Kinoshita <tats@debian.org>
+
+ * configure, configure.ac, doc-de/README.func, scripts/Makefile.in:
+ * scripts/w3mhelp-funcdesc.de.pl.in, scripts/w3mhelp.cgi.in:
+ Support German translated help messages (translation is in progress).
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=765682
+
+ * doc-jp/w3m.1, doc/w3m.1: Update manpage footers to w3m 0.5.3.
+
+ * doc-jp/MANUAL.html, doc-jp/w3m.1, w3m-doc/outline.html.in:
+ * w3mhelp-lynx_ja.html.in, w3mhelp-w3m_ja.html.in:
+ Update Japanese documents for extbrowser4..9.
+
+2016-04-02 Justin B Rye <justin.byam.rye@gmail.com>
+
+ * doc/FAQ.html, doc/MANUAL.html, doc/README.func, doc/menu.submenu:
+ * main.c, menu.c, scripts/w3mhelp-funcdesc.ja.pl.in:
+ * scripts/w3mhelp.cgi.in, w3mhelp-lynx_en.html.in:
+ * w3mhelp-w3m_en.html.in: English fixes.
+ cf. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=772341#15
+ Origin: https://lists.debian.org/debian-l10n-english/2014/12/msg00002.html
+ Origin: https://lists.debian.org/debian-l10n-english/2014/12/msg00030.html
+ Origin: https://lists.debian.org/debian-l10n-english/2015/02/msg00011.html
+
+2016-03-30 Leo Famulari <leo@famulari.name>
+
+ * url.c: Disable RC4.
+ Origin: http://git.savannah.gnu.org/cgit/guix.git/commit/?id=62339e2d493bf87a3aabe12e45458581e9705d83
+
+2016-03-29 Tatsuya Kinoshita <tats@debian.org>
+
+ * url.c: Fix variable is reassigned a value before the old one has
+ been used.
+
+ * regex.c: Fix printf format specifier mismatch when REGEX_DEBUG.
+
+ * w3mimg/fb/fb.c: Fix invalid braces when not Linux or FreeBSD.
+
+ * local.c: Fix uninitialized variable when not HAVE_PUTENV.
+
+ * w3mimgdisplay.c: Fix realloc mistake for DrawImage.
+
+ * file.c: Fix mistake of unescape spaces for _doFileCopy.
+ cf. [w3m-dev-en 00751], [w3m-dev-en 00752] on 2002-06-09
+
+ * url.c: Fix style of array index is used before limits check.
+ Bug: https://sourceforge.net/p/w3m/feature-requests/25/
+
+2016-03-22 Tatsuya Kinoshita <tats@debian.org>
+
+ * menu.c, proto.h: Fix build failure when not USE_MOUSE for sgrmouse.
+ cf. https://twitter.com/naota344/status/711541592167854081
+
+2016-03-20 Tatsuya Kinoshita <tats@debian.org>
+
+ * rc.c: Fix reverse ordered config parameters.
+
+2016-03-19 Tatsuya Kinoshita <tats@debian.org>
+
+ * doc/FAQ.html: Update FAQ for extbrowser.
+
+2016-03-14 Tatsuya Kinoshita <tats@debian.org>
+
+ * po/de.po, po/ja.po, po/w3m.pot, po/zh_CN.po, po/zh_TW.po, rc.c:
+ Update PO strings for extbrowser2..9.
+
+2016-03-13 Tatsuya Kinoshita <tats@debian.org>
+
+ * acinclude.m4, configure:
+ Set firefox instead of mozilla to default browser.
+
+ * po/Makefile.in.in, po/de.po, po/ja.po, po/w3m.pot, po/zh_CN.po:
+ * po/zh_TW.po: Update PO strings for extbrowser4..9.
+
+ * doc-jp/MANUAL.html, doc/MANUAL.html, fm.h, main.c, rc.c:
+ Add extbrowser4, extbrowser5, ..., and extbrowser9.
+ e.g.
+ - extbrowser8 url=%s && printf %s "$url" | xsel && printf %s "$url" | xsel -b
+ - extbrowser9 mpv %s &
+ cf. https://github.com/spcmd/w3m
+
+2016-02-28 Tatsuya Kinoshita <tats@debian.org>
+
+ * menu.c: Fix SIGFPE for ACCESSKEY.
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=779092
+
+ * doc/README.func, main.c: Typo fix for ACCESSKEY.
+ cf. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=779092#5
+
+2015-12-20 Franz Thoma <franz.thoma@tngtech.com>
+
+ * w3mimg/x11/x11_w3mimg.c: Fix semi-transparent artifacts in w3m-img
+ when used with 32-bit color (e.g. urxvt).
+ imlib_render_image_on_drawable_at_size() tended to leave nasty
+ semi-transparent artifacts in 32-bit mode. Apparently, resizing an
+ image in 32-bit mode affects the alpha channel even if there is no
+ transparency in the image. With this patch, resizing is done in
+ 24-bit mode (or whatever depth the original image has) before
+ converting the image to 32-bit and rendering it on the display.
+ Origin: https://gist.github.com/fmthoma/f76a1b44e00d5ca972bb
+ cf. https://github.com/hut/ranger/issues/86#issuecomment-166027119
+
+2015-12-17 Tatsuya Kinoshita <tats@debian.org>
+
+ * w3mimg/x11/x11_w3mimg.c:
+ Wrap render_pixbuf_to_pixmap_32() in USE_GTK2.
+
+2015-12-17 Araki Ken <arakiken@users.sf.net>
+
+ * w3mimg/x11/x11_w3mimg.c:
+ w3mimgdisplay supports 32 bit depth screen. (e.g. gnome-terminal)
+ Origin: https://bitbucket.org/arakiken/w3m/commits/f9c22db8cfd1aaba9bb7301ef9ba51ed88d8bb40
+
+2015-12-17 Tatsuya Kinoshita <tats@debian.org>
+
+ * w3mimg/x11/x11_w3mimg.c:
+ Revert "Fix handling visuals and colormaps incorrectly".
+ This reverts commit e24b4064daf3e022e370788a8c7267db40c37dda.
+
+2015-11-19 Tatsuya Kinoshita <tats@debian.org>
+
+ * fm.h: Accept cookies by default.
+
+ * fm.h: Set argv_is_url to 1 by default.
+ Bug-Arch: https://bugs.archlinux.org/task/47102
+
+2015-11-18 Tatsuya Kinoshita <tats@debian.org>
+
+ * config.guess, config.sub:
+ Update config.* with autotools-dev 20150820.1.
+
+2015-11-11 Mingye Wang (Arthur2e5) <arthur200126@gmail.com>
+
+ * po/LINGUAS, po/zh_CN.po, po/zh_TW.po:
+ Add zh_CN and zh_TW translations.
+ Please note that the zh_TW translation is machine-converted using
+ OpenCC from zh_CN, and needs to be further polished by actual zh_TW
+ speakers.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=804732#10
+
+2015-10-24 BwackNinja <BwackNinja@gmail.com>
+
+ * w3mimg/x11/x11_w3mimg.c:
+ Fix handling visuals and colormaps incorrectly.
+ cf. https://github.com/hut/ranger/issues/86
+ Origin: https://gist.github.com/BwackNinja/60a344730170f9ce2163
+ Bug-Arch: https://bugs.archlinux.org/task/46836
+ Bug: https://sourceforge.net/p/w3m/patches/72/
+
+2015-10-10 Tatsuya Kinoshita <tats@debian.org>
+
+ * cookie.c: Remove incomplete special_domain tests.
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=385702
+
+2015-10-04 Gaetan Bisson <bisson@archlinux.org>
+
+ * scripts/w3mhelp.cgi.in: Do not use defined(%hash).
+ Origin: https://projects.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/w3m&id=d9e0a4f0b461c9e2177cd9e64a10581386650503
+ Bug-Arch: https://bugs.archlinux.org/task/45608
+
+2015-09-06 Tatsuya Kinoshita <tats@debian.org>
+
+ * file.c: Do not use C99-style comments.
+
+2015-09-06 David Crosby <dave@dafyddcrosby.com>
+
+ * file.c: Mitigate issue #16 found by @kcwu.
+ * table.c: Fix stack overflow found by @kcwu.
+ Origin: https://github.com/dafyddcrosby/sw3m
+ Bug-sw3m: https://github.com/dafyddcrosby/sw3m/issues/16
+
+2015-08-21 Tatsuya Kinoshita <tats@debian.org>
+
+ * doc-jp/keymap.lynx, doc/keymap.lynx: Fix unknown key.
+ Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/265144
+ Bug: https://sourceforge.net/p/w3m/bugs/48/
+
+2015-08-11 David Crosby <dave@dafyddcrosby.com>
+
+ Fix resource leaks, dead assignments, divide-by-zero, and so on.
+ Origin: https://github.com/dafyddcrosby/sw3m
+
+ * buffer.c: Check for presence of prevl before using.
+
+ * html.h: Adjust UFclose to remove false positive of CWE-481.
+
+ * ftp.c: Move sockent for splint.
+
+ * cookie.c: Use unsigned int for max_count.
+
+ * libwc/iso2022.c: Add missing comparision that made if always true.
+
+ * Str.c: Use fgetc in while loops, use int instead of char.
+
+ * mailcap.c: Adjust len to size_t.
+
+ * history.c: Check return value of rename.
+
+ * main.c: Adjust while loop.
+
+ * news.c: Check dup call for errors.
+
+ * file.c: Remove unused value.
+
+ * ftp.c: dup can give a negative value.
+
+ * main.c: Use int for c.
+
+ * table.c: Initialize new_tabwidth at declaration.
+
+ * local.c: Remove overflow on readlink.
+
+ * anchor.c, file.c, istream.c, main.c, menu.c, rc.c, table.c, terms.c:
+ * url.c: Remove dead assignments flagged by Clang static analysis.
+
+ * w3mbookmark.c:
+ Move fclose to fix dereference after null check (Coverity).
+
+ * file.c: Fix resource leak in AuthDigestCred.
+
+ * buffer.c: Fix resource leak in readBufferCache.
+
+ * cookie.c: Fix resource leak in load_cookies.
+
+ * frame.c: Fix resource leak.
+
+ * w3mhelperpanel.c: Fix resource leak.
+
+ * w3mbookmark.c: Fix resource leak and a null return value dereference.
+
+ * linein.c: Fix a divide-by-zero.
+
+ * cookie.c: Change total_dot_number to unsigned int.
+
+ * cookie.c: Free tmp.
+
+ * local.c: Remove unreachable return.
+
+2015-08-10 Alan Grow <alangrow@gmail.com>
+
+ * url.c (HTTPrequest):
+ - Use Content-Type instead of Content-type.
+ - Use Content-Length instead of Content-length.
+ Origin: https://github.com/acg/w3m/commit/5946c2784d4eae46ec06e52390e43a874b3395fc
+
+2015-08-09 Egmont Koblinger <egmont@users.sourceforge.net>
+
+ * terms.c: Support sgrmouse for skip_escseq.
+ * menu.c: Adjust comments for keymaps.
+ Origin: https://sourceforge.net/p/w3m/patches/65/#e2aa
+
+2015-08-09 Tatsuya Kinoshita <tats@debian.org>
+
+ * keybind_lynx.c: Support sgrmouse for Lynx-like key binding.
+ cf. https://sourceforge.net/p/w3m/patches/65/
+
+2015-08-09 IWAMOTO Kouichi <sue@iwmt.org>
+
+ * menu.c: Support SGR style mouse handler for menu.
+ cf. https://github.com/tats/w3m/issues/5
+ Origin: https://gist.github.com/ttdoda/83fbcf676a21da28432b
+ Bug: https://sourceforge.net/p/w3m/patches/65/
+
+2015-08-06 Richard Quirk <richard@quirk.es>
+
+ Fix problems reported by cppcheck, clang --analyze and gcc warnings.
+ Origin: https://github.com/tats/w3m/pull/6
+
+ * Str.c, Str.h: Strnew_charp and co do not modify the char* input.
+
+ * local.c: Close temp file if pipe open fails.
+
+ * rc.c: Avoid passing null to strlen.
+
+ * file.c: Initialise hidden_input to NULL.
+ This prevents a possible use of garbage value on line 3017.
+
+ * file.c: Use pclose for pipe.
+
+2015-08-05 IWAMOTO Kouichi <sue@iwmt.org>
+
+ * main.c: Fix that SGR style mouse handler has off-by-one problem.
+ cf. https://github.com/tats/w3m/issues/5
+ Origin: https://gist.github.com/ttdoda/30c189a63d483beeb207
+ Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/1390768
+ Bug: https://sourceforge.net/p/w3m/patches/65/
+
+2015-07-31 yshl <yshl@takechiyo.net>
+
+ * Bonus/goodict.cgi:
+ - Use Encode.pm instead of NKF.
+ - Update to the current URL.
+ - Enable to select search mode.
+ Origin: https://github.com/tats/w3m/pull/4
+
+2015-07-20 Tatsuya Kinoshita <tats@debian.org>
+
+ * README: Add short description.
+
+ * doc-jp/FAQ.html, doc/FAQ.html: Mention GOPHER_PROXY and FTP_PROXY.
+
+2015-07-05 Tatsuya Kinoshita <tats@debian.org>
+
+ * doc-jp/FAQ.html, doc/FAQ.html: Mention HTTPS_PROXY.
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=791425
+
+2015-06-27 yshl <yshl@takechiyo.net>
+
+ * doc-jp/README.SSL: Modify certdata2pem.rb to assume the encoding
+ of the certdata.txt to be UTF-8.
+ Origin: https://github.com/tats/w3m/pull/3
+
+2015-06-23 Daniel Schepler <dschepler@gmail.com>
+
+ * terms.c: Wrap the functions used by image.c in USE_IMAGE.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=789539
+
+2015-05-09 Tatsuya Kinoshita <tats@debian.org>
+
+ * doc-jp/README.siteconf, doc/README.siteconf:
+ Update examples of siteconf for twitter.com.
+
+2015-05-03 Tatsuya Kinoshita <tats@debian.org>
+
+ * main.c: Correct GC version confirmation.
+
+2015-05-02 yshl <yshl@takechiyo.net>
+
+ * main.c: Correct GC version confirmation.
+ Origin: https://github.com/tats/w3m/pull/2
+
+2015-04-29 Markus Hiereth <post@hiereth.de>
+
+ * po/de.po: Update German translation.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=783383
+
+2015-04-29 Tatsuya Kinoshita <tats@debian.org>
+
+ * po/Makevars, po/de.po, po/ja.po, po/w3m.pot, rc.c:
+ Update PO strings for display_borders.
+
+2015-04-26 yshl <yshl@takechiyo.net>
+
+ * main.c: Use GC_oom_fn instead of GC_set_oom_fn for gc-7.1.
+ Origin: https://github.com/tats/w3m/pull/1
+
+2015-02-03 Tatsuya Kinoshita <tats@debian.org>
+
+ * po/de.po, po/ja.po, po/w3m.pot: Update PO.
+
+2015-02-02 Tatsuya Kinoshita <tats@debian.org>
+
+ * file.c, fm.h, rc.c:
+ New option "display_borders" to display 0 pixel table borders.
+ cf. http://d.hatena.ne.jp/rubikitch/20101120
+
+2015-01-24 Tatsuya Kinoshita <tats@debian.org>
+
+ * acinclude.m4, configure, version.c.in:
+ Update to 0.5.3+gitYYYYMMDD (generate from ChangeLog).
+
+2015-01-15 Tatsuya Kinoshita <tats@debian.org>
+
+ * alloc.h, main.c: Drop C99 features.
+
+2015-01-15 Scarlett <scarlett@xavin.net>
+
+ Add overflow detection.
+ Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2
+ * main.c: Call exit(1) when out of memory to avoid dereferencing null
+ pointers when gc's malloc fails.
+ * alloc.h: Replacements for w3m's allocation macros which add
+ overflow detection and concentrate the macros in one file.
+ * indep.h, libwc/charset.c, libwc/status.c, matrix.c: Use the
+ overflow-detecting allocation macros from alloc.h.
+
+2015-01-15 Tatsuya Kinoshita <tats@debian.org>
+
+ * Str.c, cookie.c, map.c:
+ Do not use C99 printf format specifiers and asprintf.
+
+2015-01-15 Scarlett <scarlett@xavin.net>
+
+ Correct printf arguments and use asprintf.
+ Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2
+ * Str.c: Use asprintf() instead of rolling our own printf string
+ length detection.
+ * cookie.c: Pass the char pointer in the string struct to printf %s
+ instead of the string struct itself.
+ Print time_t using %lld instead of %ld to allow for 64-bit time_t.
+ * main.c: Print a long int using the correct format specifier.
+ * map.c: Print size_t using the correct format specifier.
+
+2014-12-06 Araki Ken <arakiken@users.sf.net>
+
+ Support OSC 5379 remote imaging and sixel graphics.
+ Origin: https://bitbucket.org/arakiken/w3m/branch/remoteimg (2014-11-16)
+
+ * doc/README.sixel, terms.c: Add README.sixel. W3M_IMG2SIXEL
+ environmental variable enables to specify options of img2sixel.
+
+ * image.c, terms.c:
+ Add n_terminal_image argument to put_image_{sixel|osc5379}().
+ Use struct winsize to calculate ppc and ppl.
+
+ * terms.c: If SCREEN_VARIANT=sixel on GNU screen, exec img2sixel
+ without -P option.
+
+ * terms.c: ttymode_set() -> ttymode_reset().
+
+ * terms.c: Fix.
+
+ * terms.c: Support GNU screen.
+
+ * terms.c: Show GIF (except animation GIF) correctly.
+
+ * main.c, terms.c: img2sixel exits by Ctrl+C. Enable GIF Animation if
+ 'I' is pressed to show it.
+
+ * image.c: Add declaration of get_pixel_per_cell().
+
+ * terms.c: Show the first frame of animation gif files.
+
+ * terms.c: system() -> fork()&execvp()
+
+ * display.c: Draw underline on anchor which contains cboth text and
+ images.
+
+ * etc.c: Remove close_tty() from setup_child() because close_tty()
+ sometimes interrupts loadGeneralFile() in loadImage() and corrupt
+ image data can be cached in ~/.w3m.
+
+ * image.c: Minor fix.
+
+ * image.c: Cache image files if at all possible and convert them to
+ sixel when -sixel option is specified.
+
+ * image.c: Init pixel_per_{char|line}_i if get_pixel_per_cell() fails.
+
+ * display.c, file.c, fm.h, image.c, main.c, terms.c:
+ Add -sixel option which supports image processing by img2sixel.
+
+ * image.c: Don't download image files whose size is specified in
+ <img> tag.
+
+ * image.c: Minor fixes of parseImageHeader().
+
+ * image.c: Determine the format of an image file by its header data
+ not by its file name suffix.
+
+ * image.c: Read width and height from jpeg, png and gif files directly
+ instead of executing w3mimgdisplay -size.
+
+ * display.c: display.c: Draw underline on anchor text which is not
+ overlapped with any image.
+
+ * terms.c: Clear fd_set by FD_ZERO() before select().
+
+ * file.c: nw and ni are rounded up instead of rounded off to show
+ every corner of images.
+
+ * terms.c: Change time to wait for the response of "\x1b[14t\x1b[18t"
+ from 0.1 sec to 0.5 sec.
+
+ * image.c:
+ - clearImage() works.
+ - Use cached image files created by w3m in getImage().
+
+ * file.c: Hack for alignment.
+
+ * fm.h, image.c, terms.c:
+ - Adjust the image size to the terminal cell size.
+ - If the image size is specified in html source, skip to load the image.
+
+ * display.c, fm.h, image.c, main.c, terms.c, w3mimg/x11/x11_w3mimg.c:
+ Support remote image by OSC 5379 show_picture sequence.
+
+2014-12-06 Olaf Hering <olh@suse.de>
+
+ * parsetagx.c: Fix crash in parse_tag() during every start.
+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-parsetagx-crash.patch?expand=1
+
+ * fm.h: Change the default to alt_entity=0.
+ Change the default for the option "Use ASCII equivalents to
+ display entities" from YES to NO.
+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.5.1-no-ASCII-equivalents-by-default.patch?expand=1
+ Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=247397
+
+ * anchor.c, libwc/gb18030.c, libwc/ucs.c, regex.c:
+ Fix a few harmless uninitialized variables.
+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-uninitialized.patch?expand=1
+
+2014-12-06 Peter Poeml <poeml@suse.de>
+
+ * terms.c: Prevent segfault when editing a textarea field with vi.
+ Add fix for segfault that can occur when editing a textarea field
+ with vi, and returning to w3m (it seems to happen if the terminal
+ is not writable, as when using w3m after 'su - some_user')
+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-0.4.1-textarea-segfault.dif?expand=1
+
+2014-12-04 Tatsuya Kinoshita <tats@debian.org>
+
+ * acinclude.m4: Follow updated configure.
+
+2014-12-03 Yusuke Baba <babayaga1@y8.dion.ne.jp>
+
+ * configure, w3mimg/fb/fb.c, w3mimg/fb/fb.h, w3mimg/fb/fb_w3mimg.c:
+ Support FreeBSD framebuffer.
+ Origin: http://www.ac.auone-net.jp/~baba/w3m-img/index.html
+ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=122673
+
+2014-12-02 Naohiro Aota <naota@gentoo.org>
+
+ * acinclude.m4, configure, w3mimg/fb/fb_gdkpixbuf.c:
+ * w3mimg/x11/x11_w3mimg.c:
+ Depend on gdk-pixbuf instead of gtk when gtk2.
+ Origin: http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-gdk-pixbuf.patch?revision=1.1
+
+2014-12-02 Jeroen Roovers <jer@gentoo.org>
+
+ * acinclude.m4, configure: Add tinfo to with_termlib.
+ Fix building against sys-libs/ncurses[tinfo].
+ Origin: https://504588.bugs.gentoo.org/attachment.cgi?id=372650
+ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=504588
+
+2014-12-01 OBATA Akio <obache@netbsd.org>
+
+ * acinclude.m4, configure:
+ Assume defined PKG_CONFIG points right location when gtk2.
+ Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-aa?rev=1.13&content-type=text/x-cvsweb-markup
+ Origin: http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/w3m/patches/patch-ak?rev=1.1&content-type=text/x-cvsweb-markup
+
+2014-12-01 Vsevolod Stakhov <vsevolod@FreeBSD.org>
+
+ * config.h.in: Disable USE_EGD for LibreSSL.
+ Disable use of RAND_egd as it is absent in FreeBSD.
+ This also fixes build error with LibreSSL.
+ Origin: https://bz-attachments.freebsd.org/attachment.cgi?id=144635
+ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191852
+ Bug-FreeBSD: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191956
+
+2014-12-01 zimous <zimous@matfyz.cz>
+
+ * po/ja.po: Set Language tag properly for Japanese translation.
+ Origin: https://512722.bugs.gentoo.org/attachment.cgi?id=378452
+ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=512722
+
+2014-11-30 Tatsuya Kinoshita <tats@debian.org>
+
+ * doc/w3m.1: Typo fix.
+
+2014-11-30 Markus Hiereth <post@hiereth.de>
+
+ * doc/w3m.1: Miscellaneous changes to improve English manpage.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+
+2014-11-29 Markus Hiereth <post@hiereth.de>
+
+ * doc/w3m.1: Improve FILES.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=403634
+
+ * doc/w3m.1: Improve EXAMPLES.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=380560
+
+ * doc/w3m.1: Improve explanation about option -N.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=345084
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=530468
+
+ * doc/w3m.1: Note that -cols only affects when HTML is rendered.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=285251
+
+ * doc/w3m.1: Add more info on configuration.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#30
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=268211
+
+2014-11-29 Justin B Rye <justin.byam.rye@gmail.com>
+
+ * scripts/w3mman/w3mman.1.in: Tweak for W3MMAN_W3M.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771003#5
+
+ * scripts/w3mman/w3mman.1.in: English fixes.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766550#25
+
+2014-11-29 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-19+.
+
+2014-11-29 Justin B Rye <justin.byam.rye@gmail.com>
+
+ * scripts/w3mman/w3mman2html.cgi.in: Fix Perl warnings.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771004
+
+2014-10-21 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-19
+
+ * po/LINGUAS: Correct LINGUAS to a whitespace separated list
+
+2014-10-21 Markus Hiereth <markus.hiereth@freenet.de>
+
+ * po/LINGUAS, po/de.po: Add German translation
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763964
+
+2014-10-15 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-18
+
+ * doc-jp/README.SSL: Update README.SSL to follow default values
+
+ * config.sub: Update config.sub with autotools-dev 20140911.1
+
+ * fm.h: Disable SSLv3 by default [CVE-2014-3566]
+ cf. https://blog.mozilla.org/security/2014/10/14/the-poodle-attack-and-the-end-of-ssl-3-0/
+
+2014-10-15 Ludwig Nussel <ludwig.nussel@suse.de>
+
+ * fm.h: Force ssl_verify_server on and disable SSLv2 support
+ Origin: http://www.openwall.com/lists/oss-security/2010/06/14/4
+
+2014-10-13 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-17+
+
+2014-10-04 Tatsuya Kinoshita <tats@debian.org>
+
+ * libwc/ambwidth_map.awk, libwc/map/ucs_ambwidth.map:
+ Fix incorrect generation of ucs_ambwidth_map
+
+2014-08-22 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-17
+
+ * config.guess:
+ Update config.guess to 2014-03-23 with autotools-dev 20140510.1
+
+ * config.sub:
+ Update config.sub to 2014-05-01 with autotools-dev 20140510.1
+
+2014-08-22 Micah Cowan <micah@addictivecode.org>
+
+ * main.c: Support Boehm GC 7.2.
+ Replace Gentoo's patch to prevent segfaults due to infinite recursion.
+ Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=080_gc72.patch;att=1;bug=758831
+ Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758831
+ Bug-Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=555467
+ Bug: http://sourceforge.net/p/w3m/patches/63/
+ Bug: http://sourceforge.net/p/w3m/patches/59/
+
+2014-08-22 Tatsuya Kinoshita <tats@debian.org>
+
+ * main.c:
+ Revert "Support Boehm GC 7.2" (w3m-0.5.2-gc72.patch from Gentoo)
+ This reverts commit 4331db3e3e673ac4dbfe8e9f2b42a8e0478dc98a.
+
+2014-06-23 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-16
+
+ * url.c: Disable ciphers that use keys smaller than 128 bits
+ Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/1325674
+
+2014-01-04 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-15
+
+2014-01-03 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-14
+
+ * acinclude.m4, configure: Use pkg-config to build with imlib2 1.4.6
+
+ * doc/HISTORY, doc/README.cookie, doc/README.m17n:
+ Prefer US-ASCII rathar than Japanese encodings in English documents
+
+2013-12-27 Tatsuya Kinoshita <tats@debian.org>
+
+ * doc-jp/MANUAL.html, doc/MANUAL.html:
+ Cleanup unusable links in MANUAL.html
+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=517315
+
+ * version.c.in: Update to 0.5.3+debian-13+
+
+2013-12-17 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-13
+
+2013-12-14 Tatsuya Kinoshita <tats@debian.org>
+
+ * config.guess:
+ Update config.guess to 2013-06-10 with autotools-dev 20130810.1
+
+ * config.sub:
+ Update config.sub to 2013-08-10 with autotools-dev 20130810.1
+
+2013-12-07 Reinhard Max <max@suse.de>
+
+ * local.c: Fix a directory descriptor leak in loadLocalDir.
+ Patch from openSUSE on 2009-09-07.
+ Origin: https://build.opensuse.org/package/view_file/openSUSE:Factory/w3m/w3m-closedir.patch
+ Bug-Novell: https://bugzilla.novell.com/show_bug.cgi?id=531675
+
+2013-12-07 AIDA Shinra <shinra@j10n.org>
+
+ * main.c: Fix crash after SEARCH_NEXT.
+ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-search-next.patch>,
+ [w3m-dev:04473] on 2013-12-07.
+
+2013-11-11 Paul Boekholt <p.boekholt@gmail.com>
+
+ * file.c: Add support for single quoted meta refresh URL
+ Bug: https://sourceforge.net/p/w3m/patches/53/
+ Bug-NetBSD: http://gnats.netbsd.org/42400
+
+2013-11-07 Cristian Rodriguez <crrodriguez@opensuse.org>
+
+ * url.c: Use SSL_OP_NO_COMPRESSION if available.
+ Due to the "CRIME attack" (CVE-2012-4929) HTTPS clients that
+ negotiate TLS-level compression can be abused for MITM attacks.
+ * url.c: Use SSL_MODE_RELEASE_BUFFERS if available.
+ Patch from openSUSE on 2012-11-12:
+ https://build.opensuse.org/request/show/141054
+
+2013-10-15 Tatsuya Kinoshita <tats@debian.org>
+
+ * Makefile.in:
+ Depend on funcname.tab to fix parallel make issue of scripts
+ Bug: https://sourceforge.net/p/w3m/patches/64/
+ Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=362249
+
+ * w3mimg/Makefile.in:
+ Avoid prerequisite $(IMGOBJS) to fix parallel make issue of w3mimg
+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=726188
+
+ * acinclude.m4, configure:
+ Explicitly add -lX11 to IMGX11LDFLAGS only when gtk2
+ Bug: https://sourceforge.net/p/w3m/patches/57/
+
+ * w3mimg/Makefile.in: Revert "Fix parallel make issue"
+ This reverts commit aa6f871c6dcc108118142bcc786e4a6ac3d46867.
+
+ * Makefile.in:
+ Revert "Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5"
+ This reverts commit 7410954066d68ac2ad6aea638801714447321fec.
+
+2013-10-14 AIDA Shinra <shinra@j10n.org>
+
+ * url.c: Define schemeNumToName() to fix scheme bug.
+ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-schemebug.patch>,
+ [w3m-dev:04470] on 2013-10-14.
+ Bug: https://sourceforge.net/p/w3m/patches/60/
+
+ * config.h.in, file.c, fm.h, html.h, image.c, indep.c, indep.h:
+ * istream.c, istream.h, local.c, main.c, mimehead.c, proto.h:
+ Workaround of GC crash on Cygwin64.
+ Patch from <http://www.j10n.org/files/w3m-cvs-1.1055-win64gc.patch>,
+ [w3m-dev:04469] on 2013-10-14.
+
+2013-10-14 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-12+
+
+2013-10-14 Jarek Czekalski <jarekczek@poczta.onet.pl>
+
+ * terms.c: Fix paren in check_cygwin_console()
+ Bug: https://sourceforge.net/p/w3m/patches/66/
+
+2013-10-13 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-12
+
+ * doc-jp/MANUAL.html, doc-jp/w3m.1, doc/MANUAL.html, doc/w3m.1:
+ Update document for the -s option change
+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527
+
+ * terms.c: Do not fail when LANG is not set.
+ Check whether the value of LC_ALL, LC_CTYPE or LANG is not NULL in
+ check_cygwin_console().
+ Bug: https://sourceforge.net/p/w3m/patches/66/
+
+2013-10-12 Tatsuya Kinoshita <tats@debian.org>
+
+ * table.h: Bump MAXCOL to 256
+ Bug: https://sourceforge.net/p/w3m/feature-requests/24/
+
+2013-10-12 Laurence Richert <laurencerichert@yahoo.de>
+
+ * main.c, proto.h: vim/-perator like handling
+ - half page scrolling
+ - jumping to elements numbered by getLinkNumberStr() from Karsten
+ Schoelzel
+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=724028
+
+2013-10-12 Tatsuya Kinoshita <tats@debian.org>
+
+ * doc-jp/README, doc/README:
+ Mention project page rather than unavailable mailing lists
+
+2013-10-09 Rafael Laboissiere <rafael@laboissiere.net>
+
+ * doc/README.img: Fix typo
+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=725892
+
+2013-08-12 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-11+
+
+ * ChangeLog: Update ChangeLog to use contributor's name
+
+2013-08-08 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-11
+
+2013-08-04 Tatsuya Kinoshita <tats@debian.org>
+
+ * Str.c: Check length for Strchop()
+
+ * main.c: Fix potentially segfault of execdict()
+
+ * version.c.in: Update to 0.5.3+debian-10+
+
+ * file.c: Fix segfault of loadGeneralFile()
+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=718612
+
+2013-08-02 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-10
+
+2013-08-02 Piotr P. Karwasz <piotr.p@karwasz.org>
+
+ * scripts/w3mman/w3mman2html.cgi.in:
+ Correct underline processing and more UTF-8 support for w3mman2html.cgi.
+ Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/680202>
+ on 2010-11-23.
+
+2013-08-01 Hilko Bengen <bengen@debian.org>
+
+ * entity.c: Ignore SOFT HYPHEN to prevent drawing hyphens everywhere.
+ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441934>
+ on 2011-03-01.
+
+2013-08-01 Tatsuya Kinoshita <tats@debian.org>
+
+ * doc-jp/README, doc/README: Update contact list in README
+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=696209
+
+2013-07-30 Tatsuya Kinoshita <tats@debian.org>
+
+ * config.guess, config.sub:
+ Update config.guess and config.sub to supprot aarch64.
+ Updated with Debian autotools-dev version 20130515.1.
+
+2013-07-30 Conrad J.C. Hughes <debbugs@xrad.org>
+
+ * main.c: Sort anchors by sequence number in -dump.
+ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657666>
+ on 2012-01-27.
+
+2013-07-30 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update to 0.5.3+debian-9+
+
+2013-07-29 Tatsuya Kinoshita <tats@debian.org>
+
+ * version.c.in: Update version to w3m/0.5.3+debian-9
+
+ * version.c.in: Set CURRENT_VERSION to debian version
+
+2013-07-28 Tatsuya Kinoshita <tats@debian.org>
+
+ * file.c: Fix segfault of process_button()
+
+2013-04-08 AIDA Shinra <shinra@j10n.org>
+
+ * file.c: One more patch for siteconf from [w3m-dev 04464]
+
+ * anchor.c, config.h.in, display.c, doc-jp/README.siteconf:
+ * doc/README.siteconf, file.c, fm.h, form.c, frame.c, func.c:
+ * history.c, indep.c, indep.h, linein.c, main.c, map.c, menu.c:
+ * po/ja.po, proto.h, rc.c, url.c: Support the siteconf feature.
+ Patch to support the siteconf feature, from [w3m-dev 04463]
+ on 2012-06-27.
+
+2013-04-08 Hayaki Saito <user@zuse.jp>
+
+ * keybind.c, main.c, proto.h, terms.c:
+ Support SGR 1006 mouse reporting.
+ cf. [w3m-dev 04466] on 2012-07-15
+ Origin: https://gist.github.com/3114255
+ Bug: https://sourceforge.net/p/w3m/patches/65/
+
+2012-05-19 Hilko Bengen <bengen@debian.org>
+
+ * form.c: Assume "text" if an input type is unknown.
+ Patch from <http://bugs.debian.org/615843> on 2011-03-01.
+
+2012-05-19 Simon Ruderich <simon@ruderich.org>
+
+ * Makefile.in: Use $(CPPFLAGS) with $(CPP).
+ Patch from <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=665491>
+ on 2012-03-24.
+
+2012-05-03 Miroslav Šulc <fordfrog@gentoo.org>
+
+ * w3mimg/Makefile.in: Fix parallel make issue.
+ Patch from Gentoo
+ <http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.3-parallel-make.patch?revision=1.1&view=markup>
+ <https://bugs.gentoo.org/show_bug.cgi?id=353390> on 2011-02-01.
+
+2012-05-03 MATSUU Takuto <matsuu@gentoo.org>
+
+ * main.c: Support Boehm GC 7.2.
+ Patch from Gentoo
+ <http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/www-client/w3m/files/w3m-0.5.2-gc72.patch?revision=1.1&view=markup>
+ on 2009-12-13.
+
+2012-05-02 Reinhard Tartler <siretart@tauware.de>
+
+ * istream.c, istream.h:
+ Fix that struct file_handle conflicts with glibc 2.14.
+ Patch from <https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/935540>
+ on 2012-02-19.
+
+2011-10-30 Colin Watson <cjwatson@ubuntu.com>
+
+ * acinclude.m4, configure, w3mbookmark.c:
+ Appease gcc -Werror=format-security.
+ Patch from 0.5.3-3ubuntu1 on 2011-10-23.
+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=646321
+
+2011-06-19 Martin Pitt <martin.pitt@ubuntu.com>
+
+ * Makefile.in:
+ Explicitly link w3mimgdisplay with -lX11 to build with gcc 4.5.
+ Patch from 0.5.2-10ubuntu1 on 2010-12-03.
+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=605761
+
+2011-06-19 Fumitoshi UKAI <ukai@debian.or.jp>
+
+ * main.c: Change the -s option to "squeeze multiple blank lines".
+ Change the -s option from "display charset Shift_JIS" to "squeeze
+ multiple blank lines" to work as /usr/bin/pager. In addition, the
+ options -j and -e are disabled. To specify the display charset,
+ use -O{s|j|e} instead.
+ Patch from [w3m-dev 01275] on 2000-10-26.
+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=75527
+
+2011-06-19 Hiroyuki Ito <ZXB01226@nifty.com>
+
+ * file.c, fm.h, html.c, html.h, proto.h, table.c, tagtable.tab:
+ Support the button element as defined in HTML 4.01.
+ Patch from upstream, [w3m-dev 04411] on 2010-09-17, to support the
+ button element. It is discussed upstream and incomplete, but enough
+ to login Launchpad.
+ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=136810
+ Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/w3m/+bug/628755
+
2012-05-22 Tatsuya Kinoshita <tats@vega.ocn.ne.jp>
* [w3m-dev 04451] w3m/entity.h should be removed when `make clean'
diff --git a/Makefile.in b/Makefile.in
index 7d692f9..8fa799e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -150,7 +150,7 @@ parsetagx.o: html.c
funcname.tab: $(DEFUNS)
(echo '#define DEFUN(x,y,z) x y';\
- sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) - | \
+ sed -ne '/^DEFUN/{p;n;/^[ ]/p;}' $(DEFUNS)) | $(CPP) $(CPPFLAGS) - | \
awk '$$1 ~ /^[_A-Za-z]/ { \
for (i=2;i<=NF;i++) { print $$i, $$1} \
}' > $@.tmp
@@ -250,7 +250,7 @@ install-po:
(cd $$subdir && $(MAKE) install); \
done
-all-scripts:
+all-scripts: funcname.tab
for dir in $(SCRIPTSUBDIRS); \
do \
(cd $$dir && $(MAKE) $(MAKE_ARGS)); \
diff --git a/NEWS b/NEWS
index 66e309d..b876c20 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,37 @@
+w3m X.X.X - YYYY-MM-DD
+
+* new features
+ - support OSC 5379 remote imaging and sixel graphics
+ - support SGR style mouse handler
+ - support 32-bit color images
+ - support FreeBSD framebuffer
+ - support button element
+ - support meta charset
+ - add extbrowser4..9
+ - add display_borders to display 0 pixel table borders
+ - add siteconf feature
+ - add translations for de, zh_CN and zh_TW
+* bug fixes
+ - disable SSLv2 and SSLv3 by default [CVE-2014-3566]
+ - set ssl_verify_server to 1 by default
+ - disable RC4, export ciphers, and keys < 128 bits
+ - use SSL_OP_NO_COMPRESSION due to "CRIME attack" [CVE-2012-4929]
+ - use SSL_MODE_RELEASE_BUFFERS
+ - disable USE_EGD for LibreSSL
+ - appease gcc -Werror=format-security
+ - fix segfaults
+ - option -s is now "squeeze multiple blank lines" to work as pager, and
+ -j and -e are obsolete, so use -O{s|j|e} to specify display charset
+ - accept single quoted meta refresh URL
+ - assume "text" if a form input type is unknown
+ - accept cookies by default
+ - set argv_is_url to 1 by default
+ - set alt_entity to 0 by default
+ - fix build problems with Boehm GC 7.2, imlib2 1.4.6 and glibc 2.14
+ - fix parallel make failure
+ - fix incorrect ucs_ambwidth_map
+ - and many fixes
+
w3m 0.5.3 - 2011-01-15
* security fix
diff --git a/README b/README
index 8778d80..765c996 100644
--- a/README
+++ b/README
@@ -1,3 +1,9 @@
+w3m: WWW wo Miru Tool
+=====================
+
+w3m is a pager with WWW capability. It IS a pager, but it can be used
+as a text-mode WWW browser.
+
If you can read English, see doc/*.
If you can read Japanese, see doc-jp/*.
If you can read both, read both and correct English. :-)
diff --git a/Str.c b/Str.c
index e5a0982..70e9957 100644
--- a/Str.c
+++ b/Str.c
@@ -56,7 +56,7 @@ Strnew_size(int n)
}
Str
-Strnew_charp(char *p)
+Strnew_charp(const char *p)
{
Str x;
int n;
@@ -73,7 +73,7 @@ Strnew_charp(char *p)
}
Str
-Strnew_m_charp(char *p, ...)
+Strnew_m_charp(const char *p, ...)
{
va_list ap;
Str r = Strnew();
@@ -87,7 +87,7 @@ Strnew_m_charp(char *p, ...)
}
Str
-Strnew_charp_n(char *p, int n)
+Strnew_charp_n(const char *p, int n)
{
Str x;
@@ -140,7 +140,7 @@ Strcopy(Str x, Str y)
}
void
-Strcopy_charp(Str x, char *y)
+Strcopy_charp(Str x, const char *y)
{
int len;
@@ -160,7 +160,7 @@ Strcopy_charp(Str x, char *y)
}
void
-Strcopy_charp_n(Str x, char *y, int n)
+Strcopy_charp_n(Str x, const char *y, int n)
{
int len = n;
@@ -180,7 +180,7 @@ Strcopy_charp_n(Str x, char *y, int n)
}
void
-Strcat_charp_n(Str x, char *y, int n)
+Strcat_charp_n(Str x, const char *y, int n)
{
int newlen;
@@ -209,7 +209,7 @@ Strcat(Str x, Str y)
}
void
-Strcat_charp(Str x, char *y)
+Strcat_charp(Str x, const char *y)
{
if (y == NULL)
return;
@@ -278,8 +278,8 @@ void
Strchop(Str s)
{
STR_LENGTH_CHECK(s);
- while ((s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r') &&
- s->length > 0) {
+ while (s->length > 0 &&
+ (s->ptr[s->length - 1] == '\n' || s->ptr[s->length - 1] == '\r')) {
s->length--;
}
s->ptr[s->length] = '\0';
@@ -301,7 +301,7 @@ Strinsert_char(Str s, int pos, char c)
}
void
-Strinsert_charp(Str s, int pos, char *p)
+Strinsert_charp(Str s, int pos, const char *p)
{
STR_LENGTH_CHECK(s);
while (*p)
@@ -530,11 +530,8 @@ Str
Strfgets(FILE * f)
{
Str s = Strnew();
- char c;
- while (1) {
- c = fgetc(f);
- if (feof(f) || ferror(f))
- break;
+ int c;
+ while ((c = fgetc(f)) != EOF) {
Strcat_char(s, c);
if (c == '\n')
break;
@@ -546,11 +543,8 @@ Str
Strfgetall(FILE * f)
{
Str s = Strnew();
- char c;
- while (1) {
- c = fgetc(f);
- if (feof(f) || ferror(f))
- break;
+ int c;
+ while ((c = fgetc(f)) != EOF) {
Strcat_char(s, c);
}
return s;
diff --git a/Str.h b/Str.h
index f345c74..248815d 100644
--- a/Str.h
+++ b/Str.h
@@ -30,22 +30,22 @@ typedef struct _Str {
Str Strnew(void);
Str Strnew_size(int);
-Str Strnew_charp(char *);
-Str Strnew_charp_n(char *, int);
-Str Strnew_m_charp(char *, ...);
+Str Strnew_charp(const char *);
+Str Strnew_charp_n(const char *, int);
+Str Strnew_m_charp(const char *, ...);
Str Strdup(Str);
void Strclear(Str);
void Strfree(Str);
void Strcopy(Str, Str);
-void Strcopy_charp(Str, char *);
-void Strcopy_charp_n(Str, char *, int);
-void Strcat_charp_n(Str, char *, int);
+void Strcopy_charp(Str, const char *);
+void Strcopy_charp_n(Str, const char *, int);
+void Strcat_charp_n(Str, const char *, int);
void Strcat(Str, Str);
-void Strcat_charp(Str, char *);
+void Strcat_charp(Str, const char *);
void Strcat_m_charp(Str, ...);
Str Strsubstr(Str, int, int);
void Strinsert_char(Str, int, char);
-void Strinsert_charp(Str, int, char *);
+void Strinsert_charp(Str, int, const char *);
void Strdelete(Str, int, int);
void Strtruncate(Str, int);
void Strlower(Str);
diff --git a/acinclude.m4 b/acinclude.m4
index e4ccc3d..ed1035d 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -6,7 +6,8 @@ dnl w3m autoconf macros
AC_DEFUN([AC_W3M_VERSION],
[AC_SUBST(CURRENT_VERSION)
cvsver=`$AWK '\$[1] ~ /Id:/ { print \$[3]}' $srcdir/ChangeLog`
- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
+ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog`
+ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`])
#
# ----------------------------------------------------------------
@@ -330,10 +331,10 @@ AC_DEFINE_UNQUOTED(DEF_MAILER, "$w3m_mailer")])
# ----------------------------------------------------------------
AC_DEFUN([AC_W3M_EXT_BROWSER],
[AC_SUBST(DEF_EXT_BROWSER)
-w3m_browser="/usr/bin/mozilla"
+w3m_browser="/usr/bin/firefox"
AC_MSG_CHECKING(which external browser is used by default)
AC_ARG_WITH(browser,
- [ --with-browser=BROWSER default browser (/usr/bin/mozilla)],
+ [ --with-browser=BROWSER default browser (/usr/bin/firefox)],
[w3m_browser="$with_browser"])
AC_MSG_RESULT($w3m_browser)
AC_DEFINE_UNQUOTED(DEF_EXT_BROWSER, "$w3m_browser")])
@@ -400,10 +401,10 @@ AC_DEFUN([AC_W3M_TERMLIB],
AC_ARG_WITH(termlib,
[ --with-termlib[=LIBS] terminal library
LIBS is space separated list of:
- terminfo mytinfo termcap ncurses curses],,
+ terminfo mytinfo termcap tinfo ncurses curses],,
[with_termlib="yes"])
AC_MSG_RESULT($with_termlib)
- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses"
+ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses"
for lib in $with_termlib; do
AC_CHECK_LIB($lib, tgetent, [W3M_LIBS="$W3M_LIBS -l$lib"; break])
done
@@ -600,7 +601,7 @@ AC_DEFUN([AC_W3M_IMAGE],
if test x"$enable_image" = xyes; then
enable_image=x11
case "`uname -s`" in
- Linux|linux|LINUX)
+ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD)
if test -c /dev/fb0; then
enable_image=x11,fb
fi;;
@@ -649,6 +650,9 @@ AC_DEFUN([AC_W3M_IMAGE],
fi;;
imlib2)
with_imlib2="yes"
+ if test x"$PKG_CONFIG" = x; then
+ PKG_CONFIG=pkg-config
+ fi
if test x"$IMLIB2_CONFIG" = x; then
IMLIB2_CONFIG=imlib2-config
fi;;
@@ -661,8 +665,6 @@ AC_DEFUN([AC_W3M_IMAGE],
with_gtk2="yes"
if test x"$PKG_CONFIG" = x; then
PKG_CONFIG=pkg-config
- else
- PKG_CONFIG=:
fi;;
esac
done
@@ -705,8 +707,8 @@ AC_DEFUN([AC_W3M_IMAGE],
IMGTARGETS="x11"
AC_DEFINE(USE_GDKPIXBUF)
AC_DEFINE(USE_GTK2)
- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
- IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
+ IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
elif test x"$have_gdkpixbuf" = xyes; then
AC_DEFINE(USE_W3MIMG_X11)
IMGOBJS="$IMGOBJS x11/x11_w3mimg.o"
@@ -728,7 +730,7 @@ AC_DEFUN([AC_W3M_IMAGE],
IMGTARGETS="x11"
AC_DEFINE(USE_IMLIB2)
IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`"
- IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`"
+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`"
else
AC_MSG_WARN([unable to build w3mimgdisplay with X11 support])
fi
@@ -740,8 +742,8 @@ AC_DEFUN([AC_W3M_IMAGE],
IMGTARGETS="${IMGTARGETS} fb"
AC_DEFINE(USE_GDKPIXBUF)
AC_DEFINE(USE_GTK2)
- IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`"
- IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`"
+ IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`"
+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`"
elif test x"$have_gdkpixbuf" = xyes; then
AC_DEFINE(USE_W3MIMG_FB)
IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
@@ -756,7 +758,7 @@ AC_DEFUN([AC_W3M_IMAGE],
AC_DEFINE(USE_IMLIB2)
IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`"
- IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`"
+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`"
else
AC_MSG_WARN([unable to build w3mimgdisplay with FB support])
fi
@@ -866,7 +868,7 @@ AC_MSG_CHECKING(for sys_errlist)
AC_TRY_COMPILE(
changequote(<<,>>)dnl
<<extern char *sys_errlist[];>>,
-<<printf(sys_errlist[0]);>>,
+<<printf("%s", sys_errlist[0]);>>,
changequote([,])dnl
[have_sys_errlist="yes"; AC_DEFINE(HAVE_SYS_ERRLIST)],
[have_sys_errlist="no"])
diff --git a/alloc.h b/alloc.h
new file mode 100644
index 0000000..fa0d391
--- /dev/null
+++ b/alloc.h
@@ -0,0 +1,39 @@
+/*
+ * by Scarlett. public domain.
+ * replacements for w3m's allocation macros which add overflow
+ * detection and concentrate the macros in one file
+ */
+#ifndef W3_ALLOC_H
+#define W3_ALLOC_H
+#include <gc.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <limits.h>
+
+static inline size_t
+z_mult_no_oflow_(size_t n, size_t size)
+{
+ if (size != 0 && n > ULONG_MAX / size) {
+ fprintf(stderr,
+ "w3m: overflow in malloc, %lu*%lu\n", (unsigned long)n, (unsigned long)size);
+ exit(1);
+ }
+ return n * size;
+}
+
+#define New(type) \
+ (GC_MALLOC(sizeof(type)))
+
+#define NewAtom(type) \
+ (GC_MALLOC_ATOMIC(sizeof(type)))
+
+#define New_N(type, n) \
+ (GC_MALLOC(z_mult_no_oflow_((n), sizeof(type))))
+
+#define NewAtom_N(type, n) \
+ (GC_MALLOC_ATOMIC(z_mult_no_oflow_((n), sizeof(type))))
+
+#define New_Reuse(type, ptr, n) \
+ (GC_REALLOC((ptr), z_mult_no_oflow_((n), sizeof(type))))
+
+#endif /* W3_ALLOC_H */
diff --git a/anchor.c b/anchor.c
index 27bbd56..2d21bfa 100644
--- a/anchor.c
+++ b/anchor.c
@@ -11,7 +11,7 @@ putAnchor(AnchorList *al, char *url, char *target, Anchor **anchor_return,
{
int n, i, j;
Anchor *a;
- BufferPoint bp;
+ BufferPoint bp = { 0 };
if (al == NULL) {
al = New(AnchorList);
al->anchors = NULL;
@@ -200,10 +200,11 @@ _put_anchor_news(Buffer *buf, char *p1, char *p2, int line, int pos)
if (*(p2 - 1) == '>')
p2--;
}
- tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset,
- buf->document_charset);
- tmp = Sprintf("news:%s", file_quote(tmp->ptr));
- return registerHref(buf, tmp->ptr, NULL, NO_REFERER, NULL, '\0', line,
+ tmp = Strnew_charp("news:");
+ Strcat_charp_n(tmp, p1, p2 - p1);
+ return registerHref(buf, url_encode(tmp->ptr, baseURL(buf),
+ buf->document_charset),
+ NULL, NO_REFERER, NULL, '\0', line,
pos);
}
#endif /* USE_NNTP */
@@ -213,9 +214,10 @@ _put_anchor_all(Buffer *buf, char *p1, char *p2, int line, int pos)
{
Str tmp;
- tmp = wc_Str_conv_strict(Strnew_charp_n(p1, p2 - p1), InnerCharset,
- buf->document_charset);
- return registerHref(buf, url_quote(tmp->ptr), NULL, NO_REFERER, NULL,
+ tmp = Strnew_charp_n(p1, p2 - p1);
+ return registerHref(buf, url_encode(tmp->ptr, baseURL(buf),
+ buf->document_charset),
+ NULL, NO_REFERER, NULL,
'\0', line, pos);
}
@@ -641,7 +643,6 @@ addMultirowsForm(Buffer *buf, AnchorList *al)
{
int i, j, k, col, ecol, pos;
Anchor a_form, *a;
- FormItemList *fi;
Line *l, *ls;
if (al == NULL || al->nanchor == 0)
@@ -668,7 +669,6 @@ addMultirowsForm(Buffer *buf, AnchorList *al)
if (!ls)
continue;
}
- fi = (FormItemList *)a_form.url;
col = COLPOS(ls, a_form.start.pos);
ecol = COLPOS(ls, a_form.end.pos);
for (j = 0; l && j < a_form.rows; l = l->next, j++) {
@@ -756,7 +756,7 @@ link_list_panel(Buffer *buf)
p = parsedURL2Str(&pu)->ptr;
u = html_quote(p);
if (DecodeURL)
- p = html_quote(url_unquote_conv(p, buf->document_charset));
+ p = html_quote(url_decode2(p, buf));
else
p = u;
}
@@ -787,7 +787,7 @@ link_list_panel(Buffer *buf)
p = parsedURL2Str(&pu)->ptr;
u = html_quote(p);
if (DecodeURL)
- p = html_quote(url_unquote_conv(p, buf->document_charset));
+ p = html_quote(url_decode2(p, buf));
else
p = u;
t = getAnchorText(buf, al, a);
@@ -809,16 +809,13 @@ link_list_panel(Buffer *buf)
p = parsedURL2Str(&pu)->ptr;
u = html_quote(p);
if (DecodeURL)
- p = html_quote(url_unquote_conv(p, buf->document_charset));
+ p = html_quote(url_decode2(p, buf));
else
p = u;
if (a->title && *a->title)
t = html_quote(a->title);
- else if (DecodeURL)
- t = html_quote(url_unquote_conv
- (a->url, buf->document_charset));
else
- t = html_quote(a->url);
+ t = html_quote(url_decode2(a->url, buf));
Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t, "</a><br>", p,
"\n", NULL);
a = retrieveAnchor(buf->formitem, a->start.line, a->start.pos);
@@ -842,19 +839,13 @@ link_list_panel(Buffer *buf)
p = parsedURL2Str(&pu)->ptr;
u = html_quote(p);
if (DecodeURL)
- p = html_quote(url_unquote_conv(p,
- buf->
- document_charset));
+ p = html_quote(url_decode2(p, buf));
else
p = u;
if (m->alt && *m->alt)
t = html_quote(m->alt);
- else if (DecodeURL)
- t = html_quote(url_unquote_conv(m->url,
- buf->
- document_charset));
else
- t = html_quote(m->url);
+ t = html_quote(url_decode2(m->url, buf));
Strcat_m_charp(tmp, "<li><a href=\"", u, "\">", t,
"</a><br>", p, "\n", NULL);
}
diff --git a/buffer.c b/buffer.c
index 5afc26a..3b2352a 100644
--- a/buffer.c
+++ b/buffer.c
@@ -705,6 +705,7 @@ readBufferCache(Buffer *buf)
cache = fopen(buf->savecache, "r");
if (cache == NULL || fread1(clnum, cache) || fread1(tlnum, cache)) {
+ fclose(cache);
buf->savecache = NULL;
return -1;
}
@@ -760,8 +761,10 @@ readBufferCache(Buffer *buf)
}
#endif
}
- buf->lastLine = prevl;
- buf->lastLine->next = NULL;
+ if (prevl) {
+ buf->lastLine = prevl;
+ buf->lastLine->next = NULL;
+ }
fclose(cache);
unlink(buf->savecache);
buf->savecache = NULL;
diff --git a/config.guess b/config.guess
index 51fab47..0967f2a 100755
--- a/config.guess
+++ b/config.guess
@@ -1,13 +1,12 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+# Copyright 1992-2016 Free Software Foundation, Inc.
-timestamp='2004-03-12'
+timestamp='2016-04-02'
# 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
+# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
@@ -16,24 +15,22 @@ timestamp='2004-03-12'
# 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.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
#
-# 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.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# Please send patches to <config-patches@gnu.org>.
+
me=`echo "$0" | sed -e 's,.*/,,'`
@@ -53,8 +50,7 @@ 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.
+Copyright 1992-2016 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."
@@ -66,11 +62,11 @@ Try \`$me --help' for more information."
while test $# -gt 0 ; do
case $1 in
--time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
+ echo "$timestamp" ; exit ;;
--version | -v )
- echo "$version" ; exit 0 ;;
+ echo "$version" ; exit ;;
--help | --h* | -h )
- echo "$usage"; exit 0 ;;
+ echo "$usage"; exit ;;
-- ) # Stop option processing
shift; break ;;
- ) # Use stdin as input.
@@ -104,7 +100,7 @@ set_cc_for_build='
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
@@ -123,7 +119,7 @@ case $CC_FOR_BUILD,$HOST_CC,$CC in
;;
,,*) CC_FOR_BUILD=$CC ;;
,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ;'
+esac ; set_cc_for_build= ;'
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 1994-08-24)
@@ -136,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval $set_cc_for_build
+ cat <<-EOF > $dummy.c
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ ;;
+esac
+
# 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*,
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
# switched to ELF, *-*-netbsd* would select the old
# object file format. This provides both forward
@@ -151,22 +168,30 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-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)
+ arm*|earm*|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
+ | grep -q __ELF__
then
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
# Return netbsd for either. FIX?
@@ -176,7 +201,14 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
fi
;;
*)
- os=netbsd
+ os=netbsd
+ ;;
+ esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
;;
esac
# The OS release
@@ -189,78 +221,48 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
release='-gnu'
;;
*)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# 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 ;;
- amd64:OpenBSD:*:*)
- echo x86_64-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- cats:OpenBSD:*:*)
- echo arm-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 ;;
- pegasos: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 ;;
+ echo "${machine}-${os}${release}${abi}"
+ exit ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+ exit ;;
*:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:LibertyBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+ exit ;;
*:ekkoBSD:*:*)
echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
macppc:MirBSD:*:*)
- echo powerppc-unknown-mirbsd${UNAME_RELEASE}
- exit 0 ;;
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
;;
*5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
;;
esac
# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -270,76 +272,82 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
case "$ALPHA_CPU_TYPE" in
"EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
+ UNAME_MACHINE=alpha ;;
"EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
+ UNAME_MACHINE=alpha ;;
"LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
+ UNAME_MACHINE=alpha ;;
"EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
+ UNAME_MACHINE=alphaev5 ;;
"EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
+ UNAME_MACHINE=alphaev56 ;;
"EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
+ UNAME_MACHINE=alphapca56 ;;
"EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
+ UNAME_MACHINE=alphapca57 ;;
"EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
+ UNAME_MACHINE=alphaev6 ;;
"EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
+ UNAME_MACHINE=alphaev67 ;;
"EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
+ UNAME_MACHINE=alphaev68 ;;
"EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
+ UNAME_MACHINE=alphaev68 ;;
"EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
+ UNAME_MACHINE=alphaev68 ;;
"EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
+ UNAME_MACHINE=alphaev69 ;;
"EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
+ UNAME_MACHINE=alphaev7 ;;
"EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
+ UNAME_MACHINE=alphaev79 ;;
esac
# A Pn.n version is a patched version.
# A Vn.n version is a released version.
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha*:OpenVMS:*:*)
- echo alpha-hp-vms
- exit 0 ;;
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
Alpha\ *:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# Should we change UNAME_MACHINE based on the output of uname instead
# of the specific Alpha model?
echo alpha-pc-interix
- exit 0 ;;
+ exit ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
- exit 0 ;;
+ exit ;;
Amiga*:UNIX_System_V:4.0:*)
echo m68k-unknown-sysv4
- exit 0;;
+ exit ;;
*:[Aa]miga[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-amigaos
- exit 0 ;;
+ exit ;;
*:[Mm]orph[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-morphos
- exit 0 ;;
+ exit ;;
*:OS/390:*:*)
echo i370-ibm-openedition
- exit 0 ;;
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
*:OS400:*:*)
- echo powerpc-ibm-os400
- exit 0 ;;
+ echo powerpc-ibm-os400
+ exit ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
+ exit ;;
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
- exit 0;;
+ exit ;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
if test "`(/bin/universe) 2>/dev/null`" = att ; then
@@ -347,32 +355,51 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
else
echo pyramid-pyramid-bsd
fi
- exit 0 ;;
+ exit ;;
NILE*:*:*:dcosx)
echo pyramid-pyramid-svr4
- exit 0 ;;
+ exit ;;
DRS?6000:unix:4.0:6*)
echo sparc-icl-nx6
- exit 0 ;;
- DRS?6000:UNIX_SV:4.2*:7*)
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7 && exit 0 ;;
+ sparc) echo sparc-icl-nx7; exit ;;
esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
sun4H:SunOS:5.*:*)
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
+ exit ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH=i386
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH=x86_64
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
# it's likely to be more like Solaris than SunOS4.
echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
+ exit ;;
sun4*:SunOS:*:*)
case "`/usr/bin/arch -k`" in
Series*|S4*)
@@ -381,13 +408,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
esac
# Japanese Language versions have a version number like `4.1.3-JL'.
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
+ exit ;;
sun3*:SunOS:*:*)
echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
sun*:*:4.2BSD:*)
UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
case "`/bin/arch`" in
sun3)
echo m68k-sun-sunos${UNAME_RELEASE}
@@ -396,10 +423,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
echo sparc-sun-sunos${UNAME_RELEASE}
;;
esac
- exit 0 ;;
+ exit ;;
aushp:SunOS:*:*)
echo sparc-auspex-sunos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
# The situation for MiNT is a little confusing. The machine name
# can be virtually everything (everything which is not
# "atarist" or "atariste" at least should have a processor
@@ -409,41 +436,41 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# 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 ;;
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit 0 ;;
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit 0 ;;
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
m68k:machten:*:*)
echo m68k-apple-machten${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
powerpc:machten:*:*)
echo powerpc-apple-machten${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
RISC*:Mach:*:*)
echo mips-dec-mach_bsd4.3
- exit 0 ;;
+ exit ;;
RISC*:ULTRIX:*:*)
echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
2020:CLIX:*:* | 2430:CLIX:*:*)
echo clipper-intergraph-clix${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
@@ -467,35 +494,36 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
exit (-1);
}
EOF
- $CC_FOR_BUILD -o $dummy $dummy.c \
- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && exit 0
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
Motorola:PowerMAX_OS:*:*)
echo powerpc-motorola-powermax
- exit 0 ;;
+ exit ;;
Motorola:*:4.3:PL8-*)
echo powerpc-harris-powermax
- exit 0 ;;
+ exit ;;
Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
echo powerpc-harris-powermax
- exit 0 ;;
+ exit ;;
Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix
- exit 0 ;;
+ exit ;;
m88k:CX/UX:7*:*)
echo m88k-harris-cxux7
- exit 0 ;;
+ exit ;;
m88k:*:4*:R4*)
echo m88k-motorola-sysv4
- exit 0 ;;
+ exit ;;
m88k:*:3*:R3*)
echo m88k-motorola-sysv3
- exit 0 ;;
+ exit ;;
AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
then
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -508,29 +536,29 @@ EOF
else
echo i586-dg-dgux${UNAME_RELEASE}
fi
- exit 0 ;;
+ exit ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
- exit 0 ;;
+ exit ;;
M88*:*:R3*:*)
# Delta 88k system running SVR3
echo m88k-motorola-sysv3
- exit 0 ;;
+ exit ;;
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
echo m88k-tektronix-sysv3
- exit 0 ;;
+ exit ;;
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
echo m68k-tektronix-bsd
- exit 0 ;;
+ exit ;;
*:IRIX*:*:*)
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
+ exit ;;
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
i*86:AIX:*:*)
echo i386-ibm-aix
- exit 0 ;;
+ exit ;;
ia64:AIX:*:*)
if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel`
@@ -538,7 +566,7 @@ EOF
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit 0 ;;
+ exit ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
eval $set_cc_for_build
@@ -553,49 +581,54 @@ EOF
exit(0);
}
EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
- echo rs6000-ibm-aix3.2.5
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
echo rs6000-ibm-aix3.2.4
else
echo rs6000-ibm-aix3.2
fi
- exit 0 ;;
- *:AIX:*:[45])
+ exit ;;
+ *:AIX:*:[4567])
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
fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
+ if [ -x /usr/bin/lslpp ] ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
else
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
+ exit ;;
*:AIX:*:*)
echo rs6000-ibm-aix
- exit 0 ;;
+ exit ;;
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
echo romp-ibm-bsd4.4
- exit 0 ;;
+ exit ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
+ exit ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
echo rs6000-bull-bosx
- exit 0 ;;
+ exit ;;
DPX/2?00:B.O.S.:*:*)
echo m68k-bull-sysv3
- exit 0 ;;
+ exit ;;
9000/[34]??:4.3bsd:1.*:*)
echo m68k-hp-bsd
- exit 0 ;;
+ exit ;;
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
echo m68k-hp-bsd4.4
- exit 0 ;;
+ exit ;;
9000/[34678]??:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
case "${UNAME_MACHINE}" in
@@ -604,74 +637,84 @@ EOF
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
+ 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
+ sed 's/^ //' << EOF >$dummy.c
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
test -z "$HP_ARCH" && HP_ARCH=hppa
fi ;;
esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
+ if [ ${HP_ARCH} = hppa2.0w ]
then
- # avoid double evaluation of $set_cc_for_build
- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
then
- HP_ARCH="hppa2.0w"
+ HP_ARCH=hppa2.0w
else
- HP_ARCH="hppa64"
+ HP_ARCH=hppa64
fi
fi
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
+ exit ;;
ia64:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ia64-hp-hpux${HPUX_REV}
- exit 0 ;;
+ exit ;;
3050*:HI-UX:*:*)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
@@ -699,340 +742,351 @@ EOF
exit (0);
}
EOF
- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
echo unknown-hitachi-hiuxwe2
- exit 0 ;;
+ exit ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
echo hppa1.1-hp-bsd
- exit 0 ;;
+ exit ;;
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
- exit 0 ;;
+ exit ;;
*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
echo hppa1.0-hp-mpeix
- exit 0 ;;
+ exit ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
echo hppa1.1-hp-osf
- exit 0 ;;
+ exit ;;
hp8??:OSF1:*:*)
echo hppa1.0-hp-osf
- exit 0 ;;
+ exit ;;
i*86:OSF1:*:*)
if [ -x /usr/sbin/sysversion ] ; then
echo ${UNAME_MACHINE}-unknown-osf1mk
else
echo ${UNAME_MACHINE}-unknown-osf1
fi
- exit 0 ;;
+ exit ;;
parisc*:Lites*:*:*)
echo hppa1.1-hp-lites
- exit 0 ;;
+ exit ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
- exit 0 ;;
+ exit ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
- exit 0 ;;
+ exit ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
echo c34-convex-bsd
- exit 0 ;;
+ exit ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
echo c38-convex-bsd
- exit 0 ;;
+ exit ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
- exit 0 ;;
+ exit ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ exit ;;
CRAY*[A-Z]90:*:*:*)
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ exit ;;
CRAY*TS:*:*:*)
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ exit ;;
CRAY*T3E:*:*:*)
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ exit ;;
CRAY*SV1:*:*:*)
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ exit ;;
*:UNICOS/mp:*:*)
- echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
+ FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:BSD/OS:*:*)
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:FreeBSD:*:*)
- # Determine whether the default compiler uses glibc.
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #include <features.h>
- #if __GLIBC__ >= 2
- LIBC=gnu
- #else
- LIBC=
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- # GNU/KFreeBSD systems have a "k" prefix to indicate we are using
- # FreeBSD's kernel, but not the complete OS.
- case ${LIBC} in gnu) kernel_only='k' ;; esac
- echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
- exit 0 ;;
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
- exit 0 ;;
- i*:MINGW*:*)
+ exit ;;
+ *:MINGW64*:*)
+ echo ${UNAME_MACHINE}-pc-mingw64
+ exit ;;
+ *:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
- exit 0 ;;
+ exit ;;
+ *:MSYS*:*)
+ echo ${UNAME_MACHINE}-pc-msys
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
- exit 0 ;;
- x86:Interix*:[34]*)
- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
- exit 0 ;;
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
echo i${UNAME_MACHINE}-pc-mks
- exit 0 ;;
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
# UNAME_MACHINE based on the output of uname instead of i386?
echo i586-pc-interix
- exit 0 ;;
+ exit ;;
i*:UWIN*:*)
echo ${UNAME_MACHINE}-pc-uwin
- exit 0 ;;
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin
- exit 0 ;;
+ exit ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
+ exit ;;
*:GNU:*:*)
# the GNU system
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
- exit 0 ;;
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+ exit ;;
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
- exit 0 ;;
+ exit ;;
+ aarch64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ 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 -q ld.so.1
+ if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+ fi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
cris:Linux:*:*)
- echo cris-axis-linux-gnu
- exit 0 ;;
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ crisv32:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ frv:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ hexagon:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:Linux:*:*)
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+ exit ;;
ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ k1om:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
m32r*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- mips:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#undef CPU
- #undef mips
- #undef mipsel
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mipsel
+ CPU=${UNAME_MACHINE}el
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips
+ CPU=${UNAME_MACHINE}
#else
CPU=
#endif
#endif
EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
;;
- mips64:Linux:*:*)
- eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
- #undef CPU
- #undef mips64
- #undef mips64el
- #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=mips64el
- #else
- #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=mips64
- #else
- CPU=
- #endif
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
- ;;
- 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 ;;
+ openrisc*:Linux:*:*)
+ echo or1k-unknown-linux-${LIBC}
+ exit ;;
+ or32:Linux:*:* | or1k*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-${LIBC}
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-${LIBC}
+ exit ;;
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 ;;
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
esac
- exit 0 ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit 0 ;;
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-${LIBC}
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-${LIBC}
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-${LIBC}
+ exit ;;
s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit 0 ;;
+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+ exit ;;
sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+ exit ;;
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. 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 targets: *//
- s/ .*//
- p'`
- 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
- # 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
- #ifdef __dietlibc__
- LIBC=dietlibc
- #endif
-EOF
- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- ;;
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
# earlier versions are messed up and put the nodename in both
# sysname and nodename.
echo i386-sequent-sysv4
- exit 0 ;;
+ exit ;;
i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
+ # 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,
# I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
+ # Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit 0 ;;
+ exit ;;
i*86:OS/2:*:*)
# If we were able to find `uname', then EMX Unix compatibility
# is probably installed.
echo ${UNAME_MACHINE}-pc-os2-emx
- exit 0 ;;
+ exit ;;
i*86:XTS-300:*:STOP)
echo ${UNAME_MACHINE}-unknown-stop
- exit 0 ;;
+ exit ;;
i*86:atheos:*:*)
echo ${UNAME_MACHINE}-unknown-atheos
- exit 0 ;;
- i*86:syllable:*:*)
+ exit ;;
+ i*86:syllable:*:*)
echo ${UNAME_MACHINE}-pc-syllable
- exit 0 ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
i*86:*DOS:*:*)
echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit 0 ;;
+ exit ;;
i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
@@ -1040,15 +1094,16 @@ EOF
else
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
fi
- exit 0 ;;
- i*86:*:5:[78]*)
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
case `/bin/uname -X | grep "^Machine"` in
*486*) UNAME_MACHINE=i486 ;;
*Pentium) UNAME_MACHINE=i586 ;;
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
esac
echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
- exit 0 ;;
+ exit ;;
i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
@@ -1066,73 +1121,86 @@ EOF
else
echo ${UNAME_MACHINE}-pc-sysv32
fi
- exit 0 ;;
+ exit ;;
pc:*:*:*)
# Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit 0 ;;
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configure will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
- exit 0 ;;
+ exit ;;
paragon:*:*:*)
echo i860-intel-osf1
- exit 0 ;;
+ exit ;;
i860:*:4.*:*) # i860-SVR4
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
else # Add other i860-SVR4 vendors below as they are discovered.
echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
fi
- exit 0 ;;
+ exit ;;
mini*:CTIX:SYS*5:*)
# "miniframe"
echo m68010-convergent-sysv
- exit 0 ;;
+ exit ;;
mc68k:UNIX:SYSTEM5:3.51m)
echo m68k-convergent-sysv
- exit 0 ;;
+ exit ;;
M680?0:D-NIX:5.3:*)
echo m68k-diab-dnix
- exit 0 ;;
- M68*:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
echo m68k-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
- exit 0 ;;
+ exit ;;
TSUNAMI:LynxOS:2.*:*)
echo sparc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
rs6000:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
SM[BE]S:UNIX_SV:*:*)
echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
RM*:ReliantUNIX-*:*:*)
echo mips-sni-sysv4
- exit 0 ;;
+ exit ;;
RM*:SINIX-*:*:*)
echo mips-sni-sysv4
- exit 0 ;;
+ exit ;;
*:SINIX-*:*:*)
if uname -p 2>/dev/null >/dev/null ; then
UNAME_MACHINE=`(uname -p) 2>/dev/null`
@@ -1140,278 +1208,203 @@ EOF
else
echo ns32k-sni-sysv
fi
- exit 0 ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes@openmarket.com>.
# How about differentiating between stratus architectures? -djm
echo hppa1.1-stratus-sysv4
- exit 0 ;;
+ exit ;;
*:*:*:FTX*)
# From seanf@swdc.stratus.com.
echo i860-stratus-sysv4
- exit 0 ;;
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
*:VOS:*:*)
# From Paul.Green@stratus.com.
echo hppa1.1-stratus-vos
- exit 0 ;;
+ exit ;;
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
news*:NEWS-OS:6*:*)
echo mips-sony-newsos6
- exit 0 ;;
+ exit ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
+ echo mips-nec-sysv${UNAME_RELEASE}
else
- echo mips-unknown-sysv${UNAME_RELEASE}
+ echo mips-unknown-sysv${UNAME_RELEASE}
fi
- exit 0 ;;
+ exit ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
echo powerpc-be-beos
- exit 0 ;;
+ exit ;;
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
echo powerpc-apple-beos
- exit 0 ;;
+ exit ;;
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
echo i586-pc-beos
- exit 0 ;;
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ x86_64:Haiku:*:*)
+ echo x86_64-unknown-haiku
+ exit ;;
SX-4:SUPER-UX:*:*)
echo sx4-nec-superux${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
SX-5:SUPER-UX:*:*)
echo sx5-nec-superux${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
SX-6:SUPER-UX:*:*)
echo sx6-nec-superux${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-ACE:SUPER-UX:*:*)
+ echo sxace-nec-superux${UNAME_RELEASE}
+ exit ;;
Power*:Rhapsody:*:*)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:Rhapsody:*:*)
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:Darwin:*:*)
- case `uname -p` in
- *86) UNAME_PROCESSOR=i686 ;;
- powerpc) UNAME_PROCESSOR=powerpc ;;
- esac
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ eval $set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
+ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+ if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # Avoid executing cc on OS X 10.9, as it ships with a stub
+ # that puts up a graphical alert prompting to install
+ # developer tools. Any system running Mac OS X 10.7 or
+ # later (Darwin 11 and later) is required to have a 64-bit
+ # processor. This is not true of the ARM version of Darwin
+ # that Apple uses in portable devices.
+ UNAME_PROCESSOR=x86_64
+ fi
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
+ if test "$UNAME_PROCESSOR" = x86; then
UNAME_PROCESSOR=i386
UNAME_MACHINE=pc
fi
echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:QNX:*:4*)
echo i386-pc-qnx
- exit 0 ;;
+ exit ;;
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
NSR-?:NONSTOP_KERNEL:*:*)
echo nsr-tandem-nsk${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:NonStop-UX:*:*)
echo mips-compaq-nonstopux
- exit 0 ;;
+ exit ;;
BS2000:POSIX*:*:*)
echo bs2000-siemens-sysv
- exit 0 ;;
+ exit ;;
DS/*:UNIX_System_V:*:*)
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit 0 ;;
+ exit ;;
*:Plan9:*:*)
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
# operating systems.
- if test "$cputype" = "386"; then
+ if test "$cputype" = 386; then
UNAME_MACHINE=i386
else
UNAME_MACHINE="$cputype"
fi
echo ${UNAME_MACHINE}-unknown-plan9
- exit 0 ;;
+ exit ;;
*:TOPS-10:*:*)
echo pdp10-unknown-tops10
- exit 0 ;;
+ exit ;;
*:TENEX:*:*)
echo pdp10-unknown-tenex
- exit 0 ;;
+ exit ;;
KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
echo pdp10-dec-tops20
- exit 0 ;;
+ exit ;;
XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
echo pdp10-xkl-tops20
- exit 0 ;;
+ exit ;;
*:TOPS-20:*:*)
echo pdp10-unknown-tops20
- exit 0 ;;
+ exit ;;
*:ITS:*:*)
echo pdp10-unknown-its
- exit 0 ;;
+ exit ;;
SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
- exit 0 ;;
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
*:DragonFly:*:*)
echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+ x86_64:VMkernel:*:*)
+ echo ${UNAME_MACHINE}-unknown-esx
+ exit ;;
+ amd64:Isilon\ OneFS:*:*)
+ echo x86_64-unknown-onefs
+ exit ;;
esac
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-# 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)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit 0 ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- c34*)
- echo c34-convex-bsd
- exit 0 ;;
- c38*)
- echo c38-convex-bsd
- exit 0 ;;
- c4*)
- echo c4-convex-bsd
- exit 0 ;;
- esac
-fi
-
cat >&2 <<EOF
$0: unable to guess system type
@@ -1419,7 +1412,9 @@ 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/
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
If the version you run ($0) is already up to date, please
send the following data and any information you think might be
diff --git a/config.h.in b/config.h.in
index 2f41eed..3b575e4 100644
--- a/config.h.in
+++ b/config.h.in
@@ -25,6 +25,7 @@
#define PASSWD_FILE RC_DIR "/passwd"
#define PRE_FORM_FILE RC_DIR "/pre_form"
+#define SITECONF_FILE RC_DIR "/siteconf"
#define USER_MAILCAP RC_DIR "/mailcap"
#define SYS_MAILCAP CONF_DIR "/mailcap"
#define USER_MIMETYPES "~/.mime.types"
@@ -84,7 +85,7 @@
#undef INET6
#undef HAVE_SOCKLEN_T
#undef HAVE_OLD_SS_FAMILY
-#define USE_EGD
+#undef USE_EGD
#define ENABLE_REMOVE_TRAILINGSPACES
#undef MENU_THIN_FRAME
#undef USE_RAW_SCROLL
@@ -209,6 +210,10 @@ typedef RETSIGTYPE MySignalHandler;
#define SUPPORT_WIN9X_CONSOLE_MBCS 1
#endif
+#if defined(__CYGWIN__) && defined(__x86_64__)
+#define DONT_CALL_GC_AFTER_FORK
+#endif
+
#if defined(__DJGPP__)
#define DEFAULT_TERM "dosansi"
#else
diff --git a/config.sub b/config.sub
index ba33103..8d39c4b 100755
--- a/config.sub
+++ b/config.sub
@@ -1,42 +1,40 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+# Copyright 1992-2016 Free Software Foundation, Inc.
-timestamp='2004-03-12'
+timestamp='2016-03-30'
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# 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 3 of the License, or
# (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
+# 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.
-
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
-# Please send patches to <config-patches@gnu.org>. Submit a context
-# diff and a properly formatted ChangeLog entry.
+
+# 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.
# Otherwise, we print the canonical config type on stdout and succeed.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software.
@@ -55,8 +53,7 @@ timestamp='2004-03-12'
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
Canonicalize a configuration name.
@@ -70,8 +67,7 @@ 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.
+Copyright 1992-2016 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."
@@ -83,11 +79,11 @@ Try \`$me --help' for more information."
while test $# -gt 0 ; do
case $1 in
--time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
+ echo "$timestamp" ; exit ;;
--version | -v )
- echo "$version" ; exit 0 ;;
+ echo "$version" ; exit ;;
--help | --h* | -h )
- echo "$usage"; exit 0 ;;
+ echo "$usage"; exit ;;
-- ) # Stop option processing
shift; break ;;
- ) # Use stdin as input.
@@ -99,7 +95,7 @@ while test $# -gt 0 ; do
*local*)
# First pass through any local machine types.
echo $1
- exit 0;;
+ exit ;;
* )
break ;;
@@ -118,11 +114,18 @@ esac
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
- kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
*)
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
if [ $basic_machine != $1 ]
@@ -145,10 +148,13 @@ 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 | -axis)
+ -apple | -axis | -knuth | -cray | -microblaze*)
os=
basic_machine=$1
;;
+ -bluegene*)
+ os=-cnk
+ ;;
-sim | -cisco | -oki | -wec | -winbond)
os=
basic_machine=$1
@@ -163,13 +169,17 @@ case $os in
os=-chorusos
basic_machine=$1
;;
- -chorusrdb)
- os=-chorusrdb
+ -chorusrdb)
+ os=-chorusrdb
basic_machine=$1
- ;;
+ ;;
-hiux*)
os=-hiuxwe2
;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
-sco5)
os=-sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -186,6 +196,10 @@ case $os in
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
-sco*)
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -203,6 +217,12 @@ case $os in
-isc*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
-lynx*)
os=-lynxos
;;
@@ -227,57 +247,114 @@ case $basic_machine in
# Some are omitted here because they have special meanings below.
1750a | 580 \
| a29k \
+ | aarch64 | aarch64_be \
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
- | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
- | c4x | clipper \
+ | arc | arceb \
+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+ | avr | avr32 \
+ | ba \
+ | be32 | be64 \
+ | bfin \
+ | c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
- | fr30 | frv \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
- | m32r | m32rle | m68000 | m68k | m88k | mcore \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
- | mips64vr | mips64vrel \
+ | mips64octeon | mips64octeonel \
| mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
| mips64vr4100 | mips64vr4100el \
| mips64vr4300 | mips64vr4300el \
| mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
+ | moxie \
+ | mt \
| msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 | nios2eb | nios2el \
| ns16k | ns32k \
- | openrisc | or32 \
+ | open8 | or1k | or1knd | or32 \
| pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | riscv32 | riscv64 \
+ | rl78 | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
- | strongarm \
- | tahoe | thumb | tic4x | tic80 | tron \
- | v850 | v850e \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | visium \
| we32k \
- | x86 | xscale | xstormy16 | xtensa \
- | z8k)
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
basic_machine=$basic_machine-unknown
;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ leon|leon[3-9])
+ basic_machine=sparc-$basic_machine
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
basic_machine=$basic_machine-unknown
os=-none
;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
@@ -293,59 +370,89 @@ case $basic_machine in
# Recognize the basic CPU types with company name.
580-* \
| a29k-* \
+ | aarch64-* | aarch64_be-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* \
- | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
- | clipper-* | cydra-* \
+ | avr-* | avr32-* \
+ | ba-* \
+ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
- | elxsi-* \
- | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | e2k-* | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | hexagon-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
- | m32r-* | m32rle-* \
+ | k1om-* \
+ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | mcore-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | microblaze-* | microblazeel-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \
| mips64-* | mips64el-* \
- | mips64vr-* | mips64vrel-* \
+ | mips64octeon-* | mips64octeonel-* \
| mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
| mips64vr4100-* | mips64vr4100el-* \
| mips64vr4300-* | mips64vr4300el-* \
| mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa32r6-* | mipsisa32r6el-* \
| mipsisa64-* | mipsisa64el-* \
| mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64r6-* | mipsisa64r6el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipsr5900-* | mipsr5900el-* \
| mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
| msp430-* \
- | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | or1k*-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
- | romp-* | rs6000-* \
- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | riscv32-* | riscv64-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
+ | tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
| tron-* \
- | v850-* | v850e-* | vax-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | visium-* \
| we32k-* \
- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
- | xtensa-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
| ymp-* \
- | z8k-*)
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
@@ -363,7 +470,7 @@ case $basic_machine in
basic_machine=a29k-amd
os=-udi
;;
- abacus)
+ abacus)
basic_machine=abacus-unknown
;;
adobe68k)
@@ -409,6 +516,13 @@ case $basic_machine in
basic_machine=m68k-apollo
os=-bsd
;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -417,10 +531,35 @@ case $basic_machine in
basic_machine=ns32k-sequent
os=-dynix
;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
c90)
basic_machine=c90-cray
os=-unicos
;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
convex-c1)
basic_machine=c1-convex
os=-bsd
@@ -445,13 +584,20 @@ case $basic_machine in
basic_machine=j90-cray
os=-unicos
;;
- cr16c)
- basic_machine=cr16c-unknown
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16 | cr16-*)
+ basic_machine=cr16-unknown
os=-elf
;;
crds | unos)
basic_machine=m68k-crds
;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
cris | cris-* | etrax*)
basic_machine=cris-axis
;;
@@ -481,6 +627,14 @@ case $basic_machine in
basic_machine=m88k-motorola
os=-sysv3
;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
dpx20 | dpx20-*)
basic_machine=rs6000-bull
os=-bosx
@@ -592,7 +746,6 @@ case $basic_machine in
i370-ibm* | ibm*)
basic_machine=i370-ibm
;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
i*86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
@@ -631,6 +784,17 @@ case $basic_machine in
basic_machine=m68k-isi
os=-sysv
;;
+ leon-*|leon[3-9]-*)
+ basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
m88k-omron*)
basic_machine=m88k-omron
;;
@@ -642,10 +806,21 @@ case $basic_machine in
basic_machine=ns32k-utek
os=-sysv
;;
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+ ;;
mingw32)
- basic_machine=i386-pc
+ basic_machine=i686-pc
os=-mingw32
;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
miniframe)
basic_machine=m68000-convergent
;;
@@ -659,10 +834,6 @@ 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
@@ -671,14 +842,29 @@ case $basic_machine in
basic_machine=powerpc-unknown
os=-morphos
;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ os=-moxiebox
+ ;;
msdos)
basic_machine=i386-pc
os=-msdos
;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ msys)
+ basic_machine=i686-pc
+ os=-msys
+ ;;
mvs)
basic_machine=i370-ibm
os=-mvs
;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
ncr3000)
basic_machine=i486-ncr
os=-sysv4
@@ -743,9 +929,11 @@ case $basic_machine in
np1)
basic_machine=np1-gould
;;
- nv1)
- basic_machine=nv1-cray
- os=-unicosmp
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
;;
nsr-tandem)
basic_machine=nsr-tandem
@@ -754,9 +942,8 @@ case $basic_machine in
basic_machine=hppa1.1-oki
os=-proelf
;;
- or32 | or32-*)
+ openrisc | openrisc-*)
basic_machine=or32-unknown
- os=-coff
;;
os400)
basic_machine=powerpc-ibm
@@ -778,6 +965,14 @@ case $basic_machine in
basic_machine=i860-intel
os=-osf
;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
pbd)
basic_machine=sparc-tti
;;
@@ -787,6 +982,12 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
pentium | p5 | k5 | k6 | nexgen | viac3)
basic_machine=i586-pc
;;
@@ -816,9 +1017,10 @@ case $basic_machine in
;;
power) basic_machine=power-ibm
;;
- ppc) basic_machine=powerpc-unknown
+ ppc | ppcbe) basic_machine=powerpc-unknown
;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppcle | powerpclittle | ppc-le | powerpc-little)
basic_machine=powerpcle-unknown
@@ -843,6 +1045,14 @@ case $basic_machine in
basic_machine=i586-unknown
os=-pw32
;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ os=-rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
rom68k)
basic_machine=m68k-rom68k
os=-coff
@@ -869,6 +1079,10 @@ case $basic_machine in
sb1el)
basic_machine=mipsisa64sb1el-unknown
;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
sei)
basic_machine=mips-sei
os=-seiux
@@ -880,6 +1094,9 @@ case $basic_machine in
basic_machine=sh-hitachi
os=-hms
;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
sh64)
basic_machine=sh64-unknown
;;
@@ -901,6 +1118,9 @@ case $basic_machine in
basic_machine=i860-stratus
os=-sysv4
;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
sun2)
basic_machine=m68000-sun
;;
@@ -957,17 +1177,9 @@ case $basic_machine in
basic_machine=t90-cray
os=-unicos
;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tic55x | c55x*)
- basic_machine=tic55x-unknown
- os=-coff
- ;;
- tic6x | c6x*)
- basic_machine=tic6x-unknown
- os=-coff
+ tile*)
+ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
;;
tx39)
basic_machine=mipstx39-unknown
@@ -1029,9 +1241,16 @@ case $basic_machine in
basic_machine=hppa1.1-winbond
os=-proelf
;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
xps | xps100)
basic_machine=xps100-honeywell
;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
ymp)
basic_machine=ymp-cray
os=-unicos
@@ -1040,6 +1259,10 @@ case $basic_machine in
basic_machine=z8k-unknown
os=-sim
;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
none)
basic_machine=none-none
os=-none
@@ -1059,6 +1282,9 @@ case $basic_machine in
romp)
basic_machine=romp-ibm
;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
rs6000)
basic_machine=rs6000-ibm
;;
@@ -1075,13 +1301,10 @@ case $basic_machine in
we32k)
basic_machine=we32k-att
;;
- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
basic_machine=sh-unknown
;;
- sh64)
- basic_machine=sh64-unknown
- ;;
- sparc | sparcv8 | sparcv9 | sparcv9b)
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
basic_machine=sparc-sun
;;
cydra)
@@ -1125,9 +1348,12 @@ esac
if [ x"$os" != x"" ]
then
case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
+ # First match some system type aliases
+ # that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
;;
@@ -1148,26 +1374,32 @@ case $os in
# Each alternative MUST END IN A *, to match a version number.
# -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+ | -onefs* | -tirtos*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1185,7 +1417,7 @@ case $os in
os=`echo $os | sed -e 's|nto|nto-qnx|'`
;;
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
| -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
;;
-mac*)
@@ -1206,7 +1438,7 @@ case $os in
-opened*)
os=-openedition
;;
- -os400*)
+ -os400*)
os=-os400
;;
-wince*)
@@ -1255,7 +1487,7 @@ case $os in
-sinix*)
os=-sysv4
;;
- -tpf*)
+ -tpf*)
os=-tpf
;;
-triton*)
@@ -1291,8 +1523,15 @@ case $os in
-aros*)
os=-aros
;;
- -kaos*)
- os=-kaos
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
+ -ios)
;;
-none)
;;
@@ -1316,6 +1555,12 @@ else
# system, and we'll never get to this point.
case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
*-acorn)
os=-riscix1.2
;;
@@ -1325,9 +1570,24 @@ case $basic_machine in
arm*-semi)
os=-aout
;;
- c4x-* | tic4x-*)
- os=-coff
- ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ c8051-*)
+ os=-elf
+ ;;
+ hexagon-*)
+ os=-elf
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
+ ;;
# This must come before the *-dec entry.
pdp10-*)
os=-tops20
@@ -1346,13 +1606,13 @@ case $basic_machine in
;;
m68000-sun)
os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
;;
m68*-cisco)
os=-aout
;;
+ mep-*)
+ os=-elf
+ ;;
mips*-cisco)
os=-elf
;;
@@ -1371,9 +1631,15 @@ case $basic_machine in
*-be)
os=-beos
;;
+ *-haiku)
+ os=-haiku
+ ;;
*-ibm)
os=-aix
;;
+ *-knuth)
+ os=-mmixware
+ ;;
*-wec)
os=-proelf
;;
@@ -1476,7 +1742,7 @@ case $basic_machine in
-sunos*)
vendor=sun
;;
- -aix*)
+ -cnk*|-aix*)
vendor=ibm
;;
-beos*)
@@ -1539,7 +1805,7 @@ case $basic_machine in
esac
echo $basic_machine$os
-exit 0
+exit
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
diff --git a/configure b/configure
index 4c1bc06..9cb3074 100755
--- a/configure
+++ b/configure
@@ -1486,11 +1486,11 @@ Optional Packages:
--with-migemo=MIGEMO_COMMAND migemo command
--with-editor=EDITOR default editor (/usr/bin/vi)
--with-mailer=MAILER default mailer (/usr/bin/mail)
- --with-browser=BROWSER default browser (/usr/bin/mozilla)
+ --with-browser=BROWSER default browser (/usr/bin/firefox)
--with-ssl=PREFIX support https protocol
--with-termlib=LIBS terminal library
LIBS is space separated list of:
- terminfo mytinfo termcap ncurses curses
+ terminfo mytinfo termcap tinfo ncurses curses
--with-gc=PREFIX libgc PREFIX
Some influential environment variables:
@@ -6755,7 +6755,7 @@ $as_echo "$enable_image" >&6; }
if test x"$enable_image" = xyes; then
enable_image=x11
case "`uname -s`" in
- Linux|linux|LINUX)
+ Linux|linux|LINUX|FreeBSD|freebsd|FREEBSD)
if test -c /dev/fb0; then
enable_image=x11,fb
fi;;
@@ -6811,6 +6811,9 @@ $as_echo "$with_imagelib" >&6; }
fi;;
imlib2)
with_imlib2="yes"
+ if test x"$PKG_CONFIG" = x; then
+ PKG_CONFIG=pkg-config
+ fi
if test x"$IMLIB2_CONFIG" = x; then
IMLIB2_CONFIG=imlib2-config
fi;;
@@ -6823,8 +6826,6 @@ $as_echo "$with_imagelib" >&6; }
with_gtk2="yes"
if test x"$PKG_CONFIG" = x; then
PKG_CONFIG=pkg-config
- else
- PKG_CONFIG=:
fi;;
esac
done
@@ -6926,8 +6927,8 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >=
$as_echo "#define USE_GTK2 1" >>confdefs.h
- IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
- IMGX11LDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 gtk+-2.0`"
+ IMGX11CFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0`"
elif test x"$have_gdkpixbuf" = xyes; then
$as_echo "#define USE_W3MIMG_X11 1" >>confdefs.h
@@ -6955,7 +6956,7 @@ $as_echo "$as_me: WARNING: Imlib2 is not installed. Install Imlib2 (version >=
$as_echo "#define USE_IMLIB2 1" >>confdefs.h
IMGX11CFLAGS="`${IMLIB2_CONFIG} --cflags`"
- IMGX11LDFLAGS="`${IMLIB2_CONFIG} --libs`"
+ IMGX11LDFLAGS="-lX11 `${PKG_CONFIG} --libs imlib2`"
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with X11 support" >&5
$as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
@@ -6971,8 +6972,8 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
$as_echo "#define USE_GTK2 1" >>confdefs.h
- IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0 gtk+-2.0`"
- IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0 gtk+-2.0`"
+ IMGFBCFLAGS="`${PKG_CONFIG} --cflags gdk-pixbuf-2.0`"
+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs gdk-pixbuf-2.0`"
elif test x"$have_gdkpixbuf" = xyes; then
$as_echo "#define USE_W3MIMG_FB 1" >>confdefs.h
@@ -6991,7 +6992,7 @@ $as_echo "$as_me: WARNING: unable to build w3mimgdisplay with X11 support" >&2;}
IMGOBJS="$IMGOBJS fb/fb_w3mimg.o fb/fb.o fb/fb_img.o"
IMGFBCFLAGS="`${IMLIB2_CONFIG} --cflags`"
- IMGFBLDFLAGS="`${IMLIB2_CONFIG} --libs`"
+ IMGFBLDFLAGS="`${PKG_CONFIG} --libs imlib2`"
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to build w3mimgdisplay with FB support" >&5
$as_echo "$as_me: WARNING: unable to build w3mimgdisplay with FB support" >&2;}
@@ -7344,7 +7345,7 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
-w3m_browser="/usr/bin/mozilla"
+w3m_browser="/usr/bin/firefox"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which external browser is used by default" >&5
$as_echo_n "checking which external browser is used by default... " >&6; }
@@ -7977,7 +7978,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_termlib" >&5
$as_echo "$with_termlib" >&6; }
- test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap ncurses curses"
+ test x"$with_termlib" = xyes && with_termlib="terminfo mytinfo termlib termcap tinfo ncurses curses"
for lib in $with_termlib; do
as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_tgetent" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -l$lib" >&5
@@ -8986,7 +8987,7 @@ extern char *sys_errlist[];
int
main ()
{
-printf(sys_errlist[0]);
+printf("%s", sys_errlist[0]);
;
return 0;
}
@@ -9076,7 +9077,7 @@ RC_DIR="~/.$PACKAGE"
$as_echo "#define RC_DIR \"\$RC_DIR\"" >>confdefs.h
-DOCDIRS="doc:en_English doc-jp:ja_Japanese"
+DOCDIRS="doc:en_English doc-jp:ja_Japanese doc-de:de_German"
cat >>confdefs.h <<_ACEOF
#define DOCDIRS "$DOCDIRS"
_ACEOF
@@ -9084,7 +9085,8 @@ _ACEOF
cvsver=`$AWK '\$1 ~ /Id:/ { print \$3}' $srcdir/ChangeLog`
- sed -e 's/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
+ ymdver=`sed -e 's/ .*//;s/-//g;q' $srcdir/ChangeLog`
+ sed -e 's/define CURRENT_VERSION "\(.*\)YYYYMMDD/define CURRENT_VERSION "\1'$ymdver'/;s/define CURRENT_VERSION "\(.*\)+cvs/define CURRENT_VERSION "\1+cvs-'$cvsver'/' $srcdir/version.c.in > version.c
CURRENT_VERSION=`sed -n 's/.*define CURRENT_VERSION *"w3m\/\(.*\)".*$/\1/p' version.c`
ac_config_files="$ac_config_files Makefile posubst po/Makefile.in scripts/Makefile scripts/dirlist.cgi scripts/w3mhelp.cgi scripts/w3mmail.cgi scripts/xface2xpm scripts/multipart/Makefile scripts/multipart/multipart.cgi scripts/w3mman/Makefile scripts/w3mman/w3mman scripts/w3mman/w3mman.1 scripts/w3mman/w3mman2html.cgi libwc/Makefile w3mimg/Makefile w3mimg/fb/Makefile w3mimg/x11/Makefile w3mimg/win/Makefile w3mhelp-w3m_en.html w3mhelp-w3m_ja.html w3mhelp-lynx_en.html w3mhelp-lynx_ja.html"
diff --git a/configure.ac b/configure.ac
index 7308fc6..3332251 100644
--- a/configure.ac
+++ b/configure.ac
@@ -172,7 +172,7 @@ AC_SUBST(RC_DIR)
RC_DIR="~/.$PACKAGE"
AC_DEFINE(RC_DIR, "$RC_DIR")
AC_SUBST(DOCDIRS)
-DOCDIRS="doc:en_English doc-jp:ja_Japanese"
+DOCDIRS="doc:en_English doc-jp:ja_Japanese doc-de:de_German"
AC_DEFINE_UNQUOTED(DOCDIRS, "$DOCDIRS")
AC_W3M_VERSION
diff --git a/cookie.c b/cookie.c
index 8020f6d..705e277 100644
--- a/cookie.c
+++ b/cookie.c
@@ -22,10 +22,10 @@ static int is_saved = 1;
#define contain_no_dots(p, ep) (total_dot_number((p),(ep),1)==0)
-static int
-total_dot_number(char *p, char *ep, int max_count)
+static unsigned int
+total_dot_number(char *p, char *ep, unsigned int max_count)
{
- int count = 0;
+ unsigned int count = 0;
if (!ep)
ep = p + strlen(p);
@@ -105,6 +105,7 @@ make_portlist(Str port)
pl->next = first;
first = pl;
}
+ Strfree(tmp);
return first;
}
@@ -247,16 +248,12 @@ find_cookie(ParsedURL *pu)
Strcat(tmp, Sprintf("; $Domain=\"%s\"", p1->domain->ptr));
if (p1->portl)
Strcat(tmp,
- Sprintf("; $Port=\"%s\"", portlist2str(p1->portl)));
+ Sprintf("; $Port=\"%s\"", portlist2str(p1->portl)->ptr));
}
}
return tmp;
}
-char *special_domain[] = {
- ".com", ".edu", ".gov", ".mil", ".net", ".org", ".int", NULL
-};
-
int
check_avoid_wrong_number_of_dots_domain( Str domain )
{
@@ -324,7 +321,7 @@ add_cookie(ParsedURL *pu, Str name, Str value,
if (version == 0) {
/* [NETSCAPE] rule */
- int n = total_dot_number(domain->ptr,
+ unsigned int n = total_dot_number(domain->ptr,
domain->ptr + domain->length,
3);
if (n < 2) {
@@ -332,19 +329,6 @@ add_cookie(ParsedURL *pu, Str name, Str value,
COOKIE_ERROR(COO_ESPECIAL);
}
}
- else if (n == 2) {
- char **sdomain;
- int ok = 0;
- for (sdomain = special_domain; !ok && *sdomain; sdomain++) {
- int offset = domain->length - strlen(*sdomain);
- if (offset >= 0 &&
- strcasecmp(*sdomain, &domain->ptr[offset]) == 0)
- ok = 1;
- }
- if (!ok && ! check_avoid_wrong_number_of_dots_domain(domain)) {
- COOKIE_ERROR(COO_ESPECIAL);
- }
- }
}
else {
/* [DRAFT 12] s. 4.3.2 case 2 */
@@ -463,7 +447,7 @@ save_cookies(void)
continue;
fprintf(fp, "%s\t%s\t%s\t%ld\t%s\t%s\t%d\t%d\t%s\t%s\t%s\n",
parsedURL2Str(&p->url)->ptr,
- p->name->ptr, p->value->ptr, p->expires,
+ p->name->ptr, p->value->ptr, (long)p->expires,
p->domain->ptr, p->path->ptr, p->flag,
p->version, str2charp(p->comment),
(p->portl) ? portlist2str(p->portl)->ptr : "",
@@ -517,36 +501,36 @@ load_cookies(void)
cookie->commentURL = NULL;
parseURL(readcol(&str)->ptr, &cookie->url, NULL);
if (!*str)
- return;
+ break;
cookie->name = readcol(&str);
if (!*str)
- return;
+ break;
cookie->value = readcol(&str);
if (!*str)
- return;
+ break;
cookie->expires = (time_t) atol(readcol(&str)->ptr);
if (!*str)
- return;
+ break;
cookie->domain = readcol(&str);
if (!*str)
- return;
+ break;
cookie->path = readcol(&str);
if (!*str)
- return;
+ break;
cookie->flag = atoi(readcol(&str)->ptr);
if (!*str)
- return;
+ break;
cookie->version = atoi(readcol(&str)->ptr);
if (!*str)
- return;
+ break;
cookie->comment = readcol(&str);
if (cookie->comment->length == 0)
cookie->comment = NULL;
if (!*str)
- return;
+ break;
cookie->portl = make_portlist(readcol(&str));
if (!*str)
- return;
+ break;
cookie->commentURL = readcol(&str);
if (cookie->commentURL->length == 0)
cookie->commentURL = NULL;
diff --git a/display.c b/display.c
index e00eb0c..d4f336a 100644
--- a/display.c
+++ b/display.c
@@ -257,7 +257,7 @@ make_lastline_link(Buffer *buf, char *title, char *url)
parseURL2(url, &pu, baseURL(buf));
u = parsedURL2Str(&pu);
if (DecodeURL)
- u = Strnew_charp(url_unquote_conv(u->ptr, buf->document_charset));
+ u = Strnew_charp(url_decode2(u->ptr, buf));
#ifdef USE_M17N
u = checkType(u, &pr, NULL);
#endif
@@ -487,7 +487,7 @@ displayBuffer(Buffer *buf, int mode)
term_title(conv_to_system(buf->buffername));
refresh();
#ifdef USE_IMAGE
- if (activeImage && displayImage && buf->img) {
+ if (activeImage && displayImage && buf->img && buf->image_loaded) {
drawImage();
}
#endif
@@ -521,7 +521,15 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq,
break;
}
if (hseq >= 0 && an->hseq == hseq) {
+ int start_pos = an->start.pos;
+ int end_pos = an->end.pos;
for (i = an->start.pos; i < an->end.pos; i++) {
+ if (enable_inline_image && (l->propBuf[i] & PE_IMAGE)) {
+ if (start_pos == i)
+ start_pos = i + 1;
+ else if (end_pos == an->end.pos)
+ end_pos = i - 1;
+ }
if (l->propBuf[i] & (PE_IMAGE | PE_ANCHOR | PE_FORM)) {
if (active)
l->propBuf[i] |= PE_ACTIVE;
@@ -529,9 +537,9 @@ drawAnchorCursor0(Buffer *buf, AnchorList *al, int hseq, int prevhseq,
l->propBuf[i] &= ~PE_ACTIVE;
}
}
- if (active)
+ if (active && start_pos < end_pos)
redrawLineRegion(buf, l, l->linenumber - tline + buf->rootY,
- an->start.pos, an->end.pos);
+ start_pos, end_pos);
}
else if (prevhseq >= 0 && an->hseq == prevhseq) {
if (active)
@@ -855,14 +863,16 @@ redrawLineImage(Buffer *buf, Line *l, int i)
y = (int)(i * pixel_per_line);
sx = (int)((rcol - COLPOS(l, a->start.pos)) * pixel_per_char);
sy = (int)((l->linenumber - image->y) * pixel_per_line);
- if (sx == 0 && x + image->xoffset >= 0)
- x += image->xoffset;
- else
- sx -= image->xoffset;
- if (sy == 0 && y + image->yoffset >= 0)
- y += image->yoffset;
- else
- sy -= image->yoffset;
+ if (! enable_inline_image) {
+ if (sx == 0 && x + image->xoffset >= 0)
+ x += image->xoffset;
+ else
+ sx -= image->xoffset;
+ if (sy == 0 && y + image->yoffset >= 0)
+ y += image->yoffset;
+ else
+ sy -= image->yoffset;
+ }
if (image->width > 0)
w = image->width - sx;
else
diff --git a/doc-de/README.func b/doc-de/README.func
new file mode 100644
index 0000000..9d062be
--- /dev/null
+++ b/doc-de/README.func
@@ -0,0 +1,144 @@
+ABORT Quit w3m without confirmation
+ACCESSKEY Pop up accesskey menu
+ADD_BOOKMARK Add current page to bookmarks
+ALARM Set alarm
+BACK Back to previous buffer
+BEGIN Go to the first line
+BOOKMARK View bookmarks
+CENTER_H Move to the center line
+CENTER_V Move to the center column
+CHARSET Change the current document charset
+CLOSE_TAB Close current tab
+CLOSE_TAB_MOUSE Close tab on mouse cursor (for mouse action)
+COMMAND Execute w3m command(s)
+COOKIE View cookie list
+DEFAULT_CHARSET Change the default document charset
+DEFINE_KEY Define a binding between a keystroke and a user command
+DELETE_PREVBUF Delete previous buffer (mainly for local-CGI)
+DICT_WORD Execute dictionary command (see README.dict)
+DICT_WORD_AT Execute dictionary command for word at cursor
+DISPLAY_IMAGE Restart loading and drawing of images
+DOWN Scroll down one line
+DOWNLOAD Save document (source) to file
+DOWNLOAD_LIST Display download list panel
+EDIT Edit current document
+EDIT_SCREEN Edit currently rendered document
+END Go to the last line
+EXEC_SHELL Execute shell command
+EXIT Quit w3m without confirmation
+EXTERN Execute external browser
+EXTERN_LINK View current link using external browser
+FRAME Render frames
+GOTO Go to URL
+GOTO_LINE Go to specified line
+GOTO_LINK Follow current link
+GOTO_RELATIVE Go to relative URL
+HELP View help
+HISTORY View browser history
+INFO View info of current document
+INTERRUPT Suspend w3m
+ISEARCH Incremental search forward
+ISEARCH_BACK Incremental search backward
+LEFT Shift screen one column
+LINE_BEGIN Go to the beginning of line
+LINE_END Go to the end of line
+LINE_INFO Show current line number
+LINK_BEGIN Go to the first link
+LINK_END Go to the last link
+LINK_MENU Pop up link element menu
+LIST Show all links and images
+LIST_MENU Pop up link list menu and go to selected link
+LOAD Load local file
+MAIN_MENU Pop up menu
+MARK Set/unset mark
+MARK_MID Mark Message-ID-like strings as links
+MARK_URL Mark URL-like strings as links
+MARK_WORD Mark current word as link
+MENU Pop up menu
+MENU_MOUSE Pop up menu at mouse cursor (for mouse action)
+MOUSE_TOGGLE Toggle mouse support
+MOVE_DOWN Move cursor down (a half screen scroll at the end of screen)
+MOVE_DOWN1 Move cursor down (1 line scroll at the end of screen)
+MOVE_LEFT Move cursor left (a half screen shift at the left edge)
+MOVE_LEFT1 Move cursor left (1 column shift at the left edge)
+MOVE_LIST_MENU Pop up link list menu and move cursor to selected link
+MOVE_MOUSE Move cursor to mouse cursor (for mouse action)
+MOVE_RIGHT Move cursor right (a half screen shift at the right edge)
+MOVE_RIGHT1 Move cursor right (1 column shift at the right edge)
+MOVE_UP Move cursor up (a half screen scroll at the top of screen)
+MOVE_UP1 Move cursor up (1 line scroll at the top of screen)
+MSGS Display error messages
+NEW_TAB Open new tab
+NEXT Move to next buffer
+NEXT_DOWN Move downward to next link
+NEXT_LEFT Move left to next link
+NEXT_LEFT_UP Move left (or upward) to next link
+NEXT_LINK Move to next link
+NEXT_MARK Move to next word
+NEXT_PAGE Move to next page
+NEXT_RIGHT Move right to next link
+NEXT_RIGHT_DOWN Move right (or downward) to next link
+NEXT_TAB Move to next tab
+NEXT_UP Move upward to next link
+NEXT_VISITED Move to next visited link
+NEXT_WORD Move to next word
+NOTHING Do nothing
+NULL Do nothing
+OPTIONS Display option setting panel
+PEEK Peek at current URL
+PEEK_IMG Peek at image URL
+PEEK_LINK Peek at link URL
+PIPE_BUF Send rendered document to pipe
+PIPE_SHELL Execute shell command and browse
+PREV Move to previous buffer
+PREV_LINK Move to previous link
+PREV_MARK Move to previous mark
+PREV_PAGE Move to previous page
+PREV_TAB Move to previous tab
+PREV_VISITED Move to previous visited link
+PREV_WORD Move to previous word
+PRINT Save buffer to file
+QUIT Quit w3m
+READ_SHELL Execute shell command and load
+REDO Cancel the last undo
+REDRAW Redraw screen
+REG_MARK Set mark using regexp
+REINIT Reload configuration files
+RELOAD Reload buffer
+RESHAPE Re-render buffer
+RIGHT Shift screen one column right
+SAVE Save document (source) to file
+SAVE_IMAGE Save image to file
+SAVE_LINK Save link to file
+SAVE_SCREEN Save buffer to file
+SEARCH Search forward
+SEARCH_BACK Search backward
+SEARCH_FORE Search forward
+SEARCH_NEXT Search next regexp
+SEARCH_PREV Search previous regexp
+SELECT Go to buffer selection panel
+SELECT_MENU Pop up buffer selection menu
+SETENV Set environment variable
+SET_OPTION Set option
+SHELL Execute shell command
+SHIFT_LEFT Shift screen left
+SHIFT_RIGHT Shift screen right
+SOURCE View HTML source
+STOP_IMAGE Stop loading and drawing of images
+SUBMIT Submit form
+SUSPEND Suspend w3m
+TAB_GOTO Open URL on new tab
+TAB_GOTO_RELATIVE Open relative URL on new tab
+TAB_LEFT Move current tab left
+TAB_LINK Open current link on new tab
+TAB_MENU Pop up tab selection menu
+TAB_MOUSE Move to tab on mouse cursor (for mouse action)
+TAB_RIGHT Move current tab right
+UNDO Cancel the last cursor movement
+UP Scroll up one line
+VERSION Display version of w3m
+VIEW View HTML source
+VIEW_BOOKMARK View bookmarks
+VIEW_IMAGE Bild anzeigen
+WHEREIS Search forward
+WRAP_TOGGLE Toggle search wrap mode
diff --git a/doc-jp/FAQ.html b/doc-jp/FAQ.html
index e16a986..86ef05a 100644
--- a/doc-jp/FAQ.html
+++ b/doc-jp/FAQ.html
@@ -176,7 +176,7 @@ w3m
��¸���ޤ�����������¸������� ESC I �Ǥ���
<p>
<dt>�ץ�����������Ϥɤ�����Ρ�
-<dd>�Ķ��ѿ� HTTP_proxy �����ꤹ�뤫��"o" ���ޥ�ɤΥ��ץ��������ѥͥ�
+<dd>�Ķ��ѿ� HTTP_PROXY, HTTPS_PROXY, GOPHER_PROXY, FTP_PROXY �����ꤹ�뤫��"o" ���ޥ�ɤΥ��ץ��������ѥͥ�
�����ꤷ�ޤ����㤨�� proxy.hogege.com �Ȥ����ۥ��Ȥ� 8000�֥ݡ��Ȥ�
���Ѥ����硤
<p>
diff --git a/doc-jp/MANUAL.html b/doc-jp/MANUAL.html
index 41d70f1..66fdc6e 100644
--- a/doc-jp/MANUAL.html
+++ b/doc-jp/MANUAL.html
@@ -51,15 +51,9 @@ w3m
<dt>-l �Կ�
<dd>ɸ�����Ϥ����Ƥ�ɽ������Ȥ�����¸��������Կ�����ꤹ
�롥�ǥե���Ȥ� 10000��
-<dt>-s
-<dd>Shift_JIS �����ɤ�ɽ�����롥
-<dt>-e
-<dd>EUC �����ɤ�ɽ�����롥
-<dt>-j
-<dd>JIS(ISO-2022-JP) �����ɤ�ɽ�����롥
-<dt>-O e|s|j|N|m|n
+<dt>-O ʸ��������
<dd>ɽ�����Ѥ���ʸ�������ɤ���ꤹ�롥
-<dt>-I e|s
+<dt>-I ʸ��������
<dd>����ʸ���ʸ�������ɤ���ꤹ�롥
<dt>-T ������
<dd>ɽ������ʸ��Υ����פ���ꤹ�롥���λ��꤬�ʤ���硤�ե�����
@@ -89,7 +83,7 @@ HTML
<dd>���顼ɽ���ʤ���
<dt>-F
<dd>�ե졼���ưɽ�����롥
-<dt>-S
+<dt>-s
<dd>Ϣ³������Ԥ�1�ԤˤޤȤ��ɽ�����롥
<dt>-X
<dd>w3m��λ���ˡ������β��̤����ʤ���
@@ -211,9 +205,9 @@ HTMLʸ
<TR><TD>F<TD><FRAMESET>��ޤ�ʸ���ɽ�����Ƥ���Ȥ��ˡ�<FRAME>
�����λؤ�ʣ����ʸ���1�Ĥ�ʸ����Ѵ�����ɽ�����ޤ���
<TR><TD>M<TD>���߸��Ƥ���ڡ��������֥饦����Ȥä�ɽ�����ޤ���
-2M, 3M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2M, 3M, ..., 9M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
<TR><TD>ESC M<TD>���ߤΥ��������֥饦����Ȥä�ɽ�����ޤ���
-2ESC M, 3ESC M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2ESC M, 3ESC M, ..., 9ESC M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
</table>
<H3>�ե������URL�ط������</H3>
@@ -349,9 +343,9 @@ Lynx
<TR><TD>F<TD><FRAMESET>��ޤ�ʸ���ɽ�����Ƥ���Ȥ��ˡ�<FRAME>
�����λؤ�ʣ����ʸ���1�Ĥ�ʸ����Ѵ�����ɽ�����ޤ���
<TR><TD>M<TD>���߸��Ƥ���ڡ��������֥饦����Ȥä�ɽ�����ޤ���
-2M, 3M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2M, 3M, ..., 9M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
<TR><TD>ESC M<TD>���ߤΥ��������֥饦����Ȥä�ɽ�����ޤ���
-2ESC M, 3ESC M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2ESC M, 3ESC M, ..., 9ESC M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
</table>
<H3>�ե������URL�ط������</H3>
@@ -489,8 +483,7 @@ w3m
w3m��Ȥ��С�HTTP�����Фʤ���CGI������ץȤ�ư���뤳�Ȥ��Ǥ��ޤ���
���ΤȤ���w3m�������ФΤդ�ƥ�����ץȤ�ư�������ν��Ϥ�
�ɤߤ����ɽ������櫓�Ǥ���
-<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">�֥å��ޡ�������Ͽ</a>��
-<a href="file:///$LIB/w3mhelperpanel?mode=panel">�����ӥ塼�����Խ�</a>
+�֥å��ޡ�������Ͽ�ȳ����ӥ塼�����Խ�
�ϡ�local CGI�Υ�����ץȤȤ��Ƽ¸�����Ƥ��ޤ���
local CGI��Ȥ��С�w3m�����ѤΥե��������ϥ��ե������Ȥ���
�Ȥ����Ȥ��Ǥ��ޤ���
diff --git a/doc-jp/README b/doc-jp/README
index 074766f..e5e59b1 100644
--- a/doc-jp/README
+++ b/doc-jp/README
@@ -122,7 +122,6 @@ w3m
��������±�
satodai@w3m.jp
-���ո��������ۤ�ML�ޤǤ�����������
- w3m-dev@sic.med.tohoku.ac.jp (���ܸ�)
- w3m-dev-en@sic.med.tohoku.ac.jp (�Ѹ�)
+���ո��������ۤ���������
http://w3m.sourceforge.net/
+ https://sourceforge.net/projects/w3m/
diff --git a/doc-jp/README.SSL b/doc-jp/README.SSL
index 4aedfde..47d5fd6 100644
--- a/doc-jp/README.SSL
+++ b/doc-jp/README.SSL
@@ -25,9 +25,9 @@ SSL
ssl_forbid_method
�Ȥ�ʤ�SSL��åɤΥꥹ��(2: SSLv2, 3: SSLv3, t: TLSv1)
- (�ǥե���Ȥ�<NULL>).
+ (�ǥե���Ȥ�2, 3).
ssl_verify_server ON/OFF
- SSL�Υ�����ǧ�ڤ�Ԥ�(�ǥե���Ȥ�OFF).
+ SSL�Υ�����ǧ�ڤ�Ԥ�(�ǥե���Ȥ�ON).
ssl_cert_file �ե�����̾
SSL�Υ��饤�������PEM����������ե�����(�ǥե���Ȥ�<NULL>).
ssl_key_file �ե�����̾
@@ -85,6 +85,9 @@ SSL
#
# certdata2pem.rb
+if RUBY_VERSION>="1.9"
+ Encoding.default_external="UTF-8"
+end
while line = $stdin.gets
next if line =~ /^#/
next if line =~ /^\s*$/
diff --git a/doc-jp/README.func b/doc-jp/README.func
index 542aaa9..1b2a060 100644
--- a/doc-jp/README.func
+++ b/doc-jp/README.func
@@ -36,7 +36,6 @@ GOTO_RELATIVE
HELP �إ�ץե������ɽ�����ޤ�
HISTORY URL�����ɽ�����ޤ�
INFO ���ߤ�ʸ��˴ؤ�������ɽ�����ޤ�
-INIT_MAILCAP mailcap ����ɤ߹��ߤ��ޤ�(��� local-CGI ��)
INTERRUPT ʸ����ɤ߹��ߤ����Ǥ��ޤ�
ISEARCH �ե�����������ˤफ�äƥ����륵�������ޤ�
ISEARCH_BACK �ե��������Ƭ�ˤफ�äƥ����륵�������ޤ�
diff --git a/doc-jp/README.siteconf b/doc-jp/README.siteconf
new file mode 100644
index 0000000..90066f7
--- /dev/null
+++ b/doc-jp/README.siteconf
@@ -0,0 +1,60 @@
+siteconf: �������̥������ޥ���
+
+siteconf �ϡ� URL �Υѥ�����ȡ������ɳ�դ���줿���꤫������ޤ���
+siteconf ��Ȥ��ȡ����������ʸ�������ɤ���ꤷ�� "decode_url"
+�ν��Ϥ���������ꡢ Google �Υ�����쥯������ǽ��
+�ץ饤�Х�������夵�����ꤹ�뤳�Ȥ��Ǥ��ޤ���
+
+�ǥե���ȤǤ� siteconf �� ~/.w3m/siteconf �����ɤ߹��ޤ�ޤ���
+
+===== ��ʸ =====
+
+url <url>|/<re-url>/|m@<re-url>@i [exact]
+substitute_url "<destination-url>"
+url_charset <charset>
+no_referer_from on|off
+no_referer_to on|off
+
+��������˽줿��Τ�ͥ�褵��ޤ���
+
+===== �� =====
+
+url "https://twitter.com/"
+substitute_url "https://mobile.twitter.com/"
+
+twitter.com ���Х��륵���Ȥ�ž�����ޤ���
+
+url "http://your.bookmark.net/"
+no_referer_from on
+
+your.bookmark.net ����ĥ�ä����é��ݤˡ� HTTP referer ��
+����ʤ��褦�ˤ��ޤ���
+
+url "http://www.google.com/url?" exact
+substitute_url "file:///cgi-bin/your-redirector.cgi?"
+
+Google �Υ�����쥯���� local CGI ��ž�����ޤ���
+
+url /^http:\/\/[a-z]*\.wikipedia\.org\//
+url_charset utf-8
+
+Ʊ���� "decode_url" ���ץ�����ˤ���ȡ� Wikipedia �ؤ�
+��� UTF-8 �Ȥ��ƥǥ����ɤ���ɽ�����ޤ���
+
+===== ����ɽ���ˤĤ��� =====
+
+��������ɽ���Ϥ������Ʊ����̣��ɽ���ޤ���
+
+/http:\/\/www\.example\.com\//
+m/http:\/\/www\.example\.com\//
+m@http://www\.example\.com/@
+m!http://www\.example\.com/!
+
+�Ǹ�� 'i' �����Ҥ��դ���ȡ���ʸ����ʸ������̤����˾ȹ��Ԥ��ޤ���
+�㤨�С� m@^http://www\.example\.com/abc/@i �ϰʲ��Τ�����Ȥ���פ��ޤ���
+
+http://www.example.com/abc/
+http://www.example.com/Abc/
+http://www.example.com/ABC/
+
+���������ۥ���̾����ʬ�Ͼ�˾�ʸ�����Ѵ����Ƥ�����Ӥ��ޤ���
diff --git a/doc-jp/keymap.lynx b/doc-jp/keymap.lynx
index 869c716..e4085c8 100644
--- a/doc-jp/keymap.lynx
+++ b/doc-jp/keymap.lynx
@@ -46,7 +46,7 @@ keymap - PREV_PAGE
keymap . RIGHT
keymap / SEARCH
keymap : MARK_URL
-keymap ; MARK_WORD
+keymap ";" MARK_WORD
keymap < SHIFT_LEFT
keymap = INFO
keymap > SHIFT_RIGHT
diff --git a/doc-jp/w3m.1 b/doc-jp/w3m.1
index 89aacb6..a54e078 100644
--- a/doc-jp/w3m.1
+++ b/doc-jp/w3m.1
@@ -1,5 +1,5 @@
.\"
-.TH W3M 1 "Jun 6 2000" "UNIX"
+.TH W3M 1 "2016-04-02" "w3m 0.5.3"
.SH NAME
.B w3m
\- text base pager/WWW browser
@@ -39,19 +39,10 @@ text/plain
ɸ�����Ϥ����Ƥ�ɽ������Ȥ�����¸��������Կ�����ꤹ�롥
�ǥե���Ȥ�10000��
.TP
-.B \-s
-Shift_JIS�����ɤ�ɽ�����롥
-.TP
-.B \-e
-EUC�����ɤ�ɽ�����롥
-.TP
-.B \-j
-JIS (ISO-2022-JP)�����ɤ�ɽ�����롥
-.TP
-.BI \-O\ e|s|j|N|m
+.BI \-O\ ʸ��������
ɽ���˻Ȥ�ʸ�������ɤ���ꤹ��.
.TP
-.BI \-I\ e|s
+.BI \-I\ ʸ��������
����ʸ���ʸ�������ɤ���ꤹ�롥
.TP
.BI \-T\ ������
@@ -90,7 +81,7 @@ Bookmark
.B \-F
�ե졼���ưɽ�����롥
.TP
-.B \-S
+.B \-s
Ϣ³������Ԥ�1�ԤˤޤȤ��ɽ�����롥
.TP
.B \-X
@@ -327,13 +318,13 @@ URL
.TP
.B M
���߸��Ƥ���ڡ��������֥饦����Ȥä�ɽ�����ޤ���
-.B 2M, 3M
-��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+.B 2M, 3M, ..., 9M
+��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
.TP
.B "ESC M"
���ߤΥ��������֥饦����Ȥä�ɽ�����ޤ���
-.B "2ESC M", "3ESC M"
-��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+.B "2ESC M", "3ESC M", ..., "9ESC M"
+��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
.SS �ե������URL�ط������
.TP
.B U
diff --git a/doc/FAQ.html b/doc/FAQ.html
index ed2a704..34da9f1 100644
--- a/doc/FAQ.html
+++ b/doc/FAQ.html
@@ -1,151 +1,423 @@
-<HTML>
-<HEAD>
-<TITLE>W3M FAQ</TITLE>
-</HEAD>
-<BODY>
-<p>
-<center><h1>Frequently Asked Questions and Answers about w3m</h1></center>
-<div align=right>
-Akinori Ito<br>
-aito@fw.ipsj.or.jp<br>
-Corrected by Tom Berger <tom.be@gmx.net>
-</div>
-<p>
-<b><center><font size=+1><u><a name="index">Index</a></u></font></center></b>
-<p>
-<br>
-<ul>
-<li><h2><a href="#general">General Questions, How to Get It, Required Environment</a></h2></li>
-<ul>
-<li><h3>How do I pronounce "w3m"?</h3>
-<li><h3>Why is it called "w3m"?</h3>
-<li><h3>On which platforms does w3m work?</h3>
-<li><h3>Where can I get more information about w3m?</h3>
-<li><h3>Is there a mailing list for w3m?</h3>
-<li><h3>Are there any binary distributions?</h3>
-</ul>
-<br>
-<li><a href="#install"><h2>Compile and Install</h2></a>
-<br>
-<li><a href="#command"><h2>Options, Commands, Usage</h2></a>
-<ul>
-<li><h3>w3m quits if started without parameters. What's wrong?</h3>
-<li><h3>w3m starts with black characters on a black screen. How do I change this?</h3>
-<li><h3>Does w3m support colours?</h3>
-<li><h3>Does w3m support monochrome display?</h3>
-<li><h3>How do I shift the display?</h3>
-<li><h3>How do I move from anchor to anchor?</h3>
-<li><h3>Netscape displays a word red, but w3m doesn't. Why?</h3>
-<li><h3>How do I change the colour of anchor-/image-/form links?</h3>
-<li><h3>w3m doesn't seem to use the variable EDITOR. Why? </h3>
-<li><h3>How do I quit a search or URL text input?</h3>
-</ul>
-<br>
-<li><a href="#www"><h2>Questions about WWW usage</h2></a>
-<ul>
-<li><h3>How do I fill in forms with w3m?</h3>
-<li><h3>Seems like w3m is slower than Netscape or Lynx. Why?</h3>
-<li><h3>Loading time doesn't decrease when loading a previously seen page</h3>
-<li><h3>How do I download a linked file?</h3>
-<li><h3>How do I specify a proxy server?</h3>
-<li><h3>w3m freezes when I invoke an external browser.</h3>
-<li><h3>How do I change the default image viewer?</h3>
-<li><h3>How do I enter a URL?</h3>
-<li><h3>w3m appends a URL to the former one despite of having cleared the line with Ctrl-u. What to do?</h3>
-</ul>
-<br>
-<li><a href="#other"><h2>Misc</a></h2>
-<ul>
-<li><h3>What is w3m's configuration file?</h3>
-<li><h3>What are these w3mxxxx files in my ~/.w3m directory for?</h3>
-</ul>
-<br>
-<br>
-<u><h2><a name="general">General Questions, How to Get It, Required Environment</a></h2></u>
-<br>
-<dl>
-<dt><h3>How do I pronounce "w3m"?</h3>
-<dd>It's "W-three-M". It doesn't rhyme with "pteranodon".
-<p>
-<dt><h3>Why is it called "w3m"?</h3>
-<dd>It's an abbreviation of "WWW-wo-Miru", which is Japanese for
-"See the WWW". So in English the name of this browser would be
-something like "stw3".
-<p>
-<dt><h3>On which platforms does w3m work?</h3>
-<dd>It runs on various versions of Unix, since version 990226 on OS/2 and since
-version 990303 also on MS-Windows with Cygwin32.
-<br>
-Current versions have been confirmed to run on:
-<ul>
-<li>SunOS 4.1.x
-<li>HP-UX 9.x, 10.x
-<li>Solaris 2.5.x, 2.6, 8
-<li>Linux 2.0.30
-<li>FreeBSD 2.2.8, 3.1, 3.2, 4.6
-<li>NetBSD/macppc, m68k
-<li>EWS4800 Rel.12.2 Rev.A
-<li>Digital UNIX: v3.2D, v4.0D
-<li>IRIX 5.3, IRIX 6.5
-<li>OS/2 with emx
-<li>Windows 9x/NT with Cygwin32 b20.1
-<li>MS-DOS with DJGPP and WATT32 packet driver
-<li>MacOS X Server
-<li>MacOS X 10.1, 10.2
-</ul>
-<dt><h3>Where can I get more information about w3m?</h3>
-<dd>At the <a href="http://w3m.sourceforge.net/index.en.html">English w3m home page</a>.
-<dt><h3>Is there a mailing list for w3m?</h3>
-<dd>There is a mailing list for developpers (w3m-dev-en). Please see
-<a href="http://w3m.sourceforge.net/index.en.html">w3m page</a>
-for details. You may also mail your comments to <a href="mailto:aito@fw.ipsj.or.jp">the author</a>.
-<dt><h3>Are there any binary distributions?</h3>
-<dd>So far there are only binaries for the win/cygnus32 version. You can get
-them from <a href="http://prdownloads.sourceforge.net/w3m/">here</a>.
-Contact <a href="mailto:aito@fw.ipsj.or.jp">the author</a> if you want to contribute binaries for other platforms.
-</dd>
-</dl>
-<br>
-<div align=right>
-<i>Up to <a href="#index">index</a></i>
-</div>
-<br>
-<u><h2><a name="install">Compile and Install</a></h2></u>
-No problem :-)
-<u><h2><a name="command">Options, Commands, Usage</a></h2></u>
-<br>
-<dl>
-<dt><h3>w3m quits if started without parameters. What's wrong?</h3>
-<dd>w3m is a <b>pager</b>. Therefore it just quits when invoked without any
-arguments. Possible arguments are:
-<ol>
-<li>A filename or an URL
-<li>Pipe from standard input
-<li>The -B option (Show bookmark file)
-<li>The -v option (visual startup)
-<li>From a specified HTTP_HOME or WWW_HOME variable
-</ol>
-<p>
-<dt><h3>w3m starts with black characters on black background. How do I change
-this?</h3>
-<dd>
-When compiled with colour support, w3m assumes a white background and therefore
-displays black characters.
-<br>
-You may either change the background colour of your terminal (e.g. with the -bg
-option in a xterm) or take these steps:
-<ul>
-<li>invoke w3m with 'w3m -M' (for monochrome),
-<li>type 'o' for getting to the options screen
-<li><b>Mark 'Display with colour' as ON</b> and choose an arbitrary colour.
-Click on [OK].
-</ul>
-<p>
-<dt><h3>Does w3m support colours?</h3>
-<dd>Yes. When you run './configure', answer the question
-<p>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <head>
+ <meta http-equiv=content-type content="text/html;charset=US-ASCII">
+ <title>W3M FAQ</title>
+ </head>
+ <body>
+ <h1 align="center">
+ Frequently Asked Questions and Answers about w3m
+ </h1>
+ <p align="right">
+ Akinori Ito<br>
+ aito@fw.ipsj.or.jp<br>
+ Corrected by Tom Berger <tom.be@gmx.net>
+ </p>
+ <h2 id="index">
+ <u>
+ Index
+ </u>
+ </h2>
+ <ul>
+ <li>
+ <a href="#general">
+ <b>
+ General Questions, How to Get It, Required Environment
+ </b>
+ </a>
+ </li>
+ <ul>
+ <li>
+ <b>
+ How do I pronounce <q>w3m</q>?
+ </b>
+ </li>
+ <li>
+ <b>
+ Why is it called <q>w3m</q>?
+ </b>
+ </li>
+ <li>
+ <b>
+ On which platforms does w3m work?
+ </b>
+ </li>
+ <li>
+ <b>
+ Where can I get more information about w3m?
+ </b>
+ </li>
+ <li>
+ <b>
+ Is there a mailing list for w3m?
+ </b>
+ </li>
+ <li>
+ <b>
+ Are there any binary distributions?
+ </b>
+ </li>
+ </ul>
+ <li>
+ <a href="#install">
+ <b>
+ Compile and Install
+ </b>
+ </a>
+ </li>
+ <li>
+ <a href="#command">
+ <b>
+ Options, Commands, Usage
+ </b>
+ </a>
+ </li>
+ <ul>
+ <li>
+ <b>
+ w3m quits if started without parameters. What's wrong?
+ </b>
+ </li>
+ <li>
+ <b>
+ w3m starts with black characters on a black background. How do
+ I change this?
+ </b>
+ </li>
+ <li>
+ <b>
+ Does w3m support colors?
+ </b>
+ </li>
+ <li>
+ <b>
+ Does w3m support monochrome displays?
+ </b>
+ </li>
+ <li>
+ <b>
+ How do I shift the display?
+ </b>
+ </li>
+ <li>
+ <b>
+ How do I move from anchor to anchor?
+ </b>
+ </li>
+ <li>
+ <b>
+ Graphical browsers display a word red, but w3m doesn't. Why?
+ </b>
+ </li>
+ <li>
+ <b>
+ How do I change the color of anchor/image/form links?
+ </b>
+ </li>
+ <li>
+ <b>
+ w3m doesn't seem to use the variable EDITOR. Why?
+ </b>
+ </li>
+ <li>
+ <b>
+ How do I quit a search or URL text input?
+ </b>
+ </li>
+ </ul>
+ <li>
+ <a href="#www">
+ <b>
+ Questions about WWW usage
+ </b>
+ </a>
+ </li>
+ <ul>
+ <li>
+ <b>
+ How do I fill in forms with w3m?
+ </b>
+ </li>
+ <li>
+ <b>
+ Seems like w3m is slower than some other browsers. Why?
+ </b>
+ </li>
+ <li>
+ <b>
+ Loading time doesn't decrease when loading a previously seen
+ page.
+ </b>
+ </li>
+ <li>
+ <b>
+ How do I download a linked file?
+ </b>
+ </li>
+ <li>
+ <b>
+ How do I specify a proxy server?
+ </b>
+ </li>
+ <li>
+ <b>
+ w3m freezes when I invoke an external browser.
+ </b>
+ </li>
+ <li>
+ <b>
+ How do I change the default image viewer?
+ </b>
+ </li>
+ <li>
+ <b>
+ How do I enter a URL?
+ </b>
+ </li>
+ <li>
+ <b>
+ w3m appends a URL to the former one even when I clear the line
+ with Ctrl-u. What should I do?
+ </b>
+ </li>
+ </ul>
+ <li>
+ <a href="#other">
+ <b>
+ Miscellaneous
+ </b>
+ </a>
+ </li>
+ <ul>
+ <li>
+ <b>
+ What is w3m's configuration file?
+ </b>
+ </li>
+ <li>
+ <b>
+ What are these w3mxxxx files in my ~/.w3m directory for?
+ </b>
+ </li>
+ </ul>
+ </ul>
+ <h2 id="general">
+ <u>
+ General Questions, How to Get It, Required Environment
+ </u>
+ </h2>
+ <dl>
+ <dt>
+ <b>
+ How do I pronounce <q>w3m</q>?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ It's <q>W-three-M</q>. It doesn't rhyme with <q>pteranodon</q>.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ Why is it called <q>w3m</q>?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ It's an abbreviation of <q>WWW-wo-Miru</q>, which is Japanese
+ for <q>See the WWW</q>. So in English the name of this browser
+ would be something like <q>stw3</q>.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ On which platforms does w3m work?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ It runs on various versions of Unix, since version 990226 on OS/2
+ and since version 990303 also on MS-Windows with Cygwin32.
+ </p>
+ <p>
+ More recent versions have been confirmed to run on:
+ </p>
+ <ul>
+ <li>
+ SunOS 4.1.x
+ </li>
+ <li>
+ HP-UX 9.x, 10.x
+ </li>
+ <li>
+ Solaris 2.5.x, 2.6, 8
+ </li>
+ <li>
+ Linux 2.0.1 to 3.17
+ </li>
+ <li>
+ FreeBSD 2.2.8, 3.1, 3.2, 4.6
+ </li>
+ <li>
+ NetBSD/macppc, m68k
+ </li>
+ <li>
+ EWS4800 Rel.12.2 Rev.A
+ </li>
+ <li>
+ Digital UNIX: v3.2D, v4.0D
+ </li>
+ <li>
+ IRIX 5.3, IRIX 6.5
+ </li>
+ <li>
+ OS/2 with emx
+ </li>
+ <li>
+ Windows 9x/NT with Cygwin32 b20.1
+ </li>
+ <li>
+ MS-DOS with DJGPP and WATT32 packet driver
+ </li>
+ <li>
+ MacOS X Server
+ </li>
+ <li>
+ MacOS X 10.1, 10.2
+ </li>
+ </ul>
+ </dd>
+ <dt>
+ <b>
+ Where can I get more information about w3m?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ At the
+ <a href="http://w3m.sourceforge.net/index.en.html">English w3m
+ home page</a>.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ Is there a mailing list for w3m?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ There is a mailing list for developers (w3m-dev-en). Please see
+ the <a href="http://w3m.sourceforge.net/index.en.html">w3m home
+ page</a> for details. You may also mail your comments to
+ <a href="mailto:aito@fw.ipsj.or.jp">the author</a>.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ Are there any binary distributions?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ So far there are only binaries for the win/cygnus32 version.
+<!--
+ You can get them from
+ <a href="http://prdownloads.sourceforge.net/w3m/">here</a>.
+!-->
+ Contact <a href="mailto:aito@fw.ipsj.or.jp">the author</a> if you
+ want to contribute binaries for other platforms.
+ </p>
+ </dd>
+ </dl>
+ <p align="right">
+ <i>
+ Up to <a href="#index">index</a>
+ </i>
+ </p>
+ <h2 id="install">
+ <u>
+ Compile and Install
+ </u>
+ </h2>
+ <p>
+ No problem :-)
+ </p>
+ <h2 id="command">
+ <u>
+ Options, Commands, Usage
+ </u>
+ </h2>
+ <dl>
+ <dt>
+ <b>
+ w3m quits if started without parameters. What's wrong?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ w3m is a <b>pager</b>. Therefore it just quits when invoked
+ without any arguments. Possible arguments are:
+ </p>
+ <ol>
+ <li>
+ A filename or URL
+ </li>
+ <li>
+ Pipe from standard input
+ </li>
+ <li>
+ The -B option (show bookmark file)
+ </li>
+ <li>
+ The -v option (visual startup)
+ </li>
+ <li>
+ A specified HTTP_HOME or WWW_HOME variable
+ </li>
+ </ol>
+ </dd>
+ <dt>
+ <b>
+ w3m starts with black characters on a black background. How do I
+ change this?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ When compiled with color support, w3m assumes a white background
+ and therefore displays black characters.
+ </p>
+ <p>
+ You may either change the background color of your terminal
+ (e.g. with the -bg option in a xterm) or take these steps:
+ </p>
+ <ul>
+ <li>
+ invoke w3m with <q>w3m -M</q> (for monochrome),
+ </li>
+ <li>
+ type <q>o</q> to get to the options screen
+ </li>
+ <li>
+ Mark <q>Display with color</q> as <q>YES</q> and choose an
+ arbitrary color.
+ </li>
+ <li>
+ Click on [OK].
+ </li>
+ </ul>
+ </dd>
+ <dt>
+ <b>
+ Does w3m support colors?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ Yes. When you run <q>./configure</q>, answer the question
+ </p>
<pre>
-Let's do some configurations. Choose config option among the list."
+Let's do some configurations. Choose config option among the list.
1 - Baby model (no color, no menu, no mouse, no cookie, no SSL)
2 - Little model (color, menu, no mouse, no cookie, no SSL)
@@ -153,139 +425,311 @@ Let's do some configurations. Choose config option among the list."
4 - Cookie model (color, menu, mouse, cookie, no SSL)
5 - Monster model (with everything; you need openSSL library)
6 - Customize
-Which?
+Which?
</pre>
-<p>
-with 2,3,4 or 5.
-<p>
-<dt><h3>Does w3m support monochrome display?</h3>
-<dd>Yes. You may either
-<ol>
-<li>Answer the above mentioned 'configure' question with 1, or
-<li>Invoke w3m with the -M option, or
-<li>Type 'o' within w3m to enter the options screen and turn off colour display
-mode.
-</ol>
-<dt><h3>How do I shift the display?</h3>
-<dd>You can shift the display by moving the cursor to the edge of the screen. You
-may also use the ">"/"<" or "."/"," keys.
-<br>
-Another idea would be adjusting the xterm with the -geometry option (e.g.
-something like 'xterm -geometry 110x45 -bg white -name w3m -e w3m -B').
-<dt><h3>How do I move from anchor to anchor?</h3>
-<dd>You can move to the next anchor using TAB. ESC TAB moves cursor to the previous anchor.
-<p>
-<dt><h3>Netscape displays a word red, but w3m doesn't. Why?</h3>
-<dd>w3m doesn't support <FONT COLOR=".."> tags. It won't be impossible to implement this, but I think it would make the document more difficult to read.
-<p>
-<dt><h3>How do I change the colour of anchor-/image-/form links?</h3>
-<dd>Type 'o' within w3m to get the 'options' screen. You can change these
-settings there.
-<dt>
-<dt><h3>w3m doesn't seem to use the variable EDITOR. Why? </h3>
-<dd><dd>Go to the 'options' screen using the "o" key. Any entry in the 'Editor' field will override the environment variable.
-<br>
-If you want to use the editor specified by EDITOR blank the field and push [OK].
-<p>
-<dt><h3>How do I quit a search or URL text input?</h3>
-<dd>Clear input text using Ctrl-u and hit RETURN.
-</dd>
-</dl>
-<br>
-<div align=right>
-<i>Up to <a href="#index">index</a></i>
-</div>
-<br>
-<u><h2><a name="www">Questions about WWW usage</a></h2></u>
-<br>
-<dl>
-<dt><h3>How do I fill in forms with w3m?</h3>
-<dd>Form input fields are displayed in red (or reverse). Move the cursor to
-them and hit RETURN. Then,
-<ul>
-<li>if it is a text input field, put in your text on the bottom line,
-<li>if it is a radiobutton or checkbox, that item is selected,
-<li>if it is a textarea, an editor is spawned,
-<li>if it is 'submit' or 'reset', well, just do it.
-</ul>
-<dt><h3>Seems like w3m is slower than Netscape or Lynx. Why?</h3>
-<dd>w3m renders a HTML document in two passes. Therefore it displays the documentnot before having read the entire document.
-<br>
-Netscape or Lynx display the document before having read the whole page,
-and therefore seem faster.
-<p>
-<dt><h3>Loading time doesn't decrease when loading a previously seen page</h3>
-<dd>w3m doesn't have its own cache. Therefore, it reads the document
-from the server each time it accesses it. If possible, use a cache server.
-<p>
-<dt><h3>How do I download a linked file?</h3>
-<dd>Use 'a' (or 'd' with Lynx-like keybindings) or ESC RET. If you want to download an inline image, use ESC 'I'.
-<p>
-<dt><h3>How do I specify a proxy server?</h3>
-<dd>Set the environment variable HTTP_PROXY or use the option setting panel
-("o" key). For example, if you want to use port 8000 of proxy.hogege.com, specify
-<p>
+ <p>
+ with 2, 3, 4, or 5.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ Does w3m support monochrome displays?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ Yes. You may either
+ </p>
+ <ol>
+ <li>
+ Answer the above-mentioned <q>configure</q> question with 1,
+ or
+ </li>
+ <li>
+ Invoke w3m with the -M option, or
+ </li>
+ <li>
+ Type <q>o</q> within w3m to enter the options screen and turn
+ off color display mode.
+ </li>
+ </ol>
+ </dd>
+ <dt>
+ <b>
+ How do I shift the display?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ You can shift the display by moving the cursor to the edge of
+ the screen. You may also use the <q>></q>/<q><</q> or
+ <q>.</q>/<q>,</q> keys.
+ </p>
+ <p>
+ Another idea would be adjusting the xterm with the -geometry
+ option (e.g. something like <q>xterm -geometry 110x45 -bg white
+ -name w3m -e w3m -B</q>).
+ </p>
+ </dd>
+ <dt>
+ <b>
+ How do I move from anchor to anchor?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ You can move to the next anchor using TAB. ESC TAB moves the
+ cursor to the previous anchor.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ Graphical browsers display a word red, but w3m doesn't. Why?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ w3m doesn't support the HTML COLOR="..." attribute. It wouldn't
+ be impossible to implement this, but I think it would make
+ documents more difficult to read.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ How do I change the color of anchor/image/form links?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ Type <q>o</q> within w3m to get the <q>options</q> screen. You
+ can change these settings there.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ w3m doesn't seem to use the variable EDITOR. Why?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ Go to the <q>options</q> screen using the <q>o</q> key. Any
+ entry in the <q>Editor</q> field will override the environment
+ variable.
+ </p>
+ <p>
+ If you want to use the editor specified by EDITOR, blank the
+ field and press [OK].
+ </p>
+ </dd>
+ <dt>
+ <b>
+ How do I quit a search or URL text input?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ Clear input text using CTRL-u and hit RETURN.
+ </p>
+ </dd>
+ </dl>
+ <p align="right">
+ <i>
+ Up to <a href="#index">index</a>
+ </i>
+ </p>
+ <h2 id="www">
+ <u>
+ Questions about WWW usage
+ </u>
+ </h2>
+ <dl>
+ <dt>
+ <b>
+ How do I fill in forms with w3m?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ Form input fields are displayed in red (or reverse). Move the
+ cursor to them and hit RETURN. Then,
+ </p>
+ <ul>
+ <li>
+ if it is a text input field, put in your text on the bottom
+ line,
+ </li>
+ <li>
+ if it is a radiobutton or checkbox, that item is selected,
+ </li>
+ <li>
+ if it is a textarea, an editor is spawned,
+ </li>
+ <li>
+ if it is <q>submit</q> or <q>reset</q>, well, just do it.
+ </li>
+ </ul>
+ </dd>
+ <dt>
+ <b>
+ Seems like w3m is slower than some other browsers. Why?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ w3m renders a HTML document in two passes. Therefore it doesn't
+ start to display the document until it has finished reading it.
+ </p>
+ <p>
+ Most other browsers display the document before having read the
+ whole page, and therefore seem faster.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ Loading time doesn't decrease when loading a previously seen
+ page.
+ </b>
+ </dt>
+ <dd>
+ <p>
+ w3m doesn't have its own cache. Therefore, it reads the document
+ from the server each time it accesses it. If possible, use a
+ cache server.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ How do I download a linked file?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ Use <q>a</q> (or <q>d</q> with Lynx-like keybindings) or ESC RET.
+ If you want to download an inline image, use ESC <q>I</q>.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ How do I specify a proxy server?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ Set the environment variables HTTP_PROXY, HTTPS_PROXY, GOPHER_PROXY
+ and FTP_PROXY, or use the option setting panel (<q>o</q> key). For
+ example, if you want to use port 8000 of proxy.example.org, specify
+ </p>
<pre>
- http://proxy.hogege.com:8000/
+ http://proxy.example.org:8000/
</pre>
-<p>
-<dt><h3>w3m freezes when I invoke an external browser.</h3>
-<dd>Enter w3m's option screen using the 'o' key and specify
-<p>
+ </dd>
+ <dt>
+ <b>
+ w3m freezes when I invoke an external browser.
+ </b>
+ </dt>
+ <dd>
+ <p>
+ Enter w3m's option screen using the <q>o</q> key and specify
+ </p>
<pre>
- netscape %s &
+ firefox %s &
</pre>
-<p>
-(if you are using netscape).
-<p>
-<dt><h3>How do I change the default image viewer?</h3>
-<dd>By default w3m uses xv to view images. If you want to change it into, let's say, 'display', add the following line to ~/.w3m/mailcap or /etc/mailcap.
-<p>
+ <p>
+ (if you are using Firefox). Note that %s is replaced with the URL
+ when invoking.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ How do I change the default image viewer?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ By default w3m uses xv to view images. If you want to change it
+ into, let's say, <q>display</q>, add the following line to
+ ~/.w3m/mailcap or /etc/mailcap.
+ </p>
<pre>
image/*; display %s
</pre>
-<p>
-You can specify external viewers of other file types as well:
-<p>
+ <p>
+ You can specify external viewers of other file types as well:
+ </p>
<pre>
image/*; display %s
application/postscript; ghostview %s
application/x-dvi; xdvi %s
</pre>
-<dt><h3>How do I enter a URL?</h3>
-<dd>Type SHIFT-U
-<p>
-<dt><h3>w3m appends a URL to the former one despite of having cleared the line
-with Ctrl-u. What to do?</h3>
-<dd>Enter the <i>complete</i> adress, e.g. http://www.slashdot.org.
-</dd>
-</dl>
-<br>
-<div align=right>
-<i>Up to <a href="#index">index</a></i>
-</div>
-<br>
-<u><h2><a name="other">Miscellaneous</a></h2></u>
-<br>
-<dl>
-<dt><h3>What is w3m's configuration file?</h3>
-<dd>It is ~/.w3m/config.
-With this file, you can adjust w3m's behavior by changing values of options
-that are described to be varied with the option setting panel.
-Each line contains setting for one option, which is a pair of an option name
-and its value with a space as a separator.
-<p>
-<dt><h3>What are these w3mxxxx files in my ~/.w3m directory for?</h3>
-<dd>These are temporary files used by w3m when reading documents from a
-WWW server. They are not cache files and are usually deleted when w3m is
-terminated. If there remain any temp files, please remove them by yourself.
-<p>
-</dd>
-</dl>
-<br>
-<div align=right>
-<i>Up to <a href="#index">index</a></i>
-</div>
-<br>
-</BODY>
-</HTML>
+ </dd>
+ <dt>
+ <b>
+ How do I enter a URL?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ Type SHIFT-u
+ </p>
+ </dd>
+ <dt>
+ <b>
+ w3m appends a URL to the former one even when I clear the line
+ with CTRL-u. What should I do?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ Enter the <i>complete</i> address, e.g. http://www.slashdot.org.
+ </p>
+ </dd>
+ </dl>
+ <p align="right">
+ <i>
+ Up to <a href="#index">index</a>
+ </i>
+ </p>
+ <h2 id="other">
+ <u>
+ Miscellaneous
+ </u>
+ </h2>
+ <dl>
+ <dt>
+ <b>
+ What is w3m's configuration file?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ It is ~/.w3m/config.
+ </p>
+ <p>
+ With this file, you can adjust w3m's behavior by changing the
+ values of options whose effects are described in the option
+ setting panel. Each line contains one option setting, consisting
+ of an option name and its value with a space as a separator.
+ </p>
+ </dd>
+ <dt>
+ <b>
+ What are these w3mxxxx files in my ~/.w3m directory for?
+ </b>
+ </dt>
+ <dd>
+ <p>
+ These are temporary files used by w3m when reading documents
+ from a WWW server. They are not cache files and are usually
+ deleted when w3m is terminated. If any temp files are left
+ behind, please remove them yourself.
+ </p>
+ </dd>
+ </dl>
+ <p align="right">
+ <i>
+ Up to <a href="#index">index</a>
+ </i>
+ </p>
+ </body>
+</html>
diff --git a/doc/HISTORY b/doc/HISTORY
index b8f5b94..7f7ae2b 100644
--- a/doc/HISTORY
+++ b/doc/HISTORY
@@ -588,7 +588,7 @@ From: Okabe Katsuya <okabek@guitar.ocn.ne.jp>
* space characters in a buffer are mapped into 0x80-0x9f.
* unprintable characters (0x80-0xa0) are displayed as \xxx.
-From: Tsutomu Okada ($B2,ED(B $BJY(B) <okada@furuno.co.jp>
+From: Tsutomu Okada <okada@furuno.co.jp>
Subject: [w3m-dev 01354] minimize when #undef USE_GOPHER or USE_NNTP
2000/11/16
@@ -1422,7 +1422,7 @@ HTML4.0 ID attribute support.
From: Okabe Katsuya <okabe@fphy.hep.okayama-u.ac.jp>
table get weird when it contains <input type=hidden>.
-$B=$@5!%(B
+Fixed.
2000.2.12
From: Rogue Metal - Jake Moorman <roguemtl@stampede.org>
@@ -1649,15 +1649,15 @@ From: patakuti
If an <input type=button> tag has no `name' attribute,
w3m adds it an inappropriate name attribute.
-From: $B$d$^(B
+From: Yama
Now w3m can handle a frameset that has both ROWS and COLS.
From: aito
Now bookmarking is done by a separate command w3mbookmark.
-C-s $B$G2hLLI=<($,;_$^$C$F$$$?%P%0$N=$@5!%(B
+Bug fix that C-s hangs.
-$BJ8;zF~NO;~$K(B C-g $B$GCf;_$G$-$k$h$&$K$7$?!%(B
+Enable C-g to quit for keyboard input.
From: hovav@cs.stanford.edu
When downloading a file, an attempt to save it to a non-exist
@@ -1699,7 +1699,7 @@ Menu behavior is changed.
* Clicking outside the menu causes cancellation of sub-menu.
* <, >, +, - abandoned
-From: $B$*$+$@(B <okada@furuno.co.jp>
+From: Okada <okada@furuno.co.jp>
Now C-a/C-e are bound to 'jump to the first/last item in menu.'
From: "OMAE, jun" <jun-o@osb.att.ne.jp>
diff --git a/doc/MANUAL.html b/doc/MANUAL.html
index aff0189..44379e9 100644
--- a/doc/MANUAL.html
+++ b/doc/MANUAL.html
@@ -1,508 +1,2207 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
-<head><title>w3m manual</title>
-</head>
-<body>
-<h1>w3m MANUAL</h1>
-<div align=right>
-Akinori Ito<br>
-aito@fw.ipsj.or.jp
-</div>
-<h2>Index</h2>
-<menu>
-<li><a href="#Introduction">Introduction</a>
-<li><a href="#Options">Options</a>
-<li><a href="#Color">Document color</a>
-<li><a href="#Key:orig">Key binding</a>
-<li><a href="#Key:lynx">Lynx-like key binding</a>
-<li><a href="#Mouse">Mouse operation</a>
-<li><a href="#Key:custom">Key customization</a>
-<li><a href="#LocalCGI">Local CGI</a>
-</menu>
-
-<hr>
-<a name="Introduction"></a>
-<h2>Introduction</h2>
-w3m is a pager/text-based WWW browser. You can browse local documents and/or
-documents on the WWW using a terminal emulator.
-
-<hr>
-<a name="Options"></a>
-<h2>Options</h2>
-
-Command line usage is
-<p>
+ <head>
+ <meta http-equiv=content-type content="text/html;charset=US-ASCII">
+ <title>
+ w3m manual
+ </title>
+ </head>
+ <body>
+ <!--
+Todo:
+words anchor, link, hyperlink are used with the meaning link. Decide which one shall be prefered and used throughout the documentation
+-->
+ <!--
+Todo:
+Keybindigs: Check whether there are keybindings that contain SHIFT-Letter which shall be replaced with the majuscule. Having this notation all over the documentation, this shall be noted in the introduction paragraph of section "Key bindings"
+-->
+ <!--
+insertions tagged with "mh 2016-03-29" come from the latest version of manual page w3m (1)
+-->
+ <h1>w3m MANUAL</h1>
+ <div align="right">
+ Akinori Ito<br>
+ aito@fw.ipsj.or.jp
+ </div>
+ <h2>Index</h2>
+ <ul>
+ <li>
+ <a href="#Introduction">
+ Introduction
+ </a>
+ </li>
+ <li>
+ <a href="#Options">
+ Options
+ </a>
+ </li>
+ <li>
+ <a href="#Color">
+ Document colors
+ </a>
+ </li>
+ <li>
+ <a href="#Key:orig">
+ Key bindings
+ </a>
+ </li>
+ <li>
+ <a href="#Key:lynx">
+ Lynx-like key bindings
+ </a>
+ </li>
+ <li>
+ <a href="#Mouse">
+ Mouse operation
+ </a>
+ </li>
+ <li>
+ <a href="#Key:custom">
+ Key customization
+ </a>
+ </li>
+ <li>
+ <a href="#LocalCGI">
+ Local CGI
+ </a>
+ </li>
+ </ul>
+ <hr>
+ <h2 id="Introduction">
+ Introduction
+ </h2>
+ <p>
+ w3m is a pager/text-based WWW browser. You can browse local
+ documents and/or documents on the WWW using a terminal emulator.
+ </p>
+ <hr>
+ <h2 id="Options">
+ Options
+ </h2>
+ <p>
+ Command line usage is
+ </p>
<pre>
w3m [options] [file|URL]
</pre>
-<P>
-If you specify filenames/URLs on command line, these documents are displayed.
-If you specify nothing, w3m reads a document from standard input and display it.
-If no filename and/or URLs are specified and standard input is tty, w3m terminates
-without displaying anything.
-
-<p>
-Options are as follows:
-<dl>
-<dt>+<line number>
-<dd>Move to the specified line.
-<dt>-t width
-<dd>Specify tab width. Default is 8.
-<dt>-r
-<dd>When displaying text/plain document, prohibit emphasis using backspace.
-If you don't specify this option,
-``A^H_'' is interpreted as underlined character and ``A^HA'' as a bold character.
-<dt>-l number
-<dd>Specify line number preserved internally when reading text/plain document
-fron standard input. Default is 10000.
-<dt>-s
-<dd>Display documents with Shift_JIS code.
-<dt>-e
-<dd>Display documents with EUC_JP code.
-<dt>-j
-<dd>Display documents with ISO-2022-JP code.
-<dt>-T type
-<dd>Specify document type. Without this option, document type
-is determined from extension of a file. If the determination
-fails, the document is regarded as text/plain.
-<p>
-Example:<br>
-Read HTML document from standard input and display it
+ <p>
+ If you specify filenames/URLs on the command line, these documents
+ are displayed. If you specify nothing, w3m will read a document
+ from standard input and display it. If it doesn't find a document
+ there either then normally w3m will terminate.
+ </p>
+ <p>
+ Options include:
+ </p>
+ <dl>
+ <dt>
+ +<i>number</i>
+ </dt>
+ <dd>
+ <p>
+ Move to the specified line-number.
+ </p>
+ </dd>
+ <dt>
+ -t <i>width</i>
+ <!--mh 2016-03-29 -t <i>num</i>-->
+ </dt>
+ <dd>
+ <p>
+ Specify tab width. Default is 8.
+ <!--mh 2016-03-29 set tab width to num columns. No effect on stdout-->
+ </p>
+ </dd>
+ <dt>
+ -r
+ </dt>
+ <dd>
+ <p>
+ When displaying text/plain documents, prohibit emphasis using
+ backspace. If you don't specify this option, <q>A^H_</q> is
+ interpreted as an underlined <q>A</q> and <q>A^HA</q> as a bold
+ <q>A</q>.
+<!-- mh 2016-03-29
+use caret notation to display special escape characters (such as ANSI escapes or nroff-style backspaces for bold and underlined characters) instead of processing them
+-->
+ </p>
+ </dd>
+ <dt>
+ -l <i>number</i>
+ </dt>
+ <dd>
+ <p>
+ Specify the number of lines that should be cached while reading a
+ text/plain document from standard input. Default is 10,000.
+ </p>
+ </dd>
+ <dt>
+ -O <i>charset</i>
+ </dt>
+ <dd>
+ <p>
+ Specify display/output charset.
+<!-- mh 2016-03-29
+user defined character encoding of output data
+-->
+ </p>
+ </dd>
+ <dt>
+ -I <i>charset</i>
+ </dt>
+ <dd>
+ <p>
+ Specify document charset.
+<!-- mh 2016-03-29
+user defined character encoding of input data
+-->
+ </p>
+ </dd>
+ <dt>
+ -T <i>type</i>
+ </dt>
+ <dd>
+ <p>
+ Specify document type. Without this option, document type is
+ determined from the extension of a file. If the determination
+ fails, the document is regarded as text/plain. For example:
+ </p>
+ <p>
+ Read HTML document from standard input and display it
+ </p>
<pre>
- cat hoge.html | w3m -T text/html
+ cat example.html | w3m -T text/html
</pre>
-<p>
-Display HTML source
+ <p>
+ Display HTML source
+ </p>
<pre>
- w3m -T text/plain hoge.html
+ w3m -T text/plain example.html
</pre>
-<dt>-m
-<dd>Display document with Internet message mode.
-With this option, w3m determines document type from header information.
-It is useful when reading E-mail or NetNews messages.
-<dt>-v
-<dd>visual startup mode.
-<dt>-B
-<dd>Show the bookmark.
-<dt>-bookmark file
-<dd>Specify bookmark file.
-<dt>-M
-<dd>Monochrome display mode.
-<dt>-F
-<dd>Automatically render frame.
-<dt>-S
-<dd>Squeeze blank lines.
-<dt>-X
-<dd>Upon exit, do not display preserved screen.
-<dt>-W
-<dd>Toggle wrap search mode.
-<dt>-o option=value
-<dd>Specify option. The option names and values are
-same as that appears in ~/.w3m/config.
-<dt>-cookie
-<dd>Process cookies.
-<dt>-no-cookie
-<dd>Don't process cookies.
-<dt>-num
-<dd>Show linenumber.
-<dt>-dump
-<dd>Read document specified by URL and dump formatted text into standard
-output. The width of the document become 80. This width can be overridden
-with -cols option.
-<dt>-cols width
-<dd>Specify document width. Used with -dump option.
-<dt>-ppc count
-<dd> Specify the number of pixels per character (default 8.0). Larger
- values will make tables narrower.
-<dt>-dump_source
-<dd>Read document specified by URL and dump the source.
-<dt>-dump_head
-<dd>Read document specified by URL and dump headers.
-<dt>-dump_both
-<dd>Read document specified by URL and dump headers and the source.
-<dt>-dump_extra
-<dd>Read document specified by URL and dump extra informations, headers and the source.
-<dt>-post file
-<dd>use POST method with file content.
-<dt>-header string
-<dd>insert string as a header.
-<dt>-no-proxy
-<dd>Don't use proxy server.
-<dt>-no-graph
-<dd>Use ASCII character to draw frames.
-<dt>-no-mouse
-<dd>Don't activate mouse.
-<dt>-config file
-<dd>specify config file.
-</dl>
-
-<hr>
-<a name="Color"></a>
-<h2>Document color</h2>
-
-Links and images are displayed as follows.
-<div align="center">
-<table border="1">
-<tr><th> </th><th>Color mode</th><th>Monochrome mode</th></tr>
-<tr><td>links</td><td>blue</td><td>underline</td></tr>
-<tr><td>inline images</td><td>green</td><td>reverse</td></tr>
-<tr><td>form input</td><td>red</td><td>reverse</td></tr>
-</table>
-</div>
-These colors can be customized using option setting command "o".
-
-<hr>
-<a name="Key:orig"></a>
-<h2>Key binding</h2>
-
-After invocation, you can operate w3m by one-character commands from
-the keyboard.
-<P>
-Here's the original key-binding table. If you are using Lynx-like key
-bindings, see <a href="#Key:lynx">the Lynx-like key binding</a>.
-
-<H3>Page/Cursor motion</H3>
-<table>
-<TR><TD WIDTH=100>SPC,C-v<TD>Forward page
-<TR><TD>b,ESC v<TD>Backward page
-<TR><TD>l,C-f<TD>Cursor right
-<TR><TD>h,C-b<TD>Cursor left
-<TR><TD>j,C-n<TD>Cursor down
-<TR><TD>k,C-p<TD>Cursor up
-<TR><TD>J<TD>Roll up one line
-<TR><TD>K<TD>Roll down one line
-<TR><TD>^,C-a<TD>Go to the beginning of line
-<TR><TD>$,C-e<TD>Go to the end of line
-<TR><TD>w<TD>Go to next word
-<TR><TD>W<TD>Go to previous word
-<TR><TD>><TD>Shift screen right
-<TR><TD><<TD>Shift screen left
-<TR><TD>.<TD>Shift screen one column right
-<TR><TD>,<TD>Shift screen one column left
-<TR><TD>g,M-<<TD>Go to the first line
-<TR><TD>G,M-><TD>Go to the last line
-<TR><TD>ESC g<TD>Go to specified line
-<TR><TD>Z<TD>Move to the center line
-<TR><TD>z<TD>Move to the center column
-<TR><TD>TAB<TD>Move to next hyperlink
-<TR><TD>C-u,ESC TAB<TD>Move to previous hyperlink
-<TR><TD>[<TD>Move to the first hyperlink
-<TR><TD>]<TD>Move to the last hyperlink
-</table>
-
-<H3>Hyperlink operation</H3>
-<table>
-<TR><TD WIDTH=100>RET<TD>Follow hyperlink
-<TR><TD>a, ESC RET<TD>Save link to file
-<TR><TD>u<TD>Peek link URL
-<TR><TD>i<TD>Peek image URL
-<TR><TD>I<TD>View inline image
-<TR><TD>ESC I<TD>Save inline image to file
-<TR><TD>:<TD>Mark URL-like strings as anchors
-<TR><TD>ESC :<TD>Mark Message-ID-like strings as news anchors
-<TR><TD>c<TD>Peek current URL
-<TR><TD>=<TD>Display information about current document
-<TR><TD>C-g<TD>Show current line number
-<TR><TD>C-h<TD>View history of URL
-<TR><TD>F<TD>Render frame
-<TR><TD>M<TD>Browse current document using external browser
-(use 2M and 3M to invoke second and third browser)
-<TR><TD>ESC M<TD>Browse link using external browser
-(use 2ESC M and 3ESC M to invoke second and third browser)
-</table>
-
-<H3>File/Stream operation</H3>
-<table>
-<TR><TD WIDTH=100>U<TD>Open URL
-<TR><TD>V<TD>View new file
-<TR><TD>@<TD>Execute shell command and load
-<TR><TD>#<TD>Execute shell command and browse
-</table>
-
-<H3>Buffer operation</H3>
-<table>
-<TR><TD WIDTH=100>B<TD>Back to the previous buffer
-<TR><TD>v<TD>View HTML source
-<TR><TD>s<TD>Select buffer
-<TR><TD>E<TD>Edit buffer source
-<TR><TD>C-l<TD>Redraw screen
-<TR><TD>R<TD>Reload buffer
-<TR><TD>S<TD>Save buffer
-<TR><TD>ESC s<TD>Save source
-<TR><TD>ESC e<TD>Edit buffer image
-</table>
-
-<H3>Buffer selection mode</H3>
-<table>
-<TR><TD WIDTH=100>k, C-p<TD>Select previous buffer
-<TR><TD>j, C-n<TD>Select next buffer
-<TR><TD>D<TD>Delect current buffer
-<TR><TD>RET<TD>Go to the selected buffer
-</table>
-
-<H3>Bookmark operation</H3>
-<table>
-<TR><TD WIDTH=100>ESC b<TD>Load bookmark
-<TR><TD>ESC a<TD>Add current to bookmark
-</table>
+ </dd>
+ <dt>
+ -m
+ </dt>
+ <dd>
+ <p>
+ Display document using <q>Internet message mode</q>. With this
+ option, w3m determines document type from header information.
+ This is useful when reading e-mail or Usenet news posts.
+<!-- mh 2016-03-29
+Render the body of Usenet messages according to the header <q>Content-type</q>
+-->
+ </p>
+ </dd>
+ <dt>
+ -v
+ </dt>
+ <dd>
+ <p>
+ Show w3m's startup page.
+<!-- mh 2016-03-29
+with no other target defined, welcome users with a built-in page
+-->
+ </p>
+ </dd>
+ <dt>
+ -B
+ </dt>
+ <dd>
+ <p>
+ Show w3m's bookmarks page.
+<!-- mh 2016-03-29
+with no other target defined, use the bookmark page for startup
+-->
+ </p>
+ </dd>
+ <dt>
+ -bookmark <i>file</i>
+ </dt>
+ <dd>
+ <p>
+ Specify a custom bookmarks file.
+ </p>
+ </dd>
+ <dt>
+ -M
+ </dt>
+ <dd>
+ <p>
+ Monochrome display mode.
+<!-- mh 2016-03-29
+monochrome display
+-->
+ </p>
+ </dd>
+ <dt>
+ -F
+ </dt>
+ <dd>
+ <p>
+ Automatically render HTML frames.
+<!-- mh 2016-03-29
+render frames
+-->
+ </p>
+ </dd>
+ <dt>
+ -s
+ </dt>
+ <dd>
+ <p>
+ Squeeze blank lines.
+<!-- mh 2016-03-29
+squeeze multiple blank lines into one
+-->
+ </p>
+ </dd>
+ <dt>
+ -X
+ </dt>
+ <dd>
+ <p>
+ Upon exit, do not reinitialize the terminal.
+ </p>
+ </dd>
+ <dt>
+ -W
+ </dt>
+ <dd>
+ <p>
+ Toggle wrapping mode in searches.
+<!-- mh 2016-03-29
+toggle wrapping in searches
+-->
-<H3>Search</H3>
-<table>
-<TR><TD WIDTH=100>/,C-s<TD>Search forward
-<TR><TD>?,C-r<TD>Search backward
-<TR><TD>n<TD>Search next
-<TR><TD>N<TD>Search previous
-<TR><TD>C-w<TD>Toggle wrap search mode
-</table>
+ </p>
+ </dd>
+ <dt>
+ -o <i>option</i>=<i>value</i>
+ </dt>
+ <dd>
+ <p>
+ Specify option. The available option names and values are the
+ same as in ~/.w3m/config.
+<!-- mh 2016-03-29
+modify one configuration item with an explicitly given value; without option=value, equivalent to -show-option
+-->
+ </p>
+ </dd>
+ <dt>
+ -cookie
+ </dt>
+ <dd>
+ <p>
+ Process cookies.
+<!-- mh 2016-03-29
+use stored cookies and accept new ones
+-->
-<H3>Mark operation</H3>
-<table>
-<TR><TD WIDTH=100>C-SPC<TD>Set/unset mark
-<TR><TD>ESC p<TD>Go to previous mark
-<TR><TD>ESC n<TD>Go to next mark
-<TR><TD>"<TD>Mark by regular expression
-</table>
+ </p>
+ </dd>
+ <dt>
+ -no-cookie
+ </dt>
+ <dd>
+ <p>
+ Don't process cookies.
+<!-- mh 2016-03-29
+neither use stored cookies nor accept new ones
+-->
-<H3>Miscellany</H3>
-<table>
-<TR><TD WIDTH=100>!<TD>Execute shell command
-<TR><TD>H<TD>Help (load this file)
-<TR><TD>o<TD>Set option
-<TR><TD>C-k<TD>Show cookie jar
-<TR><TD>C-c<TD>Stop
-<TR><TD>C-z<TD>Suspend
-<TR><TD>q<TD>Quit (with confirmation, if you like)
-<TR><TD>Q<TD>Quit without confirmation
-</table>
+ </p>
+ </dd>
+ <dt>
+ -num
+ </dt>
+ <dd>
+ <p>
+ Show line-numbers.
+<!-- mh 2016-03-29
+display each line's number
+-->
+ </p>
+ </dd>
+ <dt>
+ -dump
+ </dt>
+ <dd>
+ <p>
+ Read document specified by URL and dump page rendered as text
+ into standard output. A width of 80 columns is used unless option
+ -cols sets another value.
+
+<!-- mh 2016-03-29
+dump rendered page into stdout. Set implicitly when output is directed to a file or pipe
+-->
-<H3>Line-edit mode</H3>
-<table>
-<TR><TD WIDTH=100>C-f<TD>Move cursor forward
-<TR><TD>C-b<TD>Move cursor backward
-<TR><TD>C-h<TD>Delete previous character
-<TR><TD>C-d<TD>Delete current character
-<TR><TD>C-k<TD>Kill everything after cursor
-<TR><TD>C-u<TD>Kill everything before cursor
-<TR><TD>C-a<TD>Move to the top of line
-<TR><TD>C-e<TD>Move to the bottom of line
-<TR><TD>C-p<TD>Fetch the previous string from the history list
-<TR><TD>C-n<TD>Fetch the next string from the history list
-<TR><TD>TAB,SPC<TD>Complete filename
-<TR><TD>RETURN<TD>Accept
-</table>
+ </p>
+ </dd>
+ <dt>
+ -cols <i>width</i>
+ </dt>
+ <dd>
+ <p>
+ Specify document width. Used with -dump option.
+ </p>
+ </dd>
+ <dt>
+ -ppc <i>count</i>
+ </dt>
+ <dd>
+ <p>
+ Specify the number of pixels per character (default 8.0). Larger
+ values will make tables narrower.
+<!-- mh 2016-03-29
+width of num pixels per character. Range of 4.0 to 32.0, default 8.0. Larger
+values will make tables narrower. (Implementation not verified)
+-->
+ </p>
+ </dd>
+ <dt>
+ -dump_source
+ </dt>
+ <dd>
+ <p>
+ Read document specified by URL and dump the source.
+<!-- mh 2016-03-29
+dump the page's source code into stdout
+-->
+ </p>
+ </dd>
+ <dt>
+ -dump_head
+ </dt>
+ <dd>
+ <p>
+ Read document specified by URL and dump headers.
+<!-- mh 2016-03-29
+dump response of a HEAD request for a URL into stdout
+-->
+ </p>
+ </dd>
+ <dt>
+ -dump_both
+ </dt>
+ <dd>
+ <p>
+ Read document specified by URL and dump headers and the source.
+<!-- mh 2016-03-29
+dump HEAD, and source code for a URL into stdout
+-->
-<hr>
-<a name="Key:lynx"></a>
-<h2>Lynx-like key binding</h2>
+ </p>
+ </dd>
+ <dt>
+ -dump_extra
+ </dt>
+ <dd>
+ <p>
+ Read document specified by URL and dump extra informations,
+ headers, and the source.
+<!-- mh 2016-03-29
+dump HEAD, source code, and extra information for a URL into
+stdout
+-->
-If you have chosen `Lynx-like key binding' at the compile time,
-you can use the following key binding.
+ </p>
+ </dd>
+ <dt>
+ -post <i>file</i>
+ </dt>
+ <dd>
+ <p>
+ Use POST method with file content.
+<!-- mh 2016-03-29
+use POST method to upload data defined in <q>file</q>. The syntax to be
+ used is var1=value1[&var2=value2]...
+-->
-<H3>Page/Cursor motion</H3>
-<table>
-<TR><TD WIDTH=100>SPC,C-v,+<TD>Forward page
-<TR><TD>b,ESC v,-<TD>Previous page
-<TR><TD>l<TD>Cursor right
-<TR><TD>h<TD>Cursor left
-<TR><TD>j<TD>Cursor down
-<TR><TD>k<TD>Cursor up
-<TR><TD>J<TD>Roll up one line
-<TR><TD>K<TD>Roll down one line
-<TR><TD>^<TD>Go to the beginning of line
-<TR><TD>$<TD>Go to the end of line
-<TR><TD>><TD>Shift screen right
-<TR><TD><<TD>Shift screen left
-<TR><TD>C-a<TD>Go to the first line
-<TR><TD>C-e<TD>Go to the last line
-<TR><TD>G<TD>Go to the specified line
-<TR><TD>Z<TD>Move to the center line
-<TR><TD>z<TD>Move to the center column
-<TR><TD>TAB,C-n,Down arrow<TD>Move to next hyperlink
-<TR><TD>ESC TAB,C-p,Up arrow<TD>Move to previous link
-<TR><TD>C-g<TD>Show current page position
-</table>
+ </p>
+ </dd>
+ <dt>
+ -header <i>string</i>
+ </dt>
+ <dd>
+ <p>
+ Insert string as a header.
+<!-- mh 2016-03-29
+append <q>string</q> to the HTTP(S) request. Expected to match the
+header syntax Variable: Value
+-->
+ </p>
+ </dd>
+ <dt>
+ -no-proxy
+ </dt>
+ <dd>
+ <p>
+ Don't use proxy server.
+ </p>
+ </dd>
+ <dt>
+ -no-graph
+ </dt>
+ <dd>
+ <p>
+ Use ASCII characters to draw frames rather than graphical ones.
+<!-- mh 2016-03-29
+do not use graphic characters for drawing HTML table and
+frame borders
+-->
-<H2>Hyperlink operation</H2>
-<table>
-<TR><TD WIDTH=100>RET, C-f, Right arrow<TD>Follow hyperlink
-<TR><TD>d, ESC RET<TD>Save link to file
-<TR><TD>u<TD>Peek link URL
-<TR><TD>i<TD>Peek image URL
-<TR><TD>I<TD>View inline image
-<TR><TD>ESC I<TD>Save inline image to file
-<TR><TD>:<TD>Mark URL-like strings as anchors
-<TR><TD>ESC :<TD>Mark Message-ID-like strings as news anchors
-<TR><TD>c<TD>Peek current URL
-<TR><TD>=<TD>Display information about current document
-<TR><TD>C-h<TD>View history of URL
-<TR><TD>F<TD>Render frame
-<TR><TD>M<TD>Browse current document using external browser
-(use 2M and 3M to invoke second and third browser)
-<TR><TD>ESC M<TD>Browse link using external browser
-(use 2ESC M and 3ESC M to invoke second and third browser)
-</table>
-
-<H2>File/Stream operation</H2>
-<table>
-<TR><TD WIDTH=100>g,U<TD>Open URL
-<TR><TD>V<TD>View new file
-<TR><TD>@<TD>Execute shell command and load
-<TR><TD>#<TD>Execute shell command and browse
-</table>
-
-<H2>Buffer operation</H2>
-<table>
-<TR><TD WIDTH=100>B, C-b, Left arrow<TD>Back to the previous buffer
-<TR><TD>\<TD>View HTML source
-<TR><TD>s, C-h<TD>Select buffer
-<TR><TD>E<TD>Edit buffer source
-<TR><TD>C-l, C-w<TD>Redraw screen
-<TR><TD>R, C-r<TD>Reload buffer
-<TR><TD>S, p<TD>Save buffer
-<TR><TD>ESC s<TD>Save source
-<TR><TD>ESC e<TD>Edit buffer image
-</table>
-
-<H2>Buffer selection mode</H2>
-<table>
-<TR><TD WIDTH=100>k, C-p<TD>Select previous buffer
-<TR><TD>j, C-n<TD>Select next buffer
-<TR><TD>D<TD>Delect current buffer
-<TR><TD>RET<TD>Go to the selected buffer
-</table>
-
-<H2>Bookmark operation</H2>
-<table>
-<TR><TD WIDTH=100>v, ESC b<TD>Load bookmark
-<TR><TD>a, ESC a<TD>Add current to bookmark
-</table>
-
-<H2>Search</H2>
-<table>
-<TR><TD WIDTH=100>/, C-s<TD>Search forward
-<TR><TD>n<TD>Search next
-<TR><TD>w<TD>Toggle wrap search mode
-</table>
-
-<H2>Mark operation</H2>
-<table>
-<TR><TD WIDTH=100>C-SPC<TD>Set/unset mark
-<TR><TD>P<TD>Go to previous mark
-<TR><TD>N<TD>Go to next mark
-<TR><TD>"<TD>Mark by regular expression
-</table>
-
-<H2>Miscellany</H2>
-<table>
-<TR><TD WIDTH=100>!<TD>Execute shell command
-<TR><TD>H, ?<TD>Help (load this file)
-<TR><TD>o<TD>Set option
-<TR><TD>C-k<TD>Show cookie jar
-<TR><TD>C-c<TD>Stop
-<TR><TD>C-z<TD>Suspend
-<TR><TD>q<TD>Quit (with confirmation, if you like)
-<TR><TD>Q<TD>Quit without confirmation
-</table>
-
-<H2>Line-edit mode</H2>
-<table>
-<TR><TD WIDTH=100>C-f<TD>Move cursor forward
-<TR><TD>C-b<TD>Move cursor backward
-<TR><TD>C-h<TD>Delete previous character
-<TR><TD>C-d<TD>Delete current character
-<TR><TD>C-k<TD>Kill everything after cursor
-<TR><TD>C-u<TD>Kill everything before cursor
-<TR><TD>C-a<TD>Move to the top of line
-<TR><TD>C-e<TD>Move to the bottom of line
-<TR><TD>C-p<TD>Fetch the previous string from the history list
-<TR><TD>C-n<TD>Fetch the next string from the history list
-<TR><TD>TAB,SPC<TD>Complete filename
-<TR><TD>RETURN<TD>Accept
-</table>
-
-<hr>
-<a name="Mouse"></a>
-<h2>Mouse operation</h2>
-If w3m is compiled with mouse option and you are using
-xterm/kterm/rxvt (in this case, you have to set the TERM
-environment variable to `xterm' or `kterm'.) or GPM
-environment, you can use mouse
-for the navigation.
-<p>
-<table border=0>
-<tr><td>left click
-<td>Move the cursor to the place pointed by the mouse cursor.
-If you click the cursor and it is on an anchor, follow the anchor.
-<tr><td>middle click
-<td>Back to the previous buffer.
-<tr><td>right click
-<td>Open pop-up menu. You can choose an item by clicking it.
-<tr><td>left drag
-<td>Scroll document. The default behavior is to grab the document
-and drag it. You can reverse the behavior (grab the window and drag it)
-with the option setting panel.
-</table>
-<p>
-
-
-<hr>
-<a name="Key:custom"></a>
-<h2>Key customization</h2>
-You can customize the key binding (except line-editing keymap)
-by describing ~/.w3m/keymap. For example,
+ </p>
+ </dd>
+ <dt>
+ -no-mouse
+ </dt>
+ <dd>
+ <p>
+ Deactivate mouse support.
+ </p>
+ </dd>
+ <dt>
+ -config <i>file</i>
+ </dt>
+ <dd>
+ <p>
+ Specify config file.
+ </p>
+ </dd>
+ </dl>
+ <hr>
+ <h2 id="Color">
+ Document colors
+ </h2>
+ <p>
+ Links and images are displayed as follows.
+ </p>
+ <div align="center">
+ <table border="1">
+ <tr>
+ <th>
+
+ </th>
+ <th>
+ Color mode
+ </th>
+ <th>
+ Monochrome mode
+ </th>
+ </tr>
+ <tr>
+ <td>
+ links
+ </td>
+ <td>
+ blue
+ </td>
+ <td>
+ underline
+ </td>
+ </tr>
+ <tr>
+ <td>
+ inline images
+ </td>
+ <td>
+ green
+ </td>
+ <td>
+ reverse
+ </td>
+ </tr>
+ <tr>
+ <td>
+ form input
+ </td>
+ <td>
+ red
+ </td>
+ <td>
+ reverse
+ </td>
+ </tr>
+ </table>
+ </div>
+ <p>
+ These colors can be customized using the option setting command
+ <q>o</q>.
+ </p>
+ <hr>
+ <h2 id="Key:orig">
+ Key bindings
+ </h2>
+<!--
+ TODO: reorganise this whole thing into one big table of
+ FUNCTIONNAME | description | default-binding | Lynxlike-binding
+!-->
+ <p>
+ After invoking w3m, you can control it with keyboard commands.
+ </p>
+ <p>
+ Here's the original key-binding table. If you are using Lynx-like
+ key bindings, see <a href="#Key:lynx">the Lynx-like key
+ bindings</a>. Throughout, the <q>C-</q> and <q>M-</q> notations
+ indicate the modifiers <q>control</q> and <q>meta</q> (which can be
+ replaced with <q>alt</q> or ESC); on the other hand <q>2 M</q>
+ simply means <q>2</q> followed by <q>M</q>.
+ </p>
+<!--
+Correction:
+The two equivalents to the meta-key are pressing simultaneously the ALT-key or pressing the ESC-key first and then other mentioned keys.
+-->
+ <h3>
+ In-page navigation
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ SPC, C-v, +, PGDN
+ </td>
+ <td>
+ Forward page
+ </td>
+ </tr>
+ <tr>
+ <td>
+ b, M-v, -, PGUP
+ </td>
+ <td>
+ Backward page
+ </td>
+ </tr>
+ <tr>
+ <td>
+ l, C-f, RIGHT
+ </td>
+ <td>
+ Cursor right
+ </td>
+ </tr>
+ <tr>
+ <td>
+ h, C-b, LEFT
+ </td>
+ <td>
+ Cursor left
+ </td>
+ </tr>
+ <tr>
+ <td>
+ j, C-n, DOWN
+ </td>
+ <td>
+ Cursor down
+ </td>
+ </tr>
+ <tr>
+ <td>
+ k, C-p, UP
+ </td>
+ <td>
+ Cursor up
+ </td>
+ </tr>
+ <tr>
+ <td>
+ J
+ </td>
+ <td>
+ Scroll screen up one line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ K
+ </td>
+ <td>
+ Scroll screen down one line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ ^, C-a
+ </td>
+ <td>
+ Go to the beginning of line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ $, C-e
+ </td>
+ <td>
+ Go to the end of line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ w
+ </td>
+ <td>
+ Go to the next word
+ </td>
+ </tr>
+ <tr>
+ <td>
+ W
+ </td>
+ <td>
+ Go to the previous word
+ </td>
+ </tr>
+ <tr>
+ <td>
+ >
+ </td>
+ <td>
+ Shift screen right
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <
+ </td>
+ <td>
+ Shift screen left
+ </td>
+ </tr>
+ <tr>
+ <td>
+ .
+ </td>
+ <td>
+ Shift screen one column right
+ </td>
+ </tr>
+ <tr>
+ <td>
+ ,
+ </td>
+ <td>
+ Shift screen one column left
+ </td>
+ </tr>
+ <tr>
+ <td>
+ g, M-<, HOME
+ </td>
+ <td>
+ Go to the first line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ G, M->, END
+ </td>
+ <td>
+ Go to the last line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-g
+ </td>
+ <td>
+ Go to the specified line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Z
+ </td>
+ <td>
+ Center on cursor column
+ </td>
+ </tr>
+ <tr>
+ <td>
+ z
+ </td>
+ <td>
+ Center on cursor line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ TAB
+ </td>
+ <td>
+ Move to the next hyperlink
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-u, M-TAB
+ </td>
+ <td>
+ Move to the previous hyperlink
+ </td>
+ </tr>
+ <tr>
+ <td>
+ [
+ </td>
+ <td>
+ Move to the first hyperlink
+ </td>
+ </tr>
+ <tr>
+ <td>
+ ]
+ </td>
+ <td>
+ Move to the last hyperlink
+ </td>
+ </tr>
+ </table>
+ <h3>Hyperlink operation</h3>
+ <table>
+ <tr>
+ <td width="100">
+ C-j, C-m, RET
+ </td>
+ <td>
+ Follow hyperlink
+ </td>
+ </tr>
+ <tr>
+ <td>
+ a, M-RET
+ </td>
+ <td>
+ Save link to file
+ </td>
+ </tr>
+ <tr>
+ <td>
+ u
+ </td>
+ <td>
+ Show link URL
+ </td>
+ </tr>
+ <tr>
+ <td>
+ i
+ </td>
+ <td>
+ Show image URL
+ </td>
+ </tr>
+ <tr>
+ <td>
+ I
+ </td>
+ <td>
+ View inline image
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-I
+ </td>
+ <td>
+ Save inline image to file
+ </td>
+ </tr>
+ <tr>
+ <td>
+ :
+ </td>
+ <td>
+ Mark URL-like strings as hyperlinks
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-:
+ </td>
+ <td>
+ Mark Message-ID-like strings as links
+ </td>
+ </tr>
+ <tr>
+ <td>
+ c
+ </td>
+ <td>
+ Show current URL
+ </td>
+ </tr>
+ <tr>
+ <td>
+ =
+ </td>
+ <td>
+ Show information about current document
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-g
+ </td>
+ <td>
+ Show current position in page
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-h
+ </td>
+ <td>
+ Show browsing history
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M
+ </td>
+ <td>
+ Browse current document using external browser (prefix 2, 3, ...,
+ or 9 to invoke alternate configured browsers, e.g. 3 M)
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-M
+ </td>
+ <td>
+ Browse link using external browser (prefixed as above, e.g.
+ 3 M-M)
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Bookmark management
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ M-b
+ </td>
+ <td>
+ Go to the bookmarks page
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-a
+ </td>
+ <td>
+ Bookmark current page
+ </td>
+ </tr>
+ </table>
+ <h3>
+ File/stream operation
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ U
+ </td>
+ <td>
+ Open new URL
+ </td>
+ </tr>
+ <tr>
+ <td>
+ V
+ </td>
+ <td>
+ Open new file
+ </td>
+ </tr>
+ <tr>
+ <td>
+ @
+ </td>
+ <td>
+ Execute shell command and view output
+ </td>
+ </tr>
+ <tr>
+ <td>
+ #
+ </td>
+ <td>
+ Execute shell command and browse output
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Content operations
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ v
+ </td>
+ <td>
+ Toggle viewing as text or rendered HTML
+ </td>
+ </tr>
+ <tr>
+ <td>
+ F
+ </td>
+ <td>
+ Toggle rendering HTML frames
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-l
+ </td>
+ <td>
+ Redraw screen
+ </td>
+ </tr>
+ <tr>
+ <td>
+ R
+ </td>
+ <td>
+ Reload
+ </td>
+ </tr>
+ <tr>
+ <td>
+ E
+ </td>
+ <td>
+ Edit local source
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-e
+ </td>
+ <td>
+ Edit rendered copy of page
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-s
+ </td>
+ <td>
+ Save source
+ </td>
+ </tr>
+ <tr>
+ <td>
+ S
+ </td>
+ <td>
+ Save rendered copy of page
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Buffer/tab navigation
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ B
+ </td>
+ <td>
+ Go back, <q>popping</q> the buffer stack
+ </td>
+ </tr>
+ <tr>
+ <td>
+ s
+ </td>
+ <td>
+ Show buffer-stack menu
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-t
+ </td>
+ <td>
+ Show tab menu
+ </td>
+ </tr>
+ <tr>
+ <td>
+ T
+ </td>
+ <td>
+ Open current page as new tab
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-t
+ </td>
+ <td>
+ Open link as new tab
+ </td>
+ </tr>
+ <tr>
+ <td>
+ }
+ </td>
+ <td>
+ Switch to next tab
+ </td>
+ </tr>
+ <tr>
+ <td>
+ {
+ </td>
+ <td>
+ Switch to previous tab
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-q
+ </td>
+ <td>
+ Close current tab
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Search
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ /
+ </td>
+ <td>
+ Search forward
+ </td>
+ </tr>
+ <tr>
+ <td>
+ ?
+ </td>
+ <td>
+ Search backward
+ </td>
+ </tr>
+ <tr>
+ <td width="100">
+ C-s
+ </td>
+ <td>
+ Incremental search forward
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-r
+ </td>
+ <td>
+ Incremental search backward
+ </td>
+ </tr>
+ <tr>
+ <td>
+ n
+ </td>
+ <td>
+ Next match
+ </td>
+ </tr>
+ <tr>
+ <td>
+ N
+ </td>
+ <td>
+ Previous match
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-w
+ </td>
+ <td>
+ Toggle wrapping mode in searches
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Mark management
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ C-SPC
+ </td>
+ <td>
+ Set/unset mark
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-p
+ </td>
+ <td>
+ Go to the previous mark
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-n
+ </td>
+ <td>
+ Go to the next mark
+ </td>
+ </tr>
+ <tr>
+ <td>
+ "
+ </td>
+ <td>
+ Mark all occurrences of a regular expression
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Miscellany
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ !
+ </td>
+ <td>
+ Execute shell command
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-c
+ </td>
+ <td>
+ Invoke w3m function
+ </td>
+ </tr>
+ <tr>
+ <td>
+ H
+ </td>
+ <td>
+ Show help panel
+ </td>
+ </tr>
+ <tr>
+ <td>
+ o
+ </td>
+ <td>
+ Show options panel
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-k
+ </td>
+ <td>
+ Show cookie jar
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-c
+ </td>
+ <td>
+ Interrupt
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-z
+ </td>
+ <td>
+ Suspend w3m
+ </td>
+ </tr>
+ <tr>
+ <td>
+ q
+ </td>
+ <td>
+ Quit (with confirmation dialog)
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Q
+ </td>
+ <td>
+ Quit without confirmation
+ </td>
+ </tr>
+ </table>
+<!--
+ TODO: import leftovers from current keymap (same in both):
+ ( UNDO
+ ) REDO
+ ; MARK_WORD
+ D DOWNLOAD_LIST
+ L LIST
+ m MOUSE_TOGGLE
+ r VERSION
+ | PIPE_BUF
+ M-W DICT_WORD_AT
+ M-c COMMAND
+ M-k DEFINE_KEY
+ M-l LIST_MENU
+ M-m MOVE_LIST_MENU
+ M-o SET_OPTION
+ M-u GOTO_RELATIVE
+ M-w DICT_WORD
+ M-Fn MENU
+!-->
+ <p>
+ Two special operational modes exist which have built-in (not
+ redefinable) keymappings:
+ </p>
+ <h3>
+ Menu selection mode
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ k, C-p, UP
+ </td>
+ <td>
+ Select previous item
+ </td>
+ </tr>
+ <tr>
+ <td>
+ j, C-n, DOWN
+ </td>
+ <td>
+ Select next item
+ </td>
+ </tr>
+ <tr>
+ <td>
+ D
+ </td>
+ <td>
+ Delete current item
+ </td>
+ </tr>
+ <tr>
+ <td>
+ SPC, RET
+ </td>
+ <td>
+ Go to the selected item
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Line-editing mode
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ C-f, RIGHT
+ </td>
+ <td>
+ Move cursor forward
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-b, LEFT
+ </td>
+ <td>
+ Move cursor backward
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-h, BKSPC
+ </td>
+ <td>
+ Delete previous character
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-d
+ </td>
+ <td>
+ Delete current character
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-k
+ </td>
+ <td>
+ Kill everything after cursor
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-u
+ </td>
+ <td>
+ Kill everything before cursor
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-a
+ </td>
+ <td>
+ Move to the beginning of line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-e
+ </td>
+ <td>
+ Move to the end of line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-p, UP
+ </td>
+ <td>
+ Fetch the previous string from the history list
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-n, DOWN
+ </td>
+ <td>
+ Fetch the next string from the history list
+ </td>
+ </tr>
+ <tr>
+ <td>
+ TAB, SPC
+ </td>
+ <td>
+ Try to complete filename
+ </td>
+ </tr>
+ <tr>
+ <td>
+ RET
+ </td>
+ <td>
+ Accept
+ </td>
+ </tr>
+ </table>
+ <hr>
+ <h2 id="Key:lynx">
+ Lynx-like key bindings
+ </h2>
+ <p>
+ If w3m was compiled with <q>Lynx-like key bindings</q>, you can use
+ the following key bindings.
+ </p>
+ <h3>
+ In-page navigation
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ SPC, C-v, +
+ </td>
+ <td>
+ Forward page
+ </td>
+ </tr>
+ <tr>
+ <td>
+ b, M-v, -
+ </td>
+ <td>
+ Backward page
+ </td>
+ </tr>
+ <tr>
+ <td>
+ l
+ </td>
+ <td>
+ Cursor right
+ </td>
+ </tr>
+ <tr>
+ <td>
+ h
+ </td>
+ <td>
+ Cursor left
+ </td>
+ </tr>
+ <tr>
+ <td>
+ j
+ </td>
+ <td>
+ Cursor down
+ </td>
+ </tr>
+ <tr>
+ <td>
+ k
+ </td>
+ <td>
+ Cursor up
+ </td>
+ </tr>
+ <tr>
+ <td>
+ J
+ </td>
+ <td>
+ Scroll screen up one line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ K
+ </td>
+ <td>
+ Scroll screen down one line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ ^
+ </td>
+ <td>
+ Go to the beginning of line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ $
+ </td>
+ <td>
+ Go to the end of line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ >
+ </td>
+ <td>
+ Shift screen right
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <
+ </td>
+ <td>
+ Shift screen left
+ </td>
+ </tr>
+ <tr>
+ <td>
+ .
+ </td>
+ <td>
+ Shift screen one column right
+ </td>
+ </tr>
+ <tr>
+ <td>
+ ,
+ </td>
+ <td>
+ Shift screen one column left
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-a, M-<
+ </td>
+ <td>
+ Go to the first line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-e, M->
+ </td>
+ <td>
+ Go to the last line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ G
+ </td>
+ <td>
+ Go to the specified line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ w
+ </td>
+ <td>
+ Go to the next word
+ </td>
+ </tr>
+ <tr>
+ <td>
+ W
+ </td>
+ <td>
+ Go to the previous word
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Z
+ </td>
+ <td>
+ Center on cursor line
+ </td>
+ </tr>
+ <tr>
+ <td>
+ z
+ </td>
+ <td>
+ Center on cursor column
+ </td>
+ </tr>
+ <tr>
+ <td>
+ TAB, C-n, DOWN
+ </td>
+ <td>
+ Move to the next hyperlink
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-TAB, C-p, C-u, UP
+ </td>
+ <td>
+ Move to the previous link
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-g
+ </td>
+ <td>
+ Show current position in page
+ </td>
+ </tr>
+ <tr>
+ <td>
+ [
+ </td>
+ <td>
+ Move to the first hyperlink
+ </td>
+ </tr>
+ <tr>
+ <td>
+ ]
+ </td>
+ <td>
+ Move to the last hyperlink
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Hyperlink operation
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ C-f, C-j, C-m, RET, RIGHT
+ </td>
+ <td>
+ Follow hyperlink
+ </td>
+ </tr>
+ <tr>
+ <td>
+ d, M-RET
+ </td>
+ <td>
+ Save link to file
+ </td>
+ </tr>
+ <tr>
+ <td>
+ u
+ </td>
+ <td>
+ Show link URL
+ </td>
+ </tr>
+ <tr>
+ <td>
+ i
+ </td>
+ <td>
+ Show image URL
+ </td>
+ </tr>
+ <tr>
+ <td>
+ I
+ </td>
+ <td>
+ View inline image
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-I
+ </td>
+ <td>
+ Save inline image to file
+ </td>
+ </tr>
+ <tr>
+ <td>
+ :
+ </td>
+ <td>
+ Mark URL-like strings as hyperlinks
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-:
+ </td>
+ <td>
+ Mark Message-ID-like strings as news anchors
+ </td>
+ </tr>
+ <tr>
+ <td>
+ c
+ </td>
+ <td>
+ Show current URL
+ </td>
+ </tr>
+ <tr>
+ <td>
+ =
+ </td>
+ <td>
+ Show information about current document
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-h
+ </td>
+ <td>
+ Show browsing history
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M
+ </td>
+ <td>
+ Browse current document using external browser (prefix 2, 3, ...,
+ or 9 to invoke alternate configured browsers, e.g. 3 M)
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-M
+ </td>
+ <td>
+ Browse link using external browser (prefixed as above, e.g.
+ 3 M-M)
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Bookmark management
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ v, M-b
+ </td>
+ <td>
+ Go to the bookmarks page
+ </td>
+ </tr>
+ <tr>
+ <td>
+ a, M-a
+ </td>
+ <td>
+ Bookmark current page
+ </td>
+ </tr>
+ </table>
+ <h3>
+ File/stream operation
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ g, U
+ </td>
+ <td>
+ Open new URL
+ </td>
+ </tr>
+ <tr>
+ <td>
+ V
+ </td>
+ <td>
+ Open new file
+ </td>
+ </tr>
+ <tr>
+ <td>
+ @
+ </td>
+ <td>
+ Execute shell command and view output
+ </td>
+ </tr>
+ <tr>
+ <td>
+ #
+ </td>
+ <td>
+ Execute shell command and browse output
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Content operations
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ \
+ </td>
+ <td>
+ Toggle viewing as text or rendered HTML
+ </td>
+ </tr>
+ <tr>
+ <td>
+ F
+ </td>
+ <td>
+ Toggle rendering HTML frames
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-l, C-w
+ </td>
+ <td>
+ Redraw screen
+ </td>
+ </tr>
+ <tr>
+ <td>
+ R, C-r
+ </td>
+ <td>
+ Reload
+ </td>
+ </tr>
+ <tr>
+ <td>
+ E
+ </td>
+ <td>
+ Edit local source
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-e
+ </td>
+ <td>
+ Edit rendered copy of page
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-s
+ </td>
+ <td>
+ Save source
+ </td>
+ </tr>
+ <tr>
+ <td>
+ S, p
+ </td>
+ <td>
+ Save rendered copy of page
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Buffer/tab navigation
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ B, C-b, LEFT
+ </td>
+ <td>
+ Go back, <q>popping</q> the buffer stack
+ </td>
+ </tr>
+ <tr>
+ <td>
+ s, C-h
+ </td>
+ <td>
+ Show buffer-stack menu
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-t
+ </td>
+ <td>
+ Show tab menu
+ </td>
+ </tr>
+ <tr>
+ <td>
+ T
+ </td>
+ <td>
+ Open current page as new tab
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-t
+ </td>
+ <td>
+ Open link as new tab
+ </td>
+ </tr>
+ <tr>
+ <td>
+ }
+ </td>
+ <td>
+ Switch to next tab
+ </td>
+ </tr>
+ <tr>
+ <td>
+ {
+ </td>
+ <td>
+ Switch to previous tab
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-q
+ </td>
+ <td>
+ Close current tab
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Search
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ /, C-s
+ </td>
+ <td>
+ Search forward
+ </td>
+ </tr>
+ <tr>
+ <td>
+ n
+ </td>
+ <td>
+ Next match
+ </td>
+ </tr>
+ <tr>
+ <td>
+ w
+ </td>
+ <td>
+ Toggle wrapping mode in searches
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Mark management
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ C-SPC
+ </td>
+ <td>
+ Set/unset mark
+ </td>
+ </tr>
+ <tr>
+ <td>
+ P
+ </td>
+ <td>
+ Go to the previous mark
+ </td>
+ </tr>
+ <tr>
+ <td>
+ N
+ </td>
+ <td>
+ Go to the next mark
+ </td>
+ </tr>
+ <tr>
+ <td>
+ "
+ </td>
+ <td>
+ Mark all occurrences of a regular expression
+ </td>
+ </tr>
+ </table>
+ <h3>
+ Miscellany
+ </h3>
+ <table>
+ <tr>
+ <td width="100">
+ !
+ </td>
+ <td>
+ Execute shell command
+ </td>
+ </tr>
+ <tr>
+ <td>
+ M-c
+ </td>
+ <td>
+ Invoke w3m function
+ </td>
+ </tr>
+ <tr>
+ <td>
+ H, ?
+ </td>
+ <td>
+ Show help panel
+ </td>
+ </tr>
+ <tr>
+ <td>
+ o
+ </td>
+ <td>
+ Show options panel
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-k
+ </td>
+ <td>
+ Show cookie jar
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-c
+ </td>
+ <td>
+ Interrupt
+ </td>
+ </tr>
+ <tr>
+ <td>
+ C-z
+ </td>
+ <td>
+ Suspend w3m
+ </td>
+ </tr>
+ <tr>
+ <td>
+ q
+ </td>
+ <td>
+ Quit (with confirmation dialog)
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Q
+ </td>
+ <td>
+ Quit without confirmation
+ </td>
+ </tr>
+ </table>
+ <p>
+ The Lynx-like configuration leaves keymappings unchanged in the
+ menu-selection and line-editing modes.
+ </p>
+ <hr>
+ <h2 id="Mouse">
+ Mouse operation
+ </h2>
+ <p>
+ If w3m is compiled with mouse support and you are invoking w3m
+ either from a console with GPM or from an X terminal emulator, you
+ can use the mouse for navigation (in the case of rxvt, you need to
+ set the TERM environment variable to <q>xterm</q> or <q>kterm</q>).
+ </p>
+ <table border="0">
+ <tr>
+ <td>
+ left click
+ </td>
+ <td>
+ Move the cursor to the place indicated by the mouse cursor.
+ If you click the cursor and it is on a hyperlink, follow the
+ link.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ middle click
+ </td>
+ <td>
+ Back to the previous buffer.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ right click
+ </td>
+ <td>
+ Open pop-up menu. You can choose an item by clicking it.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ left drag
+ </td>
+ <td>
+ Scroll document. The default behavior is to grab the document
+ and drag it. You can reverse the behavior (grab the window and
+ drag it) with the option setting panel.
+ </td>
+ </tr>
+ </table>
+ <hr>
+ <h2 id="Key:custom">
+ Key customization
+ </h2>
+ <p>
+ You can customize the key bindings (except the line-editing keymap)
+ in a ~/.w3m/keymap file. For example,
+ </p>
<pre>
keymap C-o NEXT_PAGE
</pre>
-binds `NEXT_PAGE' function (normally bound to SPC and C-v)
-to control-o. See <a href="README.func">README.func</a> for
-list of available functions. Original and Lynx-like keymap
-definitions are provided (<a href="keymap.default">keymap.default</a>
-and <a href="keymap.lynx">keymap.lynx</a>) as examples.
-
-<hr>
-<a name="LocalCGI"></a>
-<h2>Local CGI</h2>
-You can run CGI scripts using w3m, without any HTTP server.
-It means that w3m behaves like an HTTP server and activates CGI script,
-then w3m reads the output of the script and display it. The
-<a href="file:///$LIB/w3mbookmark?mode=panel&bmark=~/.w3m/bookmark.html&url=MANUAL.html&title=w3m+manual">bookmark registration</a>
-and <a href="file:///$LIB/w3mhelperpanel?mode=panel">helper-app editor</a>
-are realized as local CGI scripts.
-Using local CGI, w3m can be used as a general purpose form interface.
-<P>
-For security reason, CGI scripts invoked by w3m must be in one of
-these directories.
-<ul>
-<li>The directory where w3m-related files are stored
-(typically /usr/local/lib/w3m). This directory can be referred
-as $LIB.
-<li>/cgi-bin/ directory. You can map /cgi-bin/ to any directory you like
-with option setting panel (``Directory corresponds to /cgi-bin'' field).
-You can specify multiple paths separated by `:', like
-/usr/local/cgi-bin:/home/aito/cgi-bin. To use /cgi-bin/ directory,
-you must use file:/cgi-bin URL as follows:
+ <p>
+ binds the <q>NEXT_PAGE</q> function (normally bound to SPC and C-v)
+ to control-o. See <a href="README.func">README.func</a> for a
+ list of available functions. Original and Lynx-like keymap
+ definitions are provided (<a href="keymap.default">keymap.default</a>
+ and <a href="keymap.lynx">keymap.lynx</a>) as examples.
+ </p>
+ <hr>
+ <h2 id="LocalCGI">
+ Local CGI
+ </h2>
+ <p>
+ You can run CGI scripts using w3m, without any HTTP server.
+ This means that w3m behaves like an HTTP server and runs the CGI
+ script, then reads the output of the script and displays it. For
+ example, the bookmark registration system and default directory
+ browser are realized as local CGI scripts. Moreover, such scripts
+ allow w3m to be used as a form interface to acquire all kinds of
+ data.
+ </p>
+ <p>
+ For security reason, CGI scripts invoked by w3m must be in one of
+ the following directories:
+ </p>
+ <ul>
+ <li>
+ The directory where w3m-related files are stored (typically
+ /usr/local/lib/w3m). This directory can be referenced as $LIB.
+ </li>
+ <li>
+ The /cgi-bin/ directory. You can map /cgi-bin/ to any directory you
+ like in the option setting panel (the <q>Directory corresponds to
+ /cgi-bin</q> field). You can specify multiple paths separated by
+ <q>:</q>, like /usr/local/cgi-bin:/home/aito/cgi-bin. To use a
+ /cgi-bin/ directory, you must use a file:/cgi-bin URL as follows:
<pre>
w3m -o cgi_bin=/path/to/cgi-bin file:/cgi-bin/script.cgi
</pre>
-It is not recommended to include current directory to this path.
-</ul>
-<p>
-The CGI script can use special header `w3m-control:' to control w3m.
-This field can take any function (see <a href="README.func">README.func</a>),
-and the specified function is invoked after the document is displayed.
-For example, The CGI output
+ It is not recommended to include the current directory to this path.
+ </li>
+ </ul>
+ <p>
+ The CGI script can use the special header <q>w3m-control:</q> to
+ control w3m. This field can take any function (see
+ <a href="README.func">README.func</a>), and the specified function
+ is invoked after the document is displayed. For example, the CGI
+ output
+ </p>
<pre>
Content-Type: text/plain
W3m-control: BACK
</pre>
-will display blank page and delete that buffer immediately.
-This is useful when you don't want to display any page after
-the script is invoked. The next example
+ <p>
+ will display a blank page and delete that buffer immediately.
+ This is useful when you don't want to display any page after
+ the script is invoked. The next example
+ </p>
<pre>
Content-Type: text/plain
@@ -510,26 +2209,32 @@ W3m-control: DELETE_PREVBUF
contents.....
</pre>
-will override the current buffer.
-<p>
-One w3m-control: header have to contain only one function, but you can
-include more than one w3m-control: lines in the HTTP header.
-In addition, you can specify an argument to GOTO function:
+ <p>
+ will override the current buffer.
+ </p>
+ <p>
+ Each w3m-control: header can contain only one function, but you can
+ include more than one w3m-control: line in the HTTP header.
+ In addition, you can specify an argument to the GOTO function:
+ </p>
<pre>
Content-Type: text/plain
-W3m-control: GOTO http://www.yahoo.com/
+W3m-control: GOTO http://www.example.org/
</pre>
-This example works exactly the same way to the Location header:
+ <p>
+ This example works exactly the same way as the Location header:
+ </p>
<pre>
Content-Type: text/plain
-Location: http://www.yahoo.com/
+Location: http://www.example.org/
</pre>
-Note that this header has no effect when the CGI script is invoked
-through HTTP server.
-
-</body>
+ <p>
+ Note that this header has no effect when the CGI script is invoked
+ through an HTTP server.
+ </p>
+ </body>
</html>
diff --git a/doc/README b/doc/README
index 324ea3e..60d6d19 100644
--- a/doc/README
+++ b/doc/README
@@ -115,7 +115,6 @@ Current Maintainer
Tohoku University Hospital
satodai@w3m.jp
-Feel free to send your opinion to the w3m mailing-lists.
- w3m-dev@sic.med.tohoku.ac.jp (Japanese)
- w3m-dev-en@sic.med.tohoku.ac.jp (English)
+Feel free to send your opinion to:
http://w3m.sourceforge.net/
+ https://sourceforge.net/projects/w3m/
diff --git a/doc/README.cookie b/doc/README.cookie
index 56cca50..da16947 100644
--- a/doc/README.cookie
+++ b/doc/README.cookie
@@ -37,7 +37,7 @@ cookie support of w3m
(HDN: host domain name)
- �� If the number of "." in domain name is lesser than 2, it is
+ * If the number of "." in domain name is lesser than 2, it is
assumed as invalid cookie (cf. RFC 2109 4.3.2), however, you can
use cookie_avoid_wrong_number_of_dots to avoid this
restriction. You can set this in "Domains to avoid [wrong number
diff --git a/doc/README.func b/doc/README.func
index 0b2c034..12d49db 100644
--- a/doc/README.func
+++ b/doc/README.func
@@ -1,25 +1,25 @@
ABORT Quit w3m without confirmation
-ACCESSSKEY Popup acceskey menu
-ADD_BOOKMARK Add current page to bookmark
+ACCESSKEY Pop up accesskey menu
+ADD_BOOKMARK Add current page to bookmarks
ALARM Set alarm
BACK Back to previous buffer
BEGIN Go to the first line
-BOOKMARK Read bookmark
+BOOKMARK View bookmarks
CENTER_H Move to the center line
CENTER_V Move to the center column
-CHARSET Change the current document charset
+CHARSET Change the current document charset
CLOSE_TAB Close current tab
-CLOSE_TAB_MOUSE Close tab on mouse cursor (for mouse action)
-COMMAND Execute w3m command(s)
+CLOSE_TAB_MOUSE Close tab on mouse cursor (for mouse action)
+COMMAND Execute w3m command(s)
COOKIE View cookie list
-DEFAULT_CHARSET Change the default document charset
-DEFINE_KEY Define a binding between a key stroke and a user command
-DELETE_PREVBUF Delete previous buffer (mainly for local-CGI)
+DEFAULT_CHARSET Change the default document charset
+DEFINE_KEY Define a binding between a keystroke and a user command
+DELETE_PREVBUF Delete previous buffer (mainly for local-CGI)
DICT_WORD Execute dictionary command (see README.dict)
-DICT_WORD_AT Execute dictionary command for word at cursor
+DICT_WORD_AT Execute dictionary command for word at cursor
DISPLAY_IMAGE Restart loading and drawing of images
DOWN Scroll down one line
-DOWNLOAD Save document source to file
+DOWNLOAD Save document (source) to file
DOWNLOAD_LIST Display download list panel
EDIT Edit current document
EDIT_SCREEN Edit currently rendered document
@@ -28,75 +28,74 @@ EXEC_SHELL Execute shell command
EXIT Quit w3m without confirmation
EXTERN Execute external browser
EXTERN_LINK View current link using external browser
-FRAME Render frame
+FRAME Render frames
GOTO Go to URL
GOTO_LINE Go to specified line
-GOTO_LINK Go to current link
+GOTO_LINK Follow current link
GOTO_RELATIVE Go to relative URL
HELP View help
-HISTORY View history of URL
+HISTORY View browser history
INFO View info of current document
-INTERRUPT Stop loading document
-INIT_MAILCAP Reread mailcap (mainly for local-CGI)
-ISEARCH Incremental search forward
+INTERRUPT Suspend w3m
+ISEARCH Incremental search forward
ISEARCH_BACK Incremental search backward
LEFT Shift screen one column
LINE_BEGIN Go to the beginning of line
LINE_END Go to the end of line
LINE_INFO Show current line number
-LINK_BEGIN Go to the first link
-LINK_END Go to the last link
-LINK_MENU Popup link element menu
+LINK_BEGIN Go to the first link
+LINK_END Go to the last link
+LINK_MENU Pop up link element menu
LIST Show all links and images
-LIST_MENU Popup link list menu and go to selected link
+LIST_MENU Pop up link list menu and go to selected link
LOAD Load local file
-MAIN_MENU Popup menu
+MAIN_MENU Pop up menu
MARK Set/unset mark
-MARK_MID Mark Message-ID-like strings as anchors
-MARK_URL Mark URL-like strings as anchors
-MARK_WORD Mark current word as anchor
-MENU Popup menu
-MENU_MOUSE Popup menu at mouse cursor (for mouse action)
-MOUSE_TOGGLE Toggle activity of mouse
-MOVE_DOWN Move cursor down (a half screen scroll at the end of screen)
-MOVE_DOWN1 Move cursor down (1 line scroll at the end of screen)
-MOVE_LEFT Move cursor left (a half screen shift at the left edge)
-MOVE_LEFT1 Move cursor left (1 columns shift at the left edge)
-MOVE_LIST_MENU Popup link list menu and move cursor to selected link
+MARK_MID Mark Message-ID-like strings as links
+MARK_URL Mark URL-like strings as links
+MARK_WORD Mark current word as link
+MENU Pop up menu
+MENU_MOUSE Pop up menu at mouse cursor (for mouse action)
+MOUSE_TOGGLE Toggle mouse support
+MOVE_DOWN Move cursor down (a half screen scroll at the end of screen)
+MOVE_DOWN1 Move cursor down (1 line scroll at the end of screen)
+MOVE_LEFT Move cursor left (a half screen shift at the left edge)
+MOVE_LEFT1 Move cursor left (1 column shift at the left edge)
+MOVE_LIST_MENU Pop up link list menu and move cursor to selected link
MOVE_MOUSE Move cursor to mouse cursor (for mouse action)
-MOVE_RIGHT Move cursor right (a half screen shift at the right edge)
-MOVE_RIGHT1 Move cursor right (1 columns shift at the right edge)
-MOVE_UP Move cursor up (a half screen scroll at the top of screen)
-MOVE_UP1 Move cursor up (1 line scrol at the top of screen)
-MSGS Display error messages
-NEW_TAB Open new tab
+MOVE_RIGHT Move cursor right (a half screen shift at the right edge)
+MOVE_RIGHT1 Move cursor right (1 column shift at the right edge)
+MOVE_UP Move cursor up (a half screen scroll at the top of screen)
+MOVE_UP1 Move cursor up (1 line scroll at the top of screen)
+MSGS Display error messages
+NEW_TAB Open new tab
NEXT Move to next buffer
-NEXT_DOWN Move to next downward link
-NEXT_LEFT Move to next left link
-NEXT_LEFT_UP Move to next left (or upward) link
+NEXT_DOWN Move downward to next link
+NEXT_LEFT Move left to next link
+NEXT_LEFT_UP Move left (or upward) to next link
NEXT_LINK Move to next link
NEXT_MARK Move to next word
NEXT_PAGE Move to next page
-NEXT_RIGHT Move to next right link
-NEXT_RIGHT_DOWN Move to next right (or downward) link
+NEXT_RIGHT Move right to next link
+NEXT_RIGHT_DOWN Move right (or downward) to next link
NEXT_TAB Move to next tab
-NEXT_UP Move to next upward link
-NEXT_VISITED Move to next visited link
+NEXT_UP Move upward to next link
+NEXT_VISITED Move to next visited link
NEXT_WORD Move to next word
-NOTHING Do nothing
+NOTHING Do nothing
NULL Do nothing
-OPTIONS Option setting panel
-PEEK Peek current URL
-PEEK_IMG Peek image URL
-PEEK_LINK Peek link URL
-PIPE_BUF Send rendered document to pipe
+OPTIONS Display option setting panel
+PEEK Peek at current URL
+PEEK_IMG Peek at image URL
+PEEK_LINK Peek at link URL
+PIPE_BUF Send rendered document to pipe
PIPE_SHELL Execute shell command and browse
PREV Move to previous buffer
PREV_LINK Move to previous link
PREV_MARK Move to previous mark
PREV_PAGE Move to previous page
PREV_TAB Move to previous tab
-PREV_VISITED Move to previous visited link
+PREV_VISITED Move to previous visited link
PREV_WORD Move to previous word
PRINT Save buffer to file
QUIT Quit w3m
@@ -106,40 +105,40 @@ REDRAW Redraw screen
REG_MARK Set mark using regexp
REINIT Reload configuration files
RELOAD Reload buffer
-RESHAPE Re-render buffer
+RESHAPE Re-render buffer
RIGHT Shift screen one column right
-SAVE Save document source to file
+SAVE Save document (source) to file
SAVE_IMAGE Save image to file
SAVE_LINK Save link to file
-SAVE_SCREEN Save rendered document to file
+SAVE_SCREEN Save buffer to file
SEARCH Search forward
SEARCH_BACK Search backward
SEARCH_FORE Search forward
SEARCH_NEXT Search next regexp
SEARCH_PREV Search previous regexp
SELECT Go to buffer selection panel
-SELECT_MENU Popup buffer selection menu
-SETENV Set environment variable
-SET_OPTION Set option
+SELECT_MENU Pop up buffer selection menu
+SETENV Set environment variable
+SET_OPTION Set option
SHELL Execute shell command
SHIFT_LEFT Shift screen left
SHIFT_RIGHT Shift screen right
SOURCE View HTML source
STOP_IMAGE Stop loading and drawing of images
SUBMIT Submit form
-SUSPEND Stop loading document
+SUSPEND Suspend w3m
TAB_GOTO Open URL on new tab
TAB_GOTO_RELATIVE Open relative URL on new tab
TAB_LEFT Move current tab left
TAB_LINK Open current link on new tab
-TAB_MENU Popup tab selection menu
+TAB_MENU Pop up tab selection menu
TAB_MOUSE Move to tab on mouse cursor (for mouse action)
TAB_RIGHT Move current tab right
UNDO Cancel the last cursor movement
UP Scroll up one line
-VERSION Display version of w3m
+VERSION Display version of w3m
VIEW View HTML source
-VIEW_BOOKMARK View bookmark
+VIEW_BOOKMARK View bookmarks
VIEW_IMAGE View image
-WHEREIS Search forward
-WRAP_TOGGLE Toggle wrap search mode
+WHEREIS Search forward
+WRAP_TOGGLE Toggle search wrap mode
diff --git a/doc/README.img b/doc/README.img
index 0c10114..f11362f 100644
--- a/doc/README.img
+++ b/doc/README.img
@@ -41,7 +41,7 @@ Key functions
Specify the following keymaps in ~/.w3m/keymap.
keymap X DISPLAY_IMAGE
keymap C-c STOP_IMAGE
- keyamp t SET_OPTION display_image=toggle
+ keymap t SET_OPTION display_image=toggle
Commandline options
diff --git a/doc/README.m17n b/doc/README.m17n
index c064d76..da5408b 100644
--- a/doc/README.m17n
+++ b/doc/README.m17n
@@ -49,7 +49,7 @@ Supported encoding schemes (character set)
* Thai
TIS-620 (ISO-8859-11), CP874
* Other
- US_ASCII, ISO-8859-1 �� 10, 13 �� 15,
+ US_ASCII, ISO-8859-1 - 10, 13 - 15,
KOI8-R, KOI8-U, NeXT, CP437, CP737, CP775, CP850, CP852, CP855, CP856,
CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP869, CP1006,
CP1250, CP1251, CP1252, CP1253, CP1254, CP1255, CP1256, CP1257
diff --git a/doc/README.siteconf b/doc/README.siteconf
new file mode 100644
index 0000000..39b1028
--- /dev/null
+++ b/doc/README.siteconf
@@ -0,0 +1,60 @@
+The siteconf: Site-specific preferences
+
+The siteconf consists of URL patterns and preferences associated to them.
+You can improve "decode_url" feature by giving charsets of URLs site by site,
+or bypass Google's redirector for performance and your privacy.
+
+The siteconf is read from ~/.w3m/siteconf by default.
+
+===== The syntax =====
+
+url <url>|/<re-url>/|m@<re-url>@i [exact]
+substitute_url "<destination-url>"
+url_charset <charset>
+no_referer_from on|off
+no_referer_to on|off
+
+The last match wins.
+
+===== Examples =====
+
+url "https://twitter.com/"
+substitute_url "https://mobile.twitter.com/"
+
+This forwards the twitter.com to its mobile site.
+
+url "http://your.bookmark.net/"
+no_referer_from on
+
+This prevents HTTP referers from being sent when you follow links
+at the your.bookmark.net.
+
+url "http://www.google.com/url?" exact
+substitute_url "file:///cgi-bin/your-redirector.cgi?"
+
+This forwards the Google's redirector to your local CGI.
+
+url /^http:\/\/[a-z]*\.wikipedia\.org\//
+url_charset utf-8
+
+When combinated with "decode_url" option turned on, links to
+Wikipedia will be human-readable.
+
+===== Regular expressions notes =====
+
+Following expressions are all equivalent:
+
+/http:\/\/www\.example\.com\//
+m/http:\/\/www\.example\.com\//
+m@http://www\.example\.com/@
+m!http://www\.example\.com/!
+
+With a trailing 'i' modifier, you can specify a case-insensitive match.
+For example, m@^http://www\.example\.com/abc/@i matches to:
+
+http://www.example.com/abc/
+http://www.example.com/Abc/
+http://www.example.com/ABC/
+
+Hostnames, however, are always converted to lowercases before compared.
+
diff --git a/doc/README.sixel b/doc/README.sixel
new file mode 100644
index 0000000..588afc4
--- /dev/null
+++ b/doc/README.sixel
@@ -0,0 +1,27 @@
+Sixel support of w3m
+ 2014/11/05
+ K. Araki
+
+Introduction
+
+ This is the extension for w3m to show inline images by sixel graphics.
+
+Requirements
+
+ Install 'img2sixel' command provided by libsixel project.
+ (https://github.com/saitoha/libsixel)
+
+Build
+
+ $ ./configure --enable-image ...
+ $ make
+ $ make install
+
+Usage
+
+ $ w3m -sixel http://...
+
+ You can specify options of 'img2sixel' command by "W3M_IMG2SIXEL"
+ environmental variable.
+
+ $ W3M_IMG2SIXEL="img2sixel -d atkinson" w3m -sixel http://...
diff --git a/doc/keymap.lynx b/doc/keymap.lynx
index 869c716..e4085c8 100644
--- a/doc/keymap.lynx
+++ b/doc/keymap.lynx
@@ -46,7 +46,7 @@ keymap - PREV_PAGE
keymap . RIGHT
keymap / SEARCH
keymap : MARK_URL
-keymap ; MARK_WORD
+keymap ";" MARK_WORD
keymap < SHIFT_LEFT
keymap = INFO
keymap > SHIFT_RIGHT
diff --git a/doc/menu.submenu b/doc/menu.submenu
index e55193d..e837f46 100644
--- a/doc/menu.submenu
+++ b/doc/menu.submenu
@@ -39,6 +39,6 @@ menu Link
end
menu Bookmark
- func "Read bookmark (b)" BOOKMARK "bB"
+ func "View bookmarks (b)" BOOKMARK "bB"
func "Add page to bookmark(a)" ADD_BOOKMARK "aA"
end
diff --git a/doc/w3m.1 b/doc/w3m.1
index 8f071c6..dbd01af 100644
--- a/doc/w3m.1
+++ b/doc/w3m.1
@@ -1,13 +1,10 @@
.nr N -1
.nr D 5
-.TH W3M 1 Local
-.UC 4
+.TH W3M 1 "2016-04-02" "w3m 0.5.3"
.SH NAME
-w3m \- a text based Web browser and pager
+w3m \- a text based web browser and pager
.SH SYNOPSIS
-.B w3m
-[options] [URL or filename]
-.PP
+w3m [OPTION]... [ \fIfile\fP | \fIURL\fP ]...
.SH DESCRIPTION
.\" This defines appropriate quote strings for nroff and troff
.ds lq \&"
@@ -17,234 +14,283 @@ w3m \- a text based Web browser and pager
.\" Just in case these number registers aren't set yet...
.if \nN==0 .nr N 10
.if \nD==0 .nr D 5
-.I
-w3m
-is a World Wide Web (WWW) text based client. It has English and
-Japanese help files and an option menu and can be configured to
-use either language. 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. It can
-display HTML tables and frames.
-In addition, it can be used as a "pager" in much the same manner
-as "more" or "less".
-Current versions of
-.I
-w3m
-run on
-Unix (Solaris, SunOS, HP-UX, Linux, FreeBSD, and EWS4800)
-and on
-Microsoft Windows 9x/NT.
-.PP
+
+\fIw3m\fP is a text based browser which can display local or remote
+web pages as well as other documents. It is able to process HTML
+tables and frames but it ignores JavaScript and Cascading Style
+Sheets. \fIw3m\fP can also serve as a pager for text files named as
+arguments or passed on standard input, and as a general purpose
+directory browser.
+
+\fIw3m\fP organizes its content in buffers or tabs, allowing easy
+navigation between them. With the w3m-img extension installed, \fIw3m\fP can
+display inline graphics in web pages. And whenever \fIw3m\fP's HTML
+rendering capabilities do not meet your needs, the target URL can be
+handed over to a graphical browser with a single command.
+
+For help with runtime options, press \(lqH\(rq while running \fIw3m\fP.
+
+.SH ARGUMENTS
+
+When given one or more command line arguments, \fIw3m\fP will handle
+targets according to content type. For web, \fIw3m\fP gets this
+information from HTTP headers; for relative or absolute file system
+paths, it relies on filenames.
+
+With no argument, \fIw3m\fP expects data from standard input and
+assumes \(lqtext/plain\(rq unless another MIME type is given by the user.
+
+If provided with no target and no fallback target (see for instance
+option \fB\-v\fP below), \fIw3m\fP will exit with usage information.
.SH OPTIONS
-At start up, \fIw3m\fR will load any local
-file or remote URL specified at the command
-line. For help with runtime options, press \fB"H"\fR
-while running \fIw3m\fR.
-Command line options are:
-.PP
+Command line options are introduced with a single \(lq\-\(rq character and
+may take an argument.
+.SS General options:
.TP
-.B -t tab
-set tab width
+\fB\-B\fP
+with no other target defined, use the bookmark page for startup
.TP
-.B -r
-ignore backspace effect
-.TP
-.B -l line
-# of preserved line (default 10000)
-.TP
-.B -I charset
-document charset
-.TP
-.B -O charset
-display/output charset
+\fB\-M\fP
+monochrome display
.TP
-.B -B
-load bookmark
+\fB\-no-mouse\fP
+deactivate mouse support
.TP
-.B -bookmark file
-specify bookmark file
+\fB\-num\fP
+display each line's number
.TP
-.B -T type
-specify content-type
+\fB\-N\fP
+distribute multiple command line arguments to tabs. By default, a
+stack of buffers is used
+.TP
+\fB\-ppc \fInum\fR
+width of \fInum\fR pixels per character. Range of 4.0 to 32.0, default 8.0.
+Larger values will make tables narrower. (Implementation not verified)
.TP
-.B -m
-internet message mode
+\fB\-ppl \fInum\fR
+height of \fInum\fR pixels per line. Range of 4.0 to 64.0. (Implementation not verified)
.TP
-.B -v
-visual startup mode
+\fB\-title\fP, \fB\-title=TERM\fP
+use the buffer name as terminal title string. With specified TERM,
+this sets the title configuration style accordingly
.TP
-.B -M
-monochrome display
+\fB\-v\fP
+with no other target defined, welcome users with a built-in page
.TP
-.B -N
-open URL of command line on each new tab
+\fB\-W\fP
+toggle wrapping in searches
.TP
-.B -F
-automatically render frame
+\fB\-X\fP
+do not initialize/deinitialize the terminal
.TP
-.B -dump
-dump formatted page into stdout
+\fB+\fInum\fR
+go to line \fInum\fR; only effective for \fInum\fR larger than the number of lines in the terminal
+.SS Browser options:
.TP
-.B -cols width
-specify column width (used with -dump)
+\fB\-cols \fInum\fR
+with stdout as destination; HTML is rendered to lines of \fInum\fR characters
.TP
-.B -ppc count
-specify the number of pixels per character (4.0...32.0).
-Larger values will make tables narrower. [default 8.0]
+\fB\-cookie\fP, \fB\-no-cookie\fP
+use stored cookies and accept new ones, or do neither
.TP
-.B -ppl count
-specify the number of pixels per line (4.0...64.0)
+\fB\-F\fP
+render frames
.TP
-.B -dump_source
-dump page source into stdout
+\fB\-graph\fP, \fB\-no-graph\fP
+use or do not use graphic characters for drawing HTML table and frame borders
.TP
-.B -dump_head
-dump response of HEAD request into stdout
+\fB\-header \fIstring\fR
+append \fIstring\fR to the HTTP(S) request. Expected to match the header syntax \f(CW Variable: Value\fP
.TP
-.B -dump_both
-dump HEAD and source into stdout
+\fB\-m\fP
+Render the body of Usenet messages according to the header \(lqContent-type\(rq
.TP
-.B -dump_extra
-dump HEAD, source, and extra information into stdout
+\fB\-no-proxy\fP
+do not use proxy
.TP
-.B -post file
-use POST method with file content
+\fB\-post \fIfile\fR
+use POST method to upload data defined in \fIfile\fR. The syntax to be used
+is \f(CWvar1=value1[&var2=value2]...\fP
.TP
-.B -header string
-insert string as a header
+\fB\-4\fP
+IPv4 only. Corresponds to dns_order=4 in configuration files
.TP
-.B +<num>
-goto <num> line
+\fB\-6\fP
+IPv6 only. Corresponds to dns_order=6 in configuration files
+.SS Text pager options:
.TP
-.B -num
-show line number
+\fB\-l \fInum\fR
+number of lines preserved internally when receiving plain text from
+stdin (default 10,000)
.TP
-.B -no-proxy
-don't use proxy
+\fB\-r\fP
+use caret notation to display special escape characters (such
+as ANSI escapes or nroff-style backspaces for bold and underlined
+characters) instead of processing them
.TP
-.B -4
-IPv4 only (-o dns_order=4)
+\fB\-s\fP
+squeeze multiple blank lines into one
.TP
-.B -6
-IPv6 only (-o dns_order=6)
+\fB\-t\fP \fInum\fP
+set tab width to \fInum\fR columns. No effect on stdout
+.SS Data type/encoding options:
.TP
-.B -no-mouse
-don't use mouse
+\fB\-I \fIcharset\fR
+user defined character encoding of input data
.TP
-.B -cookie
-use cookie.
+\fB\-O \fIcharset\fR
+user defined character encoding of output data
.TP
-.B -no-cookie
-don't use cookie
+\fB\-T \fItype\fR
+explicit characterization of input data by MIME type
+.SS Options for data output, followed by immediate exit:
.TP
-.B -graph
-use graphic character
+\fB\-dump\fP
+dump rendered page into stdout. Set implicitly when output is directed
+to a file or pipe
.TP
-.B -no-graph
-don't use graphic character
+\fB\-dump_source\fP
+dump the page's source code into stdout
.TP
-.B -S
-squeeze multiple blank lines
+\fB\-dump_head\fP
+dump response of a HEAD request for a URL into stdout
.TP
-.B -W
-toggle wrap search mode
+\fB\-dump_both\fP
+dump HEAD, and source code for a URL into stdout
.TP
-.B -X
-don't use termcap init/deinit
+\fB\-dump_extra\fP
+dump HEAD, source code, and extra information for a URL into stdout
.TP
-.B -title [=TERM]
-set buffer name to terminal title string.
-If TERM is specified, use the TERM style title configuration.
+\fB\-help\fP
+show a summary of compiled-in features and command line options
.TP
-.B -o opt=value
-assign value to config option
+\fB\-show-option\fP
+show all available config options
.TP
-.B -show-option
-show all available config option
+\fB\-version\fP
+show the version of \fIw3m\fP
+.SS Options for overriding default settings and resources:
.TP
-.B -config file
-specify config file
+\fB\-bookmark \fIfile\fR
+use \fIfile\fR instead of the default bookmark.html file
.TP
-.B -help
-show usage
+\fB\-config \fIfile\fR
+use \fIfile\fR instead of the default config file
.TP
-.B -version
-show w3m version
+\fB\-debug\fP
+DO NOT USE
.TP
-.B -reqlog
-write request logfile
+\fB\-o \fIoption=value\fR
+modify one configuration item with an explicitly given value; without \fIoption=value\fR, equivalent to -show-option
.TP
-.B -debug
-DO NOT USE
+\fB\-reqlog\fP
+log headers of HTTP communication in file \f(CW~/.w3m/request.log\fP
.SH EXAMPLES
+.SS Pager-like usage
+.TP
+Combine snippets of HTML code and preview the page
+.EX
+$ cat header.html footer.html | w3m -T text/html
+.EE
+.TP
+Compare two files using tabs
+.EX
+$ w3m -N config.old config
+.EE
+.SS Browser-like usage
+.TP
+Display web content in monochrome terminal
+.EX
+$ w3m -M http://w3m.sourceforge.net
+.EE
+.TP
+Display embedded graphics
+.EX
+$ w3m -o auto_image=TRUE http://w3m.sourceforge.net
+.EE
+.TP
+Display content from Usenet
+.EX
+$ w3m -m nntp://news.aioe.org/comp.os.linux.networking
+.EE
+.TP
+Upload data for a URL using the POST method
+.EX
+$ w3m -post - http://example.com/form.php <<<'a=0&b=1'
+.EE
+.SS Filter-like usage
+.TP
+Convert an HTML file to plain text with a defined line length
+.EX
+$ w3m -cols 40 foo.html > foo.txt
+.EE
+.TP
+Output the bookmarks page as text with an appended list of links
+.EX
+$ w3m -B -o display_link_number=1 > out.txt
+.EE
+.TP
+Conversion of file format and character encoding
+.EX
+$ w3m -T text/html -I EUC-JP -O UTF-8 < foo.html > foo.txt
+.EE
+.SS Start with no input
+.TP
+Welcome users with a built-in page
+.EX
+$ w3m -v
+.EE
+.\".SH Errors
+.SH ENVIRONMENT
+\fIw3m\fP recognises the environment variable WWW_HOME as defining a
+fallback target for use if it is invoked without one.
+.SH FILES
.TP
-To use w3m as a pager:
-.br
-$ ls | w3m
-.br
-.TP
-To use w3m to translate HTML files:
-.br
-$ cat foo.html | w3m -T text/html
+\f(CW~/.w3m/bookmark.html\fP
+default bookmark file
.TP
-or
-.br
-$ cat foo.html | w3m -dump -T text/html >foo.txt
-.SH FILES
+\f(CW~/.w3m/config\fP
+user defined configuration file; overrides \f(CW/etc/w3m/config\fP
.TP
-.I ${HOME}/.w3m/config
-configuration file
+\f(CW~/.w3m/cookie\fP
+cookie jar; written on exit, read on launch
.TP
-.I ${HOME}/.w3m/keymap
-key binding configuration file
-.\" .TP
-.\" .I ${HOME}/.w3m/menu
-.\" ???
+\f(CW~/.w3m/history\fP
+browser history - visited files and URLs
.TP
-.I ${HOME}/.w3m/mouse
-mouse configuration file
+\f(CW~/.w3m/keymap\fP
+user defined key bindings; overrides default key bindings
.TP
-.I ${HOME}/.w3m/cookie
-cookie file
+\f(CW~/.w3m/mailcap\fP
+external viewer configuration file
.TP
-.I ${HOME}/.w3m/history
-history file
+\f(CW~/.w3m/menu\fP
+user defined menu; overrides default menu
.TP
-.I ${HOME}/.w3m/passwd
-passowrd and username file
+\f(CW~/.w3m/mime.types\fP
+MIME types file
.TP
-.I ${HOME}/.w3m/pre_form
-form parameters file
+\f(CW~/.w3m/mouse\fP
+user defined mouse settings
.TP
-.I ${HOME}/.w3m/mailcap
-external viewer configuration file
+\f(CW~/.w3m/passwd\fP
+password and username file
.TP
-.I ${HOME}/.w3m/mime.types
-MIME types file
+\f(CW~/.w3m/pre_form\fP
+contains predefined values to fill recurrent HTML forms
.\" .TP
-.\" .I ${HOME}/.w3m/urimethodmap
+.\" .I $~/.w3m/urimethodmap
.\" ???
-.SH NOTES
-This is the
-.I
-w3m
-0.5.3 Release.
-.PP
-Please see the MANUAL.html file distributed with w3m for
-more detailed documentation.
-
-Additional information about
-.I
-w3m
-may be found on its Japanese language Web site located at:
- http://w3m.sourceforge.net/index.ja.html
-.br
-or on its English version of the site at:
- http://w3m.sourceforge.net/index.en.html
+.SH SEE ALSO
+README and example files are to be found in the doc directory of your \fIw3m\fP installation. Recent information about \fIw3m\fP may be found on
+.UR http://w3m.sourceforge.net
+the project's web pages at
+.UE
.SH ACKNOWLEDGMENTS
-.I
-w3m
-has incorporated code from several sources.
+\fIw3m\fP has incorporated code from several sources.
Users have contributed patches and suggestions over time.
.SH AUTHOR
-Akinori ITO <aito@fw.ipsj.or.jp>
+.UR aito@fw.ipsj.or.jp
+Akinori ITO
+.UE
+
diff --git a/entity.c b/entity.c
index fdd8f64..45dc95e 100644
--- a/entity.c
+++ b/entity.c
@@ -44,6 +44,8 @@ conv_entity(unsigned int c)
return " ";
if (c == 0xa0)
return NBSP;
+ if (c == 0xad) /* SOFT HYPHEN */
+ return "";
if (c < 0x100) { /* Latin1 (ISO 8859-1) */
if (UseAltEntity)
return alt_latin1[c - 0xa0];
diff --git a/etc.c b/etc.c
index 8fe1215..dcc6edd 100644
--- a/etc.c
+++ b/etc.c
@@ -1365,7 +1365,13 @@ setup_child(int child, int i, int f)
if (!child)
SETPGRP();
#endif /* __MINGW32_VERSION */
+ /*
+ * I don't know why but close_tty() sometimes interrupts loadGeneralFile() in loadImage()
+ * and corrupt image data can be cached in ~/.w3m.
+ */
+#if 0
close_tty();
+#endif
close_all_fds_except(i, f);
QuietMessage = TRUE;
fmInitialized = FALSE;
diff --git a/file.c b/file.c
index 567d41e..e26f383 100644
--- a/file.c
+++ b/file.c
@@ -26,6 +26,8 @@
#define min(a,b) ((a) > (b) ? (b) : (a))
#endif /* not min */
+#define MAX_INPUT_SIZE 80 /* TODO - max should be screen line length */
+
static int frame_source = 0;
static char *guess_filename(char *file);
@@ -47,11 +49,11 @@ static JMP_BUF AbortLoading;
static struct table *tables[MAX_TABLE];
static struct table_mode table_mode[MAX_TABLE];
-#ifdef USE_IMAGE
+#if defined(USE_M17N) || defined(USE_IMAGE)
static ParsedURL *cur_baseURL = NULL;
-#ifdef USE_M17N
-static char cur_document_charset;
#endif
+#ifdef USE_M17N
+static wc_ces cur_document_charset = 0;
#endif
static Str cur_title;
@@ -215,7 +217,6 @@ currentLn(Buffer *buf)
static Buffer *
loadSomething(URLFile *f,
- char *path,
Buffer *(*loadproc) (URLFile *, Buffer *), Buffer *defaultbuf)
{
Buffer *buf;
@@ -223,17 +224,23 @@ loadSomething(URLFile *f,
if ((buf = loadproc(f, defaultbuf)) == NULL)
return NULL;
- buf->filename = path;
if (buf->buffername == NULL || buf->buffername[0] == '\0') {
buf->buffername = checkHeader(buf, "Subject:");
- if (buf->buffername == NULL)
- buf->buffername = conv_from_system(lastFileName(path));
+ if (buf->buffername == NULL && buf->filename != NULL)
+ buf->buffername = conv_from_system(lastFileName(buf->filename));
}
if (buf->currentURL.scheme == SCM_UNKNOWN)
buf->currentURL.scheme = f->scheme;
- buf->real_scheme = f->scheme;
if (f->scheme == SCM_LOCAL && buf->sourcefile == NULL)
- buf->sourcefile = path;
+ buf->sourcefile = buf->filename;
+ if (loadproc == loadHTMLBuffer
+#ifdef USE_IMAGE
+ || loadproc == loadImageBuffer
+#endif
+ )
+ buf->type = "text/html";
+ else
+ buf->type = "text/plain";
return buf;
}
@@ -484,28 +491,6 @@ convertLine0(URLFile *uf, Str line, int mode)
return line;
}
-/*
- * loadFile: load file to buffer
- */
-Buffer *
-loadFile(char *path)
-{
- Buffer *buf;
- URLFile uf;
- init_stream(&uf, SCM_LOCAL, NULL);
- examineFile(path, &uf);
- if (uf.stream == NULL)
- return NULL;
- buf = newBuffer(INIT_BUFFER_WIDTH);
- current_content_length = 0;
-#ifdef USE_M17N
- content_charset = 0;
-#endif
- buf = loadSomething(&uf, path, loadBuffer, buf);
- UFclose(&uf);
- return buf;
-}
-
int
matchattr(char *p, char *attr, int len, Str *value)
{
@@ -694,6 +679,7 @@ readHeader(URLFile *uf, Buffer *newBuf, int thru, ParsedURL *pu)
#endif
init_stream(&f, SCM_LOCAL, newStrStream(src));
loadHTMLstream(&f, newBuf, NULL, TRUE);
+ UFclose(&f);
for (l = newBuf->lastLine; l && l->real_linenumber;
l = l->prev)
l->real_linenumber = 0;
@@ -1244,6 +1230,7 @@ AuthDigestCred(struct http_auth *ha, Str uname, Str pw, ParsedURL *pu,
unsigned char md5[MD5_DIGEST_LENGTH + 1];
Str uri = HTTPrequestURI(pu, hr);
char nc[] = "00000001";
+ FILE *fp;
Str algorithm = qstr_unquote(get_auth_param(ha->param, "algorithm"));
Str nonce = qstr_unquote(get_auth_param(ha->param, "nonce"));
@@ -1326,10 +1313,11 @@ AuthDigestCred(struct http_auth *ha, Str uname, Str pw, ParsedURL *pu,
/* A2 = Method ":" digest-uri-value ":" H(entity-body) */
if (request && request->body) {
if (request->method == FORM_METHOD_POST && request->enctype == FORM_ENCTYPE_MULTIPART) {
- FILE *fp = fopen(request->body, "r");
+ fp = fopen(request->body, "r");
if (fp != NULL) {
Str ebody;
ebody = Strfgetall(fp);
+ fclose(fp);
MD5(ebody->ptr, strlen(ebody->ptr), md5);
}
else {
@@ -1697,13 +1685,15 @@ getLinkNumberStr(int correction)
/*
* loadGeneralFile: load file to buffer
*/
+#define DO_EXTERNAL ((Buffer *(*)(URLFile *, Buffer *))doExternal)
Buffer *
loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
int flag, FormList *volatile request)
{
URLFile f, *volatile of = NULL;
ParsedURL pu;
- Buffer *b = NULL, *(*volatile proc)() = loadBuffer;
+ Buffer *b = NULL;
+ Buffer *(*volatile proc)(URLFile *, Buffer *) = loadBuffer;
char *volatile tpath;
char *volatile t = "text/plain", *p, *volatile real_type = NULL;
Buffer *volatile t_buf = NULL;
@@ -1730,7 +1720,22 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
add_auth_cookie_flag = 0;
checkRedirection(NULL);
+
load_doc:
+ {
+ const char *sc_redirect;
+ parseURL2(tpath, &pu, current);
+ sc_redirect = query_SCONF_SUBSTITUTE_URL(&pu);
+ if (sc_redirect && *sc_redirect && checkRedirection(&pu)) {
+ tpath = (char *)sc_redirect;
+ request = NULL;
+ add_auth_cookie_flag = 0;
+ current = New(ParsedURL);
+ *current = pu;
+ status = HTST_NORMAL;
+ goto load_doc;
+ }
+ }
TRAP_OFF;
url_option.referer = referer;
url_option.flag = flag;
@@ -1863,7 +1868,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
/* 302: Found */
/* 303: See Other */
/* 307: Temporary Redirect (HTTP/1.1) */
- tpath = url_quote_conv(p, DocumentCharset);
+ tpath = url_encode(p, NULL, 0);
request = NULL;
UFclose(&f);
current = New(ParsedURL);
@@ -2022,7 +2027,7 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
if (f.is_cgi && (p = checkHeader(t_buf, "Location:")) != NULL &&
checkRedirection(&pu)) {
/* document moved */
- tpath = url_quote_conv(remove_space(p), DocumentCharset);
+ tpath = url_encode(remove_space(p), NULL, 0);
request = NULL;
UFclose(&f);
add_auth_cookie_flag = 0;
@@ -2123,10 +2128,6 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
if (real_type == NULL)
real_type = t;
proc = loadBuffer;
-#ifdef USE_IMAGE
- cur_baseURL = New(ParsedURL);
- copyParsedURL(cur_baseURL, &pu);
-#endif
current_content_length = 0;
if ((p = checkHeader(t_buf, "Content-Length:")) != NULL)
@@ -2197,18 +2198,8 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
#endif
else if (w3m_backend) ;
else if (!(w3m_dump & ~DUMP_FRAME) || is_dump_text_type(t)) {
- if (!do_download && doExternal(f,
- pu.real_file ? pu.real_file : pu.file,
- t, &b, t_buf)) {
- if (b && b != NO_BUFFER) {
- b->real_scheme = f.scheme;
- b->real_type = real_type;
- if (b->currentURL.host == NULL && b->currentURL.file == NULL)
- copyParsedURL(&b->currentURL, &pu);
- }
- UFclose(&f);
- TRAP_OFF;
- return b;
+ if (!do_download && searchExtViewer(t) != NULL) {
+ proc = DO_EXTERNAL;
}
else {
TRAP_OFF;
@@ -2232,36 +2223,30 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
else if (w3m_dump & DUMP_FRAME)
return NULL;
+ if (t_buf == NULL)
+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
+ copyParsedURL(&t_buf->currentURL, &pu);
+ t_buf->filename = pu.real_file ? pu.real_file :
+ pu.file ? conv_to_system(pu.file) : NULL;
if (flag & RG_FRAME) {
- if (t_buf == NULL)
- t_buf = newBuffer(INIT_BUFFER_WIDTH);
t_buf->bufferprop |= BP_FRAME;
}
#ifdef USE_SSL
- if (t_buf)
- t_buf->ssl_certificate = f.ssl_certificate;
+ t_buf->ssl_certificate = f.ssl_certificate;
#endif
frame_source = flag & RG_FRAME_SRC;
- b = loadSomething(&f, pu.real_file ? pu.real_file : pu.file, proc, t_buf);
+ if (proc == DO_EXTERNAL) {
+ b = doExternal(f, t, t_buf);
+ } else {
+ b = loadSomething(&f, proc, t_buf);
+ }
UFclose(&f);
frame_source = 0;
- if (b) {
+ if (b && b != NO_BUFFER) {
b->real_scheme = f.scheme;
b->real_type = real_type;
- if (b->currentURL.host == NULL && b->currentURL.file == NULL)
- copyParsedURL(&b->currentURL, &pu);
- if (is_html_type(t))
- b->type = "text/html";
- else if (w3m_backend) {
- Str s = Strnew_charp(t);
- b->type = s->ptr;
- }
-#ifdef USE_IMAGE
- else if (proc == loadImageBuffer)
- b->type = "text/html";
-#endif
- else
- b->type = "text/plain";
+ if (w3m_backend)
+ b->type = allocStr(t, -1);
if (pu.label) {
if (proc == loadHTMLBuffer) {
Anchor *a;
@@ -2287,10 +2272,11 @@ loadGeneralFile(char *path, ParsedURL *volatile current, char *referer,
if (header_string)
header_string = NULL;
#ifdef USE_NNTP
- if (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS)
+ if (b && b != NO_BUFFER && (f.scheme == SCM_NNTP || f.scheme == SCM_NEWS))
reAnchorNewsheader(b);
#endif
- preFormUpdateBuffer(b);
+ if (b && b != NO_BUFFER)
+ preFormUpdateBuffer(b);
TRAP_OFF;
return b;
}
@@ -2469,6 +2455,7 @@ set_breakpoint(struct readbuffer *obuf, int tag_length)
bcopy((void *)&obuf->anchor, (void *)&obuf->bp.anchor,
sizeof(obuf->anchor));
obuf->bp.img_alt = obuf->img_alt;
+ obuf->bp.input_alt = obuf->input_alt;
obuf->bp.in_bold = obuf->in_bold;
obuf->bp.in_italic = obuf->in_italic;
obuf->bp.in_under = obuf->in_under;
@@ -2486,6 +2473,7 @@ back_to_breakpoint(struct readbuffer *obuf)
bcopy((void *)&obuf->bp.anchor, (void *)&obuf->anchor,
sizeof(obuf->anchor));
obuf->img_alt = obuf->bp.img_alt;
+ obuf->input_alt = obuf->bp.input_alt;
obuf->in_bold = obuf->bp.in_bold;
obuf->in_italic = obuf->bp.in_italic;
obuf->in_under = obuf->bp.in_under;
@@ -2729,7 +2717,7 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
Str line = obuf->line, pass = NULL;
char *hidden_anchor = NULL, *hidden_img = NULL, *hidden_bold = NULL,
*hidden_under = NULL, *hidden_italic = NULL, *hidden_strike = NULL,
- *hidden_ins = NULL, *hidden = NULL;
+ *hidden_ins = NULL, *hidden_input = NULL, *hidden = NULL;
#ifdef DEBUG
if (w3m_debug) {
@@ -2761,6 +2749,12 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
hidden = hidden_img;
}
}
+ if (obuf->input_alt.in) {
+ if ((hidden_input = has_hidden_link(obuf, HTML_INPUT_ALT)) != NULL) {
+ if (!hidden || hidden_input < hidden)
+ hidden = hidden_input;
+ }
+ }
if (obuf->in_bold) {
if ((hidden_bold = has_hidden_link(obuf, HTML_B)) != NULL) {
if (!hidden || hidden_bold < hidden)
@@ -2812,6 +2806,8 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
Strcat_charp(line, "</a>");
if (obuf->img_alt && !hidden_img)
Strcat_charp(line, "</img_alt>");
+ if (obuf->input_alt.in && !hidden_input)
+ Strcat_charp(line, "</input_alt>");
if (obuf->in_bold && !hidden_bold)
Strcat_charp(line, "</b>");
if (obuf->in_italic && !hidden_italic)
@@ -3022,6 +3018,18 @@ flushline(struct html_feed_environ *h_env, struct readbuffer *obuf, int indent,
Strcat_charp(tmp, "\">");
push_tag(obuf, tmp->ptr, HTML_IMG_ALT);
}
+ if (!hidden_input && obuf->input_alt.in) {
+ Str tmp;
+ if (obuf->input_alt.hseq > 0)
+ obuf->input_alt.hseq = - obuf->input_alt.hseq;
+ tmp = Sprintf("<INPUT_ALT hseq=\"%d\" fid=\"%d\" name=\"%s\" type=\"%s\" value=\"%s\">",
+ obuf->input_alt.hseq,
+ obuf->input_alt.fid,
+ obuf->input_alt.name->ptr,
+ obuf->input_alt.type->ptr,
+ obuf->input_alt.value->ptr);
+ push_tag(obuf, tmp->ptr, HTML_INPUT_ALT);
+ }
if (!hidden_bold && obuf->in_bold)
push_tag(obuf, "<B>", HTML_B);
if (!hidden_italic && obuf->in_italic)
@@ -3228,7 +3236,7 @@ process_img(struct parsed_tag *tag, int width)
if (!parsedtag_get_value(tag, ATTR_SRC, &p))
return tmp;
- p = remove_space(p);
+ p = url_encode(remove_space(p), cur_baseURL, cur_document_charset);
q = NULL;
parsedtag_get_value(tag, ATTR_ALT, &q);
if (!pseudoInlines && (q == NULL || (*q == '\0' && ignore_null_img_alt)))
@@ -3322,12 +3330,7 @@ process_img(struct parsed_tag *tag, int width)
Image image;
ParsedURL u;
-#ifdef USE_M17N
- parseURL2(wc_conv(p, InnerCharset, cur_document_charset)->ptr, &u,
- cur_baseURL);
-#else
parseURL2(p, &u, cur_baseURL);
-#endif
image.url = parsedURL2Str(&u)->ptr;
if (!uncompressed_file_type(u.file, &image.ext))
image.ext = filename_extension(u.file, TRUE);
@@ -3346,8 +3349,14 @@ process_img(struct parsed_tag *tag, int width)
if (i < 0)
i = pixel_per_line;
}
- nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1;
- ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1;
+ if (enable_inline_image) {
+ nw = (w > 1) ? ((w - 1) / pixel_per_char_i + 1) : 1 ;
+ ni = (i > 1) ? ((i - 1) / pixel_per_line_i + 1) : 1 ;
+ }
+ else {
+ nw = (w > 3) ? (int)((w - 3) / pixel_per_char + 1) : 1;
+ ni = (i > 3) ? (int)((i - 3) / pixel_per_line + 1) : 1;
+ }
Strcat(tmp,
Sprintf("<pre_int><img_alt hseq=\"%d\" src=\"", cur_iseq++));
pre_int = TRUE;
@@ -3378,19 +3387,21 @@ process_img(struct parsed_tag *tag, int width)
if (i0 >= 0)
Strcat(tmp, Sprintf(" height=%d", i0));
switch (align) {
+ case ALIGN_MIDDLE:
+ if (!enable_inline_image) {
+ top = ni / 2;
+ bottom = top;
+ if (top * 2 == ni)
+ yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2);
+ else
+ yoffset = (int)((ni * pixel_per_line - i) / 2);
+ break;
+ }
case ALIGN_TOP:
top = 0;
bottom = ni - 1;
yoffset = 0;
break;
- case ALIGN_MIDDLE:
- top = ni / 2;
- bottom = top;
- if (top * 2 == ni)
- yoffset = (int)(((ni + 1) * pixel_per_line - i) / 2);
- else
- yoffset = (int)((ni * pixel_per_line - i) / 2);
- break;
case ALIGN_BOTTOM:
top = ni - 1;
bottom = 0;
@@ -3408,7 +3419,12 @@ process_img(struct parsed_tag *tag, int width)
}
break;
}
- xoffset = (int)((nw * pixel_per_char - w) / 2);
+
+ if (enable_inline_image)
+ xoffset = 0;
+ else
+ xoffset = (int)((nw * pixel_per_char - w) / 2);
+
if (xoffset)
Strcat(tmp, Sprintf(" xoffset=%d", xoffset));
if (yoffset)
@@ -3548,7 +3564,7 @@ process_anchor(struct parsed_tag *tag, char *tagbuf)
Str
process_input(struct parsed_tag *tag)
{
- int i, w, v, x, y, z, iw, ih;
+ int i = 20, v, x, y, z, iw, ih, size = 20;
char *q, *p, *r, *p2, *s;
Str tmp = NULL;
char *qq = "";
@@ -3567,9 +3583,9 @@ process_input(struct parsed_tag *tag)
parsedtag_get_value(tag, ATTR_VALUE, &q);
r = "";
parsedtag_get_value(tag, ATTR_NAME, &r);
- w = 20;
- parsedtag_get_value(tag, ATTR_SIZE, &w);
- i = 20;
+ parsedtag_get_value(tag, ATTR_SIZE, &size);
+ if (size > MAX_INPUT_SIZE)
+ size = MAX_INPUT_SIZE;
parsedtag_get_value(tag, ATTR_MAXLENGTH, &i);
p2 = NULL;
parsedtag_get_value(tag, ATTR_ALT, &p2);
@@ -3625,7 +3641,7 @@ process_input(struct parsed_tag *tag)
}
Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s "
"name=\"%s\" width=%d maxlength=%d value=\"%s\"",
- cur_hseq++, cur_form_id, p, html_quote(r), w, i, qq));
+ cur_hseq++, cur_form_id, p, html_quote(r), size, i, qq));
if (x)
Strcat_charp(tmp, " checked");
if (y)
@@ -3670,18 +3686,18 @@ process_input(struct parsed_tag *tag)
case FORM_INPUT_PASSWORD:
i = 0;
if (q) {
- for (; i < qlen && i < w; i++)
+ for (; i < qlen && i < size; i++)
Strcat_char(tmp, '*');
}
- for (; i < w; i++)
+ for (; i < size; i++)
Strcat_char(tmp, ' ');
break;
case FORM_INPUT_TEXT:
case FORM_INPUT_FILE:
if (q)
- Strcat(tmp, textfieldrep(Strnew_charp(q), w));
+ Strcat(tmp, textfieldrep(Strnew_charp(q), size));
else {
- for (i = 0; i < w; i++)
+ for (i = 0; i < size; i++)
Strcat_char(tmp, ' ');
}
break;
@@ -3732,6 +3748,63 @@ process_input(struct parsed_tag *tag)
}
Str
+process_button(struct parsed_tag *tag)
+{
+ Str tmp = NULL;
+ char *p, *q, *r, *qq = "";
+ int qlen, v;
+
+ if (cur_form_id < 0) {
+ char *s = "<form_int method=internal action=none>";
+ tmp = process_form(parse_tag(&s, TRUE));
+ }
+ if (tmp == NULL)
+ tmp = Strnew();
+
+ p = "submit";
+ parsedtag_get_value(tag, ATTR_TYPE, &p);
+ q = NULL;
+ parsedtag_get_value(tag, ATTR_VALUE, &q);
+ r = "";
+ parsedtag_get_value(tag, ATTR_NAME, &r);
+
+ v = formtype(p);
+ if (v == FORM_UNKNOWN)
+ return NULL;
+
+ if (!q) {
+ switch (v) {
+ case FORM_INPUT_SUBMIT:
+ case FORM_INPUT_BUTTON:
+ q = "SUBMIT";
+ break;
+ case FORM_INPUT_RESET:
+ q = "RESET";
+ break;
+ }
+ }
+ if (q) {
+ qq = html_quote(q);
+ qlen = strlen(q);
+ }
+
+ /* Strcat_charp(tmp, "<pre_int>"); */
+ Strcat(tmp, Sprintf("<input_alt hseq=\"%d\" fid=\"%d\" type=%s "
+ "name=\"%s\" value=\"%s\">",
+ cur_hseq++, cur_form_id, p, html_quote(r), qq));
+ return tmp;
+}
+
+Str
+process_n_button(void)
+{
+ Str tmp = Strnew();
+ Strcat_charp(tmp, "</input_alt>");
+ /* Strcat_charp(tmp, "</pre_int>"); */
+ return tmp;
+}
+
+Str
process_select(struct parsed_tag *tag)
{
Str tmp = NULL;
@@ -4084,6 +4157,7 @@ process_form_int(struct parsed_tag *tag, int fid)
parsedtag_get_value(tag, ATTR_METHOD, &p);
q = "!CURRENT_URL!";
parsedtag_get_value(tag, ATTR_ACTION, &q);
+ q = url_encode(remove_space(q), cur_baseURL, cur_document_charset);
r = NULL;
#ifdef USE_M17N
if (parsedtag_get_value(tag, ATTR_ACCEPT_CHARSET, &r))
@@ -4284,15 +4358,15 @@ getMetaRefreshParam(char *q, Str *refresh_uri)
while (*q) {
if (!strncasecmp(q, "url=", 4)) {
q += 4;
- if (*q == '\"') /* " */
+ if (*q == '\"' || *q == '\'') /* " or ' */
q++;
r = q;
while (*r && !IS_SPACE(*r) && *r != ';')
r++;
s_tmp = Strnew_charp_n(q, r - q);
- if (s_tmp->ptr[s_tmp->length - 1] == '\"') { /* "
- */
+ if (s_tmp->ptr[s_tmp->length - 1] == '\"' /* " */
+ || s_tmp->ptr[s_tmp->length - 1] == '\'') { /* ' */
s_tmp->length--;
s_tmp->ptr[s_tmp->length] = '\0';
}
@@ -4861,7 +4935,35 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
if (i > obuf->bottom_margin)
obuf->bottom_margin = i;
}
+ if (parsedtag_get_value(tag, ATTR_HSEQ, &hseq)) {
+ obuf->input_alt.hseq = hseq;
+ }
+ if (parsedtag_get_value(tag, ATTR_FID, &i)) {
+ obuf->input_alt.fid = i;
+ }
+ if (parsedtag_get_value(tag, ATTR_TYPE, &p)) {
+ obuf->input_alt.type = Strnew_charp(p);
+ }
+ if (parsedtag_get_value(tag, ATTR_VALUE, &p)) {
+ obuf->input_alt.value = Strnew_charp(p);
+ }
+ if (parsedtag_get_value(tag, ATTR_NAME, &p)) {
+ obuf->input_alt.name = Strnew_charp(p);
+ }
+ obuf->input_alt.in = 1;
return 0;
+ case HTML_N_INPUT_ALT:
+ if (obuf->input_alt.in) {
+ if (!close_effect0(obuf, HTML_INPUT_ALT))
+ push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT);
+ obuf->input_alt.hseq = 0;
+ obuf->input_alt.fid = -1;
+ obuf->input_alt.in = 0;
+ obuf->input_alt.type = NULL;
+ obuf->input_alt.name = NULL;
+ obuf->input_alt.value = NULL;
+ }
+ return 1;
case HTML_TABLE:
close_anchor(h_env, obuf);
obuf->table_level++;
@@ -4884,6 +4986,8 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
else
w = BORDER_THIN;
}
+ if (DisplayBorders && w == BORDER_NONE)
+ w = BORDER_THIN;
if (parsedtag_get_value(tag, ATTR_WIDTH, &i)) {
if (obuf->table_level == 0)
width = REAL_WIDTH(i, h_env->limit - envs[h_env->envc].indent);
@@ -4970,6 +5074,16 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
case HTML_INPUT:
close_anchor(h_env, obuf);
tmp = process_input(tag);
+ if (tmp)
+ HTMLlineproc1(tmp->ptr, h_env);
+ return 1;
+ case HTML_BUTTON:
+ tmp = process_button(tag);
+ if (tmp)
+ HTMLlineproc1(tmp->ptr, h_env);
+ return 1;
+ case HTML_N_BUTTON:
+ tmp = process_n_button();
if (tmp)
HTMLlineproc1(tmp->ptr, h_env);
return 1;
@@ -5067,11 +5181,10 @@ HTMLtagproc1(struct parsed_tag *tag, struct html_feed_environ *h_env)
}
return 1;
case HTML_BASE:
-#ifdef USE_IMAGE
+#if defined(USE_M17N) || defined(USE_IMAGE)
p = NULL;
if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
- if (!cur_baseURL)
- cur_baseURL = New(ParsedURL);
+ cur_baseURL = New(ParsedURL);
parseURL(p, cur_baseURL, NULL);
}
#endif
@@ -5329,6 +5442,13 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
#ifdef MENU_SELECT
Anchor **a_select = NULL;
#endif
+#if defined(USE_M17N) || defined(USE_IMAGE)
+ ParsedURL *base = baseURL(buf);
+#endif
+#ifdef USE_M17N
+ wc_ces name_charset = url_to_charset(NULL, &buf->currentURL,
+ buf->document_charset);
+#endif
if (out_size == 0) {
out_size = LINELEN;
@@ -5523,16 +5643,17 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
hseq = 0;
id = NULL;
if (parsedtag_get_value(tag, ATTR_NAME, &id)) {
- id = url_quote_conv(id, buf->document_charset);
+ id = url_quote_conv(id, name_charset);
registerName(buf, id, currentLn(buf), pos);
}
if (parsedtag_get_value(tag, ATTR_HREF, &p))
- p = url_quote_conv(remove_space(p),
- buf->document_charset);
+ p = url_encode(remove_space(p), base,
+ buf->document_charset);
if (parsedtag_get_value(tag, ATTR_TARGET, &q))
q = url_quote_conv(q, buf->document_charset);
if (parsedtag_get_value(tag, ATTR_REFERER, &r))
- r = url_quote_conv(r, buf->document_charset);
+ r = url_encode(r, base,
+ buf->document_charset);
parsedtag_get_value(tag, ATTR_TITLE, &s);
parsedtag_get_value(tag, ATTR_ACCESSKEY, &t);
parsedtag_get_value(tag, ATTR_HSEQ, &hseq);
@@ -5618,7 +5739,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
ParsedURL u;
Image *image;
- parseURL2(a_img->url, &u, cur_baseURL);
+ parseURL2(a_img->url, &u, base);
a_img->image = image = New(Image);
image->url = parsedURL2Str(&u)->ptr;
if (!uncompressed_file_type(u.file, &image->ext))
@@ -5639,7 +5760,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
image->map = q;
image->ismap = ismap;
image->touch = 0;
- image->cache = getImage(image, cur_baseURL,
+ image->cache = getImage(image, base,
IMG_FLAG_SKIP);
}
else if (iseq < 0) {
@@ -5689,6 +5810,21 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
putHmarker(buf->hmarklist, currentLn(buf),
hpos, hseq - 1);
}
+ else if (hseq < 0) {
+ int h = -hseq - 1;
+ int hpos = pos;
+ if (*str == '[')
+ hpos++;
+ if (buf->hmarklist &&
+ h < buf->hmarklist->nmark &&
+ buf->hmarklist->marks[h].invalid) {
+ buf->hmarklist->marks[h].pos = hpos;
+ buf->hmarklist->marks[h].line = currentLn(buf);
+ buf->hmarklist->marks[h].invalid = 0;
+ hseq = -hseq;
+ }
+ }
+
if (!form->target)
form->target = buf->baseTarget;
if (a_textarea &&
@@ -5761,8 +5897,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
break;
if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
MapArea *a;
- p = url_quote_conv(remove_space(p),
- buf->document_charset);
+ p = url_encode(remove_space(p), base,
+ buf->document_charset);
t = NULL;
parsedtag_get_value(tag, ATTR_TARGET, &t);
q = "";
@@ -5811,11 +5947,14 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
break;
case HTML_BASE:
if (parsedtag_get_value(tag, ATTR_HREF, &p)) {
- p = url_quote_conv(remove_space(p),
- buf->document_charset);
+ p = url_encode(remove_space(p), NULL,
+ buf->document_charset);
if (!buf->baseURL)
buf->baseURL = New(ParsedURL);
parseURL(p, buf->baseURL, NULL);
+#if defined(USE_M17N) || defined(USE_IMAGE)
+ base = buf->baseURL;
+#endif
}
if (parsedtag_get_value(tag, ATTR_TARGET, &p))
buf->baseTarget =
@@ -5830,8 +5969,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
int refresh_interval = getMetaRefreshParam(q, &tmp);
#ifdef USE_ALARM
if (tmp) {
- p = url_quote_conv(remove_space(tmp->ptr),
- buf->document_charset);
+ p = url_encode(remove_space(tmp->ptr), base,
+ buf->document_charset);
buf->event = setAlarmEvent(buf->event,
refresh_interval,
AL_IMPLICIT_ONCE,
@@ -5844,8 +5983,8 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
FUNCNAME_reload, NULL);
#else
if (tmp && refresh_interval == 0) {
- p = url_quote_conv(remove_space(tmp->ptr),
- buf->document_charset);
+ p = url_encode(remove_space(tmp->ptr), base,
+ buf->document_charset);
pushEvent(FUNCNAME_gorURL, p);
}
#endif
@@ -5929,7 +6068,7 @@ HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit)
#ifdef ID_EXT
id = NULL;
if (parsedtag_get_value(tag, ATTR_ID, &id)) {
- id = url_quote_conv(id, buf->document_charset);
+ id = url_quote_conv(id, name_charset);
registerName(buf, id, currentLn(buf), pos);
}
if (renderFrameSet &&
@@ -5982,7 +6121,8 @@ addLink(Buffer *buf, struct parsed_tag *tag)
parsedtag_get_value(tag, ATTR_HREF, &href);
if (href)
- href = url_quote_conv(remove_space(href), buf->document_charset);
+ href = url_encode(remove_space(href), baseURL(buf),
+ buf->document_charset);
parsedtag_get_value(tag, ATTR_TITLE, &title);
parsedtag_get_value(tag, ATTR_TYPE, &ctype);
parsedtag_get_value(tag, ATTR_REL, &rel);
@@ -6756,6 +6896,12 @@ init_henv(struct html_feed_environ *h_env, struct readbuffer *obuf,
obuf->nobr_level = 0;
bzero((void *)&obuf->anchor, sizeof(obuf->anchor));
obuf->img_alt = 0;
+ obuf->input_alt.hseq = 0;
+ obuf->input_alt.fid = -1;
+ obuf->input_alt.in = 0;
+ obuf->input_alt.type = NULL;
+ obuf->input_alt.name = NULL;
+ obuf->input_alt.value = NULL;
obuf->in_bold = 0;
obuf->in_italic = 0;
obuf->in_under = 0;
@@ -6791,6 +6937,15 @@ completeHTMLstream(struct html_feed_environ *h_env, struct readbuffer *obuf)
push_tag(obuf, "</img_alt>", HTML_N_IMG_ALT);
obuf->img_alt = NULL;
}
+ if (obuf->input_alt.in) {
+ push_tag(obuf, "</input_alt>", HTML_N_INPUT_ALT);
+ obuf->input_alt.hseq = 0;
+ obuf->input_alt.fid = -1;
+ obuf->input_alt.in = 0;
+ obuf->input_alt.type = NULL;
+ obuf->input_alt.name = NULL;
+ obuf->input_alt.value = NULL;
+ }
if (obuf->in_bold) {
push_tag(obuf, "</b>", HTML_N_B);
obuf->in_bold = 0;
@@ -6963,8 +7118,6 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
image_flag = IMG_FLAG_AUTO;
else
image_flag = IMG_FLAG_SKIP;
- if (newBuf->currentURL.file)
- cur_baseURL = baseURL(newBuf);
#endif
if (w3m_halfload) {
@@ -6987,6 +7140,9 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
htmlenv1.f = stdout;
else
htmlenv1.buf = newTextLineList();
+#if defined(USE_M17N) || defined(USE_IMAGE)
+ cur_baseURL = baseURL(newBuf);
+#endif
if (SETJMP(AbortLoading) != 0) {
HTMLlineproc1("<br>Transfer Interrupted!<br>", &htmlenv1);
@@ -7048,18 +7204,23 @@ loadHTMLstream(URLFile *f, Buffer *newBuf, FILE * src, int internal)
}
#endif
lineBuf2 = convertLine(f, lineBuf2, HTML_MODE, &charset, doc_charset);
-#if defined(USE_M17N) && defined(USE_IMAGE)
+#ifdef USE_M17N
cur_document_charset = charset;
#endif
HTMLlineproc0(lineBuf2->ptr, &htmlenv1, internal);
}
if (obuf.status != R_ST_NORMAL) {
- obuf.status = R_ST_EOL;
HTMLlineproc0("\n", &htmlenv1, internal);
}
obuf.status = R_ST_NORMAL;
completeHTMLstream(&htmlenv1, &obuf);
flushline(&htmlenv1, &obuf, 0, 2, htmlenv1.limit);
+#if defined(USE_M17N) || defined(USE_IMAGE)
+ cur_baseURL = NULL;
+#endif
+#ifdef USE_M17N
+ cur_document_charset = 0;
+#endif
if (htmlenv1.title)
newBuf->buffername = htmlenv1.title;
if (w3m_halfdump) {
@@ -7096,16 +7257,17 @@ loadHTMLString(Str page)
MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
Buffer *newBuf;
+ init_stream(&f, SCM_LOCAL, newStrStream(page));
+
newBuf = newBuffer(INIT_BUFFER_WIDTH);
if (SETJMP(AbortLoading) != 0) {
TRAP_OFF;
discardBuffer(newBuf);
+ UFclose(&f);
return NULL;
}
TRAP_ON;
- init_stream(&f, SCM_LOCAL, newStrStream(page));
-
#ifdef USE_M17N
newBuf->document_charset = InnerCharset;
#endif
@@ -7115,6 +7277,7 @@ loadHTMLString(Str page)
#endif
TRAP_OFF;
+ UFclose(&f);
newBuf->topLine = newBuf->firstLine;
newBuf->lastLine = newBuf->currentLine;
newBuf->currentLine = newBuf->firstLine;
@@ -7207,7 +7370,7 @@ loadGopherDir(URLFile *uf, ParsedURL *pu, wc_ces * charset)
q = Strnew_m_charp("gopher://", host->ptr, ":", port->ptr,
"/", file->ptr, NULL)->ptr;
Strcat_m_charp(tmp, "<a href=\"",
- html_quote(url_quote_conv(q, *charset)),
+ html_quote(url_encode(q, NULL, *charset)),
"\">", p, html_quote(name->ptr + 1), "</a>\n", NULL);
}
@@ -7243,7 +7406,6 @@ loadBuffer(URLFile *uf, Buffer *volatile newBuf)
if (newBuf == NULL)
newBuf = newBuffer(INIT_BUFFER_WIDTH);
- lineBuf2 = Strnew();
if (SETJMP(AbortLoading) != 0) {
goto _end;
@@ -7331,6 +7493,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
URLFile f;
MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
struct stat st;
+ const ParsedURL *pu = newBuf ? &newBuf->currentURL : NULL;
loadImage(newBuf, IMG_FLAG_STOP);
image.url = uf->url;
@@ -7338,20 +7501,18 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
image.width = -1;
image.height = -1;
image.cache = NULL;
- cache = getImage(&image, cur_baseURL, IMG_FLAG_AUTO);
- if (!cur_baseURL->is_nocache && cache->loaded & IMG_FLAG_LOADED &&
+ cache = getImage(&image, (ParsedURL *)pu, IMG_FLAG_AUTO);
+ if (!(pu && pu->is_nocache) && cache->loaded & IMG_FLAG_LOADED &&
!stat(cache->file, &st))
goto image_buffer;
- TRAP_ON;
if (IStype(uf->stream) != IST_ENCODED)
uf->stream = newEncodedStream(uf->stream, uf->encoding);
+ TRAP_ON;
if (save2tmp(*uf, cache->file) < 0) {
- UFclose(uf);
TRAP_OFF;
return NULL;
}
- UFclose(uf);
TRAP_OFF;
cache->loaded = IMG_FLAG_LOADED;
@@ -7371,6 +7532,7 @@ loadImageBuffer(URLFile *uf, Buffer *newBuf)
init_stream(&f, SCM_LOCAL, newStrStream(tmp));
loadHTMLstream(&f, newBuf, src, TRUE);
+ UFclose(&f);
if (src)
fclose(src);
@@ -7580,8 +7742,11 @@ openGeneralPagerBuffer(InputStream stream)
#ifdef USE_M17N
content_charset = 0;
#endif
+ t_buf = newBuffer(INIT_BUFFER_WIDTH);
+ copyParsedURL(&t_buf->currentURL, NULL);
+ t_buf->currentURL.scheme = SCM_LOCAL;
+ t_buf->currentURL.file = "-";
if (SearchHeader) {
- t_buf = newBuffer(INIT_BUFFER_WIDTH);
readHeader(&uf, t_buf, TRUE, NULL);
t = checkContentType(t_buf);
if (t == NULL)
@@ -7609,14 +7774,13 @@ openGeneralPagerBuffer(InputStream stream)
#ifdef USE_IMAGE
else if (activeImage && displayImage && !useExtImageViewer &&
!(w3m_dump & ~DUMP_FRAME) && !strncasecmp(t, "image/", 6)) {
- cur_baseURL = New(ParsedURL);
- parseURL("-", cur_baseURL, NULL);
buf = loadImageBuffer(&uf, t_buf);
buf->type = "text/html";
}
#endif
else {
- if (doExternal(uf, "-", t, &buf, t_buf)) {
+ if (searchExtViewer(t)) {
+ buf = doExternal(uf, t, t_buf);
UFclose(&uf);
if (buf == NULL || buf == NO_BUFFER)
return buf;
@@ -7629,8 +7793,6 @@ openGeneralPagerBuffer(InputStream stream)
}
}
buf->real_type = t;
- buf->currentURL.scheme = SCM_LOCAL;
- buf->currentURL.file = "-";
return buf;
}
@@ -7766,6 +7928,8 @@ save2tmp(URLFile uf, char *tmpf)
clen_t linelen = 0, trbyte = 0;
MySignalHandler(*volatile prevtrap) (SIGNAL_ARG) = NULL;
static JMP_BUF env_bak;
+ volatile int retval = 0;
+ char *volatile buf = NULL;
ff = fopen(tmpf, "wb");
if (ff == NULL) {
@@ -7802,30 +7966,29 @@ save2tmp(URLFile uf, char *tmpf)
else
#endif /* USE_NNTP */
{
- Str buf = Strnew_size(SAVE_BUF_SIZE);
- while (UFread(&uf, buf, SAVE_BUF_SIZE)) {
- if (Strfputs(buf, ff) != buf->length) {
- bcopy(env_bak, AbortLoading, sizeof(JMP_BUF));
- TRAP_OFF;
- fclose(ff);
- current_content_length = 0;
- return -2;
+ int count;
+
+ buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
+ while ((count = ISread_n(uf.stream, buf, SAVE_BUF_SIZE)) > 0) {
+ if (fwrite(buf, 1, count, ff) != count) {
+ retval = -2;
+ goto _end;
}
- linelen += buf->length;
+ linelen += count;
showProgress(&linelen, &trbyte);
}
}
_end:
bcopy(env_bak, AbortLoading, sizeof(JMP_BUF));
TRAP_OFF;
+ xfree(buf);
fclose(ff);
current_content_length = 0;
- return 0;
+ return retval;
}
-int
-doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
- Buffer *defaultbuf)
+Buffer *
+doExternal(URLFile uf, char *type, Buffer *defaultbuf)
{
Str tmpf, command;
struct mailcap *mcap;
@@ -7834,7 +7997,7 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
char *header, *src = NULL, *ext = uf.ext;
if (!(mcap = searchExtViewer(type)))
- return 0;
+ return NULL;
if (mcap->nametemplate) {
tmpf = unquote_mailcap(mcap->nametemplate, NULL, "", NULL, NULL);
@@ -7867,15 +8030,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
UFclose(&uf);
myExec(command->ptr);
}
- *bufp = NO_BUFFER;
- return 1;
+ return NO_BUFFER;
}
else
#endif
{
if (save2tmp(uf, tmpf->ptr) < 0) {
- *bufp = NULL;
- return 1;
+ return NULL;
}
}
if (mcap->flags & (MAILCAP_HTMLOUTPUT | MAILCAP_COPIOUSOUTPUT)) {
@@ -7918,14 +8079,13 @@ doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
buf = NO_BUFFER;
}
if (buf && buf != NO_BUFFER) {
- buf->filename = path;
- if (buf->buffername == NULL || buf->buffername[0] == '\0')
- buf->buffername = conv_from_system(lastFileName(path));
+ if ((buf->buffername == NULL || buf->buffername[0] == '\0') &&
+ buf->filename)
+ buf->buffername = conv_from_system(lastFileName(buf->filename));
buf->edit = mcap->edit;
buf->mailcap = mcap;
}
- *bufp = buf;
- return 1;
+ return buf;
}
static int
@@ -7935,7 +8095,8 @@ _MoveFile(char *path1, char *path2)
FILE *f2;
int is_pipe;
clen_t linelen = 0, trbyte = 0;
- Str buf;
+ char *buf = NULL;
+ int count;
f1 = openIS(path1);
if (f1 == NULL)
@@ -7953,12 +8114,13 @@ _MoveFile(char *path1, char *path2)
return -1;
}
current_content_length = 0;
- buf = Strnew_size(SAVE_BUF_SIZE);
- while (ISread(f1, buf, SAVE_BUF_SIZE)) {
- Strfputs(buf, f2);
- linelen += buf->length;
+ buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
+ while ((count = ISread_n(f1, buf, SAVE_BUF_SIZE)) > 0) {
+ fwrite(buf, 1, count, f2);
+ linelen += count;
showProgress(&linelen, &trbyte);
}
+ xfree(buf);
ISclose(f1);
if (is_pipe)
pclose(f2);
@@ -7998,7 +8160,7 @@ _doFileCopy(char *tmpf, char *defstr, int download)
else {
if (q) {
p = unescape_spaces(Strnew_charp(q))->ptr;
- p = conv_to_system(q);
+ p = conv_to_system(p);
}
p = expandPath(p);
if (checkOverWrite(p) < 0)
@@ -8317,21 +8479,23 @@ uncompress_stream(URLFile *uf, char **src)
}
if (pid2 == 0) {
/* child2 */
- Str buf = Strnew_size(SAVE_BUF_SIZE);
+ char *buf = NewWithoutGC_N(char, SAVE_BUF_SIZE);
+ int count;
FILE *f = NULL;
setup_child(TRUE, 2, UFfileno(uf));
if (tmpf)
f = fopen(tmpf, "wb");
- while (UFread(uf, buf, SAVE_BUF_SIZE)) {
- if (Strfputs(buf, stdout) < 0)
+ while ((count = ISread_n(uf->stream, buf, SAVE_BUF_SIZE)) > 0) {
+ if (fwrite(buf, 1, count, stdout) != count)
+ break;
+ if (f && fwrite(buf, 1, count, f) != count)
break;
- if (f)
- Strfputs(buf, f);
}
UFclose(uf);
if (f)
fclose(f);
+ xfree(buf);
exit(0);
}
/* child1 */
@@ -8378,7 +8542,7 @@ lessopen_stream(char *path)
}
c = getc(fp);
if (c == EOF) {
- fclose(fp);
+ pclose(fp);
return NULL;
}
ungetc(c, fp);
diff --git a/fm.h b/fm.h
index 8378939..4bd83bc 100644
--- a/fm.h
+++ b/fm.h
@@ -76,6 +76,7 @@ typedef int wc_ces; /* XXX: not used */
#include "textlist.h"
#include "funcname1.h"
#include "terms.h"
+#include "istream.h"
#ifndef HAVE_BCOPY
void bcopy(const void *, void *, int);
@@ -264,6 +265,18 @@ extern int REV_LB[];
#define IMG_FLAG_ERROR 2
#define IMG_FLAG_DONT_REMOVE 4
+#define IS_EMPTY_PARSED_URL(pu) ((pu)->scheme == SCM_UNKNOWN && !(pu)->file)
+#define SCONF_RESERVED 0
+#define SCONF_SUBSTITUTE_URL 1
+#define SCONF_URL_CHARSET 2
+#define SCONF_NO_REFERER_FROM 3
+#define SCONF_NO_REFERER_TO 4
+#define SCONF_N_FIELD 5
+#define query_SCONF_SUBSTITUTE_URL(pu) ((const char *)querySiteconf(pu, SCONF_SUBSTITUTE_URL))
+#define query_SCONF_URL_CHARSET(pu) ((const wc_ces *)querySiteconf(pu, SCONF_URL_CHARSET))
+#define query_SCONF_NO_REFERER_FROM(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_FROM))
+#define query_SCONF_NO_REFERER_TO(pu) ((const int *)querySiteconf(pu, SCONF_NO_REFERER_TO))
+
/*
* Macros.
*/
@@ -276,8 +289,6 @@ extern int REV_LB[];
#define inputFilenameHist(p,d,h) inputLineHist(p,d,IN_FILENAME,h)
#define inputChar(p) inputLine(p,"",IN_CHAR)
-#define free(x) GC_free(x) /* let GC do it. */
-
#ifdef __EMX__
#define HAVE_STRCASECMP
#define strcasecmp stricmp
@@ -362,6 +373,8 @@ typedef struct _imageCache {
int index;
short width;
short height;
+ short a_width;
+ short a_height;
} ImageCache;
typedef struct _image {
@@ -562,6 +575,13 @@ typedef struct _DownloadList {
#define INIT_BUFFER_WIDTH ((_INIT_BUFFER_WIDTH > 0) ? _INIT_BUFFER_WIDTH : 0)
#define FOLD_BUFFER_WIDTH (FoldLine ? (INIT_BUFFER_WIDTH + 1) : -1)
+struct input_alt_attr {
+ int hseq;
+ int fid;
+ int in;
+ Str type, name, value;
+};
+
typedef struct {
int pos;
int len;
@@ -569,6 +589,7 @@ typedef struct {
long flag;
Anchor anchor;
Str img_alt;
+ struct input_alt_attr input_alt;
char fontstat[FONTSTAT_SIZE];
short nobr_level;
Lineprop prev_ctype;
@@ -591,6 +612,7 @@ struct readbuffer {
short nobr_level;
Anchor anchor;
Str img_alt;
+ struct input_alt_attr input_alt;
char fontstat[FONTSTAT_SIZE];
char fontstat_stack[FONT_STACK_SIZE][FONTSTAT_SIZE];
int fontstat_sp;
@@ -802,7 +824,7 @@ global char PermitSaveToPipe init(FALSE);
global char DecodeCTE init(FALSE);
global char AutoUncompress init(FALSE);
global char PreserveTimestamp init(TRUE);
-global char ArgvIsURL init(FALSE);
+global char ArgvIsURL init(TRUE);
global char MetaRefresh init(FALSE);
global char fmInitialized init(FALSE);
@@ -874,6 +896,9 @@ global char *index_file init(NULL);
global char *CurrentDir;
global int CurrentPid;
+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
+global char *MyProgramName init("w3m");
+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
/*
* global Buffer *Currentbuf;
* global Buffer *Firstbuf;
@@ -896,6 +921,7 @@ global char *CurrentKeyData;
global char *CurrentCmdData;
global char *w3m_reqlog;
extern char *w3m_version;
+extern int enable_inline_image;
#define DUMP_BUFFER 0x01
#define DUMP_HEAD 0x02
@@ -968,10 +994,17 @@ global int MailtoOptions init(MAILTO_OPTIONS_IGNORE);
global char *ExtBrowser init(DEF_EXT_BROWSER);
global char *ExtBrowser2 init(NULL);
global char *ExtBrowser3 init(NULL);
+global char *ExtBrowser4 init(NULL);
+global char *ExtBrowser5 init(NULL);
+global char *ExtBrowser6 init(NULL);
+global char *ExtBrowser7 init(NULL);
+global char *ExtBrowser8 init(NULL);
+global char *ExtBrowser9 init(NULL);
global int BackgroundExtViewer init(TRUE);
global int disable_secret_security_check init(FALSE);
global char *passwd_file init(PASSWD_FILE);
global char *pre_form_file init(PRE_FORM_FILE);
+global char *siteconf_file init(SITECONF_FILE);
global char *ftppasswd init(NULL);
global int ftppass_hostnamegen init(TRUE);
global int do_download init(FALSE);
@@ -1065,11 +1098,12 @@ global char SimplePreserveSpace init(FALSE);
#define wc_Str_conv(x,charset0,charset1) (x)
#define wc_Str_conv_strict(x,charset0,charset1) (x)
#endif
-global char UseAltEntity init(TRUE);
+global char UseAltEntity init(FALSE);
#define GRAPHIC_CHAR_ASCII 2
#define GRAPHIC_CHAR_DEC 1
#define GRAPHIC_CHAR_CHARSET 0
global char UseGraphicChar init(GRAPHIC_CHAR_CHARSET);
+global char DisplayBorders init(FALSE);
extern char *graph_symbol[];
extern char *graph2_symbol[];
extern int symbol_width;
@@ -1113,9 +1147,9 @@ global MouseAction mouse_action;
#ifdef USE_COOKIE
global int default_use_cookie init(TRUE);
-global int use_cookie init(FALSE);
-global int show_cookie init(TRUE);
-global int accept_cookie init(FALSE);
+global int use_cookie init(TRUE);
+global int show_cookie init(FALSE);
+global int accept_cookie init(TRUE);
#define ACCEPT_BAD_COOKIE_DISCARD 0
#define ACCEPT_BAD_COOKIE_ACCEPT 1
#define ACCEPT_BAD_COOKIE_ASK 2
@@ -1135,7 +1169,7 @@ global int view_unseenobject init(TRUE);
#endif
#if defined(USE_SSL) && defined(USE_SSL_VERIFY)
-global int ssl_verify_server init(FALSE);
+global int ssl_verify_server init(TRUE);
global char *ssl_cert_file init(NULL);
global char *ssl_key_file init(NULL);
global char *ssl_ca_path init(NULL);
@@ -1144,15 +1178,17 @@ global int ssl_path_modified init(FALSE);
#endif /* defined(USE_SSL) &&
* defined(USE_SSL_VERIFY) */
#ifdef USE_SSL
-global char *ssl_forbid_method init(NULL);
+global char *ssl_forbid_method init("2, 3");
#endif
global int is_redisplay init(FALSE);
global int clear_buffer init(TRUE);
global double pixel_per_char init(DEFAULT_PIXEL_PER_CHAR);
+global int pixel_per_char_i init(DEFAULT_PIXEL_PER_CHAR);
global int set_pixel_per_char init(FALSE);
#ifdef USE_IMAGE
global double pixel_per_line init(DEFAULT_PIXEL_PER_LINE);
+global int pixel_per_line_i init(DEFAULT_PIXEL_PER_LINE);
global int set_pixel_per_line init(FALSE);
global double image_scale init(100);
#endif
diff --git a/form.c b/form.c
index b7556ca..62b568e 100644
--- a/form.c
+++ b/form.c
@@ -196,7 +196,7 @@ formtype(char *typestr)
if (!strcasecmp(typestr, _formtypetbl[i]))
return i;
}
- return FORM_UNKNOWN;
+ return FORM_INPUT_TEXT;
}
void
@@ -787,7 +787,7 @@ struct pre_form {
static struct pre_form *PreForm = NULL;
static struct pre_form *
-add_pre_form(struct pre_form *prev, char *url, char *name, char *action)
+add_pre_form(struct pre_form *prev, char *url, Regex *re_url, char *name, char *action)
{
ParsedURL pu;
struct pre_form *new;
@@ -796,21 +796,13 @@ add_pre_form(struct pre_form *prev, char *url, char *name, char *action)
new = prev->next = New(struct pre_form);
else
new = PreForm = New(struct pre_form);
- if (url && *url == '/') {
- int l = strlen(url);
- if (l > 1 && url[l - 1] == '/')
- new->url = allocStr(url + 1, l - 2);
- else
- new->url = url + 1;
- new->re_url = newRegex(new->url, FALSE, NULL, NULL);
- if (!new->re_url)
- new->url = NULL;
- }
- else if (url) {
+ if (url && !re_url) {
parseURL2(url, &pu, NULL);
new->url = parsedURL2Str(&pu)->ptr;
- new->re_url = NULL;
}
+ else
+ new->url = url;
+ new->re_url = re_url;
new->name = (name && *name) ? name : NULL;
new->action = (action && *action) ? action : NULL;
new->item = NULL;
@@ -834,7 +826,7 @@ add_pre_form_item(struct pre_form *pf, struct pre_form_item *prev, int type,
new->name = name;
new->value = value;
if (checked && *checked && (!strcmp(checked, "0") ||
- strcasecmp(checked, "off")
+ !strcasecmp(checked, "off")
|| !strcasecmp(checked, "no")))
new->checked = 0;
else
@@ -875,6 +867,7 @@ loadPreForm(void)
return;
while (1) {
char *p, *s, *arg;
+ Regex *re_arg;
line = Strfgets(fp);
if (line->length == 0)
@@ -890,18 +883,20 @@ loadPreForm(void)
if (*p == '#' || *p == '\0')
continue; /* comment or empty line */
s = getWord(&p);
- arg = getWord(&p);
if (!strcmp(s, "url")) {
+ arg = getRegexWord((const char **)&p, &re_arg);
if (!arg || !*arg)
continue;
p = getQWord(&p);
- pf = add_pre_form(pf, arg, NULL, p);
+ pf = add_pre_form(pf, arg, re_arg, NULL, p);
pi = pf->item;
continue;
}
if (!pf)
continue;
+
+ arg = getWord(&p);
if (!strcmp(s, "form")) {
if (!arg || !*arg)
continue;
@@ -913,7 +908,7 @@ loadPreForm(void)
}
if (pf->item) {
struct pre_form *prev = pf;
- pf = add_pre_form(prev, "", s, p);
+ pf = add_pre_form(prev, "", NULL, s, p);
/* copy previous URL */
pf->url = prev->url;
pf->re_url = prev->re_url;
diff --git a/frame.c b/frame.c
index b431437..c595c40 100644
--- a/frame.c
+++ b/frame.c
@@ -91,7 +91,8 @@ newFrame(struct parsed_tag *tag, Buffer *buf)
body->baseURL = baseURL(buf);
if (tag) {
if (parsedtag_get_value(tag, ATTR_SRC, &p))
- body->url = url_quote_conv(remove_space(p), buf->document_charset);
+ body->url = url_encode(remove_space(p), body->baseURL,
+ buf->document_charset);
if (parsedtag_get_value(tag, ATTR_NAME, &p) && *p != '_')
body->name = url_quote_conv(p, buf->document_charset);
}
@@ -639,7 +640,7 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level,
case HTML_BASE:
/* "BASE" is prohibit tag */
if (parsedtag_get_value(tag, ATTR_HREF, &q)) {
- q = url_quote_conv(remove_space(q), charset);
+ q = url_encode(remove_space(q), NULL, charset);
parseURL(q, &base, NULL);
}
if (parsedtag_get_value(tag, ATTR_TARGET, &q)) {
@@ -768,8 +769,8 @@ createFrameFile(struct frameset *f, FILE * f1, Buffer *current, int level,
if (!tag->value[j])
break;
tag->value[j] =
- url_quote_conv(remove_space(tag->value[j]),
- charset);
+ url_encode(remove_space(tag->value[j]),
+ &base, charset);
tag->need_reconstruct = TRUE;
parseURL2(tag->value[j], &url, &base);
if (url.scheme == SCM_UNKNOWN ||
@@ -894,8 +895,10 @@ renderFrame(Buffer *Cbuf, int force_reload)
/*
* if (Cbuf->frameQ != NULL) fset = Cbuf->frameQ->frameset; else */
fset = Cbuf->frameset;
- if (fset == NULL || createFrameFile(fset, f, Cbuf, 0, force_reload) < 0)
+ if (fset == NULL || createFrameFile(fset, f, Cbuf, 0, force_reload) < 0) {
+ fclose(f);
return NULL;
+ }
fclose(f);
flag = RG_FRAME;
if ((Cbuf->currentURL).is_nocache)
diff --git a/ftp.c b/ftp.c
index 0002abd..2ca0247 100644
--- a/ftp.c
+++ b/ftp.c
@@ -123,6 +123,7 @@ static int
ftp_login(FTP ftp)
{
int sock, status;
+ int sock_wf;
sock = openSocket(ftp->host, "ftp", 21);
if (sock < 0)
@@ -139,7 +140,6 @@ ftp_login(FTP ftp)
socklen_t socknamelen = sizeof(sockname);
if (!getsockname(sock, (struct sockaddr *)&sockname, &socknamelen)) {
- struct hostent *sockent;
Str tmp = Strnew_charp(ftp->pass);
#ifdef INET6
char hostbuf[NI_MAXHOST];
@@ -156,6 +156,7 @@ ftp_login(FTP ftp)
Strcat_charp(tmp, "unknown");
#else
+ struct hostent *sockent;
if ((sockent = gethostbyaddr((char *)&sockname.sin_addr,
sizeof(sockname.sin_addr),
sockname.sin_family)))
@@ -169,7 +170,10 @@ ftp_login(FTP ftp)
}
}
ftp->rf = newInputStream(sock);
- ftp->wf = fdopen(dup(sock), "wb");
+ if ((sock_wf = dup(sock)) >= 0 )
+ ftp->wf = fdopen(sock_wf, "wb");
+ else
+ goto open_err;
if (!ftp->rf || !ftp->wf)
goto open_err;
IStype(ftp->rf) |= IST_UNCLOSE;
diff --git a/func.c b/func.c
index f389e00..8b5deac 100644
--- a/func.c
+++ b/func.c
@@ -8,6 +8,7 @@
#include "fm.h"
#include "func.h"
#include "myctype.h"
+#include "regex.h"
#include "funcname.c"
#include "functable.c"
@@ -434,6 +435,93 @@ getQWord(char **str)
return tmp->ptr;
}
+/* This extracts /regex/i or m@regex@i from the given string.
+ * Then advances *str to the end of regex.
+ * If the input does not seems to be a regex, this falls back to getQWord().
+ *
+ * Returns a word (no matter whether regex or not) in the give string.
+ * If regex_ret is non-NULL, compiles the regex and stores there.
+ *
+ * XXX: Actually this is unrelated to func.c.
+ */
+char *
+getRegexWord(const char **str, Regex **regex_ret)
+{
+ char *word = NULL;
+ const char *p, *headp, *bodyp, *tailp;
+ char delimiter;
+ int esc;
+ int igncase = 0;
+
+ p = *str;
+ SKIP_BLANKS(p);
+ headp = p;
+
+ /* Get the opening delimiter */
+ if (p[0] == 'm' && IS_PRINT(p[1]) && !IS_ALNUM(p[1]) && p[1] != '\\') {
+ delimiter = p[1];
+ p += 2;
+ }
+ else if (p[0] == '/') {
+ delimiter = '/';
+ p += 1;
+ }
+ else {
+ goto not_regex;
+ }
+ bodyp = p;
+
+ /* Scan the end of the expression */
+ for (esc = 0; *p; ++p) {
+ if (esc) {
+ esc = 0;
+ } else {
+ if (*p == delimiter)
+ break;
+ else if (*p == '\\')
+ esc = 1;
+ }
+ }
+ if (!*p && *headp == '/')
+ goto not_regex;
+ tailp = p;
+
+ /* Check the modifiers */
+ if (*p == delimiter) {
+ while (*++p && !IS_SPACE(*p)) {
+ switch (*p) {
+ case 'i':
+ igncase = 1;
+ break;
+ }
+ /* ignore unknown modifiers */
+ }
+ }
+
+ /* Save the expression */
+ word = allocStr(headp, p - headp);
+
+ /* Compile */
+ if (regex_ret) {
+ if (*tailp == delimiter)
+ word[tailp - headp] = 0;
+ *regex_ret = newRegex(word + (bodyp - headp), igncase, NULL, NULL);
+ if (*tailp == delimiter)
+ word[tailp - headp] = delimiter;
+ }
+ goto last;
+
+not_regex:
+ p = headp;
+ word = getQWord((char **)&p);
+ if (regex_ret)
+ *regex_ret = NULL;
+
+last:
+ *str = p;
+ return word;
+}
+
#ifdef USE_MOUSE
static MouseAction default_mouse_action = {
NULL,
diff --git a/history.c b/history.c
index 951ef83..f2a00b4 100644
--- a/history.c
+++ b/history.c
@@ -17,7 +17,7 @@ historyBuffer(Hist *hist)
for (item = hist->list->last; item; item = item->prev) {
q = html_quote((char *)item->ptr);
if (DecodeURL)
- p = html_quote(url_unquote_conv((char *)item->ptr, 0));
+ p = html_quote(url_decode2((char *)item->ptr, NULL));
else
p = q;
Strcat_charp(src, "<li><a href=\"");
@@ -60,6 +60,7 @@ saveHistory(Hist *hist, size_t size)
FILE *f;
HistItem *item;
char *tmpf;
+ int rename_ret;
if (hist == NULL || hist->list == NULL)
return;
@@ -79,7 +80,11 @@ saveHistory(Hist *hist, size_t size)
disp_err_message("Can't save history", FALSE);
return;
}
- rename(tmpf, rcFile(HISTORY_FILE));
+ rename_ret = rename(tmpf, rcFile(HISTORY_FILE));
+ if (rename_ret != 0) {
+ disp_err_message("Can't save history", FALSE);
+ return;
+ }
}
#endif /* USE_HISTORY */
diff --git a/html.c b/html.c
index bca227e..d9f08e9 100644
--- a/html.c
+++ b/html.c
@@ -56,6 +56,9 @@ unsigned char ALST_INPUT[] =
ATTR_CORE
};
#define MAXA_INPUT MAXA_CORE + 12
+unsigned char ALST_BUTTON[] =
+ { ATTR_TYPE, ATTR_VALUE, ATTR_NAME, ATTR_CORE };
+#define MAXA_BUTTON MAXA_CORE + 3
unsigned char ALST_TEXTAREA[] =
{ ATTR_COLS, ATTR_ROWS, ATTR_NAME, ATTR_READONLY, ATTR_CORE };
#define MAXA_TEXTAREA MAXA_CORE + 4
@@ -247,24 +250,24 @@ TagInfo TagMAP[MAX_HTMLTAG] = {
{"/bdo", NULL, 0, TFLG_END}, /* 121 HTML_N_BDO */
{"big", ALST_NOP, MAXA_NOP, 0}, /* 122 HTML_BIG */
{"/big", NULL, 0, TFLG_END}, /* 123 HTML_N_BIG */
- {"button", ALST_NOP, MAXA_NOP, 0}, /* 124 HTML_BUTTON */
- {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 125 HTML_FIELDSET */
- {"/fieldset", NULL, 0, TFLG_END}, /* 126 HTML_N_FIELDSET */
- {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 127 HTML_IFRAME */
- {"label", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_LABEL */
- {"/label", NULL, 0, TFLG_END}, /* 129 HTML_N_LABEL */
- {"legend", ALST_NOP, MAXA_NOP, 0}, /* 130 HTML_LEGEND */
- {"/legend", NULL, 0, TFLG_END}, /* 131 HTML_N_LEGEND */
- {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 132 HTML_NOSCRIPT */
- {"/noscript", NULL, 0, TFLG_END}, /* 133 HTML_N_NOSCRIPT */
- {"object", ALST_NOP, MAXA_NOP, 0}, /* 134 HTML_OBJECT */
- {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OPTGROUP */
- {"/optgroup", NULL, 0, TFLG_END}, /* 136 HTML_N_OPTGROUP */
- {"param", ALST_NOP, MAXA_NOP, 0}, /* 137 HTML_PARAM */
- {"small", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_SMALL */
- {"/small", NULL, 0, TFLG_END}, /* 139 HTML_N_SMALL */
+ {"button", ALST_BUTTON, MAXA_BUTTON, 0}, /* 124 HTML_BUTTON */
+ {"/button", NULL, 0, TFLG_END}, /* 125 HTML_N_BUTTON */
+ {"fieldset", ALST_NOP, MAXA_NOP, 0}, /* 126 HTML_FIELDSET */
+ {"/fieldset", NULL, 0, TFLG_END}, /* 127 HTML_N_FIELDSET */
+ {"iframe", ALST_NOP, MAXA_NOP, 0}, /* 128 HTML_IFRAME */
+ {"label", ALST_NOP, MAXA_NOP, 0}, /* 129 HTML_LABEL */
+ {"/label", NULL, 0, TFLG_END}, /* 130 HTML_N_LABEL */
+ {"legend", ALST_NOP, MAXA_NOP, 0}, /* 131 HTML_LEGEND */
+ {"/legend", NULL, 0, TFLG_END}, /* 132 HTML_N_LEGEND */
+ {"noscript", ALST_NOP, MAXA_NOP, 0}, /* 133 HTML_NOSCRIPT */
+ {"/noscript", NULL, 0, TFLG_END}, /* 134 HTML_N_NOSCRIPT */
+ {"object", ALST_NOP, MAXA_NOP, 0}, /* 135 HTML_OBJECT */
+ {"optgroup", ALST_NOP, MAXA_NOP, 0}, /* 136 HTML_OPTGROUP */
+ {"/optgroup", NULL, 0, TFLG_END}, /* 137 HTML_N_OPTGROUP */
+ {"param", ALST_NOP, MAXA_NOP, 0}, /* 138 HTML_PARAM */
+ {"small", ALST_NOP, MAXA_NOP, 0}, /* 139 HTML_SMALL */
+ {"/small", NULL, 0, TFLG_END}, /* 140 HTML_N_SMALL */
- {NULL, NULL, 0, 0}, /* 140 Undefined */
{NULL, NULL, 0, 0}, /* 141 Undefined */
{NULL, NULL, 0, 0}, /* 142 Undefined */
{NULL, NULL, 0, 0}, /* 143 Undefined */
diff --git a/html.h b/html.h
index 7abbd3b..c490655 100644
--- a/html.h
+++ b/html.h
@@ -1,20 +1,18 @@
/* $Id: html.h,v 1.31 2010/08/14 01:29:40 htrb Exp $ */
#ifndef _HTML_H
#define _HTML_H
+#include "config.h"
#ifdef USE_SSL
#include <openssl/bio.h>
#include <openssl/x509.h>
#include <openssl/ssl.h>
#endif /* USE_SSL */
-#include "istream.h"
-
#define StrUFgets(f) StrISgets((f)->stream)
#define StrmyUFgets(f) StrmyISgets((f)->stream)
#define UFgetc(f) ISgetc((f)->stream)
#define UFundogetc(f) ISundogetc((f)->stream)
-#define UFread(f,buf,len) ISread((f)->stream,buf,len)
-#define UFclose(f) (void)(ISclose((f)->stream) == 0 && ((f)->stream = NULL))
+#define UFclose(f) if (ISclose((f)->stream) == 0) {(f)->stream = NULL ;}
#define UFfileno(f) ISfileno((f)->stream)
struct cmdtable {
@@ -62,11 +60,12 @@ typedef struct _ParsedURL {
int is_nocache;
} ParsedURL;
+union input_stream;
typedef struct {
unsigned char scheme;
char is_cgi;
char encoding;
- InputStream stream;
+ union input_stream *stream;
char *ext;
int compression;
int content_encoding;
@@ -214,21 +213,22 @@ typedef struct {
#define HTML_BIG 122
#define HTML_N_BIG 123
#define HTML_BUTTON 124
-#define HTML_FIELDSET 125
-#define HTML_N_FIELDSET 126
-#define HTML_IFRAME 127
-#define HTML_LABEL 128
-#define HTML_N_LABEL 129
-#define HTML_LEGEND 130
-#define HTML_N_LEGEND 131
-#define HTML_NOSCRIPT 132
-#define HTML_N_NOSCRIPT 133
-#define HTML_OBJECT 134
-#define HTML_OPTGROUP 135
-#define HTML_N_OPTGROUP 136
-#define HTML_PARAM 137
-#define HTML_SMALL 138
-#define HTML_N_SMALL 139
+#define HTML_N_BUTTON 125
+#define HTML_FIELDSET 126
+#define HTML_N_FIELDSET 127
+#define HTML_IFRAME 128
+#define HTML_LABEL 129
+#define HTML_N_LABEL 130
+#define HTML_LEGEND 131
+#define HTML_N_LEGEND 132
+#define HTML_NOSCRIPT 133
+#define HTML_N_NOSCRIPT 134
+#define HTML_OBJECT 135
+#define HTML_OPTGROUP 136
+#define HTML_N_OPTGROUP 137
+#define HTML_PARAM 138
+#define HTML_SMALL 139
+#define HTML_N_SMALL 140
/* pseudo tag */
#define HTML_SELECT_INT 160
diff --git a/image.c b/image.c
index 5f5991a..91034ee 100644
--- a/image.c
+++ b/image.c
@@ -44,6 +44,8 @@ initImage()
activeImage = TRUE;
}
+int get_pixel_per_cell(int *ppc, int *ppl);
+
int
getCharSize()
{
@@ -52,6 +54,24 @@ getCharSize()
int w = 0, h = 0;
set_environ("W3M_TTY", ttyname_tty());
+
+ if (enable_inline_image) {
+ int ppc, ppl;
+
+ if (get_pixel_per_cell(&ppc,&ppl)) {
+ pixel_per_char_i = ppc ;
+ pixel_per_line_i = ppl ;
+ pixel_per_char = (double)ppc;
+ pixel_per_line = (double)ppl;
+ }
+ else {
+ pixel_per_char_i = (int)pixel_per_char;
+ pixel_per_line_i = (int)pixel_per_line;
+ }
+
+ return TRUE;
+ }
+
tmp = Strnew();
if (!strchr(Imgdisplay, '/'))
Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL);
@@ -90,17 +110,18 @@ termImage()
static int
openImgdisplay()
{
+ char *cmd;
+
+ if (!strchr(Imgdisplay, '/'))
+ cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr;
+ else
+ cmd = Imgdisplay;
Imgdisplay_pid = open_pipe_rw(&Imgdisplay_rf, &Imgdisplay_wf);
if (Imgdisplay_pid < 0)
goto err0;
if (Imgdisplay_pid == 0) {
/* child */
- char *cmd;
setup_child(FALSE, 2, -1);
- if (!strchr(Imgdisplay, '/'))
- cmd = Strnew_m_charp(w3m_auxbin_dir(), "/", Imgdisplay, NULL)->ptr;
- else
- cmd = Imgdisplay;
myExec(cmd);
/* XXX: ifdef __EMX__, use start /f ? */
}
@@ -155,6 +176,10 @@ addImage(ImageCache * cache, int x, int y, int sx, int sy, int w, int h)
static void
syncImage(void)
{
+ if (enable_inline_image) {
+ return;
+ }
+
fputs("3;\n", Imgdisplay_wf); /* XSync() */
fputs("4;\n", Imgdisplay_wf); /* put '\n' */
while (fflush(Imgdisplay_wf) != 0) {
@@ -170,12 +195,16 @@ syncImage(void)
n_terminal_image = 0;
}
+void put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image);
+void put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image);
+
void
drawImage()
{
static char buf[64];
int j, draw = FALSE;
TerminalImage *i;
+ struct stat st ;
if (!activeImage)
return;
@@ -183,6 +212,47 @@ drawImage()
return;
for (j = 0; j < n_terminal_image; j++) {
i = &terminal_image[j];
+
+ if (enable_inline_image) {
+ #if 0
+ fprintf(stderr,"file %s x %d y %d w %d h %d sx %d sy %d sw %d sh %d (ppc %d ppl %d)\n",
+ ((enable_inline_image == 2 || getenv("WINDOWID")) &&
+ i->cache->touch) ? i->cache->file : i->cache->url,
+ i->x, i->y,
+ i->cache->width > 0 ? i->cache->width : 0,
+ i->cache->height > 0 ? i->cache->height : 0,
+ i->sx, i->sy, i->width, i->height,
+ pixel_per_char_i, pixel_per_line_i);
+ #endif
+ (enable_inline_image == 2 ? put_image_sixel : put_image_osc5379)(
+ ((enable_inline_image == 2 /* sixel */ || getenv("WINDOWID")) &&
+ /* XXX I don't know why but sometimes i->cache->file doesn't exist. */
+ i->cache->touch && stat(i->cache->file,&st) == 0) ?
+ /* local */ i->cache->file : /* remote */ i->cache->url,
+ i->x / pixel_per_char_i,
+ i->y / pixel_per_line_i,
+ #if 1
+ i->cache->a_width > 0 ?
+ (i->cache->width + i->x % pixel_per_char_i + pixel_per_char_i - 1) /
+ pixel_per_char_i :
+ #endif
+ 0,
+
+ #if 1
+ i->cache->a_height > 0 ?
+ (i->cache->height + i->y % pixel_per_line_i + pixel_per_line_i - 1) /
+ pixel_per_line_i :
+ #endif
+ 0,
+ i->sx / pixel_per_char_i,
+ i->sy / pixel_per_line_i,
+ (i->width + i->sx % pixel_per_char_i + pixel_per_char_i - 1) / pixel_per_char_i,
+ (i->height + i->sy % pixel_per_line_i + pixel_per_line_i - 1) / pixel_per_line_i,
+ n_terminal_image);
+
+ continue ;
+ }
+
if (!(i->cache->loaded & IMG_FLAG_LOADED &&
i->width > 0 && i->height > 0))
continue;
@@ -206,9 +276,15 @@ drawImage()
fputs("\n", Imgdisplay_wf);
draw = TRUE;
}
- if (!draw)
- return;
- syncImage();
+
+ if (!enable_inline_image) {
+ if (!draw)
+ return;
+ syncImage();
+ }
+ else
+ n_terminal_image = 0;
+
touch_cursor();
refresh();
}
@@ -320,6 +396,8 @@ showImageProgress(Buffer *buf)
}
}
if (n) {
+ if (enable_inline_image && n == l)
+ drawImage();
message(Sprintf("%d/%d images loaded", l, n)->ptr,
buf->cursorX + buf->rootX, buf->cursorY + buf->rootY);
refresh();
@@ -333,6 +411,9 @@ loadImage(Buffer *buf, int flag)
struct stat st;
int i, draw = FALSE;
/* int wait_st; */
+#ifdef DONT_CALL_GC_AFTER_FORK
+ char *loadargs[7];
+#endif
if (maxLoadImage > MAX_LOAD_IMAGE)
maxLoadImage = MAX_LOAD_IMAGE;
@@ -346,7 +427,7 @@ loadImage(Buffer *buf, int flag)
}
for (i = 0; i < n_load_image; i++) {
cache = image_cache[i];
- if (!cache)
+ if (!cache || !cache->touch)
continue;
if (lstat(cache->touch, &st))
continue;
@@ -377,7 +458,7 @@ loadImage(Buffer *buf, int flag)
for (i = (buf != image_buffer) ? 0 : maxLoadImage; i < n_load_image; i++) {
cache = image_cache[i];
- if (!cache)
+ if (!cache || !cache->touch)
continue;
if (cache->pid) {
kill(cache->pid, SIGKILL);
@@ -403,7 +484,8 @@ loadImage(Buffer *buf, int flag)
}
if (draw && image_buffer) {
- drawImage();
+ if (!enable_inline_image)
+ drawImage();
showImageProgress(image_buffer);
}
@@ -431,8 +513,29 @@ loadImage(Buffer *buf, int flag)
break;
}
image_cache[i] = cache;
+ if (!cache->touch) {
+ continue;
+ }
flush_tty();
+#ifdef DONT_CALL_GC_AFTER_FORK
+ loadargs[0] = MyProgramName;
+ loadargs[1] = "-$$getimage";
+ loadargs[2] = conv_to_system(cache->url);
+ loadargs[3] = conv_to_system(parsedURL2Str(cache->current)->ptr);
+ loadargs[4] = cache->file;
+ loadargs[5] = cache->touch;
+ loadargs[6] = NULL;
+ if ((cache->pid = fork()) == 0) {
+ setup_child(FALSE, 0, -1);
+ execvp(MyProgramName, loadargs);
+ exit(1);
+ }
+ else if (cache->pid < 0) {
+ cache->pid = 0;
+ return;
+ }
+#else /* !DONT_CALL_GC_AFTER_FORK */
if ((cache->pid = fork()) == 0) {
Buffer *b;
/*
@@ -458,6 +561,7 @@ loadImage(Buffer *buf, int flag)
cache->pid = 0;
return;
}
+#endif /* !DONT_CALL_GC_AFTER_FORK */
}
}
@@ -492,12 +596,30 @@ getImage(Image * image, ParsedURL *current, int flag)
cache->url = image->url;
cache->current = current;
cache->file = tmpfname(TMPF_DFL, image->ext)->ptr;
- cache->touch = tmpfname(TMPF_DFL, NULL)->ptr;
cache->pid = 0;
cache->index = 0;
cache->loaded = IMG_FLAG_UNLOADED;
- cache->width = image->width;
- cache->height = image->height;
+ if (enable_inline_image == 1) {
+ if (image->width > 0 && image->width % pixel_per_char_i > 0)
+ image->width += (pixel_per_char_i - image->width % pixel_per_char_i);
+
+ if (image->height > 0 && image->height % pixel_per_line_i > 0)
+ image->height += (pixel_per_line_i - image->height % pixel_per_line_i);
+ if (image->height > 0 && image->width > 0) {
+ cache->loaded = IMG_FLAG_LOADED;
+ }
+ }
+ if (cache->loaded == IMG_FLAG_UNLOADED) {
+ cache->touch = tmpfname(TMPF_DFL, NULL)->ptr;
+ }
+ else {
+ cache->touch = NULL;
+ }
+
+ cache->width = image->width ;
+ cache->height = image->height ;
+ cache->a_width = image->width;
+ cache->a_height = image->height;
putHash_sv(image_hash, key->ptr, (void *)cache);
}
if (flag != IMG_FLAG_SKIP) {
@@ -519,6 +641,78 @@ getImage(Image * image, ParsedURL *current, int flag)
return cache;
}
+static int
+parseImageHeader(char *path, u_int *width, u_int *height)
+{
+ FILE *fp;
+ u_char buf[8];
+
+ if (!(fp = fopen(path, "r"))) return FALSE;
+
+ if (fread(buf, 1, 2, fp) != 2) goto error;
+
+ if (memcmp(buf, "\xff\xd8", 2) == 0) {
+ /* JPEG */
+ if (fseek(fp, 2, SEEK_CUR) < 0) goto error; /* 0xffe0 */
+ while (fread(buf, 1, 2, fp) == 2) {
+ size_t len = ((buf[0] << 8) | buf[1]) - 2;
+ if (fseek(fp, len, SEEK_CUR) < 0) goto error;
+ if (fread(buf, 1, 2, fp) == 2 &&
+ /* SOF0 or SOF2 */
+ (memcmp(buf, "\xff\xc0", 2) == 0 || memcmp(buf, "\xff\xc2", 2) == 0)) {
+ fseek(fp, 3, SEEK_CUR);
+ if (fread(buf, 1, 2, fp) == 2) {
+ *height = (buf[0] << 8) | buf[1];
+ if (fread(buf, 1, 2, fp) == 2) {
+ *width = (buf[0] << 8) | buf[1];
+ goto success;
+ }
+ }
+ break;
+ }
+ }
+ goto error;
+ }
+
+ if (fread(buf + 2, 1, 1, fp) != 1) goto error;
+
+ if (memcmp(buf, "GIF", 3) == 0) {
+ /* GIF */
+ if (fseek(fp, 3, SEEK_CUR) < 0) goto error;
+ if (fread(buf, 1, 2, fp) == 2) {
+ *width = (buf[1] << 8) | buf[0];
+ if (fread(buf, 1, 2, fp) == 2) {
+ *height = (buf[1] << 8) | buf[0];
+ goto success;
+ }
+ }
+ goto error;
+ }
+
+ if (fread(buf + 3, 1, 5, fp) != 5) goto error;
+
+ if (memcmp(buf, "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a", 8) == 0) {
+ /* PNG */
+ if (fseek(fp, 8, SEEK_CUR) < 0) goto error;
+ if (fread(buf, 1, 4, fp) == 4) {
+ *width = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+ if (fread(buf, 1, 4, fp) == 4) {
+ *height = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+ goto success;
+ }
+ }
+ goto error;
+ }
+
+error:
+ fclose(fp);
+ return FALSE;
+
+success:
+ fclose(fp);
+ return TRUE;
+}
+
int
getImageSize(ImageCache * cache)
{
@@ -531,6 +725,10 @@ getImageSize(ImageCache * cache)
if (!cache || !(cache->loaded & IMG_FLAG_LOADED) ||
(cache->width > 0 && cache->height > 0))
return FALSE;
+
+ if (parseImageHeader(cache->file, &w, &h))
+ goto got_image_size;
+
tmp = Strnew();
if (!strchr(Imgdisplay, '/'))
Strcat_m_charp(tmp, w3m_auxbin_dir(), "/", NULL);
@@ -546,6 +744,8 @@ getImageSize(ImageCache * cache)
if (!(w > 0 && h > 0))
return FALSE;
+
+got_image_size:
w = (int)(w * image_scale / 100 + 0.5);
if (w == 0)
w = 1;
@@ -558,11 +758,11 @@ getImageSize(ImageCache * cache)
}
else if (cache->width < 0) {
int tmp = (int)((double)cache->height * w / h + 0.5);
- cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
+ cache->a_width = cache->width = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
}
else if (cache->height < 0) {
int tmp = (int)((double)cache->width * h / w + 0.5);
- cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
+ cache->a_height = cache->height = (tmp > MAX_IMAGE_SIZE) ? MAX_IMAGE_SIZE : tmp;
}
if (cache->width == 0)
cache->width = 1;
diff --git a/indep.c b/indep.c
index 65b04aa..5c5de06 100644
--- a/indep.c
+++ b/indep.c
@@ -357,6 +357,20 @@ strcasemstr(char *str, char *srch[], char **ret_ptr)
return -1;
}
+int
+strmatchlen(const char *s1, const char *s2, int maxlen)
+{
+ int i;
+
+ /* To allow the maxlen to be negatie (infinity),
+ * compare by "!=" instead of "<=". */
+ for (i = 0; i != maxlen; ++i) {
+ if (!s1[i] || !s2[i] || s1[i] != s2[i])
+ break;
+ }
+ return i;
+}
+
char *
remove_space(char *str)
{
@@ -707,6 +721,111 @@ shell_quote(char *str)
return str;
}
+void *
+xrealloc(void *ptr, size_t size)
+{
+ void *newptr = realloc(ptr, size);
+ if (newptr == NULL) {
+ fprintf(stderr, "Out of memory\n");
+ exit(-1);
+ }
+ return newptr;
+}
+
+/* Define this as a separate function in case the free() has
+ * an incompatible prototype. */
+void
+xfree(void *ptr)
+{
+ free(ptr);
+}
+
+void *
+w3m_GC_realloc_atomic(void *ptr, size_t size)
+{
+ return ptr ? GC_REALLOC(ptr, size) : GC_MALLOC_ATOMIC(size);
+}
+
+void
+w3m_GC_free(void *ptr)
+{
+ GC_FREE(ptr);
+}
+
+void
+growbuf_init(struct growbuf *gb)
+{
+ gb->ptr = NULL;
+ gb->length = 0;
+ gb->area_size = 0;
+ gb->realloc_proc = &w3m_GC_realloc_atomic;
+ gb->free_proc = &w3m_GC_free;
+}
+
+void
+growbuf_init_without_GC(struct growbuf *gb)
+{
+ gb->ptr = NULL;
+ gb->length = 0;
+ gb->area_size = 0;
+ gb->realloc_proc = &xrealloc;
+ gb->free_proc = &xfree;
+}
+
+void
+growbuf_clear(struct growbuf *gb)
+{
+ (*gb->free_proc) (gb->ptr);
+ gb->ptr = NULL;
+ gb->length = 0;
+ gb->area_size = 0;
+}
+
+Str
+growbuf_to_Str(struct growbuf *gb)
+{
+ Str s;
+
+ if (gb->free_proc == &w3m_GC_free) {
+ growbuf_reserve(gb, gb->length + 1);
+ gb->ptr[gb->length] = '\0';
+ s = New(struct _Str);
+ s->ptr = gb->ptr;
+ s->length = gb->length;
+ s->area_size = gb->area_size;
+ } else {
+ s = Strnew_charp_n(gb->ptr, gb->length);
+ (*gb->free_proc) (gb->ptr);
+ }
+ gb->ptr = NULL;
+ gb->length = 0;
+ gb->area_size = 0;
+ return s;
+}
+
+void
+growbuf_reserve(struct growbuf *gb, int leastarea)
+{
+ int newarea;
+
+ if (gb->area_size < leastarea) {
+ newarea = gb->area_size * 3 / 2;
+ if (newarea < leastarea)
+ newarea = leastarea;
+ newarea += 16;
+ gb->ptr = (*gb->realloc_proc) (gb->ptr, newarea);
+ gb->area_size = newarea;
+ }
+}
+
+void
+growbuf_append(struct growbuf *gb, const char *src, int len)
+{
+ growbuf_reserve(gb, gb->length + len);
+ memcpy(&gb->ptr[gb->length], src, len);
+ gb->length += len;
+}
+
static char *
w3m_dir(const char *name, char *dft)
{
diff --git a/indep.h b/indep.h
index b3819a3..2809832 100644
--- a/indep.h
+++ b/indep.h
@@ -1,7 +1,7 @@
/* $Id: indep.h,v 1.16 2003/09/22 21:02:19 ukai Exp $ */
#ifndef INDEP_H
#define INDEP_H
-#include <gc.h>
+#include "alloc.h"
#include "Str.h"
#include "config.h"
@@ -12,6 +12,14 @@
#define FALSE 0
#endif /* FALSE */
+struct growbuf {
+ char *ptr;
+ int length;
+ int area_size;
+ void *(*realloc_proc) (void *, size_t);
+ void (*free_proc) (void *);
+};
+
#define RAW_MODE 0
#define PAGER_MODE 1
#define HTML_MODE 2
@@ -52,6 +60,7 @@ extern int strncasecmp(const char *s1, const char *s2, size_t n);
extern char *strcasestr(const char *s1, const char *s2);
#endif
extern int strcasemstr(char *str, char *srch[], char **ret_ptr);
+int strmatchlen(const char *s1, const char *s2, int maxlen);
extern char *remove_space(char *str);
extern int non_null(char *s);
extern void cleanup_line(Str s, int mode);
@@ -64,6 +73,18 @@ extern Str Str_url_unquote(Str x, int is_form, int safe);
extern Str Str_form_quote(Str x);
#define Str_form_unquote(x) Str_url_unquote((x), TRUE, FALSE)
extern char *shell_quote(char *str);
+#define xmalloc(s) xrealloc(NULL, s)
+extern void *xrealloc(void *ptr, size_t size);
+extern void xfree(void *ptr);
+extern void *w3m_GC_realloc_atomic(void *ptr, size_t size);
+extern void w3m_GC_free(void *ptr);
+extern void growbuf_init(struct growbuf *gb);
+extern void growbuf_init_without_GC(struct growbuf *gb);
+extern void growbuf_clear(struct growbuf *gb);
+extern Str growbuf_to_Str(struct growbuf *gb);
+extern void growbuf_reserve(struct growbuf *gb, int leastarea);
+extern void growbuf_append(struct growbuf *gb, const char *src, int len);
+#define GROWBUF_ADD_CHAR(gb,ch) ((((gb)->length>=(gb)->area_size)?growbuf_reserve(gb,(gb)->length+1):(void)0),(void)((gb)->ptr[(gb)->length++] = (ch)))
extern char *w3m_auxbin_dir();
extern char *w3m_lib_dir();
@@ -71,10 +92,8 @@ extern char *w3m_etc_dir();
extern char *w3m_conf_dir();
extern char *w3m_help_dir();
-#define New(type) ((type*)GC_MALLOC(sizeof(type)))
-#define NewAtom(type) ((type*)GC_MALLOC_ATOMIC(sizeof(type)))
-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
-#define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type)))
-#define New_Reuse(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type)))
+#define NewWithoutGC(type) ((type*)xmalloc(sizeof(type)))
+#define NewWithoutGC_N(type,n) ((type*)xmalloc((n)*sizeof(type)))
+#define NewWithoutGC_Reuse(type,ptr,n) ((type*)xrealloc(ptr,(n)*sizeof(type)))
#endif /* INDEP_H */
diff --git a/istream.c b/istream.c
index 8967280..1387307 100644
--- a/istream.c
+++ b/istream.c
@@ -22,8 +22,8 @@
static void basic_close(int *handle);
static int basic_read(int *handle, char *buf, int len);
-static void file_close(struct file_handle *handle);
-static int file_read(struct file_handle *handle, char *buf, int len);
+static void file_close(struct io_file_handle *handle);
+static int file_read(struct io_file_handle *handle, char *buf, int len);
static int str_read(Str handle, char *buf, int len);
@@ -35,12 +35,14 @@ static int ssl_read(struct ssl_handle *handle, char *buf, int len);
static int ens_read(struct ens_handle *handle, char *buf, int len);
static void ens_close(struct ens_handle *handle);
+static void memchop(char *p, int *len);
+
static void
do_update(BaseStream base)
{
int len;
base->stream.cur = base->stream.next = 0;
- len = base->read(base->handle, base->stream.buf, base->stream.size);
+ len = (*base->read) (base->handle, base->stream.buf, base->stream.size);
if (len <= 0)
base->iseos = TRUE;
else
@@ -66,12 +68,12 @@ init_buffer(BaseStream base, char *buf, int bufsize)
StreamBuffer sb = &base->stream;
sb->size = bufsize;
sb->cur = 0;
+ sb->buf = NewWithoutGC_N(uchar, bufsize);
if (buf) {
- sb->buf = (uchar *) buf;
+ memcpy(sb->buf, buf, bufsize);
sb->next = bufsize;
}
else {
- sb->buf = NewAtom_N(uchar, bufsize);
sb->next = 0;
}
base->iseos = FALSE;
@@ -95,10 +97,10 @@ newInputStream(int des)
InputStream stream;
if (des < 0)
return NULL;
- stream = New(union input_stream);
+ stream = NewWithoutGC(union input_stream);
init_base_stream(&stream->base, STREAM_BUF_SIZE);
stream->base.type = IST_BASIC;
- stream->base.handle = New(int);
+ stream->base.handle = NewWithoutGC(int);
*(int *)stream->base.handle = des;
stream->base.read = (int (*)())basic_read;
stream->base.close = (void (*)())basic_close;
@@ -111,10 +113,10 @@ newFileStream(FILE * f, void (*closep) ())
InputStream stream;
if (f == NULL)
return NULL;
- stream = New(union input_stream);
+ stream = NewWithoutGC(union input_stream);
init_base_stream(&stream->base, STREAM_BUF_SIZE);
stream->file.type = IST_FILE;
- stream->file.handle = New(struct file_handle);
+ stream->file.handle = NewWithoutGC(struct io_file_handle);
stream->file.handle->f = f;
if (closep)
stream->file.handle->close = closep;
@@ -131,10 +133,10 @@ newStrStream(Str s)
InputStream stream;
if (s == NULL)
return NULL;
- stream = New(union input_stream);
+ stream = NewWithoutGC(union input_stream);
init_str_stream(&stream->base, s);
stream->str.type = IST_STR;
- stream->str.handle = s;
+ stream->str.handle = NULL;
stream->str.read = (int (*)())str_read;
stream->str.close = NULL;
return stream;
@@ -147,10 +149,10 @@ newSSLStream(SSL * ssl, int sock)
InputStream stream;
if (sock < 0)
return NULL;
- stream = New(union input_stream);
+ stream = NewWithoutGC(union input_stream);
init_base_stream(&stream->base, SSL_BUF_SIZE);
stream->ssl.type = IST_SSL;
- stream->ssl.handle = New(struct ssl_handle);
+ stream->ssl.handle = NewWithoutGC(struct ssl_handle);
stream->ssl.handle->ssl = ssl;
stream->ssl.handle->sock = sock;
stream->ssl.read = (int (*)())ssl_read;
@@ -166,14 +168,14 @@ newEncodedStream(InputStream is, char encoding)
if (is == NULL || (encoding != ENC_QUOTE && encoding != ENC_BASE64 &&
encoding != ENC_UUENCODE))
return is;
- stream = New(union input_stream);
+ stream = NewWithoutGC(union input_stream);
init_base_stream(&stream->base, STREAM_BUF_SIZE);
stream->ens.type = IST_ENCODED;
- stream->ens.handle = New(struct ens_handle);
+ stream->ens.handle = NewWithoutGC(struct ens_handle);
stream->ens.handle->is = is;
stream->ens.handle->pos = 0;
stream->ens.handle->encoding = encoding;
- stream->ens.handle->s = NULL;
+ growbuf_init_without_GC(&stream->ens.handle->gb);
stream->ens.read = (int (*)())ens_read;
stream->ens.close = (void (*)())ens_close;
return stream;
@@ -187,8 +189,10 @@ ISclose(InputStream stream)
stream->base.type & IST_UNCLOSE)
return -1;
prevtrap = mySignal(SIGINT, SIG_IGN);
- stream->base.close(stream->base.handle);
+ stream->base.close (stream->base.handle);
mySignal(SIGINT, prevtrap);
+ xfree(stream->base.stream.buf);
+ xfree(stream);
return 0;
}
@@ -218,122 +222,97 @@ ISundogetc(InputStream stream)
return -1;
}
-#define MARGIN_STR_SIZE 10
Str
-StrISgets(InputStream stream)
+StrISgets2(InputStream stream, char crnl)
{
- BaseStream base;
- StreamBuffer sb;
- Str s = NULL;
- uchar *p;
- int len;
+ struct growbuf gb;
if (stream == NULL)
- return '\0';
- base = &stream->base;
- sb = &base->stream;
-
- while (!base->iseos) {
- if (MUST_BE_UPDATED(base)) {
- do_update(base);
- }
- else {
- if ((p = memchr(&sb->buf[sb->cur], '\n', sb->next - sb->cur))) {
- len = p - &sb->buf[sb->cur] + 1;
- if (s == NULL)
- s = Strnew_size(len);
- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len);
- sb->cur += len;
- return s;
- }
- else {
- if (s == NULL)
- s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE);
- Strcat_charp_n(s, (char *)&sb->buf[sb->cur],
- sb->next - sb->cur);
- sb->cur = sb->next;
- }
- }
- }
-
- if (s == NULL)
- return Strnew();
- return s;
+ return NULL;
+ growbuf_init(&gb);
+ ISgets_to_growbuf(stream, &gb, crnl);
+ return growbuf_to_Str(&gb);
}
-Str
-StrmyISgets(InputStream stream)
+void
+ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl)
{
- BaseStream base;
- StreamBuffer sb;
- Str s = NULL;
- int i, len;
+ BaseStream base = &stream->base;
+ StreamBuffer sb = &base->stream;
+ int i;
- if (stream == NULL)
- return '\0';
- base = &stream->base;
- sb = &base->stream;
+ gb->length = 0;
while (!base->iseos) {
if (MUST_BE_UPDATED(base)) {
do_update(base);
+ continue;
}
- else {
- if (s && Strlastchar(s) == '\r') {
- if (sb->buf[sb->cur] == '\n')
- Strcat_char(s, (char)sb->buf[sb->cur++]);
- return s;
+ if (crnl && gb->length > 0 && gb->ptr[gb->length - 1] == '\r') {
+ if (sb->buf[sb->cur] == '\n') {
+ GROWBUF_ADD_CHAR(gb, '\n');
+ ++sb->cur;
}
- for (i = sb->cur;
- i < sb->next && sb->buf[i] != '\n' && sb->buf[i] != '\r';
- i++) ;
- if (i < sb->next) {
- len = i - sb->cur + 1;
- if (s == NULL)
- s = Strnew_size(len + MARGIN_STR_SIZE);
- Strcat_charp_n(s, (char *)&sb->buf[sb->cur], len);
- sb->cur = i + 1;
- if (sb->buf[i] == '\n')
- return s;
- }
- else {
- if (s == NULL)
- s = Strnew_size(sb->next - sb->cur + MARGIN_STR_SIZE);
- Strcat_charp_n(s, (char *)&sb->buf[sb->cur],
- sb->next - sb->cur);
- sb->cur = sb->next;
+ break;
+ }
+ for (i = sb->cur; i < sb->next; ++i) {
+ if (sb->buf[i] == '\n' || (crnl && sb->buf[i] == '\r')) {
+ ++i;
+ break;
}
}
+ growbuf_append(gb, &sb->buf[sb->cur], i - sb->cur);
+ sb->cur = i;
+ if (gb->length > 0 && gb->ptr[gb->length - 1] == '\n')
+ break;
}
- if (s == NULL)
- return Strnew();
- return s;
+ growbuf_reserve(gb, gb->length + 1);
+ gb->ptr[gb->length] = '\0';
+ return;
}
+#ifdef unused
int
ISread(InputStream stream, Str buf, int count)
{
- int rest, len;
+ int len;
+
+ if (count + 1 > buf->area_size) {
+ char *newptr = GC_MALLOC_ATOMIC(count + 1);
+ memcpy(newptr, buf->ptr, buf->length);
+ newptr[buf->length] = '\0';
+ buf->ptr = newptr;
+ buf->area_size = count + 1;
+ }
+ len = ISread_n(stream, buf->ptr, count);
+ buf->length = (len > 0) ? len : 0;
+ buf->ptr[buf->length] = '\0';
+ return (len > 0) ? 1 : 0;
+}
+#endif
+
+int
+ISread_n(InputStream stream, char *dst, int count)
+{
+ int len, l;
BaseStream base;
- if (stream == NULL || (base = &stream->base)->iseos)
+ if (stream == NULL || count <= 0)
+ return -1;
+ if ((base = &stream->base)->iseos)
return 0;
- len = buffer_read(&base->stream, buf->ptr, count);
- rest = count - len;
+ len = buffer_read(&base->stream, dst, count);
if (MUST_BE_UPDATED(base)) {
- len = base->read(base->handle, &buf->ptr[len], rest);
- if (len <= 0) {
+ l = (*base->read) (base->handle, &dst[len], count - len);
+ if (l <= 0) {
base->iseos = TRUE;
- len = 0;
+ } else {
+ len += l;
}
- rest -= len;
}
- Strtruncate(buf, count - rest);
- if (buf->length > 0)
- return 1;
- return 0;
+ return len;
}
int
@@ -496,8 +475,6 @@ ssl_check_cert_ident(X509 * x, char *hostname)
/* FIXME: gettextize? */
ret = Sprintf("Bad cert ident %s from %s", buf, hostname);
}
- else
- match_ident = TRUE;
}
return ret;
}
@@ -645,6 +622,7 @@ basic_close(int *handle)
#else
close(*(int *)handle);
#endif
+ xfree(handle);
}
static int
@@ -658,13 +636,14 @@ basic_read(int *handle, char *buf, int len)
}
static void
-file_close(struct file_handle *handle)
+file_close(struct io_file_handle *handle)
{
handle->close(handle->f);
+ xfree(handle);
}
static int
-file_read(struct file_handle *handle, char *buf, int len)
+file_read(struct io_file_handle *handle, char *buf, int len)
{
return fread(buf, 1, len, handle->f);
}
@@ -682,6 +661,7 @@ ssl_close(struct ssl_handle *handle)
close(handle->sock);
if (handle->ssl)
SSL_free(handle->ssl);
+ xfree(handle);
}
static int
@@ -717,38 +697,60 @@ static void
ens_close(struct ens_handle *handle)
{
ISclose(handle->is);
+ growbuf_clear(&handle->gb);
+ xfree(handle);
}
static int
ens_read(struct ens_handle *handle, char *buf, int len)
{
- if (handle->s == NULL || handle->pos == handle->s->length) {
+ if (handle->pos == handle->gb.length) {
char *p;
- handle->s = StrmyISgets(handle->is);
- if (handle->s->length == 0)
+ struct growbuf gbtmp;
+
+ ISgets_to_growbuf(handle->is, &handle->gb, TRUE);
+ if (handle->gb.length == 0)
return 0;
- cleanup_line(handle->s, PAGER_MODE);
if (handle->encoding == ENC_BASE64)
- Strchop(handle->s);
+ memchop(handle->gb.ptr, &handle->gb.length);
else if (handle->encoding == ENC_UUENCODE) {
- if (!strncmp(handle->s->ptr, "begin", 5))
- handle->s = StrmyISgets(handle->is);
- Strchop(handle->s);
+ if (handle->gb.length >= 5 &&
+ !strncmp(handle->gb.ptr, "begin", 5))
+ ISgets_to_growbuf(handle->is, &handle->gb, TRUE);
+ memchop(handle->gb.ptr, &handle->gb.length);
}
- p = handle->s->ptr;
+ growbuf_init_without_GC(&gbtmp);
+ p = handle->gb.ptr;
if (handle->encoding == ENC_QUOTE)
- handle->s = decodeQP(&p);
+ decodeQP_to_growbuf(&gbtmp, &p);
else if (handle->encoding == ENC_BASE64)
- handle->s = decodeB(&p);
+ decodeB_to_growbuf(&gbtmp, &p);
else if (handle->encoding == ENC_UUENCODE)
- handle->s = decodeU(&p);
+ decodeU_to_growbuf(&gbtmp, &p);
+ growbuf_clear(&handle->gb);
+ handle->gb = gbtmp;
handle->pos = 0;
}
- if (len > handle->s->length - handle->pos)
- len = handle->s->length - handle->pos;
+ if (len > handle->gb.length - handle->pos)
+ len = handle->gb.length - handle->pos;
- bcopy(&handle->s->ptr[handle->pos], buf, len);
+ memcpy(buf, &handle->gb.ptr[handle->pos], len);
handle->pos += len;
return len;
}
+
+static void
+memchop(char *p, int *len)
+{
+ char *q;
+
+ for (q = p + *len; q > p; --q) {
+ if (q[-1] != '\n' && q[-1] != '\r')
+ break;
+ }
+ if (q != p + *len)
+ *q = '\0';
+ *len = q - p;
+ return;
+}
diff --git a/istream.h b/istream.h
index a220d8b..5a04be0 100644
--- a/istream.h
+++ b/istream.h
@@ -2,13 +2,13 @@
#ifndef IO_STREAM_H
#define IO_STREAM_H
+#include "indep.h"
#include <stdio.h>
#ifdef USE_SSL
#include <openssl/bio.h>
#include <openssl/x509.h>
#include <openssl/ssl.h>
#endif
-#include "Str.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
@@ -20,7 +20,7 @@ struct stream_buffer {
typedef struct stream_buffer *StreamBuffer;
-struct file_handle {
+struct io_file_handle {
FILE *f;
void (*close) ();
};
@@ -36,7 +36,7 @@ union input_stream;
struct ens_handle {
union input_stream *is;
- Str s;
+ struct growbuf gb;
int pos;
char encoding;
};
@@ -53,7 +53,7 @@ struct base_stream {
struct file_stream {
struct stream_buffer stream;
- struct file_handle *handle;
+ struct io_file_handle *handle;
char type;
char iseos;
int (*read) ();
@@ -119,9 +119,14 @@ extern InputStream newEncodedStream(InputStream is, char encoding);
extern int ISclose(InputStream stream);
extern int ISgetc(InputStream stream);
extern int ISundogetc(InputStream stream);
-extern Str StrISgets(InputStream stream);
-extern Str StrmyISgets(InputStream stream);
+extern Str StrISgets2(InputStream stream, char crnl);
+#define StrISgets(stream) StrISgets2(stream, FALSE)
+#define StrmyISgets(stream) StrISgets2(stream, TRUE)
+void ISgets_to_growbuf(InputStream stream, struct growbuf *gb, char crnl);
+#ifdef unused
extern int ISread(InputStream stream, Str buf, int count);
+#endif
+int ISread_n(InputStream stream, char *dst, int bufsize);
extern int ISfileno(InputStream stream);
extern int ISeos(InputStream stream);
#ifdef USE_SSL
diff --git a/keybind.c b/keybind.c
index a490962..fec0c65 100644
--- a/keybind.c
+++ b/keybind.c
@@ -91,7 +91,7 @@ unsigned char EscBKeymap[128] = {
/* 0 1 2 3 4 5 6 7 */
nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
/* 8 9 : ; < = > ? */
- nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
+ nulcmd, nulcmd, nulcmd, nulcmd, sgrmouse, nulcmd, nulcmd, nulcmd,
/* @ A B C D E F G */
nulcmd, movU, movD, movR, movL, nulcmd, goLineL, pgFore,
/* H I J K L M N O */
diff --git a/keybind_lynx.c b/keybind_lynx.c
index 163f6b2..42267ec 100644
--- a/keybind_lynx.c
+++ b/keybind_lynx.c
@@ -99,7 +99,7 @@ unsigned char EscBKeymap[128] = {
/* 0 1 2 3 4 5 6 7 */
nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
/* 8 9 : ; < = > ? */
- nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd,
+ nulcmd, nulcmd, nulcmd, nulcmd, sgrmouse, nulcmd, nulcmd, nulcmd,
/* @ A B C D E F G */
nulcmd, prevA, nextA, followA, backBf, nulcmd, goLineL, pgFore,
/* H I J K L M N O */
diff --git a/libwc/ambwidth_map.awk b/libwc/ambwidth_map.awk
index 8544f58..1d9d25f 100644
--- a/libwc/ambwidth_map.awk
+++ b/libwc/ambwidth_map.awk
@@ -3,9 +3,15 @@ BEGIN {
i = 0;
}
$2 == "A" {
- code = sprintf("0x%s", $1);
- if (strtonum(code) < 0x10000) {
- map[i] = code
+ code = code2 = strtonum(sprintf("0x%s", $1))
+ if (match($1, /[.]+[0-9A-Fa-f]+/)) {
+ s = substr($1, RSTART, RLENGTH)
+ sub(/[.]+/, "0x", s)
+ code2 = strtonum(s)
+ }
+ for (; code <= code2; code++) {
+ if (code >= 0x10000) { break }
+ map[i] = sprintf("0x%04X", code)
i++;
}
}
@@ -15,28 +21,14 @@ END {
prev = strtonum(map[0]);
for (j = 1; j < i; j++) {
cur = strtonum(map[j]);
- if (match(map[j], "[.]+")) {
+ if (cur - prev > 1) {
map2[n] = sprintf("%s, %s", start, map[j - 1]);
n++;
- gsub("[.]+", ", 0x", map[j])
- map2[n] = map[j];
- n++;
- start = map[j + 1];
- cur = strtonum(start);
- } else {
- if (cur - prev > 2) {
- map2[n] = sprintf("%s, %s", start, map[j - 1]);
- start = map[j];
- n++;
- }
-
- if (j == i - 1) {
- map2[n] = sprintf("%s, %s", start, map[j]);
- n++;
- }
+ start = map[j];
}
prev = cur;
}
+ if (i > 0) { map2[n] = sprintf("%s, %s", start, map[i - 1]); n++ }
printf("static wc_map ucs_ambwidth_map[] = {\n");
for (j = 0; j < n; j++) {
diff --git a/libwc/charset.c b/libwc/charset.c
index 3f0b74d..ea79b1c 100644
--- a/libwc/charset.c
+++ b/libwc/charset.c
@@ -1,8 +1,7 @@
#include <stdlib.h>
#include <ctype.h>
-#include <gc.h>
-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
+#include "../alloc.h"
#include "wc.h"
diff --git a/libwc/gb18030.c b/libwc/gb18030.c
index c195d49..d5c9018 100644
--- a/libwc/gb18030.c
+++ b/libwc/gb18030.c
@@ -151,6 +151,7 @@ wc_ucs_to_gb18030(wc_uint32 ucs)
return cc;
}
cc.ccs = WC_CCS_UNKNOWN;
+ cc.code = 0;
return cc;
}
#endif
diff --git a/libwc/iso2022.c b/libwc/iso2022.c
index 33d9a19..385adde 100644
--- a/libwc/iso2022.c
+++ b/libwc/iso2022.c
@@ -463,7 +463,7 @@ wc_push_to_iso2022(Str os, wc_wchar_t cc, wc_status *st)
cc.code = (wc_uint32)WC_REPLACE[0];
break;
default:
- if ((cc.ccs == WC_CCS_JOHAB || WC_CCS_JOHAB_1 ||
+ if ((cc.ccs == WC_CCS_JOHAB || cc.ccs == WC_CCS_JOHAB_1 ||
cc.ccs == WC_CCS_JOHAB_2 || cc.ccs == WC_CCS_JOHAB_3) &&
cs94w_gmap[WC_F_KS_X_1001 - WC_F_ISO_BASE]) {
wc_wchar_t cc2 = wc_johab_to_ksx1001(cc);
diff --git a/libwc/johab.c b/libwc/johab.c
index 8d587b8..498b1bb 100644
--- a/libwc/johab.c
+++ b/libwc/johab.c
@@ -160,9 +160,9 @@ wc_N_to_johab1(wc_uint32 code)
{
wc_uint32 a, b, c;
- a = N_johab1_map[0][(code / 28) / 21];
- b = N_johab1_map[1][(code / 28) % 21];
- c = N_johab1_map[2][ code % 28 ];
+ a = N_johab1_map[0][(code / 28) / 21 & 0x1F];
+ b = N_johab1_map[1][(code / 28) % 21 & 0x1F];
+ c = N_johab1_map[2][ code % 28 & 0x1F];
return 0x8000 | (a << 10) | (b << 5) | c;
}
diff --git a/libwc/map/big5_ucs.map b/libwc/map/big5_ucs.map
index 0c6fd12..ac817a9 100644
--- a/libwc/map/big5_ucs.map
+++ b/libwc/map/big5_ucs.map
@@ -1,6 +1,8 @@
/* Big5 (Chinese Taiwan) */
-static wc_uint16 big5_ucs_map[ 0x59 * 0x9D ] = {
+#define N_big5_ucs_map (0x59 * 0x9D)
+
+static wc_uint16 big5_ucs_map[ N_big5_ucs_map ] = {
0x3000, /* 0xA140 */
0xFF0C, /* 0xA141 */
0x3001, /* 0xA142 */
diff --git a/libwc/map/cns11643_ucs.map b/libwc/map/cns11643_ucs.map
index b426dd3..fcba334 100644
--- a/libwc/map/cns11643_ucs.map
+++ b/libwc/map/cns11643_ucs.map
@@ -1,6 +1,8 @@
/* CNS 11643 (Chinese Taiwan) */
-static wc_uint16 cns116431_ucs_map[ 0x5E * 0x5E ] = {
+#define N_cns116431_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 cns116431_ucs_map[ N_cns116431_ucs_map ] = {
0x3000, /* 0x2121 */
0xFF0C, /* 0x2122 */
0x3001, /* 0x2123 */
@@ -8839,7 +8841,9 @@ static wc_uint16 cns116431_ucs_map[ 0x5E * 0x5E ] = {
0, /* 0x7E7E */
};
-static wc_uint16 cns116432_ucs_map[ 0x5E * 0x5E ] = {
+#define N_cns116432_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 cns116432_ucs_map[ N_cns116432_ucs_map ] = {
0x4E42, /* 0x2121 */
0x4E5C, /* 0x2122 */
0x51F5, /* 0x2123 */
diff --git a/libwc/map/gb12345_ucs.map b/libwc/map/gb12345_ucs.map
index 55558c7..3fb338d 100644
--- a/libwc/map/gb12345_ucs.map
+++ b/libwc/map/gb12345_ucs.map
@@ -1,6 +1,8 @@
/* GB 12345 (Chinese) */
-static wc_uint16 gb12345_ucs_map[ 0x5E * 0x5E ] = {
+#define N_gb12345_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 gb12345_ucs_map[ N_gb12345_ucs_map ] = {
0x3000, /* 0x2121 */
0x3001, /* 0x2122 */
0x3002, /* 0x2123 */
diff --git a/libwc/map/gb2312_ucs.map b/libwc/map/gb2312_ucs.map
index 38fb88f..3d37465 100644
--- a/libwc/map/gb2312_ucs.map
+++ b/libwc/map/gb2312_ucs.map
@@ -1,6 +1,8 @@
/* GB 2312 (Chinese) */
-static wc_uint16 gb2312_ucs_map[ 0x5E * 0x5E ] = {
+#define N_gb2312_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 gb2312_ucs_map[ N_gb2312_ucs_map ] = {
0x3000, /* 0x2121 */
0x3001, /* 0x2122 */
0x3002, /* 0x2123 */
diff --git a/libwc/map/gbk_ucs.map b/libwc/map/gbk_ucs.map
index 5a0d5ba..d092fd7 100644
--- a/libwc/map/gbk_ucs.map
+++ b/libwc/map/gbk_ucs.map
@@ -6,7 +6,9 @@ static wc_map ucs_gbk_80_map[ N_ucs_gbk_80_map ] = {
{ 0x20AC, 0x0080 },
};
-static wc_uint16 gbk_ucs_map[ 0x7E * 0xBE - 0x5E * 0x5E + 0x0A + 0x16 + 0x06 ] = {
+#define N_gbk_ucs_map (0x7E * 0xBE - 0x5E * 0x5E + 0x0A + 0x16 + 0x06)
+
+static wc_uint16 gbk_ucs_map[ N_gbk_ucs_map ] = {
0x4E02, /* 0x8140 */
0x4E04, /* 0x8141 */
0x4E05, /* 0x8142 */
diff --git a/libwc/map/hkscs_ucs.map b/libwc/map/hkscs_ucs.map
index 96d1566..2fbe6b4 100644
--- a/libwc/map/hkscs_ucs.map
+++ b/libwc/map/hkscs_ucs.map
@@ -1,6 +1,8 @@
/* HKSCS (Chinese Hong Kong) */
-static wc_uint16 hkscs_ucs_map[ 0x1E * 0x9D ] = {
+#define N_hkscs_ucs_map (0x1E * 0x9D)
+
+static wc_uint16 hkscs_ucs_map[ N_hkscs_ucs_map ] = {
0, /* 0x8840 */
0, /* 0x8841 */
0, /* 0x8842 */
diff --git a/libwc/map/jisx0208x0212x0213_ucs.map b/libwc/map/jisx0208x0212x0213_ucs.map
index 1a1d706..28c2a6c 100644
--- a/libwc/map/jisx0208x0212x0213_ucs.map
+++ b/libwc/map/jisx0208x0212x0213_ucs.map
@@ -1,6 +1,8 @@
/* JIS X 0208, JIS X 0212, JIS X 0213 (Japanese) */
-static wc_uint16 jisx0208x02131_ucs_map[ 0x5E * 0x5E ] = {
+#define N_jisx0208x02131_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 jisx0208x02131_ucs_map[ N_jisx0208x02131_ucs_map ] = {
0x3000, /* JIS X 0208 0x2121 */
0x3001, /* JIS X 0208 0x2122 */
0x3002, /* JIS X 0208 0x2123 */
@@ -8839,7 +8841,9 @@ static wc_uint16 jisx0208x02131_ucs_map[ 0x5E * 0x5E ] = {
0, /* JIS X 0213-1 0x7E7E */
};
-static wc_uint16 jisx0212x02132_ucs_map[ 0x5E * 0x5E ] = {
+#define N_jisx0212x02132_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 jisx0212x02132_ucs_map[ N_jisx0212x02132_ucs_map ] = {
0, /* JIS X 0213-2 0x2121 */
0x4E02, /* JIS X 0213-2 0x2122 */
0x4E0F, /* JIS X 0213-2 0x2123 */
diff --git a/libwc/map/ksx1001_ucs.map b/libwc/map/ksx1001_ucs.map
index 9a17d61..cb62f98 100644
--- a/libwc/map/ksx1001_ucs.map
+++ b/libwc/map/ksx1001_ucs.map
@@ -1,6 +1,8 @@
/* KS X 1001 (Korean) */
-static wc_uint16 ksx1001_ucs_map[ 0x5E * 0x5E ] = {
+#define N_ksx1001_ucs_map (0x5E * 0x5E)
+
+static wc_uint16 ksx1001_ucs_map[ N_ksx1001_ucs_map ] = {
0x3000, /* 0x2121 */
0x3001, /* 0x2122 */
0x3002, /* 0x2123 */
diff --git a/libwc/map/sjis_ext_ucs.map b/libwc/map/sjis_ext_ucs.map
index a82995c..cc748ba 100644
--- a/libwc/map/sjis_ext_ucs.map
+++ b/libwc/map/sjis_ext_ucs.map
@@ -1,6 +1,8 @@
/* Shift_JIS/CP932 (Japanese) */
-static wc_uint16 sjis_ext_ucs_map[ 0x5E * 10 ] = {
+#define N_sjis_ext_ucs_map (0x5E * 10)
+
+static wc_uint16 sjis_ext_ucs_map[ N_sjis_ext_ucs_map ] = {
0x2460, /* 0x8740 */
0x2461, /* 0x8741 */
0x2462, /* 0x8742 */
diff --git a/libwc/map/ucs_ambwidth.map b/libwc/map/ucs_ambwidth.map
index 6f03ba8..35ceedb 100644
--- a/libwc/map/ucs_ambwidth.map
+++ b/libwc/map/ucs_ambwidth.map
@@ -1,50 +1,82 @@
static wc_map ucs_ambwidth_map[] = {
{ 0x00A1, 0x00A1 },
{ 0x00A4, 0x00A4 },
- { 0x00A7, 0x00AA },
- { 0x00AD, 0x00BF },
+ { 0x00A7, 0x00A8 },
+ { 0x00AA, 0x00AA },
+ { 0x00AD, 0x00AE },
+ { 0x00B0, 0x00B4 },
+ { 0x00B6, 0x00BA },
+ { 0x00BC, 0x00BF },
{ 0x00C6, 0x00C6 },
{ 0x00D0, 0x00D0 },
{ 0x00D7, 0x00D8 },
{ 0x00DE, 0x00E1 },
- { 0x00E6, 0x00ED },
- { 0x00F0, 0x00F3 },
- { 0x00F7, 0x00FE },
+ { 0x00E6, 0x00E6 },
+ { 0x00E8, 0x00EA },
+ { 0x00EC, 0x00ED },
+ { 0x00F0, 0x00F0 },
+ { 0x00F2, 0x00F3 },
+ { 0x00F7, 0x00FA },
+ { 0x00FC, 0x00FC },
+ { 0x00FE, 0x00FE },
{ 0x0101, 0x0101 },
- { 0x0111, 0x0113 },
+ { 0x0111, 0x0111 },
+ { 0x0113, 0x0113 },
{ 0x011B, 0x011B },
{ 0x0126, 0x0127 },
{ 0x012B, 0x012B },
{ 0x0131, 0x0133 },
{ 0x0138, 0x0138 },
- { 0x013F, 0x0144 },
- { 0x0148, 0x014D },
+ { 0x013F, 0x0142 },
+ { 0x0144, 0x0144 },
+ { 0x0148, 0x014B },
+ { 0x014D, 0x014D },
{ 0x0152, 0x0153 },
{ 0x0166, 0x0167 },
{ 0x016B, 0x016B },
- { 0x01CE, 0x01DC },
+ { 0x01CE, 0x01CE },
+ { 0x01D0, 0x01D0 },
+ { 0x01D2, 0x01D2 },
+ { 0x01D4, 0x01D4 },
+ { 0x01D6, 0x01D6 },
+ { 0x01D8, 0x01D8 },
+ { 0x01DA, 0x01DA },
+ { 0x01DC, 0x01DC },
{ 0x0251, 0x0251 },
{ 0x0261, 0x0261 },
{ 0x02C4, 0x02C4 },
- { 0x02C7, 0x02CD },
+ { 0x02C7, 0x02C7 },
+ { 0x02C9, 0x02CB },
+ { 0x02CD, 0x02CD },
{ 0x02D0, 0x02D0 },
- { 0x02D8, 0x02DF },
+ { 0x02D8, 0x02DB },
+ { 0x02DD, 0x02DD },
+ { 0x02DF, 0x02DF },
{ 0x0300, 0x036F },
- { 0x0391, 0x03A9 },
- { 0x03B1, 0x03C9 },
+ { 0x0391, 0x03A1 },
+ { 0x03A3, 0x03A9 },
+ { 0x03B1, 0x03C1 },
+ { 0x03C3, 0x03C9 },
{ 0x0401, 0x0401 },
- { 0x0410, 0x0451 },
+ { 0x0410, 0x044F },
+ { 0x0451, 0x0451 },
{ 0x2010, 0x2010 },
- { 0x2013, 0x2019 },
+ { 0x2013, 0x2016 },
+ { 0x2018, 0x2019 },
{ 0x201C, 0x201D },
- { 0x2020, 0x2027 },
- { 0x2030, 0x2035 },
+ { 0x2020, 0x2022 },
+ { 0x2024, 0x2027 },
+ { 0x2030, 0x2030 },
+ { 0x2032, 0x2033 },
+ { 0x2035, 0x2035 },
{ 0x203B, 0x203B },
{ 0x203E, 0x203E },
{ 0x2074, 0x2074 },
- { 0x207F, 0x2084 },
+ { 0x207F, 0x207F },
+ { 0x2081, 0x2084 },
{ 0x20AC, 0x20AC },
- { 0x2103, 0x2105 },
+ { 0x2103, 0x2103 },
+ { 0x2105, 0x2105 },
{ 0x2109, 0x2109 },
{ 0x2113, 0x2113 },
{ 0x2116, 0x2116 },
@@ -52,21 +84,28 @@ static wc_map ucs_ambwidth_map[] = {
{ 0x2126, 0x2126 },
{ 0x212B, 0x212B },
{ 0x2153, 0x2154 },
- { 0x215B, 0x216B },
+ { 0x215B, 0x215E },
+ { 0x2160, 0x216B },
{ 0x2170, 0x2179 },
{ 0x2189, 0x2189 },
{ 0x2190, 0x2199 },
{ 0x21B8, 0x21B9 },
- { 0x21D2, 0x21D4 },
+ { 0x21D2, 0x21D2 },
+ { 0x21D4, 0x21D4 },
{ 0x21E7, 0x21E7 },
- { 0x2200, 0x2203 },
+ { 0x2200, 0x2200 },
+ { 0x2202, 0x2203 },
{ 0x2207, 0x2208 },
{ 0x220B, 0x220B },
- { 0x220F, 0x2211 },
+ { 0x220F, 0x220F },
+ { 0x2211, 0x2211 },
{ 0x2215, 0x2215 },
{ 0x221A, 0x221A },
{ 0x221D, 0x2220 },
- { 0x2223, 0x222E },
+ { 0x2223, 0x2223 },
+ { 0x2225, 0x2225 },
+ { 0x2227, 0x222C },
+ { 0x222E, 0x222E },
{ 0x2234, 0x2237 },
{ 0x223C, 0x223D },
{ 0x2248, 0x2248 },
@@ -83,11 +122,13 @@ static wc_map ucs_ambwidth_map[] = {
{ 0x22A5, 0x22A5 },
{ 0x22BF, 0x22BF },
{ 0x2312, 0x2312 },
- { 0x2460, 0x254B },
+ { 0x2460, 0x24E9 },
+ { 0x24EB, 0x254B },
{ 0x2550, 0x2573 },
{ 0x2580, 0x258F },
{ 0x2592, 0x2595 },
- { 0x25A0, 0x25A9 },
+ { 0x25A0, 0x25A1 },
+ { 0x25A3, 0x25A9 },
{ 0x25B2, 0x25B3 },
{ 0x25B6, 0x25B7 },
{ 0x25BC, 0x25BD },
@@ -101,12 +142,20 @@ static wc_map ucs_ambwidth_map[] = {
{ 0x2609, 0x2609 },
{ 0x260E, 0x260F },
{ 0x2614, 0x2615 },
- { 0x261C, 0x261E },
- { 0x2640, 0x2642 },
- { 0x2660, 0x266F },
+ { 0x261C, 0x261C },
+ { 0x261E, 0x261E },
+ { 0x2640, 0x2640 },
+ { 0x2642, 0x2642 },
+ { 0x2660, 0x2661 },
+ { 0x2663, 0x2665 },
+ { 0x2667, 0x266A },
+ { 0x266C, 0x266D },
+ { 0x266F, 0x266F },
{ 0x269E, 0x269F },
{ 0x26BE, 0x26BF },
- { 0x26C4, 0x26E3 },
+ { 0x26C4, 0x26CD },
+ { 0x26CF, 0x26E1 },
+ { 0x26E3, 0x26E3 },
{ 0x26E8, 0x26FF },
{ 0x273D, 0x273D },
{ 0x2757, 0x2757 },
diff --git a/libwc/map/uhc_ucs.map b/libwc/map/uhc_ucs.map
index b6b43ca..55efc09 100644
--- a/libwc/map/uhc_ucs.map
+++ b/libwc/map/uhc_ucs.map
@@ -1,6 +1,8 @@
/* UHC/CP949 (Korean) */
-static wc_uint16 uhc_ucs_map[ 0x20 * 0xB2 + 0x27 * 0x54 + 2 ] = {
+#define N_uhc_ucs_map (0x20 * 0xB2 + 0x27 * 0x54 + 2)
+
+static wc_uint16 uhc_ucs_map[ N_uhc_ucs_map ] = {
0xAC02, /* 0x8141 */
0xAC03, /* 0x8142 */
0xAC05, /* 0x8143 */
diff --git a/libwc/status.c b/libwc/status.c
index d25c924..4a2ebf8 100644
--- a/libwc/status.c
+++ b/libwc/status.c
@@ -1,7 +1,6 @@
#include <string.h>
-#include <gc.h>
-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
+#include "../alloc.h"
#include "wc.h"
#ifdef USE_UNICODE
diff --git a/libwc/ucs.c b/libwc/ucs.c
index d7b6948..727e574 100644
--- a/libwc/ucs.c
+++ b/libwc/ucs.c
@@ -100,6 +100,7 @@ wc_ucs_to_any(wc_uint32 ucs, wc_table *t)
return t->conv(t->ccs, map->code2);
}
cc.ccs = WC_CCS_UNKNOWN;
+ cc.code = 0;
return cc;
}
@@ -108,6 +109,7 @@ wc_any_to_ucs(wc_wchar_t cc)
{
int f;
wc_uint16 *map = NULL;
+ wc_uint32 map_size = 0x80;
wc_map *map2;
f = WC_CCS_INDEX(cc.ccs);
@@ -138,6 +140,7 @@ wc_any_to_ucs(wc_wchar_t cc)
if (f < WC_F_ISO_BASE || f > WC_F_CS94W_END)
return 0;
map = cs94w_ucs_map[f - WC_F_ISO_BASE];
+ map_size = cs94w_ucs_map_size[f - WC_F_ISO_BASE];
cc.code = WC_CS94W_N(cc.code);
break;
case WC_CCS_A_CS96:
@@ -150,6 +153,7 @@ wc_any_to_ucs(wc_wchar_t cc)
if (f < WC_F_ISO_BASE || f > WC_F_CS96W_END)
return WC_C_UCS4_ERROR;
map = cs96w_ucs_map[f - WC_F_ISO_BASE];
+ map_size = cs96w_ucs_map_size[f - WC_F_ISO_BASE];
cc.code = WC_CS96W_N(cc.code);
break;
case WC_CCS_A_CS942:
@@ -180,6 +184,7 @@ wc_any_to_ucs(wc_wchar_t cc)
if (f < WC_F_PCS_BASE || f > WC_F_PCSW_END)
return WC_C_UCS4_ERROR;
map = pcsw_ucs_map[f - WC_F_PCS_BASE];
+ map_size = pcsw_ucs_map_size[f - WC_F_PCS_BASE];
switch (cc.ccs) {
case WC_CCS_BIG5:
cc.code = WC_BIG5_N(cc.code);
@@ -271,6 +276,8 @@ wc_any_to_ucs(wc_wchar_t cc)
}
if (map == NULL)
return WC_C_UCS4_ERROR;
+ if (map_size == 0 || cc.code > map_size - 1)
+ return WC_C_UCS4_ERROR;
cc.code = map[cc.code];
return cc.code ? cc.code : WC_C_UCS4_ERROR;
}
diff --git a/libwc/ucs.map b/libwc/ucs.map
index dfac6d9..5d6f688 100644
--- a/libwc/ucs.map
+++ b/libwc/ucs.map
@@ -195,7 +195,28 @@ static wc_uint16 *cs94w_ucs_map[] = {
jisx0212x02132_ucs_map, /* 50 (JIS X 0213-2) */
};
+static wc_uint32 cs94w_ucs_map_size[] = {
+ N_jisx0208x02131_ucs_map, /* 40 (JIS C 6226) */
+ N_gb2312_ucs_map, /* 41 (GB 2312) */
+ N_jisx0208x02131_ucs_map, /* 42 (JIS X 0208) */
+ N_ksx1001_ucs_map, /* 43 (KS X 1001) */
+ N_jisx0212x02132_ucs_map, /* 44 (JIS X 0212) */
+ 0, /* 45 (ISO IR 165) */
+ 0, /* 46 */
+ N_cns116431_ucs_map, /* 47 (CNS 11643-1) */
+ N_cns116432_ucs_map, /* 48 (CNS 11643-2) */
+ 0, /* 49 (CNS 11643-3) */
+ 0, /* 4A (CNS 11643-4) */
+ 0, /* 4B (CNS 11643-5) */
+ 0, /* 4C (CNS 11643-6) */
+ 0, /* 4D (CNS 11643-7) */
+ 0, /* 4E (KSP 9566) */
+ N_jisx0208x02131_ucs_map, /* 4F (JIS X 0213-1) */
+ N_jisx0212x02132_ucs_map, /* 50 (JIS X 0213-2) */
+};
+
static wc_uint16 **cs96w_ucs_map;
+static wc_uint32 *cs96w_ucs_map_size;
static wc_uint16 *pcsw_ucs_map[] = {
big5_ucs_map, /* Big5 */
@@ -233,6 +254,42 @@ static wc_uint16 *pcsw_ucs_map[] = {
hkscs_ucs_map, /* HKSCS-2 */
};
+static wc_uint32 pcsw_ucs_map_size[] = {
+ N_big5_ucs_map, /* Big5 */
+ N_big5_ucs_map, /* Big5-1 */
+ N_big5_ucs_map, /* Big5-2 */
+ 0, /* CNS 11643-8 */
+ 0, /* CNS 11643-9 */
+ 0, /* CNS 11643-10 */
+ 0, /* CNS 11643-11 */
+ 0, /* CNS 11643-12 */
+ 0, /* CNS 11643-13 */
+ 0, /* CNS 11643-14 */
+ 0, /* CNS 11643-15 */
+ 0, /* CNS 11643-16 */
+ 0, /* CNS 11643-X */
+ N_gb12345_ucs_map, /* GB 12345 */
+ 0, /* Johab (special conversion) */
+ 0, /* Johab-1 (special conversion) */
+ 0, /* Johab-2 (special conversion) */
+ N_ksx1001_ucs_map, /* Johab-3 */
+ N_sjis_ext_ucs_map, /* Shift_JIS(CP932) ext */
+ N_sjis_ext_ucs_map, /* Shift_JIS(CP932) ext-1 */
+ N_sjis_ext_ucs_map, /* Shift_JIS(CP932) ext-2 */
+ N_gbk_ucs_map, /* GBK(CP936) */
+ N_gbk_ucs_map, /* GBK(CP936)-1 */
+ N_gbk_ucs_map, /* GBK(CP936)-2 */
+ 0, /* GB18030 GBK-ext (special conversion) */
+ 0, /* GB18030 GBK-ext-1 (special conversion) */
+ 0, /* GB18030 GBK-ext-2 (special conversion) */
+ N_uhc_ucs_map, /* UHC(CP949) */
+ N_uhc_ucs_map, /* UHC(CP949)-1 */
+ N_uhc_ucs_map, /* UHC(CP949)-2 */
+ N_hkscs_ucs_map, /* HKSCS */
+ N_hkscs_ucs_map, /* HKSCS-1 */
+ N_hkscs_ucs_map, /* HKSCS-2 */
+};
+
static wc_wchar_t
ucs_cs94_conv(wc_ccs ccs, wc_uint16 c)
{
diff --git a/linein.c b/linein.c
index b7e81b6..d8f9023 100644
--- a/linein.c
+++ b/linein.c
@@ -714,7 +714,8 @@ _rdcompl(void)
static void
next_dcompl(int next)
{
- static int col, row, len;
+ static int col, row;
+ static unsigned int len;
static Str d;
int i, j, n, y;
Str f;
@@ -780,9 +781,10 @@ next_dcompl(int next)
if (len < n)
len = n;
}
- col = COLS / len;
- if (col == 0)
- col = 1;
+ if (len > 0 && COLS > len)
+ col = COLS / len;
+ else
+ col = 1;
row = (NCFileBuf + col - 1) / col;
disp_next:
@@ -1026,7 +1028,7 @@ _prev(void)
strCurrentBuf = strBuf;
}
if (DecodeURL && (cm_mode & CPL_URL) )
- p = url_unquote_conv(p, 0);
+ p = url_decode2(p, NULL);
strBuf = Strnew_charp(p);
CLen = CPos = setStrType(strBuf, strProp);
offset = 0;
@@ -1045,7 +1047,7 @@ _next(void)
p = nextHist(hist);
if (p) {
if (DecodeURL && (cm_mode & CPL_URL) )
- p = url_unquote_conv(p, 0);
+ p = url_decode2(p, NULL);
strBuf = Strnew_charp(p);
}
else {
diff --git a/local.c b/local.c
index f5a73a2..46ac579 100644
--- a/local.c
+++ b/local.c
@@ -109,6 +109,7 @@ loadLocalDir(char *dname)
n++;
}
}
+ closedir(d);
if (multicolList) {
l = COLS / (maxlen + 2);
@@ -167,7 +168,7 @@ loadLocalDir(char *dname)
else {
#if defined(HAVE_LSTAT) && defined(HAVE_READLINK)
if (S_ISLNK(lst.st_mode)) {
- if ((l = readlink(fbuf->ptr, lbuf, sizeof(lbuf))) > 0) {
+ if ((l = readlink(fbuf->ptr, lbuf, sizeof(lbuf) - 1)) > 0) {
lbuf[l] = '\0';
Strcat_m_charp(tmp, " -> ",
html_quote(conv_from_system(lbuf)), NULL);
@@ -212,18 +213,17 @@ set_environ(char *var, char *value)
if (var != NULL && value != NULL)
setenv(var, value, 1);
#else /* not HAVE_SETENV */
-#ifdef HAVE_PUTENV
static Hash_sv *env_hash = NULL;
Str tmp = Strnew_m_charp(var, "=", value, NULL);
if (env_hash == NULL)
env_hash = newHash_sv(20);
putHash_sv(env_hash, var, (void *)tmp->ptr);
+#ifdef HAVE_PUTENV
putenv(tmp->ptr);
#else /* not HAVE_PUTENV */
extern char **environ;
char **ne;
- char *p;
int i, l, el;
char **e, **newenv;
@@ -250,7 +250,7 @@ set_environ(char *var, char *value)
if (newenv == NULL)
return;
for (e = environ, ne = newenv; *e != NULL; *(ne++) = *(e++)) ;
- *(ne++) = p;
+ *(ne++) = tmp->ptr;
*ne = NULL;
environ = newenv;
#endif /* not HAVE_PUTENV */
@@ -359,6 +359,10 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
int status;
pid_t pid;
char *file = uri, *name = uri, *path_info = NULL, *tmpf = NULL;
+#ifdef HAVE_CHDIR
+ char *cgi_dir;
+#endif
+ char *cgi_basename;
#ifdef __MINGW32_VERSION
return NULL;
@@ -373,18 +377,25 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
if (!fw)
return NULL;
}
+ if (qstr)
+ uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr;
+#ifdef HAVE_CHDIR
+ cgi_dir = mydirname(file);
+#endif
+ cgi_basename = mybasename(file);
pid = open_pipe_rw(&fr, NULL);
- if (pid < 0)
+ /* Don't invoke gc after here, or the program might crash in some platforms */
+ if (pid < 0) {
+ if (fw)
+ fclose(fw);
return NULL;
- else if (pid) {
+ } else if (pid) {
if (fw)
fclose(fw);
return fr;
}
setup_child(TRUE, 2, fw ? fileno(fw) : -1);
- if (qstr)
- uri = Strnew_m_charp(uri, "?", qstr, NULL)->ptr;
set_cgi_environ(name, file, uri);
if (path_info)
set_environ("PATH_INFO", path_info);
@@ -415,12 +426,11 @@ localcgi_post(char *uri, char *qstr, FormList *request, char *referer)
}
#ifdef HAVE_CHDIR /* ifndef __EMX__ ? */
- chdir(mydirname(file));
+ chdir(cgi_dir);
#endif
- execl(file, mybasename(file), NULL);
+ execl(file, cgi_basename, NULL);
fprintf(stderr, "execl(\"%s\", \"%s\", NULL): %s\n",
- file, mybasename(file), strerror(errno));
+ file, cgi_basename, strerror(errno));
exit(1);
- return NULL;
#endif
}
diff --git a/mailcap.c b/mailcap.c
index c0461df..f0c6242 100644
--- a/mailcap.c
+++ b/mailcap.c
@@ -72,7 +72,7 @@ searchMailcap(struct mailcap *table, char *type)
}
static int
-matchMailcapAttr(char *p, char *attr, int len, Str *value)
+matchMailcapAttr(char *p, char *attr, size_t len, Str *value)
{
int quoted;
char *q = NULL;
diff --git a/main.c b/main.c
index b421943..56301cc 100644
--- a/main.c
+++ b/main.c
@@ -1,6 +1,7 @@
/* $Id: main.c,v 1.270 2010/08/24 10:11:51 htrb Exp $ */
#define MAINPROGRAM
#include "fm.h"
+#include <stdio.h>
#include <signal.h>
#include <setjmp.h>
#include <sys/stat.h>
@@ -11,6 +12,9 @@
#include <sys/wait.h>
#endif
#include <time.h>
+#if defined(__CYGWIN__) && defined(USE_BINMODE_STREAM)
+#include <io.h>
+#endif
#include "terms.h"
#include "myctype.h"
#include "regex.h"
@@ -119,6 +123,8 @@ static int searchKeyNum(void);
#define help() fusage(stdout, 0)
#define usage() fusage(stderr, 1)
+int enable_inline_image; /* 1 == mlterm OSC 5379, 2 == sixel */
+
static void
fversion(FILE * f)
{
@@ -200,10 +206,12 @@ fusage(FILE * f, int err)
#ifdef USE_M17N
fprintf(f, " -I charset document charset\n");
fprintf(f, " -O charset display/output charset\n");
+#if 0 /* use -O{s|j|e} instead */
fprintf(f, " -e EUC-JP\n");
fprintf(f, " -s Shift_JIS\n");
fprintf(f, " -j JIS\n");
#endif
+#endif
fprintf(f, " -B load bookmark\n");
fprintf(f, " -bookmark file specify bookmark file\n");
fprintf(f, " -T type specify content-type\n");
@@ -214,7 +222,7 @@ fusage(FILE * f, int err)
#endif /* USE_COLOR */
fprintf(f,
" -N open URL of command line on each new tab\n");
- fprintf(f, " -F automatically render frame\n");
+ fprintf(f, " -F automatically render frames\n");
fprintf(f,
" -cols width specify column width (used with -dump)\n");
fprintf(f,
@@ -248,8 +256,12 @@ fusage(FILE * f, int err)
#endif /* USE_COOKIE */
fprintf(f, " -graph use DEC special graphics for border of table and menu\n");
fprintf(f, " -no-graph use ACII character for border of table and menu\n");
+#if 1 /* pager requires -s */
+ fprintf(f, " -s squeeze multiple blank lines\n");
+#else
fprintf(f, " -S squeeze multiple blank lines\n");
- fprintf(f, " -W toggle wrap search mode\n");
+#endif
+ fprintf(f, " -W toggle search wrap mode\n");
fprintf(f, " -X don't use termcap init/deinit\n");
fprintf(f,
" -title[=TERM] set buffer name to terminal title string\n");
@@ -372,6 +384,13 @@ make_optional_header_string(char *s)
return hs;
}
+static void *
+die_oom(size_t bytes)
+{
+ fprintf(stderr, "Out of memory: %lu bytes unavailable!\n", (unsigned long)bytes);
+ exit(1);
+}
+
int
main(int argc, char **argv, char **envp)
{
@@ -397,7 +416,15 @@ main(int argc, char **argv, char **envp)
wc_ces CodePage;
#endif
#endif
+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
+ char **getimage_args = NULL;
+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
GC_INIT();
+#if (GC_VERSION_MAJOR>7) || ((GC_VERSION_MAJOR==7) && (GC_VERSION_MINOR>=2))
+ GC_set_oom_fn(die_oom);
+#else
+ GC_oom_fn = die_oom;
+#endif
#if defined(ENABLE_NLS) || (defined(USE_M17N) && defined(HAVE_LANGINFO_CODESET))
setlocale(LC_ALL, "");
#endif
@@ -418,6 +445,10 @@ main(int argc, char **argv, char **envp)
CurrentDir = currentdir();
CurrentPid = (int)getpid();
+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
+ if (argv[0] && *argv[0])
+ MyProgramName = argv[0];
+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
BookmarkFile = NULL;
config_file = NULL;
@@ -530,12 +561,14 @@ main(int argc, char **argv, char **envp)
PagerMax = atoi(argv[i]);
}
#ifdef USE_M17N
+#if 0 /* use -O{s|j|e} instead */
else if (!strcmp("-s", argv[i]))
DisplayCharset = WC_CES_SHIFT_JIS;
else if (!strcmp("-j", argv[i]))
DisplayCharset = WC_CES_ISO_2022_JP;
else if (!strcmp("-e", argv[i]))
DisplayCharset = WC_CES_EUC_JP;
+#endif
else if (!strncmp("-I", argv[i], 2)) {
if (argv[i][2] != '\0')
p = argv[i] + 2;
@@ -660,6 +693,12 @@ main(int argc, char **argv, char **envp)
}
}
#endif
+ else if (!strcmp("-ri", argv[i])) {
+ enable_inline_image = 1;
+ }
+ else if (!strcmp("-sixel", argv[i])) {
+ enable_inline_image = 2;
+ }
else if (!strcmp("-num", argv[i]))
showLineNum = TRUE;
else if (!strcmp("-no-proxy", argv[i]))
@@ -703,7 +742,11 @@ main(int argc, char **argv, char **envp)
accept_cookie = TRUE;
}
#endif /* USE_COOKIE */
+#if 1 /* pager requires -s */
+ else if (!strcmp("-s", argv[i]))
+#else
else if (!strcmp("-S", argv[i]))
+#endif
squeezeBlankLine = TRUE;
else if (!strcmp("-X", argv[i]))
Do_not_use_ti_te = TRUE;
@@ -735,6 +778,15 @@ main(int argc, char **argv, char **envp)
else if (!strcmp("-reqlog",argv[i])) {
w3m_reqlog=rcFile("request.log");
}
+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
+ else if (!strcmp("-$$getimage", argv[i])) {
+ ++i;
+ getimage_args = argv + i;
+ i += 4;
+ if (i > argc)
+ usage();
+ }
+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
else {
usage();
}
@@ -823,6 +875,30 @@ main(int argc, char **argv, char **envp)
if (w3m_backend)
backend();
+#if defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE)
+ if (getimage_args) {
+ char *image_url = conv_from_system(getimage_args[0]);
+ char *base_url = conv_from_system(getimage_args[1]);
+ ParsedURL base_pu;
+
+ parseURL2(base_url, &base_pu, NULL);
+ image_source = getimage_args[2];
+ newbuf = loadGeneralFile(image_url, &base_pu, NULL, 0, NULL);
+ if (!newbuf || !newbuf->real_type ||
+ strncasecmp(newbuf->real_type, "image/", 6))
+ unlink(getimage_args[2]);
+#if defined(HAVE_SYMLINK) && defined(HAVE_LSTAT)
+ symlink(getimage_args[2], getimage_args[3]);
+#else
+ {
+ FILE *f = fopen(getimage_args[3], "w");
+ if (f)
+ fclose(f);
+ }
+#endif
+ w3m_exit(0);
+ }
+#endif /* defined(DONT_CALL_GC_AFTER_FORK) && defined(USE_IMAGE) */
if (w3m_dump)
mySignal(SIGINT, SIG_IGN);
@@ -833,7 +909,12 @@ main(int argc, char **argv, char **envp)
mySignal(SIGPIPE, SigPipe);
#endif
+#if (GC_VERSION_MAJOR>7) || ((GC_VERSION_MAJOR==7) && (GC_VERSION_MINOR>=2))
+ orig_GC_warn_proc = GC_get_warn_proc();
+ GC_set_warn_proc(wrap_GC_warn_proc);
+#else
orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc);
+#endif
err_msg = Strnew();
if (load_argc == 0) {
/* no URL specified */
@@ -894,12 +975,17 @@ main(int argc, char **argv, char **envp)
if (i >= 0) {
SearchHeader = search_header;
DefaultType = default_type;
+ char *url;
+
+ url = load_argv[i];
+ if (getURLScheme(&url) == SCM_MISSING && !ArgvIsURL)
+ url = file_to_url(load_argv[i]);
+ else
+ url = url_encode(conv_from_system(load_argv[i]), NULL, 0);
if (w3m_dump == DUMP_HEAD) {
request = New(FormList);
request->method = FORM_METHOD_HEAD;
- newbuf =
- loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0,
- request);
+ newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request);
}
else {
if (post_file && i == 0) {
@@ -928,9 +1014,7 @@ main(int argc, char **argv, char **envp)
else {
request = NULL;
}
- newbuf =
- loadGeneralFile(load_argv[i], NULL, NO_REFERER, 0,
- request);
+ newbuf = loadGeneralFile(url, NULL, NO_REFERER, 0, request);
}
if (newbuf == NULL) {
/* FIXME: gettextize? */
@@ -945,7 +1029,7 @@ main(int argc, char **argv, char **envp)
break;
case SCM_LOCAL:
case SCM_LOCAL_CGI:
- unshiftHist(LoadHist, conv_from_system(load_argv[i]));
+ unshiftHist(LoadHist, url);
default:
pushHashHist(URLHist, parsedURL2Str(&newbuf->currentURL)->ptr);
break;
@@ -1183,13 +1267,13 @@ static void
dump_source(Buffer *buf)
{
FILE *f;
- char c;
+ int c;
if (buf->sourcefile == NULL)
return;
f = fopen(buf->sourcefile, "r");
if (f == NULL)
return;
- while (c = fgetc(f), !feof(f)) {
+ while ((c = fgetc(f)) != EOF) {
putchar(c);
}
fclose(f);
@@ -1246,6 +1330,12 @@ dump_extra(Buffer *buf)
#endif
}
+static int
+cmp_anchor_hseq(const void *a, const void *b)
+{
+ return (*((const Anchor **) a))->hseq - (*((const Anchor **) b))->hseq;
+}
+
static void
do_dump(Buffer *buf)
{
@@ -1266,18 +1356,20 @@ do_dump(Buffer *buf)
int i;
saveBuffer(buf, stdout, FALSE);
if (displayLinkNumber && buf->href) {
+ int nanchor = buf->href->nanchor;
printf("\nReferences:\n\n");
- for (i = 0; i < buf->href->nanchor; i++) {
- ParsedURL pu;
- static Str s = NULL;
- if (buf->href->anchors[i].slave)
+ Anchor **in_order = New_N(Anchor *, buf->href->nanchor);
+ for (i = 0; i < nanchor; i++)
+ in_order[i] = buf->href->anchors + i;
+ qsort(in_order, nanchor, sizeof(Anchor *), cmp_anchor_hseq);
+ for (i = 0; i < nanchor; i++) {
+ ParsedURL pu;
+ char *url;
+ if (in_order[i]->slave)
continue;
- parseURL2(buf->href->anchors[i].url, &pu, baseURL(buf));
- s = parsedURL2Str(&pu);
- if (DecodeURL)
- s = Strnew_charp(url_unquote_conv
- (s->ptr, Currentbuf->document_charset));
- printf("[%d] %s\n", buf->href->anchors[i].hseq + 1, s->ptr);
+ parseURL2(in_order[i]->url, &pu, baseURL(buf));
+ url = url_decode2(parsedURL2Str(&pu)->ptr, Currentbuf);
+ printf("[%d] %s\n", in_order[i]->hseq + 1, url);
}
}
}
@@ -1566,6 +1658,18 @@ DEFUN(pgBack, PREV_PAGE, "Move to previous page")
* (Currentbuf->LINES - 1)), prec_num ? B_SCROLL : B_NORMAL);
}
+/* Move half page forward */
+DEFUN(hpgFore, NEXT_HALF_PAGE, "Scroll down half page")
+{
+ nscroll(searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL);
+}
+
+/* Move half page backward */
+DEFUN(hpgBack, PREV_HALF_PAGE, "Scroll up half page")
+{
+ nscroll(-searchKeyNum() * (Currentbuf->LINES / 2 - 1), B_NORMAL);
+}
+
/* 1 line up */
DEFUN(lup1, UP, "Scroll up one line")
{
@@ -1844,6 +1948,10 @@ srch_nxtprv(int reverse)
result = srchcore(SearchString, routine[reverse]);
if (result & SR_FOUND)
clear_mark(Currentbuf->currentLine);
+ else {
+ if (reverse == 0)
+ Currentbuf->pos -= 1;
+ }
displayBuffer(Currentbuf, B_NORMAL);
disp_srchresult(result, (reverse ? "Backward: " : "Forward: "),
SearchString);
@@ -2261,7 +2369,7 @@ DEFUN(movR1, MOVE_RIGHT1,
static wc_uint32
getChar(char *p)
{
- return wc_any_to_ucs(wtf_parse1(&p));
+ return wc_any_to_ucs(wtf_parse1((wc_uchar **)&p));
}
static int
@@ -2502,7 +2610,7 @@ DEFUN(selBuf, SELECT, "Go to buffer selection panel")
}
/* Suspend (on BSD), or run interactive shell (on SysV) */
-DEFUN(susp, INTERRUPT SUSPEND, "Stop loading document")
+DEFUN(susp, INTERRUPT SUSPEND, "Suspend w3m")
{
#ifndef SIGSTOP
char *shell;
@@ -2804,12 +2912,15 @@ loadLink(char *url, char *target, char *referer, FormList *request)
union frameset_element *f_element = NULL;
int flag = 0;
ParsedURL *base, pu;
+ const int *no_referer_ptr;
message(Sprintf("loading %s", url)->ptr, 0, 0);
refresh();
+ no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL);
base = baseURL(Currentbuf);
- if (base == NULL ||
+ if ((no_referer_ptr && *no_referer_ptr) ||
+ base == NULL ||
base->scheme == SCM_LOCAL || base->scheme == SCM_LOCAL_CGI)
referer = NO_REFERER;
if (referer == NULL)
@@ -2830,7 +2941,7 @@ loadLink(char *url, char *target, char *referer, FormList *request)
if (!on_target) /* open link as an indivisual page */
return loadNormalBuf(buf, TRUE);
- if (do_download) /* download (thus no need to render frame) */
+ if (do_download) /* download (thus no need to render frames) */
return loadNormalBuf(buf, FALSE);
if (target == NULL || /* no target specified (that means this page is not a frame page) */
@@ -2959,9 +3070,8 @@ handleMailto(char *url)
}
/* follow HREF link */
-DEFUN(followA, GOTO_LINK, "Go to current link")
+DEFUN(followA, GOTO_LINK, "Follow current link")
{
- Line *l;
Anchor *a;
ParsedURL u;
#ifdef USE_IMAGE
@@ -2971,7 +3081,6 @@ DEFUN(followA, GOTO_LINK, "Go to current link")
if (Currentbuf->firstLine == NULL)
return;
- l = Currentbuf->currentLine;
#ifdef USE_IMAGE
a = retrieveCurrentImg(Currentbuf);
@@ -3053,13 +3162,11 @@ bufferA(void)
/* view inline image */
DEFUN(followI, VIEW_IMAGE, "View image")
{
- Line *l;
Anchor *a;
Buffer *buf;
if (Currentbuf->firstLine == NULL)
return;
- l = Currentbuf->currentLine;
a = retrieveCurrentImg(Currentbuf);
if (a == NULL)
@@ -3309,7 +3416,6 @@ followForm(void)
static void
_followForm(int submit)
{
- Line *l;
Anchor *a, *a2;
char *p;
FormItemList *fi, *f2;
@@ -3318,7 +3424,6 @@ _followForm(int submit)
if (Currentbuf->firstLine == NULL)
return;
- l = Currentbuf->currentLine;
a = retrieveCurrentForm(Currentbuf);
if (a == NULL)
@@ -3423,7 +3528,6 @@ _followForm(int submit)
case FORM_INPUT_BUTTON:
do_submit:
tmp = Strnew();
- tmp2 = Strnew();
multipart = (fi->parent->method == FORM_METHOD_POST &&
fi->parent->enctype == FORM_ENCTYPE_MULTIPART);
query_from_followform(&tmp, fi, multipart);
@@ -3568,6 +3672,33 @@ DEFUN(lastA, LINK_END, "Go to the last link")
displayBuffer(Currentbuf, B_NORMAL);
}
+/* go to the nth anchor */
+DEFUN(nthA, LINK_N, "Go to the nth link")
+{
+ HmarkerList *hl = Currentbuf->hmarklist;
+ BufferPoint *po;
+ Anchor *an;
+
+ int n = searchKeyNum();
+ if (n < 0 || n > hl->nmark) return;
+
+ if (Currentbuf->firstLine == NULL)
+ return;
+ if (!hl || hl->nmark == 0)
+ return;
+
+ po = hl->marks + n-1;
+ an = retrieveAnchor(Currentbuf->href, po->line, po->pos);
+ if (an == NULL)
+ an = retrieveAnchor(Currentbuf->formitem, po->line, po->pos);
+ if (an == NULL) return;
+
+ gotoLine(Currentbuf, po->line);
+ Currentbuf->pos = po->pos;
+ arrangeCursor(Currentbuf);
+ displayBuffer(Currentbuf, B_NORMAL);
+}
+
/* go to the next anchor */
DEFUN(nextA, NEXT_LINK, "Move to next link")
{
@@ -3863,37 +3994,37 @@ nextY(int d)
}
/* go to the next left anchor */
-DEFUN(nextL, NEXT_LEFT, "Move to next left link")
+DEFUN(nextL, NEXT_LEFT, "Move left to next link")
{
nextX(-1, 0);
}
/* go to the next left-up anchor */
-DEFUN(nextLU, NEXT_LEFT_UP, "Move to next left (or upward) link")
+DEFUN(nextLU, NEXT_LEFT_UP, "Move left (or upward) to next link")
{
nextX(-1, -1);
}
/* go to the next right anchor */
-DEFUN(nextR, NEXT_RIGHT, "Move to next right link")
+DEFUN(nextR, NEXT_RIGHT, "Move right to next link")
{
nextX(1, 0);
}
/* go to the next right-down anchor */
-DEFUN(nextRD, NEXT_RIGHT_DOWN, "Move to next right (or downward) link")
+DEFUN(nextRD, NEXT_RIGHT_DOWN, "Move right (or downward) to next link")
{
nextX(1, 1);
}
/* go to the next downward anchor */
-DEFUN(nextD, NEXT_DOWN, "Move to next downward link")
+DEFUN(nextD, NEXT_DOWN, "Move downward to next link")
{
nextY(1);
}
/* go to the next upward anchor */
-DEFUN(nextU, NEXT_UP, "Move to next upward link")
+DEFUN(nextU, NEXT_UP, "Move upward to next link")
{
nextY(-1);
}
@@ -4055,6 +4186,7 @@ goURL0(char *prompt, int relative)
char *url, *referer;
ParsedURL p_url, *current;
Buffer *cur_buf = Currentbuf;
+ const int *no_referer_ptr;
url = searchKeyData();
if (url == NULL) {
@@ -4064,11 +4196,8 @@ goURL0(char *prompt, int relative)
current = baseURL(Currentbuf);
if (current) {
char *c_url = parsedURL2Str(current)->ptr;
- if (DefaultURLString == DEFAULT_URL_CURRENT) {
- url = c_url;
- if (DecodeURL)
- url = url_unquote_conv(url, 0);
- }
+ if (DefaultURLString == DEFAULT_URL_CURRENT)
+ url = url_decode2(c_url, NULL);
else
pushHist(hist, c_url);
}
@@ -4077,11 +4206,8 @@ goURL0(char *prompt, int relative)
char *a_url;
parseURL2(a->url, &p_url, current);
a_url = parsedURL2Str(&p_url)->ptr;
- if (DefaultURLString == DEFAULT_URL_LINK) {
- url = a_url;
- if (DecodeURL)
- url = url_unquote_conv(url, Currentbuf->document_charset);
- }
+ if (DefaultURLString == DEFAULT_URL_LINK)
+ url = url_decode2(a_url, Currentbuf);
else
pushHist(hist, a_url);
}
@@ -4089,15 +4215,22 @@ goURL0(char *prompt, int relative)
if (url != NULL)
SKIP_BLANKS(url);
}
-#ifdef USE_M17N
- if (url != NULL) {
- if ((relative || *url == '#') && Currentbuf->document_charset)
- url = wc_conv_strict(url, InnerCharset,
- Currentbuf->document_charset)->ptr;
+ if (relative) {
+ no_referer_ptr = query_SCONF_NO_REFERER_FROM(&Currentbuf->currentURL);
+ current = baseURL(Currentbuf);
+ if ((no_referer_ptr && *no_referer_ptr) ||
+ current == NULL ||
+ current->scheme == SCM_LOCAL || current->scheme == SCM_LOCAL_CGI)
+ referer = NO_REFERER;
else
- url = conv_to_system(url);
+ referer = parsedURL2Str(&Currentbuf->currentURL)->ptr;
+ url = url_encode(url, current, Currentbuf->document_charset);
+ }
+ else {
+ current = NULL;
+ referer = NULL;
+ url = url_encode(url, NULL, 0);
}
-#endif
if (url == NULL || *url == '\0') {
displayBuffer(Currentbuf, B_FORCE_REDRAW);
return;
@@ -4106,14 +4239,6 @@ goURL0(char *prompt, int relative)
gotoLabel(url + 1);
return;
}
- if (relative) {
- current = baseURL(Currentbuf);
- referer = parsedURL2Str(&Currentbuf->currentURL)->ptr;
- }
- else {
- current = NULL;
- referer = NULL;
- }
parseURL2(url, &p_url, current);
pushHashHist(URLHist, parsedURL2Str(&p_url)->ptr);
cmd_loadURL(url, current, referer, NULL);
@@ -4151,14 +4276,14 @@ cmd_loadBuffer(Buffer *buf, int prop, int linkid)
}
/* load bookmark */
-DEFUN(ldBmark, BOOKMARK VIEW_BOOKMARK, "Read bookmark")
+DEFUN(ldBmark, BOOKMARK VIEW_BOOKMARK, "View bookmarks")
{
cmd_loadURL(BookmarkFile, NULL, NO_REFERER, NULL);
}
/* Add current to bookmark */
-DEFUN(adBmark, ADD_BOOKMARK, "Add current page to bookmark")
+DEFUN(adBmark, ADD_BOOKMARK, "Add current page to bookmarks")
{
Str tmp;
FormList *request;
@@ -4188,7 +4313,7 @@ DEFUN(adBmark, ADD_BOOKMARK, "Add current page to bookmark")
}
/* option setting */
-DEFUN(ldOpt, OPTIONS, "Option setting panel")
+DEFUN(ldOpt, OPTIONS, "Display option setting panel")
{
cmd_loadBuffer(load_option_panel(), BP_NO_URL, LB_NOLINK);
}
@@ -4291,7 +4416,7 @@ follow_map(struct parsed_tagarg *arg)
#ifdef USE_MENU
/* link menu */
-DEFUN(linkMn, LINK_MENU, "Popup link element menu")
+DEFUN(linkMn, LINK_MENU, "Pop up link element menu")
{
LinkList *l = link_menu(Currentbuf);
ParsedURL p_url;
@@ -4329,19 +4454,19 @@ anchorMn(Anchor *(*menu_func) (Buffer *), int go)
}
/* accesskey */
-DEFUN(accessKey, ACCESSKEY, "Popup acceskey menu")
+DEFUN(accessKey, ACCESSKEY, "Pop up accesskey menu")
{
anchorMn(accesskey_menu, TRUE);
}
/* list menu */
-DEFUN(listMn, LIST_MENU, "Popup link list menu and go to selected link")
+DEFUN(listMn, LIST_MENU, "Pop up link list menu and go to selected link")
{
anchorMn(list_menu, TRUE);
}
DEFUN(movlistMn, MOVE_LIST_MENU,
- "Popup link list menu and move cursor to selected link")
+ "Pop up link list menu and move cursor to selected link")
{
anchorMn(list_menu, FALSE);
}
@@ -4375,7 +4500,7 @@ DEFUN(cooLst, COOKIE, "View cookie list")
#ifdef USE_HISTORY
/* History page */
-DEFUN(ldHist, HISTORY, "View history of URL")
+DEFUN(ldHist, HISTORY, "View browser history")
{
cmd_loadBuffer(historyBuffer(URLHist), BP_NO_URL, LB_NOLINK);
}
@@ -4449,7 +4574,7 @@ DEFUN(svBuf, PRINT SAVE_SCREEN, "Save rendered document to file")
}
/* save source */
-DEFUN(svSrc, DOWNLOAD SAVE, "Save document source to file")
+DEFUN(svSrc, DOWNLOAD SAVE, "Save document (source) to file")
{
char *file;
@@ -4510,8 +4635,7 @@ _peekURL(int only_img)
s = parsedURL2Str(&pu);
}
if (DecodeURL)
- s = Strnew_charp(url_unquote_conv
- (s->ptr, Currentbuf->document_charset));
+ s = Strnew_charp(url_decode2(s->ptr, Currentbuf));
#ifdef USE_M17N
s = checkType(s, &pp, NULL);
p = NewAtom_N(Lineprop, s->length);
@@ -4529,13 +4653,13 @@ _peekURL(int only_img)
}
/* peek URL */
-DEFUN(peekURL, PEEK_LINK, "Peek link URL")
+DEFUN(peekURL, PEEK_LINK, "Peek at link URL")
{
_peekURL(0);
}
/* peek URL of image */
-DEFUN(peekIMG, PEEK_IMG, "Peek image URL")
+DEFUN(peekIMG, PEEK_IMG, "Peek at image URL")
{
_peekURL(1);
}
@@ -4549,7 +4673,7 @@ currentURL(void)
return parsedURL2Str(&Currentbuf->currentURL);
}
-DEFUN(curURL, PEEK, "Peek current URL")
+DEFUN(curURL, PEEK, "Peek at current URL")
{
static Str s = NULL;
#ifdef USE_M17N
@@ -4570,7 +4694,7 @@ DEFUN(curURL, PEEK, "Peek current URL")
offset = 0;
s = currentURL();
if (DecodeURL)
- s = Strnew_charp(url_unquote_conv(s->ptr, 0));
+ s = Strnew_charp(url_decode2(s->ptr, NULL));
#ifdef USE_M17N
s = checkType(s, &pp, NULL);
p = NewAtom_N(Lineprop, s->length);
@@ -4915,13 +5039,13 @@ chkURLBuffer(Buffer *buf)
buf->check_url |= CHK_URL;
}
-DEFUN(chkURL, MARK_URL, "Mark URL-like strings as anchors")
+DEFUN(chkURL, MARK_URL, "Mark URL-like strings as links")
{
chkURLBuffer(Currentbuf);
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
-DEFUN(chkWORD, MARK_WORD, "Mark current word as anchor")
+DEFUN(chkWORD, MARK_WORD, "Mark current word as link")
{
char *p;
int spos, epos;
@@ -4948,15 +5072,15 @@ chkNMIDBuffer(Buffer *buf)
buf->check_url |= CHK_NMID;
}
-DEFUN(chkNMID, MARK_MID, "Mark Message-ID-like strings as anchors")
+DEFUN(chkNMID, MARK_MID, "Mark Message-ID-like strings as links")
{
chkNMIDBuffer(Currentbuf);
displayBuffer(Currentbuf, B_FORCE_REDRAW);
}
#endif /* USE_NNTP */
-/* render frame */
-DEFUN(rFrame, FRAME, "Render frame")
+/* render frames */
+DEFUN(rFrame, FRAME, "Render frames")
{
Buffer *buf;
@@ -5010,6 +5134,24 @@ invoke_browser(char *url)
case 3:
browser = ExtBrowser3;
break;
+ case 4:
+ browser = ExtBrowser4;
+ break;
+ case 5:
+ browser = ExtBrowser5;
+ break;
+ case 6:
+ browser = ExtBrowser6;
+ break;
+ case 7:
+ browser = ExtBrowser7;
+ break;
+ case 8:
+ browser = ExtBrowser8;
+ break;
+ case 9:
+ browser = ExtBrowser9;
+ break;
}
if (browser == NULL || *browser == '\0') {
browser = inputStr("Browse command: ", NULL);
@@ -5362,7 +5504,7 @@ process_mouse(int btn, int x, int y)
}
}
-DEFUN(msToggle, MOUSE_TOGGLE, "Toggle activity of mouse")
+DEFUN(msToggle, MOUSE_TOGGLE, "Toggle mouse support")
{
if (use_mouse) {
use_mouse = FALSE;
@@ -5398,6 +5540,60 @@ DEFUN(mouse, MOUSE, "mouse operation")
process_mouse(btn, x, y);
}
+DEFUN(sgrmouse, SGRMOUSE, "SGR 1006 mouse operation")
+{
+ int btn = 0, x = 0, y = 0;
+ unsigned char c;
+
+ do {
+ c = getch();
+ if (IS_DIGIT(c))
+ btn = btn * 10 + c - '0';
+ else if (c == ';')
+ break;
+ else
+ return;
+ } while (1);
+
+#if defined(__CYGWIN__) && CYGWIN_VERSION_DLL_MAJOR < 1005
+ if (cygwin_mouse_btn_swapped) {
+ if (btn == MOUSE_BTN2_DOWN)
+ btn = MOUSE_BTN3_DOWN;
+ else if (btn == MOUSE_BTN3_DOWN)
+ btn = MOUSE_BTN2_DOWN;
+ };
+#endif
+
+ do {
+ c = getch();
+ if (IS_DIGIT(c))
+ x = x * 10 + c - '0';
+ else if (c == ';')
+ break;
+ else
+ return;
+ } while (1);
+ if (x>0) x--;
+
+ do {
+ c = getch();
+ if (IS_DIGIT(c))
+ y = y * 10 + c - '0';
+ else if (c == 'M')
+ break;
+ else if (c == 'm') {
+ btn |= 3;
+ break;
+ } else
+ return;
+ } while (1);
+ if (y>0) y--;
+
+ if (x < 0 || x >= COLS || y < 0 || y > LASTLINE)
+ return;
+ process_mouse(btn, x, y);
+}
+
#ifdef USE_GPM
int
gpm_process_mouse(Gpm_Event * event, void *data)
@@ -5473,7 +5669,7 @@ DEFUN(movMs, MOVE_MOUSE, "Move cursor to mouse cursor (for mouse action)")
#define FRAME_WIDTH 1
#endif
-DEFUN(menuMs, MENU_MOUSE, "Popup menu at mouse cursor (for mouse action)")
+DEFUN(menuMs, MENU_MOUSE, "Pop up menu at mouse cursor (for mouse action)")
{
if (!mouse_action.in_action)
return;
@@ -5523,7 +5719,7 @@ DEFUN(dispVer, VERSION, "Display version of w3m")
disp_message(Sprintf("w3m version %s", w3m_version)->ptr, TRUE);
}
-DEFUN(wrapToggle, WRAP_TOGGLE, "Toggle wrap search mode")
+DEFUN(wrapToggle, WRAP_TOGGLE, "Toggle search wrap mode")
{
if (WrapSearch) {
WrapSearch = FALSE;
@@ -5604,7 +5800,7 @@ execdict(char *word)
disp_message("Execution failed", TRUE);
return;
}
- else {
+ else if (buf != NO_BUFFER) {
buf->filename = w;
buf->buffername = Sprintf("%s %s", DICTBUFFERNAME, word)->ptr;
if (buf->type == NULL)
@@ -5671,7 +5867,7 @@ set_buffer_environ(Buffer *buf)
set_environ("W3M_CURRENT_FORM", form2str((FormItemList *)a->url));
else
set_environ("W3M_CURRENT_FORM", "");
- set_environ("W3M_CURRENT_LINE", Sprintf("%d",
+ set_environ("W3M_CURRENT_LINE", Sprintf("%ld",
l->real_linenumber)->ptr);
set_environ("W3M_CURRENT_COLUMN", Sprintf("%d",
buf->currentColumn +
@@ -5747,8 +5943,14 @@ deleteFiles()
Firstbuf = buf;
}
}
- while ((f = popText(fileToDelete)) != NULL)
+ while ((f = popText(fileToDelete)) != NULL) {
unlink(f);
+ if (enable_inline_image == 2 && strcmp(f+strlen(f)-4, ".gif") == 0) {
+ Str firstframe = Strnew_charp(f);
+ Strcat_charp(firstframe, "-1");
+ unlink(firstframe->ptr);
+ }
+ }
}
void
@@ -5970,7 +6172,7 @@ DEFUN(reinit, REINIT, "Reload configuration files")
}
DEFUN(defKey, DEFINE_KEY,
- "Define a binding between a key stroke and a user command")
+ "Define a binding between a keystroke and a user command")
{
char *data;
diff --git a/map.c b/map.c
index 90aa35a..bb240ea 100644
--- a/map.c
+++ b/map.c
@@ -279,7 +279,7 @@ follow_map_panel(Buffer *buf, char *name)
p = parsedURL2Str(&pu)->ptr;
q = html_quote(p);
if (DecodeURL)
- p = html_quote(url_unquote_conv(p, buf->document_charset));
+ p = html_quote(url_decode2(p, buf));
else
p = q;
Strcat_m_charp(mappage, "<tr valign=top><td><a href=\"", q, "\">",
@@ -417,10 +417,7 @@ append_map_info(Buffer *buf, Str tmp, FormItemList *fi)
continue;
parseURL2(a->url, &pu, baseURL(buf));
q = html_quote(parsedURL2Str(&pu)->ptr);
- if (DecodeURL)
- p = html_quote(url_unquote_conv(a->url, buf->document_charset));
- else
- p = html_quote(a->url);
+ p = html_quote(url_decode2(a->url, buf));
Strcat_m_charp(tmp, "<tr valign=top><td> <td><a href=\"",
q, "\">",
html_quote(*a->alt ? a->alt : mybasename(a->url)),
@@ -457,10 +454,8 @@ append_link_info(Buffer *buf, Str html, LinkList * link)
Strcat_charp(html, "[Rev]");
if (!l->url)
url = "(empty)";
- else if (DecodeURL)
- url = html_quote(url_unquote_conv(l->url, buf->document_charset));
else
- url = html_quote(l->url);
+ url = html_quote(url_decode2(l->url, buf));
Strcat_m_charp(html, "<td>", url, NULL);
if (l->ctype)
Strcat_m_charp(html, " (", html_quote(l->ctype), ")", NULL);
@@ -498,8 +493,7 @@ append_frame_info(Buffer *buf, Str html, struct frameset *set, int level)
Strcat_charp(html, p);
}
if (DecodeURL)
- p = html_quote(url_unquote_conv(frame.body->url,
- buf->document_charset));
+ p = html_quote(url_decode2(frame.body->url, buf));
else
p = q;
Strcat_m_charp(html, " ", p, "</a></pre_int><br>\n", NULL);
@@ -550,9 +544,7 @@ page_info_panel(Buffer *buf)
#ifdef USE_M17N
Strcat_charp(tmp, "<form method=internal action=charset>");
#endif
- p = parsedURL2Str(&buf->currentURL)->ptr;
- if (DecodeURL)
- p = url_unquote_conv(p, 0);
+ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
Strcat_m_charp(tmp, "<table cellpadding=0>",
"<tr valign=top><td nowrap>Title<td>",
html_quote(buf->buffername),
@@ -581,7 +573,7 @@ page_info_panel(Buffer *buf)
"<tr valign=top><td nowrap>Number of lines<td>",
Sprintf("%d", all)->ptr,
"<tr valign=top><td nowrap>Transferred bytes<td>",
- Sprintf("%d", buf->trbyte)->ptr, NULL);
+ Sprintf("%lu", (unsigned long)buf->trbyte)->ptr, NULL);
a = retrieveCurrentAnchor(buf);
if (a != NULL) {
@@ -589,7 +581,7 @@ page_info_panel(Buffer *buf)
p = parsedURL2Str(&pu)->ptr;
q = html_quote(p);
if (DecodeURL)
- p = html_quote(url_unquote_conv(p, buf->document_charset));
+ p = html_quote(url_decode2(p, buf));
else
p = q;
Strcat_m_charp(tmp,
@@ -602,7 +594,7 @@ page_info_panel(Buffer *buf)
p = parsedURL2Str(&pu)->ptr;
q = html_quote(p);
if (DecodeURL)
- p = html_quote(url_unquote_conv(p, buf->document_charset));
+ p = html_quote(url_decode2(p, buf));
else
p = q;
Strcat_m_charp(tmp,
@@ -613,10 +605,7 @@ page_info_panel(Buffer *buf)
if (a != NULL) {
FormItemList *fi = (FormItemList *)a->url;
p = form2str(fi);
- if (DecodeURL)
- p = html_quote(url_unquote_conv(p, buf->document_charset));
- else
- p = html_quote(p);
+ p = html_quote(url_decode2(p, buf));
Strcat_m_charp(tmp,
"<tr valign=top><td nowrap>Method/type of current form <td>",
p, NULL);
diff --git a/matrix.c b/matrix.c
index 64fd0ad..bc7a5be 100644
--- a/matrix.c
+++ b/matrix.c
@@ -34,18 +34,12 @@
#include "config.h"
#include "matrix.h"
-#include <gc.h>
+#include "alloc.h"
/*
* Macros from "fm.h".
*/
-#define New(type) ((type*)GC_MALLOC(sizeof(type)))
-#define NewAtom(type) ((type*)GC_MALLOC_ATOMIC(sizeof(type)))
-#define New_N(type,n) ((type*)GC_MALLOC((n)*sizeof(type)))
-#define NewAtom_N(type,n) ((type*)GC_MALLOC_ATOMIC((n)*sizeof(type)))
-#define Renew_N(type,ptr,n) ((type*)GC_REALLOC((ptr),(n)*sizeof(type)))
-
#define SWAPD(a,b) { double tmp = a; a = b; b = tmp; }
#define SWAPI(a,b) { int tmp = a; a = b; b = tmp; }
diff --git a/menu.c b/menu.c
index 774b1bd..dfbeabe 100644
--- a/menu.c
+++ b/menu.c
@@ -57,6 +57,7 @@ static int mCancel(char c);
static int mClose(char c);
static int mSusp(char c);
static int mMouse(char c);
+static int mSgrMouse(char c);
static int mSrchF(char c);
static int mSrchB(char c);
static int mSrchN(char c);
@@ -116,15 +117,15 @@ static int (*MenuEscKeymap[128]) (char c) = {
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
-/* O */
+/* O */
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mEscB,
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
-/* [ */
+/* [ */
mNull, mNull, mNull, mEscB, mNull, mNull, mNull, mNull,
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
-/* v */
+/* v */
mNull, mNull, mNull, mNull, mNull, mNull, mPrev, mNull,
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
};
@@ -137,10 +138,11 @@ static int (*MenuEscBKeymap[128]) (char c) = {
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
- mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
-/* A B C D E */
+/* 8 9 : ; < = > ? */
+ mNull, mNull, mNull, mNull, mSgrMouse,mNull,mNull, mNull,
+/* A B C D E */
mNull, mUp, mDown, mOk, mCancel,mClose, mNull, mNull,
-/* L M */
+/* L M */
mNull, mNull, mNull, mNull, mClose, mMouse, mNull, mNull,
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
mNull, mNull, mNull, mNull, mNull, mNull, mNull, mNull,
@@ -359,7 +361,6 @@ geom_menu(Menu *menu, int x, int y, int mselect)
if (win_w > COLS) {
menu->width = COLS - 2 * FRAME_WIDTH;
menu->width -= menu->width % FRAME_WIDTH;
- win_w = menu->width + 2 * FRAME_WIDTH;
}
}
menu->x = win_x + FRAME_WIDTH;
@@ -1203,6 +1204,48 @@ mMouse(char c)
return process_mMouse(btn, x, y);
}
+static int
+mSgrMouse(char c)
+{
+ int btn = 0, x = 0, y = 0;
+ unsigned char ch;
+
+ for (ch = getch(); IS_DIGIT(ch); ch = getch())
+ btn = btn * 10 + ch - '0';
+ if (ch != ';')
+ return MENU_NOTHING;
+
+#if defined (__CYGWIN__) && CYGWIN_VERSION_DLL_MAJOR < 1005
+ if (cygwin_mouse_btn_swapped) {
+ if (btn == MOUSE_BTN2_DOWN)
+ btn = MOUSE_BTN3_DOWN;
+ else if (btn == MOUSE_BTN3_DOWN)
+ btn = MOUSE_BTN2_DOWN;
+ }
+#endif
+
+ for (ch = getch(); IS_DIGIT(ch); ch = getch())
+ x = x * 10 + ch - '0';
+ if (ch != ';')
+ return MENU_NOTHING;
+ if (x > 0)
+ x--;
+
+ for (ch = getch(); IS_DIGIT(ch); ch = getch())
+ y = y * 10 + ch - '0';
+ if (ch == 'm')
+ btn |= 3;
+ else if (ch != 'M' && ch != ';')
+ return MENU_NOTHING;
+ if (y > 0)
+ y--;
+
+ if (x < 0 || x >= COLS || y < 0 || y > LASTLINE)
+ return MENU_NOTHING;
+
+ return process_mMouse(btn, x, y);
+}
+
#ifdef USE_GPM
static int
gpm_process_menu_mouse(Gpm_Event * event, void *data)
@@ -1261,6 +1304,12 @@ mMouse(char c)
{
return (MENU_NOTHING);
}
+
+static int
+mSgrMouse(char c)
+{
+ return (MENU_NOTHING);
+}
#endif /* not USE_MOUSE */
/* --- MenuFunctions (END) --- */
@@ -1289,7 +1338,7 @@ mainMenu(int x, int y)
popupMenu(x, y, &MainMenu);
}
-DEFUN(mainMn, MAIN_MENU MENU, "Popup menu")
+DEFUN(mainMn, MAIN_MENU MENU, "Pop up menu")
{
Menu *menu = &MainMenu;
char *data;
@@ -1317,7 +1366,7 @@ DEFUN(mainMn, MAIN_MENU MENU, "Popup menu")
/* --- SelectMenu --- */
-DEFUN(selMn, SELECT_MENU, "Popup buffer selection menu")
+DEFUN(selMn, SELECT_MENU, "Pop up buffer selection menu")
{
int x = Currentbuf->cursorX + Currentbuf->rootX,
y = Currentbuf->cursorY + Currentbuf->rootY;
@@ -1365,9 +1414,7 @@ initSelectMenu(void)
break;
default:
Strcat_char(str, ' ');
- p = parsedURL2Str(&buf->currentURL)->ptr;
- if (DecodeURL)
- p = url_unquote_conv(p, 0);
+ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
Strcat_charp(str, p);
break;
}
@@ -1464,7 +1511,7 @@ smDelBuf(char c)
/* --- SelTabMenu --- */
-DEFUN(tabMn, TAB_MENU, "Popup tab selection menu")
+DEFUN(tabMn, TAB_MENU, "Pop up tab selection menu")
{
int x = Currentbuf->cursorX + Currentbuf->rootX,
y = Currentbuf->cursorY + Currentbuf->rootY;
@@ -1513,9 +1560,7 @@ initSelTabMenu(void)
case SCM_MISSING:
break;
default:
- p = parsedURL2Str(&buf->currentURL)->ptr;
- if (DecodeURL)
- p = url_unquote_conv(p, 0);
+ p = url_decode2(parsedURL2Str(&buf->currentURL)->ptr, NULL);
Strcat_charp(str, p);
break;
}
@@ -1845,10 +1890,8 @@ link_menu(Buffer *buf)
Strcat_charp(str, " ");
if (!l->url)
p = "";
- else if (DecodeURL)
- p = url_unquote_conv(l->url, buf->document_charset);
else
- p = l->url;
+ p = url_decode2(l->url, buf);
Strcat_charp(str, p);
label[i] = str->ptr;
if (len < str->length)
@@ -1913,6 +1956,7 @@ accesskey_menu(Buffer *buf)
}
label[nitem] = NULL;
+ set_menu_frame();
new_option_menu(&menu, label, &key, NULL);
menu.initial = 0;
@@ -2025,7 +2069,6 @@ list_menu(Buffer *buf)
label[nitem] = NULL;
set_menu_frame();
- set_menu_frame();
new_option_menu(&menu, label, &key, NULL);
menu.initial = 0;
diff --git a/mimehead.c b/mimehead.c
index 78997e0..d16270c 100644
--- a/mimehead.c
+++ b/mimehead.c
@@ -64,12 +64,22 @@ ha2d(char x, char y)
Str
decodeB(char **ww)
{
+ struct growbuf gb;
+
+ growbuf_init(&gb);
+ decodeB_to_growbuf(&gb, ww);
+ return growbuf_to_Str(&gb);
+}
+
+void
+decodeB_to_growbuf(struct growbuf *gb, char **ww)
+{
unsigned char c[4];
char *wp = *ww;
char d[3];
int i, n_pad;
- Str ap = Strnew_size(strlen(wp));
+ growbuf_reserve(gb, strlen(wp) + 1);
n_pad = 0;
while (1) {
for (i = 0; i < 4; i++) {
@@ -93,39 +103,50 @@ decodeB(char **ww)
for (i = 0; i < 4; i++) {
c[i] = c2e(c[i]);
if (c[i] == BAD_BASE64) {
- *ww = wp;
- return ap;
+ goto last;
}
}
d[0] = ((c[0] << 2) | (c[1] >> 4));
d[1] = ((c[1] << 4) | (c[2] >> 2));
d[2] = ((c[2] << 6) | c[3]);
for (i = 0; i < 3 - n_pad; i++) {
- Strcat_char(ap, d[i]);
+ GROWBUF_ADD_CHAR(gb, d[i]);
}
if (n_pad || *wp == '\0' || *wp == '?')
break;
}
+last:
+ growbuf_reserve(gb, gb->length + 1);
+ gb->ptr[gb->length] = '\0';
*ww = wp;
- return ap;
+ return;
}
Str
decodeU(char **ww)
{
+ struct growbuf gb;
+
+ growbuf_init(&gb);
+ decodeU_to_growbuf(&gb, ww);
+ return growbuf_to_Str(&gb);
+}
+
+void
+decodeU_to_growbuf(struct growbuf *gb, char **ww)
+{
unsigned char c1, c2;
char *w = *ww;
int n, i;
- Str a;
if (*w <= 0x20 || *w >= 0x60)
- return Strnew_size(0);
+ return;
n = *w - 0x20;
- a = Strnew_size(n);
+ growbuf_reserve(gb, n + 1);
for (w++, i = 2; *w != '\0' && n; n--) {
c1 = (w[0] - 0x20) % 0x40;
c2 = (w[1] - 0x20) % 0x40;
- Strcat_char(a, (c1 << i) | (c2 >> (6 - i)));
+ gb->ptr[gb->length++] = (c1 << i) | (c2 >> (6 - i));
if (i == 6) {
w += 2;
i = 2;
@@ -135,7 +156,8 @@ decodeU(char **ww)
i += 2;
}
}
- return a;
+ gb->ptr[gb->length] = '\0';
+ return;
}
/* RFC2047 (4.2. The "Q" encoding) */
@@ -165,9 +187,19 @@ decodeQ(char **ww)
Str
decodeQP(char **ww)
{
+ struct growbuf gb;
+
+ growbuf_init(&gb);
+ decodeQP_to_growbuf(&gb, ww);
+ return growbuf_to_Str(&gb);
+}
+
+void
+decodeQP_to_growbuf(struct growbuf *gb, char **ww)
+{
char *w = *ww;
- Str a = Strnew_size(strlen(w));
+ growbuf_reserve(gb, strlen(w) + 1);
for (; *w != '\0'; w++) {
if (*w == '=') {
w++;
@@ -180,15 +212,16 @@ decodeQP(char **ww)
else {
if (*w == '\0' || *(w + 1) == '\0')
break;
- Strcat_char(a, ha2d(*w, *(w + 1)));
+ gb->ptr[gb->length++] = ha2d(*w, *(w + 1));
w++;
}
}
else
- Strcat_char(a, *w);
+ gb->ptr[gb->length++] = *w;
}
+ gb->ptr[gb->length] = '\0';
*ww = w;
- return a;
+ return;
}
#ifdef USE_M17N
diff --git a/news.c b/news.c
index 8a1f0e8..c0494b7 100644
--- a/news.c
+++ b/news.c
@@ -76,13 +76,15 @@ news_close(News * news)
static int
news_open(News * news)
{
- int sock, status;
+ int sock, status, fd;
sock = openSocket(news->host, "nntp", news->port);
if (sock < 0)
goto open_err;
news->rf = newInputStream(sock);
- news->wf = fdopen(dup(sock), "wb");
+ if ((fd = dup(sock)) < 0)
+ goto open_err;
+ news->wf = fdopen(fd, "wb");
if (!news->rf || !news->wf)
goto open_err;
IStype(news->rf) |= IST_UNCLOSE;
diff --git a/parsetagx.c b/parsetagx.c
index 6b627d2..3435f9f 100644
--- a/parsetagx.c
+++ b/parsetagx.c
@@ -221,6 +221,7 @@ parse_tag(char **s, int internal)
int j, hidden=FALSE;
for (j=0; j<i; j++) {
if (tag->attrid[j] == ATTR_TYPE &&
+ tag->value[j] &&
strcmp("hidden",tag->value[j]) == 0) {
hidden=TRUE;
break;
diff --git a/po/LINGUAS b/po/LINGUAS
index 1489115..ddd267b 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1,2 +1,2 @@
# Set of available languages.
-ja
+ja de zh_CN zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
index 83d8838..ef8bd94 100644
--- a/po/Makefile.in.in
+++ b/po/Makefile.in.in
@@ -153,14 +153,14 @@ $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
--add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
--files-from=$(srcdir)/POTFILES.in \
- --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --copyright-holder="$(COPYRIGHT_HOLDER)" \
--msgid-bugs-address="$$msgid_bugs_address" \
;; \
*) \
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
--add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
--files-from=$(srcdir)/POTFILES.in \
- --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --copyright-holder="$(COPYRIGHT_HOLDER)" \
--package-name="$${package_gnu}@PACKAGE@" \
--package-version='@VERSION@' \
--msgid-bugs-address="$$msgid_bugs_address" \
diff --git a/po/Makevars b/po/Makevars
index 2f57810..a60a09d 100644
--- a/po/Makevars
+++ b/po/Makevars
@@ -18,7 +18,7 @@ XGETTEXT_OPTIONS = --from-code=EUC-JP --keyword=_ --keyword=N_
# or entity, or to disclaim their copyright. The empty string stands for
# the public domain; in this case the translators are expected to disclaim
# their copyright.
-COPYRIGHT_HOLDER = Fumitoshi UKAI
+COPYRIGHT_HOLDER = THE w3m'S COPYRIGHT HOLDER
# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings:
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..96489c1
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,936 @@
+# German translation of w3m
+# Copyright (C) 2014 THE w3m'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the w3m package.
+# Markus Hiereth <markus.hiereth@freenet.de>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: w3m 0.5.3\n"
+"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
+"POT-Creation-Date: 2016-03-14 19:47+0900\n"
+"PO-Revision-Date: 2016-03-14 19:51+0900\n"
+"Last-Translator: Tatsuya Kinoshita <tats@debian.org>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
+
+#: menu.c:269
+msgid " Back (b) "
+msgstr " Zurück (b) "
+
+#: menu.c:270
+msgid " Select Buffer(s) "
+msgstr " Puffer auswählen (s) "
+
+#: menu.c:272
+msgid " Select Tab (t) "
+msgstr " Reiter auswählen (t) "
+
+#: menu.c:274
+msgid " View Source (v) "
+msgstr " Codeansicht (v) "
+
+#: menu.c:275
+msgid " Edit Source (e) "
+msgstr " Code bearbeiten (e) "
+
+#: menu.c:276
+msgid " Save Source (S) "
+msgstr " Code speichern (S) "
+
+#: menu.c:277
+msgid " Reload (r) "
+msgstr " Erneut laden (r) "
+
+#: menu.c:278 menu.c:285 menu.c:289
+msgid " ---------------- "
+msgstr " ---------------------- "
+
+#: menu.c:279
+msgid " Go Link (a) "
+msgstr " Ziel öffnen.. (a) "
+
+#: menu.c:280
+msgid " on New Tab (n) "
+msgstr " ..in neuem Reiter (n) "
+
+#: menu.c:281
+msgid " Save Link (A) "
+msgstr " Ziel speichern (A) "
+
+#: menu.c:282
+msgid " View Image (i) "
+msgstr " Bild anzeigen (i) "
+
+#: menu.c:283
+msgid " Save Image (I) "
+msgstr " Bild speichern (I) "
+
+#: menu.c:284
+msgid " View Frame (f) "
+msgstr " Frames zeigen (f) "
+
+#: menu.c:286
+msgid " Bookmark (B) "
+msgstr " Lesezeichen (B) "
+
+#: menu.c:287
+msgid " Help (h) "
+msgstr " Hilfe (h) "
+
+#: menu.c:288
+msgid " Option (o) "
+msgstr " Einstellungen (o) "
+
+#: menu.c:290
+msgid " Quit (q) "
+msgstr " Programm verlassen (q) "
+
+#: rc.c:62
+msgid "External Viewer Setup"
+msgstr "Konfiguration für externe Anzeigeprogramme"
+
+#: rc.c:63
+msgid "Tab width in characters"
+msgstr "Tabulatorbreite in Zeichen"
+
+#: rc.c:64
+msgid "Indent for HTML rendering"
+msgstr "Einzug bei HTML-Darstellung"
+
+#: rc.c:65
+msgid "Number of pixels per character (4.0...32.0)"
+msgstr "Anzahl von Pixeln pro Zeichen (4.0 bis 32.0)"
+
+#: rc.c:66
+msgid "Number of pixels per line (4.0...64.0)"
+msgstr "Anzahl von Pixeln pro Zeile (4.0 bis 64.0)"
+
+# entsprechend Bescheibung aus MANUAL.html, mh 14.10.2014
+#: rc.c:67
+msgid "Number of remembered lines when used as a pager"
+msgstr "Anzahl gemerkter, über die Standardeingabe erhaltener Zeilen"
+
+#: rc.c:68
+msgid "Use URL history"
+msgstr "URL-Chronik verwenden"
+
+#: rc.c:69
+msgid "Number of remembered URL"
+msgstr "Anzahl von URLs in Chronik"
+
+#: rc.c:70
+msgid "Save URL history"
+msgstr "URL-Chronik speichern"
+
+#: rc.c:71
+msgid "Render frames automatically"
+msgstr "Frames selbstständig darstellen"
+
+#: rc.c:72
+msgid "Treat argument without scheme as URL"
+msgstr "Eingabe ohne Protokoll-Präfix als URL auffassen"
+
+#: rc.c:73
+msgid "Use _self as default target"
+msgstr "_self als Standard-Zielfenster verwenden"
+
+#: rc.c:74
+msgid "Open link on new tab if target is _blank or _new"
+msgstr ""
+"Link in neuem Reiter öffnen, falls für Zielfenster _blank oder _new "
+"definiert ist"
+
+#: rc.c:75
+msgid "Open download list panel on new tab"
+msgstr "Downloadliste in neuem Reiter öffnen"
+
+#: rc.c:76
+msgid "Display link URL automatically"
+msgstr "URL der Links selbstständig anzeigen"
+
+#: rc.c:77
+msgid "Display link numbers"
+msgstr "Linknummern anzeigen"
+
+#: rc.c:78
+msgid "Display decoded URL"
+msgstr "URL entschlüsselt anzeigen"
+
+#: rc.c:79
+msgid "Display current line number"
+msgstr "Aktuelle Zeilennummer anzeigen"
+
+#: rc.c:80
+msgid "Display inline images"
+msgstr "Eingebettete Bilder anzeigen"
+
+#: rc.c:81
+msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
+msgstr "Pseudo-ALTs zu eingebetteten Bildern ohne ALT oder TITLE anzeigen"
+
+#: rc.c:83
+msgid "Load inline images automatically"
+msgstr "Eingebettete Bilder selbstständig laden"
+
+#: rc.c:84
+msgid "Maximum processes for parallel image loading"
+msgstr "Anzahl zulässiger Prozesse zum gleichzeitigen Laden von Bildern"
+
+#: rc.c:85
+msgid "Use external image viewer"
+msgstr "Externen Bildbetrachter verwenden"
+
+#: rc.c:86
+msgid "Scale of image (%)"
+msgstr "Bilder prozentual skalieren"
+
+#: rc.c:87
+msgid "External command to display image"
+msgstr "Befehl für externen Bildbetrachter"
+
+#: rc.c:88
+msgid "Use link list of image map"
+msgstr "Bei Grafiken mit eingebetteten Links Ziele auflisten"
+
+#: rc.c:90
+msgid "Display file names in multi-column format"
+msgstr "Dateinamen auf Spalten verteilt anzeigen"
+
+#: rc.c:91
+msgid "Use ASCII equivalents to display entities"
+msgstr "ASCII-Ersatz für in HTML benannte Zeichen verwenden"
+
+#: rc.c:92
+msgid "Character type for border of table and menu"
+msgstr "Zeichen zum Einrahmen von Tabellen und Menüs"
+
+#: rc.c:93
+msgid "Display table borders, ignore value of BORDER"
+msgstr "Zeige Tabellen gerahmt, BORDER-Wert ignorieren"
+
+#: rc.c:94
+msgid "Fold lines in TEXTAREA"
+msgstr "In Eingabefeldern vom Typ TEXTAREA Texte umbrechen"
+
+#: rc.c:95
+msgid "Display INS, DEL, S and STRIKE element"
+msgstr "Umsetzung der Elemente INS, DEL, S und STRIKE"
+
+#: rc.c:96
+msgid "Display with color"
+msgstr "In Farbe anzeigen"
+
+#: rc.c:97
+msgid "Color of normal character"
+msgstr "Farbe für normalen Text"
+
+#: rc.c:98
+msgid "Color of anchor"
+msgstr "Farbe für Links / Element A"
+
+#: rc.c:99
+msgid "Color of image link"
+msgstr "Farbe für Bilder / Element IMG"
+
+#: rc.c:100
+msgid "Color of form"
+msgstr "Farbe für Eingaben / Element INPUT"
+
+#: rc.c:101
+msgid "Enable coloring of active link"
+msgstr "Aktiven Link farblich hervorheben"
+
+#: rc.c:102
+msgid "Color of currently active link"
+msgstr "Farbe des derzeit aktiven Links "
+
+#: rc.c:103
+msgid "Use visited link color"
+msgstr "Besuchte Links farblich hervorheben"
+
+#: rc.c:104
+msgid "Color of visited link"
+msgstr "Farbe für besuchte Links"
+
+#: rc.c:105
+msgid "Color of background"
+msgstr "Hintergrundfarbe"
+
+#: rc.c:106
+msgid "Color of mark"
+msgstr "Farbe für Textmarken"
+
+# msgstr "Farbe für Textmarkierungen"
+#: rc.c:107
+msgid "Use proxy"
+msgstr "Proxy verwenden"
+
+#: rc.c:108
+msgid "URL of HTTP proxy host"
+msgstr "URL des HTTP-Proxy-Hosts"
+
+#: rc.c:110
+msgid "URL of HTTPS proxy host"
+msgstr "URL des HTTPS-Proxy-Hosts"
+
+#: rc.c:113
+msgid "URL of GOPHER proxy host"
+msgstr "URL des GOPHER-Proxy-Hosts"
+
+#: rc.c:115
+msgid "URL of FTP proxy host"
+msgstr "URL des FTP-Proxy-Hosts"
+
+#: rc.c:116
+msgid "Domains to be accessed directly (no proxy)"
+msgstr "Ohne Proxy, direkt zu kontaktierende Domains"
+
+#: rc.c:117
+msgid "Check noproxy by network address"
+msgstr ""
+"Direkten Datentransfer ohne Proxy mittels Netzwerkadresse sicherstellen"
+
+#: rc.c:118
+msgid "Disable cache"
+msgstr "Zwischenspeicherung deaktivieren"
+
+#: rc.c:120
+msgid "News server"
+msgstr "News-Server"
+
+#: rc.c:121
+msgid "Mode of news server"
+msgstr "Modus des News-Servers"
+
+#: rc.c:122
+msgid "Number of news messages"
+msgstr "News-Anzahl"
+
+#: rc.c:124
+msgid "Order of name resolution"
+msgstr "Reihenfolge der Namens-Auflösung"
+
+#: rc.c:125
+msgid "Directory corresponding to / (document root)"
+msgstr "Wurzelverzeichnis für Dokumente (/)"
+
+#: rc.c:126
+msgid "Directory corresponding to /~user"
+msgstr "Pfad zum Benutzerverzeichnis (~)"
+
+#: rc.c:127
+msgid "Directory corresponding to /cgi-bin"
+msgstr "Verzeichnis für ausführbare Skripte (cgi-bin)"
+
+#: rc.c:128
+msgid "Confirm when quitting with q"
+msgstr "Das Programm erst nach Bestätigung verlassen"
+
+#: rc.c:129
+msgid "Close tab if buffer is last when back"
+msgstr "Reiter mit nur einem Puffer auf Zurück-Befehl hin schließen"
+
+#: rc.c:131
+msgid "Enable mark operations"
+msgstr "Arbeit mit Textmarken ermöglichen"
+
+# msgstr "Arbeit mit Textmarkierungen ermöglichen"
+#: rc.c:133
+msgid "Enable Emacs-style line editing"
+msgstr "Zeilen wie in Emacs bearbeiten"
+
+#: rc.c:134
+msgid "Enable vi-like numeric prefix"
+msgstr "Vorangestellte Zahlen wie in vi aktivieren"
+
+#: rc.c:135
+msgid "Move cursor to top line when going to label"
+msgstr "Labels nach Aufsuchen immer oben positionieren"
+
+#: rc.c:136
+msgid "Move cursor to top line when moving to next page"
+msgstr "Beim Umblättern Eingabemarke nach oben setzen"
+
+#: rc.c:137
+msgid "Fold lines of plain text file"
+msgstr "Zeilen in Textdateien umbrechen"
+
+#: rc.c:138
+msgid "Show line numbers"
+msgstr "Zeilennummern anzeigen"
+
+#: rc.c:139
+msgid "Show search string"
+msgstr "Suchbegriff anzeigen"
+
+#: rc.c:140
+msgid "List of mime.types files"
+msgstr "Liste der mime.types-Dateien"
+
+#: rc.c:141
+msgid "List of mailcap files"
+msgstr "Liste der mailcap-Dateien"
+
+#: rc.c:142
+msgid "List of urimethodmap files"
+msgstr "Liste von Dateien mit URI-Methode-Zuordnungen"
+
+#: rc.c:143
+msgid "Editor"
+msgstr "Editor"
+
+#: rc.c:144
+msgid "Mailer"
+msgstr "Mail-Programm"
+
+# korrespondiert mit Pulldown-Menü, daher verkürzt. mh 09.10.2014
+#: rc.c:145
+msgid "How to call Mailer for mailto URLs with options"
+msgstr "Umgang mit mailto-URLs"
+
+#: rc.c:146
+msgid "External browser"
+msgstr "Externer browser"
+
+#: rc.c:147
+msgid "2nd external browser"
+msgstr "Zweiter externer browser"
+
+#: rc.c:148
+msgid "3rd external browser"
+msgstr "Dritter externer browser"
+
+#: rc.c:149
+msgid "4th external browser"
+msgstr "Vierter externer browser"
+
+#: rc.c:150
+msgid "5th external browser"
+msgstr "Fünfter externer browser"
+
+#: rc.c:151
+msgid "6th external browser"
+msgstr "Sechster externer browser"
+
+#: rc.c:152
+msgid "7th external browser"
+msgstr "Siebter externer browser"
+
+#: rc.c:153
+msgid "8th external browser"
+msgstr "Achter externer browser"
+
+#: rc.c:154
+msgid "9th external browser"
+msgstr "Neunter externer browser"
+
+# entsprechend file:///usr/share/doc/w3m/README.passwd
+# Prüfung beanstandete auch passwd_file mit Zugriffbytes 600, mh, 05.10.2014
+#: rc.c:155
+msgid "Disable secret file security check"
+msgstr "Keine Prüfung der Sicherheit bei Dateien mit geheimem Inhalt"
+
+#: rc.c:156
+msgid "Password file"
+msgstr "Passwort-Datei"
+
+#: rc.c:157
+msgid "File for setting form on loading"
+msgstr "Datei mit vordefinierten Eingaben für Formulare"
+
+#: rc.c:158
+msgid "File for preferences for each site"
+msgstr "Datei mit adress-spezifischen Voreinstellungen"
+
+#: rc.c:159
+msgid "Password for anonymous FTP (your mail address)"
+msgstr "Passwort für anonyme FTP-Anmeldung (Ihre Mailadresse)"
+
+#: rc.c:160
+msgid "Generate domain part of password for FTP"
+msgstr "Domain-Teil des FTP-Passwortes erzeugen"
+
+#: rc.c:161
+msgid "User-Agent identification string"
+msgstr "Browserkennung übermitteln"
+
+#: rc.c:162
+msgid "Accept-Encoding header"
+msgstr "Accept-Encoding-Kopfzeile"
+
+#: rc.c:163
+msgid "Accept header"
+msgstr "Accept-Kopfzeile"
+
+#: rc.c:164
+msgid "Accept-Language header"
+msgstr "Accept-Language-Kopfzeile"
+
+#: rc.c:165
+msgid "Treat URL-like strings as links in all pages"
+msgstr "URL-artige Zeichenketten auf allen Seiten als Links auffassen"
+
+#: rc.c:166
+msgid "Wrap search"
+msgstr "Im Dokument umlaufend suchen"
+
+#: rc.c:167
+msgid "Display unseen objects (e.g. bgimage tag)"
+msgstr "Nicht gezeigte Objekte melden (z.B. Hintergrundbild)"
+
+#: rc.c:168
+msgid "Uncompress compressed data automatically when downloading"
+msgstr "Komprimierte Daten beim Download selbstständig dekomprimieren"
+
+# String nicht in Optionen-Menü gefunden. mh, 05.10.2014
+#: rc.c:170
+msgid "Run external viewer in a separate session"
+msgstr "Externe Anzeigeprogramme in eigener Sitzung laufen lassen"
+
+#: rc.c:172
+msgid "Run external viewer in the background"
+msgstr "Externe Anzeigeprogramme im Hintergrund laufen lassen"
+
+#: rc.c:174
+msgid "Use external program for directory listing"
+msgstr "Externes Programm zum Auflisten von Verzeichnissen verwenden"
+
+#: rc.c:175
+msgid "URL of directory listing command"
+msgstr "URL des Befehls zum Auflisten von Verzeichnissen"
+
+#: rc.c:177
+msgid "Enable dictionary lookup through CGI"
+msgstr "Wörterbuchabfrage mittels CGI aktivieren"
+
+#: rc.c:178
+msgid "URL of dictionary lookup command"
+msgstr "URL des Befehls zur Wörterbuch-Abfrage"
+
+#: rc.c:180
+msgid "Display link name for images lacking ALT"
+msgstr "Bei Bildern ohne ALT-Angabe Linkziel anzeigen"
+
+#: rc.c:181
+msgid "Index file for directories"
+msgstr "Indexdatei für Verzeichnisse"
+
+#: rc.c:182
+msgid "Prepend http:// to URL automatically"
+msgstr "Ziel-Eingaben gegebenenfalls http:// voranstellen"
+
+#: rc.c:183
+msgid "Default value for open-URL command"
+msgstr "Vorgabewert bei der Adresseneingabe"
+
+#: rc.c:184
+msgid "Decode Content-Transfer-Encoding when saving"
+msgstr "Beim Speichern entsprechend Content-Transfer-Encoding entschlüsseln"
+
+#: rc.c:185
+msgid "Preserve timestamp when saving"
+msgstr "Zeitstempel beim Speichern erhalten"
+
+#: rc.c:187
+msgid "Enable mouse"
+msgstr "Maus aktivieren"
+
+#: rc.c:188
+msgid "Scroll in reverse direction of mouse drag"
+msgstr "Mausbewegungen entgegengesetzt scrollen"
+
+#: rc.c:189
+msgid "Behavior of wheel scroll speed"
+msgstr "Umsetzung der Mausradbewegung"
+
+#: rc.c:190
+msgid "(A only)Scroll by # (%) of screen"
+msgstr "(nur A) Um # % des Fensters scrollen"
+
+#: rc.c:191
+msgid "(B only)Scroll by # lines"
+msgstr "(nur B) Um # Zeilen scrollen"
+
+#: rc.c:193
+msgid "Free memory of undisplayed buffers"
+msgstr "Speicherplatz nicht angezeigter Puffer freigeben"
+
+#: rc.c:194
+msgid "Suppress `Referer:' header"
+msgstr "Referer-Kopfzeile unterdrücken"
+
+#: rc.c:195
+msgid "Search case-insensitively"
+msgstr "Groß- und Kleinschreibung beim Suchen ignorieren"
+
+#: rc.c:196
+msgid "Use LESSOPEN"
+msgstr "LESSOPEN verwenden"
+
+#: rc.c:199
+msgid "Perform SSL server verification"
+msgstr "SSL-Server-Verifizierung durchführen"
+
+#: rc.c:200
+msgid "PEM encoded certificate file of client"
+msgstr "PEM-kodierte Zertifikatsdatei des Clients"
+
+#: rc.c:201
+msgid "PEM encoded private key file of client"
+msgstr "PEM-kodierte private Schlüsseldatei des Clients"
+
+#: rc.c:202
+msgid "Path to directory for PEM encoded certificates of CAs"
+msgstr "Pfad zum Verzeichnis für PEM-kodierte Zertifikate von CAs"
+
+#: rc.c:203
+msgid "File consisting of PEM encoded certificates of CAs"
+msgstr "Datei mit PEM-kodierten Zertifikaten von CAs"
+
+#: rc.c:205
+msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
+msgstr "Liste unzulässiger SSL-Verfahren (2: SSLv2, 3: SSLv3, t: TLSv1)"
+
+#: rc.c:208
+msgid "Enable cookie processing"
+msgstr "Cookie-Verarbeitung aktivieren"
+
+#: rc.c:209
+msgid "Print a message when receiving a cookie"
+msgstr "Den Empfang von Cookies melden"
+
+#: rc.c:210
+msgid "Accept cookies"
+msgstr "Cookies akzeptieren"
+
+#: rc.c:211
+msgid "Action to be taken on invalid cookie"
+msgstr "Reaktion auf ungültiges Cookie"
+
+#: rc.c:212
+msgid "Domains to reject cookies from"
+msgstr "Domains, deren Cookies abzulehnen sind"
+
+#: rc.c:213
+msgid "Domains to accept cookies from"
+msgstr "Domains, deren Cookies akzeptiert werden"
+
+# Variable vom Typ String im Abschnitt Cookies-Einstellungen, mh 10.10.2014
+#: rc.c:214
+msgid "Domains to avoid [wrong number of dots]"
+msgstr "Zu meidende Domains (falsche Anzahl von Punkten)"
+
+#: rc.c:216
+msgid "Number of redirections to follow"
+msgstr "Anzahl zu akzeptierender Umleitungen"
+
+# Konfigurationsvariable vom Typ string, mh, 05.10.2014
+#: rc.c:217
+msgid "Enable processing of meta-refresh tag"
+msgstr "Meta-Refresh-Element verarbeiten"
+
+#: rc.c:220
+msgid "Enable Migemo (Roma-ji search)"
+msgstr "Romaji-Suche mittels Migemo aktivieren"
+
+#: rc.c:221
+msgid "Migemo command"
+msgstr "Migemo-Befehl"
+
+#: rc.c:225
+msgid "Display charset"
+msgstr "Zeichenkodierung der Anzeige"
+
+#: rc.c:226
+msgid "Default document charset"
+msgstr "Zeichenkodierungs-Vorgabe für Dokumente"
+
+#: rc.c:227
+msgid "Automatic charset detect when loading"
+msgstr "Selbstständige Erkennung der Zeichenkodierung beim Laden"
+
+#: rc.c:228
+msgid "System charset"
+msgstr "Zeichenkodierung des Systems"
+
+#: rc.c:229
+msgid "System charset follows locale(LC_CTYPE)"
+msgstr "Zeichenkodierung des Systems entsprechend Locale (LC_CTYPE)"
+
+# war zuvor
+# msgstr "Halfdump mit der zur Anzeige benutzten Zeichenkodierung exportieren"
+#: rc.c:230
+msgid "Output halfdump with display charset"
+msgstr "Halfdump in der zur Anzeige benutzten Kodierung"
+
+# Konfigurationsvariable vom Typ boolean, mh, 05.10.2014
+#: rc.c:231
+msgid "Use multi column characters"
+msgstr "Spaltenübergreifende Zeichen verwenden"
+
+#: rc.c:232
+msgid "Use combining characters"
+msgstr "Kombinationszeichen verwenden"
+
+#: rc.c:233
+msgid "Use double width for some Unicode characters"
+msgstr "Einzelnen Unicode-Zeichen zwei Spalten einräumen"
+
+#: rc.c:234
+msgid "Use Unicode language tags"
+msgstr "Unicode-Sprach-Tags verwenden"
+
+#: rc.c:235
+msgid "Charset conversion using Unicode map"
+msgstr "Zeichen in Unicode kodieren"
+
+#: rc.c:236
+msgid "Charset conversion when loading"
+msgstr "Zeichenkodierung beim Laden anpassen"
+
+#: rc.c:237
+msgid "Adjust search string for document charset"
+msgstr "Zu suchende Zeichenkette der Kodierung des Dokumentes anpassen"
+
+#: rc.c:238
+msgid "Fix character width when conversion"
+msgstr "Bei Umwandlung an der Breite von Zeichen festhalten"
+
+#: rc.c:239
+msgid "Use GB 12345 Unicode map instead of GB 2312's"
+msgstr "GB-12345-Unicode statt GB 2312 verwenden"
+
+#: rc.c:240
+msgid "Use JIS X 0201 Roman for ISO-2022-JP"
+msgstr "JIS X 0201 Roman statt ISO-2022-JP verwenden"
+
+#: rc.c:241
+msgid "Use JIS C 6226:1978 for ISO-2022-JP"
+msgstr "JIS C 6226:1978 statt ISO-2022-JP verwenden"
+
+#: rc.c:242
+msgid "Use JIS X 0201 Katakana"
+msgstr "JIS X 0201 Katakana verwenden"
+
+#: rc.c:243
+msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
+msgstr "JIS X 0212:1990 verwenden (ergänzendes Kanji)"
+
+#: rc.c:244
+msgid "Use JIS X 0213:2000 (2000JIS)"
+msgstr "JIS X 0213:2000 verwenden (2000JIS)"
+
+#: rc.c:245
+msgid "Strict ISO-2022-JP/KR/CN"
+msgstr "Striktes ISO-2022-JP/KR/CN"
+
+#: rc.c:246
+msgid "Treat 4 bytes char. of GB18030 as Unicode"
+msgstr "4-Byte-Zeichen von GB 18030 als Unicode auffassen"
+
+#: rc.c:247
+msgid "Simple Preserve space"
+msgstr "Einfache Platzerhaltung"
+
+#: rc.c:250
+msgid "keymap file"
+msgstr "Tastaturbelegungs-Datei"
+
+#: rc.c:267
+msgid "black"
+msgstr "schwarz"
+
+#: rc.c:268
+msgid "red"
+msgstr "rot"
+
+#: rc.c:269
+msgid "green"
+msgstr "grün"
+
+#: rc.c:270
+msgid "yellow"
+msgstr "gelb"
+
+#: rc.c:271
+msgid "blue"
+msgstr "blau"
+
+#: rc.c:272
+msgid "magenta"
+msgstr "magenta"
+
+#: rc.c:273
+msgid "cyan"
+msgstr "cyan"
+
+#: rc.c:274
+msgid "white"
+msgstr "weiß"
+
+#: rc.c:275
+msgid "terminal"
+msgstr "wie Terminal"
+
+#: rc.c:294
+msgid "none"
+msgstr "keiner"
+
+#: rc.c:295
+msgid "current URL"
+msgstr "aktuelle URL"
+
+#: rc.c:296
+msgid "link URL"
+msgstr "Link-URL"
+
+#: rc.c:301
+msgid "simple"
+msgstr "einfach"
+
+#: rc.c:302
+msgid "use tag"
+msgstr "durch Tags"
+
+#: rc.c:303
+msgid "fontify"
+msgstr "hervorgehoben"
+
+#: rc.c:309
+msgid "A:relative to screen height"
+msgstr "A: relativ zu Fensterhöhe"
+
+#: rc.c:310
+msgid "B:fixed speed"
+msgstr "B: feste Geschwindigkeit"
+
+#: rc.c:317
+msgid "unspecified"
+msgstr "nicht spezifiziert"
+
+#: rc.c:318
+msgid "inet inet6"
+msgstr "inet inet6"
+
+#: rc.c:319
+msgid "inet6 inet"
+msgstr "inet6 inet"
+
+#: rc.c:320
+msgid "inet only"
+msgstr "nur inet"
+
+#: rc.c:321
+msgid "inet6 only"
+msgstr "nur inet6"
+
+#: rc.c:328
+msgid "discard"
+msgstr "verwerfen"
+
+#: rc.c:330
+msgid "accept"
+msgstr "annehmen"
+
+#: rc.c:332
+msgid "ask"
+msgstr "nachfragen"
+
+# gehört zu rc.c:142
+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
+#: rc.c:339
+msgid "use internal mailer instead"
+msgstr "Mail intern erstellen"
+
+# gehört zu rc.c:142
+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
+#: rc.c:341
+msgid "ignore options and use only the address"
+msgstr "Optionen ignorieren"
+
+# gehört zu rc.c:142
+# erscheint in Pulldown-Menü, daher verkürzt. mh 09.10.2014
+#: rc.c:342
+msgid "use full mailto URL"
+msgstr "komplett verwenden"
+
+#: rc.c:351
+msgid "OFF"
+msgstr "AUS"
+
+#: rc.c:352
+msgid "Only ISO 2022"
+msgstr "Nur ISO-2022"
+
+#: rc.c:353
+msgid "ON"
+msgstr "AN"
+
+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014
+#: rc.c:359
+msgid "ASCII"
+msgstr "ASCII"
+
+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014
+# hier ist "Zeichensatz" akzeptabel mh, 09.10.2014
+#: rc.c:360
+msgid "charset specific"
+msgstr "zeichensatzspezifisch"
+
+# Wert aus einem Set zur Wiedergabe von Rändern, mh, 05.10.2014
+#: rc.c:361
+msgid "DEC special graphics"
+msgstr "mit DEC-Grafiken"
+
+#: rc.c:740
+msgid "Display Settings"
+msgstr "Einstellungen zur Anzeige"
+
+#: rc.c:742
+msgid "Color Settings"
+msgstr "Farbeinstellungen"
+
+#: rc.c:744
+msgid "Miscellaneous Settings"
+msgstr "Weitere Einstellungen"
+
+#: rc.c:745
+msgid "Directory Settings"
+msgstr "Verzeichnis-Einstellungen"
+
+#: rc.c:746
+msgid "External Program Settings"
+msgstr "Einstellungen für externe Programme"
+
+#: rc.c:747
+msgid "Network Settings"
+msgstr "Netzwerk-Einstellungen"
+
+#: rc.c:748
+msgid "Proxy Settings"
+msgstr "Proxy-Einstellungen"
+
+#: rc.c:750
+msgid "SSL Settings"
+msgstr "SSL-Einstellungen"
+
+#: rc.c:753
+msgid "Cookie Settings"
+msgstr "Cookie-Einstellungen"
+
+#: rc.c:756
+msgid "Charset Settings"
+msgstr "Zeichenkodierungs-Einstellungen"
+
+#. TRANSLATORS:
+#. * AcceptLang default: this is used in Accept-Language: HTTP request
+#. * header. For example, ja.po should translate it as
+#. * "ja;q=1.0, en;q=0.5" like that.
+#.
+#: rc.c:1238
+msgid "en;q=1.0"
+msgstr "de;q=1.0, en;q=0.5"
diff --git a/po/ja.po b/po/ja.po
index d67c695..3810d30 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -1,6 +1,6 @@
# Japanese translations for w3m package
# w3m パッケージに対する英訳.
-# Copyright (C) 2003 THE w3m'S COPYRIGHT HOLDER
+# Copyright (C) 2015 THE w3m'S COPYRIGHT HOLDER
# This file is distributed under the same license as the w3m package.
# Fumitoshi UKAI <ukai@debian.or.jp>, 2003.
#
@@ -8,865 +8,897 @@ msgid ""
msgstr ""
"Project-Id-Version: w3m 0.5.3\n"
"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
-"POT-Creation-Date: 2010-08-20 18:44+0900\n"
-"PO-Revision-Date: 2010-08-20 18:45+0900\n"
-"Last-Translator: Fumitoshi UKAI <ukai@debian.or.jp>\n"
+"POT-Creation-Date: 2016-03-14 19:47+0900\n"
+"PO-Revision-Date: 2016-03-14 19:51+0900\n"
+"Last-Translator: Tatsuya Kinoshita <tats@debian.org>\n"
"Language-Team: Japanese\n"
-"Language: \n"
+"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: menu.c:267
+#: menu.c:269
msgid " Back (b) "
msgstr "戻る (b)"
-#: menu.c:268
+#: menu.c:270
msgid " Select Buffer(s) "
msgstr "バッファ選択 (s)"
-#: menu.c:270
+#: menu.c:272
msgid " Select Tab (t) "
msgstr "タブ選択 (t)"
-#: menu.c:272
+#: menu.c:274
msgid " View Source (v) "
msgstr "ソースを表示 (v)"
-#: menu.c:273
+#: menu.c:275
msgid " Edit Source (e) "
msgstr "ソースを編集 (e)"
-#: menu.c:274
+#: menu.c:276
msgid " Save Source (S) "
msgstr "ソースを保存 (S)"
-#: menu.c:275
+#: menu.c:277
msgid " Reload (r) "
msgstr "再読み込み (r)"
-#: menu.c:276 menu.c:283 menu.c:287
+#: menu.c:278 menu.c:285 menu.c:289
msgid " ---------------- "
msgstr "----------------"
-#: menu.c:277
+#: menu.c:279
msgid " Go Link (a) "
msgstr "リンクを表示 (a)"
-#: menu.c:278
+#: menu.c:280
msgid " on New Tab (n) "
msgstr "新タブで表示 (n)"
-#: menu.c:279
+#: menu.c:281
msgid " Save Link (A) "
msgstr "リンクを保存 (A)"
-#: menu.c:280
+#: menu.c:282
msgid " View Image (i) "
msgstr "画像を表示 (i)"
-#: menu.c:281
+#: menu.c:283
msgid " Save Image (I) "
msgstr "画像を保存 (I)"
-#: menu.c:282
+#: menu.c:284
msgid " View Frame (f) "
msgstr "フレーム表示 (f)"
-#: menu.c:284
+#: menu.c:286
msgid " Bookmark (B) "
msgstr "ブックマーク (B)"
-#: menu.c:285
+#: menu.c:287
msgid " Help (h) "
msgstr "ヘルプ (h)"
-#: menu.c:286
+#: menu.c:288
msgid " Option (o) "
msgstr "オプション (o)"
-#: menu.c:288
+#: menu.c:290
msgid " Quit (q) "
msgstr "終了 (q)"
-#: rc.c:60
+#: rc.c:62
msgid "External Viewer Setup"
msgstr "外部ビューアの編集"
-#: rc.c:61
+#: rc.c:63
msgid "Tab width in characters"
msgstr "タブ幅"
-#: rc.c:62
+#: rc.c:64
msgid "Indent for HTML rendering"
msgstr "HTML整形時のインデント幅"
-#: rc.c:63
+#: rc.c:65
msgid "Number of pixels per character (4.0...32.0)"
msgstr "文字幅 (4.0...32.0)"
-#: rc.c:64
+#: rc.c:66
msgid "Number of pixels per line (4.0...64.0)"
msgstr "一行の高さ (4.0...64.0)"
-#: rc.c:65
+#: rc.c:67
msgid "Number of remembered lines when used as a pager"
msgstr "ページャとして利用した時に保存される行数"
-#: rc.c:66
+#: rc.c:68
msgid "Use URL history"
msgstr "履歴を使う"
-#: rc.c:67
+#: rc.c:69
msgid "Number of remembered URL"
msgstr "保持するURL履歴の数"
-#: rc.c:68
+#: rc.c:70
msgid "Save URL history"
msgstr "URL履歴の保存"
-#: rc.c:69
+#: rc.c:71
msgid "Render frames automatically"
msgstr "フレームの自動表示"
-#: rc.c:70
+#: rc.c:72
msgid "Treat argument without scheme as URL"
msgstr "scheme のない引数も URL とみなす"
-#: rc.c:71
+#: rc.c:73
msgid "Use _self as default target"
msgstr "targetが未指定の場合に_selfを使用する"
-#: rc.c:72
+#: rc.c:74
msgid "Open link on new tab if target is _blank or _new"
msgstr "targetが_blankか_newの場合は新しいタブで開く"
-#: rc.c:73
+#: rc.c:75
msgid "Open download list panel on new tab"
msgstr "Download list panel を新しいタブで開く"
-#: rc.c:74
+#: rc.c:76
msgid "Display link URL automatically"
msgstr "リンク先の自動表示"
-#: rc.c:75
+#: rc.c:77
msgid "Display link numbers"
msgstr "リンク番号の表示"
-#: rc.c:76
+#: rc.c:78
msgid "Display decoded URL"
msgstr "URLをデコードして表示"
-#: rc.c:77
+#: rc.c:79
msgid "Display current line number"
msgstr "現在の行番号の表示"
-#: rc.c:78
+#: rc.c:80
msgid "Display inline images"
msgstr "インライン画像を表示"
-#: rc.c:79
+#: rc.c:81
msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
msgstr "ALT または TITLE がない画像の代替テキスト表示"
-#: rc.c:81
+#: rc.c:83
msgid "Load inline images automatically"
msgstr "インライン画像を自動で読み込む"
-#: rc.c:82
+#: rc.c:84
msgid "Maximum processes for parallel image loading"
msgstr "画像読み込み時の最大プロセス数"
-#: rc.c:83
+#: rc.c:85
msgid "Use external image viewer"
msgstr "画像を外部ビューワで表示"
-#: rc.c:84
+#: rc.c:86
msgid "Scale of image (%)"
msgstr "画像のスケール(%)"
-#: rc.c:85
+#: rc.c:87
msgid "External command to display image"
msgstr "画像を表示するためのコマンド"
-#: rc.c:86
+#: rc.c:88
msgid "Use link list of image map"
msgstr "イメージマップのリンク先一覧を表示"
-#: rc.c:88
+#: rc.c:90
msgid "Display file names in multi-column format"
msgstr "ファイル名のマルチカラム表示"
-#: rc.c:89
+#: rc.c:91
msgid "Use ASCII equivalents to display entities"
msgstr "エンティティを ASCII の代替表現で表す"
-#: rc.c:90
+#: rc.c:92
msgid "Character type for border of table and menu"
msgstr "テーブルやメニューの枠に使う文字"
-#: rc.c:91
+#: rc.c:93
+msgid "Display table borders, ignore value of BORDER"
+msgstr "BORDER の値は無視してテーブル枠を表示"
+
+#: rc.c:94
msgid "Fold lines in TEXTAREA"
msgstr "TEXTAREA の行を折り返して表示"
-#: rc.c:92
+#: rc.c:95
msgid "Display INS, DEL, S and STRIKE element"
msgstr "INS, DEL, S, STRIKE 要素の表示"
-#: rc.c:93
+#: rc.c:96
msgid "Display with color"
msgstr "カラー表示"
-#: rc.c:94
+#: rc.c:97
msgid "Color of normal character"
msgstr "文字の色"
-#: rc.c:95
+#: rc.c:98
msgid "Color of anchor"
msgstr "アンカーの色"
-#: rc.c:96
+#: rc.c:99
msgid "Color of image link"
msgstr "画像リンクの色"
-#: rc.c:97
+#: rc.c:100
msgid "Color of form"
msgstr "フォームの色"
-#: rc.c:98
+#: rc.c:101
msgid "Enable coloring of active link"
msgstr "現在選択されているリンクの色を指定する"
-#: rc.c:99
+#: rc.c:102
msgid "Color of currently active link"
msgstr "現在選択されているリンクの色"
-#: rc.c:100
+#: rc.c:103
msgid "Use visited link color"
msgstr "訪れたことがあるリンクは色を変える"
-#: rc.c:101
+#: rc.c:104
msgid "Color of visited link"
msgstr "訪れたことがあるリンクの色"
-#: rc.c:102
+#: rc.c:105
msgid "Color of background"
msgstr "背景の色"
-#: rc.c:103
+#: rc.c:106
msgid "Color of mark"
msgstr "マークの色"
-#: rc.c:104
+#: rc.c:107
msgid "Use proxy"
msgstr "プロキシを使用する"
-#: rc.c:105
+#: rc.c:108
msgid "URL of HTTP proxy host"
msgstr "HTTPプロキシ(URLで入力)"
-#: rc.c:107
+#: rc.c:110
msgid "URL of HTTPS proxy host"
msgstr "HTTPSプロキシ(URLで入力)"
-#: rc.c:110
+#: rc.c:113
msgid "URL of GOPHER proxy host"
msgstr "GOPHERプロキシ(URLで入力)"
-#: rc.c:112
+#: rc.c:115
msgid "URL of FTP proxy host"
msgstr "FTPプロキシ(URLで入力)"
-#: rc.c:113
+#: rc.c:116
msgid "Domains to be accessed directly (no proxy)"
msgstr "プロキシから除外するドメイン"
-#: rc.c:114
+#: rc.c:117
msgid "Check noproxy by network address"
msgstr "ネットワークアドレスでプロキシ除外のチェック"
-#: rc.c:115
+#: rc.c:118
msgid "Disable cache"
msgstr "Cache を使わない"
-#: rc.c:117
+#: rc.c:120
msgid "News server"
msgstr "News サーバ"
-#: rc.c:118
+#: rc.c:121
msgid "Mode of news server"
msgstr "News サーバのモード"
-#: rc.c:119
+#: rc.c:122
msgid "Number of news messages"
msgstr "News を一覧表示する時の数"
-#: rc.c:121
+#: rc.c:124
msgid "Order of name resolution"
msgstr "名前解決の順序"
-#: rc.c:122
+#: rc.c:125
msgid "Directory corresponding to / (document root)"
msgstr "/ で表されるディレクトリ(document root)"
-#: rc.c:123
+#: rc.c:126
msgid "Directory corresponding to /~user"
msgstr "/~user で表されるディレクトリ"
-#: rc.c:124
+#: rc.c:127
msgid "Directory corresponding to /cgi-bin"
msgstr "/cgi-bin で表されるディレクトリ"
-#: rc.c:125
+#: rc.c:128
msgid "Confirm when quitting with q"
msgstr "q での終了時に確認する"
-#: rc.c:126
+#: rc.c:129
msgid "Close tab if buffer is last when back"
msgstr "戻る時にバッファが最後ならタブを閉じる"
-#: rc.c:128
+#: rc.c:131
msgid "Enable mark operations"
msgstr "マーク機能を有効にする"
-#: rc.c:130
+#: rc.c:133
msgid "Enable Emacs-style line editing"
msgstr "Emacs風の行編集にする"
-#: rc.c:131
+#: rc.c:134
msgid "Enable vi-like numeric prefix"
msgstr "vi風の数値プレフィクス"
-#: rc.c:132
+#: rc.c:135
msgid "Move cursor to top line when going to label"
msgstr "ラベルに移動する時にカーソルがトップになるようにする"
-#: rc.c:133
+#: rc.c:136
msgid "Move cursor to top line when moving to next page"
msgstr "次のページに移動する時にカーソルがトップになるようにする"
-#: rc.c:134
+#: rc.c:137
msgid "Fold lines of plain text file"
msgstr "plain text ファイルの行を折り返す"
-#: rc.c:135
+#: rc.c:138
msgid "Show line numbers"
msgstr "行番号を表示する"
-#: rc.c:136
+#: rc.c:139
msgid "Show search string"
msgstr "検索文字列を表示する"
-#: rc.c:137
+#: rc.c:140
msgid "List of mime.types files"
msgstr "利用するmime.types"
-#: rc.c:138
+#: rc.c:141
msgid "List of mailcap files"
msgstr "利用するmailcap"
-#: rc.c:139
+#: rc.c:142
msgid "List of urimethodmap files"
msgstr "利用するurimethodmap"
-#: rc.c:140
+#: rc.c:143
msgid "Editor"
msgstr "利用するエディタ"
-#: rc.c:141
+#: rc.c:144
msgid "Mailer"
msgstr "利用するメーラ"
-#: rc.c:142
+#: rc.c:145
msgid "How to call Mailer for mailto URLs with options"
msgstr "mailto タグの取り扱い"
-#: rc.c:143
-msgid "External Browser"
+#: rc.c:146
+msgid "External browser"
msgstr "外部ブラウザ"
-#: rc.c:144
-msgid "Second External Browser"
+#: rc.c:147
+msgid "2nd external browser"
msgstr "外部ブラウザその2"
-#: rc.c:145
-msgid "Third External Browser"
+#: rc.c:148
+msgid "3rd external browser"
msgstr "外部ブラウザその3"
-#: rc.c:146
+#: rc.c:149
+msgid "4th external browser"
+msgstr "外部ブラウザその4"
+
+#: rc.c:150
+msgid "5th external browser"
+msgstr "外部ブラウザその5"
+
+#: rc.c:151
+msgid "6th external browser"
+msgstr "外部ブラウザその6"
+
+#: rc.c:152
+msgid "7th external browser"
+msgstr "外部ブラウザその7"
+
+#: rc.c:153
+msgid "8th external browser"
+msgstr "外部ブラウザその8"
+
+#: rc.c:154
+msgid "9th external browser"
+msgstr "外部ブラウザその9"
+
+#: rc.c:155
msgid "Disable secret file security check"
msgstr "パスワードファイルのパーミッションをチェックしない"
-#: rc.c:147
+#: rc.c:156
msgid "Password file"
msgstr "パスワードファイル"
-#: rc.c:148
+#: rc.c:157
msgid "File for setting form on loading"
msgstr "文書読込時のフォーム設定用ファイル"
-#: rc.c:149
+#: rc.c:158
+msgid "File for preferences for each site"
+msgstr "サイト別設定のファイル"
+
+#: rc.c:159
msgid "Password for anonymous FTP (your mail address)"
msgstr "FTPのパスワード(普通は自分のmail addressを使う)"
-#: rc.c:150
+#: rc.c:160
msgid "Generate domain part of password for FTP"
msgstr "FTPのパスワードのドメイン名を自動生成する"
-#: rc.c:151
+#: rc.c:161
msgid "User-Agent identification string"
msgstr "User-Agent"
-#: rc.c:152
+#: rc.c:162
msgid "Accept-Encoding header"
msgstr "圧縮方法(Accept-Encoding:)"
-#: rc.c:153
+#: rc.c:163
msgid "Accept header"
msgstr "受けつけるメディアタイプ(Accept:)"
-#: rc.c:154
+#: rc.c:164
msgid "Accept-Language header"
msgstr "受けつける言語(Accept-Language:)"
-#: rc.c:155
+#: rc.c:165
msgid "Treat URL-like strings as links in all pages"
msgstr "全てのページのURL風の文字列をリンクにする"
-#: rc.c:156
+#: rc.c:166
msgid "Wrap search"
msgstr "折り返し検索"
-#: rc.c:157
+#: rc.c:167
msgid "Display unseen objects (e.g. bgimage tag)"
msgstr "背景画像等へのリンクを作る"
-#: rc.c:158
+#: rc.c:168
msgid "Uncompress compressed data automatically when downloading"
msgstr "ダウンロード時に自動的に圧縮されたデータを解凍する"
-#: rc.c:160
+#: rc.c:170
msgid "Run external viewer in a separate session"
msgstr "外部ビューアを別セッションで動かす"
-#: rc.c:162
+#: rc.c:172
msgid "Run external viewer in the background"
msgstr "外部ビューアをバックグラウンドで動かす"
-#: rc.c:164
+#: rc.c:174
msgid "Use external program for directory listing"
msgstr "ディレクトリリストに外部コマンドを使う"
-#: rc.c:165
+#: rc.c:175
msgid "URL of directory listing command"
msgstr "ディレクトリリスト用コマンド"
-#: rc.c:167
+#: rc.c:177
msgid "Enable dictionary lookup through CGI"
msgstr "辞書引きをCGI経由でおこなう"
-#: rc.c:168
+#: rc.c:178
msgid "URL of dictionary lookup command"
msgstr "辞書引きコマンドのURL"
-#: rc.c:170
+#: rc.c:180
msgid "Display link name for images lacking ALT"
msgstr "空のIMG ALT属性の時にリンク名を表示する"
-#: rc.c:171
+#: rc.c:181
msgid "Index file for directories"
msgstr "各ディレクトリのインデックスファイル"
-#: rc.c:172
+#: rc.c:182
msgid "Prepend http:// to URL automatically"
msgstr "URLに自動的に http:// を補う"
-#: rc.c:173
+#: rc.c:183
msgid "Default value for open-URL command"
msgstr "URLを開く時のデフォルト文字列"
-#: rc.c:174
+#: rc.c:184
msgid "Decode Content-Transfer-Encoding when saving"
msgstr "保存時に Content-Transfer-Encoding をデコードする"
-#: rc.c:175
+#: rc.c:185
msgid "Preserve timestamp when saving"
msgstr "保存時にタイムスタンプを保持する"
-#: rc.c:177
+#: rc.c:187
msgid "Enable mouse"
msgstr "マウスを使う"
-#: rc.c:178
+#: rc.c:188
msgid "Scroll in reverse direction of mouse drag"
msgstr "マウスのドラッグ動作を逆にする"
-#: rc.c:179
+#: rc.c:189
msgid "Behavior of wheel scroll speed"
msgstr "ホイールでのスクロール速度の扱い"
-#: rc.c:180
+#: rc.c:190
msgid "(A only)Scroll by # (%) of screen"
msgstr "(Aのみ)画面の何%スクロールするか"
-#: rc.c:181
+#: rc.c:191
msgid "(B only)Scroll by # lines"
msgstr "(Bのみ)スクロールする行数"
-#: rc.c:183
+#: rc.c:193
msgid "Free memory of undisplayed buffers"
msgstr "表示されていないバッファのメモリを解放する"
-#: rc.c:184
+#: rc.c:194
msgid "Suppress `Referer:' header"
msgstr "Referer: を送らないようにする"
-#: rc.c:185
+#: rc.c:195
msgid "Search case-insensitively"
msgstr "サーチ時に大文字小文字の区別をしない"
-#: rc.c:186
+#: rc.c:196
msgid "Use LESSOPEN"
msgstr "LESSOPENを使用"
-#: rc.c:189
+#: rc.c:199
msgid "Perform SSL server verification"
msgstr "SSLのサーバ認証を行う"
-#: rc.c:190
+#: rc.c:200
msgid "PEM encoded certificate file of client"
msgstr "SSLのクライアント用PEM形式証明書ファイル"
-#: rc.c:191
+#: rc.c:201
msgid "PEM encoded private key file of client"
msgstr "SSLのクライアント用PEM形式秘密鍵ファイル"
-#: rc.c:192
+#: rc.c:202
msgid "Path to directory for PEM encoded certificates of CAs"
msgstr "SSLの認証局のPEM形式証明書群のあるディレクトリへのパス"
-#: rc.c:193
+#: rc.c:203
msgid "File consisting of PEM encoded certificates of CAs"
msgstr "SSLの認証局のPEM形式証明書群のファイル"
-#: rc.c:195
+#: rc.c:205
msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
msgstr "使わないSSLメソッドのリスト(2: SSLv2, 3: SSLv3, t:TLSv1)"
-#: rc.c:198
+#: rc.c:208
msgid "Enable cookie processing"
msgstr "クッキーを使用する"
-#: rc.c:199
+#: rc.c:209
msgid "Print a message when receiving a cookie"
msgstr "クッキーを受け付けたときにメッセージを表示する"
-#: rc.c:200
+#: rc.c:210
msgid "Accept cookies"
msgstr "クッキーを受け付ける"
-#: rc.c:201
+#: rc.c:211
msgid "Action to be taken on invalid cookie"
msgstr "問題のあるクッキーでも受け付ける"
-#: rc.c:202
+#: rc.c:212
msgid "Domains to reject cookies from"
msgstr "クッキーを受け付けないドメイン"
-#: rc.c:203
+#: rc.c:213
msgid "Domains to accept cookies from"
msgstr "クッキーを受け付けるドメイン"
-#: rc.c:204
+#: rc.c:214
msgid "Domains to avoid [wrong number of dots]"
msgstr "[wrong number of dots] を無視するドメイン"
-#: rc.c:206
+#: rc.c:216
msgid "Number of redirections to follow"
msgstr "従うリダイレクトの回数"
-#: rc.c:207
+#: rc.c:217
msgid "Enable processing of meta-refresh tag"
msgstr "meta refresh に対応する"
-#: rc.c:210
+#: rc.c:220
msgid "Enable Migemo (Roma-ji search)"
msgstr "Migemo(ローマ字検索)を使用する"
-#: rc.c:211
+#: rc.c:221
msgid "Migemo command"
msgstr "Migemoコマンド"
-#: rc.c:215
+#: rc.c:225
msgid "Display charset"
msgstr "表示用文字コード"
-#: rc.c:216
+#: rc.c:226
msgid "Default document charset"
msgstr "文書の標準の文字コード"
-#: rc.c:217
+#: rc.c:227
msgid "Automatic charset detect when loading"
msgstr "文書の読み込み時に文字コードの自動判定を行う"
-#: rc.c:218
+#: rc.c:228
msgid "System charset"
msgstr "システムの文字コード"
-#: rc.c:219
+#: rc.c:229
msgid "System charset follows locale(LC_CTYPE)"
msgstr "Locale(LC_CTYPE) に従ってシステムの文字コードを設定"
-#: rc.c:220
+#: rc.c:230
msgid "Output halfdump with display charset"
msgstr "表示用文字コードで halfdump の出力を行う"
-#: rc.c:221
+#: rc.c:231
msgid "Use multi column characters"
msgstr "複数カラムの文字を使う"
-#: rc.c:222
+#: rc.c:232
msgid "Use combining characters"
msgstr "結合文字を使う"
-#: rc.c:223
+#: rc.c:233
msgid "Use double width for some Unicode characters"
msgstr "ある種のUnicode文字を全角にする"
-#: rc.c:224
+#: rc.c:234
msgid "Use Unicode language tags"
msgstr "Unicode の言語タグを使う"
-#: rc.c:225
+#: rc.c:235
msgid "Charset conversion using Unicode map"
msgstr "Unicodeを介したコード変換"
-#: rc.c:226
+#: rc.c:236
msgid "Charset conversion when loading"
msgstr "文書の読み込み時に文字コードを変換する"
-#: rc.c:227
+#: rc.c:237
msgid "Adjust search string for document charset"
msgstr "検索文字列を文書の文字コードに変換する"
-#: rc.c:228
+#: rc.c:238
msgid "Fix character width when conversion"
msgstr "文字幅の変わる変換をしない"
-#: rc.c:229
+#: rc.c:239
msgid "Use GB 12345 Unicode map instead of GB 2312's"
msgstr "GB 12345 の Unicode マップを GB 2312 用に使う"
-#: rc.c:230
+#: rc.c:240
msgid "Use JIS X 0201 Roman for ISO-2022-JP"
msgstr "ISO-2022-JP で JIS X 0201-Roman を使う"
-#: rc.c:231
+#: rc.c:241
msgid "Use JIS C 6226:1978 for ISO-2022-JP"
msgstr "ISO-2022-JP で JIS C 6226:1978(旧JIS) を使う"
-#: rc.c:232
+#: rc.c:242
msgid "Use JIS X 0201 Katakana"
msgstr "JIS X 0201-Katakana を使う"
-#: rc.c:233
+#: rc.c:243
msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
msgstr "JIS X 0212:1990(補助漢字) を使う"
-#: rc.c:234
+#: rc.c:244
msgid "Use JIS X 0213:2000 (2000JIS)"
msgstr "JIS X 0213:2000(2000JIS) を使う"
-#: rc.c:235
+#: rc.c:245
msgid "Strict ISO-2022-JP/KR/CN"
msgstr "厳格な ISO-2022-JP/KR/CN を使う"
-#: rc.c:236
+#: rc.c:246
msgid "Treat 4 bytes char. of GB18030 as Unicode"
msgstr "GB18030 の 4バイト文字を Unicode として扱う"
-#: rc.c:237
+#: rc.c:247
msgid "Simple Preserve space"
msgstr "単純な空白の保存"
-#: rc.c:240
+#: rc.c:250
msgid "keymap file"
msgstr "keymapファイル"
-#: rc.c:257
+#: rc.c:267
msgid "black"
msgstr "黒"
-#: rc.c:258
+#: rc.c:268
msgid "red"
msgstr "赤"
-#: rc.c:259
+#: rc.c:269
msgid "green"
msgstr "緑"
-#: rc.c:260
+#: rc.c:270
msgid "yellow"
msgstr "黄"
-#: rc.c:261
+#: rc.c:271
msgid "blue"
msgstr "青"
-#: rc.c:262
+#: rc.c:272
msgid "magenta"
msgstr "紫"
-#: rc.c:263
+#: rc.c:273
msgid "cyan"
msgstr "空色"
-#: rc.c:264
+#: rc.c:274
msgid "white"
msgstr "白"
-#: rc.c:265
+#: rc.c:275
msgid "terminal"
msgstr "端末"
-#: rc.c:284
+#: rc.c:294
msgid "none"
msgstr "無し"
-#: rc.c:285
+#: rc.c:295
msgid "current URL"
msgstr "現在のURL"
-#: rc.c:286
+#: rc.c:296
msgid "link URL"
msgstr "リンク先のURL"
-#: rc.c:291
+#: rc.c:301
msgid "simple"
msgstr "シンプル"
-#: rc.c:292
+#: rc.c:302
msgid "use tag"
msgstr "タグで表示"
-#: rc.c:293
+#: rc.c:303
msgid "fontify"
msgstr "文字装飾"
-#: rc.c:299
+#: rc.c:309
msgid "A:relative to screen height"
msgstr "A:画面サイズに比例"
-#: rc.c:300
+#: rc.c:310
msgid "B:fixed speed"
msgstr "B:一定の行数"
-#: rc.c:307
+#: rc.c:317
msgid "unspecified"
msgstr "指定しない"
-#: rc.c:308
+#: rc.c:318
msgid "inet inet6"
msgstr "IPv4優先"
-#: rc.c:309
+#: rc.c:319
msgid "inet6 inet"
msgstr "IPv6優先"
-#: rc.c:310
+#: rc.c:320
msgid "inet only"
msgstr "IPv4のみ"
-#: rc.c:311
+#: rc.c:321
msgid "inet6 only"
msgstr "IPv6のみ"
-#: rc.c:318
+#: rc.c:328
msgid "discard"
msgstr "破棄する"
-#: rc.c:320
+#: rc.c:330
msgid "accept"
msgstr "受け入れる"
-#: rc.c:322
+#: rc.c:332
msgid "ask"
msgstr "確認する"
-#: rc.c:329
+#: rc.c:339
msgid "use internal mailer instead"
msgstr "内部メーラを使用"
-#: rc.c:331
+#: rc.c:341
msgid "ignore options and use only the address"
msgstr "アドレスのみ使用"
-#: rc.c:332
+#: rc.c:342
msgid "use full mailto URL"
msgstr "URL 全体を使用"
-#: rc.c:341
+#: rc.c:351
msgid "OFF"
msgstr "無効"
-#: rc.c:342
+#: rc.c:352
msgid "Only ISO 2022"
msgstr "ISO 2022 のみ"
-#: rc.c:343
+#: rc.c:353
msgid "ON"
msgstr "有効"
-#: rc.c:349
+#: rc.c:359
msgid "ASCII"
msgstr "ASCII"
-#: rc.c:350
+#: rc.c:360
msgid "charset specific"
msgstr "文字コード依存"
-#: rc.c:351
+#: rc.c:361
msgid "DEC special graphics"
msgstr "DEC 特殊文字"
-#: rc.c:714
+#: rc.c:740
msgid "Display Settings"
msgstr "表示関係"
-#: rc.c:716
+#: rc.c:742
msgid "Color Settings"
msgstr "表示色"
-#: rc.c:718
+#: rc.c:744
msgid "Miscellaneous Settings"
msgstr "雑多な設定"
-#: rc.c:719
+#: rc.c:745
msgid "Directory Settings"
msgstr "ディレクトリ設定"
-#: rc.c:720
+#: rc.c:746
msgid "External Program Settings"
msgstr "外部プログラム"
-#: rc.c:721
+#: rc.c:747
msgid "Network Settings"
msgstr "ネットワークの設定"
-#: rc.c:722
+#: rc.c:748
msgid "Proxy Settings"
msgstr "プロキシの設定"
-#: rc.c:724
+#: rc.c:750
msgid "SSL Settings"
msgstr "SSLの設定"
-#: rc.c:727
+#: rc.c:753
msgid "Cookie Settings"
msgstr "クッキーの設定"
-#: rc.c:730
+#: rc.c:756
msgid "Charset Settings"
msgstr "文字コードの設定"
@@ -875,6 +907,6 @@ msgstr "文字コードの設定"
#. * header. For example, ja.po should translate it as
#. * "ja;q=1.0, en;q=0.5" like that.
#.
-#: rc.c:1209
+#: rc.c:1238
msgid "en;q=1.0"
msgstr "ja;q=1.0, en;q=0.5"
diff --git a/po/w3m.pot b/po/w3m.pot
index e164b1e..607e26f 100644
--- a/po/w3m.pot
+++ b/po/w3m.pot
@@ -1,6 +1,6 @@
# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Fumitoshi UKAI
-# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE w3m'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the w3m package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: w3m 0.5.3\n"
"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
-"POT-Creation-Date: 2010-08-20 18:44+0900\n"
+"POT-Creation-Date: 2016-03-14 19:47+0900\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"
@@ -17,855 +17,887 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: menu.c:267
+#: menu.c:269
msgid " Back (b) "
msgstr ""
-#: menu.c:268
+#: menu.c:270
msgid " Select Buffer(s) "
msgstr ""
-#: menu.c:270
+#: menu.c:272
msgid " Select Tab (t) "
msgstr ""
-#: menu.c:272
+#: menu.c:274
msgid " View Source (v) "
msgstr ""
-#: menu.c:273
+#: menu.c:275
msgid " Edit Source (e) "
msgstr ""
-#: menu.c:274
+#: menu.c:276
msgid " Save Source (S) "
msgstr ""
-#: menu.c:275
+#: menu.c:277
msgid " Reload (r) "
msgstr ""
-#: menu.c:276 menu.c:283 menu.c:287
+#: menu.c:278 menu.c:285 menu.c:289
msgid " ---------------- "
msgstr ""
-#: menu.c:277
+#: menu.c:279
msgid " Go Link (a) "
msgstr ""
-#: menu.c:278
+#: menu.c:280
msgid " on New Tab (n) "
msgstr ""
-#: menu.c:279
+#: menu.c:281
msgid " Save Link (A) "
msgstr ""
-#: menu.c:280
+#: menu.c:282
msgid " View Image (i) "
msgstr ""
-#: menu.c:281
+#: menu.c:283
msgid " Save Image (I) "
msgstr ""
-#: menu.c:282
+#: menu.c:284
msgid " View Frame (f) "
msgstr ""
-#: menu.c:284
+#: menu.c:286
msgid " Bookmark (B) "
msgstr ""
-#: menu.c:285
+#: menu.c:287
msgid " Help (h) "
msgstr ""
-#: menu.c:286
+#: menu.c:288
msgid " Option (o) "
msgstr ""
-#: menu.c:288
+#: menu.c:290
msgid " Quit (q) "
msgstr ""
-#: rc.c:60
+#: rc.c:62
msgid "External Viewer Setup"
msgstr ""
-#: rc.c:61
+#: rc.c:63
msgid "Tab width in characters"
msgstr ""
-#: rc.c:62
+#: rc.c:64
msgid "Indent for HTML rendering"
msgstr ""
-#: rc.c:63
+#: rc.c:65
msgid "Number of pixels per character (4.0...32.0)"
msgstr ""
-#: rc.c:64
+#: rc.c:66
msgid "Number of pixels per line (4.0...64.0)"
msgstr ""
-#: rc.c:65
+#: rc.c:67
msgid "Number of remembered lines when used as a pager"
msgstr ""
-#: rc.c:66
+#: rc.c:68
msgid "Use URL history"
msgstr ""
-#: rc.c:67
+#: rc.c:69
msgid "Number of remembered URL"
msgstr ""
-#: rc.c:68
+#: rc.c:70
msgid "Save URL history"
msgstr ""
-#: rc.c:69
+#: rc.c:71
msgid "Render frames automatically"
msgstr ""
-#: rc.c:70
+#: rc.c:72
msgid "Treat argument without scheme as URL"
msgstr ""
-#: rc.c:71
+#: rc.c:73
msgid "Use _self as default target"
msgstr ""
-#: rc.c:72
+#: rc.c:74
msgid "Open link on new tab if target is _blank or _new"
msgstr ""
-#: rc.c:73
+#: rc.c:75
msgid "Open download list panel on new tab"
msgstr ""
-#: rc.c:74
+#: rc.c:76
msgid "Display link URL automatically"
msgstr ""
-#: rc.c:75
+#: rc.c:77
msgid "Display link numbers"
msgstr ""
-#: rc.c:76
+#: rc.c:78
msgid "Display decoded URL"
msgstr ""
-#: rc.c:77
+#: rc.c:79
msgid "Display current line number"
msgstr ""
-#: rc.c:78
+#: rc.c:80
msgid "Display inline images"
msgstr ""
-#: rc.c:79
+#: rc.c:81
msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
msgstr ""
-#: rc.c:81
+#: rc.c:83
msgid "Load inline images automatically"
msgstr ""
-#: rc.c:82
+#: rc.c:84
msgid "Maximum processes for parallel image loading"
msgstr ""
-#: rc.c:83
+#: rc.c:85
msgid "Use external image viewer"
msgstr ""
-#: rc.c:84
+#: rc.c:86
msgid "Scale of image (%)"
msgstr ""
-#: rc.c:85
+#: rc.c:87
msgid "External command to display image"
msgstr ""
-#: rc.c:86
+#: rc.c:88
msgid "Use link list of image map"
msgstr ""
-#: rc.c:88
+#: rc.c:90
msgid "Display file names in multi-column format"
msgstr ""
-#: rc.c:89
+#: rc.c:91
msgid "Use ASCII equivalents to display entities"
msgstr ""
-#: rc.c:90
+#: rc.c:92
msgid "Character type for border of table and menu"
msgstr ""
-#: rc.c:91
+#: rc.c:93
+msgid "Display table borders, ignore value of BORDER"
+msgstr ""
+
+#: rc.c:94
msgid "Fold lines in TEXTAREA"
msgstr ""
-#: rc.c:92
+#: rc.c:95
msgid "Display INS, DEL, S and STRIKE element"
msgstr ""
-#: rc.c:93
+#: rc.c:96
msgid "Display with color"
msgstr ""
-#: rc.c:94
+#: rc.c:97
msgid "Color of normal character"
msgstr ""
-#: rc.c:95
+#: rc.c:98
msgid "Color of anchor"
msgstr ""
-#: rc.c:96
+#: rc.c:99
msgid "Color of image link"
msgstr ""
-#: rc.c:97
+#: rc.c:100
msgid "Color of form"
msgstr ""
-#: rc.c:98
+#: rc.c:101
msgid "Enable coloring of active link"
msgstr ""
-#: rc.c:99
+#: rc.c:102
msgid "Color of currently active link"
msgstr ""
-#: rc.c:100
+#: rc.c:103
msgid "Use visited link color"
msgstr ""
-#: rc.c:101
+#: rc.c:104
msgid "Color of visited link"
msgstr ""
-#: rc.c:102
+#: rc.c:105
msgid "Color of background"
msgstr ""
-#: rc.c:103
+#: rc.c:106
msgid "Color of mark"
msgstr ""
-#: rc.c:104
+#: rc.c:107
msgid "Use proxy"
msgstr ""
-#: rc.c:105
+#: rc.c:108
msgid "URL of HTTP proxy host"
msgstr ""
-#: rc.c:107
+#: rc.c:110
msgid "URL of HTTPS proxy host"
msgstr ""
-#: rc.c:110
+#: rc.c:113
msgid "URL of GOPHER proxy host"
msgstr ""
-#: rc.c:112
+#: rc.c:115
msgid "URL of FTP proxy host"
msgstr ""
-#: rc.c:113
+#: rc.c:116
msgid "Domains to be accessed directly (no proxy)"
msgstr ""
-#: rc.c:114
+#: rc.c:117
msgid "Check noproxy by network address"
msgstr ""
-#: rc.c:115
+#: rc.c:118
msgid "Disable cache"
msgstr ""
-#: rc.c:117
+#: rc.c:120
msgid "News server"
msgstr ""
-#: rc.c:118
+#: rc.c:121
msgid "Mode of news server"
msgstr ""
-#: rc.c:119
+#: rc.c:122
msgid "Number of news messages"
msgstr ""
-#: rc.c:121
+#: rc.c:124
msgid "Order of name resolution"
msgstr ""
-#: rc.c:122
+#: rc.c:125
msgid "Directory corresponding to / (document root)"
msgstr ""
-#: rc.c:123
+#: rc.c:126
msgid "Directory corresponding to /~user"
msgstr ""
-#: rc.c:124
+#: rc.c:127
msgid "Directory corresponding to /cgi-bin"
msgstr ""
-#: rc.c:125
+#: rc.c:128
msgid "Confirm when quitting with q"
msgstr ""
-#: rc.c:126
+#: rc.c:129
msgid "Close tab if buffer is last when back"
msgstr ""
-#: rc.c:128
+#: rc.c:131
msgid "Enable mark operations"
msgstr ""
-#: rc.c:130
+#: rc.c:133
msgid "Enable Emacs-style line editing"
msgstr ""
-#: rc.c:131
+#: rc.c:134
msgid "Enable vi-like numeric prefix"
msgstr ""
-#: rc.c:132
+#: rc.c:135
msgid "Move cursor to top line when going to label"
msgstr ""
-#: rc.c:133
+#: rc.c:136
msgid "Move cursor to top line when moving to next page"
msgstr ""
-#: rc.c:134
+#: rc.c:137
msgid "Fold lines of plain text file"
msgstr ""
-#: rc.c:135
+#: rc.c:138
msgid "Show line numbers"
msgstr ""
-#: rc.c:136
+#: rc.c:139
msgid "Show search string"
msgstr ""
-#: rc.c:137
+#: rc.c:140
msgid "List of mime.types files"
msgstr ""
-#: rc.c:138
+#: rc.c:141
msgid "List of mailcap files"
msgstr ""
-#: rc.c:139
+#: rc.c:142
msgid "List of urimethodmap files"
msgstr ""
-#: rc.c:140
+#: rc.c:143
msgid "Editor"
msgstr ""
-#: rc.c:141
+#: rc.c:144
msgid "Mailer"
msgstr ""
-#: rc.c:142
+#: rc.c:145
msgid "How to call Mailer for mailto URLs with options"
msgstr ""
-#: rc.c:143
-msgid "External Browser"
+#: rc.c:146
+msgid "External browser"
msgstr ""
-#: rc.c:144
-msgid "Second External Browser"
+#: rc.c:147
+msgid "2nd external browser"
msgstr ""
-#: rc.c:145
-msgid "Third External Browser"
+#: rc.c:148
+msgid "3rd external browser"
msgstr ""
-#: rc.c:146
+#: rc.c:149
+msgid "4th external browser"
+msgstr ""
+
+#: rc.c:150
+msgid "5th external browser"
+msgstr ""
+
+#: rc.c:151
+msgid "6th external browser"
+msgstr ""
+
+#: rc.c:152
+msgid "7th external browser"
+msgstr ""
+
+#: rc.c:153
+msgid "8th external browser"
+msgstr ""
+
+#: rc.c:154
+msgid "9th external browser"
+msgstr ""
+
+#: rc.c:155
msgid "Disable secret file security check"
msgstr ""
-#: rc.c:147
+#: rc.c:156
msgid "Password file"
msgstr ""
-#: rc.c:148
+#: rc.c:157
msgid "File for setting form on loading"
msgstr ""
-#: rc.c:149
+#: rc.c:158
+msgid "File for preferences for each site"
+msgstr ""
+
+#: rc.c:159
msgid "Password for anonymous FTP (your mail address)"
msgstr ""
-#: rc.c:150
+#: rc.c:160
msgid "Generate domain part of password for FTP"
msgstr ""
-#: rc.c:151
+#: rc.c:161
msgid "User-Agent identification string"
msgstr ""
-#: rc.c:152
+#: rc.c:162
msgid "Accept-Encoding header"
msgstr ""
-#: rc.c:153
+#: rc.c:163
msgid "Accept header"
msgstr ""
-#: rc.c:154
+#: rc.c:164
msgid "Accept-Language header"
msgstr ""
-#: rc.c:155
+#: rc.c:165
msgid "Treat URL-like strings as links in all pages"
msgstr ""
-#: rc.c:156
+#: rc.c:166
msgid "Wrap search"
msgstr ""
-#: rc.c:157
+#: rc.c:167
msgid "Display unseen objects (e.g. bgimage tag)"
msgstr ""
-#: rc.c:158
+#: rc.c:168
msgid "Uncompress compressed data automatically when downloading"
msgstr ""
-#: rc.c:160
+#: rc.c:170
msgid "Run external viewer in a separate session"
msgstr ""
-#: rc.c:162
+#: rc.c:172
msgid "Run external viewer in the background"
msgstr ""
-#: rc.c:164
+#: rc.c:174
msgid "Use external program for directory listing"
msgstr ""
-#: rc.c:165
+#: rc.c:175
msgid "URL of directory listing command"
msgstr ""
-#: rc.c:167
+#: rc.c:177
msgid "Enable dictionary lookup through CGI"
msgstr ""
-#: rc.c:168
+#: rc.c:178
msgid "URL of dictionary lookup command"
msgstr ""
-#: rc.c:170
+#: rc.c:180
msgid "Display link name for images lacking ALT"
msgstr ""
-#: rc.c:171
+#: rc.c:181
msgid "Index file for directories"
msgstr ""
-#: rc.c:172
+#: rc.c:182
msgid "Prepend http:// to URL automatically"
msgstr ""
-#: rc.c:173
+#: rc.c:183
msgid "Default value for open-URL command"
msgstr ""
-#: rc.c:174
+#: rc.c:184
msgid "Decode Content-Transfer-Encoding when saving"
msgstr ""
-#: rc.c:175
+#: rc.c:185
msgid "Preserve timestamp when saving"
msgstr ""
-#: rc.c:177
+#: rc.c:187
msgid "Enable mouse"
msgstr ""
-#: rc.c:178
+#: rc.c:188
msgid "Scroll in reverse direction of mouse drag"
msgstr ""
-#: rc.c:179
+#: rc.c:189
msgid "Behavior of wheel scroll speed"
msgstr ""
-#: rc.c:180
+#: rc.c:190
msgid "(A only)Scroll by # (%) of screen"
msgstr ""
-#: rc.c:181
+#: rc.c:191
msgid "(B only)Scroll by # lines"
msgstr ""
-#: rc.c:183
+#: rc.c:193
msgid "Free memory of undisplayed buffers"
msgstr ""
-#: rc.c:184
+#: rc.c:194
msgid "Suppress `Referer:' header"
msgstr ""
-#: rc.c:185
+#: rc.c:195
msgid "Search case-insensitively"
msgstr ""
-#: rc.c:186
+#: rc.c:196
msgid "Use LESSOPEN"
msgstr ""
-#: rc.c:189
+#: rc.c:199
msgid "Perform SSL server verification"
msgstr ""
-#: rc.c:190
+#: rc.c:200
msgid "PEM encoded certificate file of client"
msgstr ""
-#: rc.c:191
+#: rc.c:201
msgid "PEM encoded private key file of client"
msgstr ""
-#: rc.c:192
+#: rc.c:202
msgid "Path to directory for PEM encoded certificates of CAs"
msgstr ""
-#: rc.c:193
+#: rc.c:203
msgid "File consisting of PEM encoded certificates of CAs"
msgstr ""
-#: rc.c:195
+#: rc.c:205
msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
msgstr ""
-#: rc.c:198
+#: rc.c:208
msgid "Enable cookie processing"
msgstr ""
-#: rc.c:199
+#: rc.c:209
msgid "Print a message when receiving a cookie"
msgstr ""
-#: rc.c:200
+#: rc.c:210
msgid "Accept cookies"
msgstr ""
-#: rc.c:201
+#: rc.c:211
msgid "Action to be taken on invalid cookie"
msgstr ""
-#: rc.c:202
+#: rc.c:212
msgid "Domains to reject cookies from"
msgstr ""
-#: rc.c:203
+#: rc.c:213
msgid "Domains to accept cookies from"
msgstr ""
-#: rc.c:204
+#: rc.c:214
msgid "Domains to avoid [wrong number of dots]"
msgstr ""
-#: rc.c:206
+#: rc.c:216
msgid "Number of redirections to follow"
msgstr ""
-#: rc.c:207
+#: rc.c:217
msgid "Enable processing of meta-refresh tag"
msgstr ""
-#: rc.c:210
+#: rc.c:220
msgid "Enable Migemo (Roma-ji search)"
msgstr ""
-#: rc.c:211
+#: rc.c:221
msgid "Migemo command"
msgstr ""
-#: rc.c:215
+#: rc.c:225
msgid "Display charset"
msgstr ""
-#: rc.c:216
+#: rc.c:226
msgid "Default document charset"
msgstr ""
-#: rc.c:217
+#: rc.c:227
msgid "Automatic charset detect when loading"
msgstr ""
-#: rc.c:218
+#: rc.c:228
msgid "System charset"
msgstr ""
-#: rc.c:219
+#: rc.c:229
msgid "System charset follows locale(LC_CTYPE)"
msgstr ""
-#: rc.c:220
+#: rc.c:230
msgid "Output halfdump with display charset"
msgstr ""
-#: rc.c:221
+#: rc.c:231
msgid "Use multi column characters"
msgstr ""
-#: rc.c:222
+#: rc.c:232
msgid "Use combining characters"
msgstr ""
-#: rc.c:223
+#: rc.c:233
msgid "Use double width for some Unicode characters"
msgstr ""
-#: rc.c:224
+#: rc.c:234
msgid "Use Unicode language tags"
msgstr ""
-#: rc.c:225
+#: rc.c:235
msgid "Charset conversion using Unicode map"
msgstr ""
-#: rc.c:226
+#: rc.c:236
msgid "Charset conversion when loading"
msgstr ""
-#: rc.c:227
+#: rc.c:237
msgid "Adjust search string for document charset"
msgstr ""
-#: rc.c:228
+#: rc.c:238
msgid "Fix character width when conversion"
msgstr ""
-#: rc.c:229
+#: rc.c:239
msgid "Use GB 12345 Unicode map instead of GB 2312's"
msgstr ""
-#: rc.c:230
+#: rc.c:240
msgid "Use JIS X 0201 Roman for ISO-2022-JP"
msgstr ""
-#: rc.c:231
+#: rc.c:241
msgid "Use JIS C 6226:1978 for ISO-2022-JP"
msgstr ""
-#: rc.c:232
+#: rc.c:242
msgid "Use JIS X 0201 Katakana"
msgstr ""
-#: rc.c:233
+#: rc.c:243
msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
msgstr ""
-#: rc.c:234
+#: rc.c:244
msgid "Use JIS X 0213:2000 (2000JIS)"
msgstr ""
-#: rc.c:235
+#: rc.c:245
msgid "Strict ISO-2022-JP/KR/CN"
msgstr ""
-#: rc.c:236
+#: rc.c:246
msgid "Treat 4 bytes char. of GB18030 as Unicode"
msgstr ""
-#: rc.c:237
+#: rc.c:247
msgid "Simple Preserve space"
msgstr ""
-#: rc.c:240
+#: rc.c:250
msgid "keymap file"
msgstr ""
-#: rc.c:257
+#: rc.c:267
msgid "black"
msgstr ""
-#: rc.c:258
+#: rc.c:268
msgid "red"
msgstr ""
-#: rc.c:259
+#: rc.c:269
msgid "green"
msgstr ""
-#: rc.c:260
+#: rc.c:270
msgid "yellow"
msgstr ""
-#: rc.c:261
+#: rc.c:271
msgid "blue"
msgstr ""
-#: rc.c:262
+#: rc.c:272
msgid "magenta"
msgstr ""
-#: rc.c:263
+#: rc.c:273
msgid "cyan"
msgstr ""
-#: rc.c:264
+#: rc.c:274
msgid "white"
msgstr ""
-#: rc.c:265
+#: rc.c:275
msgid "terminal"
msgstr ""
-#: rc.c:284
+#: rc.c:294
msgid "none"
msgstr ""
-#: rc.c:285
+#: rc.c:295
msgid "current URL"
msgstr ""
-#: rc.c:286
+#: rc.c:296
msgid "link URL"
msgstr ""
-#: rc.c:291
+#: rc.c:301
msgid "simple"
msgstr ""
-#: rc.c:292
+#: rc.c:302
msgid "use tag"
msgstr ""
-#: rc.c:293
+#: rc.c:303
msgid "fontify"
msgstr ""
-#: rc.c:299
+#: rc.c:309
msgid "A:relative to screen height"
msgstr ""
-#: rc.c:300
+#: rc.c:310
msgid "B:fixed speed"
msgstr ""
-#: rc.c:307
+#: rc.c:317
msgid "unspecified"
msgstr ""
-#: rc.c:308
+#: rc.c:318
msgid "inet inet6"
msgstr ""
-#: rc.c:309
+#: rc.c:319
msgid "inet6 inet"
msgstr ""
-#: rc.c:310
+#: rc.c:320
msgid "inet only"
msgstr ""
-#: rc.c:311
+#: rc.c:321
msgid "inet6 only"
msgstr ""
-#: rc.c:318
+#: rc.c:328
msgid "discard"
msgstr ""
-#: rc.c:320
+#: rc.c:330
msgid "accept"
msgstr ""
-#: rc.c:322
+#: rc.c:332
msgid "ask"
msgstr ""
-#: rc.c:329
+#: rc.c:339
msgid "use internal mailer instead"
msgstr ""
-#: rc.c:331
+#: rc.c:341
msgid "ignore options and use only the address"
msgstr ""
-#: rc.c:332
+#: rc.c:342
msgid "use full mailto URL"
msgstr ""
-#: rc.c:341
+#: rc.c:351
msgid "OFF"
msgstr ""
-#: rc.c:342
+#: rc.c:352
msgid "Only ISO 2022"
msgstr ""
-#: rc.c:343
+#: rc.c:353
msgid "ON"
msgstr ""
-#: rc.c:349
+#: rc.c:359
msgid "ASCII"
msgstr ""
-#: rc.c:350
+#: rc.c:360
msgid "charset specific"
msgstr ""
-#: rc.c:351
+#: rc.c:361
msgid "DEC special graphics"
msgstr ""
-#: rc.c:714
+#: rc.c:740
msgid "Display Settings"
msgstr ""
-#: rc.c:716
+#: rc.c:742
msgid "Color Settings"
msgstr ""
-#: rc.c:718
+#: rc.c:744
msgid "Miscellaneous Settings"
msgstr ""
-#: rc.c:719
+#: rc.c:745
msgid "Directory Settings"
msgstr ""
-#: rc.c:720
+#: rc.c:746
msgid "External Program Settings"
msgstr ""
-#: rc.c:721
+#: rc.c:747
msgid "Network Settings"
msgstr ""
-#: rc.c:722
+#: rc.c:748
msgid "Proxy Settings"
msgstr ""
-#: rc.c:724
+#: rc.c:750
msgid "SSL Settings"
msgstr ""
-#: rc.c:727
+#: rc.c:753
msgid "Cookie Settings"
msgstr ""
-#: rc.c:730
+#: rc.c:756
msgid "Charset Settings"
msgstr ""
@@ -874,6 +906,6 @@ msgstr ""
#. * header. For example, ja.po should translate it as
#. * "ja;q=1.0, en;q=0.5" like that.
#.
-#: rc.c:1209
+#: rc.c:1238
msgid "en;q=1.0"
msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..8cfa8fd
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,916 @@
+# zh_CN translation for w3m
+# Copyright (C) YEAR THE w3m'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the w3m package.
+# Junde Yi <lmy441900@gmail.com>, 2014.
+# Mingcong Bai <jeffbai@aosc.xyz>, 2014.
+# liushuyu <liushuyu_011@126.com>, 2014.
+# Xingda Zheng <icenowy@outlook.com>, 2014.
+# Mingye Wang (Arthur2e5) <arthur200126@gmail.com>, 2014, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: w3m 0.5.3\n"
+"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
+"POT-Creation-Date: 2016-03-14 19:47+0900\n"
+"PO-Revision-Date: 2016-03-14 19:51+0900\n"
+"Last-Translator: Tatsuya Kinoshita <tats@debian.org>\n"
+"Language-Team: AOSC zh_CN <aosc@members.fsf.org>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.6\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: menu.c:269
+msgid " Back (b) "
+msgstr " 后退 (b) "
+
+#: menu.c:270
+msgid " Select Buffer(s) "
+msgstr " 选择缓冲区 "
+
+#: menu.c:272
+msgid " Select Tab (t) "
+msgstr " 选择标签 (t) "
+
+#: menu.c:274
+msgid " View Source (v) "
+msgstr " 查看源码 (v) "
+
+#: menu.c:275
+msgid " Edit Source (e) "
+msgstr " 修改源码 (e) "
+
+#: menu.c:276
+msgid " Save Source (S) "
+msgstr " 保存源码 (S) "
+
+#: menu.c:277
+msgid " Reload (r) "
+msgstr " 重新载入 (r) "
+
+#: menu.c:278 menu.c:285 menu.c:289
+msgid " ---------------- "
+msgstr " ---------------- "
+
+#: menu.c:279
+msgid " Go Link (a) "
+msgstr " 转到链接 (a) "
+
+#: menu.c:280
+msgid " on New Tab (n) "
+msgstr " 在新标签 (n) "
+
+#: menu.c:281
+msgid " Save Link (A) "
+msgstr " 保存链接 (A) "
+
+#: menu.c:282
+msgid " View Image (i) "
+msgstr " 查看图片 (i) "
+
+#: menu.c:283
+msgid " Save Image (I) "
+msgstr " 保存图片 (I) "
+
+#: menu.c:284
+msgid " View Frame (f) "
+msgstr " 查看框架 (f) "
+
+#: menu.c:286
+msgid " Bookmark (B) "
+msgstr " 书签 (B) "
+
+#: menu.c:287
+msgid " Help (h) "
+msgstr " 帮助 (h) "
+
+#: menu.c:288
+msgid " Option (o) "
+msgstr " 选项 (o) "
+
+#: menu.c:290
+msgid " Quit (q) "
+msgstr " 退出 (q) "
+
+#: rc.c:62
+msgid "External Viewer Setup"
+msgstr "外部查看器设置"
+
+#: rc.c:63
+msgid "Tab width in characters"
+msgstr "文字中的 TAB 宽度"
+
+#: rc.c:64
+msgid "Indent for HTML rendering"
+msgstr "用于 HTML 渲染"
+
+#: rc.c:65
+msgid "Number of pixels per character (4.0...32.0)"
+msgstr "每字体大小的像素值 (4.0...32.0)"
+
+#: rc.c:66
+msgid "Number of pixels per line (4.0...64.0)"
+msgstr "每行的像素数 (4.0...64.0)"
+
+#: rc.c:67
+msgid "Number of remembered lines when used as a pager"
+msgstr "当作为分页器使用时记忆的行数"
+
+#: rc.c:68
+msgid "Use URL history"
+msgstr "使用 URL 历史记录"
+
+#: rc.c:69
+msgid "Number of remembered URL"
+msgstr "记录的 URL 数量"
+
+#: rc.c:70
+msgid "Save URL history"
+msgstr "保存 URL 历史"
+
+#: rc.c:71
+msgid "Render frames automatically"
+msgstr "自动渲染框架"
+
+#: rc.c:72
+msgid "Treat argument without scheme as URL"
+msgstr "将无格式的参数看作 URL"
+
+#: rc.c:73
+msgid "Use _self as default target"
+msgstr "将自身作为默认目标 (_S)"
+
+#: rc.c:74
+msgid "Open link on new tab if target is _blank or _new"
+msgstr "如果目标为空 (_b) 或新建 (_n) 在新标签打开页面"
+
+#: rc.c:75
+msgid "Open download list panel on new tab"
+msgstr "打开下载列表面板于新标签"
+
+#: rc.c:76
+msgid "Display link URL automatically"
+msgstr "自动显示链接 URL"
+
+#: rc.c:77
+msgid "Display link numbers"
+msgstr "显示链接编号"
+
+#: rc.c:78
+msgid "Display decoded URL"
+msgstr "显示解码后的 URL"
+
+#: rc.c:79
+msgid "Display current line number"
+msgstr "显示当前行数"
+
+#: rc.c:80
+msgid "Display inline images"
+msgstr "显示内联图像"
+
+#: rc.c:81
+msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
+msgstr "为不带有 ALT 或 TITLE 字串的内联图像显示伪 ALT"
+
+#: rc.c:83
+msgid "Load inline images automatically"
+msgstr "自动载入行内图像"
+
+#: rc.c:84
+msgid "Maximum processes for parallel image loading"
+msgstr "多线程图像加载的最大进程数"
+
+#: rc.c:85
+msgid "Use external image viewer"
+msgstr "使用外部图片查看器"
+
+#: rc.c:86
+msgid "Scale of image (%)"
+msgstr "图像比例尺 (%)"
+
+#: rc.c:87
+msgid "External command to display image"
+msgstr "用于显示图像的外部命令"
+
+#: rc.c:88
+msgid "Use link list of image map"
+msgstr "使用图像映射的链接列表"
+
+#: rc.c:90
+msgid "Display file names in multi-column format"
+msgstr "以多列格式显示文件名"
+
+#: rc.c:91
+msgid "Use ASCII equivalents to display entities"
+msgstr "使用对应的 ASCII 编码来显示实体 "
+
+#: rc.c:92
+msgid "Character type for border of table and menu"
+msgstr "表格和菜单边框的字符类型"
+
+#: rc.c:93
+msgid "Display table borders, ignore value of BORDER"
+msgstr "显示表格边框,忽略 BORDER 数值"
+
+#: rc.c:94
+msgid "Fold lines in TEXTAREA"
+msgstr "在文本区 (TEXTAREA) 中折叠行"
+
+#: rc.c:95
+msgid "Display INS, DEL, S and STRIKE element"
+msgstr "显示 INS, DEL, S 及 STRIKE 元素"
+
+#: rc.c:96
+msgid "Display with color"
+msgstr "使用带颜色的显示"
+
+#: rc.c:97
+msgid "Color of normal character"
+msgstr "一般文字颜色"
+
+#: rc.c:98
+msgid "Color of anchor"
+msgstr "链接文字颜色"
+
+#: rc.c:99
+msgid "Color of image link"
+msgstr "图片链接颜色"
+
+#: rc.c:100
+msgid "Color of form"
+msgstr "表格颜色"
+
+#: rc.c:101
+msgid "Enable coloring of active link"
+msgstr "为活动链接开启上色"
+
+#: rc.c:102
+msgid "Color of currently active link"
+msgstr "当前活动链接的颜色"
+
+#: rc.c:103
+msgid "Use visited link color"
+msgstr "为访问过的链接上色"
+
+#: rc.c:104
+msgid "Color of visited link"
+msgstr "已访问链接颜色"
+
+#: rc.c:105
+msgid "Color of background"
+msgstr "背景色"
+
+#: rc.c:106
+msgid "Color of mark"
+msgstr "标记颜色"
+
+#: rc.c:107
+msgid "Use proxy"
+msgstr "使用代理服务器"
+
+#: rc.c:108
+msgid "URL of HTTP proxy host"
+msgstr "HTTP 代理主机地址"
+
+#: rc.c:110
+msgid "URL of HTTPS proxy host"
+msgstr "HTTPS 代理主机地址"
+
+#: rc.c:113
+msgid "URL of GOPHER proxy host"
+msgstr "GOPHER 代理主机地址"
+
+#: rc.c:115
+msgid "URL of FTP proxy host"
+msgstr "FTP 代理主机地址"
+
+#: rc.c:116
+msgid "Domains to be accessed directly (no proxy)"
+msgstr "直接访问而不是用代理服务器访问的 URL"
+
+#: rc.c:117
+msgid "Check noproxy by network address"
+msgstr "根据网络地址检查 noproxy"
+
+#: rc.c:118
+msgid "Disable cache"
+msgstr "禁用缓存"
+
+#: rc.c:120
+msgid "News server"
+msgstr "新闻服务器"
+
+#: rc.c:121
+msgid "Mode of news server"
+msgstr "新闻服务器模式"
+
+#: rc.c:122
+msgid "Number of news messages"
+msgstr "新闻消息的数量"
+
+#: rc.c:124
+msgid "Order of name resolution"
+msgstr "名称解析顺序"
+
+#: rc.c:125
+msgid "Directory corresponding to / (document root)"
+msgstr "对应 / 的目录 (文档根目录)"
+
+#: rc.c:126
+msgid "Directory corresponding to /~user"
+msgstr "对应 /~user 的目录"
+
+#: rc.c:127
+msgid "Directory corresponding to /cgi-bin"
+msgstr "对应 /cgi-bin 的目录"
+
+#: rc.c:128
+msgid "Confirm when quitting with q"
+msgstr "使用 q 键退出时请求确认"
+
+#: rc.c:129
+msgid "Close tab if buffer is last when back"
+msgstr "在返回时缓冲区还是以前状态就关闭标签页"
+
+#: rc.c:131
+msgid "Enable mark operations"
+msgstr "启用标记操作"
+
+#: rc.c:133
+msgid "Enable Emacs-style line editing"
+msgstr "启用 Emacs 风格的行编辑"
+
+#: rc.c:134
+msgid "Enable vi-like numeric prefix"
+msgstr "启动 vi 式的数字跳转"
+
+#: rc.c:135
+msgid "Move cursor to top line when going to label"
+msgstr "当移动到标签时将光标移到最顶行"
+
+#: rc.c:136
+msgid "Move cursor to top line when moving to next page"
+msgstr "当转到下一页时将光标移到最顶行"
+
+#: rc.c:137
+msgid "Fold lines of plain text file"
+msgstr "对纯文本文件实行行折叠"
+
+#: rc.c:138
+msgid "Show line numbers"
+msgstr "显示行号"
+
+#: rc.c:139
+msgid "Show search string"
+msgstr "显示搜索字符串"
+
+#: rc.c:140
+msgid "List of mime.types files"
+msgstr "mime.type 文件列表"
+
+#: rc.c:141
+msgid "List of mailcap files"
+msgstr "mailcap 文件列表"
+
+#: rc.c:142
+msgid "List of urimethodmap files"
+msgstr "urlmethodmap 文件列表"
+
+#: rc.c:143
+msgid "Editor"
+msgstr "编辑器"
+
+#: rc.c:144
+msgid "Mailer"
+msgstr "发送者"
+
+#: rc.c:145
+msgid "How to call Mailer for mailto URLs with options"
+msgstr "启动 mailto 地址时调用电子邮件程序的方式和参数"
+
+#: rc.c:146
+msgid "External browser"
+msgstr "外部浏览器"
+
+#: rc.c:147
+msgid "2nd external browser"
+msgstr "第二外部浏览器"
+
+#: rc.c:148
+msgid "3rd external browser"
+msgstr "第三外部浏览器"
+
+#: rc.c:149
+msgid "4th external browser"
+msgstr "第四外部浏览器"
+
+#: rc.c:150
+msgid "5th external browser"
+msgstr "第五外部浏览器"
+
+#: rc.c:151
+msgid "6th external browser"
+msgstr "第六外部浏览器"
+
+#: rc.c:152
+msgid "7th external browser"
+msgstr "第七外部浏览器"
+
+#: rc.c:153
+msgid "8th external browser"
+msgstr "第八外部浏览器"
+
+#: rc.c:154
+msgid "9th external browser"
+msgstr "第九外部浏览器"
+
+#: rc.c:155
+msgid "Disable secret file security check"
+msgstr "关闭秘密文件安全检查"
+
+#: rc.c:156
+msgid "Password file"
+msgstr "密码文件"
+
+#: rc.c:157
+msgid "File for setting form on loading"
+msgstr "设置窗口加载时的文件"
+
+#: rc.c:158
+msgid "File for preferences for each site"
+msgstr "各个站点的首选项文件"
+
+#: rc.c:159
+msgid "Password for anonymous FTP (your mail address)"
+msgstr "匿名FTP密码(您的邮箱地址)"
+
+#: rc.c:160
+msgid "Generate domain part of password for FTP"
+msgstr "为 FTP 生成密码的域部分"
+
+#: rc.c:161
+msgid "User-Agent identification string"
+msgstr "User-Agent 串"
+
+#: rc.c:162
+msgid "Accept-Encoding header"
+msgstr "接受的编码 (Accept-Encoding) 报头"
+
+#: rc.c:163
+msgid "Accept header"
+msgstr "接受 (Accept) 报头"
+
+#: rc.c:164
+msgid "Accept-Language header"
+msgstr "接受的语言 (Accept-Language) 报头"
+
+#: rc.c:165
+msgid "Treat URL-like strings as links in all pages"
+msgstr "将所有页面中类似于 URL 的字符串当做链接"
+
+#: rc.c:166
+msgid "Wrap search"
+msgstr "包装搜索结果"
+
+#: rc.c:167
+msgid "Display unseen objects (e.g. bgimage tag)"
+msgstr "显示看不到的对象 (例如,bdimage标签)"
+
+#: rc.c:168
+msgid "Uncompress compressed data automatically when downloading"
+msgstr "在下载时自动解压被压缩的数据"
+
+#: rc.c:170
+msgid "Run external viewer in a separate session"
+msgstr "在另一个会话中运行外部查看器"
+
+#: rc.c:172
+msgid "Run external viewer in the background"
+msgstr "在后台运行外部查看器"
+
+#: rc.c:174
+msgid "Use external program for directory listing"
+msgstr "使用外部程序列出目录"
+
+#: rc.c:175
+msgid "URL of directory listing command"
+msgstr "目录列表命令的网址"
+
+#: rc.c:177
+msgid "Enable dictionary lookup through CGI"
+msgstr "启用基于 CGI 的词典查询"
+
+#: rc.c:178
+msgid "URL of dictionary lookup command"
+msgstr "字典查找命令的网址"
+
+#: rc.c:180
+msgid "Display link name for images lacking ALT"
+msgstr "对缺少 ALT 的图片显示链接名称"
+
+#: rc.c:181
+msgid "Index file for directories"
+msgstr "目录的索引文件"
+
+#: rc.c:182
+msgid "Prepend http:// to URL automatically"
+msgstr "自动在 URL 前加入 http://"
+
+#: rc.c:183
+msgid "Default value for open-URL command"
+msgstr "打开网址命令的默认值"
+
+#: rc.c:184
+msgid "Decode Content-Transfer-Encoding when saving"
+msgstr "保存时对内容传输编码信息 (Content-Transfer-Encoding) 进行解码"
+
+#: rc.c:185
+msgid "Preserve timestamp when saving"
+msgstr "在保存时保留时间戳"
+
+#: rc.c:187
+msgid "Enable mouse"
+msgstr "启用鼠标"
+
+#: rc.c:188
+msgid "Scroll in reverse direction of mouse drag"
+msgstr "向鼠标拖动的反方向滚动"
+
+#: rc.c:189
+msgid "Behavior of wheel scroll speed"
+msgstr "滚轮滚动速度行为"
+
+#: rc.c:190
+msgid "(A only)Scroll by # (%) of screen"
+msgstr "(仅 A) 每次滚动 # (%) 的屏幕高度"
+
+#: rc.c:191
+msgid "(B only)Scroll by # lines"
+msgstr "(仅 B) 每次滚动 # 行"
+
+#: rc.c:193
+msgid "Free memory of undisplayed buffers"
+msgstr "释放未显示缓存的存储"
+
+#: rc.c:194
+msgid "Suppress `Referer:' header"
+msgstr "禁止 'Referer:' 文件头"
+
+#: rc.c:195
+msgid "Search case-insensitively"
+msgstr "搜索不区分大小写"
+
+#: rc.c:196
+msgid "Use LESSOPEN"
+msgstr "使用 LESSOPEN"
+
+#: rc.c:199
+msgid "Perform SSL server verification"
+msgstr "进行 SSL 服务器检查"
+
+#: rc.c:200
+msgid "PEM encoded certificate file of client"
+msgstr "客户端的 PEM 编码证书文件"
+
+#: rc.c:201
+msgid "PEM encoded private key file of client"
+msgstr "客户端的 PEM 编码私钥文件"
+
+#: rc.c:202
+msgid "Path to directory for PEM encoded certificates of CAs"
+msgstr "PEM 编码 CA 证书目录的路径"
+
+#: rc.c:203
+msgid "File consisting of PEM encoded certificates of CAs"
+msgstr "包含 PEM 编码 CA 证书的文件"
+
+#: rc.c:205
+msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
+msgstr "被禁止的 SSL 方式列表 (2: SSLv2, 3: SSLv3, t:TLSv1)"
+
+#: rc.c:208
+msgid "Enable cookie processing"
+msgstr "开启 Cookie 处理"
+
+#: rc.c:209
+msgid "Print a message when receiving a cookie"
+msgstr "在接收一个 Cookie 时显示一个消息"
+
+#: rc.c:210
+msgid "Accept cookies"
+msgstr "接受 Cookies"
+
+#: rc.c:211
+msgid "Action to be taken on invalid cookie"
+msgstr "对无效 Cookies 进行的操作"
+
+#: rc.c:212
+msgid "Domains to reject cookies from"
+msgstr "拒绝如下域的 Cookies"
+
+#: rc.c:213
+msgid "Domains to accept cookies from"
+msgstr "接受如下域的 Cookies"
+
+#: rc.c:214
+msgid "Domains to avoid [wrong number of dots]"
+msgstr "避免访问的域 [错误的点数]"
+
+#: rc.c:216
+msgid "Number of redirections to follow"
+msgstr "跟随的重定向数量"
+
+#: rc.c:217
+msgid "Enable processing of meta-refresh tag"
+msgstr "开启 meta-refresh 标签处理"
+
+#: rc.c:220
+msgid "Enable Migemo (Roma-ji search)"
+msgstr "开启 Migemo (罗马字搜索)"
+
+#: rc.c:221
+msgid "Migemo command"
+msgstr "Migemo 命令"
+
+#: rc.c:225
+msgid "Display charset"
+msgstr "显示字符集"
+
+#: rc.c:226
+msgid "Default document charset"
+msgstr "默认文档字符集"
+
+#: rc.c:227
+msgid "Automatic charset detect when loading"
+msgstr "在载入时进行自动字符集探测"
+
+#: rc.c:228
+msgid "System charset"
+msgstr "系统字符集"
+
+#: rc.c:229
+msgid "System charset follows locale(LC_CTYPE)"
+msgstr "根据系统设置 (LC_CTYPE) 选定系统字符集"
+
+#: rc.c:230
+msgid "Output halfdump with display charset"
+msgstr "使用显示字符集输出 halfdump"
+
+#: rc.c:231
+msgid "Use multi column characters"
+msgstr "使用多列字符"
+
+#: rc.c:232
+msgid "Use combining characters"
+msgstr "使用合并字符"
+
+#: rc.c:233
+msgid "Use double width for some Unicode characters"
+msgstr "使 Unicode 字符使用双重宽度"
+
+#: rc.c:234
+msgid "Use Unicode language tags"
+msgstr "使用 Unicode 语言标签"
+
+#: rc.c:235
+msgid "Charset conversion using Unicode map"
+msgstr "使用 Unicode 映射进行字符集转换"
+
+#: rc.c:236
+msgid "Charset conversion when loading"
+msgstr "在载入时进行字符集转换"
+
+#: rc.c:237
+msgid "Adjust search string for document charset"
+msgstr "调整文档字符集的搜索字串"
+
+#: rc.c:238
+msgid "Fix character width when conversion"
+msgstr "在转换时固定字符宽度"
+
+#: rc.c:239
+msgid "Use GB 12345 Unicode map instead of GB 2312's"
+msgstr "使用 GB 12345 Unicode 映射而非 GB 2312"
+
+#: rc.c:240
+msgid "Use JIS X 0201 Roman for ISO-2022-JP"
+msgstr "使用 JIS X 0201 罗马字母于 ISO-2022-JP"
+
+#: rc.c:241
+msgid "Use JIS C 6226:1978 for ISO-2022-JP"
+msgstr "使用 JIS C 6226:1978 于 ISO-2022-JP"
+
+#: rc.c:242
+msgid "Use JIS X 0201 Katakana"
+msgstr "使用 JIS X 0201 片假名"
+
+#: rc.c:243
+msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
+msgstr "使用 JIS X 0212:1990 (补充汉字)"
+
+#: rc.c:244
+msgid "Use JIS X 0213:2000 (2000JIS)"
+msgstr "使用 JIS X 0213:2000 (2000JIS)"
+
+#: rc.c:245
+msgid "Strict ISO-2022-JP/KR/CN"
+msgstr "严格 ISO-2022-JP/KR/CN"
+
+#: rc.c:246
+msgid "Treat 4 bytes char. of GB18030 as Unicode"
+msgstr "视 GB18030 编码的 4 字节字符为 Unicode"
+
+#: rc.c:247
+msgid "Simple Preserve space"
+msgstr "简单的保留空间"
+
+#: rc.c:250
+msgid "keymap file"
+msgstr "键盘映射文件"
+
+#: rc.c:267
+msgid "black"
+msgstr "黑色"
+
+#: rc.c:268
+msgid "red"
+msgstr "红色"
+
+#: rc.c:269
+msgid "green"
+msgstr "绿色"
+
+#: rc.c:270
+msgid "yellow"
+msgstr "黄色"
+
+#: rc.c:271
+msgid "blue"
+msgstr "蓝色"
+
+#: rc.c:272
+msgid "magenta"
+msgstr "品红"
+
+#: rc.c:273
+msgid "cyan"
+msgstr "青色"
+
+#: rc.c:274
+msgid "white"
+msgstr "白色"
+
+#: rc.c:275
+msgid "terminal"
+msgstr "终端"
+
+#: rc.c:294
+msgid "none"
+msgstr "无"
+
+#: rc.c:295
+msgid "current URL"
+msgstr "当前 URL"
+
+#: rc.c:296
+msgid "link URL"
+msgstr "链接 URL"
+
+#: rc.c:301
+msgid "simple"
+msgstr "简单"
+
+#: rc.c:302
+msgid "use tag"
+msgstr "使用标签"
+
+#: rc.c:303
+msgid "fontify"
+msgstr ""
+
+#: rc.c:309
+msgid "A:relative to screen height"
+msgstr "A:相对于屏幕高度"
+
+#: rc.c:310
+msgid "B:fixed speed"
+msgstr "B:固定速度"
+
+#: rc.c:317
+msgid "unspecified"
+msgstr "未指定"
+
+#: rc.c:318
+msgid "inet inet6"
+msgstr ""
+
+#: rc.c:319
+msgid "inet6 inet"
+msgstr ""
+
+#: rc.c:320
+msgid "inet only"
+msgstr "仅 inet"
+
+#: rc.c:321
+msgid "inet6 only"
+msgstr "仅 inet6"
+
+#: rc.c:328
+msgid "discard"
+msgstr "丢弃"
+
+#: rc.c:330
+msgid "accept"
+msgstr "接受"
+
+#: rc.c:332
+msgid "ask"
+msgstr "询问"
+
+#: rc.c:339
+msgid "use internal mailer instead"
+msgstr "使用内建邮件发送器"
+
+#: rc.c:341
+msgid "ignore options and use only the address"
+msgstr "忽略选项而只使用地址"
+
+#: rc.c:342
+msgid "use full mailto URL"
+msgstr "使用整个 mailto URL"
+
+#: rc.c:351
+msgid "OFF"
+msgstr "关"
+
+#: rc.c:352
+msgid "Only ISO 2022"
+msgstr "仅 ISO 2022"
+
+#: rc.c:353
+msgid "ON"
+msgstr "开"
+
+#: rc.c:359
+msgid "ASCII"
+msgstr "ASCII"
+
+#: rc.c:360
+msgid "charset specific"
+msgstr "字符集特定"
+
+#: rc.c:361
+msgid "DEC special graphics"
+msgstr "DEC 特殊图像"
+
+#: rc.c:740
+msgid "Display Settings"
+msgstr "显示设置"
+
+#: rc.c:742
+msgid "Color Settings"
+msgstr "颜色设置"
+
+#: rc.c:744
+msgid "Miscellaneous Settings"
+msgstr "杂项设置"
+
+#: rc.c:745
+msgid "Directory Settings"
+msgstr "目录设置"
+
+#: rc.c:746
+msgid "External Program Settings"
+msgstr "外部程序设置"
+
+#: rc.c:747
+msgid "Network Settings"
+msgstr "网络设置"
+
+#: rc.c:748
+msgid "Proxy Settings"
+msgstr "代理设置"
+
+#: rc.c:750
+msgid "SSL Settings"
+msgstr "SSL 设置"
+
+#: rc.c:753
+msgid "Cookie Settings"
+msgstr "Cookie 设置"
+
+#: rc.c:756
+msgid "Charset Settings"
+msgstr "字符集设置"
+
+#. TRANSLATORS:
+#. * AcceptLang default: this is used in Accept-Language: HTTP request
+#. * header. For example, ja.po should translate it as
+#. * "ja;q=1.0, en;q=0.5" like that.
+#.
+#: rc.c:1238
+msgid "en;q=1.0"
+msgstr "zh-CN;q=1.0, zh-Hans;q=0.9, zh;q=0.8, en;q=0.6"
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..954a4d2
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,916 @@
+# zh_TW translation for w3m, machine converted
+# Copyright (C) YEAR THE w3m'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the w3m package.
+# Junde Yi <lmy441900@gmail.com>, 2014.
+# Mingcong Bai <jeffbai@aosc.xyz>, 2014.
+# liushuyu <liushuyu_011@126.com>, 2014.
+# Xingda Zheng <icenowy@outlook.com>, 2014.
+# Mingye Wang (Arthur2e5) <arthur200126@gmail.com>, 2014, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: w3m 0.5.3\n"
+"Report-Msgid-Bugs-To: satodai@w3m.jp\n"
+"POT-Creation-Date: 2016-03-14 19:47+0900\n"
+"PO-Revision-Date: 2016-03-14 19:51+0900\n"
+"Last-Translator: Tatsuya Kinoshita <tats@debian.org>\n"
+"Language-Team: AOSC zh_TW fuzzy <aosc@members.fsf.org>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.6\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: menu.c:269
+msgid " Back (b) "
+msgstr " 後退 (b) "
+
+#: menu.c:270
+msgid " Select Buffer(s) "
+msgstr " 選擇緩衝區 "
+
+#: menu.c:272
+msgid " Select Tab (t) "
+msgstr " 選擇標籤 (t) "
+
+#: menu.c:274
+msgid " View Source (v) "
+msgstr " 檢視源碼 (v) "
+
+#: menu.c:275
+msgid " Edit Source (e) "
+msgstr " 修改源碼 (e) "
+
+#: menu.c:276
+msgid " Save Source (S) "
+msgstr " 儲存源碼 (S) "
+
+#: menu.c:277
+msgid " Reload (r) "
+msgstr " 重新載入 (r) "
+
+#: menu.c:278 menu.c:285 menu.c:289
+msgid " ---------------- "
+msgstr " ---------------- "
+
+#: menu.c:279
+msgid " Go Link (a) "
+msgstr " 轉到連結 (a) "
+
+#: menu.c:280
+msgid " on New Tab (n) "
+msgstr " 在新標籤 (n) "
+
+#: menu.c:281
+msgid " Save Link (A) "
+msgstr " 儲存連結 (A) "
+
+#: menu.c:282
+msgid " View Image (i) "
+msgstr " 檢視圖片 (i) "
+
+#: menu.c:283
+msgid " Save Image (I) "
+msgstr " 儲存圖片 (I) "
+
+#: menu.c:284
+msgid " View Frame (f) "
+msgstr " 檢視框架 (f) "
+
+#: menu.c:286
+msgid " Bookmark (B) "
+msgstr " 書籤 (B) "
+
+#: menu.c:287
+msgid " Help (h) "
+msgstr " 幫助 (h) "
+
+#: menu.c:288
+msgid " Option (o) "
+msgstr " 選項 (o) "
+
+#: menu.c:290
+msgid " Quit (q) "
+msgstr " 退出 (q) "
+
+#: rc.c:62
+msgid "External Viewer Setup"
+msgstr "外部檢視器設定"
+
+#: rc.c:63
+msgid "Tab width in characters"
+msgstr "文字中的 TAB 寬度"
+
+#: rc.c:64
+msgid "Indent for HTML rendering"
+msgstr "用於 HTML 渲染"
+
+#: rc.c:65
+msgid "Number of pixels per character (4.0...32.0)"
+msgstr "每字型大小的畫素值 (4.0...32.0)"
+
+#: rc.c:66
+msgid "Number of pixels per line (4.0...64.0)"
+msgstr "每行的畫素數 (4.0...64.0)"
+
+#: rc.c:67
+msgid "Number of remembered lines when used as a pager"
+msgstr "當作為分頁器使用時記憶的行數"
+
+#: rc.c:68
+msgid "Use URL history"
+msgstr "使用 URL 歷史記錄"
+
+#: rc.c:69
+msgid "Number of remembered URL"
+msgstr "記錄的 URL 數量"
+
+#: rc.c:70
+msgid "Save URL history"
+msgstr "儲存 URL 歷史"
+
+#: rc.c:71
+msgid "Render frames automatically"
+msgstr "自動渲染框架"
+
+#: rc.c:72
+msgid "Treat argument without scheme as URL"
+msgstr "將無格式的參數看作 URL"
+
+#: rc.c:73
+msgid "Use _self as default target"
+msgstr "將自身作為預設目標 (_S)"
+
+#: rc.c:74
+msgid "Open link on new tab if target is _blank or _new"
+msgstr "如果目標為空 (_b) 或新建 (_n) 在新標籤開啟頁面"
+
+#: rc.c:75
+msgid "Open download list panel on new tab"
+msgstr "開啟下載列表面板於新標籤"
+
+#: rc.c:76
+msgid "Display link URL automatically"
+msgstr "自動顯示連結 URL"
+
+#: rc.c:77
+msgid "Display link numbers"
+msgstr "顯示連結編號"
+
+#: rc.c:78
+msgid "Display decoded URL"
+msgstr "顯示解碼後的 URL"
+
+#: rc.c:79
+msgid "Display current line number"
+msgstr "顯示當前行數"
+
+#: rc.c:80
+msgid "Display inline images"
+msgstr "顯示內聯影象"
+
+#: rc.c:81
+msgid "Display pseudo-ALTs for inline images with no ALT or TITLE string"
+msgstr "為不帶有 ALT 或 TITLE 字串的內聯影象顯示偽 ALT"
+
+#: rc.c:83
+msgid "Load inline images automatically"
+msgstr "自動載入行內影象"
+
+#: rc.c:84
+msgid "Maximum processes for parallel image loading"
+msgstr "多執行緒影象載入的最大程序數"
+
+#: rc.c:85
+msgid "Use external image viewer"
+msgstr "使用外部圖片檢視器"
+
+#: rc.c:86
+msgid "Scale of image (%)"
+msgstr "影象比例尺 (%)"
+
+#: rc.c:87
+msgid "External command to display image"
+msgstr "用於顯示影象的外部命令"
+
+#: rc.c:88
+msgid "Use link list of image map"
+msgstr "使用影象對映的連結列表"
+
+#: rc.c:90
+msgid "Display file names in multi-column format"
+msgstr "以多列格式顯示檔名"
+
+#: rc.c:91
+msgid "Use ASCII equivalents to display entities"
+msgstr "使用對應的 ASCII 編碼來顯示實體 "
+
+#: rc.c:92
+msgid "Character type for border of table and menu"
+msgstr "表格和選單邊框的字元類型"
+
+#: rc.c:93
+msgid "Display table borders, ignore value of BORDER"
+msgstr "顯示錶格邊框,忽略 BORDER 數值"
+
+#: rc.c:94
+msgid "Fold lines in TEXTAREA"
+msgstr "在文字區 (TEXTAREA) 中摺疊行"
+
+#: rc.c:95
+msgid "Display INS, DEL, S and STRIKE element"
+msgstr "顯示 INS, DEL, S 及 STRIKE 元素"
+
+#: rc.c:96
+msgid "Display with color"
+msgstr "使用帶顏色的顯示"
+
+#: rc.c:97
+msgid "Color of normal character"
+msgstr "一般文字顏色"
+
+#: rc.c:98
+msgid "Color of anchor"
+msgstr "連結文字顏色"
+
+#: rc.c:99
+msgid "Color of image link"
+msgstr "圖片連結顏色"
+
+#: rc.c:100
+msgid "Color of form"
+msgstr "表格顏色"
+
+#: rc.c:101
+msgid "Enable coloring of active link"
+msgstr "為活動連結開啟上色"
+
+#: rc.c:102
+msgid "Color of currently active link"
+msgstr "當前活動連結的顏色"
+
+#: rc.c:103
+msgid "Use visited link color"
+msgstr "為訪問過的連結上色"
+
+#: rc.c:104
+msgid "Color of visited link"
+msgstr "已訪問連結顏色"
+
+#: rc.c:105
+msgid "Color of background"
+msgstr "背景色"
+
+#: rc.c:106
+msgid "Color of mark"
+msgstr "標記顏色"
+
+#: rc.c:107
+msgid "Use proxy"
+msgstr "使用代理伺服器"
+
+#: rc.c:108
+msgid "URL of HTTP proxy host"
+msgstr "HTTP 代理主機地址"
+
+#: rc.c:110
+msgid "URL of HTTPS proxy host"
+msgstr "HTTPS 代理主機地址"
+
+#: rc.c:113
+msgid "URL of GOPHER proxy host"
+msgstr "GOPHER 代理主機地址"
+
+#: rc.c:115
+msgid "URL of FTP proxy host"
+msgstr "FTP 代理主機地址"
+
+#: rc.c:116
+msgid "Domains to be accessed directly (no proxy)"
+msgstr "直接訪問而不是用代理伺服器訪問的 URL"
+
+#: rc.c:117
+msgid "Check noproxy by network address"
+msgstr "根據網路地址檢查 noproxy"
+
+#: rc.c:118
+msgid "Disable cache"
+msgstr "禁用快取"
+
+#: rc.c:120
+msgid "News server"
+msgstr "新聞伺服器"
+
+#: rc.c:121
+msgid "Mode of news server"
+msgstr "新聞伺服器模式"
+
+#: rc.c:122
+msgid "Number of news messages"
+msgstr "新聞訊息的數量"
+
+#: rc.c:124
+msgid "Order of name resolution"
+msgstr "名稱解析順序"
+
+#: rc.c:125
+msgid "Directory corresponding to / (document root)"
+msgstr "對應 / 的目錄 (文件根目錄)"
+
+#: rc.c:126
+msgid "Directory corresponding to /~user"
+msgstr "對應 /~user 的目錄"
+
+#: rc.c:127
+msgid "Directory corresponding to /cgi-bin"
+msgstr "對應 /cgi-bin 的目錄"
+
+#: rc.c:128
+msgid "Confirm when quitting with q"
+msgstr "使用 q 鍵退出時請求確認"
+
+#: rc.c:129
+msgid "Close tab if buffer is last when back"
+msgstr "在返回時緩衝區還是以前狀態就關閉標籤頁"
+
+#: rc.c:131
+msgid "Enable mark operations"
+msgstr "啟用標記操作"
+
+#: rc.c:133
+msgid "Enable Emacs-style line editing"
+msgstr "啟用 Emacs 風格的行編輯"
+
+#: rc.c:134
+msgid "Enable vi-like numeric prefix"
+msgstr "啟動 vi 式的數字跳轉"
+
+#: rc.c:135
+msgid "Move cursor to top line when going to label"
+msgstr "當移動到標籤時將游標移到最頂行"
+
+#: rc.c:136
+msgid "Move cursor to top line when moving to next page"
+msgstr "當轉到下一頁時將游標移到最頂行"
+
+#: rc.c:137
+msgid "Fold lines of plain text file"
+msgstr "對純文字檔案實行行摺疊"
+
+#: rc.c:138
+msgid "Show line numbers"
+msgstr "顯示行號"
+
+#: rc.c:139
+msgid "Show search string"
+msgstr "顯示搜尋字元串"
+
+#: rc.c:140
+msgid "List of mime.types files"
+msgstr "mime.type 檔案列表"
+
+#: rc.c:141
+msgid "List of mailcap files"
+msgstr "mailcap 檔案列表"
+
+#: rc.c:142
+msgid "List of urimethodmap files"
+msgstr "urlmethodmap 檔案列表"
+
+#: rc.c:143
+msgid "Editor"
+msgstr "編輯器"
+
+#: rc.c:144
+msgid "Mailer"
+msgstr "傳送者"
+
+#: rc.c:145
+msgid "How to call Mailer for mailto URLs with options"
+msgstr "啟動 mailto 地址時呼叫電子郵件程式的方式和參數"
+
+#: rc.c:146
+msgid "External browser"
+msgstr "外部瀏覽器"
+
+#: rc.c:147
+msgid "2nd external browser"
+msgstr "第二外部瀏覽器"
+
+#: rc.c:148
+msgid "3rd external browser"
+msgstr "第三外部瀏覽器"
+
+#: rc.c:149
+msgid "4th external browser"
+msgstr "第四外部瀏覽器"
+
+#: rc.c:150
+msgid "5th external browser"
+msgstr "第五外部瀏覽器"
+
+#: rc.c:151
+msgid "6th external browser"
+msgstr "第六外部瀏覽器"
+
+#: rc.c:152
+msgid "7th external browser"
+msgstr "第七外部瀏覽器"
+
+#: rc.c:153
+msgid "8th external browser"
+msgstr "第八外部瀏覽器"
+
+#: rc.c:154
+msgid "9th external browser"
+msgstr "第九外部瀏覽器"
+
+#: rc.c:155
+msgid "Disable secret file security check"
+msgstr "關閉祕密檔案安全檢查"
+
+#: rc.c:156
+msgid "Password file"
+msgstr "密碼檔案"
+
+#: rc.c:157
+msgid "File for setting form on loading"
+msgstr "設定視窗載入時的檔案"
+
+#: rc.c:158
+msgid "File for preferences for each site"
+msgstr "各個站點的首選項檔案"
+
+#: rc.c:159
+msgid "Password for anonymous FTP (your mail address)"
+msgstr "匿名FTP密碼(您的郵箱地址)"
+
+#: rc.c:160
+msgid "Generate domain part of password for FTP"
+msgstr "為 FTP 生成密碼的域部分"
+
+#: rc.c:161
+msgid "User-Agent identification string"
+msgstr "User-Agent 串"
+
+#: rc.c:162
+msgid "Accept-Encoding header"
+msgstr "接受的編碼 (Accept-Encoding) 報頭"
+
+#: rc.c:163
+msgid "Accept header"
+msgstr "接受 (Accept) 報頭"
+
+#: rc.c:164
+msgid "Accept-Language header"
+msgstr "接受的語言 (Accept-Language) 報頭"
+
+#: rc.c:165
+msgid "Treat URL-like strings as links in all pages"
+msgstr "將所有頁面中類似於 URL 的字元串當做連結"
+
+#: rc.c:166
+msgid "Wrap search"
+msgstr "包裝搜尋結果"
+
+#: rc.c:167
+msgid "Display unseen objects (e.g. bgimage tag)"
+msgstr "顯示看不到的物件 (例如,bdimage標籤)"
+
+#: rc.c:168
+msgid "Uncompress compressed data automatically when downloading"
+msgstr "在下載時自動解壓被壓縮的資料"
+
+#: rc.c:170
+msgid "Run external viewer in a separate session"
+msgstr "在另一個會話中執行外部檢視器"
+
+#: rc.c:172
+msgid "Run external viewer in the background"
+msgstr "在後臺執行外部檢視器"
+
+#: rc.c:174
+msgid "Use external program for directory listing"
+msgstr "使用外部程式列出目錄"
+
+#: rc.c:175
+msgid "URL of directory listing command"
+msgstr "目錄列表命令的網址"
+
+#: rc.c:177
+msgid "Enable dictionary lookup through CGI"
+msgstr "啟用基於 CGI 的詞典查詢"
+
+#: rc.c:178
+msgid "URL of dictionary lookup command"
+msgstr "字典查詢命令的網址"
+
+#: rc.c:180
+msgid "Display link name for images lacking ALT"
+msgstr "對缺少 ALT 的圖片顯示連結名稱"
+
+#: rc.c:181
+msgid "Index file for directories"
+msgstr "目錄的索引檔案"
+
+#: rc.c:182
+msgid "Prepend http:// to URL automatically"
+msgstr "自動在 URL 前加入 http://"
+
+#: rc.c:183
+msgid "Default value for open-URL command"
+msgstr "開啟網址命令的預設值"
+
+#: rc.c:184
+msgid "Decode Content-Transfer-Encoding when saving"
+msgstr "儲存時對內容傳輸編碼資訊 (Content-Transfer-Encoding) 進行解碼"
+
+#: rc.c:185
+msgid "Preserve timestamp when saving"
+msgstr "在儲存時保留時間戳"
+
+#: rc.c:187
+msgid "Enable mouse"
+msgstr "啟用滑鼠"
+
+#: rc.c:188
+msgid "Scroll in reverse direction of mouse drag"
+msgstr "向滑鼠拖動的反方向滾動"
+
+#: rc.c:189
+msgid "Behavior of wheel scroll speed"
+msgstr "滾輪滾動速度行為"
+
+#: rc.c:190
+msgid "(A only)Scroll by # (%) of screen"
+msgstr "(僅 A) 每次滾動 # (%) 的螢幕高度"
+
+#: rc.c:191
+msgid "(B only)Scroll by # lines"
+msgstr "(僅 B) 每次滾動 # 行"
+
+#: rc.c:193
+msgid "Free memory of undisplayed buffers"
+msgstr "釋放未顯示快取的儲存"
+
+#: rc.c:194
+msgid "Suppress `Referer:' header"
+msgstr "禁止 'Referer:' 檔案頭"
+
+#: rc.c:195
+msgid "Search case-insensitively"
+msgstr "搜尋不區分大小寫"
+
+#: rc.c:196
+msgid "Use LESSOPEN"
+msgstr "使用 LESSOPEN"
+
+#: rc.c:199
+msgid "Perform SSL server verification"
+msgstr "進行 SSL 伺服器檢查"
+
+#: rc.c:200
+msgid "PEM encoded certificate file of client"
+msgstr "客戶端的 PEM 編碼證書檔案"
+
+#: rc.c:201
+msgid "PEM encoded private key file of client"
+msgstr "客戶端的 PEM 編碼私鑰檔案"
+
+#: rc.c:202
+msgid "Path to directory for PEM encoded certificates of CAs"
+msgstr "PEM 編碼 CA 證書目錄的路徑"
+
+#: rc.c:203
+msgid "File consisting of PEM encoded certificates of CAs"
+msgstr "包含 PEM 編碼 CA 證書的檔案"
+
+#: rc.c:205
+msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)"
+msgstr "被禁止的 SSL 方式列表 (2: SSLv2, 3: SSLv3, t:TLSv1)"
+
+#: rc.c:208
+msgid "Enable cookie processing"
+msgstr "開啟 Cookie 處理"
+
+#: rc.c:209
+msgid "Print a message when receiving a cookie"
+msgstr "在接收一個 Cookie 時顯示一個訊息"
+
+#: rc.c:210
+msgid "Accept cookies"
+msgstr "接受 Cookies"
+
+#: rc.c:211
+msgid "Action to be taken on invalid cookie"
+msgstr "對無效 Cookies 進行的操作"
+
+#: rc.c:212
+msgid "Domains to reject cookies from"
+msgstr "拒絕如下域的 Cookies"
+
+#: rc.c:213
+msgid "Domains to accept cookies from"
+msgstr "接受如下域的 Cookies"
+
+#: rc.c:214
+msgid "Domains to avoid [wrong number of dots]"
+msgstr "避免訪問的域 [錯誤的點數]"
+
+#: rc.c:216
+msgid "Number of redirections to follow"
+msgstr "跟隨的重定向數量"
+
+#: rc.c:217
+msgid "Enable processing of meta-refresh tag"
+msgstr "開啟 meta-refresh 標籤處理"
+
+#: rc.c:220
+msgid "Enable Migemo (Roma-ji search)"
+msgstr "開啟 Migemo (羅馬字搜尋)"
+
+#: rc.c:221
+msgid "Migemo command"
+msgstr "Migemo 命令"
+
+#: rc.c:225
+msgid "Display charset"
+msgstr "顯示字符集"
+
+#: rc.c:226
+msgid "Default document charset"
+msgstr "預設文件字符集"
+
+#: rc.c:227
+msgid "Automatic charset detect when loading"
+msgstr "在載入時進行自動字符集探測"
+
+#: rc.c:228
+msgid "System charset"
+msgstr "系統字符集"
+
+#: rc.c:229
+msgid "System charset follows locale(LC_CTYPE)"
+msgstr "根據系統設定 (LC_CTYPE) 選定系統字符集"
+
+#: rc.c:230
+msgid "Output halfdump with display charset"
+msgstr "使用顯示字符集輸出 halfdump"
+
+#: rc.c:231
+msgid "Use multi column characters"
+msgstr "使用多列字元"
+
+#: rc.c:232
+msgid "Use combining characters"
+msgstr "使用合併字元"
+
+#: rc.c:233
+msgid "Use double width for some Unicode characters"
+msgstr "使 Unicode 字元使用雙重寬度"
+
+#: rc.c:234
+msgid "Use Unicode language tags"
+msgstr "使用 Unicode 語言標籤"
+
+#: rc.c:235
+msgid "Charset conversion using Unicode map"
+msgstr "使用 Unicode 對映進行字符集轉換"
+
+#: rc.c:236
+msgid "Charset conversion when loading"
+msgstr "在載入時進行字符集轉換"
+
+#: rc.c:237
+msgid "Adjust search string for document charset"
+msgstr "調整文件字符集的搜尋字串"
+
+#: rc.c:238
+msgid "Fix character width when conversion"
+msgstr "在轉換時固定字元寬度"
+
+#: rc.c:239
+msgid "Use GB 12345 Unicode map instead of GB 2312's"
+msgstr "使用 GB 12345 Unicode 對映而非 GB 2312"
+
+#: rc.c:240
+msgid "Use JIS X 0201 Roman for ISO-2022-JP"
+msgstr "使用 JIS X 0201 羅馬字母於 ISO-2022-JP"
+
+#: rc.c:241
+msgid "Use JIS C 6226:1978 for ISO-2022-JP"
+msgstr "使用 JIS C 6226:1978 於 ISO-2022-JP"
+
+#: rc.c:242
+msgid "Use JIS X 0201 Katakana"
+msgstr "使用 JIS X 0201 片假名"
+
+#: rc.c:243
+msgid "Use JIS X 0212:1990 (Supplemental Kanji)"
+msgstr "使用 JIS X 0212:1990 (補充漢字)"
+
+#: rc.c:244
+msgid "Use JIS X 0213:2000 (2000JIS)"
+msgstr "使用 JIS X 0213:2000 (2000JIS)"
+
+#: rc.c:245
+msgid "Strict ISO-2022-JP/KR/CN"
+msgstr "嚴格 ISO-2022-JP/KR/CN"
+
+#: rc.c:246
+msgid "Treat 4 bytes char. of GB18030 as Unicode"
+msgstr "視 GB18030 編碼的 4 位元組字元為 Unicode"
+
+#: rc.c:247
+msgid "Simple Preserve space"
+msgstr "簡單的保留空間"
+
+#: rc.c:250
+msgid "keymap file"
+msgstr "鍵盤對映檔案"
+
+#: rc.c:267
+msgid "black"
+msgstr "黑色"
+
+#: rc.c:268
+msgid "red"
+msgstr "紅色"
+
+#: rc.c:269
+msgid "green"
+msgstr "綠色"
+
+#: rc.c:270
+msgid "yellow"
+msgstr "黃色"
+
+#: rc.c:271
+msgid "blue"
+msgstr "藍色"
+
+#: rc.c:272
+msgid "magenta"
+msgstr "品紅"
+
+#: rc.c:273
+msgid "cyan"
+msgstr "青色"
+
+#: rc.c:274
+msgid "white"
+msgstr "白色"
+
+#: rc.c:275
+msgid "terminal"
+msgstr "終端"
+
+#: rc.c:294
+msgid "none"
+msgstr "無"
+
+#: rc.c:295
+msgid "current URL"
+msgstr "當前 URL"
+
+#: rc.c:296
+msgid "link URL"
+msgstr "連結 URL"
+
+#: rc.c:301
+msgid "simple"
+msgstr "簡單"
+
+#: rc.c:302
+msgid "use tag"
+msgstr "使用標籤"
+
+#: rc.c:303
+msgid "fontify"
+msgstr ""
+
+#: rc.c:309
+msgid "A:relative to screen height"
+msgstr "A:相對於螢幕高度"
+
+#: rc.c:310
+msgid "B:fixed speed"
+msgstr "B:固定速度"
+
+#: rc.c:317
+msgid "unspecified"
+msgstr "未指定"
+
+#: rc.c:318
+msgid "inet inet6"
+msgstr ""
+
+#: rc.c:319
+msgid "inet6 inet"
+msgstr ""
+
+#: rc.c:320
+msgid "inet only"
+msgstr "僅 inet"
+
+#: rc.c:321
+msgid "inet6 only"
+msgstr "僅 inet6"
+
+#: rc.c:328
+msgid "discard"
+msgstr "丟棄"
+
+#: rc.c:330
+msgid "accept"
+msgstr "接受"
+
+#: rc.c:332
+msgid "ask"
+msgstr "詢問"
+
+#: rc.c:339
+msgid "use internal mailer instead"
+msgstr "使用內建郵件傳送器"
+
+#: rc.c:341
+msgid "ignore options and use only the address"
+msgstr "忽略選項而只使用地址"
+
+#: rc.c:342
+msgid "use full mailto URL"
+msgstr "使用整個 mailto URL"
+
+#: rc.c:351
+msgid "OFF"
+msgstr "關"
+
+#: rc.c:352
+msgid "Only ISO 2022"
+msgstr "僅 ISO 2022"
+
+#: rc.c:353
+msgid "ON"
+msgstr "開"
+
+#: rc.c:359
+msgid "ASCII"
+msgstr "ASCII"
+
+#: rc.c:360
+msgid "charset specific"
+msgstr "字符集特定"
+
+#: rc.c:361
+msgid "DEC special graphics"
+msgstr "DEC 特殊影象"
+
+#: rc.c:740
+msgid "Display Settings"
+msgstr "顯示設定"
+
+#: rc.c:742
+msgid "Color Settings"
+msgstr "顏色設定"
+
+#: rc.c:744
+msgid "Miscellaneous Settings"
+msgstr "雜項設定"
+
+#: rc.c:745
+msgid "Directory Settings"
+msgstr "目錄設定"
+
+#: rc.c:746
+msgid "External Program Settings"
+msgstr "外部程式設定"
+
+#: rc.c:747
+msgid "Network Settings"
+msgstr "網路設定"
+
+#: rc.c:748
+msgid "Proxy Settings"
+msgstr "代理設定"
+
+#: rc.c:750
+msgid "SSL Settings"
+msgstr "SSL 設定"
+
+#: rc.c:753
+msgid "Cookie Settings"
+msgstr "Cookie 設定"
+
+#: rc.c:756
+msgid "Charset Settings"
+msgstr "字符集設定"
+
+#. TRANSLATORS:
+#. * AcceptLang default: this is used in Accept-Language: HTTP request
+#. * header. For example, ja.po should translate it as
+#. * "ja;q=1.0, en;q=0.5" like that.
+#.
+#: rc.c:1238
+msgid "en;q=1.0"
+msgstr "zh-TW;q=1.0, zh-Hants;q=0.9, zh;q=0.8, en;q=0.6"
diff --git a/proto.h b/proto.h
index f8a7345..d744e14 100644
--- a/proto.h
+++ b/proto.h
@@ -11,6 +11,8 @@ extern void pushEvent(int cmd, void *data);
extern MySignalHandler intTrap(SIGNAL_ARG);
extern void pgFore(void);
extern void pgBack(void);
+extern void hpgFore(void);
+extern void hpgBack(void);
extern void lup1(void);
extern void ldown1(void);
extern void ctrCsrV(void);
@@ -61,6 +63,7 @@ extern void submitForm(void);
extern void followForm(void);
extern void topA(void);
extern void lastA(void);
+extern void nthA(void);
extern void onA(void);
extern void nextA(void);
@@ -162,6 +165,24 @@ extern Str searchURIMethods(ParsedURL *pu);
extern void chkExternalURIBuffer(Buffer *buf);
#endif
extern ParsedURL *schemeToProxy(int scheme);
+#ifdef USE_M17N
+extern wc_ces url_to_charset(const char *url, const ParsedURL *base,
+ wc_ces doc_charset);
+extern char *url_encode(const char *url, const ParsedURL *base,
+ wc_ces doc_charset);
+#if 0
+extern char *url_decode(const char *url, const ParsedURL *base,
+ wc_ces doc_charset);
+#endif
+extern char *url_decode2(const char *url, const Buffer *buf);
+#else /* !defined(USE_M17N) */
+#define url_encode(url, base, cs) url_quote(url)
+extern char *url_decode0(const char *url);
+#if 0
+#define url_decode(url, base, cs) url_decode0(url)
+#endif
+#define url_decode2(url, buf) url_decode0(url)
+#endif /* !defined(USE_M17N) */
extern void examineFile(char *path, URLFile *uf);
extern char *acceptableEncoding();
extern int dir_exist(char *path);
@@ -180,7 +201,6 @@ extern void push_symbol(Str str, char symbol, int width, int n);
#ifdef USE_UNICODE
extern void update_utf8_symbol(void);
#endif
-extern Buffer *loadFile(char *path);
extern Buffer *loadGeneralFile(char *path, ParsedURL *current, char *referer,
int flag, FormList *request);
extern int is_boundary(unsigned char *, unsigned char *);
@@ -207,6 +227,8 @@ extern int getImageSize(ImageCache * cache);
extern Str process_img(struct parsed_tag *tag, int width);
extern Str process_anchor(struct parsed_tag *tag, char *tagbuf);
extern Str process_input(struct parsed_tag *tag);
+extern Str process_button(struct parsed_tag *tag);
+extern Str process_n_button(void);
extern Str process_select(struct parsed_tag *tag);
extern Str process_n_select(void);
extern void feed_select(char *str);
@@ -249,8 +271,7 @@ extern Buffer *openPagerBuffer(InputStream stream, Buffer *buf);
extern Buffer *openGeneralPagerBuffer(InputStream stream);
extern Line *getNextPage(Buffer *buf, int plen);
extern int save2tmp(URLFile uf, char *tmpf);
-extern int doExternal(URLFile uf, char *path, char *type, Buffer **bufp,
- Buffer *defaultbuf);
+extern Buffer *doExternal(URLFile uf, char *type, Buffer *defaultbuf);
extern int _doFileCopy(char *tmpf, char *defstr, int download);
#define doFileCopy(tmpf, defstr) _doFileCopy(tmpf, defstr, FALSE);
extern int doFileMove(char *tmpf, char *defstr);
@@ -507,7 +528,7 @@ extern ParsedURL *baseURL(Buffer *buf);
extern int openSocket(char *hostname, char *remoteport_name,
unsigned short remoteport_num);
extern void parseURL(char *url, ParsedURL *p_url, ParsedURL *current);
-extern void copyParsedURL(ParsedURL *p, ParsedURL *q);
+extern void copyParsedURL(ParsedURL *p, const ParsedURL *q);
extern void parseURL2(char *url, ParsedURL *pu, ParsedURL *current);
extern Str parsedURL2Str(ParsedURL *pu);
extern int getURLScheme(char **url);
@@ -586,9 +607,12 @@ extern char *getAnchorText(Buffer *buf, AnchorList *al, Anchor *a);
extern Buffer *link_list_panel(Buffer *buf);
extern Str decodeB(char **ww);
+extern void decodeB_to_growbuf(struct growbuf *gb, char **ww);
extern Str decodeQ(char **ww);
extern Str decodeQP(char **ww);
+extern void decodeQP_to_growbuf(struct growbuf *gb, char **ww);
extern Str decodeU(char **ww);
+extern void decodeU_to_growbuf(struct growbuf *gb, char **ww);
#ifdef USE_M17N
extern Str decodeWord(char **ow, wc_ces * charset);
extern Str decodeMIME(Str orgstr, wc_ces * charset);
@@ -611,6 +635,7 @@ extern char *confFile(char *base);
extern char *auxbinFile(char *base);
extern char *libFile(char *base);
extern char *helpFile(char *base);
+extern const void *querySiteconf(const ParsedURL *query_pu, int field);
extern Str localCookie(void);
extern Str loadLocalDir(char *dirname);
extern void set_environ(char *var, char *value);
@@ -683,6 +708,7 @@ extern void reMark(void);
#ifdef USE_MOUSE
extern void mouse(void);
+extern void sgrmouse(void);
extern void mouse_init(void);
extern void mouse_end(void);
extern void mouse_active(void);
@@ -698,6 +724,7 @@ extern void tabMs(void);
extern void closeTMs(void);
#else /* not USE_MOUSE */
#define mouse nulcmd
+#define sgrmouse nulcmd
#define msToggle nulcmd
#define movMs nulcmd
#define menuMs nulcmd
@@ -723,6 +750,8 @@ extern int getKey(char *s);
extern char *getKeyData(int key);
extern char *getWord(char **str);
extern char *getQWord(char **str);
+struct regex;
+extern char *getRegexWord(const char **str, struct regex **regex_ret);
#ifdef USE_MOUSE
extern void initMouseAction(void);
#endif
@@ -786,5 +815,3 @@ extern void dispVer(void);
void srand48(long);
long lrand48(void);
#endif
-
-#include "indep.h"
diff --git a/rc.c b/rc.c
index 8441a39..7de87b8 100644
--- a/rc.c
+++ b/rc.c
@@ -9,7 +9,9 @@
#include <errno.h>
#include "parsetag.h"
#include "local.h"
+#include "regex.h"
#include <stdlib.h>
+#include <stddef.h>
struct param_ptr {
char *name;
@@ -88,6 +90,7 @@ static int OptionEncode = FALSE;
#define CMT_MULTICOL N_("Display file names in multi-column format")
#define CMT_ALT_ENTITY N_("Use ASCII equivalents to display entities")
#define CMT_GRAPHIC_CHAR N_("Character type for border of table and menu")
+#define CMT_DISP_BORDERS N_("Display table borders, ignore value of BORDER")
#define CMT_FOLD_TEXTAREA N_("Fold lines in TEXTAREA")
#define CMT_DISP_INS_DEL N_("Display INS, DEL, S and STRIKE element")
#define CMT_COLOR N_("Display with color")
@@ -140,12 +143,19 @@ static int OptionEncode = FALSE;
#define CMT_EDITOR N_("Editor")
#define CMT_MAILER N_("Mailer")
#define CMT_MAILTO_OPTIONS N_("How to call Mailer for mailto URLs with options")
-#define CMT_EXTBRZ N_("External Browser")
-#define CMT_EXTBRZ2 N_("Second External Browser")
-#define CMT_EXTBRZ3 N_("Third External Browser")
+#define CMT_EXTBRZ N_("External browser")
+#define CMT_EXTBRZ2 N_("2nd external browser")
+#define CMT_EXTBRZ3 N_("3rd external browser")
+#define CMT_EXTBRZ4 N_("4th external browser")
+#define CMT_EXTBRZ5 N_("5th external browser")
+#define CMT_EXTBRZ6 N_("6th external browser")
+#define CMT_EXTBRZ7 N_("7th external browser")
+#define CMT_EXTBRZ8 N_("8th external browser")
+#define CMT_EXTBRZ9 N_("9th external browser")
#define CMT_DISABLE_SECRET_SECURITY_CHECK N_("Disable secret file security check")
#define CMT_PASSWDFILE N_("Password file")
#define CMT_PRE_FORM_FILE N_("File for setting form on loading")
+#define CMT_SITECONF_FILE N_("File for preferences for each site")
#define CMT_FTPPASS N_("Password for anonymous FTP (your mail address)")
#define CMT_FTPPASS_HOSTNAMEGEN N_("Generate domain part of password for FTP")
#define CMT_USERAGENT N_("User-Agent identification string")
@@ -390,6 +400,8 @@ struct param_ptr params1[] = {
NULL},
{"graphic_char", P_CHARINT, PI_SEL_C, (void *)&UseGraphicChar,
CMT_GRAPHIC_CHAR, (void *)graphic_char_str},
+ {"display_borders", P_CHARINT, PI_ONOFF, (void *)&DisplayBorders,
+ CMT_DISP_BORDERS, NULL},
{"fold_textarea", P_CHARINT, PI_ONOFF, (void *)&FoldTextarea,
CMT_FOLD_TEXTAREA, NULL},
{"display_ins_del", P_INT, PI_SEL_C, (void *)&displayInsDel,
@@ -561,6 +573,18 @@ struct param_ptr params6[] = {
NULL},
{"extbrowser3", P_STRING, PI_TEXT, (void *)&ExtBrowser3, CMT_EXTBRZ3,
NULL},
+ {"extbrowser4", P_STRING, PI_TEXT, (void *)&ExtBrowser4, CMT_EXTBRZ4,
+ NULL},
+ {"extbrowser5", P_STRING, PI_TEXT, (void *)&ExtBrowser5, CMT_EXTBRZ5,
+ NULL},
+ {"extbrowser6", P_STRING, PI_TEXT, (void *)&ExtBrowser6, CMT_EXTBRZ6,
+ NULL},
+ {"extbrowser7", P_STRING, PI_TEXT, (void *)&ExtBrowser7, CMT_EXTBRZ7,
+ NULL},
+ {"extbrowser8", P_STRING, PI_TEXT, (void *)&ExtBrowser8, CMT_EXTBRZ8,
+ NULL},
+ {"extbrowser9", P_STRING, PI_TEXT, (void *)&ExtBrowser9, CMT_EXTBRZ9,
+ NULL},
{"bgextviewer", P_INT, PI_ONOFF, (void *)&BackgroundExtViewer,
CMT_BGEXTVIEW, NULL},
{"use_lessopen", P_INT, PI_ONOFF, (void *)&use_lessopen, CMT_USE_LESSOPEN,
@@ -619,6 +643,8 @@ struct param_ptr params9[] = {
CMT_FTPPASS_HOSTNAMEGEN, NULL},
{"pre_form_file", P_STRING, PI_TEXT, (void *)&pre_form_file,
CMT_PRE_FORM_FILE, NULL},
+ {"siteconf_file", P_STRING, PI_TEXT, (void *)&siteconf_file,
+ CMT_SITECONF_FILE, NULL},
{"user_agent", P_STRING, PI_TEXT, (void *)&UserAgent, CMT_USERAGENT, NULL},
{"no_referer", P_INT, PI_ONOFF, (void *)&NoSendReferer, CMT_NOSENDREFERER,
NULL},
@@ -771,7 +797,7 @@ create_option_search_table()
qsort(RC_search_table, RC_table_size, sizeof(struct rc_search_table),
(int (*)(const void *, const void *))compare_table);
- diff1 = diff2 = 0;
+ diff2 = 0;
for (i = 0; i < RC_table_size - 1; i++) {
p = RC_search_table[i].param->name;
q = RC_search_table[i + 1].param->name;
@@ -829,7 +855,7 @@ void
show_params(FILE * fp)
{
int i, j, l;
- char *t = NULL;
+ const char *t = "";
char *cmt;
#ifdef USE_M17N
@@ -1173,6 +1199,8 @@ do_mkdir(const char *dir, long mode)
#endif /* not __MINW32_VERSION */
#endif /* not __EMX__ */
+static void loadSiteconf(void);
+
void
sync_with_option(void)
{
@@ -1199,6 +1227,7 @@ sync_with_option(void)
#endif
loadPasswd();
loadPreForm();
+ loadSiteconf();
if (AcceptLang == NULL || *AcceptLang == '\0') {
/* TRANSLATORS:
@@ -1483,6 +1512,7 @@ panel_set_option(struct parsed_tagarg *arg)
{
FILE *f = NULL;
char *p;
+ Str s = Strnew(), tmp;
if (config_file == NULL) {
disp_message("There's no config file... config not saved", FALSE);
@@ -1498,14 +1528,17 @@ panel_set_option(struct parsed_tagarg *arg)
if (arg->value) {
p = conv_to_system(arg->value);
if (set_param(arg->arg, p)) {
- if (f)
- fprintf(f, "%s %s\n", arg->arg, p);
+ tmp = Sprintf("%s %s\n", arg->arg, p);
+ Strcat(tmp, s);
+ s = tmp;
}
}
arg = arg->next;
}
- if (f)
+ if (f) {
+ fputs(s->ptr, f);
fclose(f);
+ }
sync_with_option();
backBf();
}
@@ -1556,3 +1589,217 @@ helpFile(char *base)
return expandPath(Strnew_m_charp(w3m_help_dir(), "/", base, NULL)->ptr);
}
#endif
+
+/* siteconf */
+/*
+ * url "<url>"|/<re-url>/|m@<re-url>@i [exact]
+ * substitute_url "<destination-url>"
+ * url_charset <charset>
+ * no_referer_from on|off
+ * no_referer_to on|off
+ *
+ * The last match wins.
+ */
+
+struct siteconf_rec {
+ struct siteconf_rec *next;
+ char *url;
+ Regex *re_url;
+ int url_exact;
+ unsigned char mask[(SCONF_N_FIELD + 7) >> 3];
+
+ char *substitute_url;
+#ifdef USE_M17N
+ wc_ces url_charset;
+#endif
+ int no_referer_from;
+ int no_referer_to;
+};
+#define SCONF_TEST(ent, f) ((ent)->mask[(f)>>3] & (1U<<((f)&7)))
+#define SCONF_SET(ent, f) ((ent)->mask[(f)>>3] |= (1U<<((f)&7)))
+#define SCONF_CLEAR(ent, f) ((ent)->mask[(f)>>3] &= ~(1U<<((f)&7)))
+
+static struct siteconf_rec *siteconf_head = NULL;
+static struct siteconf_rec *newSiteconfRec(void);
+
+static struct siteconf_rec *
+newSiteconfRec(void)
+{
+ struct siteconf_rec *ent;
+
+ ent = New(struct siteconf_rec);
+ ent->next = NULL;
+ ent->url = NULL;
+ ent->re_url = NULL;
+ ent->url_exact = FALSE;
+ memset(ent->mask, 0, sizeof(ent->mask));
+
+ ent->substitute_url = NULL;
+#ifdef USE_M17N
+ ent->url_charset = 0;
+#endif
+ return ent;
+}
+
+static void
+loadSiteconf(void)
+{
+ char *efname;
+ FILE *fp;
+ Str line;
+ struct siteconf_rec *ent = NULL;
+
+ siteconf_head = NULL;
+ if (!siteconf_file)
+ return;
+ if ((efname = expandPath(siteconf_file)) == NULL)
+ return;
+ fp = fopen(efname, "r");
+ if (fp == NULL)
+ return;
+ while (line = Strfgets(fp), line->length > 0) {
+ char *p, *s;
+
+ Strchop(line);
+ p = line->ptr;
+ SKIP_BLANKS(p);
+ if (*p == '#' || *p == '\0')
+ continue;
+ s = getWord(&p);
+
+ /* The "url" begins a new record. */
+ if (strcmp(s, "url") == 0) {
+ char *url, *opt;
+ struct siteconf_rec *newent;
+
+ /* First, register the current record. */
+ if (ent) {
+ ent->next = siteconf_head;
+ siteconf_head = ent;
+ ent = NULL;
+ }
+
+ /* Second, create a new record. */
+ newent = newSiteconfRec();
+ url = getRegexWord((const char **)&p, &newent->re_url);
+ opt = getWord(&p);
+ SKIP_BLANKS(p);
+ if (!newent->re_url) {
+ ParsedURL pu;
+ if (!url || !*url)
+ continue;
+ parseURL2(url, &pu, NULL);
+ newent->url = parsedURL2Str(&pu)->ptr;
+ }
+ /* If we have an extra or unknown option, ignore this record
+ * for future extensions. */
+ if (strcmp(opt, "exact") == 0) {
+ newent->url_exact = TRUE;
+ }
+ else if (*opt != 0)
+ continue;
+ if (*p)
+ continue;
+ ent = newent;
+ continue;
+ }
+
+ /* If the current record is broken, skip to the next "url". */
+ if (!ent)
+ continue;
+
+ /* Fill the new record. */
+ if (strcmp(s, "substitute_url") == 0) {
+ ent->substitute_url = getQWord(&p);
+ SCONF_SET(ent, SCONF_SUBSTITUTE_URL);
+ }
+#ifdef USE_M17N
+ else if (strcmp(s, "url_charset") == 0) {
+ char *charset = getWord(&p);
+ ent->url_charset = (charset && *charset) ?
+ wc_charset_to_ces(charset) : 0;
+ SCONF_SET(ent, SCONF_URL_CHARSET);
+ }
+#endif /* USE_M17N */
+ else if (strcmp(s, "no_referer_from") == 0) {
+ ent->no_referer_from = str_to_bool(getWord(&p), 0);
+ SCONF_SET(ent, SCONF_NO_REFERER_FROM);
+ }
+ else if (strcmp(s, "no_referer_to") == 0) {
+ ent->no_referer_to = str_to_bool(getWord(&p), 0);
+ SCONF_SET(ent, SCONF_NO_REFERER_TO);
+ }
+ }
+ if (ent) {
+ ent->next = siteconf_head;
+ siteconf_head = ent;
+ ent = NULL;
+ }
+ fclose(fp);
+}
+
+const void *
+querySiteconf(const ParsedURL *query_pu, int field)
+{
+ const struct siteconf_rec *ent;
+ Str u;
+ char *firstp, *lastp;
+
+ if (field < 0 || field >= SCONF_N_FIELD)
+ return NULL;
+ if (!query_pu || IS_EMPTY_PARSED_URL(query_pu))
+ return NULL;
+ u = parsedURL2Str((ParsedURL *)query_pu);
+ if (u->length == 0)
+ return NULL;
+
+ for (ent = siteconf_head; ent; ent = ent->next) {
+ if (!SCONF_TEST(ent, field))
+ continue;
+ if (ent->re_url) {
+ if (RegexMatch(ent->re_url, u->ptr, u->length, 1)) {
+ MatchedPosition(ent->re_url, &firstp, &lastp);
+ if (!ent->url_exact)
+ goto url_found;
+ if (firstp != u->ptr || lastp == firstp)
+ continue;
+ if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' ||
+ *lastp == '#' || *(lastp - 1) == '#')
+ goto url_found;
+ }
+ } else {
+ int matchlen = strmatchlen(ent->url, u->ptr, u->length);
+ if (matchlen == 0 || ent->url[matchlen] != 0)
+ continue;
+ firstp = u->ptr;
+ lastp = u->ptr + matchlen;
+ if (*lastp == 0 || *lastp == '?' || *(lastp - 1) == '?' ||
+ *lastp == '#' || *(lastp - 1) == '#')
+ goto url_found;
+ if (!ent->url_exact && (*lastp == '/' || *(lastp - 1) == '/'))
+ goto url_found;
+ }
+ }
+ return NULL;
+
+url_found:
+ switch (field) {
+ case SCONF_SUBSTITUTE_URL:
+ if (ent->substitute_url && *ent->substitute_url) {
+ Str tmp = Strnew_charp_n(u->ptr, firstp - u->ptr);
+ Strcat_charp(tmp, ent->substitute_url);
+ Strcat_charp(tmp, lastp);
+ return tmp->ptr;
+ }
+ return NULL;
+#ifdef USE_M17N
+ case SCONF_URL_CHARSET:
+ return &ent->url_charset;
+#endif
+ case SCONF_NO_REFERER_FROM:
+ return &ent->no_referer_from;
+ case SCONF_NO_REFERER_TO:
+ return &ent->no_referer_to;
+ }
+ return NULL;
+}
diff --git a/regex.c b/regex.c
index 5bee4b2..93406e8 100644
--- a/regex.c
+++ b/regex.c
@@ -77,7 +77,7 @@ static longchar
set_longchar(char *str)
{
unsigned char *p = (unsigned char *)str;
- longchar r;
+ longchar r = { };
#ifdef USE_M17N
if (*p & 0x80) {
@@ -580,7 +580,7 @@ regmatch_iter(struct MatchingContext1 *c,
c->lastpos = c->str;
#ifdef REGEX_DEBUG
if (verbose)
- printf("Succeed: %s %d\n", c->str, c->lastpos - c->str);
+ printf("Succeed: %s %ld\n", c->str, (long)(c->lastpos - c->str));
#endif
YIELD(1, c, 7);
return 0;
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
index 4da9ce5..a37d792 100644
--- a/scripts/Makefile.in
+++ b/scripts/Makefile.in
@@ -60,7 +60,7 @@ w3mhelp-funcname.pl: w3mhelp-funcname.pl.in ../funcname.tab $(top_srcdir)/doc/ke
@cat $(srcdir)/w3mhelp-funcname.pl.in >> w3mhelp-funcname.pl
@echo "done"
-w3mhelp-funcdesc-stamp: $(top_srcdir)/doc/README.func $(top_srcdir)/doc-jp/README.func w3mhelp-funcdesc.en.pl.in w3mhelp-funcdesc.ja.pl.in
+w3mhelp-funcdesc-stamp: $(top_srcdir)/doc/README.func $(top_srcdir)/doc-jp/README.func $(top_srcdir)/doc-de/README.func w3mhelp-funcdesc.en.pl.in w3mhelp-funcdesc.ja.pl.in w3mhelp-funcdesc.de.pl.in
@echo "generating w3mhelp-funcdesc*.pl..."
@for dirlang in $(DOCDIRS); do \
dir=`expr "$$dirlang" : "\(.*\):.*"`; \
diff --git a/scripts/w3mhelp-funcdesc.de.pl.in b/scripts/w3mhelp-funcdesc.de.pl.in
new file mode 100644
index 0000000..1fe37b4
--- /dev/null
+++ b/scripts/w3mhelp-funcdesc.de.pl.in
@@ -0,0 +1,66 @@
+# charset
+$charset = 'UTF-8';
+
+# Buffer selection mode
+
+%buf_funcdesc = (
+ 'BUF:PREV', 'Select previous buffer',
+ 'BUF:NEXT', 'Select next buffer',
+ 'BUF:DELETE', 'Delete current buffer',
+ 'BUF:GO', 'Go to the selected buffer',
+);
+
+%lineedit_funcdesc = (
+ 'LINEEDIT:FORWARD', 'Move cursor forward',
+ 'LINEEDIT:BACK', 'Move cursor backward',
+ 'LINEEDIT:BS', 'Delete previous character',
+ 'LINEEDIT:DEL', 'Delete current character',
+ 'LINEEDIT:KILL_AFTER', 'Kill everything after cursor',
+ 'LINEEDIT:KILL_BEFORE', 'Kill everything before cursor',
+ 'LINEEDIT:TOP', 'Move to the top of line',
+ 'LINEEDIT:BOTTOM', 'Move to the bottom of line',
+ 'LINEEDIT:PREV', 'Fetch the previous string from the history list',
+ 'LINEEDIT:NEXT', 'Fetch the next string from the history list',
+ 'LINEEDIT:EDITOR', 'Edit with external editor',
+ 'LINEEDIT:COMPLETE', 'Complete filename',
+ 'LINEEDIT:ACCEPT', 'Accept',
+);
+
+%menu_funcdesc = (
+ 'MENU:SELECT', 'Select item',
+ 'MENU:CLOSE', 'Close menu',
+ 'MENU:CANCEL', 'Back',
+ 'MENU:DOWN', 'Move to next item',
+ 'MENU:UP', 'Move to previous item',
+ 'MENU:LINE_UP', 'Scroll up one item',
+ 'MENU:LINE_DOWN', 'Scroll down one item',
+ 'MENU:TOP', 'Go to top item',
+ 'MENU:LAST', 'Go to last item',
+ 'MENU:NEXT', 'Go to next page',
+ 'MENU:PREV', 'Go to previous page',
+ 'MENU:SEARCH_FORE', 'Search foreward',
+ 'MENU:SEARCH_BACK', 'Search backward',
+ 'MENU:SEARCH_NEXT', 'Search next regexp',
+ 'MENU:SEARCH_PREV', 'Search previous regexp',
+ 'MENU:SUSPEND', 'Suspend',
+);
+
+%title = (
+ "Show keymap file", 'Show keymap file',
+ "Page/Cursor motion", 'Page/Cursor motion',
+ "Hyperlink operation", 'Hyperlink operation',
+ "File/Stream operation", 'File/Stream operation',
+ "Buffer operation", 'Buffer operation',
+ "Tab operation", 'Tab operation',
+ "Buffer selection mode", 'Buffer selection mode',
+ "Bookmark operation", 'Bookmark operation',
+ "Search", 'Search',
+ "Dictionary look-up", 'Dictionary look-up',
+ "Mark operation", 'Mark operation',
+ "Miscellany", 'Miscellany',
+ "User defined keymaps", 'User defined keymaps',
+ "Line-editing mode", 'Line-editing mode',
+ "Pop up menu", 'Pop up menu',
+);
+
+1;
diff --git a/scripts/w3mhelp-funcdesc.ja.pl.in b/scripts/w3mhelp-funcdesc.ja.pl.in
index 051c888..b0f529e 100644
--- a/scripts/w3mhelp-funcdesc.ja.pl.in
+++ b/scripts/w3mhelp-funcdesc.ja.pl.in
@@ -59,8 +59,8 @@ $charset = 'EUC-JP';
"Mark operation", '�ޡ������',
"Miscellany", '����¾',
"User defined keymaps", '�桼�����',
- "Line-edit mode", '���Խ��⡼��',
- "Popup menu", '��˥塼',
+ "Line-editing mode", '���Խ��⡼��',
+ "Pop up menu", '��˥塼',
);
1;
diff --git a/scripts/w3mhelp.cgi.in b/scripts/w3mhelp.cgi.in
index b2fca8f..2c3f4d5 100644
--- a/scripts/w3mhelp.cgi.in
+++ b/scripts/w3mhelp.cgi.in
@@ -48,7 +48,7 @@ if (defined($ENV{'QUERY_STRING'})) {
}
# print "tlang=$tlang\n";
eval {require "w3mhelp-funcdesc.$tlang.pl";};
- if (defined(%funcdesc)) {
+ if (%funcdesc) {
$lang = $tlang;
}
}
@@ -102,8 +102,7 @@ Content-Type: text/html; charset=$charset
*******
<A HREF="http://w3m.sourceforge.net/">w3m</A>
(WWW-wo-Miru) Version $version by
-<A HREF="mailto:aito\@fw.ipsj.or.jp">A.ITO</A> ********<BR>
- ***** Key assign table *****
+<A HREF="mailto:aito\@fw.ipsj.or.jp">A.ITO</A> ********
</CENTER>
HEADING
@@ -112,13 +111,13 @@ $q_version = $version;
$q_version =~ s/[^A-Za-z0-9_\$\.\-]/sprintf('%%%02X', ord($&))/ge;
$script = "<A HREF=\"$ENV{'SCRIPT_NAME'}?version=$q_version&lang=";
-# doc:en_English doc-jp:ja_Japanese
+# doc:en_English doc-jp:ja_Japanese doc-de:de_German
for $otherlang (@docdirs) {
local(@d) = split(/[:_]/, $otherlang);
if ($d[1] ne $lang) {
$d[1] =~ s/[^A-Za-z0-9_\$\.\-]/sprintf('%%%02X', ord($&))/ge;
- print $script, $d[1], "\">$d[2] version</A>\n";
+ print $script, $d[1], "\">[$d[2]]</A>\n";
}
}
@@ -182,7 +181,7 @@ print "<BR>\n<HR WIDTH=80%>\n";
print "<BR>\n<HR WIDTH=80%>\n";
-&show_keymap("Line-edit mode",
+&show_keymap("Line-editing mode",
split(" ", "lineedit_forward lineedit_back lineedit_backspace
lineedit_delete lineedit_kill_after lineedit_kill_before
lineedit_top lineedit_bottom lineedit_prev lineedit_next
@@ -190,7 +189,7 @@ print "<BR>\n<HR WIDTH=80%>\n";
print "<BR>\n<HR WIDTH=80%>\n";
-&show_keymap("Popup menu",
+&show_keymap("Pop up menu",
split(" ", "menu_select menu_close menu_cancel menu_down menu_up
menu_line_up menu_line_down menu_top menu_last menu_next
menu_prev menu_search_fore menu_search_back menu_search_next
diff --git a/scripts/w3mman/w3mman.1.in b/scripts/w3mman/w3mman.1.in
index 1c0361d..1b1d990 100644
--- a/scripts/w3mman/w3mman.1.in
+++ b/scripts/w3mman/w3mman.1.in
@@ -1,4 +1,4 @@
-.TH W3MMAN 1 "Nov 5, 2005"
+.TH W3MMAN 1 "Nov 23, 2014"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@@ -12,19 +12,19 @@
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
-w3mman \- an interface to the on-line reference manuals by w3m(1)
+w3mman \- an interface to the on-line reference manuals via w3m(1)
.SH SYNOPSIS
.B w3mman
-.RI "[-M " path ] " " [ section ] " page"
+.RI "[\-M " path ] " " [ section ] " page"
.br
.B w3mman
-.RI "[-M " path "] -k " keyword
+.RI "[\-M " path "] \-k " keyword
.br
.B w3mman
-.RI -l " file
+.RI \-l " file
.SH DESCRIPTION
.B w3mman
-is the system's manual pager by
+is a pager for manual pages, using
.BR w3m (1).
.SH OPTIONS
A summary of options is included below.
@@ -42,6 +42,7 @@ Specify
Specify a
.I file.
.SH ENVIRONMENT
+Two variables are available for debugging.
.TP
.B W3MMAN_W3M
If W3MMAN_W3M is set, its value is used instead of @W3M@.
@@ -51,7 +52,7 @@ If W3MMAN_MAN is set, its value is used instead of @MAN@.
.SH FILES
.TP
.I @libexecdir@/@PACKAGE@/cgi-bin/w3mman2html.cgi
-convert manual page to html.
+manual page to HTML convertor.
.SH SEE ALSO
.BR man (1),
.BR w3m (1).
diff --git a/scripts/w3mman/w3mman2html.cgi.in b/scripts/w3mman/w3mman2html.cgi.in
index f430307..2cd00f9 100644
--- a/scripts/w3mman/w3mman2html.cgi.in
+++ b/scripts/w3mman/w3mman2html.cgi.in
@@ -34,7 +34,6 @@ Content-Type: text/html
EOF
$keyword =~ s:([^-\w\200-\377.,])::g;
open(F, "$MAN -k $keyword 2> /dev/null |");
- @line = ();
while(<F>) {
chop;
$_ = &html_quote($_);
@@ -126,12 +125,14 @@ while(<F>) {
s/\&/\&/g;
s/\</\</g;
s/\>/\>/g;
+ # non ASCII UTF-8 codepoint
+ my $utf8="[\300-\337][\200-\277]|[\340-\357][\200-\277]{2}|[\360-\367][\200-\277]{3}|[\370-\373][\200-\277]{4}|[\374\375][\200-\277]{5}";
- s@([\200-\377].)(\010{1,2}\1)+@<b>$1</b>@g;
+ s@($utf8)(\010\1)+@<b>$1</b>@g;
s@(\&\w+;|.)(\010\1)+@<b>$1</b>@g;
- s@__\010{1,2}((\<b\>)?[\200-\377].(\</b\>)?)@<u>$1</u>@g;
+ s@_\010((\<b\>)?($utf8)(\</b\>)?)@<u>$1</u>@g;
s@_\010((\<b\>)?(\&\w+\;|.)(\</b\>)?)@<u>$1</u>@g;
- s@((\<b\>)?[\200-\377].(\</b\>)?)\010{1,2}__@<u>$1</u>@g;
+ s@((\<b\>)?($utf8)(\</b\>)?)\010_@<u>$1</u>@g;
s@((\<b\>)?(\&\w+\;|.)(\</b\>)?)\010_@<u>$1</u>@g;
s@.\010(.)@$1@g;
@@ -156,7 +157,7 @@ EOF
}
s@(http|ftp)://[\w.\-/~]+[\w/]@<a href="$&">$&</a>@g;
- s@(\W)(mailto:)?(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@$1<a href="mailto:$3">$2$3</a>@g;
+ s@\b(mailto:|)(\w[\w.\-]*\@\w[\w.\-]*\.[\w.\-]*\w)@<a href="mailto:$2">$1$2</a>@g;
s@(\W)(\~?/[\w.][\w.\-/~]*)@$1 . &file_ref($2)@ge;
s@(include(<\/?[bu]\>|\s)*\<)([\w.\-/]+)@$1 . &include_ref($3)@ge;
if ($prev && m@^\s*(\<[bu]\>)*(\w[\w.\-]*)(\</[bu]\>)*(\([\dm]\w*\))@) {
@@ -220,7 +221,7 @@ sub is_command {
local($p);
(! -d && -x) || return 0;
- if (! defined(%PATH)) {
+ if (! %PATH) {
for $p (split(":", $ENV{'PATH'})) {
$p =~ s@/+$@@;
$PATH{$p} = 1;
diff --git a/table.c b/table.c
index e1243ff..2a0aa8f 100644
--- a/table.c
+++ b/table.c
@@ -188,7 +188,7 @@ dv2sv(double *dv, short *iv, int size)
indexarray = NewAtom_N(short, size);
edv = NewAtom_N(double, size);
for (i = 0; i < size; i++) {
- iv[i] = ceil(dv[i]);
+ iv[i] = (short) ceil(dv[i]);
edv[i] = (double)iv[i] - dv[i];
}
@@ -205,7 +205,7 @@ dv2sv(double *dv, short *iv, int size)
indexarray[i] = k;
}
iw = min((int)(w + 0.5), size);
- if (iw == 0)
+ if (iw <= 1)
return;
x = edv[(int)indexarray[iw - 1]];
for (i = 0; i < size; i++) {
@@ -429,7 +429,6 @@ visible_length(char *str)
char *t, *r2;
int amp_len = 0;
- t = str;
while (*str) {
prev_status = status;
if (next_status(*str, &status)) {
@@ -1691,7 +1690,7 @@ renderTable(struct table *t, int max_width, struct html_feed_environ *h_env)
{
int i, j, w, r, h;
Str renderbuf;
- short new_tabwidth[MAXCOL];
+ short new_tabwidth[MAXCOL] = { 0 };
#ifdef MATRIX
int itr;
VEC *newwidth;
@@ -2878,6 +2877,14 @@ feed_table_tag(struct table *tbl, char *line, struct table_mode *mode,
tmp = process_input(tag);
feed_table1(tbl, tmp, mode, width);
break;
+ case HTML_BUTTON:
+ tmp = process_button(tag);
+ feed_table1(tbl, tmp, mode, width);
+ break;
+ case HTML_N_BUTTON:
+ tmp = process_n_button();
+ feed_table1(tbl, tmp, mode, width);
+ break;
case HTML_SELECT:
tmp = process_select(tag);
if (tmp)
@@ -3010,7 +3017,6 @@ feed_table_tag(struct table *tbl, char *line, struct table_mode *mode,
break;
case HTML_TABLE_ALT:
id = -1;
- w = 0;
parsedtag_get_value(tag, ATTR_TID, &id);
if (id >= 0 && id < tbl->ntable) {
struct table *tbl1 = tbl->tables[id].ptr;
diff --git a/table.h b/table.h
index 83b661f..fdcdef3 100644
--- a/table.h
+++ b/table.h
@@ -17,7 +17,7 @@
#define MAX_TABLE_N 20 /* maximum number of table in same level */
#define MAXROW 50
-#define MAXCOL 50
+#define MAXCOL 256
#define MAX_WIDTH 80
diff --git a/tagtable.tab b/tagtable.tab
index f9b7b76..f5a2c30 100644
--- a/tagtable.tab
+++ b/tagtable.tab
@@ -176,6 +176,7 @@ bdo HTML_BDO
big HTML_BIG
/big HTML_N_BIG
button HTML_BUTTON
+/button HTML_N_BUTTON
fieldset HTML_FIELDSET
/fieldset HTML_N_FIELDSET
iframe HTML_IFRAME
diff --git a/terms.c b/terms.c
index 7a3c987..3d2ffd7 100644
--- a/terms.c
+++ b/terms.c
@@ -12,6 +12,7 @@
#include <unistd.h>
#include "config.h"
#include <string.h>
+#include <sys/wait.h>
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
@@ -222,6 +223,7 @@ static void
check_cygwin_console(void)
{
char *term = getenv("TERM");
+ char *ctype;
HANDLE hWnd;
if (term == NULL)
@@ -236,7 +238,9 @@ check_cygwin_console(void)
isLocalConsole = 1;
}
}
- if (strncmp(getenv("LANG"), "ja", 2) == 0) {
+ if (((ctype = getenv("LC_ALL")) ||
+ (ctype = getenv("LC_CTYPE")) ||
+ (ctype = getenv("LANG"))) && strncmp(ctype, "ja", 2) == 0) {
isWinConsole = TERM_CYGWIN_RESERVE_IME;
}
#ifdef SUPPORT_WIN9X_CONSOLE_MBCS
@@ -463,6 +467,262 @@ writestr(char *s)
#define MOVE(line,column) writestr(tgoto(T_cm,column,line));
+#ifdef USE_IMAGE
+void
+put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)
+{
+ Str buf;
+ char *size ;
+
+ if (w > 0 && h > 0)
+ size = Sprintf("%dx%d",w,h)->ptr;
+ else
+ size = "";
+
+ MOVE(y,x);
+ buf = Sprintf("\x1b]5379;show_picture %s %s %dx%d+%d+%d\x07",url,size,sw,sh,sx,sy);
+ writestr(buf->ptr);
+ MOVE(Currentbuf->cursorY,Currentbuf->cursorX);
+}
+
+static void
+save_gif(const char *path, u_char *header, size_t header_size, u_char *body, size_t body_size)
+{
+ int fd;
+
+ if ((fd = open(path, O_WRONLY|O_CREAT, 0600)) >= 0) {
+ write(fd, header, header_size) ;
+ write(fd, body, body_size) ;
+ write(fd, "\x3b" , 1) ;
+ close(fd) ;
+ }
+}
+
+static u_char *
+skip_gif_header(u_char *p)
+{
+ /* Header */
+ p += 10;
+
+ if (*(p) & 0x80) {
+ p += (3 * (2 << ((*p) & 0x7)));
+ }
+ p += 3;
+
+ return p;
+}
+
+static Str
+save_first_animation_frame(const char *path)
+{
+ int fd;
+ struct stat st;
+ u_char *header;
+ size_t header_size;
+ u_char *body;
+ u_char *p;
+ ssize_t len;
+ Str new_path;
+
+ new_path = Strnew_charp(path);
+ Strcat_charp(new_path, "-1");
+ if (stat(new_path->ptr, &st) == 0) {
+ return new_path;
+ }
+
+ if ((fd = open( path, O_RDONLY)) < 0) {
+ return NULL;
+ }
+
+ if (fstat( fd, &st) != 0 || ! (header = GC_malloc( st.st_size))){
+ close( fd);
+ return NULL;
+ }
+
+ len = read(fd, header, st.st_size);
+ close(fd);
+
+ /* Header */
+
+ if (len != st.st_size || strncmp(header, "GIF89a", 6) != 0) {
+ return NULL;
+ }
+
+ p = skip_gif_header(header);
+ header_size = p - header;
+
+ /* Application Extension */
+ if (p[0] == 0x21 && p[1] == 0xff) {
+ p += 19;
+ }
+
+ /* Other blocks */
+ body = NULL;
+ while (p + 2 < header + st.st_size) {
+ if (*(p++) == 0x21 && *(p++) == 0xf9 && *(p++) == 0x04) {
+ if( body) {
+ /* Graphic Control Extension */
+ save_gif(new_path->ptr, header, header_size, body, p - 3 - body);
+ return new_path;
+ }
+ else {
+ /* skip the first frame. */
+ }
+ body = p - 3;
+ }
+ }
+
+ return NULL;
+}
+
+void ttymode_set(int mode, int imode);
+void ttymode_reset(int mode, int imode);
+
+void
+put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)
+{
+ pid_t pid;
+ int do_anim;
+ MySignalHandler(*volatile previntr) (SIGNAL_ARG);
+ MySignalHandler(*volatile prevquit) (SIGNAL_ARG);
+ MySignalHandler(*volatile prevstop) (SIGNAL_ARG);
+
+ MOVE(y,x);
+ flush_tty();
+
+ do_anim = (n_terminal_image == 1 && x == 0 && y == 0 && sx == 0 && sy == 0);
+
+ previntr = mySignal(SIGINT, SIG_IGN);
+ prevquit = mySignal(SIGQUIT, SIG_IGN);
+ prevstop = mySignal(SIGTSTP, SIG_IGN);
+
+ if ((pid = fork()) == 0) {
+ char *env;
+ int n = 0;
+ char *argv[20];
+ char digit[2][11+1];
+ char clip[44+3+1];
+ Str str_url;
+
+ close(STDERR_FILENO); /* Don't output error message. */
+ if (do_anim) {
+ writestr("\x1b[?80h");
+ }
+ else if (!strstr(url, "://") && strcmp(url+strlen(url)-4, ".gif") == 0 &&
+ (str_url = save_first_animation_frame(url))) {
+ url = str_url->ptr;
+ }
+ ttymode_set(ISIG, 0);
+
+ if ((env = getenv("W3M_IMG2SIXEL"))) {
+ char *p;
+ env = Strnew_charp(env)->ptr;
+ while (n < 8 && (p = strchr(env, ' '))) {
+ *p = '\0';
+ if (*env != '\0') {
+ argv[n++] = env;
+ }
+ env = p+1;
+ }
+ if (*env != '\0') {
+ argv[n++] = env;
+ }
+ }
+ else {
+ argv[n++] = "img2sixel";
+ }
+ argv[n++] = "-l";
+ argv[n++] = do_anim ? "auto" : "disable";
+ argv[n++] = "-w";
+ sprintf(digit[0], "%d", w*pixel_per_char_i);
+ argv[n++] = digit[0];
+ argv[n++] = "-h";
+ sprintf(digit[1], "%d", h*pixel_per_line_i);
+ argv[n++] = digit[1];
+ argv[n++] = "-c";
+ sprintf(clip, "%dx%d+%d+%d", sw*pixel_per_char_i, sh*pixel_per_line_i,
+ sx*pixel_per_char_i, sy*pixel_per_line_i);
+ argv[n++] = clip;
+ argv[n++] = url;
+ if (getenv("TERM") && strcmp(getenv("TERM"), "screen") == 0 &&
+ (!getenv("SCREEN_VARIANT") || strcmp(getenv("SCREEN_VARIANT"), "sixel") != 0)) {
+ argv[n++] = "-P";
+ }
+ argv[n++] = NULL;
+ execvp(argv[0],argv);
+ exit(0);
+ }
+ else if (pid > 0) {
+ int status;
+ waitpid(pid, &status, 0);
+ ttymode_reset(ISIG, 0);
+ mySignal(SIGINT, previntr);
+ mySignal(SIGQUIT, prevquit);
+ mySignal(SIGTSTP, prevstop);
+ if (do_anim) {
+ writestr("\x1b[?80l");
+ }
+ }
+
+ MOVE(Currentbuf->cursorY,Currentbuf->cursorX);
+}
+
+int
+get_pixel_per_cell(int *ppc, int *ppl)
+{
+ fd_set rfd;
+ struct timeval tval;
+ char buf[100];
+ char *p;
+ ssize_t len;
+ ssize_t left;
+ int wp,hp,wc,hc;
+ int i;
+
+#ifdef TIOCGWINSZ
+ struct winsize ws;
+ if (ioctl(tty, TIOCGWINSZ, &ws) == 0 && ws.ws_ypixel > 0 && ws.ws_row > 0 &&
+ ws.ws_xpixel > 0 && ws.ws_col > 0) {
+ *ppc = ws.ws_xpixel / ws.ws_col;
+ *ppl = ws.ws_ypixel / ws.ws_row;
+ return 1;
+ }
+#endif
+
+ fputs("\x1b[14t\x1b[18t",ttyf); flush_tty();
+
+ p = buf;
+ left = sizeof(buf) - 1;
+ for (i = 0; i < 10; i++) {
+ tval.tv_usec = 200000; /* 0.2 sec * 10 */
+ tval.tv_sec = 0;
+ FD_ZERO(&rfd);
+ FD_SET(tty,&rfd);
+ if (select(tty+1,&rfd,NULL,NULL,&tval) <= 0 || ! FD_ISSET(tty,&rfd))
+ continue;
+
+ if ((len = read(tty,p,left)) <= 0)
+ continue;
+ p[len] = '\0';
+
+ if (sscanf(buf,"\x1b[4;%d;%dt\x1b[8;%d;%dt",&hp,&wp,&hc,&wc) == 4) {
+ if (wp > 0 && wc > 0 && hp > 0 && hc > 0) {
+ *ppc = wp / wc;
+ *ppl = hp / hc;
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ p += len;
+ left -= len;
+ }
+
+ return 0;
+}
+#endif /* USE_IMAGE */
+
#ifdef USE_MOUSE
#define W3M_TERM_INFO(name, title, mouse) name, title, mouse
#define NEED_XTERM_ON (1)
@@ -634,7 +894,8 @@ reset_tty(void)
writestr(T_se); /* reset terminal */
flush_tty();
TerminalSet(tty, &d_ioval);
- close_tty();
+ if (tty != 2)
+ close_tty();
}
static MySignalHandler
@@ -953,7 +1214,6 @@ addch(char pc)
{
l_prop *pr;
int dest, i;
- short *dirty;
#ifdef USE_M17N
static Str tmp = NULL;
char **p;
@@ -975,7 +1235,6 @@ addch(char pc)
return;
p = ScreenImage[CurLine]->lineimage;
pr = ScreenImage[CurLine]->lineprop;
- dirty = &ScreenImage[CurLine]->isdirty;
#ifndef USE_M17N
/* Eliminate unprintables according to * iso-8859-*.
@@ -1986,6 +2245,10 @@ skip_escseq(void)
getch();
getch();
getch();
+ } else if (is_xterm && c == '<') {
+ c = getch();
+ while (IS_DIGIT(c) || c == ';')
+ c = getch();
}
else
#endif
@@ -2027,8 +2290,8 @@ sleep_till_anykey(int sec, int purge)
#ifdef USE_MOUSE
-#define XTERM_ON {fputs("\033[?1001s\033[?1000h",ttyf); flush_tty();}
-#define XTERM_OFF {fputs("\033[?1000l\033[?1001r",ttyf); flush_tty();}
+#define XTERM_ON {fputs("\033[?1001s\033[?1000h\033[?1006h",ttyf); flush_tty();}
+#define XTERM_OFF {fputs("\033[?1006l\033[?1000l\033[?1001r",ttyf); flush_tty();}
#define CYGWIN_ON {fputs("\033[?1000h",ttyf); flush_tty();}
#define CYGWIN_OFF {fputs("\033[?1000l",ttyf); flush_tty();}
diff --git a/url.c b/url.c
index ed6062e..c90cd9f 100644
--- a/url.c
+++ b/url.c
@@ -121,6 +121,7 @@ static struct table2 DefaultGuess[] = {
};
static void add_index_file(ParsedURL *pu, URLFile *uf);
+static char * schemeNumToName(int scheme);
/* #define HTTP_DEFAULT_FILE "/index.html" */
@@ -326,6 +327,7 @@ openSSLHandle(int sock, char *hostname, char **p_cert)
SSL_load_error_strings();
if (!(ssl_ctx = SSL_CTX_new(SSLv23_client_method())))
goto eend;
+ SSL_CTX_set_cipher_list(ssl_ctx, "DEFAULT:!LOW:!RC4:!EXP");
option = SSL_OP_ALL;
if (ssl_forbid_method) {
if (strchr(ssl_forbid_method, '2'))
@@ -337,7 +339,15 @@ openSSLHandle(int sock, char *hostname, char **p_cert)
if (strchr(ssl_forbid_method, 'T'))
option |= SSL_OP_NO_TLSv1;
}
+#ifdef SSL_OP_NO_COMPRESSION
+ option |= SSL_OP_NO_COMPRESSION;
+#endif
SSL_CTX_set_options(ssl_ctx, option);
+
+#ifdef SSL_MODE_RELEASE_BUFFERS
+ SSL_CTX_set_mode (ssl_ctx, SSL_MODE_RELEASE_BUFFERS);
+#endif
+
#ifdef USE_SSL_VERIFY
/* derived from openssl-0.9.5/apps/s_{client,cb}.c */
#if 1 /* use SSL_get_verify_result() to verify cert */
@@ -444,6 +454,8 @@ baseURL(Buffer *buf)
/* <BASE> tag is defined in the document */
return buf->baseURL;
}
+ else if (IS_EMPTY_PARSED_URL(&buf->currentURL))
+ return NULL;
else
return &buf->currentURL;
}
@@ -638,16 +650,21 @@ openSocket(char *const hostname,
#define COPYPATH_SPC_ALLOW 0
#define COPYPATH_SPC_IGNORE 1
#define COPYPATH_SPC_REPLACE 2
+#define COPYPATH_SPC_MASK 3
+#define COPYPATH_LOWERCASE 4
static char *
copyPath(char *orgpath, int length, int option)
{
Str tmp = Strnew();
- while (*orgpath && length != 0) {
- if (IS_SPACE(*orgpath)) {
- switch (option) {
+ char ch;
+ while ((ch = *orgpath) != 0 && length != 0) {
+ if (option & COPYPATH_LOWERCASE)
+ ch = TOLOWER(ch);
+ if (IS_SPACE(ch)) {
+ switch (option & COPYPATH_SPC_MASK) {
case COPYPATH_SPC_ALLOW:
- Strcat_char(tmp, *orgpath);
+ Strcat_char(tmp, ch);
break;
case COPYPATH_SPC_IGNORE:
/* do nothing */
@@ -658,7 +675,7 @@ copyPath(char *orgpath, int length, int option)
}
}
else
- Strcat_char(tmp, *orgpath);
+ Strcat_char(tmp, ch);
orgpath++;
length--;
}
@@ -668,22 +685,14 @@ copyPath(char *orgpath, int length, int option)
void
parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
{
- char *p, *q;
+ char *p, *q, *qq;
Str tmp;
url = url_quote(url); /* quote 0x01-0x20, 0x7F-0xFF */
p = url;
+ copyParsedURL(p_url, NULL);
p_url->scheme = SCM_MISSING;
- p_url->port = 0;
- p_url->user = NULL;
- p_url->pass = NULL;
- p_url->host = NULL;
- p_url->is_nocache = 0;
- p_url->file = NULL;
- p_url->real_file = NULL;
- p_url->query = NULL;
- p_url->label = NULL;
/* RFC1808: Relative Uniform Resource Locators
* 4. Resolving Relative URLs
@@ -694,7 +703,7 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
goto do_label;
}
#if defined( __EMX__ ) || defined( __CYGWIN__ )
- if (!strncmp(url, "file://localhost/", 17)) {
+ if (!strncasecmp(url, "file://localhost/", 17)) {
p_url->scheme = SCM_LOCAL;
p += 17 - 1;
url += 17 - 1;
@@ -802,19 +811,20 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
/* scheme://user:pass@host or
* scheme://host:port
*/
- p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE);
+ qq = q;
q = ++p;
while (*p && strchr("@/?#", *p) == NULL)
p++;
if (*p == '@') {
/* scheme://user:pass@... */
+ p_url->user = copyPath(qq, q - 1 - qq, COPYPATH_SPC_IGNORE);
p_url->pass = copyPath(q, p - q, COPYPATH_SPC_ALLOW);
- q = ++p;
- p_url->user = p_url->host;
- p_url->host = NULL;
+ p++;
goto analyze_url;
}
/* scheme://host:port/ */
+ p_url->host = copyPath(qq, q - 1 - qq,
+ COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE);
tmp = Strnew_charp_n(q, p - q);
p_url->port = atoi(tmp->ptr);
/* *p is one of ['\0', '/', '?', '#'] */
@@ -822,14 +832,15 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
case '@':
/* scheme://user@... */
p_url->user = copyPath(q, p - q, COPYPATH_SPC_IGNORE);
- q = ++p;
+ p++;
goto analyze_url;
case '\0':
/* scheme://host */
case '/':
case '?':
case '#':
- p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE);
+ p_url->host = copyPath(q, p - q,
+ COPYPATH_SPC_IGNORE | COPYPATH_LOWERCASE);
p_url->port = DefaultPort[p_url->scheme];
break;
}
@@ -956,12 +967,16 @@ parseURL(char *url, ParsedURL *p_url, ParsedURL *current)
p_url->label = NULL;
}
-#define initParsedURL(p) bzero(p,sizeof(ParsedURL))
#define ALLOC_STR(s) ((s)==NULL?NULL:allocStr(s,-1))
void
-copyParsedURL(ParsedURL *p, ParsedURL *q)
+copyParsedURL(ParsedURL *p, const ParsedURL *q)
{
+ if (q == NULL) {
+ memset(p, 0, sizeof(ParsedURL));
+ p->scheme = SCM_UNKNOWN;
+ return;
+ }
p->scheme = q->scheme;
p->port = q->port;
p->is_nocache = q->is_nocache;
@@ -1280,9 +1295,23 @@ getURLScheme(char **url)
}
static char *
+schemeNumToName(int scheme)
+{
+ int i;
+
+ for (i = 0; schemetable[i].cmdname != NULL; i++) {
+ if (schemetable[i].cmd == scheme)
+ return schemetable[i].cmdname;
+ }
+ return NULL;
+}
+
+static char *
otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
{
Str s = Strnew();
+ const int *no_referer_ptr;
+ int no_referer;
Strcat_charp(s, "User-Agent: ");
if (UserAgent == NULL || *UserAgent == '\0')
@@ -1306,7 +1335,12 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
Strcat_charp(s, "Pragma: no-cache\r\n");
Strcat_charp(s, "Cache-control: no-cache\r\n");
}
- if (!NoSendReferer) {
+ no_referer = NoSendReferer;
+ no_referer_ptr = query_SCONF_NO_REFERER_FROM(current);
+ no_referer = no_referer || (no_referer_ptr && *no_referer_ptr);
+ no_referer_ptr = query_SCONF_NO_REFERER_TO(target);
+ no_referer = no_referer || (no_referer_ptr && *no_referer_ptr);
+ if (!no_referer) {
#ifdef USE_SSL
if (current && current->scheme == SCM_HTTPS && target->scheme != SCM_HTTPS) {
/* Don't send Referer: if https:// -> http:// */
@@ -1314,6 +1348,7 @@ otherinfo(ParsedURL *target, ParsedURL *current, char *referer)
else
#endif
if (referer == NULL && current && current->scheme != SCM_LOCAL &&
+ current->scheme != SCM_LOCAL_CGI &&
(current->scheme != SCM_FTP ||
(current->user == NULL && current->pass == NULL))) {
char *p = current->label;
@@ -1384,7 +1419,6 @@ HTTPrequest(ParsedURL *pu, ParsedURL *current, HRequest *hr, TextList *extra)
{
Str tmp;
TextListItem *i;
- int seen_www_auth = 0;
#ifdef USE_COOKIE
Str cookie;
#endif /* USE_COOKIE */
@@ -1400,7 +1434,6 @@ HTTPrequest(ParsedURL *pu, ParsedURL *current, HRequest *hr, TextList *extra)
for (i = extra->first; i != NULL; i = i->next) {
if (strncasecmp(i->ptr, "Authorization:",
sizeof("Authorization:") - 1) == 0) {
- seen_www_auth = 1;
#ifdef USE_SSL
if (hr->command == HR_COMMAND_CONNECT)
continue;
@@ -1430,20 +1463,20 @@ HTTPrequest(ParsedURL *pu, ParsedURL *current, HRequest *hr, TextList *extra)
#endif /* USE_COOKIE */
if (hr->command == HR_COMMAND_POST) {
if (hr->request->enctype == FORM_ENCTYPE_MULTIPART) {
- Strcat_charp(tmp, "Content-type: multipart/form-data; boundary=");
+ Strcat_charp(tmp, "Content-Type: multipart/form-data; boundary=");
Strcat_charp(tmp, hr->request->boundary);
Strcat_charp(tmp, "\r\n");
Strcat(tmp,
- Sprintf("Content-length: %ld\r\n", hr->request->length));
+ Sprintf("Content-Length: %ld\r\n", hr->request->length));
Strcat_charp(tmp, "\r\n");
}
else {
if (!override_content_type) {
Strcat_charp(tmp,
- "Content-type: application/x-www-form-urlencoded\r\n");
+ "Content-Type: application/x-www-form-urlencoded\r\n");
}
Strcat(tmp,
- Sprintf("Content-length: %ld\r\n", hr->request->length));
+ Sprintf("Content-Length: %ld\r\n", hr->request->length));
if (header_string)
Strcat(tmp, header_string);
Strcat_charp(tmp, "\r\n");
@@ -1603,7 +1636,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
pu->host != NULL && !check_no_proxy(pu->host)) {
hr->flag |= HR_FLAG_PROXY;
sock = openSocket(FTP_proxy_parsed.host,
- schemetable[FTP_proxy_parsed.scheme].cmdname,
+ schemeNumToName(FTP_proxy_parsed.scheme),
FTP_proxy_parsed.port);
if (sock < 0)
return uf;
@@ -1645,15 +1678,15 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
}
else if (pu->scheme == SCM_HTTPS) {
sock = openSocket(HTTPS_proxy_parsed.host,
- schemetable[HTTPS_proxy_parsed.scheme].
- cmdname, HTTPS_proxy_parsed.port);
+ schemeNumToName(HTTPS_proxy_parsed.scheme),
+ HTTPS_proxy_parsed.port);
sslh = NULL;
}
else {
#endif /* USE_SSL */
sock = openSocket(HTTP_proxy_parsed.host,
- schemetable[HTTP_proxy_parsed.scheme].
- cmdname, HTTP_proxy_parsed.port);
+ schemeNumToName(HTTP_proxy_parsed.scheme),
+ HTTP_proxy_parsed.port);
#ifdef USE_SSL
sslh = NULL;
}
@@ -1685,8 +1718,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
}
}
else {
- sock = openSocket(pu->host,
- schemetable[pu->scheme].cmdname, pu->port);
+ sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port);
if (sock < 0) {
*status = HTST_MISSING;
return uf;
@@ -1750,7 +1782,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
pu->host != NULL && !check_no_proxy(pu->host)) {
hr->flag |= HR_FLAG_PROXY;
sock = openSocket(GOPHER_proxy_parsed.host,
- schemetable[GOPHER_proxy_parsed.scheme].cmdname,
+ schemeNumToName(GOPHER_proxy_parsed.scheme),
GOPHER_proxy_parsed.port);
if (sock < 0)
return uf;
@@ -1758,8 +1790,7 @@ openURL(char *url, ParsedURL *pu, ParsedURL *current,
tmp = HTTPrequest(pu, current, hr, extra_header);
}
else {
- sock = openSocket(pu->host,
- schemetable[pu->scheme].cmdname, pu->port);
+ sock = openSocket(pu->host, schemeNumToName(pu->scheme), pu->port);
if (sock < 0)
return uf;
if (pu->file == NULL)
@@ -2049,7 +2080,7 @@ filename_extension(char *path, int is_url)
break;
}
if (*last_dot == '.') {
- for (i = 1; last_dot[i] && i < 8; i++) {
+ for (i = 1; i < 8 && last_dot[i]; i++) {
if (is_url && !IS_ALNUM(last_dot[i]))
break;
}
@@ -2234,3 +2265,66 @@ schemeToProxy(int scheme)
}
return pu;
}
+
+#ifdef USE_M17N
+wc_ces
+url_to_charset(const char *url, const ParsedURL *base, wc_ces doc_charset)
+{
+ const ParsedURL *pu;
+ ParsedURL pu_buf;
+ const wc_ces *csptr;
+
+ if (url && *url && *url != '#') {
+ parseURL2((char *)url, &pu_buf, (ParsedURL *)base);
+ pu = &pu_buf;
+ } else {
+ pu = base;
+ }
+ if (pu && (pu->scheme == SCM_LOCAL || pu->scheme == SCM_LOCAL_CGI))
+ return SystemCharset;
+ csptr = query_SCONF_URL_CHARSET(pu);
+ return (csptr && *csptr) ? *csptr :
+ doc_charset ? doc_charset : DocumentCharset;
+}
+
+char *
+url_encode(const char *url, const ParsedURL *base, wc_ces doc_charset)
+{
+ return url_quote_conv((char *)url,
+ url_to_charset(url, base, doc_charset));
+}
+
+#if 0 /* unused */
+char *
+url_decode(const char *url, const ParsedURL *base, wc_ces doc_charset)
+{
+ if (!DecodeURL)
+ return (char *)url;
+ return url_unquote_conv((char *)url,
+ url_to_charset(url, base, doc_charset));
+}
+#endif
+
+char *
+url_decode2(const char *url, const Buffer *buf)
+{
+ wc_ces url_charset;
+
+ if (!DecodeURL)
+ return (char *)url;
+ url_charset = buf ?
+ url_to_charset(url, baseURL((Buffer *)buf), buf->document_charset) :
+ url_to_charset(url, NULL, 0);
+ return url_unquote_conv((char *)url, url_charset);
+}
+
+#else /* !defined(USE_M17N) */
+
+char *
+url_decode0(const char *url)
+{
+ if (!DecodeURL)
+ return (char *)url;
+ return url_unquote_conv((char *)url, 0);
+}
+#endif /* !defined(USE_M17N) */
diff --git a/version.c.in b/version.c.in
index 31d30e4..ab25163 100644
--- a/version.c.in
+++ b/version.c.in
@@ -1,5 +1,5 @@
/* $Id: version.c.in,v 1.49 2012/05/22 09:45:56 inu Exp $ */
-#define CURRENT_VERSION "w3m/0.5.3+cvs"
+#define CURRENT_VERSION "w3m/0.5.3+gitYYYYMMDD"
#ifndef FM_H
char *w3m_version = CURRENT_VERSION;
diff --git a/w3m-doc/outline.html.in b/w3m-doc/outline.html.in
index 60bda47..4ed2a59 100644
--- a/w3m-doc/outline.html.in
+++ b/w3m-doc/outline.html.in
@@ -146,8 +146,8 @@ w3m $B$N(Bmake$B;~$K;XDj$7$?%-!<A`:n$K$h$C$F!"%X%k%W%U%!%$%k$,0[$J$j$^$9!#(B
<TR> <TD>c</TD> <TD>$B8=%Z!<%8$N(B URL $B$rI=<((B</TD></TR>
<TR> <TD>=</TD> <TD>$B8=%I%-%e%a%s%H$N>pJs$rI=<((B</TD></TR>
<TR> <TD>F</TD> <TD>$B%U%l!<%`$rI=<($9$k(B</TD></TR>
- <TR> <TD>M</TD> <TD>$B8=%Z!<%8$r30It%V%i%&%6$GI=<($9$k(B(2M,3M $B$G(B2$BHVL\$H(B3$BHVL\$N%V%i%&%6$r8F$S$@$9(B)</TD></TR>
- <TR> <TD>ESC M</TD> <TD>$B%j%s%/@h$r30It%V%i%&%6$GI=<($9$k(B(2ESC M,3ESC M $B$G(B2$BHVL\$H(B3$BHVL\$N%V%i%&%6$r8F$S$@$9(B)</TD></TR>
+ <TR> <TD>M</TD> <TD>$B8=%Z!<%8$r30It%V%i%&%6$GI=<($9$k(B(2M, 3M, ..., 9M $B$G(B2$BHVL\!$(B3$BHVL\!$(B9$BHVL\$N%V%i%&%6$r8F$S$@$9(B)</TD></TR>
+ <TR> <TD>ESC M</TD> <TD>$B%j%s%/@h$r30It%V%i%&%6$GI=<($9$k(B(2ESC M, 3ESC M, ..., 9ESC M $B$G(B2$BHVL\!$(B3$BHVL\!$(B9$BHVL\$N%V%i%&%6$r8F$S$@$9(B)</TD></TR>
</TABLE>
<H5>$B%U%!%$%k(B/$B%9%H%j!<%`A`:n(B</H5>
@@ -257,8 +257,8 @@ w3m $B$N(Bmake$B;~$K;XDj$7$?%-!<A`:n$K$h$C$F!"%X%k%W%U%!%$%k$,0[$J$j$^$9!#(B
<TR><TD>c<TD>$B8=:_$NJ8=q$N(B URL $B$rI=<($7$^$9!%(B
<TR><TD>=<TD>$B8=:_$NJ8=q$K4X$9$k>pJs$rI=<($7$^$9!%(B
<TR><TD>F<TD><FRAMESET> $B$r4^$`J8=q$rI=<($7$F$$$k$H$-$K!$(B<FRAME> $B%?%0$N;X$9J#?t$NJ8=q$r(B1$B$D$NJ8=q$KJQ49$7$FI=<($7$^$9!%(B
-<TR><TD>M<TD>$B8=:_8+$F$$$k%Z!<%8$r!$30It%V%i%&%6$r;H$C$FI=<($7$^$9!%(B 2M, 3M $B$G(B2$BHVL\$H(B3$BHVL\$N%V%i%&%6$r;H$$$^$9!%(B
-<TR><TD>ESC M<TD>$B8=:_$N%j%s%/@h$r!$30It%V%i%&%6$r;H$C$FI=<($7$^$9!%(B 2ESC M, 3ESC M $B$G(B2$BHVL\$H(B3$BHVL\$N%V%i%&%6$r;H$$$^$9!%(B
+<TR><TD>M<TD>$B8=:_8+$F$$$k%Z!<%8$r!$30It%V%i%&%6$r;H$C$FI=<($7$^$9!%(B 2M, 3M, ..., 9M $B$G(B2$BHVL\!$(B3$BHVL\!$(B9$BHVL\$N%V%i%&%6$r;H$$$^$9!%(B
+<TR><TD>ESC M<TD>$B8=:_$N%j%s%/@h$r!$30It%V%i%&%6$r;H$C$FI=<($7$^$9!%(B 2ESC M, 3ESC M, ..., 9ESC M $B$G(B2$BHVL\!$(B3$BHVL\!$(B9$BHVL\$N%V%i%&%6$r;H$$$^$9!%(B
</table>
<H5>$B%U%!%$%k$H(B URL $B4X78$NA`:n(B</H5>
diff --git a/w3m-doc/sample/keymap.cgi b/w3m-doc/sample/keymap.cgi
index f68f5fb..d92c60f 100755
--- a/w3m-doc/sample/keymap.cgi
+++ b/w3m-doc/sample/keymap.cgi
@@ -203,7 +203,6 @@ GOTO_LINK
HELP
HISTORY
INFO
-INIT_MAILCAP
INTERRUPT
LEFT
LINE_BEGIN
diff --git a/w3mbookmark.c b/w3mbookmark.c
index 4355536..a306f26 100644
--- a/w3mbookmark.c
+++ b/w3mbookmark.c
@@ -79,6 +79,7 @@ print_bookmark_panel(char *bmark, char *url, char *title, char *charset)
}
}
printf("</select>\n");
+ fclose(f);
}
printf(bkmark_src2, html_quote(url), html_quote(title));
}
@@ -99,7 +100,7 @@ create_new_bookmark(char *bmark, char *section, char *title, char *url,
fprintf(f, "<body>\n<h1>Bookmarks</h1>\n");
fprintf(f, "<h2>%s</h2>\n<ul>\n", section);
fprintf(f, "<li><a href=\"%s\">%s</a>\n", url, title);
- fprintf(f, end_section);
+ fprintf(f, "%s", end_section);
fprintf(f, "</ul>\n</body>\n</html>\n");
fclose(f);
}
@@ -168,7 +169,10 @@ insert_bookmark(char *bmark, struct parsed_tagarg *data)
/* In this case, a new bookmark is appeneded after the bookmark file */
return create_new_bookmark(bmark, section, title, url, "a");
}
- f = fopen(bmark, "w");
+ if ((f = fopen(bmark, "w")) == NULL) {
+ printf("\nCannot open bookmark %s\n", bmark);
+ return FALSE;
+ }
while (tl->nitem) {
fputs(popText(tl), f);
}
diff --git a/w3mhelp-lynx_en.html.in b/w3mhelp-lynx_en.html.in
index 7448877..d073b0f 100644
--- a/w3mhelp-lynx_en.html.in
+++ b/w3mhelp-lynx_en.html.in
@@ -43,20 +43,20 @@ w3m</A>
<table cellpadding=0>
<TR><TD WIDTH=100>RET, C-f, Right arrow<TD>Follow hyperlink
<TR><TD>d, ESC RET<TD>Save link to file
-<TR><TD>u<TD>Peek link URL
-<TR><TD>i<TD>Peek image URL
+<TR><TD>u<TD>Peek at link URL
+<TR><TD>i<TD>Peek at image URL
<TR><TD>I<TD>View inline image
<TR><TD>ESC I<TD>Save inline image to file
-<TR><TD>:<TD>Mark URL-like strings as anchors
-<TR><TD>ESC :<TD>Mark Message-ID-like strings as news anchors
-<TR><TD>c<TD>Peek current URL
+<TR><TD>:<TD>Mark URL-like strings as links
+<TR><TD>ESC :<TD>Mark Message-ID-like strings as links
+<TR><TD>c<TD>Peek at current URL
<TR><TD>=<TD>Display information about current document
-<TR><TD>C-h<TD>View history of URL
-<TR><TD>F<TD>Render frame
+<TR><TD>C-h<TD>View browser history
+<TR><TD>F<TD>Render frames
<TR><TD>M<TD>Browse current document using external browser
-(use 2M and 3M to invoke second and third browser)
+(prefix 2, 3, ..., or 9 to invoke alternate configured browsers, e.g. 3 M)
<TR><TD>ESC M<TD>Browse link using external browser
-(use 2ESC M and 3ESC M to invoke second and third browser)
+(prefixed as above, e.g. 3ESC M)
</table>
<H2>File/Stream operation</H2>
@@ -98,7 +98,7 @@ w3m</A>
<table cellpadding=0>
<TR><TD WIDTH=100>/, C-s<TD>Search forward
<TR><TD>n<TD>Search next
-<TR><TD>w<TD>Toggle wrap search mode
+<TR><TD>w<TD>Toggle search wrap mode
</table>
<H2>Mark operation</H2>
@@ -121,7 +121,7 @@ w3m</A>
<TR><TD>Q<TD>Quit without confirmation
</table>
-<H2>Line-edit mode</H2>
+<H2>Line-editing mode</H2>
<table cellpadding=0>
<TR><TD WIDTH=100>C-f<TD>Move cursor forward
<TR><TD>C-b<TD>Move cursor backward
diff --git a/w3mhelp-lynx_ja.html.in b/w3mhelp-lynx_ja.html.in
index d160984..828b5a3 100644
--- a/w3mhelp-lynx_ja.html.in
+++ b/w3mhelp-lynx_ja.html.in
@@ -58,9 +58,9 @@
<TR><TD>F<TD><FRAMESET>��ޤ�ʸ���ɽ�����Ƥ���Ȥ��ˡ�<FRAME>
�����λؤ�ʣ����ʸ���1�Ĥ�ʸ����Ѵ�����ɽ�����ޤ���
<TR><TD>M<TD>���߸��Ƥ���ڡ��������֥饦����Ȥä�ɽ�����ޤ���
-2M, 3M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2M, 3M, ..., 9M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
<TR><TD>ESC M<TD>���ߤΥ��������֥饦����Ȥä�ɽ�����ޤ���
-2ESC M, 3ESC M ��2���ܤ�3���ܤΥ֥饦����Ȥ��ޤ���
+2ESC M, 3ESC M, ..., 9ESC M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����Ȥ��ޤ���
</table>
<H3>�ե������URL�ط������</H3>
diff --git a/w3mhelp-w3m_en.html.in b/w3mhelp-w3m_en.html.in
index eb46e8a..a692142 100644
--- a/w3mhelp-w3m_en.html.in
+++ b/w3mhelp-w3m_en.html.in
@@ -47,21 +47,21 @@ w3m</A>
<table cellpadding=0>
<TR><TD WIDTH=100>RET<TD>Follow hyperlink
<TR><TD>a, ESC RET<TD>Save link to file
-<TR><TD>u<TD>Peek link URL
-<TR><TD>i<TD>Peek image URL
+<TR><TD>u<TD>Peek at link URL
+<TR><TD>i<TD>Peek at image URL
<TR><TD>I<TD>View inline image
<TR><TD>ESC I<TD>Save inline image to file
-<TR><TD>:<TD>Mark URL-like strings as anchors
-<TR><TD>ESC :<TD>Mark Message-ID-like strings as news anchors
-<TR><TD>c<TD>Peek current URL
+<TR><TD>:<TD>Mark URL-like strings as links
+<TR><TD>ESC :<TD>Mark Message-ID-like strings as links
+<TR><TD>c<TD>Peek at current URL
<TR><TD>=<TD>Display information about current document
<TR><TD>C-g<TD>Show current line number
-<TR><TD>C-h<TD>View history of URL
-<TR><TD>F<TD>Render frame
+<TR><TD>C-h<TD>View browser history
+<TR><TD>F<TD>Render frames
<TR><TD>M<TD>Browse current document using external browser
-(use 2M and 3M to invoke second and third browser)
+(prefix 2, 3, ..., or 9 to invoke alternate configured browsers, e.g. 3 M)
<TR><TD>ESC M<TD>Browse link using external browser
-(use 2ESC M and 3ESC M to invoke second and third browser)
+(prefixed as above, e.g. 3ESC M)
</table>
<H2>File/Stream operation</H2>
@@ -105,7 +105,7 @@ w3m</A>
<TR><TD>?,C-r<TD>Search backward
<TR><TD>n<TD>Search next
<TR><TD>N<TD>Search previous
-<TR><TD>C-w<TD>Toggle wrap search mode
+<TR><TD>C-w<TD>Toggle search wrap mode
</table>
<H2>Dictionary look-up</H2>
@@ -134,7 +134,7 @@ w3m</A>
<TR><TD>Q<TD>Quit without confirmation
</table>
-<H2>Line-edit mode</H2>
+<H2>Line-editing mode</H2>
<table cellpadding=0>
<TR><TD WIDTH=100>C-f<TD>Move cursor forward
<TR><TD>C-b<TD>Move cursor backward
diff --git a/w3mhelp-w3m_ja.html.in b/w3mhelp-w3m_ja.html.in
index 95464ab..72cb849 100644
--- a/w3mhelp-w3m_ja.html.in
+++ b/w3mhelp-w3m_ja.html.in
@@ -61,8 +61,8 @@
<TR> <TD>C-g</TD> <TD>�ڡ�����Ǥθ��߰��֤�ɽ��</TD></TR>
<TR> <TD>C-h</TD> <TD>URL�����ɽ��</TD></TR>
<TR> <TD>F</TD> <TD>�ե졼���ɽ������</TD></TR>
- <TR> <TD>M</TD> <TD>���ڡ��������֥饦����ɽ������(2M,3M��2���ܤ�3���ܤΥ֥饦����ƤӤ���)</TD></TR>
- <TR> <TD>ESC M</TD> <TD>���������֥饦����ɽ������(2ESC M,3ESC M��2���ܤ�3���ܤΥ֥饦����ƤӤ���)</TD></TR>
+ <TR> <TD>M</TD> <TD>���ڡ��������֥饦����ɽ������(2M, 3M, ..., 9M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����ƤӤ���)</TD></TR>
+ <TR> <TD>ESC M</TD> <TD>���������֥饦����ɽ������(2ESC M, 3ESC M, ..., 9ESC M ��2���ܡ�3���ܡ�9���ܤΥ֥饦����ƤӤ���)</TD></TR>
</TABLE>
<H2>�ե�����/���ȥ�����</H2>
diff --git a/w3mhelperpanel.c b/w3mhelperpanel.c
index 110794b..96b60a0 100644
--- a/w3mhelperpanel.c
+++ b/w3mhelperpanel.c
@@ -115,6 +115,7 @@ printMailcapPanel(char *mailcap)
printf("</table>\n<input type=submit name=submit value=\"%s\">\n</form>\n\
</body>\n</html>\n",
MSG_DOIT);
+ fclose(f);
}
void
diff --git a/w3mimg/Makefile.in b/w3mimg/Makefile.in
index dfc550c..8e2ad73 100644
--- a/w3mimg/Makefile.in
+++ b/w3mimg/Makefile.in
@@ -16,9 +16,9 @@ IMGCFLAGS=@IMGX11CFLAGS@ @IMGFBCFLAGS@ @IMGWINCFLAGS@
IMGOBJS=@IMGOBJS@
.PHONY: $(SUBDIRS)
-all: @IMGTARGETS@ w3mimg.a
+all: w3mimg.a
-w3mimg.a: $(IMGOBJS)
+w3mimg.a: w3mimg.o @IMGTARGETS@
$(AR) rv $@ $(IMGOBJS)
$(RANLIB) $@
diff --git a/w3mimg/fb/fb.c b/w3mimg/fb/fb.c
index cd11128..7960584 100644
--- a/w3mimg/fb/fb.c
+++ b/w3mimg/fb/fb.c
@@ -12,12 +12,24 @@
#include <errno.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
+#if defined(__linux__)
#include <linux/fb.h>
+#elif defined(__FreeBSD__)
+#include <sys/fbio.h>
+#endif
+#if defined(__FreeBSD__)
+#include <sys/types.h>
+#include <machine/param.h>
+#endif
#include "fb.h"
#define FB_ENV "FRAMEBUFFER"
+#if defined(__linux__)
#define FB_DEFDEV "/dev/fb0"
+#elif defined(__FreeBSD__)
+#define FB_DEFDEV "/dev/ttyv0"
+#endif
#define MONO_OFFSET_8BIT 0x40
#define COLORS_MONO_8BIT 0x40
@@ -38,22 +50,65 @@
#define IMAGE_SIZE_MAX 10000
+#if defined(__linux__)
static struct fb_cmap *fb_cmap_create(struct fb_fix_screeninfo *,
struct fb_var_screeninfo *);
+#elif defined(__FreeBSD__)
+static video_color_palette_t *fb_cmap_create(video_info_t *video_info,
+ video_adapter_info_t *video_adapter_info);
+#endif
+#if defined(__linux__)
static void fb_cmap_destroy(struct fb_cmap *cmap);
+#elif defined(__FreeBSD__)
+static void fb_cmap_destroy(video_color_palette_t *cmap);
+#endif
+#if defined(__linux__)
static int fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo);
+#endif
+#if defined(__linux__)
static void *fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo);
+#elif defined(__FreeBSD__)
+static void *fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info);
+#endif
+#if defined(__linux__)
static int fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo);
+#elif defined(__FreeBSD__)
+static int fb_munmap(void *buf, video_adapter_info_t *video_adapter_info);
+#endif
+#if defined(__linux__)
static int fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo);
+#endif
+#if defined(__linux__)
static int fb_cmap_set(int fbfp, struct fb_cmap *cmap);
+#elif defined(__FreeBSD__)
+static int fb_cmap_set(int fbfp, video_color_palette_t *cmap);
+#endif
+#if defined(__linux__)
static int fb_cmap_get(int fbfp, struct fb_cmap *cmap);
+#elif defined(__FreeBSD__)
+static int fb_cmap_get(int fbfp, video_color_palette_t *cmap);
+#endif
static int fb_cmap_init(void);
static int fb_get_cmap_index(int r, int g, int b);
static unsigned long fb_get_packed_color(int r, int g, int b);
+#if defined(__FreeBSD__)
+static int fb_video_mode_get(int fbfp, int *video_mode);
+static int fb_video_info_get(int fbfp, video_info_t *video_info);
+static int fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info);
+#endif
+#if defined(__linux__)
static struct fb_fix_screeninfo fscinfo;
static struct fb_var_screeninfo vscinfo;
+#elif defined(__FreeBSD__)
+static video_info_t video_info;
+static video_adapter_info_t video_adapter_info;
+#endif
+#if defined(__linux__)
static struct fb_cmap *cmap = NULL, *cmap_org = NULL;
+#elif defined(__FreeBSD__)
+static video_color_palette_t *cmap = NULL, *cmap_org = NULL;
+#endif
static int is_open = FALSE;
static int fbfp = -1;
static size_t pixel_size = 0;
@@ -63,6 +118,9 @@ int
fb_open(void)
{
char *fbdev = { FB_DEFDEV };
+#if defined(__FreeBSD__)
+ int video_mode;
+#endif
if (is_open == TRUE)
return 1;
@@ -76,6 +134,7 @@ fb_open(void)
goto ERR_END;
}
+#if defined(__linux__)
if (fb_fscrn_get(fbfp, &fscinfo)) {
goto ERR_END;
}
@@ -83,22 +142,69 @@ fb_open(void)
if (fb_vscrn_get(fbfp, &vscinfo)) {
goto ERR_END;
}
+#elif defined(__FreeBSD__)
+ if (fb_video_mode_get(fbfp, &video_mode)) {
+ goto ERR_END;
+ }
+ video_info.vi_mode = video_mode;
+
+ if (fb_video_info_get(fbfp, &video_info)) {
+ goto ERR_END;
+ }
+ if (fb_video_adapter_info_get(fbfp, &video_adapter_info)) {
+ goto ERR_END;
+ }
+ if (!(video_info.vi_flags & V_INFO_GRAPHICS) ||
+ !(video_info.vi_flags & V_INFO_LINEAR)) {
+ goto ERR_END;
+ }
+#endif
+
+#if defined(__linux__)
if ((cmap = fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) {
goto ERR_END;
}
+#elif defined(__FreeBSD__)
+ if ((cmap = fb_cmap_create(&video_info, &video_adapter_info)) == (video_color_palette_t *)-1) {
+ goto ERR_END;
+ }
+#endif
+#if defined(__linux__)
if (!(buf = fb_mmap(fbfp, &fscinfo))) {
fprintf(stderr, "Can't allocate memory.\n");
goto ERR_END;
}
+#elif defined(__FreeBSD__)
+ if (!(buf = fb_mmap(fbfp, &video_adapter_info))) {
+ fprintf(stderr, "Can't allocate memory.\n");
+ goto ERR_END;
+ }
+#endif
+#if defined(__linux__)
if (fscinfo.type != FB_TYPE_PACKED_PIXELS) {
fprintf(stderr, "This type of framebuffer is not supported.\n");
goto ERR_END;
}
+#elif defined(__FreeBSD__)
+ if (!(video_info.vi_mem_model == V_INFO_MM_PACKED ||
+ video_info.vi_mem_model == V_INFO_MM_DIRECT)) {
+ fprintf(stderr, "This type of framebuffer is not supported.\n");
+ goto ERR_END;
+ }
+#endif
+#if defined(__linux__)
if (fscinfo.visual == FB_VISUAL_PSEUDOCOLOR && vscinfo.bits_per_pixel == 8) {
+#elif defined(__FreeBSD__)
+ if (video_adapter_info.va_flags & V_ADP_PALETTE &&
+ video_info.vi_mem_model == V_INFO_MM_PACKED &&
+ video_info.vi_depth == 8) {
+#else
+ if (0) {
+#endif
if (fb_cmap_get(fbfp, cmap)) {
fprintf(stderr, "Can't get color map.\n");
fb_cmap_destroy(cmap);
@@ -111,6 +217,7 @@ fb_open(void)
pixel_size = 1;
}
+#if defined(__linux__)
else if ((fscinfo.visual == FB_VISUAL_TRUECOLOR ||
fscinfo.visual == FB_VISUAL_DIRECTCOLOR) &&
(vscinfo.bits_per_pixel == 15 ||
@@ -118,6 +225,14 @@ fb_open(void)
vscinfo.bits_per_pixel == 24 || vscinfo.bits_per_pixel == 32)) {
pixel_size = (vscinfo.bits_per_pixel + 7) / CHAR_BIT;
}
+#elif defined(__FreeBSD__)
+ else if (video_info.vi_mem_model == V_INFO_MM_DIRECT &&
+ (video_info.vi_depth == 15 ||
+ video_info.vi_depth == 16 ||
+ video_info.vi_depth == 24 || video_info.vi_depth == 32)) {
+ pixel_size = (video_info.vi_depth + 7) / CHAR_BIT;
+ }
+#endif
else {
fprintf(stderr, "This type of framebuffer is not supported.\n");
goto ERR_END;
@@ -147,7 +262,11 @@ fb_close(void)
cmap = NULL;
}
if (buf != NULL) {
+#if defined(__linux__)
fb_munmap(buf, &fscinfo);
+#elif defined(__FreeBSD__)
+ fb_munmap(buf, &video_adapter_info);
+#endif
buf = NULL;
}
@@ -259,11 +378,19 @@ fb_image_draw(FB_IMAGE * image, int x, int y, int sx, int sy, int width,
if (y + height > fb_height())
height = fb_height() - y;
+#if defined(__linux__)
offset_fb = fscinfo.line_length * y + pixel_size * x;
+#elif defined(__FreeBSD__)
+ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x;
+#endif
offset_img = image->rowstride * sy + pixel_size * sx;
for (i = 0; i < height; i++) {
memcpy(buf + offset_fb, image->data + offset_img, pixel_size * width);
+#if defined(__linux__)
offset_fb += fscinfo.line_length;
+#elif defined(__FreeBSD__)
+ offset_fb += video_adapter_info.va_line_width;
+#endif
offset_img += image->rowstride;
}
@@ -336,7 +463,11 @@ fb_width(void)
if (is_open != TRUE)
return 0;
+#if defined(__linux__)
return vscinfo.xres;
+#elif defined(__FreeBSD__)
+ return video_info.vi_width;
+#endif
}
int
@@ -345,7 +476,11 @@ fb_height(void)
if (is_open != TRUE)
return 0;
+#if defined(__linux__)
return vscinfo.yres;
+#elif defined(__FreeBSD__)
+ return video_info.vi_height;
+#endif
}
int
@@ -369,7 +504,11 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b)
h = fb_height() - y;
if (tmp == NULL) {
+#if defined(__linux__)
tmp = malloc(fscinfo.line_length);
+#elif defined(__FreeBSD__)
+ tmp = malloc(video_adapter_info.va_line_width);
+#endif
if (tmp == NULL)
return 1;
}
@@ -384,10 +523,18 @@ fb_clear(int x, int y, int w, int h, int r, int g, int b)
gg = g;
bb = b;
}
+#if defined(__linux__)
offset_fb = fscinfo.line_length * y + pixel_size * x;
+#elif defined(__FreeBSD__)
+ offset_fb = video_adapter_info.va_line_width * y + pixel_size * x;
+#endif
for (i = 0; i < h; i++) {
memcpy(buf + offset_fb, tmp, pixel_size * w);
+#if defined(__linux__)
offset_fb += fscinfo.line_length;
+#elif defined(__FreeBSD__)
+ offset_fb += video_adapter_info.va_line_width;
+#endif
}
return 0;
}
@@ -400,11 +547,21 @@ fb_get_packed_color(int r, int g, int b)
return fb_get_cmap_index(r, g, b);
}
else {
+#if defined(__linux__)
return
((r >> (CHAR_BIT - vscinfo.red.length)) << vscinfo.red.offset) +
((g >> (CHAR_BIT - vscinfo.green.length)) << vscinfo.green.
offset) +
((b >> (CHAR_BIT - vscinfo.blue.length)) << vscinfo.blue.offset);
+#elif defined(__FreeBSD__)
+ return
+ ((r >> (CHAR_BIT - video_info.vi_pixel_fsizes[0])) <<
+ video_info.vi_pixel_fields[0]) +
+ ((g >> (CHAR_BIT - video_info.vi_pixel_fsizes[1])) <<
+ video_info.vi_pixel_fields[1]) +
+ ((b >> (CHAR_BIT - video_info.vi_pixel_fsizes[2])) <<
+ video_info.vi_pixel_fields[2]);
+#endif
}
}
@@ -433,16 +590,31 @@ fb_cmap_init(void)
if (cmap == NULL)
return 1;
+#if defined(__linux__)
if (cmap->len < COLOR_OFFSET_8BIT + COLORS_8BIT) {
fprintf(stderr, "Can't allocate enough color.\n");
return 1;
}
+#elif defined(__FreeBSD__)
+ if (cmap->count < COLOR_OFFSET_8BIT + COLORS_8BIT) {
+ fprintf(stderr, "Can't allocate enough color.\n");
+ return 1;
+ }
+#endif
if (cmap_org == NULL) {
+#if defined(__linux__)
if ((cmap_org =
fb_cmap_create(&fscinfo, &vscinfo)) == (struct fb_cmap *)-1) {
return 1;
}
+#elif defined(__FreeBSD__)
+ if ((cmap_org =
+ fb_cmap_create(&video_info, &video_adapter_info)) ==
+ (video_color_palette_t *)-1) {
+ return 1;
+ }
+#endif
if (fb_cmap_get(fbfp, cmap_org)) {
fprintf(stderr, "Can't get color map.\n");
@@ -452,8 +624,13 @@ fb_cmap_init(void)
}
}
+#if defined(__linux__)
cmap->start = MONO_OFFSET_8BIT;
cmap->len = COLORS_8BIT + COLORS_MONO_8BIT;
+#elif defined(__FreeBSD__)
+ cmap->index = MONO_OFFSET_8BIT;
+ cmap->count = COLORS_8BIT + COLORS_MONO_8BIT;
+#endif
for (lp = 0; lp < COLORS_MONO_8BIT; lp++) {
int c;
@@ -506,73 +683,223 @@ fb_cmap_init(void)
#define LUT_MAX (256)
+#if defined(__linux__)
static struct fb_cmap *
fb_cmap_create(struct fb_fix_screeninfo *fscinfo,
struct fb_var_screeninfo *vscinfo)
+#elif defined(__FreeBSD__)
+static video_color_palette_t *
+fb_cmap_create(video_info_t *video_info,
+ video_adapter_info_t *video_adapter_info)
+#endif
{
+#if defined(__linux__)
struct fb_cmap *cmap;
+#elif defined(__FreeBSD__)
+ video_color_palette_t *cmap;
+#endif
int cmaplen = LUT_MAX;
/* check the existence of colormap */
+#if defined(__linux__)
if (fscinfo->visual == FB_VISUAL_MONO01 ||
fscinfo->visual == FB_VISUAL_MONO10 ||
fscinfo->visual == FB_VISUAL_TRUECOLOR)
return NULL;
+#elif defined(__FreeBSD__)
+ if (!(video_adapter_info->va_flags & V_ADP_PALETTE))
+ return NULL;
+#endif
+#if defined(__linux__)
cmap = (struct fb_cmap *)malloc(sizeof(struct fb_cmap));
+#elif defined(__FreeBSD__)
+ cmap = (video_color_palette_t *)malloc(sizeof(video_color_palette_t));
+#endif
if (!cmap) {
perror("cmap malloc error\n");
+#if defined(__linux__)
return (struct fb_cmap *)-1;
+#elif defined(__FreeBSD__)
+ return (video_color_palette_t *)-1;
+#endif
}
+#if defined(__linux__)
memset(cmap, 0, sizeof(struct fb_cmap));
+#elif defined(__FreeBSD__)
+ memset(cmap, 0, sizeof(video_color_palette_t));
+#endif
+
+#if defined(__FreeBSD__)
+ if (video_info->vi_mem_model == V_INFO_MM_PACKED) {
+ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen);
+ if (!cmap->red) {
+ perror("red lut malloc error\n");
+ return (video_color_palette_t *)-1;
+ }
+ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen);
+ if (!cmap->green) {
+ perror("green lut malloc error\n");
+ free(cmap->red);
+ return (video_color_palette_t *)-1;
+ }
+ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen);
+ if (!cmap->blue) {
+ perror("blue lut malloc error\n");
+ free(cmap->red);
+ free(cmap->green);
+ return (video_color_palette_t *)-1;
+ }
+ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen);
+ if (!cmap->transparent) {
+ perror("transparent lut malloc error\n");
+ free(cmap->red);
+ free(cmap->green);
+ free(cmap->blue);
+ return (video_color_palette_t *)-1;
+ }
+ cmap->count = cmaplen;
+ return cmap;
+ }
+#endif
/* Allocates memory for a colormap */
+#if defined(__linux__)
if (vscinfo->red.length) {
cmap->red = (__u16 *) malloc(sizeof(__u16) * cmaplen);
+#elif defined(__FreeBSD__)
+ if (video_info->vi_pixel_fsizes[0]) {
+ cmap->red = (u_char *) malloc(sizeof(u_char) * cmaplen);
+#else
+ if (0) {
+#endif
if (!cmap->red) {
perror("red lut malloc error\n");
+#if defined(__linux__)
return (struct fb_cmap *)-1;
+#elif defined(__FreeBSD__)
+ return (video_color_palette_t *)-1;
+#endif
}
}
+#if defined(__linux__)
if (vscinfo->green.length) {
cmap->green = (__u16 *) malloc(sizeof(__u16) * cmaplen);
+#elif defined(__FreeBSD__)
+ if (video_info->vi_pixel_fsizes[1]) {
+ cmap->green = (u_char *) malloc(sizeof(u_char) * cmaplen);
+#else
+ if (0) {
+#endif
if (!cmap->green) {
+#if defined(__linux__)
if (vscinfo->red.length)
free(cmap->red);
+#elif defined(__FreeBSD__)
+ if (video_info->vi_pixel_fsizes[0])
+ free(cmap->red);
+#endif
perror("green lut malloc error\n");
+#if defined(__linux__)
return (struct fb_cmap *)-1;
+#elif defined(__FreeBSD__)
+ return (video_color_palette_t *)-1;
+#endif
}
}
+#if defined(__linux__)
if (vscinfo->blue.length) {
cmap->blue = (__u16 *) malloc(sizeof(__u16) * cmaplen);
+#elif defined(__FreeBSD__)
+ if (video_info->vi_pixel_fsizes[2]) {
+ cmap->blue = (u_char *) malloc(sizeof(u_char) * cmaplen);
+#else
+ if (0) {
+#endif
if (!cmap->blue) {
+#if defined(__linux__)
if (vscinfo->red.length)
free(cmap->red);
+#elif defined(__FreeBSD__)
+ if (video_info->vi_pixel_fsizes[0])
+ free(cmap->red);
+#endif
+#if defined(__linux__)
if (vscinfo->green.length)
free(cmap->green);
+#elif defined(__FreeBSD__)
+ if (video_info->vi_pixel_fsizes[1])
+ free(cmap->green);
+#endif
perror("blue lut malloc error\n");
+#if defined(__linux__)
return (struct fb_cmap *)-1;
+#elif defined(__FreeBSD__)
+ return (video_color_palette_t *)-1;
+#endif
}
}
+#if defined(__linux__)
if (vscinfo->transp.length) {
cmap->transp = (__u16 *) malloc(sizeof(__u16) * cmaplen);
+#elif defined(__FreeBSD__)
+ if (video_info->vi_pixel_fsizes[3]) {
+ cmap->transparent = (u_char *) malloc(sizeof(u_char) * cmaplen);
+#else
+ if (0) {
+#endif
+#if defined(__linux__)
if (!cmap->transp) {
+#elif defined(__FreeBSD__)
+ if (!cmap->transparent) {
+#else
+ if (0) {
+#endif
+#if defined(__linux__)
if (vscinfo->red.length)
free(cmap->red);
+#elif defined(__FreeBSD__)
+ if (video_info->vi_pixel_fsizes[0])
+ free(cmap->red);
+#endif
+#if defined(__linux__)
if (vscinfo->green.length)
free(cmap->green);
+#elif defined(__FreeBSD__)
+ if (video_info->vi_pixel_fsizes[1])
+ free(cmap->green);
+#endif
+#if defined(__linux__)
if (vscinfo->blue.length)
free(cmap->blue);
perror("transp lut malloc error\n");
+#elif defined(__FreeBSD__)
+ if (video_info->vi_pixel_fsizes[2])
+ free(cmap->blue);
+ perror("transparent lut malloc error\n");
+#endif
+#if defined(__linux__)
return (struct fb_cmap *)-1;
+#elif defined(__FreeBSD__)
+ return (video_color_palette_t *)-1;
+#endif
}
}
+#if defined(__linux__)
cmap->len = cmaplen;
+#elif defined(__FreeBSD__)
+ cmap->count = cmaplen;
+#endif
return cmap;
}
+#if defined(__linux__)
static void
fb_cmap_destroy(struct fb_cmap *cmap)
+#elif defined(__FreeBSD__)
+static void
+fb_cmap_destroy(video_color_palette_t *cmap)
+#endif
{
if (cmap->red)
free(cmap->red);
@@ -580,28 +907,57 @@ fb_cmap_destroy(struct fb_cmap *cmap)
free(cmap->green);
if (cmap->blue)
free(cmap->blue);
+#if defined(__linux__)
if (cmap->transp)
free(cmap->transp);
+#elif defined(__FreeBSD__)
+ if (cmap->transparent)
+ free(cmap->transparent);
+#endif
free(cmap);
}
+#if defined(__linux__)
static int
fb_cmap_get(int fbfp, struct fb_cmap *cmap)
+#elif defined(__FreeBSD__)
+static int
+fb_cmap_get(int fbfp, video_color_palette_t *cmap)
+#endif
{
+#if defined(__linux__)
if (ioctl(fbfp, FBIOGETCMAP, cmap)) {
perror("ioctl FBIOGETCMAP error\n");
return -1;
}
+#elif defined(__FreeBSD__)
+ if (ioctl(fbfp, FBIO_GETPALETTE, cmap) == -1) {
+ perror("ioctl FBIO_GETPALETTE error\n");
+ return -1;
+ }
+#endif
return 0;
}
+#if defined(__linux__)
static int
fb_cmap_set(int fbfp, struct fb_cmap *cmap)
+#elif defined(__FreeBSD__)
+static int
+fb_cmap_set(int fbfp, video_color_palette_t *cmap)
+#endif
{
+#if defined(__linux__)
if (ioctl(fbfp, FBIOPUTCMAP, cmap)) {
perror("ioctl FBIOPUTCMAP error\n");
return -1;
}
+#elif defined(__FreeBSD__)
+ if (ioctl(fbfp, FBIO_SETPALETTE, cmap) == -1) {
+ perror("ioctl FBIO_SETPALETTE error\n");
+ return -1;
+ }
+#endif
return 0;
}
@@ -612,10 +968,16 @@ fb_cmap_set(int fbfp, struct fb_cmap *cmap)
* fb_munmap() deletes the mappings
*/
+#if defined(__linux__)
static void *
fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo)
+#elif defined(__FreeBSD__)
+static void *
+fb_mmap(int fbfp, video_adapter_info_t *video_adapter_info)
+#endif
{
void *buf;
+#if defined(__linux__)
if ((buf = (unsigned char *)
mmap(NULL, scinfo->smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp,
(off_t) 0))
@@ -623,13 +985,41 @@ fb_mmap(int fbfp, struct fb_fix_screeninfo *scinfo)
perror("mmap error");
return NULL;
}
+#elif defined(__FreeBSD__)
+ size_t mmap_offset;
+ size_t mmap_length;
+ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK);
+ mmap_length = (size_t)(video_adapter_info->va_window_size +
+ mmap_offset + PAGE_MASK) & (~PAGE_MASK);
+ if ((buf = (unsigned char *)
+ mmap(NULL, mmap_length, PROT_READ | PROT_WRITE, MAP_SHARED, fbfp,
+ (off_t) 0))
+ == MAP_FAILED) {
+ perror("mmap error");
+ return NULL;
+ }
+#endif
return buf;
}
+#if defined(__linux__)
static int
fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo)
+#elif defined(__FreeBSD__)
+static int
+fb_munmap(void *buf, video_adapter_info_t *video_adapter_info)
+#endif
{
+#if defined(__linux__)
return munmap(buf, scinfo->smem_len);
+#elif defined(__FreeBSD__)
+ size_t mmap_offset;
+ size_t mmap_length;
+ mmap_offset = (size_t)(video_adapter_info->va_window) & (PAGE_MASK);
+ mmap_length = (size_t)(video_adapter_info->va_window_size +
+ mmap_offset + PAGE_MASK) & (~PAGE_MASK);
+ return munmap((void *)((u_long)buf & (~PAGE_MASK)), mmap_length);
+#endif
}
/*
@@ -637,6 +1027,7 @@ fb_munmap(void *buf, struct fb_fix_screeninfo *scinfo)
*
* fb_fscrn_get() get information
*/
+#if defined(__linux__)
static int
fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo)
{
@@ -646,12 +1037,14 @@ fb_fscrn_get(int fbfp, struct fb_fix_screeninfo *scinfo)
}
return 0;
}
+#endif
/*
* (struct fb_var_screeninfo) device independent variable information
*
* fb_vscrn_get() get information
*/
+#if defined(__linux__)
static int
fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo)
{
@@ -661,3 +1054,41 @@ fb_vscrn_get(int fbfp, struct fb_var_screeninfo *scinfo)
}
return 0;
}
+#endif
+
+#if defined(__FreeBSD__)
+static int
+fb_video_mode_get(int fbfp, int *video_mode)
+{
+ if (ioctl(fbfp, FBIO_GETMODE, video_mode) == -1) {
+ perror("ioctl FBIO_GETMODE error\n");
+ return -1;
+ }
+ return 0;
+}
+#endif
+
+#if defined(__FreeBSD__)
+static int
+fb_video_info_get(int fbfp, video_info_t *video_info)
+{
+ if (ioctl(fbfp, FBIO_MODEINFO, video_info) == -1) {
+ perror("ioctl FBIO_MODEINFO error\n");
+ return -1;
+ }
+ return 0;
+}
+#endif
+
+#if defined(__FreeBSD__)
+static int
+fb_video_adapter_info_get(int fbfp, video_adapter_info_t *video_adapter_info)
+{
+ if (ioctl(fbfp, FBIO_ADPINFO, video_adapter_info) == -1) {
+ perror("ioctl FBIO_ADPINFO error\n");
+ return -1;
+ }
+ return 0;
+}
+#endif
+
diff --git a/w3mimg/fb/fb.h b/w3mimg/fb/fb.h
index 1138bb0..5d86454 100644
--- a/w3mimg/fb/fb.h
+++ b/w3mimg/fb/fb.h
@@ -1,7 +1,11 @@
/* $Id: fb.h,v 1.7 2003/07/07 15:48:17 ukai Exp $ */
#ifndef fb_header
#define fb_header
+#if defined(__linux__)
#include <linux/fb.h>
+#elif defined(__FreeBSD__)
+#include <sys/fbio.h>
+#endif
typedef struct {
int num;
diff --git a/w3mimg/fb/fb_gdkpixbuf.c b/w3mimg/fb/fb_gdkpixbuf.c
index 36e3b62..f1e8d97 100644
--- a/w3mimg/fb/fb_gdkpixbuf.c
+++ b/w3mimg/fb/fb_gdkpixbuf.c
@@ -6,7 +6,7 @@
#include "config.h"
#if defined(USE_GTK2)
#include <glib-object.h>
-#include <gdk/gdk.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
#endif
#include <gdk-pixbuf/gdk-pixbuf.h>
#include "fb.h"
diff --git a/w3mimg/fb/fb_w3mimg.c b/w3mimg/fb/fb_w3mimg.c
index d3ae5a9..fb323f5 100644
--- a/w3mimg/fb/fb_w3mimg.c
+++ b/w3mimg/fb/fb_w3mimg.c
@@ -153,10 +153,15 @@ check_tty_console(char *tty)
return 0;
if (strncmp(tty, "/dev/", 5) == 0)
tty += 5;
+#if defined(__linux__)
if (strncmp(tty, "tty", 3) == 0 && isdigit(*(tty + 3)))
return 1;
if (strncmp(tty, "vc/", 3) == 0 && isdigit(*(tty + 3)))
return 1;
+#elif defined(__FreeBSD__)
+ if (strncmp(tty, "ttyv", 4) == 0 && isxdigit(*(tty + 4)))
+ return 1;
+#endif
return 0;
}
#else
@@ -172,7 +177,9 @@ w3mimg_fbopen()
return NULL;
memset(wop, 0, sizeof(w3mimg_op));
- if (!check_tty_console(getenv("W3M_TTY")) && strcmp("jfbterm", getenv("TERM")) != 0) {
+ if (!check_tty_console(getenv("W3M_TTY")) &&
+ strcmp("jfbterm", getenv("TERM")) != 0 &&
+ strncmp("jfbterm-", getenv("TERM"), 8) != 0) {
fprintf(stderr, "w3mimgdisplay/fb: tty is not console\n");
goto error;
}
diff --git a/w3mimg/x11/x11_w3mimg.c b/w3mimg/x11/x11_w3mimg.c
index f5be4a8..9a539de 100644
--- a/w3mimg/x11/x11_w3mimg.c
+++ b/w3mimg/x11/x11_w3mimg.c
@@ -14,7 +14,7 @@
#elif defined(USE_GDKPIXBUF)
#if defined(USE_GTK2)
#include <glib-object.h>
-#include <gdk/gdk.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
#else
#include <gdk-pixbuf/gdk-pixbuf-xlib.h>
@@ -121,24 +121,32 @@ x11_init(w3mimg_op * self)
if (self == NULL)
return 0;
xi = (struct x11_info *)self->priv;
+#if defined(USE_IMLIB)
if (xi == NULL)
return 0;
-#if defined(USE_IMLIB)
if (!xi->id) {
xi->id = Imlib_init(xi->display);
if (!xi->id)
return 0;
}
#elif defined(USE_GDKPIXBUF)
- if (!xi->init_flag) {
+ if (!xi) {
+#if defined(USE_GTK2)
+ g_type_init();
+#endif
+ }
+ else if (!xi->init_flag) {
+ XWindowAttributes attr;
#if defined(USE_GTK2)
g_type_init();
#endif
- gdk_pixbuf_xlib_init(xi->display, 0);
+ XGetWindowAttributes(xi->display, xi->parent, &attr);
+ /* gdk_pixbuf_xlib_init_with_depth() ignores depth, sigh... */
+ gdk_pixbuf_xlib_init_with_depth(xi->display, 0, attr.depth);
xi->init_flag = TRUE;
}
#endif
- if (!xi->imageGC) {
+ if (xi && !xi->imageGC) {
xi->imageGC = XCreateGC(xi->display, xi->parent, 0, NULL);
if (!xi->imageGC)
return 0;
@@ -200,14 +208,16 @@ x11_set_background(w3mimg_op * self, char *background)
{
XColor screen_def, exact_def;
struct x11_info *xi;
+ XWindowAttributes attr;
if (self == NULL)
return;
xi = (struct x11_info *)self->priv;
if (xi == NULL)
return;
+ XGetWindowAttributes(xi->display, xi->window, &attr);
if (background &&
- XAllocNamedColor(xi->display, DefaultColormap(xi->display, 0),
+ XAllocNamedColor(xi->display, attr.colormap,
background, &screen_def, &exact_def))
xi->background_pixel = screen_def.pixel;
else {
@@ -216,7 +226,7 @@ x11_set_background(w3mimg_op * self, char *background)
XImage *i;
p = XCreatePixmap(xi->display, xi->window, 1, 1,
- DefaultDepth(xi->display, 0));
+ attr.depth);
gc = XCreateGC(xi->display, xi->window, 0, NULL);
if (!p || !gc)
exit(1); /* XXX */
@@ -258,6 +268,7 @@ x11_img_new(struct x11_info *xi, int w, int h, int n)
{
struct x11_image *img = NULL;
int i;
+ XWindowAttributes attr;
img = malloc(sizeof(*img));
if (!img)
@@ -267,9 +278,10 @@ x11_img_new(struct x11_info *xi, int w, int h, int n)
if (!img->pixmap)
goto ERROR;
+ XGetWindowAttributes(xi->display, xi->window, &attr);
for (i = 0; i < n; i++) {
img->pixmap[i] = XCreatePixmap(xi->display, xi->parent, w, h,
- DefaultDepth(xi->display, 0));
+ attr.depth);
if (!img->pixmap[i])
goto ERROR;
@@ -318,6 +330,41 @@ resize_image(GdkPixbuf * pixbuf, int width, int height)
return NULL;
return resized_pixbuf;
}
+
+#if defined(USE_GTK2)
+static void
+render_pixbuf_to_pixmap_32(Display *display, GC gc, Pixmap pixmap, GdkPixbuf * pixbuf)
+{
+ unsigned int x, y, width, height, rowstride, bytes_per_pixel;
+ unsigned char *line;
+ XImage *image;
+
+ width = gdk_pixbuf_get_width(pixbuf) ;
+ height = gdk_pixbuf_get_height(pixbuf) ;
+
+ if (!(image = XGetImage(display, pixmap, 0, 0, width, height, AllPlanes, ZPixmap)))
+ return ;
+
+ bytes_per_pixel = (gdk_pixbuf_get_has_alpha(pixbuf)) ? 4 : 3;
+ rowstride = gdk_pixbuf_get_rowstride(pixbuf);
+ line = gdk_pixbuf_get_pixels(pixbuf);
+
+ for (y = 0; y < height; y++) {
+ u_char *pixel;
+
+ pixel = line;
+ for (x = 0; x < width; x++) {
+ XPutPixel(image, x, y,
+ (pixel[0] <<16) | (pixel[1] <<8) | pixel[2] | 0xff000000);
+ pixel += bytes_per_pixel;
+ }
+ line += rowstride;
+ }
+
+ XPutImage(display, pixmap, gc, image, 0, 0, 0, 0, width, height);
+ XDestroyImage(image);
+}
+#endif
#endif
static int
@@ -342,6 +389,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
GList *frames;
#endif
#endif
+ XWindowAttributes attr;
if (self == NULL)
return 0;
@@ -349,6 +397,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
if (xi == NULL)
return 0;
+ XGetWindowAttributes(xi->display, xi->window, &attr);
#if defined(USE_IMLIB)
im = Imlib_load_image(xi->id, fname);
if (!im)
@@ -358,7 +407,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
if (h <= 0)
h = im->rgb_height;
img->pixmap = (void *)XCreatePixmap(xi->display, xi->parent, w, h,
- DefaultDepth(xi->display, 0));
+ attr.depth);
if (!img->pixmap)
return 0;
XSetForeground(xi->display, xi->imageGC, xi->background_pixel);
@@ -374,17 +423,21 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
w = imlib_image_get_width();
if (h <= 0)
h = imlib_image_get_height();
+
+ im = imlib_create_cropped_scaled_image(0, 0, imlib_image_get_width(), imlib_image_get_height(), w, h);
+ imlib_context_set_image(im);
+
img->pixmap = (void *)XCreatePixmap(xi->display, xi->parent, w, h,
- DefaultDepth(xi->display, 0));
+ attr.depth);
if (!img->pixmap)
return 0;
XSetForeground(xi->display, xi->imageGC, xi->background_pixel);
XFillRectangle(xi->display, (Pixmap) img->pixmap, xi->imageGC, 0, 0, w, h);
imlib_context_set_display(xi->display);
- imlib_context_set_visual(DefaultVisual(xi->display, 0));
- imlib_context_set_colormap(DefaultColormap(xi->display, 0));
+ imlib_context_set_visual(attr.visual);
+ imlib_context_set_colormap(attr.colormap);
imlib_context_set_drawable((Drawable) img->pixmap);
- imlib_render_image_on_drawable_at_size(0, 0, w, h);
+ imlib_render_image_on_drawable(0, 0);
imlib_free_image();
#elif defined(USE_GDKPIXBUF)
max_anim = self->max_anim;
@@ -416,7 +469,7 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
ratio_h = 1.0 * h / ih;
}
tmp_pixmap = XCreatePixmap(xi->display, xi->parent, w, h,
- DefaultDepth(xi->display, 0));
+ attr.depth);
XSetForeground(xi->display, xi->imageGC, xi->background_pixel);
XFillRectangle(xi->display, (Pixmap) tmp_pixmap, xi->imageGC, 0, 0, w, h);
if (!tmp_pixmap) {
@@ -459,7 +512,10 @@ x11_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
if (delay > ximg->delay)
ximg->delay = delay;
- gdk_pixbuf_xlib_render_to_drawable_alpha(pixbuf,
+ if (attr.depth == 32)
+ render_pixbuf_to_pixmap_32(xi->display, xi->imageGC, ximg->pixmap[j], pixbuf);
+ else
+ gdk_pixbuf_xlib_render_to_drawable_alpha(pixbuf,
(Drawable) ximg->pixmap[j], 0,
0, 0, 0, w, h,
GDK_PIXBUF_ALPHA_BILEVEL, 1,
@@ -653,9 +709,11 @@ x11_get_image_size(w3mimg_op * self, W3MImage * img, char *fname, int *w,
if (self == NULL)
return 0;
+#if defined(USE_IMLIB) && defined(USE_IMLIB2)
xi = (struct x11_info *)self->priv;
if (xi == NULL)
return 0;
+#endif
#if defined(USE_IMLIB)
im = Imlib_load_image(xi->id, fname);
@@ -755,6 +813,9 @@ w3mimg_x11open()
return NULL;
memset(wop, 0, sizeof(w3mimg_op));
+ if (getenv("W3M_USE_REMOTE_IMAGE"))
+ goto end;
+
xi = (struct x11_info *)malloc(sizeof(struct x11_info));
if (xi == NULL)
goto error;
@@ -807,6 +868,7 @@ w3mimg_x11open()
wop->priv = xi;
+ end:
wop->init = x11_init;
wop->finish = x11_finish;
wop->active = x11_active;
diff --git a/w3mimgdisplay.c b/w3mimgdisplay.c
index 5486a47..ccfa373 100644
--- a/w3mimgdisplay.c
+++ b/w3mimgdisplay.c
@@ -281,6 +281,10 @@ DrawImage(char *buf, int redraw)
maxImage = n + 1;
imageBuf = (W3MImage *) realloc((void *)imageBuf,
sizeof(W3MImage) * maxImage);
+ if (imageBuf == NULL) {
+ fprintf(stderr, "Out of memory\n");
+ exit(1);
+ }
for (; i < maxImage; i++)
imageBuf[i].pixmap = NULL;
}