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..a95580f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,882 @@ +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/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..60705f4 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`]) # # ---------------------------------------------------------------- @@ -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..1659250 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-2015 Free Software Foundation, Inc. -timestamp='2004-03-12' +timestamp='2015-08-20' # 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;hb=HEAD # -# 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-2015 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,44 @@ 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 ;; *: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 @@ -306,40 +304,46 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # 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 ;; + # 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 +351,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,10 +404,10 @@ 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 @@ -396,10 +419,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 +432,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 +490,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 +532,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 +562,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 +577,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,52 +633,52 @@ 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" ;; + 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 + 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` test -z "$HP_ARCH" && HP_ARCH=hppa @@ -657,9 +686,19 @@ EOF esac 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" else @@ -667,11 +706,11 @@ EOF fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; + exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} - exit 0 ;; + exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c @@ -699,340 +738,348 @@ 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_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 '[A-Z]' '[a-z]'``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 ;; 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 +1087,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 +1114,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 configury 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,68 +1201,109 @@ 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 ;; 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 @@ -1209,22 +1311,28 @@ EOF UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit 0 ;; + exit ;; *:QNX:*:4*) echo i386-pc-qnx - exit 0 ;; + exit ;; + 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 @@ -1235,183 +1343,55 @@ EOF UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 - exit 0 ;; + exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 - exit 0 ;; + exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex - exit 0 ;; + exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 - exit 0 ;; + exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 - exit 0 ;; + exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 - exit 0 ;; + exit ;; *:ITS:*:*) echo pdp10-unknown-its - exit 0 ;; + exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit 0 ;; + 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 ;; 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 +1399,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;hb=HEAD +and + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD 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..1acc966 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-2015 Free Software Foundation, Inc. -timestamp='2004-03-12' +timestamp='2015-08-20' -# 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;hb=HEAD + # 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. @@ -70,8 +68,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-2015 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 +80,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 +96,7 @@ while test $# -gt 0 ; do *local*) # First pass through any local machine types. echo $1 - exit 0;; + exit ;; * ) break ;; @@ -118,11 +115,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 +149,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 +170,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 +197,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 +218,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 +248,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 +371,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 +471,7 @@ case $basic_machine in basic_machine=a29k-amd os=-udi ;; - abacus) + abacus) basic_machine=abacus-unknown ;; adobe68k) @@ -409,6 +517,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 +532,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 +585,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 +628,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 +747,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 +785,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 +807,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 +835,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 +843,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 +930,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 +943,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 +966,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 +983,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 +1018,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 +1046,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 +1080,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 +1095,9 @@ case $basic_machine in basic_machine=sh-hitachi os=-hms ;; + sh5el) + basic_machine=sh5le-unknown + ;; sh64) basic_machine=sh64-unknown ;; @@ -901,6 +1119,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 +1178,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 +1242,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 +1260,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 +1283,9 @@ case $basic_machine in romp) basic_machine=romp-ibm ;; + mmix) + basic_machine=mmix-knuth + ;; rs6000) basic_machine=rs6000-ibm ;; @@ -1075,13 +1302,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 +1349,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 +1375,31 @@ 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* \ | -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* | -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,13 @@ case $os in -aros*) os=-aros ;; - -kaos*) - os=-kaos + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) ;; -none) ;; @@ -1316,6 +1553,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 +1568,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 +1604,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 +1629,15 @@ case $basic_machine in *-be) os=-beos ;; + *-haiku) + os=-haiku + ;; *-ibm) os=-aix ;; + *-knuth) + os=-mmixware + ;; *-wec) os=-proelf ;; @@ -1476,7 +1740,7 @@ case $basic_machine in -sunos*) vendor=sun ;; - -aix*) + -cnk*|-aix*) vendor=ibm ;; -beos*) @@ -1539,7 +1803,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..c721825 100755 --- a/configure +++ b/configure @@ -1490,7 +1490,7 @@ Optional Packages: --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;} @@ -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; } @@ -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/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-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..a8623e2 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ïżœïżœÎ»ïżœïżœïżœËĄïżœïżœïżœïżœïżœïżœÎČïżœïżœÌ€ïżœïżœïżœïżœÊ€ïżœïżœïżœ @@ -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.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..099a803 100644 --- a/doc-jp/w3m.1 +++ b/doc-jp/w3m.1 @@ -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 diff --git a/doc/FAQ.html b/doc/FAQ.html index ed2a704..4d82790 100644 --- a/doc/FAQ.html +++ b/doc/FAQ.html @@ -222,7 +222,7 @@ from the server each time it accesses it. If possible, use a cache server. <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 +<dd>Set the environment variables HTTP_PROXY, HTTPS_PROXY, GOPHER_PROXY and FTP_PROXY, or use the option setting panel ("o" key). For example, if you want to use port 8000 of proxy.hogege.com, specify <p> <pre> 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..8353f33 100644 --- a/doc/MANUAL.html +++ b/doc/MANUAL.html @@ -55,12 +55,10 @@ If you don't specify this option, <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>-O charset +<dd>Specify display/output charset. +<dt>-I charset +<dd>Specify document charset. <dt>-T type <dd>Specify document type. Without this option, document type is determined from extension of a file. If the determination @@ -90,7 +88,7 @@ It is useful when reading E-mail or NetNews messages. <dd>Monochrome display mode. <dt>-F <dd>Automatically render frame. -<dt>-S +<dt>-s <dd>Squeeze blank lines. <dt>-X <dd>Upon exit, do not display preserved screen. @@ -468,8 +466,7 @@ and <a href="keymap.lynx">keymap.lynx</a>) as examples. 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> +bookmark registration and helper-app editor are realized as local CGI scripts. Using local CGI, w3m can be used as a general purpose form interface. <P> 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..26de39d 100644 --- a/doc/README.func +++ b/doc/README.func @@ -1,5 +1,5 @@ ABORT Quit w3m without confirmation -ACCESSSKEY Popup acceskey menu +ACCESSKEY Popup accesskey menu ADD_BOOKMARK Add current page to bookmark ALARM Set alarm BACK Back to previous buffer 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/w3m.1 b/doc/w3m.1 index 8f071c6..0762f51 100644 --- a/doc/w3m.1 +++ b/doc/w3m.1 @@ -1,13 +1,11 @@ .nr N -1 .nr D 5 -.TH W3M 1 Local +.TH W3M 1 "2014-11-29" .UC 4 .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 +15,285 @@ 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 +This is the \fIw3m\fP 0.5.3 Release. +.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..9d1dc9a 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); @@ -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..f4194ee 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 @@ -972,6 +998,7 @@ 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 +1092,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 +1141,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 +1163,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 +1172,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/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/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..5e78b4e 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; } 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..202e9c4 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); @@ -359,6 +360,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 +378,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 +427,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..d4f6b21 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"); @@ -248,7 +256,11 @@ 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"); +#endif fprintf(f, " -W toggle wrap search mode\n"); fprintf(f, " -X don't use termcap init/deinit\n"); fprintf(f, @@ -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 @@ -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) @@ -2961,7 +3072,6 @@ handleMailto(char *url) /* follow HREF link */ DEFUN(followA, GOTO_LINK, "Go to 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") { @@ -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); @@ -4329,7 +4454,7 @@ anchorMn(Anchor *(*menu_func) (Buffer *), int go) } /* accesskey */ -DEFUN(accessKey, ACCESSKEY, "Popup acceskey menu") +DEFUN(accessKey, ACCESSKEY, "Popup accesskey menu") { anchorMn(accesskey_menu, TRUE); } @@ -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); @@ -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); @@ -5398,6 +5522,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) @@ -5604,7 +5782,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 +5849,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 +5925,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 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..11a5369 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) @@ -1365,9 +1408,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; } @@ -1513,9 +1554,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 +1884,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 +1950,7 @@ accesskey_menu(Buffer *buf) } label[nitem] = NULL; + set_menu_frame(); new_option_menu(&menu, label, &key, NULL); menu.initial = 0; @@ -2025,7 +2063,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/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..19a3d3a --- /dev/null +++ b/po/de.po @@ -0,0 +1,914 @@ +# 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: 2015-04-29 16:18+0900\n" +"PO-Revision-Date: 2015-04-29 09:45+0200\n" +"Last-Translator: Markus Hiereth <post@hiereth.de>\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:267 +msgid " Back (b) " +msgstr " ZurĂŒck (b) " + +#: menu.c:268 +msgid " Select Buffer(s) " +msgstr " Puffer auswĂ€hlen (s) " + +#: menu.c:270 +msgid " Select Tab (t) " +msgstr " Reiter auswĂ€hlen (t) " + +#: menu.c:272 +msgid " View Source (v) " +msgstr " Codeansicht (v) " + +#: menu.c:273 +msgid " Edit Source (e) " +msgstr " Code bearbeiten (e) " + +#: menu.c:274 +msgid " Save Source (S) " +msgstr " Code speichern (S) " + +#: menu.c:275 +msgid " Reload (r) " +msgstr " Erneut laden (r) " + +#: menu.c:276 menu.c:283 menu.c:287 +msgid " ---------------- " +msgstr " ---------------------- " + +#: menu.c:277 +msgid " Go Link (a) " +msgstr " Ziel öffnen.. (a) " + +#: menu.c:278 +msgid " on New Tab (n) " +msgstr " ..in neuem Reiter (n) " + +#: menu.c:279 +msgid " Save Link (A) " +msgstr " Ziel speichern (A) " + +#: menu.c:280 +msgid " View Image (i) " +msgstr " Bild anzeigen (i) " + +#: menu.c:281 +msgid " Save Image (I) " +msgstr " Bild speichern (I) " + +#: menu.c:282 +msgid " View Frame (f) " +msgstr " Frames zeigen (f) " + +#: menu.c:284 +msgid " Bookmark (B) " +msgstr " Lesezeichen (B) " + +#: menu.c:285 +msgid " Help (h) " +msgstr " Hilfe (h) " + +#: menu.c:286 +msgid " Option (o) " +msgstr " Einstellungen (o) " + +#: menu.c:288 +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 "Second External Browser" +msgstr "Zweiter externer Browser" + +#: rc.c:148 +msgid "Third External Browser" +msgstr "Dritter 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:149 +msgid "Disable secret file security check" +msgstr "Keine PrĂŒfung der Sicherheit bei Dateien mit geheimem Inhalt" + +#: rc.c:150 +msgid "Password file" +msgstr "Passwort-Datei" + +#: rc.c:151 +msgid "File for setting form on loading" +msgstr "Datei mit vordefinierten Eingaben fĂŒr Formulare" + +#: rc.c:152 +msgid "File for preferences for each site" +msgstr "Datei mit adress-spezifischen Voreinstellungen" + +#: rc.c:153 +msgid "Password for anonymous FTP (your mail address)" +msgstr "Passwort fĂŒr anonyme FTP-Anmeldung (Ihre Mailadresse)" + +#: rc.c:154 +msgid "Generate domain part of password for FTP" +msgstr "Domain-Teil des FTP-Passwortes erzeugen" + +#: rc.c:155 +msgid "User-Agent identification string" +msgstr "Browserkennung ĂŒbermitteln" + +#: rc.c:156 +msgid "Accept-Encoding header" +msgstr "Accept-Encoding-Kopfzeile" + +#: rc.c:157 +msgid "Accept header" +msgstr "Accept-Kopfzeile" + +#: rc.c:158 +msgid "Accept-Language header" +msgstr "Accept-Language-Kopfzeile" + +#: rc.c:159 +msgid "Treat URL-like strings as links in all pages" +msgstr "URL-artige Zeichenketten auf allen Seiten als Links auffassen" + +#: rc.c:160 +msgid "Wrap search" +msgstr "Im Dokument umlaufend suchen" + +#: rc.c:161 +msgid "Display unseen objects (e.g. bgimage tag)" +msgstr "Nicht gezeigte Objekte melden (z.B. Hintergrundbild)" + +#: rc.c:162 +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:164 +msgid "Run external viewer in a separate session" +msgstr "Externe Anzeigeprogramme in eigener Sitzung laufen lassen" + +#: rc.c:166 +msgid "Run external viewer in the background" +msgstr "Externe Anzeigeprogramme im Hintergrund laufen lassen" + +#: rc.c:168 +msgid "Use external program for directory listing" +msgstr "Externes Programm zum Auflisten von Verzeichnissen verwenden" + +#: rc.c:169 +msgid "URL of directory listing command" +msgstr "URL des Befehls zum Auflisten von Verzeichnissen" + +#: rc.c:171 +msgid "Enable dictionary lookup through CGI" +msgstr "Wörterbuchabfrage mittels CGI aktivieren" + +#: rc.c:172 +msgid "URL of dictionary lookup command" +msgstr "URL des Befehls zur Wörterbuch-Abfrage" + +#: rc.c:174 +msgid "Display link name for images lacking ALT" +msgstr "Bei Bildern ohne ALT-Angabe Linkziel anzeigen" + +#: rc.c:175 +msgid "Index file for directories" +msgstr "Indexdatei fĂŒr Verzeichnisse" + +#: rc.c:176 +msgid "Prepend http:// to URL automatically" +msgstr "Ziel-Eingaben gegebenenfalls http:// voranstellen" + +#: rc.c:177 +msgid "Default value for open-URL command" +msgstr "Vorgabewert bei der Adresseneingabe" + +#: rc.c:178 +msgid "Decode Content-Transfer-Encoding when saving" +msgstr "Beim Speichern entsprechend Content-Transfer-Encoding entschlĂŒsseln" + +#: rc.c:179 +msgid "Preserve timestamp when saving" +msgstr "Zeitstempel beim Speichern erhalten" + +#: rc.c:181 +msgid "Enable mouse" +msgstr "Maus aktivieren" + +#: rc.c:182 +msgid "Scroll in reverse direction of mouse drag" +msgstr "Mausbewegungen entgegengesetzt scrollen" + +#: rc.c:183 +msgid "Behavior of wheel scroll speed" +msgstr "Umsetzung der Mausradbewegung" + +#: rc.c:184 +msgid "(A only)Scroll by # (%) of screen" +msgstr "(nur A) Um # % des Fensters scrollen" + +#: rc.c:185 +msgid "(B only)Scroll by # lines" +msgstr "(nur B) Um # Zeilen scrollen" + +#: rc.c:187 +msgid "Free memory of undisplayed buffers" +msgstr "Speicherplatz nicht angezeigter Puffer freigeben" + +#: rc.c:188 +msgid "Suppress `Referer:' header" +msgstr "Referer-Kopfzeile unterdrĂŒcken" + +#: rc.c:189 +msgid "Search case-insensitively" +msgstr "GroĂ- und Kleinschreibung beim Suchen ignorieren" + +#: rc.c:190 +msgid "Use LESSOPEN" +msgstr "LESSOPEN verwenden" + +#: rc.c:193 +msgid "Perform SSL server verification" +msgstr "SSL-Server-Verifizierung durchfĂŒhren" + +#: rc.c:194 +msgid "PEM encoded certificate file of client" +msgstr "PEM-kodierte Zertifikatsdatei des Clients" + +#: rc.c:195 +msgid "PEM encoded private key file of client" +msgstr "PEM-kodierte private SchlĂŒsseldatei des Clients" + +#: rc.c:196 +msgid "Path to directory for PEM encoded certificates of CAs" +msgstr "Pfad zum Verzeichnis fĂŒr PEM-kodierte Zertifikate von CAs" + +#: rc.c:197 +msgid "File consisting of PEM encoded certificates of CAs" +msgstr "Datei mit PEM-kodierten Zertifikaten von CAs" + +#: rc.c:199 +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:202 +msgid "Enable cookie processing" +msgstr "Cookie-Verarbeitung aktivieren" + +#: rc.c:203 +msgid "Print a message when receiving a cookie" +msgstr "Den Empfang von Cookies melden" + +#: rc.c:204 +msgid "Accept cookies" +msgstr "Cookies akzeptieren" + +#: rc.c:205 +msgid "Action to be taken on invalid cookie" +msgstr "Reaktion auf ungĂŒltiges Cookie" + +#: rc.c:206 +msgid "Domains to reject cookies from" +msgstr "Domains, deren Cookies abzulehnen sind" + +#: rc.c:207 +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:208 +#, fuzzy +msgid "Domains to avoid [wrong number of dots]" +msgstr "Zu meidende Domains (falsche Anzahl von Punkten)" + +#: rc.c:210 +msgid "Number of redirections to follow" +msgstr "Anzahl zu akzeptierender Umleitungen" + +# Konfigurationsvariable vom Typ string, mh, 05.10.2014 +#: rc.c:211 +msgid "Enable processing of meta-refresh tag" +msgstr "Meta-Refresh-Element verarbeiten" + +#: rc.c:214 +msgid "Enable Migemo (Roma-ji search)" +msgstr "Romaji-Suche mittels Migemo aktivieren" + +#: rc.c:215 +msgid "Migemo command" +msgstr "Migemo-Befehl" + +#: rc.c:219 +msgid "Display charset" +msgstr "Zeichenkodierung der Anzeige" + +#: rc.c:220 +msgid "Default document charset" +msgstr "Zeichenkodierungs-Vorgabe fĂŒr Dokumente" + +#: rc.c:221 +msgid "Automatic charset detect when loading" +msgstr "SelbststĂ€ndige Erkennung der Zeichenkodierung beim Laden" + +#: rc.c:222 +msgid "System charset" +msgstr "Zeichenkodierung des Systems" + +#: rc.c:223 +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:224 +msgid "Output halfdump with display charset" +msgstr "Halfdump in der zur Anzeige benutzten Kodierung" + +# Konfigurationsvariable vom Typ boolean, mh, 05.10.2014 +#: rc.c:225 +#, fuzzy +msgid "Use multi column characters" +msgstr "SpaltenĂŒbergreifende Zeichen verwenden" + +#: rc.c:226 +msgid "Use combining characters" +msgstr "Kombinationszeichen verwenden" + +#: rc.c:227 +msgid "Use double width for some Unicode characters" +msgstr "Einzelnen Unicode-Zeichen zwei Spalten einrĂ€umen" + +#: rc.c:228 +msgid "Use Unicode language tags" +msgstr "Unicode-Sprach-Tags verwenden" + +#: rc.c:229 +msgid "Charset conversion using Unicode map" +msgstr "Zeichen in Unicode kodieren" + +#: rc.c:230 +msgid "Charset conversion when loading" +msgstr "Zeichenkodierung beim Laden anpassen" + +#: rc.c:231 +msgid "Adjust search string for document charset" +msgstr "Zu suchende Zeichenkette der Kodierung des Dokumentes anpassen" + +#: rc.c:232 +msgid "Fix character width when conversion" +msgstr "Bei Umwandlung an der Breite von Zeichen festhalten" + +#: rc.c:233 +msgid "Use GB 12345 Unicode map instead of GB 2312's" +msgstr "GB-12345-Unicode statt GB 2312 verwenden" + +#: rc.c:234 +msgid "Use JIS X 0201 Roman for ISO-2022-JP" +msgstr "JIS X 0201 Roman statt ISO-2022-JP verwenden" + +#: rc.c:235 +msgid "Use JIS C 6226:1978 for ISO-2022-JP" +msgstr "JIS C 6226:1978 statt ISO-2022-JP verwenden" + +#: rc.c:236 +msgid "Use JIS X 0201 Katakana" +msgstr "JIS X 0201 Katakana verwenden" + +#: rc.c:237 +msgid "Use JIS X 0212:1990 (Supplemental Kanji)" +msgstr "JIS X 0212:1990 verwenden (ergĂ€nzendes Kanji)" + +#: rc.c:238 +msgid "Use JIS X 0213:2000 (2000JIS)" +msgstr "JIS X 0213:2000 verwenden (2000JIS)" + +#: rc.c:239 +msgid "Strict ISO-2022-JP/KR/CN" +msgstr "Striktes ISO-2022-JP/KR/CN" + +#: rc.c:240 +msgid "Treat 4 bytes char. of GB18030 as Unicode" +msgstr "4-Byte-Zeichen von GB 18030 als Unicode auffassen" + +#: rc.c:241 +msgid "Simple Preserve space" +msgstr "Einfache Platzerhaltung" + +#: rc.c:244 +msgid "keymap file" +msgstr "Tastaturbelegungs-Datei" + +#: rc.c:261 +msgid "black" +msgstr "schwarz" + +#: rc.c:262 +msgid "red" +msgstr "rot" + +#: rc.c:263 +msgid "green" +msgstr "grĂŒn" + +#: rc.c:264 +msgid "yellow" +msgstr "gelb" + +#: rc.c:265 +msgid "blue" +msgstr "blau" + +#: rc.c:266 +msgid "magenta" +msgstr "magenta" + +#: rc.c:267 +msgid "cyan" +msgstr "cyan" + +#: rc.c:268 +msgid "white" +msgstr "weiĂ" + +#: rc.c:269 +msgid "terminal" +msgstr "wie Terminal" + +#: rc.c:288 +msgid "none" +msgstr "keiner" + +#: rc.c:289 +msgid "current URL" +msgstr "aktuelle URL" + +#: rc.c:290 +msgid "link URL" +msgstr "Link-URL" + +#: rc.c:295 +msgid "simple" +msgstr "einfach" + +#: rc.c:296 +msgid "use tag" +msgstr "durch Tags" + +#: rc.c:297 +msgid "fontify" +msgstr "hervorgehoben" + +#: rc.c:303 +msgid "A:relative to screen height" +msgstr "A: relativ zu Fensterhöhe" + +#: rc.c:304 +msgid "B:fixed speed" +msgstr "B: feste Geschwindigkeit" + +#: rc.c:311 +msgid "unspecified" +msgstr "nicht spezifiziert" + +#: rc.c:312 +msgid "inet inet6" +msgstr "inet inet6" + +#: rc.c:313 +msgid "inet6 inet" +msgstr "inet6 inet" + +#: rc.c:314 +msgid "inet only" +msgstr "nur inet" + +#: rc.c:315 +msgid "inet6 only" +msgstr "nur inet6" + +#: rc.c:322 +msgid "discard" +msgstr "verwerfen" + +#: rc.c:324 +msgid "accept" +msgstr "annehmen" + +#: rc.c:326 +msgid "ask" +msgstr "nachfragen" + +# gehört zu rc.c:142 +# erscheint in Pulldown-MenĂŒ, daher verkĂŒrzt. mh 09.10.2014 +#: rc.c:333 +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:335 +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:336 +msgid "use full mailto URL" +msgstr "komplett verwenden" + +#: rc.c:345 +msgid "OFF" +msgstr "AUS" + +#: rc.c:346 +msgid "Only ISO 2022" +msgstr "Nur ISO-2022" + +#: rc.c:347 +msgid "ON" +msgstr "AN" + +# Wert aus einem Set zur Wiedergabe von RĂ€ndern, mh, 05.10.2014 +#: rc.c:353 +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:354 +msgid "charset specific" +msgstr "zeichensatzspezifisch" + +# Wert aus einem Set zur Wiedergabe von RĂ€ndern, mh, 05.10.2014 +#: rc.c:355 +msgid "DEC special graphics" +msgstr "mit DEC-Grafiken" + +#: rc.c:722 +msgid "Display Settings" +msgstr "Einstellungen zur Anzeige" + +#: rc.c:724 +msgid "Color Settings" +msgstr "Farbeinstellungen" + +#: rc.c:726 +msgid "Miscellaneous Settings" +msgstr "Weitere Einstellungen" + +#: rc.c:727 +msgid "Directory Settings" +msgstr "Verzeichnis-Einstellungen" + +#: rc.c:728 +msgid "External Program Settings" +msgstr "Einstellungen fĂŒr externe Programme" + +#: rc.c:729 +msgid "Network Settings" +msgstr "Netzwerk-Einstellungen" + +#: rc.c:730 +msgid "Proxy Settings" +msgstr "Proxy-Einstellungen" + +#: rc.c:732 +msgid "SSL Settings" +msgstr "SSL-Einstellungen" + +#: rc.c:735 +msgid "Cookie Settings" +msgstr "Cookie-Einstellungen" + +#: rc.c:738 +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:1220 +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..ef079e4 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,11 +8,11 @@ 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: 2015-04-29 16:18+0900\n" +"PO-Revision-Date: 2015-04-29 16:38+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" @@ -90,783 +90,791 @@ msgstr "ăȘăă·ă§ăł (o)" 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 +#: rc.c:146 msgid "External Browser" msgstr "ć€éšăă©ăŠă¶" -#: rc.c:144 +#: rc.c:147 msgid "Second External Browser" msgstr "ć€éšăă©ăŠă¶ăăź2" -#: rc.c:145 +#: rc.c:148 msgid "Third External Browser" msgstr "ć€éšăă©ăŠă¶ăăź3" -#: rc.c:146 +#: rc.c:149 msgid "Disable secret file security check" msgstr "ăăčăŻăŒăăăĄă€ă«ăźăăŒăăă·ă§ăłăăă§ăăŻăăȘă" -#: rc.c:147 +#: rc.c:150 msgid "Password file" msgstr "ăăčăŻăŒăăăĄă€ă«" -#: rc.c:148 +#: rc.c:151 msgid "File for setting form on loading" msgstr "ææžèȘ蟌æăźăă©ăŒă èšćźçšăăĄă€ă«" -#: rc.c:149 +#: rc.c:152 +msgid "File for preferences for each site" +msgstr "ă”ă€ăć„èšćźăźăăĄă€ă«" + +#: rc.c:153 msgid "Password for anonymous FTP (your mail address)" msgstr "FTPăźăăčăŻăŒă(æźéăŻèȘćăźmail addressăäœżă)" -#: rc.c:150 +#: rc.c:154 msgid "Generate domain part of password for FTP" msgstr "FTPăźăăčăŻăŒăăźăăĄă€ăłćăèȘćçæăă" -#: rc.c:151 +#: rc.c:155 msgid "User-Agent identification string" msgstr "User-Agent" -#: rc.c:152 +#: rc.c:156 msgid "Accept-Encoding header" msgstr "ć§çžźæčæł(Accept-Encoding:)" -#: rc.c:153 +#: rc.c:157 msgid "Accept header" msgstr "ćăă€ăăăĄăăŁăąăżă€ă(Accept:)" -#: rc.c:154 +#: rc.c:158 msgid "Accept-Language header" msgstr "ćăă€ăăèšèȘ(Accept-Language:)" -#: rc.c:155 +#: rc.c:159 msgid "Treat URL-like strings as links in all pages" msgstr "ć šăŠăźăăŒăžăźURLéąšăźæććăăȘăłăŻă«ăă" -#: rc.c:156 +#: rc.c:160 msgid "Wrap search" msgstr "æăèżăæ€çŽą" -#: rc.c:157 +#: rc.c:161 msgid "Display unseen objects (e.g. bgimage tag)" msgstr "èæŻç»ćçăžăźăȘăłăŻăäœă" -#: rc.c:158 +#: rc.c:162 msgid "Uncompress compressed data automatically when downloading" msgstr "ăăŠăłăăŒăæă«èȘćçă«ć§çžźăăăăăŒăżăè§Łćăă" -#: rc.c:160 +#: rc.c:164 msgid "Run external viewer in a separate session" msgstr "ć€éšăă„ăŒăąăć„ă»ăă·ă§ăłă§ćăă" -#: rc.c:162 +#: rc.c:166 msgid "Run external viewer in the background" msgstr "ć€éšăă„ăŒăąăăăăŻă°ă©ăŠăłăă§ćăă" -#: rc.c:164 +#: rc.c:168 msgid "Use external program for directory listing" msgstr "ăăŁăŹăŻăăȘăȘăčăă«ć€éšăłăăłăăäœżă" -#: rc.c:165 +#: rc.c:169 msgid "URL of directory listing command" msgstr "ăăŁăŹăŻăăȘăȘăčăçšăłăăłă" -#: rc.c:167 +#: rc.c:171 msgid "Enable dictionary lookup through CGI" msgstr "èŸæžćŒăăCGIç”ç±ă§ăăăȘă" -#: rc.c:168 +#: rc.c:172 msgid "URL of dictionary lookup command" msgstr "èŸæžćŒăăłăăłăăźURL" -#: rc.c:170 +#: rc.c:174 msgid "Display link name for images lacking ALT" msgstr "ç©șăźIMG ALTć±æ§ăźæă«ăȘăłăŻćăèĄšç€șăă" -#: rc.c:171 +#: rc.c:175 msgid "Index file for directories" msgstr "ćăăŁăŹăŻăăȘăźă€ăłăăăŻăčăăĄă€ă«" -#: rc.c:172 +#: rc.c:176 msgid "Prepend http:// to URL automatically" msgstr "URLă«èȘćçă« http:// ăèŁă" -#: rc.c:173 +#: rc.c:177 msgid "Default value for open-URL command" msgstr "URLăéăæăźăăă©ă«ăæćć" -#: rc.c:174 +#: rc.c:178 msgid "Decode Content-Transfer-Encoding when saving" msgstr "äżćæă« Content-Transfer-Encoding ăăăłăŒăăă" -#: rc.c:175 +#: rc.c:179 msgid "Preserve timestamp when saving" msgstr "äżćæă«ăżă€ă ăčăżăłăăäżæăă" -#: rc.c:177 +#: rc.c:181 msgid "Enable mouse" msgstr "ăăŠăčăäœżă" -#: rc.c:178 +#: rc.c:182 msgid "Scroll in reverse direction of mouse drag" msgstr "ăăŠăčăźăă©ăă°ćäœăéă«ăă" -#: rc.c:179 +#: rc.c:183 msgid "Behavior of wheel scroll speed" msgstr "ăă€ăŒă«ă§ăźăčăŻăăŒă«éćșŠăźæ±ă" -#: rc.c:180 +#: rc.c:184 msgid "(A only)Scroll by # (%) of screen" msgstr "(Aăźăż)ç»éąăźäœ%ăčăŻăăŒă«ăăă" -#: rc.c:181 +#: rc.c:185 msgid "(B only)Scroll by # lines" msgstr "(Băźăż)ăčăŻăăŒă«ăăèĄæ°" -#: rc.c:183 +#: rc.c:187 msgid "Free memory of undisplayed buffers" msgstr "èĄšç€șăăăŠăăȘăăăăăĄăźăĄăąăȘăè§ŁæŸăă" -#: rc.c:184 +#: rc.c:188 msgid "Suppress `Referer:' header" msgstr "Referer: ăéăăȘăăăă«ăă" -#: rc.c:185 +#: rc.c:189 msgid "Search case-insensitively" msgstr "ă”ăŒăæă«ć€§æćć°æćăźćșć„ăăăȘă" -#: rc.c:186 +#: rc.c:190 msgid "Use LESSOPEN" msgstr "LESSOPENăäœżçš" -#: rc.c:189 +#: rc.c:193 msgid "Perform SSL server verification" msgstr "SSLăźă”ăŒăèȘ蚌ăèĄă" -#: rc.c:190 +#: rc.c:194 msgid "PEM encoded certificate file of client" msgstr "SSLăźăŻă©ă€ăąăłăçšPEMćœąćŒèšŒææžăăĄă€ă«" -#: rc.c:191 +#: rc.c:195 msgid "PEM encoded private key file of client" msgstr "SSLăźăŻă©ă€ăąăłăçšPEMćœąćŒç§ćŻé”ăăĄă€ă«" -#: rc.c:192 +#: rc.c:196 msgid "Path to directory for PEM encoded certificates of CAs" msgstr "SSLăźèȘ蚌ć±ăźPEMćœąćŒèšŒææžçŸ€ăźăăăăŁăŹăŻăăȘăžăźăăč" -#: rc.c:193 +#: rc.c:197 msgid "File consisting of PEM encoded certificates of CAs" msgstr "SSLăźèȘ蚌ć±ăźPEMćœąćŒèšŒææžçŸ€ăźăăĄă€ă«" -#: rc.c:195 +#: rc.c:199 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:202 msgid "Enable cookie processing" msgstr "ăŻăăăŒăäœżçšăă" -#: rc.c:199 +#: rc.c:203 msgid "Print a message when receiving a cookie" msgstr "ăŻăăăŒăćăä»ăăăšăă«ăĄăă»ăŒăžăèĄšç€șăă" -#: rc.c:200 +#: rc.c:204 msgid "Accept cookies" msgstr "ăŻăăăŒăćăä»ăă" -#: rc.c:201 +#: rc.c:205 msgid "Action to be taken on invalid cookie" msgstr "ćéĄăźăăăŻăăăŒă§ăćăä»ăă" -#: rc.c:202 +#: rc.c:206 msgid "Domains to reject cookies from" msgstr "ăŻăăăŒăćăä»ăăȘăăăĄă€ăł" -#: rc.c:203 +#: rc.c:207 msgid "Domains to accept cookies from" msgstr "ăŻăăăŒăćăä»ăăăăĄă€ăł" -#: rc.c:204 +#: rc.c:208 msgid "Domains to avoid [wrong number of dots]" msgstr "[wrong number of dots] ăçĄèŠăăăăĄă€ăł" -#: rc.c:206 +#: rc.c:210 msgid "Number of redirections to follow" msgstr "ćŸăăȘăă€ăŹăŻăăźćæ°" -#: rc.c:207 +#: rc.c:211 msgid "Enable processing of meta-refresh tag" msgstr "meta refresh ă«ćŻŸćżăă" -#: rc.c:210 +#: rc.c:214 msgid "Enable Migemo (Roma-ji search)" msgstr "Migemo(ăăŒăćæ€çŽą)ăäœżçšăă" -#: rc.c:211 +#: rc.c:215 msgid "Migemo command" msgstr "Migemoăłăăłă" -#: rc.c:215 +#: rc.c:219 msgid "Display charset" msgstr "èĄšç€șçšæćăłăŒă" -#: rc.c:216 +#: rc.c:220 msgid "Default document charset" msgstr "ææžăźæšæșăźæćăłăŒă" -#: rc.c:217 +#: rc.c:221 msgid "Automatic charset detect when loading" msgstr "ææžăźèȘăżèŸŒăżæă«æćăłăŒăăźèȘćć€ćźăèĄă" -#: rc.c:218 +#: rc.c:222 msgid "System charset" msgstr "ă·ăčăă ăźæćăłăŒă" -#: rc.c:219 +#: rc.c:223 msgid "System charset follows locale(LC_CTYPE)" msgstr "Locale(LC_CTYPE) ă«ćŸăŁăŠă·ăčăă ăźæćăłăŒăăèšćź" -#: rc.c:220 +#: rc.c:224 msgid "Output halfdump with display charset" msgstr "èĄšç€șçšæćăłăŒă㧠halfdump ăźćșćăèĄă" -#: rc.c:221 +#: rc.c:225 msgid "Use multi column characters" msgstr "è€æ°ă«ă©ă ăźæćăäœżă" -#: rc.c:222 +#: rc.c:226 msgid "Use combining characters" msgstr "ç”ćæćăäœżă" -#: rc.c:223 +#: rc.c:227 msgid "Use double width for some Unicode characters" msgstr "ăăçšźăźUnicodeæćăć šè§ă«ăă" -#: rc.c:224 +#: rc.c:228 msgid "Use Unicode language tags" msgstr "Unicode ăźèšèȘăżă°ăäœżă" -#: rc.c:225 +#: rc.c:229 msgid "Charset conversion using Unicode map" msgstr "Unicodeăä»ăăăłăŒăć€æ" -#: rc.c:226 +#: rc.c:230 msgid "Charset conversion when loading" msgstr "ææžăźèȘăżèŸŒăżæă«æćăłăŒăăć€æăă" -#: rc.c:227 +#: rc.c:231 msgid "Adjust search string for document charset" msgstr "æ€çŽąæććăææžăźæćăłăŒăă«ć€æăă" -#: rc.c:228 +#: rc.c:232 msgid "Fix character width when conversion" msgstr "æććč ăźć€ăăć€æăăăȘă" -#: rc.c:229 +#: rc.c:233 msgid "Use GB 12345 Unicode map instead of GB 2312's" msgstr "GB 12345 ăź Unicode ăăăă GB 2312 çšă«äœżă" -#: rc.c:230 +#: rc.c:234 msgid "Use JIS X 0201 Roman for ISO-2022-JP" msgstr "ISO-2022-JP 㧠JIS X 0201-Roman ăäœżă" -#: rc.c:231 +#: rc.c:235 msgid "Use JIS C 6226:1978 for ISO-2022-JP" msgstr "ISO-2022-JP 㧠JIS C 6226:1978(æ§JIS) ăäœżă" -#: rc.c:232 +#: rc.c:236 msgid "Use JIS X 0201 Katakana" msgstr "JIS X 0201-Katakana ăäœżă" -#: rc.c:233 +#: rc.c:237 msgid "Use JIS X 0212:1990 (Supplemental Kanji)" msgstr "JIS X 0212:1990(èŁć©æŒąć) ăäœżă" -#: rc.c:234 +#: rc.c:238 msgid "Use JIS X 0213:2000 (2000JIS)" msgstr "JIS X 0213:2000(2000JIS) ăäœżă" -#: rc.c:235 +#: rc.c:239 msgid "Strict ISO-2022-JP/KR/CN" msgstr "ćłæ ŒăȘ ISO-2022-JP/KR/CN ăäœżă" -#: rc.c:236 +#: rc.c:240 msgid "Treat 4 bytes char. of GB18030 as Unicode" msgstr "GB18030 ăź 4ăă€ăæćă Unicode ăšăăŠæ±ă" -#: rc.c:237 +#: rc.c:241 msgid "Simple Preserve space" msgstr "ćçŽăȘç©șçœăźäżć" -#: rc.c:240 +#: rc.c:244 msgid "keymap file" msgstr "keymapăăĄă€ă«" -#: rc.c:257 +#: rc.c:261 msgid "black" msgstr "é»" -#: rc.c:258 +#: rc.c:262 msgid "red" msgstr "蔀" -#: rc.c:259 +#: rc.c:263 msgid "green" msgstr "ç·" -#: rc.c:260 +#: rc.c:264 msgid "yellow" msgstr "é»" -#: rc.c:261 +#: rc.c:265 msgid "blue" msgstr "é" -#: rc.c:262 +#: rc.c:266 msgid "magenta" msgstr "玫" -#: rc.c:263 +#: rc.c:267 msgid "cyan" msgstr "ç©șèČ" -#: rc.c:264 +#: rc.c:268 msgid "white" msgstr "çœ" -#: rc.c:265 +#: rc.c:269 msgid "terminal" msgstr "ç«Żæ«" -#: rc.c:284 +#: rc.c:288 msgid "none" msgstr "çĄă" -#: rc.c:285 +#: rc.c:289 msgid "current URL" msgstr "çŸćšăźURL" -#: rc.c:286 +#: rc.c:290 msgid "link URL" msgstr "ăȘăłăŻć ăźURL" -#: rc.c:291 +#: rc.c:295 msgid "simple" msgstr "ă·ăłăă«" -#: rc.c:292 +#: rc.c:296 msgid "use tag" msgstr "ăżă°ă§èĄšç€ș" -#: rc.c:293 +#: rc.c:297 msgid "fontify" msgstr "æćèŁ éŁŸ" -#: rc.c:299 +#: rc.c:303 msgid "A:relative to screen height" msgstr "A:ç»éąă”ă€ășă«æŻäŸ" -#: rc.c:300 +#: rc.c:304 msgid "B:fixed speed" msgstr "B:äžćźăźèĄæ°" -#: rc.c:307 +#: rc.c:311 msgid "unspecified" msgstr "æćźăăȘă" -#: rc.c:308 +#: rc.c:312 msgid "inet inet6" msgstr "IPv4ćȘć " -#: rc.c:309 +#: rc.c:313 msgid "inet6 inet" msgstr "IPv6ćȘć " -#: rc.c:310 +#: rc.c:314 msgid "inet only" msgstr "IPv4ăźăż" -#: rc.c:311 +#: rc.c:315 msgid "inet6 only" msgstr "IPv6ăźăż" -#: rc.c:318 +#: rc.c:322 msgid "discard" msgstr "ç ŽæŁăă" -#: rc.c:320 +#: rc.c:324 msgid "accept" msgstr "ćăć „ăă" -#: rc.c:322 +#: rc.c:326 msgid "ask" msgstr "çąșèȘăă" -#: rc.c:329 +#: rc.c:333 msgid "use internal mailer instead" msgstr "ć éšăĄăŒă©ăäœżçš" -#: rc.c:331 +#: rc.c:335 msgid "ignore options and use only the address" msgstr "ăąăăŹăčăźăżäœżçš" -#: rc.c:332 +#: rc.c:336 msgid "use full mailto URL" msgstr "URL ć šäœăäœżçš" -#: rc.c:341 +#: rc.c:345 msgid "OFF" msgstr "çĄćč" -#: rc.c:342 +#: rc.c:346 msgid "Only ISO 2022" msgstr "ISO 2022 ăźăż" -#: rc.c:343 +#: rc.c:347 msgid "ON" msgstr "æćč" -#: rc.c:349 +#: rc.c:353 msgid "ASCII" msgstr "ASCII" -#: rc.c:350 +#: rc.c:354 msgid "charset specific" msgstr "æćăłăŒăäŸć" -#: rc.c:351 +#: rc.c:355 msgid "DEC special graphics" msgstr "DEC çčæźæć" -#: rc.c:714 +#: rc.c:722 msgid "Display Settings" msgstr "èĄšç€șéąäż" -#: rc.c:716 +#: rc.c:724 msgid "Color Settings" msgstr "èĄšç€șèČ" -#: rc.c:718 +#: rc.c:726 msgid "Miscellaneous Settings" msgstr "éć€ăȘèšćź" -#: rc.c:719 +#: rc.c:727 msgid "Directory Settings" msgstr "ăăŁăŹăŻăăȘèšćź" -#: rc.c:720 +#: rc.c:728 msgid "External Program Settings" msgstr "ć€éšăăă°ă©ă " -#: rc.c:721 +#: rc.c:729 msgid "Network Settings" msgstr "ăăăăŻăŒăŻăźèšćź" -#: rc.c:722 +#: rc.c:730 msgid "Proxy Settings" msgstr "ăăăă·ăźèšćź" -#: rc.c:724 +#: rc.c:732 msgid "SSL Settings" msgstr "SSLăźèšćź" -#: rc.c:727 +#: rc.c:735 msgid "Cookie Settings" msgstr "ăŻăăăŒăźèšćź" -#: rc.c:730 +#: rc.c:738 msgid "Charset Settings" msgstr "æćăłăŒăăźèšćź" @@ -875,6 +883,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:1220 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..b277bb9 100644 --- a/po/w3m.pot +++ b/po/w3m.pot @@ -1,5 +1,5 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Fumitoshi UKAI +# Copyright (C) YEAR THE w3m'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # @@ -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: 2015-04-29 16:18+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" @@ -89,783 +89,791 @@ msgstr "" 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 +#: rc.c:146 msgid "External Browser" msgstr "" -#: rc.c:144 +#: rc.c:147 msgid "Second External Browser" msgstr "" -#: rc.c:145 +#: rc.c:148 msgid "Third External Browser" msgstr "" -#: rc.c:146 +#: rc.c:149 msgid "Disable secret file security check" msgstr "" -#: rc.c:147 +#: rc.c:150 msgid "Password file" msgstr "" -#: rc.c:148 +#: rc.c:151 msgid "File for setting form on loading" msgstr "" -#: rc.c:149 +#: rc.c:152 +msgid "File for preferences for each site" +msgstr "" + +#: rc.c:153 msgid "Password for anonymous FTP (your mail address)" msgstr "" -#: rc.c:150 +#: rc.c:154 msgid "Generate domain part of password for FTP" msgstr "" -#: rc.c:151 +#: rc.c:155 msgid "User-Agent identification string" msgstr "" -#: rc.c:152 +#: rc.c:156 msgid "Accept-Encoding header" msgstr "" -#: rc.c:153 +#: rc.c:157 msgid "Accept header" msgstr "" -#: rc.c:154 +#: rc.c:158 msgid "Accept-Language header" msgstr "" -#: rc.c:155 +#: rc.c:159 msgid "Treat URL-like strings as links in all pages" msgstr "" -#: rc.c:156 +#: rc.c:160 msgid "Wrap search" msgstr "" -#: rc.c:157 +#: rc.c:161 msgid "Display unseen objects (e.g. bgimage tag)" msgstr "" -#: rc.c:158 +#: rc.c:162 msgid "Uncompress compressed data automatically when downloading" msgstr "" -#: rc.c:160 +#: rc.c:164 msgid "Run external viewer in a separate session" msgstr "" -#: rc.c:162 +#: rc.c:166 msgid "Run external viewer in the background" msgstr "" -#: rc.c:164 +#: rc.c:168 msgid "Use external program for directory listing" msgstr "" -#: rc.c:165 +#: rc.c:169 msgid "URL of directory listing command" msgstr "" -#: rc.c:167 +#: rc.c:171 msgid "Enable dictionary lookup through CGI" msgstr "" -#: rc.c:168 +#: rc.c:172 msgid "URL of dictionary lookup command" msgstr "" -#: rc.c:170 +#: rc.c:174 msgid "Display link name for images lacking ALT" msgstr "" -#: rc.c:171 +#: rc.c:175 msgid "Index file for directories" msgstr "" -#: rc.c:172 +#: rc.c:176 msgid "Prepend http:// to URL automatically" msgstr "" -#: rc.c:173 +#: rc.c:177 msgid "Default value for open-URL command" msgstr "" -#: rc.c:174 +#: rc.c:178 msgid "Decode Content-Transfer-Encoding when saving" msgstr "" -#: rc.c:175 +#: rc.c:179 msgid "Preserve timestamp when saving" msgstr "" -#: rc.c:177 +#: rc.c:181 msgid "Enable mouse" msgstr "" -#: rc.c:178 +#: rc.c:182 msgid "Scroll in reverse direction of mouse drag" msgstr "" -#: rc.c:179 +#: rc.c:183 msgid "Behavior of wheel scroll speed" msgstr "" -#: rc.c:180 +#: rc.c:184 msgid "(A only)Scroll by # (%) of screen" msgstr "" -#: rc.c:181 +#: rc.c:185 msgid "(B only)Scroll by # lines" msgstr "" -#: rc.c:183 +#: rc.c:187 msgid "Free memory of undisplayed buffers" msgstr "" -#: rc.c:184 +#: rc.c:188 msgid "Suppress `Referer:' header" msgstr "" -#: rc.c:185 +#: rc.c:189 msgid "Search case-insensitively" msgstr "" -#: rc.c:186 +#: rc.c:190 msgid "Use LESSOPEN" msgstr "" -#: rc.c:189 +#: rc.c:193 msgid "Perform SSL server verification" msgstr "" -#: rc.c:190 +#: rc.c:194 msgid "PEM encoded certificate file of client" msgstr "" -#: rc.c:191 +#: rc.c:195 msgid "PEM encoded private key file of client" msgstr "" -#: rc.c:192 +#: rc.c:196 msgid "Path to directory for PEM encoded certificates of CAs" msgstr "" -#: rc.c:193 +#: rc.c:197 msgid "File consisting of PEM encoded certificates of CAs" msgstr "" -#: rc.c:195 +#: rc.c:199 msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)" msgstr "" -#: rc.c:198 +#: rc.c:202 msgid "Enable cookie processing" msgstr "" -#: rc.c:199 +#: rc.c:203 msgid "Print a message when receiving a cookie" msgstr "" -#: rc.c:200 +#: rc.c:204 msgid "Accept cookies" msgstr "" -#: rc.c:201 +#: rc.c:205 msgid "Action to be taken on invalid cookie" msgstr "" -#: rc.c:202 +#: rc.c:206 msgid "Domains to reject cookies from" msgstr "" -#: rc.c:203 +#: rc.c:207 msgid "Domains to accept cookies from" msgstr "" -#: rc.c:204 +#: rc.c:208 msgid "Domains to avoid [wrong number of dots]" msgstr "" -#: rc.c:206 +#: rc.c:210 msgid "Number of redirections to follow" msgstr "" -#: rc.c:207 +#: rc.c:211 msgid "Enable processing of meta-refresh tag" msgstr "" -#: rc.c:210 +#: rc.c:214 msgid "Enable Migemo (Roma-ji search)" msgstr "" -#: rc.c:211 +#: rc.c:215 msgid "Migemo command" msgstr "" -#: rc.c:215 +#: rc.c:219 msgid "Display charset" msgstr "" -#: rc.c:216 +#: rc.c:220 msgid "Default document charset" msgstr "" -#: rc.c:217 +#: rc.c:221 msgid "Automatic charset detect when loading" msgstr "" -#: rc.c:218 +#: rc.c:222 msgid "System charset" msgstr "" -#: rc.c:219 +#: rc.c:223 msgid "System charset follows locale(LC_CTYPE)" msgstr "" -#: rc.c:220 +#: rc.c:224 msgid "Output halfdump with display charset" msgstr "" -#: rc.c:221 +#: rc.c:225 msgid "Use multi column characters" msgstr "" -#: rc.c:222 +#: rc.c:226 msgid "Use combining characters" msgstr "" -#: rc.c:223 +#: rc.c:227 msgid "Use double width for some Unicode characters" msgstr "" -#: rc.c:224 +#: rc.c:228 msgid "Use Unicode language tags" msgstr "" -#: rc.c:225 +#: rc.c:229 msgid "Charset conversion using Unicode map" msgstr "" -#: rc.c:226 +#: rc.c:230 msgid "Charset conversion when loading" msgstr "" -#: rc.c:227 +#: rc.c:231 msgid "Adjust search string for document charset" msgstr "" -#: rc.c:228 +#: rc.c:232 msgid "Fix character width when conversion" msgstr "" -#: rc.c:229 +#: rc.c:233 msgid "Use GB 12345 Unicode map instead of GB 2312's" msgstr "" -#: rc.c:230 +#: rc.c:234 msgid "Use JIS X 0201 Roman for ISO-2022-JP" msgstr "" -#: rc.c:231 +#: rc.c:235 msgid "Use JIS C 6226:1978 for ISO-2022-JP" msgstr "" -#: rc.c:232 +#: rc.c:236 msgid "Use JIS X 0201 Katakana" msgstr "" -#: rc.c:233 +#: rc.c:237 msgid "Use JIS X 0212:1990 (Supplemental Kanji)" msgstr "" -#: rc.c:234 +#: rc.c:238 msgid "Use JIS X 0213:2000 (2000JIS)" msgstr "" -#: rc.c:235 +#: rc.c:239 msgid "Strict ISO-2022-JP/KR/CN" msgstr "" -#: rc.c:236 +#: rc.c:240 msgid "Treat 4 bytes char. of GB18030 as Unicode" msgstr "" -#: rc.c:237 +#: rc.c:241 msgid "Simple Preserve space" msgstr "" -#: rc.c:240 +#: rc.c:244 msgid "keymap file" msgstr "" -#: rc.c:257 +#: rc.c:261 msgid "black" msgstr "" -#: rc.c:258 +#: rc.c:262 msgid "red" msgstr "" -#: rc.c:259 +#: rc.c:263 msgid "green" msgstr "" -#: rc.c:260 +#: rc.c:264 msgid "yellow" msgstr "" -#: rc.c:261 +#: rc.c:265 msgid "blue" msgstr "" -#: rc.c:262 +#: rc.c:266 msgid "magenta" msgstr "" -#: rc.c:263 +#: rc.c:267 msgid "cyan" msgstr "" -#: rc.c:264 +#: rc.c:268 msgid "white" msgstr "" -#: rc.c:265 +#: rc.c:269 msgid "terminal" msgstr "" -#: rc.c:284 +#: rc.c:288 msgid "none" msgstr "" -#: rc.c:285 +#: rc.c:289 msgid "current URL" msgstr "" -#: rc.c:286 +#: rc.c:290 msgid "link URL" msgstr "" -#: rc.c:291 +#: rc.c:295 msgid "simple" msgstr "" -#: rc.c:292 +#: rc.c:296 msgid "use tag" msgstr "" -#: rc.c:293 +#: rc.c:297 msgid "fontify" msgstr "" -#: rc.c:299 +#: rc.c:303 msgid "A:relative to screen height" msgstr "" -#: rc.c:300 +#: rc.c:304 msgid "B:fixed speed" msgstr "" -#: rc.c:307 +#: rc.c:311 msgid "unspecified" msgstr "" -#: rc.c:308 +#: rc.c:312 msgid "inet inet6" msgstr "" -#: rc.c:309 +#: rc.c:313 msgid "inet6 inet" msgstr "" -#: rc.c:310 +#: rc.c:314 msgid "inet only" msgstr "" -#: rc.c:311 +#: rc.c:315 msgid "inet6 only" msgstr "" -#: rc.c:318 +#: rc.c:322 msgid "discard" msgstr "" -#: rc.c:320 +#: rc.c:324 msgid "accept" msgstr "" -#: rc.c:322 +#: rc.c:326 msgid "ask" msgstr "" -#: rc.c:329 +#: rc.c:333 msgid "use internal mailer instead" msgstr "" -#: rc.c:331 +#: rc.c:335 msgid "ignore options and use only the address" msgstr "" -#: rc.c:332 +#: rc.c:336 msgid "use full mailto URL" msgstr "" -#: rc.c:341 +#: rc.c:345 msgid "OFF" msgstr "" -#: rc.c:342 +#: rc.c:346 msgid "Only ISO 2022" msgstr "" -#: rc.c:343 +#: rc.c:347 msgid "ON" msgstr "" -#: rc.c:349 +#: rc.c:353 msgid "ASCII" msgstr "" -#: rc.c:350 +#: rc.c:354 msgid "charset specific" msgstr "" -#: rc.c:351 +#: rc.c:355 msgid "DEC special graphics" msgstr "" -#: rc.c:714 +#: rc.c:722 msgid "Display Settings" msgstr "" -#: rc.c:716 +#: rc.c:724 msgid "Color Settings" msgstr "" -#: rc.c:718 +#: rc.c:726 msgid "Miscellaneous Settings" msgstr "" -#: rc.c:719 +#: rc.c:727 msgid "Directory Settings" msgstr "" -#: rc.c:720 +#: rc.c:728 msgid "External Program Settings" msgstr "" -#: rc.c:721 +#: rc.c:729 msgid "Network Settings" msgstr "" -#: rc.c:722 +#: rc.c:730 msgid "Proxy Settings" msgstr "" -#: rc.c:724 +#: rc.c:732 msgid "SSL Settings" msgstr "" -#: rc.c:727 +#: rc.c:735 msgid "Cookie Settings" msgstr "" -#: rc.c:730 +#: rc.c:738 msgid "Charset Settings" msgstr "" @@ -874,6 +882,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:1220 msgid "en;q=1.0" msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..a9215c0 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,892 @@ +# 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: 2015-04-29 16:18+0900\n" +"PO-Revision-Date: 2015-11-10 18:58-0500\n" +"Last-Translator: Mingye Wang (Arthur2e5) <arthur200126@gmail.com>\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:267 +msgid " Back (b) " +msgstr " ćé (b) " + +#: menu.c:268 +msgid " Select Buffer(s) " +msgstr " éæ©çŒćČćș " + +#: menu.c:270 +msgid " Select Tab (t) " +msgstr " éæ©æ çŸ (t) " + +#: menu.c:272 +msgid " View Source (v) " +msgstr " æ„çæșç (v) " + +#: menu.c:273 +msgid " Edit Source (e) " +msgstr " äżźæčæșç (e) " + +#: menu.c:274 +msgid " Save Source (S) " +msgstr " äżćæșç (S) " + +#: menu.c:275 +msgid " Reload (r) " +msgstr " éæ°èœœć „ (r) " + +#: menu.c:276 menu.c:283 menu.c:287 +msgid " ---------------- " +msgstr " ---------------- " + +#: menu.c:277 +msgid " Go Link (a) " +msgstr " èœŹć°éŸæ„ (a) " + +#: menu.c:278 +msgid " on New Tab (n) " +msgstr " ćšæ°æ çŸ (n) " + +#: menu.c:279 +msgid " Save Link (A) " +msgstr " äżćéŸæ„ (A) " + +#: menu.c:280 +msgid " View Image (i) " +msgstr " æ„çćŸç (i) " + +#: menu.c:281 +msgid " Save Image (I) " +msgstr " äżććŸç (I) " + +#: menu.c:282 +msgid " View Frame (f) " +msgstr " æ„çæĄæ¶ (f) " + +#: menu.c:284 +msgid " Bookmark (B) " +msgstr " äčŠçŸ (B) " + +#: menu.c:285 +msgid " Help (h) " +msgstr " ćžźć© (h) " + +#: menu.c:286 +msgid " Option (o) " +msgstr " ééĄč (o) " + +#: menu.c:288 +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 "Second External Browser" +msgstr "珏äșć€éšæ”è§ćš " + +#: rc.c:148 +msgid "Third External Browser" +msgstr "珏äžć€éšæ”è§ćš" + +#: rc.c:149 +msgid "Disable secret file security check" +msgstr "ć łéç§ćŻæ件ćźć šæŁæ„" + +#: rc.c:150 +msgid "Password file" +msgstr "ćŻç æ件" + +#: rc.c:151 +msgid "File for setting form on loading" +msgstr "èźŸçœźçȘćŁć 蜜æ¶çæ件" + +#: rc.c:152 +msgid "File for preferences for each site" +msgstr "ćäžȘç«çčçéŠééĄčæ件" + +#: rc.c:153 +msgid "Password for anonymous FTP (your mail address)" +msgstr "ćżćFTPćŻç ïŒæšçéźçź±ć°ćïŒ" + +#: rc.c:154 +msgid "Generate domain part of password for FTP" +msgstr "äžș FTP çæćŻç çćéšć" + +#: rc.c:155 +msgid "User-Agent identification string" +msgstr "User-Agent äžČ" + +#: rc.c:156 +msgid "Accept-Encoding header" +msgstr "æ„ćççŒç (Accept-Encoding) æ„怎" + +#: rc.c:157 +msgid "Accept header" +msgstr "æ„ć (Accept) æ„怎" + +#: rc.c:158 +msgid "Accept-Language header" +msgstr "æ„ćçèŻèš (Accept-Language) æ„怎" + +#: rc.c:159 +msgid "Treat URL-like strings as links in all pages" +msgstr "ć°ææ饔éąäžç±»äŒŒäș URL çć珊äžČćœćéŸæ„" + +#: rc.c:160 +msgid "Wrap search" +msgstr "ć èŁ æ玹ç»æ" + +#: rc.c:161 +msgid "Display unseen objects (e.g. bgimage tag)" +msgstr "æŸç€șçäžć°çćŻčè±Ą ïŒäŸćŠïŒbdimageæ çŸïŒ" + +#: rc.c:162 +msgid "Uncompress compressed data automatically when downloading" +msgstr "ćšäžèœœæ¶èȘćšè§Łćèą«ć猩çæ°æź" + +#: rc.c:164 +msgid "Run external viewer in a separate session" +msgstr "ćšćŠäžäžȘäŒèŻäžèżèĄć€éšæ„çćš" + +#: rc.c:166 +msgid "Run external viewer in the background" +msgstr "ćšćć°èżèĄć€éšæ„çćš" + +#: rc.c:168 +msgid "Use external program for directory listing" +msgstr "äœżçšć€éšçšćșććșçźćœ" + +#: rc.c:169 +msgid "URL of directory listing command" +msgstr "çźćœćèĄšćœä»€ççœć" + +#: rc.c:171 +msgid "Enable dictionary lookup through CGI" +msgstr "ćŻçšćșäș CGI çèŻć žæ„èŻą" + +#: rc.c:172 +msgid "URL of dictionary lookup command" +msgstr "ćć žæ„æŸćœä»€ççœć" + +#: rc.c:174 +msgid "Display link name for images lacking ALT" +msgstr "ćŻčçŒșć° ALT çćŸçæŸç€șéŸæ„ć称" + +#: rc.c:175 +msgid "Index file for directories" +msgstr "çźćœç玹ćŒæ件" + +#: rc.c:176 +msgid "Prepend http:// to URL automatically" +msgstr "èȘćšćš URL ćć ć „ http://" + +#: rc.c:177 +msgid "Default value for open-URL command" +msgstr "æćŒçœććœä»€çé»èź€ćŒ" + +#: rc.c:178 +msgid "Decode Content-Transfer-Encoding when saving" +msgstr "äżćæ¶ćŻčć ćźčäŒ èŸçŒç äżĄæŻ (Content-Transfer-Encoding) èżèĄè§Łç " + +#: rc.c:179 +msgid "Preserve timestamp when saving" +msgstr "ćšäżćæ¶äżçæ¶éŽæł" + +#: rc.c:181 +msgid "Enable mouse" +msgstr "ćŻçšéŒ æ " + +#: rc.c:182 +msgid "Scroll in reverse direction of mouse drag" +msgstr "ćéŒ æ æćšçćæčćæ»ćš" + +#: rc.c:183 +msgid "Behavior of wheel scroll speed" +msgstr "æ»èœźæ»ćšéćșŠèĄäžș" + +#: rc.c:184 +msgid "(A only)Scroll by # (%) of screen" +msgstr "(ä» A) æŻæŹĄæ»ćš # (%) çć±ćčé«ćșŠ" + +#: rc.c:185 +msgid "(B only)Scroll by # lines" +msgstr "(ä» B) æŻæŹĄæ»ćš # èĄ" + +#: rc.c:187 +msgid "Free memory of undisplayed buffers" +msgstr "éæŸæȘæŸç€șçŒćçććš" + +#: rc.c:188 +msgid "Suppress `Referer:' header" +msgstr "çŠæą 'Referer:' æ件怎" + +#: rc.c:189 +msgid "Search case-insensitively" +msgstr "æ玹äžćșć性ć°ć" + +#: rc.c:190 +msgid "Use LESSOPEN" +msgstr "äœżçš LESSOPEN" + +#: rc.c:193 +msgid "Perform SSL server verification" +msgstr "èżèĄ SSL æćĄćšæŁæ„" + +#: rc.c:194 +msgid "PEM encoded certificate file of client" +msgstr "ćźąæ·ç«Żç PEM çŒç èŻäčŠæ件" + +#: rc.c:195 +msgid "PEM encoded private key file of client" +msgstr "ćźąæ·ç«Żç PEM çŒç ç§é„æ件" + +#: rc.c:196 +msgid "Path to directory for PEM encoded certificates of CAs" +msgstr "PEM çŒç CA èŻäčŠçźćœçè·ŻćŸ" + +#: rc.c:197 +msgid "File consisting of PEM encoded certificates of CAs" +msgstr "ć ć« PEM çŒç CA èŻäčŠçæ件" + +#: rc.c:199 +msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)" +msgstr "èą«çŠæąç SSL æčćŒćèĄš (2: SSLv2, 3: SSLv3, t:TLSv1)" + +#: rc.c:202 +msgid "Enable cookie processing" +msgstr "ćŒćŻ Cookie ć€ç" + +#: rc.c:203 +msgid "Print a message when receiving a cookie" +msgstr "ćšæ„æ¶äžäžȘ Cookie æ¶æŸç€șäžäžȘæ¶æŻ" + +#: rc.c:204 +msgid "Accept cookies" +msgstr "æ„ć Cookies" + +#: rc.c:205 +msgid "Action to be taken on invalid cookie" +msgstr "ćŻčæ æ Cookies èżèĄçæäœ" + +#: rc.c:206 +msgid "Domains to reject cookies from" +msgstr "æç»ćŠäžćç Cookies" + +#: rc.c:207 +msgid "Domains to accept cookies from" +msgstr "æ„ććŠäžćç Cookies" + +#: rc.c:208 +msgid "Domains to avoid [wrong number of dots]" +msgstr "éżć èźżéźçć [éèŻŻççčæ°]" + +#: rc.c:210 +msgid "Number of redirections to follow" +msgstr "è·éçéćźćæ°é" + +#: rc.c:211 +msgid "Enable processing of meta-refresh tag" +msgstr "ćŒćŻ meta-refresh æ çŸć€ç" + +#: rc.c:214 +msgid "Enable Migemo (Roma-ji search)" +msgstr "ćŒćŻ Migemo (çœé©Źćæ玹)" + +#: rc.c:215 +msgid "Migemo command" +msgstr "Migemo ćœä»€" + +#: rc.c:219 +msgid "Display charset" +msgstr "æŸç€șć珊é" + +#: rc.c:220 +msgid "Default document charset" +msgstr "é»èź€ææĄŁć珊é" + +#: rc.c:221 +msgid "Automatic charset detect when loading" +msgstr "ćšèœœć „æ¶èżèĄèȘćšć珊éæąæ”" + +#: rc.c:222 +msgid "System charset" +msgstr "çł»ç»ć珊é" + +#: rc.c:223 +msgid "System charset follows locale(LC_CTYPE)" +msgstr "æ čæźçł»ç»èźŸçœź (LC_CTYPE) éćźçł»ç»ć珊é" + +#: rc.c:224 +msgid "Output halfdump with display charset" +msgstr "äœżçšæŸç€șć珊éèŸćș halfdump" + +#: rc.c:225 +msgid "Use multi column characters" +msgstr "äœżçšć€ćć珊" + +#: rc.c:226 +msgid "Use combining characters" +msgstr "äœżçšććč¶ć珊" + +#: rc.c:227 +msgid "Use double width for some Unicode characters" +msgstr "äœż Unicode ćçŹŠäœżçšćéćźœćșŠ" + +#: rc.c:228 +msgid "Use Unicode language tags" +msgstr "äœżçš Unicode èŻèšæ çŸ" + +#: rc.c:229 +msgid "Charset conversion using Unicode map" +msgstr "äœżçš Unicode æ ć°èżèĄć珊éèœŹæą" + +#: rc.c:230 +msgid "Charset conversion when loading" +msgstr "ćšèœœć „æ¶èżèĄć珊éèœŹæą" + +#: rc.c:231 +msgid "Adjust search string for document charset" +msgstr "è°æŽææĄŁć珊éçæ玹ćäžČ" + +#: rc.c:232 +msgid "Fix character width when conversion" +msgstr "ćšèœŹæąæ¶ćșćźćçŹŠćźœćșŠ" + +#: rc.c:233 +msgid "Use GB 12345 Unicode map instead of GB 2312's" +msgstr "äœżçš GB 12345 Unicode æ ć°èé GB 2312" + +#: rc.c:234 +msgid "Use JIS X 0201 Roman for ISO-2022-JP" +msgstr "äœżçš JIS X 0201 çœé©ŹćæŻäș ISO-2022-JP" + +#: rc.c:235 +msgid "Use JIS C 6226:1978 for ISO-2022-JP" +msgstr "äœżçš JIS C 6226:1978 äș ISO-2022-JP" + +#: rc.c:236 +msgid "Use JIS X 0201 Katakana" +msgstr "äœżçš JIS X 0201 çćć" + +#: rc.c:237 +msgid "Use JIS X 0212:1990 (Supplemental Kanji)" +msgstr "äœżçš JIS X 0212:1990 (èĄ„ć æ±ć)" + +#: rc.c:238 +msgid "Use JIS X 0213:2000 (2000JIS)" +msgstr "äœżçš JIS X 0213:2000 (2000JIS)" + +#: rc.c:239 +msgid "Strict ISO-2022-JP/KR/CN" +msgstr "äž„æ Œ ISO-2022-JP/KR/CN" + +#: rc.c:240 +msgid "Treat 4 bytes char. of GB18030 as Unicode" +msgstr "è§ GB18030 çŒç ç 4 ćèć珊äžș Unicode" + +#: rc.c:241 +msgid "Simple Preserve space" +msgstr "çźćçäżçç©șéŽ" + +#: rc.c:244 +msgid "keymap file" +msgstr "éźçæ ć°æ件" + +#: rc.c:261 +msgid "black" +msgstr "é»èČ" + +#: rc.c:262 +msgid "red" +msgstr "çșąèČ" + +#: rc.c:263 +msgid "green" +msgstr "绿èČ" + +#: rc.c:264 +msgid "yellow" +msgstr "é»èČ" + +#: rc.c:265 +msgid "blue" +msgstr "èèČ" + +#: rc.c:266 +msgid "magenta" +msgstr "ćçșą" + +#: rc.c:267 +msgid "cyan" +msgstr "éèČ" + +#: rc.c:268 +msgid "white" +msgstr "çœèČ" + +#: rc.c:269 +msgid "terminal" +msgstr "ç»ç«Ż" + +#: rc.c:288 +msgid "none" +msgstr "æ " + +#: rc.c:289 +msgid "current URL" +msgstr "ćœć URL" + +#: rc.c:290 +msgid "link URL" +msgstr "éŸæ„ URL" + +#: rc.c:295 +msgid "simple" +msgstr "çźć" + +#: rc.c:296 +msgid "use tag" +msgstr "äœżçšæ çŸ" + +#: rc.c:297 +msgid "fontify" +msgstr "" + +#: rc.c:303 +msgid "A:relative to screen height" +msgstr "A:çžćŻčäșć±ćčé«ćșŠ" + +#: rc.c:304 +msgid "B:fixed speed" +msgstr "B:ćșćźéćșŠ" + +#: rc.c:311 +msgid "unspecified" +msgstr "æȘæćź" + +#: rc.c:312 +msgid "inet inet6" +msgstr "" + +#: rc.c:313 +msgid "inet6 inet" +msgstr "" + +#: rc.c:314 +msgid "inet only" +msgstr "ä» inet" + +#: rc.c:315 +msgid "inet6 only" +msgstr "ä» inet6" + +#: rc.c:322 +msgid "discard" +msgstr "äžąćŒ" + +#: rc.c:324 +msgid "accept" +msgstr "æ„ć" + +#: rc.c:326 +msgid "ask" +msgstr "èŻąéź" + +#: rc.c:333 +msgid "use internal mailer instead" +msgstr "äœżçšć ć»șéźä»¶ćéćš" + +#: rc.c:335 +msgid "ignore options and use only the address" +msgstr "ćżœç„ééĄčèćȘäœżçšć°ć" + +#: rc.c:336 +msgid "use full mailto URL" +msgstr "äœżçšæŽäžȘ mailto URL" + +#: rc.c:345 +msgid "OFF" +msgstr "ć ł" + +#: rc.c:346 +msgid "Only ISO 2022" +msgstr "ä» ISO 2022" + +#: rc.c:347 +msgid "ON" +msgstr "ćŒ" + +#: rc.c:353 +msgid "ASCII" +msgstr "ASCII" + +#: rc.c:354 +msgid "charset specific" +msgstr "ć珊éçčćź" + +#: rc.c:355 +msgid "DEC special graphics" +msgstr "DEC çčæźćŸć" + +#: rc.c:722 +msgid "Display Settings" +msgstr "æŸç€șèźŸçœź" + +#: rc.c:724 +msgid "Color Settings" +msgstr "éąèČèźŸçœź" + +#: rc.c:726 +msgid "Miscellaneous Settings" +msgstr "æéĄčèźŸçœź" + +#: rc.c:727 +msgid "Directory Settings" +msgstr "çźćœèźŸçœź" + +#: rc.c:728 +msgid "External Program Settings" +msgstr "ć€éšçšćșèźŸçœź" + +#: rc.c:729 +msgid "Network Settings" +msgstr "çœç»èźŸçœź" + +#: rc.c:730 +msgid "Proxy Settings" +msgstr "代çèźŸçœź" + +#: rc.c:732 +msgid "SSL Settings" +msgstr "SSL èźŸçœź" + +#: rc.c:735 +msgid "Cookie Settings" +msgstr "Cookie èźŸçœź" + +#: rc.c:738 +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:1220 +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..40cae87 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,892 @@ +# 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: 2015-04-29 16:18+0900\n" +"PO-Revision-Date: 2015-11-10 18:58-0500\n" +"Last-Translator: Mingye Wang (Arthur2e5) <arthur200126@gmail.com>\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:267 +msgid " Back (b) " +msgstr " ćŸé (b) " + +#: menu.c:268 +msgid " Select Buffer(s) " +msgstr " éžæç·©èĄć " + +#: menu.c:270 +msgid " Select Tab (t) " +msgstr " éžææšç±€ (t) " + +#: menu.c:272 +msgid " View Source (v) " +msgstr " æȘąèŠæșçąŒ (v) " + +#: menu.c:273 +msgid " Edit Source (e) " +msgstr " äżźæčæșçąŒ (e) " + +#: menu.c:274 +msgid " Save Source (S) " +msgstr " ćČćæșçąŒ (S) " + +#: menu.c:275 +msgid " Reload (r) " +msgstr " éæ°èŒć „ (r) " + +#: menu.c:276 menu.c:283 menu.c:287 +msgid " ---------------- " +msgstr " ---------------- " + +#: menu.c:277 +msgid " Go Link (a) " +msgstr " èœć°éŁç” (a) " + +#: menu.c:278 +msgid " on New Tab (n) " +msgstr " ćšæ°æšç±€ (n) " + +#: menu.c:279 +msgid " Save Link (A) " +msgstr " ćČćéŁç” (A) " + +#: menu.c:280 +msgid " View Image (i) " +msgstr " æȘąèŠćç (i) " + +#: menu.c:281 +msgid " Save Image (I) " +msgstr " ćČććç (I) " + +#: menu.c:282 +msgid " View Frame (f) " +msgstr " æȘąèŠæĄæ¶ (f) " + +#: menu.c:284 +msgid " Bookmark (B) " +msgstr " æžç±€ (B) " + +#: menu.c:285 +msgid " Help (h) " +msgstr " ćč«ć© (h) " + +#: menu.c:286 +msgid " Option (o) " +msgstr " éžé (o) " + +#: menu.c:288 +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 "Second External Browser" +msgstr "珏äșć€éšçèŠœćš " + +#: rc.c:148 +msgid "Third External Browser" +msgstr "珏äžć€éšç芜ćš" + +#: rc.c:149 +msgid "Disable secret file security check" +msgstr "ééç„ćŻæȘæĄćźć šæȘąæ„" + +#: rc.c:150 +msgid "Password file" +msgstr "ćŻçąŒæȘæĄ" + +#: rc.c:151 +msgid "File for setting form on loading" +msgstr "èšćźèŠçȘèŒć „æçæȘæĄ" + +#: rc.c:152 +msgid "File for preferences for each site" +msgstr "ććç«é»çéŠéžé æȘæĄ" + +#: rc.c:153 +msgid "Password for anonymous FTP (your mail address)" +msgstr "ćżćFTPćŻçąŒïŒæšçé”çź±ć°ćïŒ" + +#: rc.c:154 +msgid "Generate domain part of password for FTP" +msgstr "çș FTP çæćŻçąŒçćéšć" + +#: rc.c:155 +msgid "User-Agent identification string" +msgstr "User-Agent äžČ" + +#: rc.c:156 +msgid "Accept-Encoding header" +msgstr "æ„ćçç·šçąŒ (Accept-Encoding) ć ±é " + +#: rc.c:157 +msgid "Accept header" +msgstr "æ„ć (Accept) ć ±é " + +#: rc.c:158 +msgid "Accept-Language header" +msgstr "æ„ćçèȘèš (Accept-Language) ć ±é " + +#: rc.c:159 +msgid "Treat URL-like strings as links in all pages" +msgstr "ć°ææé éąäžéĄäŒŒæŒ URL çćć äžČç¶ćéŁç”" + +#: rc.c:160 +msgid "Wrap search" +msgstr "ć èŁæć°ç”æ" + +#: rc.c:161 +msgid "Display unseen objects (e.g. bgimage tag)" +msgstr "饯ç€șçäžć°çç©ä»¶ ïŒäŸćŠïŒbdimageæšç±€ïŒ" + +#: rc.c:162 +msgid "Uncompress compressed data automatically when downloading" +msgstr "ćšäžèŒæèȘćè§ŁćŁèą«ćŁçžźçèłæ" + +#: rc.c:164 +msgid "Run external viewer in a separate session" +msgstr "ćšćŠäžćæ話äžć·èĄć€éšæȘąèŠćš" + +#: rc.c:166 +msgid "Run external viewer in the background" +msgstr "ćšćŸèșć·èĄć€éšæȘąèŠćš" + +#: rc.c:168 +msgid "Use external program for directory listing" +msgstr "äœżçšć€éšçšćŒććșçźé" + +#: rc.c:169 +msgid "URL of directory listing command" +msgstr "çźéćèĄšćœä»€çç¶Čć" + +#: rc.c:171 +msgid "Enable dictionary lookup through CGI" +msgstr "ćçšćșæŒ CGI çè©ć žæ„è©ą" + +#: rc.c:172 +msgid "URL of dictionary lookup command" +msgstr "ćć žæ„è©ąćœä»€çç¶Čć" + +#: rc.c:174 +msgid "Display link name for images lacking ALT" +msgstr "ć°çŒșć° ALT çćç饯ç€șéŁç”ćçš±" + +#: rc.c:175 +msgid "Index file for directories" +msgstr "çźéç玹ćŒæȘæĄ" + +#: rc.c:176 +msgid "Prepend http:// to URL automatically" +msgstr "èȘććš URL ćć ć „ http://" + +#: rc.c:177 +msgid "Default value for open-URL command" +msgstr "éćç¶Čććœä»€çé èšćŒ" + +#: rc.c:178 +msgid "Decode Content-Transfer-Encoding when saving" +msgstr "ćČćæć°ć §ćźčćłèŒžç·šçąŒèłèš (Content-Transfer-Encoding) éČèĄè§ŁçąŒ" + +#: rc.c:179 +msgid "Preserve timestamp when saving" +msgstr "ćšćČćæäżçæéæł" + +#: rc.c:181 +msgid "Enable mouse" +msgstr "ćçšæ»éŒ " + +#: rc.c:182 +msgid "Scroll in reverse direction of mouse drag" +msgstr "ćæ»éŒ æćçćæčć滟ć" + +#: rc.c:183 +msgid "Behavior of wheel scroll speed" +msgstr "滟èŒȘ滟ćéćșŠèĄçș" + +#: rc.c:184 +msgid "(A only)Scroll by # (%) of screen" +msgstr "(ć A) æŻæŹĄæ»Ÿć # (%) çèąćčé«ćșŠ" + +#: rc.c:185 +msgid "(B only)Scroll by # lines" +msgstr "(ć B) æŻæŹĄæ»Ÿć # èĄ" + +#: rc.c:187 +msgid "Free memory of undisplayed buffers" +msgstr "éæŸæȘ饯ç€șćż«ćçćČć" + +#: rc.c:188 +msgid "Suppress `Referer:' header" +msgstr "çŠæą 'Referer:' æȘæĄé " + +#: rc.c:189 +msgid "Search case-insensitively" +msgstr "æć°äžćć性ć°ćŻ«" + +#: rc.c:190 +msgid "Use LESSOPEN" +msgstr "äœżçš LESSOPEN" + +#: rc.c:193 +msgid "Perform SSL server verification" +msgstr "éČèĄ SSL äŒșæćšæȘąæ„" + +#: rc.c:194 +msgid "PEM encoded certificate file of client" +msgstr "ćźąæ¶ç«Żç PEM ç·šçąŒèæžæȘæĄ" + +#: rc.c:195 +msgid "PEM encoded private key file of client" +msgstr "ćźąæ¶ç«Żç PEM ç·šçąŒç§é°æȘæĄ" + +#: rc.c:196 +msgid "Path to directory for PEM encoded certificates of CAs" +msgstr "PEM ç·šçąŒ CA èæžçźéçè·ŻćŸ" + +#: rc.c:197 +msgid "File consisting of PEM encoded certificates of CAs" +msgstr "ć ć« PEM ç·šçąŒ CA èæžçæȘæĄ" + +#: rc.c:199 +msgid "List of forbidden SSL methods (2: SSLv2, 3: SSLv3, t:TLSv1)" +msgstr "èą«çŠæąç SSL æčćŒćèĄš (2: SSLv2, 3: SSLv3, t:TLSv1)" + +#: rc.c:202 +msgid "Enable cookie processing" +msgstr "éć Cookie èç" + +#: rc.c:203 +msgid "Print a message when receiving a cookie" +msgstr "ćšæ„æ¶äžć Cookie æ饯ç€șäžćèšæŻ" + +#: rc.c:204 +msgid "Accept cookies" +msgstr "æ„ć Cookies" + +#: rc.c:205 +msgid "Action to be taken on invalid cookie" +msgstr "ć°çĄæ Cookies éČèĄçæäœ" + +#: rc.c:206 +msgid "Domains to reject cookies from" +msgstr "æç”ćŠäžćç Cookies" + +#: rc.c:207 +msgid "Domains to accept cookies from" +msgstr "æ„ććŠäžćç Cookies" + +#: rc.c:208 +msgid "Domains to avoid [wrong number of dots]" +msgstr "éżć èšȘćçć [éŻèȘ€çé»æž]" + +#: rc.c:210 +msgid "Number of redirections to follow" +msgstr "è·éšçéćźćæžé" + +#: rc.c:211 +msgid "Enable processing of meta-refresh tag" +msgstr "éć meta-refresh æšç±€èç" + +#: rc.c:214 +msgid "Enable Migemo (Roma-ji search)" +msgstr "éć Migemo (çŸ éŠŹćæć°)" + +#: rc.c:215 +msgid "Migemo command" +msgstr "Migemo ćœä»€" + +#: rc.c:219 +msgid "Display charset" +msgstr "饯ç€șć珊é" + +#: rc.c:220 +msgid "Default document charset" +msgstr "é èšæ件ć珊é" + +#: rc.c:221 +msgid "Automatic charset detect when loading" +msgstr "ćšèŒć „æéČèĄèȘćć珊éæąæžŹ" + +#: rc.c:222 +msgid "System charset" +msgstr "系由ć珊é" + +#: rc.c:223 +msgid "System charset follows locale(LC_CTYPE)" +msgstr "æ čæ系由èšćź (LC_CTYPE) éžćźçł»ç”±ć珊é" + +#: rc.c:224 +msgid "Output halfdump with display charset" +msgstr "äœżçšéĄŻç€șć珊é茞ćș halfdump" + +#: rc.c:225 +msgid "Use multi column characters" +msgstr "äœżçšć€ććć " + +#: rc.c:226 +msgid "Use combining characters" +msgstr "äœżçšć䜔ćć " + +#: rc.c:227 +msgid "Use double width for some Unicode characters" +msgstr "äœż Unicode ćć äœżçšéé每ćșŠ" + +#: rc.c:228 +msgid "Use Unicode language tags" +msgstr "äœżçš Unicode èȘèšæšç±€" + +#: rc.c:229 +msgid "Charset conversion using Unicode map" +msgstr "äœżçš Unicode ć°æ éČèĄć珊éèœæ" + +#: rc.c:230 +msgid "Charset conversion when loading" +msgstr "ćšèŒć „æéČèĄć珊éèœæ" + +#: rc.c:231 +msgid "Adjust search string for document charset" +msgstr "èȘżæŽæ件ć珊éçæć°ćäžČ" + +#: rc.c:232 +msgid "Fix character width when conversion" +msgstr "ćšèœææćșćźćć 每ćșŠ" + +#: rc.c:233 +msgid "Use GB 12345 Unicode map instead of GB 2312's" +msgstr "äœżçš GB 12345 Unicode ć°æ èé GB 2312" + +#: rc.c:234 +msgid "Use JIS X 0201 Roman for ISO-2022-JP" +msgstr "äœżçš JIS X 0201 çŸ éŠŹćæŻæŒ ISO-2022-JP" + +#: rc.c:235 +msgid "Use JIS C 6226:1978 for ISO-2022-JP" +msgstr "äœżçš JIS C 6226:1978 æŒ ISO-2022-JP" + +#: rc.c:236 +msgid "Use JIS X 0201 Katakana" +msgstr "äœżçš JIS X 0201 çćć" + +#: rc.c:237 +msgid "Use JIS X 0212:1990 (Supplemental Kanji)" +msgstr "äœżçš JIS X 0212:1990 (èŁć æŒąć)" + +#: rc.c:238 +msgid "Use JIS X 0213:2000 (2000JIS)" +msgstr "äœżçš JIS X 0213:2000 (2000JIS)" + +#: rc.c:239 +msgid "Strict ISO-2022-JP/KR/CN" +msgstr "ćŽæ Œ ISO-2022-JP/KR/CN" + +#: rc.c:240 +msgid "Treat 4 bytes char. of GB18030 as Unicode" +msgstr "èŠ GB18030 ç·šçąŒç 4 äœć ç”ćć çș Unicode" + +#: rc.c:241 +msgid "Simple Preserve space" +msgstr "ç°Ąćźçäżçç©șé" + +#: rc.c:244 +msgid "keymap file" +msgstr "é”ç€ć°æ æȘæĄ" + +#: rc.c:261 +msgid "black" +msgstr "é»èČ" + +#: rc.c:262 +msgid "red" +msgstr "çŽ èČ" + +#: rc.c:263 +msgid "green" +msgstr "ç¶ èČ" + +#: rc.c:264 +msgid "yellow" +msgstr "é»èČ" + +#: rc.c:265 +msgid "blue" +msgstr "èèČ" + +#: rc.c:266 +msgid "magenta" +msgstr "ćçŽ " + +#: rc.c:267 +msgid "cyan" +msgstr "éèČ" + +#: rc.c:268 +msgid "white" +msgstr "çœèČ" + +#: rc.c:269 +msgid "terminal" +msgstr "ç”ç«Ż" + +#: rc.c:288 +msgid "none" +msgstr "çĄ" + +#: rc.c:289 +msgid "current URL" +msgstr "ç¶ć URL" + +#: rc.c:290 +msgid "link URL" +msgstr "éŁç” URL" + +#: rc.c:295 +msgid "simple" +msgstr "ç°Ąćź" + +#: rc.c:296 +msgid "use tag" +msgstr "äœżçšæšç±€" + +#: rc.c:297 +msgid "fontify" +msgstr "" + +#: rc.c:303 +msgid "A:relative to screen height" +msgstr "A:çžć°æŒèąćčé«ćșŠ" + +#: rc.c:304 +msgid "B:fixed speed" +msgstr "B:ćșćźéćșŠ" + +#: rc.c:311 +msgid "unspecified" +msgstr "æȘæćź" + +#: rc.c:312 +msgid "inet inet6" +msgstr "" + +#: rc.c:313 +msgid "inet6 inet" +msgstr "" + +#: rc.c:314 +msgid "inet only" +msgstr "ć inet" + +#: rc.c:315 +msgid "inet6 only" +msgstr "ć inet6" + +#: rc.c:322 +msgid "discard" +msgstr "äžæŁ" + +#: rc.c:324 +msgid "accept" +msgstr "æ„ć" + +#: rc.c:326 +msgid "ask" +msgstr "è©ąć" + +#: rc.c:333 +msgid "use internal mailer instead" +msgstr "äœżçšć §ć»șé”件ćłéćš" + +#: rc.c:335 +msgid "ignore options and use only the address" +msgstr "ćżœç„éžé èćȘäœżçšć°ć" + +#: rc.c:336 +msgid "use full mailto URL" +msgstr "äœżçšæŽć mailto URL" + +#: rc.c:345 +msgid "OFF" +msgstr "é" + +#: rc.c:346 +msgid "Only ISO 2022" +msgstr "ć ISO 2022" + +#: rc.c:347 +msgid "ON" +msgstr "é" + +#: rc.c:353 +msgid "ASCII" +msgstr "ASCII" + +#: rc.c:354 +msgid "charset specific" +msgstr "ć珊éçčćź" + +#: rc.c:355 +msgid "DEC special graphics" +msgstr "DEC çčæźćœ±è±Ą" + +#: rc.c:722 +msgid "Display Settings" +msgstr "饯ç€șèšćź" + +#: rc.c:724 +msgid "Color Settings" +msgstr "éĄèČèšćź" + +#: rc.c:726 +msgid "Miscellaneous Settings" +msgstr "éé èšćź" + +#: rc.c:727 +msgid "Directory Settings" +msgstr "çźéèšćź" + +#: rc.c:728 +msgid "External Program Settings" +msgstr "ć€éšçšćŒèšćź" + +#: rc.c:729 +msgid "Network Settings" +msgstr "ç¶Čè·Żèšćź" + +#: rc.c:730 +msgid "Proxy Settings" +msgstr "代çèšćź" + +#: rc.c:732 +msgid "SSL Settings" +msgstr "SSL èšćź" + +#: rc.c:735 +msgid "Cookie Settings" +msgstr "Cookie èšćź" + +#: rc.c:738 +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:1220 +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..0d8beb5 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); @@ -723,6 +749,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 +814,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..0cd7634 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") @@ -146,6 +149,7 @@ static int OptionEncode = FALSE; #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 +394,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, @@ -619,6 +625,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 +779,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 +837,7 @@ void show_params(FILE * fp) { int i, j, l; - char *t = NULL; + const char *t = ""; char *cmt; #ifdef USE_M17N @@ -1173,6 +1181,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 +1209,7 @@ sync_with_option(void) #endif loadPasswd(); loadPreForm(); + loadSiteconf(); if (AcceptLang == NULL || *AcceptLang == '\0') { /* TRANSLATORS: @@ -1556,3 +1567,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..5675d09 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) { diff --git a/scripts/w3mhelp.cgi.in b/scripts/w3mhelp.cgi.in index b2fca8f..31c0049 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; } } 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..d346312 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:!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 = NoSendReferer || (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) @@ -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/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/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..7b6f23b 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,67 @@ 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) { +#endif if (fb_cmap_get(fbfp, cmap)) { fprintf(stderr, "Can't get color map.\n"); fb_cmap_destroy(cmap); @@ -111,12 +215,20 @@ 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 || vscinfo.bits_per_pixel == 16 || 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"); @@ -147,7 +259,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 +375,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 +460,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 +473,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 +501,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 +520,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 +544,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 +587,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 +621,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 +680,213 @@ 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); +#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); +#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); +#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); +#endif +#if defined(__linux__) if (!cmap->transp) { +#elif defined(__FreeBSD__) + if (!cmap->transparent) { +#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 +894,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 +955,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 +972,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 +1014,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 +1024,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 +1041,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;